Flow Youtube Chat

Youtubeのチャットをニコニコ風に画面上へ流す(再アップ) Make youtube chats move in danmaku-style.

当前为 2023-04-03 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name Flow Youtube Chat
// @description Youtubeのチャットをニコニコ風に画面上へ流す(再アップ) Make youtube chats move in danmaku-style.
// @version 1.15.21
// @match https://www.youtube.com/*
// @grant GM.setValue
// @grant GM.getValue
// @grant GM.deleteValue
// @grant GM.listValues
// @grant GM.setClipboard
// @license AGPL-3.0-or-later
// @namespace FlowYoutubeChatScript
// @noframes
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert2.all.min.js#sha384-/Wx1NuqlgALfa1Do1U6Mer7quEDHOo8REf/0izoIrV8Y3Z/gtEHQc01STCEMM1LZ
// @require https://unpkg.com/[email protected]/dist/loglevel.min.js#sha384-xnEzWQtTztbu/yV2BtSvqqZGP52iLXbnb4NJ59OYT0ZDo1fGaKCR6QBxjyRuNFJ8
// @require https://unpkg.com/[email protected]/dist/bundles/rxjs.umd.min.js#sha384-loWwI45AmzSZ93ze6KW4+6eZVsQT8PriLOVCZGZstdycw5uylV3xKkHLQh53ui6b
// @require https://unpkg.com/[email protected]/mithril.min.js#sha384-60kek02kUAH+DNSgj7HCtrpcirTroG3uWnDpsdvoAl2Z9Xe3GdpXDSy4ouNMHoBZ
// @require https://cdn.jsdelivr.net/npm/[email protected]/src/check-types.min.js#sha384-KGnImnhVjA5llfqKEbjBiY+1Mp6oa+NvW/TEY1XTPAKWNgrAwa3Qvn//MXL07wBM
// @require https://cdn.jsdelivr.net/npm/[email protected]/index.min.js#sha384-Q/uiWfFlwn9XjOpL49VpFKn01EkScmaC3hh1prAn7S++WoZgXRrrjQvZ7cI7C7Zn
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/astring.min.js#sha384-5Ucbdr4B4nO60a/3Lv4z9adjzcDkpVPH19acFTr320dXMe+cKE5y5zV+gycjJO8N
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/iife/jsep.iife.min.js#sha384-6PGvkKayYZDccXp2sQ43aTf44oUNudO3L940VBGQYHfhg3YZEgSEbuannHJk7NBe
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/hash-it.min.js#sha384-biRMep0zr/5fw/hIdnBIb56UHRgiIyhAagZrngd9dSxxQ9aDFMP0hbYR8PEj5lVu
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/micro-memoize.min.js#sha384-W1hqD6GTNQ97ZqDR18GhfU1G9qcDLs4sL7BPYND2ncvGNNiLUmUp37Ph+hzm+OPt
// @require https://cdn.jsdelivr.net/npm/[email protected]/libs/lz-string.min.js#sha384-0d+Gr7vM4Drod8E3hXKgciWJSWbjD/opKLLygI9ktiWbuvlDwQLzU46wJ9s5gsp7
// @run-at document-end
// ==/UserScript==

/* jshint esversion: 6 */

;(() => {
	var __webpack_modules__ = {
			661: module => {
				module.exports = !1
			},
			204: module => {
				"use strict"
				module.exports = function equal(a, b) {
					if (a === b) return !0
					if (a && b && "object" == typeof a && "object" == typeof b) {
						if (a.constructor !== b.constructor) return !1
						var length, i, keys
						if (Array.isArray(a)) {
							if ((length = a.length) != b.length) return !1
							for (i = length; 0 != i--; ) if (!equal(a[i], b[i])) return !1
							return !0
						}
						if (a.constructor === RegExp)
							return a.source === b.source && a.flags === b.flags
						if (a.valueOf !== Object.prototype.valueOf)
							return a.valueOf() === b.valueOf()
						if (a.toString !== Object.prototype.toString)
							return a.toString() === b.toString()
						if (
							(length = (keys = Object.keys(a)).length) !==
							Object.keys(b).length
						)
							return !1
						for (i = length; 0 != i--; )
							if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return !1
						for (i = length; 0 != i--; ) {
							var key = keys[i]
							if (!equal(a[key], b[key])) return !1
						}
						return !0
					}
					return a != a && b != b
				}
			},
			52: (__unused_webpack_module, exports) => {
				"use strict"
				exports.Xd = exports.hu = exports.tE = void 0
				const expectedToBe = type => `expected to be ${type}`
				exports.tE = (condition, message) => {
					if (!condition) throw new TypeError(message)
				}
				let baseAssert = exports.tE
				exports.hu = (condition, message) => baseAssert(condition, message)
				exports.Xd = function (
					input,
					message = expectedToBe("neither null nor undefined")
				) {
					;(0, exports.hu)(null != input, message)
				}
			},
			694: module => {
				module.exports = (function (e) {
					var r = {}
					function t(n) {
						if (r[n]) return r[n].exports
						var a = (r[n] = { i: n, l: !1, exports: {} })
						return e[n].call(a.exports, a, a.exports, t), (a.l = !0), a.exports
					}
					return (
						(t.m = e),
						(t.c = r),
						(t.d = function (e, r, n) {
							t.o(e, r) ||
								Object.defineProperty(e, r, { enumerable: !0, get: n })
						}),
						(t.r = function (e) {
							"undefined" != typeof Symbol &&
								Symbol.toStringTag &&
								Object.defineProperty(e, Symbol.toStringTag, {
									value: "Module",
								}),
								Object.defineProperty(e, "__esModule", { value: !0 })
						}),
						(t.t = function (e, r) {
							if ((1 & r && (e = t(e)), 8 & r)) return e
							if (4 & r && "object" == typeof e && e && e.__esModule) return e
							var n = Object.create(null)
							if (
								(t.r(n),
								Object.defineProperty(n, "default", {
									enumerable: !0,
									value: e,
								}),
								2 & r && "string" != typeof e)
							)
								for (var a in e)
									t.d(
										n,
										a,
										function (r) {
											return e[r]
										}.bind(null, a)
									)
							return n
						}),
						(t.n = function (e) {
							var r =
								e && e.__esModule
									? function () {
											return e.default
									  }
									: function () {
											return e
									  }
							return t.d(r, "a", r), r
						}),
						(t.o = function (e, r) {
							return Object.prototype.hasOwnProperty.call(e, r)
						}),
						(t.p = ""),
						t((t.s = 0))
					)
				})([
					function (e, r, t) {
						"use strict"
						t.r(r),
							t.d(r, "validateHTMLColorName", function () {
								return l
							}),
							t.d(r, "validateHTMLColorSpecialName", function () {
								return i
							}),
							t.d(r, "validateHTMLColorHex", function () {
								return u
							}),
							t.d(r, "validateHTMLColorRgb", function () {
								return g
							}),
							t.d(r, "validateHTMLColorHsl", function () {
								return y
							}),
							t.d(r, "validateHTMLColorHwb", function () {
								return L
							}),
							t.d(r, "validateHTMLColorLab", function () {
								return S
							}),
							t.d(r, "validateHTMLColorLch", function () {
								return m
							}),
							t.d(r, "validateHTMLColor", function () {
								return G
							})
						const n = e => e && "string" == typeof e,
							a = [
								"AliceBlue",
								"AntiqueWhite",
								"Aqua",
								"Aquamarine",
								"Azure",
								"Beige",
								"Bisque",
								"Black",
								"BlanchedAlmond",
								"Blue",
								"BlueViolet",
								"Brown",
								"BurlyWood",
								"CadetBlue",
								"Chartreuse",
								"Chocolate",
								"Coral",
								"CornflowerBlue",
								"Cornsilk",
								"Crimson",
								"Cyan",
								"DarkBlue",
								"DarkCyan",
								"DarkGoldenrod",
								"DarkGray",
								"DarkGrey",
								"DarkGreen",
								"DarkKhaki",
								"DarkMagenta",
								"DarkOliveGreen",
								"DarkOrange",
								"DarkOrchid",
								"DarkRed",
								"DarkSalmon",
								"DarkSeaGreen",
								"DarkSlateBlue",
								"DarkSlateGray",
								"DarkSlateGrey",
								"DarkTurquoise",
								"DarkViolet",
								"DeepPink",
								"DeepSkyBlue",
								"DimGray",
								"DimGrey",
								"DodgerBlue",
								"FireBrick",
								"FloralWhite",
								"ForestGreen",
								"Fuchsia",
								"Gainsboro",
								"GhostWhite",
								"Gold",
								"Goldenrod",
								"Gray",
								"Grey",
								"Green",
								"GreenYellow",
								"HoneyDew",
								"HotPink",
								"IndianRed",
								"Indigo",
								"Ivory",
								"Khaki",
								"Lavender",
								"LavenderBlush",
								"LawnGreen",
								"LemonChiffon",
								"LightBlue",
								"LightCoral",
								"LightCyan",
								"LightGoldenrodYellow",
								"LightGray",
								"LightGrey",
								"LightGreen",
								"LightPink",
								"LightSalmon",
								"LightSalmon",
								"LightSeaGreen",
								"LightSkyBlue",
								"LightSlateGray",
								"LightSlateGrey",
								"LightSteelBlue",
								"LightYellow",
								"Lime",
								"LimeGreen",
								"Linen",
								"Magenta",
								"Maroon",
								"MediumAquamarine",
								"MediumBlue",
								"MediumOrchid",
								"MediumPurple",
								"MediumSeaGreen",
								"MediumSlateBlue",
								"MediumSlateBlue",
								"MediumSpringGreen",
								"MediumTurquoise",
								"MediumVioletRed",
								"MidnightBlue",
								"MintCream",
								"MistyRose",
								"Moccasin",
								"NavajoWhite",
								"Navy",
								"OldLace",
								"Olive",
								"OliveDrab",
								"Orange",
								"OrangeRed",
								"Orchid",
								"PaleGoldenrod",
								"PaleGreen",
								"PaleTurquoise",
								"PaleVioletRed",
								"PapayaWhip",
								"PeachPuff",
								"Peru",
								"Pink",
								"Plum",
								"PowderBlue",
								"Purple",
								"RebeccaPurple",
								"Red",
								"RosyBrown",
								"RoyalBlue",
								"SaddleBrown",
								"Salmon",
								"SandyBrown",
								"SeaGreen",
								"SeaShell",
								"Sienna",
								"Silver",
								"SkyBlue",
								"SlateBlue",
								"SlateGray",
								"SlateGrey",
								"Snow",
								"SpringGreen",
								"SteelBlue",
								"Tan",
								"Teal",
								"Thistle",
								"Tomato",
								"Turquoise",
								"Violet",
								"Wheat",
								"White",
								"WhiteSmoke",
								"Yellow",
								"YellowGreen",
							],
							o = ["currentColor", "inherit", "transparent"],
							l = e => {
								let r = !1
								return (
									n(e) &&
										a.map(
											t => (
												e.toLowerCase() === t.toLowerCase() && (r = !0), null
											)
										),
									r
								)
							},
							i = e => {
								let r = !1
								return (
									n(e) &&
										o.map(
											t => (
												e.toLowerCase() === t.toLowerCase() && (r = !0), null
											)
										),
									r
								)
							},
							u = e => {
								if (n(e)) {
									const r = /^#([\da-f]{3}){1,2}$|^#([\da-f]{4}){1,2}$/i
									return e && r.test(e)
								}
								return !1
							},
							d = "(([\\d]{0,5})((\\.([\\d]{1,5}))?))",
							s = `(${d}%)`,
							c = "(([0-9]|[1-9][0-9]|100)%)",
							f = `(${c}|(0?((\\.([\\d]{1,5}))?))|1)`,
							h = `([\\s]{0,5})\\)?)(([\\s]{0,5})(\\/?)([\\s]{1,5})(((${c}))|(0?((\\.([\\d]{1,5}))?))|1))?([\\s]{0,5})\\)`,
							$ =
								"(-?(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-5][0-9])((\\.([\\d]{1,5}))?)|360)(deg)?)",
							g = e => {
								if (n(e)) {
									const r = "([\\s]{0,5})([\\d]{1,5})%?([\\s]{0,5}),?",
										t = "((([\\s]{0,5}),?([\\s]{0,5}))|(([\\s]{1,5})))",
										n = new RegExp(
											`^(rgb)a?\\(${r}${t}${r}${t}${r}${t}((\\/?([\\s]{0,5})(0?\\.?([\\d]{1,5})%?([\\s]{0,5}))?|1|0))?\\)$`
										)
									return e && n.test(e)
								}
								return !1
							},
							y = e => {
								if (n(e)) {
									const r = new RegExp(
										`^(hsl)a?\\((([\\s]{0,5})(${$}|(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-9][0-9]|400)grad)|((([0-5])?\\.([\\d]{1,5})|6\\.([0-9]|1[0-9]|2[0-8])|[0-6])rad)|((0?((\\.([\\d]{1,5}))?)|1)turn))((([\\s]{0,5}),([\\s]{0,5}))|(([\\s]{1,5}))))(([\\s]{0,5})(0|${c})((([\\s]{0,5}),([\\s]{0,5}))|(([\\s]{1,5}))))(([\\s]{0,5})(0|${c})([\\s]{0,5})\\)?)(([\\s]{0,5})(\\/?|,?)([\\s]{0,5})(((${c}))|(0?((\\.([\\d]{1,5}))?))|1))?\\)$`
									)
									return e && r.test(e)
								}
								return !1
							},
							L = e => {
								if (n(e)) {
									const r = new RegExp(
										`^(hwb\\(([\\s]{0,5})${$}([\\s]{1,5}))((0|${c})([\\s]{1,5}))((0|${c})${h}$`
									)
									return e && r.test(e)
								}
								return !1
							},
							S = e => {
								if (n(e)) {
									const r =
											"(-?(([0-9]|[1-9][0-9]|1[0-5][0-9])((\\.([\\d]{1,5}))?)?|160))",
										t = new RegExp(
											`^(lab\\(([\\s]{0,5})${s}([\\s]{1,5})${r}([\\s]{1,5})${r}${h}$`
										)
									return e && t.test(e)
								}
								return !1
							},
							m = e => {
								if (n(e)) {
									const o = new RegExp(
										`^lch\\((([\\s]{0,5})((([0-9]|[1-9][0-9])?((\\.([\\d]{1,5}))?)|100)(%)?)([\\s]{1,5})${
											"" + d
										}([\\s]{1,5})((${$})|(0|${f})|(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-9][0-9]|3[0-5][0-9])((\\.([\\d]{1,5}))?)|360))([\\s]{0,5})((\\/([\\s]{0,5})${f}))?)\\)$`
									)
									return e && o.test(e)
								}
								return !1
							},
							G = e => !!((e && u(e)) || g(e) || y(e) || L(e) || S(e) || m(e))
						r.default = e =>
							!!(
								(e && u(e)) ||
								l(e) ||
								i(e) ||
								g(e) ||
								y(e) ||
								L(e) ||
								S(e) ||
								m(e)
							)
					},
				])
			},
			938: () => {},
		},
		__webpack_module_cache__ = {}
	function __webpack_require__(moduleId) {
		var cachedModule = __webpack_module_cache__[moduleId]
		if (void 0 !== cachedModule) return cachedModule.exports
		var module = (__webpack_module_cache__[moduleId] = { exports: {} })
		__webpack_modules__[moduleId](module, module.exports, __webpack_require__)
		return module.exports
	}
	__webpack_require__.n = module => {
		var getter =
			module && module.__esModule ? () => module.default : () => module
		__webpack_require__.d(getter, { a: getter })
		return getter
	}
	__webpack_require__.d = (exports, definition) => {
		for (var key in definition)
			__webpack_require__.o(definition, key) &&
				!__webpack_require__.o(exports, key) &&
				Object.defineProperty(exports, key, {
					enumerable: !0,
					get: definition[key],
				})
	}
	__webpack_require__.o = (obj, prop) =>
		Object.prototype.hasOwnProperty.call(obj, prop)
	;(() => {
		"use strict"
		const Function_dual = (arity, body) => {
				const isDataFirst =
					"number" == typeof arity ? args => args.length >= arity : arity
				return function () {
					return isDataFirst(arguments)
						? body.apply(this, arguments)
						: self => body(self, ...arguments)
				}
			},
			apply = a => self => self(a),
			Function_identity = a => a,
			constant = value => () => value,
			Function_constTrue = constant(!0),
			Function_constFalse = constant(!1),
			Function_constUndefined = constant(void 0),
			Function_constVoid = Function_constUndefined,
			flip =
				f =>
				(...b) =>
				(...a) =>
					f(...a)(...b)
		function flow(ab, bc, cd, de, ef, fg, gh, hi, ij) {
			switch (arguments.length) {
				case 1:
					return ab
				case 2:
					return function () {
						return bc(ab.apply(this, arguments))
					}
				case 3:
					return function () {
						return cd(bc(ab.apply(this, arguments)))
					}
				case 4:
					return function () {
						return de(cd(bc(ab.apply(this, arguments))))
					}
				case 5:
					return function () {
						return ef(de(cd(bc(ab.apply(this, arguments)))))
					}
				case 6:
					return function () {
						return fg(ef(de(cd(bc(ab.apply(this, arguments))))))
					}
				case 7:
					return function () {
						return gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))
					}
				case 8:
					return function () {
						return hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))))
					}
				case 9:
					return function () {
						return ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))))
					}
			}
		}
		function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {
			switch (arguments.length) {
				case 1:
					return a
				case 2:
					return ab(a)
				case 3:
					return bc(ab(a))
				case 4:
					return cd(bc(ab(a)))
				case 5:
					return de(cd(bc(ab(a))))
				case 6:
					return ef(de(cd(bc(ab(a)))))
				case 7:
					return fg(ef(de(cd(bc(ab(a))))))
				case 8:
					return gh(fg(ef(de(cd(bc(ab(a)))))))
				case 9:
					return hi(gh(fg(ef(de(cd(bc(ab(a))))))))
				default: {
					let ret = arguments[0]
					for (let i = 1; i < arguments.length; i++) ret = arguments[i](ret)
					return ret
				}
			}
		}
		const imap = map => Function_dual(3, (self, to, _) => map(self, to)),
			let_ = F =>
				Function_dual(3, (self, name, f) =>
					F.map(self, a => Object.assign({}, a, { [name]: f(a) }))
				),
			letDiscard = F =>
				Function_dual(3, (self, name, b) =>
					F.map(self, a => Object.assign({}, a, { [name]: b }))
				),
			globalStoreId = Symbol.for("@effect/data/Global/globalStoreId")
		globalStoreId in globalThis || (globalThis[globalStoreId] = new Map())
		const globalStore = globalThis[globalStoreId],
			globalValue = (id, compute) => {
				globalStore.has(id) || globalStore.set(id, compute())
				return globalStore.get(id)
			}
		function isNothing(value) {
			return null == value
		}
		class PCGRandom {
			constructor(seedHi, seedLo, incHi, incLo) {
				if (isNothing(seedLo) && isNothing(seedHi)) {
					seedLo = (4294967295 * Math.random()) >>> 0
					seedHi = 0
				} else if (isNothing(seedLo)) {
					seedLo = seedHi
					seedHi = 0
				}
				if (isNothing(incLo) && isNothing(incHi)) {
					incLo = this._state ? this._state[3] : 4150755663
					incHi = this._state ? this._state[2] : 335903614
				} else if (isNothing(incLo)) {
					incLo = incHi
					incHi = 0
				}
				this._state = new Int32Array([
					0,
					0,
					incHi >>> 0,
					(1 | (incLo || 0)) >>> 0,
				])
				this._next()
				add64(
					this._state,
					this._state[0],
					this._state[1],
					seedHi >>> 0,
					seedLo >>> 0
				)
				this._next()
				return this
			}
			getState() {
				return [this._state[0], this._state[1], this._state[2], this._state[3]]
			}
			setState(state) {
				this._state[0] = state[0]
				this._state[1] = state[1]
				this._state[2] = state[2]
				this._state[3] = 1 | state[3]
			}
			integer(max) {
				if (!max) return this._next()
				if (0 == ((max >>>= 0) & (max - 1))) return this._next() & (max - 1)
				let num = 0
				const skew = (-max >>> 0) % max >>> 0
				for (num = this._next(); num < skew; num = this._next());
				return num % max
			}
			number() {
				return (
					(1 * (67108863 & this._next()) * 134217728 +
						1 * (134217727 & this._next())) /
					9007199254740992
				)
			}
			_next() {
				const oldHi = this._state[0] >>> 0,
					oldLo = this._state[1] >>> 0
				!(function (out, aHi, aLo, bHi, bLo) {
					let c1 = (32557 * (aLo >>> 16)) >>> 0,
						c0 = (19605 * (65535 & aLo)) >>> 0,
						lo = (32557 * (65535 & aLo)) >>> 0,
						hi = (19605 * (aLo >>> 16) + ((c0 >>> 16) + (c1 >>> 16))) >>> 0
					c0 = (c0 << 16) >>> 0
					lo = (lo + c0) >>> 0
					lo >>> 0 < c0 >>> 0 && (hi = (hi + 1) >>> 0)
					c1 = (c1 << 16) >>> 0
					lo = (lo + c1) >>> 0
					lo >>> 0 < c1 >>> 0 && (hi = (hi + 1) >>> 0)
					hi = (hi + Math.imul(aLo, 1481765933)) >>> 0
					hi = (hi + Math.imul(aHi, bLo)) >>> 0
					out[0] = hi
					out[1] = lo
				})(this._state, oldHi, oldLo, 0, 1284865837)
				add64(
					this._state,
					this._state[0],
					this._state[1],
					this._state[2],
					this._state[3]
				)
				let xsHi = oldHi >>> 18,
					xsLo = ((oldLo >>> 18) | (oldHi << 14)) >>> 0
				xsHi = (xsHi ^ oldHi) >>> 0
				xsLo = (xsLo ^ oldLo) >>> 0
				const xorshifted = ((xsLo >>> 27) | (xsHi << 5)) >>> 0,
					rot = oldHi >>> 27
				return (
					((xorshifted >>> rot) |
						(xorshifted << (((-rot >>> 0) & 31) >>> 0))) >>>
					0
				)
			}
		}
		function add64(out, aHi, aLo, bHi, bLo) {
			let hi = (aHi + bHi) >>> 0
			const lo = (aLo + bLo) >>> 0
			lo >>> 0 < aLo >>> 0 && (hi = (hi + 1) | 0)
			out[0] = hi
			out[1] = lo
		}
		const randomHashCache = globalValue(
				Symbol.for("@effect/data/Hash/randomHashCache"),
				() => new WeakMap()
			),
			pcgr = globalValue(
				Symbol.for("@effect/data/Hash/pcgr"),
				() => new PCGRandom()
			),
			symbol = Symbol.for("@effect/data/Hash"),
			Hash_hash = self => {
				switch (typeof self) {
					case "number":
						return number(self)
					case "bigint":
						return string(self.toString(10))
					case "boolean":
					case "symbol":
						return string(String(self))
					case "string":
						return string(self)
					case "undefined":
						return string("undefined")
					case "function":
					case "object":
						return null === self
							? string("null")
							: isHash(self)
							? self[symbol]()
							: random(self)
					default:
						throw new Error("Bug in Equal.hashGeneric")
				}
			},
			random = self => {
				randomHashCache.has(self) ||
					randomHashCache.set(
						self,
						number(pcgr.integer(Number.MAX_SAFE_INTEGER))
					)
				return randomHashCache.get(self)
			},
			combine = b => self => (53 * self) ^ b,
			optimize = n => (3221225471 & n) | ((n >>> 1) & 1073741824),
			isHash = u => "object" == typeof u && null !== u && symbol in u,
			number = n => {
				if (n != n || n === 1 / 0) return 0
				let h = 0 | n
				h !== n && (h ^= 4294967295 * n)
				for (; n > 4294967295; ) h ^= n /= 4294967295
				return optimize(n)
			},
			string = str => {
				let h = 5381,
					i = str.length
				for (; i; ) h = (33 * h) ^ str.charCodeAt(--i)
				return optimize(h)
			},
			array = arr => {
				let h = 6151
				for (let i = 0; i < arr.length; i++) h = combine(Hash_hash(arr[i]))(h)
				return optimize(h)
			},
			Equal_symbol = Symbol.for("@effect/data/Equal")
		function equals() {
			return 1 === arguments.length
				? self => compareBoth(self, arguments[0])
				: compareBoth(arguments[0], arguments[1])
		}
		function compareBoth(self, that) {
			if (self === that) return !0
			const selfType = typeof self
			return (
				selfType === typeof that &&
				!(
					("object" !== selfType && "function" !== selfType) ||
					null === self ||
					null === that ||
					!isEqual(self) ||
					!isEqual(that)
				) &&
				Hash_hash(self) === Hash_hash(that) &&
				self[Equal_symbol](that)
			)
		}
		const isEqual = u => "object" == typeof u && null !== u && Equal_symbol in u
		var _a
		const runtimeDebug = globalValue(
				Symbol.for("@effect/data/Debug/runtimeDebug"),
				() => ({
					reportUnhandled: !0,
					minumumLogLevel: "Info",
					traceStackLimit: 5,
					tracingEnabled: !0,
					parseStack: error => {
						const stack = error.stack
						if (stack) {
							const lines = stack.split("\n")
							let starts = 0
							for (let i = 0; i < lines.length; i++)
								lines[i].startsWith("Error") && (starts = i)
							const frames = []
							for (let i = starts + 1; i < lines.length; i++)
								if (lines[i].includes("at")) {
									const blocks = lines[i]
											.split(" ")
											.filter(i => i.length > 0 && "at" !== i),
										name =
											2 !== blocks.length || blocks[0].includes("<anonymous>")
												? void 0
												: blocks[0],
										matchFrame = (
											2 === blocks.length ? blocks[1] : blocks[0]
										)?.match(/\(?(.*):(\d+):(\d+)/)
									matchFrame
										? frames.push({
												name,
												fileName: matchFrame[1],
												line: Number.parseInt(matchFrame[2]),
												column: Number.parseInt(matchFrame[3]),
										  })
										: frames.push(void 0)
								} else frames.push(void 0)
							return frames
						}
						return []
					},
					filterStackFrame: _ =>
						null != _ && !_.fileName.match(/\/internal_effect_untraced/),
				})
			),
			sourceLocationProto = Object.setPrototypeOf(
				{
					toFrame() {
						if ("parsed" in this) return this.parsed
						const stack = runtimeDebug.parseStack(this)
						stack && stack.length >= 2 && stack[0] && stack[1]
							? (this.parsed = {
									...stack[this.depth - 1],
									name: stack[this.depth - 2]?.name,
							  })
							: (this.parsed = void 0)
						return this.parsed
					},
				},
				Error.prototype
			),
			sourceLocation = error => {
				error.depth = Error.stackTraceLimit
				Object.setPrototypeOf(error, sourceLocationProto)
				return error
			},
			bodyWithTrace = body => {
				if (!runtimeDebug.tracingEnabled) return body(void 0, restoreOff)
				runtimeDebug.tracingEnabled = !1
				try {
					const limit = Error.stackTraceLimit
					Error.stackTraceLimit = 3
					const source = sourceLocation(new Error())
					Error.stackTraceLimit = limit
					return body(source, restoreOn)
				} finally {
					runtimeDebug.tracingEnabled = !0
				}
			},
			methodWithTrace = body =>
				function () {
					if (!runtimeDebug.tracingEnabled)
						return body(void 0, restoreOff).apply(this, arguments)
					runtimeDebug.tracingEnabled = !1
					try {
						const limit = Error.stackTraceLimit
						Error.stackTraceLimit = 2
						const error = sourceLocation(new Error())
						Error.stackTraceLimit = limit
						return body(error, restoreOn).apply(this, arguments)
					} finally {
						runtimeDebug.tracingEnabled = !0
					}
				},
			dualWithTrace = (dfLen, body) => {
				const isDataFirst =
					"number" == typeof dfLen ? args => args.length === dfLen : dfLen
				return function () {
					if (!runtimeDebug.tracingEnabled) {
						const f = body(void 0, restoreOff)
						return isDataFirst(arguments)
							? untraced(() => f.apply(this, arguments))
							: self => untraced(() => f(self, ...arguments))
					}
					runtimeDebug.tracingEnabled = !1
					try {
						const limit = Error.stackTraceLimit
						Error.stackTraceLimit = 2
						const source = sourceLocation(new Error())
						Error.stackTraceLimit = limit
						const f = body(source, restoreOn)
						return isDataFirst(arguments)
							? untraced(() => f.apply(this, arguments))
							: self => untraced(() => f(self, ...arguments))
					} finally {
						runtimeDebug.tracingEnabled = !0
					}
				}
			},
			untraced = body => {
				if (!runtimeDebug.tracingEnabled) return body(restoreOff)
				runtimeDebug.tracingEnabled = !1
				try {
					return body(restoreOn)
				} finally {
					runtimeDebug.tracingEnabled = !0
				}
			},
			untracedDual = (dfLen, body) =>
				function () {
					if (!runtimeDebug.tracingEnabled) {
						const f = body(restoreOff)
						return arguments.length === dfLen
							? untraced(() => f.apply(this, arguments))
							: self => untraced(() => f(self, ...arguments))
					}
					runtimeDebug.tracingEnabled = !1
					try {
						const f = body(restoreOn)
						return arguments.length === dfLen
							? untraced(() => f.apply(this, arguments))
							: self => untraced(() => f(self, ...arguments))
					} finally {
						runtimeDebug.tracingEnabled = !0
					}
				},
			untracedMethod = body =>
				function () {
					if (!runtimeDebug.tracingEnabled)
						return untraced(() => body(restoreOff).apply(this, arguments))
					runtimeDebug.tracingEnabled = !1
					try {
						return untraced(() => body(restoreOn).apply(this, arguments))
					} finally {
						runtimeDebug.tracingEnabled = !0
					}
				},
			restoreOn = body =>
				function () {
					if (runtimeDebug.tracingEnabled) return body.apply(this, arguments)
					runtimeDebug.tracingEnabled = !0
					try {
						return body.apply(this, arguments)
					} finally {
						runtimeDebug.tracingEnabled = !1
					}
				},
			restoreOff = body =>
				function () {
					if (!runtimeDebug.tracingEnabled) return body.apply(this, arguments)
					runtimeDebug.tracingEnabled = !1
					try {
						return body.apply(this, arguments)
					} finally {
						runtimeDebug.tracingEnabled = !0
					}
				},
			EffectTypeId = Symbol.for("@effect/io/Effect")
		class TracedPrimitive {
			[((_a = EffectTypeId), Equal_symbol)](that) {
				return this === that
			}
			[symbol]() {
				return random(this)
			}
			constructor(i0, trace) {
				this.i0 = i0
				this.trace = trace
				this._tag = "Traced"
				this.i1 = void 0
				this.i2 = void 0
				this[_a] = effectVariance
			}
			traced(trace) {
				return trace ? new TracedPrimitive(this, trace) : this
			}
		}
		const effectVariance = { _R: _ => _, _E: _ => _, _A: _ => _ },
			makeTraced = (self, source) => new TracedPrimitive(self, source)
		var Option_a, _b
		const Option_effectVariance = { _R: _ => _, _E: _ => _, _A: _ => _ },
			Option_EffectTypeId = Symbol.for("@effect/io/Effect")
		class Some {
			[((Option_a = Option_EffectTypeId), Equal_symbol)](that) {
				return isOption(that) && isSome(that) && equals(that.i0, this.i0)
			}
			[symbol]() {
				return Hash_hash(this.i0)
			}
			toJSON() {
				return { _tag: this._tag, value: this.i0 }
			}
			get value() {
				return this.i0
			}
			constructor(i0) {
				this.i0 = i0
				this._tag = "Some"
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[Option_a] = Option_effectVariance
			}
			traced(trace) {
				return trace ? makeTraced(this, trace) : this
			}
		}
		class None {
			constructor() {
				this._tag = "None"
				this.i0 = void 0
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[_b] = Option_effectVariance
			}
			[((_b = Option_EffectTypeId), Equal_symbol)](that) {
				return isOption(that) && isNone(that)
			}
			[symbol]() {
				return Hash_hash(this._tag)
			}
			toJSON() {
				return { _tag: this._tag }
			}
			traced(trace) {
				return trace ? makeTraced(this, trace) : this
			}
		}
		const isOption = input =>
				"object" == typeof input &&
				null != input &&
				"_tag" in input &&
				("None" === input._tag || "Some" === input._tag) &&
				isEqual(input),
			isNone = fa => "None" === fa._tag,
			isSome = fa => "Some" === fa._tag,
			none = new None(),
			some = a => new Some(a)
		var Either_a, Either_b
		const Either_effectVariance = { _R: _ => _, _E: _ => _, _A: _ => _ },
			Either_EffectTypeId = Symbol.for("@effect/io/Effect")
		class Right {
			[((Either_a = Either_EffectTypeId), Equal_symbol)](that) {
				return isEither(that) && isRight(that) && equals(that.i0, this.i0)
			}
			[symbol]() {
				return Hash_hash(this.i0)
			}
			get right() {
				return this.i0
			}
			constructor(i0) {
				this.i0 = i0
				this._tag = "Right"
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[Either_a] = Either_effectVariance
			}
			toJSON() {
				return { _tag: this._tag, right: this.i0 }
			}
			traced(trace) {
				return trace ? makeTraced(this, trace) : this
			}
		}
		class Left {
			[((Either_b = Either_EffectTypeId), Equal_symbol)](that) {
				return isEither(that) && isLeft(that) && equals(that.i0, this.i0)
			}
			[symbol]() {
				return Hash_hash(this.i0)
			}
			get left() {
				return this.i0
			}
			constructor(i0) {
				this.i0 = i0
				this._tag = "Left"
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[Either_b] = Either_effectVariance
			}
			toJSON() {
				return { _tag: this._tag, left: this.i0 }
			}
			traced(trace) {
				return trace ? makeTraced(this, trace) : this
			}
		}
		const isEither = input =>
				"object" == typeof input &&
				null != input &&
				"_tag" in input &&
				("Left" === input._tag || "Right" === input._tag) &&
				isEqual(input),
			isLeft = ma => "Left" === ma._tag,
			isRight = ma => "Right" === ma._tag,
			not = self => a => !self(a),
			make = compare => ({
				compare: (self, that) => (self === that ? 0 : compare(self, that)),
			}),
			Order_number = make((self, that) => (self < that ? -1 : 1)),
			Order_contramap = Function_dual(2, (self, f) =>
				make((b1, b2) => self.compare(f(b1), f(b2)))
			),
			greaterThanOrEqualTo = O =>
				Function_dual(2, (self, that) => -1 !== O.compare(self, that)),
			Equivalence_make =
				(Order_number.compare,
				isEquivalent => (self, that) =>
					self === that || isEquivalent(self, that)),
			isStrictEquivalent = (x, y) => x === y,
			strict = () => isStrictEquivalent,
			Equivalence_string = strict(),
			Semigroup_make = (
				combine,
				combineMany = (self, collection) => {
					return ((b = self),
					(f = combine),
					function (iterable) {
						if (Array.isArray(iterable)) return iterable.reduce(f, b)
						let result = b
						for (const n of iterable) result = f(result, n)
						return result
					})(collection)
					var b, f
				}
			) => ({ combine, combineMany }),
			Semigroup_string = Semigroup_make((self, that) => self + that),
			numberSum = Semigroup_make((self, that) => self + that),
			numberMultiply = Semigroup_make(
				(self, that) => self * that,
				(self, collection) => {
					if (0 === self) return 0
					let out = self
					for (const n of collection) {
						if (0 === n) return 0
						out *= n
					}
					return out
				}
			),
			booleanEvery = Semigroup_make(
				(self, that) => self && that,
				(self, collection) => {
					if (!1 === self) return !1
					for (const b of collection) if (!1 === b) return !1
					return !0
				}
			),
			booleanSome = Semigroup_make(
				(self, that) => self || that,
				(self, collection) => {
					if (!0 === self) return !0
					for (const b of collection) if (!0 === b) return !0
					return !1
				}
			),
			intercalate = Function_dual(2, (S, separator) =>
				Semigroup_make((self, that) => S.combineMany(self, [separator, that]))
			),
			fromSemigroup = (S, empty) => ({
				combine: S.combine,
				combineMany: S.combineMany,
				empty,
				combineAll: collection => S.combineMany(empty, collection),
			}),
			Monoid_string = fromSemigroup(Semigroup_string, ""),
			Monoid_numberSum = fromSemigroup(numberSum, 0),
			Monoid_numberMultiply = fromSemigroup(numberMultiply, 1),
			Monoid_booleanEvery = fromSemigroup(booleanEvery, !0),
			Monoid_booleanSome = fromSemigroup(booleanSome, !1),
			Order = (numberSum.combine, numberMultiply.combine, Order_number),
			MonoidMultiply = Monoid_numberMultiply,
			filter =
				(Monoid_numberSum.combineAll,
				MonoidMultiply.combineAll,
				Filterable =>
					Function_dual(2, (self, predicate) =>
						Filterable.filterMap(self, b => (predicate(b) ? some(b) : none))
					)),
			Option_none = () => none,
			Option_some = some,
			Option_isNone = isNone,
			Option_isSome = isSome,
			match = Function_dual(3, (self, onNone, onSome) =>
				Option_isNone(self) ? onNone() : onSome(self.value)
			),
			getOrElse = Function_dual(2, (self, onNone) =>
				Option_isNone(self) ? onNone() : self.value
			),
			orElse = Function_dual(2, (self, that) =>
				Option_isNone(self) ? that() : self
			),
			fromNullable = nullableValue =>
				null == nullableValue ? Option_none() : Option_some(nullableValue),
			getOrUndefined = getOrElse(Function_constUndefined),
			getOrThrow = Function_dual(2, (self, onNone) => {
				if (Option_isSome(self)) return self.value
				throw onNone()
			})(() => new Error("getOrThrow called on a None")),
			Option_map = Function_dual(2, (self, f) =>
				Option_isNone(self) ? Option_none() : Option_some(f(self.value))
			),
			flatMap = Function_dual(2, (self, f) =>
				Option_isNone(self) ? Option_none() : f(self.value)
			),
			flatMapNullable = Function_dual(2, (self, f) =>
				Option_isNone(self) ? Option_none() : fromNullable(f(self.value))
			),
			Option_filter = filter({
				partitionMap: Function_dual(2, (self, f) => {
					if (Option_isNone(self)) return [Option_none(), Option_none()]
					const e = f(self.value)
					return isLeft(e)
						? [Option_some(e.left), Option_none()]
						: [Option_none(), Option_some(e.right)]
				}),
				filterMap: Function_dual(2, (self, f) =>
					Option_isNone(self) ? Option_none() : f(self.value)
				),
			}),
			liftPredicate = predicate => b =>
				predicate(b) ? Option_some(b) : Option_none(),
			contains = isEquivalent =>
				Function_dual(
					2,
					(self, a) => !Option_isNone(self) && isEquivalent(self.value, a)
				),
			exists = Function_dual(
				2,
				(self, predicate) => !Option_isNone(self) && predicate(self.value)
			),
			Either_right = a => new Right(a),
			Either_left = e => new Left(e),
			Either_isLeft = isLeft,
			Either_isRight = isRight,
			merge = Function_dual(3, (self, onLeft, onRight) =>
				Either_isLeft(self) ? onLeft(self.left) : onRight(self.right)
			)(Function_identity, Function_identity),
			isNonEmptyArray = self => self.length > 0,
			String_Equivalence = Equivalence_string,
			Semigroup = Semigroup_string,
			Monoid = Monoid_string,
			slice =
				(Semigroup.combine,
				Function_dual(3, (self, start, end) => self.slice(start, end))),
			isEmpty = self => 0 === self.length,
			split = Function_dual(2, (self, separator) => {
				const out = self.split(separator)
				return isNonEmptyArray(out) ? out : [self]
			}),
			includes = Function_dual(2, (self, searchString) =>
				self.includes(searchString)
			)
		class LinesIterator {
			constructor(s, stripped = !1) {
				this.s = s
				this.stripped = stripped
				this.index = 0
				this.length = s.length
			}
			next() {
				if (this.done) return { done: !0, value: void 0 }
				const start = this.index
				for (; !this.done && !isLineBreak(this.s[this.index]); )
					this.index = this.index + 1
				let end = this.index
				if (!this.done) {
					const char = this.s[this.index]
					this.index = this.index + 1
					!this.done &&
						isLineBreak2(char, this.s[this.index]) &&
						(this.index = this.index + 1)
					this.stripped || (end = this.index)
				}
				return { done: !1, value: this.s.substring(start, end) }
			}
			[Symbol.iterator]() {
				return new LinesIterator(this.s, this.stripped)
			}
			get done() {
				return this.index >= this.length
			}
		}
		const isLineBreak = char => {
				const code = char.charCodeAt(0)
				return 13 === code || 10 === code
			},
			isLineBreak2 = (char0, char1) =>
				13 === char0.charCodeAt(0) && 10 === char1.charCodeAt(0),
			Invariant_bindTo = F =>
				Function_dual(2, (self, name) =>
					F.imap(
						self,
						a => ({ [name]: a }),
						({ [name]: a }) => a
					)
				),
			makeBy = (n, f) => {
				const max = Math.max(1, Math.floor(n)),
					out = [f(0)]
				for (let i = 1; i < max; i++) out.push(f(i))
				return out
			},
			mjs_ReadonlyArray_fromIterable = collection =>
				Array.isArray(collection) ? collection : Array.from(collection),
			prepend = Function_dual(2, (self, head) => [head, ...self]),
			append = Function_dual(2, (self, last) => [...self, last]),
			isEmptyReadonlyArray = self => 0 === self.length,
			isNonEmptyReadonlyArray = isNonEmptyArray,
			isOutOfBound = (i, as) => i < 0 || i >= as.length,
			ReadonlyArray_clamp = (i, as) =>
				Math.floor(Math.min(Math.max(0, i), as.length)),
			ReadonlyArray_get = Function_dual(2, (self, index) => {
				const i = Math.floor(index)
				return isOutOfBound(i, self) ? Option_none() : Option_some(self[i])
			}),
			unsafeGet = Function_dual(2, (self, index) => {
				const i = Math.floor(index)
				if (isOutOfBound(i, self)) throw new Error(`Index ${i} out of bounds`)
				return self[i]
			}),
			headNonEmpty = unsafeGet(0),
			tailNonEmpty = self => self.slice(1),
			take = Function_dual(2, (self, n) => {
				const input = mjs_ReadonlyArray_fromIterable(self)
				return input.slice(0, ReadonlyArray_clamp(n, input))
			}),
			drop = Function_dual(2, (self, n) => {
				const input = mjs_ReadonlyArray_fromIterable(self)
				return input.slice(ReadonlyArray_clamp(n, input), input.length)
			}),
			findFirstIndex = Function_dual(2, (self, predicate) => {
				let i = 0
				for (const a of self) {
					if (predicate(a)) return Option_some(i)
					i++
				}
				return Option_none()
			}),
			findFirst = Function_dual(2, (self, predicate) => {
				const input = mjs_ReadonlyArray_fromIterable(self)
				for (let i = 0; i < input.length; i++)
					if (predicate(input[i])) return Option_some(input[i])
				return Option_none()
			}),
			findLast = Function_dual(2, (self, predicate) => {
				const input = mjs_ReadonlyArray_fromIterable(self)
				for (let i = input.length - 1; i >= 0; i--)
					if (predicate(input[i])) return Option_some(input[i])
				return Option_none()
			}),
			ReadonlyArray_remove = Function_dual(2, (self, i) => {
				const out = Array.from(self)
				if (isOutOfBound(i, out)) return out
				out.splice(i, 1)
				return out
			}),
			ReadonlyArray_reverse = self => Array.from(self).reverse(),
			sort = Function_dual(2, (self, O) => {
				const out = Array.from(self)
				out.sort(O.compare)
				return out
			}),
			zip = Function_dual(2, (self, that) =>
				ReadonlyArray_zipWith(self, that, (a, b) => [a, b])
			),
			ReadonlyArray_zipWith = Function_dual(3, (self, that, f) => {
				const as = mjs_ReadonlyArray_fromIterable(self),
					bs = mjs_ReadonlyArray_fromIterable(that)
				return isNonEmptyReadonlyArray(as) && isNonEmptyReadonlyArray(bs)
					? zipNonEmptyWith(bs, f)(as)
					: []
			}),
			zipNonEmptyWith = Function_dual(3, (self, that, f) => {
				const cs = [f(headNonEmpty(self), headNonEmpty(that))],
					len = Math.min(self.length, that.length)
				for (let i = 1; i < len; i++) cs[i] = f(self[i], that[i])
				return cs
			}),
			uniq = Function_dual(2, (self, isEquivalent) => {
				const input = mjs_ReadonlyArray_fromIterable(self)
				return isNonEmptyReadonlyArray(input)
					? uniqNonEmpty(isEquivalent)(input)
					: []
			}),
			uniqNonEmpty = Function_dual(2, (self, isEquivalent) => {
				const out = [headNonEmpty(self)],
					rest = tailNonEmpty(self)
				for (const a of rest) out.every(o => !isEquivalent(a, o)) && out.push(a)
				return out
			}),
			ReadonlyArray_of = a => [a],
			ReadonlyArray_map = Function_dual(2, (self, f) => self.map(f)),
			ReadonlyArray_Invariant = { imap: imap(ReadonlyArray_map) },
			ReadonlyArray_flatMap = Function_dual(2, (self, f) => {
				if (isEmptyReadonlyArray(self)) return []
				const out = []
				for (let i = 0; i < self.length; i++) out.push(...f(self[i], i))
				return out
			}),
			ReadonlyArray_filterMap = Function_dual(2, (self, f) => {
				const as = mjs_ReadonlyArray_fromIterable(self),
					out = []
				for (let i = 0; i < as.length; i++) {
					const o = f(as[i], i)
					Option_isSome(o) && out.push(o.value)
				}
				return out
			}),
			ReadonlyArray_compact = ReadonlyArray_filterMap(Function_identity),
			ReadonlyArray_filter = Function_dual(2, (self, predicate) => {
				const as = mjs_ReadonlyArray_fromIterable(self),
					out = []
				for (let i = 0; i < as.length; i++)
					predicate(as[i], i) && out.push(as[i])
				return out
			}),
			ReadonlyArray_reduce = Function_dual(3, (self, b, f) =>
				mjs_ReadonlyArray_fromIterable(self).reduce((b, a, i) => f(b, a, i), b)
			),
			ReadonlyArray_some = predicate => self => self.some(predicate),
			ReadonlyArray_intercalate = M =>
				Function_dual(2, (self, middle) => {
					const as = mjs_ReadonlyArray_fromIterable(self)
					return isNonEmptyReadonlyArray(as)
						? intercalateNonEmpty(M)(as, middle)
						: M.empty
				}),
			intercalateNonEmpty = S =>
				Function_dual(2, (self, middle) =>
					intercalate(S, middle).combineMany(
						headNonEmpty(self),
						tailNonEmpty(self)
					)
				),
			join = ReadonlyArray_intercalate(Monoid),
			ReadonlyArray_bindTo = Invariant_bindTo(ReadonlyArray_Invariant),
			TypeId = Symbol.for("@effect/data/Chunk"),
			emptyArray = []
		class ChunkImpl {
			constructor(backing) {
				this.backing = backing
				this._id = TypeId
				switch (backing._tag) {
					case "IEmpty":
						this.length = 0
						this.depth = 0
						this.left = this
						this.right = this
						break
					case "IConcat":
						this.length = backing.left.length + backing.right.length
						this.depth = 1 + Math.max(backing.left.depth, backing.right.depth)
						this.left = backing.left
						this.right = backing.right
						break
					case "IArray":
						this.length = backing.array.length
						this.depth = 0
						this.left = _empty
						this.right = _empty
						break
					case "ISingleton":
						this.length = 1
						this.depth = 0
						this.left = _empty
						this.right = _empty
				}
			}
			toString() {
				return `Chunk(${toReadonlyArray(this).map(String).join(", ")})`
			}
			toJSON() {
				return { _tag: "Chunk", values: toReadonlyArray(this) }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
			[Equal_symbol](that) {
				return (
					!(!isChunk(that) || this.length !== that.length) &&
					toReadonlyArray(this).every((value, i) =>
						equals(value, Chunk_unsafeGet(that, i))
					)
				)
			}
			[symbol]() {
				return array(toReadonlyArray(this))
			}
			[Symbol.iterator]() {
				switch (this.backing._tag) {
					case "IArray":
						return this.backing.array[Symbol.iterator]()
					case "IEmpty":
						return emptyArray[Symbol.iterator]()
					default:
						return toReadonlyArray(this)[Symbol.iterator]()
				}
			}
		}
		const copyToArray = (self, array, initial) => {
				switch (self.backing._tag) {
					case "IArray":
						!(function (src, srcPos, dest, destPos, len) {
							for (let i = 0; i < Math.min(src.length, 0 + len); i++)
								dest[destPos + i - 0] = src[i]
						})(self.backing.array, 0, array, initial, self.length)
						break
					case "IConcat":
						copyToArray(self.left, array, initial)
						copyToArray(self.right, array, initial + self.left.length)
						break
					case "ISingleton":
						array[initial] = self.backing.a
				}
			},
			isChunk = u =>
				"object" == typeof u && null != u && "_id" in u && u._id === TypeId,
			_empty = new ChunkImpl({ _tag: "IEmpty" }),
			Chunk_empty = () => _empty,
			Chunk_fromIterable = self =>
				isChunk(self)
					? self
					: new ChunkImpl({ _tag: "IArray", array: Array.from(self) }),
			toReadonlyArray = self => {
				switch (self.backing._tag) {
					case "IEmpty":
						return emptyArray
					case "IArray":
						return self.backing.array
					default: {
						const arr = new Array(self.length)
						copyToArray(self, arr, 0)
						self.backing = { _tag: "IArray", array: arr }
						self.left = _empty
						self.right = _empty
						self.depth = 0
						return arr
					}
				}
			},
			Chunk_get = Function_dual(2, (self, index) =>
				index < 0 || index >= self.length
					? Option_none()
					: Option_some(Chunk_unsafeGet(self, index))
			),
			unsafeFromArray = self => new ChunkImpl({ _tag: "IArray", array: self }),
			Chunk_unsafeGet = Function_dual(2, (self, index) => {
				switch (self.backing._tag) {
					case "IEmpty":
						throw new Error("Index out of bounds")
					case "ISingleton":
						if (0 !== index) throw new Error("Index out of bounds")
						return self.backing.a
					case "IArray":
						if (index >= self.length || index < 0)
							throw new Error("Index out of bounds")
						return self.backing.array[index]
					case "IConcat":
						return index < self.left.length
							? Chunk_unsafeGet(self.left, index)
							: Chunk_unsafeGet(self.right, index - self.left.length)
				}
			}),
			Chunk_append = Function_dual(2, (self, a) =>
				Chunk_concat(self, Chunk_of(a))
			),
			Chunk_prepend = Function_dual(2, (self, a) =>
				Chunk_concat(Chunk_of(a), self)
			),
			Chunk_take = Function_dual(2, (self, n) =>
				n <= 0
					? _empty
					: n >= self.length
					? self
					: unsafeFromArray(take(n)(toReadonlyArray(self)))
			),
			Chunk_drop = Function_dual(2, (self, n) =>
				n <= 0
					? self
					: n >= self.length
					? _empty
					: unsafeFromArray(drop(n)(toReadonlyArray(self)))
			),
			Chunk_concat = Function_dual(2, (self, that) => {
				if ("IEmpty" === self.backing._tag) return that
				if ("IEmpty" === that.backing._tag) return self
				const diff = that.depth - self.depth
				if (Math.abs(diff) <= 1)
					return new ChunkImpl({ _tag: "IConcat", left: self, right: that })
				if (diff < -1) {
					if (self.left.depth >= self.right.depth) {
						const nr = Chunk_concat(that)(self.right)
						return new ChunkImpl({
							_tag: "IConcat",
							left: self.left,
							right: nr,
						})
					}
					{
						const nrr = Chunk_concat(that)(self.right.right)
						if (nrr.depth === self.depth - 3) {
							const nr = new ChunkImpl({
								_tag: "IConcat",
								left: self.right.left,
								right: nrr,
							})
							return new ChunkImpl({
								_tag: "IConcat",
								left: self.left,
								right: nr,
							})
						}
						{
							const nl = new ChunkImpl({
								_tag: "IConcat",
								left: self.left,
								right: self.right.left,
							})
							return new ChunkImpl({ _tag: "IConcat", left: nl, right: nrr })
						}
					}
				}
				if (that.right.depth >= that.left.depth) {
					const nl = Chunk_concat(that.left)(self)
					return new ChunkImpl({ _tag: "IConcat", left: nl, right: that.right })
				}
				{
					const nll = Chunk_concat(that.left.left)(self)
					if (nll.depth === that.depth - 3) {
						const nl = new ChunkImpl({
							_tag: "IConcat",
							left: nll,
							right: that.left.right,
						})
						return new ChunkImpl({
							_tag: "IConcat",
							left: nl,
							right: that.right,
						})
					}
					{
						const nr = new ChunkImpl({
							_tag: "IConcat",
							left: that.left.right,
							right: that.right,
						})
						return new ChunkImpl({ _tag: "IConcat", left: nll, right: nr })
					}
				}
			}),
			dedupeAdjacent = self => {
				const builder = []
				let lastA = Option_none()
				for (const a of self)
					if (Option_isNone(lastA) || !equals(a, lastA.value)) {
						builder.push(a)
						lastA = Option_some(a)
					}
				return unsafeFromArray(builder)
			},
			Chunk_head = Chunk_get(0),
			Chunk_isEmpty = self => 0 === self.length,
			Chunk_isNonEmpty = self => self.length > 0,
			Chunk_reduce = Function_dual(3, (self, b, f) =>
				ReadonlyArray_reduce(b, f)(toReadonlyArray(self))
			),
			Chunk_join = Function_dual(2, (self, sep) =>
				Chunk_reduce(self, "", (s, a) => (s.length > 0 ? `${s}${sep}${a}` : a))
			),
			Chunk_of = a => new ChunkImpl({ _tag: "ISingleton", a }),
			Chunk_makeBy = Function_dual(2, (n, f) =>
				((...as) => unsafeFromArray(as))(...makeBy(n, f))
			),
			Chunk_map = Function_dual(2, (self, f) =>
				"ISingleton" === self.backing._tag
					? Chunk_of(f(self.backing.a))
					: unsafeFromArray(ReadonlyArray_map(f)(toReadonlyArray(self)))
			),
			mapWithIndex = Function_dual(2, (self, f) =>
				"ISingleton" === self.backing._tag
					? Chunk_of(f(self.backing.a, 0))
					: unsafeFromArray(ReadonlyArray_map(f)(toReadonlyArray(self)))
			),
			Chunk_reverse = self =>
				unsafeFromArray(ReadonlyArray_reverse(toReadonlyArray(self))),
			Chunk_sort = Function_dual(2, (self, O) =>
				unsafeFromArray(sort(O)(toReadonlyArray(self)))
			),
			Chunk_splitAt = Function_dual(2, (self, n) => [
				Chunk_take(n)(self),
				Chunk_drop(n)(self),
			]),
			splitWhere = Function_dual(2, (self, f) => {
				let i = 0
				for (const a of toReadonlyArray(self)) {
					if (f(a)) break
					i++
				}
				return Chunk_splitAt(i)(self)
			}),
			Chunk_unfold = (s, f) => {
				const builder = []
				let cont = !0,
					s1 = s
				for (; cont; ) {
					const x = f(s1)
					if (Option_isSome(x)) {
						s1 = x.value[1]
						builder.push(x.value[0])
					} else cont = !1
				}
				return unsafeFromArray(builder)
			},
			unsafeHead = self => Chunk_unsafeGet(0)(self),
			unsafeLast = self => Chunk_unsafeGet(self.length - 1)(self),
			Chunk_zip = Function_dual(2, (self, that) =>
				Chunk_zipWith(self, that, (a, b) => [a, b])
			),
			Chunk_zipWith = Function_dual(3, (self, that, f) => {
				const selfA = toReadonlyArray(self),
					thatA = toReadonlyArray(that)
				return unsafeFromArray(ReadonlyArray_zipWith(thatA, f)(selfA))
			}),
			Chunk_headNonEmpty = unsafeHead,
			Chunk_tailNonEmpty = self => Chunk_drop(self, 1)
		var Context_a
		const TagTypeId = Symbol.for("@effect/data/Context/Tag"),
			Context_effectVariance = { _R: _ => _, _E: _ => _, _A: _ => _ },
			Context_EffectTypeId = Symbol.for("@effect/io/Effect")
		class TagImpl {
			[((Context_a = Context_EffectTypeId), Equal_symbol)](that) {
				return this === that
			}
			[symbol]() {
				return random(this)
			}
			get [TagTypeId]() {
				return { _S: _ => _, _I: _ => _ }
			}
			constructor(id) {
				this._tag = "Tag"
				this.i0 = void 0
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[Context_a] = Context_effectVariance
				if (void 0 !== id) return globalValue(id, () => this)
			}
			traced(trace) {
				return trace ? makeTraced(this, trace) : this
			}
		}
		const ContextTypeId = Symbol.for("@effect/data/Context")
		class ContextImpl {
			[Equal_symbol](that) {
				if (isContext(that) && this.unsafeMap.size === that.unsafeMap.size) {
					for (const k of this.unsafeMap.keys())
						if (
							!that.unsafeMap.has(k) ||
							!equals(this.unsafeMap.get(k), that.unsafeMap.get(k))
						)
							return !1
					return !0
				}
				return !1
			}
			[symbol]() {
				return number(this.unsafeMap.size)
			}
			constructor(unsafeMap) {
				this.unsafeMap = unsafeMap
				this._id = ContextTypeId
				this._S = _ => _
			}
		}
		const isContext = u =>
				"object" == typeof u &&
				null !== u &&
				"_id" in u &&
				u._id === ContextTypeId,
			add = Function_dual(3, (self, tag, service) => {
				const map = new Map(self.unsafeMap)
				map.set(tag, service)
				return new ContextImpl(map)
			}),
			Context_get = Function_dual(2, (self, tag) => {
				if (!self.unsafeMap.has(tag)) throw new Error("Service not found")
				return self.unsafeMap.get(tag)
			}),
			Context_unsafeGet = Function_dual(2, (self, tag) => {
				if (!self.unsafeMap.has(tag)) throw new Error("Service not found")
				return self.unsafeMap.get(tag)
			}),
			Context_merge = Function_dual(2, (self, that) => {
				const map = new Map(self.unsafeMap)
				for (const [tag, s] of that.unsafeMap) map.set(tag, s)
				return new ContextImpl(map)
			}),
			Tag = key => new TagImpl(key),
			mjs_Context_empty = () => new ContextImpl(new Map()),
			Context_add = add,
			mjs_Context_get = Context_get,
			mjs_Context_unsafeGet = Context_unsafeGet,
			mjs_Context_merge = Context_merge,
			ContextPatchTypeId = Symbol.for("@effect/data/Differ/ContextPatch")
		function ContextPatch_variance(a) {
			return a
		}
		class ContextPatch_Empty {
			constructor() {
				this._tag = "Empty"
				this._Input = ContextPatch_variance
				this._Output = ContextPatch_variance
				this._id = ContextPatchTypeId
			}
			[symbol]() {
				return string("ContextPatch(Empty)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id
				)
			}
		}
		class ContextPatch_AndThen {
			constructor(first, second) {
				this.first = first
				this.second = second
				this._tag = "AndThen"
				this._id = ContextPatchTypeId
				this._Input = ContextPatch_variance
				this._Output = ContextPatch_variance
			}
			[symbol]() {
				return string("ContextPatch(AndThen)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.first, that.first) &&
					equals(this.second, that.second)
				)
			}
		}
		class AddService {
			constructor(tag, service) {
				this.tag = tag
				this.service = service
				this._tag = "AddService"
				this._id = ContextPatchTypeId
				this._Input = ContextPatch_variance
				this._Output = ContextPatch_variance
			}
			[symbol]() {
				return string("ContextPatch(AddService)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.tag, that.tag) &&
					equals(this.service, that.service)
				)
			}
		}
		class RemoveService {
			constructor(tag) {
				this.tag = tag
				this._tag = "RemoveService"
				this._id = ContextPatchTypeId
				this._Input = ContextPatch_variance
				this._Output = ContextPatch_variance
			}
			[symbol]() {
				return string("ContextPatch(RemoveService)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.tag, that.tag)
				)
			}
		}
		class UpdateService {
			constructor(tag, update) {
				this.tag = tag
				this.update = update
				this._tag = "UpdateService"
				this._id = ContextPatchTypeId
				this._Input = ContextPatch_variance
				this._Output = ContextPatch_variance
			}
			[symbol]() {
				return string("ContextPatch(AndThen)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.tag, that.tag) &&
					equals(this.update, that.update)
				)
			}
		}
		const ContextPatch_empty = () => new ContextPatch_Empty(),
			ContextPatch_combine = Function_dual(
				2,
				(self, that) => new ContextPatch_AndThen(self, that)
			),
			ContextPatch_patch = Function_dual(2, (self, context) => {
				let wasServiceUpdated = !1,
					patches = Chunk_of(self)
				const updatedContext = new Map(context.unsafeMap)
				for (; Chunk_isNonEmpty(patches); ) {
					const head = Chunk_headNonEmpty(patches),
						tail = Chunk_tailNonEmpty(patches)
					switch (head._tag) {
						case "Empty":
							patches = tail
							break
						case "AddService":
							updatedContext.set(head.tag, head.service)
							patches = tail
							break
						case "AndThen":
							patches = Chunk_prepend(
								Chunk_prepend(tail, head.second),
								head.first
							)
							break
						case "RemoveService":
							updatedContext.delete(head.tag)
							patches = tail
							break
						case "UpdateService":
							updatedContext.set(
								head.tag,
								head.update(updatedContext.get(head.tag))
							)
							wasServiceUpdated = !0
							patches = tail
					}
				}
				if (!wasServiceUpdated) return new ContextImpl(updatedContext)
				const map = new Map()
				for (const [tag] of context.unsafeMap)
					if (updatedContext.has(tag)) {
						map.set(tag, updatedContext.get(tag))
						updatedContext.delete(tag)
					}
				for (const [tag, s] of updatedContext) map.set(tag, s)
				return new ContextImpl(map)
			}),
			Differ_ContextPatch_empty = ContextPatch_empty,
			Differ_ContextPatch_combine = ContextPatch_combine,
			Differ_ContextPatch_patch = ContextPatch_patch,
			BUCKET_SIZE = Math.pow(2, 5),
			MASK = BUCKET_SIZE - 1,
			MAX_INDEX_NODE = BUCKET_SIZE / 2,
			MIN_ARRAY_NODE = BUCKET_SIZE / 4
		function hashFragment(shift, h) {
			return (h >>> shift) & MASK
		}
		function toBitmap(x) {
			return 1 << x
		}
		function fromBitmap(bitmap, bit) {
			return (function (x) {
				x =
					((x =
						(858993459 & (x -= (x >> 1) & 1431655765)) +
						((x >> 2) & 858993459)) +
						(x >> 4)) &
					252645135
				return 127 & ((x += x >> 8) + (x >> 16))
			})(bitmap & (bit - 1))
		}
		function arrayUpdate(mutate, at, v, arr) {
			let out = arr
			if (!mutate) {
				const len = arr.length
				out = new Array(len)
				for (let i = 0; i < len; ++i) out[i] = arr[i]
			}
			out[at] = v
			return out
		}
		function arraySpliceOut(mutate, at, arr) {
			const newLen = arr.length - 1
			let i = 0,
				g = 0,
				out = arr
			if (mutate) i = g = at
			else {
				out = new Array(newLen)
				for (; i < at; ) out[g++] = arr[i++]
			}
			++i
			for (; i <= newLen; ) out[g++] = arr[i++]
			mutate && (out.length = newLen)
			return out
		}
		class Stack {
			constructor(value, previous) {
				this.value = value
				this.previous = previous
			}
		}
		class EmptyNode {
			constructor() {
				this._tag = "EmptyNode"
			}
			modify(edit, _shift, f, hash, key, size) {
				const v = f(Option_none())
				if (Option_isNone(v)) return new EmptyNode()
				++size.value
				return new LeafNode(edit, hash, key, v)
			}
		}
		function isEmptyNode(a) {
			return a instanceof EmptyNode
		}
		function canEditNode(node, edit) {
			return !isEmptyNode(node) && edit === node.edit
		}
		class LeafNode {
			constructor(edit, hash, key, value) {
				this.edit = edit
				this.hash = hash
				this.key = key
				this.value = value
				this._tag = "LeafNode"
			}
			modify(edit, shift, f, hash, key, size) {
				if (equals(key, this.key)) {
					const v = f(this.value)
					if (v === this.value) return this
					if (Option_isNone(v)) {
						--size.value
						return new EmptyNode()
					}
					if (canEditNode(this, edit)) {
						this.value = v
						return this
					}
					return new LeafNode(edit, hash, key, v)
				}
				const v = f(Option_none())
				if (Option_isNone(v)) return this
				++size.value
				return mergeLeaves(
					edit,
					shift,
					this.hash,
					this,
					hash,
					new LeafNode(edit, hash, key, v)
				)
			}
		}
		class CollisionNode {
			constructor(edit, hash, children) {
				this.edit = edit
				this.hash = hash
				this.children = children
				this._tag = "CollisionNode"
			}
			modify(edit, shift, f, hash, key, size) {
				if (hash === this.hash) {
					const canEdit = canEditNode(this, edit),
						list = this.updateCollisionList(
							canEdit,
							edit,
							this.hash,
							this.children,
							f,
							key,
							size
						)
					return list === this.children
						? this
						: list.length > 1
						? new CollisionNode(edit, this.hash, list)
						: list[0]
				}
				const v = f(Option_none())
				if (Option_isNone(v)) return this
				++size.value
				return mergeLeaves(
					edit,
					shift,
					this.hash,
					this,
					hash,
					new LeafNode(edit, hash, key, v)
				)
			}
			updateCollisionList(mutate, edit, hash, list, f, key, size) {
				const len = list.length
				for (let i = 0; i < len; ++i) {
					const child = list[i]
					if ("key" in child && equals(key, child.key)) {
						const value = child.value,
							newValue = f(value)
						if (newValue === value) return list
						if (Option_isNone(newValue)) {
							--size.value
							return arraySpliceOut(mutate, i, list)
						}
						return arrayUpdate(
							mutate,
							i,
							new LeafNode(edit, hash, key, newValue),
							list
						)
					}
				}
				const newValue = f(Option_none())
				if (Option_isNone(newValue)) return list
				++size.value
				return arrayUpdate(
					mutate,
					len,
					new LeafNode(edit, hash, key, newValue),
					list
				)
			}
		}
		class IndexedNode {
			constructor(edit, mask, children) {
				this.edit = edit
				this.mask = mask
				this.children = children
				this._tag = "IndexedNode"
			}
			modify(edit, shift, f, hash, key, size) {
				const mask = this.mask,
					children = this.children,
					frag = hashFragment(shift, hash),
					bit = toBitmap(frag),
					indx = fromBitmap(mask, bit),
					exists = mask & bit,
					canEdit = canEditNode(this, edit)
				if (!exists) {
					const _newChild = new EmptyNode().modify(
						edit,
						shift + 5,
						f,
						hash,
						key,
						size
					)
					return _newChild
						? children.length >= MAX_INDEX_NODE
							? (function (edit, frag, child, bitmap, subNodes) {
									const arr = []
									let bit = bitmap,
										count = 0
									for (let i = 0; bit; ++i) {
										1 & bit && (arr[i] = subNodes[count++])
										bit >>>= 1
									}
									arr[frag] = child
									return new ArrayNode(edit, count + 1, arr)
							  })(edit, frag, _newChild, mask, children)
							: new IndexedNode(
									edit,
									mask | bit,
									(function (mutate, at, v, arr) {
										const len = arr.length
										if (mutate) {
											let i = len
											for (; i >= at; ) arr[i--] = arr[i]
											arr[at] = v
											return arr
										}
										let i = 0,
											g = 0
										const out = new Array(len + 1)
										for (; i < at; ) out[g++] = arr[i++]
										out[at] = v
										for (; i < len; ) out[++g] = arr[i++]
										return out
									})(canEdit, indx, _newChild, children)
							  )
						: this
				}
				const current = children[indx],
					child = current.modify(edit, shift + 5, f, hash, key, size)
				if (current === child) return this
				let newChildren,
					bitmap = mask
				if (isEmptyNode(child)) {
					bitmap &= ~bit
					if (!bitmap) return new EmptyNode()
					if (
						children.length <= 2 &&
						(isEmptyNode((node = children[1 ^ indx])) ||
							"LeafNode" === node._tag ||
							"CollisionNode" === node._tag)
					)
						return children[1 ^ indx]
					newChildren = arraySpliceOut(canEdit, indx, children)
				} else newChildren = arrayUpdate(canEdit, indx, child, children)
				var node
				if (canEdit) {
					this.mask = bitmap
					this.children = newChildren
					return this
				}
				return new IndexedNode(edit, bitmap, newChildren)
			}
		}
		class ArrayNode {
			constructor(edit, size, children) {
				this.edit = edit
				this.size = size
				this.children = children
				this._tag = "ArrayNode"
			}
			modify(edit, shift, f, hash, key, size) {
				let count = this.size
				const children = this.children,
					frag = hashFragment(shift, hash),
					child = children[frag],
					newChild = (child || new EmptyNode()).modify(
						edit,
						shift + 5,
						f,
						hash,
						key,
						size
					)
				if (child === newChild) return this
				const canEdit = canEditNode(this, edit)
				let newChildren
				if (isEmptyNode(child) && !isEmptyNode(newChild)) {
					++count
					newChildren = arrayUpdate(canEdit, frag, newChild, children)
				} else if (!isEmptyNode(child) && isEmptyNode(newChild)) {
					--count
					if (count <= MIN_ARRAY_NODE)
						return (function (edit, count, removed, elements) {
							const children = new Array(count - 1)
							let g = 0,
								bitmap = 0
							for (let i = 0, len = elements.length; i < len; ++i)
								if (i !== removed) {
									const elem = elements[i]
									if (elem && !isEmptyNode(elem)) {
										children[g++] = elem
										bitmap |= 1 << i
									}
								}
							return new IndexedNode(edit, bitmap, children)
						})(edit, count, frag, children)
					newChildren = arrayUpdate(canEdit, frag, new EmptyNode(), children)
				} else newChildren = arrayUpdate(canEdit, frag, newChild, children)
				if (canEdit) {
					this.size = count
					this.children = newChildren
					return this
				}
				return new ArrayNode(edit, count, newChildren)
			}
		}
		function mergeLeavesInner(edit, shift, h1, n1, h2, n2) {
			if (h1 === h2) return new CollisionNode(edit, h1, [n2, n1])
			const subH1 = hashFragment(shift, h1),
				subH2 = hashFragment(shift, h2)
			if (subH1 === subH2)
				return child =>
					new IndexedNode(edit, toBitmap(subH1) | toBitmap(subH2), [child])
			{
				const children = subH1 < subH2 ? [n1, n2] : [n2, n1]
				return new IndexedNode(
					edit,
					toBitmap(subH1) | toBitmap(subH2),
					children
				)
			}
		}
		function mergeLeaves(edit, shift, h1, n1, h2, n2) {
			let stack,
				currentShift = shift
			for (;;) {
				const res = mergeLeavesInner(edit, currentShift, h1, n1, h2, n2)
				if ("function" != typeof res) {
					let final = res
					for (; null != stack; ) {
						final = stack.value(final)
						stack = stack.previous
					}
					return final
				}
				stack = new Stack(res, stack)
				currentShift += 5
			}
		}
		const HashMapTypeId = Symbol.for("@effect/data/HashMap")
		class HashMapImpl {
			constructor(_editable, _edit, _root, _size) {
				this._editable = _editable
				this._edit = _edit
				this._root = _root
				this._size = _size
				this._id = HashMapTypeId
			}
			[Symbol.iterator]() {
				return new HashMapIterator(this, (k, v) => [k, v])
			}
			[symbol]() {
				let hash = Hash_hash("HashMap")
				for (const item of this)
					hash ^= combine(Hash_hash(item[0]))(Hash_hash(item[1]))
				return hash
			}
			[Equal_symbol](that) {
				if (isHashMap(that)) {
					if (that._size !== this._size) return !1
					for (const item of this) {
						const elem = getHash(item[0], Hash_hash(item[0]))(that)
						if (Option_isNone(elem)) return !1
						if (!equals(item[1], elem.value)) return !1
					}
					return !0
				}
				return !1
			}
			toString() {
				return `HashMap(${Array.from(this)
					.map(([k, v]) => `[${String(k)}, ${String(v)}]`)
					.join(", ")})`
			}
			toJSON() {
				return { _tag: "HashMap", values: Array.from(this) }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
		}
		class HashMapIterator {
			constructor(map, f) {
				this.map = map
				this.f = f
				this.v = visitLazy(this.map._root, this.f, void 0)
			}
			next() {
				if (Option_isNone(this.v)) return { done: !0, value: void 0 }
				const v0 = this.v.value
				this.v = applyCont(v0.cont)
				return { done: !1, value: v0.value }
			}
			[Symbol.iterator]() {
				return new HashMapIterator(this.map, this.f)
			}
		}
		const applyCont = cont =>
				cont
					? visitLazyChildren(cont[0], cont[1], cont[2], cont[3], cont[4])
					: Option_none(),
			visitLazy = (node, f, cont) => {
				switch (node._tag) {
					case "LeafNode":
						return Option_isSome(node.value)
							? Option_some({ value: f(node.key, node.value.value), cont })
							: applyCont(cont)
					case "CollisionNode":
					case "ArrayNode":
					case "IndexedNode": {
						const children = node.children
						return visitLazyChildren(children.length, children, 0, f, cont)
					}
					default:
						return applyCont(cont)
				}
			},
			visitLazyChildren = (len, children, i, f, cont) => {
				for (; i < len; ) {
					const child = children[i++]
					if (child && !isEmptyNode(child))
						return visitLazy(child, f, [len, children, i, f, cont])
				}
				return applyCont(cont)
			},
			HashMap_empty = () => new HashMapImpl(!1, 0, new EmptyNode(), 0),
			isHashMap = u =>
				"object" == typeof u &&
				null != u &&
				"_id" in u &&
				u._id === HashMapTypeId,
			HashMap_get = Function_dual(2, (self, key) =>
				getHash(self, key, Hash_hash(key))
			),
			getHash = Function_dual(3, (self, key, hash) => {
				let node = self._root,
					shift = 0
				for (;;)
					switch (node._tag) {
						case "LeafNode":
							return equals(key, node.key) ? node.value : Option_none()
						case "CollisionNode":
							if (hash === node.hash) {
								const children = node.children
								for (let i = 0, len = children.length; i < len; ++i) {
									const child = children[i]
									if ("key" in child && equals(key, child.key))
										return child.value
								}
							}
							return Option_none()
						case "IndexedNode": {
							const bit = toBitmap(hashFragment(shift, hash))
							if (node.mask & bit) {
								node = node.children[fromBitmap(node.mask, bit)]
								shift += 5
								break
							}
							return Option_none()
						}
						case "ArrayNode":
							node = node.children[hashFragment(shift, hash)]
							if (node) {
								shift += 5
								break
							}
							return Option_none()
						default:
							return Option_none()
					}
			}),
			HashMap_has = Function_dual(2, (self, key) =>
				Option_isSome(getHash(self, key, Hash_hash(key)))
			),
			set = Function_dual(3, (self, key, value) =>
				modifyAt(self, key, () => Option_some(value))
			),
			setTree = Function_dual(3, (self, newRoot, newSize) => {
				if (self._editable) {
					self._root = newRoot
					self._size = newSize
					return self
				}
				return newRoot === self._root
					? self
					: new HashMapImpl(self._editable, self._edit, newRoot, newSize)
			}),
			HashMap_size = self => self._size,
			beginMutation = self =>
				new HashMapImpl(!0, self._edit + 1, self._root, self._size),
			endMutation = self => {
				self._editable = !1
				return self
			},
			modifyAt = Function_dual(3, (self, key, f) =>
				modifyHash(self, key, Hash_hash(key), f)
			),
			modifyHash = Function_dual(4, (self, key, hash, f) => {
				const size = { value: self._size },
					newRoot = self._root.modify(
						self._editable ? self._edit : NaN,
						0,
						f,
						hash,
						key,
						size
					)
				return setTree(newRoot, size.value)(self)
			}),
			HashMap_remove = Function_dual(2, (self, key) =>
				modifyAt(self, key, Option_none)
			),
			forEachWithIndex = Function_dual(2, (self, f) =>
				HashMap_reduceWithIndex(self, void 0, (_, value, key) => f(value, key))
			),
			HashMap_reduceWithIndex = Function_dual(3, (self, zero, f) => {
				const root = self._root
				if ("LeafNode" === root._tag)
					return Option_isSome(root.value)
						? f(zero, root.value.value, root.key)
						: zero
				if ("EmptyNode" === root._tag) return zero
				const toVisit = [root.children]
				let children
				for (; (children = toVisit.pop()); )
					for (let i = 0, len = children.length; i < len; ) {
						const child = children[i++]
						child &&
							!isEmptyNode(child) &&
							("LeafNode" === child._tag
								? Option_isSome(child.value) &&
								  (zero = f(zero, child.value.value, child.key))
								: toVisit.push(child.children))
					}
				return zero
			}),
			HashSetTypeId = Symbol.for("@effect/data/HashSet")
		class HashSetImpl {
			constructor(_keyMap) {
				this._keyMap = _keyMap
				this._id = HashSetTypeId
			}
			[Symbol.iterator]() {
				return (self => new HashMapIterator(self, key => key))(this._keyMap)
			}
			[symbol]() {
				return combine(Hash_hash(this._keyMap))(Hash_hash("HashSet"))
			}
			[Equal_symbol](that) {
				return (
					!!isHashSet(that) &&
					HashMap_size(this._keyMap) === HashMap_size(that._keyMap) &&
					equals(this._keyMap, that._keyMap)
				)
			}
			toString() {
				return `HashSet(${Array.from(this).map(String).join(", ")})`
			}
			toJSON() {
				return { _tag: "HashSet", values: Array.from(this) }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
		}
		const isHashSet = u =>
				"object" == typeof u &&
				null != u &&
				"_id" in u &&
				u._id === HashSetTypeId,
			HashSet_empty = () => new HashSetImpl(HashMap_empty()),
			HashSet_has = Function_dual(2, (self, value) =>
				HashMap_has(self._keyMap, value)
			),
			HashSet_beginMutation = self =>
				new HashSetImpl(beginMutation(self._keyMap)),
			HashSet_endMutation = self => {
				self._keyMap._editable = !1
				return self
			},
			HashSet_mutate = Function_dual(2, (self, f) => {
				const transient = HashSet_beginMutation(self)
				f(transient)
				return HashSet_endMutation(transient)
			}),
			HashSet_add = Function_dual(2, (self, value) =>
				self._keyMap._editable
					? (set(value, !0)(self._keyMap), self)
					: new HashSetImpl(set(value, !0)(self._keyMap))
			),
			HashSet_remove = Function_dual(2, (self, value) =>
				self._keyMap._editable
					? (HashMap_remove(value)(self._keyMap), self)
					: new HashSetImpl(HashMap_remove(value)(self._keyMap))
			),
			HashSet_difference = Function_dual(2, (self, that) =>
				HashSet_mutate(self, set => {
					for (const value of that) HashSet_remove(set, value)
				})
			),
			HashSet_union = Function_dual(2, (self, that) =>
				HashSet_mutate(HashSet_empty(), set => {
					HashSet_forEach(self, value => HashSet_add(set, value))
					for (const value of that) HashSet_add(set, value)
				})
			),
			HashSet_forEach = Function_dual(2, (self, f) =>
				forEachWithIndex(self._keyMap, (_, k) => f(k))
			),
			HashSet_reduce = Function_dual(3, (self, zero, f) =>
				HashMap_reduceWithIndex(self._keyMap, zero, (z, _, a) => f(z, a))
			),
			mjs_HashMap_empty = HashMap_empty,
			mjs_HashMap_fromIterable = entries => {
				const map = beginMutation(HashMap_empty())
				for (const entry of entries) set(entry[0], entry[1])(map)
				return endMutation(map)
			},
			mjs_HashMap_get = HashMap_get,
			HashMap_set = set,
			mjs_HashMap_size = HashMap_size,
			mjs_HashSet_empty = HashSet_empty,
			mjs_HashSet_fromIterable = elements => {
				const set = HashSet_beginMutation(HashSet_empty())
				for (const value of elements) HashSet_add(set, value)
				return HashSet_endMutation(set)
			},
			mjs_HashSet_make = (...elements) => {
				const set = HashSet_beginMutation(HashSet_empty())
				for (const value of elements) HashSet_add(set, value)
				return HashSet_endMutation(set)
			},
			mjs_HashSet_has = HashSet_has,
			mjs_HashSet_size = self => HashMap_size(self._keyMap),
			mjs_HashSet_add = HashSet_add,
			mjs_HashSet_remove = HashSet_remove,
			mjs_HashSet_difference = HashSet_difference,
			mjs_HashSet_union = HashSet_union,
			mjs_HashSet_forEach = HashSet_forEach,
			mjs_HashSet_reduce = HashSet_reduce,
			HashSetPatchTypeId = Symbol.for("@effect/data/Differ/HashSetPatch")
		function HashSetPatch_variance(a) {
			return a
		}
		class HashSetPatch_Empty {
			constructor() {
				this._tag = "Empty"
				this._Value = HashSetPatch_variance
				this._id = HashSetPatchTypeId
			}
			[symbol]() {
				return string("HashSetPatch(Empty)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id
				)
			}
		}
		class HashSetPatch_AndThen {
			constructor(first, second) {
				this.first = first
				this.second = second
				this._tag = "AndThen"
				this._Value = HashSetPatch_variance
				this._id = HashSetPatchTypeId
			}
			[symbol]() {
				return string("HashSetPatch(AndThen)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.first, that.first) &&
					equals(this.second, that.second)
				)
			}
		}
		class HashSetPatch_Add {
			constructor(value) {
				this.value = value
				this._tag = "Add"
				this._Value = HashSetPatch_variance
				this._id = HashSetPatchTypeId
			}
			[symbol]() {
				return string("HashSetPatch(Add)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.value, that.value)
				)
			}
		}
		class HashSetPatch_Remove {
			constructor(value) {
				this.value = value
				this._tag = "Remove"
				this._Value = HashSetPatch_variance
				this._id = HashSetPatchTypeId
			}
			[symbol]() {
				return string("HashSetPatch(Remove)")
			}
			[Equal_symbol](that) {
				return (
					"object" == typeof that &&
					null !== that &&
					"_id" in that &&
					that._id === this._id &&
					"_tag" in that &&
					that._tag === this._id &&
					equals(this.value, that.value)
				)
			}
		}
		const HashSetPatch_empty = () => new HashSetPatch_Empty(),
			HashSetPatch_combine = Function_dual(
				2,
				(self, that) => new HashSetPatch_AndThen(self, that)
			),
			HashSetPatch_patch = Function_dual(2, (self, oldValue) => {
				let set = oldValue,
					patches = Chunk_of(self)
				for (; Chunk_isNonEmpty(patches); ) {
					const head = Chunk_headNonEmpty(patches),
						tail = Chunk_tailNonEmpty(patches)
					switch (head._tag) {
						case "Empty":
							patches = tail
							break
						case "AndThen":
							patches = Chunk_prepend(head.first)(
								Chunk_prepend(head.second)(tail)
							)
							break
						case "Add":
							set = mjs_HashSet_add(head.value)(set)
							patches = tail
							break
						case "Remove":
							set = mjs_HashSet_remove(head.value)(set)
							patches = tail
					}
				}
				return set
			}),
			Differ_HashSetPatch_empty = HashSetPatch_empty,
			Differ_HashSetPatch_combine = HashSetPatch_combine,
			Differ_HashSetPatch_patch = HashSetPatch_patch,
			DifferTypeId = Symbol.for("@effect/data/Differ")
		class DifferImpl {
			constructor(params) {
				this._id = DifferTypeId
				this._P = Function_identity
				this._V = Function_identity
				this.empty = params.empty
				this.diff = params.diff
				this.combine = params.combine
				this.patch = params.patch
			}
		}
		const Differ_make = params => new DifferImpl(params),
			Differ_diff = Function_dual(3, (self, oldValue, newValue) =>
				self.diff(oldValue, newValue)
			),
			Differ_combine = Function_dual(3, (self, first, second) =>
				self.combine(first, second)
			),
			Differ_patch = Function_dual(3, (self, patch, oldValue) =>
				self.patch(patch, oldValue)
			),
			mjs_Differ_make = Differ_make,
			Differ_environment = () =>
				Differ_make({
					empty: Differ_ContextPatch_empty(),
					combine: (first, second) =>
						Differ_ContextPatch_combine(second)(first),
					diff: (oldValue, newValue) =>
						((oldValue, newValue) => {
							const missingServices = new Map(oldValue.unsafeMap)
							let patch = ContextPatch_empty()
							for (const [tag, newService] of newValue.unsafeMap.entries())
								if (missingServices.has(tag)) {
									const old = missingServices.get(tag)
									missingServices.delete(tag)
									equals(old, newService) ||
										(patch = ContextPatch_combine(
											new UpdateService(tag, () => newService)
										)(patch))
								} else {
									missingServices.delete(tag)
									patch = ContextPatch_combine(new AddService(tag, newService))(
										patch
									)
								}
							for (const [tag] of missingServices.entries())
								patch = ContextPatch_combine(new RemoveService(tag))(patch)
							return patch
						})(oldValue, newValue),
					patch: (patch, oldValue) =>
						Differ_ContextPatch_patch(oldValue)(patch),
				}),
			Differ_hashSet = () =>
				Differ_make({
					empty: Differ_HashSetPatch_empty(),
					combine: (first, second) =>
						Differ_HashSetPatch_combine(second)(first),
					diff: (oldValue, newValue) =>
						((oldValue, newValue) => {
							const [removed, patch] = mjs_HashSet_reduce(
								[oldValue, HashSetPatch_empty()],
								([set, patch], value) =>
									mjs_HashSet_has(value)(set)
										? [mjs_HashSet_remove(value)(set), patch]
										: [
												set,
												HashSetPatch_combine(new HashSetPatch_Add(value))(
													patch
												),
										  ]
							)(newValue)
							return mjs_HashSet_reduce(patch, (patch, value) =>
								HashSetPatch_combine(new HashSetPatch_Remove(value))(patch)
							)(removed)
						})(oldValue, newValue),
					patch: (patch, oldValue) =>
						Differ_HashSetPatch_patch(oldValue)(patch),
				}),
			Differ_update = () => {
				return (
					(f = (_, a) => a),
					Differ_make({
						empty: Function_identity,
						combine: (first, second) =>
							first === Function_identity
								? second
								: second === Function_identity
								? first
								: a => second(first(a)),
						diff: (oldValue, newValue) =>
							equals(oldValue, newValue)
								? Function_identity
								: constant(newValue),
						patch: (patch, oldValue) => f(oldValue, patch(oldValue)),
					})
				)
				var f
			},
			MutableRef_TypeId = Symbol.for("@effect/data/MutableRef")
		class MutableRefImpl {
			constructor(current) {
				this.current = current
				this._T = _ => _
				this._id = MutableRef_TypeId
			}
			toString() {
				return `MutableRef(${String(this.current)})`
			}
			toJSON() {
				return { _tag: "MutableRef", current: this.current }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
		}
		const MutableRef_make = value => new MutableRefImpl(value),
			MutableRef_get = self => self.current,
			getAndSet = Function_dual(2, (self, value) => {
				const ret = self.current
				self.current = value
				return ret
			}),
			getAndUpdate = Function_dual(2, (self, f) =>
				getAndSet(self, f(MutableRef_get(self)))
			),
			MutableRef_set = Function_dual(2, (self, value) => {
				self.current = value
				return self
			}),
			MutableRef_update = Function_dual(2, (self, f) =>
				MutableRef_set(self, f(MutableRef_get(self)))
			)
		var fiberId_a, fiberId_b
		const FiberIdTypeId = Symbol.for("@effect/io/Fiber/Id")
		class fiberId_None {
			constructor() {
				this[fiberId_a] = FiberIdTypeId
				this._tag = "None"
			}
			[((fiberId_a = FiberIdTypeId), symbol)]() {
				return combine(Hash_hash(this._tag))(Hash_hash("@effect/io/Fiber/Id"))
			}
			[Equal_symbol](that) {
				return isFiberId(that) && "None" === that._tag
			}
		}
		class Runtime {
			constructor(id, startTimeMillis) {
				this.id = id
				this.startTimeMillis = startTimeMillis
				this[fiberId_b] = FiberIdTypeId
				this._tag = "Runtime"
			}
			[((fiberId_b = FiberIdTypeId), symbol)]() {
				return combine(Hash_hash(this.startTimeMillis))(
					combine(Hash_hash(this.id))(
						combine(Hash_hash(this._tag))(Hash_hash("@effect/io/Fiber/Id"))
					)
				)
			}
			[Equal_symbol](that) {
				return (
					isFiberId(that) &&
					"Runtime" === that._tag &&
					this.id === that.id &&
					this.startTimeMillis === that.startTimeMillis
				)
			}
		}
		const fiberId_none = new fiberId_None(),
			isFiberId = self =>
				"object" == typeof self && null != self && FiberIdTypeId in self,
			ids = self => {
				switch (self._tag) {
					case "None":
						return mjs_HashSet_empty()
					case "Runtime":
						return mjs_HashSet_make(self.id)
					case "Composite":
						return mjs_HashSet_union(ids(self.right))(ids(self.left))
				}
			},
			_fiberCounter = globalValue(
				Symbol.for("@effect/io/Fiber/Id/_fiberCounter"),
				() => MutableRef_make(0)
			),
			threadName = self =>
				Array.from(ids(self))
					.map(n => `#${n}`)
					.join(","),
			Id_none = fiberId_none,
			Id_unsafeMake = () => {
				const id = MutableRef_get(_fiberCounter)
				MutableRef_set(id + 1)(_fiberCounter)
				return new Runtime(id, new Date().getTime())
			},
			active = patch => 255 & patch,
			enabled = patch => (patch >> 8) & 255,
			runtimeFlagsPatch_make = (active, enabled) =>
				(255 & active) + ((enabled & active & 255) << 8),
			runtimeFlagsPatch_empty = runtimeFlagsPatch_make(0, 0),
			exclude = Function_dual(2, (self, flag) =>
				runtimeFlagsPatch_make(active(self) & ~flag, enabled(self))
			),
			andThen = Function_dual(2, (self, that) => self | that),
			cooperativeYielding = self => runtimeFlags_isEnabled(self, 32),
			runtimeFlags_enable = Function_dual(2, (self, flag) => self | flag),
			interruptible = self => interruption(self) && !windDown(self),
			interruption = self => runtimeFlags_isEnabled(self, 1),
			runtimeFlags_isEnabled = Function_dual(
				2,
				(self, flag) => 0 != (self & flag)
			),
			runtimeFlags_make = (...flags) => flags.reduce((a, b) => a | b, 0),
			runtimeFlags_none = runtimeFlags_make(0),
			opSupervision = self => runtimeFlags_isEnabled(self, 2),
			runtimeMetrics = self => runtimeFlags_isEnabled(self, 4),
			windDown = self => runtimeFlags_isEnabled(self, 16),
			runtimeFlags_diff = Function_dual(2, (self, that) =>
				runtimeFlagsPatch_make(self ^ that, that)
			),
			runtimeFlags_patch = Function_dual(
				2,
				(self, patch) =>
					(self & (((~active(patch) >>> 0) & 255) | enabled(patch))) |
					(active(patch) & enabled(patch))
			),
			Patch_empty = runtimeFlagsPatch_empty,
			Patch_disable = flag => runtimeFlagsPatch_make(flag, 0),
			Patch_exclude = exclude
		var cause_a
		const CauseTypeId = Symbol.for("@effect/io/Cause"),
			proto = {
				[CauseTypeId]: { _E: _ => _ },
				[symbol]() {
					return combine(Hash_hash(flattenCause(this)))(
						Hash_hash("@effect/io/Cause")
					)
				},
				[Equal_symbol](that) {
					return isCause(that) && causeEquals(this, that)
				},
			},
			cause_empty = (() => {
				const o = Object.create(proto)
				o._tag = "Empty"
				return o
			})(),
			fail = error => {
				const o = Object.create(proto)
				o._tag = "Fail"
				o.error = error
				return o
			},
			die = defect => {
				const o = Object.create(proto)
				o._tag = "Die"
				o.defect = defect
				return o
			},
			interrupt = fiberId => {
				const o = Object.create(proto)
				o._tag = "Interrupt"
				o.fiberId = fiberId
				return o
			},
			annotated = (cause, annotation) => {
				const o = Object.create(proto)
				o._tag = "Annotated"
				o.cause = cause
				o.annotation = annotation
				return o
			},
			parallel = (left, right) => {
				const o = Object.create(proto)
				o._tag = "Parallel"
				o.left = left
				o.right = right
				return o
			},
			sequential = (left, right) => {
				const o = Object.create(proto)
				o._tag = "Sequential"
				o.left = left
				o.right = right
				return o
			},
			isCause = u => "object" == typeof u && null != u && CauseTypeId in u,
			isEmptyType = self => "Empty" === self._tag,
			isInterruptedOnly = self =>
				reduceWithContext(void 0, IsInterruptedOnlyCauseReducer)(self),
			cause_defects = self =>
				Chunk_reverse(
					cause_reduce(self, Chunk_empty(), (list, cause) =>
						"Die" === cause._tag
							? Option_some(Chunk_prepend(cause.defect)(list))
							: Option_none()
					)
				),
			failureOrCause = self => {
				const option = (self =>
					find(self, cause =>
						"Fail" === cause._tag ? Option_some(cause.error) : Option_none()
					))(self)
				switch (option._tag) {
					case "None":
						return Either_right(self)
					case "Some":
						return Either_left(option.value)
				}
			},
			stripFailures = self =>
				cause_match(
					self,
					cause_empty,
					() => cause_empty,
					defect => die(defect),
					fiberId => interrupt(fiberId),
					(cause, annotation) =>
						isEmptyType(cause) ? cause : annotated(cause, annotation),
					(left, right) => sequential(left, right),
					(left, right) => parallel(left, right)
				),
			causeEquals = (left, right) => {
				let leftStack = Chunk_of(left),
					rightStack = Chunk_of(right)
				for (; Chunk_isNonEmpty(leftStack) && Chunk_isNonEmpty(rightStack); ) {
					const [leftParallel, leftSequential] = cause_reduce(
							[mjs_HashSet_empty(), Chunk_empty()],
							([parallel, sequential], cause) => {
								const [par, seq] = evaluateCause(cause)
								return Option_some([
									mjs_HashSet_union(par)(parallel),
									Chunk_concat(seq)(sequential),
								])
							}
						)(Chunk_headNonEmpty(leftStack)),
						[rightParallel, rightSequential] = cause_reduce(
							[mjs_HashSet_empty(), Chunk_empty()],
							([parallel, sequential], cause) => {
								const [par, seq] = evaluateCause(cause)
								return Option_some([
									mjs_HashSet_union(par)(parallel),
									Chunk_concat(seq)(sequential),
								])
							}
						)(Chunk_headNonEmpty(rightStack))
					if (!equals(leftParallel, rightParallel)) return !1
					leftStack = leftSequential
					rightStack = rightSequential
				}
				return !0
			},
			flattenCause = cause => flattenCauseLoop(Chunk_of(cause), Chunk_empty()),
			flattenCauseLoop = (causes, flattened) => {
				for (;;) {
					const [parallel, sequential] = Chunk_reduce(
							[mjs_HashSet_empty(), Chunk_empty()],
							([parallel, sequential], cause) => {
								const [par, seq] = evaluateCause(cause)
								return [
									mjs_HashSet_union(par)(parallel),
									Chunk_concat(seq)(sequential),
								]
							}
						)(causes),
						updated =
							mjs_HashSet_size(parallel) > 0
								? Chunk_prepend(parallel)(flattened)
								: flattened
					if (Chunk_isEmpty(sequential)) return Chunk_reverse(updated)
					causes = sequential
					flattened = updated
				}
				throw new Error(
					"BUG: Cause.flattenCauseLoop - please report an issue at https://github.com/Effect-TS/io/issues"
				)
			},
			find = Function_dual(2, (self, pf) => {
				const stack = [self]
				for (; stack.length > 0; ) {
					const item = stack.pop(),
						option = pf(item)
					switch (option._tag) {
						case "None":
							switch (item._tag) {
								case "Sequential":
								case "Parallel":
									stack.push(item.right)
									stack.push(item.left)
									break
								case "Annotated":
									stack.push(item.cause)
							}
							break
						case "Some":
							return option
					}
				}
				return Option_none()
			}),
			evaluateCause = self => {
				let cause = self
				const stack = []
				let _parallel = mjs_HashSet_empty(),
					_sequential = Chunk_empty()
				for (; void 0 !== cause; )
					switch (cause._tag) {
						case "Empty":
							if (0 === stack.length) return [_parallel, _sequential]
							cause = stack.pop()
							break
						case "Fail":
							if (0 === stack.length)
								return [mjs_HashSet_add(cause.error)(_parallel), _sequential]
							_parallel = mjs_HashSet_add(cause.error)(_parallel)
							cause = stack.pop()
							break
						case "Die":
							if (0 === stack.length)
								return [mjs_HashSet_add(cause.defect)(_parallel), _sequential]
							_parallel = mjs_HashSet_add(cause.defect)(_parallel)
							cause = stack.pop()
							break
						case "Interrupt":
							if (0 === stack.length)
								return [mjs_HashSet_add(cause.fiberId)(_parallel), _sequential]
							_parallel = mjs_HashSet_add(cause.fiberId)(_parallel)
							cause = stack.pop()
							break
						case "Annotated":
							cause = cause.cause
							break
						case "Sequential":
							switch (cause.left._tag) {
								case "Empty":
									cause = cause.right
									break
								case "Sequential":
									cause = sequential(
										cause.left.left,
										sequential(cause.left.right, cause.right)
									)
									break
								case "Parallel":
									cause = parallel(
										sequential(cause.left.left, cause.right),
										sequential(cause.left.right, cause.right)
									)
									break
								case "Annotated":
									cause = sequential(cause.left.cause, cause.right)
									break
								default:
									_sequential = Chunk_prepend(cause.right)(_sequential)
									cause = cause.left
							}
							break
						case "Parallel":
							stack.push(cause.right)
							cause = cause.left
					}
				throw new Error(
					"BUG: Cause.evaluateCauseLoop - please report an issue at https://github.com/Effect-TS/io/issues"
				)
			},
			IsInterruptedOnlyCauseReducer = {
				emptyCase: Function_constTrue,
				failCase: Function_constFalse,
				dieCase: Function_constFalse,
				interruptCase: Function_constTrue,
				annotatedCase: (_, value) => value,
				sequentialCase: (_, left, right) => left && right,
				parallelCase: (_, left, right) => left && right,
			},
			cause_match = Function_dual(
				8,
				(
					self,
					emptyCase,
					failCase,
					dieCase,
					interruptCase,
					annotatedCase,
					sequentialCase,
					parallelCase
				) =>
					reduceWithContext(self, void 0, {
						emptyCase: () => emptyCase,
						failCase: (_, error) => failCase(error),
						dieCase: (_, defect) => dieCase(defect),
						interruptCase: (_, fiberId) => interruptCase(fiberId),
						annotatedCase: (_, value, annotation) =>
							annotatedCase(value, annotation),
						sequentialCase: (_, left, right) => sequentialCase(left, right),
						parallelCase: (_, left, right) => parallelCase(left, right),
					})
			),
			cause_reduce = Function_dual(3, (self, zero, pf) => {
				let accumulator = zero,
					cause = self
				const causes = []
				for (; void 0 !== cause; ) {
					const option = pf(accumulator, cause)
					accumulator = Option_isSome(option) ? option.value : accumulator
					switch (cause._tag) {
						case "Sequential":
						case "Parallel":
							causes.push(cause.right)
							cause = cause.left
							break
						case "Annotated":
							cause = cause.cause
							break
						default:
							cause = void 0
					}
					void 0 === cause && causes.length > 0 && (cause = causes.pop())
				}
				return accumulator
			}),
			reduceWithContext = Function_dual(3, (self, context, reducer) => {
				const input = [self],
					output = []
				for (; input.length > 0; ) {
					const cause = input.pop()
					switch (cause._tag) {
						case "Empty":
							output.push(Either_right(reducer.emptyCase(context)))
							break
						case "Fail":
							output.push(Either_right(reducer.failCase(context, cause.error)))
							break
						case "Die":
							output.push(Either_right(reducer.dieCase(context, cause.defect)))
							break
						case "Interrupt":
							output.push(
								Either_right(reducer.interruptCase(context, cause.fiberId))
							)
							break
						case "Annotated":
							input.push(cause.cause)
							output.push(
								Either_left({
									_tag: "AnnotatedCase",
									annotation: cause.annotation,
								})
							)
							break
						case "Sequential":
							input.push(cause.right)
							input.push(cause.left)
							output.push(Either_left({ _tag: "SequentialCase" }))
							break
						case "Parallel":
							input.push(cause.right)
							input.push(cause.left)
							output.push(Either_left({ _tag: "ParallelCase" }))
					}
				}
				const accumulator = []
				for (; output.length > 0; ) {
					const either = output.pop()
					switch (either._tag) {
						case "Left":
							switch (either.left._tag) {
								case "SequentialCase": {
									const left = accumulator.pop(),
										right = accumulator.pop(),
										value = reducer.sequentialCase(context, left, right)
									accumulator.push(value)
									break
								}
								case "ParallelCase": {
									const left = accumulator.pop(),
										right = accumulator.pop(),
										value = reducer.parallelCase(context, left, right)
									accumulator.push(value)
									break
								}
								case "AnnotatedCase": {
									const cause = accumulator.pop(),
										value = reducer.annotatedCase(
											context,
											cause,
											either.left.annotation
										)
									accumulator.push(value)
									break
								}
							}
							break
						case "Right":
							accumulator.push(either.right)
					}
				}
				if (0 === accumulator.length)
					throw new Error(
						"BUG: Cause.reduceWithContext - please report an issue at https://github.com/Effect-TS/io/issues"
					)
				return accumulator.pop()
			}),
			makeException = (proto, tag) => {
				const _tag = { value: tag, enumerable: !0 },
					protoWithToString = {
						...proto,
						toString() {
							return `${this._tag}: ${this.message}`
						},
					}
				return message =>
					Object.create(protoWithToString, {
						_tag,
						message: { value: message, enumerable: !0 },
					})
			},
			InterruptedExceptionTypeId = Symbol.for(
				"@effect/io/Cause/errors/InterruptedException"
			),
			isInterruptedException = u =>
				"object" == typeof u && null != u && InterruptedExceptionTypeId in u,
			NoSuchElementExceptionTypeId = Symbol.for(
				"@effect/io/Cause/errors/NoSuchElement"
			),
			NoSuchElementException = makeException(
				{ [NoSuchElementExceptionTypeId]: NoSuchElementExceptionTypeId },
				"NoSuchElementException"
			),
			StackAnnotationTypeId = Symbol.for("@effect/io/Cause/StackAnnotation")
		class StackAnnotation {
			constructor(stack, seq) {
				this.stack = stack
				this.seq = seq
				this[cause_a] = StackAnnotationTypeId
			}
		}
		cause_a = StackAnnotationTypeId
		const globalErrorSeq = MutableRef_make(0),
			isStackAnnotation = u =>
				"object" == typeof u && null != u && StackAnnotationTypeId in u,
			DeferredTypeId = Symbol.for("@effect/io/Deferred"),
			deferredVariance = { _E: _ => _, _A: _ => _ },
			pending = joiners => ({ _tag: "Pending", joiners }),
			done = effect => ({ _tag: "Done", effect })
		class DefaultScheduler {
			constructor() {
				this.running = !1
				this.tasks = []
			}
			starveInternal(depth) {
				const toRun = this.tasks
				this.tasks = []
				for (let i = 0; i < toRun.length; i++) toRun[i]()
				0 === this.tasks.length ? (this.running = !1) : this.starve(depth)
			}
			starve(depth = 0) {
				depth >= 2048
					? setTimeout(() => this.starveInternal(0), 0)
					: Promise.resolve(void 0).then(() => this.starveInternal(depth + 1))
			}
			scheduleTask(task) {
				this.tasks.push(task)
				if (!this.running) {
					this.running = !0
					this.starve()
				}
			}
		}
		const defaultScheduler = globalValue(
			Symbol.for("@effect/io/Scheduler/defaultScheduler"),
			() => new DefaultScheduler()
		)
		var core_a, core_b, core_c
		const EffectErrorTypeId = Symbol.for("@effect/io/Effect/Error"),
			isEffectError = u =>
				"object" == typeof u && null != u && EffectErrorTypeId in u,
			core_EffectTypeId = Symbol.for("@effect/io/Effect")
		class RevertFlags {
			constructor(patch) {
				this.patch = patch
				this._tag = "RevertFlags"
			}
		}
		class EffectPrimitive {
			constructor(_tag) {
				this._tag = _tag
				this.i0 = void 0
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[core_a] = core_effectVariance
			}
			[((core_a = core_EffectTypeId), Equal_symbol)](that) {
				return this === that
			}
			[symbol]() {
				return random(this)
			}
			traced(trace) {
				if (trace) {
					const effect = new EffectPrimitive("Traced")
					effect.i0 = this
					effect.trace = trace
					return effect
				}
				return this
			}
		}
		class EffectPrimitiveFailure {
			constructor(_tag) {
				this._tag = _tag
				this.i0 = void 0
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[core_b] = core_effectVariance
			}
			[((core_b = core_EffectTypeId), Equal_symbol)](that) {
				return this === that
			}
			[symbol]() {
				return random(this)
			}
			get cause() {
				return this.i0
			}
			traced(trace) {
				if (trace) {
					const effect = new EffectPrimitive("Traced")
					effect.i0 = this
					effect.trace = trace
					return effect
				}
				return this
			}
		}
		class EffectPrimitiveSuccess {
			constructor(_tag) {
				this._tag = _tag
				this.i0 = void 0
				this.i1 = void 0
				this.i2 = void 0
				this.trace = void 0
				this[core_c] = core_effectVariance
			}
			[((core_c = core_EffectTypeId), Equal_symbol)](that) {
				return this === that
			}
			[symbol]() {
				return random(this)
			}
			get value() {
				return this.i0
			}
			traced(trace) {
				if (trace) {
					const effect = new EffectPrimitive("Traced")
					effect.i0 = this
					effect.trace = trace
					return effect
				}
				return this
			}
		}
		const core_effectVariance = { _R: _ => _, _E: _ => _, _A: _ => _ },
			isEffect = u =>
				"object" == typeof u && null != u && core_EffectTypeId in u,
			acquireUseRelease = dualWithTrace(
				3,
				(trace, restoreTracing) => (acquire, use, release) =>
					uninterruptibleMask(restore =>
						core_flatMap(a =>
							core_flatMap(exit =>
								matchCauseEffect(
									cause => {
										switch (exit._tag) {
											case "Failure":
												return failCause(parallel(exit.i0, cause))
											case "Success":
												return failCause(cause)
										}
									},
									() => exit
								)(suspend(() => restoreTracing(release)(a, exit)))
							)(core_exit(suspend(() => restore(restoreTracing(use)(a)))))
						)(acquire)
					).traced(trace)
			),
			core_as = dualWithTrace(
				2,
				trace => (self, value) =>
					core_flatMap(() => succeed(value))(self).traced(trace)
			),
			core_asUnit = methodWithTrace(
				trace => self => core_as(void 0)(self).traced(trace)
			),
			core_async = methodWithTrace(
				trace =>
					(register, blockingOn = Id_none) => {
						const effect = new EffectPrimitive("Async")
						effect.i0 = register
						effect.i1 = blockingOn
						return trace ? effect.traced(trace) : effect
					}
			),
			asyncInterruptEither = methodWithTrace(
				(trace, restore) =>
					(register, blockingOn = Id_none) =>
						suspend(() => {
							let cancelerRef = core_unit()
							return onInterrupt(() => cancelerRef)(
								core_async(resume => {
									const result = restore(register)(resume)
									Either_isRight(result)
										? resume(result.right)
										: (cancelerRef = result.left)
								}, blockingOn)
							)
						}).traced(trace)
			),
			asyncInterrupt = methodWithTrace(
				(trace, restore) =>
					(register, blockingOn = Id_none) =>
						suspend(() => {
							let cancelerRef = core_unit()
							return onInterrupt(() => cancelerRef)(
								core_async(resume => {
									cancelerRef = restore(register)(resume)
								}, blockingOn)
							)
						}).traced(trace)
			),
			catchAll = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					matchEffect(restore(f), succeed)(self).traced(trace)
			),
			core_die = methodWithTrace(
				trace => defect => failCause(die(defect)).traced(trace)
			),
			core_either = methodWithTrace(
				trace => self =>
					matchEffect(
						e => succeed(Either_left(e)),
						a => succeed(Either_right(a))
					)(self).traced(trace)
			),
			context = methodWithTrace(
				trace => () => suspend(() => fiberRefGet(currentContext)).traced(trace)
			),
			contextWithEffect = methodWithTrace(
				(trace, restore) => f =>
					core_flatMap(restore(f))(context()).traced(trace)
			),
			core_exit = methodWithTrace(
				trace => self => matchCause(failCause, succeed)(self).traced(trace)
			),
			core_fail = methodWithTrace(
				trace => error => failCause(fail(error)).traced(trace)
			),
			failSync = methodWithTrace(
				(trace, restore) => evaluate =>
					failCauseSync(() => fail(restore(evaluate)())).traced(trace)
			),
			failCause = methodWithTrace(trace => cause => {
				const effect = new EffectPrimitiveFailure("Failure")
				effect.i0 = cause
				return trace ? effect.traced(trace) : effect
			}),
			failCauseSync = methodWithTrace(
				(trace, restore) => evaluate =>
					core_flatMap(sync(restore(evaluate)), failCause).traced(trace)
			),
			fiberId = methodWithTrace(
				trace => () =>
					withFiberRuntime(state => succeed(state.id())).traced(trace)
			),
			core_flatMap = dualWithTrace(2, (trace, restore) => (self, f) => {
				const effect = new EffectPrimitive("OnSuccess")
				effect.i0 = self
				effect.i1 = restore(f)
				return trace ? effect.traced(trace) : effect
			}),
			core_flatten = methodWithTrace(
				trace => self => core_flatMap(self, Function_identity).traced(trace)
			),
			matchCause = dualWithTrace(
				3,
				(trace, restore) => (self, onFailure, onSuccess) =>
					matchCauseEffect(
						cause => succeed(restore(onFailure)(cause)),
						a => succeed(restore(onSuccess)(a))
					)(self).traced(trace)
			),
			matchCauseEffect = dualWithTrace(
				3,
				(trace, restore) => (self, onFailure, onSuccess) => {
					const effect = new EffectPrimitive("OnSuccessAndFailure")
					effect.i0 = self
					effect.i1 = restore(onFailure)
					effect.i2 = restore(onSuccess)
					return trace ? effect.traced(trace) : effect
				}
			),
			matchEffect = dualWithTrace(
				3,
				(trace, restore) => (self, onFailure, onSuccess) =>
					matchCauseEffect(
						self,
						cause => {
							const failures = (self =>
								Chunk_reverse(
									cause_reduce(self, Chunk_empty(), (list, cause) =>
										"Fail" === cause._tag
											? Option_some(Chunk_prepend(cause.error)(list))
											: Option_none()
									)
								))(cause)
							return cause_defects(cause).length > 0
								? failCause(
										(self =>
											cause_match(
												self,
												cause_empty,
												failure => die(failure),
												defect => die(defect),
												fiberId => interrupt(fiberId),
												(cause, annotation) =>
													isEmptyType(cause)
														? cause
														: annotated(cause, annotation),
												(left, right) => sequential(left, right),
												(left, right) => parallel(left, right)
											))(cause)
								  )
								: failures.length > 0
								? restore(onFailure)(unsafeHead(failures))
								: failCause(cause)
						},
						onSuccess
					).traced(trace)
			),
			core_forEach = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					suspend(() => {
						const arr = Array.from(self),
							ret = new Array(arr.length)
						let i = 0
						return core_as(unsafeFromArray(ret))(
							whileLoop(
								() => i < arr.length,
								() => restore(f)(arr[i]),
								b => {
									ret[i++] = b
								}
							)
						)
					}).traced(trace)
			),
			forEachDiscard = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					suspend(() => {
						const arr = Array.from(self)
						let i = 0
						return whileLoop(
							() => i < arr.length,
							() => restore(f)(arr[i++]),
							() => {}
						)
					}).traced(trace)
			),
			core_fromOption = methodWithTrace(trace => option => {
				switch (option._tag) {
					case "None":
						return core_fail(Option_none()).traced(trace)
					case "Some":
						return succeed(option.value).traced(trace)
				}
			}),
			core_fromEither = methodWithTrace(trace => either => {
				switch (either._tag) {
					case "Left":
						return core_fail(either.left).traced(trace)
					case "Right":
						return succeed(either.right).traced(trace)
				}
			}),
			core_interruptible = methodWithTrace(trace => self => {
				const effect = new EffectPrimitive("UpdateRuntimeFlags")
				effect.i0 = runtimeFlagsPatch_make((flag = 1), flag)
				var flag
				effect.i1 = () => self
				return trace ? effect.traced(trace) : effect
			}),
			core_map = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					core_flatMap(a => sync(() => restore(f)(a)))(self).traced(trace)
			),
			mapError = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					matchCauseEffect(
						self,
						cause => {
							const either = failureOrCause(cause)
							switch (either._tag) {
								case "Left":
									return failSync(() => restore(f)(either.left))
								case "Right":
									return failCause(either.right)
							}
						},
						succeed
					).traced(trace)
			),
			onExit = dualWithTrace(
				2,
				(trace, restoreTrace) => (self, cleanup) =>
					uninterruptibleMask(restore =>
						matchCauseEffect(
							restore(self),
							cause1 => {
								const result = exitFailCause(cause1)
								return matchCauseEffect(
									cause2 => exitFailCause(sequential(cause1, cause2)),
									() => result
								)(restoreTrace(cleanup)(result))
							},
							success => {
								const result = exitSucceed(success)
								return core_zipRight(result)(restoreTrace(cleanup)(result))
							}
						)
					).traced(trace)
			),
			onInterrupt = dualWithTrace(
				2,
				(trace, restore) => (self, cleanup) =>
					onExit(
						self,
						exitMatch(
							cause =>
								isInterruptedOnly(cause)
									? core_asUnit(
											restore(cleanup)(
												(self =>
													cause_reduce(
														self,
														mjs_HashSet_empty(),
														(set, cause) =>
															"Interrupt" === cause._tag
																? Option_some(
																		mjs_HashSet_add(cause.fiberId)(set)
																  )
																: Option_none()
													))(cause)
											)
									  )
									: core_unit(),
							() => core_unit()
						)
					).traced(trace)
			),
			core_orElse = dualWithTrace(
				2,
				(trace, restore) => (self, that) =>
					attemptOrElse(restore(that), succeed)(self).traced(trace)
			),
			orDie = methodWithTrace(
				trace => self => orDieWith(self, Function_identity).traced(trace)
			),
			orDieWith = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					matchEffect(e => core_die(restore(f)(e)), succeed)(self).traced(trace)
			),
			provideContext = dualWithTrace(
				2,
				trace => (self, context) =>
					fiberRefLocally(currentContext, context)(self).traced(trace)
			),
			contramapContext = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					contextWithEffect(context =>
						provideContext(restore(f)(context))(self)
					).traced(trace)
			),
			succeed = methodWithTrace(trace => value => {
				const effect = new EffectPrimitiveSuccess("Success")
				effect.i0 = value
				return trace ? effect.traced(trace) : effect
			}),
			suspend = methodWithTrace(
				(trace, restore) => effect =>
					core_flatMap(Function_identity)(sync(restore(effect))).traced(trace)
			),
			sync = methodWithTrace((trace, restore) => evaluate => {
				const effect = new EffectPrimitive("Sync")
				effect.i0 = restore(evaluate)
				return trace ? effect.traced(trace) : effect
			}),
			core_tap = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					core_flatMap(a => core_as(a)(restore(f)(a)))(self).traced(trace)
			),
			transplant = methodWithTrace(
				(trace, restore) => f =>
					withFiberRuntime(state => {
						const scopeOverride = state.getFiberRef(forkScopeOverride),
							scope = getOrElse(() => state.scope())(scopeOverride)
						return restore(f)(
							fiberRefLocally(forkScopeOverride, Option_some(scope))
						)
					}).traced(trace)
			),
			attemptOrElse = dualWithTrace(
				3,
				(trace, restore) => (self, that, onSuccess) =>
					matchCauseEffect(
						self,
						cause =>
							cause_defects(cause).length > 0
								? failCause(
										getOrThrow(
											(self =>
												cause_match(
													self,
													Option_none(),
													failure => Option_some(die(failure)),
													defect => Option_some(die(defect)),
													() => Option_none(),
													(option, annotation) =>
														Option_map(cause => annotated(cause, annotation))(
															option
														),
													(left, right) =>
														Option_isSome(left) && Option_isSome(right)
															? Option_some(sequential(left.value, right.value))
															: Option_isSome(left) && Option_isNone(right)
															? Option_some(left.value)
															: Option_isNone(left) && Option_isSome(right)
															? Option_some(right.value)
															: Option_none(),
													(left, right) =>
														Option_isSome(left) && Option_isSome(right)
															? Option_some(parallel(left.value, right.value))
															: Option_isSome(left) && Option_isNone(right)
															? Option_some(left.value)
															: Option_isNone(left) && Option_isSome(right)
															? Option_some(right.value)
															: Option_none()
												))(cause)
										)
								  )
								: restore(that)(),
						restore(onSuccess)
					).traced(trace)
			),
			uninterruptible = methodWithTrace(trace => self => {
				const effect = new EffectPrimitive("UpdateRuntimeFlags")
				effect.i0 = Patch_disable(1)
				effect.i1 = () => self
				return trace ? effect.traced(trace) : effect
			}),
			uninterruptibleMask = methodWithTrace((trace, restore) => f => {
				const effect = new EffectPrimitive("UpdateRuntimeFlags")
				effect.i0 = Patch_disable(1)
				effect.i1 = oldFlags =>
					interruption(oldFlags)
						? restore(f)(core_interruptible)
						: restore(f)(uninterruptible)
				return trace ? effect.traced(trace) : effect
			}),
			core_unit = methodWithTrace(trace => _ => succeed(void 0).traced(trace)),
			updateRuntimeFlags = methodWithTrace(trace => patch => {
				const effect = new EffectPrimitive("UpdateRuntimeFlags")
				effect.i0 = patch
				effect.i1 = void 0
				return trace ? effect.traced(trace) : effect
			}),
			whenEffect = dualWithTrace(
				2,
				trace => (self, predicate) =>
					core_flatMap(b =>
						b ? core_map(Option_some)(self) : succeed(Option_none())
					)(predicate).traced(trace)
			),
			whileLoop = methodWithTrace(
				(trace, restore) => (check, body, process) => {
					const effect = new EffectPrimitive("While")
					effect.i0 = restore(check)
					effect.i1 = restore(body)
					effect.i2 = restore(process)
					return trace ? effect.traced(trace) : effect
				}
			),
			withFiberRuntime = methodWithTrace((trace, restore) => withRuntime => {
				const effect = new EffectPrimitive("WithRuntime")
				effect.i0 = restore(withRuntime)
				return trace ? effect.traced(trace) : effect
			}),
			withParallelism = dualWithTrace(
				2,
				trace => (self, parallelism) =>
					suspend(() =>
						fiberRefLocally(currentParallelism, Option_some(parallelism))(self)
					).traced(trace)
			),
			withParallelismUnbounded = methodWithTrace(
				trace => self =>
					suspend(() =>
						fiberRefLocally(currentParallelism, Option_none())(self)
					).traced(trace)
			),
			yieldNow = methodWithTrace(trace => () => {
				const effect = new EffectPrimitive("Yield")
				return trace ? effect.traced(trace) : effect
			}),
			core_zip = dualWithTrace(
				2,
				trace => (self, that) =>
					core_flatMap(self, a => core_map(that, b => [a, b])).traced(trace)
			),
			core_zipLeft = dualWithTrace(
				2,
				trace => (self, that) =>
					core_flatMap(self, a => core_as(that, a)).traced(trace)
			),
			core_zipRight = dualWithTrace(
				2,
				trace => (self, that) => core_flatMap(self, () => that).traced(trace)
			),
			core_zipWith = dualWithTrace(
				3,
				(trace, restore) => (self, that, f) =>
					core_flatMap(self, a => core_map(that, b => restore(f)(a, b))).traced(
						trace
					)
			),
			interruptFiber = methodWithTrace(
				trace => self =>
					core_flatMap(fiberId => interruptAsFiber(fiberId)(self))(
						fiberId()
					).traced(trace)
			),
			interruptAsFiber = dualWithTrace(
				2,
				trace => (self, fiberId) =>
					core_flatMap(() => self.await())(
						self.interruptAsFork(fiberId)
					).traced(trace)
			),
			logLevelAll = {
				_tag: "All",
				syslog: 0,
				label: "ALL",
				ordinal: Number.MIN_SAFE_INTEGER,
			},
			logLevelInfo = { _tag: "Info", syslog: 6, label: "INFO", ordinal: 2e4 },
			logLevelDebug = {
				_tag: "Debug",
				syslog: 7,
				label: "DEBUG",
				ordinal: 1e4,
			},
			logLevelNone = {
				_tag: "None",
				syslog: 7,
				label: "OFF",
				ordinal: Number.MAX_SAFE_INTEGER,
			},
			FiberRefTypeId = Symbol.for("@effect/io/FiberRef"),
			fiberRefVariance = { _A: _ => _ },
			fiberRefGet = methodWithTrace(
				trace => self => fiberRefModify(self, a => [a, a]).traced(trace)
			),
			fiberRefGetWith = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					core_flatMap(fiberRefGet(self), restore(f)).traced(trace)
			),
			fiberRefSet = dualWithTrace(
				2,
				trace => (self, value) =>
					fiberRefModify(self, () => [void 0, value]).traced(trace)
			),
			fiberRefModify = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					withFiberRuntime(state => {
						const [b, a] = restore(f)(state.getFiberRef(self))
						state.setFiberRef(self, a)
						return succeed(b)
					}).traced(trace)
			),
			fiberRefLocally = dualWithTrace(
				3,
				trace => (use, self, value) =>
					acquireUseRelease(
						core_zipLeft(fiberRefGet(self), fiberRefSet(self, value)),
						() => use,
						oldValue => fiberRefSet(self, oldValue)
					).traced(trace)
			),
			fiberRefUnsafeMake = (
				initial,
				fork = Function_identity,
				join = (_, a) => a
			) => fiberRefUnsafeMakePatch(initial, Differ_update(), fork, join),
			fiberRefUnsafeMakeHashSet = initial =>
				fiberRefUnsafeMakePatch(
					initial,
					Differ_hashSet(),
					Differ_HashSetPatch_empty()
				),
			fiberRefUnsafeMakeContext = initial =>
				fiberRefUnsafeMakePatch(
					initial,
					Differ_environment(),
					Differ_ContextPatch_empty()
				),
			fiberRefUnsafeMakePatch = (
				initial,
				differ,
				fork,
				join = (_, n) => n
			) => ({
				[FiberRefTypeId]: fiberRefVariance,
				initial,
				diff: (oldValue, newValue) => Differ_diff(oldValue, newValue)(differ),
				combine: (first, second) => Differ_combine(first, second)(differ),
				patch: patch => oldValue => Differ_patch(patch, oldValue)(differ),
				fork,
				join,
			}),
			fiberRefUnsafeMakeRuntimeFlags = initial =>
				fiberRefUnsafeMakePatch(
					initial,
					mjs_Differ_make({
						empty: runtimeFlagsPatch_empty,
						diff: (oldValue, newValue) => runtimeFlags_diff(oldValue, newValue),
						combine: (first, second) => andThen(second)(first),
						patch: (_patch, oldValue) => runtimeFlags_patch(oldValue, _patch),
					}),
					Patch_empty
				),
			currentContext = fiberRefUnsafeMakeContext(mjs_Context_empty()),
			currentLogAnnotations = fiberRefUnsafeMake(mjs_HashMap_empty()),
			currentLogLevel = fiberRefUnsafeMake(logLevelInfo),
			currentLogSpan = fiberRefUnsafeMake(Chunk_empty()),
			currentScheduler = fiberRefUnsafeMake(defaultScheduler),
			currentParallelism = fiberRefUnsafeMake(Option_none()),
			unhandledErrorLogLevel = fiberRefUnsafeMake(
				Option_some(logLevelDebug),
				_ => _,
				(_, x) => x
			),
			currentTags = fiberRefUnsafeMakeHashSet(mjs_HashSet_empty()),
			forkScopeOverride = fiberRefUnsafeMake(
				Option_none(),
				() => Option_none(),
				(parent, _) => parent
			),
			interruptedCause = fiberRefUnsafeMake(
				cause_empty,
				() => cause_empty,
				(parent, _) => parent
			),
			ScopeTypeId = Symbol.for("@effect/io/Scope"),
			CloseableScopeTypeId = Symbol.for("@effect/io/CloseableScope"),
			scopeAddFinalizerExit = methodWithTrace(
				(trace, restore) => (self, finalizer) =>
					self.addFinalizer(restore(finalizer)).traced(trace)
			),
			scopeClose = methodWithTrace(
				trace => (self, exit) => self.close(exit).traced(trace)
			),
			releaseMapAdd = dualWithTrace(
				2,
				(trace, restore) => (self, finalizer) =>
					core_map(
						match(
							() => () => core_unit(),
							key => exit => releaseMapRelease(key, exit)(self)
						)
					)(releaseMapAddIfOpen(restore(finalizer))(self)).traced(trace)
			),
			releaseMapRelease = dualWithTrace(
				3,
				trace => (self, key, exit) =>
					suspend(() => {
						switch (self.state._tag) {
							case "Exited":
								return core_unit()
							case "Running": {
								const finalizer = self.state.finalizers.get(key)
								self.state.finalizers.delete(key)
								return null != finalizer
									? self.state.update(finalizer)(exit)
									: core_unit()
							}
						}
					}).traced(trace)
			),
			releaseMapAddIfOpen = dualWithTrace(
				2,
				(trace, restore) => (self, finalizer) =>
					suspend(() => {
						switch (self.state._tag) {
							case "Exited":
								self.state.nextKey += 1
								return core_as(Option_none())(
									restore(finalizer)(self.state.exit)
								)
							case "Running": {
								const key = self.state.nextKey
								self.state.finalizers.set(key, finalizer)
								self.state.nextKey += 1
								return succeed(Option_some(key))
							}
						}
					}).traced(trace)
			),
			releaseMapMake = methodWithTrace(
				trace => () =>
					sync(() => ({
						state: {
							_tag: "Running",
							nextKey: 0,
							finalizers: new Map(),
							update: Function_identity,
						},
					})).traced(trace)
			),
			exitAs = Function_dual(2, (self, value) => {
				switch (self._tag) {
					case "Failure":
						return self
					case "Success":
						return exitSucceed(value)
				}
			}),
			exitAsUnit = self => exitAs(self, void 0),
			exitCollectAllPar = exits => exitCollectAllInternal(exits, parallel),
			exitFail = error => exitFailCause(fail(error)),
			exitFailCause = cause => {
				const effect = new EffectPrimitiveFailure("Failure")
				effect.i0 = cause
				return effect
			},
			exitMap = Function_dual(2, (self, f) => {
				switch (self._tag) {
					case "Failure":
						return self
					case "Success":
						return exitSucceed(f(self.i0))
				}
			}),
			exitMatch = Function_dual(3, (self, onFailure, onSuccess) => {
				switch (self._tag) {
					case "Failure":
						return onFailure(self.i0)
					case "Success":
						return onSuccess(self.i0)
				}
			}),
			exitMatchEffect = Function_dual(3, (self, onFailure, onSuccess) => {
				switch (self._tag) {
					case "Failure":
						return onFailure(self.i0)
					case "Success":
						return onSuccess(self.i0)
				}
			}),
			exitSucceed = value => {
				const effect = new EffectPrimitiveSuccess("Success")
				effect.i0 = value
				return effect
			},
			exitUnit = () => exitSucceed(void 0),
			exitZipWith = Function_dual(4, (self, that, f, g) => {
				switch (self._tag) {
					case "Failure":
						switch (that._tag) {
							case "Success":
								return self
							case "Failure":
								return exitFailCause(g(self.i0, that.i0))
						}
					case "Success":
						switch (that._tag) {
							case "Success":
								return exitSucceed(f(self.i0, that.i0))
							case "Failure":
								return that
						}
				}
			}),
			exitCollectAllInternal = (exits, combineCauses) => {
				const list = Chunk_fromIterable(exits)
				return Chunk_isNonEmpty(list)
					? Option_some(
							exitMap(Chunk_reverse)(
								Chunk_reduce(
									exitMap(Chunk_of)(Chunk_headNonEmpty(list)),
									(accumulator, current) =>
										exitZipWith(
											current,
											(list, value) => Chunk_prepend(value)(list),
											combineCauses
										)(accumulator)
								)(Chunk_tailNonEmpty(list))
							)
					  )
					: Option_none()
			},
			deferredUnsafeMake = fiberId => ({
				[DeferredTypeId]: deferredVariance,
				state: MutableRef_make(pending([])),
				blockingOn: fiberId,
			}),
			deferredMake = methodWithTrace(
				trace => () =>
					core_flatMap(id => deferredMakeAs(id))(fiberId()).traced(trace)
			),
			deferredMakeAs = methodWithTrace(
				trace => fiberId =>
					sync(() => deferredUnsafeMake(fiberId)).traced(trace)
			),
			deferredAwait = methodWithTrace(
				trace => self =>
					asyncInterruptEither(k => {
						const state = MutableRef_get(self.state)
						switch (state._tag) {
							case "Done":
								return Either_right(state.effect)
							case "Pending":
								MutableRef_set(pending([k, ...state.joiners]))(self.state)
								return Either_left(deferredInterruptJoiner(self, k))
						}
					}, self.blockingOn).traced(trace)
			),
			deferredCompleteWith = dualWithTrace(
				2,
				trace => (self, effect) =>
					sync(() => {
						const state = MutableRef_get(self.state)
						switch (state._tag) {
							case "Done":
								return !1
							case "Pending":
								MutableRef_set(done(effect))(self.state)
								for (let i = 0; i < state.joiners.length; i++)
									state.joiners[i](effect)
								return !0
						}
					}).traced(trace)
			),
			deferredFail = dualWithTrace(
				2,
				trace => (self, error) =>
					deferredCompleteWith(self, core_fail(error)).traced(trace)
			),
			deferredFailCause = dualWithTrace(
				2,
				trace => (self, cause) =>
					deferredCompleteWith(self, failCause(cause)).traced(trace)
			),
			deferredSucceed = dualWithTrace(
				2,
				trace => (self, value) =>
					deferredCompleteWith(self, succeed(value)).traced(trace)
			),
			deferredUnsafeDone = (self, effect) => {
				const state = MutableRef_get(self.state)
				if ("Pending" === state._tag) {
					MutableRef_set(done(effect))(self.state)
					for (let i = state.joiners.length - 1; i >= 0; i--)
						state.joiners[i](effect)
				}
			},
			deferredInterruptJoiner = (self, joiner) =>
				sync(() => {
					const state = MutableRef_get(self.state)
					"Pending" === state._tag &&
						MutableRef_set(pending(state.joiners.filter(j => j !== joiner)))(
							self.state
						)
				})
		var clock_a
		const ClockTypeId = Symbol.for("@effect/io/Clock"),
			clockTag = Tag(ClockTypeId),
			globalClockScheduler = {
				unsafeSchedule(task, duration) {
					if (duration.millis > 2147483647) return Function_constFalse
					let completed = !1
					const handle = setTimeout(() => {
						completed = !0
						task()
					}, duration.millis)
					return () => {
						clearTimeout(handle)
						return !completed
					}
				},
			}
		class ClockImpl {
			constructor() {
				this[clock_a] = ClockTypeId
			}
			unsafeCurrentTimeMillis() {
				return new Date().getTime()
			}
			currentTimeMillis() {
				return bodyWithTrace(trace =>
					sync(() => this.unsafeCurrentTimeMillis()).traced(trace)
				)
			}
			scheduler() {
				return bodyWithTrace(trace =>
					succeed(globalClockScheduler).traced(trace)
				)
			}
			sleep(duration) {
				return bodyWithTrace(trace =>
					asyncInterruptEither(cb => {
						const canceler = globalClockScheduler.unsafeSchedule(
							() => cb(core_unit()),
							duration
						)
						return Either_left(core_asUnit(sync(canceler)))
					}).traced(trace)
				)
			}
		}
		clock_a = ClockTypeId
		const ConfigErrorTypeId = Symbol.for("@effect/io/Config/Error"),
			configError_proto = { [ConfigErrorTypeId]: ConfigErrorTypeId },
			And = (self, that) => {
				const error = Object.create(configError_proto)
				error._tag = "And"
				error.left = self
				error.right = that
				Object.defineProperty(error, "toString", {
					enumerable: !1,
					value() {
						return `${this.left} and ${this.right}`
					},
				})
				return error
			},
			Or = (self, that) => {
				const error = Object.create(configError_proto)
				error._tag = "Or"
				error.left = self
				error.right = that
				Object.defineProperty(error, "toString", {
					enumerable: !1,
					value() {
						return `${this.left} or ${this.right}`
					},
				})
				return error
			},
			InvalidData = (path, message) => {
				const error = Object.create(configError_proto)
				error._tag = "InvalidData"
				error.path = path
				error.message = message
				Object.defineProperty(error, "toString", {
					enumerable: !1,
					value() {
						return `(Invalid data at ${Chunk_join(".")(this.path)}: "${
							this.message
						}")`
					},
				})
				return error
			},
			MissingData = (path, message) => {
				const error = Object.create(configError_proto)
				error._tag = "MissingData"
				error.path = path
				error.message = message
				Object.defineProperty(error, "toString", {
					enumerable: !1,
					value() {
						return `(Missing data at ${Chunk_join(".")(this.path)}: "${
							this.message
						}")`
					},
				})
				return error
			},
			SourceUnavailable = (path, message, cause) => {
				const error = Object.create(configError_proto)
				error._tag = "SourceUnavailable"
				error.path = path
				error.message = message
				error.cause = cause
				Object.defineProperty(error, "toString", {
					enumerable: !1,
					value() {
						return `(Source unavailable at ${Chunk_join(".")(this.path)}: "${
							this.message
						}")`
					},
				})
				return error
			},
			Unsupported = (path, message) => {
				const error = Object.create(configError_proto)
				error._tag = "Unsupported"
				error.path = path
				error.message = message
				Object.defineProperty(error, "toString", {
					enumerable: !1,
					value() {
						return `(Unsupported operation at ${Chunk_join(".")(this.path)}: "${
							this.message
						}")`
					},
				})
				return error
			},
			prefixed = Function_dual(2, (self, prefix) => {
				switch (self._tag) {
					case "And":
						return And(
							prefixed(prefix)(self.left),
							prefixed(prefix)(self.right)
						)
					case "Or":
						return Or(prefixed(prefix)(self.left), prefixed(prefix)(self.right))
					case "InvalidData":
						return InvalidData(Chunk_concat(self.path)(prefix), self.message)
					case "MissingData":
						return MissingData(Chunk_concat(self.path)(prefix), self.message)
					case "SourceUnavailable":
						return SourceUnavailable(
							Chunk_concat(self.path)(prefix),
							self.message,
							self.cause
						)
					case "Unsupported":
						return Unsupported(Chunk_concat(self.path)(prefix), self.message)
				}
			})
		var List_a, List_b
		const ListTypeId = Symbol.for("@effect/data/List"),
			listVariance = { _A: _ => _ }
		class ConsImpl {
			constructor(head, tail) {
				this.head = head
				this.tail = tail
				this._tag = "Cons"
				this[List_a] = listVariance
			}
			toString() {
				return `List.Cons(${List_toReadonlyArray(this).map(String).join(", ")})`
			}
			toJSON() {
				return { _tag: "List.Cons", values: List_toReadonlyArray(this) }
			}
			[((List_a = ListTypeId), Symbol.for("nodejs.util.inspect.custom"))]() {
				return this.toJSON()
			}
			[Equal_symbol](that) {
				return (
					isList(that) &&
					this._tag === that._tag &&
					equalsWith(this, that, equals)
				)
			}
			[symbol]() {
				return string("@effect/data/List")
			}
			[Symbol.iterator]() {
				let done = !1,
					self = this
				return {
					next() {
						if (done) return this.return()
						if ("Nil" === self._tag) {
							done = !0
							return this.return()
						}
						const value = self.head
						self = self.tail
						return { done, value }
					},
					return(value) {
						done || (done = !0)
						return { done: !0, value }
					},
				}
			}
		}
		class NilImpl {
			constructor() {
				this._tag = "Nil"
				this[List_b] = listVariance
			}
			toString() {
				return "List.Nil"
			}
			toJSON() {
				return { _tag: "List.Nil" }
			}
			[((List_b = ListTypeId), Symbol.for("nodejs.util.inspect.custom"))]() {
				return this.toJSON()
			}
			[symbol]() {
				return array(Array.from(this))
			}
			[Equal_symbol](that) {
				return isList(that) && this._tag === that._tag
			}
			[Symbol.iterator]() {
				return { next: () => ({ done: !0, value: void 0 }) }
			}
		}
		const isList = u => "object" == typeof u && null != u && ListTypeId in u,
			isNil = self => "Nil" === self._tag,
			isCons = self => "Cons" === self._tag,
			List_length = self => {
				let these = self,
					len = 0
				for (; !isNil(these); ) {
					len += 1
					these = these.tail
				}
				return len
			},
			equalsWith = Function_dual(3, (self, that, f) => {
				if (self === that) return !0
				if (List_length(self) !== List_length(that)) return !1
				const selfIterator = self[Symbol.iterator](),
					thatIterator = that[Symbol.iterator]()
				let nextSelf, nextThat
				for (
					;
					!(nextSelf = selfIterator.next()).done &&
					!(nextThat = thatIterator.next()).done;

				)
					if (!f(nextSelf.value, nextThat.value)) return !1
				return !0
			}),
			_Nil = new NilImpl(),
			cons = (head, tail) => new ConsImpl(head, tail),
			List_toReadonlyArray = self => Array.from(self),
			pathPatch_empty = { _tag: "Empty" },
			pathPatch_patch = Function_dual(2, (path, patch) => {
				let input = new ConsImpl(patch, _Nil),
					output = path
				for (; isCons(input); ) {
					const patch = input.head
					switch (patch._tag) {
						case "Empty":
							input = input.tail
							break
						case "AndThen":
							input = cons(patch.first, cons(patch.second, input.tail))
							break
						case "MapName":
							output = Chunk_map(output, patch.f)
							input = input.tail
							break
						case "Nested":
							output = Chunk_prepend(output, patch.name)
							input = input.tail
							break
						case "Unnested":
							if (!contains(String_Equivalence)(patch.name)(Chunk_head(output)))
								return Either_left(
									MissingData(
										output,
										`Expected ${patch.name} to be in path in ConfigProvider#unnested`
									)
								)
							output = Chunk_tailNonEmpty(output)
							input = input.tail
					}
				}
				return Either_right(output)
			}),
			ConfigProviderTypeId = Symbol.for("@effect/io/Config/Provider"),
			configProviderTag = Tag(ConfigProviderTypeId),
			FlatConfigProviderTypeId = Symbol.for("@effect/io/Config/Provider/Flat"),
			configProvider_make = untracedMethod(restore => (load, flattened) => ({
				[ConfigProviderTypeId]: ConfigProviderTypeId,
				load: methodWithTrace(
					trace => config => restore(load)(config).traced(trace)
				),
				flattened,
			})),
			makeFlat = untracedMethod(
				restore => (load, enumerateChildren, patch) => ({
					[FlatConfigProviderTypeId]: FlatConfigProviderTypeId,
					patch,
					load: methodWithTrace(
						trace =>
							(path, config, split = !0) =>
								restore(load)(path, config, split).traced(trace)
					),
					enumerateChildren: methodWithTrace(
						trace => path => restore(enumerateChildren)(path).traced(trace)
					),
				})
			),
			fromFlat = untracedMethod(
				() => flat =>
					configProvider_make(
						config =>
							core_flatMap(
								fromFlatLoop(flat, Chunk_empty(), config, !1),
								chunk =>
									match(
										() =>
											core_fail(
												MissingData(
													Chunk_empty(),
													`Expected a single value having structure: ${config}`
												)
											),
										succeed
									)(Chunk_head(chunk))
							),
						flat
					)
			),
			fromEnv = untracedMethod(() => (config = {}) => {
				const { pathDelim, seqDelim } = Object.assign(
						{},
						{ pathDelim: "_", seqDelim: "," },
						config
					),
					getEnv = () =>
						"undefined" != typeof process &&
						"env" in process &&
						"object" == typeof process.env
							? process.env
							: {}
				return fromFlat(
					makeFlat(
						(path, primitive, split = !0) => {
							const pathString = (path => Chunk_join(pathDelim)(path))(path),
								current = getEnv(),
								valueOpt =
									pathString in current
										? Option_some(current[pathString])
										: Option_none()
							return core_flatMap(value =>
								parsePrimitive(value, path, primitive, seqDelim, split)
							)(
								mapError(() =>
									MissingData(
										path,
										`Expected ${pathString} to exist in the process context`
									)
								)(core_fromOption(valueOpt))
							)
						},
						path =>
							sync(() => {
								const current = getEnv(),
									keys = Object.keys(current),
									filteredKeyPaths = Array.from(keys)
										.map(value => value.toUpperCase().split(pathDelim))
										.filter(keyPath => {
											for (let i = 0; i < path.length; i++) {
												const pathComponent = Chunk_unsafeGet(i)(path),
													currentElement = keyPath[i]
												if (
													void 0 === currentElement ||
													pathComponent !== currentElement
												)
													return !1
											}
											return !0
										})
										.flatMap(keyPath =>
											keyPath.slice(path.length, path.length + 1)
										)
								return mjs_HashSet_fromIterable(filteredKeyPaths)
							}),
						pathPatch_empty
					)
				)
			}),
			fromFlatLoop = (flat, prefix, config, split) => {
				const op = config
				switch (op._tag) {
					case "Constant":
						return succeed(Chunk_of(op.value))
					case "Described":
						return suspend(() => fromFlatLoop(flat, prefix, op.config, split))
					case "Fail":
						return core_fail(MissingData(prefix, op.message))
					case "Fallback":
						return catchAll(error1 =>
							op.condition(error1)
								? catchAll(error2 => core_fail(Or(error1, error2)))(
										fromFlatLoop(flat, prefix, op.second, split)
								  )
								: core_fail(error1)
						)(suspend(() => fromFlatLoop(flat, prefix, op.first, split)))
					case "Lazy":
						return suspend(() => fromFlatLoop(flat, prefix, op.config(), split))
					case "MapOrFail":
						return suspend(() =>
							core_flatMap(
								core_forEach(a =>
									mapError(prefixed(prefix))(core_fromEither(op.mapOrFail(a)))
								)
							)(fromFlatLoop(flat, prefix, op.original, split))
						)
					case "Nested":
						return suspend(() =>
							fromFlatLoop(
								flat,
								Chunk_concat(Chunk_of(op.name))(prefix),
								op.config,
								split
							)
						)
					case "Primitive":
						return core_flatMap(prefix =>
							core_flatMap(values => {
								if (Chunk_isEmpty(values)) {
									const name = getOrElse(() => "<n/a>")(
										(self => Chunk_get(self, self.length - 1))(prefix)
									)
									return core_fail(
										(
											name => self =>
												MissingData(
													Chunk_empty(),
													`Expected ${self.description} with name ${name}`
												)
										)(name)
									)
								}
								return succeed(values)
							})(flat.load(prefix, op, split))
						)(core_fromEither(pathPatch_patch(prefix, flat.patch)))
					case "Sequence":
						return suspend(() =>
							core_map(Chunk_of)(fromFlatLoop(flat, prefix, op.config, !0))
						)
					case "Table":
						return suspend(() =>
							core_flatMap(prefix =>
								core_flatMap(keys =>
									core_map(values => {
										if (0 === values.length)
											return Chunk_of(mjs_HashMap_empty())
										const matrix = toReadonlyArray(values).map(toReadonlyArray)
										return Chunk_map(values =>
											mjs_HashMap_fromIterable(
												Chunk_zip(Chunk_fromIterable(keys), values)
											)
										)(unsafeFromArray(transpose(matrix).map(unsafeFromArray)))
									})(
										core_forEach(key =>
											fromFlatLoop(
												flat,
												Chunk_concat(Chunk_of(key))(prefix),
												op.valueConfig,
												split
											)
										)(keys)
									)
								)(flat.enumerateChildren(prefix))
							)(core_fromEither(pathPatch_patch(prefix, flat.patch)))
						)
					case "ZipWith":
						return suspend(() =>
							core_flatMap(left =>
								core_flatMap(right => {
									if (Either_isLeft(left) && Either_isLeft(right))
										return core_fail(And(left.left, right.left))
									if (Either_isLeft(left) && Either_isRight(right))
										return core_fail(left.left)
									if (Either_isRight(left) && Either_isLeft(right))
										return core_fail(right.left)
									if (Either_isRight(left) && Either_isRight(right)) {
										const path = Chunk_join(".")(prefix),
											fail = fromFlatLoopFail(prefix, path),
											[lefts, rights] = ((leftDef, rightDef, left, right) => {
												const leftPad = Chunk_unfold(left.length, index =>
														index >= right.length
															? Option_none()
															: Option_some([leftDef(index), index + 1])
													),
													rightPad = Chunk_unfold(right.length, index =>
														index >= left.length
															? Option_none()
															: Option_some([rightDef(index), index + 1])
													)
												return [
													Chunk_concat(leftPad)(left),
													Chunk_concat(rightPad)(right),
												]
											})(
												fail,
												fail,
												Chunk_map(Either_right)(left.right),
												Chunk_map(Either_right)(right.right)
											)
										return core_forEach(([left, right]) =>
											core_map(([left, right]) => op.zip(left, right))(
												core_zip(core_fromEither(right))(core_fromEither(left))
											)
										)(Chunk_zip(rights)(lefts))
									}
									throw new Error(
										"BUG: ConfigProvider.fromFlatLoop - please report an issue at https://github.com/Effect-TS/io/issues"
									)
								})(core_either(fromFlatLoop(flat, prefix, op.right, split)))
							)(core_either(fromFlatLoop(flat, prefix, op.left, split)))
						)
				}
			},
			fromFlatLoopFail = (prefix, path) => index =>
				Either_left(
					MissingData(
						prefix,
						`The element at index ${index} in a sequence at path "${path}" was missing`
					)
				),
			parsePrimitive = (text, path, primitive, delimiter, split) =>
				split
					? mapError(prefixed(path))(
							core_forEach(char =>
								core_fromEither(primitive.parse(char.trim()))
							)(
								((text, delim) => {
									const split = text.split(
										new RegExp(`\\s*${escapeRegex(delim)}\\s*`)
									)
									return unsafeFromArray(split)
								})(text, delimiter)
							)
					  )
					: mapError(prefixed(path))(
							core_map(Chunk_of)(core_fromEither(primitive.parse(text)))
					  ),
			transpose = array =>
				Object.keys(array[0]).map(column => array.map(row => row[column])),
			escapeRegex = string => string.replace(/[/\-\\^$*+?.()|[\]{}]/g, "\\$&")
		var random_a
		const RandomTypeId = Symbol.for("@effect/io/Random"),
			randomTag = Tag(RandomTypeId)
		random_a = RandomTypeId
		const shuffleWith = (elements, nextIntBounded) =>
				suspend(() =>
					core_flatMap(buffer => {
						const numbers = []
						for (let i = buffer.length; i >= 2; i -= 1) numbers.push(i)
						return core_as(Chunk_fromIterable(buffer))(
							forEachDiscard(n =>
								core_map(k => swap(buffer, n - 1, k))(nextIntBounded(n))
							)(numbers)
						)
					})(sync(() => Array.from(elements)))
				),
			swap = (buffer, index1, index2) => {
				const tmp = buffer[index1]
				buffer[index1] = buffer[index2]
				buffer[index2] = tmp
				return buffer
			}
		var seed
		const currentServices = fiberRefUnsafeMakeContext(
				Context_add(
					configProviderTag,
					fromEnv()
				)(
					Context_add(
						randomTag,
						((seed = (4294967296 * Math.random()) >>> 0),
						new (class {
							constructor(seed) {
								this.seed = seed
								this[random_a] = RandomTypeId
								this.PRNG = new PCGRandom(seed)
							}
							next() {
								return bodyWithTrace(trace =>
									sync(() => this.PRNG.number()).traced(trace)
								)
							}
							nextBoolean() {
								return bodyWithTrace(trace =>
									core_map(this.next(), n => n > 0.5).traced(trace)
								)
							}
							nextInt() {
								return bodyWithTrace(trace =>
									sync(() => this.PRNG.integer(Number.MAX_SAFE_INTEGER)).traced(
										trace
									)
								)
							}
							nextRange(min, max) {
								return bodyWithTrace(trace =>
									core_map(this.next(), n => (max - min) * n + min).traced(
										trace
									)
								)
							}
							nextIntBetween(min, max) {
								return bodyWithTrace(trace =>
									sync(() => this.PRNG.integer(1 + max - min) + min).traced(
										trace
									)
								)
							}
							shuffle(elements) {
								return bodyWithTrace(trace =>
									shuffleWith(elements, n => this.nextIntBetween(0, n)).traced(
										trace
									)
								)
							}
						})(seed))
					)(Context_add(clockTag, new ClockImpl())(mjs_Context_empty()))
				)
			),
			currentTimeMillis = methodWithTrace(
				trace => () =>
					clockWith(clock => clock.currentTimeMillis()).traced(trace)
			),
			sleep = methodWithTrace(
				trace => duration =>
					clockWith(clock => clock.sleep(duration)).traced(trace)
			),
			clockWith = methodWithTrace(
				(trace, restore) => f =>
					fiberRefGetWith(currentServices, services =>
						restore(f)(mjs_Context_get(clockTag)(services))
					).traced(trace)
			),
			Duration_TypeId = Symbol.for("@effect/data/Duration")
		class DurationImpl {
			constructor(millis) {
				this.millis = millis
				this._id = Duration_TypeId
			}
			[symbol]() {
				return Hash_hash(this.millis)
			}
			[Equal_symbol](that) {
				return isDuration(that) && this.millis === that.millis
			}
		}
		const isDuration = u =>
				"object" == typeof u &&
				null != u &&
				"_id" in u &&
				u._id === Duration_TypeId,
			zero = new DurationImpl(0),
			millis = millis => new DurationImpl(millis),
			seconds = seconds => new DurationImpl(1e3 * seconds),
			Clock_sleep =
				(fromSemigroup(
					Semigroup_make(
						Function_dual(
							2,
							(self, that) => new DurationImpl(self.millis + that.millis)
						)
					),
					zero
				).combineAll,
				sleep),
			Clock_currentTimeMillis = currentTimeMillis
		var fiberRefs_a
		const FiberRefsSym = Symbol.for("@effect/io/FiberRefs")
		class FiberRefsImpl {
			constructor(locals) {
				this.locals = locals
				this[fiberRefs_a] = FiberRefsSym
			}
		}
		fiberRefs_a = FiberRefsSym
		const findAncestor = (
				_ref,
				_parentStack,
				_childStack,
				_childModified = !1
			) => {
				const ref = _ref
				let ret,
					parentStack = _parentStack,
					childStack = _childStack,
					childModified = _childModified
				for (; void 0 === ret; )
					if (
						isNonEmptyReadonlyArray(parentStack) &&
						isNonEmptyReadonlyArray(childStack)
					) {
						const parentFiberId = headNonEmpty(parentStack)[0],
							parentAncestors = tailNonEmpty(parentStack),
							childFiberId = headNonEmpty(childStack)[0],
							childRefValue = headNonEmpty(childStack)[1],
							childAncestors = tailNonEmpty(childStack)
						if (parentFiberId.startTimeMillis < childFiberId.startTimeMillis) {
							childStack = childAncestors
							childModified = !0
						} else if (
							parentFiberId.startTimeMillis > childFiberId.startTimeMillis
						)
							parentStack = parentAncestors
						else if (parentFiberId.id < childFiberId.id) {
							childStack = childAncestors
							childModified = !0
						} else
							parentFiberId.id > childFiberId.id
								? (parentStack = parentAncestors)
								: (ret = [childRefValue, childModified])
					} else ret = [ref.initial, !0]
				return ret
			},
			joinAs = Function_dual(3, (self, fiberId, that) => {
				const parentFiberRefs = new Map(self.locals)
				for (const [fiberRef, childStack] of that.locals) {
					const childValue = headNonEmpty(childStack)[1]
					if (!equals(headNonEmpty(childStack)[0], fiberId)) {
						if (!parentFiberRefs.has(fiberRef)) {
							if (equals(childValue, fiberRef.initial)) continue
							parentFiberRefs.set(fiberRef, [
								[fiberId, fiberRef.join(fiberRef.initial, childValue)],
							])
							continue
						}
						const parentStack = parentFiberRefs.get(fiberRef),
							[ancestor, wasModified] = findAncestor(
								fiberRef,
								parentStack,
								childStack
							)
						if (wasModified) {
							const patch = fiberRef.diff(ancestor, childValue),
								oldValue = headNonEmpty(parentStack)[1],
								newValue = fiberRef.join(
									oldValue,
									fiberRef.patch(patch)(oldValue)
								)
							if (!equals(oldValue, newValue)) {
								let newStack
								const parentFiberId = headNonEmpty(parentStack)[0]
								newStack = equals(parentFiberId, fiberId)
									? prepend([parentFiberId, newValue])(
											tailNonEmpty(parentStack)
									  )
									: prepend([fiberId, newValue])(parentStack)
								parentFiberRefs.set(fiberRef, newStack)
							}
						}
					}
				}
				return new FiberRefsImpl(new Map(parentFiberRefs))
			}),
			forkAs = Function_dual(2, (self, childId) => {
				const map = new Map()
				for (const [fiberRef, stack] of self.locals.entries()) {
					const oldValue = headNonEmpty(stack)[1],
						newValue = fiberRef.patch(fiberRef.fork)(oldValue)
					equals(oldValue, newValue)
						? map.set(fiberRef, stack)
						: map.set(fiberRef, prepend([childId, newValue])(stack))
				}
				return new FiberRefsImpl(map)
			}),
			delete_ = Function_dual(2, (self, fiberRef) => {
				const locals = new Map(self.locals)
				locals.delete(fiberRef)
				return new FiberRefsImpl(locals)
			}),
			fiberRefs_get = Function_dual(2, (self, fiberRef) =>
				self.locals.has(fiberRef)
					? Option_some(headNonEmpty(self.locals.get(fiberRef))[1])
					: Option_none()
			),
			getOrDefault = Function_dual(2, (self, fiberRef) =>
				getOrElse(() => fiberRef.initial)(fiberRefs_get(self, fiberRef))
			),
			updatedAs = Function_dual(4, (self, fiberId, fiberRef, value) => {
				const oldStack = self.locals.has(fiberRef)
					? self.locals.get(fiberRef)
					: []
				let newStack
				if (isEmptyReadonlyArray(oldStack))
					newStack = ReadonlyArray_of([fiberId, value])
				else {
					const [currentId, currentValue] = headNonEmpty(oldStack)
					if (equals(currentId, fiberId)) {
						if (equals(currentValue, value)) return self
						newStack = prepend([fiberId, value])(tailNonEmpty(oldStack))
					} else newStack = prepend([fiberId, value])(oldStack)
				}
				const locals = new Map(self.locals)
				return new FiberRefsImpl(locals.set(fiberRef, newStack))
			}),
			FiberRefs_forkAs = forkAs,
			FiberRefs_getOrDefault = getOrDefault,
			FiberRefs_updatedAs = updatedAs,
			FiberRefs_unsafeMake = function (fiberRefLocals) {
				return new FiberRefsImpl(fiberRefLocals)
			},
			patch_diff = (oldValue, newValue) => {
				const missingLocals = new Map(oldValue.locals)
				let patch = { _tag: "Empty" }
				for (const [fiberRef, pairs] of newValue.locals.entries()) {
					const newValue = headNonEmpty(pairs)[1],
						old = missingLocals.get(fiberRef)
					if (void 0 !== old) {
						const oldValue = headNonEmpty(old)[1]
						equals(oldValue, newValue) ||
							(patch = patch_combine({
								_tag: "Update",
								fiberRef,
								patch: fiberRef.diff(oldValue, newValue),
							})(patch))
					} else
						patch = patch_combine({ _tag: "Add", fiberRef, value: newValue })(
							patch
						)
					missingLocals.delete(fiberRef)
				}
				for (const [fiberRef] of missingLocals.entries())
					patch = patch_combine({ _tag: "Remove", fiberRef })(patch)
				return patch
			},
			patch_combine = Function_dual(2, (self, that) => ({
				_tag: "AndThen",
				first: self,
				second: that,
			})),
			patch_patch = Function_dual(3, (self, fiberId, oldValue) => {
				let fiberRefs = oldValue,
					patches = ReadonlyArray_of(self)
				for (; isNonEmptyReadonlyArray(patches); ) {
					const head = headNonEmpty(patches),
						tail = tailNonEmpty(patches)
					switch (head._tag) {
						case "Empty":
							patches = tail
							break
						case "Add":
							fiberRefs = updatedAs(
								fiberRefs,
								fiberId,
								head.fiberRef,
								head.value
							)
							patches = tail
							break
						case "Remove":
							fiberRefs = delete_(fiberRefs, head.fiberRef)
							patches = tail
							break
						case "Update": {
							const value = getOrDefault(fiberRefs, head.fiberRef)
							fiberRefs = updatedAs(
								fiberRefs,
								fiberId,
								head.fiberRef,
								head.fiberRef.patch(head.patch)(value)
							)
							patches = tail
							break
						}
						case "AndThen":
							patches = prepend(head.first)(prepend(head.second)(tail))
					}
				}
				return fiberRefs
			})
		class SingleShotGen {
			constructor(self) {
				this.self = self
				this.called = !1
			}
			next(a) {
				return this.called
					? { value: a, done: !0 }
					: ((this.called = !0), { value: this.self, done: !1 })
			}
			return(a) {
				return { value: a, done: !0 }
			}
			throw(e) {
				throw e
			}
			[Symbol.iterator]() {
				return new SingleShotGen(this.self)
			}
		}
		const All = logLevelAll,
			Fatal = { _tag: "Fatal", syslog: 2, label: "FATAL", ordinal: 5e4 },
			Level_Error = { _tag: "Error", syslog: 3, label: "ERROR", ordinal: 4e4 },
			Warning = { _tag: "Warning", syslog: 4, label: "WARN", ordinal: 3e4 },
			Info = logLevelInfo,
			Level_Debug = logLevelDebug,
			Trace = { _tag: "Trace", syslog: 7, label: "TRACE", ordinal: 0 },
			Level_None = logLevelNone,
			locally = dualWithTrace(
				2,
				trace => (use, self) =>
					fiberRefLocally(use, currentLogLevel, self).traced(trace)
			),
			greaterThanEqual = greaterThanOrEqualTo(
				Order_contramap(level => level.ordinal)(Order)
			),
			fromLiteral = _ => {
				switch (_) {
					case "All":
						return All
					case "Debug":
						return Level_Debug
					case "Error":
						return Level_Error
					case "Fatal":
						return Fatal
					case "Info":
						return Info
					case "Trace":
						return Trace
					case "None":
						return Level_None
					case "Warning":
						return Warning
				}
			},
			Span_render = now => self =>
				`${self.label.replace(/[\s="]/g, "_")}=${now - self.startTime}ms`
		var ref_a
		const RefTypeId = Symbol.for("@effect/io/Ref"),
			refVariance = { _A: _ => _ }
		class RefImpl {
			constructor(ref) {
				this.ref = ref
				this[ref_a] = refVariance
			}
			modify(f) {
				return bodyWithTrace((trace, restore) =>
					sync(() => {
						const current = MutableRef_get(this.ref),
							[b, a] = restore(f)(current)
						current !== a && MutableRef_set(a)(this.ref)
						return b
					}).traced(trace)
				)
			}
		}
		ref_a = RefTypeId
		const ref_unsafeMake = value => new RefImpl(MutableRef_make(value)),
			ref_make = methodWithTrace(
				trace => value => sync(() => ref_unsafeMake(value)).traced(trace)
			),
			ref_get = methodWithTrace(
				trace => self => self.modify(a => [a, a]).traced(trace)
			),
			ref_set = dualWithTrace(
				2,
				trace => (self, value) =>
					self.modify(() => [void 0, value]).traced(trace)
			),
			ref_modify = dualWithTrace(
				2,
				(trace, restore) => (self, f) => self.modify(restore(f)).traced(trace)
			),
			ref_update = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					self.modify(a => [void 0, restore(f)(a)]).traced(trace)
			),
			Ref_make = ref_make,
			Ref_get = ref_get,
			Ref_set = ref_set,
			effect_collectAll = methodWithTrace(
				trace => effects =>
					core_forEach(effects, Function_identity).traced(trace)
			),
			delay = dualWithTrace(
				2,
				trace => (self, duration) =>
					core_zipRight(Clock_sleep(duration), self).traced(trace)
			),
			diffFiberRefs = methodWithTrace(
				trace => self =>
					summarized(getFiberRefs(), patch_diff)(self).traced(trace)
			),
			effect_Do = methodWithTrace(trace => () => succeed({}).traced(trace)),
			effect_bind = dualWithTrace(
				3,
				(trace, restore) => (self, tag, f) =>
					core_flatMap(self, k =>
						core_map(restore(f)(k), a => ({ ...k, [tag]: a }))
					).traced(trace)
			),
			effect_bindDiscard = dualWithTrace(
				3,
				trace => (self, tag, f) =>
					core_flatMap(self, k =>
						core_map(f, a => ({ ...k, [tag]: a }))
					).traced(trace)
			),
			bindValue = dualWithTrace(
				3,
				(trace, restore) => (self, tag, f) =>
					core_map(self, k => ({ ...k, [tag]: restore(f)(k) })).traced(trace)
			),
			bindValueDiscard = dualWithTrace(
				3,
				trace => (self, tag, f) =>
					core_map(self, k => ({ ...k, [tag]: f })).traced(trace)
			),
			filterOrElse = dualWithTrace(
				3,
				(trace, restore) => (self, f, orElse) =>
					filterOrElseWith(self, restore(f), orElse).traced(trace)
			),
			filterOrElseWith = dualWithTrace(
				3,
				(trace, restore) => (self, f, orElse) =>
					core_flatMap(self, a =>
						restore(f)(a) ? succeed(a) : restore(orElse)(a)
					).traced(trace)
			),
			filterOrFail = dualWithTrace(
				3,
				(trace, restore) => (self, f, error) =>
					filterOrElse(self, restore(f), () => failSync(restore(error))).traced(
						trace
					)
			),
			effect_match = dualWithTrace(
				3,
				(trace, restore) => (self, onFailure, onSuccess) =>
					matchEffect(
						self,
						e => succeed(restore(onFailure)(e)),
						a => succeed(restore(onSuccess)(a))
					).traced(trace)
			)
		class EffectGen {
			constructor(value) {
				this.value = value
			}
			[Symbol.iterator]() {
				return new SingleShotGen(this)
			}
		}
		const getFiberRefs = methodWithTrace(
				trace => () =>
					withFiberRuntime(state => succeed(state.unsafeGetFiberRefs())).traced(
						trace
					)
			),
			ignore = methodWithTrace(
				trace => self =>
					effect_match(self, Function_constVoid, Function_constVoid).traced(
						trace
					)
			),
			effect_isSuccess = methodWithTrace(
				trace => self =>
					effect_match(self, Function_constFalse, Function_constTrue).traced(
						trace
					)
			),
			someError = Option_some(Level_Error),
			someWarning = Option_some(Warning),
			someInfo = Option_some(Info),
			someDebug = Option_some(Level_Debug),
			log = methodWithTrace(
				trace => message =>
					withFiberRuntime(fiberState => {
						fiberState.log(message, cause_empty, Option_none())
						return core_unit()
					}).traced(trace)
			),
			logDebug = methodWithTrace(
				trace => message =>
					withFiberRuntime(fiberState => {
						fiberState.log(message, cause_empty, someDebug)
						return core_unit()
					}).traced(trace)
			),
			logError = methodWithTrace(
				trace => message =>
					withFiberRuntime(fiberState => {
						fiberState.log(message, cause_empty, someError)
						return core_unit()
					}).traced(trace)
			),
			logInfo = methodWithTrace(
				trace => message =>
					withFiberRuntime(fiberState => {
						fiberState.log(message, cause_empty, someInfo)
						return core_unit()
					}).traced(trace)
			),
			logWarning = methodWithTrace(
				trace => message =>
					withFiberRuntime(fiberState => {
						fiberState.log(message, cause_empty, someWarning)
						return core_unit()
					}).traced(trace)
			),
			logAnnotate = dualWithTrace(
				3,
				trace => (effect, key, value) =>
					core_flatMap(fiberRefGet(currentLogAnnotations), annotations =>
						suspend(() =>
							fiberRefLocally(
								currentLogAnnotations,
								HashMap_set(key, value)(annotations)
							)(effect)
						)
					).traced(trace)
			),
			orElseSucceed = dualWithTrace(
				2,
				(trace, restore) => (self, evaluate) =>
					core_orElse(self, () => sync(restore(evaluate))).traced(trace)
			),
			patchFiberRefs = methodWithTrace(
				trace => patch =>
					updateFiberRefs((fiberId, fiberRefs) =>
						patch_patch(fiberId, fiberRefs)(patch)
					).traced(trace)
			),
			promise = methodWithTrace(
				(trace, restore) => evaluate =>
					core_async(resolve => {
						restore(evaluate)()
							.then(a => resolve(exitSucceed(a)))
							.catch(e => resolve(exitFailCause(die(e))))
					}).traced(trace)
			),
			effect_sleep = Clock_sleep,
			summarized = dualWithTrace(
				3,
				(trace, restore) => (self, summary, f) =>
					core_flatMap(summary, start =>
						core_flatMap(self, value =>
							core_map(summary, end =>
								((...args) => args)(restore(f)(start, end), value)
							)
						)
					).traced(trace)
			),
			tapErrorCause = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					matchCauseEffect(
						self,
						cause => core_zipRight(restore(f)(cause), failCause(cause)),
						succeed
					).traced(trace)
			),
			effect_all = methodWithTrace(
				trace =>
					function () {
						return 1 === arguments.length
							? isEffect(arguments[0])
								? core_map(arguments[0], x => [x])
								: Array.isArray(arguments[0])
								? core_map(
										effect_collectAll(arguments[0]),
										toReadonlyArray
								  ).traced(trace)
								: core_map(values => {
										const res = {}
										for (const [k, v] of values) res[k] = v
										return res
								  })(
										core_forEach(Object.entries(arguments[0]), ([_, e]) =>
											core_map(e, a => [_, a])
										)
								  ).traced(trace)
							: core_map(effect_collectAll(arguments), toReadonlyArray).traced(
									trace
							  )
					}
			),
			updateFiberRefs = methodWithTrace(
				(trace, restore) => f =>
					withFiberRuntime(state => {
						state.setFiberRefs(
							restore(f)(state.id(), state.unsafeGetFiberRefs())
						)
						return core_unit()
					}).traced(trace)
			),
			MutableHashMap_TypeId = Symbol.for("@effect/data/MutableHashMap")
		class MutableHashMapImpl {
			constructor() {
				this._id = MutableHashMap_TypeId
				this.backingMap = MutableRef_make(mjs_HashMap_empty())
			}
			[Symbol.iterator]() {
				return this.backingMap.current[Symbol.iterator]()
			}
			toString() {
				return `MutableHashMap(${Array.from(this)
					.map(([k, v]) => `[${String(k)}, ${String(v)}]`)
					.join(", ")})`
			}
			toJSON() {
				return { _tag: "MutableHashMap", values: Array.from(this) }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
		}
		const MutableHashMap_get = Function_dual(2, (self, key) =>
				mjs_HashMap_get(self.backingMap.current, key)
			),
			MutableHashMap_has = Function_dual(2, (self, key) =>
				Option_isSome(MutableHashMap_get(self, key))
			),
			MutableHashMap_set = Function_dual(3, (self, key, value) => {
				MutableRef_update(self.backingMap, HashMap_set(key, value))
				return self
			}),
			ExecutionStrategy_sequential = { _tag: "Sequential" }
		var fiberStatus_a, fiberStatus_b, fiberStatus_c
		const FiberStatusTypeId = Symbol.for("@effect/io/Fiber/Status")
		class Done {
			constructor() {
				this[fiberStatus_a] = FiberStatusTypeId
				this._tag = "Done"
			}
			[((fiberStatus_a = FiberStatusTypeId), symbol)]() {
				return combine(Hash_hash(this._tag))(
					Hash_hash("@effect/io/Fiber/Status")
				)
			}
			[Equal_symbol](that) {
				return isFiberStatus(that) && "Done" === that._tag
			}
		}
		class Running {
			constructor(runtimeFlags) {
				this.runtimeFlags = runtimeFlags
				this[fiberStatus_b] = FiberStatusTypeId
				this._tag = "Running"
			}
			[((fiberStatus_b = FiberStatusTypeId), symbol)]() {
				return combine(Hash_hash(this.runtimeFlags))(
					combine(Hash_hash(this._tag))(Hash_hash("@effect/io/Fiber/Status"))
				)
			}
			[Equal_symbol](that) {
				return (
					isFiberStatus(that) &&
					"Running" === that._tag &&
					this.runtimeFlags === that.runtimeFlags
				)
			}
		}
		class Suspended {
			constructor(runtimeFlags, blockingOn) {
				this.runtimeFlags = runtimeFlags
				this.blockingOn = blockingOn
				this[fiberStatus_c] = FiberStatusTypeId
				this._tag = "Suspended"
			}
			[((fiberStatus_c = FiberStatusTypeId), symbol)]() {
				return combine(Hash_hash(this.blockingOn))(
					combine(Hash_hash(this.runtimeFlags))(
						combine(Hash_hash(this._tag))(Hash_hash("@effect/io/Fiber/Status"))
					)
				)
			}
			[Equal_symbol](that) {
				return (
					isFiberStatus(that) &&
					"Suspended" === that._tag &&
					this.runtimeFlags === that.runtimeFlags &&
					equals(this.blockingOn, that.blockingOn)
				)
			}
		}
		const isFiberStatus = u =>
				"object" == typeof u && null != u && FiberStatusTypeId in u,
			Status_done = new Done(),
			Status_running = runtimeFlags => new Running(runtimeFlags),
			interruptSignal = cause => ({ _tag: "InterruptSignal", cause }),
			stateful = onFiber => ({ _tag: "Stateful", onFiber }),
			resume = effect => ({ _tag: "Resume", effect })
		var fiberScope_a, fiberScope_b
		const FiberScopeTypeId = Symbol.for("@effect/io/Fiber/Scope")
		class Global {
			constructor() {
				this[fiberScope_a] = FiberScopeTypeId
				this.fiberId = Id_none
				this.roots = new Set()
			}
			add(_runtimeFlags, child) {
				this.roots.add(child)
				child.unsafeAddObserver(() => {
					this.roots.delete(child)
				})
			}
		}
		fiberScope_a = FiberScopeTypeId
		class Local {
			constructor(fiberId, parent) {
				this.fiberId = fiberId
				this.parent = parent
				this[fiberScope_b] = FiberScopeTypeId
			}
			add(_runtimeFlags, child) {
				this.parent.tell(
					stateful(parentFiber => {
						parentFiber.addChild(child)
						child.unsafeAddObserver(() => {
							parentFiber.removeChild(child)
						})
					})
				)
			}
		}
		fiberScope_b = FiberScopeTypeId
		const globalScope = globalValue(
				Symbol.for("@effect/io/FiberScope/Global"),
				() => new Global()
			),
			FiberTypeId = Symbol.for("@effect/io/Fiber"),
			fiberVariance = { _E: _ => _, _A: _ => _ },
			RuntimeFiberTypeId = Symbol.for("@effect/io/Fiber"),
			_await = methodWithTrace(trace => self => self.await().traced(trace)),
			fiber_join = methodWithTrace(
				trace => self =>
					core_zipLeft(core_flatten(self.await()), self.inheritAll()).traced(
						trace
					)
			),
			currentFiberURI = "@effect/io/Fiber/Current",
			MutableList_TypeId = Symbol.for("@effect/data/MutableList")
		class MutableListImpl {
			constructor() {
				this._id = MutableList_TypeId
				this.head = void 0
				this.tail = void 0
				this._length = 0
			}
			[Symbol.iterator]() {
				let done = !1,
					head = this.head
				return {
					next() {
						if (done) return this.return()
						if (null == head) {
							done = !0
							return this.return()
						}
						const value = head.value
						head = head.next
						return { done, value }
					},
					return(value) {
						done || (done = !0)
						return { done: !0, value }
					},
				}
			}
			toString() {
				return `MutableList(${Array.from(this).map(String).join(", ")})`
			}
			toJSON() {
				return { _tag: "MutableList", values: Array.from(this) }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
		}
		class LinkedListNode {
			constructor(value) {
				this.value = value
				this.removed = !1
				this.prev = void 0
				this.next = void 0
			}
		}
		const MutableList_isEmpty = self => 0 === MutableList_length(self),
			MutableList_length = self => self._length,
			MutableList_append = Function_dual(2, (self, value) => {
				const node = new LinkedListNode(value)
				void 0 === self.head && (self.head = node)
				if (void 0 === self.tail) self.tail = node
				else {
					self.tail.next = node
					node.prev = self.tail
					self.tail = node
				}
				self._length += 1
				return self
			}),
			MutableQueue_TypeId = Symbol.for("@effect/data/MutableQueue")
		class MutableQueueImpl {
			constructor(capacity) {
				this.capacity = capacity
				this._tag = "Bounded"
				this._id = MutableQueue_TypeId
				this.queue = new MutableListImpl()
			}
			[Symbol.iterator]() {
				return Array.from(this.queue)[Symbol.iterator]()
			}
			toString() {
				return `MutableQueue(${Array.from(this).map(String).join(", ")})`
			}
			toJSON() {
				return { _tag: "MutableQueue", values: Array.from(this) }
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toJSON()
			}
		}
		const MutableQueue_isEmpty = self => MutableList_isEmpty(self.queue),
			offer = Function_dual(2, (self, value) => {
				const queueLength = MutableList_length(self.queue)
				if (void 0 !== self.capacity && queueLength === self.capacity) return !1
				MutableList_append(value)(self.queue)
				return !0
			}),
			MutableQueue_poll = Function_dual(2, (self, def) =>
				MutableList_isEmpty(self.queue)
					? def
					: (self => {
							const head = self.head
							if (void 0 !== head) {
								;((self, node) => {
									if (!node.removed) {
										node.removed = !0
										if (void 0 !== node.prev && void 0 !== node.next) {
											node.prev.next = node.next
											node.next.prev = node.prev
										} else if (void 0 !== node.prev) {
											self.tail = node.prev
											node.prev.next = void 0
										} else if (void 0 !== node.next) {
											self.head = node.next
											node.next.prev = void 0
										} else {
											self.tail = void 0
											self.head = void 0
										}
										self._length > 0 && (self._length -= 1)
									}
								})(self, head)
								return head.value
							}
					  })(self.queue)
			),
			renderToString = u => {
				if (
					"object" == typeof u &&
					null != u &&
					"toString" in u &&
					"function" == typeof u.toString &&
					u.toString !== Object.prototype.toString
				)
					return u.toString()
				if ("string" == typeof u) return `Error: ${u}`
				if (
					"object" == typeof u &&
					null !== u &&
					"message" in u &&
					"string" == typeof u.message
				) {
					const raw = JSON.parse(JSON.stringify(u)),
						keys = new Set(Object.keys(raw))
					keys.delete("name")
					keys.delete("message")
					keys.delete("_tag")
					if (0 === keys.size)
						return `${
							"name" in u && "string" == typeof u.name ? u.name : "Error"
						}${
							"_tag" in u && "string" == typeof u._tag ? `(${u._tag})` : ""
						}: ${u.message}`
				}
				return `Error: ${JSON.stringify(u)}`
			},
			renderStack = span =>
				Option_isNone(span)
					? []
					: span.value.stack.length > 0
					? (chunk => {
							const ret = []
							for (const s of chunk) {
								const r = s?.toFrame()
								r &&
									runtimeDebug.filterStackFrame(r) &&
									ret.push(renderFrame(r))
							}
							return ret
					  })(span.value.stack)
					: [],
			defaultErrorToLines = error =>
				error instanceof Error
					? (error => {
							if (error.stack) {
								const stack = runtimeDebug.parseStack(error),
									traces = []
								for (const frame of stack)
									if (frame) {
										if (!runtimeDebug.filterStackFrame(frame)) break
										traces.push(renderFrame(frame))
									}
								return [renderToString(error), traces.join("\r\n")]
							}
							return [String(error), void 0]
					  })(error)
					: [renderToString(error), void 0]
		class RenderError {
			constructor(seq, message, stack) {
				this.seq = seq
				this.message = message
				this.stack = stack
			}
		}
		const cause_pretty_pretty = cause => {
				if (isInterruptedOnly(cause))
					return "All fibers interrupted without errors."
				const errors = prettyErrors(cause),
					final = Array.from(errors)
						.sort((a, b) => (a.seq === b.seq ? 0 : a.seq > b.seq ? 1 : -1))
						.map(e => {
							let message = e.message
							e.stack && e.stack.length > 0 && (message += `\r\n${e.stack}`)
							return message
						})
						.join("\r\n\r\n")
				return final.includes("\r\n") ? `\r\n${final}\r\n` : final
			},
			prettyErrors = cause =>
				reduceWithContext(cause, void 0, {
					emptyCase: () => [],
					dieCase: (_, err) => {
						const rendered = defaultErrorToLines(err)
						return [
							{
								message: rendered[0],
								errorSack: rendered[1],
								fiberStack: Option_none(),
							},
						]
					},
					failCase: (_, err) => {
						const rendered = defaultErrorToLines(err)
						return [
							{
								message: rendered[0],
								errorSack: rendered[1],
								fiberStack: Option_none(),
							},
						]
					},
					interruptCase: () => [],
					parallelCase: (_, l, r) => [...l, ...r],
					sequentialCase: (_, l, r) => [...l, ...r],
					annotatedCase: (_, v, parent) =>
						isStackAnnotation(parent)
							? v.map(r => ({
									message: r.message,
									errorSack: r.errorSack,
									fiberStack: orElse(() => Option_some(parent))(
										Option_map(
											r.fiberStack,
											annotation =>
												new StackAnnotation(
													annotation.stack.length <
														runtimeDebug.traceStackLimit &&
													parent.stack.length > 0 &&
													((annotation.stack.length > 0 &&
														unsafeLast(parent.stack) !==
															unsafeLast(annotation.stack)) ||
														0 === annotation.stack.length)
														? Chunk_take(runtimeDebug.traceStackLimit)(
																dedupeAdjacent(
																	Chunk_concat(parent.stack)(annotation.stack)
																)
														  )
														: annotation.stack,
													annotation.seq
												)
										)
									),
							  }))
							: v,
				}).flatMap(r =>
					((error, errorStack, stack) => [
						new RenderError(
							"Some" === stack._tag ? stack.value.seq : 0,
							error,
							errorStack
								? errorStack + "\r\n" + renderStack(stack).join("\r\n")
								: renderStack(stack).join("\r\n")
						),
					])(r.message, r.errorSack, r.fiberStack)
				)
		function renderFrame(r) {
			return r
				? r.name
					? `    at ${r.name} (${r.fileName}:${r.line}:${r.column})`
					: `    at ${r.fileName}:${r.line}:${r.column}`
				: "    at <unknown>"
		}
		const LoggerTypeId = Symbol.for("@effect/io/Logger"),
			loggerVariance = { _Message: _ => _, _Output: _ => _ },
			makeLogger = log => ({ [LoggerTypeId]: loggerVariance, log }),
			stringLogger = makeLogger(
				(fiberId, logLevel, message, cause, _context, spans, annotations) => {
					const now = new Date(),
						nowMillis = now.getTime()
					let output = [
						`timestamp=${now.toISOString()}`,
						`level=${logLevel.label}`,
						`fiber=${threadName(fiberId)}`,
					].join(" ")
					if (message.length > 0) {
						output += " message="
						output = appendQuoted(message, output)
					}
					if (null != cause && cause != cause_empty) {
						output += " cause="
						output = appendQuoted(cause_pretty_pretty(cause), output)
					}
					if (Chunk_isNonEmpty(spans)) {
						output += " "
						let first = !0
						for (const span of spans) {
							first ? (first = !1) : (output += " ")
							output += Span_render(nowMillis)(span)
						}
					}
					if (mjs_HashMap_size(annotations) > 0) {
						output += " "
						let first = !0
						for (const [key, value] of annotations) {
							first ? (first = !1) : (output += " ")
							output += filterKeyName(key)
							output += "="
							output = appendQuoted(value, output)
						}
					}
					return output
				}
			),
			textOnly = /^[^\s"=]+$/,
			appendQuoted = (label, output) =>
				output +
				(label.match(textOnly)
					? label
					: `"${label.replace(/\\([\s\S])|(")/g, "\\$1$2")}"`),
			filterKeyName = key => key.replace(/[\s="]/g, "_"),
			logger_zip = Function_dual(2, (self, that) =>
				makeLogger(
					(fiberId, logLevel, message, cause, context, spans, annotations) => [
						self.log(
							fiberId,
							logLevel,
							message,
							cause,
							context,
							spans,
							annotations
						),
						that.log(
							fiberId,
							logLevel,
							message,
							cause,
							context,
							spans,
							annotations
						),
					]
				)
			)
		var keyType_a, keyType_b, _g, _h
		const MetricKeyTypeTypeId = Symbol.for("@effect/io/Metric/KeyType"),
			CounterKeyTypeTypeId = Symbol.for("effect/io/Metric/KeyType/Counter"),
			FrequencyKeyTypeTypeId = Symbol.for("effect/io/Metric/KeyType/Frequency"),
			GaugeKeyTypeTypeId = Symbol.for("effect/io/Metric/KeyType/Gauge"),
			HistogramKeyTypeTypeId = Symbol.for("effect/io/Metric/KeyType/Histogram"),
			SummaryKeyTypeTypeId = Symbol.for("effect/io/Metric/KeyType/Summary"),
			metricKeyTypeVariance = { _In: _ => _, _Out: _ => _ }
		class CounterKeyType {
			constructor() {
				this[keyType_a] = metricKeyTypeVariance
				this[keyType_b] = CounterKeyTypeTypeId
			}
			[((keyType_a = MetricKeyTypeTypeId),
			(keyType_b = CounterKeyTypeTypeId),
			symbol)]() {
				return Hash_hash("effect/io/Metric/KeyType/Counter")
			}
			[Equal_symbol](that) {
				return isCounterKey(that)
			}
		}
		class HistogramKeyType {
			constructor(boundaries) {
				this.boundaries = boundaries
				this[_g] = metricKeyTypeVariance
				this[_h] = HistogramKeyTypeTypeId
			}
			[((_g = MetricKeyTypeTypeId), (_h = HistogramKeyTypeTypeId), symbol)]() {
				return combine(Hash_hash(this.boundaries))(
					Hash_hash("effect/io/Metric/KeyType/Histogram")
				)
			}
			[Equal_symbol](that) {
				return isHistogramKey(that) && equals(this.boundaries, that.boundaries)
			}
		}
		const counter = new CounterKeyType(),
			isCounterKey = u =>
				"object" == typeof u && null != u && CounterKeyTypeTypeId in u,
			isFrequencyKey = u =>
				"object" == typeof u && null != u && FrequencyKeyTypeTypeId in u,
			isGaugeKey = u =>
				"object" == typeof u && null != u && GaugeKeyTypeTypeId in u,
			isHistogramKey = u =>
				"object" == typeof u && null != u && HistogramKeyTypeTypeId in u,
			isSummaryKey = u =>
				"object" == typeof u && null != u && SummaryKeyTypeTypeId in u
		var key_a
		const MetricKeyTypeId = Symbol.for("@effect/io/Metric/Key"),
			metricKeyVariance = { _Type: _ => _ }
		class MetricKeyImpl {
			constructor(name, keyType, tags = mjs_HashSet_empty()) {
				this.name = name
				this.keyType = keyType
				this.tags = tags
				this[key_a] = metricKeyVariance
			}
			[((key_a = MetricKeyTypeId), symbol)]() {
				return combine(Hash_hash(this.tags))(
					combine(Hash_hash(this.keyType))(Hash_hash(this.name))
				)
			}
			[Equal_symbol](u) {
				return (
					isMetricKey(u) &&
					this.name === u.name &&
					equals(this.keyType, u.keyType) &&
					equals(this.tags, u.tags)
				)
			}
		}
		const isMetricKey = u =>
				"object" == typeof u && null != u && MetricKeyTypeId in u,
			key_taggedWithLabelSet = Function_dual(2, (self, extraTags) =>
				0 === mjs_HashSet_size(extraTags)
					? self
					: new MetricKeyImpl(
							self.name,
							self.keyType,
							mjs_HashSet_union(extraTags)(self.tags)
					  )
			)
		var state_a,
			state_b,
			state_c,
			state_d,
			state_e,
			state_f,
			state_g,
			state_h,
			state_j,
			state_k
		const MetricStateTypeId = Symbol.for("@effect/io/Metric/State"),
			CounterStateTypeId = Symbol.for("effect/io/Metric/State/Counter"),
			FrequencyStateTypeId = Symbol.for("effect/io/Metric/State/Frequency"),
			GaugeStateTypeId = Symbol.for("effect/io/Metric/State/Gauge"),
			HistogramStateTypeId = Symbol.for("effect/io/Metric/State/Histogram"),
			SummaryStateTypeId = Symbol.for("effect/io/Metric/State/Summary"),
			metricStateVariance = { _A: _ => _ }
		class CounterState {
			constructor(count) {
				this.count = count
				this[state_a] = metricStateVariance
				this[state_b] = CounterStateTypeId
			}
			[((state_a = MetricStateTypeId),
			(state_b = CounterStateTypeId),
			symbol)]() {
				return combine(Hash_hash(this.count))(
					Hash_hash("effect/io/Metric/State/Counter")
				)
			}
			[Equal_symbol](that) {
				return isCounterState(that) && this.count === that.count
			}
		}
		class FrequencyState {
			constructor(occurrences) {
				this.occurrences = occurrences
				this[state_c] = metricStateVariance
				this[state_d] = FrequencyStateTypeId
			}
			[((state_c = MetricStateTypeId),
			(state_d = FrequencyStateTypeId),
			symbol)]() {
				return combine(Hash_hash(this.occurrences))(
					Hash_hash("effect/io/Metric/State/Frequency")
				)
			}
			[Equal_symbol](that) {
				return (
					isFrequencyState(that) && equals(this.occurrences, that.occurrences)
				)
			}
		}
		class GaugeState {
			constructor(value) {
				this.value = value
				this[state_e] = metricStateVariance
				this[state_f] = GaugeStateTypeId
			}
			[((state_e = MetricStateTypeId),
			(state_f = GaugeStateTypeId),
			symbol)]() {
				return combine(Hash_hash(this.value))(
					Hash_hash("effect/io/Metric/State/Gauge")
				)
			}
			[Equal_symbol](u) {
				return isGaugeState(u) && this.value === u.value
			}
		}
		class HistogramState {
			constructor(buckets, count, min, max, sum) {
				this.buckets = buckets
				this.count = count
				this.min = min
				this.max = max
				this.sum = sum
				this[state_g] = metricStateVariance
				this[state_h] = HistogramStateTypeId
			}
			[((state_g = MetricStateTypeId),
			(state_h = HistogramStateTypeId),
			symbol)]() {
				return combine(Hash_hash(this.sum))(
					combine(Hash_hash(this.max))(
						combine(Hash_hash(this.min))(
							combine(Hash_hash(this.count))(
								combine(Hash_hash(this.buckets))(
									Hash_hash("effect/io/Metric/State/Histogram")
								)
							)
						)
					)
				)
			}
			[Equal_symbol](that) {
				return (
					isHistogramState(that) &&
					equals(this.buckets, that.buckets) &&
					this.count === that.count &&
					this.min === that.min &&
					this.max === that.max &&
					this.sum === that.sum
				)
			}
		}
		class SummaryState {
			constructor(error, quantiles, count, min, max, sum) {
				this.error = error
				this.quantiles = quantiles
				this.count = count
				this.min = min
				this.max = max
				this.sum = sum
				this[state_j] = metricStateVariance
				this[state_k] = SummaryStateTypeId
			}
			[((state_j = MetricStateTypeId),
			(state_k = SummaryStateTypeId),
			symbol)]() {
				return combine(Hash_hash(this.sum))(
					combine(Hash_hash(this.max))(
						combine(Hash_hash(this.min))(
							combine(Hash_hash(this.count))(
								combine(Hash_hash(this.quantiles))(
									combine(Hash_hash(this.error))(
										Hash_hash("effect/io/Metric/State/Summary")
									)
								)
							)
						)
					)
				)
			}
			[Equal_symbol](that) {
				return (
					isSummaryState(that) &&
					this.error === that.error &&
					equals(this.quantiles, that.quantiles) &&
					this.count === that.count &&
					this.min === that.min &&
					this.max === that.max &&
					this.sum === that.sum
				)
			}
		}
		const isCounterState = u =>
				"object" == typeof u && null != u && CounterStateTypeId in u,
			isFrequencyState = u =>
				"object" == typeof u && null != u && FrequencyStateTypeId in u,
			isGaugeState = u =>
				"object" == typeof u && null != u && GaugeStateTypeId in u,
			isHistogramState = u =>
				"object" == typeof u && null != u && HistogramStateTypeId in u,
			isSummaryState = u =>
				"object" == typeof u && null != u && SummaryStateTypeId in u,
			MetricHookTypeId = Symbol.for("@effect/io/Metric/Hook"),
			metricHookVariance = { _In: _ => _, _Out: _ => _ },
			hook_make = (get, update) => ({
				[MetricHookTypeId]: metricHookVariance,
				update,
				get,
			}),
			calculateQuantiles = (error, sortedQuantiles, sortedSamples) => {
				const sampleCount = sortedSamples.length
				if (Chunk_isEmpty(sortedQuantiles)) return Chunk_empty()
				const head = unsafeHead(sortedQuantiles),
					tail = Chunk_drop(1)(sortedQuantiles),
					resolved = Chunk_reduce(
						Chunk_of(
							resolveQuantile(
								error,
								sampleCount,
								Option_none(),
								0,
								head,
								sortedSamples
							)
						),
						(accumulator, quantile) => {
							const h = unsafeHead(accumulator)
							return Chunk_append(
								resolveQuantile(
									error,
									sampleCount,
									h.value,
									h.consumed,
									quantile,
									h.rest
								)
							)(accumulator)
						}
					)(tail)
				return Chunk_map(rq => [rq.quantile, rq.value])(resolved)
			},
			resolveQuantile = (
				error,
				sampleCount,
				current,
				consumed,
				quantile,
				rest
			) => {
				let error_1 = error,
					sampleCount_1 = sampleCount,
					current_1 = current,
					consumed_1 = consumed,
					quantile_1 = quantile,
					rest_1 = rest,
					error_2 = error,
					sampleCount_2 = sampleCount,
					current_2 = current,
					consumed_2 = consumed,
					quantile_2 = quantile,
					rest_2 = rest
				for (;;) {
					if (Chunk_isEmpty(rest_1))
						return {
							quantile: quantile_1,
							value: Option_none(),
							consumed: consumed_1,
							rest: Chunk_empty(),
						}
					if (1 === quantile_1)
						return {
							quantile: quantile_1,
							value: Option_some(unsafeLast(rest_1)),
							consumed: consumed_1 + rest_1.length,
							rest: Chunk_empty(),
						}
					const sameHead = splitWhere(n => n > unsafeHead(rest_1))(rest_1),
						desired = quantile_1 * sampleCount_1,
						allowedError = (error_1 / 2) * desired,
						candConsumed = consumed_1 + sameHead[0].length,
						candError = Math.abs(candConsumed - desired)
					if (candConsumed < desired - allowedError) {
						error_2 = error_1
						sampleCount_2 = sampleCount_1
						current_2 = Chunk_head(rest_1)
						consumed_2 = candConsumed
						quantile_2 = quantile_1
						rest_2 = sameHead[1]
						error_1 = error_2
						sampleCount_1 = sampleCount_2
						current_1 = current_2
						consumed_1 = consumed_2
						quantile_1 = quantile_2
						rest_1 = rest_2
					} else {
						if (candConsumed > desired + allowedError)
							return {
								quantile: quantile_1,
								value: current_1,
								consumed: consumed_1,
								rest: rest_1,
							}
						switch (current_1._tag) {
							case "None":
								error_2 = error_1
								sampleCount_2 = sampleCount_1
								current_2 = Chunk_head(rest_1)
								consumed_2 = candConsumed
								quantile_2 = quantile_1
								rest_2 = sameHead[1]
								error_1 = error_2
								sampleCount_1 = sampleCount_2
								current_1 = current_2
								consumed_1 = consumed_2
								quantile_1 = quantile_2
								rest_1 = rest_2
								continue
							case "Some":
								if (candError < Math.abs(desired - current_1.value)) {
									error_2 = error_1
									sampleCount_2 = sampleCount_1
									current_2 = Chunk_head(rest_1)
									consumed_2 = candConsumed
									quantile_2 = quantile_1
									rest_2 = sameHead[1]
									error_1 = error_2
									sampleCount_1 = sampleCount_2
									current_1 = current_2
									consumed_1 = consumed_2
									quantile_1 = quantile_2
									rest_1 = rest_2
									continue
								}
								return {
									quantile: quantile_1,
									value: Option_some(current_1.value),
									consumed: consumed_1,
									rest: rest_1,
								}
						}
					}
				}
				throw new Error(
					"BUG: MetricHook.resolveQuantiles - please report an issue at https://github.com/Effect-TS/io/issues"
				)
			},
			MetricPairTypeId = Symbol.for("@effect/io/Metric/Pair"),
			metricPairVariance = { _Type: _ => _ }
		var registry_a
		const MetricRegistryTypeId = Symbol.for("@effect/io/Metric/Registry")
		class MetricRegistryImpl {
			constructor() {
				this[registry_a] = MetricRegistryTypeId
				this.map = new MutableHashMapImpl()
			}
			snapshot() {
				const result = []
				for (const [key, hook] of this.map)
					result.push(
						((metricKey = key),
						(metricState = hook.get()),
						{ [MetricPairTypeId]: metricPairVariance, metricKey, metricState })
					)
				var metricKey, metricState
				return mjs_HashSet_fromIterable(result)
			}
			get(key) {
				const hook = getOrUndefined(MutableHashMap_get(key)(this.map))
				if (null == hook) {
					if (isCounterKey(key.keyType)) return this.getCounter(key)
					if (isGaugeKey(key.keyType)) return this.getGauge(key)
					if (isFrequencyKey(key.keyType)) return this.getFrequency(key)
					if (isHistogramKey(key.keyType)) return this.getHistogram(key)
					if (isSummaryKey(key.keyType)) return this.getSummary(key)
					throw new Error(
						"BUG: MetricRegistry.get - unknown MetricKeyType - please report an issue at https://github.com/Effect-TS/io/issues"
					)
				}
				return hook
			}
			getCounter(key) {
				let value = getOrUndefined(MutableHashMap_get(key)(this.map))
				if (null == value) {
					const counter = (_key => {
						let sum = 0
						return hook_make(
							() => new CounterState(sum),
							value => {
								sum += value
							}
						)
					})()
					MutableHashMap_has(key)(this.map) ||
						MutableHashMap_set(key, counter)(this.map)
					value = counter
				}
				return value
			}
			getFrequency(key) {
				let value = getOrUndefined(MutableHashMap_get(key)(this.map))
				if (null == value) {
					const frequency = (_key => {
						let count = 0
						const values = new Map()
						return hook_make(
							() => {
								return (
									(occurrences = mjs_HashMap_fromIterable(
										Array.from(values.entries()).map(([k, v]) => [k, v])
									)),
									new FrequencyState(occurrences)
								)
								var occurrences
							},
							word => {
								count += 1
								const slotCount = values.get(word) ?? 0
								values.set(word, slotCount + 1)
							}
						)
					})()
					MutableHashMap_has(key)(this.map) ||
						MutableHashMap_set(key, frequency)(this.map)
					value = frequency
				}
				return value
			}
			getGauge(key) {
				let value = getOrUndefined(MutableHashMap_get(key)(this.map))
				if (null == value) {
					const gauge = ((_key, startAt) => {
						let value = startAt
						return hook_make(
							() => (value => new GaugeState(value))(value),
							v => {
								value = v
							}
						)
					})(0, 0)
					MutableHashMap_has(key)(this.map) ||
						MutableHashMap_set(key, gauge)(this.map)
					value = gauge
				}
				return value
			}
			getHistogram(key) {
				let value = getOrUndefined(MutableHashMap_get(key)(this.map))
				if (null == value) {
					const histogram = (key => {
						const bounds = key.keyType.boundaries.values,
							size = bounds.length,
							values = Array(size + 1),
							boundaries = Array(size)
						let count = 0,
							sum = 0,
							min = Number.MAX_VALUE,
							max = Number.MIN_VALUE
						mapWithIndex((i, n) => {
							boundaries[i] = n
						})(Chunk_sort(Order)(bounds))
						return hook_make(
							() =>
								((buckets, count, min, max, sum) =>
									new HistogramState(buckets, count, min, max, sum))(
									(() => {
										const builder = []
										let i = 0,
											cumulated = 0
										for (; i != size; ) {
											const boundary = boundaries[i]
											cumulated += values[i]
											builder.push([boundary, cumulated])
											i += 1
										}
										return Chunk_fromIterable(builder)
									})(),
									count,
									min,
									max,
									sum
								),
							value => {
								let from = 0,
									to = size
								for (; from !== to; ) {
									const mid = Math.floor(from + (to - from) / 2)
									value <= boundaries[mid] ? (to = mid) : (from = mid)
									to === from + 1 &&
										(value <= boundaries[from] ? (to = from) : (from = to))
								}
								values[from] = values[from] + 1
								count += 1
								sum += value
								value < min && (min = value)
								value > max && (max = value)
							}
						)
					})(key)
					MutableHashMap_has(key)(this.map) ||
						MutableHashMap_set(key, histogram)(this.map)
					value = histogram
				}
				return value
			}
			getSummary(key) {
				let value = getOrUndefined(MutableHashMap_get(key)(this.map))
				if (null == value) {
					const summary = (key => {
						const { error, maxAge, maxSize, quantiles } = key.keyType,
							sortedQuantiles = Chunk_sort(Order)(quantiles),
							values = Array(maxSize)
						let head = 0,
							count = 0,
							sum = 0,
							min = Number.MAX_VALUE,
							max = Number.MIN_VALUE
						return hook_make(
							() =>
								((error, quantiles, count, min, max, sum) =>
									new SummaryState(error, quantiles, count, min, max, sum))(
									error,
									(now => {
										const builder = []
										let i = 0
										for (; i !== maxSize - 1; ) {
											const item = values[i]
											if (null != item) {
												const [t, v] = item,
													age = millis(now - t)
												age.millis >= 0 && age <= maxAge && builder.push(v)
											}
											i += 1
										}
										return calculateQuantiles(
											error,
											sortedQuantiles,
											Chunk_sort(Order)(Chunk_fromIterable(builder))
										)
									})(Date.now()),
									count,
									min,
									max,
									sum
								),
							([value, timestamp]) =>
								((value, timestamp) => {
									if (maxSize > 0) {
										head += 1
										values[head % maxSize] = [timestamp, value]
									}
									count += 1
									sum += value
									value < min && (min = value)
									value > max && (max = value)
								})(value, timestamp)
						)
					})(key)
					MutableHashMap_has(key)(this.map) ||
						MutableHashMap_set(key, summary)(this.map)
					value = summary
				}
				return value
			}
		}
		registry_a = MetricRegistryTypeId
		const MetricTypeId = Symbol.for("@effect/io/Metric"),
			metricVariance = { _Type: _ => _, _In: _ => _, _Out: _ => _ },
			globalMetricRegistry = globalValue(
				Symbol.for("@effect/io/Metric/globalMetricRegistry"),
				() => new MetricRegistryImpl()
			),
			metric_counter = name =>
				fromMetricKey((name => new MetricKeyImpl(name, counter))(name)),
			fromMetricKey = key => {
				const hook = extraTags => {
					const fullKey = key_taggedWithLabelSet(extraTags)(key)
					return globalMetricRegistry.get(fullKey)
				}
				return (function (keyType, unsafeUpdate, unsafeValue) {
					const metric = Object.assign(
						methodWithTrace(
							(trace, restore) => effect =>
								core_tap(effect, a =>
									sync(() => restore(unsafeUpdate)(a, mjs_HashSet_empty()))
								).traced(trace)
						),
						{
							[MetricTypeId]: metricVariance,
							keyType,
							unsafeUpdate,
							unsafeValue,
						}
					)
					return metric
				})(
					key.keyType,
					(input, extraTags) => hook(extraTags).update(input),
					extraTags => hook(extraTags).get()
				)
			},
			metric_histogram = (name, boundaries) =>
				fromMetricKey(
					((name, boundaries) =>
						new MetricKeyImpl(
							name,
							(boundaries => new HistogramKeyType(boundaries))(boundaries)
						))(name, boundaries)
				)
		var boundaries_a
		const MetricBoundariesTypeId = Symbol.for("@effect/io/Metric/Boundaries")
		class MetricBoundariesImpl {
			constructor(values) {
				this.values = values
				this[boundaries_a] = MetricBoundariesTypeId
			}
			[((boundaries_a = MetricBoundariesTypeId), symbol)]() {
				return combine(Hash_hash(this.values))(
					Hash_hash("@effect/io/Metric/Boundaries")
				)
			}
			[Equal_symbol](u) {
				return isMetricBoundaries(u) && equals(this.values, u.values)
			}
		}
		const isMetricBoundaries = u =>
				"object" == typeof u && null != u && MetricBoundariesTypeId in u,
			fromChunk = chunk => {
				const values = (self =>
					unsafeFromArray(
						uniq(
							(self, that) =>
								Hash_hash(self) === Hash_hash(that) && equals(self, that)
						)(toReadonlyArray(self))
					))(Chunk_concat(Chunk_of(Number.POSITIVE_INFINITY))(chunk))
				return new MetricBoundariesImpl(values)
			},
			exponential = (start, factor, count) => {
				return fromChunk(
					Chunk_map(i => start * Math.pow(factor, i))(
						0 <= (end = count - 1)
							? Chunk_makeBy(end - 0 + 1, i => 0 + i)
							: Chunk_of(0)
					)
				)
				var end
			}
		var supervisor_a, supervisor_b, supervisor_d
		const SupervisorTypeId = Symbol.for("@effect/io/Supervisor"),
			supervisorVariance = { _T: _ => _ }
		class ProxySupervisor {
			constructor(underlying, value0) {
				this.underlying = underlying
				this.value0 = value0
				this[supervisor_a] = supervisorVariance
			}
			value() {
				return bodyWithTrace(trace => this.value0().traced(trace))
			}
			onStart(context, effect, parent, fiber) {
				this.underlying.onStart(context, effect, parent, fiber)
			}
			onEnd(value, fiber) {
				this.underlying.onEnd(value, fiber)
			}
			onEffect(fiber, effect) {
				this.underlying.onEffect(fiber, effect)
			}
			onSuspend(fiber) {
				this.underlying.onSuspend(fiber)
			}
			onResume(fiber) {
				this.underlying.onResume(fiber)
			}
			map(f) {
				return new ProxySupervisor(this, () => core_map(f)(this.value()))
			}
			zip(right) {
				return new Zip(this, right)
			}
		}
		supervisor_a = SupervisorTypeId
		class Zip {
			constructor(left, right) {
				this.left = left
				this.right = right
				this[supervisor_b] = supervisorVariance
			}
			value() {
				return bodyWithTrace(trace =>
					core_zip(this.left.value(), this.right.value()).traced(trace)
				)
			}
			onStart(context, effect, parent, fiber) {
				this.left.onStart(context, effect, parent, fiber)
				this.right.onStart(context, effect, parent, fiber)
			}
			onEnd(value, fiber) {
				this.left.onEnd(value, fiber)
				this.right.onEnd(value, fiber)
			}
			onEffect(fiber, effect) {
				this.left.onEffect(fiber, effect)
				this.right.onEffect(fiber, effect)
			}
			onSuspend(fiber) {
				this.left.onSuspend(fiber)
				this.right.onSuspend(fiber)
			}
			onResume(fiber) {
				this.left.onResume(fiber)
				this.right.onResume(fiber)
			}
			map(f) {
				return new ProxySupervisor(this, () => core_map(f)(this.value()))
			}
			zip(right) {
				return new Zip(this, right)
			}
		}
		supervisor_b = SupervisorTypeId
		class Const {
			constructor(effect) {
				this.effect = effect
				this[supervisor_d] = supervisorVariance
			}
			value() {
				return bodyWithTrace(trace => this.effect.traced(trace))
			}
			onStart(_context, _effect, _parent, _fiber) {}
			onEnd(_value, _fiber) {}
			onEffect(_fiber, _effect) {}
			onSuspend(_fiber) {}
			onResume(_fiber) {}
			map(f) {
				return new ProxySupervisor(this, () => core_map(f)(this.value()))
			}
			zip(right) {
				return new Zip(this, right)
			}
		}
		supervisor_d = SupervisorTypeId
		const supervisor_none = (effect => new Const(effect))(core_unit()),
			supervisor_patch_empty = { _tag: "Empty" },
			supervisor_patch_combine = (self, that) => ({
				_tag: "AndThen",
				first: self,
				second: that,
			}),
			removeSupervisor = (self, that) =>
				equals(self, that)
					? supervisor_none
					: self instanceof Zip
					? removeSupervisor(self.left, that).zip(
							removeSupervisor(self.right, that)
					  )
					: self,
			patch_toSet = self =>
				equals(self, supervisor_none)
					? mjs_HashSet_empty()
					: self instanceof Zip
					? mjs_HashSet_union(patch_toSet(self.right))(patch_toSet(self.left))
					: mjs_HashSet_make(self),
			patch_differ = mjs_Differ_make({
				empty: supervisor_patch_empty,
				patch: (self, supervisor) =>
					((_supervisor, _patches) => {
						let supervisor = _supervisor,
							patches = _patches
						for (; Chunk_isNonEmpty(patches); ) {
							const head = Chunk_headNonEmpty(patches)
							switch (head._tag) {
								case "Empty":
									patches = Chunk_tailNonEmpty(patches)
									break
								case "AddSupervisor":
									supervisor = supervisor.zip(head.supervisor)
									patches = Chunk_tailNonEmpty(patches)
									break
								case "RemoveSupervisor":
									supervisor = removeSupervisor(supervisor, head.supervisor)
									patches = Chunk_tailNonEmpty(patches)
									break
								case "AndThen":
									patches = Chunk_prepend(head.first)(
										Chunk_prepend(head.second)(Chunk_tailNonEmpty(patches))
									)
							}
						}
						return supervisor
					})(supervisor, Chunk_of(self)),
				combine: supervisor_patch_combine,
				diff: (oldValue, newValue) => {
					if (equals(oldValue, newValue)) return supervisor_patch_empty
					const oldSupervisors = patch_toSet(oldValue),
						newSupervisors = patch_toSet(newValue),
						added = mjs_HashSet_reduce(
							supervisor_patch_empty,
							(patch, supervisor) =>
								supervisor_patch_combine(patch, {
									_tag: "AddSupervisor",
									supervisor,
								})
						)(mjs_HashSet_difference(oldSupervisors)(newSupervisors)),
						removed = mjs_HashSet_reduce(
							supervisor_patch_empty,
							(patch, supervisor) =>
								supervisor_patch_combine(patch, {
									_tag: "RemoveSupervisor",
									supervisor,
								})
						)(mjs_HashSet_difference(newSupervisors)(oldSupervisors))
					return supervisor_patch_combine(added, removed)
				},
			})
		var fiberRuntime_a, fiberRuntime_b
		const fibersStarted = metric_counter("effect_fiber_started"),
			fiberSuccesses = metric_counter("effect_fiber_successes"),
			fiberFailures = metric_counter("effect_fiber_failures"),
			fiberLifetimes = metric_histogram(
				"effect_fiber_lifetimes",
				exponential(1, 2, 100)
			),
			runtimeFiberVariance = { _E: _ => _, _A: _ => _ },
			fiberRuntime_absurd = _ => {
				throw new Error(
					`BUG: FiberRuntime - ${JSON.stringify(
						_
					)} - please report an issue at https://github.com/Effect-TS/io/issues`
				)
			},
			contOpSuccess = {
				OnSuccess: (_, cont, value) => cont.i1(value),
				OnSuccessAndFailure: (_, cont, value) => cont.i2(value),
				RevertFlags: (self, cont, value) => {
					self.patchRuntimeFlags(self._runtimeFlags, cont.patch)
					return interruptible(self._runtimeFlags) && self.isInterrupted()
						? exitFailCause(self.getInterruptedCause())
						: exitSucceed(value)
				},
				While: (self, cont, value) => {
					cont.i2(value)
					if (cont.i0()) {
						self.pushStack(cont)
						return cont.i1()
					}
					return core_unit()
				},
			},
			drainQueueWhileRunningTable = {
				InterruptSignal: (self, runtimeFlags, cur, message) => {
					self.processNewInterruptSignal(message.cause)
					return interruptible(runtimeFlags)
						? exitFailCause(message.cause)
						: cur
				},
				Resume: (_self, _runtimeFlags, _cur, _message) => {
					throw new Error(
						"It is illegal to have multiple concurrent run loops in a single fiber"
					)
				},
				Stateful: (self, runtimeFlags, cur, message) => {
					message.onFiber(self, Status_running(runtimeFlags))
					return cur
				},
				YieldNow: (_self, _runtimeFlags, cur, _message) =>
					core_flatMap(() => cur)(yieldNow()),
			}
		class FiberRuntime {
			constructor(fiberId, fiberRefs0, runtimeFlags0) {
				this[fiberRuntime_a] = fiberVariance
				this[fiberRuntime_b] = runtimeFiberVariance
				this._queue = new MutableQueueImpl()
				this._children = null
				this._observers = new Array()
				this._running = !1
				this._stack = []
				this._asyncInterruptor = null
				this._asyncBlockingOn = null
				this._exitValue = null
				this._traceStack = []
				this.run = () => {
					this.drainQueueOnCurrentThread()
				}
				this._runtimeFlags = runtimeFlags0
				this._fiberId = fiberId
				this._fiberRefs = fiberRefs0
				if (runtimeMetrics(runtimeFlags0)) {
					const tags = this.getFiberRef(currentTags)
					fibersStarted.unsafeUpdate(1, tags)
				}
			}
			id() {
				return this._fiberId
			}
			resume(effect) {
				this.tell(resume(effect))
			}
			status() {
				return this.ask((_, status) => status)
			}
			runtimeFlags() {
				return this.ask((state, status) =>
					(self => "Done" === self._tag)(status)
						? state._runtimeFlags
						: status.runtimeFlags
				)
			}
			scope() {
				return new Local((fiber = this).id(), fiber)
				var fiber
			}
			children() {
				return this.ask(fiber => Chunk_fromIterable(fiber.getChildren()))
			}
			getChildren() {
				null === this._children && (this._children = new Set())
				return this._children
			}
			getSupervisor() {
				return this.getFiberRef(currentSupervisor)
			}
			getInterruptedCause() {
				return this.getFiberRef(interruptedCause)
			}
			fiberRefs() {
				return this.ask(fiber => fiber.unsafeGetFiberRefs())
			}
			ask(f) {
				return untraced(() =>
					suspend(() => {
						const deferred = deferredUnsafeMake(this._fiberId)
						this.tell(
							stateful((fiber, status) => {
								deferredUnsafeDone(
									deferred,
									sync(() => f(fiber, status))
								)
							})
						)
						return deferredAwait(deferred)
					})
				)
			}
			tell(message) {
				offer(message)(this._queue)
				if (!this._running) {
					this._running = !0
					this.drainQueueLaterOnExecutor()
				}
			}
			await() {
				return untraced(() =>
					asyncInterrupt(resume => {
						const cb = exit => resume(succeed(exit))
						this.tell(
							stateful((fiber, _) => {
								null !== fiber._exitValue
									? cb(this._exitValue)
									: fiber.unsafeAddObserver(cb)
							})
						)
						return sync(() =>
							this.tell(
								stateful((fiber, _) => {
									fiber.unsafeRemoveObserver(cb)
								})
							)
						)
					}, this.id())
				)
			}
			inheritAll() {
				return untraced(() =>
					withFiberRuntime((parentFiber, parentStatus) => {
						const parentFiberId = parentFiber.id(),
							parentFiberRefs = parentFiber.unsafeGetFiberRefs(),
							parentRuntimeFlags = parentStatus.runtimeFlags,
							childFiberRefs = this.unsafeGetFiberRefs(),
							updatedFiberRefs = joinAs(
								parentFiberRefs,
								parentFiberId,
								childFiberRefs
							)
						parentFiber.setFiberRefs(updatedFiberRefs)
						const updatedRuntimeFlags =
								parentFiber.getFiberRef(currentRuntimeFlags),
							patch = Patch_exclude(16)(
								Patch_exclude(1)(
									runtimeFlags_diff(parentRuntimeFlags, updatedRuntimeFlags)
								)
							)
						return updateRuntimeFlags(patch)
					})
				)
			}
			poll() {
				return untraced(() => sync(() => fromNullable(this._exitValue)))
			}
			unsafePoll() {
				return this._exitValue
			}
			interruptAsFork(fiberId) {
				return untraced(() =>
					sync(() => this.tell(interruptSignal(interrupt(fiberId))))
				)
			}
			unsafeAddObserver(observer) {
				null !== this._exitValue
					? observer(this._exitValue)
					: this._observers.push(observer)
			}
			unsafeRemoveObserver(observer) {
				this._observers = this._observers.filter(o => o !== observer)
			}
			unsafeGetFiberRefs() {
				this.setFiberRef(currentRuntimeFlags, this._runtimeFlags)
				return this._fiberRefs
			}
			unsafeDeleteFiberRef(fiberRef) {
				this._fiberRefs = delete_(this._fiberRefs, fiberRef)
			}
			getFiberRef(fiberRef) {
				return getOrDefault(this._fiberRefs, fiberRef)
			}
			setFiberRef(fiberRef, value) {
				this._fiberRefs = updatedAs(
					this._fiberRefs,
					this._fiberId,
					fiberRef,
					value
				)
			}
			setFiberRefs(fiberRefs) {
				this._fiberRefs = fiberRefs
			}
			addChild(child) {
				this.getChildren().add(child)
			}
			removeChild(child) {
				this.getChildren().delete(child)
			}
			drainQueueOnCurrentThread() {
				let recurse = !0
				for (; recurse; ) {
					let evaluationSignal = "Continue"
					const prev = globalThis[currentFiberURI]
					globalThis[currentFiberURI] = this
					try {
						for (; "Continue" === evaluationSignal; )
							evaluationSignal = MutableQueue_isEmpty(this._queue)
								? "Done"
								: this.evaluateMessageWhileSuspended(
										MutableQueue_poll(null)(this._queue)
								  )
					} finally {
						this._running = !1
						globalThis[currentFiberURI] = prev
					}
					if (MutableQueue_isEmpty(this._queue) || this._running) recurse = !1
					else {
						this._running = !0
						if ("Yield" === evaluationSignal) {
							this.drainQueueLaterOnExecutor()
							recurse = !1
						} else recurse = !0
					}
				}
			}
			drainQueueLaterOnExecutor() {
				this.getFiberRef(currentScheduler).scheduleTask(this.run)
			}
			drainQueueWhileRunning(runtimeFlags, cur0) {
				let cur = cur0
				for (; !MutableQueue_isEmpty(this._queue); ) {
					const message = MutableQueue_poll(void 0)(this._queue)
					cur = drainQueueWhileRunningTable[message._tag](
						this,
						runtimeFlags,
						cur,
						message
					)
				}
				return cur
			}
			isInterrupted() {
				return !(self =>
					"Empty" === self._tag ||
					cause_reduce(self, !0, (acc, cause) => {
						switch (cause._tag) {
							case "Empty":
								return Option_some(acc)
							case "Die":
							case "Fail":
							case "Interrupt":
								return Option_some(!1)
							default:
								return Option_none()
						}
					}))(this.getFiberRef(interruptedCause))
			}
			addInterruptedCause(cause) {
				const oldSC = this.getFiberRef(interruptedCause)
				this.setFiberRef(interruptedCause, sequential(oldSC, cause))
			}
			processNewInterruptSignal(cause) {
				this.addInterruptedCause(cause)
				this.sendInterruptSignalToAllChildren()
			}
			sendInterruptSignalToAllChildren() {
				if (null === this._children || 0 === this._children.size) return !1
				let told = !1
				for (const child of this._children) {
					child.tell(interruptSignal(interrupt(this.id())))
					told = !0
				}
				return told
			}
			interruptAllChildren() {
				if (this.sendInterruptSignalToAllChildren()) {
					const it = this._children.values()
					this._children = null
					let isDone = !1
					const body = () => {
						const next = it.next()
						return next.done
							? sync(() => {
									isDone = !0
							  })
							: core_asUnit(next.value.await())
					}
					return whileLoop(
						() => !isDone,
						() => body(),
						() => {}
					)
				}
				return null
			}
			reportExitValue(exit) {
				if (runtimeMetrics(this._runtimeFlags)) {
					const tags = this.getFiberRef(currentTags)
					switch (exit._tag) {
						case "Success":
							fiberSuccesses.unsafeUpdate(1, tags)
							break
						case "Failure":
							fiberFailures.unsafeUpdate(1, tags)
					}
				}
				if ("Failure" === exit._tag) {
					const level = this.getFiberRef(unhandledErrorLogLevel)
					isInterruptedOnly(exit.cause) ||
						"Some" !== level._tag ||
						this.log(
							"Fiber terminated with a non handled error",
							exit.cause,
							level
						)
				}
			}
			setExitValue(exit) {
				this._exitValue = exit
				if (runtimeMetrics(this._runtimeFlags)) {
					const tags = this.getFiberRef(currentTags),
						startTimeMillis = this.id().startTimeMillis,
						endTimeMillis = new Date().getTime()
					fiberLifetimes.unsafeUpdate(
						(endTimeMillis - startTimeMillis) / 1e3,
						tags
					)
				}
				this.reportExitValue(exit)
				for (let i = this._observers.length - 1; i >= 0; i--)
					this._observers[i](exit)
			}
			getLoggers() {
				return this.getFiberRef(currentLoggers)
			}
			log(message, cause, overrideLogLevel) {
				const logLevel = Option_isSome(overrideLogLevel)
						? overrideLogLevel.value
						: this.getFiberRef(currentLogLevel),
					spans = this.getFiberRef(currentLogSpan),
					annotations = this.getFiberRef(currentLogAnnotations),
					loggers = this.getLoggers(),
					contextMap = this.unsafeGetFiberRefs()
				mjs_HashSet_forEach(logger => {
					logger.log(
						this.id(),
						logLevel,
						message,
						cause,
						contextMap,
						spans,
						annotations
					)
				})(loggers)
			}
			evaluateMessageWhileSuspended(message) {
				switch (message._tag) {
					case "YieldNow":
						return "Yield"
					case "InterruptSignal":
						this.processNewInterruptSignal(message.cause)
						if (null !== this._asyncInterruptor) {
							this._asyncInterruptor(exitFailCause(message.cause))
							this._asyncInterruptor = null
						}
						return "Continue"
					case "Resume":
						this._asyncInterruptor = null
						this._asyncBlockingOn = null
						this.evaluateEffect(message.effect)
						return "Continue"
					case "Stateful":
						message.onFiber(
							this,
							null !== this._exitValue
								? Status_done
								: ((runtimeFlags = this._runtimeFlags),
								  (blockingOn = this._asyncBlockingOn),
								  new Suspended(runtimeFlags, blockingOn))
						)
						return "Continue"
					default:
						return fiberRuntime_absurd(message)
				}
				var runtimeFlags, blockingOn
			}
			evaluateEffect(effect0) {
				this.getSupervisor().onResume(this)
				try {
					let effect =
						interruptible(this._runtimeFlags) && this.isInterrupted()
							? exitFailCause(this.getInterruptedCause())
							: effect0
					for (; null !== effect; )
						try {
							const exit = this.runLoop(effect)
							this._runtimeFlags = runtimeFlags_enable(16)(this._runtimeFlags)
							const interruption = this.interruptAllChildren()
							if (null !== interruption)
								effect = untraced(() => core_flatMap(interruption, () => exit))
							else {
								MutableQueue_isEmpty(this._queue)
									? this.setExitValue(exit)
									: this.tell(resume(exit))
								effect = null
							}
						} catch (e) {
							if (!isEffect(e)) throw e
							if ("Yield" === e._tag)
								if (cooperativeYielding(this._runtimeFlags)) {
									this.tell({ _tag: "YieldNow" })
									this.tell(resume(exitUnit()))
									effect = null
								} else effect = exitUnit()
							else "Async" === e._tag && (effect = null)
						}
				} finally {
					this.getSupervisor().onSuspend(this)
				}
			}
			start(effect) {
				if (this._running) this.tell(resume(effect))
				else {
					this._running = !0
					const prev = globalThis[currentFiberURI]
					globalThis[currentFiberURI] = this
					try {
						this.evaluateEffect(effect)
					} finally {
						this._running = !1
						globalThis[currentFiberURI] = prev
						MutableQueue_isEmpty(this._queue) ||
							this.drainQueueLaterOnExecutor()
					}
				}
			}
			startFork(effect) {
				this.tell(resume(effect))
			}
			patchRuntimeFlags(oldRuntimeFlags, patch) {
				const newRuntimeFlags = runtimeFlags_patch(oldRuntimeFlags, patch)
				globalThis[currentFiberURI] = this
				this._runtimeFlags = newRuntimeFlags
				return newRuntimeFlags
			}
			initiateAsync(runtimeFlags, asyncRegister) {
				let alreadyCalled = !1
				const callback = effect => {
					if (!alreadyCalled) {
						alreadyCalled = !0
						this.tell(resume(effect))
					}
				}
				interruptible(runtimeFlags) && (this._asyncInterruptor = callback)
				try {
					asyncRegister(callback)
				} catch (e) {
					callback(failCause(die(e)))
				}
			}
			pushStack(cont) {
				this._stack.push(cont)
				"trace" in cont && cont.trace && this._traceStack.push(cont.trace)
			}
			popStack() {
				const item = this._stack.pop()
				if (item) {
					"trace" in item && item.trace && this._traceStack.pop()
					return item
				}
			}
			getNextSuccessCont() {
				let frame = this.popStack()
				for (; frame; ) {
					if ("OnFailure" !== frame._tag && "Traced" !== frame._tag)
						return frame
					frame = this.popStack()
				}
			}
			getNextFailCont() {
				let frame = this.popStack()
				for (; frame; ) {
					if (
						"OnSuccess" !== frame._tag &&
						"While" !== frame._tag &&
						"Traced" !== frame._tag
					)
						return frame
					frame = this.popStack()
				}
			}
			[((fiberRuntime_a = FiberTypeId),
			(fiberRuntime_b = RuntimeFiberTypeId),
			"Tag")](op) {
				return core_map(fiberRefGet(currentContext), context =>
					mjs_Context_unsafeGet(context, op)
				)
			}
			Left(op) {
				return exitFail(op.i0)
			}
			None(_) {
				return exitFail(NoSuchElementException())
			}
			Right(op) {
				return exitSucceed(op.i0)
			}
			Some(op) {
				return exitSucceed(op.i0)
			}
			Sync(op) {
				const value = op.i0(),
					cont = this.getNextSuccessCont()
				if (void 0 !== cont) {
					cont._tag in contOpSuccess || fiberRuntime_absurd(cont)
					return contOpSuccess[cont._tag](this, cont, value)
				}
				throw exitSucceed(value)
			}
			Success(op) {
				const oldCur = op,
					cont = this.getNextSuccessCont()
				if (void 0 !== cont) {
					cont._tag in contOpSuccess || fiberRuntime_absurd(cont)
					return contOpSuccess[cont._tag](this, cont, oldCur.i0)
				}
				throw oldCur
			}
			Failure(op) {
				let cause = op.i0
				if (
					(self => "Annotated" === self._tag)(cause) &&
					isStackAnnotation(cause.annotation)
				) {
					const stack = cause.annotation.stack,
						currentStack = this.stackToLines()
					cause = annotated(
						cause.cause,
						new StackAnnotation(
							Chunk_take(runtimeDebug.traceStackLimit)(
								dedupeAdjacent(
									0 === stack.length
										? currentStack
										: 0 === currentStack.length ||
										  unsafeLast(stack) === unsafeLast(currentStack)
										? stack
										: Chunk_concat(currentStack)(stack)
								)
							),
							cause.annotation.seq
						)
					)
				} else
					cause = annotated(
						op.i0,
						new StackAnnotation(
							this.stackToLines(),
							(self => getAndUpdate(self, n => n + 1))(globalErrorSeq)
						)
					)
				const cont = this.getNextFailCont()
				if (void 0 === cont) throw exitFailCause(cause)
				switch (cont._tag) {
					case "OnFailure":
					case "OnSuccessAndFailure":
						return interruptible(this._runtimeFlags) && this.isInterrupted()
							? exitFailCause(stripFailures(cause))
							: cont.i1(cause)
					case "RevertFlags":
						this.patchRuntimeFlags(this._runtimeFlags, cont.patch)
						return interruptible(this._runtimeFlags) && this.isInterrupted()
							? exitFailCause(sequential(cause, this.getInterruptedCause()))
							: exitFailCause(cause)
					default:
						fiberRuntime_absurd(cont)
				}
			}
			WithRuntime(op) {
				return op.i0(this, Status_running(this._runtimeFlags))
			}
			UpdateRuntimeFlags(op) {
				if (void 0 === op.i1) {
					this.patchRuntimeFlags(this._runtimeFlags, op.i0)
					return exitUnit()
				}
				{
					const updateFlags = op.i0,
						oldRuntimeFlags = this._runtimeFlags,
						newRuntimeFlags = runtimeFlags_patch(oldRuntimeFlags, updateFlags)
					if (newRuntimeFlags === oldRuntimeFlags) return op.i1(oldRuntimeFlags)
					if (interruptible(newRuntimeFlags) && this.isInterrupted())
						return exitFailCause(this.getInterruptedCause())
					{
						this.patchRuntimeFlags(this._runtimeFlags, updateFlags)
						const revertFlags = runtimeFlags_diff(
							newRuntimeFlags,
							oldRuntimeFlags
						)
						this.pushStack(new RevertFlags(revertFlags))
						return op.i1(oldRuntimeFlags)
					}
				}
			}
			OnSuccess(op) {
				this.pushStack(op)
				return op.i0
			}
			Traced(op) {
				this.pushStack(op)
				return op.i0
			}
			OnFailure(op) {
				this.pushStack(op)
				return op.i0
			}
			OnSuccessAndFailure(op) {
				this.pushStack(op)
				return op.i0
			}
			Async(op) {
				this._asyncBlockingOn = op.i1
				this.initiateAsync(this._runtimeFlags, op.i0)
				throw op
			}
			Yield(op) {
				throw op
			}
			While(op) {
				const check = op.i0,
					body = op.i1
				if (check()) {
					this.pushStack(op)
					return body()
				}
				return exitUnit()
			}
			Commit(op) {
				return op.commit()
			}
			runLoop(effect0) {
				let cur = effect0,
					ops = 0
				for (;;) {
					opSupervision(this._runtimeFlags) &&
						this.getSupervisor().onEffect(this, cur)
					cur = this.drainQueueWhileRunning(this._runtimeFlags, cur)
					ops += 1
					if (ops >= 2048) {
						ops = 0
						const oldCur = cur
						cur = core_flatMap(() => oldCur)(yieldNow())
					}
					try {
						cur._tag in this || fiberRuntime_absurd(cur)
						cur = this[cur._tag](cur)
					} catch (e) {
						if (isEffect(e)) {
							if ("Yield" === e._tag || "Async" === e._tag) throw e
							if ("Success" === e._tag || "Failure" === e._tag) return e
						} else
							cur = isEffectError(e)
								? exitFailCause(e.cause)
								: isInterruptedException(e)
								? exitFailCause(sequential(die(e), interrupt(Id_none)))
								: exitFailCause(die(e))
					}
				}
			}
			stackToLines() {
				if (0 === this._traceStack.length) return Chunk_empty()
				const lines = []
				let current = this._traceStack.length - 1
				for (; current >= 0 && lines.length < runtimeDebug.traceStackLimit; ) {
					const value = this._traceStack[current]
					lines.push(value)
					current -= 1
				}
				return unsafeFromArray(lines)
			}
		}
		const currentMinimumLogLevel = fiberRefUnsafeMake(
				fromLiteral(runtimeDebug.minumumLogLevel)
			),
			defaultLogger = makeLogger(
				(fiberId, logLevel, message, cause, context, spans, annotations) => {
					const formatted = stringLogger.log(
							fiberId,
							logLevel,
							message,
							cause,
							context,
							spans,
							annotations
						),
						filter = getOrDefault(context, currentMinimumLogLevel)
					greaterThanEqual(filter)(logLevel) &&
						globalThis.console.log(formatted)
				}
			),
			currentLoggers = fiberRefUnsafeMakeHashSet(
				mjs_HashSet_make(defaultLogger)
			),
			acquireRelease = dualWithTrace(
				2,
				(trace, restore) => (acquire, release) =>
					uninterruptible(
						core_tap(acquire, a =>
							addFinalizer(exit => restore(release)(a, exit))
						)
					).traced(trace)
			),
			addFinalizer = methodWithTrace(
				(trace, restore) => finalizer =>
					core_flatMap(context(), context =>
						core_flatMap(scope(), scope =>
							scopeAddFinalizerExit(scope, exit =>
								core_asUnit(provideContext(context)(restore(finalizer)(exit)))
							)
						)
					).traced(trace)
			),
			forEachPar = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					fiberRefGetWith(currentParallelism, o =>
						"None" === o._tag
							? forEachParUnbounded(self, restore(f))
							: forEachParN(self, o.value, f)
					).traced(trace)
			),
			forEachParUnbounded = (self, f) =>
				suspend(() => {
					const as = Array.from(self).map((v, i) => [v, i]),
						array = new Array(as.length)
					return core_zipRight(
						forEachParUnboundedDiscard(as, ([a, i]) =>
							core_flatMap(f(a), b => sync(() => (array[i] = b)))
						),
						succeed(unsafeFromArray(array))
					)
				}),
			forEachParUnboundedDiscard = (self, f) =>
				suspend(() => {
					const as = Array.from(self),
						size = as.length
					return 0 === size
						? core_unit()
						: 1 === size
						? core_asUnit(f(as[0]))
						: uninterruptibleMask(restore => {
								const deferred = deferredUnsafeMake(Id_none)
								let ref = 0
								const process = transplant(graft =>
									core_forEach(as, a =>
										forkDaemon(
											graft(
												matchCauseEffect(
													cause =>
														core_zipRight(
															deferredFail(deferred, void 0),
															failCause(cause)
														),
													() => {
														ref + 1 === size
															? deferredUnsafeDone(deferred, core_unit())
															: (ref += 1)
														return core_unit()
													}
												)(restore(suspend(() => f(a))))
											)
										)
									)
								)
								return core_flatMap(process, fibers =>
									matchCauseEffect(
										restore(deferredAwait(deferred)),
										cause =>
											core_flatMap(
												forEachParUnbounded(fibers, interruptFiber),
												exits => {
													const exit = exitCollectAllPar(exits)
													return "Some" === exit._tag &&
														(self => "Failure" === self._tag)(exit.value)
														? failCause(
																parallel(stripFailures(cause), exit.value.i0)
														  )
														: failCause(stripFailures(cause))
												}
											),
										() => forEachDiscard(fibers, f => f.inheritAll())
									)
								)
						  })
				}),
			forEachParN = (self, n, f) =>
				suspend(() => {
					const as = Array.from(self).map((v, i) => [v, i]),
						array = new Array(as.length)
					return core_zipRight(
						forEachParNDiscard(as, n, ([a, i]) =>
							core_map(f(a), b => (array[i] = b))
						),
						succeed(unsafeFromArray(array))
					)
				}),
			forEachParNDiscard = (self, n, f) =>
				suspend(() => {
					const iterator = self[Symbol.iterator](),
						worker = core_flatMap(
							sync(() => iterator.next()),
							next =>
								next.done
									? core_unit()
									: core_flatMap(core_asUnit(f(next.value)), () => worker)
						),
						effects = []
					for (let i = 0; i < n; i++) effects.push(worker)
					return forEachParUnboundedDiscard(effects, Function_identity)
				}),
			forkDaemon = methodWithTrace(
				trace => self => forkWithScopeOverride(self, globalScope).traced(trace)
			),
			unsafeMakeChildFiber = (
				effect,
				parentFiber,
				parentRuntimeFlags,
				overrideScope = null
			) => {
				const childId = Id_unsafeMake(),
					parentFiberRefs = parentFiber.unsafeGetFiberRefs(),
					childFiberRefs = forkAs(parentFiberRefs, childId),
					childFiber = new FiberRuntime(
						childId,
						childFiberRefs,
						parentRuntimeFlags
					),
					childContext = getOrDefault(childFiberRefs, currentContext),
					supervisor = childFiber.getSupervisor()
				supervisor.onStart(
					childContext,
					effect,
					Option_some(parentFiber),
					childFiber
				)
				childFiber.unsafeAddObserver(exit => supervisor.onEnd(exit, childFiber))
				;(null !== overrideScope
					? overrideScope
					: getOrElse(() => parentFiber.scope())(
							parentFiber.getFiberRef(forkScopeOverride)
					  )
				).add(parentRuntimeFlags, childFiber)
				return childFiber
			},
			forkWithScopeOverride = (self, scopeOverride) =>
				withFiberRuntime((parentFiber, parentStatus) =>
					succeed(
						((
							effect,
							parentFiber,
							parentRuntimeFlags,
							overrideScope = null
						) => {
							const childFiber = unsafeMakeChildFiber(
								effect,
								parentFiber,
								parentRuntimeFlags,
								overrideScope
							)
							childFiber.resume(effect)
							return childFiber
						})(self, parentFiber, parentStatus.runtimeFlags, scopeOverride)
					)
				),
			scope = methodWithTrace(trace => () => scopeTag.traced(trace)),
			scopeWith = methodWithTrace(
				(trace, restore) => f =>
					core_flatMap(scopeTag, restore(f)).traced(trace)
			),
			fiberRuntime_some = methodWithTrace(
				trace => self =>
					matchEffect(
						self,
						e => core_fail(Option_some(e)),
						option => {
							switch (option._tag) {
								case "None":
									return core_fail(Option_none())
								case "Some":
									return succeed(option.value)
							}
						}
					).traced(trace)
			),
			unsome = methodWithTrace(
				trace => self =>
					matchEffect(
						self,
						option => {
							switch (option._tag) {
								case "None":
									return succeed(Option_none())
								case "Some":
									return core_fail(option.value)
							}
						},
						a => succeed(Option_some(a))
					).traced(trace)
			),
			scopeTag = Tag(),
			scopeMake = methodWithTrace(
				trace =>
					(strategy = ExecutionStrategy_sequential) =>
						core_map(releaseMapMake(), rm => ({
							[ScopeTypeId]: ScopeTypeId,
							[CloseableScopeTypeId]: CloseableScopeTypeId,
							fork: strategy =>
								bodyWithTrace(trace =>
									uninterruptible(
										core_flatMap(scope =>
											core_as(scope)(
												core_tap(fin => scopeAddFinalizerExit(scope, fin))(
													releaseMapAdd(exit => scopeClose(scope, exit))(rm)
												)
											)
										)(scopeMake(strategy))
									).traced(trace)
								),
							close: exit =>
								bodyWithTrace(trace =>
									core_asUnit(
										(
											(strategy, exit) => self =>
												suspend(() => {
													switch (self.state._tag) {
														case "Exited":
															return core_unit()
														case "Running": {
															const finalizersMap = self.state.finalizers,
																update = self.state.update,
																finalizers = Array.from(finalizersMap.keys())
																	.sort((a, b) => b - a)
																	.map(key => finalizersMap.get(key))
															self.state = {
																_tag: "Exited",
																nextKey: self.state.nextKey,
																exit,
																update,
															}
															return (self => "Sequential" === self._tag)(
																strategy
															)
																? core_flatMap(results =>
																		getOrElse(() => exitUnit())(
																			Option_map(exitAsUnit)(
																				exitCollectAllInternal(
																					results,
																					sequential
																				)
																			)
																		)
																  )(
																		core_forEach(fin =>
																			core_exit(update(fin)(exit))
																		)(finalizers)
																  )
																: (self => "Parallel" === self._tag)(strategy)
																? core_flatMap(results =>
																		getOrElse(() => exitUnit())(
																			Option_map(exitAsUnit)(
																				exitCollectAllPar(results)
																			)
																		)
																  )(
																		forEachPar(fin =>
																			core_exit(update(fin)(exit))
																		)(finalizers)
																  )
																: withParallelism(strategy.parallelism)(
																		core_flatMap(results =>
																			getOrElse(() => exitUnit())(
																				Option_map(exitAsUnit)(
																					exitCollectAllPar(results)
																				)
																			)
																		)(
																			forEachPar(fin =>
																				core_exit(update(fin)(exit))
																			)(finalizers)
																		)
																  )
														}
													}
												})
										)(
											strategy,
											exit
										)(rm)
									).traced(trace)
								),
							addFinalizer: fin =>
								bodyWithTrace(trace =>
									core_asUnit(releaseMapAdd(fin)(rm)).traced(trace)
								),
						})).traced(trace)
			),
			scopeExtend = dualWithTrace(2, trace => (effect, scope) => {
				return contramapContext(
					effect,
					mjs_Context_merge(
						((tag = scopeTag),
						(service = scope),
						new ContextImpl(new Map([[tag, service]])))
					)
				).traced(trace)
				var tag, service
			}),
			fiberRefUnsafeMakeSupervisor = initial =>
				fiberRefUnsafeMakePatch(initial, patch_differ, supervisor_patch_empty),
			fiberRefLocallyScoped = dualWithTrace(
				2,
				trace => (self, value) =>
					core_asUnit(
						acquireRelease(
							core_flatMap(oldValue =>
								core_as(oldValue)(fiberRefSet(self, value))
							)(fiberRefGet(self)),
							oldValue => fiberRefSet(self, oldValue)
						)
					).traced(trace)
			),
			fiberRefLocallyScopedWith = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					fiberRefGetWith(self, a =>
						fiberRefLocallyScoped(self, restore(f)(a))
					).traced(trace)
			),
			currentRuntimeFlags = fiberRefUnsafeMakeRuntimeFlags(runtimeFlags_none),
			currentSupervisor = fiberRefUnsafeMakeSupervisor(supervisor_none),
			fiberInterruptFork = methodWithTrace(
				trace => self =>
					core_asUnit(forkDaemon(interruptFiber(self))).traced(trace)
			),
			IntervalTypeId = Symbol.for("@effect/io/Schedule/Interval"),
			interval_empty = {
				[IntervalTypeId]: IntervalTypeId,
				startMillis: 0,
				endMillis: 0,
			},
			Interval_empty = interval_empty,
			Interval_after = startMilliseconds => {
				return (
					(startMillis = startMilliseconds),
					(endMillis = Number.POSITIVE_INFINITY),
					startMillis > endMillis
						? interval_empty
						: { [IntervalTypeId]: IntervalTypeId, startMillis, endMillis }
				)
				var startMillis, endMillis
			},
			IntervalsTypeId = Symbol.for("@effect/io/Schedule/Intervals"),
			Intervals_make = intervals => ({
				[IntervalsTypeId]: IntervalsTypeId,
				intervals,
			}),
			Intervals_start = self =>
				getOrElse(() => Interval_empty)(Chunk_head(self.intervals)).startMillis,
			Decision_continueWith = interval => ({
				_tag: "Continue",
				intervals: Intervals_make(Chunk_of(interval)),
			})
		var schedule_a, schedule_b
		const ScheduleTypeId = Symbol.for("@effect/io/Schedule"),
			ScheduleDriverTypeId = Symbol.for("@effect/io/Schedule/Driver"),
			scheduleVariance = { _Env: _ => _, _In: _ => _, _Out: _ => _ },
			scheduleDriverVariance = { _Env: _ => _, _In: _ => _, _Out: _ => _ }
		class ScheduleImpl {
			constructor(initial, step) {
				this.initial = initial
				this.step = step
				this[schedule_a] = scheduleVariance
			}
		}
		schedule_a = ScheduleTypeId
		class ScheduleDriverImpl {
			constructor(schedule, ref) {
				this.schedule = schedule
				this.ref = ref
				this[schedule_b] = scheduleDriverVariance
			}
			state() {
				return bodyWithTrace(trace =>
					core_map(Ref_get(this.ref), tuple => tuple[1]).traced(trace)
				)
			}
			last() {
				return bodyWithTrace(trace =>
					core_flatMap(Ref_get(this.ref), ([element, _]) => {
						switch (element._tag) {
							case "None":
								return failSync(() => NoSuchElementException())
							case "Some":
								return succeed(element.value)
						}
					}).traced(trace)
				)
			}
			reset() {
				return bodyWithTrace(trace =>
					Ref_set(this.ref, [Option_none(), this.schedule.initial]).traced(
						trace
					)
				)
			}
			next(input) {
				return bodyWithTrace((trace, restore) =>
					core_flatMap(state =>
						core_flatMap(now =>
							core_flatMap(([state, out, decision]) =>
								(self => "Done" === self._tag)(decision)
									? core_zipRight(core_fail(Option_none()))(
											Ref_set(this.ref, [Option_some(out), state])
									  )
									: core_as(out)(
											core_zipRight(
												effect_sleep(
													millis(Intervals_start(decision.intervals) - now)
												)
											)(Ref_set(this.ref, [Option_some(out), state]))
									  )
							)(suspend(restore(() => this.schedule.step(now, input, state))))
						)(Clock_currentTimeMillis())
					)(core_map(Ref_get(this.ref), tuple => tuple[1])).traced(trace)
				)
			}
		}
		schedule_b = ScheduleDriverTypeId
		const makeWithState = untracedMethod(
				restore => (initial, step) => new ScheduleImpl(initial, restore(step))
			),
			driver = methodWithTrace(
				trace => self =>
					core_map(ref => new ScheduleDriverImpl(self, ref))(
						Ref_make([Option_none(), self.initial])
					).traced(trace)
			),
			fixed = untracedMethod(
				() => interval =>
					makeWithState([Option_none(), 0], (now, _, [option, n]) =>
						sync(() => {
							const intervalMillis = interval.millis
							switch (option._tag) {
								case "None":
									return [
										[Option_some([now, now + intervalMillis]), n + 1],
										n,
										Decision_continueWith(Interval_after(now + intervalMillis)),
									]
								case "Some": {
									const [startMillis, lastRun] = option.value,
										runningBehind = now > lastRun + intervalMillis,
										boundary = equals(interval, zero)
											? interval
											: millis(
													intervalMillis -
														((now - startMillis) % intervalMillis)
											  ),
										sleepTime = equals(boundary, zero) ? interval : boundary,
										nextRun = runningBehind ? now : now + sleepTime.millis
									return [
										[Option_some([startMillis, nextRun]), n + 1],
										n,
										Decision_continueWith(Interval_after(nextRun)),
									]
								}
							}
						})
					)
			),
			repeat_Effect = dualWithTrace(
				2,
				trace => (self, schedule) =>
					repeatOrElse_Effect(self, schedule, (e, _) => core_fail(e)).traced(
						trace
					)
			),
			repeatOrElse_Effect = dualWithTrace(
				3,
				(trace, restore) => (self, schedule, orElse) =>
					core_map(
						repeatOrElseEither_Effect(self, schedule, restore(orElse)),
						merge
					).traced(trace)
			),
			repeatOrElseEither_Effect = dualWithTrace(
				3,
				(trace, restore) => (self, schedule, orElse) =>
					core_flatMap(driver(schedule), driver =>
						matchEffect(
							self,
							error =>
								core_map(Either_left)(restore(orElse)(error, Option_none())),
							value =>
								repeatOrElseEitherEffectLoop(
									self,
									driver,
									restore(orElse),
									value
								)
						)
					).traced(trace)
			),
			repeatOrElseEitherEffectLoop = (self, driver, orElse, value) =>
				matchEffect(
					() => core_map(Either_right)(orDie(driver.last())),
					b =>
						matchEffect(
							error => core_map(Either_left)(orElse(error, Option_some(b))),
							value => repeatOrElseEitherEffectLoop(self, driver, orElse, value)
						)(self)
				)(driver.next(value))
		var circular_b, circular_c
		class Semaphore {
			constructor(permits) {
				this.permits = permits
				this.waiters = new Array()
				this.taken = 0
				this.take = n =>
					bodyWithTrace(trace =>
						asyncInterruptEither(resume => {
							if (this.free < n) {
								const observer = () => {
									if (this.free >= n) {
										const observerIndex = this.waiters.findIndex(
											cb => cb === observer
										)
										;-1 !== observerIndex &&
											this.waiters.splice(observerIndex, 1)
										this.taken += n
										resume(succeed(n))
									}
								}
								this.waiters.push(observer)
								return Either_left(
									sync(() => {
										const observerIndex = this.waiters.findIndex(
											cb => cb === observer
										)
										;-1 !== observerIndex &&
											this.waiters.splice(observerIndex, 1)
									})
								)
							}
							this.taken += n
							return Either_right(succeed(n))
						}).traced(trace)
					)
				this.release = n =>
					bodyWithTrace(trace =>
						withFiberRuntime(fiber => {
							this.taken -= n
							fiber.getFiberRef(currentScheduler).scheduleTask(() => {
								this.waiters.forEach(wake => wake())
							})
							return core_unit()
						}).traced(trace)
					)
				this.withPermits = n =>
					bodyWithTrace(
						trace => self =>
							untraced(() =>
								uninterruptibleMask(restore =>
									core_flatMap(restore(this.take(n)), permits =>
										circular_ensuring(restore(self), this.release(permits))
									)
								)
							).traced(trace)
					)
			}
			get free() {
				return this.permits - this.taken
			}
		}
		const circular_ensuring = dualWithTrace(
			2,
			trace => (self, finalizer) =>
				uninterruptibleMask(restore =>
					matchCauseEffect(
						restore(self),
						cause1 =>
							matchCauseEffect(
								finalizer,
								cause2 => failCause(sequential(cause1, cause2)),
								() => failCause(cause1)
							),
						a => core_as(finalizer, a)
					)
				).traced(trace)
		)
		const zipWithPar = dualWithTrace(
				3,
				(trace, restoreTrace) => (self, that, f) =>
					uninterruptibleMask(restore =>
						transplant(graft => {
							const deferred = deferredUnsafeMake(Id_none),
								ref = MutableRef_make(!1)
							return core_flatMap(([left, right]) =>
								matchCauseEffect(
									cause =>
										core_zipRight(
											core_flatMap(([left, right]) =>
												exitMatch(
													causes =>
														failCause(parallel(stripFailures(cause), causes)),
													() => failCause(stripFailures(cause))
												)(exitZipWith(right, f, parallel)(left))
											)(core_zip(_await(right))(_await(left)))
										)(
											core_zipRight(fiberInterruptFork(right))(
												fiberInterruptFork(left)
											)
										),
									() =>
										core_zipWith(
											fiber_join(left),
											fiber_join(right),
											restoreTrace(f)
										)
								)(restore(deferredAwait(deferred)))
							)(
								core_zip(forkZipWithPar(that, graft, restore, deferred, ref))(
									forkZipWithPar(self, graft, restore, deferred, ref)
								)
							)
						})
					).traced(trace)
			),
			forkZipWithPar = (self, graft, restore, deferred, ref) =>
				forkDaemon(
					matchCauseEffect(
						graft(restore(self)),
						cause =>
							core_zipRight(deferredFail(deferred, void 0), failCause(cause)),
						value => {
							if (MutableRef_get(ref)) {
								deferredUnsafeDone(deferred, core_unit())
								return succeed(value)
							}
							MutableRef_set(!0)(ref)
							return succeed(value)
						}
					)
				),
			SynchronizedTypeId = Symbol.for("@effect/io/Ref/Synchronized"),
			synchronizedVariance = { _A: _ => _ }
		class SynchronizedImpl {
			constructor(ref, withLock) {
				this.ref = ref
				this.withLock = withLock
				this[circular_b] = synchronizedVariance
				this[circular_c] = refVariance
			}
			modify(f) {
				return bodyWithTrace((trace, restore) =>
					this.modifyEffect(a => succeed(restore(f)(a))).traced(trace)
				)
			}
			modifyEffect(f) {
				return bodyWithTrace((trace, restore) =>
					this.withLock(
						core_flatMap(([b, a]) => core_as(ref_set(this.ref, a), b))(
							core_flatMap(ref_get(this.ref), restore(f))
						)
					).traced(trace)
				)
			}
		}
		;(circular_b = SynchronizedTypeId), (circular_c = RefTypeId)
		const makeSynchronized = methodWithTrace(
				trace => value =>
					sync(() => unsafeMakeSynchronized(value)).traced(trace)
			),
			unsafeMakeSynchronized = value => {
				const ref = ref_unsafeMake(value),
					sem = new Semaphore(1)
				return new SynchronizedImpl(ref, sem.withPermits(1))
			},
			Cause_fail = fail,
			Cause_failureOrCause = failureOrCause,
			Cause_pretty = cause_pretty_pretty,
			modifyEffect = dualWithTrace(
				2,
				(trace, restore) => (self, f) =>
					self.modifyEffect(restore(f)).traced(trace)
			),
			layer_proto = {
				[Symbol.for("@effect/io/Layer")]: {
					_RIn: _ => _,
					_E: _ => _,
					_ROut: _ => _,
				},
			},
			isFresh = self => "Fresh" === self._tag
		class MemoMap {
			constructor(ref) {
				this.ref = ref
			}
			getOrElseMemoize(layer, scope) {
				return core_flatten(
					modifyEffect(this.ref, map => {
						const inMap = map.get(layer)
						if (void 0 !== inMap) {
							const [acquire, release] = inMap,
								cached = onExit(
									exitMatch(
										() => core_unit(),
										() => scopeAddFinalizerExit(scope, release)
									)
								)(
									core_flatMap(([patch, b]) =>
										core_as(b)(patchFiberRefs(patch))
									)(acquire)
								)
							return succeed([cached, map])
						}
						return core_flatMap(observers =>
							core_flatMap(deferred =>
								core_map(finalizerRef => {
									const resource = uninterruptibleMask(restore =>
											core_flatMap(innerScope =>
												core_flatMap(exit => {
													switch (exit._tag) {
														case "Failure":
															return core_zipRight(failCause(exit.i0))(
																core_zipRight(scopeClose(innerScope, exit))(
																	deferredFailCause(deferred, exit.i0)
																)
															)
														case "Success":
															return core_as(exit.i0[1])(
																core_zipRight(
																	deferredSucceed(deferred, exit.i0)
																)(
																	core_zipRight(
																		scopeAddFinalizerExit(scope, exit =>
																			core_flatMap(finalizer =>
																				finalizer(exit)
																			)(ref_get(finalizerRef))
																		)
																	)(
																		core_zipRight(
																			ref_update(observers, n => n + 1)
																		)(
																			ref_set(finalizerRef, exit =>
																				core_asUnit(
																					whenEffect(
																						ref_modify(observers, n => [
																							1 === n,
																							n - 1,
																						])
																					)(scopeClose(innerScope, exit))
																				)
																			)
																		)
																	)
																)
															)
													}
												})(
													core_exit(
														restore(
															core_flatMap(withScope(layer, innerScope), f =>
																diffFiberRefs(f(this))
															)
														)
													)
												)
											)(scopeMake())
										),
										memoized = [
											onExit(
												exitMatchEffect(
													() => core_unit(),
													() => ref_update(observers, n => n + 1)
												)
											)(deferredAwait(deferred)),
											exit =>
												core_flatMap(finalizer => finalizer(exit))(
													ref_get(finalizerRef)
												),
										]
									return [
										resource,
										isFresh(layer) ? map : map.set(layer, memoized),
									]
								})(ref_make(() => core_unit()))
							)(deferredMake())
						)(ref_make(0))
					})
				)
			}
		}
		const buildWithScope = dualWithTrace(
				2,
				trace => (self, scope) =>
					core_flatMap(
						core_map(ref => new MemoMap(ref))(makeSynchronized(new Map())),
						memoMap => core_flatMap(withScope(self, scope), run => run(memoMap))
					).traced(trace)
			),
			withScope = (self, scope) => {
				const op = self
				switch (op._tag) {
					case "ExtendScope":
						return sync(
							() => memoMap =>
								scopeWith(scope => memoMap.getOrElseMemoize(op.layer, scope))
						)
					case "Fold":
						return sync(
							() => memoMap =>
								matchCauseEffect(
									cause => memoMap.getOrElseMemoize(op.failureK(cause), scope),
									value => memoMap.getOrElseMemoize(op.successK(value), scope)
								)(memoMap.getOrElseMemoize(op.layer, scope))
						)
					case "Fresh":
						return sync(() => _ => buildWithScope(scope)(op.layer))
					case "FromEffect":
						return sync(() => _ => op.effect)
					case "ProvideTo":
						return sync(
							() => memoMap =>
								core_flatMap(env =>
									provideContext(env)(
										memoMap.getOrElseMemoize(op.second, scope)
									)
								)(memoMap.getOrElseMemoize(op.first, scope))
						)
					case "Scoped":
						return sync(() => _ => scopeExtend(op.effect, scope))
					case "Suspend":
						return sync(
							() => memoMap => memoMap.getOrElseMemoize(op.evaluate(), scope)
						)
					case "ZipWith":
						return sync(
							() => memoMap =>
								core_zipWith(
									memoMap.getOrElseMemoize(op.second, scope),
									op.zipK
								)(memoMap.getOrElseMemoize(op.first, scope))
						)
					case "ZipWithPar":
						return sync(
							() => memoMap =>
								zipWithPar(
									memoMap.getOrElseMemoize(op.second, scope),
									op.zipK
								)(memoMap.getOrElseMemoize(op.first, scope))
						)
				}
			},
			layer_fail = error => layer_failCause(Cause_fail(error)),
			layer_failCause = cause => fromEffectContext(failCause(cause)),
			layer_flatMap = untracedDual(
				2,
				restore => (self, f) => matchLayer(self, layer_fail, restore(f))
			)
		function fromEffectContext(effect) {
			const fromEffect = Object.create(layer_proto)
			fromEffect._tag = "FromEffect"
			fromEffect.effect = effect
			return fromEffect
		}
		const matchCauseLayer = untracedDual(
				3,
				restore => (self, onFailure, onSuccess) => {
					const fold = Object.create(layer_proto)
					fold._tag = "Fold"
					fold.layer = self
					fold.failureK = restore(onFailure)
					fold.successK = restore(onSuccess)
					return fold
				}
			),
			matchLayer = untracedDual(
				3,
				restore => (self, onFailure, onSuccess) =>
					matchCauseLayer(
						self,
						cause => {
							const failureOrCause = Cause_failureOrCause(cause)
							switch (failureOrCause._tag) {
								case "Left":
									return restore(onFailure)(failureOrCause.left)
								case "Right":
									return layer_failCause(failureOrCause.right)
							}
						},
						restore(onSuccess)
					)
			),
			layer_merge = Function_dual(2, (self, that) =>
				layer_zipWithPar(self, that, (a, b) => mjs_Context_merge(b)(a))
			),
			scopedDiscard = effect =>
				scopedContext(core_as(mjs_Context_empty())(effect)),
			scopedContext = effect => {
				const scoped = Object.create(layer_proto)
				scoped._tag = "Scoped"
				scoped.effect = effect
				return scoped
			},
			layer_zipWithPar = untracedDual(
				3,
				restore => (self, that, f) =>
					(evaluate => {
						const suspend = Object.create(layer_proto)
						suspend._tag = "Suspend"
						suspend.evaluate = evaluate
						return suspend
					})(() => {
						const zipWithPar = Object.create(layer_proto)
						zipWithPar._tag = "ZipWithPar"
						zipWithPar.first = self
						zipWithPar.second = that
						zipWithPar.zipK = restore(f)
						return zipWithPar
					})
			),
			provideLayer = dualWithTrace(
				2,
				trace => (self, layer) =>
					acquireUseRelease(
						scopeMake(),
						scope =>
							core_flatMap(buildWithScope(layer, scope), context =>
								provideContext(self, context)
							),
						(scope, exit) => scopeClose(scope, exit)
					).traced(trace)
			),
			provideSomeLayer = dualWithTrace(
				2,
				trace => (self, layer) =>
					provideLayer(
						self,
						layer_merge(layer)(fromEffectContext(context()))
					).traced(trace)
			),
			withMinimumLogLevel = dualWithTrace(
				2,
				trace => (self, level) =>
					fiberRefLocally(currentMinimumLogLevel, level)(self).traced(trace)
			),
			addLogger = methodWithTrace(
				trace => logger =>
					scopedDiscard(
						fiberRefLocallyScopedWith(
							currentLoggers,
							mjs_HashSet_add(logger)
						).traced(trace)
					)
			),
			removeLogger = untracedMethod(
				() => logger =>
					scopedDiscard(
						fiberRefLocallyScopedWith(
							currentLoggers,
							mjs_HashSet_remove(logger)
						)
					)
			),
			replaceLogger = Function_dual(2, (self, that) =>
				layer_flatMap(removeLogger(self), () => addLogger(that))
			)
		class AsyncFiber {
			constructor(fiber) {
				this.fiber = fiber
				this._tag = "AsyncFiber"
			}
			toString() {
				return `Fiber #${this.fiber.id().id} has suspended work asyncroniously`
			}
			[Symbol.for("nodejs.util.inspect.custom")]() {
				return this.toString()
			}
		}
		const FiberFailureId = Symbol.for("@effect/io/Runtime/FiberFailure"),
			FiberFailureCauseId = Symbol.for("@effect/io/Runtime/FiberFailure/Cause"),
			NodePrint = Symbol.for("nodejs.util.inspect.custom"),
			unsafeRunPromise = runtime =>
				methodWithTrace(
					trace => effect =>
						new Promise((resolve, reject) => {
							;(runtime =>
								methodWithTrace(trace => (self, options) => {
									const fiberId = Id_unsafeMake(),
										effect = self.traced(trace)
									let fiberRefs = FiberRefs_updatedAs(
										runtime.fiberRefs,
										fiberId,
										currentContext,
										runtime.context
									)
									options?.scheduler &&
										(fiberRefs = FiberRefs_updatedAs(
											fiberRefs,
											fiberId,
											currentScheduler,
											options.scheduler
										))
									options?.updateRefs &&
										(fiberRefs = options.updateRefs(fiberRefs, fiberId))
									const fiberRuntime = new FiberRuntime(
											fiberId,
											FiberRefs_forkAs(fiberRefs, fiberId),
											runtime.runtimeFlags
										),
										supervisor = fiberRuntime.getSupervisor()
									if (supervisor !== supervisor_none) {
										supervisor.onStart(
											runtime.context,
											effect,
											Option_none(),
											fiberRuntime
										)
										fiberRuntime.unsafeAddObserver(exit =>
											supervisor.onEnd(exit, fiberRuntime)
										)
									}
									globalScope.add(runtime.runtimeFlags, fiberRuntime)
									fiberRuntime.start(effect)
									return fiberRuntime
								}))(runtime)(effect.traced(trace)).unsafeAddObserver(result => {
								switch (result._tag) {
									case "Success":
										resolve(result.i0)
										break
									case "Failure":
										reject(
											(cause => {
												const limit = Error.stackTraceLimit
												Error.stackTraceLimit = 0
												const error = new Error()
												Error.stackTraceLimit = limit
												const pretty = prettyErrors(cause)
												if (pretty.length > 0) {
													error.name = pretty[0].message.split(":")[0]
													error.message = pretty[0].message.substring(
														error.name.length + 2
													)
													error.stack = `${error.name}: ${error.message}\n${pretty[0].stack}`
												}
												error[FiberFailureId] = FiberFailureId
												error[FiberFailureCauseId] = cause
												error.toString = () => cause_pretty_pretty(cause)
												error[NodePrint] = () => error.toString()
												return error
											})(result.i0)
										)
								}
							})
						})
				)
		class RuntimeImpl {
			constructor(context, runtimeFlags, fiberRefs) {
				this.context = context
				this.runtimeFlags = runtimeFlags
				this.fiberRefs = fiberRefs
			}
		}
		const runtime_make = (context, runtimeFlags, fiberRefs) =>
				new RuntimeImpl(context, runtimeFlags, fiberRefs),
			defaultRuntimeFlags = runtimeFlags_make(1, 32),
			Effect_asUnit = core_asUnit,
			Effect_delay = delay,
			Effect_bind = effect_bind,
			Effect_bindDiscard = effect_bindDiscard,
			bindValue_ = bindValue,
			Effect_letDiscard = bindValueDiscard,
			Effect_Do = effect_Do,
			Effect_fail = core_fail,
			Effect_filterOrElse = filterOrElse,
			Effect_filterOrFail = filterOrFail,
			Effect_flatMap = core_flatMap,
			Effect_forEach = core_forEach,
			Effect_forkDaemon = forkDaemon,
			Effect_fromOption = core_fromOption,
			Effect_ignore = ignore,
			Effect_isSuccess = effect_isSuccess,
			Effect_log = log,
			Effect_logDebug = logDebug,
			Effect_logError = logError,
			Effect_logInfo = logInfo,
			Effect_logWarning = logWarning,
			Effect_logAnnotate = logAnnotate,
			Effect_map = core_map,
			Effect_orElseSucceed = orElseSucceed,
			Effect_promise = promise,
			Effect_provideSomeLayer = provideSomeLayer,
			Effect_repeat = repeat_Effect,
			Effect_some = fiberRuntime_some,
			Effect_succeed = succeed,
			Effect_sync = sync,
			Effect_tap = core_tap,
			Effect_tapErrorCause = tapErrorCause,
			Effect_all = effect_all,
			Effect_unit = core_unit,
			runPromise = unsafeRunPromise(
				runtime_make(
					mjs_Context_empty(),
					defaultRuntimeFlags,
					FiberRefs_unsafeMake(new Map())
				)
			),
			Effect_unsome = unsome,
			Effect_withParallelismUnbounded = withParallelismUnbounded,
			Effect_zipLeft = core_zipLeft,
			Effect_zipRight = core_zipRight,
			external_rxjs_namespaceObject = rxjs,
			Schedule_fixed = fixed,
			lib = observer => value => {
				observer.next(value)
			}
		Promise.resolve(!1)
		Promise.resolve(!0)
		var PROMISE_RESOLVED_VOID = Promise.resolve()
		function util_sleep(time, resolveWith) {
			time || (time = 0)
			return new Promise(function (res) {
				return setTimeout(function () {
					return res(resolveWith)
				}, time)
			})
		}
		function randomToken() {
			return Math.random().toString(36).substring(2)
		}
		var lastMs = 0,
			additional = 0
		function microSeconds() {
			var ms = new Date().getTime()
			if (ms === lastMs) return 1e3 * ms + ++additional
			lastMs = ms
			additional = 0
			return 1e3 * ms
		}
		var isNode =
			"[object process]" ===
			Object.prototype.toString.call(
				"undefined" != typeof process ? process : 0
			)
		const methods_native = {
			create: function (channelName) {
				var state = {
					messagesCallback: null,
					bc: new BroadcastChannel(channelName),
					subFns: [],
				}
				state.bc.onmessage = function (msg) {
					state.messagesCallback && state.messagesCallback(msg.data)
				}
				return state
			},
			close: function (channelState) {
				channelState.bc.close()
				channelState.subFns = []
			},
			onMessage: function (channelState, fn) {
				channelState.messagesCallback = fn
			},
			postMessage: function (channelState, messageJson) {
				try {
					channelState.bc.postMessage(messageJson, !1)
					return PROMISE_RESOLVED_VOID
				} catch (err) {
					return Promise.reject(err)
				}
			},
			canBeUsed: function () {
				if (isNode && "undefined" == typeof window) return !1
				if ("function" == typeof BroadcastChannel) {
					if (BroadcastChannel._pubkey)
						throw new Error(
							"BroadcastChannel: Do not overwrite window.BroadcastChannel with this module, this is not a polyfill"
						)
					return !0
				}
				return !1
			},
			type: "native",
			averageResponseTime: function () {
				return 150
			},
			microSeconds,
		}
		var ObliviousSet = (function () {
			function ObliviousSet(ttl) {
				this.ttl = ttl
				this.map = new Map()
				this._to = !1
			}
			ObliviousSet.prototype.has = function (value) {
				return this.map.has(value)
			}
			ObliviousSet.prototype.add = function (value) {
				var _this = this
				this.map.set(value, now())
				if (!this._to) {
					this._to = !0
					setTimeout(function () {
						_this._to = !1
						!(function (obliviousSet) {
							for (
								var olderThen = now() - obliviousSet.ttl,
									iterator = obliviousSet.map[Symbol.iterator]();
								;

							) {
								var next = iterator.next().value
								if (!next) return
								var value = next[0]
								if (!(next[1] < olderThen)) return
								obliviousSet.map.delete(value)
							}
						})(_this)
					}, 0)
				}
			}
			ObliviousSet.prototype.clear = function () {
				this.map.clear()
			}
			return ObliviousSet
		})()
		function now() {
			return new Date().getTime()
		}
		function options_fillOptionsWithDefaults() {
			var originalOptions =
					arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
				options = JSON.parse(JSON.stringify(originalOptions))
			void 0 === options.webWorkerSupport && (options.webWorkerSupport = !0)
			options.idb || (options.idb = {})
			options.idb.ttl || (options.idb.ttl = 45e3)
			options.idb.fallbackInterval || (options.idb.fallbackInterval = 150)
			originalOptions.idb &&
				"function" == typeof originalOptions.idb.onclose &&
				(options.idb.onclose = originalOptions.idb.onclose)
			options.localstorage || (options.localstorage = {})
			options.localstorage.removeTimeout ||
				(options.localstorage.removeTimeout = 6e4)
			originalOptions.methods && (options.methods = originalOptions.methods)
			options.node || (options.node = {})
			options.node.ttl || (options.node.ttl = 12e4)
			options.node.maxParallelWrites || (options.node.maxParallelWrites = 2048)
			void 0 === options.node.useFastPath && (options.node.useFastPath = !0)
			return options
		}
		var TRANSACTION_SETTINGS = { durability: "relaxed" }
		function getIdb() {
			if ("undefined" != typeof indexedDB) return indexedDB
			if ("undefined" != typeof window) {
				if (void 0 !== window.mozIndexedDB) return window.mozIndexedDB
				if (void 0 !== window.webkitIndexedDB) return window.webkitIndexedDB
				if (void 0 !== window.msIndexedDB) return window.msIndexedDB
			}
			return !1
		}
		function commitIndexedDBTransaction(tx) {
			tx.commit && tx.commit()
		}
		function _readLoop(state) {
			state.closed ||
				readNewMessages(state)
					.then(function () {
						return util_sleep(state.options.idb.fallbackInterval)
					})
					.then(function () {
						return _readLoop(state)
					})
		}
		function readNewMessages(state) {
			return state.closed
				? PROMISE_RESOLVED_VOID
				: state.messagesCallback
				? (function (db, lastCursorId) {
						var tx = db.transaction(
								"messages",
								"readonly",
								TRANSACTION_SETTINGS
							),
							objectStore = tx.objectStore("messages"),
							ret = [],
							keyRangeValue = IDBKeyRange.bound(lastCursorId + 1, 1 / 0)
						if (objectStore.getAll) {
							var getAllRequest = objectStore.getAll(keyRangeValue)
							return new Promise(function (res, rej) {
								getAllRequest.onerror = function (err) {
									return rej(err)
								}
								getAllRequest.onsuccess = function (e) {
									res(e.target.result)
								}
							})
						}
						return new Promise(function (res, rej) {
							var openCursorRequest = (function () {
								try {
									keyRangeValue = IDBKeyRange.bound(lastCursorId + 1, 1 / 0)
									return objectStore.openCursor(keyRangeValue)
								} catch (e) {
									return objectStore.openCursor()
								}
							})()
							openCursorRequest.onerror = function (err) {
								return rej(err)
							}
							openCursorRequest.onsuccess = function (ev) {
								var cursor = ev.target.result
								if (cursor)
									if (cursor.value.id < lastCursorId + 1)
										cursor.continue(lastCursorId + 1)
									else {
										ret.push(cursor.value)
										cursor.continue()
									}
								else {
									commitIndexedDBTransaction(tx)
									res(ret)
								}
							}
						})
				  })(state.db, state.lastCursorId).then(function (newerMessages) {
						var useMessages = newerMessages
							.filter(function (msgObj) {
								return !!msgObj
							})
							.map(function (msgObj) {
								msgObj.id > state.lastCursorId &&
									(state.lastCursorId = msgObj.id)
								return msgObj
							})
							.filter(function (msgObj) {
								return (function (msgObj, state) {
									return !(
										msgObj.uuid === state.uuid ||
										state.eMIs.has(msgObj.id) ||
										msgObj.data.time < state.messagesCallbackTime
									)
								})(msgObj, state)
							})
							.sort(function (msgObjA, msgObjB) {
								return msgObjA.time - msgObjB.time
							})
						useMessages.forEach(function (msgObj) {
							if (state.messagesCallback) {
								state.eMIs.add(msgObj.id)
								state.messagesCallback(msgObj.data)
							}
						})
						return PROMISE_RESOLVED_VOID
				  })
				: PROMISE_RESOLVED_VOID
		}
		const indexed_db = {
			create: function (channelName, options) {
				options = options_fillOptionsWithDefaults(options)
				return (function (channelName) {
					var dbName = "pubkey.broadcast-channel-0-" + channelName,
						openRequest = getIdb().open(dbName)
					openRequest.onupgradeneeded = function (ev) {
						ev.target.result.createObjectStore("messages", {
							keyPath: "id",
							autoIncrement: !0,
						})
					}
					return new Promise(function (res, rej) {
						openRequest.onerror = function (ev) {
							return rej(ev)
						}
						openRequest.onsuccess = function () {
							res(openRequest.result)
						}
					})
				})(channelName).then(function (db) {
					var state = {
						closed: !1,
						lastCursorId: 0,
						channelName,
						options,
						uuid: randomToken(),
						eMIs: new ObliviousSet(2 * options.idb.ttl),
						writeBlockPromise: PROMISE_RESOLVED_VOID,
						messagesCallback: null,
						readQueuePromises: [],
						db,
					}
					db.onclose = function () {
						state.closed = !0
						options.idb.onclose && options.idb.onclose()
					}
					_readLoop(state)
					return state
				})
			},
			close: function (channelState) {
				channelState.closed = !0
				channelState.db.close()
			},
			onMessage: function (channelState, fn, time) {
				channelState.messagesCallbackTime = time
				channelState.messagesCallback = fn
				readNewMessages(channelState)
			},
			postMessage: function (channelState, messageJson) {
				channelState.writeBlockPromise = channelState.writeBlockPromise
					.then(function () {
						return (function (db, readerUuid, messageJson) {
							var writeObject = {
									uuid: readerUuid,
									time: new Date().getTime(),
									data: messageJson,
								},
								tx = db.transaction(
									["messages"],
									"readwrite",
									TRANSACTION_SETTINGS
								)
							return new Promise(function (res, rej) {
								tx.oncomplete = function () {
									return res()
								}
								tx.onerror = function (ev) {
									return rej(ev)
								}
								tx.objectStore("messages").add(writeObject)
								commitIndexedDBTransaction(tx)
							})
						})(channelState.db, channelState.uuid, messageJson)
					})
					.then(function () {
						0 === Math.floor(11 * Math.random() + 0) &&
							((db = channelState.db),
							(ttl = channelState.options.idb.ttl),
							(function (db, ttl) {
								var olderThen = new Date().getTime() - ttl,
									tx = db.transaction(
										"messages",
										"readonly",
										TRANSACTION_SETTINGS
									),
									objectStore = tx.objectStore("messages"),
									ret = []
								return new Promise(function (res) {
									objectStore.openCursor().onsuccess = function (ev) {
										var cursor = ev.target.result
										if (cursor) {
											var msgObk = cursor.value
											if (!(msgObk.time < olderThen)) {
												commitIndexedDBTransaction(tx)
												res(ret)
												return
											}
											ret.push(msgObk)
											cursor.continue()
										} else res(ret)
									}
								})
							})(db, ttl).then(function (tooOld) {
								return (function (db, ids) {
									var objectStore = db
										.transaction(
											["messages"],
											"readwrite",
											TRANSACTION_SETTINGS
										)
										.objectStore("messages")
									return Promise.all(
										ids.map(function (id) {
											var deleteRequest = objectStore.delete(id)
											return new Promise(function (res) {
												deleteRequest.onsuccess = function () {
													return res()
												}
											})
										})
									)
								})(
									db,
									tooOld.map(function (msg) {
										return msg.id
									})
								)
							}))
						var db, ttl
					})
				return channelState.writeBlockPromise
			},
			canBeUsed: function () {
				return !isNode && !!getIdb()
			},
			type: "idb",
			averageResponseTime: function (options) {
				return 2 * options.idb.fallbackInterval
			},
			microSeconds,
		}
		function getLocalStorage() {
			var localStorage
			if ("undefined" == typeof window) return null
			try {
				localStorage = window.localStorage
				localStorage =
					window["ie8-eventlistener/storage"] || window.localStorage
			} catch (e) {}
			return localStorage
		}
		function storageKey(channelName) {
			return "pubkey.broadcastChannel-" + channelName
		}
		function localstorage_canBeUsed() {
			if (isNode) return !1
			var ls = getLocalStorage()
			if (!ls) return !1
			try {
				var key = "__broadcastchannel_check"
				ls.setItem(key, "works")
				ls.removeItem(key)
			} catch (e) {
				return !1
			}
			return !0
		}
		const localstorage = {
			create: function (channelName, options) {
				options = options_fillOptionsWithDefaults(options)
				if (!localstorage_canBeUsed())
					throw new Error("BroadcastChannel: localstorage cannot be used")
				var uuid = randomToken(),
					eMIs = new ObliviousSet(options.localstorage.removeTimeout),
					state = { channelName, uuid, eMIs }
				state.listener = (function (channelName, fn) {
					var key = storageKey(channelName),
						listener = function (ev) {
							ev.key === key &&
								(function (msgObj) {
									if (
										state.messagesCallback &&
										msgObj.uuid !== uuid &&
										msgObj.token &&
										!eMIs.has(msgObj.token) &&
										!(
											msgObj.data.time &&
											msgObj.data.time < state.messagesCallbackTime
										)
									) {
										eMIs.add(msgObj.token)
										state.messagesCallback(msgObj.data)
									}
								})(JSON.parse(ev.newValue))
						}
					window.addEventListener("storage", listener)
					return listener
				})(channelName)
				return state
			},
			close: function (channelState) {
				;(listener = channelState.listener),
					window.removeEventListener("storage", listener)
				var listener
			},
			onMessage: function (channelState, fn, time) {
				channelState.messagesCallbackTime = time
				channelState.messagesCallback = fn
			},
			postMessage: function (channelState, messageJson) {
				return new Promise(function (res) {
					util_sleep().then(function () {
						var key = storageKey(channelState.channelName),
							writeObj = {
								token: randomToken(),
								time: new Date().getTime(),
								data: messageJson,
								uuid: channelState.uuid,
							},
							value = JSON.stringify(writeObj)
						getLocalStorage().setItem(key, value)
						var ev = document.createEvent("Event")
						ev.initEvent("storage", !0, !0)
						ev.key = key
						ev.newValue = value
						window.dispatchEvent(ev)
						res()
					})
				})
			},
			canBeUsed: localstorage_canBeUsed,
			type: "localstorage",
			averageResponseTime: function () {
				var userAgent = navigator.userAgent.toLowerCase()
				return userAgent.includes("safari") && !userAgent.includes("chrome")
					? 240
					: 120
			},
			microSeconds,
		}
		var simulate_microSeconds = microSeconds,
			SIMULATE_CHANNELS = new Set()
		const simulate = {
			create: function (channelName) {
				var state = { name: channelName, messagesCallback: null }
				SIMULATE_CHANNELS.add(state)
				return state
			},
			close: function (channelState) {
				SIMULATE_CHANNELS.delete(channelState)
			},
			onMessage: function (channelState, fn) {
				channelState.messagesCallback = fn
			},
			postMessage: function (channelState, messageJson) {
				return new Promise(function (res) {
					return setTimeout(function () {
						Array.from(SIMULATE_CHANNELS)
							.filter(function (channel) {
								return channel.name === channelState.name
							})
							.filter(function (channel) {
								return channel !== channelState
							})
							.filter(function (channel) {
								return !!channel.messagesCallback
							})
							.forEach(function (channel) {
								return channel.messagesCallback(messageJson)
							})
						res()
					}, 5)
				})
			},
			canBeUsed: function () {
				return !0
			},
			type: "simulate",
			averageResponseTime: function () {
				return 5
			},
			microSeconds: simulate_microSeconds,
		}
		var METHODS = [methods_native, indexed_db, localstorage],
			OPEN_BROADCAST_CHANNELS = new Set(),
			lastId = 0,
			broadcast_channel_BroadcastChannel = function (name, options) {
				this.id = lastId++
				OPEN_BROADCAST_CHANNELS.add(this)
				this.name = name
				this.options = options_fillOptionsWithDefaults(options)
				this.method = (function (options) {
					var chooseMethods = []
						.concat(options.methods, METHODS)
						.filter(Boolean)
					if (options.type) {
						if ("simulate" === options.type) return simulate
						var ret = chooseMethods.find(function (m) {
							return m.type === options.type
						})
						if (ret) return ret
						throw new Error("method-type " + options.type + " not found")
					}
					options.webWorkerSupport ||
						isNode ||
						(chooseMethods = chooseMethods.filter(function (m) {
							return "idb" !== m.type
						}))
					var useMethod = chooseMethods.find(function (method) {
						return method.canBeUsed()
					})
					if (useMethod) return useMethod
					throw new Error(
						"No useable method found in " +
							JSON.stringify(
								METHODS.map(function (m) {
									return m.type
								})
							)
					)
				})(this.options)
				this._iL = !1
				this._onML = null
				this._addEL = { message: [], internal: [] }
				this._uMP = new Set()
				this._befC = []
				this._prepP = null
				!(function (channel) {
					var obj,
						maybePromise = channel.method.create(channel.name, channel.options)
					if ((obj = maybePromise) && "function" == typeof obj.then) {
						channel._prepP = maybePromise
						maybePromise.then(function (s) {
							channel._state = s
						})
					} else channel._state = maybePromise
				})(this)
			}
		broadcast_channel_BroadcastChannel._pubkey = !0
		broadcast_channel_BroadcastChannel.prototype = {
			postMessage: function (msg) {
				if (this.closed)
					throw new Error(
						"BroadcastChannel.postMessage(): Cannot post message after channel has closed " +
							JSON.stringify(msg)
					)
				return _post(this, "message", msg)
			},
			postInternal: function (msg) {
				return _post(this, "internal", msg)
			},
			set onmessage(fn) {
				var listenObj = { time: this.method.microSeconds(), fn }
				_removeListenerObject(this, "message", this._onML)
				if (fn && "function" == typeof fn) {
					this._onML = listenObj
					_addListenerObject(this, "message", listenObj)
				} else this._onML = null
			},
			addEventListener: function (type, fn) {
				_addListenerObject(this, type, { time: this.method.microSeconds(), fn })
			},
			removeEventListener: function (type, fn) {
				_removeListenerObject(
					this,
					type,
					this._addEL[type].find(function (obj) {
						return obj.fn === fn
					})
				)
			},
			close: function () {
				var _this = this
				if (!this.closed) {
					OPEN_BROADCAST_CHANNELS.delete(this)
					this.closed = !0
					var awaitPrepare = this._prepP ? this._prepP : PROMISE_RESOLVED_VOID
					this._onML = null
					this._addEL.message = []
					return awaitPrepare
						.then(function () {
							return Promise.all(Array.from(_this._uMP))
						})
						.then(function () {
							return Promise.all(
								_this._befC.map(function (fn) {
									return fn()
								})
							)
						})
						.then(function () {
							return _this.method.close(_this._state)
						})
				}
			},
			get type() {
				return this.method.type
			},
			get isClosed() {
				return this.closed
			},
		}
		function _post(broadcastChannel, type, msg) {
			var msgObj = {
				time: broadcastChannel.method.microSeconds(),
				type,
				data: msg,
			}
			return (
				broadcastChannel._prepP
					? broadcastChannel._prepP
					: PROMISE_RESOLVED_VOID
			).then(function () {
				var sendPromise = broadcastChannel.method.postMessage(
					broadcastChannel._state,
					msgObj
				)
				broadcastChannel._uMP.add(sendPromise)
				sendPromise.catch().then(function () {
					return broadcastChannel._uMP.delete(sendPromise)
				})
				return sendPromise
			})
		}
		function _hasMessageListeners(channel) {
			return (
				channel._addEL.message.length > 0 || channel._addEL.internal.length > 0
			)
		}
		function _addListenerObject(channel, type, obj) {
			channel._addEL[type].push(obj)
			!(function (channel) {
				if (!channel._iL && _hasMessageListeners(channel)) {
					var listenerFn = function (msgObj) {
							channel._addEL[msgObj.type].forEach(function (listenerObject) {
								var minMessageTime = listenerObject.time - 1e5
								msgObj.time >= minMessageTime && listenerObject.fn(msgObj.data)
							})
						},
						time = channel.method.microSeconds()
					if (channel._prepP)
						channel._prepP.then(function () {
							channel._iL = !0
							channel.method.onMessage(channel._state, listenerFn, time)
						})
					else {
						channel._iL = !0
						channel.method.onMessage(channel._state, listenerFn, time)
					}
				}
			})(channel)
		}
		function _removeListenerObject(channel, type, obj) {
			channel._addEL[type] = channel._addEL[type].filter(function (o) {
				return o !== obj
			})
			!(function (channel) {
				if (channel._iL && !_hasMessageListeners(channel)) {
					channel._iL = !1
					var time = channel.method.microSeconds()
					channel.method.onMessage(channel._state, null, time)
				}
			})(channel)
		}
		var browser = __webpack_require__(661),
			browser_default = __webpack_require__.n(browser)
		const es_browser = {
			add: function (fn) {
				if (
					"function" == typeof WorkerGlobalScope &&
					self instanceof WorkerGlobalScope
				);
				else {
					if ("function" != typeof window.addEventListener) return
					window.addEventListener(
						"beforeunload",
						function () {
							fn()
						},
						!0
					)
					window.addEventListener(
						"unload",
						function () {
							fn()
						},
						!0
					)
				}
			},
		}
		var node_ignored_ = __webpack_require__(938),
			node_ignored_default = __webpack_require__.n(node_ignored_)
		browser_default() && node_ignored_default(), new Set()
		const external_DeepDiff_namespaceObject = DeepDiff
		var fast_deep_equal = __webpack_require__(204),
			fast_deep_equal_default = __webpack_require__.n(fast_deep_equal)
		const mapObject = f => o =>
				pipe(Object.entries(o), ReadonlyArray_map(f), Object.fromEntries),
			makePageState = mapObject(([k, v]) => [
				k,
				{ ele: Option_none(), read: v },
			]),
			removeOldChats = mainState => maxChatCount =>
				pipe(
					Effect_sync(() =>
						mainState.flowChats.sort((a, b) =>
							a.animationEnded === b.animationEnded
								? 0
								: a.animationEnded
								? -1
								: 1
						)
					),
					Effect_zipRight(
						Effect_sync(() =>
							mainState.flowChats.splice(
								0,
								Math.max(0, mainState.flowChats.length - maxChatCount)
							)
						)
					),
					Effect_flatMap(
						Effect_forEach(x =>
							pipe(
								Effect_logDebug("RemoveChat"),
								Effect_zipRight(
									Effect_sync(() => {
										x.element.remove()
									})
								)
							)
						)
					)
				),
			external_m_namespaceObject = m
		var external_m_default = __webpack_require__.n(external_m_namespaceObject)
		const getChatFontSize = mainState =>
				Math.round(
					((Math.max(mainState.config.fontSize - 0.2, 0.01) *
						mainState.playerRect.height) /
						mainState.config.laneCount) *
						(mainState.config.flowY2 - mainState.config.flowY1) *
						100
				) / 100,
			textShadow = shadowColor =>
				flow(
					x => `${x}px`,
					x => (a, b) => `${a}${x} ${b}${x} ${shadowColor}99`,
					x => join(", ")([x("-", "-"), x("", "-"), x("-", ""), x("", "")])
				),
			textStyle = { fontFamily: "inherit" },
			renderChat = chat => mainState =>
				Effect_sync(() =>
					external_m_default().render(
						chat.element,
						((chat, mainState) =>
							pipe(
								mainState.config,
								config => ({ data: chat.getData(config), config }),
								({ data, config }) =>
									external_m_default()(
										"span",
										{
											style: {
												fontSize: `${getChatFontSize(mainState)}px`,
												visibility: config.displayChats ? "visible" : "hidden",
												color:
													"owner" === data.authorType
														? config.ownerColor
														: "moderator" === data.authorType
														? config.moderatorColor
														: "member" === data.authorType
														? config.memberColor
														: config.color,
												fontWeight: config.fontWeight.toString(),
												fontFamily: config.font,
												opacity: config.chatOpacity.toString(),
												textShadow: textShadow(config.shadowColor)(
													config.shadowFontWeight
												),
											},
										},
										pipe(
											[
												pipe(
													data.authorName,
													Option_filter(x => x.visible),
													Option_map(x =>
														external_m_default()(
															"span",
															{
																style: {
																	color: getOrUndefined(data.textColor),
																	fontSize: "0.84em",
																	...textStyle,
																},
															},
															`${x.content}: `
														)
													)
												),
												pipe(
													data.messageElement,
													Option_map(x =>
														((message, config) => {
															const eleWin =
																	message.ownerDocument.defaultView ?? window,
																{ maxChatLength } = config
															return pipe(
																Array.from(message.childNodes),
																ReadonlyArray_reduce(
																	{ vnodes: [], length: 0 },
																	({ vnodes, length }, node) =>
																		length >= maxChatLength
																			? { vnodes, length }
																			: !config.textOnly &&
																			  node instanceof eleWin.HTMLImageElement
																			? {
																					vnodes: [
																						...vnodes,
																						external_m_default()("img", {
																							style: {
																								height: "1em",
																								width: "1em",
																								verticalAlign: "text-top",
																							},
																							src: node.src.replace(
																								/=w\d+-h\d+-c-k-nd$/,
																								""
																							),
																							alt: node.alt,
																						}),
																					],
																					length: length + 1,
																			  }
																			: pipe(
																					node.textContent ?? "",
																					slice(0, maxChatLength),
																					x =>
																						node instanceof
																						eleWin.HTMLAnchorElement
																							? {
																									vnodes: [
																										...vnodes,
																										external_m_default()(
																											"span",
																											{
																												style: {
																													fontSize: "0.84em",
																													textDecoration:
																														"underline",
																													...textStyle,
																												},
																											},
																											x
																										),
																									],
																									length: length + x.length,
																							  }
																							: {
																									vnodes: [
																										...vnodes,
																										external_m_default().fragment(
																											{},
																											x
																										),
																									],
																									length: length + x.length,
																							  }
																			  )
																)
															)
														})(x, config)
													),
													Option_map(x =>
														external_m_default()(
															"span",
															{
																style: {
																	color: getOrUndefined(data.textColor),
																	...textStyle,
																},
															},
															x.vnodes
														)
													)
												),
												pipe(
													data.paymentInfo,
													Option_filter(x => x.visible),
													Option_map(x =>
														external_m_default()(
															"span",
															{
																style: {
																	color: getOrUndefined(data.paidColor),
																	fontSize: "0.84em",
																	...textStyle,
																},
															},
															external_m_default()(
																"strong",
																{ style: textStyle },
																x.content
															)
														)
													)
												),
											],
											ReadonlyArray_compact
										)
									)
							))(chat, mainState)
					)
				),
			Bicovariant_mapLeft = F =>
				Function_dual(2, (self, f) => F.bimap(self, f, Function_identity)),
			Bicovariant_map = F =>
				Function_dual(2, (self, f) => F.bimap(self, Function_identity, f)),
			getFirst = self => self[0],
			getSecond = self => self[1],
			Tuple_bimap = Function_dual(3, (self, f, g) => [f(self[0]), g(self[1])]),
			Tuple_Bicovariant = { bimap: Tuple_bimap },
			mapFirst = Bicovariant_mapLeft(Tuple_Bicovariant),
			mapSecond = Bicovariant_map(Tuple_Bicovariant),
			external_window_hash_it_namespaceObject = window["hash-it"]
		var external_window_hash_it_default = __webpack_require__.n(
			external_window_hash_it_namespaceObject
		)
		const external_window_micro_memoize_namespaceObject =
			window["micro-memoize"]
		var external_window_micro_memoize_default = __webpack_require__.n(
			external_window_micro_memoize_namespaceObject
		)
		const getFlowChatProgress = chat =>
				pipe(
					chat.animation,
					flatMapNullable(x => x.currentTime),
					getOrElse(() => 0),
					x => x / chat.animationDuration
				),
			getFlowChatRect = (chat, mainState) =>
				pipe(
					mainState.config,
					x =>
						mainState.playerRect.width * x.flowX2 -
						(chat.width + mainState.playerRect.width * (x.flowX2 - x.flowX1)) *
							getFlowChatProgress(chat),
					x => new DOMRect(x, chat.y, chat.width, chat.height)
				),
			getChatLane = (flowChat, progress) => mainState => {
				const flowWidth =
						mainState.playerRect.width *
						(mainState.config.flowX2 - mainState.config.flowX1),
					chatRect = getFlowChatRect(flowChat, mainState),
					chatWidth = chatRect.width,
					chatHeight = chatRect.height,
					chatX = chatRect.x,
					{ flowChats } = mainState,
					chatIndex = flowChats.indexOf(flowChat),
					movingChats = pipe(
						flowChats,
						take(chatIndex >= 0 ? chatIndex : flowChats.length),
						ReadonlyArray_filter(
							chat => !chat.animationEnded && chat.width > 0
						),
						sort(Order_contramap(x => x.lane)(Order))
					),
					tooCloseTo = external_window_micro_memoize_default()(
						x => {
							const otherRect = getFlowChatRect(x, mainState),
								otherWidth = otherRect.width,
								otherX = otherRect.x,
								gap =
									(chatHeight * otherWidth * chatWidth) ** 0.333 *
									mainState.config.minSpacing
							return (
								(flowWidth - otherX) / (flowWidth + otherWidth) - progress <
									(chatWidth + gap) / (flowWidth + chatWidth) ||
								otherX + otherWidth + gap > chatX
							)
						},
						{ maxSize: 1e3 }
					),
					occupyInfo = pipe(
						movingChats,
						ReadonlyArray_map(x => ({
							tooClose: () => tooCloseTo(x),
							lane: x.lane,
						})),
						append({ tooClose: () => !0, lane: mainState.config.laneCount })
					),
					index = occupyInfo.findIndex(x => x.lane >= flowChat.lane),
					bottomFreeLane = pipe(
						occupyInfo.slice(index),
						findFirst(x => x.tooClose()),
						Option_map(x => x.lane),
						getOrElse(() => mainState.config.laneCount)
					),
					topFreeLane = pipe(
						occupyInfo.slice(0, index),
						findLast(x => x.tooClose()),
						Option_map(x => x.lane),
						getOrElse(() => -1)
					),
					formerLaneInterval = Math.min(
						flowChat.lane - topFreeLane,
						bottomFreeLane - flowChat.lane,
						1
					)
				return pipe(
					occupyInfo,
					ReadonlyArray_reduce(
						{ maxInterval: 0, maxIntervalLane: 0, lastLane: -1 },
						({ maxInterval, maxIntervalLane, lastLane }, info) =>
							maxInterval > 0.999 || !info.tooClose()
								? { maxInterval, maxIntervalLane, lastLane }
								: (() => {
										const nextLane = info.lane,
											interLane = Math.min(
												Math.max((lastLane + nextLane) / 2, 0),
												mainState.config.laneCount - 1
											),
											newInterval = Math.min(
												interLane - lastLane,
												nextLane - interLane,
												1
											)
										return newInterval - maxInterval > 0.001
											? {
													maxInterval: newInterval,
													maxIntervalLane: Math.max(lastLane + newInterval, 0),
													lastLane: nextLane,
											  }
											: { maxInterval, maxIntervalLane, lastLane: nextLane }
								  })()
					),
					x => ({
						lane:
							Math.abs(formerLaneInterval - x.maxInterval) < 0.001
								? flowChat.lane
								: x.maxIntervalLane,
						interval: x.maxInterval,
					})
				)
			},
			getLaneY = (lane, mainState) =>
				mainState.playerRect.height *
				((lane / mainState.config.laneCount + 0.005) *
					(mainState.config.flowY2 - mainState.config.flowY1) +
					mainState.config.flowY1),
			intervalTooSmall = interval => config =>
				config.noOverlap && interval < 0.999,
			setChatPlayState = chat => mainState =>
				pipe(
					chat,
					liftPredicate(x => !x.animationEnded),
					Effect_fromOption,
					Effect_map(x => x.animation),
					Effect_flatMap(Effect_fromOption),
					Effect_tap(x =>
						Effect_sync(
							mainState.chatPlaying ? () => x.play() : () => x.pause()
						)
					),
					Effect_flatMap(x =>
						Effect_sync(() => {
							x.playbackRate = mainState.config.flowSpeed / 15
						})
					),
					Effect_ignore
				),
			getWidth = external_window_micro_memoize_default()(
				ele => ele?.getBoundingClientRect().width ?? 0,
				{
					maxSize: 2e3,
					transformKey: ReadonlyArray_map(external_window_hash_it_default()),
				}
			),
			setChatAnimation = chat => mainState =>
				pipe(
					{ fontSize: getChatFontSize(mainState) },
					Effect_succeed,
					Effect_tap(x =>
						Effect_sync(() => {
							chat.element.style.transform = `translate(${
								mainState.playerRect.width *
								(mainState.config.flowX2 - mainState.config.flowX1)
							}px, -${2 * x.fontSize}px)`
						})
					),
					Effect_filterOrFail(() => !chat.animationEnded, Option_none),
					Effect_tap(x =>
						Effect_sync(() => {
							chat.animationDuration = 6400
							chat.width = getWidth(chat.element.firstElementChild)
							chat.height = x.fontSize
						})
					),
					Effect_map(() => getFlowChatProgress(chat)),
					Effect_map(progress => ({
						progress,
						...getChatLane(chat, progress)(mainState),
					})),
					Effect_filterOrElse(
						x => !intervalTooSmall(x.interval)(mainState.config),
						() =>
							pipe(
								chat.animation,
								Effect_fromOption,
								Effect_flatMap(x =>
									Effect_sync(() => {
										x.finish()
										chat.animation = Option_none()
									})
								),
								Effect_zipRight(Effect_fail(Option_none()))
							)
					),
					Effect_tap(x =>
						Effect_sync(() => {
							chat.lane = x.lane
						})
					),
					Effect_map(x => ({ ...x, laneY: getLaneY(chat.lane, mainState) })),
					Effect_tap(ctx =>
						pipe(
							[
								pipe(
									chat.animation,
									Effect_fromOption,
									Effect_flatMap(x => Effect_sync(() => x.cancel())),
									Effect_ignore
								),
								pipe(
									[
										[
											mainState.playerRect.width *
												(mainState.config.flowX2 - mainState.config.flowX1),
											ctx.laneY,
										],
										[-chat.width, ctx.laneY],
									],
									ReadonlyArray_map(
										pipe(
											x => `${x}px`,
											x => Tuple_bimap(x, x)
										)
									),
									ReadonlyArray_map(([x, y]) => `translate(${x}, ${y})`),
									ReadonlyArray_bindTo("transform"),
									x =>
										Effect_sync(() =>
											chat.element.animate(x, {
												duration: 6400,
												easing: mainState.config.timingFunction,
											})
										),
									Effect_tap(x =>
										Effect_sync(() => {
											x.onfinish = () => {
												chat.animationEnded = !0
											}
											chat.y = ctx.laneY
											const newTime = 6400 * ctx.progress
											x.currentTime = newTime
										})
									),
									Effect_flatMap(x =>
										Effect_sync(() => {
											chat.animation = Option_some(x)
										})
									),
									Effect_zipRight(setChatPlayState(chat)(mainState))
								),
							],
							x => Effect_all(x)
						)
					),
					Effect_isSuccess
				),
			tapEffect = f =>
				(0, external_rxjs_namespaceObject.concatMap)(x =>
					(0, external_rxjs_namespaceObject.from)(runPromise(f(x))).pipe(
						(0, external_rxjs_namespaceObject.map)(() => x)
					)
				),
			configStream = (provideLog, mainState, co, chatScreen, live) =>
				(0, external_rxjs_namespaceObject.defer)(() =>
					(0, external_rxjs_namespaceObject.merge)(
						(0, external_rxjs_namespaceObject.merge)(
							co.bannedWordRegexs,
							co.bannedWords,
							co.bannedUsers
						),
						pipe(
							co.fieldScale,
							(0, external_rxjs_namespaceObject.startWith)(
								mainState.config.fieldScale
							),
							(0, external_rxjs_namespaceObject.map)(
								(
									live => scale =>
										pipe(
											live.chatField.ele,
											Effect_fromOption,
											Effect_flatMap(field =>
												pipe(
													[
														pipe(
															fromNullable(field.parentElement),
															Option_map(x =>
																Effect_sync(() =>
																	Object.assign(x.style, {
																		transformOrigin:
																			(scale >= 1 ? "top" : "bottom") + " left",
																		transform: `scale(${scale})`,
																		width: 100 / scale + "%",
																		height: 100 / scale + "%",
																	})
																)
															)
														),
														pipe(
															live.chatScroller.ele,
															Option_map(scroller =>
																Effect_sync(() => {
																	scroller.scrollTop = scroller.scrollHeight
																})
															)
														),
													],
													ReadonlyArray_compact,
													x => Effect_all(x)
												)
											),
											Effect_ignore
										)
								)(live)
							),
							tapEffect(provideLog)
						),
						pipe(
							(0, external_rxjs_namespaceObject.merge)(
								pipe(
									(0, external_rxjs_namespaceObject.merge)(
										co.font,
										co.fontSize,
										co.fontWeight,
										co.laneCount,
										co.minSpacing,
										co.flowY1,
										co.flowY2,
										pipe(
											co.flowX1,
											(0, external_rxjs_namespaceObject.startWith)(
												mainState.config.flowX1
											),
											tapEffect(x =>
												provideLog(
													Effect_sync(() =>
														Object.assign(chatScreen.style, {
															left: 100 * x + "%",
															width: 100 * (mainState.config.flowX2 - x) + "%",
														})
													)
												)
											)
										),
										pipe(
											co.flowX2,
											tapEffect(x =>
												provideLog(
													Effect_sync(() =>
														Object.assign(chatScreen.style, {
															left: 100 * mainState.config.flowX1 + "%",
															width: 100 * (x - mainState.config.flowX1) + "%",
														})
													)
												)
											)
										),
										co.textOnly
									),
									(0, external_rxjs_namespaceObject.map)(() => ({
										render: !0,
										setAnimation: !0,
									}))
								),
								pipe(
									(0, external_rxjs_namespaceObject.merge)(
										co.color,
										co.ownerColor,
										co.moderatorColor,
										co.memberColor,
										co.shadowColor,
										co.chatOpacity,
										co.shadowFontWeight,
										co.displayChats
									),
									(0, external_rxjs_namespaceObject.map)(() => ({ render: !0 }))
								),
								pipe(
									co.flowSpeed,
									(0, external_rxjs_namespaceObject.map)(() => ({
										setPlayState: !0,
									}))
								),
								pipe(
									(0, external_rxjs_namespaceObject.merge)(
										pipe(
											co.maxChatCount,
											(0, external_rxjs_namespaceObject.map)(
												removeOldChats(mainState)
											),
											tapEffect(provideLog)
										),
										co.noOverlap,
										co.timingFunction
									),
									(0, external_rxjs_namespaceObject.map)(() => ({
										setAnimation: !0,
									}))
								)
							),
							(0, external_rxjs_namespaceObject.throttleTime)(180, void 0, {
								leading: !0,
								trailing: !0,
							}),
							(0, external_rxjs_namespaceObject.map)(x => ({
								render: !1,
								setAnimation: !1,
								setPlayState: !1,
								...x,
							})),
							tapEffect(c =>
								provideLog(
									pipe(
										mainState.flowChats,
										ReadonlyArray_filter(x => !x.animationEnded),
										ReadonlyArray_map(chat =>
											pipe(
												[
													pipe(
														renderChat(chat),
														liftPredicate(() => c.render)
													),
													c.setAnimation
														? Option_some(setChatAnimation(chat))
														: c.setPlayState
														? Option_some(setChatPlayState(chat))
														: Option_none(),
												],
												ReadonlyArray_compact,
												ReadonlyArray_map(apply(mainState)),
												x => Effect_all(x)
											)
										),
										x => Effect_all(x),
										Effect_asUnit
									)
								)
							)
						),
						co.lang,
						co.maxChatLength,
						co.simplifyChatField,
						co.createBanButton,
						co.createChats,
						co.displayModName,
						co.displaySuperChatAuthor,
						co.fieldScale
					)
				),
			external_jsep_namespaceObject = jsep
		var external_jsep_default = __webpack_require__.n(
				external_jsep_namespaceObject
			),
			u = {
				"||": function (r, e) {
					return r || e
				},
				"&&": function (r, e) {
					return r && e
				},
				"|": function (r, e) {
					return r | e
				},
				"^": function (r, e) {
					return r ^ e
				},
				"&": function (r, e) {
					return r & e
				},
				"==": function (r, e) {
					return r == e
				},
				"!=": function (r, e) {
					return r != e
				},
				"===": function (r, e) {
					return r === e
				},
				"!==": function (r, e) {
					return r !== e
				},
				"<": function (r, e) {
					return r < e
				},
				">": function (r, e) {
					return r > e
				},
				"<=": function (r, e) {
					return r <= e
				},
				">=": function (r, e) {
					return r >= e
				},
				"<<": function (r, e) {
					return r << e
				},
				">>": function (r, e) {
					return r >> e
				},
				">>>": function (r, e) {
					return r >>> e
				},
				"+": function (r, e) {
					return r + e
				},
				"-": function (r, e) {
					return r - e
				},
				"*": function (r, e) {
					return r * e
				},
				"/": function (r, e) {
					return r / e
				},
				"%": function (r, e) {
					return r % e
				},
			},
			i = {
				"-": function (r) {
					return -r
				},
				"+": function (r) {
					return +r
				},
				"~": function (r) {
					return ~r
				},
				"!": function (r) {
					return !r
				},
			}
		function s(r, e) {
			return r.map(function (r) {
				return a(r, e)
			})
		}
		function c(r, e) {
			var n,
				t = a(r.object, e)
			if (
				((n = r.computed ? a(r.property, e) : r.property.name),
				/^__proto__|prototype|constructor$/.test(n))
			)
				throw Error('Access to member "' + n + '" disallowed.')
			return [t, t[n]]
		}
		function a(r, e) {
			var n = r
			switch (n.type) {
				case "ArrayExpression":
					return s(n.elements, e)
				case "BinaryExpression":
					return u[n.operator](a(n.left, e), a(n.right, e))
				case "CallExpression":
					var t, o, l
					if (
						("MemberExpression" === n.callee.type
							? ((t = (l = c(n.callee, e))[0]), (o = l[1]))
							: (o = a(n.callee, e)),
						"function" != typeof o)
					)
						return
					return o.apply(t, s(n.arguments, e))
				case "ConditionalExpression":
					return a(n.test, e) ? a(n.consequent, e) : a(n.alternate, e)
				case "Identifier":
					return e[n.name]
				case "Literal":
					return n.value
				case "LogicalExpression":
					return "||" === n.operator
						? a(n.left, e) || a(n.right, e)
						: "&&" === n.operator
						? a(n.left, e) && a(n.right, e)
						: u[n.operator](a(n.left, e), a(n.right, e))
				case "MemberExpression":
					return c(n, e)[1]
				case "ThisExpression":
					return e
				case "UnaryExpression":
					return i[n.operator](a(n.argument, e))
				default:
					return
			}
		}
		const defaultFilter = config =>
				external_jsep_default()(
					`\nor([\nRA.some(\n  flip(flow([inText, RA.some]))(${JSON.stringify(
						config.bannedWords
					)})\n)(RA.compact([\n  messageText,\n  paymentInfo\n])),\nRA.some(\n  flip(flow([matchedByText, RA.some]))(${JSON.stringify(
						config.bannedWordRegexs
					)})\n)(RA.compact([\n  messageText,\n  paymentInfo\n])),\nO.exists(\n  flip(flow([eqText, RA.some]))(${JSON.stringify(
						config.bannedUsers
					)})\n)(authorID)\n])\n`
				),
			Chainable_bind = F =>
				Function_dual(3, (self, name, f) =>
					F.flatMap(self, a =>
						F.map(f(a), b => Object.assign({}, a, { [name]: b }))
					)
				),
			Identity_map = Function_dual(2, (self, f) => f(self)),
			Identity_imap = imap(Identity_map),
			Identity_Covariant = { imap: Identity_imap, map: Identity_map },
			Identity_Invariant = { imap: Identity_imap },
			Identity_Chainable = {
				imap: Identity_imap,
				map: Identity_map,
				flatMap: Function_dual(2, (self, f) => f(self)),
			},
			Identity_bindTo = Invariant_bindTo(Identity_Invariant),
			Identity_let_ = let_(Identity_Covariant),
			Identity_bind = Chainable_bind(Identity_Chainable),
			Identity_letDiscard = letDiscard(Identity_Chainable),
			external_astring_namespaceObject = astring,
			fycKey = key => `FYC_${key}`,
			languages = ["FYC_EN", "FYC_JA"],
			stringsArgs = [
				[],
				flow(split(/\r\n|\n/), ReadonlyArray_filter(not(isEmpty))),
				join("\n"),
			],
			sc = (k, d) => {
				return (
					(key = fycKey(k)),
					(defaultValue = d),
					{
						gmKey: key,
						getValue: Effect_promise(
							async () => (await GM.getValue(key)) ?? defaultValue
						),
						defaultValue,
						toGm: Function_identity,
					}
				)
				var key, defaultValue
			},
			ic = (k, d, c, g) => {
				return (
					(key = fycKey(k)),
					(toConfig = c),
					pipe(
						{ gmKey: key, defaultValue: (defaultValue = d), toGm: g },
						Identity_letDiscard(
							"getValue",
							pipe(
								Effect_promise(() => GM.getValue(key)),
								Effect_map(x => (void 0 !== x ? toConfig(x) : defaultValue))
							)
						)
					)
				)
				var key, defaultValue, toConfig
			},
			src_defaultGMConfig = pipe(
				{
					lang: ic(
						"LANG",
						"FYC_EN",
						x => (languages.includes(x) ? x : "FYC_EN"),
						x => x
					),
					font: sc("FONT", "MS PGothic"),
					chatOpacity: sc("OPACITY", 0.8),
					color: sc("COLOR", "#ffffff"),
					ownerColor: sc("COLOR_OWNER", "#ffd600"),
					moderatorColor: sc("COLOR_MODERATOR", "#c564ff"),
					memberColor: sc("COLOR_MEMBER", "#9fffff"),
					fontSize: sc("SIZE", 1),
					fontWeight: sc("WEIGHT", 730),
					shadowFontWeight: sc("WEIGHT_SHADOW", 1),
					maxChatCount: sc("LIMIT", 40),
					flowSpeed: sc("SPEED", 18),
					maxChatLength: sc("MAX", 100),
					laneCount: sc("LANE_DIV", 12),
					bannedWords: ic("NG_WORDS", ...stringsArgs),
					bannedWordRegexs: ic("NG_REG_WORDS", ...stringsArgs),
					bannedUsers: ic("NG_USERS", ...stringsArgs),
					createChats: sc("TOGGLE_CREATE_COMMENTS", !0),
					noOverlap: sc("NO_OVERLAP", !0),
					createBanButton: sc("NG_BUTTON", !0),
					simplifyChatField: sc("SIMPLE_CHAT_FIELD", !1),
					displayModName: sc("DISPLAY_MODERATOR_NAME", !0),
					displaySuperChatAuthor: sc("DISPLAY_SUPER_CHAT_AUTHOR", !0),
					textOnly: sc("TEXT_ONLY", !1),
					timingFunction: sc("TIMING_FUNCTION", "linear"),
					displayChats: sc("DISPLAY_COMMENTS", !0),
					minSpacing: sc("MIN_SPACING", 0.5),
					fieldScale: sc("FIELD_SCALE", 1),
					flowY1: sc("flowY1", 0),
					flowY2: sc("flowY2", 1),
					flowX1: sc("flowX1", 0),
					flowX2: sc("flowX2", 1),
					shadowColor: sc("shadowColor", "#000000"),
					logEvents: sc("logEvents", !0),
				},
				Identity_bind("filterExp", x =>
					ic(
						"filterExp",
						external_jsep_default()(
							`\n  or([\n  RA.some(\n    flip(flow([inText, RA.some]))(${JSON.stringify(
								x.bannedWords.defaultValue
							)})\n  )(RA.compact([\n    messageText,\n    paymentInfo\n  ])),\n  RA.some(\n    flip(flow([matchedByText, RA.some]))(${JSON.stringify(
								x.bannedWordRegexs.defaultValue
							)})\n  )(RA.compact([\n    messageText,\n    paymentInfo\n  ])),\n  O.exists(\n    flip(flow([eqText, RA.some]))(${JSON.stringify(
								x.bannedUsers.defaultValue
							)})\n  )(authorID)\n  ])\n        `
						),
						external_jsep_default(),
						external_astring_namespaceObject.generate
					)
				)
			),
			src_listeningBroadcastConfigKeys = [
				"lang",
				"bannedWords",
				"bannedWordRegexs",
				"bannedUsers",
				"filterExp",
				"simplifyChatField",
				"createBanButton",
				"fieldScale",
			],
			src_flatMapOption = f => self =>
				Effect_flatMap(flow(f, Effect_fromOption))(self),
			chatApp = pipe(
				Effect_sync(() => document.querySelector("#chatframe")),
				Effect_map(
					flow(
						fromNullable,
						Option_filter(
							flow(
								x => x.contentDocument?.readyState,
								x => "loading" === x || "complete" === x
							)
						),
						flatMapNullable(x => x.contentDocument),
						orElse(() => Option_some(document)),
						flatMapNullable(x => x.querySelector("yt-live-chat-app"))
					)
				),
				Effect_some
			),
			livePageYt = {
				toggleChatBtnParent: pipe(
					Effect_sync(() => document.querySelector(".ytp-right-controls")),
					Effect_map(fromNullable),
					Effect_some
				),
				settingsToggleNextElement: pipe(
					Effect_sync(() => document.querySelector("#menu-container")),
					Effect_map(
						flow(
							fromNullable,
							Option_filter(x => null !== x.offsetParent),
							flatMapNullable(x =>
								x.querySelector(".dropdown-trigger.ytd-menu-renderer")
							),
							orElse(() =>
								fromNullable(
									document.querySelector(
										"#top-row .dropdown-trigger.ytd-menu-renderer"
									)
								)
							)
						)
					),
					Effect_some
				),
				settingsContainer: pipe(
					Effect_sync(() => document.body),
					Effect_map(fromNullable),
					Effect_some
				),
				player: pipe(
					Effect_sync(() => document.querySelector("#movie_player")),
					Effect_map(fromNullable),
					Effect_some
				),
				video: pipe(
					Effect_sync(() =>
						document.querySelector("video.video-stream.html5-main-video")
					),
					Effect_map(fromNullable),
					Effect_some
				),
				chatField: pipe(
					chatApp,
					src_flatMapOption(
						flow(
							x => x.querySelector("#items.yt-live-chat-item-list-renderer"),
							fromNullable
						)
					)
				),
				chatTicker: pipe(
					chatApp,
					src_flatMapOption(
						flow(
							x => x.querySelector("#items.yt-live-chat-ticker-renderer"),
							fromNullable
						)
					)
				),
				chatScroller: pipe(
					chatApp,
					src_flatMapOption(
						flow(
							x =>
								x.querySelector(
									"#item-scroller.yt-live-chat-item-list-renderer"
								),
							fromNullable
						)
					)
				),
				offlineSlate: pipe(
					Effect_sync(() => document.querySelector(".ytp-offline-slate")),
					Effect_map(fromNullable),
					Effect_some
				),
			},
			FiberRef_locally = fiberRefLocally,
			logMeta = fiberRefUnsafeMake(Option_none()),
			logWithMeta = level => message => data =>
				pipe(
					Effect_log(message),
					FiberRef_locally(logMeta, Option_some(data)),
					x => locally(level)(x)
				),
			mainCss = pipe(
				Effect_sync(() => document.createElement("style")),
				Effect_tap(x =>
					Effect_sync(() => {
						x.innerHTML =
							".fyc_chat {\n  line-height: 1;\n  z-index: 30;\n  position: absolute;\n  user-select: none;\n  white-space: nowrap;\n  will-change: transform;\n}\n.fyc_button {\n  display: inline-block;\n  border-style: none;\n  z-index: 4;\n  font-weight: 500;\n  color: var(--yt-spec-text-secondary);\n}"
					})
				)
			),
			makeChatScreen = pipe(
				Effect_sync(() => document.createElement("div")),
				Effect_tap(x =>
					Effect_sync(() =>
						Object.assign(x.style, {
							pointerEvents: "none",
							zIndex: "30",
							position: "absolute",
							overflow: "hidden",
							height: "100%",
							width: "100%",
						})
					)
				)
			),
			observePair = con =>
				pipe(
					Effect_Do(),
					Effect_bindDiscard(
						"subject",
						Effect_sync(() => new external_rxjs_namespaceObject.Subject())
					),
					Effect_bind("observer", x =>
						Effect_sync(() => new con(lib(x.subject)))
					)
				),
			emptyElement = document.createElement("span"),
			appendChatMessage = flip(chat =>
				Effect_flatMap(x =>
					Effect_sync(() => chat.querySelector("#content #message")?.append(x))
				)
			),
			external_Swal_namespaceObject = Swal
		var external_Swal_default = __webpack_require__.n(
			external_Swal_namespaceObject
		)
		const defaultToast = external_Swal_default().mixin({
				toast: !0,
				position: "bottom-left",
				timer: 2500,
				timerProgressBar: !0,
				showConfirmButton: !1,
				didOpen: toast => {
					toast.addEventListener(
						"pointerenter",
						external_Swal_default().stopTimer
					)
					toast.addEventListener(
						"pointerleave",
						external_Swal_default().resumeTimer
					)
				},
			}),
			template = runPromise(
				pipe(
					document.createElement("button"),
					Effect_succeed,
					Effect_tap(x =>
						Effect_sync(() =>
							x.classList.add("style-scope", "yt-icon-button", "fyc_button")
						)
					),
					Effect_tap(x =>
						Effect_sync(() =>
							Object.assign(x.style, {
								padding: "0px",
								width: "20px",
								height: "20px",
								fill: "#fff",
							})
						)
					),
					Effect_tap(x =>
						Effect_sync(() =>
							x.setAttribute("aria-label", "NGに入れる(Ban this user)")
						)
					),
					Effect_tap(x =>
						Effect_sync(() => {
							x.innerHTML =
								'<svg class="style-scope yt-icon" style="width: 100%; height: 75%; fill: var(--yt-spec-text-secondary);" viewBox="0 0 512 512"><path d="M440 78A256 256 0 1 0 73 435 256 256 0 0 0 440 78zm-99 35L113 341C37 179 212 44 341 113zM177 405l228-228c76 162-99 297-228 228z" fill-rule="evenodd"/></svg>'
						})
					)
				)
			),
			filter_filterOperators = {
				flip,
				flow: fns => flow(...fns),
				and: Monoid_booleanEvery.combineAll,
				or: Monoid_booleanSome.combineAll,
				RA: { some: ReadonlyArray_some, compact: ReadonlyArray_compact },
				O: { exists },
				inText: text => x => includes(x)(text.content),
				eqText: text => x => text.content === x,
				matchedByText: text => x => Boolean(text.content.match(RegExp(x, "u"))),
				isVisible: x => x.visible,
			}
		var typed_assert_build = __webpack_require__(52)
		const tapNonNull = (x, message) => {
				typed_assert_build.Xd(x, message)
				return x
			},
			parseChat = chat => {
				const chatType = chat.querySelector(
						".yt-live-chat-ticker-paid-message-item-renderer"
					)
						? "ticker"
						: chat.querySelector(".yt-live-chat-membership-item-renderer")
						? "membership"
						: chat.querySelector(
								".yt-live-chat-viewer-engagement-message-renderer"
						  )
						? "engagement"
						: "normal",
					isPaid =
						"ticker" === chatType || Boolean(chat.querySelector("#card")),
					paymentInfo = pipe(
						fromNullable(
							isPaid
								? chat.querySelector(
										join(", ")([
											"#purchase-amount",
											"#purchase-amount-chip",
											"#content>#text",
										])
								  )?.textContent
								: void 0
						),
						Option_map(x => ({ visible: !0, content: x }))
					),
					authorType = chat.querySelector(".owner")
						? "owner"
						: chat.querySelector(".moderator")
						? "moderator"
						: chat.querySelector(".member")
						? "member"
						: "normal",
					messageElement = fromNullable(chat.querySelector("#message")),
					isPaidNormal =
						!!Option_isSome(paymentInfo) &&
						Boolean(chat.querySelector(".yt-live-chat-paid-message-renderer")),
					isPaidSticker =
						!(!Option_isSome(paymentInfo) || isPaidNormal) &&
						Boolean(chat.querySelector(".yt-live-chat-paid-sticker-renderer")),
					textColor = fromNullable(
						isPaidNormal
							? window
									.getComputedStyle(tapNonNull(chat.querySelector("#header")))
									.getPropertyValue("background-color")
							: isPaidSticker
							? window
									.getComputedStyle(chat)
									.getPropertyValue(
										"--yt-live-chat-paid-sticker-chip-background-color"
									)
							: void 0
					),
					paidColor = fromNullable(
						isPaidNormal
							? window
									.getComputedStyle(tapNonNull(chat.querySelector("#content")))
									.getPropertyValue("background-color")
							: isPaidSticker
							? window
									.getComputedStyle(chat)
									.getPropertyValue(
										"--yt-live-chat-paid-sticker-background-color"
									)
							: void 0
					),
					authorPhotoMatches = chat
						.querySelector(join(" ")(["#author-photo", "img"]))
						?.src.match(/ggpht\.com\/(ytc\/)?(.*)=/),
					authorID = fromNullable(authorPhotoMatches?.at(-1)),
					authorName = fromNullable(
						chat.querySelector("#author-name")?.textContent
					),
					message = pipe(
						messageElement,
						Option_map(x => ({ visible: !0, content: x.innerHTML }))
					),
					messageText = pipe(
						messageElement,
						Option_map(x => ({ visible: !0, content: x.textContent ?? "" }))
					)
				return config => ({
					chatType,
					authorType,
					authorID,
					authorName: pipe(
						authorName,
						Option_map(x => ({
							visible:
								("moderator" === authorType && config.displayModName) ||
								(Option_isSome(paymentInfo) && config.displaySuperChatAuthor),
							content: x,
						}))
					),
					messageElement,
					message,
					messageText,
					paymentInfo,
					textColor,
					paidColor,
				})
			},
			onChatFieldMutate = (chatScrn, mainState, getConfig, setConfig) =>
				flow(
					ReadonlyArray_flatMap(e => Array.from(e.addedNodes)),
					ReadonlyArray_filter(x => x.children.length > 0),
					ReadonlyArray_reverse,
					ReadonlyArray_map(chat =>
						pipe(
							{ getData: parseChat(chat), config: mainState.config },
							Identity_let_("data", x => x.getData(x.config)),
							Effect_succeed,
							Effect_zipLeft(Effect_logDebug("Chat detected")),
							Effect_bind("banned", x => {
								return pipe(
									((data = x.data),
									(config = x.config),
									pipe(
										data,
										liftPredicate(() =>
											pipe(config.filterExp, x =>
												a(
													x,
													(data => ({
														...filter_filterOperators,
														authorName: data.authorName,
														message: data.message,
														messageText: data.messageText,
														paymentInfo: data.paymentInfo,
														authorID: pipe(
															data.authorID,
															Option_map(x => ({ visible: !1, content: x }))
														),
													}))(data)
												)
											)
										),
										Option_map(x => [
											pipe(
												x.message,
												Option_map(m => m.content)
											),
											pipe(
												x.paymentInfo,
												Option_map(p => p.content)
											),
										]),
										Option_map(ReadonlyArray_map(getOrElse(() => ""))),
										Option_map(JSON.stringify),
										Effect_fromOption,
										Effect_flatMap(x => Effect_logDebug(`Filtered: ${x}`)),
										Effect_isSuccess
									))
								)
								var data, config
							}),
							Effect_flatMap(ctx =>
								ctx.banned
									? Effect_sync(() => {
											chat.style.display = "none"
									  })
									: Effect_all([
											pipe(
												ctx.config.createChats &&
													"normal" === ctx.data.chatType,
												liftPredicate(Function_identity),
												Effect_fromOption,
												Effect_flatMap(() =>
													((getData, chatScrn, mainState) =>
														pipe(
															{
																getData,
																element: emptyElement,
																lane: -1,
																animation: Option_none(),
																animationDuration: 0,
																animationEnded: !1,
																width: 2,
																height: getChatFontSize(mainState),
																y: 0,
															},
															x => getChatLane(x, 0)(mainState).interval,
															intervalTooSmall,
															x => x(mainState.config)
														)
															? Effect_unit()
															: pipe(
																	mainState.flowChats,
																	findFirstIndex(
																		chat =>
																			chat.animationEnded ||
																			mainState.flowChats.length >=
																				mainState.config.maxChatCount
																	),
																	offScreenIndex =>
																		pipe(
																			offScreenIndex,
																			Option_map(index =>
																				pipe(
																					mainState.flowChats,
																					unsafeGet(index),
																					x => x.element
																				)
																			),
																			getOrElse(() =>
																				document.createElement("span")
																			),
																			Effect_succeed,
																			Effect_tap(element =>
																				pipe(
																					offScreenIndex,
																					match(
																						() =>
																							pipe(
																								Effect_sync(() =>
																									chatScrn.append(element)
																								),
																								Effect_zipLeft(
																									Effect_logDebug(
																										"Flow chat added"
																									)
																								)
																							),
																						i =>
																							pipe(
																								Effect_sync(
																									() =>
																										mainState.flowChats.splice(
																											i,
																											1
																										)?.[0]?.animation ??
																										Option_none()
																								),
																								Effect_some,
																								Effect_flatMap(oldAnimation =>
																									Effect_sync(() =>
																										oldAnimation.cancel()
																									)
																								),
																								Effect_ignore
																							)
																					)
																				)
																			)
																		),
																	Effect_flatMap(element =>
																		pipe(
																			{
																				getData,
																				element,
																				lane: -1,
																				animation: Option_none(),
																				animationDuration: 0,
																				animationEnded: !1,
																				width: 2,
																				height: getChatFontSize(mainState),
																				y: 0,
																			},
																			Effect_succeed,
																			Effect_zipLeft(
																				Effect_sync(() =>
																					element.classList.add("fyc_chat")
																				)
																			)
																		)
																	),
																	Effect_flatMap(flowChat =>
																		pipe(
																			mainState,
																			Effect_succeed,
																			Effect_tap(renderChat(flowChat)),
																			Effect_flatMap(
																				setChatAnimation(flowChat)
																			),
																			Effect_flatMap(x =>
																				x
																					? Effect_sync(() =>
																							mainState.flowChats.push(flowChat)
																					  )
																					: pipe(
																							Effect_sync(() =>
																								flowChat.element.remove()
																							),
																							Effect_zipLeft(
																								Effect_logDebug(
																									"Flow chat removed"
																								)
																							)
																					  )
																			)
																		)
																	)
															  ))(ctx.getData, chatScrn, mainState)
												),
												Effect_ignore
											),
											pipe(
												ctx.data.authorID,
												Option_filter(() => ctx.config.createBanButton),
												Option_filter(() => !chat.children.namedItem("card")),
												Effect_fromOption,
												Effect_flatMap(x => {
													return appendChatMessage(
														((id = x),
														getConfig => setConfig => chat =>
															pipe(
																getConfig.bannedUsers,
																Effect_filterOrFail(
																	x => !x.includes(id),
																	Option_none
																),
																Effect_map(
																	flow(uniq(String_Equivalence), append(id))
																),
																Effect_flatMap(x =>
																	pipe(
																		setConfig.bannedUsers(x),
																		Effect_zipRight(
																			Effect_sync(() =>
																				defaultToast.fire({
																					title: `Added Banned User: ${id}`,
																					icon: "success",
																				})
																			)
																		)
																	)
																),
																Effect_ignore,
																Effect_zipRight(
																	Effect_sync(() => {
																		chat.style.display = "none"
																	})
																),
																onclick =>
																	pipe(
																		Effect_promise(() => template),
																		Effect_map(x => x.cloneNode(!0)),
																		Effect_tap(x =>
																			Effect_sync(() => {
																				x.onclick = () => runPromise(onclick)
																			})
																		)
																	)
															))(getConfig)(setConfig)(chat)
													)(chat)
													var id
												}),
												Effect_zipLeft(Effect_logDebug("Ban button added")),
												Effect_ignore
											),
											pipe(
												ctx.config.simplifyChatField,
												liftPredicate(Function_identity),
												Effect_fromOption,
												Effect_flatMap(() =>
													(chat =>
														chat.querySelector(
															".style-scope.yt-live-chat-paid-message-renderer"
														)
															? Effect_unit()
															: pipe(
																	[
																		"#author-photo",
																		"yt-live-chat-author-chip.style-scope.yt-live-chat-text-message-renderer",
																	],
																	ReadonlyArray_map(x =>
																		fromNullable(chat.querySelector(x))
																	),
																	ReadonlyArray_compact,
																	ReadonlyArray_map(x =>
																		Effect_sync(() => {
																			x.style.display = "none"
																		})
																	),
																	append(
																		Effect_sync(() => {
																			chat.style.borderBottom =
																				"1px solid var(--yt-spec-text-secondary)"
																		})
																	),
																	x => Effect_all(x)
															  ))(chat)
												),
												Effect_zipLeft(Effect_logDebug("Chat simplified")),
												Effect_ignore
											),
									  ])
							)
						)
					),
					x => Effect_all(x)
				),
			exceptions = ["timingFunction", "lang"],
			isEditable = k => v =>
				("number" == typeof v ||
					"string" == typeof v ||
					(Array.isArray(v) && ("string" == typeof v[0] || 0 === v.length))) &&
				!ReadonlyArray_some(x => x === k)(exceptions),
			Editable_of = x => [x, Option_none()],
			fromValueText = v => t => [v, Option_some([t, Option_none()])],
			Editable_value = getFirst,
			Editable_text = flow(getSecond, Option_map(getFirst)),
			error = flow(getSecond, flatMap(getSecond)),
			setValue = flow(constant, x => mapFirst(x)),
			setText = x =>
				mapSecond(
					flow(
						Option_map(mapFirst(constant(x))),
						orElse(constant(Option_some([x, Option_none()])))
					)
				),
			hasError = flow(error, Option_isSome),
			RefinedConstructorsTypeId = Symbol.for("@effect/data/Brand/Refined"),
			nominal = () =>
				Object.assign(args => args, {
					[RefinedConstructorsTypeId]: RefinedConstructorsTypeId,
					option: args => Option_some(args),
					either: args => Either_right(args),
					refine: _args => !0,
				}),
			external_LZString_namespaceObject = LZString,
			makeCompressedLogBlock = nominal(),
			makeLog = nominal(),
			decompressBlock = x =>
				pipe((0, external_LZString_namespaceObject.decompress)(x), JSON.parse),
			settingStateInit = config =>
				pipe(
					config,
					mapObject(([k, v]) => [
						k,
						isEditable(k)(v) ? Editable_of(v) : "filterExp" === k ? void 0 : v,
					]),
					x => ({
						...x,
						showPanel: !1,
						mainTab: 0,
						logTab: 0,
						timingStepCount: Editable_of(
							parseInt(
								config.timingFunction.match(/^steps\((\d+),.+/)?.[1] ?? "150",
								10
							)
						),
						eventLog: makeLog({
							nextId: 0,
							compressedBlocks: [],
							lastBlock: [],
						}),
						panelRect: new DOMRectReadOnly(0, 0, 660, 395),
					})
				)
		var EMPTY_OBJ = {},
			EMPTY_ARR = [],
			hyperapp_id = a => a,
			hyperapp_map = EMPTY_ARR.map,
			isArray = Array.isArray,
			enqueue =
				"undefined" != typeof requestAnimationFrame
					? requestAnimationFrame
					: setTimeout,
			createClass = obj => {
				var out = ""
				if ("string" == typeof obj) return obj
				if (isArray(obj))
					for (var tmp, k = 0; k < obj.length; k++)
						(tmp = createClass(obj[k])) && (out += (out && " ") + tmp)
				else for (var k in obj) obj[k] && (out += (out && " ") + k)
				return out
			},
			shouldRestart = (a, b) => {
				for (var k in { ...a, ...b })
					if ("function" == typeof (isArray(a[k]) ? a[k][0] : a[k])) b[k] = a[k]
					else if (a[k] !== b[k]) return !0
			},
			getKey = vdom => (null == vdom ? vdom : vdom.key),
			patchProperty = (node, key, oldValue, newValue, listener, isSvg) => {
				if ("style" === key)
					for (var k in { ...oldValue, ...newValue }) {
						oldValue =
							null == newValue || null == newValue[k] ? "" : newValue[k]
						"-" === k[0]
							? node[key].setProperty(k, oldValue)
							: (node[key][k] = oldValue)
					}
				else
					"o" === key[0] && "n" === key[1]
						? ((node.events || (node.events = {}))[(key = key.slice(2))] =
								newValue)
							? oldValue || node.addEventListener(key, listener)
							: node.removeEventListener(key, listener)
						: !isSvg && "list" !== key && "form" !== key && key in node
						? (node[key] = newValue ?? "")
						: null == newValue || !1 === newValue
						? node.removeAttribute(key)
						: node.setAttribute(key, newValue)
			},
			createNode = (vdom, listener, isSvg) => {
				var props = vdom.props,
					node =
						3 === vdom.type
							? document.createTextNode(vdom.tag)
							: (isSvg = isSvg || "svg" === vdom.tag)
							? document.createElementNS(
									"http://www.w3.org/2000/svg",
									vdom.tag,
									props.is && props
							  )
							: document.createElement(vdom.tag, props.is && props)
				for (var k in props)
					patchProperty(node, k, null, props[k], listener, isSvg)
				for (var i = 0; i < vdom.children.length; i++)
					node.appendChild(
						createNode(
							(vdom.children[i] = maybeVNode(vdom.children[i])),
							listener,
							isSvg
						)
					)
				return (vdom.node = node)
			},
			hyperapp_patch = (parent, node, oldVNode, newVNode, listener, isSvg) => {
				if (oldVNode === newVNode);
				else if (null != oldVNode && 3 === oldVNode.type && 3 === newVNode.type)
					oldVNode.tag !== newVNode.tag && (node.nodeValue = newVNode.tag)
				else if (null == oldVNode || oldVNode.tag !== newVNode.tag) {
					node = parent.insertBefore(
						createNode((newVNode = maybeVNode(newVNode)), listener, isSvg),
						node
					)
					null != oldVNode && parent.removeChild(oldVNode.node)
				} else {
					var tmpVKid,
						oldVKid,
						oldKey,
						newKey,
						oldProps = oldVNode.props,
						newProps = newVNode.props,
						oldVKids = oldVNode.children,
						newVKids = newVNode.children,
						oldHead = 0,
						newHead = 0,
						oldTail = oldVKids.length - 1,
						newTail = newVKids.length - 1
					isSvg = isSvg || "svg" === newVNode.tag
					for (var i in { ...oldProps, ...newProps })
						("value" === i || "selected" === i || "checked" === i
							? node[i]
							: oldProps[i]) !== newProps[i] &&
							patchProperty(node, i, oldProps[i], newProps[i], listener, isSvg)
					for (
						;
						newHead <= newTail &&
						oldHead <= oldTail &&
						null != (oldKey = getKey(oldVKids[oldHead])) &&
						oldKey === getKey(newVKids[newHead]);

					)
						hyperapp_patch(
							node,
							oldVKids[oldHead].node,
							oldVKids[oldHead],
							(newVKids[newHead] = maybeVNode(
								newVKids[newHead++],
								oldVKids[oldHead++]
							)),
							listener,
							isSvg
						)
					for (
						;
						newHead <= newTail &&
						oldHead <= oldTail &&
						null != (oldKey = getKey(oldVKids[oldTail])) &&
						oldKey === getKey(newVKids[newTail]);

					)
						hyperapp_patch(
							node,
							oldVKids[oldTail].node,
							oldVKids[oldTail],
							(newVKids[newTail] = maybeVNode(
								newVKids[newTail--],
								oldVKids[oldTail--]
							)),
							listener,
							isSvg
						)
					if (oldHead > oldTail)
						for (; newHead <= newTail; )
							node.insertBefore(
								createNode(
									(newVKids[newHead] = maybeVNode(newVKids[newHead++])),
									listener,
									isSvg
								),
								(oldVKid = oldVKids[oldHead]) && oldVKid.node
							)
					else if (newHead > newTail)
						for (; oldHead <= oldTail; )
							node.removeChild(oldVKids[oldHead++].node)
					else {
						var keyed = {},
							newKeyed = {}
						for (i = oldHead; i <= oldTail; i++)
							null != (oldKey = oldVKids[i].key) &&
								(keyed[oldKey] = oldVKids[i])
						for (; newHead <= newTail; ) {
							oldKey = getKey((oldVKid = oldVKids[oldHead]))
							newKey = getKey(
								(newVKids[newHead] = maybeVNode(newVKids[newHead], oldVKid))
							)
							if (
								newKeyed[oldKey] ||
								(null != newKey && newKey === getKey(oldVKids[oldHead + 1]))
							) {
								null == oldKey && node.removeChild(oldVKid.node)
								oldHead++
							} else if (null == newKey || 1 === oldVNode.type) {
								if (null == oldKey) {
									hyperapp_patch(
										node,
										oldVKid && oldVKid.node,
										oldVKid,
										newVKids[newHead],
										listener,
										isSvg
									)
									newHead++
								}
								oldHead++
							} else {
								if (oldKey === newKey) {
									hyperapp_patch(
										node,
										oldVKid.node,
										oldVKid,
										newVKids[newHead],
										listener,
										isSvg
									)
									newKeyed[newKey] = !0
									oldHead++
								} else if (null != (tmpVKid = keyed[newKey])) {
									hyperapp_patch(
										node,
										node.insertBefore(tmpVKid.node, oldVKid && oldVKid.node),
										tmpVKid,
										newVKids[newHead],
										listener,
										isSvg
									)
									newKeyed[newKey] = !0
								} else
									hyperapp_patch(
										node,
										oldVKid && oldVKid.node,
										null,
										newVKids[newHead],
										listener,
										isSvg
									)
								newHead++
							}
						}
						for (; oldHead <= oldTail; )
							null == getKey((oldVKid = oldVKids[oldHead++])) &&
								node.removeChild(oldVKid.node)
						for (var i in keyed)
							null == newKeyed[i] && node.removeChild(keyed[i].node)
					}
				}
				return (newVNode.node = node)
			},
			maybeVNode = (newVNode, oldVNode) =>
				!0 !== newVNode && !1 !== newVNode && newVNode
					? "function" == typeof newVNode.tag
						? ((!oldVNode ||
								null == oldVNode.memo ||
								((a, b) => {
									for (var k in a) if (a[k] !== b[k]) return !0
									for (var k in b) if (a[k] !== b[k]) return !0
								})(oldVNode.memo, newVNode.memo)) &&
								((oldVNode = newVNode.tag(newVNode.memo)).memo = newVNode.memo),
						  oldVNode)
						: newVNode
					: hyperapp_text(""),
			recycleNode = node =>
				3 === node.nodeType
					? hyperapp_text(node.nodeValue, node)
					: createVNode(
							node.nodeName.toLowerCase(),
							EMPTY_OBJ,
							hyperapp_map.call(node.childNodes, recycleNode),
							1,
							node
					  ),
			createVNode = (tag, { key, ...props }, children, type, node) => ({
				tag,
				props,
				key,
				children,
				type,
				node,
			}),
			hyperapp_text = (value, node) =>
				createVNode(value, EMPTY_OBJ, EMPTY_ARR, 3, node),
			h = (tag, { class: c, ...props }, children = EMPTY_ARR) =>
				createVNode(
					tag,
					{ ...props, ...(c ? { class: createClass(c) } : EMPTY_OBJ) },
					isArray(children) ? children : [children]
				),
			app = ({
				node,
				view,
				subscriptions,
				dispatch = hyperapp_id,
				init = EMPTY_OBJ,
			}) => {
				var state,
					busy,
					vdom = node && recycleNode(node),
					subs = [],
					update = newState => {
						if (state !== newState) {
							null == (state = newState) &&
								(dispatch = subscriptions = render = hyperapp_id)
							subscriptions &&
								(subs = ((oldSubs, newSubs = EMPTY_ARR, dispatch) => {
									for (
										var oldSub, newSub, subs = [], i = 0;
										i < oldSubs.length || i < newSubs.length;
										i++
									) {
										oldSub = oldSubs[i]
										newSub = newSubs[i]
										subs.push(
											newSub && !0 !== newSub
												? !oldSub ||
												  newSub[0] !== oldSub[0] ||
												  shouldRestart(newSub[1], oldSub[1])
													? [
															newSub[0],
															newSub[1],
															(oldSub && oldSub[2](),
															newSub[0](dispatch, newSub[1])),
													  ]
													: oldSub
												: oldSub && oldSub[2]()
										)
									}
									return subs
								})(subs, subscriptions(state), dispatch))
							view && !busy && enqueue(render, (busy = !0))
						}
					},
					render = () =>
						(node = hyperapp_patch(
							node.parentNode,
							node,
							vdom,
							(vdom = view(state)),
							listener,
							(busy = !1)
						)),
					listener = function (event) {
						dispatch(this.events[event.type], event)
					}
				return (
					(dispatch = dispatch((action, props) =>
						"function" == typeof action
							? dispatch(action(state, props))
							: isArray(action)
							? "function" == typeof action[0]
								? dispatch(action[0], action[1])
								: action
										.slice(1)
										.map(
											fx => fx && !0 !== fx && (fx[0] || fx)(dispatch, fx[1]),
											update(action[0])
										)
							: update(action)
					))(init),
					dispatch
				)
			}
		const makeComponent = x => tag => ({ tag, view: x(tag) }),
			src_flip =
				x =>
				(...b) =>
				(...a) =>
					x(...a)(...b),
			defaultText = {
				setting: ["Settings", "設定"],
				font: ["Font", "フォント"],
				color: ["Color(Normal)", "色(通常)"],
				ownerColor: ["Color(Owner)", "色(オーナー)"],
				moderatorColor: ["Color(Moderator)", "色(モデレーター)"],
				memberColor: ["Color(Member)", "色(メンバー)"],
				feedback: ["Feedback", "バグ報告と要望"],
				eventLog: ["Event log", "イベントログ"],
				giveFeedback: [
					"Give your feedbacks here(Please attach the event log for bug reports)",
					"バグ報告、要望はこちら(バグの場合は、イベントログを添付してください)",
				],
				chatOpacity: ["Opacity", "不透明度"],
				fontSize: ["Size", "サイズ"],
				fontWeight: ["Weight", "太さ"],
				shadowFontWeight: ["Weight(Shadow)", "太さ(影)"],
				flowSpeed: ["Speed", "速度"],
				maxChatCount: ["Max number of chats", "最大表示数"],
				maxChatLength: ["Max number of characters", "最大文字数"],
				laneCount: ["Number of rows", "行数"],
				bannedWords: ["Banned Words", "NGワード"],
				bannedWordRegexs: ["Banned Words(Regex)", "NGワード(正規表現)"],
				bannedUsers: ["Banned Users", "NGユーザー"],
				simplifyChatField: ["Simplify", "簡略化する"],
				createBanButton: ["Show ban button", "NGボタンを表示する"],
				displayModName: [
					"Show moderator's name",
					"モデレーターの名前を表示する",
				],
				displaySuperChatAuthor: [
					"Show super chat author",
					"スパチャの作成者を表示する",
				],
				createChats: ["Create flowing chats", "チャットを流す"],
				textOnly: ["Text only(ignore emojis)", "文字のみ(絵文字を無視する)"],
				error: ["Error", "エラー"],
				video: ["Video", "画面"],
				chatField: ["Chat Window", "チャット欄"],
				useStepTiming: ["Move chat in steps", "チャットを段階的に動かす"],
				timingStepCount: ["└Step Count", "└段階数"],
				chatFilter: ["Chat Filter", "チャットフィルター"],
				flowChat: ["Flow Chat", "チャット流れ"],
				clearFlowChats: ["Clear Flowing Chats", "流れるチャットをクリアする"],
				flowNewChatIf: [
					"A new chat will appear if all of the followings are met:",
					"新しいチャットは以下のすべてを満たす場合に流れます:",
				],
				noOverlap: ["└Chats won't overlap", "└他のチャットと重ならない"],
				minSpacing: ["Min spacing between chats", "チャットの最小間隔"],
				fieldScale: ["Scale", "拡大率"],
				copy: ["Copy", "コピーする"],
				showChats: ["Show chats", "チャットを表示する"],
				hideChats: ["Hide chats", "チャットを非表示にする"],
				flowY1: ["Flow area top edge", "流れ範囲の上端"],
				flowY2: ["Flow area bottom edge", "流れ範囲の下端"],
				flowX1: ["Flow area left edge", "流れ範囲の左端"],
				flowX2: ["Flow area right edge", "流れ範囲の右端"],
				shadowColor: ["Color(Shadow)", "色(影)"],
				invalidColor: ["Invalid color", "無効な色"],
				inputNonNumberic: ["Input isn't a number", "入力値が数字でない"],
				invalidSetting: ["Invalid setting", "無効な設定値"],
				logEvents: ["Enable event logging", "イベントログを有効にする"],
				importLog: ["Import event log", "イベントログを取り込む"],
			},
			getText = key => language =>
				defaultText[key]["FYC_EN" === language ? 0 : 1],
			languageLabels = ["English", "日本語"],
			computed = {
				useStepTiming: s => Boolean(s.timingFunction.match(/^steps\(.+/)),
			},
			getState = k => (k in computed ? computed[k] : s => s[k]),
			configEffect = (k, v) => c => () =>
				runPromise(c.provideLog(c.setConfig[k](v))),
			stepTiming = stepCount => `steps(${stepCount}, jump-end)`,
			setComputed = {
				useStepTiming: v => c => s =>
					pipe(
						v ? stepTiming(Editable_value(s.timingStepCount)) : "linear",
						timingFunction => [
							{ ...s, timingFunction },
							configEffect("timingFunction", timingFunction)(c),
						]
					),
			},
			settingUI_setComputed = setComputed,
			setRange = keyA => keyB => bFn => vA => commander => s =>
				pipe(
					{ a: Editable_value(vA) },
					Identity_let_("b", ({ a }) => bFn(a)(Editable_value(s[keyB]))),
					({ a, b }) =>
						pipe(
							[configEffect(keyA, a), configEffect(keyB, b)],
							xs => c =>
								pipe(
									xs,
									ReadonlyArray_map(x => x(c)),
									effects => [
										{ ...s, [keyA]: vA, [keyB]: setValue(b)(s[keyB]) },
										...effects,
									]
								)
						)(commander)
				),
			setState = {
				flowY1: setRange("flowY1")("flowY2")(a => b => Math.max(b, a + 0.05)),
				flowY2: setRange("flowY2")("flowY1")(a => b => Math.min(b, a - 0.05)),
				flowX1: setRange("flowX1")("flowX2")(a => b => Math.max(b, a + 0.05)),
				flowX2: setRange("flowX2")("flowX1")(a => b => Math.min(b, a - 0.05)),
				timingStepCount: v => c => s =>
					pipe(stepTiming(Editable_value(v)), timingFunction => [
						{ ...s, timingStepCount: v, timingFunction },
						configEffect("timingFunction", timingFunction)(c),
					]),
			},
			settingUI_setState = setState,
			updateAt = k => v =>
				pipe(
					k in settingUI_setComputed
						? settingUI_setComputed[k](v)
						: k in settingUI_setState
						? settingUI_setState[k](v)
						: c => s =>
								[
									{ ...s, [k]: v },
									...(k in c.setConfig && "filterExp" !== k
										? [
												configEffect(
													k,
													Array.isArray(v) &&
														2 === v.length &&
														isEditable(k)(v[0])
														? Editable_value(v)
														: v
												)(c),
										  ]
										: []),
								]
				)
		var util, objectUtil
		!(function (util) {
			util.assertEqual = val => val
			util.assertIs = function (_arg) {}
			util.assertNever = function (_x) {
				throw new Error()
			}
			util.arrayToEnum = items => {
				const obj = {}
				for (const item of items) obj[item] = item
				return obj
			}
			util.getValidEnumValues = obj => {
				const validKeys = util
						.objectKeys(obj)
						.filter(k => "number" != typeof obj[obj[k]]),
					filtered = {}
				for (const k of validKeys) filtered[k] = obj[k]
				return util.objectValues(filtered)
			}
			util.objectValues = obj =>
				util.objectKeys(obj).map(function (e) {
					return obj[e]
				})
			util.objectKeys =
				"function" == typeof Object.keys
					? obj => Object.keys(obj)
					: object => {
							const keys = []
							for (const key in object)
								Object.prototype.hasOwnProperty.call(object, key) &&
									keys.push(key)
							return keys
					  }
			util.find = (arr, checker) => {
				for (const item of arr) if (checker(item)) return item
			}
			util.isInteger =
				"function" == typeof Number.isInteger
					? val => Number.isInteger(val)
					: val =>
							"number" == typeof val && isFinite(val) && Math.floor(val) === val
			util.joinValues = function (array, separator = " | ") {
				return array
					.map(val => ("string" == typeof val ? `'${val}'` : val))
					.join(separator)
			}
			util.jsonStringifyReplacer = (_, value) =>
				"bigint" == typeof value ? value.toString() : value
		})(util || (util = {}))
		!(function (objectUtil) {
			objectUtil.mergeShapes = (first, second) => ({ ...first, ...second })
		})(objectUtil || (objectUtil = {}))
		const ZodParsedType = util.arrayToEnum([
				"string",
				"nan",
				"number",
				"integer",
				"float",
				"boolean",
				"date",
				"bigint",
				"symbol",
				"function",
				"undefined",
				"null",
				"array",
				"object",
				"unknown",
				"promise",
				"void",
				"never",
				"map",
				"set",
			]),
			getParsedType = data => {
				switch (typeof data) {
					case "undefined":
						return ZodParsedType.undefined
					case "string":
						return ZodParsedType.string
					case "number":
						return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number
					case "boolean":
						return ZodParsedType.boolean
					case "function":
						return ZodParsedType.function
					case "bigint":
						return ZodParsedType.bigint
					case "symbol":
						return ZodParsedType.symbol
					case "object":
						return Array.isArray(data)
							? ZodParsedType.array
							: null === data
							? ZodParsedType.null
							: data.then &&
							  "function" == typeof data.then &&
							  data.catch &&
							  "function" == typeof data.catch
							? ZodParsedType.promise
							: "undefined" != typeof Map && data instanceof Map
							? ZodParsedType.map
							: "undefined" != typeof Set && data instanceof Set
							? ZodParsedType.set
							: "undefined" != typeof Date && data instanceof Date
							? ZodParsedType.date
							: ZodParsedType.object
					default:
						return ZodParsedType.unknown
				}
			},
			ZodIssueCode = util.arrayToEnum([
				"invalid_type",
				"invalid_literal",
				"custom",
				"invalid_union",
				"invalid_union_discriminator",
				"invalid_enum_value",
				"unrecognized_keys",
				"invalid_arguments",
				"invalid_return_type",
				"invalid_date",
				"invalid_string",
				"too_small",
				"too_big",
				"invalid_intersection_types",
				"not_multiple_of",
				"not_finite",
			])
		class ZodError extends Error {
			constructor(issues) {
				super()
				this.issues = []
				this.addIssue = sub => {
					this.issues = [...this.issues, sub]
				}
				this.addIssues = (subs = []) => {
					this.issues = [...this.issues, ...subs]
				}
				const actualProto = new.target.prototype
				Object.setPrototypeOf
					? Object.setPrototypeOf(this, actualProto)
					: (this.__proto__ = actualProto)
				this.name = "ZodError"
				this.issues = issues
			}
			get errors() {
				return this.issues
			}
			format(_mapper) {
				const mapper =
						_mapper ||
						function (issue) {
							return issue.message
						},
					fieldErrors = { _errors: [] },
					processError = error => {
						for (const issue of error.issues)
							if ("invalid_union" === issue.code)
								issue.unionErrors.map(processError)
							else if ("invalid_return_type" === issue.code)
								processError(issue.returnTypeError)
							else if ("invalid_arguments" === issue.code)
								processError(issue.argumentsError)
							else if (0 === issue.path.length)
								fieldErrors._errors.push(mapper(issue))
							else {
								let curr = fieldErrors,
									i = 0
								for (; i < issue.path.length; ) {
									const el = issue.path[i]
									if (i === issue.path.length - 1) {
										curr[el] = curr[el] || { _errors: [] }
										curr[el]._errors.push(mapper(issue))
									} else curr[el] = curr[el] || { _errors: [] }
									curr = curr[el]
									i++
								}
							}
					}
				processError(this)
				return fieldErrors
			}
			toString() {
				return this.message
			}
			get message() {
				return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2)
			}
			get isEmpty() {
				return 0 === this.issues.length
			}
			flatten(mapper = issue => issue.message) {
				const fieldErrors = {},
					formErrors = []
				for (const sub of this.issues)
					if (sub.path.length > 0) {
						fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || []
						fieldErrors[sub.path[0]].push(mapper(sub))
					} else formErrors.push(mapper(sub))
				return { formErrors, fieldErrors }
			}
			get formErrors() {
				return this.flatten()
			}
		}
		ZodError.create = issues => new ZodError(issues)
		const errorMap = (issue, _ctx) => {
			let message
			switch (issue.code) {
				case ZodIssueCode.invalid_type:
					message =
						issue.received === ZodParsedType.undefined
							? "Required"
							: `Expected ${issue.expected}, received ${issue.received}`
					break
				case ZodIssueCode.invalid_literal:
					message = `Invalid literal value, expected ${JSON.stringify(
						issue.expected,
						util.jsonStringifyReplacer
					)}`
					break
				case ZodIssueCode.unrecognized_keys:
					message = `Unrecognized key(s) in object: ${util.joinValues(
						issue.keys,
						", "
					)}`
					break
				case ZodIssueCode.invalid_union:
					message = "Invalid input"
					break
				case ZodIssueCode.invalid_union_discriminator:
					message = `Invalid discriminator value. Expected ${util.joinValues(
						issue.options
					)}`
					break
				case ZodIssueCode.invalid_enum_value:
					message = `Invalid enum value. Expected ${util.joinValues(
						issue.options
					)}, received '${issue.received}'`
					break
				case ZodIssueCode.invalid_arguments:
					message = "Invalid function arguments"
					break
				case ZodIssueCode.invalid_return_type:
					message = "Invalid function return type"
					break
				case ZodIssueCode.invalid_date:
					message = "Invalid date"
					break
				case ZodIssueCode.invalid_string:
					if ("object" == typeof issue.validation)
						if ("includes" in issue.validation) {
							message = `Invalid input: must include "${issue.validation.includes}"`
							"number" == typeof issue.validation.position &&
								(message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`)
						} else
							"startsWith" in issue.validation
								? (message = `Invalid input: must start with "${issue.validation.startsWith}"`)
								: "endsWith" in issue.validation
								? (message = `Invalid input: must end with "${issue.validation.endsWith}"`)
								: util.assertNever(issue.validation)
					else
						message =
							"regex" !== issue.validation
								? `Invalid ${issue.validation}`
								: "Invalid"
					break
				case ZodIssueCode.too_small:
					message =
						"array" === issue.type
							? `Array must contain ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "at least"
										: "more than"
							  } ${issue.minimum} element(s)`
							: "string" === issue.type
							? `String must contain ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "at least"
										: "over"
							  } ${issue.minimum} character(s)`
							: "number" === issue.type
							? `Number must be ${
									issue.exact
										? "exactly equal to "
										: issue.inclusive
										? "greater than or equal to "
										: "greater than "
							  }${issue.minimum}`
							: "date" === issue.type
							? `Date must be ${
									issue.exact
										? "exactly equal to "
										: issue.inclusive
										? "greater than or equal to "
										: "greater than "
							  }${new Date(Number(issue.minimum))}`
							: "Invalid input"
					break
				case ZodIssueCode.too_big:
					message =
						"array" === issue.type
							? `Array must contain ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "at most"
										: "less than"
							  } ${issue.maximum} element(s)`
							: "string" === issue.type
							? `String must contain ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "at most"
										: "under"
							  } ${issue.maximum} character(s)`
							: "number" === issue.type
							? `Number must be ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "less than or equal to"
										: "less than"
							  } ${issue.maximum}`
							: "bigint" === issue.type
							? `BigInt must be ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "less than or equal to"
										: "less than"
							  } ${issue.maximum}`
							: "date" === issue.type
							? `Date must be ${
									issue.exact
										? "exactly"
										: issue.inclusive
										? "smaller than or equal to"
										: "smaller than"
							  } ${new Date(Number(issue.maximum))}`
							: "Invalid input"
					break
				case ZodIssueCode.custom:
					message = "Invalid input"
					break
				case ZodIssueCode.invalid_intersection_types:
					message = "Intersection results could not be merged"
					break
				case ZodIssueCode.not_multiple_of:
					message = `Number must be a multiple of ${issue.multipleOf}`
					break
				case ZodIssueCode.not_finite:
					message = "Number must be finite"
					break
				default:
					message = _ctx.defaultError
					util.assertNever(issue)
			}
			return { message }
		}
		let overrideErrorMap = errorMap
		function getErrorMap() {
			return overrideErrorMap
		}
		const makeIssue = params => {
			const { data, path, errorMaps, issueData } = params,
				fullPath = [...path, ...(issueData.path || [])],
				fullIssue = { ...issueData, path: fullPath }
			let errorMessage = ""
			const maps = errorMaps
				.filter(m => !!m)
				.slice()
				.reverse()
			for (const map of maps)
				errorMessage = map(fullIssue, {
					data,
					defaultError: errorMessage,
				}).message
			return {
				...issueData,
				path: fullPath,
				message: issueData.message || errorMessage,
			}
		}
		function addIssueToContext(ctx, issueData) {
			const issue = makeIssue({
				issueData,
				data: ctx.data,
				path: ctx.path,
				errorMaps: [
					ctx.common.contextualErrorMap,
					ctx.schemaErrorMap,
					getErrorMap(),
					errorMap,
				].filter(x => !!x),
			})
			ctx.common.issues.push(issue)
		}
		class ParseStatus {
			constructor() {
				this.value = "valid"
			}
			dirty() {
				"valid" === this.value && (this.value = "dirty")
			}
			abort() {
				"aborted" !== this.value && (this.value = "aborted")
			}
			static mergeArray(status, results) {
				const arrayValue = []
				for (const s of results) {
					if ("aborted" === s.status) return INVALID
					"dirty" === s.status && status.dirty()
					arrayValue.push(s.value)
				}
				return { status: status.value, value: arrayValue }
			}
			static async mergeObjectAsync(status, pairs) {
				const syncPairs = []
				for (const pair of pairs)
					syncPairs.push({ key: await pair.key, value: await pair.value })
				return ParseStatus.mergeObjectSync(status, syncPairs)
			}
			static mergeObjectSync(status, pairs) {
				const finalObject = {}
				for (const pair of pairs) {
					const { key, value } = pair
					if ("aborted" === key.status) return INVALID
					if ("aborted" === value.status) return INVALID
					"dirty" === key.status && status.dirty()
					"dirty" === value.status && status.dirty()
					;(void 0 !== value.value || pair.alwaysSet) &&
						(finalObject[key.value] = value.value)
				}
				return { status: status.value, value: finalObject }
			}
		}
		const INVALID = Object.freeze({ status: "aborted" }),
			DIRTY = value => ({ status: "dirty", value }),
			OK = value => ({ status: "valid", value }),
			isAborted = x => "aborted" === x.status,
			isDirty = x => "dirty" === x.status,
			isValid = x => "valid" === x.status,
			isAsync = x => "undefined" != typeof Promise && x instanceof Promise
		var errorUtil
		!(function (errorUtil) {
			errorUtil.errToObj = message =>
				"string" == typeof message ? { message } : message || {}
			errorUtil.toString = message =>
				"string" == typeof message
					? message
					: null == message
					? void 0
					: message.message
		})(errorUtil || (errorUtil = {}))
		class ParseInputLazyPath {
			constructor(parent, value, path, key) {
				this._cachedPath = []
				this.parent = parent
				this.data = value
				this._path = path
				this._key = key
			}
			get path() {
				this._cachedPath.length ||
					(this._key instanceof Array
						? this._cachedPath.push(...this._path, ...this._key)
						: this._cachedPath.push(...this._path, this._key))
				return this._cachedPath
			}
		}
		const handleResult = (ctx, result) => {
			if (isValid(result)) return { success: !0, data: result.value }
			if (!ctx.common.issues.length)
				throw new Error("Validation failed but no issues detected.")
			return {
				success: !1,
				get error() {
					if (this._error) return this._error
					const error = new ZodError(ctx.common.issues)
					this._error = error
					return this._error
				},
			}
		}
		function processCreateParams(params) {
			if (!params) return {}
			const { errorMap, invalid_type_error, required_error, description } =
				params
			if (errorMap && (invalid_type_error || required_error))
				throw new Error(
					'Can\'t use "invalid_type_error" or "required_error" in conjunction with custom error map.'
				)
			return errorMap
				? { errorMap, description }
				: {
						errorMap: (iss, ctx) =>
							"invalid_type" !== iss.code
								? { message: ctx.defaultError }
								: void 0 === ctx.data
								? {
										message:
											null != required_error
												? required_error
												: ctx.defaultError,
								  }
								: {
										message:
											null != invalid_type_error
												? invalid_type_error
												: ctx.defaultError,
								  },
						description,
				  }
		}
		class ZodType {
			constructor(def) {
				this.spa = this.safeParseAsync
				this._def = def
				this.parse = this.parse.bind(this)
				this.safeParse = this.safeParse.bind(this)
				this.parseAsync = this.parseAsync.bind(this)
				this.safeParseAsync = this.safeParseAsync.bind(this)
				this.spa = this.spa.bind(this)
				this.refine = this.refine.bind(this)
				this.refinement = this.refinement.bind(this)
				this.superRefine = this.superRefine.bind(this)
				this.optional = this.optional.bind(this)
				this.nullable = this.nullable.bind(this)
				this.nullish = this.nullish.bind(this)
				this.array = this.array.bind(this)
				this.promise = this.promise.bind(this)
				this.or = this.or.bind(this)
				this.and = this.and.bind(this)
				this.transform = this.transform.bind(this)
				this.brand = this.brand.bind(this)
				this.default = this.default.bind(this)
				this.catch = this.catch.bind(this)
				this.describe = this.describe.bind(this)
				this.pipe = this.pipe.bind(this)
				this.isNullable = this.isNullable.bind(this)
				this.isOptional = this.isOptional.bind(this)
			}
			get description() {
				return this._def.description
			}
			_getType(input) {
				return getParsedType(input.data)
			}
			_getOrReturnCtx(input, ctx) {
				return (
					ctx || {
						common: input.parent.common,
						data: input.data,
						parsedType: getParsedType(input.data),
						schemaErrorMap: this._def.errorMap,
						path: input.path,
						parent: input.parent,
					}
				)
			}
			_processInputParams(input) {
				return {
					status: new ParseStatus(),
					ctx: {
						common: input.parent.common,
						data: input.data,
						parsedType: getParsedType(input.data),
						schemaErrorMap: this._def.errorMap,
						path: input.path,
						parent: input.parent,
					},
				}
			}
			_parseSync(input) {
				const result = this._parse(input)
				if (isAsync(result))
					throw new Error("Synchronous parse encountered promise.")
				return result
			}
			_parseAsync(input) {
				const result = this._parse(input)
				return Promise.resolve(result)
			}
			parse(data, params) {
				const result = this.safeParse(data, params)
				if (result.success) return result.data
				throw result.error
			}
			safeParse(data, params) {
				var _a
				const ctx = {
						common: {
							issues: [],
							async:
								null !== (_a = null == params ? void 0 : params.async) &&
								void 0 !== _a &&
								_a,
							contextualErrorMap: null == params ? void 0 : params.errorMap,
						},
						path: (null == params ? void 0 : params.path) || [],
						schemaErrorMap: this._def.errorMap,
						parent: null,
						data,
						parsedType: getParsedType(data),
					},
					result = this._parseSync({ data, path: ctx.path, parent: ctx })
				return handleResult(ctx, result)
			}
			async parseAsync(data, params) {
				const result = await this.safeParseAsync(data, params)
				if (result.success) return result.data
				throw result.error
			}
			async safeParseAsync(data, params) {
				const ctx = {
						common: {
							issues: [],
							contextualErrorMap: null == params ? void 0 : params.errorMap,
							async: !0,
						},
						path: (null == params ? void 0 : params.path) || [],
						schemaErrorMap: this._def.errorMap,
						parent: null,
						data,
						parsedType: getParsedType(data),
					},
					maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx }),
					result = await (isAsync(maybeAsyncResult)
						? maybeAsyncResult
						: Promise.resolve(maybeAsyncResult))
				return handleResult(ctx, result)
			}
			refine(check, message) {
				const getIssueProperties = val =>
					"string" == typeof message || void 0 === message
						? { message }
						: "function" == typeof message
						? message(val)
						: message
				return this._refinement((val, ctx) => {
					const result = check(val),
						setError = () =>
							ctx.addIssue({
								code: ZodIssueCode.custom,
								...getIssueProperties(val),
							})
					if ("undefined" != typeof Promise && result instanceof Promise)
						return result.then(data => {
							if (data) return !0
							setError()
							return !1
						})
					if (result) return !0
					setError()
					return !1
				})
			}
			refinement(check, refinementData) {
				return this._refinement((val, ctx) => {
					if (check(val)) return !0
					ctx.addIssue(
						"function" == typeof refinementData
							? refinementData(val, ctx)
							: refinementData
					)
					return !1
				})
			}
			_refinement(refinement) {
				return new ZodEffects({
					schema: this,
					typeName: ZodFirstPartyTypeKind.ZodEffects,
					effect: { type: "refinement", refinement },
				})
			}
			superRefine(refinement) {
				return this._refinement(refinement)
			}
			optional() {
				return ZodOptional.create(this, this._def)
			}
			nullable() {
				return ZodNullable.create(this, this._def)
			}
			nullish() {
				return this.nullable().optional()
			}
			array() {
				return ZodArray.create(this, this._def)
			}
			promise() {
				return ZodPromise.create(this, this._def)
			}
			or(option) {
				return ZodUnion.create([this, option], this._def)
			}
			and(incoming) {
				return ZodIntersection.create(this, incoming, this._def)
			}
			transform(transform) {
				return new ZodEffects({
					...processCreateParams(this._def),
					schema: this,
					typeName: ZodFirstPartyTypeKind.ZodEffects,
					effect: { type: "transform", transform },
				})
			}
			default(def) {
				const defaultValueFunc = "function" == typeof def ? def : () => def
				return new ZodDefault({
					...processCreateParams(this._def),
					innerType: this,
					defaultValue: defaultValueFunc,
					typeName: ZodFirstPartyTypeKind.ZodDefault,
				})
			}
			brand() {
				return new ZodBranded({
					typeName: ZodFirstPartyTypeKind.ZodBranded,
					type: this,
					...processCreateParams(this._def),
				})
			}
			catch(def) {
				const catchValueFunc = "function" == typeof def ? def : () => def
				return new ZodCatch({
					...processCreateParams(this._def),
					innerType: this,
					catchValue: catchValueFunc,
					typeName: ZodFirstPartyTypeKind.ZodCatch,
				})
			}
			describe(description) {
				return new (0, this.constructor)({ ...this._def, description })
			}
			pipe(target) {
				return ZodPipeline.create(this, target)
			}
			isOptional() {
				return this.safeParse(void 0).success
			}
			isNullable() {
				return this.safeParse(null).success
			}
		}
		const cuidRegex = /^c[^\s-]{8,}$/i,
			cuid2Regex = /^[a-z][a-z0-9]*$/,
			ulidRegex = /[0-9A-HJKMNP-TV-Z]{26}/,
			uuidRegex =
				/^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i,
			emailRegex =
				/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\])|(\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\.[A-Za-z]{2,})+))$/,
			emojiRegex = /^(\p{Extended_Pictographic}|\p{Emoji_Component})+$/u,
			ipv4Regex =
				/^(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))$/,
			ipv6Regex =
				/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/
		class ZodString extends ZodType {
			constructor() {
				super(...arguments)
				this._regex = (regex, validation, message) =>
					this.refinement(data => regex.test(data), {
						validation,
						code: ZodIssueCode.invalid_string,
						...errorUtil.errToObj(message),
					})
				this.nonempty = message => this.min(1, errorUtil.errToObj(message))
				this.trim = () =>
					new ZodString({
						...this._def,
						checks: [...this._def.checks, { kind: "trim" }],
					})
				this.toLowerCase = () =>
					new ZodString({
						...this._def,
						checks: [...this._def.checks, { kind: "toLowerCase" }],
					})
				this.toUpperCase = () =>
					new ZodString({
						...this._def,
						checks: [...this._def.checks, { kind: "toUpperCase" }],
					})
			}
			_parse(input) {
				this._def.coerce && (input.data = String(input.data))
				if (this._getType(input) !== ZodParsedType.string) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.string,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const status = new ParseStatus()
				let ctx
				for (const check of this._def.checks)
					if ("min" === check.kind) {
						if (input.data.length < check.value) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_small,
								minimum: check.value,
								type: "string",
								inclusive: !0,
								exact: !1,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("max" === check.kind) {
						if (input.data.length > check.value) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_big,
								maximum: check.value,
								type: "string",
								inclusive: !0,
								exact: !1,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("length" === check.kind) {
						const tooBig = input.data.length > check.value,
							tooSmall = input.data.length < check.value
						if (tooBig || tooSmall) {
							ctx = this._getOrReturnCtx(input, ctx)
							tooBig
								? addIssueToContext(ctx, {
										code: ZodIssueCode.too_big,
										maximum: check.value,
										type: "string",
										inclusive: !0,
										exact: !0,
										message: check.message,
								  })
								: tooSmall &&
								  addIssueToContext(ctx, {
										code: ZodIssueCode.too_small,
										minimum: check.value,
										type: "string",
										inclusive: !0,
										exact: !0,
										message: check.message,
								  })
							status.dirty()
						}
					} else if ("email" === check.kind) {
						if (!emailRegex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "email",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("emoji" === check.kind) {
						if (!emojiRegex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "emoji",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("uuid" === check.kind) {
						if (!uuidRegex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "uuid",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("cuid" === check.kind) {
						if (!cuidRegex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "cuid",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("cuid2" === check.kind) {
						if (!cuid2Regex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "cuid2",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("ulid" === check.kind) {
						if (!ulidRegex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "ulid",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("url" === check.kind)
						try {
							new URL(input.data)
						} catch (_a) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "url",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					else if ("regex" === check.kind) {
						check.regex.lastIndex = 0
						if (!check.regex.test(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "regex",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("trim" === check.kind) input.data = input.data.trim()
					else if ("includes" === check.kind) {
						if (!input.data.includes(check.value, check.position)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.invalid_string,
								validation: { includes: check.value, position: check.position },
								message: check.message,
							})
							status.dirty()
						}
					} else if ("toLowerCase" === check.kind)
						input.data = input.data.toLowerCase()
					else if ("toUpperCase" === check.kind)
						input.data = input.data.toUpperCase()
					else if ("startsWith" === check.kind) {
						if (!input.data.startsWith(check.value)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.invalid_string,
								validation: { startsWith: check.value },
								message: check.message,
							})
							status.dirty()
						}
					} else if ("endsWith" === check.kind) {
						if (!input.data.endsWith(check.value)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.invalid_string,
								validation: { endsWith: check.value },
								message: check.message,
							})
							status.dirty()
						}
					} else if ("datetime" === check.kind) {
						if (
							!(
								(args = check).precision
									? args.offset
										? new RegExp(
												`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${args.precision}}(([+-]\\d{2}(:?\\d{2})?)|Z)$`
										  )
										: new RegExp(
												`^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{${args.precision}}Z$`
										  )
									: 0 === args.precision
									? args.offset
										? new RegExp(
												"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(([+-]\\d{2}(:?\\d{2})?)|Z)$"
										  )
										: new RegExp("^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$")
									: args.offset
									? new RegExp(
											"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(([+-]\\d{2}(:?\\d{2})?)|Z)$"
									  )
									: new RegExp(
											"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$"
									  )
							).test(input.data)
						) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.invalid_string,
								validation: "datetime",
								message: check.message,
							})
							status.dirty()
						}
					} else if ("ip" === check.kind) {
						if (
							!((ip = input.data),
							(version = check.version),
							(("v4" === version || !version) && ipv4Regex.test(ip)) ||
								(("v6" === version || !version) && ipv6Regex.test(ip)))
						) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								validation: "ip",
								code: ZodIssueCode.invalid_string,
								message: check.message,
							})
							status.dirty()
						}
					} else util.assertNever(check)
				var ip, version, args
				return { status: status.value, value: input.data }
			}
			_addCheck(check) {
				return new ZodString({
					...this._def,
					checks: [...this._def.checks, check],
				})
			}
			email(message) {
				return this._addCheck({ kind: "email", ...errorUtil.errToObj(message) })
			}
			url(message) {
				return this._addCheck({ kind: "url", ...errorUtil.errToObj(message) })
			}
			emoji(message) {
				return this._addCheck({ kind: "emoji", ...errorUtil.errToObj(message) })
			}
			uuid(message) {
				return this._addCheck({ kind: "uuid", ...errorUtil.errToObj(message) })
			}
			cuid(message) {
				return this._addCheck({ kind: "cuid", ...errorUtil.errToObj(message) })
			}
			cuid2(message) {
				return this._addCheck({ kind: "cuid2", ...errorUtil.errToObj(message) })
			}
			ulid(message) {
				return this._addCheck({ kind: "ulid", ...errorUtil.errToObj(message) })
			}
			ip(options) {
				return this._addCheck({ kind: "ip", ...errorUtil.errToObj(options) })
			}
			datetime(options) {
				var _a
				return "string" == typeof options
					? this._addCheck({
							kind: "datetime",
							precision: null,
							offset: !1,
							message: options,
					  })
					: this._addCheck({
							kind: "datetime",
							precision:
								void 0 === (null == options ? void 0 : options.precision)
									? null
									: null == options
									? void 0
									: options.precision,
							offset:
								null !== (_a = null == options ? void 0 : options.offset) &&
								void 0 !== _a &&
								_a,
							...errorUtil.errToObj(null == options ? void 0 : options.message),
					  })
			}
			regex(regex, message) {
				return this._addCheck({
					kind: "regex",
					regex,
					...errorUtil.errToObj(message),
				})
			}
			includes(value, options) {
				return this._addCheck({
					kind: "includes",
					value,
					position: null == options ? void 0 : options.position,
					...errorUtil.errToObj(null == options ? void 0 : options.message),
				})
			}
			startsWith(value, message) {
				return this._addCheck({
					kind: "startsWith",
					value,
					...errorUtil.errToObj(message),
				})
			}
			endsWith(value, message) {
				return this._addCheck({
					kind: "endsWith",
					value,
					...errorUtil.errToObj(message),
				})
			}
			min(minLength, message) {
				return this._addCheck({
					kind: "min",
					value: minLength,
					...errorUtil.errToObj(message),
				})
			}
			max(maxLength, message) {
				return this._addCheck({
					kind: "max",
					value: maxLength,
					...errorUtil.errToObj(message),
				})
			}
			length(len, message) {
				return this._addCheck({
					kind: "length",
					value: len,
					...errorUtil.errToObj(message),
				})
			}
			get isDatetime() {
				return !!this._def.checks.find(ch => "datetime" === ch.kind)
			}
			get isEmail() {
				return !!this._def.checks.find(ch => "email" === ch.kind)
			}
			get isURL() {
				return !!this._def.checks.find(ch => "url" === ch.kind)
			}
			get isEmoji() {
				return !!this._def.checks.find(ch => "emoji" === ch.kind)
			}
			get isUUID() {
				return !!this._def.checks.find(ch => "uuid" === ch.kind)
			}
			get isCUID() {
				return !!this._def.checks.find(ch => "cuid" === ch.kind)
			}
			get isCUID2() {
				return !!this._def.checks.find(ch => "cuid2" === ch.kind)
			}
			get isULID() {
				return !!this._def.checks.find(ch => "ulid" === ch.kind)
			}
			get isIP() {
				return !!this._def.checks.find(ch => "ip" === ch.kind)
			}
			get minLength() {
				let min = null
				for (const ch of this._def.checks)
					"min" === ch.kind &&
						(null === min || ch.value > min) &&
						(min = ch.value)
				return min
			}
			get maxLength() {
				let max = null
				for (const ch of this._def.checks)
					"max" === ch.kind &&
						(null === max || ch.value < max) &&
						(max = ch.value)
				return max
			}
		}
		ZodString.create = params => {
			var _a
			return new ZodString({
				checks: [],
				typeName: ZodFirstPartyTypeKind.ZodString,
				coerce:
					null !== (_a = null == params ? void 0 : params.coerce) &&
					void 0 !== _a &&
					_a,
				...processCreateParams(params),
			})
		}
		function floatSafeRemainder(val, step) {
			const valDecCount = (val.toString().split(".")[1] || "").length,
				stepDecCount = (step.toString().split(".")[1] || "").length,
				decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount
			return (
				(parseInt(val.toFixed(decCount).replace(".", "")) %
					parseInt(step.toFixed(decCount).replace(".", ""))) /
				Math.pow(10, decCount)
			)
		}
		class ZodNumber extends ZodType {
			constructor() {
				super(...arguments)
				this.min = this.gte
				this.max = this.lte
				this.step = this.multipleOf
			}
			_parse(input) {
				this._def.coerce && (input.data = Number(input.data))
				if (this._getType(input) !== ZodParsedType.number) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.number,
						received: ctx.parsedType,
					})
					return INVALID
				}
				let ctx
				const status = new ParseStatus()
				for (const check of this._def.checks)
					if ("int" === check.kind) {
						if (!util.isInteger(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.invalid_type,
								expected: "integer",
								received: "float",
								message: check.message,
							})
							status.dirty()
						}
					} else if ("min" === check.kind) {
						if (
							check.inclusive
								? input.data < check.value
								: input.data <= check.value
						) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_small,
								minimum: check.value,
								type: "number",
								inclusive: check.inclusive,
								exact: !1,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("max" === check.kind) {
						if (
							check.inclusive
								? input.data > check.value
								: input.data >= check.value
						) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_big,
								maximum: check.value,
								type: "number",
								inclusive: check.inclusive,
								exact: !1,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("multipleOf" === check.kind) {
						if (0 !== floatSafeRemainder(input.data, check.value)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.not_multiple_of,
								multipleOf: check.value,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("finite" === check.kind) {
						if (!Number.isFinite(input.data)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.not_finite,
								message: check.message,
							})
							status.dirty()
						}
					} else util.assertNever(check)
				return { status: status.value, value: input.data }
			}
			gte(value, message) {
				return this.setLimit("min", value, !0, errorUtil.toString(message))
			}
			gt(value, message) {
				return this.setLimit("min", value, !1, errorUtil.toString(message))
			}
			lte(value, message) {
				return this.setLimit("max", value, !0, errorUtil.toString(message))
			}
			lt(value, message) {
				return this.setLimit("max", value, !1, errorUtil.toString(message))
			}
			setLimit(kind, value, inclusive, message) {
				return new ZodNumber({
					...this._def,
					checks: [
						...this._def.checks,
						{ kind, value, inclusive, message: errorUtil.toString(message) },
					],
				})
			}
			_addCheck(check) {
				return new ZodNumber({
					...this._def,
					checks: [...this._def.checks, check],
				})
			}
			int(message) {
				return this._addCheck({
					kind: "int",
					message: errorUtil.toString(message),
				})
			}
			positive(message) {
				return this._addCheck({
					kind: "min",
					value: 0,
					inclusive: !1,
					message: errorUtil.toString(message),
				})
			}
			negative(message) {
				return this._addCheck({
					kind: "max",
					value: 0,
					inclusive: !1,
					message: errorUtil.toString(message),
				})
			}
			nonpositive(message) {
				return this._addCheck({
					kind: "max",
					value: 0,
					inclusive: !0,
					message: errorUtil.toString(message),
				})
			}
			nonnegative(message) {
				return this._addCheck({
					kind: "min",
					value: 0,
					inclusive: !0,
					message: errorUtil.toString(message),
				})
			}
			multipleOf(value, message) {
				return this._addCheck({
					kind: "multipleOf",
					value,
					message: errorUtil.toString(message),
				})
			}
			finite(message) {
				return this._addCheck({
					kind: "finite",
					message: errorUtil.toString(message),
				})
			}
			safe(message) {
				return this._addCheck({
					kind: "min",
					inclusive: !0,
					value: Number.MIN_SAFE_INTEGER,
					message: errorUtil.toString(message),
				})._addCheck({
					kind: "max",
					inclusive: !0,
					value: Number.MAX_SAFE_INTEGER,
					message: errorUtil.toString(message),
				})
			}
			get minValue() {
				let min = null
				for (const ch of this._def.checks)
					"min" === ch.kind &&
						(null === min || ch.value > min) &&
						(min = ch.value)
				return min
			}
			get maxValue() {
				let max = null
				for (const ch of this._def.checks)
					"max" === ch.kind &&
						(null === max || ch.value < max) &&
						(max = ch.value)
				return max
			}
			get isInt() {
				return !!this._def.checks.find(
					ch =>
						"int" === ch.kind ||
						("multipleOf" === ch.kind && util.isInteger(ch.value))
				)
			}
			get isFinite() {
				let max = null,
					min = null
				for (const ch of this._def.checks) {
					if (
						"finite" === ch.kind ||
						"int" === ch.kind ||
						"multipleOf" === ch.kind
					)
						return !0
					"min" === ch.kind
						? (null === min || ch.value > min) && (min = ch.value)
						: "max" === ch.kind &&
						  (null === max || ch.value < max) &&
						  (max = ch.value)
				}
				return Number.isFinite(min) && Number.isFinite(max)
			}
		}
		ZodNumber.create = params =>
			new ZodNumber({
				checks: [],
				typeName: ZodFirstPartyTypeKind.ZodNumber,
				coerce: (null == params ? void 0 : params.coerce) || !1,
				...processCreateParams(params),
			})
		class ZodBigInt extends ZodType {
			constructor() {
				super(...arguments)
				this.min = this.gte
				this.max = this.lte
			}
			_parse(input) {
				this._def.coerce && (input.data = BigInt(input.data))
				if (this._getType(input) !== ZodParsedType.bigint) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.bigint,
						received: ctx.parsedType,
					})
					return INVALID
				}
				let ctx
				const status = new ParseStatus()
				for (const check of this._def.checks)
					if ("min" === check.kind) {
						if (
							check.inclusive
								? input.data < check.value
								: input.data <= check.value
						) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_small,
								type: "bigint",
								minimum: check.value,
								inclusive: check.inclusive,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("max" === check.kind) {
						if (
							check.inclusive
								? input.data > check.value
								: input.data >= check.value
						) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_big,
								type: "bigint",
								maximum: check.value,
								inclusive: check.inclusive,
								message: check.message,
							})
							status.dirty()
						}
					} else if ("multipleOf" === check.kind) {
						if (input.data % check.value !== BigInt(0)) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.not_multiple_of,
								multipleOf: check.value,
								message: check.message,
							})
							status.dirty()
						}
					} else util.assertNever(check)
				return { status: status.value, value: input.data }
			}
			gte(value, message) {
				return this.setLimit("min", value, !0, errorUtil.toString(message))
			}
			gt(value, message) {
				return this.setLimit("min", value, !1, errorUtil.toString(message))
			}
			lte(value, message) {
				return this.setLimit("max", value, !0, errorUtil.toString(message))
			}
			lt(value, message) {
				return this.setLimit("max", value, !1, errorUtil.toString(message))
			}
			setLimit(kind, value, inclusive, message) {
				return new ZodBigInt({
					...this._def,
					checks: [
						...this._def.checks,
						{ kind, value, inclusive, message: errorUtil.toString(message) },
					],
				})
			}
			_addCheck(check) {
				return new ZodBigInt({
					...this._def,
					checks: [...this._def.checks, check],
				})
			}
			positive(message) {
				return this._addCheck({
					kind: "min",
					value: BigInt(0),
					inclusive: !1,
					message: errorUtil.toString(message),
				})
			}
			negative(message) {
				return this._addCheck({
					kind: "max",
					value: BigInt(0),
					inclusive: !1,
					message: errorUtil.toString(message),
				})
			}
			nonpositive(message) {
				return this._addCheck({
					kind: "max",
					value: BigInt(0),
					inclusive: !0,
					message: errorUtil.toString(message),
				})
			}
			nonnegative(message) {
				return this._addCheck({
					kind: "min",
					value: BigInt(0),
					inclusive: !0,
					message: errorUtil.toString(message),
				})
			}
			multipleOf(value, message) {
				return this._addCheck({
					kind: "multipleOf",
					value,
					message: errorUtil.toString(message),
				})
			}
			get minValue() {
				let min = null
				for (const ch of this._def.checks)
					"min" === ch.kind &&
						(null === min || ch.value > min) &&
						(min = ch.value)
				return min
			}
			get maxValue() {
				let max = null
				for (const ch of this._def.checks)
					"max" === ch.kind &&
						(null === max || ch.value < max) &&
						(max = ch.value)
				return max
			}
		}
		ZodBigInt.create = params => {
			var _a
			return new ZodBigInt({
				checks: [],
				typeName: ZodFirstPartyTypeKind.ZodBigInt,
				coerce:
					null !== (_a = null == params ? void 0 : params.coerce) &&
					void 0 !== _a &&
					_a,
				...processCreateParams(params),
			})
		}
		class ZodBoolean extends ZodType {
			_parse(input) {
				this._def.coerce && (input.data = Boolean(input.data))
				if (this._getType(input) !== ZodParsedType.boolean) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.boolean,
						received: ctx.parsedType,
					})
					return INVALID
				}
				return OK(input.data)
			}
		}
		ZodBoolean.create = params =>
			new ZodBoolean({
				typeName: ZodFirstPartyTypeKind.ZodBoolean,
				coerce: (null == params ? void 0 : params.coerce) || !1,
				...processCreateParams(params),
			})
		class ZodDate extends ZodType {
			_parse(input) {
				this._def.coerce && (input.data = new Date(input.data))
				if (this._getType(input) !== ZodParsedType.date) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.date,
						received: ctx.parsedType,
					})
					return INVALID
				}
				if (isNaN(input.data.getTime())) {
					addIssueToContext(this._getOrReturnCtx(input), {
						code: ZodIssueCode.invalid_date,
					})
					return INVALID
				}
				const status = new ParseStatus()
				let ctx
				for (const check of this._def.checks)
					if ("min" === check.kind) {
						if (input.data.getTime() < check.value) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_small,
								message: check.message,
								inclusive: !0,
								exact: !1,
								minimum: check.value,
								type: "date",
							})
							status.dirty()
						}
					} else if ("max" === check.kind) {
						if (input.data.getTime() > check.value) {
							ctx = this._getOrReturnCtx(input, ctx)
							addIssueToContext(ctx, {
								code: ZodIssueCode.too_big,
								message: check.message,
								inclusive: !0,
								exact: !1,
								maximum: check.value,
								type: "date",
							})
							status.dirty()
						}
					} else util.assertNever(check)
				return { status: status.value, value: new Date(input.data.getTime()) }
			}
			_addCheck(check) {
				return new ZodDate({
					...this._def,
					checks: [...this._def.checks, check],
				})
			}
			min(minDate, message) {
				return this._addCheck({
					kind: "min",
					value: minDate.getTime(),
					message: errorUtil.toString(message),
				})
			}
			max(maxDate, message) {
				return this._addCheck({
					kind: "max",
					value: maxDate.getTime(),
					message: errorUtil.toString(message),
				})
			}
			get minDate() {
				let min = null
				for (const ch of this._def.checks)
					"min" === ch.kind &&
						(null === min || ch.value > min) &&
						(min = ch.value)
				return null != min ? new Date(min) : null
			}
			get maxDate() {
				let max = null
				for (const ch of this._def.checks)
					"max" === ch.kind &&
						(null === max || ch.value < max) &&
						(max = ch.value)
				return null != max ? new Date(max) : null
			}
		}
		ZodDate.create = params =>
			new ZodDate({
				checks: [],
				coerce: (null == params ? void 0 : params.coerce) || !1,
				typeName: ZodFirstPartyTypeKind.ZodDate,
				...processCreateParams(params),
			})
		class ZodSymbol extends ZodType {
			_parse(input) {
				if (this._getType(input) !== ZodParsedType.symbol) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.symbol,
						received: ctx.parsedType,
					})
					return INVALID
				}
				return OK(input.data)
			}
		}
		ZodSymbol.create = params =>
			new ZodSymbol({
				typeName: ZodFirstPartyTypeKind.ZodSymbol,
				...processCreateParams(params),
			})
		class ZodUndefined extends ZodType {
			_parse(input) {
				if (this._getType(input) !== ZodParsedType.undefined) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.undefined,
						received: ctx.parsedType,
					})
					return INVALID
				}
				return OK(input.data)
			}
		}
		ZodUndefined.create = params =>
			new ZodUndefined({
				typeName: ZodFirstPartyTypeKind.ZodUndefined,
				...processCreateParams(params),
			})
		class ZodNull extends ZodType {
			_parse(input) {
				if (this._getType(input) !== ZodParsedType.null) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.null,
						received: ctx.parsedType,
					})
					return INVALID
				}
				return OK(input.data)
			}
		}
		ZodNull.create = params =>
			new ZodNull({
				typeName: ZodFirstPartyTypeKind.ZodNull,
				...processCreateParams(params),
			})
		class ZodAny extends ZodType {
			constructor() {
				super(...arguments)
				this._any = !0
			}
			_parse(input) {
				return OK(input.data)
			}
		}
		ZodAny.create = params =>
			new ZodAny({
				typeName: ZodFirstPartyTypeKind.ZodAny,
				...processCreateParams(params),
			})
		class ZodUnknown extends ZodType {
			constructor() {
				super(...arguments)
				this._unknown = !0
			}
			_parse(input) {
				return OK(input.data)
			}
		}
		ZodUnknown.create = params =>
			new ZodUnknown({
				typeName: ZodFirstPartyTypeKind.ZodUnknown,
				...processCreateParams(params),
			})
		class ZodNever extends ZodType {
			_parse(input) {
				const ctx = this._getOrReturnCtx(input)
				addIssueToContext(ctx, {
					code: ZodIssueCode.invalid_type,
					expected: ZodParsedType.never,
					received: ctx.parsedType,
				})
				return INVALID
			}
		}
		ZodNever.create = params =>
			new ZodNever({
				typeName: ZodFirstPartyTypeKind.ZodNever,
				...processCreateParams(params),
			})
		class ZodVoid extends ZodType {
			_parse(input) {
				if (this._getType(input) !== ZodParsedType.undefined) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.void,
						received: ctx.parsedType,
					})
					return INVALID
				}
				return OK(input.data)
			}
		}
		ZodVoid.create = params =>
			new ZodVoid({
				typeName: ZodFirstPartyTypeKind.ZodVoid,
				...processCreateParams(params),
			})
		class ZodArray extends ZodType {
			_parse(input) {
				const { ctx, status } = this._processInputParams(input),
					def = this._def
				if (ctx.parsedType !== ZodParsedType.array) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.array,
						received: ctx.parsedType,
					})
					return INVALID
				}
				if (null !== def.exactLength) {
					const tooBig = ctx.data.length > def.exactLength.value,
						tooSmall = ctx.data.length < def.exactLength.value
					if (tooBig || tooSmall) {
						addIssueToContext(ctx, {
							code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,
							minimum: tooSmall ? def.exactLength.value : void 0,
							maximum: tooBig ? def.exactLength.value : void 0,
							type: "array",
							inclusive: !0,
							exact: !0,
							message: def.exactLength.message,
						})
						status.dirty()
					}
				}
				if (null !== def.minLength && ctx.data.length < def.minLength.value) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.too_small,
						minimum: def.minLength.value,
						type: "array",
						inclusive: !0,
						exact: !1,
						message: def.minLength.message,
					})
					status.dirty()
				}
				if (null !== def.maxLength && ctx.data.length > def.maxLength.value) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.too_big,
						maximum: def.maxLength.value,
						type: "array",
						inclusive: !0,
						exact: !1,
						message: def.maxLength.message,
					})
					status.dirty()
				}
				if (ctx.common.async)
					return Promise.all(
						[...ctx.data].map((item, i) =>
							def.type._parseAsync(
								new ParseInputLazyPath(ctx, item, ctx.path, i)
							)
						)
					).then(result => ParseStatus.mergeArray(status, result))
				const result = [...ctx.data].map((item, i) =>
					def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i))
				)
				return ParseStatus.mergeArray(status, result)
			}
			get element() {
				return this._def.type
			}
			min(minLength, message) {
				return new ZodArray({
					...this._def,
					minLength: { value: minLength, message: errorUtil.toString(message) },
				})
			}
			max(maxLength, message) {
				return new ZodArray({
					...this._def,
					maxLength: { value: maxLength, message: errorUtil.toString(message) },
				})
			}
			length(len, message) {
				return new ZodArray({
					...this._def,
					exactLength: { value: len, message: errorUtil.toString(message) },
				})
			}
			nonempty(message) {
				return this.min(1, message)
			}
		}
		ZodArray.create = (schema, params) =>
			new ZodArray({
				type: schema,
				minLength: null,
				maxLength: null,
				exactLength: null,
				typeName: ZodFirstPartyTypeKind.ZodArray,
				...processCreateParams(params),
			})
		function deepPartialify(schema) {
			if (schema instanceof ZodObject) {
				const newShape = {}
				for (const key in schema.shape) {
					const fieldSchema = schema.shape[key]
					newShape[key] = ZodOptional.create(deepPartialify(fieldSchema))
				}
				return new ZodObject({ ...schema._def, shape: () => newShape })
			}
			return schema instanceof ZodArray
				? new ZodArray({ ...schema._def, type: deepPartialify(schema.element) })
				: schema instanceof ZodOptional
				? ZodOptional.create(deepPartialify(schema.unwrap()))
				: schema instanceof ZodNullable
				? ZodNullable.create(deepPartialify(schema.unwrap()))
				: schema instanceof ZodTuple
				? ZodTuple.create(schema.items.map(item => deepPartialify(item)))
				: schema
		}
		class ZodObject extends ZodType {
			constructor() {
				super(...arguments)
				this._cached = null
				this.nonstrict = this.passthrough
				this.augment = this.extend
			}
			_getCached() {
				if (null !== this._cached) return this._cached
				const shape = this._def.shape(),
					keys = util.objectKeys(shape)
				return (this._cached = { shape, keys })
			}
			_parse(input) {
				if (this._getType(input) !== ZodParsedType.object) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.object,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const { status, ctx } = this._processInputParams(input),
					{ shape, keys: shapeKeys } = this._getCached(),
					extraKeys = []
				if (
					!(
						this._def.catchall instanceof ZodNever &&
						"strip" === this._def.unknownKeys
					)
				)
					for (const key in ctx.data)
						shapeKeys.includes(key) || extraKeys.push(key)
				const pairs = []
				for (const key of shapeKeys) {
					const keyValidator = shape[key],
						value = ctx.data[key]
					pairs.push({
						key: { status: "valid", value: key },
						value: keyValidator._parse(
							new ParseInputLazyPath(ctx, value, ctx.path, key)
						),
						alwaysSet: key in ctx.data,
					})
				}
				if (this._def.catchall instanceof ZodNever) {
					const unknownKeys = this._def.unknownKeys
					if ("passthrough" === unknownKeys)
						for (const key of extraKeys)
							pairs.push({
								key: { status: "valid", value: key },
								value: { status: "valid", value: ctx.data[key] },
							})
					else if ("strict" === unknownKeys) {
						if (extraKeys.length > 0) {
							addIssueToContext(ctx, {
								code: ZodIssueCode.unrecognized_keys,
								keys: extraKeys,
							})
							status.dirty()
						}
					} else if ("strip" !== unknownKeys)
						throw new Error(
							"Internal ZodObject error: invalid unknownKeys value."
						)
				} else {
					const catchall = this._def.catchall
					for (const key of extraKeys) {
						const value = ctx.data[key]
						pairs.push({
							key: { status: "valid", value: key },
							value: catchall._parse(
								new ParseInputLazyPath(ctx, value, ctx.path, key)
							),
							alwaysSet: key in ctx.data,
						})
					}
				}
				return ctx.common.async
					? Promise.resolve()
							.then(async () => {
								const syncPairs = []
								for (const pair of pairs) {
									const key = await pair.key
									syncPairs.push({
										key,
										value: await pair.value,
										alwaysSet: pair.alwaysSet,
									})
								}
								return syncPairs
							})
							.then(syncPairs => ParseStatus.mergeObjectSync(status, syncPairs))
					: ParseStatus.mergeObjectSync(status, pairs)
			}
			get shape() {
				return this._def.shape()
			}
			strict(message) {
				errorUtil.errToObj
				return new ZodObject({
					...this._def,
					unknownKeys: "strict",
					...(void 0 !== message
						? {
								errorMap: (issue, ctx) => {
									var _a, _b, _c, _d
									const defaultError =
										null !==
											(_c =
												null === (_b = (_a = this._def).errorMap) ||
												void 0 === _b
													? void 0
													: _b.call(_a, issue, ctx).message) && void 0 !== _c
											? _c
											: ctx.defaultError
									return "unrecognized_keys" === issue.code
										? {
												message:
													null !== (_d = errorUtil.errToObj(message).message) &&
													void 0 !== _d
														? _d
														: defaultError,
										  }
										: { message: defaultError }
								},
						  }
						: {}),
				})
			}
			strip() {
				return new ZodObject({ ...this._def, unknownKeys: "strip" })
			}
			passthrough() {
				return new ZodObject({ ...this._def, unknownKeys: "passthrough" })
			}
			extend(augmentation) {
				return new ZodObject({
					...this._def,
					shape: () => ({ ...this._def.shape(), ...augmentation }),
				})
			}
			merge(merging) {
				return new ZodObject({
					unknownKeys: merging._def.unknownKeys,
					catchall: merging._def.catchall,
					shape: () => ({ ...this._def.shape(), ...merging._def.shape() }),
					typeName: ZodFirstPartyTypeKind.ZodObject,
				})
			}
			setKey(key, schema) {
				return this.augment({ [key]: schema })
			}
			catchall(index) {
				return new ZodObject({ ...this._def, catchall: index })
			}
			pick(mask) {
				const shape = {}
				util.objectKeys(mask).forEach(key => {
					mask[key] && this.shape[key] && (shape[key] = this.shape[key])
				})
				return new ZodObject({ ...this._def, shape: () => shape })
			}
			omit(mask) {
				const shape = {}
				util.objectKeys(this.shape).forEach(key => {
					mask[key] || (shape[key] = this.shape[key])
				})
				return new ZodObject({ ...this._def, shape: () => shape })
			}
			deepPartial() {
				return deepPartialify(this)
			}
			partial(mask) {
				const newShape = {}
				util.objectKeys(this.shape).forEach(key => {
					const fieldSchema = this.shape[key]
					mask && !mask[key]
						? (newShape[key] = fieldSchema)
						: (newShape[key] = fieldSchema.optional())
				})
				return new ZodObject({ ...this._def, shape: () => newShape })
			}
			required(mask) {
				const newShape = {}
				util.objectKeys(this.shape).forEach(key => {
					if (mask && !mask[key]) newShape[key] = this.shape[key]
					else {
						let newField = this.shape[key]
						for (; newField instanceof ZodOptional; )
							newField = newField._def.innerType
						newShape[key] = newField
					}
				})
				return new ZodObject({ ...this._def, shape: () => newShape })
			}
			keyof() {
				return createZodEnum(util.objectKeys(this.shape))
			}
		}
		ZodObject.create = (shape, params) =>
			new ZodObject({
				shape: () => shape,
				unknownKeys: "strip",
				catchall: ZodNever.create(),
				typeName: ZodFirstPartyTypeKind.ZodObject,
				...processCreateParams(params),
			})
		ZodObject.strictCreate = (shape, params) =>
			new ZodObject({
				shape: () => shape,
				unknownKeys: "strict",
				catchall: ZodNever.create(),
				typeName: ZodFirstPartyTypeKind.ZodObject,
				...processCreateParams(params),
			})
		ZodObject.lazycreate = (shape, params) =>
			new ZodObject({
				shape,
				unknownKeys: "strip",
				catchall: ZodNever.create(),
				typeName: ZodFirstPartyTypeKind.ZodObject,
				...processCreateParams(params),
			})
		class ZodUnion extends ZodType {
			_parse(input) {
				const { ctx } = this._processInputParams(input),
					options = this._def.options
				if (ctx.common.async)
					return Promise.all(
						options.map(async option => {
							const childCtx = {
								...ctx,
								common: { ...ctx.common, issues: [] },
								parent: null,
							}
							return {
								result: await option._parseAsync({
									data: ctx.data,
									path: ctx.path,
									parent: childCtx,
								}),
								ctx: childCtx,
							}
						})
					).then(function (results) {
						for (const result of results)
							if ("valid" === result.result.status) return result.result
						for (const result of results)
							if ("dirty" === result.result.status) {
								ctx.common.issues.push(...result.ctx.common.issues)
								return result.result
							}
						const unionErrors = results.map(
							result => new ZodError(result.ctx.common.issues)
						)
						addIssueToContext(ctx, {
							code: ZodIssueCode.invalid_union,
							unionErrors,
						})
						return INVALID
					})
				{
					let dirty
					const issues = []
					for (const option of options) {
						const childCtx = {
								...ctx,
								common: { ...ctx.common, issues: [] },
								parent: null,
							},
							result = option._parseSync({
								data: ctx.data,
								path: ctx.path,
								parent: childCtx,
							})
						if ("valid" === result.status) return result
						"dirty" !== result.status ||
							dirty ||
							(dirty = { result, ctx: childCtx })
						childCtx.common.issues.length && issues.push(childCtx.common.issues)
					}
					if (dirty) {
						ctx.common.issues.push(...dirty.ctx.common.issues)
						return dirty.result
					}
					const unionErrors = issues.map(issues => new ZodError(issues))
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_union,
						unionErrors,
					})
					return INVALID
				}
			}
			get options() {
				return this._def.options
			}
		}
		ZodUnion.create = (types, params) =>
			new ZodUnion({
				options: types,
				typeName: ZodFirstPartyTypeKind.ZodUnion,
				...processCreateParams(params),
			})
		const getDiscriminator = type =>
			type instanceof ZodLazy
				? getDiscriminator(type.schema)
				: type instanceof ZodEffects
				? getDiscriminator(type.innerType())
				: type instanceof ZodLiteral
				? [type.value]
				: type instanceof ZodEnum
				? type.options
				: type instanceof ZodNativeEnum
				? Object.keys(type.enum)
				: type instanceof ZodDefault
				? getDiscriminator(type._def.innerType)
				: type instanceof ZodUndefined
				? [void 0]
				: type instanceof ZodNull
				? [null]
				: null
		class ZodDiscriminatedUnion extends ZodType {
			_parse(input) {
				const { ctx } = this._processInputParams(input)
				if (ctx.parsedType !== ZodParsedType.object) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.object,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const discriminator = this.discriminator,
					discriminatorValue = ctx.data[discriminator],
					option = this.optionsMap.get(discriminatorValue)
				if (!option) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_union_discriminator,
						options: Array.from(this.optionsMap.keys()),
						path: [discriminator],
					})
					return INVALID
				}
				return ctx.common.async
					? option._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })
					: option._parseSync({ data: ctx.data, path: ctx.path, parent: ctx })
			}
			get discriminator() {
				return this._def.discriminator
			}
			get options() {
				return this._def.options
			}
			get optionsMap() {
				return this._def.optionsMap
			}
			static create(discriminator, options, params) {
				const optionsMap = new Map()
				for (const type of options) {
					const discriminatorValues = getDiscriminator(
						type.shape[discriminator]
					)
					if (!discriminatorValues)
						throw new Error(
							`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`
						)
					for (const value of discriminatorValues) {
						if (optionsMap.has(value))
							throw new Error(
								`Discriminator property ${String(
									discriminator
								)} has duplicate value ${String(value)}`
							)
						optionsMap.set(value, type)
					}
				}
				return new ZodDiscriminatedUnion({
					typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,
					discriminator,
					options,
					optionsMap,
					...processCreateParams(params),
				})
			}
		}
		function mergeValues(a, b) {
			const aType = getParsedType(a),
				bType = getParsedType(b)
			if (a === b) return { valid: !0, data: a }
			if (aType === ZodParsedType.object && bType === ZodParsedType.object) {
				const bKeys = util.objectKeys(b),
					sharedKeys = util
						.objectKeys(a)
						.filter(key => -1 !== bKeys.indexOf(key)),
					newObj = { ...a, ...b }
				for (const key of sharedKeys) {
					const sharedValue = mergeValues(a[key], b[key])
					if (!sharedValue.valid) return { valid: !1 }
					newObj[key] = sharedValue.data
				}
				return { valid: !0, data: newObj }
			}
			if (aType === ZodParsedType.array && bType === ZodParsedType.array) {
				if (a.length !== b.length) return { valid: !1 }
				const newArray = []
				for (let index = 0; index < a.length; index++) {
					const sharedValue = mergeValues(a[index], b[index])
					if (!sharedValue.valid) return { valid: !1 }
					newArray.push(sharedValue.data)
				}
				return { valid: !0, data: newArray }
			}
			return aType === ZodParsedType.date &&
				bType === ZodParsedType.date &&
				+a == +b
				? { valid: !0, data: a }
				: { valid: !1 }
		}
		class ZodIntersection extends ZodType {
			_parse(input) {
				const { status, ctx } = this._processInputParams(input),
					handleParsed = (parsedLeft, parsedRight) => {
						if (isAborted(parsedLeft) || isAborted(parsedRight)) return INVALID
						const merged = mergeValues(parsedLeft.value, parsedRight.value)
						if (!merged.valid) {
							addIssueToContext(ctx, {
								code: ZodIssueCode.invalid_intersection_types,
							})
							return INVALID
						}
						;(isDirty(parsedLeft) || isDirty(parsedRight)) && status.dirty()
						return { status: status.value, value: merged.data }
					}
				return ctx.common.async
					? Promise.all([
							this._def.left._parseAsync({
								data: ctx.data,
								path: ctx.path,
								parent: ctx,
							}),
							this._def.right._parseAsync({
								data: ctx.data,
								path: ctx.path,
								parent: ctx,
							}),
					  ]).then(([left, right]) => handleParsed(left, right))
					: handleParsed(
							this._def.left._parseSync({
								data: ctx.data,
								path: ctx.path,
								parent: ctx,
							}),
							this._def.right._parseSync({
								data: ctx.data,
								path: ctx.path,
								parent: ctx,
							})
					  )
			}
		}
		ZodIntersection.create = (left, right, params) =>
			new ZodIntersection({
				left,
				right,
				typeName: ZodFirstPartyTypeKind.ZodIntersection,
				...processCreateParams(params),
			})
		class ZodTuple extends ZodType {
			_parse(input) {
				const { status, ctx } = this._processInputParams(input)
				if (ctx.parsedType !== ZodParsedType.array) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.array,
						received: ctx.parsedType,
					})
					return INVALID
				}
				if (ctx.data.length < this._def.items.length) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.too_small,
						minimum: this._def.items.length,
						inclusive: !0,
						exact: !1,
						type: "array",
					})
					return INVALID
				}
				if (!this._def.rest && ctx.data.length > this._def.items.length) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.too_big,
						maximum: this._def.items.length,
						inclusive: !0,
						exact: !1,
						type: "array",
					})
					status.dirty()
				}
				const items = [...ctx.data]
					.map((item, itemIndex) => {
						const schema = this._def.items[itemIndex] || this._def.rest
						return schema
							? schema._parse(
									new ParseInputLazyPath(ctx, item, ctx.path, itemIndex)
							  )
							: null
					})
					.filter(x => !!x)
				return ctx.common.async
					? Promise.all(items).then(results =>
							ParseStatus.mergeArray(status, results)
					  )
					: ParseStatus.mergeArray(status, items)
			}
			get items() {
				return this._def.items
			}
			rest(rest) {
				return new ZodTuple({ ...this._def, rest })
			}
		}
		ZodTuple.create = (schemas, params) => {
			if (!Array.isArray(schemas))
				throw new Error("You must pass an array of schemas to z.tuple([ ... ])")
			return new ZodTuple({
				items: schemas,
				typeName: ZodFirstPartyTypeKind.ZodTuple,
				rest: null,
				...processCreateParams(params),
			})
		}
		class ZodRecord extends ZodType {
			get keySchema() {
				return this._def.keyType
			}
			get valueSchema() {
				return this._def.valueType
			}
			_parse(input) {
				const { status, ctx } = this._processInputParams(input)
				if (ctx.parsedType !== ZodParsedType.object) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.object,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const pairs = [],
					keyType = this._def.keyType,
					valueType = this._def.valueType
				for (const key in ctx.data)
					pairs.push({
						key: keyType._parse(
							new ParseInputLazyPath(ctx, key, ctx.path, key)
						),
						value: valueType._parse(
							new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)
						),
					})
				return ctx.common.async
					? ParseStatus.mergeObjectAsync(status, pairs)
					: ParseStatus.mergeObjectSync(status, pairs)
			}
			get element() {
				return this._def.valueType
			}
			static create(first, second, third) {
				return new ZodRecord(
					second instanceof ZodType
						? {
								keyType: first,
								valueType: second,
								typeName: ZodFirstPartyTypeKind.ZodRecord,
								...processCreateParams(third),
						  }
						: {
								keyType: ZodString.create(),
								valueType: first,
								typeName: ZodFirstPartyTypeKind.ZodRecord,
								...processCreateParams(second),
						  }
				)
			}
		}
		class ZodMap extends ZodType {
			_parse(input) {
				const { status, ctx } = this._processInputParams(input)
				if (ctx.parsedType !== ZodParsedType.map) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.map,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const keyType = this._def.keyType,
					valueType = this._def.valueType,
					pairs = [...ctx.data.entries()].map(([key, value], index) => ({
						key: keyType._parse(
							new ParseInputLazyPath(ctx, key, ctx.path, [index, "key"])
						),
						value: valueType._parse(
							new ParseInputLazyPath(ctx, value, ctx.path, [index, "value"])
						),
					}))
				if (ctx.common.async) {
					const finalMap = new Map()
					return Promise.resolve().then(async () => {
						for (const pair of pairs) {
							const key = await pair.key,
								value = await pair.value
							if ("aborted" === key.status || "aborted" === value.status)
								return INVALID
							;("dirty" !== key.status && "dirty" !== value.status) ||
								status.dirty()
							finalMap.set(key.value, value.value)
						}
						return { status: status.value, value: finalMap }
					})
				}
				{
					const finalMap = new Map()
					for (const pair of pairs) {
						const key = pair.key,
							value = pair.value
						if ("aborted" === key.status || "aborted" === value.status)
							return INVALID
						;("dirty" !== key.status && "dirty" !== value.status) ||
							status.dirty()
						finalMap.set(key.value, value.value)
					}
					return { status: status.value, value: finalMap }
				}
			}
		}
		ZodMap.create = (keyType, valueType, params) =>
			new ZodMap({
				valueType,
				keyType,
				typeName: ZodFirstPartyTypeKind.ZodMap,
				...processCreateParams(params),
			})
		class ZodSet extends ZodType {
			_parse(input) {
				const { status, ctx } = this._processInputParams(input)
				if (ctx.parsedType !== ZodParsedType.set) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.set,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const def = this._def
				if (null !== def.minSize && ctx.data.size < def.minSize.value) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.too_small,
						minimum: def.minSize.value,
						type: "set",
						inclusive: !0,
						exact: !1,
						message: def.minSize.message,
					})
					status.dirty()
				}
				if (null !== def.maxSize && ctx.data.size > def.maxSize.value) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.too_big,
						maximum: def.maxSize.value,
						type: "set",
						inclusive: !0,
						exact: !1,
						message: def.maxSize.message,
					})
					status.dirty()
				}
				const valueType = this._def.valueType
				function finalizeSet(elements) {
					const parsedSet = new Set()
					for (const element of elements) {
						if ("aborted" === element.status) return INVALID
						"dirty" === element.status && status.dirty()
						parsedSet.add(element.value)
					}
					return { status: status.value, value: parsedSet }
				}
				const elements = [...ctx.data.values()].map((item, i) =>
					valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i))
				)
				return ctx.common.async
					? Promise.all(elements).then(elements => finalizeSet(elements))
					: finalizeSet(elements)
			}
			min(minSize, message) {
				return new ZodSet({
					...this._def,
					minSize: { value: minSize, message: errorUtil.toString(message) },
				})
			}
			max(maxSize, message) {
				return new ZodSet({
					...this._def,
					maxSize: { value: maxSize, message: errorUtil.toString(message) },
				})
			}
			size(size, message) {
				return this.min(size, message).max(size, message)
			}
			nonempty(message) {
				return this.min(1, message)
			}
		}
		ZodSet.create = (valueType, params) =>
			new ZodSet({
				valueType,
				minSize: null,
				maxSize: null,
				typeName: ZodFirstPartyTypeKind.ZodSet,
				...processCreateParams(params),
			})
		class ZodFunction extends ZodType {
			constructor() {
				super(...arguments)
				this.validate = this.implement
			}
			_parse(input) {
				const { ctx } = this._processInputParams(input)
				if (ctx.parsedType !== ZodParsedType.function) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.function,
						received: ctx.parsedType,
					})
					return INVALID
				}
				function makeArgsIssue(args, error) {
					return makeIssue({
						data: args,
						path: ctx.path,
						errorMaps: [
							ctx.common.contextualErrorMap,
							ctx.schemaErrorMap,
							getErrorMap(),
							errorMap,
						].filter(x => !!x),
						issueData: {
							code: ZodIssueCode.invalid_arguments,
							argumentsError: error,
						},
					})
				}
				function makeReturnsIssue(returns, error) {
					return makeIssue({
						data: returns,
						path: ctx.path,
						errorMaps: [
							ctx.common.contextualErrorMap,
							ctx.schemaErrorMap,
							getErrorMap(),
							errorMap,
						].filter(x => !!x),
						issueData: {
							code: ZodIssueCode.invalid_return_type,
							returnTypeError: error,
						},
					})
				}
				const params = { errorMap: ctx.common.contextualErrorMap },
					fn = ctx.data
				return this._def.returns instanceof ZodPromise
					? OK(async (...args) => {
							const error = new ZodError([]),
								parsedArgs = await this._def.args
									.parseAsync(args, params)
									.catch(e => {
										error.addIssue(makeArgsIssue(args, e))
										throw error
									}),
								result = await fn(...parsedArgs)
							return await this._def.returns._def.type
								.parseAsync(result, params)
								.catch(e => {
									error.addIssue(makeReturnsIssue(result, e))
									throw error
								})
					  })
					: OK((...args) => {
							const parsedArgs = this._def.args.safeParse(args, params)
							if (!parsedArgs.success)
								throw new ZodError([makeArgsIssue(args, parsedArgs.error)])
							const result = fn(...parsedArgs.data),
								parsedReturns = this._def.returns.safeParse(result, params)
							if (!parsedReturns.success)
								throw new ZodError([
									makeReturnsIssue(result, parsedReturns.error),
								])
							return parsedReturns.data
					  })
			}
			parameters() {
				return this._def.args
			}
			returnType() {
				return this._def.returns
			}
			args(...items) {
				return new ZodFunction({
					...this._def,
					args: ZodTuple.create(items).rest(ZodUnknown.create()),
				})
			}
			returns(returnType) {
				return new ZodFunction({ ...this._def, returns: returnType })
			}
			implement(func) {
				return this.parse(func)
			}
			strictImplement(func) {
				return this.parse(func)
			}
			static create(args, returns, params) {
				return new ZodFunction({
					args: args || ZodTuple.create([]).rest(ZodUnknown.create()),
					returns: returns || ZodUnknown.create(),
					typeName: ZodFirstPartyTypeKind.ZodFunction,
					...processCreateParams(params),
				})
			}
		}
		class ZodLazy extends ZodType {
			get schema() {
				return this._def.getter()
			}
			_parse(input) {
				const { ctx } = this._processInputParams(input)
				return this._def
					.getter()
					._parse({ data: ctx.data, path: ctx.path, parent: ctx })
			}
		}
		ZodLazy.create = (getter, params) =>
			new ZodLazy({
				getter,
				typeName: ZodFirstPartyTypeKind.ZodLazy,
				...processCreateParams(params),
			})
		class ZodLiteral extends ZodType {
			_parse(input) {
				if (input.data !== this._def.value) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						received: ctx.data,
						code: ZodIssueCode.invalid_literal,
						expected: this._def.value,
					})
					return INVALID
				}
				return { status: "valid", value: input.data }
			}
			get value() {
				return this._def.value
			}
		}
		ZodLiteral.create = (value, params) =>
			new ZodLiteral({
				value,
				typeName: ZodFirstPartyTypeKind.ZodLiteral,
				...processCreateParams(params),
			})
		function createZodEnum(values, params) {
			return new ZodEnum({
				values,
				typeName: ZodFirstPartyTypeKind.ZodEnum,
				...processCreateParams(params),
			})
		}
		class ZodEnum extends ZodType {
			_parse(input) {
				if ("string" != typeof input.data) {
					const ctx = this._getOrReturnCtx(input),
						expectedValues = this._def.values
					addIssueToContext(ctx, {
						expected: util.joinValues(expectedValues),
						received: ctx.parsedType,
						code: ZodIssueCode.invalid_type,
					})
					return INVALID
				}
				if (-1 === this._def.values.indexOf(input.data)) {
					const ctx = this._getOrReturnCtx(input),
						expectedValues = this._def.values
					addIssueToContext(ctx, {
						received: ctx.data,
						code: ZodIssueCode.invalid_enum_value,
						options: expectedValues,
					})
					return INVALID
				}
				return OK(input.data)
			}
			get options() {
				return this._def.values
			}
			get enum() {
				const enumValues = {}
				for (const val of this._def.values) enumValues[val] = val
				return enumValues
			}
			get Values() {
				const enumValues = {}
				for (const val of this._def.values) enumValues[val] = val
				return enumValues
			}
			get Enum() {
				const enumValues = {}
				for (const val of this._def.values) enumValues[val] = val
				return enumValues
			}
			extract(values) {
				return ZodEnum.create(values)
			}
			exclude(values) {
				return ZodEnum.create(this.options.filter(opt => !values.includes(opt)))
			}
		}
		ZodEnum.create = createZodEnum
		class ZodNativeEnum extends ZodType {
			_parse(input) {
				const nativeEnumValues = util.getValidEnumValues(this._def.values),
					ctx = this._getOrReturnCtx(input)
				if (
					ctx.parsedType !== ZodParsedType.string &&
					ctx.parsedType !== ZodParsedType.number
				) {
					const expectedValues = util.objectValues(nativeEnumValues)
					addIssueToContext(ctx, {
						expected: util.joinValues(expectedValues),
						received: ctx.parsedType,
						code: ZodIssueCode.invalid_type,
					})
					return INVALID
				}
				if (-1 === nativeEnumValues.indexOf(input.data)) {
					const expectedValues = util.objectValues(nativeEnumValues)
					addIssueToContext(ctx, {
						received: ctx.data,
						code: ZodIssueCode.invalid_enum_value,
						options: expectedValues,
					})
					return INVALID
				}
				return OK(input.data)
			}
			get enum() {
				return this._def.values
			}
		}
		ZodNativeEnum.create = (values, params) =>
			new ZodNativeEnum({
				values,
				typeName: ZodFirstPartyTypeKind.ZodNativeEnum,
				...processCreateParams(params),
			})
		class ZodPromise extends ZodType {
			unwrap() {
				return this._def.type
			}
			_parse(input) {
				const { ctx } = this._processInputParams(input)
				if (
					ctx.parsedType !== ZodParsedType.promise &&
					!1 === ctx.common.async
				) {
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.promise,
						received: ctx.parsedType,
					})
					return INVALID
				}
				const promisified =
					ctx.parsedType === ZodParsedType.promise
						? ctx.data
						: Promise.resolve(ctx.data)
				return OK(
					promisified.then(data =>
						this._def.type.parseAsync(data, {
							path: ctx.path,
							errorMap: ctx.common.contextualErrorMap,
						})
					)
				)
			}
		}
		ZodPromise.create = (schema, params) =>
			new ZodPromise({
				type: schema,
				typeName: ZodFirstPartyTypeKind.ZodPromise,
				...processCreateParams(params),
			})
		class ZodEffects extends ZodType {
			innerType() {
				return this._def.schema
			}
			sourceType() {
				return this._def.schema._def.typeName ===
					ZodFirstPartyTypeKind.ZodEffects
					? this._def.schema.sourceType()
					: this._def.schema
			}
			_parse(input) {
				const { status, ctx } = this._processInputParams(input),
					effect = this._def.effect || null
				if ("preprocess" === effect.type) {
					const processed = effect.transform(ctx.data)
					return ctx.common.async
						? Promise.resolve(processed).then(processed =>
								this._def.schema._parseAsync({
									data: processed,
									path: ctx.path,
									parent: ctx,
								})
						  )
						: this._def.schema._parseSync({
								data: processed,
								path: ctx.path,
								parent: ctx,
						  })
				}
				const checkCtx = {
					addIssue: arg => {
						addIssueToContext(ctx, arg)
						arg.fatal ? status.abort() : status.dirty()
					},
					get path() {
						return ctx.path
					},
				}
				checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx)
				if ("refinement" === effect.type) {
					const executeRefinement = acc => {
						const result = effect.refinement(acc, checkCtx)
						if (ctx.common.async) return Promise.resolve(result)
						if (result instanceof Promise)
							throw new Error(
								"Async refinement encountered during synchronous parse operation. Use .parseAsync instead."
							)
						return acc
					}
					if (!1 === ctx.common.async) {
						const inner = this._def.schema._parseSync({
							data: ctx.data,
							path: ctx.path,
							parent: ctx,
						})
						if ("aborted" === inner.status) return INVALID
						"dirty" === inner.status && status.dirty()
						executeRefinement(inner.value)
						return { status: status.value, value: inner.value }
					}
					return this._def.schema
						._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })
						.then(inner => {
							if ("aborted" === inner.status) return INVALID
							"dirty" === inner.status && status.dirty()
							return executeRefinement(inner.value).then(() => ({
								status: status.value,
								value: inner.value,
							}))
						})
				}
				if ("transform" === effect.type) {
					if (!1 === ctx.common.async) {
						const base = this._def.schema._parseSync({
							data: ctx.data,
							path: ctx.path,
							parent: ctx,
						})
						if (!isValid(base)) return base
						const result = effect.transform(base.value, checkCtx)
						if (result instanceof Promise)
							throw new Error(
								"Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead."
							)
						return { status: status.value, value: result }
					}
					return this._def.schema
						._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })
						.then(base =>
							isValid(base)
								? Promise.resolve(effect.transform(base.value, checkCtx)).then(
										result => ({ status: status.value, value: result })
								  )
								: base
						)
				}
				util.assertNever(effect)
			}
		}
		ZodEffects.create = (schema, effect, params) =>
			new ZodEffects({
				schema,
				typeName: ZodFirstPartyTypeKind.ZodEffects,
				effect,
				...processCreateParams(params),
			})
		ZodEffects.createWithPreprocess = (preprocess, schema, params) =>
			new ZodEffects({
				schema,
				effect: { type: "preprocess", transform: preprocess },
				typeName: ZodFirstPartyTypeKind.ZodEffects,
				...processCreateParams(params),
			})
		class ZodOptional extends ZodType {
			_parse(input) {
				return this._getType(input) === ZodParsedType.undefined
					? OK(void 0)
					: this._def.innerType._parse(input)
			}
			unwrap() {
				return this._def.innerType
			}
		}
		ZodOptional.create = (type, params) =>
			new ZodOptional({
				innerType: type,
				typeName: ZodFirstPartyTypeKind.ZodOptional,
				...processCreateParams(params),
			})
		class ZodNullable extends ZodType {
			_parse(input) {
				return this._getType(input) === ZodParsedType.null
					? OK(null)
					: this._def.innerType._parse(input)
			}
			unwrap() {
				return this._def.innerType
			}
		}
		ZodNullable.create = (type, params) =>
			new ZodNullable({
				innerType: type,
				typeName: ZodFirstPartyTypeKind.ZodNullable,
				...processCreateParams(params),
			})
		class ZodDefault extends ZodType {
			_parse(input) {
				const { ctx } = this._processInputParams(input)
				let data = ctx.data
				ctx.parsedType === ZodParsedType.undefined &&
					(data = this._def.defaultValue())
				return this._def.innerType._parse({ data, path: ctx.path, parent: ctx })
			}
			removeDefault() {
				return this._def.innerType
			}
		}
		ZodDefault.create = (type, params) =>
			new ZodDefault({
				innerType: type,
				typeName: ZodFirstPartyTypeKind.ZodDefault,
				defaultValue:
					"function" == typeof params.default
						? params.default
						: () => params.default,
				...processCreateParams(params),
			})
		class ZodCatch extends ZodType {
			_parse(input) {
				const { ctx } = this._processInputParams(input),
					newCtx = { ...ctx, common: { ...ctx.common, issues: [] } },
					result = this._def.innerType._parse({
						data: newCtx.data,
						path: newCtx.path,
						parent: { ...newCtx },
					})
				return isAsync(result)
					? result.then(result => ({
							status: "valid",
							value:
								"valid" === result.status
									? result.value
									: this._def.catchValue({
											get error() {
												return new ZodError(newCtx.common.issues)
											},
											input: newCtx.data,
									  }),
					  }))
					: {
							status: "valid",
							value:
								"valid" === result.status
									? result.value
									: this._def.catchValue({
											get error() {
												return new ZodError(newCtx.common.issues)
											},
											input: newCtx.data,
									  }),
					  }
			}
			removeCatch() {
				return this._def.innerType
			}
		}
		ZodCatch.create = (type, params) =>
			new ZodCatch({
				innerType: type,
				typeName: ZodFirstPartyTypeKind.ZodCatch,
				catchValue:
					"function" == typeof params.catch ? params.catch : () => params.catch,
				...processCreateParams(params),
			})
		class ZodNaN extends ZodType {
			_parse(input) {
				if (this._getType(input) !== ZodParsedType.nan) {
					const ctx = this._getOrReturnCtx(input)
					addIssueToContext(ctx, {
						code: ZodIssueCode.invalid_type,
						expected: ZodParsedType.nan,
						received: ctx.parsedType,
					})
					return INVALID
				}
				return { status: "valid", value: input.data }
			}
		}
		ZodNaN.create = params =>
			new ZodNaN({
				typeName: ZodFirstPartyTypeKind.ZodNaN,
				...processCreateParams(params),
			})
		const BRAND = Symbol("zod_brand")
		class ZodBranded extends ZodType {
			_parse(input) {
				const { ctx } = this._processInputParams(input),
					data = ctx.data
				return this._def.type._parse({ data, path: ctx.path, parent: ctx })
			}
			unwrap() {
				return this._def.type
			}
		}
		class ZodPipeline extends ZodType {
			_parse(input) {
				const { status, ctx } = this._processInputParams(input)
				if (ctx.common.async)
					return (async () => {
						const inResult = await this._def.in._parseAsync({
							data: ctx.data,
							path: ctx.path,
							parent: ctx,
						})
						if ("aborted" === inResult.status) return INVALID
						if ("dirty" === inResult.status) {
							status.dirty()
							return DIRTY(inResult.value)
						}
						return this._def.out._parseAsync({
							data: inResult.value,
							path: ctx.path,
							parent: ctx,
						})
					})()
				{
					const inResult = this._def.in._parseSync({
						data: ctx.data,
						path: ctx.path,
						parent: ctx,
					})
					if ("aborted" === inResult.status) return INVALID
					if ("dirty" === inResult.status) {
						status.dirty()
						return { status: "dirty", value: inResult.value }
					}
					return this._def.out._parseSync({
						data: inResult.value,
						path: ctx.path,
						parent: ctx,
					})
				}
			}
			static create(a, b) {
				return new ZodPipeline({
					in: a,
					out: b,
					typeName: ZodFirstPartyTypeKind.ZodPipeline,
				})
			}
		}
		const custom = (check, params = {}, fatal) =>
				check
					? ZodAny.create().superRefine((data, ctx) => {
							var _a, _b
							if (!check(data)) {
								const p =
										"function" == typeof params
											? params(data)
											: "string" == typeof params
											? { message: params }
											: params,
									_fatal =
										null ===
											(_b =
												null !== (_a = p.fatal) && void 0 !== _a
													? _a
													: fatal) ||
										void 0 === _b ||
										_b,
									p2 = "string" == typeof p ? { message: p } : p
								ctx.addIssue({ code: "custom", ...p2, fatal: _fatal })
							}
					  })
					: ZodAny.create(),
			late = { object: ZodObject.lazycreate }
		var ZodFirstPartyTypeKind
		!(function (ZodFirstPartyTypeKind) {
			ZodFirstPartyTypeKind.ZodString = "ZodString"
			ZodFirstPartyTypeKind.ZodNumber = "ZodNumber"
			ZodFirstPartyTypeKind.ZodNaN = "ZodNaN"
			ZodFirstPartyTypeKind.ZodBigInt = "ZodBigInt"
			ZodFirstPartyTypeKind.ZodBoolean = "ZodBoolean"
			ZodFirstPartyTypeKind.ZodDate = "ZodDate"
			ZodFirstPartyTypeKind.ZodSymbol = "ZodSymbol"
			ZodFirstPartyTypeKind.ZodUndefined = "ZodUndefined"
			ZodFirstPartyTypeKind.ZodNull = "ZodNull"
			ZodFirstPartyTypeKind.ZodAny = "ZodAny"
			ZodFirstPartyTypeKind.ZodUnknown = "ZodUnknown"
			ZodFirstPartyTypeKind.ZodNever = "ZodNever"
			ZodFirstPartyTypeKind.ZodVoid = "ZodVoid"
			ZodFirstPartyTypeKind.ZodArray = "ZodArray"
			ZodFirstPartyTypeKind.ZodObject = "ZodObject"
			ZodFirstPartyTypeKind.ZodUnion = "ZodUnion"
			ZodFirstPartyTypeKind.ZodDiscriminatedUnion = "ZodDiscriminatedUnion"
			ZodFirstPartyTypeKind.ZodIntersection = "ZodIntersection"
			ZodFirstPartyTypeKind.ZodTuple = "ZodTuple"
			ZodFirstPartyTypeKind.ZodRecord = "ZodRecord"
			ZodFirstPartyTypeKind.ZodMap = "ZodMap"
			ZodFirstPartyTypeKind.ZodSet = "ZodSet"
			ZodFirstPartyTypeKind.ZodFunction = "ZodFunction"
			ZodFirstPartyTypeKind.ZodLazy = "ZodLazy"
			ZodFirstPartyTypeKind.ZodLiteral = "ZodLiteral"
			ZodFirstPartyTypeKind.ZodEnum = "ZodEnum"
			ZodFirstPartyTypeKind.ZodEffects = "ZodEffects"
			ZodFirstPartyTypeKind.ZodNativeEnum = "ZodNativeEnum"
			ZodFirstPartyTypeKind.ZodOptional = "ZodOptional"
			ZodFirstPartyTypeKind.ZodNullable = "ZodNullable"
			ZodFirstPartyTypeKind.ZodDefault = "ZodDefault"
			ZodFirstPartyTypeKind.ZodCatch = "ZodCatch"
			ZodFirstPartyTypeKind.ZodPromise = "ZodPromise"
			ZodFirstPartyTypeKind.ZodBranded = "ZodBranded"
			ZodFirstPartyTypeKind.ZodPipeline = "ZodPipeline"
		})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}))
		const stringType = ZodString.create,
			numberType = ZodNumber.create,
			nanType = ZodNaN.create,
			bigIntType = ZodBigInt.create,
			booleanType = ZodBoolean.create,
			dateType = ZodDate.create,
			symbolType = ZodSymbol.create,
			undefinedType = ZodUndefined.create,
			nullType = ZodNull.create,
			anyType = ZodAny.create,
			unknownType = ZodUnknown.create,
			neverType = ZodNever.create,
			voidType = ZodVoid.create,
			arrayType = ZodArray.create,
			objectType = ZodObject.create,
			strictObjectType = ZodObject.strictCreate,
			unionType = ZodUnion.create,
			discriminatedUnionType = ZodDiscriminatedUnion.create,
			intersectionType = ZodIntersection.create,
			tupleType = ZodTuple.create,
			recordType = ZodRecord.create,
			lib_mapType = ZodMap.create,
			setType = ZodSet.create,
			functionType = ZodFunction.create,
			lazyType = ZodLazy.create,
			literalType = ZodLiteral.create,
			enumType = ZodEnum.create,
			nativeEnumType = ZodNativeEnum.create,
			promiseType = ZodPromise.create,
			effectsType = ZodEffects.create,
			optionalType = ZodOptional.create,
			nullableType = ZodNullable.create,
			preprocessType = ZodEffects.createWithPreprocess,
			pipelineType = ZodPipeline.create,
			coerce = {
				string: arg => ZodString.create({ ...arg, coerce: !0 }),
				number: arg => ZodNumber.create({ ...arg, coerce: !0 }),
				boolean: arg => ZodBoolean.create({ ...arg, coerce: !0 }),
				bigint: arg => ZodBigInt.create({ ...arg, coerce: !0 }),
				date: arg => ZodDate.create({ ...arg, coerce: !0 }),
			},
			NEVER = INVALID
		var z = Object.freeze({
			__proto__: null,
			defaultErrorMap: errorMap,
			setErrorMap: function (map) {
				overrideErrorMap = map
			},
			getErrorMap,
			makeIssue,
			EMPTY_PATH: [],
			addIssueToContext,
			ParseStatus,
			INVALID,
			DIRTY,
			OK,
			isAborted,
			isDirty,
			isValid,
			isAsync,
			get util() {
				return util
			},
			get objectUtil() {
				return objectUtil
			},
			ZodParsedType,
			getParsedType,
			ZodType,
			ZodString,
			ZodNumber,
			ZodBigInt,
			ZodBoolean,
			ZodDate,
			ZodSymbol,
			ZodUndefined,
			ZodNull,
			ZodAny,
			ZodUnknown,
			ZodNever,
			ZodVoid,
			ZodArray,
			ZodObject,
			ZodUnion,
			ZodDiscriminatedUnion,
			ZodIntersection,
			ZodTuple,
			ZodRecord,
			ZodMap,
			ZodSet,
			ZodFunction,
			ZodLazy,
			ZodLiteral,
			ZodEnum,
			ZodNativeEnum,
			ZodPromise,
			ZodEffects,
			ZodTransformer: ZodEffects,
			ZodOptional,
			ZodNullable,
			ZodDefault,
			ZodCatch,
			ZodNaN,
			BRAND,
			ZodBranded,
			ZodPipeline,
			custom,
			Schema: ZodType,
			ZodSchema: ZodType,
			late,
			get ZodFirstPartyTypeKind() {
				return ZodFirstPartyTypeKind
			},
			coerce,
			any: anyType,
			array: arrayType,
			bigint: bigIntType,
			boolean: booleanType,
			date: dateType,
			discriminatedUnion: discriminatedUnionType,
			effect: effectsType,
			enum: enumType,
			function: functionType,
			instanceof: (
				cls,
				params = { message: `Input not instance of ${cls.name}` }
			) => custom(data => data instanceof cls, params),
			intersection: intersectionType,
			lazy: lazyType,
			literal: literalType,
			map: lib_mapType,
			nan: nanType,
			nativeEnum: nativeEnumType,
			never: neverType,
			null: nullType,
			nullable: nullableType,
			number: numberType,
			object: objectType,
			oboolean: () => booleanType().optional(),
			onumber: () => numberType().optional(),
			optional: optionalType,
			ostring: () => stringType().optional(),
			pipeline: pipelineType,
			preprocess: preprocessType,
			promise: promiseType,
			record: recordType,
			set: setType,
			strictObject: strictObjectType,
			string: stringType,
			symbol: symbolType,
			transformer: effectsType,
			tuple: tupleType,
			undefined: undefinedType,
			union: unionType,
			unknown: unknownType,
			void: voidType,
			NEVER,
			ZodIssueCode,
			quotelessJson: obj =>
				JSON.stringify(obj, null, 2).replace(/"([^"]+)":/g, "$1:"),
			ZodError,
		})
		const checkboxNode = label => c => s => {
				return ((label, checked, onchange) =>
					h(
						"div",
						{},
						h("label", {}, [
							hyperapp_text(label),
							h("input", { type: "checkbox", checked, onchange }),
						])
					))(
					getText(label)(s.lang),
					getState(label)(s),
					((key = label),
					src_flip((s, e) =>
						pipe(
							(e =>
								z.instanceof(HTMLInputElement).parse(e.currentTarget).checked)(
								e
							),
							updateAt(key),
							src_flip,
							apply(s)
						)
					))(c)
				)
				var key
			},
			mapSettingNodes = f => xs => c => s =>
				pipe(
					xs,
					ReadonlyArray_map(x => x(c)(s)),
					f
				),
			updateInput = setter => key =>
				src_flip((s, e) =>
					pipe(
						(e => {
							const target = e.currentTarget ?? e.__target
							if (
								target instanceof HTMLSelectElement ||
								target instanceof HTMLTextAreaElement ||
								target instanceof HTMLInputElement
							)
								return target.value
							throw Error("Event target type isn't acceptable.")
						})(e),
						setter,
						apply(getState(key)(s)),
						updateAt(key),
						src_flip,
						apply(s)
					)
				),
			editAction = (key, setter) => c => ({
				oninput: (s, e) => updateInput(setter(!0))(key)(c)(s, e),
				onchange: (s, e) => updateInput(setter(!1))(key)(c)(s, e),
			}),
			setEditNumber = editing => value => state =>
				pipe(
					value,
					Number.parseFloat,
					editing
						? x =>
								Number.isNaN(x) || "." === value.at(-1)
									? pipe(state, setText(value))
									: fromValueText(x)(value)
						: x =>
								Number.isNaN(x)
									? pipe(
											state,
											mapSecond(constant(Option_some([value, Option_some("")])))
									  )
									: Editable_of(x)
				),
			errorText = subject => edit =>
				pipe(
					edit,
					error,
					Option_map(x => `${subject}${"" === x ? "" : ": "}${x}`),
					getOrElse(constant(""))
				),
			rangeRow = (min, max, step, action) => value =>
				h("div", {}, [
					h("input", {
						style: { width: "150px", verticalAlign: "middle" },
						type: "range",
						min,
						max,
						step,
						value: Editable_value(value).toString(),
						oninput: action.onchange,
					}),
					h("input", {
						style: {
							width: "30px",
							backgroundColor: "transparent",
							color: "inherit",
							borderWidth: "1px",
							verticalAlign: "middle",
							borderColor: hasError(value) ? "#f55" : void 0,
						},
						inputmode: "decimal",
						value: pipe(
							value,
							Editable_text,
							getOrElse(
								constant(
									Editable_value(value)
										.toFixed(4)
										.replace(/\.?0+$/, "")
								)
							)
						),
						...action,
					}),
				]),
			settingRow = (label, error, content) =>
				h("div", {}, [
					h("span", {}, hyperapp_text(label)),
					h(
						"span",
						{
							style: {
								color: "#f55",
								marginLeft: "5px",
								whiteSpace: "pre-wrap",
							},
						},
						hyperapp_text(error)
					),
					h("div", {}, content),
				]),
			numberNode = (label, min, max, step) => c => s =>
				settingRow(
					getText(label)(s.lang),
					errorText(getText("inputNonNumberic")(s.lang))(s[label]),
					[
						rangeRow(
							min,
							max,
							step,
							editAction(label, setEditNumber)(c)
						)(getState(label)(s)),
					]
				),
			panelBoxStyle = width => ({ flex: `0 0 ${width}px`, margin: "2px" }),
			settingUI_chatFieldPanel = pipe(
				[
					pipe(
						[
							numberNode("fieldScale", 0.7, 1.5, 0.05),
							checkboxNode("simplifyChatField"),
							checkboxNode("createBanButton"),
						],
						mapSettingNodes(x => h("div", { style: panelBoxStyle(644) }, x))
					),
				],
				mapSettingNodes(Function_identity)
			),
			action = {
				copy: () => s =>
					Effect_map(
						Effect_promise(async () => {
							GM.setClipboard(JSON.stringify(s.eventLog))
						}),
						() => s
					),
				clearFlowChats: c => s => Effect_map(c.act.clearFlowChats, () => s),
				importLog: () => s =>
					pipe(
						Effect_promise(() =>
							external_Swal_default().fire({
								input: "textarea",
								inputLabel: getText("importLog")(s.lang),
							})
						),
						Effect_map(x =>
							x.isConfirmed ? { ...s, eventLog: JSON.parse(x.value) } : s
						)
					),
			},
			buttonNode = label => c => state =>
				h(
					"button",
					{
						type: "button",
						onclick: s => [
							s,
							d =>
								runPromise(
									c.provideLog(
										pipe(
											action[label](c)(s),
											Effect_flatMap(newS => Effect_sync(() => d(newS)))
										)
									)
								),
						],
					},
					hyperapp_text(getText(label)(state.lang))
				),
			tabContainer = style => ontabSelect => labels => tabs => mainTab =>
				h("div", { style: style.container }, [
					h(
						"div",
						{},
						pipe(
							labels,
							ReadonlyArray_map((x, i) =>
								h(
									"span",
									{
										style: {
											...style.label,
											...(mainTab === i ? style.labelFocus : {}),
											display: "inline-block",
										},
										onpointerdown: [ontabSelect, i],
									},
									hyperapp_text(x)
								)
							)
						)
					),
					h(
						"div",
						{
							style: {
								...style.tab,
								overflow: "auto",
								boxSizing: "border-box",
							},
						},
						pipe(
							tabs,
							ReadonlyArray_get(mainTab),
							match(
								() => {},
								x => x()
							)
						)
					),
				]),
			feedbackPanel = c => s =>
				pipe(
					getState("eventLog")(s).compressedBlocks.length + 1,
					logPageCount => [
						pipe(
							[checkboxNode("logEvents"), buttonNode("importLog")],
							mapSettingNodes(x => h("div", { style: panelBoxStyle(212) }, x))
						)(c)(s),
						h("div", { style: panelBoxStyle(428) }, [
							h(
								"a",
								{
									style: { color: "#f0f" },
									href: "https://greasyfork.org/en/scripts/411442-flow-youtube-chat/feedback",
									target: "_blank",
								},
								hyperapp_text(getText("giveFeedback")(s.lang))
							),
							h("div", {}, [
								h("span", {}, hyperapp_text(getText("eventLog")(s.lang))),
								buttonNode("copy")(c)(s),
								tabContainer({
									container: {},
									label: { padding: "4px", width: "2em", textAlign: "center" },
									labelFocus: { background: "#666" },
									tab: {
										height: "251px",
										display: "flex",
										flexDirection: "column",
										padding: "6px",
									},
								})((_, n) => updateAt("logTab")(n)(c))(
									pipe(makeBy(logPageCount, x => `${x}`))
								)(
									pipe(getState("eventLog")(s), l =>
										makeBy(
											logPageCount,
											i => () =>
												pipe(
													ReadonlyArray_get(l.compressedBlocks, i),
													Option_map(decompressBlock),
													getOrElse(() => l.lastBlock),
													ReadonlyArray_map((x, j) =>
														h("div", { style: { display: "flex" } }, [
															h(
																"div",
																{
																	style: {
																		userSelect: "none",
																		flex: "0 0 2em",
																	},
																},
																hyperapp_text(x.id)
															),
															h(
																"div",
																{
																	style: {
																		background: j % 2 == 0 ? "#fff" : "#ddd",
																		color: "#000",
																		flex: "auto",
																		wordBreak: "break-all",
																		whiteSpace: "pre-wrap",
																		padding: "0 2px",
																	},
																},
																hyperapp_text(`[${x.level}] ${x.text}`)
															),
														])
													)
												)
										)
									)
								)(getState("logTab")(s)),
							]),
						]),
					]
				),
			setEditRegexs = editing => value =>
				pipe(
					value,
					split(/\r\n|\n/),
					ReadonlyArray_filter(not(isEmpty)),
					Identity_bindTo("regexs"),
					Identity_let_("errors", ({ regexs }) =>
						pipe(
							regexs,
							ReadonlyArray_map((x, i) => {
								try {
									RegExp(x, "u")
									return Option_none()
								} catch (e) {
									return Option_some(`${e} in regex number ${i}`)
								}
							}),
							(Semigroup =>
								fromSemigroup(
									Semigroup_make((self, that) =>
										Option_isNone(self)
											? that
											: Option_isNone(that)
											? self
											: Option_some(Semigroup.combine(self.value, that.value))
									),
									Option_none()
								))(intercalate("\n")(Semigroup)).combineAll
						)
					),
					ctx =>
						editing
							? setText(value)
							: pipe(
									ctx.errors,
									Option_map(x =>
										mapSecond(() => Option_some([value, Option_some(x)]))
									),
									getOrElse(() => () => Editable_of(ctx.regexs))
							  )
				),
			setEditStrings = editing => value =>
				pipe(value, split(/\r\n|\n/), ReadonlyArray_filter(not(isEmpty)), x =>
					constant(
						editing ? [x, Option_some([value, Option_none()])] : Editable_of(x)
					)
				),
			textAreaRow = (rows, action) => value =>
				h("textarea", {
					rows,
					style: {
						resize: "none",
						boxSizing: "border-box",
						width: "100%",
						borderColor: hasError(value) ? "#f55" : void 0,
					},
					value: pipe(
						value,
						Editable_text,
						getOrElse(pipe(Editable_value(value), join("\n"), constant))
					),
					...action,
				}),
			textAreaNode = (label, rows, setter) => c => s =>
				settingRow(
					getText(label)(s.lang),
					errorText(getText("invalidSetting")(s.lang))(s[label]),
					[textAreaRow(rows, editAction(label, setter)(c))(getState(label)(s))]
				),
			filterPanelOld = c => s =>
				[
					h(
						"div",
						{ style: panelBoxStyle(212) },
						textAreaNode("bannedWords", 18, setEditStrings)(c)(s)
					),
					h(
						"div",
						{ style: panelBoxStyle(212) },
						textAreaNode("bannedWordRegexs", 18, setEditRegexs)(c)(s)
					),
					h(
						"div",
						{ style: panelBoxStyle(212) },
						textAreaNode("bannedUsers", 18, setEditStrings)(c)(s)
					),
				]
		var validate_color_lib = __webpack_require__(694),
			lib_default = __webpack_require__.n(validate_color_lib)
		const validColor = x => lib_default()(x.replace(/grey/gi, "gray")),
			setEditColor = editing => value =>
				editing
					? validColor(value)
						? constant(fromValueText(value)(value))
						: setText(value)
					: validColor(value)
					? constant(Editable_of(value))
					: mapSecond(constant(Option_some([value, Option_some("")]))),
			colorPicker = action => color =>
				h("input", {
					style: { width: "36px", verticalAlign: "middle" },
					type: "color",
					value: color,
					oninput: action.onchange,
				}),
			textInput = action => value =>
				h("input", {
					style: {
						verticalAlign: "middle",
						width: "5.5em",
						borderColor: hasError(value) ? "#f55" : void 0,
					},
					maxlength: 20,
					value: pipe(
						value,
						Editable_text,
						getOrElse(constant(Editable_value(value)))
					),
					...action,
				}),
			setEditInt = editing => value => state =>
				pipe(
					value,
					Number.parseInt,
					editing
						? x =>
								Number.isNaN(x) || "." === value.at(-1)
									? pipe(state, setText(value))
									: fromValueText(x)(value)
						: x =>
								Number.isNaN(x)
									? pipe(
											state,
											mapSecond(constant(Option_some([value, Option_some("")])))
									  )
									: Editable_of(x)
				),
			intNode = (label, min, max, step) => c => s =>
				settingRow(
					getText(label)(s.lang),
					errorText(getText("inputNonNumberic")(s.lang))(s[label]),
					[
						rangeRow(
							min,
							max,
							step,
							editAction(label, setEditInt)(c)
						)(getState(label)(s)),
					]
				),
			fonts = currentFont => [
				["", "Default", "デフォルト"],
				["arial", "Arial", "Arial"],
				["arial black", "Arial Black", "Arial Black"],
				["arial narrow", "Arial Narrow", "Arial Narrow"],
				["Century", "Century", "Century"],
				["Comic Sans MS", "Comic Sans MS", "Comic Sans MS"],
				["Courier", "Courier", "Courier"],
				["cursive", "cursive", "cursive"],
				["fantasy", "fantasy", "fantasy"],
				["Impact", "Impact", "Impact"],
				["Meiryo", "Meiryo", "メイリオ"],
				["Meiryo UI", "Meiryo UI", "メイリオ UI"],
				["monospace", "monospace", "monospace"],
				["Monotype Corsiva", "Monotype Corsiva", "Monotype Corsiva"],
				["MS PGothic", "MS PGothic", "MS Pゴシック"],
				["MS Gothic", "MS Gothic", "MS ゴシック"],
				["MS Sans Serif", "MS Sans Serif", "MS Sans Serif"],
				["MS Serif", "MS Serif", "MS Serif"],
				["MS UI Gothic", "MS UI Gothic", "MS UI Gothic"],
				["sans-serif", "Sans-serif", "Sans-serif"],
				["serif", "Serif", "Serif"],
				["Times New Roman", "Times New Roman", "Times New Roman"],
				["Yu Gothic", "Yu Gothic", "遊ゴシック"],
				["YuGothic", "YuGothic", "游ゴシック体"],
				[currentFont, "Custom", "カスタム"],
			],
			setEditString = editing =>
				flow(x => constant(editing ? fromValueText(x)(x) : Editable_of(x))),
			settingUI_textRowStyle = { width: "70%", boxSizing: "border-box" },
			ui_option = (value, label, selected) =>
				h("option", { value, selected }, hyperapp_text(label)),
			exampleTextStyle = s => ({
				fontFamily: Editable_value(s.font),
				fontWeight: Editable_value(s.fontWeight).toString(),
				textShadow: textShadow(Editable_value(s.shadowColor))(
					Editable_value(s.shadowFontWeight)
				),
			}),
			colorTextOutput = textStyle => color =>
				h(
					"span",
					{ style: { ...textStyle, color } },
					hyperapp_text("Aa1あア亜")
				),
			textColorNode = label => c => s =>
				settingRow(
					getText(label)(s.lang),
					errorText(getText("invalidColor")(s.lang))(s[label]),
					pipe(
						{
							a: editAction(label, setEditColor)(c),
							v: Editable_value(s[label]),
						},
						({ a, v }) => [
							colorPicker(a)(v),
							textInput(a)(s[label]),
							colorTextOutput(exampleTextStyle(s))(v),
						]
					)
				),
			flowChatPanel = pipe(
				[
					pipe(
						[
							c => s =>
								pipe(Editable_value(s.font), font =>
									settingRow(getText("font")(s.lang), "", [
										h(
											"select",
											{
												style: settingUI_textRowStyle,
												onchange: updateInput(setEditString(!1))("font")(c),
											},
											pipe(
												fonts(font),
												findFirstIndex(x => x[0] === font),
												getOrElse(() => 0),
												index =>
													pipe(
														fonts(font),
														ReadonlyArray_map((f, i) =>
															ui_option(
																f[0],
																pipe(
																	languages,
																	findFirstIndex(x => x === s.lang),
																	Option_map(x => unsafeGet(x + 1)(f)),
																	getOrElse(() => "Error")
																),
																i === index
															)
														)
													)
											)
										),
										h("input", {
											style: settingUI_textRowStyle,
											maxlength: 20,
											value: font,
											...editAction("font", setEditString),
										}),
									])
								),
							textColorNode("color"),
							textColorNode("ownerColor"),
							textColorNode("moderatorColor"),
							textColorNode("memberColor"),
							((label = "shadowColor"),
							c => s =>
								settingRow(
									getText(label)(s.lang),
									errorText(getText("invalidColor")(s.lang))(s[label]),
									pipe(editAction(label, setEditColor)(c), x => [
										colorPicker(x)(Editable_value(s[label])),
										textInput(x)(s[label]),
									])
								)),
						],
						mapSettingNodes(x => h("div", { style: panelBoxStyle(212) }, x))
					),
					pipe(
						[
							numberNode("chatOpacity", 0, 1, 0.05),
							numberNode("fontSize", 0.3, 2, 0.05),
							numberNode("fontWeight", 10, 1e3, 10),
							numberNode("shadowFontWeight", 0, 3, 0.1),
							numberNode("flowSpeed", 1, 50, 1),
							intNode("maxChatCount", 5, 200, 5),
							intNode("maxChatLength", 5, 200, 5),
							intNode("laneCount", 1, 25, 1),
						],
						mapSettingNodes(x => h("div", { style: panelBoxStyle(212) }, x))
					),
					pipe(
						[
							numberNode("flowY1", 0, 0.95, 0.01),
							numberNode("flowY2", 0.05, 1, 0.01),
							numberNode("flowX1", 0, 0.95, 0.01),
							numberNode("flowX2", 0.05, 1, 0.01),
							numberNode("minSpacing", 0, 2.5, 0.1),
							c => s =>
								h("div", {}, [
									checkboxNode("useStepTiming")(c)(s),
									h(
										"div",
										{
											style: {
												opacity: getState("useStepTiming")(s) ? void 0 : "0.5",
											},
										},
										intNode("timingStepCount", 1, 400, 1)(c)(s)
									),
								]),
							checkboxNode("createChats"),
							checkboxNode("displayModName"),
							checkboxNode("displaySuperChatAuthor"),
							checkboxNode("textOnly"),
							() => s => hyperapp_text(getText("flowNewChatIf")(s.lang)),
							checkboxNode("noOverlap"),
							buttonNode("clearFlowChats"),
						],
						mapSettingNodes(x => h("div", { style: panelBoxStyle(212) }, x))
					),
				],
				mapSettingNodes(Function_identity)
			)
		var label
		const settingUI_flowChatPanel = flowChatPanel,
			setString = flow(Function_identity, constant),
			simpleWrap = (comp, init) =>
				pipe(
					Effect_sync(() => document.createElement(comp.tag)),
					Effect_flatMap(node =>
						Effect_sync(() => ({
							node,
							dispatch: app({ init, view: comp.view, node }),
						}))
					)
				),
			toggleSettingsPanelComponent = flow(
				syncState => (x, e) =>
					pipe({ ...x, showPanel: !x.showPanel }, newState => [
						newState,
						x.showPanel
							? () => z.instanceof(HTMLElement).parse(e.currentTarget).blur()
							: () => {},
						() =>
							runPromise(syncState(oldState => ({ ...oldState, ...newState }))),
					]),
				toggle => state =>
					h(
						"button",
						{
							class: "fyc_button",
							style: {
								background: "rgba(0,0,0,0)",
								marginLeft: "10px",
								whiteSpace: "nowrap",
							},
							onclick: toggle,
						},
						[
							h(
								"svg",
								{
									preserveAspectRatio: "xMidYMid meet",
									viewBox: "0 0 640 640",
									width: "15",
									height: "15",
									style: { position: "relative", top: "1px" },
								},
								[
									h(
										"defs",
										{},
										h("path", {
											id: "d1TbzTC1zI",
											d: "M135 58c25 14 67 30 82 35-7 49 16 109-15 149-50 71-19 184 64 213 74 31 165-18 183-95-3-38 23-62 58-36l120 55c-39 10-106 35-72 85 40 38 1 71-29 98-29 53-70-17-109-5-46 22-25 109-96 85h-55c-24-31-21-103-80-84-32 32-70 31-93-9l-35-36c4-40 57-96-6-120-45 5-58-32-52-68 2-19-4-41 3-59 35-15 100-22 77-79-48-43 1-84 35-115 5-6 12-12 20-14zM577 2c52 3 72 62 62 106-5 51 19 117-27 155-18 24 8 49 11 74-39-8-98-46-146-60-55-1-111 2-167-2-52-15-57-76-52-121S242 52 282 18c38-30 88-11 132-16h163z",
										})
									),
									h("use", {
										href: "#d1TbzTC1zI",
										opacity: "1",
										fill: "var(--iron-icon-fill-color, currentcolor)",
										"fill-opacity": "1",
									}),
								]
							),
							h(
								"span",
								{
									style: {
										position: "relative",
										top: "-2px",
										marginLeft: "8px,",
									},
								},
								hyperapp_text(getText("setting")(state.lang))
							),
						]
					),
				button =>
					makeComponent(
						tag => s => h(tag, { style: { display: "flex" } }, button(s))
					)("span")
			),
			videoToggleStream = video =>
				pipe(
					[["playing"], ["waiting", "pause"]],
					ReadonlyArray_map((x, i) => [x, 0 === i]),
					ReadonlyArray_flatMap(([xs, b]) =>
						pipe(
							xs,
							ReadonlyArray_map(x => [x, b])
						)
					),
					ReadonlyArray_map(([x, b]) =>
						pipe(
							(0, external_rxjs_namespaceObject.fromEvent)(video, x),
							(0, external_rxjs_namespaceObject.map)(() => b)
						)
					),
					x => (0, external_rxjs_namespaceObject.merge)(...x)
				),
			Logger_make = makeLogger,
			Logger_replace = replaceLogger,
			Logger_withMinimumLogLevel = withMinimumLogLevel,
			Logger_zip = logger_zip,
			Logger_defaultLogger = defaultLogger
		var LogAnnotationKeys
		!(function (LogAnnotationKeys) {
			LogAnnotationKeys.name = "name"
		})(LogAnnotationKeys || (LogAnnotationKeys = {}))
		const src_LogAnnotationKeys = LogAnnotationKeys,
			maxEventLogBlockCount = Math.floor(50),
			preserveEventLogBlockCount = Math.floor(0.2 * maxEventLogBlockCount),
			getConsoleLog = x =>
				(x === Trace
					? console.trace
					: x === Level_Debug
					? console.debug
					: x === Info
					? console.info
					: x === Warning
					? console.warn
					: x === Level_Error || x === Fatal
					? console.error
					: console.log
				).bind(console),
			metaLogger = Logger_make(
				(fiberId, logLevel, message, cause, context, span, annotations) =>
					runPromise(
						pipe(
							() =>
								`${pipe(
									annotations,
									mjs_HashMap_get(src_LogAnnotationKeys.name),
									match(
										() => "",
										x => `[${x}] `
									)
								)}${message}`,
							getStr =>
								pipe(
									FiberRefs_getOrDefault(context, logMeta),
									match(
										() =>
											greaterThanEqual(Warning)(logLevel)
												? Effect_sync(() => getConsoleLog(logLevel)(getStr()))
												: Effect_unit(),
										meta =>
											Effect_sync(() =>
												getConsoleLog(logLevel)(`${getStr()}: `, meta)
											)
									)
								)
						)
					)
			)
		runPromise(
			pipe(
				Effect_Do(),
				Effect_letDiscard(
					"settingUpdateApps",
					new external_rxjs_namespaceObject.BehaviorSubject([])
				),
				bindValue_("provideLog", x => {
					return (
						(settingUpdateApps = x.settingUpdateApps),
						effect => {
							return pipe(
								Effect_succeed(
									Logger_replace(
										Logger_defaultLogger,
										Logger_zip(metaLogger)(
											((apps = settingUpdateApps),
											Logger_make((fiberId, logLevel, message) =>
												runPromise(
													(
														apps => dispatchable =>
															pipe(
																apps,
																ReadonlyArray_map(x =>
																	Effect_sync(() => x(dispatchable))
																),
																x => Effect_all(x)
															)
													)(apps.getValue())(s => {
														return s.logEvents
															? {
																	...s,
																	eventLog: ((text = message),
																	(level = logLevel.label),
																	flow(
																		x =>
																			x.compressedBlocks.length ===
																			maxEventLogBlockCount
																				? (
																						i => log =>
																							i > log.compressedBlocks.length
																								? log
																								: makeLog({
																										nextId: log.nextId,
																										...(i ===
																										log.compressedBlocks.length
																											? {
																													lastBlock: [],
																													compressedBlocks:
																														log.compressedBlocks,
																											  }
																											: {
																													lastBlock:
																														log.lastBlock,
																													compressedBlocks:
																														ReadonlyArray_remove(
																															log.compressedBlocks,
																															i
																														),
																											  }),
																								  })
																				  )(
																						Math.floor(
																							preserveEventLogBlockCount
																						)
																				  )(x)
																				: x,
																		(
																			(text, level) => log =>
																				makeLog({
																					nextId: log.nextId + 1,
																					...pipe(
																						log.lastBlock,
																						append({
																							id: log.nextId,
																							text,
																							level,
																						}),
																						x =>
																							200 === x.length
																								? {
																										compressedBlocks: append(
																											log.compressedBlocks,
																											makeCompressedLogBlock(
																												(0,
																												external_LZString_namespaceObject.compress)(
																													JSON.stringify(x)
																												)
																											)
																										),
																										lastBlock: [],
																								  }
																								: {
																										compressedBlocks:
																											log.compressedBlocks,
																										lastBlock: x,
																								  }
																					),
																				})
																		)(text, level)
																	))(s.eventLog),
															  }
															: s
														var text, level
													})
												)
											))
										)
									)
								),
								Effect_flatMap(logLayer =>
									pipe(
										effect,
										Effect_tapErrorCause(x => Effect_logError(Cause_pretty(x))),
										Effect_provideSomeLayer(logLayer)
									)
								),
								Effect_logAnnotate(src_LogAnnotationKeys.name, "FYC"),
								Logger_withMinimumLogLevel(Level_Debug)
							)
							var apps
						}
					)
					var settingUpdateApps
				}),
				Effect_flatMap(({ settingUpdateApps, provideLog }) =>
					provideLog(
						pipe(
							src_defaultGMConfig,
							x => ({ gmConfig: x, configKeys: Object.keys(x) }),
							Effect_succeed,
							Effect_letDiscard("updateSettingState", dispatchable =>
								provideLog(
									pipe(
										settingUpdateApps.getValue(),
										ReadonlyArray_map(x => Effect_sync(() => x(dispatchable))),
										x => Effect_all(x)
									)
								)
							),
							Effect_bind("config", ctx => {
								return (
									(config = ctx.gmConfig),
									pipe(
										Object.entries(config),
										ReadonlyArray_map(([k, c]) =>
											pipe(
												c.getValue,
												Effect_map(x => [k, x])
											)
										),
										x => Effect_all(x),
										Effect_map(Object.fromEntries)
									)
								)
								var config
							}),
							bindValue_("getConfig", ctx =>
								(c =>
									pipe(
										c,
										mapObject(([x]) => [x, () => c[x]])
									))(ctx.config)
							),
							flow(
								bindValue_("mainState", x => ({
									chatPlaying: !0,
									playerRect: new DOMRectReadOnly(0, 0, 600, 400),
									config: x.config,
									flowChats: [],
								})),
								bindValue_("configSubject", ctx =>
									pipe(
										ctx.configKeys,
										ReadonlyArray_map(x => [
											x,
											new external_rxjs_namespaceObject.Subject(),
										]),
										Object.fromEntries
									)
								),
								bindValue_("setterFromKeysMap", ctx =>
									(
										keys => f =>
											pipe(
												keys,
												ReadonlyArray_map(x => [x, f(x)]),
												Object.fromEntries
											)
									)(ctx.configKeys)
								),
								bindValue_("setConfigPlain", ctx =>
									ctx.setterFromKeysMap(
										key => val =>
											Effect_promise(async () => {
												Object.assign(ctx.mainState.config, { [key]: val })
												ctx.configSubject[key].next(val)
											})
									)
								),
								bindValue_(
									"changedConfigMap",
									ctx => key => val =>
										pipe(
											Effect_promise(async () => ctx.config[key]),
											Effect_filterOrFail(
												x => !fast_deep_equal_default()(x, val),
												Option_none
											),
											Effect_flatMap(() => ctx.setConfigPlain[key](val))
										)
								),
								bindValue_("setChangedConfig", ctx =>
									ctx.setterFromKeysMap(
										key => val =>
											pipe(ctx.changedConfigMap(key)(val), Effect_ignore)
									)
								),
								Effect_letDiscard(
									"channel",
									new broadcast_channel_BroadcastChannel("fyc-0615654655528523")
								)
							),
							flow(
								bindValue_("setConfig", ctx =>
									ctx.setterFromKeysMap(
										key => val =>
											pipe(
												ctx.changedConfigMap(key)(val),
												Effect_zipRight(
													Effect_promise(() =>
														ctx.channel.postMessage([key, val])
													)
												),
												Effect_zipRight(
													Effect_promise(() =>
														pipe(ctx.gmConfig[key], x =>
															GM.setValue(x.gmKey, x.toGm(val))
														)
													)
												),
												Effect_ignore
											)
									)
								),
								Effect_bindDiscard(
									"reinitSubject",
									Effect_sync(() => new external_rxjs_namespaceObject.Subject())
								),
								bindValue_("reinitialize", ctx =>
									provideLog(
										Effect_sync(() => {
											requestAnimationFrame(() => lib(ctx.reinitSubject)())
										})
									)
								),
								Effect_tap(ctx =>
									ctx.setConfigPlain.filterExp(defaultFilter(ctx.config))
								),
								bindValue_("toggleChatButtonInit", ctx => ({
									lang: ctx.config.lang,
									displayChats: ctx.config.displayChats,
								})),
								Effect_bind("wrappedToggleChat", ctx => {
									return simpleWrap(
										((setConfig = ctx.setConfig),
										pipe(
											"button",
											makeComponent(
												tag => state =>
													pipe(
														getText(
															state.displayChats ? "hideChats" : "showChats"
														)(state.lang),
														label =>
															h(
																tag,
																{
																	class: "ytp-button",
																	style: {
																		background: "none",
																		border: "none",
																		cursor: "pointer",
																		float: "left",
																		fontSize: "1em",
																		height: "4em",
																		outline: "none",
																		overflow: "visible",
																		padding: "0 0 0em",
																		position: "relative",
																		width: "3em",
																	},
																	type: "button",
																	"aria-label": label,
																	title: label,
																	onclick: s =>
																		pipe(!s.displayChats, displayChats => [
																			{ ...s, displayChats },
																			() =>
																				runPromise(
																					setConfig.displayChats(displayChats)
																				),
																		]),
																},
																[
																	h(
																		"svg",
																		{
																			style: { width: "100%" },
																			viewBox: "0 0 36 36",
																		},
																		[
																			h("path", {
																				class: "chat-button-path",
																				d: "m11 12h17q1 0 1 1v9q0 1-1 1h-1v2l-4-2h-12q-1 0-1-1v-9q0-1 1-1z",
																				fill: "#fff",
																				"fill-opacity": state.displayChats
																					? "1"
																					: "0",
																				stroke: "#fff",
																				"stroke-width": "2",
																			}),
																		]
																	),
																]
															)
													)
											)
										)),
										ctx.toggleChatButtonInit
									)
									var setConfig
								}),
								Effect_bind("wrappedSettings", ctx =>
									simpleWrap(
										pipe(
											(
												c => state =>
													state.showPanel
														? h(
																"div",
																{
																	class: "fyc_panel",
																	style: {
																		backgroundColor: "rgba(30,30,30,0.9)",
																		position: "absolute",
																		zIndex: "1000",
																		color: "#fff",
																		fontSize: "14px",
																		overflow: "auto",
																		left: `${state.panelRect.x}px`,
																		top: `${state.panelRect.y}px`,
																		width: `${state.panelRect.width}px`,
																		height: `${state.panelRect.height}px`,
																		border: "solid 1px #666",
																		fontFamily: "MS PGothic",
																		lineHeight: "1.2",
																		colorScheme: "dark",
																	},
																},
																[
																	h(
																		"div",
																		{
																			style: {
																				position: "absolute",
																				inset: "3px 3px auto auto",
																			},
																		},
																		[
																			hyperapp_text("🌐"),
																			h(
																				"select",
																				{
																					onchange:
																						updateInput(setString)("lang")(c),
																				},
																				pipe(
																					languages,
																					zip(languageLabels),
																					ReadonlyArray_map(([lang, label]) =>
																						ui_option(
																							lang,
																							label,
																							lang === state.lang
																						)
																					)
																				)
																			),
																		]
																	),
																	tabContainer({
																		container: {},
																		label: { padding: "6px" },
																		labelFocus: { background: "#666" },
																		tab: {
																			height: "364px",
																			display: "flex",
																			padding: "6px",
																		},
																	})((s, n) => updateAt("mainTab")(n)(c)(s))(
																		pipe(
																			[
																				"flowChat",
																				"chatFilter",
																				"chatField",
																				"feedback",
																			],
																			ReadonlyArray_map(getText),
																			ReadonlyArray_map(apply(state.lang))
																		)
																	)(
																		pipe(
																			[
																				settingUI_flowChatPanel,
																				filterPanelOld,
																				settingUI_chatFieldPanel,
																				feedbackPanel,
																			],
																			ReadonlyArray_map(apply(c)),
																			ReadonlyArray_map(constant),
																			ReadonlyArray_map(src_flip),
																			ReadonlyArray_map(apply(state))
																		)
																	)(getState("mainTab")(state)),
																]
														  )
														: h("div", {})
											)({
												setConfig: ctx.setConfig,
												act: {
													clearFlowChats: removeOldChats(ctx.mainState)(0),
												},
												provideLog,
											}),
											panel =>
												makeComponent(
													tag => s =>
														h(tag, { style: { display: "contents" } }, panel(s))
												)("span")
										),
										settingStateInit(ctx.config)
									)
								),
								Effect_bind("wrappedToggleSettings", ctx =>
									simpleWrap(
										toggleSettingsPanelComponent(ctx.updateSettingState),
										settingStateInit(ctx.config)
									)
								)
							),
							flow(
								Effect_tap(ctx =>
									Effect_sync(() =>
										settingUpdateApps.next([
											ctx.wrappedSettings.dispatch,
											ctx.wrappedToggleSettings.dispatch,
										])
									)
								),
								Effect_letDiscard(
									"settingsRectSubject",
									new external_rxjs_namespaceObject.BehaviorSubject(
										new DOMRectReadOnly(0, 0, 660, 395)
									)
								),
								Effect_tap(ctx =>
									pipe(
										[
											"Version: 1.15.21",
											`User Agent: ${window.navigator.userAgent}`,
											`GMConfig: ${JSON.stringify(ctx.config, void 0, 2)}`,
										],
										ReadonlyArray_map(Effect_logDebug),
										x => Effect_all(x)
									)
								),
								Effect_zipLeft(
									pipe(
										Effect_logDebug("10s..."),
										Effect_repeat(Schedule_fixed(seconds(10))),
										Effect_delay(seconds(10)),
										Effect_forkDaemon
									)
								)
							),
							bindValue_("co", ctx =>
								pipe(
									ctx.configSubject,
									mapObject(([k, value]) => [
										k,
										pipe(
											value,
											tapEffect(v => {
												return provideLog(
													pipe(
														v,
														x => s => ({ ...s, [k]: x }),
														Effect_succeed,
														Effect_tap(() => {
															return ctx.updateSettingState(
																((key = k),
																value => state => ({
																	...state,
																	[key]: isEditable(key)(value)
																		? setValue(value)(state[key])
																		: "filterExp" === key
																		? void 0
																		: value,
																}))(v)
															)
															var key
														}),
														Effect_zipLeft(
															pipe(
																[
																	"bannedWords",
																	"bannedUsers",
																	"bannedWordRegexs",
																],
																((isEquivalent = String_Equivalence),
																Function_dual(2, (self, a) => {
																	for (const i of self)
																		if (isEquivalent(a, i)) return !0
																	return !1
																}))(k),
																x =>
																	x
																		? ctx.setConfig.filterExp(
																				defaultFilter(ctx.config)
																		  )
																		: Effect_unit()
															)
														),
														Effect_flatMap(x =>
															k in ctx.toggleChatButtonInit
																? Effect_sync(() =>
																		ctx.wrappedToggleChat.dispatch(x)
																  )
																: Effect_unit()
														),
														x => () => runPromise(provideLog(x)),
														x => Effect_sync(() => requestAnimationFrame(x))
													)
												)
												var isEquivalent
											}),
											(0, external_rxjs_namespaceObject.share)()
										),
									])
								)
							),
							Effect_letDiscard("livePage", livePageYt),
							bindValue_("live", ctx => makePageState(ctx.livePage)),
							Effect_bindDiscard("chatScreen", makeChatScreen),
							Effect_bind("all$", ctx => {
								return pipe(
									{
										eq:
											((E = strict()),
											Equivalence_make(
												(x, y) =>
													x === y ||
													(Option_isNone(x)
														? Option_isNone(y)
														: !Option_isNone(y) && E(x.value, y.value))
											)),
										initDelay: 100,
										urlDelay: 1700,
										changeDetectInterval: 700,
										bodyResizeDetectInterval: 300,
										errorRetryInterval: 5e3,
										liveElementKeys: Object.keys(ctx.livePage),
										tapUpdateSettingsRect: ob =>
											(0, external_rxjs_namespaceObject.switchMap)(value => {
												return pipe(
													ctx.settingsRectSubject,
													(0, external_rxjs_namespaceObject.first)(),
													(0, external_rxjs_namespaceObject.map)(
														((toggleSettingsElement =
															ctx.wrappedToggleSettings.node),
														nextSettingsRect => last =>
															pipe(
																Effect_succeed(toggleSettingsElement),
																Effect_filterOrFail(
																	x => null !== x.offsetParent,
																	Option_none
																),
																Effect_map(x => x.getBoundingClientRect()),
																Effect_map(
																	x =>
																		new DOMRectReadOnly(
																			Math.max(
																				0,
																				x.right + window.scrollX - 660
																			),
																			Math.max(0, x.y + window.scrollY - 395),
																			660,
																			Math.min(x.y + window.scrollY, 395)
																		)
																),
																Effect_orElseSucceed(
																	() =>
																		new DOMRectReadOnly(-660, -395, 660, 395)
																),
																Effect_filterOrFail(
																	x =>
																		x.x !== last.x ||
																		x.y !== last.y ||
																		x.width !== last.width ||
																		x.height !== last.height,
																	Option_none
																),
																Effect_tap(nextSettingsRect),
																Effect_ignore
															))(rect =>
															Effect_sync(() =>
																ctx.settingsRectSubject.next(rect)
															)
														)
													),
													tapEffect(provideLog),
													(0, external_rxjs_namespaceObject.map)(() => value)
												)
												var toggleSettingsElement
											})(ob),
										config$: configStream(
											provideLog,
											ctx.mainState,
											ctx.co,
											ctx.chatScreen,
											ctx.live
										),
									},
									Effect_succeed,
									Effect_bindDiscard("css", mainCss),
									Effect_bindDiscard(
										"documentMutationPair",
										observePair(MutationObserver)
									),
									Effect_bindDiscard(
										"chatMutationPair",
										observePair(MutationObserver)
									),
									Effect_bindDiscard(
										"playerResizePair",
										observePair(ResizeObserver)
									),
									Effect_bindDiscard(
										"bodyResizePair",
										observePair(ResizeObserver)
									),
									Effect_map(c =>
										pipe(
											ctx.reinitSubject,
											(0, external_rxjs_namespaceObject.observeOn)(
												external_rxjs_namespaceObject.asyncScheduler
											),
											(0, external_rxjs_namespaceObject.delay)(c.initDelay),
											tapEffect(() => provideLog(Effect_logInfo("Init"))),
											(0, external_rxjs_namespaceObject.switchMap)(() =>
												pipe(
													(0, external_rxjs_namespaceObject.interval)(
														c.changeDetectInterval
													),
													c.tapUpdateSettingsRect,
													(0, external_rxjs_namespaceObject.concatMap)(index =>
														pipe(
															(0, external_rxjs_namespaceObject.from)(
																runPromise(
																	provideLog(
																		pipe(
																			c.liveElementKeys,
																			ReadonlyArray_map(key =>
																				pipe(
																					ctx.live[key],
																					x => x.read,
																					Effect_unsome,
																					Effect_map(
																						liftPredicate(
																							newEle =>
																								!c.eq(ctx.live[key].ele, newEle)
																						)
																					),
																					Effect_map(
																						Option_map(
																							flow(
																								Effect_succeed,
																								Effect_tap(x =>
																									Effect_sync(() => {
																										ctx.live[key].ele = x
																									})
																								),
																								Effect_map(Option_isSome),
																								Effect_map(
																									x =>
																										`${key} ${
																											x ? "found" : "lost"
																										}`
																								),
																								Effect_flatMap(Effect_logDebug)
																							)
																						)
																					),
																					Effect_flatMap(
																						match(
																							() => Effect_succeed(!1),
																							Effect_zipRight(
																								Effect_succeed(!0)
																							)
																						)
																					)
																				)
																			),
																			x => Effect_all(x),
																			Effect_map(
																				ReadonlyArray_some(Function_identity)
																			)
																		)
																	)
																)
															),
															(0, external_rxjs_namespaceObject.filter)(
																Function_identity
															),
															(0, external_rxjs_namespaceObject.map)(
																() => index
															)
														)
													),
													(0, external_rxjs_namespaceObject.startWith)(0)
												)
											),
											tapEffect(() =>
												provideLog(
													pipe(
														Effect_logDebug("Loading..."),
														Effect_zipRight(removeOldChats(ctx.mainState)(0)),
														Effect_zipRight(
															Effect_sync(() => {
																c.documentMutationPair.observer.disconnect()
																c.documentMutationPair.observer.observe(
																	document,
																	{ childList: !0, subtree: !0 }
																)
																c.chatMutationPair.observer.disconnect()
																c.playerResizePair.observer.disconnect()
																c.bodyResizePair.observer.disconnect()
																document.head.append(c.css)
															})
														),
														Effect_zipRight(
															pipe(
																[
																	pipe(
																		ctx.live.chatField.ele,
																		Option_map(x =>
																			Effect_sync(() =>
																				c.chatMutationPair.observer.observe(x, {
																					childList: !0,
																				})
																			)
																		)
																	),
																	pipe(
																		ctx.live.chatTicker.ele,
																		Option_map(x =>
																			Effect_sync(() =>
																				c.chatMutationPair.observer.observe(x, {
																					childList: !0,
																				})
																			)
																		)
																	),
																	pipe(
																		ctx.live.player.ele,
																		Option_map(
																			flow(
																				Effect_succeed,
																				Effect_tap(x =>
																					Effect_sync(() =>
																						c.playerResizePair.observer.observe(
																							x
																						)
																					)
																				),
																				Effect_flatMap(x =>
																					Effect_sync(() =>
																						x.prepend(ctx.chatScreen)
																					)
																				)
																			)
																		)
																	),
																	pipe(
																		ctx.live.toggleChatBtnParent.ele,
																		Option_map(x =>
																			Effect_sync(() =>
																				x.prepend(ctx.wrappedToggleChat.node)
																			)
																		)
																	),
																	pipe(
																		ctx.live.settingsToggleNextElement.ele,
																		Option_map(x =>
																			Effect_sync(() =>
																				x.before(ctx.wrappedToggleSettings.node)
																			)
																		)
																	),
																	pipe(
																		ctx.live.settingsContainer.ele,
																		Option_map(x =>
																			Effect_sync(() =>
																				x.append(ctx.wrappedSettings.node)
																			)
																		)
																	),
																	pipe(
																		document.body,
																		fromNullable,
																		Option_map(x =>
																			Effect_sync(() =>
																				c.bodyResizePair.observer.observe(x)
																			)
																		)
																	),
																],
																ReadonlyArray_compact,
																append(
																	pipe(
																		ctx.live.video.ele,
																		Option_filter(x => !x.paused),
																		orElse(() => ctx.live.offlineSlate.ele),
																		Option_isSome,
																		x =>
																			Effect_sync(() => {
																				Object.assign(ctx.mainState, {
																					chatPlaying: x,
																				})
																			})
																	)
																),
																x => Effect_all(x)
															)
														)
													)
												)
											),
											(0, external_rxjs_namespaceObject.switchMap)(() =>
												(0, external_rxjs_namespaceObject.merge)(
													pipe(
														(0, external_rxjs_namespaceObject.fromEvent)(
															ctx.channel,
															"message"
														),
														(0, external_rxjs_namespaceObject.map)(
															([key, val]) =>
																pipe(
																	src_listeningBroadcastConfigKeys.includes(
																		key
																	),
																	x =>
																		x
																			? ctx.setChangedConfig[key](val)
																			: Effect_sync(() => {})
																)
														),
														tapEffect(provideLog)
													),
													...pipe(
														ctx.configKeys,
														ReadonlyArray_map(key =>
															pipe(
																ctx.co[key],
																(0, external_rxjs_namespaceObject.startWith)(
																	ctx.config[key]
																),
																(0, external_rxjs_namespaceObject.bufferCount)(
																	2,
																	1
																),
																(0, external_rxjs_namespaceObject.map)(
																	([x, y]) =>
																		(0, external_DeepDiff_namespaceObject.diff)(
																			x,
																			y
																		)
																),
																(0, external_rxjs_namespaceObject.map)(x =>
																	Effect_logDebug(
																		`Config ${key}: ${JSON.stringify(
																			x,
																			void 0,
																			2
																		)}`
																	)
																),
																tapEffect(provideLog)
															)
														)
													),
													c.config$,
													pipe(
														ctx.live.video.ele,
														match(
															() => external_rxjs_namespaceObject.EMPTY,
															flow(
																videoToggleStream,
																(0, external_rxjs_namespaceObject.map)(
																	playing =>
																		playing ||
																		Option_isSome(ctx.live.offlineSlate.ele)
																),
																(0, external_rxjs_namespaceObject.map)(
																	chatPlaying =>
																		pipe(
																			Effect_sync(() => {
																				ctx.mainState.chatPlaying = chatPlaying
																			}),
																			Effect_zipRight(
																				pipe(
																					ctx.mainState.flowChats,
																					ReadonlyArray_map(setChatPlayState),
																					ReadonlyArray_map(
																						apply(ctx.mainState)
																					),
																					x => Effect_all(x)
																				)
																			)
																		)
																),
																tapEffect(provideLog)
															)
														)
													),
													pipe(
														c.chatMutationPair.subject,
														(0, external_rxjs_namespaceObject.map)(
															onChatFieldMutate(
																ctx.chatScreen,
																ctx.mainState,
																ctx.getConfig,
																ctx.setConfig
															)
														),
														tapEffect(provideLog)
													),
													pipe(
														c.documentMutationPair.subject,
														(0, external_rxjs_namespaceObject.map)(
															() => window.location.href
														),
														(0,
														external_rxjs_namespaceObject.distinctUntilChanged)(),
														(0, external_rxjs_namespaceObject.skip)(1),
														c.tapUpdateSettingsRect,
														(0, external_rxjs_namespaceObject.map)(x =>
															Effect_all([
																Effect_logDebug(`URL Changed: ${x}`),
																removeOldChats(ctx.mainState)(0),
																Effect_logDebug(`Wait for ${c.urlDelay}ms...`),
															])
														),
														tapEffect(provideLog),
														(0, external_rxjs_namespaceObject.delay)(
															c.urlDelay
														),
														tapEffect(() => ctx.reinitialize)
													),
													pipe(
														c.playerResizePair.subject,
														(0, external_rxjs_namespaceObject.throttleTime)(
															500,
															void 0,
															{ leading: !0, trailing: !0 }
														),
														(0, external_rxjs_namespaceObject.startWith)([]),
														(0, external_rxjs_namespaceObject.map)(
															flow(
																() => ctx.live.player.ele,
																Option_map(x => x.getBoundingClientRect()),
																match(
																	() => Effect_unit(),
																	x => {
																		return (
																			(rect = x),
																			(mainState = ctx.mainState),
																			pipe(
																				rect,
																				Effect_succeed,
																				Effect_tap(x =>
																					Effect_logDebug(
																						`Resize [${x.width.toFixed(
																							1
																						)}, ${x.height.toFixed(1)}]`
																					)
																				),
																				Effect_flatMap(
																					flow(
																						x =>
																							Effect_sync(() =>
																								Object.assign(mainState, {
																									playerRect: x,
																								})
																							),
																						Effect_map(
																							() => mainState.flowChats
																						),
																						Effect_map(
																							ReadonlyArray_flatMap(x => [
																								renderChat(x)(mainState),
																								setChatAnimation(x)(mainState),
																							])
																						),
																						Effect_flatMap(x => Effect_all(x))
																					)
																				)
																			)
																		)
																		var rect, mainState
																	}
																)
															)
														),
														tapEffect(provideLog)
													),
													pipe(
														c.bodyResizePair.subject,
														(0, external_rxjs_namespaceObject.throttleTime)(
															c.bodyResizeDetectInterval,
															void 0,
															{ leading: !0, trailing: !0 }
														),
														(0, external_rxjs_namespaceObject.startWith)([]),
														c.tapUpdateSettingsRect
													),
													pipe(
														ctx.settingsRectSubject,
														tapEffect(panelRect =>
															ctx.updateSettingState(s => ({ ...s, panelRect }))
														)
													)
												)
											),
											(0, external_rxjs_namespaceObject.retry)({
												delay: e =>
													pipe(
														e,
														external_rxjs_namespaceObject.of,
														tapEffect(() =>
															provideLog(
																logWithMeta(Level_Error)(`Errored: ${e}`)(e)
															)
														),
														(0, external_rxjs_namespaceObject.delay)(
															c.errorRetryInterval
														),
														tapEffect(() => ctx.reinitialize)
													),
											})
										)
									)
								)
								var E
							}),
							Effect_tap(ctx =>
								Effect_sync(() =>
									ctx.all$.subscribe({
										error: x =>
											runPromise(
												logWithMeta(Level_Error)(`Stream Errored: ${x}`)(x)
											),
										complete: () =>
											runPromise(Effect_logWarning("Stream complete")),
									})
								)
							),
							Effect_tap(ctx => ctx.reinitialize)
						)
					)
				),
				Effect_withParallelismUnbounded
			)
		)
	})()
})()