@liuli-util/cli 3.9.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +3 -3
  3. package/_gitignore +33 -0
  4. package/dist/PathUtil.d.ts +7 -0
  5. package/dist/PathUtil.d.ts.map +1 -0
  6. package/dist/bin.d.ts +1 -1
  7. package/dist/bin.js +116 -1
  8. package/dist/bin.js.map +7 -1
  9. package/dist/commands/esbuild/ESBuildProgram.d.ts +71 -0
  10. package/dist/commands/esbuild/ESBuildProgram.d.ts.map +1 -0
  11. package/dist/commands/esbuild/index.d.ts +3 -0
  12. package/dist/commands/esbuild/index.d.ts.map +1 -0
  13. package/dist/commands/esbuild/util/debounce.d.ts +15 -0
  14. package/dist/commands/esbuild/util/debounce.d.ts.map +1 -0
  15. package/dist/commands/esbuild/util/esbuildPlugins.d.ts +16 -0
  16. package/dist/commands/esbuild/util/esbuildPlugins.d.ts.map +1 -0
  17. package/dist/commands/generate/GenerateProgram.d.ts +18 -0
  18. package/dist/commands/generate/GenerateProgram.d.ts.map +1 -0
  19. package/dist/commands/generate/index.d.ts +3 -0
  20. package/dist/commands/generate/index.d.ts.map +1 -0
  21. package/dist/commands/sync/SyncProgram.d.ts +15 -0
  22. package/dist/commands/sync/SyncProgram.d.ts.map +1 -0
  23. package/dist/commands/sync/index.d.ts +3 -0
  24. package/dist/commands/sync/index.d.ts.map +1 -0
  25. package/dist/commands/sync/when.d.ts +21 -0
  26. package/dist/commands/sync/when.d.ts.map +1 -0
  27. package/dist/index.d.ts +3 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.esm.js +5 -1
  30. package/dist/index.esm.js.map +7 -1
  31. package/dist/index.js +5 -1
  32. package/dist/index.js.map +7 -1
  33. package/dist/utils/AsyncArray.d.ts +21 -0
  34. package/dist/utils/AsyncArray.d.ts.map +1 -0
  35. package/dist/utils/appendScript.d.ts +7 -0
  36. package/dist/utils/appendScript.d.ts.map +1 -0
  37. package/dist/utils/arrayToMap.d.ts +3 -0
  38. package/dist/utils/arrayToMap.d.ts.map +1 -0
  39. package/dist/utils/findParent.d.ts +8 -0
  40. package/dist/utils/findParent.d.ts.map +1 -0
  41. package/dist/utils/index.d.ts +5 -0
  42. package/dist/utils/index.d.ts.map +1 -0
  43. package/package.json +34 -22
  44. package/src/@types/global.d.ts +8 -0
  45. package/src/PathUtil.ts +8 -0
  46. package/src/bin.ts +5 -5
  47. package/src/commands/esbuild/ESBuildProgram.ts +288 -0
  48. package/src/commands/esbuild/__tests__/ESBuildProgram.test.ts +125 -0
  49. package/src/commands/esbuild/__tests__/spinnies.test.ts +11 -0
  50. package/src/commands/esbuild/index.ts +32 -0
  51. package/src/commands/esbuild/util/debounce.ts +29 -0
  52. package/src/commands/esbuild/util/esbuildPlugins.ts +82 -0
  53. package/src/commands/generate/GenerateProgram.ts +115 -0
  54. package/src/commands/generate/__tests__/GenerateProgram.test.ts +51 -0
  55. package/src/commands/generate/index.ts +26 -0
  56. package/src/commands/sync/SyncProgram.ts +247 -0
  57. package/src/commands/sync/__tests__/SyncProgram.test.ts +50 -0
  58. package/src/commands/sync/__tests__/when.test.ts +46 -0
  59. package/src/commands/sync/index.ts +15 -0
  60. package/src/commands/sync/when.ts +67 -0
  61. package/src/index.ts +3 -1
  62. package/src/utils/AsyncArray.ts +144 -0
  63. package/src/utils/__tests__/appendScript.test.ts +15 -0
  64. package/src/utils/__tests__/arrayToMap.test.ts +37 -0
  65. package/src/utils/__tests__/findParent.test.ts +15 -0
  66. package/src/utils/appendScript.ts +17 -0
  67. package/src/utils/arrayToMap.ts +27 -0
  68. package/src/utils/findParent.ts +36 -0
  69. package/src/utils/index.ts +4 -0
  70. package/templates/cli/CHANGELOG.md +1 -0
  71. package/templates/cli/README.md +1 -0
  72. package/templates/cli/package.json +44 -0
  73. package/templates/cli/src/bin.ts +13 -0
  74. package/templates/cli/src/index.ts +1 -0
  75. package/templates/cli/tsconfig.json +28 -0
  76. package/templates/lib/CHANGELOG.md +1 -0
  77. package/templates/lib/README.md +1 -0
  78. package/templates/lib/package.json +32 -0
  79. package/templates/lib/src/__tests__/hello.test.ts +5 -0
  80. package/templates/lib/src/index.ts +3 -0
  81. package/templates/lib/tsconfig.json +28 -0
  82. package/tsconfig.json +34 -28
package/dist/bin.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"file":"bin.js","sources":["../src/bin.ts"],"sourcesContent":["import { Command } from 'commander'\r\nimport { command as buildCommand } from '@liuli-util/liuli-cli-plugin-build'\r\nimport { command as initCommand } from '@liuli-util/liuli-cli-plugin-generate'\r\nimport { command as syncCommand } from '@liuli-util/liuli-cli-plugin-sync'\r\n\r\nconst main = new Command()\r\nmain\r\n .addCommand(buildCommand)\r\n .addCommand(initCommand)\r\n .addCommand(syncCommand)\r\n .parse()\r\n"],"names":["Command","addCommand","buildCommand","initCommand","syncCommand","parse"],"mappings":";;2LAKa,IAAIA,WAEdC,WAAWC,WACXD,WAAWE,WACXF,WAAWG,WACXC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../node_modules/commander/lib/error.js", "../../../node_modules/commander/lib/argument.js", "../../../node_modules/commander/lib/help.js", "../../../node_modules/commander/lib/option.js", "../../../node_modules/commander/lib/suggestSimilar.js", "../../../node_modules/commander/lib/command.js", "../../../node_modules/commander/index.js", "../../../node_modules/universalify/index.js", "../../../node_modules/graceful-fs/polyfills.js", "../../../node_modules/graceful-fs/legacy-streams.js", "../../../node_modules/graceful-fs/clone.js", "../../../node_modules/graceful-fs/graceful-fs.js", "../../../node_modules/fs-extra/lib/fs/index.js", "../../../node_modules/fs-extra/lib/mkdirs/utils.js", "../../../node_modules/fs-extra/lib/mkdirs/make-dir.js", "../../../node_modules/fs-extra/lib/mkdirs/index.js", "../../../node_modules/fs-extra/lib/util/utimes.js", "../../../node_modules/fs-extra/lib/util/stat.js", "../../../node_modules/fs-extra/lib/copy-sync/copy-sync.js", "../../../node_modules/fs-extra/lib/copy-sync/index.js", "../../../node_modules/fs-extra/lib/path-exists/index.js", "../../../node_modules/fs-extra/lib/copy/copy.js", "../../../node_modules/fs-extra/lib/copy/index.js", "../../../node_modules/fs-extra/lib/remove/rimraf.js", "../../../node_modules/fs-extra/lib/remove/index.js", "../../../node_modules/fs-extra/lib/empty/index.js", "../../../node_modules/fs-extra/lib/ensure/file.js", "../../../node_modules/fs-extra/lib/ensure/link.js", "../../../node_modules/fs-extra/lib/ensure/symlink-paths.js", "../../../node_modules/fs-extra/lib/ensure/symlink-type.js", "../../../node_modules/fs-extra/lib/ensure/symlink.js", "../../../node_modules/fs-extra/lib/ensure/index.js", "../../../node_modules/jsonfile/utils.js", "../../../node_modules/jsonfile/index.js", "../../../node_modules/fs-extra/lib/json/jsonfile.js", "../../../node_modules/fs-extra/lib/output/index.js", "../../../node_modules/fs-extra/lib/json/output-json.js", "../../../node_modules/fs-extra/lib/json/output-json-sync.js", "../../../node_modules/fs-extra/lib/json/index.js", "../../../node_modules/fs-extra/lib/move-sync/move-sync.js", "../../../node_modules/fs-extra/lib/move-sync/index.js", "../../../node_modules/fs-extra/lib/move/move.js", "../../../node_modules/fs-extra/lib/move/index.js", "../../../node_modules/fs-extra/lib/index.js", "../../../node_modules/fs.realpath/old.js", "../../../node_modules/fs.realpath/index.js", "../../../node_modules/concat-map/index.js", "../../../node_modules/balanced-match/index.js", "../../../node_modules/brace-expansion/index.js", "../../../node_modules/minimatch/minimatch.js", "../../../node_modules/inherits/inherits_browser.js", "../../../node_modules/inherits/inherits.js", "../../../node_modules/path-is-absolute/index.js", "../../../node_modules/glob/common.js", "../../../node_modules/glob/sync.js", "../../../node_modules/wrappy/wrappy.js", "../../../node_modules/once/once.js", "../../../node_modules/inflight/inflight.js", "../../../node_modules/glob/glob.js", "../../../node_modules/glob-promise/lib/index.js", "../../../node_modules/picomatch/lib/constants.js", "../../../node_modules/picomatch/lib/utils.js", "../../../node_modules/picomatch/lib/scan.js", "../../../node_modules/picomatch/lib/parse.js", "../../../node_modules/picomatch/lib/picomatch.js", "../../../node_modules/picomatch/index.js", "../../../node_modules/readdirp/index.js", "../../../node_modules/normalize-path/index.js", "../../../node_modules/anymatch/index.js", "../../../node_modules/is-extglob/index.js", "../../../node_modules/is-glob/index.js", "../../../node_modules/glob-parent/index.js", "../../../node_modules/braces/lib/utils.js", "../../../node_modules/braces/lib/stringify.js", "../../../node_modules/is-number/index.js", "../../../node_modules/to-regex-range/index.js", "../../../node_modules/fill-range/index.js", "../../../node_modules/braces/lib/compile.js", "../../../node_modules/braces/lib/expand.js", "../../../node_modules/braces/lib/constants.js", "../../../node_modules/braces/lib/parse.js", "../../../node_modules/braces/index.js", "../../../node_modules/binary-extensions/index.js", "../../../node_modules/is-binary-path/index.js", "../../../node_modules/chokidar/lib/constants.js", "../../../node_modules/chokidar/lib/nodefs-handler.js", "../../../node_modules/chokidar/lib/fsevents-handler.js", "../../../node_modules/chokidar/index.js", "../../../node_modules/escape-string-regexp/index.js", "../../../node_modules/spinnies/node_modules/color-name/index.js", "../../../node_modules/spinnies/node_modules/color-convert/conversions.js", "../../../node_modules/spinnies/node_modules/color-convert/route.js", "../../../node_modules/spinnies/node_modules/color-convert/index.js", "../../../node_modules/spinnies/node_modules/ansi-styles/index.js", "../../../node_modules/spinnies/node_modules/has-flag/index.js", "../../../node_modules/spinnies/node_modules/supports-color/index.js", "../../../node_modules/spinnies/node_modules/chalk/templates.js", "../../../node_modules/spinnies/node_modules/chalk/index.js", "../../../node_modules/mimic-fn/index.js", "../../../node_modules/onetime/index.js", "../../../node_modules/signal-exit/signals.js", "../../../node_modules/signal-exit/index.js", "../../../node_modules/restore-cursor/index.js", "../../../node_modules/cli-cursor/index.js", "../../../node_modules/spinnies/node_modules/ansi-regex/index.js", "../../../node_modules/spinnies/node_modules/strip-ansi/index.js", "../../../node_modules/spinnies/utils.js", "../../../node_modules/spinnies/index.js", "../../../node_modules/ansi-colors/symbols.js", "../../../node_modules/ansi-colors/index.js", "../../../node_modules/enquirer/lib/utils.js", "../../../node_modules/enquirer/lib/combos.js", "../../../node_modules/enquirer/lib/keypress.js", "../../../node_modules/enquirer/lib/timer.js", "../../../node_modules/enquirer/lib/state.js", "../../../node_modules/enquirer/lib/styles.js", "../../../node_modules/enquirer/lib/symbols.js", "../../../node_modules/enquirer/lib/theme.js", "../../../node_modules/enquirer/lib/ansi.js", "../../../node_modules/enquirer/lib/prompt.js", "../../../node_modules/enquirer/lib/roles.js", "../../../node_modules/enquirer/lib/types/array.js", "../../../node_modules/enquirer/lib/prompts/select.js", "../../../node_modules/enquirer/lib/prompts/autocomplete.js", "../../../node_modules/enquirer/lib/placeholder.js", "../../../node_modules/enquirer/lib/prompts/form.js", "../../../node_modules/enquirer/lib/types/auth.js", "../../../node_modules/enquirer/lib/prompts/basicauth.js", "../../../node_modules/enquirer/lib/types/boolean.js", "../../../node_modules/enquirer/lib/prompts/confirm.js", "../../../node_modules/enquirer/lib/prompts/editable.js", "../../../node_modules/enquirer/lib/types/string.js", "../../../node_modules/enquirer/lib/completer.js", "../../../node_modules/enquirer/lib/prompts/input.js", "../../../node_modules/enquirer/lib/prompts/invisible.js", "../../../node_modules/enquirer/lib/prompts/list.js", "../../../node_modules/enquirer/lib/prompts/multiselect.js", "../../../node_modules/enquirer/lib/types/number.js", "../../../node_modules/enquirer/lib/prompts/numeral.js", "../../../node_modules/enquirer/lib/prompts/password.js", "../../../node_modules/enquirer/lib/prompts/scale.js", "../../../node_modules/enquirer/lib/interpolate.js", "../../../node_modules/enquirer/lib/prompts/snippet.js", "../../../node_modules/enquirer/lib/prompts/sort.js", "../../../node_modules/enquirer/lib/prompts/survey.js", "../../../node_modules/enquirer/lib/prompts/text.js", "../../../node_modules/enquirer/lib/prompts/toggle.js", "../../../node_modules/enquirer/lib/prompts/quiz.js", "../../../node_modules/enquirer/lib/prompts/index.js", "../../../node_modules/enquirer/lib/types/index.js", "../../../node_modules/enquirer/index.js", "../src/bin.ts", "../src/commands/esbuild/index.ts", "../src/commands/esbuild/ESBuildProgram.ts", "../src/commands/esbuild/util/esbuildPlugins.ts", "../src/commands/esbuild/util/debounce.ts", "../src/commands/generate/index.ts", "../src/commands/generate/GenerateProgram.ts", "../src/commands/sync/SyncProgram.ts", "../../../node_modules/lodash-es/_freeGlobal.js", "../../../node_modules/lodash-es/_root.js", "../../../node_modules/lodash-es/_Symbol.js", "../../../node_modules/lodash-es/_getRawTag.js", "../../../node_modules/lodash-es/_objectToString.js", "../../../node_modules/lodash-es/_baseGetTag.js", "../../../node_modules/lodash-es/isObjectLike.js", "../../../node_modules/lodash-es/isArray.js", "../../../node_modules/lodash-es/isObject.js", "../../../node_modules/lodash-es/identity.js", "../../../node_modules/lodash-es/isFunction.js", "../../../node_modules/lodash-es/_coreJsData.js", "../../../node_modules/lodash-es/_isMasked.js", "../../../node_modules/lodash-es/_toSource.js", "../../../node_modules/lodash-es/_baseIsNative.js", "../../../node_modules/lodash-es/_getValue.js", "../../../node_modules/lodash-es/_getNative.js", "../../../node_modules/lodash-es/_baseCreate.js", "../../../node_modules/lodash-es/_apply.js", "../../../node_modules/lodash-es/_copyArray.js", "../../../node_modules/lodash-es/_shortOut.js", "../../../node_modules/lodash-es/constant.js", "../../../node_modules/lodash-es/_defineProperty.js", "../../../node_modules/lodash-es/_baseSetToString.js", "../../../node_modules/lodash-es/_setToString.js", "../../../node_modules/lodash-es/_isIndex.js", "../../../node_modules/lodash-es/_baseAssignValue.js", "../../../node_modules/lodash-es/eq.js", "../../../node_modules/lodash-es/_assignValue.js", "../../../node_modules/lodash-es/_copyObject.js", "../../../node_modules/lodash-es/_overRest.js", "../../../node_modules/lodash-es/_baseRest.js", "../../../node_modules/lodash-es/isLength.js", "../../../node_modules/lodash-es/isArrayLike.js", "../../../node_modules/lodash-es/_isIterateeCall.js", "../../../node_modules/lodash-es/_createAssigner.js", "../../../node_modules/lodash-es/_isPrototype.js", "../../../node_modules/lodash-es/_baseTimes.js", "../../../node_modules/lodash-es/_baseIsArguments.js", "../../../node_modules/lodash-es/isArguments.js", "../../../node_modules/lodash-es/stubFalse.js", "../../../node_modules/lodash-es/isBuffer.js", "../../../node_modules/lodash-es/_baseIsTypedArray.js", "../../../node_modules/lodash-es/_baseUnary.js", "../../../node_modules/lodash-es/_nodeUtil.js", "../../../node_modules/lodash-es/isTypedArray.js", "../../../node_modules/lodash-es/_arrayLikeKeys.js", "../../../node_modules/lodash-es/_overArg.js", "../../../node_modules/lodash-es/_nativeKeysIn.js", "../../../node_modules/lodash-es/_baseKeysIn.js", "../../../node_modules/lodash-es/keysIn.js", "../../../node_modules/lodash-es/_nativeCreate.js", "../../../node_modules/lodash-es/_hashClear.js", "../../../node_modules/lodash-es/_hashDelete.js", "../../../node_modules/lodash-es/_hashGet.js", "../../../node_modules/lodash-es/_hashHas.js", "../../../node_modules/lodash-es/_hashSet.js", "../../../node_modules/lodash-es/_Hash.js", "../../../node_modules/lodash-es/_listCacheClear.js", "../../../node_modules/lodash-es/_assocIndexOf.js", "../../../node_modules/lodash-es/_listCacheDelete.js", "../../../node_modules/lodash-es/_listCacheGet.js", "../../../node_modules/lodash-es/_listCacheHas.js", "../../../node_modules/lodash-es/_listCacheSet.js", "../../../node_modules/lodash-es/_ListCache.js", "../../../node_modules/lodash-es/_Map.js", "../../../node_modules/lodash-es/_mapCacheClear.js", "../../../node_modules/lodash-es/_isKeyable.js", "../../../node_modules/lodash-es/_getMapData.js", "../../../node_modules/lodash-es/_mapCacheDelete.js", "../../../node_modules/lodash-es/_mapCacheGet.js", "../../../node_modules/lodash-es/_mapCacheHas.js", "../../../node_modules/lodash-es/_mapCacheSet.js", "../../../node_modules/lodash-es/_MapCache.js", "../../../node_modules/lodash-es/_getPrototype.js", "../../../node_modules/lodash-es/isPlainObject.js", "../../../node_modules/lodash-es/_stackClear.js", "../../../node_modules/lodash-es/_stackDelete.js", "../../../node_modules/lodash-es/_stackGet.js", "../../../node_modules/lodash-es/_stackHas.js", "../../../node_modules/lodash-es/_stackSet.js", "../../../node_modules/lodash-es/_Stack.js", "../../../node_modules/lodash-es/_cloneBuffer.js", "../../../node_modules/lodash-es/_Uint8Array.js", "../../../node_modules/lodash-es/_cloneArrayBuffer.js", "../../../node_modules/lodash-es/_cloneTypedArray.js", "../../../node_modules/lodash-es/_initCloneObject.js", "../../../node_modules/lodash-es/_createBaseFor.js", "../../../node_modules/lodash-es/_baseFor.js", "../../../node_modules/lodash-es/_assignMergeValue.js", "../../../node_modules/lodash-es/isArrayLikeObject.js", "../../../node_modules/lodash-es/_safeGet.js", "../../../node_modules/lodash-es/toPlainObject.js", "../../../node_modules/lodash-es/_baseMergeDeep.js", "../../../node_modules/lodash-es/_baseMerge.js", "../../../node_modules/lodash-es/merge.js", "../../../node_modules/lodash-es/lodash.js", "../src/commands/sync/when.ts", "../src/utils/arrayToMap.ts", "../src/utils/appendScript.ts", "../src/utils/findParent.ts", "../src/utils/AsyncArray.ts", "../src/PathUtil.ts", "../src/commands/sync/index.ts"],
4
+ "sourcesContent": ["// @ts-check\n\n/**\n * CommanderError class\n * @class\n */\nclass CommanderError extends Error {\n /**\n * Constructs the CommanderError class\n * @param {number} exitCode suggested exit code which could be used with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @constructor\n */\n constructor(exitCode, code, message) {\n super(message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n this.code = code;\n this.exitCode = exitCode;\n this.nestedError = undefined;\n }\n}\n\n/**\n * InvalidArgumentError class\n * @class\n */\nclass InvalidArgumentError extends CommanderError {\n /**\n * Constructs the InvalidArgumentError class\n * @param {string} [message] explanation of why argument is invalid\n * @constructor\n */\n constructor(message) {\n super(1, 'commander.invalidArgument', message);\n // properly capture stack trace in Node.js\n Error.captureStackTrace(this, this.constructor);\n this.name = this.constructor.name;\n }\n}\n\nexports.CommanderError = CommanderError;\nexports.InvalidArgumentError = InvalidArgumentError;\n", "const { InvalidArgumentError } = require('./error.js');\n\n// @ts-check\n\nclass Argument {\n /**\n * Initialize a new command argument with the given name and description.\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @param {string} name\n * @param {string} [description]\n */\n\n constructor(name, description) {\n this.description = description || '';\n this.variadic = false;\n this.parseArg = undefined;\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.argChoices = undefined;\n\n switch (name[0]) {\n case '<': // e.g. <required>\n this.required = true;\n this._name = name.slice(1, -1);\n break;\n case '[': // e.g. [optional]\n this.required = false;\n this._name = name.slice(1, -1);\n break;\n default:\n this.required = true;\n this._name = name;\n break;\n }\n\n if (this._name.length > 3 && this._name.slice(-3) === '...') {\n this.variadic = true;\n this._name = this._name.slice(0, -3);\n }\n }\n\n /**\n * Return argument name.\n *\n * @return {string}\n */\n\n name() {\n return this._name;\n };\n\n /**\n * @api private\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {any} value\n * @param {string} [description]\n * @return {Argument}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n };\n\n /**\n * Set the custom handler for processing CLI command arguments into argument values.\n *\n * @param {Function} [fn]\n * @return {Argument}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n };\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Argument}\n */\n\n choices(values) {\n this.argChoices = values;\n this.parseArg = (arg, previous) => {\n if (!values.includes(arg)) {\n throw new InvalidArgumentError(`Allowed choices are ${values.join(', ')}.`);\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n };\n\n /**\n * Make option-argument required.\n */\n argRequired() {\n this.required = true;\n return this;\n }\n\n /**\n * Make option-argument optional.\n */\n argOptional() {\n this.required = false;\n return this;\n }\n}\n\n/**\n * Takes an argument and returns its human readable equivalent for help usage.\n *\n * @param {Argument} arg\n * @return {string}\n * @api private\n */\n\nfunction humanReadableArgName(arg) {\n const nameOutput = arg.name() + (arg.variadic === true ? '...' : '');\n\n return arg.required\n ? '<' + nameOutput + '>'\n : '[' + nameOutput + ']';\n}\n\nexports.Argument = Argument;\nexports.humanReadableArgName = humanReadableArgName;\n", "const { humanReadableArgName } = require('./argument.js');\n\n/**\n * TypeScript import types for JSDoc, used by Visual Studio Code IntelliSense and `npm run typescript-checkJS`\n * https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#import-types\n * @typedef { import(\"./argument.js\").Argument } Argument\n * @typedef { import(\"./command.js\").Command } Command\n * @typedef { import(\"./option.js\").Option } Option\n */\n\n// @ts-check\n\n// Although this is a class, methods are static in style to allow override using subclass or just functions.\nclass Help {\n constructor() {\n this.helpWidth = undefined;\n this.sortSubcommands = false;\n this.sortOptions = false;\n }\n\n /**\n * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.\n *\n * @param {Command} cmd\n * @returns {Command[]}\n */\n\n visibleCommands(cmd) {\n const visibleCommands = cmd.commands.filter(cmd => !cmd._hidden);\n if (cmd._hasImplicitHelpCommand()) {\n // Create a command matching the implicit help command.\n const [, helpName, helpArgs] = cmd._helpCommandnameAndArgs.match(/([^ ]+) *(.*)/);\n const helpCommand = cmd.createCommand(helpName)\n .helpOption(false);\n helpCommand.description(cmd._helpCommandDescription);\n if (helpArgs) helpCommand.arguments(helpArgs);\n visibleCommands.push(helpCommand);\n }\n if (this.sortSubcommands) {\n visibleCommands.sort((a, b) => {\n // @ts-ignore: overloaded return type\n return a.name().localeCompare(b.name());\n });\n }\n return visibleCommands;\n }\n\n /**\n * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.\n *\n * @param {Command} cmd\n * @returns {Option[]}\n */\n\n visibleOptions(cmd) {\n const visibleOptions = cmd.options.filter((option) => !option.hidden);\n // Implicit help\n const showShortHelpFlag = cmd._hasHelpOption && cmd._helpShortFlag && !cmd._findOption(cmd._helpShortFlag);\n const showLongHelpFlag = cmd._hasHelpOption && !cmd._findOption(cmd._helpLongFlag);\n if (showShortHelpFlag || showLongHelpFlag) {\n let helpOption;\n if (!showShortHelpFlag) {\n helpOption = cmd.createOption(cmd._helpLongFlag, cmd._helpDescription);\n } else if (!showLongHelpFlag) {\n helpOption = cmd.createOption(cmd._helpShortFlag, cmd._helpDescription);\n } else {\n helpOption = cmd.createOption(cmd._helpFlags, cmd._helpDescription);\n }\n visibleOptions.push(helpOption);\n }\n if (this.sortOptions) {\n const getSortKey = (option) => {\n // WYSIWYG for order displayed in help with short before long, no special handling for negated.\n return option.short ? option.short.replace(/^-/, '') : option.long.replace(/^--/, '');\n };\n visibleOptions.sort((a, b) => {\n return getSortKey(a).localeCompare(getSortKey(b));\n });\n }\n return visibleOptions;\n }\n\n /**\n * Get an array of the arguments if any have a description.\n *\n * @param {Command} cmd\n * @returns {Argument[]}\n */\n\n visibleArguments(cmd) {\n // Side effect! Apply the legacy descriptions before the arguments are displayed.\n if (cmd._argsDescription) {\n cmd._args.forEach(argument => {\n argument.description = argument.description || cmd._argsDescription[argument.name()] || '';\n });\n }\n\n // If there are any arguments with a description then return all the arguments.\n if (cmd._args.find(argument => argument.description)) {\n return cmd._args;\n };\n return [];\n }\n\n /**\n * Get the command term to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandTerm(cmd) {\n // Legacy. Ignores custom usage string, and nested commands.\n const args = cmd._args.map(arg => humanReadableArgName(arg)).join(' ');\n return cmd._name +\n (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +\n (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option\n (args ? ' ' + args : '');\n }\n\n /**\n * Get the option term to show in the list of options.\n *\n * @param {Option} option\n * @returns {string}\n */\n\n optionTerm(option) {\n return option.flags;\n }\n\n /**\n * Get the argument term to show in the list of arguments.\n *\n * @param {Argument} argument\n * @returns {string}\n */\n\n argumentTerm(argument) {\n return argument.name();\n }\n\n /**\n * Get the longest command term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestSubcommandTermLength(cmd, helper) {\n return helper.visibleCommands(cmd).reduce((max, command) => {\n return Math.max(max, helper.subcommandTerm(command).length);\n }, 0);\n };\n\n /**\n * Get the longest option term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestOptionTermLength(cmd, helper) {\n return helper.visibleOptions(cmd).reduce((max, option) => {\n return Math.max(max, helper.optionTerm(option).length);\n }, 0);\n };\n\n /**\n * Get the longest argument term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n longestArgumentTermLength(cmd, helper) {\n return helper.visibleArguments(cmd).reduce((max, argument) => {\n return Math.max(max, helper.argumentTerm(argument).length);\n }, 0);\n };\n\n /**\n * Get the command usage to be displayed at the top of the built-in help.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandUsage(cmd) {\n // Usage\n let cmdName = cmd._name;\n if (cmd._aliases[0]) {\n cmdName = cmdName + '|' + cmd._aliases[0];\n }\n let parentCmdNames = '';\n for (let parentCmd = cmd.parent; parentCmd; parentCmd = parentCmd.parent) {\n parentCmdNames = parentCmd.name() + ' ' + parentCmdNames;\n }\n return parentCmdNames + cmdName + ' ' + cmd.usage();\n }\n\n /**\n * Get the description for the command.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n commandDescription(cmd) {\n // @ts-ignore: overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the command description to show in the list of subcommands.\n *\n * @param {Command} cmd\n * @returns {string}\n */\n\n subcommandDescription(cmd) {\n // @ts-ignore: overloaded return type\n return cmd.description();\n }\n\n /**\n * Get the option description to show in the list of options.\n *\n * @param {Option} option\n * @return {string}\n */\n\n optionDescription(option) {\n const extraInfo = [];\n // Some of these do not make sense for negated boolean and suppress for backwards compatibility.\n\n if (option.argChoices && !option.negate) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n }\n if (option.defaultValue !== undefined && !option.negate) {\n extraInfo.push(`default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);\n }\n if (option.envVar !== undefined) {\n extraInfo.push(`env: ${option.envVar}`);\n }\n if (extraInfo.length > 0) {\n return `${option.description} (${extraInfo.join(', ')})`;\n }\n\n return option.description;\n };\n\n /**\n * Get the argument description to show in the list of arguments.\n *\n * @param {Argument} argument\n * @return {string}\n */\n\n argumentDescription(argument) {\n const extraInfo = [];\n if (argument.argChoices) {\n extraInfo.push(\n // use stringify to match the display of the default value\n `choices: ${argument.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);\n }\n if (argument.defaultValue !== undefined) {\n extraInfo.push(`default: ${argument.defaultValueDescription || JSON.stringify(argument.defaultValue)}`);\n }\n if (extraInfo.length > 0) {\n const extraDescripton = `(${extraInfo.join(', ')})`;\n if (argument.description) {\n return `${argument.description} ${extraDescripton}`;\n }\n return extraDescripton;\n }\n return argument.description;\n }\n\n /**\n * Generate the built-in help text.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {string}\n */\n\n formatHelp(cmd, helper) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term, description) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);\n }\n return term;\n };\n function formatList(textArray) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([commandDescription, '']);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument) => {\n return formatItem(helper.argumentTerm(argument), helper.argumentDescription(argument));\n });\n if (argumentList.length > 0) {\n output = output.concat(['Arguments:', formatList(argumentList), '']);\n }\n\n // Options\n const optionList = helper.visibleOptions(cmd).map((option) => {\n return formatItem(helper.optionTerm(option), helper.optionDescription(option));\n });\n if (optionList.length > 0) {\n output = output.concat(['Options:', formatList(optionList), '']);\n }\n\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd) => {\n return formatItem(helper.subcommandTerm(cmd), helper.subcommandDescription(cmd));\n });\n if (commandList.length > 0) {\n output = output.concat(['Commands:', formatList(commandList), '']);\n }\n\n return output.join('\\n');\n }\n\n /**\n * Calculate the pad width from the maximum term length.\n *\n * @param {Command} cmd\n * @param {Help} helper\n * @returns {number}\n */\n\n padWidth(cmd, helper) {\n return Math.max(\n helper.longestOptionTermLength(cmd, helper),\n helper.longestSubcommandTermLength(cmd, helper),\n helper.longestArgumentTermLength(cmd, helper)\n );\n };\n\n /**\n * Wrap the given string to width characters per line, with lines after the first indented.\n * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.\n *\n * @param {string} str\n * @param {number} width\n * @param {number} indent\n * @param {number} [minColumnWidth=40]\n * @return {string}\n *\n */\n\n wrap(str, width, indent, minColumnWidth = 40) {\n // Detect manually wrapped and indented strings by searching for line breaks\n // followed by multiple spaces/tabs.\n if (str.match(/[\\n]\\s+/)) return str;\n // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).\n const columnWidth = width - indent;\n if (columnWidth < minColumnWidth) return str;\n\n const leadingStr = str.substr(0, indent);\n const columnText = str.substr(indent);\n\n const indentString = ' '.repeat(indent);\n const regex = new RegExp('.{1,' + (columnWidth - 1) + '}([\\\\s\\u200B]|$)|[^\\\\s\\u200B]+?([\\\\s\\u200B]|$)', 'g');\n const lines = columnText.match(regex) || [];\n return leadingStr + lines.map((line, i) => {\n if (line.slice(-1) === '\\n') {\n line = line.slice(0, line.length - 1);\n }\n return ((i > 0) ? indentString : '') + line.trimRight();\n }).join('\\n');\n }\n}\n\nexports.Help = Help;\n", "const { InvalidArgumentError } = require('./error.js');\n\n// @ts-check\n\nclass Option {\n /**\n * Initialize a new `Option` with the given `flags` and `description`.\n *\n * @param {string} flags\n * @param {string} [description]\n */\n\n constructor(flags, description) {\n this.flags = flags;\n this.description = description || '';\n\n this.required = flags.includes('<'); // A value must be supplied when the option is specified.\n this.optional = flags.includes('['); // A value is optional when the option is specified.\n // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument\n this.variadic = /\\w\\.\\.\\.[>\\]]$/.test(flags); // The option can take multiple values.\n this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.\n const optionFlags = splitOptionFlags(flags);\n this.short = optionFlags.shortFlag;\n this.long = optionFlags.longFlag;\n this.negate = false;\n if (this.long) {\n this.negate = this.long.startsWith('--no-');\n }\n this.defaultValue = undefined;\n this.defaultValueDescription = undefined;\n this.envVar = undefined;\n this.parseArg = undefined;\n this.hidden = false;\n this.argChoices = undefined;\n }\n\n /**\n * Set the default value, and optionally supply the description to be displayed in the help.\n *\n * @param {any} value\n * @param {string} [description]\n * @return {Option}\n */\n\n default(value, description) {\n this.defaultValue = value;\n this.defaultValueDescription = description;\n return this;\n };\n\n /**\n * Set environment variable to check for option value.\n * Priority order of option values is default < env < cli\n *\n * @param {string} name\n * @return {Option}\n */\n\n env(name) {\n this.envVar = name;\n return this;\n };\n\n /**\n * Set the custom handler for processing CLI option arguments into option values.\n *\n * @param {Function} [fn]\n * @return {Option}\n */\n\n argParser(fn) {\n this.parseArg = fn;\n return this;\n };\n\n /**\n * Whether the option is mandatory and must have a value after parsing.\n *\n * @param {boolean} [mandatory=true]\n * @return {Option}\n */\n\n makeOptionMandatory(mandatory = true) {\n this.mandatory = !!mandatory;\n return this;\n };\n\n /**\n * Hide option in help.\n *\n * @param {boolean} [hide=true]\n * @return {Option}\n */\n\n hideHelp(hide = true) {\n this.hidden = !!hide;\n return this;\n };\n\n /**\n * @api private\n */\n\n _concatValue(value, previous) {\n if (previous === this.defaultValue || !Array.isArray(previous)) {\n return [value];\n }\n\n return previous.concat(value);\n }\n\n /**\n * Only allow option value to be one of choices.\n *\n * @param {string[]} values\n * @return {Option}\n */\n\n choices(values) {\n this.argChoices = values;\n this.parseArg = (arg, previous) => {\n if (!values.includes(arg)) {\n throw new InvalidArgumentError(`Allowed choices are ${values.join(', ')}.`);\n }\n if (this.variadic) {\n return this._concatValue(arg, previous);\n }\n return arg;\n };\n return this;\n };\n\n /**\n * Return option name.\n *\n * @return {string}\n */\n\n name() {\n if (this.long) {\n return this.long.replace(/^--/, '');\n }\n return this.short.replace(/^-/, '');\n };\n\n /**\n * Return option name, in a camelcase format that can be used\n * as a object attribute key.\n *\n * @return {string}\n * @api private\n */\n\n attributeName() {\n return camelcase(this.name().replace(/^no-/, ''));\n };\n\n /**\n * Check if `arg` matches the short or long flag.\n *\n * @param {string} arg\n * @return {boolean}\n * @api private\n */\n\n is(arg) {\n return this.short === arg || this.long === arg;\n };\n}\n\n/**\n * Convert string from kebab-case to camelCase.\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction camelcase(str) {\n return str.split('-').reduce((str, word) => {\n return str + word[0].toUpperCase() + word.slice(1);\n });\n}\n\n/**\n * Split the short and long flag out of something like '-m,--mixed <value>'\n *\n * @api private\n */\n\nfunction splitOptionFlags(flags) {\n let shortFlag;\n let longFlag;\n // Use original very loose parsing to maintain backwards compatibility for now,\n // which allowed for example unintended `-sw, --short-word` [sic].\n const flagParts = flags.split(/[ |,]+/);\n if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();\n longFlag = flagParts.shift();\n // Add support for lone short flag without significantly changing parsing!\n if (!shortFlag && /^-[^-]$/.test(longFlag)) {\n shortFlag = longFlag;\n longFlag = undefined;\n }\n return { shortFlag, longFlag };\n}\n\nexports.Option = Option;\nexports.splitOptionFlags = splitOptionFlags;\n", "const maxDistance = 3;\n\nfunction editDistance(a, b) {\n // https://en.wikipedia.org/wiki/Damerau\u2013Levenshtein_distance\n // Calculating optimal string alignment distance, no substring is edited more than once.\n // (Simple implementation.)\n\n // Quick early exit, return worst case.\n if (Math.abs(a.length - b.length) > maxDistance) return Math.max(a.length, b.length);\n\n // distance between prefix substrings of a and b\n const d = [];\n\n // pure deletions turn a into empty string\n for (let i = 0; i <= a.length; i++) {\n d[i] = [i];\n }\n // pure insertions turn empty string into b\n for (let j = 0; j <= b.length; j++) {\n d[0][j] = j;\n }\n\n // fill matrix\n for (let j = 1; j <= b.length; j++) {\n for (let i = 1; i <= a.length; i++) {\n let cost = 1;\n if (a[i - 1] === b[j - 1]) {\n cost = 0;\n } else {\n cost = 1;\n }\n d[i][j] = Math.min(\n d[i - 1][j] + 1, // deletion\n d[i][j - 1] + 1, // insertion\n d[i - 1][j - 1] + cost // substitution\n );\n // transposition\n if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) {\n d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + 1);\n }\n }\n }\n\n return d[a.length][b.length];\n}\n\n/**\n * Find close matches, restricted to same number of edits.\n *\n * @param {string} word\n * @param {string[]} candidates\n * @returns {string}\n */\n\nfunction suggestSimilar(word, candidates) {\n if (!candidates || candidates.length === 0) return '';\n // remove possible duplicates\n candidates = Array.from(new Set(candidates));\n\n const searchingOptions = word.startsWith('--');\n if (searchingOptions) {\n word = word.slice(2);\n candidates = candidates.map(candidate => candidate.slice(2));\n }\n\n let similar = [];\n let bestDistance = maxDistance;\n const minSimilarity = 0.4;\n candidates.forEach((candidate) => {\n if (candidate.length <= 1) return; // no one character guesses\n\n const distance = editDistance(word, candidate);\n const length = Math.max(word.length, candidate.length);\n const similarity = (length - distance) / length;\n if (similarity > minSimilarity) {\n if (distance < bestDistance) {\n // better edit distance, throw away previous worse matches\n bestDistance = distance;\n similar = [candidate];\n } else if (distance === bestDistance) {\n similar.push(candidate);\n }\n }\n });\n\n similar.sort((a, b) => a.localeCompare(b));\n if (searchingOptions) {\n similar = similar.map(candidate => `--${candidate}`);\n }\n\n if (similar.length > 1) {\n return `\\n(Did you mean one of ${similar.join(', ')}?)`;\n }\n if (similar.length === 1) {\n return `\\n(Did you mean ${similar[0]}?)`;\n }\n return '';\n}\n\nexports.suggestSimilar = suggestSimilar;\n", "const EventEmitter = require('events').EventEmitter;\nconst childProcess = require('child_process');\nconst path = require('path');\nconst fs = require('fs');\n\nconst { Argument, humanReadableArgName } = require('./argument.js');\nconst { CommanderError } = require('./error.js');\nconst { Help } = require('./help.js');\nconst { Option, splitOptionFlags } = require('./option.js');\nconst { suggestSimilar } = require('./suggestSimilar');\n\n// @ts-check\n\nclass Command extends EventEmitter {\n /**\n * Initialize a new `Command`.\n *\n * @param {string} [name]\n */\n\n constructor(name) {\n super();\n /** @type {Command[]} */\n this.commands = [];\n /** @type {Option[]} */\n this.options = [];\n this.parent = null;\n this._allowUnknownOption = false;\n this._allowExcessArguments = true;\n /** @type {Argument[]} */\n this._args = [];\n /** @type {string[]} */\n this.args = []; // cli args with options removed\n this.rawArgs = [];\n this.processedArgs = []; // like .args but after custom processing and collecting variadic\n this._scriptPath = null;\n this._name = name || '';\n this._optionValues = {};\n this._optionValueSources = {}; // default < env < cli\n this._storeOptionsAsProperties = false;\n this._actionHandler = null;\n this._executableHandler = false;\n this._executableFile = null; // custom name for executable\n this._defaultCommandName = null;\n this._exitCallback = null;\n this._aliases = [];\n this._combineFlagAndOptionalValue = true;\n this._description = '';\n this._argsDescription = undefined; // legacy\n this._enablePositionalOptions = false;\n this._passThroughOptions = false;\n this._lifeCycleHooks = {}; // a hash of arrays\n /** @type {boolean | string} */\n this._showHelpAfterError = false;\n this._showSuggestionAfterError = false;\n\n // see .configureOutput() for docs\n this._outputConfiguration = {\n writeOut: (str) => process.stdout.write(str),\n writeErr: (str) => process.stderr.write(str),\n getOutHelpWidth: () => process.stdout.isTTY ? process.stdout.columns : undefined,\n getErrHelpWidth: () => process.stderr.isTTY ? process.stderr.columns : undefined,\n outputError: (str, write) => write(str)\n };\n\n this._hidden = false;\n this._hasHelpOption = true;\n this._helpFlags = '-h, --help';\n this._helpDescription = 'display help for command';\n this._helpShortFlag = '-h';\n this._helpLongFlag = '--help';\n this._addImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false\n this._helpCommandName = 'help';\n this._helpCommandnameAndArgs = 'help [command]';\n this._helpCommandDescription = 'display help for command';\n this._helpConfiguration = {};\n }\n\n /**\n * Copy settings that are useful to have in common across root command and subcommands.\n *\n * (Used internally when adding a command using `.command()` so subcommands inherit parent settings.)\n *\n * @param {Command} sourceCommand\n * @return {Command} returns `this` for executable command\n */\n copyInheritedSettings(sourceCommand) {\n this._outputConfiguration = sourceCommand._outputConfiguration;\n this._hasHelpOption = sourceCommand._hasHelpOption;\n this._helpFlags = sourceCommand._helpFlags;\n this._helpDescription = sourceCommand._helpDescription;\n this._helpShortFlag = sourceCommand._helpShortFlag;\n this._helpLongFlag = sourceCommand._helpLongFlag;\n this._helpCommandName = sourceCommand._helpCommandName;\n this._helpCommandnameAndArgs = sourceCommand._helpCommandnameAndArgs;\n this._helpCommandDescription = sourceCommand._helpCommandDescription;\n this._helpConfiguration = sourceCommand._helpConfiguration;\n this._exitCallback = sourceCommand._exitCallback;\n this._storeOptionsAsProperties = sourceCommand._storeOptionsAsProperties;\n this._combineFlagAndOptionalValue = sourceCommand._combineFlagAndOptionalValue;\n this._allowExcessArguments = sourceCommand._allowExcessArguments;\n this._enablePositionalOptions = sourceCommand._enablePositionalOptions;\n this._showHelpAfterError = sourceCommand._showHelpAfterError;\n this._showSuggestionAfterError = sourceCommand._showSuggestionAfterError;\n\n return this;\n }\n\n /**\n * Define a command.\n *\n * There are two styles of command: pay attention to where to put the description.\n *\n * @example\n * // Command implemented using action handler (description is supplied separately to `.command`)\n * program\n * .command('clone <source> [destination]')\n * .description('clone a repository into a newly created directory')\n * .action((source, destination) => {\n * console.log('clone command called');\n * });\n *\n * // Command implemented using separate executable file (description is second parameter to `.command`)\n * program\n * .command('start <service>', 'start named service')\n * .command('stop [service]', 'stop named service, or all if no name supplied');\n *\n * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`\n * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)\n * @param {Object} [execOpts] - configuration options (for executable)\n * @return {Command} returns new command for action handler, or `this` for executable command\n */\n\n command(nameAndArgs, actionOptsOrExecDesc, execOpts) {\n let desc = actionOptsOrExecDesc;\n let opts = execOpts;\n if (typeof desc === 'object' && desc !== null) {\n opts = desc;\n desc = null;\n }\n opts = opts || {};\n const [, name, args] = nameAndArgs.match(/([^ ]+) *(.*)/);\n\n const cmd = this.createCommand(name);\n if (desc) {\n cmd.description(desc);\n cmd._executableHandler = true;\n }\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden\n cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor\n if (args) cmd.arguments(args);\n this.commands.push(cmd);\n cmd.parent = this;\n cmd.copyInheritedSettings(this);\n\n if (desc) return this;\n return cmd;\n };\n\n /**\n * Factory routine to create a new unattached command.\n *\n * See .command() for creating an attached subcommand, which uses this routine to\n * create the command. You can override createCommand to customise subcommands.\n *\n * @param {string} [name]\n * @return {Command} new command\n */\n\n createCommand(name) {\n return new Command(name);\n };\n\n /**\n * You can customise the help with a subclass of Help by overriding createHelp,\n * or by overriding Help properties using configureHelp().\n *\n * @return {Help}\n */\n\n createHelp() {\n return Object.assign(new Help(), this.configureHelp());\n };\n\n /**\n * You can customise the help by overriding Help properties using configureHelp(),\n * or with a subclass of Help by overriding createHelp().\n *\n * @param {Object} [configuration] - configuration options\n * @return {Command|Object} `this` command for chaining, or stored configuration\n */\n\n configureHelp(configuration) {\n if (configuration === undefined) return this._helpConfiguration;\n\n this._helpConfiguration = configuration;\n return this;\n }\n\n /**\n * The default output goes to stdout and stderr. You can customise this for special\n * applications. You can also customise the display of errors by overriding outputError.\n *\n * The configuration properties are all functions:\n *\n * // functions to change where being written, stdout and stderr\n * writeOut(str)\n * writeErr(str)\n * // matching functions to specify width for wrapping help\n * getOutHelpWidth()\n * getErrHelpWidth()\n * // functions based on what is being written out\n * outputError(str, write) // used for displaying errors, and not used for displaying help\n *\n * @param {Object} [configuration] - configuration options\n * @return {Command|Object} `this` command for chaining, or stored configuration\n */\n\n configureOutput(configuration) {\n if (configuration === undefined) return this._outputConfiguration;\n\n Object.assign(this._outputConfiguration, configuration);\n return this;\n }\n\n /**\n * Display the help or a custom message after an error occurs.\n *\n * @param {boolean|string} [displayHelp]\n * @return {Command} `this` command for chaining\n */\n showHelpAfterError(displayHelp = true) {\n if (typeof displayHelp !== 'string') displayHelp = !!displayHelp;\n this._showHelpAfterError = displayHelp;\n return this;\n }\n\n /**\n * Display suggestion of similar commands for unknown commands, or options for unknown options.\n *\n * @param {boolean} [displaySuggestion]\n * @return {Command} `this` command for chaining\n */\n showSuggestionAfterError(displaySuggestion = true) {\n this._showSuggestionAfterError = !!displaySuggestion;\n return this;\n }\n\n /**\n * Add a prepared subcommand.\n *\n * See .command() for creating an attached subcommand which inherits settings from its parent.\n *\n * @param {Command} cmd - new subcommand\n * @param {Object} [opts] - configuration options\n * @return {Command} `this` command for chaining\n */\n\n addCommand(cmd, opts) {\n if (!cmd._name) throw new Error('Command passed to .addCommand() must have a name');\n\n // To keep things simple, block automatic name generation for deeply nested executables.\n // Fail fast and detect when adding rather than later when parsing.\n function checkExplicitNames(commandArray) {\n commandArray.forEach((cmd) => {\n if (cmd._executableHandler && !cmd._executableFile) {\n throw new Error(`Must specify executableFile for deeply nested executable: ${cmd.name()}`);\n }\n checkExplicitNames(cmd.commands);\n });\n }\n checkExplicitNames(cmd.commands);\n\n opts = opts || {};\n if (opts.isDefault) this._defaultCommandName = cmd._name;\n if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation\n\n this.commands.push(cmd);\n cmd.parent = this;\n return this;\n };\n\n /**\n * Factory routine to create a new unattached argument.\n *\n * See .argument() for creating an attached argument, which uses this routine to\n * create the argument. You can override createArgument to return a custom argument.\n *\n * @param {string} name\n * @param {string} [description]\n * @return {Argument} new argument\n */\n\n createArgument(name, description) {\n return new Argument(name, description);\n };\n\n /**\n * Define argument syntax for command.\n *\n * The default is that the argument is required, and you can explicitly\n * indicate this with <> around the name. Put [] around the name for an optional argument.\n *\n * @example\n * program.argument('<input-file>');\n * program.argument('[output-file]');\n *\n * @param {string} name\n * @param {string} [description]\n * @param {Function|*} [fn] - custom argument processing function\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n argument(name, description, fn, defaultValue) {\n const argument = this.createArgument(name, description);\n if (typeof fn === 'function') {\n argument.default(defaultValue).argParser(fn);\n } else {\n argument.default(fn);\n }\n this.addArgument(argument);\n return this;\n }\n\n /**\n * Define argument syntax for command, adding multiple at once (without descriptions).\n *\n * See also .argument().\n *\n * @example\n * program.arguments('<cmd> [env]');\n *\n * @param {string} names\n * @return {Command} `this` command for chaining\n */\n\n arguments(names) {\n names.split(/ +/).forEach((detail) => {\n this.argument(detail);\n });\n return this;\n };\n\n /**\n * Define argument syntax for command, adding a prepared argument.\n *\n * @param {Argument} argument\n * @return {Command} `this` command for chaining\n */\n addArgument(argument) {\n const previousArgument = this._args.slice(-1)[0];\n if (previousArgument && previousArgument.variadic) {\n throw new Error(`only the last argument can be variadic '${previousArgument.name()}'`);\n }\n if (argument.required && argument.defaultValue !== undefined && argument.parseArg === undefined) {\n throw new Error(`a default value for a required argument is never used: '${argument.name()}'`);\n }\n this._args.push(argument);\n return this;\n }\n\n /**\n * Override default decision whether to add implicit help command.\n *\n * addHelpCommand() // force on\n * addHelpCommand(false); // force off\n * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details\n *\n * @return {Command} `this` command for chaining\n */\n\n addHelpCommand(enableOrNameAndArgs, description) {\n if (enableOrNameAndArgs === false) {\n this._addImplicitHelpCommand = false;\n } else {\n this._addImplicitHelpCommand = true;\n if (typeof enableOrNameAndArgs === 'string') {\n this._helpCommandName = enableOrNameAndArgs.split(' ')[0];\n this._helpCommandnameAndArgs = enableOrNameAndArgs;\n }\n this._helpCommandDescription = description || this._helpCommandDescription;\n }\n return this;\n };\n\n /**\n * @return {boolean}\n * @api private\n */\n\n _hasImplicitHelpCommand() {\n if (this._addImplicitHelpCommand === undefined) {\n return this.commands.length && !this._actionHandler && !this._findCommand('help');\n }\n return this._addImplicitHelpCommand;\n };\n\n /**\n * Add hook for life cycle event.\n *\n * @param {string} event\n * @param {Function} listener\n * @return {Command} `this` command for chaining\n */\n\n hook(event, listener) {\n const allowedValues = ['preAction', 'postAction'];\n if (!allowedValues.includes(event)) {\n throw new Error(`Unexpected value for event passed to hook : '${event}'.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n if (this._lifeCycleHooks[event]) {\n this._lifeCycleHooks[event].push(listener);\n } else {\n this._lifeCycleHooks[event] = [listener];\n }\n return this;\n }\n\n /**\n * Register callback to use as replacement for calling process.exit.\n *\n * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing\n * @return {Command} `this` command for chaining\n */\n\n exitOverride(fn) {\n if (fn) {\n this._exitCallback = fn;\n } else {\n this._exitCallback = (err) => {\n if (err.code !== 'commander.executeSubCommandAsync') {\n throw err;\n } else {\n // Async callback from spawn events, not useful to throw.\n }\n };\n }\n return this;\n };\n\n /**\n * Call process.exit, and _exitCallback if defined.\n *\n * @param {number} exitCode exit code for using with process.exit\n * @param {string} code an id string representing the error\n * @param {string} message human-readable description of the error\n * @return never\n * @api private\n */\n\n _exit(exitCode, code, message) {\n if (this._exitCallback) {\n this._exitCallback(new CommanderError(exitCode, code, message));\n // Expecting this line is not reached.\n }\n process.exit(exitCode);\n };\n\n /**\n * Register callback `fn` for the command.\n *\n * @example\n * program\n * .command('help')\n * .description('display verbose help')\n * .action(function() {\n * // output help here\n * });\n *\n * @param {Function} fn\n * @return {Command} `this` command for chaining\n */\n\n action(fn) {\n const listener = (args) => {\n // The .action callback takes an extra parameter which is the command or options.\n const expectedArgsCount = this._args.length;\n const actionArgs = args.slice(0, expectedArgsCount);\n if (this._storeOptionsAsProperties) {\n actionArgs[expectedArgsCount] = this; // backwards compatible \"options\"\n } else {\n actionArgs[expectedArgsCount] = this.opts();\n }\n actionArgs.push(this);\n\n return fn.apply(this, actionArgs);\n };\n this._actionHandler = listener;\n return this;\n };\n\n /**\n * Factory routine to create a new unattached option.\n *\n * See .option() for creating an attached option, which uses this routine to\n * create the option. You can override createOption to return a custom option.\n *\n * @param {string} flags\n * @param {string} [description]\n * @return {Option} new option\n */\n\n createOption(flags, description) {\n return new Option(flags, description);\n };\n\n /**\n * Add an option.\n *\n * @param {Option} option\n * @return {Command} `this` command for chaining\n */\n addOption(option) {\n const oname = option.name();\n const name = option.attributeName();\n\n let defaultValue = option.defaultValue;\n\n // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value\n if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') {\n // when --no-foo we make sure default is true, unless a --foo option is already defined\n if (option.negate) {\n const positiveLongFlag = option.long.replace(/^--no-/, '--');\n defaultValue = this._findOption(positiveLongFlag) ? this.getOptionValue(name) : true;\n }\n // preassign only if we have a default\n if (defaultValue !== undefined) {\n this._setOptionValueWithSource(name, defaultValue, 'default');\n }\n }\n\n // register the option\n this.options.push(option);\n\n // handler for cli and env supplied values\n const handleOptionValue = (val, invalidValueMessage, valueSource) => {\n // Note: using closure to access lots of lexical scoped variables.\n const oldValue = this.getOptionValue(name);\n\n // custom processing\n if (val !== null && option.parseArg) {\n try {\n val = option.parseArg(val, oldValue === undefined ? defaultValue : oldValue);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `${invalidValueMessage} ${err.message}`;\n this._displayError(err.exitCode, err.code, message);\n }\n throw err;\n }\n } else if (val !== null && option.variadic) {\n val = option._concatValue(val, oldValue);\n }\n\n // unassigned or boolean value\n if (typeof oldValue === 'boolean' || typeof oldValue === 'undefined') {\n // if no value, negate false, and we have a default, then use it!\n if (val == null) {\n this._setOptionValueWithSource(name, option.negate ? false : defaultValue || true, valueSource);\n } else {\n this._setOptionValueWithSource(name, val, valueSource);\n }\n } else if (val !== null) {\n // reassign\n this._setOptionValueWithSource(name, option.negate ? false : val, valueSource);\n }\n };\n\n this.on('option:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'cli');\n });\n\n if (option.envVar) {\n this.on('optionEnv:' + oname, (val) => {\n const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;\n handleOptionValue(val, invalidValueMessage, 'env');\n });\n }\n\n return this;\n }\n\n /**\n * Internal implementation shared by .option() and .requiredOption()\n *\n * @api private\n */\n _optionEx(config, flags, description, fn, defaultValue) {\n const option = this.createOption(flags, description);\n option.makeOptionMandatory(!!config.mandatory);\n if (typeof fn === 'function') {\n option.default(defaultValue).argParser(fn);\n } else if (fn instanceof RegExp) {\n // deprecated\n const regex = fn;\n fn = (val, def) => {\n const m = regex.exec(val);\n return m ? m[0] : def;\n };\n option.default(defaultValue).argParser(fn);\n } else {\n option.default(fn);\n }\n\n return this.addOption(option);\n }\n\n /**\n * Define option with `flags`, `description` and optional\n * coercion `fn`.\n *\n * The `flags` string contains the short and/or long flags,\n * separated by comma, a pipe or space. The following are all valid\n * all will output this way when `--help` is used.\n *\n * \"-p, --pepper\"\n * \"-p|--pepper\"\n * \"-p --pepper\"\n *\n * @example\n * // simple boolean defaulting to undefined\n * program.option('-p, --pepper', 'add pepper');\n *\n * program.pepper\n * // => undefined\n *\n * --pepper\n * program.pepper\n * // => true\n *\n * // simple boolean defaulting to true (unless non-negated option is also defined)\n * program.option('-C, --no-cheese', 'remove cheese');\n *\n * program.cheese\n * // => true\n *\n * --no-cheese\n * program.cheese\n * // => false\n *\n * // required argument\n * program.option('-C, --chdir <path>', 'change the working directory');\n *\n * --chdir /tmp\n * program.chdir\n * // => \"/tmp\"\n *\n * // optional argument\n * program.option('-c, --cheese [type]', 'add cheese [marble]');\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {Function|*} [fn] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n option(flags, description, fn, defaultValue) {\n return this._optionEx({}, flags, description, fn, defaultValue);\n };\n\n /**\n * Add a required option which must have a value after parsing. This usually means\n * the option must be specified on the command line. (Otherwise the same as .option().)\n *\n * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.\n *\n * @param {string} flags\n * @param {string} [description]\n * @param {Function|*} [fn] - custom option processing function or default value\n * @param {*} [defaultValue]\n * @return {Command} `this` command for chaining\n */\n\n requiredOption(flags, description, fn, defaultValue) {\n return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue);\n };\n\n /**\n * Alter parsing of short flags with optional values.\n *\n * @example\n * // for `.option('-f,--flag [value]'):\n * program.combineFlagAndOptionalValue(true); // `-f80` is treated like `--flag=80`, this is the default behaviour\n * program.combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`\n *\n * @param {Boolean} [combine=true] - if `true` or omitted, an optional value can be specified directly after the flag.\n */\n combineFlagAndOptionalValue(combine = true) {\n this._combineFlagAndOptionalValue = !!combine;\n return this;\n };\n\n /**\n * Allow unknown options on the command line.\n *\n * @param {Boolean} [allowUnknown=true] - if `true` or omitted, no error will be thrown\n * for unknown options.\n */\n allowUnknownOption(allowUnknown = true) {\n this._allowUnknownOption = !!allowUnknown;\n return this;\n };\n\n /**\n * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.\n *\n * @param {Boolean} [allowExcess=true] - if `true` or omitted, no error will be thrown\n * for excess arguments.\n */\n allowExcessArguments(allowExcess = true) {\n this._allowExcessArguments = !!allowExcess;\n return this;\n };\n\n /**\n * Enable positional options. Positional means global options are specified before subcommands which lets\n * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.\n * The default behaviour is non-positional and global options may appear anywhere on the command line.\n *\n * @param {Boolean} [positional=true]\n */\n enablePositionalOptions(positional = true) {\n this._enablePositionalOptions = !!positional;\n return this;\n };\n\n /**\n * Pass through options that come after command-arguments rather than treat them as command-options,\n * so actual command-options come before command-arguments. Turning this on for a subcommand requires\n * positional options to have been enabled on the program (parent commands).\n * The default behaviour is non-positional and options may appear before or after command-arguments.\n *\n * @param {Boolean} [passThrough=true]\n * for unknown options.\n */\n passThroughOptions(passThrough = true) {\n this._passThroughOptions = !!passThrough;\n if (!!this.parent && passThrough && !this.parent._enablePositionalOptions) {\n throw new Error('passThroughOptions can not be used without turning on enablePositionalOptions for parent command(s)');\n }\n return this;\n };\n\n /**\n * Whether to store option values as properties on command object,\n * or store separately (specify false). In both cases the option values can be accessed using .opts().\n *\n * @param {boolean} [storeAsProperties=true]\n * @return {Command} `this` command for chaining\n */\n\n storeOptionsAsProperties(storeAsProperties = true) {\n this._storeOptionsAsProperties = !!storeAsProperties;\n if (this.options.length) {\n throw new Error('call .storeOptionsAsProperties() before adding options');\n }\n return this;\n };\n\n /**\n * Retrieve option value.\n *\n * @param {string} key\n * @return {Object} value\n */\n\n getOptionValue(key) {\n if (this._storeOptionsAsProperties) {\n return this[key];\n }\n return this._optionValues[key];\n };\n\n /**\n * Store option value.\n *\n * @param {string} key\n * @param {Object} value\n * @return {Command} `this` command for chaining\n */\n\n setOptionValue(key, value) {\n if (this._storeOptionsAsProperties) {\n this[key] = value;\n } else {\n this._optionValues[key] = value;\n }\n return this;\n };\n\n /**\n * @api private\n */\n _setOptionValueWithSource(key, value, source) {\n this.setOptionValue(key, value);\n this._optionValueSources[key] = source;\n }\n\n /**\n * Get user arguments implied or explicit arguments.\n * Side-effects: set _scriptPath if args included application, and use that to set implicit command name.\n *\n * @api private\n */\n\n _prepareUserArgs(argv, parseOptions) {\n if (argv !== undefined && !Array.isArray(argv)) {\n throw new Error('first parameter to parse must be array or undefined');\n }\n parseOptions = parseOptions || {};\n\n // Default to using process.argv\n if (argv === undefined) {\n argv = process.argv;\n // @ts-ignore: unknown property\n if (process.versions && process.versions.electron) {\n parseOptions.from = 'electron';\n }\n }\n this.rawArgs = argv.slice();\n\n // make it a little easier for callers by supporting various argv conventions\n let userArgs;\n switch (parseOptions.from) {\n case undefined:\n case 'node':\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n break;\n case 'electron':\n // @ts-ignore: unknown property\n if (process.defaultApp) {\n this._scriptPath = argv[1];\n userArgs = argv.slice(2);\n } else {\n userArgs = argv.slice(1);\n }\n break;\n case 'user':\n userArgs = argv.slice(0);\n break;\n default:\n throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`);\n }\n if (!this._scriptPath && require.main) {\n this._scriptPath = require.main.filename;\n }\n\n // Guess name, used in usage in help.\n this._name = this._name || (this._scriptPath && path.basename(this._scriptPath, path.extname(this._scriptPath)));\n\n return userArgs;\n }\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * The default expectation is that the arguments are from node and have the application as argv[0]\n * and the script being run in argv[1], with user parameters after that.\n *\n * @example\n * program.parse(process.argv);\n * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions\n * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv] - optional, defaults to process.argv\n * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron\n * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'\n * @return {Command} `this` command for chaining\n */\n\n parse(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n this._parseCommand([], userArgs);\n\n return this;\n };\n\n /**\n * Parse `argv`, setting options and invoking commands when defined.\n *\n * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.\n *\n * The default expectation is that the arguments are from node and have the application as argv[0]\n * and the script being run in argv[1], with user parameters after that.\n *\n * @example\n * await program.parseAsync(process.argv);\n * await program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions\n * await program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]\n *\n * @param {string[]} [argv]\n * @param {Object} [parseOptions]\n * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'\n * @return {Promise}\n */\n\n async parseAsync(argv, parseOptions) {\n const userArgs = this._prepareUserArgs(argv, parseOptions);\n await this._parseCommand([], userArgs);\n\n return this;\n };\n\n /**\n * Execute a sub-command executable.\n *\n * @api private\n */\n\n _executeSubCommand(subcommand, args) {\n args = args.slice();\n let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.\n const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];\n\n // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.\n this._checkForMissingMandatoryOptions();\n\n // Want the entry script as the reference for command name and directory for searching for other files.\n let scriptPath = this._scriptPath;\n // Fallback in case not set, due to how Command created or called.\n if (!scriptPath && require.main) {\n scriptPath = require.main.filename;\n }\n\n let baseDir;\n try {\n const resolvedLink = fs.realpathSync(scriptPath);\n baseDir = path.dirname(resolvedLink);\n } catch (e) {\n baseDir = '.'; // dummy, probably not going to find executable!\n }\n\n // name of the subcommand, like `pm-install`\n let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name;\n if (subcommand._executableFile) {\n bin = subcommand._executableFile;\n }\n\n const localBin = path.join(baseDir, bin);\n if (fs.existsSync(localBin)) {\n // prefer local `./<bin>` to bin in the $PATH\n bin = localBin;\n } else {\n // Look for source files.\n sourceExt.forEach((ext) => {\n if (fs.existsSync(`${localBin}${ext}`)) {\n bin = `${localBin}${ext}`;\n }\n });\n }\n launchWithNode = sourceExt.includes(path.extname(bin));\n\n let proc;\n if (process.platform !== 'win32') {\n if (launchWithNode) {\n args.unshift(bin);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n\n proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });\n } else {\n proc = childProcess.spawn(bin, args, { stdio: 'inherit' });\n }\n } else {\n args.unshift(bin);\n // add executable arguments to spawn\n args = incrementNodeInspectorPort(process.execArgv).concat(args);\n proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });\n }\n\n const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];\n signals.forEach((signal) => {\n // @ts-ignore\n process.on(signal, () => {\n if (proc.killed === false && proc.exitCode === null) {\n proc.kill(signal);\n }\n });\n });\n\n // By default terminate process when spawned process terminates.\n // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!\n const exitCallback = this._exitCallback;\n if (!exitCallback) {\n proc.on('close', process.exit.bind(process));\n } else {\n proc.on('close', () => {\n exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));\n });\n }\n proc.on('error', (err) => {\n // @ts-ignore\n if (err.code === 'ENOENT') {\n const executableMissing = `'${bin}' does not exist\n - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead\n - if the default executable name is not suitable, use the executableFile option to supply a custom name`;\n throw new Error(executableMissing);\n // @ts-ignore\n } else if (err.code === 'EACCES') {\n throw new Error(`'${bin}' not executable`);\n }\n if (!exitCallback) {\n process.exit(1);\n } else {\n const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');\n wrappedError.nestedError = err;\n exitCallback(wrappedError);\n }\n });\n\n // Store the reference to the child process\n this.runningCommand = proc;\n };\n\n /**\n * @api private\n */\n\n _dispatchSubcommand(commandName, operands, unknown) {\n const subCommand = this._findCommand(commandName);\n if (!subCommand) this.help({ error: true });\n\n if (subCommand._executableHandler) {\n this._executeSubCommand(subCommand, operands.concat(unknown));\n } else {\n return subCommand._parseCommand(operands, unknown);\n }\n };\n\n /**\n * Check this.args against expected this._args.\n *\n * @api private\n */\n\n _checkNumberOfArguments() {\n // too few\n this._args.forEach((arg, i) => {\n if (arg.required && this.args[i] == null) {\n this.missingArgument(arg.name());\n }\n });\n // too many\n if (this._args.length > 0 && this._args[this._args.length - 1].variadic) {\n return;\n }\n if (this.args.length > this._args.length) {\n this._excessArguments(this.args);\n }\n };\n\n /**\n * Process this.args using this._args and save as this.processedArgs!\n *\n * @api private\n */\n\n _processArguments() {\n const myParseArg = (argument, value, previous) => {\n // Extra processing for nice error message on parsing failure.\n let parsedValue = value;\n if (value !== null && argument.parseArg) {\n try {\n parsedValue = argument.parseArg(value, previous);\n } catch (err) {\n if (err.code === 'commander.invalidArgument') {\n const message = `error: command-argument value '${value}' is invalid for argument '${argument.name()}'. ${err.message}`;\n this._displayError(err.exitCode, err.code, message);\n }\n throw err;\n }\n }\n return parsedValue;\n };\n\n this._checkNumberOfArguments();\n\n const processedArgs = [];\n this._args.forEach((declaredArg, index) => {\n let value = declaredArg.defaultValue;\n if (declaredArg.variadic) {\n // Collect together remaining arguments for passing together as an array.\n if (index < this.args.length) {\n value = this.args.slice(index);\n if (declaredArg.parseArg) {\n value = value.reduce((processed, v) => {\n return myParseArg(declaredArg, v, processed);\n }, declaredArg.defaultValue);\n }\n } else if (value === undefined) {\n value = [];\n }\n } else if (index < this.args.length) {\n value = this.args[index];\n if (declaredArg.parseArg) {\n value = myParseArg(declaredArg, value, declaredArg.defaultValue);\n }\n }\n processedArgs[index] = value;\n });\n this.processedArgs = processedArgs;\n }\n\n /**\n * Once we have a promise we chain, but call synchronously until then.\n *\n * @param {Promise|undefined} promise\n * @param {Function} fn\n * @return {Promise|undefined}\n */\n\n _chainOrCall(promise, fn) {\n // thenable\n if (promise && promise.then && typeof promise.then === 'function') {\n // already have a promise, chain callback\n return promise.then(() => fn());\n }\n // callback might return a promise\n return fn();\n }\n\n /**\n *\n * @param {Promise|undefined} promise\n * @param {string} event\n * @return {Promise|undefined}\n * @api private\n */\n\n _chainOrCallHooks(promise, event) {\n let result = promise;\n const hooks = [];\n getCommandAndParents(this)\n .reverse()\n .filter(cmd => cmd._lifeCycleHooks[event] !== undefined)\n .forEach(hookedCommand => {\n hookedCommand._lifeCycleHooks[event].forEach((callback) => {\n hooks.push({ hookedCommand, callback });\n });\n });\n if (event === 'postAction') {\n hooks.reverse();\n }\n\n hooks.forEach((hookDetail) => {\n result = this._chainOrCall(result, () => {\n return hookDetail.callback(hookDetail.hookedCommand, this);\n });\n });\n return result;\n }\n\n /**\n * Process arguments in context of this command.\n * Returns action result, in case it is a promise.\n *\n * @api private\n */\n\n _parseCommand(operands, unknown) {\n const parsed = this.parseOptions(unknown);\n this._parseOptionsEnv(); // after cli, so parseArg not called on both cli and env\n operands = operands.concat(parsed.operands);\n unknown = parsed.unknown;\n this.args = operands.concat(unknown);\n\n if (operands && this._findCommand(operands[0])) {\n return this._dispatchSubcommand(operands[0], operands.slice(1), unknown);\n }\n if (this._hasImplicitHelpCommand() && operands[0] === this._helpCommandName) {\n if (operands.length === 1) {\n this.help();\n }\n return this._dispatchSubcommand(operands[1], [], [this._helpLongFlag]);\n }\n if (this._defaultCommandName) {\n outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command\n return this._dispatchSubcommand(this._defaultCommandName, operands, unknown);\n }\n if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) {\n // probably missing subcommand and no handler, user needs help (and exit)\n this.help({ error: true });\n }\n\n outputHelpIfRequested(this, parsed.unknown);\n this._checkForMissingMandatoryOptions();\n\n // We do not always call this check to avoid masking a \"better\" error, like unknown command.\n const checkForUnknownOptions = () => {\n if (parsed.unknown.length > 0) {\n this.unknownOption(parsed.unknown[0]);\n }\n };\n\n const commandEvent = `command:${this.name()}`;\n if (this._actionHandler) {\n checkForUnknownOptions();\n this._processArguments();\n\n let actionResult;\n actionResult = this._chainOrCallHooks(actionResult, 'preAction');\n actionResult = this._chainOrCall(actionResult, () => this._actionHandler(this.processedArgs));\n if (this.parent) this.parent.emit(commandEvent, operands, unknown); // legacy\n actionResult = this._chainOrCallHooks(actionResult, 'postAction');\n return actionResult;\n }\n if (this.parent && this.parent.listenerCount(commandEvent)) {\n checkForUnknownOptions();\n this._processArguments();\n this.parent.emit(commandEvent, operands, unknown); // legacy\n } else if (operands.length) {\n if (this._findCommand('*')) { // legacy default command\n return this._dispatchSubcommand('*', operands, unknown);\n }\n if (this.listenerCount('command:*')) {\n // skip option check, emit event for possible misspelling suggestion\n this.emit('command:*', operands, unknown);\n } else if (this.commands.length) {\n this.unknownCommand();\n } else {\n checkForUnknownOptions();\n this._processArguments();\n }\n } else if (this.commands.length) {\n checkForUnknownOptions();\n // This command has subcommands and nothing hooked up at this level, so display help (and exit).\n this.help({ error: true });\n } else {\n checkForUnknownOptions();\n this._processArguments();\n // fall through for caller to handle after calling .parse()\n }\n };\n\n /**\n * Find matching command.\n *\n * @api private\n */\n _findCommand(name) {\n if (!name) return undefined;\n return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name));\n };\n\n /**\n * Return an option matching `arg` if any.\n *\n * @param {string} arg\n * @return {Option}\n * @api private\n */\n\n _findOption(arg) {\n return this.options.find(option => option.is(arg));\n };\n\n /**\n * Display an error message if a mandatory option does not have a value.\n * Lazy calling after checking for help flags from leaf subcommand.\n *\n * @api private\n */\n\n _checkForMissingMandatoryOptions() {\n // Walk up hierarchy so can call in subcommand after checking for displaying help.\n for (let cmd = this; cmd; cmd = cmd.parent) {\n cmd.options.forEach((anOption) => {\n if (anOption.mandatory && (cmd.getOptionValue(anOption.attributeName()) === undefined)) {\n cmd.missingMandatoryOptionValue(anOption);\n }\n });\n }\n };\n\n /**\n * Parse options from `argv` removing known options,\n * and return argv split into operands and unknown arguments.\n *\n * Examples:\n *\n * argv => operands, unknown\n * --known kkk op => [op], []\n * op --known kkk => [op], []\n * sub --unknown uuu op => [sub], [--unknown uuu op]\n * sub -- --unknown uuu op => [sub --unknown uuu op], []\n *\n * @param {String[]} argv\n * @return {{operands: String[], unknown: String[]}}\n */\n\n parseOptions(argv) {\n const operands = []; // operands, not options or values\n const unknown = []; // first unknown option and remaining unknown args\n let dest = operands;\n const args = argv.slice();\n\n function maybeOption(arg) {\n return arg.length > 1 && arg[0] === '-';\n }\n\n // parse options\n let activeVariadicOption = null;\n while (args.length) {\n const arg = args.shift();\n\n // literal\n if (arg === '--') {\n if (dest === unknown) dest.push(arg);\n dest.push(...args);\n break;\n }\n\n if (activeVariadicOption && !maybeOption(arg)) {\n this.emit(`option:${activeVariadicOption.name()}`, arg);\n continue;\n }\n activeVariadicOption = null;\n\n if (maybeOption(arg)) {\n const option = this._findOption(arg);\n // recognised option, call listener to assign value with possible custom processing\n if (option) {\n if (option.required) {\n const value = args.shift();\n if (value === undefined) this.optionMissingArgument(option);\n this.emit(`option:${option.name()}`, value);\n } else if (option.optional) {\n let value = null;\n // historical behaviour is optional value is following arg unless an option\n if (args.length > 0 && !maybeOption(args[0])) {\n value = args.shift();\n }\n this.emit(`option:${option.name()}`, value);\n } else { // boolean flag\n this.emit(`option:${option.name()}`);\n }\n activeVariadicOption = option.variadic ? option : null;\n continue;\n }\n }\n\n // Look for combo options following single dash, eat first one if known.\n if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {\n const option = this._findOption(`-${arg[1]}`);\n if (option) {\n if (option.required || (option.optional && this._combineFlagAndOptionalValue)) {\n // option with value following in same argument\n this.emit(`option:${option.name()}`, arg.slice(2));\n } else {\n // boolean option, emit and put back remainder of arg for further processing\n this.emit(`option:${option.name()}`);\n args.unshift(`-${arg.slice(2)}`);\n }\n continue;\n }\n }\n\n // Look for known long flag with value, like --foo=bar\n if (/^--[^=]+=/.test(arg)) {\n const index = arg.indexOf('=');\n const option = this._findOption(arg.slice(0, index));\n if (option && (option.required || option.optional)) {\n this.emit(`option:${option.name()}`, arg.slice(index + 1));\n continue;\n }\n }\n\n // Not a recognised option by this command.\n // Might be a command-argument, or subcommand option, or unknown option, or help command or option.\n\n // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.\n if (maybeOption(arg)) {\n dest = unknown;\n }\n\n // If using positionalOptions, stop processing our options at subcommand.\n if ((this._enablePositionalOptions || this._passThroughOptions) && operands.length === 0 && unknown.length === 0) {\n if (this._findCommand(arg)) {\n operands.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n } else if (arg === this._helpCommandName && this._hasImplicitHelpCommand()) {\n operands.push(arg);\n if (args.length > 0) operands.push(...args);\n break;\n } else if (this._defaultCommandName) {\n unknown.push(arg);\n if (args.length > 0) unknown.push(...args);\n break;\n }\n }\n\n // If using passThroughOptions, stop processing options at first command-argument.\n if (this._passThroughOptions) {\n dest.push(arg);\n if (args.length > 0) dest.push(...args);\n break;\n }\n\n // add arg\n dest.push(arg);\n }\n\n return { operands, unknown };\n };\n\n /**\n * Return an object containing options as key-value pairs\n *\n * @return {Object}\n */\n opts() {\n if (this._storeOptionsAsProperties) {\n // Preserve original behaviour so backwards compatible when still using properties\n const result = {};\n const len = this.options.length;\n\n for (let i = 0; i < len; i++) {\n const key = this.options[i].attributeName();\n result[key] = key === this._versionOptionName ? this._version : this[key];\n }\n return result;\n }\n\n return this._optionValues;\n };\n\n /**\n * Internal bottleneck for handling of parsing errors.\n *\n * @api private\n */\n _displayError(exitCode, code, message) {\n this._outputConfiguration.outputError(`${message}\\n`, this._outputConfiguration.writeErr);\n if (typeof this._showHelpAfterError === 'string') {\n this._outputConfiguration.writeErr(`${this._showHelpAfterError}\\n`);\n } else if (this._showHelpAfterError) {\n this._outputConfiguration.writeErr('\\n');\n this.outputHelp({ error: true });\n }\n this._exit(exitCode, code, message);\n }\n\n /**\n * Apply any option related environment variables, if option does\n * not have a value from cli or client code.\n *\n * @api private\n */\n _parseOptionsEnv() {\n this.options.forEach((option) => {\n if (option.envVar && option.envVar in process.env) {\n const optionKey = option.attributeName();\n // env is second lowest priority source, above default\n if (this.getOptionValue(optionKey) === undefined || this._optionValueSources[optionKey] === 'default') {\n if (option.required || option.optional) { // option can take a value\n // keep very simple, optional always takes value\n this.emit(`optionEnv:${option.name()}`, process.env[option.envVar]);\n } else { // boolean\n // keep very simple, only care that envVar defined and not the value\n this.emit(`optionEnv:${option.name()}`);\n }\n }\n }\n });\n }\n\n /**\n * Argument `name` is missing.\n *\n * @param {string} name\n * @api private\n */\n\n missingArgument(name) {\n const message = `error: missing required argument '${name}'`;\n this._displayError(1, 'commander.missingArgument', message);\n };\n\n /**\n * `Option` is missing an argument.\n *\n * @param {Option} option\n * @api private\n */\n\n optionMissingArgument(option) {\n const message = `error: option '${option.flags}' argument missing`;\n this._displayError(1, 'commander.optionMissingArgument', message);\n };\n\n /**\n * `Option` does not have a value, and is a mandatory option.\n *\n * @param {Option} option\n * @api private\n */\n\n missingMandatoryOptionValue(option) {\n const message = `error: required option '${option.flags}' not specified`;\n this._displayError(1, 'commander.missingMandatoryOptionValue', message);\n };\n\n /**\n * Unknown option `flag`.\n *\n * @param {string} flag\n * @api private\n */\n\n unknownOption(flag) {\n if (this._allowUnknownOption) return;\n let suggestion = '';\n\n if (flag.startsWith('--') && this._showSuggestionAfterError) {\n // Looping to pick up the global options too\n let candidateFlags = [];\n let command = this;\n do {\n const moreFlags = command.createHelp().visibleOptions(command)\n .filter(option => option.long)\n .map(option => option.long);\n candidateFlags = candidateFlags.concat(moreFlags);\n command = command.parent;\n } while (command && !command._enablePositionalOptions);\n suggestion = suggestSimilar(flag, candidateFlags);\n }\n\n const message = `error: unknown option '${flag}'${suggestion}`;\n this._displayError(1, 'commander.unknownOption', message);\n };\n\n /**\n * Excess arguments, more than expected.\n *\n * @param {string[]} receivedArgs\n * @api private\n */\n\n _excessArguments(receivedArgs) {\n if (this._allowExcessArguments) return;\n\n const expected = this._args.length;\n const s = (expected === 1) ? '' : 's';\n const forSubcommand = this.parent ? ` for '${this.name()}'` : '';\n const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;\n this._displayError(1, 'commander.excessArguments', message);\n };\n\n /**\n * Unknown command.\n *\n * @api private\n */\n\n unknownCommand() {\n const unknownName = this.args[0];\n let suggestion = '';\n\n if (this._showSuggestionAfterError) {\n const candidateNames = [];\n this.createHelp().visibleCommands(this).forEach((command) => {\n candidateNames.push(command.name());\n // just visible alias\n if (command.alias()) candidateNames.push(command.alias());\n });\n suggestion = suggestSimilar(unknownName, candidateNames);\n }\n\n const message = `error: unknown command '${unknownName}'${suggestion}`;\n this._displayError(1, 'commander.unknownCommand', message);\n };\n\n /**\n * Set the program version to `str`.\n *\n * This method auto-registers the \"-V, --version\" flag\n * which will print the version number when passed.\n *\n * You can optionally supply the flags and description to override the defaults.\n *\n * @param {string} str\n * @param {string} [flags]\n * @param {string} [description]\n * @return {this | string} `this` command for chaining, or version string if no arguments\n */\n\n version(str, flags, description) {\n if (str === undefined) return this._version;\n this._version = str;\n flags = flags || '-V, --version';\n description = description || 'output the version number';\n const versionOption = this.createOption(flags, description);\n this._versionOptionName = versionOption.attributeName();\n this.options.push(versionOption);\n this.on('option:' + versionOption.name(), () => {\n this._outputConfiguration.writeOut(`${str}\\n`);\n this._exit(0, 'commander.version', str);\n });\n return this;\n };\n\n /**\n * Set the description to `str`.\n *\n * @param {string} [str]\n * @param {Object} [argsDescription]\n * @return {string|Command}\n */\n description(str, argsDescription) {\n if (str === undefined && argsDescription === undefined) return this._description;\n this._description = str;\n if (argsDescription) {\n this._argsDescription = argsDescription;\n }\n return this;\n };\n\n /**\n * Set an alias for the command.\n *\n * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.\n *\n * @param {string} [alias]\n * @return {string|Command}\n */\n\n alias(alias) {\n if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility\n\n /** @type {Command} */\n let command = this;\n if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) {\n // assume adding alias for last added executable subcommand, rather than this\n command = this.commands[this.commands.length - 1];\n }\n\n if (alias === command._name) throw new Error('Command alias can\\'t be the same as its name');\n\n command._aliases.push(alias);\n return this;\n };\n\n /**\n * Set aliases for the command.\n *\n * Only the first alias is shown in the auto-generated help.\n *\n * @param {string[]} [aliases]\n * @return {string[]|Command}\n */\n\n aliases(aliases) {\n // Getter for the array of aliases is the main reason for having aliases() in addition to alias().\n if (aliases === undefined) return this._aliases;\n\n aliases.forEach((alias) => this.alias(alias));\n return this;\n };\n\n /**\n * Set / get the command usage `str`.\n *\n * @param {string} [str]\n * @return {String|Command}\n */\n\n usage(str) {\n if (str === undefined) {\n if (this._usage) return this._usage;\n\n const args = this._args.map((arg) => {\n return humanReadableArgName(arg);\n });\n return [].concat(\n (this.options.length || this._hasHelpOption ? '[options]' : []),\n (this.commands.length ? '[command]' : []),\n (this._args.length ? args : [])\n ).join(' ');\n }\n\n this._usage = str;\n return this;\n };\n\n /**\n * Get or set the name of the command\n *\n * @param {string} [str]\n * @return {string|Command}\n */\n\n name(str) {\n if (str === undefined) return this._name;\n this._name = str;\n return this;\n };\n\n /**\n * Return program help documentation.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout\n * @return {string}\n */\n\n helpInformation(contextOptions) {\n const helper = this.createHelp();\n if (helper.helpWidth === undefined) {\n helper.helpWidth = (contextOptions && contextOptions.error) ? this._outputConfiguration.getErrHelpWidth() : this._outputConfiguration.getOutHelpWidth();\n }\n return helper.formatHelp(this, helper);\n };\n\n /**\n * @api private\n */\n\n _getHelpContext(contextOptions) {\n contextOptions = contextOptions || {};\n const context = { error: !!contextOptions.error };\n let write;\n if (context.error) {\n write = (arg) => this._outputConfiguration.writeErr(arg);\n } else {\n write = (arg) => this._outputConfiguration.writeOut(arg);\n }\n context.write = contextOptions.write || write;\n context.command = this;\n return context;\n }\n\n /**\n * Output help information for this command.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n outputHelp(contextOptions) {\n let deprecatedCallback;\n if (typeof contextOptions === 'function') {\n deprecatedCallback = contextOptions;\n contextOptions = undefined;\n }\n const context = this._getHelpContext(contextOptions);\n\n getCommandAndParents(this).reverse().forEach(command => command.emit('beforeAllHelp', context));\n this.emit('beforeHelp', context);\n\n let helpInformation = this.helpInformation(context);\n if (deprecatedCallback) {\n helpInformation = deprecatedCallback(helpInformation);\n if (typeof helpInformation !== 'string' && !Buffer.isBuffer(helpInformation)) {\n throw new Error('outputHelp callback must return a string or a Buffer');\n }\n }\n context.write(helpInformation);\n\n this.emit(this._helpLongFlag); // deprecated\n this.emit('afterHelp', context);\n getCommandAndParents(this).forEach(command => command.emit('afterAllHelp', context));\n };\n\n /**\n * You can pass in flags and a description to override the help\n * flags and help description for your command. Pass in false to\n * disable the built-in help option.\n *\n * @param {string | boolean} [flags]\n * @param {string} [description]\n * @return {Command} `this` command for chaining\n */\n\n helpOption(flags, description) {\n if (typeof flags === 'boolean') {\n this._hasHelpOption = flags;\n return this;\n }\n this._helpFlags = flags || this._helpFlags;\n this._helpDescription = description || this._helpDescription;\n\n const helpFlags = splitOptionFlags(this._helpFlags);\n this._helpShortFlag = helpFlags.shortFlag;\n this._helpLongFlag = helpFlags.longFlag;\n\n return this;\n };\n\n /**\n * Output help information and exit.\n *\n * Outputs built-in help, and custom text added using `.addHelpText()`.\n *\n * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout\n */\n\n help(contextOptions) {\n this.outputHelp(contextOptions);\n let exitCode = process.exitCode || 0;\n if (exitCode === 0 && contextOptions && typeof contextOptions !== 'function' && contextOptions.error) {\n exitCode = 1;\n }\n // message: do not have all displayed text available so only passing placeholder.\n this._exit(exitCode, 'commander.help', '(outputHelp)');\n };\n\n /**\n * Add additional text to be displayed with the built-in help.\n *\n * Position is 'before' or 'after' to affect just this command,\n * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.\n *\n * @param {string} position - before or after built-in help\n * @param {string | Function} text - string to add, or a function returning a string\n * @return {Command} `this` command for chaining\n */\n addHelpText(position, text) {\n const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];\n if (!allowedValues.includes(position)) {\n throw new Error(`Unexpected value for position to addHelpText.\nExpecting one of '${allowedValues.join(\"', '\")}'`);\n }\n const helpEvent = `${position}Help`;\n this.on(helpEvent, (context) => {\n let helpStr;\n if (typeof text === 'function') {\n helpStr = text({ error: context.error, command: context.command });\n } else {\n helpStr = text;\n }\n // Ignore falsy value when nothing to output.\n if (helpStr) {\n context.write(`${helpStr}\\n`);\n }\n });\n return this;\n }\n};\n\n/**\n * Output help information if help flags specified\n *\n * @param {Command} cmd - command to output help for\n * @param {Array} args - array of options to search for help flags\n * @api private\n */\n\nfunction outputHelpIfRequested(cmd, args) {\n const helpOption = cmd._hasHelpOption && args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag);\n if (helpOption) {\n cmd.outputHelp();\n // (Do not have all displayed text available so only passing placeholder.)\n cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');\n }\n}\n\n/**\n * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).\n *\n * @param {string[]} args - array of arguments from node.execArgv\n * @returns {string[]}\n * @api private\n */\n\nfunction incrementNodeInspectorPort(args) {\n // Testing for these options:\n // --inspect[=[host:]port]\n // --inspect-brk[=[host:]port]\n // --inspect-port=[host:]port\n return args.map((arg) => {\n if (!arg.startsWith('--inspect')) {\n return arg;\n }\n let debugOption;\n let debugHost = '127.0.0.1';\n let debugPort = '9229';\n let match;\n if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {\n // e.g. --inspect\n debugOption = match[1];\n } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {\n debugOption = match[1];\n if (/^\\d+$/.test(match[3])) {\n // e.g. --inspect=1234\n debugPort = match[3];\n } else {\n // e.g. --inspect=localhost\n debugHost = match[3];\n }\n } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\\d+)$/)) !== null) {\n // e.g. --inspect=localhost:1234\n debugOption = match[1];\n debugHost = match[3];\n debugPort = match[4];\n }\n\n if (debugOption && debugPort !== '0') {\n return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;\n }\n return arg;\n });\n}\n\n/**\n * @param {Command} startCommand\n * @returns {Command[]}\n * @api private\n */\n\nfunction getCommandAndParents(startCommand) {\n const result = [];\n for (let command = startCommand; command; command = command.parent) {\n result.push(command);\n }\n return result;\n}\n\nexports.Command = Command;\n", "const { Argument } = require('./lib/argument.js');\nconst { Command } = require('./lib/command.js');\nconst { CommanderError, InvalidArgumentError } = require('./lib/error.js');\nconst { Help } = require('./lib/help.js');\nconst { Option } = require('./lib/option.js');\n\n// @ts-check\n\n/**\n * Expose the root command.\n */\n\nexports = module.exports = new Command();\nexports.program = exports; // More explicit access to global command.\n// Implicit export of createArgument, createCommand, and createOption.\n\n/**\n * Expose classes\n */\n\nexports.Argument = Argument;\nexports.Command = Command;\nexports.CommanderError = CommanderError;\nexports.Help = Help;\nexports.InvalidArgumentError = InvalidArgumentError;\nexports.InvalidOptionArgumentError = InvalidArgumentError; // Deprecated\nexports.Option = Option;\n", "'use strict'\n\nexports.fromCallback = function (fn) {\n return Object.defineProperty(function (...args) {\n if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n else {\n return new Promise((resolve, reject) => {\n fn.call(\n this,\n ...args,\n (err, res) => (err != null) ? reject(err) : resolve(res)\n )\n })\n }\n }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n return Object.defineProperty(function (...args) {\n const cb = args[args.length - 1]\n if (typeof cb !== 'function') return fn.apply(this, args)\n else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)\n }, 'name', { value: fn.name })\n}\n", "var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (!fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (!fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = (function (fs$rename) { return function (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }})(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\")) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n", "var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n", "'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n", "var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readdir(path, options, cb)\n\n function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readdir, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n })\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n", "'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'close',\n 'copyFile',\n 'fchmod',\n 'fchown',\n 'fdatasync',\n 'fstat',\n 'fsync',\n 'ftruncate',\n 'futimes',\n 'lchmod',\n 'lchown',\n 'link',\n 'lstat',\n 'mkdir',\n 'mkdtemp',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'rename',\n 'rm',\n 'rmdir',\n 'stat',\n 'symlink',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile'\n].filter(key => {\n // Some commands are not available on some systems. Ex:\n // fs.opendir was added in Node.js v12.12.0\n // fs.rm was added in Node.js v14.14.0\n // fs.lchown is not available on at least some Linux\n return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n exports[method] = u(fs[method])\n})\nexports.realpath.native = u(fs.realpath.native)\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n if (typeof callback === 'function') {\n return fs.exists(filename, callback)\n }\n return new Promise(resolve => {\n return fs.exists(filename, resolve)\n })\n}\n\n// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n if (typeof callback === 'function') {\n return fs.read(fd, buffer, offset, length, position, callback)\n }\n return new Promise((resolve, reject) => {\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffer })\n })\n })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.write(fd, buffer, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffer })\n })\n })\n}\n\n// fs.writev only available in Node v12.9.0+\nif (typeof fs.writev === 'function') {\n // Function signature is\n // s.writev(fd, buffers[, position], callback)\n // We need to handle the optional arg, so we use ...args\n exports.writev = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.writev(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffers })\n })\n })\n }\n}\n", "// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n if (process.platform === 'win32') {\n const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n if (pathHasInvalidWinCharacters) {\n const error = new Error(`Path contains invalid characters: ${pth}`)\n error.code = 'EINVAL'\n throw error\n }\n }\n}\n", "'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n const defaults = { mode: 0o777 }\n if (typeof options === 'number') return options\n return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n checkPath(dir)\n\n return fs.mkdir(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n checkPath(dir)\n\n return fs.mkdirSync(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n", "'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n mkdirs: makeDir,\n mkdirsSync: makeDirSync,\n // alias\n mkdirp: makeDir,\n mkdirpSync: makeDirSync,\n ensureDir: makeDir,\n ensureDirSync: makeDirSync\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\n\nfunction utimesMillis (path, atime, mtime, callback) {\n // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n fs.open(path, 'r+', (err, fd) => {\n if (err) return callback(err)\n fs.futimes(fd, atime, mtime, futimesErr => {\n fs.close(fd, closeErr => {\n if (callback) callback(futimesErr || closeErr)\n })\n })\n })\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n const fd = fs.openSync(path, 'r+')\n fs.futimesSync(fd, atime, mtime)\n return fs.closeSync(fd)\n}\n\nmodule.exports = {\n utimesMillis,\n utimesMillisSync\n}\n", "'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst util = require('util')\n\nfunction getStats (src, dest, opts) {\n const statFunc = opts.dereference\n ? (file) => fs.stat(file, { bigint: true })\n : (file) => fs.lstat(file, { bigint: true })\n return Promise.all([\n statFunc(src),\n statFunc(dest).catch(err => {\n if (err.code === 'ENOENT') return null\n throw err\n })\n ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n let destStat\n const statFunc = opts.dereference\n ? (file) => fs.statSync(file, { bigint: true })\n : (file) => fs.lstatSync(file, { bigint: true })\n const srcStat = statFunc(src)\n try {\n destStat = statFunc(dest)\n } catch (err) {\n if (err.code === 'ENOENT') return { srcStat, destStat: null }\n throw err\n }\n return { srcStat, destStat }\n}\n\nfunction checkPaths (src, dest, funcName, opts, cb) {\n util.callbackify(getStats)(src, dest, opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, destStat } = stats\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return cb(null, { srcStat, destStat, isChangingCase: true })\n }\n return cb(new Error('Source and destination must not be the same.'))\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n return cb(new Error(errMsg(src, dest, funcName)))\n }\n return cb(null, { srcStat, destStat })\n })\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nfunction checkParentPaths (src, srcStat, dest, funcName, cb) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()\n fs.stat(destParent, { bigint: true }, (err, destStat) => {\n if (err) {\n if (err.code === 'ENOENT') return cb()\n return cb(err)\n }\n if (areIdentical(srcStat, destStat)) {\n return cb(new Error(errMsg(src, dest, funcName)))\n }\n return checkParentPaths(src, srcStat, destParent, funcName, cb)\n })\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n let destStat\n try {\n destStat = fs.statSync(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)\n}\n\nfunction errMsg (src, dest, funcName) {\n return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n checkPaths,\n checkPathsSync,\n checkParentPaths,\n checkParentPathsSync,\n isSrcSubdir,\n areIdentical\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts = opts || {}\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\\n\n see https://github.com/jprichardson/node-fs-extra/issues/269`)\n }\n\n const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n return handleFilterAndCopy(destStat, src, dest, opts)\n}\n\nfunction handleFilterAndCopy (destStat, src, dest, opts) {\n if (opts.filter && !opts.filter(src, dest)) return\n const destParent = path.dirname(dest)\n if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n return getStats(destStat, src, dest, opts)\n}\n\nfunction startCopy (destStat, src, dest, opts) {\n if (opts.filter && !opts.filter(src, dest)) return\n return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n const srcStat = statSync(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n if (opts.overwrite) {\n fs.unlinkSync(dest)\n return copyFile(srcStat, src, dest, opts)\n } else if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n fs.copyFileSync(src, dest)\n if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = fs.statSync(src)\n return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n fs.mkdirSync(dest)\n copyDir(src, dest, opts)\n return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n return startCopy(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n let resolvedSrc = fs.readlinkSync(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlinkSync(resolvedSrc, dest)\n } else {\n let resolvedDest\n try {\n resolvedDest = fs.readlinkSync(dest)\n } catch (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n throw err\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // prevent copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n return copyLink(resolvedSrc, dest)\n }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n fs.unlinkSync(dest)\n return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n", "'use strict'\n\nmodule.exports = {\n copySync: require('./copy-sync')\n}\n", "'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n pathExists: u(pathExists),\n pathExistsSync: fs.existsSync\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirs = require('../mkdirs').mkdirs\nconst pathExists = require('../path-exists').pathExists\nconst utimesMillis = require('../util/utimes').utimesMillis\nconst stat = require('../util/stat')\n\nfunction copy (src, dest, opts, cb) {\n if (typeof opts === 'function' && !cb) {\n cb = opts\n opts = {}\n } else if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n cb = cb || function () {}\n opts = opts || {}\n\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\\n\n see https://github.com/jprichardson/node-fs-extra/issues/269`)\n }\n\n stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, destStat } = stats\n stat.checkParentPaths(src, srcStat, dest, 'copy', err => {\n if (err) return cb(err)\n if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)\n return checkParentDir(destStat, src, dest, opts, cb)\n })\n })\n}\n\nfunction checkParentDir (destStat, src, dest, opts, cb) {\n const destParent = path.dirname(dest)\n pathExists(destParent, (err, dirExists) => {\n if (err) return cb(err)\n if (dirExists) return getStats(destStat, src, dest, opts, cb)\n mkdirs(destParent, err => {\n if (err) return cb(err)\n return getStats(destStat, src, dest, opts, cb)\n })\n })\n}\n\nfunction handleFilter (onInclude, destStat, src, dest, opts, cb) {\n Promise.resolve(opts.filter(src, dest)).then(include => {\n if (include) return onInclude(destStat, src, dest, opts, cb)\n return cb()\n }, error => cb(error))\n}\n\nfunction startCopy (destStat, src, dest, opts, cb) {\n if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)\n return getStats(destStat, src, dest, opts, cb)\n}\n\nfunction getStats (destStat, src, dest, opts, cb) {\n const stat = opts.dereference ? fs.stat : fs.lstat\n stat(src, (err, srcStat) => {\n if (err) return cb(err)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)\n else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))\n else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))\n return cb(new Error(`Unknown file: ${src}`))\n })\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts, cb) {\n if (!destStat) return copyFile(srcStat, src, dest, opts, cb)\n return mayCopyFile(srcStat, src, dest, opts, cb)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts, cb) {\n if (opts.overwrite) {\n fs.unlink(dest, err => {\n if (err) return cb(err)\n return copyFile(srcStat, src, dest, opts, cb)\n })\n } else if (opts.errorOnExist) {\n return cb(new Error(`'${dest}' already exists`))\n } else return cb()\n}\n\nfunction copyFile (srcStat, src, dest, opts, cb) {\n fs.copyFile(src, dest, err => {\n if (err) return cb(err)\n if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)\n return setDestMode(dest, srcStat.mode, cb)\n })\n}\n\nfunction handleTimestampsAndMode (srcMode, src, dest, cb) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) {\n return makeFileWritable(dest, srcMode, err => {\n if (err) return cb(err)\n return setDestTimestampsAndMode(srcMode, src, dest, cb)\n })\n }\n return setDestTimestampsAndMode(srcMode, src, dest, cb)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode, cb) {\n return setDestMode(dest, srcMode | 0o200, cb)\n}\n\nfunction setDestTimestampsAndMode (srcMode, src, dest, cb) {\n setDestTimestamps(src, dest, err => {\n if (err) return cb(err)\n return setDestMode(dest, srcMode, cb)\n })\n}\n\nfunction setDestMode (dest, srcMode, cb) {\n return fs.chmod(dest, srcMode, cb)\n}\n\nfunction setDestTimestamps (src, dest, cb) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n fs.stat(src, (err, updatedSrcStat) => {\n if (err) return cb(err)\n return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)\n })\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts, cb) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)\n return copyDir(src, dest, opts, cb)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts, cb) {\n fs.mkdir(dest, err => {\n if (err) return cb(err)\n copyDir(src, dest, opts, err => {\n if (err) return cb(err)\n return setDestMode(dest, srcMode, cb)\n })\n })\n}\n\nfunction copyDir (src, dest, opts, cb) {\n fs.readdir(src, (err, items) => {\n if (err) return cb(err)\n return copyDirItems(items, src, dest, opts, cb)\n })\n}\n\nfunction copyDirItems (items, src, dest, opts, cb) {\n const item = items.pop()\n if (!item) return cb()\n return copyDirItem(items, item, src, dest, opts, cb)\n}\n\nfunction copyDirItem (items, item, src, dest, opts, cb) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {\n if (err) return cb(err)\n const { destStat } = stats\n startCopy(destStat, srcItem, destItem, opts, err => {\n if (err) return cb(err)\n return copyDirItems(items, src, dest, opts, cb)\n })\n })\n}\n\nfunction onLink (destStat, src, dest, opts, cb) {\n fs.readlink(src, (err, resolvedSrc) => {\n if (err) return cb(err)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlink(resolvedSrc, dest, cb)\n } else {\n fs.readlink(dest, (err, resolvedDest) => {\n if (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)\n return cb(err)\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))\n }\n\n // do not copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))\n }\n return copyLink(resolvedSrc, dest, cb)\n })\n }\n })\n}\n\nfunction copyLink (resolvedSrc, dest, cb) {\n fs.unlink(dest, err => {\n if (err) return cb(err)\n return fs.symlink(resolvedSrc, dest, cb)\n })\n}\n\nmodule.exports = copy\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nmodule.exports = {\n copy: u(require('./copy'))\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst assert = require('assert')\n\nconst isWindows = (process.platform === 'win32')\n\nfunction defaults (options) {\n const methods = [\n 'unlink',\n 'chmod',\n 'stat',\n 'lstat',\n 'rmdir',\n 'readdir'\n ]\n methods.forEach(m => {\n options[m] = options[m] || fs[m]\n m = m + 'Sync'\n options[m] = options[m] || fs[m]\n })\n\n options.maxBusyTries = options.maxBusyTries || 3\n}\n\nfunction rimraf (p, options, cb) {\n let busyTries = 0\n\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n assert(p, 'rimraf: missing path')\n assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')\n assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')\n assert(options, 'rimraf: invalid options argument provided')\n assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')\n\n defaults(options)\n\n rimraf_(p, options, function CB (er) {\n if (er) {\n if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&\n busyTries < options.maxBusyTries) {\n busyTries++\n const time = busyTries * 100\n // try again, with the same exact callback as this one.\n return setTimeout(() => rimraf_(p, options, CB), time)\n }\n\n // already gone\n if (er.code === 'ENOENT') er = null\n }\n\n cb(er)\n })\n}\n\n// Two possible strategies.\n// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR\n// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR\n//\n// Both result in an extra syscall when you guess wrong. However, there\n// are likely far more normal files in the world than directories. This\n// is based on the assumption that a the average number of files per\n// directory is >= 1.\n//\n// If anyone ever complains about this, then I guess the strategy could\n// be made configurable somehow. But until then, YAGNI.\nfunction rimraf_ (p, options, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n // sunos lets the root user unlink directories, which is... weird.\n // so we have to lstat here and make sure it's not a dir.\n options.lstat(p, (er, st) => {\n if (er && er.code === 'ENOENT') {\n return cb(null)\n }\n\n // Windows can EPERM on stat. Life is suffering.\n if (er && er.code === 'EPERM' && isWindows) {\n return fixWinEPERM(p, options, er, cb)\n }\n\n if (st && st.isDirectory()) {\n return rmdir(p, options, er, cb)\n }\n\n options.unlink(p, er => {\n if (er) {\n if (er.code === 'ENOENT') {\n return cb(null)\n }\n if (er.code === 'EPERM') {\n return (isWindows)\n ? fixWinEPERM(p, options, er, cb)\n : rmdir(p, options, er, cb)\n }\n if (er.code === 'EISDIR') {\n return rmdir(p, options, er, cb)\n }\n }\n return cb(er)\n })\n })\n}\n\nfunction fixWinEPERM (p, options, er, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n options.chmod(p, 0o666, er2 => {\n if (er2) {\n cb(er2.code === 'ENOENT' ? null : er)\n } else {\n options.stat(p, (er3, stats) => {\n if (er3) {\n cb(er3.code === 'ENOENT' ? null : er)\n } else if (stats.isDirectory()) {\n rmdir(p, options, er, cb)\n } else {\n options.unlink(p, cb)\n }\n })\n }\n })\n}\n\nfunction fixWinEPERMSync (p, options, er) {\n let stats\n\n assert(p)\n assert(options)\n\n try {\n options.chmodSync(p, 0o666)\n } catch (er2) {\n if (er2.code === 'ENOENT') {\n return\n } else {\n throw er\n }\n }\n\n try {\n stats = options.statSync(p)\n } catch (er3) {\n if (er3.code === 'ENOENT') {\n return\n } else {\n throw er\n }\n }\n\n if (stats.isDirectory()) {\n rmdirSync(p, options, er)\n } else {\n options.unlinkSync(p)\n }\n}\n\nfunction rmdir (p, options, originalEr, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)\n // if we guessed wrong, and it's not a directory, then\n // raise the original error.\n options.rmdir(p, er => {\n if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {\n rmkids(p, options, cb)\n } else if (er && er.code === 'ENOTDIR') {\n cb(originalEr)\n } else {\n cb(er)\n }\n })\n}\n\nfunction rmkids (p, options, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n options.readdir(p, (er, files) => {\n if (er) return cb(er)\n\n let n = files.length\n let errState\n\n if (n === 0) return options.rmdir(p, cb)\n\n files.forEach(f => {\n rimraf(path.join(p, f), options, er => {\n if (errState) {\n return\n }\n if (er) return cb(errState = er)\n if (--n === 0) {\n options.rmdir(p, cb)\n }\n })\n })\n })\n}\n\n// this looks simpler, and is strictly *faster*, but will\n// tie up the JavaScript thread and fail on excessively\n// deep directory trees.\nfunction rimrafSync (p, options) {\n let st\n\n options = options || {}\n defaults(options)\n\n assert(p, 'rimraf: missing path')\n assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')\n assert(options, 'rimraf: missing options')\n assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')\n\n try {\n st = options.lstatSync(p)\n } catch (er) {\n if (er.code === 'ENOENT') {\n return\n }\n\n // Windows can EPERM on stat. Life is suffering.\n if (er.code === 'EPERM' && isWindows) {\n fixWinEPERMSync(p, options, er)\n }\n }\n\n try {\n // sunos lets the root user unlink directories, which is... weird.\n if (st && st.isDirectory()) {\n rmdirSync(p, options, null)\n } else {\n options.unlinkSync(p)\n }\n } catch (er) {\n if (er.code === 'ENOENT') {\n return\n } else if (er.code === 'EPERM') {\n return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)\n } else if (er.code !== 'EISDIR') {\n throw er\n }\n rmdirSync(p, options, er)\n }\n}\n\nfunction rmdirSync (p, options, originalEr) {\n assert(p)\n assert(options)\n\n try {\n options.rmdirSync(p)\n } catch (er) {\n if (er.code === 'ENOTDIR') {\n throw originalEr\n } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {\n rmkidsSync(p, options)\n } else if (er.code !== 'ENOENT') {\n throw er\n }\n }\n}\n\nfunction rmkidsSync (p, options) {\n assert(p)\n assert(options)\n options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))\n\n if (isWindows) {\n // We only end up here once we got ENOTEMPTY at least once, and\n // at this point, we are guaranteed to have removed all the kids.\n // So, we know that it won't be ENOENT or ENOTDIR or anything else.\n // try really hard to delete stuff on windows, because it has a\n // PROFOUNDLY annoying habit of not closing handles promptly when\n // files are deleted, resulting in spurious ENOTEMPTY errors.\n const startTime = Date.now()\n do {\n try {\n const ret = options.rmdirSync(p, options)\n return ret\n } catch {}\n } while (Date.now() - startTime < 500) // give up after 500ms\n } else {\n const ret = options.rmdirSync(p, options)\n return ret\n }\n}\n\nmodule.exports = rimraf\nrimraf.sync = rimrafSync\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\nconst rimraf = require('./rimraf')\n\nfunction remove (path, callback) {\n // Node 14.14.0+\n if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)\n rimraf(path, callback)\n}\n\nfunction removeSync (path) {\n // Node 14.14.0+\n if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })\n rimraf.sync(path)\n}\n\nmodule.exports = {\n remove: u(remove),\n removeSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n let items\n try {\n items = await fs.readdir(dir)\n } catch {\n return mkdir.mkdirs(dir)\n }\n\n return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n let items\n try {\n items = fs.readdirSync(dir)\n } catch {\n return mkdir.mkdirsSync(dir)\n }\n\n items.forEach(item => {\n item = path.join(dir, item)\n remove.removeSync(item)\n })\n}\n\nmodule.exports = {\n emptyDirSync,\n emptydirSync: emptyDirSync,\n emptyDir,\n emptydir: emptyDir\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst mkdir = require('../mkdirs')\n\nfunction createFile (file, callback) {\n function makeFile () {\n fs.writeFile(file, '', err => {\n if (err) return callback(err)\n callback()\n })\n }\n\n fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err\n if (!err && stats.isFile()) return callback()\n const dir = path.dirname(file)\n fs.stat(dir, (err, stats) => {\n if (err) {\n // if the directory doesn't exist, make it\n if (err.code === 'ENOENT') {\n return mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n makeFile()\n })\n }\n return callback(err)\n }\n\n if (stats.isDirectory()) makeFile()\n else {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdir(dir, err => {\n if (err) return callback(err)\n })\n }\n })\n })\n}\n\nfunction createFileSync (file) {\n let stats\n try {\n stats = fs.statSync(file)\n } catch {}\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n try {\n if (!fs.statSync(dir).isDirectory()) {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdirSync(dir)\n }\n } catch (err) {\n // If the stat call above failed because the directory doesn't exist, create it\n if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n else throw err\n }\n\n fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n createFile: u(createFile),\n createFileSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\nconst { areIdentical } = require('../util/stat')\n\nfunction createLink (srcpath, dstpath, callback) {\n function makeLink (srcpath, dstpath) {\n fs.link(srcpath, dstpath, err => {\n if (err) return callback(err)\n callback(null)\n })\n }\n\n fs.lstat(dstpath, (_, dstStat) => {\n fs.lstat(srcpath, (err, srcStat) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n return callback(err)\n }\n if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)\n\n const dir = path.dirname(dstpath)\n pathExists(dir, (err, dirExists) => {\n if (err) return callback(err)\n if (dirExists) return makeLink(srcpath, dstpath)\n mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n makeLink(srcpath, dstpath)\n })\n })\n })\n })\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = fs.lstatSync(dstpath)\n } catch {}\n\n try {\n const srcStat = fs.lstatSync(srcpath)\n if (dstStat && areIdentical(srcStat, dstStat)) return\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n const dir = path.dirname(dstpath)\n const dirExists = fs.existsSync(dir)\n if (dirExists) return fs.linkSync(srcpath, dstpath)\n mkdir.mkdirsSync(dir)\n\n return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n createLink: u(createLink),\n createLinkSync\n}\n", "'use strict'\n\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst pathExists = require('../path-exists').pathExists\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nfunction symlinkPaths (srcpath, dstpath, callback) {\n if (path.isAbsolute(srcpath)) {\n return fs.lstat(srcpath, (err) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n return callback(err)\n }\n return callback(null, {\n toCwd: srcpath,\n toDst: srcpath\n })\n })\n } else {\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n return pathExists(relativeToDst, (err, exists) => {\n if (err) return callback(err)\n if (exists) {\n return callback(null, {\n toCwd: relativeToDst,\n toDst: srcpath\n })\n } else {\n return fs.lstat(srcpath, (err) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n return callback(err)\n }\n return callback(null, {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n })\n })\n }\n })\n }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n let exists\n if (path.isAbsolute(srcpath)) {\n exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('absolute srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n } else {\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n exists = fs.existsSync(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n } else {\n exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('relative srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n }\n }\n}\n\nmodule.exports = {\n symlinkPaths,\n symlinkPathsSync\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\n\nfunction symlinkType (srcpath, type, callback) {\n callback = (typeof type === 'function') ? type : callback\n type = (typeof type === 'function') ? false : type\n if (type) return callback(null, type)\n fs.lstat(srcpath, (err, stats) => {\n if (err) return callback(null, 'file')\n type = (stats && stats.isDirectory()) ? 'dir' : 'file'\n callback(null, type)\n })\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n let stats\n\n if (type) return type\n try {\n stats = fs.lstatSync(srcpath)\n } catch {\n return 'file'\n }\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n symlinkType,\n symlinkTypeSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('../fs')\nconst _mkdirs = require('../mkdirs')\nconst mkdirs = _mkdirs.mkdirs\nconst mkdirsSync = _mkdirs.mkdirsSync\n\nconst _symlinkPaths = require('./symlink-paths')\nconst symlinkPaths = _symlinkPaths.symlinkPaths\nconst symlinkPathsSync = _symlinkPaths.symlinkPathsSync\n\nconst _symlinkType = require('./symlink-type')\nconst symlinkType = _symlinkType.symlinkType\nconst symlinkTypeSync = _symlinkType.symlinkTypeSync\n\nconst pathExists = require('../path-exists').pathExists\n\nconst { areIdentical } = require('../util/stat')\n\nfunction createSymlink (srcpath, dstpath, type, callback) {\n callback = (typeof type === 'function') ? type : callback\n type = (typeof type === 'function') ? false : type\n\n fs.lstat(dstpath, (err, stats) => {\n if (!err && stats.isSymbolicLink()) {\n Promise.all([\n fs.stat(srcpath),\n fs.stat(dstpath)\n ]).then(([srcStat, dstStat]) => {\n if (areIdentical(srcStat, dstStat)) return callback(null)\n _createSymlink(srcpath, dstpath, type, callback)\n })\n } else _createSymlink(srcpath, dstpath, type, callback)\n })\n}\n\nfunction _createSymlink (srcpath, dstpath, type, callback) {\n symlinkPaths(srcpath, dstpath, (err, relative) => {\n if (err) return callback(err)\n srcpath = relative.toDst\n symlinkType(relative.toCwd, type, (err, type) => {\n if (err) return callback(err)\n const dir = path.dirname(dstpath)\n pathExists(dir, (err, dirExists) => {\n if (err) return callback(err)\n if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)\n mkdirs(dir, err => {\n if (err) return callback(err)\n fs.symlink(srcpath, dstpath, type, callback)\n })\n })\n })\n })\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n let stats\n try {\n stats = fs.lstatSync(dstpath)\n } catch {}\n if (stats && stats.isSymbolicLink()) {\n const srcStat = fs.statSync(srcpath)\n const dstStat = fs.statSync(dstpath)\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = symlinkPathsSync(srcpath, dstpath)\n srcpath = relative.toDst\n type = symlinkTypeSync(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n const exists = fs.existsSync(dir)\n if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n mkdirsSync(dir)\n return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n createSymlink: u(createSymlink),\n createSymlinkSync\n}\n", "'use strict'\n\nconst file = require('./file')\nconst link = require('./link')\nconst symlink = require('./symlink')\n\nmodule.exports = {\n // file\n createFile: file.createFile,\n createFileSync: file.createFileSync,\n ensureFile: file.createFile,\n ensureFileSync: file.createFileSync,\n // link\n createLink: link.createLink,\n createLinkSync: link.createLinkSync,\n ensureLink: link.createLink,\n ensureLinkSync: link.createLinkSync,\n // symlink\n createSymlink: symlink.createSymlink,\n createSymlinkSync: symlink.createSymlinkSync,\n ensureSymlink: symlink.createSymlink,\n ensureSymlinkSync: symlink.createSymlinkSync\n}\n", "function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n const EOF = finalEOL ? EOL : ''\n const str = JSON.stringify(obj, replacer, spaces)\n\n return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n if (Buffer.isBuffer(content)) content = content.toString('utf8')\n return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n", "let _fs\ntry {\n _fs = require('graceful-fs')\n} catch (_) {\n _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n data = stripBom(data)\n\n let obj\n try {\n obj = JSON.parse(data, options ? options.reviver : null)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n\n return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n try {\n let content = fs.readFileSync(file, options)\n content = stripBom(content)\n return JSON.parse(content, options.reviver)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n\n await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n // not sure if fs.writeFileSync returns anything, but just in case\n return fs.writeFileSync(file, str, options)\n}\n\nconst jsonfile = {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync\n}\n\nmodule.exports = jsonfile\n", "'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n // jsonfile exports\n readJson: jsonFile.readFile,\n readJsonSync: jsonFile.readFileSync,\n writeJson: jsonFile.writeFile,\n writeJsonSync: jsonFile.writeFileSync\n}\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nfunction outputFile (file, data, encoding, callback) {\n if (typeof encoding === 'function') {\n callback = encoding\n encoding = 'utf8'\n }\n\n const dir = path.dirname(file)\n pathExists(dir, (err, itDoes) => {\n if (err) return callback(err)\n if (itDoes) return fs.writeFile(file, data, encoding, callback)\n\n mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n\n fs.writeFile(file, data, encoding, callback)\n })\n })\n}\n\nfunction outputFileSync (file, ...args) {\n const dir = path.dirname(file)\n if (fs.existsSync(dir)) {\n return fs.writeFileSync(file, ...args)\n }\n mkdir.mkdirsSync(dir)\n fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n outputFile: u(outputFile),\n outputFileSync\n}\n", "'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output')\n\nasync function outputJson (file, data, options = {}) {\n const str = stringify(data, options)\n\n await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n", "'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output')\n\nfunction outputJsonSync (file, data, options) {\n const str = stringify(data, options)\n\n outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n", "'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy-sync').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n opts = opts || {}\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'move')\n if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n if (isChangingCase) return rename(src, dest, overwrite)\n if (overwrite) {\n removeSync(dest)\n return rename(src, dest, overwrite)\n }\n if (fs.existsSync(dest)) throw new Error('dest already exists.')\n return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n try {\n fs.renameSync(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') throw err\n return moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true\n }\n copySync(src, dest, opts)\n return removeSync(src)\n}\n\nmodule.exports = moveSync\n", "'use strict'\n\nmodule.exports = {\n moveSync: require('./move-sync')\n}\n", "'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copy = require('../copy').copy\nconst remove = require('../remove').remove\nconst mkdirp = require('../mkdirs').mkdirp\nconst pathExists = require('../path-exists').pathExists\nconst stat = require('../util/stat')\n\nfunction move (src, dest, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n const overwrite = opts.overwrite || opts.clobber || false\n\n stat.checkPaths(src, dest, 'move', opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, isChangingCase = false } = stats\n stat.checkParentPaths(src, srcStat, dest, 'move', err => {\n if (err) return cb(err)\n if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)\n mkdirp(path.dirname(dest), err => {\n if (err) return cb(err)\n return doRename(src, dest, overwrite, isChangingCase, cb)\n })\n })\n })\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase, cb) {\n if (isChangingCase) return rename(src, dest, overwrite, cb)\n if (overwrite) {\n return remove(dest, err => {\n if (err) return cb(err)\n return rename(src, dest, overwrite, cb)\n })\n }\n pathExists(dest, (err, destExists) => {\n if (err) return cb(err)\n if (destExists) return cb(new Error('dest already exists.'))\n return rename(src, dest, overwrite, cb)\n })\n}\n\nfunction rename (src, dest, overwrite, cb) {\n fs.rename(src, dest, err => {\n if (!err) return cb()\n if (err.code !== 'EXDEV') return cb(err)\n return moveAcrossDevice(src, dest, overwrite, cb)\n })\n}\n\nfunction moveAcrossDevice (src, dest, overwrite, cb) {\n const opts = {\n overwrite,\n errorOnExist: true\n }\n copy(src, dest, opts, err => {\n if (err) return cb(err)\n return remove(src, cb)\n })\n}\n\nmodule.exports = move\n", "'use strict'\n\nconst u = require('universalify').fromCallback\nmodule.exports = {\n move: u(require('./move'))\n}\n", "'use strict'\n\nmodule.exports = {\n // Export promiseified graceful-fs:\n ...require('./fs'),\n // Export extra methods:\n ...require('./copy-sync'),\n ...require('./copy'),\n ...require('./empty'),\n ...require('./ensure'),\n ...require('./json'),\n ...require('./mkdirs'),\n ...require('./move-sync'),\n ...require('./move'),\n ...require('./output'),\n ...require('./path-exists'),\n ...require('./remove')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar pathModule = require('path');\nvar isWindows = process.platform === 'win32';\nvar fs = require('fs');\n\n// JavaScript implementation of realpath, ported from node pre-v6\n\nvar DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);\n\nfunction rethrow() {\n // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and\n // is fairly slow to generate.\n var callback;\n if (DEBUG) {\n var backtrace = new Error;\n callback = debugCallback;\n } else\n callback = missingCallback;\n\n return callback;\n\n function debugCallback(err) {\n if (err) {\n backtrace.message = err.message;\n err = backtrace;\n missingCallback(err);\n }\n }\n\n function missingCallback(err) {\n if (err) {\n if (process.throwDeprecation)\n throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs\n else if (!process.noDeprecation) {\n var msg = 'fs: missing callback ' + (err.stack || err.message);\n if (process.traceDeprecation)\n console.trace(msg);\n else\n console.error(msg);\n }\n }\n }\n}\n\nfunction maybeCallback(cb) {\n return typeof cb === 'function' ? cb : rethrow();\n}\n\nvar normalize = pathModule.normalize;\n\n// Regexp that finds the next partion of a (partial) path\n// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']\nif (isWindows) {\n var nextPartRe = /(.*?)(?:[\\/\\\\]+|$)/g;\n} else {\n var nextPartRe = /(.*?)(?:[\\/]+|$)/g;\n}\n\n// Regex to find the device root, including trailing slash. E.g. 'c:\\\\'.\nif (isWindows) {\n var splitRootRe = /^(?:[a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/][^\\\\\\/]+)?[\\\\\\/]*/;\n} else {\n var splitRootRe = /^[\\/]*/;\n}\n\nexports.realpathSync = function realpathSync(p, cache) {\n // make p is absolute\n p = pathModule.resolve(p);\n\n if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {\n return cache[p];\n }\n\n var original = p,\n seenLinks = {},\n knownHard = {};\n\n // current character position in p\n var pos;\n // the partial path so far, including a trailing slash if any\n var current;\n // the partial path without a trailing slash (except when pointing at a root)\n var base;\n // the partial path scanned in the previous round, with slash\n var previous;\n\n start();\n\n function start() {\n // Skip over roots\n var m = splitRootRe.exec(p);\n pos = m[0].length;\n current = m[0];\n base = m[0];\n previous = '';\n\n // On windows, check that the root exists. On unix there is no need.\n if (isWindows && !knownHard[base]) {\n fs.lstatSync(base);\n knownHard[base] = true;\n }\n }\n\n // walk down the path, swapping out linked pathparts for their real\n // values\n // NB: p.length changes.\n while (pos < p.length) {\n // find the next part\n nextPartRe.lastIndex = pos;\n var result = nextPartRe.exec(p);\n previous = current;\n current += result[0];\n base = previous + result[1];\n pos = nextPartRe.lastIndex;\n\n // continue if not a symlink\n if (knownHard[base] || (cache && cache[base] === base)) {\n continue;\n }\n\n var resolvedLink;\n if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {\n // some known symbolic link. no need to stat again.\n resolvedLink = cache[base];\n } else {\n var stat = fs.lstatSync(base);\n if (!stat.isSymbolicLink()) {\n knownHard[base] = true;\n if (cache) cache[base] = base;\n continue;\n }\n\n // read the link if it wasn't read before\n // dev/ino always return 0 on windows, so skip the check.\n var linkTarget = null;\n if (!isWindows) {\n var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);\n if (seenLinks.hasOwnProperty(id)) {\n linkTarget = seenLinks[id];\n }\n }\n if (linkTarget === null) {\n fs.statSync(base);\n linkTarget = fs.readlinkSync(base);\n }\n resolvedLink = pathModule.resolve(previous, linkTarget);\n // track this, if given a cache.\n if (cache) cache[base] = resolvedLink;\n if (!isWindows) seenLinks[id] = linkTarget;\n }\n\n // resolve the link, then start over\n p = pathModule.resolve(resolvedLink, p.slice(pos));\n start();\n }\n\n if (cache) cache[original] = p;\n\n return p;\n};\n\n\nexports.realpath = function realpath(p, cache, cb) {\n if (typeof cb !== 'function') {\n cb = maybeCallback(cache);\n cache = null;\n }\n\n // make p is absolute\n p = pathModule.resolve(p);\n\n if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {\n return process.nextTick(cb.bind(null, null, cache[p]));\n }\n\n var original = p,\n seenLinks = {},\n knownHard = {};\n\n // current character position in p\n var pos;\n // the partial path so far, including a trailing slash if any\n var current;\n // the partial path without a trailing slash (except when pointing at a root)\n var base;\n // the partial path scanned in the previous round, with slash\n var previous;\n\n start();\n\n function start() {\n // Skip over roots\n var m = splitRootRe.exec(p);\n pos = m[0].length;\n current = m[0];\n base = m[0];\n previous = '';\n\n // On windows, check that the root exists. On unix there is no need.\n if (isWindows && !knownHard[base]) {\n fs.lstat(base, function(err) {\n if (err) return cb(err);\n knownHard[base] = true;\n LOOP();\n });\n } else {\n process.nextTick(LOOP);\n }\n }\n\n // walk down the path, swapping out linked pathparts for their real\n // values\n function LOOP() {\n // stop if scanned past end of path\n if (pos >= p.length) {\n if (cache) cache[original] = p;\n return cb(null, p);\n }\n\n // find the next part\n nextPartRe.lastIndex = pos;\n var result = nextPartRe.exec(p);\n previous = current;\n current += result[0];\n base = previous + result[1];\n pos = nextPartRe.lastIndex;\n\n // continue if not a symlink\n if (knownHard[base] || (cache && cache[base] === base)) {\n return process.nextTick(LOOP);\n }\n\n if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {\n // known symbolic link. no need to stat again.\n return gotResolvedLink(cache[base]);\n }\n\n return fs.lstat(base, gotStat);\n }\n\n function gotStat(err, stat) {\n if (err) return cb(err);\n\n // if not a symlink, skip to the next path part\n if (!stat.isSymbolicLink()) {\n knownHard[base] = true;\n if (cache) cache[base] = base;\n return process.nextTick(LOOP);\n }\n\n // stat & read the link if not read before\n // call gotTarget as soon as the link target is known\n // dev/ino always return 0 on windows, so skip the check.\n if (!isWindows) {\n var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);\n if (seenLinks.hasOwnProperty(id)) {\n return gotTarget(null, seenLinks[id], base);\n }\n }\n fs.stat(base, function(err) {\n if (err) return cb(err);\n\n fs.readlink(base, function(err, target) {\n if (!isWindows) seenLinks[id] = target;\n gotTarget(err, target);\n });\n });\n }\n\n function gotTarget(err, target, base) {\n if (err) return cb(err);\n\n var resolvedLink = pathModule.resolve(previous, target);\n if (cache) cache[base] = resolvedLink;\n gotResolvedLink(resolvedLink);\n }\n\n function gotResolvedLink(resolvedLink) {\n // resolve the link, then start over\n p = pathModule.resolve(resolvedLink, p.slice(pos));\n start();\n }\n};\n", "module.exports = realpath\nrealpath.realpath = realpath\nrealpath.sync = realpathSync\nrealpath.realpathSync = realpathSync\nrealpath.monkeypatch = monkeypatch\nrealpath.unmonkeypatch = unmonkeypatch\n\nvar fs = require('fs')\nvar origRealpath = fs.realpath\nvar origRealpathSync = fs.realpathSync\n\nvar version = process.version\nvar ok = /^v[0-5]\\./.test(version)\nvar old = require('./old.js')\n\nfunction newError (er) {\n return er && er.syscall === 'realpath' && (\n er.code === 'ELOOP' ||\n er.code === 'ENOMEM' ||\n er.code === 'ENAMETOOLONG'\n )\n}\n\nfunction realpath (p, cache, cb) {\n if (ok) {\n return origRealpath(p, cache, cb)\n }\n\n if (typeof cache === 'function') {\n cb = cache\n cache = null\n }\n origRealpath(p, cache, function (er, result) {\n if (newError(er)) {\n old.realpath(p, cache, cb)\n } else {\n cb(er, result)\n }\n })\n}\n\nfunction realpathSync (p, cache) {\n if (ok) {\n return origRealpathSync(p, cache)\n }\n\n try {\n return origRealpathSync(p, cache)\n } catch (er) {\n if (newError(er)) {\n return old.realpathSync(p, cache)\n } else {\n throw er\n }\n }\n}\n\nfunction monkeypatch () {\n fs.realpath = realpath\n fs.realpathSync = realpathSync\n}\n\nfunction unmonkeypatch () {\n fs.realpath = origRealpath\n fs.realpathSync = origRealpathSync\n}\n", "module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n", "'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n", "var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n", "module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n", "if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n", "try {\n var util = require('util');\n /* istanbul ignore next */\n if (typeof util.inherits !== 'function') throw '';\n module.exports = util.inherits;\n} catch (e) {\n /* istanbul ignore next */\n module.exports = require('./inherits_browser.js');\n}\n", "'use strict';\n\nfunction posix(path) {\n\treturn path.charAt(0) === '/';\n}\n\nfunction win32(path) {\n\t// https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56\n\tvar splitDeviceRe = /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\n\tvar result = splitDeviceRe.exec(path);\n\tvar device = result[1] || '';\n\tvar isUnc = Boolean(device && device.charAt(1) !== ':');\n\n\t// UNC paths are always absolute\n\treturn Boolean(result[2] || isUnc);\n}\n\nmodule.exports = process.platform === 'win32' ? win32 : posix;\nmodule.exports.posix = posix;\nmodule.exports.win32 = win32;\n", "exports.setopts = setopts\nexports.ownProp = ownProp\nexports.makeAbs = makeAbs\nexports.finish = finish\nexports.mark = mark\nexports.isIgnored = isIgnored\nexports.childrenIgnored = childrenIgnored\n\nfunction ownProp (obj, field) {\n return Object.prototype.hasOwnProperty.call(obj, field)\n}\n\nvar fs = require(\"fs\")\nvar path = require(\"path\")\nvar minimatch = require(\"minimatch\")\nvar isAbsolute = require(\"path-is-absolute\")\nvar Minimatch = minimatch.Minimatch\n\nfunction alphasort (a, b) {\n return a.localeCompare(b, 'en')\n}\n\nfunction setupIgnores (self, options) {\n self.ignore = options.ignore || []\n\n if (!Array.isArray(self.ignore))\n self.ignore = [self.ignore]\n\n if (self.ignore.length) {\n self.ignore = self.ignore.map(ignoreMap)\n }\n}\n\n// ignore patterns are always in dot:true mode.\nfunction ignoreMap (pattern) {\n var gmatcher = null\n if (pattern.slice(-3) === '/**') {\n var gpattern = pattern.replace(/(\\/\\*\\*)+$/, '')\n gmatcher = new Minimatch(gpattern, { dot: true })\n }\n\n return {\n matcher: new Minimatch(pattern, { dot: true }),\n gmatcher: gmatcher\n }\n}\n\nfunction setopts (self, pattern, options) {\n if (!options)\n options = {}\n\n // base-matching: just use globstar for that.\n if (options.matchBase && -1 === pattern.indexOf(\"/\")) {\n if (options.noglobstar) {\n throw new Error(\"base matching requires globstar\")\n }\n pattern = \"**/\" + pattern\n }\n\n self.silent = !!options.silent\n self.pattern = pattern\n self.strict = options.strict !== false\n self.realpath = !!options.realpath\n self.realpathCache = options.realpathCache || Object.create(null)\n self.follow = !!options.follow\n self.dot = !!options.dot\n self.mark = !!options.mark\n self.nodir = !!options.nodir\n if (self.nodir)\n self.mark = true\n self.sync = !!options.sync\n self.nounique = !!options.nounique\n self.nonull = !!options.nonull\n self.nosort = !!options.nosort\n self.nocase = !!options.nocase\n self.stat = !!options.stat\n self.noprocess = !!options.noprocess\n self.absolute = !!options.absolute\n self.fs = options.fs || fs\n\n self.maxLength = options.maxLength || Infinity\n self.cache = options.cache || Object.create(null)\n self.statCache = options.statCache || Object.create(null)\n self.symlinks = options.symlinks || Object.create(null)\n\n setupIgnores(self, options)\n\n self.changedCwd = false\n var cwd = process.cwd()\n if (!ownProp(options, \"cwd\"))\n self.cwd = cwd\n else {\n self.cwd = path.resolve(options.cwd)\n self.changedCwd = self.cwd !== cwd\n }\n\n self.root = options.root || path.resolve(self.cwd, \"/\")\n self.root = path.resolve(self.root)\n if (process.platform === \"win32\")\n self.root = self.root.replace(/\\\\/g, \"/\")\n\n // TODO: is an absolute `cwd` supposed to be resolved against `root`?\n // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')\n self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd)\n if (process.platform === \"win32\")\n self.cwdAbs = self.cwdAbs.replace(/\\\\/g, \"/\")\n self.nomount = !!options.nomount\n\n // disable comments and negation in Minimatch.\n // Note that they are not supported in Glob itself anyway.\n options.nonegate = true\n options.nocomment = true\n\n self.minimatch = new Minimatch(pattern, options)\n self.options = self.minimatch.options\n}\n\nfunction finish (self) {\n var nou = self.nounique\n var all = nou ? [] : Object.create(null)\n\n for (var i = 0, l = self.matches.length; i < l; i ++) {\n var matches = self.matches[i]\n if (!matches || Object.keys(matches).length === 0) {\n if (self.nonull) {\n // do like the shell, and spit out the literal glob\n var literal = self.minimatch.globSet[i]\n if (nou)\n all.push(literal)\n else\n all[literal] = true\n }\n } else {\n // had matches\n var m = Object.keys(matches)\n if (nou)\n all.push.apply(all, m)\n else\n m.forEach(function (m) {\n all[m] = true\n })\n }\n }\n\n if (!nou)\n all = Object.keys(all)\n\n if (!self.nosort)\n all = all.sort(alphasort)\n\n // at *some* point we statted all of these\n if (self.mark) {\n for (var i = 0; i < all.length; i++) {\n all[i] = self._mark(all[i])\n }\n if (self.nodir) {\n all = all.filter(function (e) {\n var notDir = !(/\\/$/.test(e))\n var c = self.cache[e] || self.cache[makeAbs(self, e)]\n if (notDir && c)\n notDir = c !== 'DIR' && !Array.isArray(c)\n return notDir\n })\n }\n }\n\n if (self.ignore.length)\n all = all.filter(function(m) {\n return !isIgnored(self, m)\n })\n\n self.found = all\n}\n\nfunction mark (self, p) {\n var abs = makeAbs(self, p)\n var c = self.cache[abs]\n var m = p\n if (c) {\n var isDir = c === 'DIR' || Array.isArray(c)\n var slash = p.slice(-1) === '/'\n\n if (isDir && !slash)\n m += '/'\n else if (!isDir && slash)\n m = m.slice(0, -1)\n\n if (m !== p) {\n var mabs = makeAbs(self, m)\n self.statCache[mabs] = self.statCache[abs]\n self.cache[mabs] = self.cache[abs]\n }\n }\n\n return m\n}\n\n// lotta situps...\nfunction makeAbs (self, f) {\n var abs = f\n if (f.charAt(0) === '/') {\n abs = path.join(self.root, f)\n } else if (isAbsolute(f) || f === '') {\n abs = f\n } else if (self.changedCwd) {\n abs = path.resolve(self.cwd, f)\n } else {\n abs = path.resolve(f)\n }\n\n if (process.platform === 'win32')\n abs = abs.replace(/\\\\/g, '/')\n\n return abs\n}\n\n\n// Return true, if pattern ends with globstar '**', for the accompanying parent directory.\n// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents\nfunction isIgnored (self, path) {\n if (!self.ignore.length)\n return false\n\n return self.ignore.some(function(item) {\n return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))\n })\n}\n\nfunction childrenIgnored (self, path) {\n if (!self.ignore.length)\n return false\n\n return self.ignore.some(function(item) {\n return !!(item.gmatcher && item.gmatcher.match(path))\n })\n}\n", "module.exports = globSync\nglobSync.GlobSync = GlobSync\n\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar Glob = require('./glob.js').Glob\nvar util = require('util')\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nfunction globSync (pattern, options) {\n if (typeof options === 'function' || arguments.length === 3)\n throw new TypeError('callback provided to sync glob\\n'+\n 'See: https://github.com/isaacs/node-glob/issues/167')\n\n return new GlobSync(pattern, options).found\n}\n\nfunction GlobSync (pattern, options) {\n if (!pattern)\n throw new Error('must provide pattern')\n\n if (typeof options === 'function' || arguments.length === 3)\n throw new TypeError('callback provided to sync glob\\n'+\n 'See: https://github.com/isaacs/node-glob/issues/167')\n\n if (!(this instanceof GlobSync))\n return new GlobSync(pattern, options)\n\n setopts(this, pattern, options)\n\n if (this.noprocess)\n return this\n\n var n = this.minimatch.set.length\n this.matches = new Array(n)\n for (var i = 0; i < n; i ++) {\n this._process(this.minimatch.set[i], i, false)\n }\n this._finish()\n}\n\nGlobSync.prototype._finish = function () {\n assert(this instanceof GlobSync)\n if (this.realpath) {\n var self = this\n this.matches.forEach(function (matchset, index) {\n var set = self.matches[index] = Object.create(null)\n for (var p in matchset) {\n try {\n p = self._makeAbs(p)\n var real = rp.realpathSync(p, self.realpathCache)\n set[real] = true\n } catch (er) {\n if (er.syscall === 'stat')\n set[self._makeAbs(p)] = true\n else\n throw er\n }\n }\n })\n }\n common.finish(this)\n}\n\n\nGlobSync.prototype._process = function (pattern, index, inGlobStar) {\n assert(this instanceof GlobSync)\n\n // Get the first [n] parts of pattern that are all strings.\n var n = 0\n while (typeof pattern[n] === 'string') {\n n ++\n }\n // now n is the index of the first one that is *not* a string.\n\n // See if there's anything else\n var prefix\n switch (n) {\n // if not, then this is rather simple\n case pattern.length:\n this._processSimple(pattern.join('/'), index)\n return\n\n case 0:\n // pattern *starts* with some non-trivial item.\n // going to readdir(cwd), but not include the prefix in matches.\n prefix = null\n break\n\n default:\n // pattern has some string bits in the front.\n // whatever it starts with, whether that's 'absolute' like /foo/bar,\n // or 'relative' like '../baz'\n prefix = pattern.slice(0, n).join('/')\n break\n }\n\n var remain = pattern.slice(n)\n\n // get the list of entries.\n var read\n if (prefix === null)\n read = '.'\n else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {\n if (!prefix || !isAbsolute(prefix))\n prefix = '/' + prefix\n read = prefix\n } else\n read = prefix\n\n var abs = this._makeAbs(read)\n\n //if ignored, skip processing\n if (childrenIgnored(this, read))\n return\n\n var isGlobStar = remain[0] === minimatch.GLOBSTAR\n if (isGlobStar)\n this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)\n else\n this._processReaddir(prefix, read, abs, remain, index, inGlobStar)\n}\n\n\nGlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {\n var entries = this._readdir(abs, inGlobStar)\n\n // if the abs isn't a dir, then nothing can match!\n if (!entries)\n return\n\n // It will only match dot entries if it starts with a dot, or if\n // dot is set. Stuff like @(.foo|.bar) isn't allowed.\n var pn = remain[0]\n var negate = !!this.minimatch.negate\n var rawGlob = pn._glob\n var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n var matchedEntries = []\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i]\n if (e.charAt(0) !== '.' || dotOk) {\n var m\n if (negate && !prefix) {\n m = !e.match(pn)\n } else {\n m = e.match(pn)\n }\n if (m)\n matchedEntries.push(e)\n }\n }\n\n var len = matchedEntries.length\n // If there are no matched entries, then nothing matches.\n if (len === 0)\n return\n\n // if this is the last remaining pattern bit, then no need for\n // an additional stat *unless* the user has specified mark or\n // stat explicitly. We know they exist, since readdir returned\n // them.\n\n if (remain.length === 1 && !this.mark && !this.stat) {\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n if (prefix) {\n if (prefix.slice(-1) !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n\n if (e.charAt(0) === '/' && !this.nomount) {\n e = path.join(this.root, e)\n }\n this._emitMatch(index, e)\n }\n // This was the last one, and no stats were needed\n return\n }\n\n // now test all matched entries as stand-ins for that part\n // of the pattern.\n remain.shift()\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n var newPattern\n if (prefix)\n newPattern = [prefix, e]\n else\n newPattern = [e]\n this._process(newPattern.concat(remain), index, inGlobStar)\n }\n}\n\n\nGlobSync.prototype._emitMatch = function (index, e) {\n if (isIgnored(this, e))\n return\n\n var abs = this._makeAbs(e)\n\n if (this.mark)\n e = this._mark(e)\n\n if (this.absolute) {\n e = abs\n }\n\n if (this.matches[index][e])\n return\n\n if (this.nodir) {\n var c = this.cache[abs]\n if (c === 'DIR' || Array.isArray(c))\n return\n }\n\n this.matches[index][e] = true\n\n if (this.stat)\n this._stat(e)\n}\n\n\nGlobSync.prototype._readdirInGlobStar = function (abs) {\n // follow all symlinked directories forever\n // just proceed as if this is a non-globstar situation\n if (this.follow)\n return this._readdir(abs, false)\n\n var entries\n var lstat\n var stat\n try {\n lstat = this.fs.lstatSync(abs)\n } catch (er) {\n if (er.code === 'ENOENT') {\n // lstat failed, doesn't exist\n return null\n }\n }\n\n var isSym = lstat && lstat.isSymbolicLink()\n this.symlinks[abs] = isSym\n\n // If it's not a symlink or a dir, then it's definitely a regular file.\n // don't bother doing a readdir in that case.\n if (!isSym && lstat && !lstat.isDirectory())\n this.cache[abs] = 'FILE'\n else\n entries = this._readdir(abs, false)\n\n return entries\n}\n\nGlobSync.prototype._readdir = function (abs, inGlobStar) {\n var entries\n\n if (inGlobStar && !ownProp(this.symlinks, abs))\n return this._readdirInGlobStar(abs)\n\n if (ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n if (!c || c === 'FILE')\n return null\n\n if (Array.isArray(c))\n return c\n }\n\n try {\n return this._readdirEntries(abs, this.fs.readdirSync(abs))\n } catch (er) {\n this._readdirError(abs, er)\n return null\n }\n}\n\nGlobSync.prototype._readdirEntries = function (abs, entries) {\n // if we haven't asked to stat everything, then just\n // assume that everything in there exists, so we can avoid\n // having to stat it a second time.\n if (!this.mark && !this.stat) {\n for (var i = 0; i < entries.length; i ++) {\n var e = entries[i]\n if (abs === '/')\n e = abs + e\n else\n e = abs + '/' + e\n this.cache[e] = true\n }\n }\n\n this.cache[abs] = entries\n\n // mark and cache dir-ness\n return entries\n}\n\nGlobSync.prototype._readdirError = function (f, er) {\n // handle errors, and cache the information\n switch (er.code) {\n case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n case 'ENOTDIR': // totally normal. means it *does* exist.\n var abs = this._makeAbs(f)\n this.cache[abs] = 'FILE'\n if (abs === this.cwdAbs) {\n var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n error.path = this.cwd\n error.code = er.code\n throw error\n }\n break\n\n case 'ENOENT': // not terribly unusual\n case 'ELOOP':\n case 'ENAMETOOLONG':\n case 'UNKNOWN':\n this.cache[this._makeAbs(f)] = false\n break\n\n default: // some unusual error. Treat as failure.\n this.cache[this._makeAbs(f)] = false\n if (this.strict)\n throw er\n if (!this.silent)\n console.error('glob error', er)\n break\n }\n}\n\nGlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {\n\n var entries = this._readdir(abs, inGlobStar)\n\n // no entries means not a dir, so it can never have matches\n // foo.txt/** doesn't match foo.txt\n if (!entries)\n return\n\n // test without the globstar, and with every child both below\n // and replacing the globstar.\n var remainWithoutGlobStar = remain.slice(1)\n var gspref = prefix ? [ prefix ] : []\n var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n // the noGlobStar pattern exits the inGlobStar state\n this._process(noGlobStar, index, false)\n\n var len = entries.length\n var isSym = this.symlinks[abs]\n\n // If it's a symlink, and we're in a globstar, then stop\n if (isSym && inGlobStar)\n return\n\n for (var i = 0; i < len; i++) {\n var e = entries[i]\n if (e.charAt(0) === '.' && !this.dot)\n continue\n\n // these two cases enter the inGlobStar state\n var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n this._process(instead, index, true)\n\n var below = gspref.concat(entries[i], remain)\n this._process(below, index, true)\n }\n}\n\nGlobSync.prototype._processSimple = function (prefix, index) {\n // XXX review this. Shouldn't it be doing the mounting etc\n // before doing stat? kinda weird?\n var exists = this._stat(prefix)\n\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n // If it doesn't exist, then just mark the lack of results\n if (!exists)\n return\n\n if (prefix && isAbsolute(prefix) && !this.nomount) {\n var trail = /[\\/\\\\]$/.test(prefix)\n if (prefix.charAt(0) === '/') {\n prefix = path.join(this.root, prefix)\n } else {\n prefix = path.resolve(this.root, prefix)\n if (trail)\n prefix += '/'\n }\n }\n\n if (process.platform === 'win32')\n prefix = prefix.replace(/\\\\/g, '/')\n\n // Mark this as a match\n this._emitMatch(index, prefix)\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlobSync.prototype._stat = function (f) {\n var abs = this._makeAbs(f)\n var needDir = f.slice(-1) === '/'\n\n if (f.length > this.maxLength)\n return false\n\n if (!this.stat && ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n\n if (Array.isArray(c))\n c = 'DIR'\n\n // It exists, but maybe not how we need it\n if (!needDir || c === 'DIR')\n return c\n\n if (needDir && c === 'FILE')\n return false\n\n // otherwise we have to stat, because maybe c=true\n // if we know it exists, but not what it is.\n }\n\n var exists\n var stat = this.statCache[abs]\n if (!stat) {\n var lstat\n try {\n lstat = this.fs.lstatSync(abs)\n } catch (er) {\n if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n this.statCache[abs] = false\n return false\n }\n }\n\n if (lstat && lstat.isSymbolicLink()) {\n try {\n stat = this.fs.statSync(abs)\n } catch (er) {\n stat = lstat\n }\n } else {\n stat = lstat\n }\n }\n\n this.statCache[abs] = stat\n\n var c = true\n if (stat)\n c = stat.isDirectory() ? 'DIR' : 'FILE'\n\n this.cache[abs] = this.cache[abs] || c\n\n if (needDir && c === 'FILE')\n return false\n\n return c\n}\n\nGlobSync.prototype._mark = function (p) {\n return common.mark(this, p)\n}\n\nGlobSync.prototype._makeAbs = function (f) {\n return common.makeAbs(this, f)\n}\n", "// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n", "var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n", "var wrappy = require('wrappy')\nvar reqs = Object.create(null)\nvar once = require('once')\n\nmodule.exports = wrappy(inflight)\n\nfunction inflight (key, cb) {\n if (reqs[key]) {\n reqs[key].push(cb)\n return null\n } else {\n reqs[key] = [cb]\n return makeres(key)\n }\n}\n\nfunction makeres (key) {\n return once(function RES () {\n var cbs = reqs[key]\n var len = cbs.length\n var args = slice(arguments)\n\n // XXX It's somewhat ambiguous whether a new callback added in this\n // pass should be queued for later execution if something in the\n // list of callbacks throws, or if it should just be discarded.\n // However, it's such an edge case that it hardly matters, and either\n // choice is likely as surprising as the other.\n // As it happens, we do go ahead and schedule it for later execution.\n try {\n for (var i = 0; i < len; i++) {\n cbs[i].apply(null, args)\n }\n } finally {\n if (cbs.length > len) {\n // added more in the interim.\n // de-zalgo, just in case, but don't call again.\n cbs.splice(0, len)\n process.nextTick(function () {\n RES.apply(null, args)\n })\n } else {\n delete reqs[key]\n }\n }\n })\n}\n\nfunction slice (args) {\n var length = args.length\n var array = []\n\n for (var i = 0; i < length; i++) array[i] = args[i]\n return array\n}\n", "// Approach:\n//\n// 1. Get the minimatch set\n// 2. For each pattern in the set, PROCESS(pattern, false)\n// 3. Store matches per-set, then uniq them\n//\n// PROCESS(pattern, inGlobStar)\n// Get the first [n] items from pattern that are all strings\n// Join these together. This is PREFIX.\n// If there is no more remaining, then stat(PREFIX) and\n// add to matches if it succeeds. END.\n//\n// If inGlobStar and PREFIX is symlink and points to dir\n// set ENTRIES = []\n// else readdir(PREFIX) as ENTRIES\n// If fail, END\n//\n// with ENTRIES\n// If pattern[n] is GLOBSTAR\n// // handle the case where the globstar match is empty\n// // by pruning it out, and testing the resulting pattern\n// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)\n// // handle other cases.\n// for ENTRY in ENTRIES (not dotfiles)\n// // attach globstar + tail onto the entry\n// // Mark that this entry is a globstar match\n// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)\n//\n// else // not globstar\n// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)\n// Test ENTRY against pattern[n]\n// If fails, continue\n// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])\n//\n// Caveat:\n// Cache all stats and readdirs results to minimize syscall. Since all\n// we ever care about is existence and directory-ness, we can just keep\n// `true` for files, and [children,...] for directories, or `false` for\n// things that don't exist.\n\nmodule.exports = glob\n\nvar rp = require('fs.realpath')\nvar minimatch = require('minimatch')\nvar Minimatch = minimatch.Minimatch\nvar inherits = require('inherits')\nvar EE = require('events').EventEmitter\nvar path = require('path')\nvar assert = require('assert')\nvar isAbsolute = require('path-is-absolute')\nvar globSync = require('./sync.js')\nvar common = require('./common.js')\nvar setopts = common.setopts\nvar ownProp = common.ownProp\nvar inflight = require('inflight')\nvar util = require('util')\nvar childrenIgnored = common.childrenIgnored\nvar isIgnored = common.isIgnored\n\nvar once = require('once')\n\nfunction glob (pattern, options, cb) {\n if (typeof options === 'function') cb = options, options = {}\n if (!options) options = {}\n\n if (options.sync) {\n if (cb)\n throw new TypeError('callback provided to sync glob')\n return globSync(pattern, options)\n }\n\n return new Glob(pattern, options, cb)\n}\n\nglob.sync = globSync\nvar GlobSync = glob.GlobSync = globSync.GlobSync\n\n// old api surface\nglob.glob = glob\n\nfunction extend (origin, add) {\n if (add === null || typeof add !== 'object') {\n return origin\n }\n\n var keys = Object.keys(add)\n var i = keys.length\n while (i--) {\n origin[keys[i]] = add[keys[i]]\n }\n return origin\n}\n\nglob.hasMagic = function (pattern, options_) {\n var options = extend({}, options_)\n options.noprocess = true\n\n var g = new Glob(pattern, options)\n var set = g.minimatch.set\n\n if (!pattern)\n return false\n\n if (set.length > 1)\n return true\n\n for (var j = 0; j < set[0].length; j++) {\n if (typeof set[0][j] !== 'string')\n return true\n }\n\n return false\n}\n\nglob.Glob = Glob\ninherits(Glob, EE)\nfunction Glob (pattern, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n\n if (options && options.sync) {\n if (cb)\n throw new TypeError('callback provided to sync glob')\n return new GlobSync(pattern, options)\n }\n\n if (!(this instanceof Glob))\n return new Glob(pattern, options, cb)\n\n setopts(this, pattern, options)\n this._didRealPath = false\n\n // process each pattern in the minimatch set\n var n = this.minimatch.set.length\n\n // The matches are stored as {<filename>: true,...} so that\n // duplicates are automagically pruned.\n // Later, we do an Object.keys() on these.\n // Keep them as a list so we can fill in when nonull is set.\n this.matches = new Array(n)\n\n if (typeof cb === 'function') {\n cb = once(cb)\n this.on('error', cb)\n this.on('end', function (matches) {\n cb(null, matches)\n })\n }\n\n var self = this\n this._processing = 0\n\n this._emitQueue = []\n this._processQueue = []\n this.paused = false\n\n if (this.noprocess)\n return this\n\n if (n === 0)\n return done()\n\n var sync = true\n for (var i = 0; i < n; i ++) {\n this._process(this.minimatch.set[i], i, false, done)\n }\n sync = false\n\n function done () {\n --self._processing\n if (self._processing <= 0) {\n if (sync) {\n process.nextTick(function () {\n self._finish()\n })\n } else {\n self._finish()\n }\n }\n }\n}\n\nGlob.prototype._finish = function () {\n assert(this instanceof Glob)\n if (this.aborted)\n return\n\n if (this.realpath && !this._didRealpath)\n return this._realpath()\n\n common.finish(this)\n this.emit('end', this.found)\n}\n\nGlob.prototype._realpath = function () {\n if (this._didRealpath)\n return\n\n this._didRealpath = true\n\n var n = this.matches.length\n if (n === 0)\n return this._finish()\n\n var self = this\n for (var i = 0; i < this.matches.length; i++)\n this._realpathSet(i, next)\n\n function next () {\n if (--n === 0)\n self._finish()\n }\n}\n\nGlob.prototype._realpathSet = function (index, cb) {\n var matchset = this.matches[index]\n if (!matchset)\n return cb()\n\n var found = Object.keys(matchset)\n var self = this\n var n = found.length\n\n if (n === 0)\n return cb()\n\n var set = this.matches[index] = Object.create(null)\n found.forEach(function (p, i) {\n // If there's a problem with the stat, then it means that\n // one or more of the links in the realpath couldn't be\n // resolved. just return the abs value in that case.\n p = self._makeAbs(p)\n rp.realpath(p, self.realpathCache, function (er, real) {\n if (!er)\n set[real] = true\n else if (er.syscall === 'stat')\n set[p] = true\n else\n self.emit('error', er) // srsly wtf right here\n\n if (--n === 0) {\n self.matches[index] = set\n cb()\n }\n })\n })\n}\n\nGlob.prototype._mark = function (p) {\n return common.mark(this, p)\n}\n\nGlob.prototype._makeAbs = function (f) {\n return common.makeAbs(this, f)\n}\n\nGlob.prototype.abort = function () {\n this.aborted = true\n this.emit('abort')\n}\n\nGlob.prototype.pause = function () {\n if (!this.paused) {\n this.paused = true\n this.emit('pause')\n }\n}\n\nGlob.prototype.resume = function () {\n if (this.paused) {\n this.emit('resume')\n this.paused = false\n if (this._emitQueue.length) {\n var eq = this._emitQueue.slice(0)\n this._emitQueue.length = 0\n for (var i = 0; i < eq.length; i ++) {\n var e = eq[i]\n this._emitMatch(e[0], e[1])\n }\n }\n if (this._processQueue.length) {\n var pq = this._processQueue.slice(0)\n this._processQueue.length = 0\n for (var i = 0; i < pq.length; i ++) {\n var p = pq[i]\n this._processing--\n this._process(p[0], p[1], p[2], p[3])\n }\n }\n }\n}\n\nGlob.prototype._process = function (pattern, index, inGlobStar, cb) {\n assert(this instanceof Glob)\n assert(typeof cb === 'function')\n\n if (this.aborted)\n return\n\n this._processing++\n if (this.paused) {\n this._processQueue.push([pattern, index, inGlobStar, cb])\n return\n }\n\n //console.error('PROCESS %d', this._processing, pattern)\n\n // Get the first [n] parts of pattern that are all strings.\n var n = 0\n while (typeof pattern[n] === 'string') {\n n ++\n }\n // now n is the index of the first one that is *not* a string.\n\n // see if there's anything else\n var prefix\n switch (n) {\n // if not, then this is rather simple\n case pattern.length:\n this._processSimple(pattern.join('/'), index, cb)\n return\n\n case 0:\n // pattern *starts* with some non-trivial item.\n // going to readdir(cwd), but not include the prefix in matches.\n prefix = null\n break\n\n default:\n // pattern has some string bits in the front.\n // whatever it starts with, whether that's 'absolute' like /foo/bar,\n // or 'relative' like '../baz'\n prefix = pattern.slice(0, n).join('/')\n break\n }\n\n var remain = pattern.slice(n)\n\n // get the list of entries.\n var read\n if (prefix === null)\n read = '.'\n else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) {\n if (!prefix || !isAbsolute(prefix))\n prefix = '/' + prefix\n read = prefix\n } else\n read = prefix\n\n var abs = this._makeAbs(read)\n\n //if ignored, skip _processing\n if (childrenIgnored(this, read))\n return cb()\n\n var isGlobStar = remain[0] === minimatch.GLOBSTAR\n if (isGlobStar)\n this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)\n else\n this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)\n}\n\nGlob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {\n var self = this\n this._readdir(abs, inGlobStar, function (er, entries) {\n return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)\n })\n}\n\nGlob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {\n\n // if the abs isn't a dir, then nothing can match!\n if (!entries)\n return cb()\n\n // It will only match dot entries if it starts with a dot, or if\n // dot is set. Stuff like @(.foo|.bar) isn't allowed.\n var pn = remain[0]\n var negate = !!this.minimatch.negate\n var rawGlob = pn._glob\n var dotOk = this.dot || rawGlob.charAt(0) === '.'\n\n var matchedEntries = []\n for (var i = 0; i < entries.length; i++) {\n var e = entries[i]\n if (e.charAt(0) !== '.' || dotOk) {\n var m\n if (negate && !prefix) {\n m = !e.match(pn)\n } else {\n m = e.match(pn)\n }\n if (m)\n matchedEntries.push(e)\n }\n }\n\n //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)\n\n var len = matchedEntries.length\n // If there are no matched entries, then nothing matches.\n if (len === 0)\n return cb()\n\n // if this is the last remaining pattern bit, then no need for\n // an additional stat *unless* the user has specified mark or\n // stat explicitly. We know they exist, since readdir returned\n // them.\n\n if (remain.length === 1 && !this.mark && !this.stat) {\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n if (prefix) {\n if (prefix !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n\n if (e.charAt(0) === '/' && !this.nomount) {\n e = path.join(this.root, e)\n }\n this._emitMatch(index, e)\n }\n // This was the last one, and no stats were needed\n return cb()\n }\n\n // now test all matched entries as stand-ins for that part\n // of the pattern.\n remain.shift()\n for (var i = 0; i < len; i ++) {\n var e = matchedEntries[i]\n var newPattern\n if (prefix) {\n if (prefix !== '/')\n e = prefix + '/' + e\n else\n e = prefix + e\n }\n this._process([e].concat(remain), index, inGlobStar, cb)\n }\n cb()\n}\n\nGlob.prototype._emitMatch = function (index, e) {\n if (this.aborted)\n return\n\n if (isIgnored(this, e))\n return\n\n if (this.paused) {\n this._emitQueue.push([index, e])\n return\n }\n\n var abs = isAbsolute(e) ? e : this._makeAbs(e)\n\n if (this.mark)\n e = this._mark(e)\n\n if (this.absolute)\n e = abs\n\n if (this.matches[index][e])\n return\n\n if (this.nodir) {\n var c = this.cache[abs]\n if (c === 'DIR' || Array.isArray(c))\n return\n }\n\n this.matches[index][e] = true\n\n var st = this.statCache[abs]\n if (st)\n this.emit('stat', e, st)\n\n this.emit('match', e)\n}\n\nGlob.prototype._readdirInGlobStar = function (abs, cb) {\n if (this.aborted)\n return\n\n // follow all symlinked directories forever\n // just proceed as if this is a non-globstar situation\n if (this.follow)\n return this._readdir(abs, false, cb)\n\n var lstatkey = 'lstat\\0' + abs\n var self = this\n var lstatcb = inflight(lstatkey, lstatcb_)\n\n if (lstatcb)\n self.fs.lstat(abs, lstatcb)\n\n function lstatcb_ (er, lstat) {\n if (er && er.code === 'ENOENT')\n return cb()\n\n var isSym = lstat && lstat.isSymbolicLink()\n self.symlinks[abs] = isSym\n\n // If it's not a symlink or a dir, then it's definitely a regular file.\n // don't bother doing a readdir in that case.\n if (!isSym && lstat && !lstat.isDirectory()) {\n self.cache[abs] = 'FILE'\n cb()\n } else\n self._readdir(abs, false, cb)\n }\n}\n\nGlob.prototype._readdir = function (abs, inGlobStar, cb) {\n if (this.aborted)\n return\n\n cb = inflight('readdir\\0'+abs+'\\0'+inGlobStar, cb)\n if (!cb)\n return\n\n //console.error('RD %j %j', +inGlobStar, abs)\n if (inGlobStar && !ownProp(this.symlinks, abs))\n return this._readdirInGlobStar(abs, cb)\n\n if (ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n if (!c || c === 'FILE')\n return cb()\n\n if (Array.isArray(c))\n return cb(null, c)\n }\n\n var self = this\n self.fs.readdir(abs, readdirCb(this, abs, cb))\n}\n\nfunction readdirCb (self, abs, cb) {\n return function (er, entries) {\n if (er)\n self._readdirError(abs, er, cb)\n else\n self._readdirEntries(abs, entries, cb)\n }\n}\n\nGlob.prototype._readdirEntries = function (abs, entries, cb) {\n if (this.aborted)\n return\n\n // if we haven't asked to stat everything, then just\n // assume that everything in there exists, so we can avoid\n // having to stat it a second time.\n if (!this.mark && !this.stat) {\n for (var i = 0; i < entries.length; i ++) {\n var e = entries[i]\n if (abs === '/')\n e = abs + e\n else\n e = abs + '/' + e\n this.cache[e] = true\n }\n }\n\n this.cache[abs] = entries\n return cb(null, entries)\n}\n\nGlob.prototype._readdirError = function (f, er, cb) {\n if (this.aborted)\n return\n\n // handle errors, and cache the information\n switch (er.code) {\n case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205\n case 'ENOTDIR': // totally normal. means it *does* exist.\n var abs = this._makeAbs(f)\n this.cache[abs] = 'FILE'\n if (abs === this.cwdAbs) {\n var error = new Error(er.code + ' invalid cwd ' + this.cwd)\n error.path = this.cwd\n error.code = er.code\n this.emit('error', error)\n this.abort()\n }\n break\n\n case 'ENOENT': // not terribly unusual\n case 'ELOOP':\n case 'ENAMETOOLONG':\n case 'UNKNOWN':\n this.cache[this._makeAbs(f)] = false\n break\n\n default: // some unusual error. Treat as failure.\n this.cache[this._makeAbs(f)] = false\n if (this.strict) {\n this.emit('error', er)\n // If the error is handled, then we abort\n // if not, we threw out of here\n this.abort()\n }\n if (!this.silent)\n console.error('glob error', er)\n break\n }\n\n return cb()\n}\n\nGlob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {\n var self = this\n this._readdir(abs, inGlobStar, function (er, entries) {\n self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)\n })\n}\n\n\nGlob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {\n //console.error('pgs2', prefix, remain[0], entries)\n\n // no entries means not a dir, so it can never have matches\n // foo.txt/** doesn't match foo.txt\n if (!entries)\n return cb()\n\n // test without the globstar, and with every child both below\n // and replacing the globstar.\n var remainWithoutGlobStar = remain.slice(1)\n var gspref = prefix ? [ prefix ] : []\n var noGlobStar = gspref.concat(remainWithoutGlobStar)\n\n // the noGlobStar pattern exits the inGlobStar state\n this._process(noGlobStar, index, false, cb)\n\n var isSym = this.symlinks[abs]\n var len = entries.length\n\n // If it's a symlink, and we're in a globstar, then stop\n if (isSym && inGlobStar)\n return cb()\n\n for (var i = 0; i < len; i++) {\n var e = entries[i]\n if (e.charAt(0) === '.' && !this.dot)\n continue\n\n // these two cases enter the inGlobStar state\n var instead = gspref.concat(entries[i], remainWithoutGlobStar)\n this._process(instead, index, true, cb)\n\n var below = gspref.concat(entries[i], remain)\n this._process(below, index, true, cb)\n }\n\n cb()\n}\n\nGlob.prototype._processSimple = function (prefix, index, cb) {\n // XXX review this. Shouldn't it be doing the mounting etc\n // before doing stat? kinda weird?\n var self = this\n this._stat(prefix, function (er, exists) {\n self._processSimple2(prefix, index, er, exists, cb)\n })\n}\nGlob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {\n\n //console.error('ps2', prefix, exists)\n\n if (!this.matches[index])\n this.matches[index] = Object.create(null)\n\n // If it doesn't exist, then just mark the lack of results\n if (!exists)\n return cb()\n\n if (prefix && isAbsolute(prefix) && !this.nomount) {\n var trail = /[\\/\\\\]$/.test(prefix)\n if (prefix.charAt(0) === '/') {\n prefix = path.join(this.root, prefix)\n } else {\n prefix = path.resolve(this.root, prefix)\n if (trail)\n prefix += '/'\n }\n }\n\n if (process.platform === 'win32')\n prefix = prefix.replace(/\\\\/g, '/')\n\n // Mark this as a match\n this._emitMatch(index, prefix)\n cb()\n}\n\n// Returns either 'DIR', 'FILE', or false\nGlob.prototype._stat = function (f, cb) {\n var abs = this._makeAbs(f)\n var needDir = f.slice(-1) === '/'\n\n if (f.length > this.maxLength)\n return cb()\n\n if (!this.stat && ownProp(this.cache, abs)) {\n var c = this.cache[abs]\n\n if (Array.isArray(c))\n c = 'DIR'\n\n // It exists, but maybe not how we need it\n if (!needDir || c === 'DIR')\n return cb(null, c)\n\n if (needDir && c === 'FILE')\n return cb()\n\n // otherwise we have to stat, because maybe c=true\n // if we know it exists, but not what it is.\n }\n\n var exists\n var stat = this.statCache[abs]\n if (stat !== undefined) {\n if (stat === false)\n return cb(null, stat)\n else {\n var type = stat.isDirectory() ? 'DIR' : 'FILE'\n if (needDir && type === 'FILE')\n return cb()\n else\n return cb(null, type, stat)\n }\n }\n\n var self = this\n var statcb = inflight('stat\\0' + abs, lstatcb_)\n if (statcb)\n self.fs.lstat(abs, statcb)\n\n function lstatcb_ (er, lstat) {\n if (lstat && lstat.isSymbolicLink()) {\n // If it's a symlink, then treat it as the target, unless\n // the target does not exist, then treat it as a file.\n return self.fs.stat(abs, function (er, stat) {\n if (er)\n self._stat2(f, abs, null, lstat, cb)\n else\n self._stat2(f, abs, er, stat, cb)\n })\n } else {\n self._stat2(f, abs, er, lstat, cb)\n }\n }\n}\n\nGlob.prototype._stat2 = function (f, abs, er, stat, cb) {\n if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {\n this.statCache[abs] = false\n return cb()\n }\n\n var needDir = f.slice(-1) === '/'\n this.statCache[abs] = stat\n\n if (abs.slice(-1) === '/' && stat && !stat.isDirectory())\n return cb(null, false, stat)\n\n var c = true\n if (stat)\n c = stat.isDirectory() ? 'DIR' : 'FILE'\n this.cache[abs] = this.cache[abs] || c\n\n if (needDir && c === 'FILE')\n return cb()\n\n return cb(null, c, stat)\n}\n", "const glob = require('glob')\n\nconst promise = function (pattern, options) {\n return new Promise((resolve, reject) => {\n glob(pattern, options, (err, files) => err === null ? resolve(files) : reject(err))\n })\n}\n\n// default\nmodule.exports = promise\n\n// utility exports\nmodule.exports.glob = glob\nmodule.exports.Glob = glob.Glob\nmodule.exports.hasMagic = glob.hasMagic\nmodule.exports.promise = promise\nmodule.exports.sync = glob.sync\n", "'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n", "'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n", "'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n", "'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n output = token.close = `)${rest})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n", "'use strict';\n\nmodule.exports = require('./lib/picomatch');\n", "'use strict';\n\nconst fs = require('fs');\nconst { Readable } = require('stream');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst picomatch = require('picomatch');\n\nconst readdir = promisify(fs.readdir);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\n/**\n * @typedef {Object} EntryInfo\n * @property {String} path\n * @property {String} fullPath\n * @property {fs.Stats=} stats\n * @property {fs.Dirent=} dirent\n * @property {String} basename\n */\n\nconst BANG = '!';\nconst RECURSIVE_ERROR_CODE = 'READDIRP_RECURSIVE_ERROR';\nconst NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP', RECURSIVE_ERROR_CODE]);\nconst FILE_TYPE = 'files';\nconst DIR_TYPE = 'directories';\nconst FILE_DIR_TYPE = 'files_directories';\nconst EVERYTHING_TYPE = 'all';\nconst ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];\n\nconst isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);\nconst [maj, min] = process.versions.node.split('.').slice(0, 2).map(n => Number.parseInt(n, 10));\nconst wantBigintFsStats = process.platform === 'win32' && (maj > 10 || (maj === 10 && min >= 5));\n\nconst normalizeFilter = filter => {\n if (filter === undefined) return;\n if (typeof filter === 'function') return filter;\n\n if (typeof filter === 'string') {\n const glob = picomatch(filter.trim());\n return entry => glob(entry.basename);\n }\n\n if (Array.isArray(filter)) {\n const positive = [];\n const negative = [];\n for (const item of filter) {\n const trimmed = item.trim();\n if (trimmed.charAt(0) === BANG) {\n negative.push(picomatch(trimmed.slice(1)));\n } else {\n positive.push(picomatch(trimmed));\n }\n }\n\n if (negative.length > 0) {\n if (positive.length > 0) {\n return entry =>\n positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));\n }\n return entry => !negative.some(f => f(entry.basename));\n }\n return entry => positive.some(f => f(entry.basename));\n }\n};\n\nclass ReaddirpStream extends Readable {\n static get defaultOptions() {\n return {\n root: '.',\n /* eslint-disable no-unused-vars */\n fileFilter: (path) => true,\n directoryFilter: (path) => true,\n /* eslint-enable no-unused-vars */\n type: FILE_TYPE,\n lstat: false,\n depth: 2147483648,\n alwaysStat: false\n };\n }\n\n constructor(options = {}) {\n super({\n objectMode: true,\n autoDestroy: true,\n highWaterMark: options.highWaterMark || 4096\n });\n const opts = { ...ReaddirpStream.defaultOptions, ...options };\n const { root, type } = opts;\n\n this._fileFilter = normalizeFilter(opts.fileFilter);\n this._directoryFilter = normalizeFilter(opts.directoryFilter);\n\n const statMethod = opts.lstat ? lstat : stat;\n // Use bigint stats if it's windows and stat() supports options (node 10+).\n if (wantBigintFsStats) {\n this._stat = path => statMethod(path, { bigint: true });\n } else {\n this._stat = statMethod;\n }\n\n this._maxDepth = opts.depth;\n this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);\n this._wantsEverything = type === EVERYTHING_TYPE;\n this._root = sysPath.resolve(root);\n this._isDirent = ('Dirent' in fs) && !opts.alwaysStat;\n this._statsProp = this._isDirent ? 'dirent' : 'stats';\n this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };\n\n // Launch stream with one parent, the root dir.\n this.parents = [this._exploreDir(root, 1)];\n this.reading = false;\n this.parent = undefined;\n }\n\n async _read(batch) {\n if (this.reading) return;\n this.reading = true;\n\n try {\n while (!this.destroyed && batch > 0) {\n const { path, depth, files = [] } = this.parent || {};\n\n if (files.length > 0) {\n const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));\n for (const entry of await Promise.all(slice)) {\n if (this.destroyed) return;\n\n const entryType = await this._getEntryType(entry);\n if (entryType === 'directory' && this._directoryFilter(entry)) {\n if (depth <= this._maxDepth) {\n this.parents.push(this._exploreDir(entry.fullPath, depth + 1));\n }\n\n if (this._wantsDir) {\n this.push(entry);\n batch--;\n }\n } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n if (this._wantsFile) {\n this.push(entry);\n batch--;\n }\n }\n }\n } else {\n const parent = this.parents.pop();\n if (!parent) {\n this.push(null);\n break;\n }\n this.parent = await parent;\n if (this.destroyed) return;\n }\n }\n } catch (error) {\n this.destroy(error);\n } finally {\n this.reading = false;\n }\n }\n\n async _exploreDir(path, depth) {\n let files;\n try {\n files = await readdir(path, this._rdOptions);\n } catch (error) {\n this._onError(error);\n }\n return { files, depth, path };\n }\n\n async _formatEntry(dirent, path) {\n let entry;\n try {\n const basename = this._isDirent ? dirent.name : dirent;\n const fullPath = sysPath.resolve(sysPath.join(path, basename));\n entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename };\n entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);\n } catch (err) {\n this._onError(err);\n }\n return entry;\n }\n\n _onError(err) {\n if (isNormalFlowError(err) && !this.destroyed) {\n this.emit('warn', err);\n } else {\n this.destroy(err);\n }\n }\n\n async _getEntryType(entry) {\n // entry may be undefined, because a warning or an error were emitted\n // and the statsProp is undefined\n const stats = entry && entry[this._statsProp];\n if (!stats) {\n return;\n }\n if (stats.isFile()) {\n return 'file';\n }\n if (stats.isDirectory()) {\n return 'directory';\n }\n if (stats && stats.isSymbolicLink()) {\n const full = entry.fullPath;\n try {\n const entryRealPath = await realpath(full);\n const entryRealPathStats = await lstat(entryRealPath);\n if (entryRealPathStats.isFile()) {\n return 'file';\n }\n if (entryRealPathStats.isDirectory()) {\n const len = entryRealPath.length;\n if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath.sep) {\n const recursiveError = new Error(\n `Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`\n );\n recursiveError.code = RECURSIVE_ERROR_CODE;\n return this._onError(recursiveError);\n }\n return 'directory';\n }\n } catch (error) {\n this._onError(error);\n }\n }\n }\n\n _includeAsFile(entry) {\n const stats = entry && entry[this._statsProp];\n\n return stats && this._wantsEverything && !stats.isDirectory();\n }\n}\n\n/**\n * @typedef {Object} ReaddirpArguments\n * @property {Function=} fileFilter\n * @property {Function=} directoryFilter\n * @property {String=} type\n * @property {Number=} depth\n * @property {String=} root\n * @property {Boolean=} lstat\n * @property {Boolean=} bigint\n */\n\n/**\n * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.\n * @param {String} root Root directory\n * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth\n */\nconst readdirp = (root, options = {}) => {\n let type = options.entryType || options.type;\n if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility\n if (type) options.type = type;\n if (!root) {\n throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');\n } else if (typeof root !== 'string') {\n throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');\n } else if (type && !ALL_TYPES.includes(type)) {\n throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);\n }\n\n options.root = root;\n return new ReaddirpStream(options);\n};\n\nconst readdirpPromise = (root, options = {}) => {\n return new Promise((resolve, reject) => {\n const files = [];\n readdirp(root, options)\n .on('data', entry => files.push(entry))\n .on('end', () => resolve(files))\n .on('error', error => reject(error));\n });\n};\n\nreaddirp.promise = readdirpPromise;\nreaddirp.ReaddirpStream = ReaddirpStream;\nreaddirp.default = readdirp;\n\nmodule.exports = readdirp;\n", "/*!\n * normalize-path <https://github.com/jonschlinkert/normalize-path>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nmodule.exports = function(path, stripTrailing) {\n if (typeof path !== 'string') {\n throw new TypeError('expected path to be a string');\n }\n\n if (path === '\\\\' || path === '/') return '/';\n\n var len = path.length;\n if (len <= 1) return path;\n\n // ensure that win32 namespaces has two leading slashes, so that the path is\n // handled properly by the win32 version of path.parse() after being normalized\n // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces\n var prefix = '';\n if (len > 4 && path[3] === '\\\\') {\n var ch = path[2];\n if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\\\\\') {\n path = path.slice(2);\n prefix = '//';\n }\n }\n\n var segs = path.split(/[/\\\\]+/);\n if (stripTrailing !== false && segs[segs.length - 1] === '') {\n segs.pop();\n }\n return prefix + segs.join('/');\n};\n", "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n\nconst picomatch = require('picomatch');\nconst normalizePath = require('normalize-path');\n\n/**\n * @typedef {(testString: string) => boolean} AnymatchFn\n * @typedef {string|RegExp|AnymatchFn} AnymatchPattern\n * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher\n */\nconst BANG = '!';\nconst DEFAULT_OPTIONS = {returnIndex: false};\nconst arrify = (item) => Array.isArray(item) ? item : [item];\n\n/**\n * @param {AnymatchPattern} matcher\n * @param {object} options\n * @returns {AnymatchFn}\n */\nconst createPattern = (matcher, options) => {\n if (typeof matcher === 'function') {\n return matcher;\n }\n if (typeof matcher === 'string') {\n const glob = picomatch(matcher, options);\n return (string) => matcher === string || glob(string);\n }\n if (matcher instanceof RegExp) {\n return (string) => matcher.test(string);\n }\n return (string) => false;\n};\n\n/**\n * @param {Array<Function>} patterns\n * @param {Array<Function>} negPatterns\n * @param {String|Array} args\n * @param {Boolean} returnIndex\n * @returns {boolean|number}\n */\nconst matchPatterns = (patterns, negPatterns, args, returnIndex) => {\n const isList = Array.isArray(args);\n const _path = isList ? args[0] : args;\n if (!isList && typeof _path !== 'string') {\n throw new TypeError('anymatch: second argument must be a string: got ' +\n Object.prototype.toString.call(_path))\n }\n const path = normalizePath(_path);\n\n for (let index = 0; index < negPatterns.length; index++) {\n const nglob = negPatterns[index];\n if (nglob(path)) {\n return returnIndex ? -1 : false;\n }\n }\n\n const applied = isList && [path].concat(args.slice(1));\n for (let index = 0; index < patterns.length; index++) {\n const pattern = patterns[index];\n if (isList ? pattern(...applied) : pattern(path)) {\n return returnIndex ? index : true;\n }\n }\n\n return returnIndex ? -1 : false;\n};\n\n/**\n * @param {AnymatchMatcher} matchers\n * @param {Array|string} testString\n * @param {object} options\n * @returns {boolean|number|Function}\n */\nconst anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {\n if (matchers == null) {\n throw new TypeError('anymatch: specify first argument');\n }\n const opts = typeof options === 'boolean' ? {returnIndex: options} : options;\n const returnIndex = opts.returnIndex || false;\n\n // Early cache for matchers.\n const mtchers = arrify(matchers);\n const negatedGlobs = mtchers\n .filter(item => typeof item === 'string' && item.charAt(0) === BANG)\n .map(item => item.slice(1))\n .map(item => picomatch(item, opts));\n const patterns = mtchers\n .filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))\n .map(matcher => createPattern(matcher, opts));\n\n if (testString == null) {\n return (testString, ri = false) => {\n const returnIndex = typeof ri === 'boolean' ? ri : false;\n return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n }\n }\n\n return matchPatterns(patterns, negatedGlobs, testString, returnIndex);\n};\n\nanymatch.default = anymatch;\nmodule.exports = anymatch;\n", "/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n", "/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictRegex = /\\\\(.)|(^!|\\*|[\\].+)]\\?|\\[[^\\\\\\]]+\\]|\\{[^\\\\}]+\\}|\\(\\?[:!=][^\\\\)]+\\)|\\([^|]+\\|[^\\\\)]+\\))/;\nvar relaxedRegex = /\\\\(.)|(^!|[*?{}()[\\]]|\\(\\?)/;\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var regex = strictRegex;\n var match;\n\n // optionally relax regex\n if (options && options.strict === false) {\n regex = relaxedRegex;\n }\n\n while ((match = regex.exec(str))) {\n if (match[2]) return true;\n var idx = match.index + match[0].length;\n\n // if an open bracket/brace/paren is escaped,\n // set the index to the next closing character\n var open = match[1];\n var close = open ? chars[open] : null;\n if (open && close) {\n var n = str.indexOf(close, idx);\n if (n !== -1) {\n idx = n + 1;\n }\n }\n\n str = str.slice(idx);\n }\n return false;\n};\n", "'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n", "'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n let node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n let ele = arr[i];\n Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);\n }\n return result;\n };\n flat(args);\n return result;\n};\n", "'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n let stringify = (node, parent = {}) => {\n let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n", "/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n", "/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n", "/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n let walk = (node, parent = {}) => {\n let invalidBlock = utils.isInvalidBrace(parent);\n let invalidNode = node.invalid === true && options.escapeInvalid === true;\n let invalid = invalidBlock === true || invalidNode === true;\n let prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n if (node.isClose === true) {\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? (prefix + node.value) : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? (prefix + node.value) : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n let range = fill(...args, { ...options, wrap: false, toRegex: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (let child of node.nodes) {\n output += walk(child, node);\n }\n }\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n", "'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n let result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (let item of queue) {\n if (Array.isArray(item)) {\n for (let value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;\n\n let walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n let args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n let enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n let child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n", "'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n", "'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n let opts = options || {};\n let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n let ast = { type: 'root', input, nodes: [] };\n let stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n let length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n let memo = {};\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let closed = true;\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n let open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n let brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n let type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n let open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n let siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n let before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n let parent = stack[stack.length - 1];\n let index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n", "'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (let pattern of input) {\n let result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n", "module.exports = require('./binary-extensions.json');\n", "'use strict';\nconst path = require('path');\nconst binaryExtensions = require('binary-extensions');\n\nconst extensions = new Set(binaryExtensions);\n\nmodule.exports = filePath => extensions.has(path.extname(filePath).slice(1).toLowerCase());\n", "'use strict';\n\nconst {sep} = require('path');\nconst {platform} = process;\nconst os = require('os');\n\nexports.EV_ALL = 'all';\nexports.EV_READY = 'ready';\nexports.EV_ADD = 'add';\nexports.EV_CHANGE = 'change';\nexports.EV_ADD_DIR = 'addDir';\nexports.EV_UNLINK = 'unlink';\nexports.EV_UNLINK_DIR = 'unlinkDir';\nexports.EV_RAW = 'raw';\nexports.EV_ERROR = 'error';\n\nexports.STR_DATA = 'data';\nexports.STR_END = 'end';\nexports.STR_CLOSE = 'close';\n\nexports.FSEVENT_CREATED = 'created';\nexports.FSEVENT_MODIFIED = 'modified';\nexports.FSEVENT_DELETED = 'deleted';\nexports.FSEVENT_MOVED = 'moved';\nexports.FSEVENT_CLONED = 'cloned';\nexports.FSEVENT_UNKNOWN = 'unknown';\nexports.FSEVENT_TYPE_FILE = 'file';\nexports.FSEVENT_TYPE_DIRECTORY = 'directory';\nexports.FSEVENT_TYPE_SYMLINK = 'symlink';\n\nexports.KEY_LISTENERS = 'listeners';\nexports.KEY_ERR = 'errHandlers';\nexports.KEY_RAW = 'rawEmitters';\nexports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];\n\nexports.DOT_SLASH = `.${sep}`;\n\nexports.BACK_SLASH_RE = /\\\\/g;\nexports.DOUBLE_SLASH_RE = /\\/\\//;\nexports.SLASH_OR_BACK_SLASH_RE = /[/\\\\]/;\nexports.DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nexports.REPLACER_RE = /^\\.[/\\\\]/;\n\nexports.SLASH = '/';\nexports.SLASH_SLASH = '//';\nexports.BRACE_START = '{';\nexports.BANG = '!';\nexports.ONE_DOT = '.';\nexports.TWO_DOTS = '..';\nexports.STAR = '*';\nexports.GLOBSTAR = '**';\nexports.ROOT_GLOBSTAR = '/**/*';\nexports.SLASH_GLOBSTAR = '/**';\nexports.DIR_SUFFIX = 'Dir';\nexports.ANYMATCH_OPTS = {dot: true};\nexports.STRING_TYPE = 'string';\nexports.FUNCTION_TYPE = 'function';\nexports.EMPTY_STR = '';\nexports.EMPTY_FN = () => {};\nexports.IDENTITY_FN = val => val;\n\nexports.isWindows = platform === 'win32';\nexports.isMacos = platform === 'darwin';\nexports.isLinux = platform === 'linux';\nexports.isIBMi = os.type() === 'OS400';\n", "'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst isBinaryPath = require('is-binary-path');\nconst {\n isWindows,\n isLinux,\n EMPTY_FN,\n EMPTY_STR,\n KEY_LISTENERS,\n KEY_ERR,\n KEY_RAW,\n HANDLER_KEYS,\n EV_CHANGE,\n EV_ADD,\n EV_ADD_DIR,\n EV_ERROR,\n STR_DATA,\n STR_END,\n BRACE_START,\n STAR\n} = require('./constants');\n\nconst THROTTLE_MODE_WATCH = 'watch';\n\nconst open = promisify(fs.open);\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst close = promisify(fs.close);\nconst fsrealpath = promisify(fs.realpath);\n\nconst statMethods = { lstat, stat };\n\n// TODO: emit errors properly. Example: EMFILE on Macos.\nconst foreach = (val, fn) => {\n if (val instanceof Set) {\n val.forEach(fn);\n } else {\n fn(val);\n }\n};\n\nconst addAndConvert = (main, prop, item) => {\n let container = main[prop];\n if (!(container instanceof Set)) {\n main[prop] = container = new Set([container]);\n }\n container.add(item);\n};\n\nconst clearItem = cont => key => {\n const set = cont[key];\n if (set instanceof Set) {\n set.clear();\n } else {\n delete cont[key];\n }\n};\n\nconst delFromSet = (main, prop, item) => {\n const container = main[prop];\n if (container instanceof Set) {\n container.delete(item);\n } else if (container === item) {\n delete main[prop];\n }\n};\n\nconst isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;\n\n/**\n * @typedef {String} Path\n */\n\n// fs_watch helpers\n\n// object to hold per-process fs_watch instances\n// (may be shared across chokidar FSWatcher instances)\n\n/**\n * @typedef {Object} FsWatchContainer\n * @property {Set} listeners\n * @property {Set} errHandlers\n * @property {Set} rawEmitters\n * @property {fs.FSWatcher=} watcher\n * @property {Boolean=} watcherUnusable\n */\n\n/**\n * @type {Map<String,FsWatchContainer>}\n */\nconst FsWatchInstances = new Map();\n\n/**\n * Instantiates the fs_watch interface\n * @param {String} path to be watched\n * @param {Object} options to be passed to fs_watch\n * @param {Function} listener main event handler\n * @param {Function} errHandler emits info about errors\n * @param {Function} emitRaw emits raw event data\n * @returns {fs.FSWatcher} new fsevents instance\n */\nfunction createFsWatchInstance(path, options, listener, errHandler, emitRaw) {\n const handleEvent = (rawEvent, evPath) => {\n listener(path);\n emitRaw(rawEvent, evPath, {watchedPath: path});\n\n // emit based on events occurring for files from a directory's watcher in\n // case the file's watcher misses it (and rely on throttling to de-dupe)\n if (evPath && path !== evPath) {\n fsWatchBroadcast(\n sysPath.resolve(path, evPath), KEY_LISTENERS, sysPath.join(path, evPath)\n );\n }\n };\n try {\n return fs.watch(path, options, handleEvent);\n } catch (error) {\n errHandler(error);\n }\n}\n\n/**\n * Helper for passing fs_watch event data to a collection of listeners\n * @param {Path} fullPath absolute path bound to fs_watch instance\n * @param {String} type listener type\n * @param {*=} val1 arguments to be passed to listeners\n * @param {*=} val2\n * @param {*=} val3\n */\nconst fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {\n const cont = FsWatchInstances.get(fullPath);\n if (!cont) return;\n foreach(cont[type], (listener) => {\n listener(val1, val2, val3);\n });\n};\n\n/**\n * Instantiates the fs_watch interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path\n * @param {String} fullPath absolute path\n * @param {Object} options to be passed to fs_watch\n * @param {Object} handlers container for event listener functions\n */\nconst setFsWatchListener = (path, fullPath, options, handlers) => {\n const {listener, errHandler, rawEmitter} = handlers;\n let cont = FsWatchInstances.get(fullPath);\n\n /** @type {fs.FSWatcher=} */\n let watcher;\n if (!options.persistent) {\n watcher = createFsWatchInstance(\n path, options, listener, errHandler, rawEmitter\n );\n return watcher.close.bind(watcher);\n }\n if (cont) {\n addAndConvert(cont, KEY_LISTENERS, listener);\n addAndConvert(cont, KEY_ERR, errHandler);\n addAndConvert(cont, KEY_RAW, rawEmitter);\n } else {\n watcher = createFsWatchInstance(\n path,\n options,\n fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),\n errHandler, // no need to use broadcast here\n fsWatchBroadcast.bind(null, fullPath, KEY_RAW)\n );\n if (!watcher) return;\n watcher.on(EV_ERROR, async (error) => {\n const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);\n cont.watcherUnusable = true; // documented since Node 10.4.1\n // Workaround for https://github.com/joyent/node/issues/4337\n if (isWindows && error.code === 'EPERM') {\n try {\n const fd = await open(path, 'r');\n await close(fd);\n broadcastErr(error);\n } catch (err) {}\n } else {\n broadcastErr(error);\n }\n });\n cont = {\n listeners: listener,\n errHandlers: errHandler,\n rawEmitters: rawEmitter,\n watcher\n };\n FsWatchInstances.set(fullPath, cont);\n }\n // const index = cont.listeners.indexOf(listener);\n\n // removes this instance's listeners and closes the underlying fs_watch\n // instance if there are no more listeners left\n return () => {\n delFromSet(cont, KEY_LISTENERS, listener);\n delFromSet(cont, KEY_ERR, errHandler);\n delFromSet(cont, KEY_RAW, rawEmitter);\n if (isEmptySet(cont.listeners)) {\n // Check to protect against issue gh-730.\n // if (cont.watcherUnusable) {\n cont.watcher.close();\n // }\n FsWatchInstances.delete(fullPath);\n HANDLER_KEYS.forEach(clearItem(cont));\n cont.watcher = undefined;\n Object.freeze(cont);\n }\n };\n};\n\n// fs_watchFile helpers\n\n// object to hold per-process fs_watchFile instances\n// (may be shared across chokidar FSWatcher instances)\nconst FsWatchFileInstances = new Map();\n\n/**\n * Instantiates the fs_watchFile interface or binds listeners\n * to an existing one covering the same file system entry\n * @param {String} path to be watched\n * @param {String} fullPath absolute path\n * @param {Object} options options to be passed to fs_watchFile\n * @param {Object} handlers container for event listener functions\n * @returns {Function} closer\n */\nconst setFsWatchFileListener = (path, fullPath, options, handlers) => {\n const {listener, rawEmitter} = handlers;\n let cont = FsWatchFileInstances.get(fullPath);\n\n /* eslint-disable no-unused-vars, prefer-destructuring */\n let listeners = new Set();\n let rawEmitters = new Set();\n\n const copts = cont && cont.options;\n if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {\n // \"Upgrade\" the watcher to persistence or a quicker interval.\n // This creates some unlikely edge case issues if the user mixes\n // settings in a very weird way, but solving for those cases\n // doesn't seem worthwhile for the added complexity.\n listeners = cont.listeners;\n rawEmitters = cont.rawEmitters;\n fs.unwatchFile(fullPath);\n cont = undefined;\n }\n\n /* eslint-enable no-unused-vars, prefer-destructuring */\n\n if (cont) {\n addAndConvert(cont, KEY_LISTENERS, listener);\n addAndConvert(cont, KEY_RAW, rawEmitter);\n } else {\n // TODO\n // listeners.add(listener);\n // rawEmitters.add(rawEmitter);\n cont = {\n listeners: listener,\n rawEmitters: rawEmitter,\n options,\n watcher: fs.watchFile(fullPath, options, (curr, prev) => {\n foreach(cont.rawEmitters, (rawEmitter) => {\n rawEmitter(EV_CHANGE, fullPath, {curr, prev});\n });\n const currmtime = curr.mtimeMs;\n if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {\n foreach(cont.listeners, (listener) => listener(path, curr));\n }\n })\n };\n FsWatchFileInstances.set(fullPath, cont);\n }\n // const index = cont.listeners.indexOf(listener);\n\n // Removes this instance's listeners and closes the underlying fs_watchFile\n // instance if there are no more listeners left.\n return () => {\n delFromSet(cont, KEY_LISTENERS, listener);\n delFromSet(cont, KEY_RAW, rawEmitter);\n if (isEmptySet(cont.listeners)) {\n FsWatchFileInstances.delete(fullPath);\n fs.unwatchFile(fullPath);\n cont.options = cont.watcher = undefined;\n Object.freeze(cont);\n }\n };\n};\n\n/**\n * @mixin\n */\nclass NodeFsHandler {\n\n/**\n * @param {import(\"../index\").FSWatcher} fsW\n */\nconstructor(fsW) {\n this.fsw = fsW;\n this._boundHandleError = (error) => fsW._handleError(error);\n}\n\n/**\n * Watch file for changes with fs_watchFile or fs_watch.\n * @param {String} path to file or dir\n * @param {Function} listener on fs change\n * @returns {Function} closer for the watcher instance\n */\n_watchWithNodeFs(path, listener) {\n const opts = this.fsw.options;\n const directory = sysPath.dirname(path);\n const basename = sysPath.basename(path);\n const parent = this.fsw._getWatchedDir(directory);\n parent.add(basename);\n const absolutePath = sysPath.resolve(path);\n const options = {persistent: opts.persistent};\n if (!listener) listener = EMPTY_FN;\n\n let closer;\n if (opts.usePolling) {\n options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?\n opts.binaryInterval : opts.interval;\n closer = setFsWatchFileListener(path, absolutePath, options, {\n listener,\n rawEmitter: this.fsw._emitRaw\n });\n } else {\n closer = setFsWatchListener(path, absolutePath, options, {\n listener,\n errHandler: this._boundHandleError,\n rawEmitter: this.fsw._emitRaw\n });\n }\n return closer;\n}\n\n/**\n * Watch a file and emit add event if warranted.\n * @param {Path} file Path\n * @param {fs.Stats} stats result of fs_stat\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @returns {Function} closer for the watcher instance\n */\n_handleFile(file, stats, initialAdd) {\n if (this.fsw.closed) {\n return;\n }\n const dirname = sysPath.dirname(file);\n const basename = sysPath.basename(file);\n const parent = this.fsw._getWatchedDir(dirname);\n // stats is always present\n let prevStats = stats;\n\n // if the file is already being watched, do nothing\n if (parent.has(basename)) return;\n\n const listener = async (path, newStats) => {\n if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;\n if (!newStats || newStats.mtimeMs === 0) {\n try {\n const newStats = await stat(file);\n if (this.fsw.closed) return;\n // Check that change event was not fired because of changed only accessTime.\n const at = newStats.atimeMs;\n const mt = newStats.mtimeMs;\n if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n this.fsw._emit(EV_CHANGE, file, newStats);\n }\n if (isLinux && prevStats.ino !== newStats.ino) {\n this.fsw._closeFile(path)\n prevStats = newStats;\n this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));\n } else {\n prevStats = newStats;\n }\n } catch (error) {\n // Fix issues where mtime is null but file is still present\n this.fsw._remove(dirname, basename);\n }\n // add is about to be emitted if file not already tracked in parent\n } else if (parent.has(basename)) {\n // Check that change event was not fired because of changed only accessTime.\n const at = newStats.atimeMs;\n const mt = newStats.mtimeMs;\n if (!at || at <= mt || mt !== prevStats.mtimeMs) {\n this.fsw._emit(EV_CHANGE, file, newStats);\n }\n prevStats = newStats;\n }\n }\n // kick off the watcher\n const closer = this._watchWithNodeFs(file, listener);\n\n // emit an add event if we're supposed to\n if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {\n if (!this.fsw._throttle(EV_ADD, file, 0)) return;\n this.fsw._emit(EV_ADD, file, stats);\n }\n\n return closer;\n}\n\n/**\n * Handle symlinks encountered while reading a dir.\n * @param {Object} entry returned by readdirp\n * @param {String} directory path of dir being read\n * @param {String} path of this item\n * @param {String} item basename of this item\n * @returns {Promise<Boolean>} true if no more processing is needed for this entry.\n */\nasync _handleSymlink(entry, directory, path, item) {\n if (this.fsw.closed) {\n return;\n }\n const full = entry.fullPath;\n const dir = this.fsw._getWatchedDir(directory);\n\n if (!this.fsw.options.followSymlinks) {\n // watch symlink directly (don't follow) and detect changes\n this.fsw._incrReadyCount();\n const linkPath = await fsrealpath(path);\n if (this.fsw.closed) return;\n if (dir.has(item)) {\n if (this.fsw._symlinkPaths.get(full) !== linkPath) {\n this.fsw._symlinkPaths.set(full, linkPath);\n this.fsw._emit(EV_CHANGE, path, entry.stats);\n }\n } else {\n dir.add(item);\n this.fsw._symlinkPaths.set(full, linkPath);\n this.fsw._emit(EV_ADD, path, entry.stats);\n }\n this.fsw._emitReady();\n return true;\n }\n\n // don't follow the same symlink more than once\n if (this.fsw._symlinkPaths.has(full)) {\n return true;\n }\n\n this.fsw._symlinkPaths.set(full, true);\n}\n\n_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {\n // Normalize the directory name on Windows\n directory = sysPath.join(directory, EMPTY_STR);\n\n if (!wh.hasGlob) {\n throttler = this.fsw._throttle('readdir', directory, 1000);\n if (!throttler) return;\n }\n\n const previous = this.fsw._getWatchedDir(wh.path);\n const current = new Set();\n\n let stream = this.fsw._readdirp(directory, {\n fileFilter: entry => wh.filterPath(entry),\n directoryFilter: entry => wh.filterDir(entry),\n depth: 0\n }).on(STR_DATA, async (entry) => {\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n const item = entry.path;\n let path = sysPath.join(directory, item);\n current.add(item);\n\n if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {\n return;\n }\n\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n // Files that present in current directory snapshot\n // but absent in previous are added to watch list and\n // emit `add` event.\n if (item === target || !target && !previous.has(item)) {\n this.fsw._incrReadyCount();\n\n // ensure relativeness of path is preserved in case of watcher reuse\n path = sysPath.join(dir, sysPath.relative(dir, path));\n\n this._addToNodeFs(path, initialAdd, wh, depth + 1);\n }\n }).on(EV_ERROR, this._boundHandleError);\n\n return new Promise(resolve =>\n stream.once(STR_END, () => {\n if (this.fsw.closed) {\n stream = undefined;\n return;\n }\n const wasThrottled = throttler ? throttler.clear() : false;\n\n resolve();\n\n // Files that absent in current directory snapshot\n // but present in previous emit `remove` event\n // and are removed from @watched[directory].\n previous.getChildren().filter((item) => {\n return item !== directory &&\n !current.has(item) &&\n // in case of intersecting globs;\n // a path may have been filtered out of this readdir, but\n // shouldn't be removed because it matches a different glob\n (!wh.hasGlob || wh.filterPath({\n fullPath: sysPath.resolve(directory, item)\n }));\n }).forEach((item) => {\n this.fsw._remove(directory, item);\n });\n\n stream = undefined;\n\n // one more time for any missed in case changes came in extremely quickly\n if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);\n })\n );\n}\n\n/**\n * Read directory to add / remove files from `@watched` list and re-read it on change.\n * @param {String} dir fs path\n * @param {fs.Stats} stats\n * @param {Boolean} initialAdd\n * @param {Number} depth relative to user-supplied path\n * @param {String} target child path targeted for watch\n * @param {Object} wh Common watch helpers for this path\n * @param {String} realpath\n * @returns {Promise<Function>} closer for the watcher instance.\n */\nasync _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {\n const parentDir = this.fsw._getWatchedDir(sysPath.dirname(dir));\n const tracked = parentDir.has(sysPath.basename(dir));\n if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {\n if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);\n }\n\n // ensure dir is tracked (harmless if redundant)\n parentDir.add(sysPath.basename(dir));\n this.fsw._getWatchedDir(dir);\n let throttler;\n let closer;\n\n const oDepth = this.fsw.options.depth;\n if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {\n if (!target) {\n await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);\n if (this.fsw.closed) return;\n }\n\n closer = this._watchWithNodeFs(dir, (dirPath, stats) => {\n // if current directory is removed, do nothing\n if (stats && stats.mtimeMs === 0) return;\n\n this._handleRead(dirPath, false, wh, target, dir, depth, throttler);\n });\n }\n return closer;\n}\n\n/**\n * Handle added file, directory, or glob pattern.\n * Delegates call to _handleFile / _handleDir after checks.\n * @param {String} path to file or ir\n * @param {Boolean} initialAdd was the file added at watch instantiation?\n * @param {Object} priorWh depth relative to user-supplied path\n * @param {Number} depth Child path actually targeted for watch\n * @param {String=} target Child path actually targeted for watch\n * @returns {Promise}\n */\nasync _addToNodeFs(path, initialAdd, priorWh, depth, target) {\n const ready = this.fsw._emitReady;\n if (this.fsw._isIgnored(path) || this.fsw.closed) {\n ready();\n return false;\n }\n\n const wh = this.fsw._getWatchHelpers(path, depth);\n if (!wh.hasGlob && priorWh) {\n wh.hasGlob = priorWh.hasGlob;\n wh.globFilter = priorWh.globFilter;\n wh.filterPath = entry => priorWh.filterPath(entry);\n wh.filterDir = entry => priorWh.filterDir(entry);\n }\n\n // evaluate what is at the path we're being asked to watch\n try {\n const stats = await statMethods[wh.statMethod](wh.watchPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(wh.watchPath, stats)) {\n ready();\n return false;\n }\n\n const follow = this.fsw.options.followSymlinks && !path.includes(STAR) && !path.includes(BRACE_START);\n let closer;\n if (stats.isDirectory()) {\n const absPath = sysPath.resolve(path);\n const targetPath = follow ? await fsrealpath(path) : path;\n if (this.fsw.closed) return;\n closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);\n if (this.fsw.closed) return;\n // preserve this symlink's target path\n if (absPath !== targetPath && targetPath !== undefined) {\n this.fsw._symlinkPaths.set(absPath, targetPath);\n }\n } else if (stats.isSymbolicLink()) {\n const targetPath = follow ? await fsrealpath(path) : path;\n if (this.fsw.closed) return;\n const parent = sysPath.dirname(wh.watchPath);\n this.fsw._getWatchedDir(parent).add(wh.watchPath);\n this.fsw._emit(EV_ADD, wh.watchPath, stats);\n closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);\n if (this.fsw.closed) return;\n\n // preserve this symlink's target path\n if (targetPath !== undefined) {\n this.fsw._symlinkPaths.set(sysPath.resolve(path), targetPath);\n }\n } else {\n closer = this._handleFile(wh.watchPath, stats, initialAdd);\n }\n ready();\n\n this.fsw._addPathCloser(path, closer);\n return false;\n\n } catch (error) {\n if (this.fsw._handleError(error)) {\n ready();\n return path;\n }\n }\n}\n\n}\n\nmodule.exports = NodeFsHandler;\n", "'use strict';\n\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\n\nlet fsevents;\ntry {\n fsevents = require('fsevents');\n} catch (error) {\n if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);\n}\n\nif (fsevents) {\n // TODO: real check\n const mtch = process.version.match(/v(\\d+)\\.(\\d+)/);\n if (mtch && mtch[1] && mtch[2]) {\n const maj = Number.parseInt(mtch[1], 10);\n const min = Number.parseInt(mtch[2], 10);\n if (maj === 8 && min < 16) {\n fsevents = undefined;\n }\n }\n}\n\nconst {\n EV_ADD,\n EV_CHANGE,\n EV_ADD_DIR,\n EV_UNLINK,\n EV_ERROR,\n STR_DATA,\n STR_END,\n FSEVENT_CREATED,\n FSEVENT_MODIFIED,\n FSEVENT_DELETED,\n FSEVENT_MOVED,\n // FSEVENT_CLONED,\n FSEVENT_UNKNOWN,\n FSEVENT_TYPE_FILE,\n FSEVENT_TYPE_DIRECTORY,\n FSEVENT_TYPE_SYMLINK,\n\n ROOT_GLOBSTAR,\n DIR_SUFFIX,\n DOT_SLASH,\n FUNCTION_TYPE,\n EMPTY_FN,\n IDENTITY_FN\n} = require('./constants');\n\nconst Depth = (value) => isNaN(value) ? {} : {depth: value};\n\nconst stat = promisify(fs.stat);\nconst lstat = promisify(fs.lstat);\nconst realpath = promisify(fs.realpath);\n\nconst statMethods = { stat, lstat };\n\n/**\n * @typedef {String} Path\n */\n\n/**\n * @typedef {Object} FsEventsWatchContainer\n * @property {Set<Function>} listeners\n * @property {Function} rawEmitter\n * @property {{stop: Function}} watcher\n */\n\n// fsevents instance helper functions\n/**\n * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)\n * @type {Map<Path,FsEventsWatchContainer>}\n */\nconst FSEventsWatchers = new Map();\n\n// Threshold of duplicate path prefixes at which to start\n// consolidating going forward\nconst consolidateThreshhold = 10;\n\nconst wrongEventFlags = new Set([\n 69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912\n]);\n\n/**\n * Instantiates the fsevents interface\n * @param {Path} path path to be watched\n * @param {Function} callback called when fsevents is bound and ready\n * @returns {{stop: Function}} new fsevents instance\n */\nconst createFSEventsInstance = (path, callback) => {\n const stop = fsevents.watch(path, callback);\n return {stop};\n};\n\n/**\n * Instantiates the fsevents interface or binds listeners to an existing one covering\n * the same file tree.\n * @param {Path} path - to be watched\n * @param {Path} realPath - real path for symlinks\n * @param {Function} listener - called when fsevents emits events\n * @param {Function} rawEmitter - passes data to listeners of the 'raw' event\n * @returns {Function} closer\n */\nfunction setFSEventsListener(path, realPath, listener, rawEmitter) {\n let watchPath = sysPath.extname(realPath) ? sysPath.dirname(realPath) : realPath;\n\n const parentPath = sysPath.dirname(watchPath);\n let cont = FSEventsWatchers.get(watchPath);\n\n // If we've accumulated a substantial number of paths that\n // could have been consolidated by watching one directory\n // above the current one, create a watcher on the parent\n // path instead, so that we do consolidate going forward.\n if (couldConsolidate(parentPath)) {\n watchPath = parentPath;\n }\n\n const resolvedPath = sysPath.resolve(path);\n const hasSymlink = resolvedPath !== realPath;\n\n const filteredListener = (fullPath, flags, info) => {\n if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);\n if (\n fullPath === resolvedPath ||\n !fullPath.indexOf(resolvedPath + sysPath.sep)\n ) listener(fullPath, flags, info);\n };\n\n // check if there is already a watcher on a parent path\n // modifies `watchPath` to the parent path when it finds a match\n let watchedParent = false;\n for (const watchedPath of FSEventsWatchers.keys()) {\n if (realPath.indexOf(sysPath.resolve(watchedPath) + sysPath.sep) === 0) {\n watchPath = watchedPath;\n cont = FSEventsWatchers.get(watchPath);\n watchedParent = true;\n break;\n }\n }\n\n if (cont || watchedParent) {\n cont.listeners.add(filteredListener);\n } else {\n cont = {\n listeners: new Set([filteredListener]),\n rawEmitter,\n watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {\n if (!cont.listeners.size) return;\n const info = fsevents.getInfo(fullPath, flags);\n cont.listeners.forEach(list => {\n list(fullPath, flags, info);\n });\n\n cont.rawEmitter(info.event, fullPath, info);\n })\n };\n FSEventsWatchers.set(watchPath, cont);\n }\n\n // removes this instance's listeners and closes the underlying fsevents\n // instance if there are no more listeners left\n return () => {\n const lst = cont.listeners;\n\n lst.delete(filteredListener);\n if (!lst.size) {\n FSEventsWatchers.delete(watchPath);\n if (cont.watcher) return cont.watcher.stop().then(() => {\n cont.rawEmitter = cont.watcher = undefined;\n Object.freeze(cont);\n });\n }\n };\n}\n\n// Decide whether or not we should start a new higher-level\n// parent watcher\nconst couldConsolidate = (path) => {\n let count = 0;\n for (const watchPath of FSEventsWatchers.keys()) {\n if (watchPath.indexOf(path) === 0) {\n count++;\n if (count >= consolidateThreshhold) {\n return true;\n }\n }\n }\n\n return false;\n};\n\n// returns boolean indicating whether fsevents can be used\nconst canUse = () => fsevents && FSEventsWatchers.size < 128;\n\n// determines subdirectory traversal levels from root to path\nconst calcDepth = (path, root) => {\n let i = 0;\n while (!path.indexOf(root) && (path = sysPath.dirname(path)) !== root) i++;\n return i;\n};\n\n// returns boolean indicating whether the fsevents' event info has the same type\n// as the one returned by fs.stat\nconst sameTypes = (info, stats) => (\n info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||\n info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||\n info.type === FSEVENT_TYPE_FILE && stats.isFile()\n)\n\n/**\n * @mixin\n */\nclass FsEventsHandler {\n\n/**\n * @param {import('../index').FSWatcher} fsw\n */\nconstructor(fsw) {\n this.fsw = fsw;\n}\ncheckIgnored(path, stats) {\n const ipaths = this.fsw._ignoredPaths;\n if (this.fsw._isIgnored(path, stats)) {\n ipaths.add(path);\n if (stats && stats.isDirectory()) {\n ipaths.add(path + ROOT_GLOBSTAR);\n }\n return true;\n }\n\n ipaths.delete(path);\n ipaths.delete(path + ROOT_GLOBSTAR);\n}\n\naddOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n const event = watchedDir.has(item) ? EV_CHANGE : EV_ADD;\n this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n}\n\nasync checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n try {\n const stats = await stat(path)\n if (this.fsw.closed) return;\n if (sameTypes(info, stats)) {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } catch (error) {\n if (error.code === 'EACCES') {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n }\n}\n\nhandleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {\n if (this.fsw.closed || this.checkIgnored(path)) return;\n\n if (event === EV_UNLINK) {\n const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY\n // suppress unlink events on never before seen files\n if (isDirectory || watchedDir.has(item)) {\n this.fsw._remove(parent, item, isDirectory);\n }\n } else {\n if (event === EV_ADD) {\n // track new directories\n if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);\n\n if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {\n // push symlinks back to the top of the stack to get handled\n const curDepth = opts.depth === undefined ?\n undefined : calcDepth(fullPath, realPath) + 1;\n return this._addToFsEvents(path, false, true, curDepth);\n }\n\n // track new paths\n // (other than symlinks being followed, which will be tracked soon)\n this.fsw._getWatchedDir(parent).add(item);\n }\n /**\n * @type {'add'|'addDir'|'unlink'|'unlinkDir'}\n */\n const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;\n this.fsw._emit(eventName, path);\n if (eventName === EV_ADD_DIR) this._addToFsEvents(path, false, true);\n }\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} watchPath - file/dir path to be watched with fsevents\n * @param {String} realPath - real path (in case of symlinks)\n * @param {Function} transform - path transformer\n * @param {Function} globFilter - path filter in case a glob pattern was provided\n * @returns {Function} closer for the watcher instance\n*/\n_watchWithFsEvents(watchPath, realPath, transform, globFilter) {\n if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;\n const opts = this.fsw.options;\n const watchCallback = async (fullPath, flags, info) => {\n if (this.fsw.closed) return;\n if (\n opts.depth !== undefined &&\n calcDepth(fullPath, realPath) > opts.depth\n ) return;\n const path = transform(sysPath.join(\n watchPath, sysPath.relative(watchPath, fullPath)\n ));\n if (globFilter && !globFilter(path)) return;\n // ensure directories are tracked\n const parent = sysPath.dirname(path);\n const item = sysPath.basename(path);\n const watchedDir = this.fsw._getWatchedDir(\n info.type === FSEVENT_TYPE_DIRECTORY ? path : parent\n );\n\n // correct for wrong events emitted\n if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {\n if (typeof opts.ignored === FUNCTION_TYPE) {\n let stats;\n try {\n stats = await stat(path);\n } catch (error) {}\n if (this.fsw.closed) return;\n if (this.checkIgnored(path, stats)) return;\n if (sameTypes(info, stats)) {\n this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n } else {\n this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } else {\n this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n } else {\n switch (info.event) {\n case FSEVENT_CREATED:\n case FSEVENT_MODIFIED:\n return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n case FSEVENT_DELETED:\n case FSEVENT_MOVED:\n return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);\n }\n }\n };\n\n const closer = setFSEventsListener(\n watchPath,\n realPath,\n watchCallback,\n this.fsw._emitRaw\n );\n\n this.fsw._emitReady();\n return closer;\n}\n\n/**\n * Handle symlinks encountered during directory scan\n * @param {String} linkPath path to symlink\n * @param {String} fullPath absolute path to the symlink\n * @param {Function} transform pre-existing path transformer\n * @param {Number} curDepth level of subdirectories traversed to where symlink is\n * @returns {Promise<void>}\n */\nasync _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {\n // don't follow the same symlink more than once\n if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;\n\n this.fsw._symlinkPaths.set(fullPath, true);\n this.fsw._incrReadyCount();\n\n try {\n const linkTarget = await realpath(linkPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(linkTarget)) {\n return this.fsw._emitReady();\n }\n\n this.fsw._incrReadyCount();\n\n // add the linkTarget for watching with a wrapper for transform\n // that causes emitted paths to incorporate the link's path\n this._addToFsEvents(linkTarget || linkPath, (path) => {\n let aliasedPath = linkPath;\n if (linkTarget && linkTarget !== DOT_SLASH) {\n aliasedPath = path.replace(linkTarget, linkPath);\n } else if (path !== DOT_SLASH) {\n aliasedPath = sysPath.join(linkPath, path);\n }\n return transform(aliasedPath);\n }, false, curDepth);\n } catch(error) {\n if (this.fsw._handleError(error)) {\n return this.fsw._emitReady();\n }\n }\n}\n\n/**\n *\n * @param {Path} newPath\n * @param {fs.Stats} stats\n */\nemitAdd(newPath, stats, processPath, opts, forceAdd) {\n const pp = processPath(newPath);\n const isDir = stats.isDirectory();\n const dirObj = this.fsw._getWatchedDir(sysPath.dirname(pp));\n const base = sysPath.basename(pp);\n\n // ensure empty dirs get tracked\n if (isDir) this.fsw._getWatchedDir(pp);\n if (dirObj.has(base)) return;\n dirObj.add(base);\n\n if (!opts.ignoreInitial || forceAdd === true) {\n this.fsw._emit(isDir ? EV_ADD_DIR : EV_ADD, pp, stats);\n }\n}\n\ninitWatch(realPath, path, wh, processPath) {\n if (this.fsw.closed) return;\n const closer = this._watchWithFsEvents(\n wh.watchPath,\n sysPath.resolve(realPath || wh.watchPath),\n processPath,\n wh.globFilter\n );\n this.fsw._addPathCloser(path, closer);\n}\n\n/**\n * Handle added path with fsevents\n * @param {String} path file/dir path or glob pattern\n * @param {Function|Boolean=} transform converts working path to what the user expects\n * @param {Boolean=} forceAdd ensure add is emitted\n * @param {Number=} priorDepth Level of subdirectories already traversed.\n * @returns {Promise<void>}\n */\nasync _addToFsEvents(path, transform, forceAdd, priorDepth) {\n if (this.fsw.closed) {\n return;\n }\n const opts = this.fsw.options;\n const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;\n\n const wh = this.fsw._getWatchHelpers(path);\n\n // evaluate what is at the path we're being asked to watch\n try {\n const stats = await statMethods[wh.statMethod](wh.watchPath);\n if (this.fsw.closed) return;\n if (this.fsw._isIgnored(wh.watchPath, stats)) {\n throw null;\n }\n if (stats.isDirectory()) {\n // emit addDir unless this is a glob parent\n if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);\n\n // don't recurse further if it would exceed depth setting\n if (priorDepth && priorDepth > opts.depth) return;\n\n // scan the contents of the dir\n this.fsw._readdirp(wh.watchPath, {\n fileFilter: entry => wh.filterPath(entry),\n directoryFilter: entry => wh.filterDir(entry),\n ...Depth(opts.depth - (priorDepth || 0))\n }).on(STR_DATA, (entry) => {\n // need to check filterPath on dirs b/c filterDir is less restrictive\n if (this.fsw.closed) {\n return;\n }\n if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;\n\n const joinedPath = sysPath.join(wh.watchPath, entry.path);\n const {fullPath} = entry;\n\n if (wh.followSymlinks && entry.stats.isSymbolicLink()) {\n // preserve the current depth here since it can't be derived from\n // real paths past the symlink\n const curDepth = opts.depth === undefined ?\n undefined : calcDepth(joinedPath, sysPath.resolve(wh.watchPath)) + 1;\n\n this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);\n } else {\n this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);\n }\n }).on(EV_ERROR, EMPTY_FN).on(STR_END, () => {\n this.fsw._emitReady();\n });\n } else {\n this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);\n this.fsw._emitReady();\n }\n } catch (error) {\n if (!error || this.fsw._handleError(error)) {\n // TODO: Strange thing: \"should not choke on an ignored watch path\" will be failed without 2 ready calls -__-\n this.fsw._emitReady();\n this.fsw._emitReady();\n }\n }\n\n if (opts.persistent && forceAdd !== true) {\n if (typeof transform === FUNCTION_TYPE) {\n // realpath has already been resolved\n this.initWatch(undefined, path, wh, processPath);\n } else {\n let realPath;\n try {\n realPath = await realpath(wh.watchPath);\n } catch (e) {}\n this.initWatch(realPath, path, wh, processPath);\n }\n }\n}\n\n}\n\nmodule.exports = FsEventsHandler;\nmodule.exports.canUse = canUse;\n", "'use strict';\n\nconst { EventEmitter } = require('events');\nconst fs = require('fs');\nconst sysPath = require('path');\nconst { promisify } = require('util');\nconst readdirp = require('readdirp');\nconst anymatch = require('anymatch').default;\nconst globParent = require('glob-parent');\nconst isGlob = require('is-glob');\nconst braces = require('braces');\nconst normalizePath = require('normalize-path');\n\nconst NodeFsHandler = require('./lib/nodefs-handler');\nconst FsEventsHandler = require('./lib/fsevents-handler');\nconst {\n EV_ALL,\n EV_READY,\n EV_ADD,\n EV_CHANGE,\n EV_UNLINK,\n EV_ADD_DIR,\n EV_UNLINK_DIR,\n EV_RAW,\n EV_ERROR,\n\n STR_CLOSE,\n STR_END,\n\n BACK_SLASH_RE,\n DOUBLE_SLASH_RE,\n SLASH_OR_BACK_SLASH_RE,\n DOT_RE,\n REPLACER_RE,\n\n SLASH,\n SLASH_SLASH,\n BRACE_START,\n BANG,\n ONE_DOT,\n TWO_DOTS,\n GLOBSTAR,\n SLASH_GLOBSTAR,\n ANYMATCH_OPTS,\n STRING_TYPE,\n FUNCTION_TYPE,\n EMPTY_STR,\n EMPTY_FN,\n\n isWindows,\n isMacos,\n isIBMi\n} = require('./lib/constants');\n\nconst stat = promisify(fs.stat);\nconst readdir = promisify(fs.readdir);\n\n/**\n * @typedef {String} Path\n * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName\n * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType\n */\n\n/**\n *\n * @typedef {Object} WatchHelpers\n * @property {Boolean} followSymlinks\n * @property {'stat'|'lstat'} statMethod\n * @property {Path} path\n * @property {Path} watchPath\n * @property {Function} entryPath\n * @property {Boolean} hasGlob\n * @property {Object} globFilter\n * @property {Function} filterPath\n * @property {Function} filterDir\n */\n\nconst arrify = (value = []) => Array.isArray(value) ? value : [value];\nconst flatten = (list, result = []) => {\n list.forEach(item => {\n if (Array.isArray(item)) {\n flatten(item, result);\n } else {\n result.push(item);\n }\n });\n return result;\n};\n\nconst unifyPaths = (paths_) => {\n /**\n * @type {Array<String>}\n */\n const paths = flatten(arrify(paths_));\n if (!paths.every(p => typeof p === STRING_TYPE)) {\n throw new TypeError(`Non-string provided as watch path: ${paths}`);\n }\n return paths.map(normalizePathToUnix);\n};\n\n// If SLASH_SLASH occurs at the beginning of path, it is not replaced\n// because \"//StoragePC/DrivePool/Movies\" is a valid network path\nconst toUnix = (string) => {\n let str = string.replace(BACK_SLASH_RE, SLASH);\n let prepend = false;\n if (str.startsWith(SLASH_SLASH)) {\n prepend = true;\n }\n while (str.match(DOUBLE_SLASH_RE)) {\n str = str.replace(DOUBLE_SLASH_RE, SLASH);\n }\n if (prepend) {\n str = SLASH + str;\n }\n return str;\n};\n\n// Our version of upath.normalize\n// TODO: this is not equal to path-normalize module - investigate why\nconst normalizePathToUnix = (path) => toUnix(sysPath.normalize(toUnix(path)));\n\nconst normalizeIgnored = (cwd = EMPTY_STR) => (path) => {\n if (typeof path !== STRING_TYPE) return path;\n return normalizePathToUnix(sysPath.isAbsolute(path) ? path : sysPath.join(cwd, path));\n};\n\nconst getAbsolutePath = (path, cwd) => {\n if (sysPath.isAbsolute(path)) {\n return path;\n }\n if (path.startsWith(BANG)) {\n return BANG + sysPath.join(cwd, path.slice(1));\n }\n return sysPath.join(cwd, path);\n};\n\nconst undef = (opts, key) => opts[key] === undefined;\n\n/**\n * Directory entry.\n * @property {Path} path\n * @property {Set<Path>} items\n */\nclass DirEntry {\n /**\n * @param {Path} dir\n * @param {Function} removeWatcher\n */\n constructor(dir, removeWatcher) {\n this.path = dir;\n this._removeWatcher = removeWatcher;\n /** @type {Set<Path>} */\n this.items = new Set();\n }\n\n add(item) {\n const {items} = this;\n if (!items) return;\n if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);\n }\n\n async remove(item) {\n const {items} = this;\n if (!items) return;\n items.delete(item);\n if (items.size > 0) return;\n\n const dir = this.path;\n try {\n await readdir(dir);\n } catch (err) {\n if (this._removeWatcher) {\n this._removeWatcher(sysPath.dirname(dir), sysPath.basename(dir));\n }\n }\n }\n\n has(item) {\n const {items} = this;\n if (!items) return;\n return items.has(item);\n }\n\n /**\n * @returns {Array<String>}\n */\n getChildren() {\n const {items} = this;\n if (!items) return;\n return [...items.values()];\n }\n\n dispose() {\n this.items.clear();\n delete this.path;\n delete this._removeWatcher;\n delete this.items;\n Object.freeze(this);\n }\n}\n\nconst STAT_METHOD_F = 'stat';\nconst STAT_METHOD_L = 'lstat';\nclass WatchHelper {\n constructor(path, watchPath, follow, fsw) {\n this.fsw = fsw;\n this.path = path = path.replace(REPLACER_RE, EMPTY_STR);\n this.watchPath = watchPath;\n this.fullWatchPath = sysPath.resolve(watchPath);\n this.hasGlob = watchPath !== path;\n /** @type {object|boolean} */\n if (path === EMPTY_STR) this.hasGlob = false;\n this.globSymlink = this.hasGlob && follow ? undefined : false;\n this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;\n this.dirParts = this.getDirParts(path);\n this.dirParts.forEach((parts) => {\n if (parts.length > 1) parts.pop();\n });\n this.followSymlinks = follow;\n this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;\n }\n\n checkGlobSymlink(entry) {\n // only need to resolve once\n // first entry should always have entry.parentDir === EMPTY_STR\n if (this.globSymlink === undefined) {\n this.globSymlink = entry.fullParentDir === this.fullWatchPath ?\n false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};\n }\n\n if (this.globSymlink) {\n return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);\n }\n\n return entry.fullPath;\n }\n\n entryPath(entry) {\n return sysPath.join(this.watchPath,\n sysPath.relative(this.watchPath, this.checkGlobSymlink(entry))\n );\n }\n\n filterPath(entry) {\n const {stats} = entry;\n if (stats && stats.isSymbolicLink()) return this.filterDir(entry);\n const resolvedPath = this.entryPath(entry);\n const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE ?\n this.globFilter(resolvedPath) : true;\n return matchesGlob &&\n this.fsw._isntIgnored(resolvedPath, stats) &&\n this.fsw._hasReadPermissions(stats);\n }\n\n getDirParts(path) {\n if (!this.hasGlob) return [];\n const parts = [];\n const expandedPath = path.includes(BRACE_START) ? braces.expand(path) : [path];\n expandedPath.forEach((path) => {\n parts.push(sysPath.relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));\n });\n return parts;\n }\n\n filterDir(entry) {\n if (this.hasGlob) {\n const entryParts = this.getDirParts(this.checkGlobSymlink(entry));\n let globstar = false;\n this.unmatchedGlob = !this.dirParts.some((parts) => {\n return parts.every((part, i) => {\n if (part === GLOBSTAR) globstar = true;\n return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);\n });\n });\n }\n return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);\n }\n}\n\n/**\n * Watches files & directories for changes. Emitted events:\n * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n *\n * new FSWatcher()\n * .add(directories)\n * .on('add', path => log('File', path, 'was added'))\n */\nclass FSWatcher extends EventEmitter {\n// Not indenting methods for history sake; for now.\nconstructor(_opts) {\n super();\n\n const opts = {};\n if (_opts) Object.assign(opts, _opts); // for frozen objects\n\n /** @type {Map<String, DirEntry>} */\n this._watched = new Map();\n /** @type {Map<String, Array>} */\n this._closers = new Map();\n /** @type {Set<String>} */\n this._ignoredPaths = new Set();\n\n /** @type {Map<ThrottleType, Map>} */\n this._throttled = new Map();\n\n /** @type {Map<Path, String|Boolean>} */\n this._symlinkPaths = new Map();\n\n this._streams = new Set();\n this.closed = false;\n\n // Set up default options.\n if (undef(opts, 'persistent')) opts.persistent = true;\n if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;\n if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;\n if (undef(opts, 'interval')) opts.interval = 100;\n if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;\n if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;\n opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;\n\n // Enable fsevents on OS X when polling isn't explicitly enabled.\n if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;\n\n // If we can't use fsevents, ensure the options reflect it's disabled.\n const canUseFsEvents = FsEventsHandler.canUse();\n if (!canUseFsEvents) opts.useFsEvents = false;\n\n // Use polling on Mac if not using fsevents.\n // Other platforms use non-polling fs_watch.\n if (undef(opts, 'usePolling') && !opts.useFsEvents) {\n opts.usePolling = isMacos;\n }\n\n // Always default to polling on IBM i because fs.watch() is not available on IBM i.\n if(isIBMi) {\n opts.usePolling = true;\n }\n\n // Global override (useful for end-developers that need to force polling for all\n // instances of chokidar, regardless of usage/dependency depth)\n const envPoll = process.env.CHOKIDAR_USEPOLLING;\n if (envPoll !== undefined) {\n const envLower = envPoll.toLowerCase();\n\n if (envLower === 'false' || envLower === '0') {\n opts.usePolling = false;\n } else if (envLower === 'true' || envLower === '1') {\n opts.usePolling = true;\n } else {\n opts.usePolling = !!envLower;\n }\n }\n const envInterval = process.env.CHOKIDAR_INTERVAL;\n if (envInterval) {\n opts.interval = Number.parseInt(envInterval, 10);\n }\n\n // Editor atomic write normalization enabled by default with fs.watch\n if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;\n if (opts.atomic) this._pendingUnlinks = new Map();\n\n if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;\n\n if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;\n if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};\n const awf = opts.awaitWriteFinish;\n if (awf) {\n if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;\n if (!awf.pollInterval) awf.pollInterval = 100;\n this._pendingWrites = new Map();\n }\n if (opts.ignored) opts.ignored = arrify(opts.ignored);\n\n let readyCalls = 0;\n this._emitReady = () => {\n readyCalls++;\n if (readyCalls >= this._readyCount) {\n this._emitReady = EMPTY_FN;\n this._readyEmitted = true;\n // use process.nextTick to allow time for listener to be bound\n process.nextTick(() => this.emit(EV_READY));\n }\n };\n this._emitRaw = (...args) => this.emit(EV_RAW, ...args);\n this._readyEmitted = false;\n this.options = opts;\n\n // Initialize with proper watcher.\n if (opts.useFsEvents) {\n this._fsEventsHandler = new FsEventsHandler(this);\n } else {\n this._nodeFsHandler = new NodeFsHandler(this);\n }\n\n // You\u2019re frozen when your heart\u2019s not open.\n Object.freeze(opts);\n}\n\n// Public methods\n\n/**\n * Adds paths to be watched on an existing FSWatcher instance\n * @param {Path|Array<Path>} paths_\n * @param {String=} _origAdd private; for handling non-existent paths to be watched\n * @param {Boolean=} _internal private; indicates a non-user add\n * @returns {FSWatcher} for chaining\n */\nadd(paths_, _origAdd, _internal) {\n const {cwd, disableGlobbing} = this.options;\n this.closed = false;\n let paths = unifyPaths(paths_);\n if (cwd) {\n paths = paths.map((path) => {\n const absPath = getAbsolutePath(path, cwd);\n\n // Check `path` instead of `absPath` because the cwd portion can't be a glob\n if (disableGlobbing || !isGlob(path)) {\n return absPath;\n }\n return normalizePath(absPath);\n });\n }\n\n // set aside negated glob strings\n paths = paths.filter((path) => {\n if (path.startsWith(BANG)) {\n this._ignoredPaths.add(path.slice(1));\n return false;\n }\n\n // if a path is being added that was previously ignored, stop ignoring it\n this._ignoredPaths.delete(path);\n this._ignoredPaths.delete(path + SLASH_GLOBSTAR);\n\n // reset the cached userIgnored anymatch fn\n // to make ignoredPaths changes effective\n this._userIgnored = undefined;\n\n return true;\n });\n\n if (this.options.useFsEvents && this._fsEventsHandler) {\n if (!this._readyCount) this._readyCount = paths.length;\n if (this.options.persistent) this._readyCount *= 2;\n paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));\n } else {\n if (!this._readyCount) this._readyCount = 0;\n this._readyCount += paths.length;\n Promise.all(\n paths.map(async path => {\n const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);\n if (res) this._emitReady();\n return res;\n })\n ).then(results => {\n if (this.closed) return;\n results.filter(item => item).forEach(item => {\n this.add(sysPath.dirname(item), sysPath.basename(_origAdd || item));\n });\n });\n }\n\n return this;\n}\n\n/**\n * Close watchers or start ignoring events from specified paths.\n * @param {Path|Array<Path>} paths_ - string or array of strings, file/directory paths and/or globs\n * @returns {FSWatcher} for chaining\n*/\nunwatch(paths_) {\n if (this.closed) return this;\n const paths = unifyPaths(paths_);\n const {cwd} = this.options;\n\n paths.forEach((path) => {\n // convert to absolute path unless relative path already matches\n if (!sysPath.isAbsolute(path) && !this._closers.has(path)) {\n if (cwd) path = sysPath.join(cwd, path);\n path = sysPath.resolve(path);\n }\n\n this._closePath(path);\n\n this._ignoredPaths.add(path);\n if (this._watched.has(path)) {\n this._ignoredPaths.add(path + SLASH_GLOBSTAR);\n }\n\n // reset the cached userIgnored anymatch fn\n // to make ignoredPaths changes effective\n this._userIgnored = undefined;\n });\n\n return this;\n}\n\n/**\n * Close watchers and remove all listeners from watched paths.\n * @returns {Promise<void>}.\n*/\nclose() {\n if (this.closed) return this._closePromise;\n this.closed = true;\n\n // Memory management.\n this.removeAllListeners();\n const closers = [];\n this._closers.forEach(closerList => closerList.forEach(closer => {\n const promise = closer();\n if (promise instanceof Promise) closers.push(promise);\n }));\n this._streams.forEach(stream => stream.destroy());\n this._userIgnored = undefined;\n this._readyCount = 0;\n this._readyEmitted = false;\n this._watched.forEach(dirent => dirent.dispose());\n ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {\n this[`_${key}`].clear();\n });\n\n this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();\n return this._closePromise;\n}\n\n/**\n * Expose list of watched paths\n * @returns {Object} for chaining\n*/\ngetWatched() {\n const watchList = {};\n this._watched.forEach((entry, dir) => {\n const key = this.options.cwd ? sysPath.relative(this.options.cwd, dir) : dir;\n watchList[key || ONE_DOT] = entry.getChildren().sort();\n });\n return watchList;\n}\n\nemitWithAll(event, args) {\n this.emit(...args);\n if (event !== EV_ERROR) this.emit(EV_ALL, ...args);\n}\n\n// Common helpers\n// --------------\n\n/**\n * Normalize and emit events.\n * Calling _emit DOES NOT MEAN emit() would be called!\n * @param {EventName} event Type of event\n * @param {Path} path File or directory path\n * @param {*=} val1 arguments to be passed with event\n * @param {*=} val2\n * @param {*=} val3\n * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\nasync _emit(event, path, val1, val2, val3) {\n if (this.closed) return;\n\n const opts = this.options;\n if (isWindows) path = sysPath.normalize(path);\n if (opts.cwd) path = sysPath.relative(opts.cwd, path);\n /** @type Array<any> */\n const args = [event, path];\n if (val3 !== undefined) args.push(val1, val2, val3);\n else if (val2 !== undefined) args.push(val1, val2);\n else if (val1 !== undefined) args.push(val1);\n\n const awf = opts.awaitWriteFinish;\n let pw;\n if (awf && (pw = this._pendingWrites.get(path))) {\n pw.lastChange = new Date();\n return this;\n }\n\n if (opts.atomic) {\n if (event === EV_UNLINK) {\n this._pendingUnlinks.set(path, args);\n setTimeout(() => {\n this._pendingUnlinks.forEach((entry, path) => {\n this.emit(...entry);\n this.emit(EV_ALL, ...entry);\n this._pendingUnlinks.delete(path);\n });\n }, typeof opts.atomic === 'number' ? opts.atomic : 100);\n return this;\n }\n if (event === EV_ADD && this._pendingUnlinks.has(path)) {\n event = args[0] = EV_CHANGE;\n this._pendingUnlinks.delete(path);\n }\n }\n\n if (awf && (event === EV_ADD || event === EV_CHANGE) && this._readyEmitted) {\n const awfEmit = (err, stats) => {\n if (err) {\n event = args[0] = EV_ERROR;\n args[1] = err;\n this.emitWithAll(event, args);\n } else if (stats) {\n // if stats doesn't exist the file must have been deleted\n if (args.length > 2) {\n args[2] = stats;\n } else {\n args.push(stats);\n }\n this.emitWithAll(event, args);\n }\n };\n\n this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);\n return this;\n }\n\n if (event === EV_CHANGE) {\n const isThrottled = !this._throttle(EV_CHANGE, path, 50);\n if (isThrottled) return this;\n }\n\n if (opts.alwaysStat && val1 === undefined &&\n (event === EV_ADD || event === EV_ADD_DIR || event === EV_CHANGE)\n ) {\n const fullPath = opts.cwd ? sysPath.join(opts.cwd, path) : path;\n let stats;\n try {\n stats = await stat(fullPath);\n } catch (err) {}\n // Suppress event when fs_stat fails, to avoid sending undefined 'stat'\n if (!stats || this.closed) return;\n args.push(stats);\n }\n this.emitWithAll(event, args);\n\n return this;\n}\n\n/**\n * Common handler for errors\n * @param {Error} error\n * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag\n */\n_handleError(error) {\n const code = error && error.code;\n if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&\n (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))\n ) {\n this.emit(EV_ERROR, error);\n }\n return error || this.closed;\n}\n\n/**\n * Helper utility for throttling\n * @param {ThrottleType} actionType type being throttled\n * @param {Path} path being acted upon\n * @param {Number} timeout duration of time to suppress duplicate actions\n * @returns {Object|false} tracking object or false if action should be suppressed\n */\n_throttle(actionType, path, timeout) {\n if (!this._throttled.has(actionType)) {\n this._throttled.set(actionType, new Map());\n }\n\n /** @type {Map<Path, Object>} */\n const action = this._throttled.get(actionType);\n /** @type {Object} */\n const actionPath = action.get(path);\n\n if (actionPath) {\n actionPath.count++;\n return false;\n }\n\n let timeoutObject;\n const clear = () => {\n const item = action.get(path);\n const count = item ? item.count : 0;\n action.delete(path);\n clearTimeout(timeoutObject);\n if (item) clearTimeout(item.timeoutObject);\n return count;\n };\n timeoutObject = setTimeout(clear, timeout);\n const thr = {timeoutObject, clear, count: 0};\n action.set(path, thr);\n return thr;\n}\n\n_incrReadyCount() {\n return this._readyCount++;\n}\n\n/**\n * Awaits write operation to finish.\n * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.\n * @param {Path} path being acted upon\n * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished\n * @param {EventName} event\n * @param {Function} awfEmit Callback to be called when ready for event to be emitted.\n */\n_awaitWriteFinish(path, threshold, event, awfEmit) {\n let timeoutHandler;\n\n let fullPath = path;\n if (this.options.cwd && !sysPath.isAbsolute(path)) {\n fullPath = sysPath.join(this.options.cwd, path);\n }\n\n const now = new Date();\n\n const awaitWriteFinish = (prevStat) => {\n fs.stat(fullPath, (err, curStat) => {\n if (err || !this._pendingWrites.has(path)) {\n if (err && err.code !== 'ENOENT') awfEmit(err);\n return;\n }\n\n const now = Number(new Date());\n\n if (prevStat && curStat.size !== prevStat.size) {\n this._pendingWrites.get(path).lastChange = now;\n }\n const pw = this._pendingWrites.get(path);\n const df = now - pw.lastChange;\n\n if (df >= threshold) {\n this._pendingWrites.delete(path);\n awfEmit(undefined, curStat);\n } else {\n timeoutHandler = setTimeout(\n awaitWriteFinish,\n this.options.awaitWriteFinish.pollInterval,\n curStat\n );\n }\n });\n };\n\n if (!this._pendingWrites.has(path)) {\n this._pendingWrites.set(path, {\n lastChange: now,\n cancelWait: () => {\n this._pendingWrites.delete(path);\n clearTimeout(timeoutHandler);\n return event;\n }\n });\n timeoutHandler = setTimeout(\n awaitWriteFinish,\n this.options.awaitWriteFinish.pollInterval\n );\n }\n}\n\n_getGlobIgnored() {\n return [...this._ignoredPaths.values()];\n}\n\n/**\n * Determines whether user has asked to ignore this path.\n * @param {Path} path filepath or dir\n * @param {fs.Stats=} stats result of fs.stat\n * @returns {Boolean}\n */\n_isIgnored(path, stats) {\n if (this.options.atomic && DOT_RE.test(path)) return true;\n if (!this._userIgnored) {\n const {cwd} = this.options;\n const ign = this.options.ignored;\n\n const ignored = ign && ign.map(normalizeIgnored(cwd));\n const paths = arrify(ignored)\n .filter((path) => typeof path === STRING_TYPE && !isGlob(path))\n .map((path) => path + SLASH_GLOBSTAR);\n const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);\n this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);\n }\n\n return this._userIgnored([path, stats]);\n}\n\n_isntIgnored(path, stat) {\n return !this._isIgnored(path, stat);\n}\n\n/**\n * Provides a set of common helpers and properties relating to symlink and glob handling.\n * @param {Path} path file, directory, or glob pattern being watched\n * @param {Number=} depth at any depth > 0, this isn't a glob\n * @returns {WatchHelper} object containing helpers for this path\n */\n_getWatchHelpers(path, depth) {\n const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);\n const follow = this.options.followSymlinks;\n\n return new WatchHelper(path, watchPath, follow, this);\n}\n\n// Directory helpers\n// -----------------\n\n/**\n * Provides directory tracking objects\n * @param {String} directory path of the directory\n * @returns {DirEntry} the directory's tracking object\n */\n_getWatchedDir(directory) {\n if (!this._boundRemove) this._boundRemove = this._remove.bind(this);\n const dir = sysPath.resolve(directory);\n if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));\n return this._watched.get(dir);\n}\n\n// File helpers\n// ------------\n\n/**\n * Check for read permissions.\n * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405\n * @param {fs.Stats} stats - object, result of fs_stat\n * @returns {Boolean} indicates whether the file can be read\n*/\n_hasReadPermissions(stats) {\n if (this.options.ignorePermissionErrors) return true;\n\n // stats.mode may be bigint\n const md = stats && Number.parseInt(stats.mode, 10);\n const st = md & 0o777;\n const it = Number.parseInt(st.toString(8)[0], 10);\n return Boolean(4 & it);\n}\n\n/**\n * Handles emitting unlink events for\n * files and directories, and via recursion, for\n * files and directories within directories that are unlinked\n * @param {String} directory within which the following item is located\n * @param {String} item base path of item/directory\n * @returns {void}\n*/\n_remove(directory, item, isDirectory) {\n // if what is being deleted is a directory, get that directory's paths\n // for recursive deleting and cleaning of watched object\n // if it is not a directory, nestedDirectoryChildren will be empty array\n const path = sysPath.join(directory, item);\n const fullPath = sysPath.resolve(path);\n isDirectory = isDirectory != null\n ? isDirectory\n : this._watched.has(path) || this._watched.has(fullPath);\n\n // prevent duplicate handling in case of arriving here nearly simultaneously\n // via multiple paths (such as _handleFile and _handleDir)\n if (!this._throttle('remove', path, 100)) return;\n\n // if the only watched file is removed, watch for its return\n if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {\n this.add(directory, item, true);\n }\n\n // This will create a new entry in the watched object in either case\n // so we got to do the directory check beforehand\n const wp = this._getWatchedDir(path);\n const nestedDirectoryChildren = wp.getChildren();\n\n // Recursively remove children directories / files.\n nestedDirectoryChildren.forEach(nested => this._remove(path, nested));\n\n // Check if item was on the watched list and remove it\n const parent = this._getWatchedDir(directory);\n const wasTracked = parent.has(item);\n parent.remove(item);\n\n // Fixes issue #1042 -> Relative paths were detected and added as symlinks\n // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),\n // but never removed from the map in case the path was deleted.\n // This leads to an incorrect state if the path was recreated:\n // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553\n if (this._symlinkPaths.has(fullPath)) {\n this._symlinkPaths.delete(fullPath);\n }\n\n // If we wait for this file to be fully written, cancel the wait.\n let relPath = path;\n if (this.options.cwd) relPath = sysPath.relative(this.options.cwd, path);\n if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {\n const event = this._pendingWrites.get(relPath).cancelWait();\n if (event === EV_ADD) return;\n }\n\n // The Entry will either be a directory that just got removed\n // or a bogus entry to a file, in either case we have to remove it\n this._watched.delete(path);\n this._watched.delete(fullPath);\n const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK;\n if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);\n\n // Avoid conflicts if we later create another file with the same name\n if (!this.options.useFsEvents) {\n this._closePath(path);\n }\n}\n\n/**\n * Closes all watchers for a path\n * @param {Path} path\n */\n_closePath(path) {\n this._closeFile(path)\n const dir = sysPath.dirname(path);\n this._getWatchedDir(dir).remove(sysPath.basename(path));\n}\n\n/**\n * Closes only file-specific watchers\n * @param {Path} path\n */\n_closeFile(path) {\n const closers = this._closers.get(path);\n if (!closers) return;\n closers.forEach(closer => closer());\n this._closers.delete(path);\n}\n\n/**\n *\n * @param {Path} path\n * @param {Function} closer\n */\n_addPathCloser(path, closer) {\n if (!closer) return;\n let list = this._closers.get(path);\n if (!list) {\n list = [];\n this._closers.set(path, list);\n }\n list.push(closer);\n}\n\n_readdirp(root, opts) {\n if (this.closed) return;\n const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};\n let stream = readdirp(root, options);\n this._streams.add(stream);\n stream.once(STR_CLOSE, () => {\n stream = undefined;\n });\n stream.once(STR_END, () => {\n if (stream) {\n this._streams.delete(stream);\n stream = undefined;\n }\n });\n return stream;\n}\n\n}\n\n// Export FSWatcher class\nexports.FSWatcher = FSWatcher;\n\n/**\n * Instantiates watcher with paths to be tracked.\n * @param {String|Array<String>} paths file/directory paths and/or globs\n * @param {Object=} options chokidar opts\n * @returns an instance of FSWatcher for chaining.\n */\nconst watch = (paths, options) => {\n const watcher = new FSWatcher(options);\n watcher.add(paths);\n return watcher;\n};\n\nexports.watch = watch;\n", "'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n", "'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n", "/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n", "var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n", "var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n", "'use strict';\nconst colorConvert = require('color-convert');\n\nconst wrapAnsi16 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => function () {\n\tconst rgb = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\t\t\tgray: [90, 39],\n\n\t\t\t// Bright color\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Fix humans\n\tstyles.color.grey = styles.color.gray;\n\n\tfor (const groupName of Object.keys(styles)) {\n\t\tconst group = styles[groupName];\n\n\t\tfor (const styleName of Object.keys(group)) {\n\t\t\tconst style = group[styleName];\n\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\n\t\tObject.defineProperty(styles, 'codes', {\n\t\t\tvalue: codes,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tconst ansi2ansi = n => n;\n\tconst rgb2rgb = (r, g, b) => [r, g, b];\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 0)\n\t};\n\n\tstyles.bgColor.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 10)\n\t};\n\n\tfor (let key of Object.keys(colorConvert)) {\n\t\tif (typeof colorConvert[key] !== 'object') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst suite = colorConvert[key];\n\n\t\tif (key === 'ansi16') {\n\t\t\tkey = 'ansi';\n\t\t}\n\n\t\tif ('ansi16' in suite) {\n\t\t\tstyles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);\n\t\t\tstyles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);\n\t\t}\n\n\t\tif ('ansi256' in suite) {\n\t\t\tstyles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);\n\t\t\tstyles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);\n\t\t}\n\n\t\tif ('rgb' in suite) {\n\t\t\tstyles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);\n\t\t\tstyles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);\n\t\t}\n\t}\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n", "'use strict';\nmodule.exports = (flag, argv) => {\n\targv = argv || process.argv;\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst pos = argv.indexOf(prefix + flag);\n\tconst terminatorPos = argv.indexOf('--');\n\treturn pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n", "'use strict';\nconst os = require('os');\nconst hasFlag = require('has-flag');\n\nconst env = process.env;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false')) {\n\tforceColor = false;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n\tforceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(stream) {\n\tif (forceColor === false) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (stream && !stream.isTTY && forceColor !== true) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor ? 1 : 0;\n\n\tif (process.platform === 'win32') {\n\t\t// Node.js 7.5.0 is the first version of Node.js to include a patch to\n\t\t// libuv that enables 256 color output on Windows. Anything earlier and it\n\t\t// won't work. However, here we target Node.js 8 at minimum as it is an LTS\n\t\t// release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows\n\t\t// release that supports 256 colors. Windows 10 build 14931 is the first release\n\t\t// that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(process.versions.node.split('.')[0]) >= 8 &&\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel(process.stdout),\n\tstderr: getSupportLevel(process.stderr)\n};\n", "'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tif ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, args) {\n\tconst results = [];\n\tconst chunks = args.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tif (!isNaN(chunk)) {\n\t\t\tresults.push(Number(chunk));\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const styleName of Object.keys(enabled)) {\n\t\tif (Array.isArray(enabled[styleName])) {\n\t\t\tif (!(styleName in current)) {\n\t\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t\t}\n\n\t\t\tif (enabled[styleName].length > 0) {\n\t\t\t\tcurrent = current[styleName].apply(current, enabled[styleName]);\n\t\t\t} else {\n\t\t\t\tcurrent = current[styleName];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, tmp) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {\n\t\tif (escapeChar) {\n\t\t\tchunk.push(unescape(escapeChar));\n\t\t} else if (style) {\n\t\t\tconst str = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(chr);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMsg);\n\t}\n\n\treturn chunks.join('');\n};\n", "'use strict';\nconst escapeStringRegexp = require('escape-string-regexp');\nconst ansiStyles = require('ansi-styles');\nconst stdoutColor = require('supports-color').stdout;\n\nconst template = require('./templates.js');\n\nconst isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');\n\n// `supportsColor.level` \u2192 `ansiStyles.color[name]` mapping\nconst levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];\n\n// `color-convert` models to exclude from the Chalk API due to conflicts and such\nconst skipModels = new Set(['gray']);\n\nconst styles = Object.create(null);\n\nfunction applyOptions(obj, options) {\n\toptions = options || {};\n\n\t// Detect level if not set manually\n\tconst scLevel = stdoutColor ? stdoutColor.level : 0;\n\tobj.level = options.level === undefined ? scLevel : options.level;\n\tobj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;\n}\n\nfunction Chalk(options) {\n\t// We check for this.template here since calling `chalk.constructor()`\n\t// by itself will have a `this` of a previously constructed chalk object\n\tif (!this || !(this instanceof Chalk) || this.template) {\n\t\tconst chalk = {};\n\t\tapplyOptions(chalk, options);\n\n\t\tchalk.template = function () {\n\t\t\tconst args = [].slice.call(arguments);\n\t\t\treturn chalkTag.apply(null, [chalk.template].concat(args));\n\t\t};\n\n\t\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\t\tObject.setPrototypeOf(chalk.template, chalk);\n\n\t\tchalk.template.constructor = Chalk;\n\n\t\treturn chalk.template;\n\t}\n\n\tapplyOptions(this, options);\n}\n\n// Use bright blue on Windows as the normal blue color is illegible\nif (isSimpleWindowsTerm) {\n\tansiStyles.blue.open = '\\u001B[94m';\n}\n\nfor (const key of Object.keys(ansiStyles)) {\n\tansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n\n\tstyles[key] = {\n\t\tget() {\n\t\t\tconst codes = ansiStyles[key];\n\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\treturn build.call(this, this._styles || [], true, 'visible');\n\t}\n};\n\nansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');\nfor (const model of Object.keys(ansiStyles.color.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.color.close,\n\t\t\t\t\tcloseRe: ansiStyles.color.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');\nfor (const model of Object.keys(ansiStyles.bgColor.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.bgColor.close,\n\t\t\t\t\tcloseRe: ansiStyles.bgColor.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, styles);\n\nfunction build(_styles, _empty, key) {\n\tconst builder = function () {\n\t\treturn applyStyle.apply(builder, arguments);\n\t};\n\n\tbuilder._styles = _styles;\n\tbuilder._empty = _empty;\n\n\tconst self = this;\n\n\tObject.defineProperty(builder, 'level', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.level;\n\t\t},\n\t\tset(level) {\n\t\t\tself.level = level;\n\t\t}\n\t});\n\n\tObject.defineProperty(builder, 'enabled', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.enabled;\n\t\t},\n\t\tset(enabled) {\n\t\t\tself.enabled = enabled;\n\t\t}\n\t});\n\n\t// See below for fix regarding invisible grey/dim combination on Windows\n\tbuilder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';\n\n\t// `__proto__` is used because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tbuilder.__proto__ = proto; // eslint-disable-line no-proto\n\n\treturn builder;\n}\n\nfunction applyStyle() {\n\t// Support varags, but simply cast to string in case there's only one arg\n\tconst args = arguments;\n\tconst argsLen = args.length;\n\tlet str = String(arguments[0]);\n\n\tif (argsLen === 0) {\n\t\treturn '';\n\t}\n\n\tif (argsLen > 1) {\n\t\t// Don't slice `arguments`, it prevents V8 optimizations\n\t\tfor (let a = 1; a < argsLen; a++) {\n\t\t\tstr += ' ' + args[a];\n\t\t}\n\t}\n\n\tif (!this.enabled || this.level <= 0 || !str) {\n\t\treturn this._empty ? '' : str;\n\t}\n\n\t// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n\t// see https://github.com/chalk/chalk/issues/58\n\t// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\n\tconst originalDim = ansiStyles.dim.open;\n\tif (isSimpleWindowsTerm && this.hasGrey) {\n\t\tansiStyles.dim.open = '';\n\t}\n\n\tfor (const code of this._styles.slice().reverse()) {\n\t\t// Replace any instances already present with a re-opening code\n\t\t// otherwise only the part of the string until said closing code\n\t\t// will be colored, and the rest will simply be 'plain'.\n\t\tstr = code.open + str.replace(code.closeRe, code.open) + code.close;\n\n\t\t// Close the styling before a linebreak and reopen\n\t\t// after next line to fix a bleed issue on macOS\n\t\t// https://github.com/chalk/chalk/pull/92\n\t\tstr = str.replace(/\\r?\\n/g, `${code.close}$&${code.open}`);\n\t}\n\n\t// Reset the original `dim` if we changed it to work around the Windows dimmed gray issue\n\tansiStyles.dim.open = originalDim;\n\n\treturn str;\n}\n\nfunction chalkTag(chalk, strings) {\n\tif (!Array.isArray(strings)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn [].slice.call(arguments, 1).join(' ');\n\t}\n\n\tconst args = [].slice.call(arguments, 2);\n\tconst parts = [strings.raw[0]];\n\n\tfor (let i = 1; i < strings.length; i++) {\n\t\tparts.push(String(args[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'));\n\t\tparts.push(String(strings.raw[i]));\n\t}\n\n\treturn template(chalk, parts.join(''));\n}\n\nObject.defineProperties(Chalk.prototype, styles);\n\nmodule.exports = Chalk(); // eslint-disable-line new-cap\nmodule.exports.supportsColor = stdoutColor;\nmodule.exports.default = module.exports; // For TypeScript\n", "'use strict';\n\nconst mimicFn = (to, from) => {\n\tfor (const prop of Reflect.ownKeys(from)) {\n\t\tObject.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop));\n\t}\n\n\treturn to;\n};\n\nmodule.exports = mimicFn;\n// TODO: Remove this for the next major release\nmodule.exports.default = mimicFn;\n", "'use strict';\nconst mimicFn = require('mimic-fn');\n\nconst calledFunctions = new WeakMap();\n\nconst onetime = (function_, options = {}) => {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError('Expected a function');\n\t}\n\n\tlet returnValue;\n\tlet callCount = 0;\n\tconst functionName = function_.displayName || function_.name || '<anonymous>';\n\n\tconst onetime = function (...arguments_) {\n\t\tcalledFunctions.set(onetime, ++callCount);\n\n\t\tif (callCount === 1) {\n\t\t\treturnValue = function_.apply(this, arguments_);\n\t\t\tfunction_ = null;\n\t\t} else if (options.throw === true) {\n\t\t\tthrow new Error(`Function \\`${functionName}\\` can only be called once`);\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tmimicFn(onetime, function_);\n\tcalledFunctions.set(onetime, callCount);\n\n\treturn onetime;\n};\n\nmodule.exports = onetime;\n// TODO: Remove this for the next major release\nmodule.exports.default = onetime;\n\nmodule.exports.callCount = function_ => {\n\tif (!calledFunctions.has(function_)) {\n\t\tthrow new Error(`The given function \\`${function_.name}\\` is not wrapped by the \\`onetime\\` package`);\n\t}\n\n\treturn calledFunctions.get(function_);\n};\n", "// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\nvar assert = require('assert')\nvar signals = require('./signals.js')\nvar isWin = /^win/i.test(process.platform)\n\nvar EE = require('events')\n/* istanbul ignore if */\nif (typeof EE !== 'function') {\n EE = EE.EventEmitter\n}\n\nvar emitter\nif (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n} else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n}\n\n// Because this emitter is a global, we have to check to see if a\n// previous version of this library failed to enable infinite listeners.\n// I know what you're about to say. But literally everything about\n// signal-exit is a compromise with evil. Get used to it.\nif (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n}\n\nmodule.exports = function (cb, opts) {\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n}\n\nmodule.exports.unload = unload\nfunction unload () {\n if (!loaded) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n}\n\nfunction emit (event, code, signal) {\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n}\n\n// { <signal>: <listener fn>, ... }\nvar sigListeners = {}\nsignals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n process.kill(process.pid, sig)\n }\n }\n})\n\nmodule.exports.signals = function () {\n return signals\n}\n\nmodule.exports.load = load\n\nvar loaded = false\n\nfunction load () {\n if (loaded) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n}\n\nvar originalProcessReallyExit = process.reallyExit\nfunction processReallyExit (code) {\n process.exitCode = code || 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n}\n\nvar originalProcessEmit = process.emit\nfunction processEmit (ev, arg) {\n if (ev === 'exit') {\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n}\n", "'use strict';\nconst onetime = require('onetime');\nconst signalExit = require('signal-exit');\n\nmodule.exports = onetime(() => {\n\tsignalExit(() => {\n\t\tprocess.stderr.write('\\u001B[?25h');\n\t}, {alwaysLast: true});\n});\n", "'use strict';\nconst restoreCursor = require('restore-cursor');\n\nlet isHidden = false;\n\nexports.show = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\tisHidden = false;\n\twritableStream.write('\\u001B[?25h');\n};\n\nexports.hide = (writableStream = process.stderr) => {\n\tif (!writableStream.isTTY) {\n\t\treturn;\n\t}\n\n\trestoreCursor();\n\tisHidden = true;\n\twritableStream.write('\\u001B[?25l');\n};\n\nexports.toggle = (force, writableStream) => {\n\tif (force !== undefined) {\n\t\tisHidden = force;\n\t}\n\n\tif (isHidden) {\n\t\texports.show(writableStream);\n\t} else {\n\t\texports.hide(writableStream);\n\t}\n};\n", "'use strict';\n\nmodule.exports = options => {\n\toptions = Object.assign({\n\t\tonlyFirst: false\n\t}, options);\n\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, options.onlyFirst ? undefined : 'g');\n};\n", "'use strict';\nconst ansiRegex = require('ansi-regex');\n\nconst stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n\nmodule.exports = stripAnsi;\nmodule.exports.default = stripAnsi;\n", "'use strict';\n\nconst readline = require('readline');\nconst stripAnsi = require('strip-ansi');\nconst { dashes, dots } = require('./spinners');\n\nconst VALID_STATUSES = ['succeed', 'fail', 'spinning', 'non-spinnable', 'stopped'];\nconst VALID_COLORS = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'gray', 'redBright', 'greenBright', 'yellowBright', 'blueBright', 'magentaBright', 'cyanBright', 'whiteBright'];\n\nfunction purgeSpinnerOptions(options) {\n const { text, status, indent } = options;\n const opts = { text, status, indent };\n const colors = colorOptions(options);\n\n if (!VALID_STATUSES.includes(status)) delete opts.status;\n if (typeof text !== 'string') delete opts.text;\n if (typeof indent !== 'number') delete opts.indent;\n\n return { ...colors, ...opts };\n}\n\nfunction purgeSpinnersOptions({ spinner, disableSpins, ...others }) {\n const colors = colorOptions(others);\n const prefixes = prefixOptions(others);\n const disableSpinsOption = typeof disableSpins === 'boolean' ? { disableSpins } : {};\n spinner = turnToValidSpinner(spinner);\n\n return { ...colors, ...prefixes, ...disableSpinsOption, spinner }\n}\n\nfunction turnToValidSpinner(spinner = {}) {\n const platformSpinner = terminalSupportsUnicode() ? dots : dashes;\n if (!typeof spinner === 'object') return platformSpinner;\n let { interval, frames } = spinner;\n if (!Array.isArray(frames) || frames.length < 1) frames = platformSpinner.frames;\n if (typeof interval !== 'number') interval = platformSpinner.interval;\n\n return { interval, frames };\n}\n\nfunction colorOptions({ color, succeedColor, failColor, spinnerColor }) {\n const colors = { color, succeedColor, failColor, spinnerColor };\n Object.keys(colors).forEach(key => {\n if (!VALID_COLORS.includes(colors[key])) delete colors[key];\n });\n\n return colors;\n}\n\nfunction prefixOptions({ succeedPrefix, failPrefix }) {\n if(terminalSupportsUnicode()) {\n succeedPrefix = succeedPrefix || '\u2713';\n failPrefix = failPrefix || '\u2716';\n } else {\n succeedPrefix = succeedPrefix || '\u221A';\n failPrefix = failPrefix || '\u00D7';\n }\n\n return { succeedPrefix, failPrefix };\n}\n\nfunction breakText(text, prefixLength) {\n return text.split('\\n')\n .map((line, index) => index === 0 ? breakLine(line, prefixLength) : breakLine(line, 0))\n .join('\\n');\n}\n\nfunction breakLine(line, prefixLength) {\n const columns = process.stderr.columns || 95;\n return line.length >= columns - prefixLength\n ? `${line.substring(0, columns - prefixLength - 1)}\\n${\n breakLine(line.substring(columns - prefixLength - 1, line.length), 0)\n }`\n : line;\n}\n\nfunction getLinesLength(text, prefixLength) {\n return stripAnsi(text)\n .split('\\n')\n .map((line, index) => index === 0 ? line.length + prefixLength : line.length);\n}\n\nfunction writeStream(stream, output, rawLines) {\n stream.write(output);\n readline.moveCursor(stream, 0, -rawLines.length);\n}\n\nfunction cleanStream(stream, rawLines) {\n rawLines.forEach((lineLength, index) => {\n readline.moveCursor(stream, lineLength, index);\n readline.clearLine(stream, 1);\n readline.moveCursor(stream, -lineLength, -index);\n });\n readline.moveCursor(stream, 0, rawLines.length);\n readline.clearScreenDown(stream);\n readline.moveCursor(stream, 0, -rawLines.length);\n}\n\nfunction terminalSupportsUnicode() {\n // The default command prompt and powershell in Windows do not support Unicode characters.\n // However, the VSCode integrated terminal and the Windows Terminal both do.\n return process.platform !== 'win32'\n || process.env.TERM_PROGRAM === 'vscode'\n || !!process.env.WT_SESSION\n}\n\nmodule.exports = {\n purgeSpinnersOptions,\n purgeSpinnerOptions,\n colorOptions,\n breakText,\n getLinesLength,\n writeStream,\n cleanStream,\n terminalSupportsUnicode,\n}\n", "'use strict';\n\nconst readline = require('readline');\nconst chalk = require('chalk');\nconst cliCursor = require('cli-cursor');\nconst { dashes, dots } = require('./spinners');\n\nconst { purgeSpinnerOptions, purgeSpinnersOptions, colorOptions, breakText, getLinesLength, terminalSupportsUnicode } = require('./utils');\nconst { isValidStatus, writeStream, cleanStream } = require('./utils');\n\nclass Spinnies {\n constructor(options = {}) {\n options = purgeSpinnersOptions(options);\n this.options = {\n spinnerColor: 'greenBright',\n succeedColor: 'green',\n failColor: 'red',\n spinner: terminalSupportsUnicode() ? dots : dashes,\n disableSpins: false,\n ...options\n };\n this.spinners = {};\n this.isCursorHidden = false;\n this.currentInterval = null;\n this.stream = process.stderr;\n this.lineCount = 0;\n this.currentFrameIndex = 0;\n this.spin = !this.options.disableSpins && !process.env.CI && process.stderr && process.stderr.isTTY;\n this.bindSigint();\n }\n\n pick(name) {\n return this.spinners[name];\n }\n\n add(name, options = {}) {\n if (typeof name !== 'string') throw Error('A spinner reference name must be specified');\n if (!options.text) options.text = name;\n const spinnerProperties = {\n ...colorOptions(this.options),\n succeedPrefix: this.options.succeedPrefix,\n failPrefix: this.options.failPrefix,\n status: 'spinning',\n ...purgeSpinnerOptions(options),\n };\n\n this.spinners[name] = spinnerProperties;\n this.updateSpinnerState();\n\n return spinnerProperties;\n }\n\n update(name, options = {}) {\n const { status } = options;\n this.setSpinnerProperties(name, options, status);\n this.updateSpinnerState();\n\n return this.spinners[name];\n }\n\n succeed(name, options = {}) {\n this.setSpinnerProperties(name, options, 'succeed');\n this.updateSpinnerState();\n\n return this.spinners[name];\n }\n\n fail(name, options = {}) {\n this.setSpinnerProperties(name, options, 'fail');\n this.updateSpinnerState();\n\n return this.spinners[name];\n }\n\n remove(name) {\n if (typeof name !== 'string') throw Error('A spinner reference name must be specified');\n const spinner = this.spinners[name];\n delete this.spinners[name];\n\n return spinner;\n }\n\n stopAll(newStatus = 'stopped') {\n Object.keys(this.spinners).forEach(name => {\n const { status: currentStatus } = this.spinners[name];\n if (currentStatus !== 'fail' && currentStatus !== 'succeed' && currentStatus !== 'non-spinnable') {\n if (newStatus === 'succeed' || newStatus === 'fail') {\n this.spinners[name].status = newStatus;\n this.spinners[name].color = this.options[`${newStatus}Color`];\n } else {\n this.spinners[name].status = 'stopped';\n this.spinners[name].color = 'grey';\n }\n }\n });\n this.checkIfActiveSpinners();\n\n return this.spinners;\n }\n\n hasActiveSpinners() {\n return !!Object.values(this.spinners).find(({ status }) => status === 'spinning');\n }\n\n setSpinnerProperties(name, options, status) {\n if (typeof name !== 'string') throw Error('A spinner reference name must be specified');\n if (!this.spinners[name]) throw Error(`No spinner initialized with name ${name}`);\n options = purgeSpinnerOptions(options);\n status = status || 'spinning';\n\n this.spinners[name] = { ...this.spinners[name], ...options, status };\n }\n\n updateSpinnerState(name, options = {}, status) {\n if (this.spin) {\n clearInterval(this.currentInterval);\n this.currentInterval = this.loopStream();\n if (!this.isCursorHidden) cliCursor.hide();\n this.isCursorHidden = true;\n this.checkIfActiveSpinners();\n } else {\n this.setRawStreamOutput();\n }\n }\n\n loopStream() {\n const { frames, interval } = this.options.spinner;\n return setInterval(() => {\n this.setStreamOutput(frames[this.currentFrameIndex]);\n this.currentFrameIndex = this.currentFrameIndex === frames.length - 1 ? 0 : ++this.currentFrameIndex\n }, interval);\n }\n\n setStreamOutput(frame = '') {\n let output = '';\n const linesLength = [];\n const hasActiveSpinners = this.hasActiveSpinners();\n Object\n .values(this.spinners)\n .map(({ text, status, color, spinnerColor, succeedColor, failColor, succeedPrefix, failPrefix, indent }) => {\n let line;\n let prefixLength = indent || 0;\n if (status === 'spinning') {\n prefixLength += frame.length + 1;\n text = breakText(text, prefixLength);\n line = `${chalk[spinnerColor](frame)} ${color ? chalk[color](text) : text}`;\n } else {\n if (status === 'succeed') {\n prefixLength += succeedPrefix.length + 1;\n if (hasActiveSpinners) text = breakText(text, prefixLength);\n line = `${chalk.green(succeedPrefix)} ${chalk[succeedColor](text)}`;\n } else if (status === 'fail') {\n prefixLength += failPrefix.length + 1;\n if (hasActiveSpinners) text = breakText(text, prefixLength);\n line = `${chalk.red(failPrefix)} ${chalk[failColor](text)}`;\n } else {\n if (hasActiveSpinners) text = breakText(text, prefixLength);\n line = color ? chalk[color](text) : text;\n }\n }\n linesLength.push(...getLinesLength(text, prefixLength));\n output += indent ? `${\" \".repeat(indent)}${line}\\n` : `${line}\\n`;\n });\n\n if(!hasActiveSpinners) readline.clearScreenDown(this.stream);\n writeStream(this.stream, output, linesLength);\n if (hasActiveSpinners) cleanStream(this.stream, linesLength);\n this.lineCount = linesLength.length;\n }\n\n setRawStreamOutput() {\n Object.values(this.spinners).forEach(i => {\n process.stderr.write(`- ${i.text}\\n`);\n });\n }\n\n checkIfActiveSpinners() {\n if (!this.hasActiveSpinners()) {\n if (this.spin) {\n this.setStreamOutput();\n readline.moveCursor(this.stream, 0, this.lineCount);\n clearInterval(this.currentInterval);\n this.isCursorHidden = false;\n cliCursor.show();\n }\n this.spinners = {};\n }\n }\n\n bindSigint(lines) {\n process.removeAllListeners('SIGINT');\n process.on('SIGINT', () => {\n cliCursor.show();\n readline.moveCursor(process.stderr, 0, this.lineCount);\n process.exit(0);\n });\n }\n}\n\nmodule.exports = Spinnies;\nmodule.exports.dots = dots;\nmodule.exports.dashes = dashes;\n", "'use strict';\n\nconst isHyper = process.env.TERM_PROGRAM === 'Hyper';\nconst isWindows = process.platform === 'win32';\nconst isLinux = process.platform === 'linux';\n\nconst common = {\n ballotDisabled: '\u2612',\n ballotOff: '\u2610',\n ballotOn: '\u2611',\n bullet: '\u2022',\n bulletWhite: '\u25E6',\n fullBlock: '\u2588',\n heart: '\u2764',\n identicalTo: '\u2261',\n line: '\u2500',\n mark: '\u203B',\n middot: '\u00B7',\n minus: '\uFF0D',\n multiplication: '\u00D7',\n obelus: '\u00F7',\n pencilDownRight: '\u270E',\n pencilRight: '\u270F',\n pencilUpRight: '\u2710',\n percent: '%',\n pilcrow2: '\u2761',\n pilcrow: '\u00B6',\n plusMinus: '\u00B1',\n section: '\u00A7',\n starsOff: '\u2606',\n starsOn: '\u2605',\n upDownArrow: '\u2195'\n};\n\nconst windows = Object.assign({}, common, {\n check: '\u221A',\n cross: '\u00D7',\n ellipsisLarge: '...',\n ellipsis: '...',\n info: 'i',\n question: '?',\n questionSmall: '?',\n pointer: '>',\n pointerSmall: '\u00BB',\n radioOff: '( )',\n radioOn: '(*)',\n warning: '\u203C'\n});\n\nconst other = Object.assign({}, common, {\n ballotCross: '\u2718',\n check: '\u2714',\n cross: '\u2716',\n ellipsisLarge: '\u22EF',\n ellipsis: '\u2026',\n info: '\u2139',\n question: '?',\n questionFull: '\uFF1F',\n questionSmall: '\uFE56',\n pointer: isLinux ? '\u25B8' : '\u276F',\n pointerSmall: isLinux ? '\u2023' : '\u203A',\n radioOff: '\u25EF',\n radioOn: '\u25C9',\n warning: '\u26A0'\n});\n\nmodule.exports = (isWindows && !isHyper) ? windows : other;\nReflect.defineProperty(module.exports, 'common', { enumerable: false, value: common });\nReflect.defineProperty(module.exports, 'windows', { enumerable: false, value: windows });\nReflect.defineProperty(module.exports, 'other', { enumerable: false, value: other });\n", "'use strict';\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nconst identity = val => val;\n\n/* eslint-disable no-control-regex */\n// this is a modified version of https://github.com/chalk/ansi-regex (MIT License)\nconst ANSI_REGEX = /[\\u001b\\u009b][[\\]#;?()]*(?:(?:(?:[^\\W_]*;?[^\\W_]*)\\u0007)|(?:(?:[0-9]{1,4}(;[0-9]{0,4})*)?[~0-9=<>cf-nqrtyA-PRZ]))/g;\n\nconst create = () => {\n const colors = { enabled: true, visible: true, styles: {}, keys: {} };\n\n if ('FORCE_COLOR' in process.env) {\n colors.enabled = process.env.FORCE_COLOR !== '0';\n }\n\n const ansi = style => {\n let open = style.open = `\\u001b[${style.codes[0]}m`;\n let close = style.close = `\\u001b[${style.codes[1]}m`;\n let regex = style.regex = new RegExp(`\\\\u001b\\\\[${style.codes[1]}m`, 'g');\n style.wrap = (input, newline) => {\n if (input.includes(close)) input = input.replace(regex, close + open);\n let output = open + input + close;\n // see https://github.com/chalk/chalk/pull/92, thanks to the\n // chalk contributors for this fix. However, we've confirmed that\n // this issue is also present in Windows terminals\n return newline ? output.replace(/\\r*\\n/g, `${close}$&${open}`) : output;\n };\n return style;\n };\n\n const wrap = (style, input, newline) => {\n return typeof style === 'function' ? style(input) : style.wrap(input, newline);\n };\n\n const style = (input, stack) => {\n if (input === '' || input == null) return '';\n if (colors.enabled === false) return input;\n if (colors.visible === false) return '';\n let str = '' + input;\n let nl = str.includes('\\n');\n let n = stack.length;\n if (n > 0 && stack.includes('unstyle')) {\n stack = [...new Set(['unstyle', ...stack])].reverse();\n }\n while (n-- > 0) str = wrap(colors.styles[stack[n]], str, nl);\n return str;\n };\n\n const define = (name, codes, type) => {\n colors.styles[name] = ansi({ name, codes });\n let keys = colors.keys[type] || (colors.keys[type] = []);\n keys.push(name);\n\n Reflect.defineProperty(colors, name, {\n configurable: true,\n enumerable: true,\n set(value) {\n colors.alias(name, value);\n },\n get() {\n let color = input => style(input, color.stack);\n Reflect.setPrototypeOf(color, colors);\n color.stack = this.stack ? this.stack.concat(name) : [name];\n return color;\n }\n });\n };\n\n define('reset', [0, 0], 'modifier');\n define('bold', [1, 22], 'modifier');\n define('dim', [2, 22], 'modifier');\n define('italic', [3, 23], 'modifier');\n define('underline', [4, 24], 'modifier');\n define('inverse', [7, 27], 'modifier');\n define('hidden', [8, 28], 'modifier');\n define('strikethrough', [9, 29], 'modifier');\n\n define('black', [30, 39], 'color');\n define('red', [31, 39], 'color');\n define('green', [32, 39], 'color');\n define('yellow', [33, 39], 'color');\n define('blue', [34, 39], 'color');\n define('magenta', [35, 39], 'color');\n define('cyan', [36, 39], 'color');\n define('white', [37, 39], 'color');\n define('gray', [90, 39], 'color');\n define('grey', [90, 39], 'color');\n\n define('bgBlack', [40, 49], 'bg');\n define('bgRed', [41, 49], 'bg');\n define('bgGreen', [42, 49], 'bg');\n define('bgYellow', [43, 49], 'bg');\n define('bgBlue', [44, 49], 'bg');\n define('bgMagenta', [45, 49], 'bg');\n define('bgCyan', [46, 49], 'bg');\n define('bgWhite', [47, 49], 'bg');\n\n define('blackBright', [90, 39], 'bright');\n define('redBright', [91, 39], 'bright');\n define('greenBright', [92, 39], 'bright');\n define('yellowBright', [93, 39], 'bright');\n define('blueBright', [94, 39], 'bright');\n define('magentaBright', [95, 39], 'bright');\n define('cyanBright', [96, 39], 'bright');\n define('whiteBright', [97, 39], 'bright');\n\n define('bgBlackBright', [100, 49], 'bgBright');\n define('bgRedBright', [101, 49], 'bgBright');\n define('bgGreenBright', [102, 49], 'bgBright');\n define('bgYellowBright', [103, 49], 'bgBright');\n define('bgBlueBright', [104, 49], 'bgBright');\n define('bgMagentaBright', [105, 49], 'bgBright');\n define('bgCyanBright', [106, 49], 'bgBright');\n define('bgWhiteBright', [107, 49], 'bgBright');\n\n colors.ansiRegex = ANSI_REGEX;\n colors.hasColor = colors.hasAnsi = str => {\n colors.ansiRegex.lastIndex = 0;\n return typeof str === 'string' && str !== '' && colors.ansiRegex.test(str);\n };\n\n colors.alias = (name, color) => {\n let fn = typeof color === 'string' ? colors[color] : color;\n\n if (typeof fn !== 'function') {\n throw new TypeError('Expected alias to be the name of an existing color (string) or a function');\n }\n\n if (!fn.stack) {\n Reflect.defineProperty(fn, 'name', { value: name });\n colors.styles[name] = fn;\n fn.stack = [name];\n }\n\n Reflect.defineProperty(colors, name, {\n configurable: true,\n enumerable: true,\n set(value) {\n colors.alias(name, value);\n },\n get() {\n let color = input => style(input, color.stack);\n Reflect.setPrototypeOf(color, colors);\n color.stack = this.stack ? this.stack.concat(fn.stack) : fn.stack;\n return color;\n }\n });\n };\n\n colors.theme = custom => {\n if (!isObject(custom)) throw new TypeError('Expected theme to be an object');\n for (let name of Object.keys(custom)) {\n colors.alias(name, custom[name]);\n }\n return colors;\n };\n\n colors.alias('unstyle', str => {\n if (typeof str === 'string' && str !== '') {\n colors.ansiRegex.lastIndex = 0;\n return str.replace(colors.ansiRegex, '');\n }\n return '';\n });\n\n colors.alias('noop', str => str);\n colors.none = colors.clear = colors.noop;\n\n colors.stripColor = colors.unstyle;\n colors.symbols = require('./symbols');\n colors.define = define;\n return colors;\n};\n\nmodule.exports = create();\nmodule.exports.create = create;\n", "'use strict';\n\nconst toString = Object.prototype.toString;\nconst colors = require('ansi-colors');\nlet called = false;\nlet fns = [];\n\nconst complements = {\n 'yellow': 'blue',\n 'cyan': 'red',\n 'green': 'magenta',\n 'black': 'white',\n 'blue': 'yellow',\n 'red': 'cyan',\n 'magenta': 'green',\n 'white': 'black'\n};\n\nexports.longest = (arr, prop) => {\n return arr.reduce((a, v) => Math.max(a, prop ? v[prop].length : v.length), 0);\n};\n\nexports.hasColor = str => !!str && colors.hasColor(str);\n\nconst isObject = exports.isObject = val => {\n return val !== null && typeof val === 'object' && !Array.isArray(val);\n};\n\nexports.nativeType = val => {\n return toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n};\n\nexports.isAsyncFn = val => {\n return exports.nativeType(val) === 'asyncfunction';\n};\n\nexports.isPrimitive = val => {\n return val != null && typeof val !== 'object' && typeof val !== 'function';\n};\n\nexports.resolve = (context, value, ...rest) => {\n if (typeof value === 'function') {\n return value.call(context, ...rest);\n }\n return value;\n};\n\nexports.scrollDown = (choices = []) => [...choices.slice(1), choices[0]];\nexports.scrollUp = (choices = []) => [choices.pop(), ...choices];\n\nexports.reorder = (arr = []) => {\n let res = arr.slice();\n res.sort((a, b) => {\n if (a.index > b.index) return 1;\n if (a.index < b.index) return -1;\n return 0;\n });\n return res;\n};\n\nexports.swap = (arr, index, pos) => {\n let len = arr.length;\n let idx = pos === len ? 0 : pos < 0 ? len - 1 : pos;\n let choice = arr[index];\n arr[index] = arr[idx];\n arr[idx] = choice;\n};\n\nexports.width = (stream, fallback = 80) => {\n let columns = (stream && stream.columns) ? stream.columns : fallback;\n if (stream && typeof stream.getWindowSize === 'function') {\n columns = stream.getWindowSize()[0];\n }\n if (process.platform === 'win32') {\n return columns - 1;\n }\n return columns;\n};\n\nexports.height = (stream, fallback = 20) => {\n let rows = (stream && stream.rows) ? stream.rows : fallback;\n if (stream && typeof stream.getWindowSize === 'function') {\n rows = stream.getWindowSize()[1];\n }\n return rows;\n};\n\nexports.wordWrap = (str, options = {}) => {\n if (!str) return str;\n\n if (typeof options === 'number') {\n options = { width: options };\n }\n\n let { indent = '', newline = ('\\n' + indent), width = 80 } = options;\n let spaces = (newline + indent).match(/[^\\S\\n]/g) || [];\n width -= spaces.length;\n let source = `.{1,${width}}([\\\\s\\\\u200B]+|$)|[^\\\\s\\\\u200B]+?([\\\\s\\\\u200B]+|$)`;\n let output = str.trim();\n let regex = new RegExp(source, 'g');\n let lines = output.match(regex) || [];\n lines = lines.map(line => line.replace(/\\n$/, ''));\n if (options.padEnd) lines = lines.map(line => line.padEnd(width, ' '));\n if (options.padStart) lines = lines.map(line => line.padStart(width, ' '));\n return indent + lines.join(newline);\n};\n\nexports.unmute = color => {\n let name = color.stack.find(n => colors.keys.color.includes(n));\n if (name) {\n return colors[name];\n }\n let bg = color.stack.find(n => n.slice(2) === 'bg');\n if (bg) {\n return colors[name.slice(2)];\n }\n return str => str;\n};\n\nexports.pascal = str => str ? str[0].toUpperCase() + str.slice(1) : '';\n\nexports.inverse = color => {\n if (!color || !color.stack) return color;\n let name = color.stack.find(n => colors.keys.color.includes(n));\n if (name) {\n let col = colors['bg' + exports.pascal(name)];\n return col ? col.black : color;\n }\n let bg = color.stack.find(n => n.slice(0, 2) === 'bg');\n if (bg) {\n return colors[bg.slice(2).toLowerCase()] || color;\n }\n return colors.none;\n};\n\nexports.complement = color => {\n if (!color || !color.stack) return color;\n let name = color.stack.find(n => colors.keys.color.includes(n));\n let bg = color.stack.find(n => n.slice(0, 2) === 'bg');\n if (name && !bg) {\n return colors[complements[name] || name];\n }\n if (bg) {\n let lower = bg.slice(2).toLowerCase();\n let comp = complements[lower];\n if (!comp) return color;\n return colors['bg' + exports.pascal(comp)] || color;\n }\n return colors.none;\n};\n\nexports.meridiem = date => {\n let hours = date.getHours();\n let minutes = date.getMinutes();\n let ampm = hours >= 12 ? 'pm' : 'am';\n hours = hours % 12;\n let hrs = hours === 0 ? 12 : hours;\n let min = minutes < 10 ? '0' + minutes : minutes;\n return hrs + ':' + min + ' ' + ampm;\n};\n\n/**\n * Set a value on the given object.\n * @param {Object} obj\n * @param {String} prop\n * @param {any} value\n */\n\nexports.set = (obj = {}, prop = '', val) => {\n return prop.split('.').reduce((acc, k, i, arr) => {\n let value = arr.length - 1 > i ? (acc[k] || {}) : val;\n if (!exports.isObject(value) && i < arr.length - 1) value = {};\n return (acc[k] = value);\n }, obj);\n};\n\n/**\n * Get a value from the given object.\n * @param {Object} obj\n * @param {String} prop\n */\n\nexports.get = (obj = {}, prop = '', fallback) => {\n let value = obj[prop] == null\n ? prop.split('.').reduce((acc, k) => acc && acc[k], obj)\n : obj[prop];\n return value == null ? fallback : value;\n};\n\nexports.mixin = (target, b) => {\n if (!isObject(target)) return b;\n if (!isObject(b)) return target;\n for (let key of Object.keys(b)) {\n let desc = Object.getOwnPropertyDescriptor(b, key);\n if (desc.hasOwnProperty('value')) {\n if (target.hasOwnProperty(key) && isObject(desc.value)) {\n let existing = Object.getOwnPropertyDescriptor(target, key);\n if (isObject(existing.value)) {\n target[key] = exports.merge({}, target[key], b[key]);\n } else {\n Reflect.defineProperty(target, key, desc);\n }\n } else {\n Reflect.defineProperty(target, key, desc);\n }\n } else {\n Reflect.defineProperty(target, key, desc);\n }\n }\n return target;\n};\n\nexports.merge = (...args) => {\n let target = {};\n for (let ele of args) exports.mixin(target, ele);\n return target;\n};\n\nexports.mixinEmitter = (obj, emitter) => {\n let proto = emitter.constructor.prototype;\n for (let key of Object.keys(proto)) {\n let val = proto[key];\n if (typeof val === 'function') {\n exports.define(obj, key, val.bind(emitter));\n } else {\n exports.define(obj, key, val);\n }\n }\n};\n\nexports.onExit = callback => {\n const onExit = (quit, code) => {\n if (called) return;\n\n called = true;\n fns.forEach(fn => fn());\n\n if (quit === true) {\n process.exit(128 + code);\n }\n };\n\n if (fns.length === 0) {\n process.once('SIGTERM', onExit.bind(null, true, 15));\n process.once('SIGINT', onExit.bind(null, true, 2));\n process.once('exit', onExit);\n }\n\n fns.push(callback);\n};\n\nexports.define = (obj, key, value) => {\n Reflect.defineProperty(obj, key, { value });\n};\n\nexports.defineExport = (obj, key, fn) => {\n let custom;\n Reflect.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n set(val) {\n custom = val;\n },\n get() {\n return custom ? custom() : fn();\n }\n });\n};\n", "'use strict';\n\n/**\n * Actions are mappings from keypress event names to method names\n * in the prompts.\n */\n\nexports.ctrl = {\n a: 'first',\n b: 'backward',\n c: 'cancel',\n d: 'deleteForward',\n e: 'last',\n f: 'forward',\n g: 'reset',\n i: 'tab',\n k: 'cutForward',\n l: 'reset',\n n: 'newItem',\n m: 'cancel',\n j: 'submit',\n p: 'search',\n r: 'remove',\n s: 'save',\n u: 'undo',\n w: 'cutLeft',\n x: 'toggleCursor',\n v: 'paste'\n};\n\nexports.shift = {\n up: 'shiftUp',\n down: 'shiftDown',\n left: 'shiftLeft',\n right: 'shiftRight',\n tab: 'prev'\n};\n\nexports.fn = {\n up: 'pageUp',\n down: 'pageDown',\n left: 'pageLeft',\n right: 'pageRight',\n delete: 'deleteForward'\n};\n\n// <alt> on Windows\nexports.option = {\n b: 'backward',\n f: 'forward',\n d: 'cutRight',\n left: 'cutLeft',\n up: 'altUp',\n down: 'altDown'\n};\n\nexports.keys = {\n pageup: 'pageUp', // <fn>+<up> (mac), <Page Up> (windows)\n pagedown: 'pageDown', // <fn>+<down> (mac), <Page Down> (windows)\n home: 'home', // <fn>+<left> (mac), <home> (windows)\n end: 'end', // <fn>+<right> (mac), <end> (windows)\n cancel: 'cancel',\n delete: 'deleteForward',\n backspace: 'delete',\n down: 'down',\n enter: 'submit',\n escape: 'cancel',\n left: 'left',\n space: 'space',\n number: 'number',\n return: 'submit',\n right: 'right',\n tab: 'next',\n up: 'up'\n};\n", "'use strict';\n\nconst readline = require('readline');\nconst combos = require('./combos');\n\n/* eslint-disable no-control-regex */\nconst metaKeyCodeRe = /^(?:\\x1b)([a-zA-Z0-9])$/;\nconst fnKeyRe = /^(?:\\x1b+)(O|N|\\[|\\[\\[)(?:(\\d+)(?:;(\\d+))?([~^$])|(?:1;)?(\\d+)?([a-zA-Z]))/;\nconst keyName = {\n /* xterm/gnome ESC O letter */\n 'OP': 'f1',\n 'OQ': 'f2',\n 'OR': 'f3',\n 'OS': 'f4',\n /* xterm/rxvt ESC [ number ~ */\n '[11~': 'f1',\n '[12~': 'f2',\n '[13~': 'f3',\n '[14~': 'f4',\n /* from Cygwin and used in libuv */\n '[[A': 'f1',\n '[[B': 'f2',\n '[[C': 'f3',\n '[[D': 'f4',\n '[[E': 'f5',\n /* common */\n '[15~': 'f5',\n '[17~': 'f6',\n '[18~': 'f7',\n '[19~': 'f8',\n '[20~': 'f9',\n '[21~': 'f10',\n '[23~': 'f11',\n '[24~': 'f12',\n /* xterm ESC [ letter */\n '[A': 'up',\n '[B': 'down',\n '[C': 'right',\n '[D': 'left',\n '[E': 'clear',\n '[F': 'end',\n '[H': 'home',\n /* xterm/gnome ESC O letter */\n 'OA': 'up',\n 'OB': 'down',\n 'OC': 'right',\n 'OD': 'left',\n 'OE': 'clear',\n 'OF': 'end',\n 'OH': 'home',\n /* xterm/rxvt ESC [ number ~ */\n '[1~': 'home',\n '[2~': 'insert',\n '[3~': 'delete',\n '[4~': 'end',\n '[5~': 'pageup',\n '[6~': 'pagedown',\n /* putty */\n '[[5~': 'pageup',\n '[[6~': 'pagedown',\n /* rxvt */\n '[7~': 'home',\n '[8~': 'end',\n /* rxvt keys with modifiers */\n '[a': 'up',\n '[b': 'down',\n '[c': 'right',\n '[d': 'left',\n '[e': 'clear',\n\n '[2$': 'insert',\n '[3$': 'delete',\n '[5$': 'pageup',\n '[6$': 'pagedown',\n '[7$': 'home',\n '[8$': 'end',\n\n 'Oa': 'up',\n 'Ob': 'down',\n 'Oc': 'right',\n 'Od': 'left',\n 'Oe': 'clear',\n\n '[2^': 'insert',\n '[3^': 'delete',\n '[5^': 'pageup',\n '[6^': 'pagedown',\n '[7^': 'home',\n '[8^': 'end',\n /* misc. */\n '[Z': 'tab',\n}\n\nfunction isShiftKey(code) {\n return ['[a', '[b', '[c', '[d', '[e', '[2$', '[3$', '[5$', '[6$', '[7$', '[8$', '[Z'].includes(code)\n}\n\nfunction isCtrlKey(code) {\n return [ 'Oa', 'Ob', 'Oc', 'Od', 'Oe', '[2^', '[3^', '[5^', '[6^', '[7^', '[8^'].includes(code)\n}\n\nconst keypress = (s = '', event = {}) => {\n let parts;\n let key = {\n name: event.name,\n ctrl: false,\n meta: false,\n shift: false,\n option: false,\n sequence: s,\n raw: s,\n ...event\n };\n\n if (Buffer.isBuffer(s)) {\n if (s[0] > 127 && s[1] === void 0) {\n s[0] -= 128;\n s = '\\x1b' + String(s);\n } else {\n s = String(s);\n }\n } else if (s !== void 0 && typeof s !== 'string') {\n s = String(s);\n } else if (!s) {\n s = key.sequence || '';\n }\n\n key.sequence = key.sequence || s || key.name;\n\n if (s === '\\r') {\n // carriage return\n key.raw = void 0;\n key.name = 'return';\n } else if (s === '\\n') {\n // enter, should have been called linefeed\n key.name = 'enter';\n } else if (s === '\\t') {\n // tab\n key.name = 'tab';\n } else if (s === '\\b' || s === '\\x7f' || s === '\\x1b\\x7f' || s === '\\x1b\\b') {\n // backspace or ctrl+h\n key.name = 'backspace';\n key.meta = s.charAt(0) === '\\x1b';\n } else if (s === '\\x1b' || s === '\\x1b\\x1b') {\n // escape key\n key.name = 'escape';\n key.meta = s.length === 2;\n } else if (s === ' ' || s === '\\x1b ') {\n key.name = 'space';\n key.meta = s.length === 2;\n } else if (s <= '\\x1a') {\n // ctrl+letter\n key.name = String.fromCharCode(s.charCodeAt(0) + 'a'.charCodeAt(0) - 1);\n key.ctrl = true;\n } else if (s.length === 1 && s >= '0' && s <= '9') {\n // number\n key.name = 'number';\n } else if (s.length === 1 && s >= 'a' && s <= 'z') {\n // lowercase letter\n key.name = s;\n } else if (s.length === 1 && s >= 'A' && s <= 'Z') {\n // shift+letter\n key.name = s.toLowerCase();\n key.shift = true;\n } else if ((parts = metaKeyCodeRe.exec(s))) {\n // meta+character key\n key.meta = true;\n key.shift = /^[A-Z]$/.test(parts[1]);\n } else if ((parts = fnKeyRe.exec(s))) {\n let segs = [...s];\n\n if (segs[0] === '\\u001b' && segs[1] === '\\u001b') {\n key.option = true;\n }\n\n // ansi escape sequence\n // reassemble the key code leaving out leading \\x1b's,\n // the modifier key bitflag and any meaningless \"1;\" sequence\n let code = [parts[1], parts[2], parts[4], parts[6]].filter(Boolean).join('');\n let modifier = (parts[3] || parts[5] || 1) - 1;\n\n // Parse the key modifier\n key.ctrl = !!(modifier & 4);\n key.meta = !!(modifier & 10);\n key.shift = !!(modifier & 1);\n key.code = code;\n\n key.name = keyName[code];\n key.shift = isShiftKey(code) || key.shift;\n key.ctrl = isCtrlKey(code) || key.ctrl;\n }\n return key;\n};\n\nkeypress.listen = (options = {}, onKeypress) => {\n let { stdin } = options;\n\n if (!stdin || (stdin !== process.stdin && !stdin.isTTY)) {\n throw new Error('Invalid stream passed');\n }\n\n let rl = readline.createInterface({ terminal: true, input: stdin });\n readline.emitKeypressEvents(stdin, rl);\n\n let on = (buf, key) => onKeypress(buf, keypress(buf, key), rl);\n let isRaw = stdin.isRaw;\n\n if (stdin.isTTY) stdin.setRawMode(true);\n stdin.on('keypress', on);\n rl.resume();\n\n let off = () => {\n if (stdin.isTTY) stdin.setRawMode(isRaw);\n stdin.removeListener('keypress', on);\n rl.pause();\n rl.close();\n };\n\n return off;\n};\n\nkeypress.action = (buf, key, customActions) => {\n let obj = { ...combos, ...customActions };\n if (key.ctrl) {\n key.action = obj.ctrl[key.name];\n return key;\n }\n\n if (key.option && obj.option) {\n key.action = obj.option[key.name];\n return key;\n }\n\n if (key.shift) {\n key.action = obj.shift[key.name];\n return key;\n }\n\n key.action = obj.keys[key.name];\n return key;\n};\n\nmodule.exports = keypress;\n", "'use strict';\n\nmodule.exports = prompt => {\n prompt.timers = prompt.timers || {};\n\n let timers = prompt.options.timers;\n if (!timers) return;\n\n for (let key of Object.keys(timers)) {\n let opts = timers[key];\n if (typeof opts === 'number') {\n opts = { interval: opts };\n }\n create(prompt, key, opts);\n }\n};\n\nfunction create(prompt, name, options = {}) {\n let timer = prompt.timers[name] = { name, start: Date.now(), ms: 0, tick: 0 };\n let ms = options.interval || 120;\n timer.frames = options.frames || [];\n timer.loading = true;\n\n let interval = setInterval(() => {\n timer.ms = Date.now() - timer.start;\n timer.tick++;\n prompt.render();\n }, ms);\n\n timer.stop = () => {\n timer.loading = false;\n clearInterval(interval);\n };\n\n Reflect.defineProperty(timer, 'interval', { value: interval });\n prompt.once('close', () => timer.stop());\n return timer.stop;\n}\n", "'use strict';\n\nconst { define, width } = require('./utils');\n\nclass State {\n constructor(prompt) {\n let options = prompt.options;\n define(this, '_prompt', prompt);\n this.type = prompt.type;\n this.name = prompt.name;\n this.message = '';\n this.header = '';\n this.footer = '';\n this.error = '';\n this.hint = '';\n this.input = '';\n this.cursor = 0;\n this.index = 0;\n this.lines = 0;\n this.tick = 0;\n this.prompt = '';\n this.buffer = '';\n this.width = width(options.stdout || process.stdout);\n Object.assign(this, options);\n this.name = this.name || this.message;\n this.message = this.message || this.name;\n this.symbols = prompt.symbols;\n this.styles = prompt.styles;\n this.required = new Set();\n this.cancelled = false;\n this.submitted = false;\n }\n\n clone() {\n let state = { ...this };\n state.status = this.status;\n state.buffer = Buffer.from(state.buffer);\n delete state.clone;\n return state;\n }\n\n set color(val) {\n this._color = val;\n }\n get color() {\n let styles = this.prompt.styles;\n if (this.cancelled) return styles.cancelled;\n if (this.submitted) return styles.submitted;\n let color = this._color || styles[this.status];\n return typeof color === 'function' ? color : styles.pending;\n }\n\n set loading(value) {\n this._loading = value;\n }\n get loading() {\n if (typeof this._loading === 'boolean') return this._loading;\n if (this.loadingChoices) return 'choices';\n return false;\n }\n\n get status() {\n if (this.cancelled) return 'cancelled';\n if (this.submitted) return 'submitted';\n return 'pending';\n }\n}\n\nmodule.exports = State;\n", "'use strict';\n\nconst utils = require('./utils');\nconst colors = require('ansi-colors');\n\nconst styles = {\n default: colors.noop,\n noop: colors.noop,\n\n /**\n * Modifiers\n */\n\n set inverse(custom) {\n this._inverse = custom;\n },\n get inverse() {\n return this._inverse || utils.inverse(this.primary);\n },\n\n set complement(custom) {\n this._complement = custom;\n },\n get complement() {\n return this._complement || utils.complement(this.primary);\n },\n\n /**\n * Main color\n */\n\n primary: colors.cyan,\n\n /**\n * Main palette\n */\n\n success: colors.green,\n danger: colors.magenta,\n strong: colors.bold,\n warning: colors.yellow,\n muted: colors.dim,\n disabled: colors.gray,\n dark: colors.dim.gray,\n underline: colors.underline,\n\n set info(custom) {\n this._info = custom;\n },\n get info() {\n return this._info || this.primary;\n },\n\n set em(custom) {\n this._em = custom;\n },\n get em() {\n return this._em || this.primary.underline;\n },\n\n set heading(custom) {\n this._heading = custom;\n },\n get heading() {\n return this._heading || this.muted.underline;\n },\n\n /**\n * Statuses\n */\n\n set pending(custom) {\n this._pending = custom;\n },\n get pending() {\n return this._pending || this.primary;\n },\n\n set submitted(custom) {\n this._submitted = custom;\n },\n get submitted() {\n return this._submitted || this.success;\n },\n\n set cancelled(custom) {\n this._cancelled = custom;\n },\n get cancelled() {\n return this._cancelled || this.danger;\n },\n\n /**\n * Special styling\n */\n\n set typing(custom) {\n this._typing = custom;\n },\n get typing() {\n return this._typing || this.dim;\n },\n\n set placeholder(custom) {\n this._placeholder = custom;\n },\n get placeholder() {\n return this._placeholder || this.primary.dim;\n },\n\n set highlight(custom) {\n this._highlight = custom;\n },\n get highlight() {\n return this._highlight || this.inverse;\n }\n};\n\nstyles.merge = (options = {}) => {\n if (options.styles && typeof options.styles.enabled === 'boolean') {\n colors.enabled = options.styles.enabled;\n }\n if (options.styles && typeof options.styles.visible === 'boolean') {\n colors.visible = options.styles.visible;\n }\n\n let result = utils.merge({}, styles, options.styles);\n delete result.merge;\n\n for (let key of Object.keys(colors)) {\n if (!result.hasOwnProperty(key)) {\n Reflect.defineProperty(result, key, { get: () => colors[key] });\n }\n }\n\n for (let key of Object.keys(colors.styles)) {\n if (!result.hasOwnProperty(key)) {\n Reflect.defineProperty(result, key, { get: () => colors[key] });\n }\n }\n return result;\n};\n\nmodule.exports = styles;\n", "'use strict';\n\nconst isWindows = process.platform === 'win32';\nconst colors = require('ansi-colors');\nconst utils = require('./utils');\n\nconst symbols = {\n ...colors.symbols,\n upDownDoubleArrow: '\u21D5',\n upDownDoubleArrow2: '\u2B0D',\n upDownArrow: '\u2195',\n asterisk: '*',\n asterism: '\u2042',\n bulletWhite: '\u25E6',\n electricArrow: '\u2301',\n ellipsisLarge: '\u22EF',\n ellipsisSmall: '\u2026',\n fullBlock: '\u2588',\n identicalTo: '\u2261',\n indicator: colors.symbols.check,\n leftAngle: '\u2039',\n mark: '\u203B',\n minus: '\u2212',\n multiplication: '\u00D7',\n obelus: '\u00F7',\n percent: '%',\n pilcrow: '\u00B6',\n pilcrow2: '\u2761',\n pencilUpRight: '\u2710',\n pencilDownRight: '\u270E',\n pencilRight: '\u270F',\n plus: '+',\n plusMinus: '\u00B1',\n pointRight: '\u261E',\n rightAngle: '\u203A',\n section: '\u00A7',\n hexagon: { off: '\u2B21', on: '\u2B22', disabled: '\u2B22' },\n ballot: { on: '\u2611', off: '\u2610', disabled: '\u2612' },\n stars: { on: '\u2605', off: '\u2606', disabled: '\u2606' },\n folder: { on: '\u25BC', off: '\u25B6', disabled: '\u25B6' },\n prefix: {\n pending: colors.symbols.question,\n submitted: colors.symbols.check,\n cancelled: colors.symbols.cross\n },\n separator: {\n pending: colors.symbols.pointerSmall,\n submitted: colors.symbols.middot,\n cancelled: colors.symbols.middot\n },\n radio: {\n off: isWindows ? '( )' : '\u25EF',\n on: isWindows ? '(*)' : '\u25C9',\n disabled: isWindows ? '(|)' : '\u24BE'\n },\n numbers: ['\u24EA', '\u2460', '\u2461', '\u2462', '\u2463', '\u2464', '\u2465', '\u2466', '\u2467', '\u2468', '\u2469', '\u246A', '\u246B', '\u246C', '\u246D', '\u246E', '\u246F', '\u2470', '\u2471', '\u2472', '\u2473', '\u3251', '\u3252', '\u3253', '\u3254', '\u3255', '\u3256', '\u3257', '\u3258', '\u3259', '\u325A', '\u325B', '\u325C', '\u325D', '\u325E', '\u325F', '\u32B1', '\u32B2', '\u32B3', '\u32B4', '\u32B5', '\u32B6', '\u32B7', '\u32B8', '\u32B9', '\u32BA', '\u32BB', '\u32BC', '\u32BD', '\u32BE', '\u32BF']\n};\n\nsymbols.merge = options => {\n let result = utils.merge({}, colors.symbols, symbols, options.symbols);\n delete result.merge;\n return result;\n};\n\nmodule.exports = symbols;\n\n", "'use strict';\n\nconst styles = require('./styles');\nconst symbols = require('./symbols');\nconst utils = require('./utils');\n\nmodule.exports = prompt => {\n prompt.options = utils.merge({}, prompt.options.theme, prompt.options);\n prompt.symbols = symbols.merge(prompt.options);\n prompt.styles = styles.merge(prompt.options);\n};\n", "'use strict';\n\nconst isTerm = process.env.TERM_PROGRAM === 'Apple_Terminal';\nconst colors = require('ansi-colors');\nconst utils = require('./utils');\nconst ansi = module.exports = exports;\nconst ESC = '\\u001b[';\nconst BEL = '\\u0007';\nlet hidden = false;\n\nconst code = ansi.code = {\n bell: BEL,\n beep: BEL,\n beginning: `${ESC}G`,\n down: `${ESC}J`,\n esc: ESC,\n getPosition: `${ESC}6n`,\n hide: `${ESC}?25l`,\n line: `${ESC}2K`,\n lineEnd: `${ESC}K`,\n lineStart: `${ESC}1K`,\n restorePosition: ESC + (isTerm ? '8' : 'u'),\n savePosition: ESC + (isTerm ? '7' : 's'),\n screen: `${ESC}2J`,\n show: `${ESC}?25h`,\n up: `${ESC}1J`\n};\n\nconst cursor = ansi.cursor = {\n get hidden() {\n return hidden;\n },\n\n hide() {\n hidden = true;\n return code.hide;\n },\n show() {\n hidden = false;\n return code.show;\n },\n\n forward: (count = 1) => `${ESC}${count}C`,\n backward: (count = 1) => `${ESC}${count}D`,\n nextLine: (count = 1) => `${ESC}E`.repeat(count),\n prevLine: (count = 1) => `${ESC}F`.repeat(count),\n\n up: (count = 1) => count ? `${ESC}${count}A` : '',\n down: (count = 1) => count ? `${ESC}${count}B` : '',\n right: (count = 1) => count ? `${ESC}${count}C` : '',\n left: (count = 1) => count ? `${ESC}${count}D` : '',\n\n to(x, y) {\n return y ? `${ESC}${y + 1};${x + 1}H` : `${ESC}${x + 1}G`;\n },\n\n move(x = 0, y = 0) {\n let res = '';\n res += (x < 0) ? cursor.left(-x) : (x > 0) ? cursor.right(x) : '';\n res += (y < 0) ? cursor.up(-y) : (y > 0) ? cursor.down(y) : '';\n return res;\n },\n\n restore(state = {}) {\n let { after, cursor, initial, input, prompt, size, value } = state;\n initial = utils.isPrimitive(initial) ? String(initial) : '';\n input = utils.isPrimitive(input) ? String(input) : '';\n value = utils.isPrimitive(value) ? String(value) : '';\n\n if (size) {\n let codes = ansi.cursor.up(size) + ansi.cursor.to(prompt.length);\n let diff = input.length - cursor;\n if (diff > 0) {\n codes += ansi.cursor.left(diff);\n }\n return codes;\n }\n\n if (value || after) {\n let pos = (!input && !!initial) ? -initial.length : -input.length + cursor;\n if (after) pos -= after.length;\n if (input === '' && initial && !prompt.includes(initial)) {\n pos += initial.length;\n }\n return ansi.cursor.move(pos);\n }\n }\n};\n\nconst erase = ansi.erase = {\n screen: code.screen,\n up: code.up,\n down: code.down,\n line: code.line,\n lineEnd: code.lineEnd,\n lineStart: code.lineStart,\n lines(n) {\n let str = '';\n for (let i = 0; i < n; i++) {\n str += ansi.erase.line + (i < n - 1 ? ansi.cursor.up(1) : '');\n }\n if (n) str += ansi.code.beginning;\n return str;\n }\n};\n\nansi.clear = (input = '', columns = process.stdout.columns) => {\n if (!columns) return erase.line + cursor.to(0);\n let width = str => [...colors.unstyle(str)].length;\n let lines = input.split(/\\r?\\n/);\n let rows = 0;\n for (let line of lines) {\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / columns);\n }\n return (erase.line + cursor.prevLine()).repeat(rows - 1) + erase.line + cursor.to(0);\n};\n", "'use strict';\n\nconst Events = require('events');\nconst colors = require('ansi-colors');\nconst keypress = require('./keypress');\nconst timer = require('./timer');\nconst State = require('./state');\nconst theme = require('./theme');\nconst utils = require('./utils');\nconst ansi = require('./ansi');\n\n/**\n * Base class for creating a new Prompt.\n * @param {Object} `options` Question object.\n */\n\nclass Prompt extends Events {\n constructor(options = {}) {\n super();\n this.name = options.name;\n this.type = options.type;\n this.options = options;\n theme(this);\n timer(this);\n this.state = new State(this);\n this.initial = [options.initial, options.default].find(v => v != null);\n this.stdout = options.stdout || process.stdout;\n this.stdin = options.stdin || process.stdin;\n this.scale = options.scale || 1;\n this.term = this.options.term || process.env.TERM_PROGRAM;\n this.margin = margin(this.options.margin);\n this.setMaxListeners(0);\n setOptions(this);\n }\n\n async keypress(input, event = {}) {\n this.keypressed = true;\n let key = keypress.action(input, keypress(input, event), this.options.actions);\n this.state.keypress = key;\n this.emit('keypress', input, key);\n this.emit('state', this.state.clone());\n let fn = this.options[key.action] || this[key.action] || this.dispatch;\n if (typeof fn === 'function') {\n return await fn.call(this, input, key);\n }\n this.alert();\n }\n\n alert() {\n delete this.state.alert;\n if (this.options.show === false) {\n this.emit('alert');\n } else {\n this.stdout.write(ansi.code.beep);\n }\n }\n\n cursorHide() {\n this.stdout.write(ansi.cursor.hide());\n utils.onExit(() => this.cursorShow());\n }\n\n cursorShow() {\n this.stdout.write(ansi.cursor.show());\n }\n\n write(str) {\n if (!str) return;\n if (this.stdout && this.state.show !== false) {\n this.stdout.write(str);\n }\n this.state.buffer += str;\n }\n\n clear(lines = 0) {\n let buffer = this.state.buffer;\n this.state.buffer = '';\n if ((!buffer && !lines) || this.options.show === false) return;\n this.stdout.write(ansi.cursor.down(lines) + ansi.clear(buffer, this.width));\n }\n\n restore() {\n if (this.state.closed || this.options.show === false) return;\n\n let { prompt, after, rest } = this.sections();\n let { cursor, initial = '', input = '', value = '' } = this;\n\n let size = this.state.size = rest.length;\n let state = { after, cursor, initial, input, prompt, size, value };\n let codes = ansi.cursor.restore(state);\n if (codes) {\n this.stdout.write(codes);\n }\n }\n\n sections() {\n let { buffer, input, prompt } = this.state;\n prompt = colors.unstyle(prompt);\n let buf = colors.unstyle(buffer);\n let idx = buf.indexOf(prompt);\n let header = buf.slice(0, idx);\n let rest = buf.slice(idx);\n let lines = rest.split('\\n');\n let first = lines[0];\n let last = lines[lines.length - 1];\n let promptLine = prompt + (input ? ' ' + input : '');\n let len = promptLine.length;\n let after = len < first.length ? first.slice(len + 1) : '';\n return { header, prompt: first, after, rest: lines.slice(1), last };\n }\n\n async submit() {\n this.state.submitted = true;\n this.state.validating = true;\n\n // this will only be called when the prompt is directly submitted\n // without initializing, i.e. when the prompt is skipped, etc. Otherwize,\n // \"options.onSubmit\" is will be handled by the \"initialize()\" method.\n if (this.options.onSubmit) {\n await this.options.onSubmit.call(this, this.name, this.value, this);\n }\n\n let result = this.state.error || await this.validate(this.value, this.state);\n if (result !== true) {\n let error = '\\n' + this.symbols.pointer + ' ';\n\n if (typeof result === 'string') {\n error += result.trim();\n } else {\n error += 'Invalid input';\n }\n\n this.state.error = '\\n' + this.styles.danger(error);\n this.state.submitted = false;\n await this.render();\n await this.alert();\n this.state.validating = false;\n this.state.error = void 0;\n return;\n }\n\n this.state.validating = false;\n await this.render();\n await this.close();\n\n this.value = await this.result(this.value);\n this.emit('submit', this.value);\n }\n\n async cancel(err) {\n this.state.cancelled = this.state.submitted = true;\n\n await this.render();\n await this.close();\n\n if (typeof this.options.onCancel === 'function') {\n await this.options.onCancel.call(this, this.name, this.value, this);\n }\n\n this.emit('cancel', await this.error(err));\n }\n\n async close() {\n this.state.closed = true;\n\n try {\n let sections = this.sections();\n let lines = Math.ceil(sections.prompt.length / this.width);\n if (sections.rest) {\n this.write(ansi.cursor.down(sections.rest.length));\n }\n this.write('\\n'.repeat(lines));\n } catch (err) { /* do nothing */ }\n\n this.emit('close');\n }\n\n start() {\n if (!this.stop && this.options.show !== false) {\n this.stop = keypress.listen(this, this.keypress.bind(this));\n this.once('close', this.stop);\n }\n }\n\n async skip() {\n this.skipped = this.options.skip === true;\n if (typeof this.options.skip === 'function') {\n this.skipped = await this.options.skip.call(this, this.name, this.value);\n }\n return this.skipped;\n }\n\n async initialize() {\n let { format, options, result } = this;\n\n this.format = () => format.call(this, this.value);\n this.result = () => result.call(this, this.value);\n\n if (typeof options.initial === 'function') {\n this.initial = await options.initial.call(this, this);\n }\n\n if (typeof options.onRun === 'function') {\n await options.onRun.call(this, this);\n }\n\n // if \"options.onSubmit\" is defined, we wrap the \"submit\" method to guarantee\n // that \"onSubmit\" will always called first thing inside the submit\n // method, regardless of how it's handled in inheriting prompts.\n if (typeof options.onSubmit === 'function') {\n let onSubmit = options.onSubmit.bind(this);\n let submit = this.submit.bind(this);\n delete this.options.onSubmit;\n this.submit = async() => {\n await onSubmit(this.name, this.value, this);\n return submit();\n };\n }\n\n await this.start();\n await this.render();\n }\n\n render() {\n throw new Error('expected prompt to have a custom render method');\n }\n\n run() {\n return new Promise(async(resolve, reject) => {\n this.once('submit', resolve);\n this.once('cancel', reject);\n if (await this.skip()) {\n this.render = () => {};\n return this.submit();\n }\n await this.initialize();\n this.emit('run');\n });\n }\n\n async element(name, choice, i) {\n let { options, state, symbols, timers } = this;\n let timer = timers && timers[name];\n state.timer = timer;\n let value = options[name] || state[name] || symbols[name];\n let val = choice && choice[name] != null ? choice[name] : await value;\n if (val === '') return val;\n\n let res = await this.resolve(val, state, choice, i);\n if (!res && choice && choice[name]) {\n return this.resolve(value, state, choice, i);\n }\n return res;\n }\n\n async prefix() {\n let element = await this.element('prefix') || this.symbols;\n let timer = this.timers && this.timers.prefix;\n let state = this.state;\n state.timer = timer;\n if (utils.isObject(element)) element = element[state.status] || element.pending;\n if (!utils.hasColor(element)) {\n let style = this.styles[state.status] || this.styles.pending;\n return style(element);\n }\n return element;\n }\n\n async message() {\n let message = await this.element('message');\n if (!utils.hasColor(message)) {\n return this.styles.strong(message);\n }\n return message;\n }\n\n async separator() {\n let element = await this.element('separator') || this.symbols;\n let timer = this.timers && this.timers.separator;\n let state = this.state;\n state.timer = timer;\n let value = element[state.status] || element.pending || state.separator;\n let ele = await this.resolve(value, state);\n if (utils.isObject(ele)) ele = ele[state.status] || ele.pending;\n if (!utils.hasColor(ele)) {\n return this.styles.muted(ele);\n }\n return ele;\n }\n\n async pointer(choice, i) {\n let val = await this.element('pointer', choice, i);\n\n if (typeof val === 'string' && utils.hasColor(val)) {\n return val;\n }\n\n if (val) {\n let styles = this.styles;\n let focused = this.index === i;\n let style = focused ? styles.primary : val => val;\n let ele = await this.resolve(val[focused ? 'on' : 'off'] || val, this.state);\n let styled = !utils.hasColor(ele) ? style(ele) : ele;\n return focused ? styled : ' '.repeat(ele.length);\n }\n }\n\n async indicator(choice, i) {\n let val = await this.element('indicator', choice, i);\n if (typeof val === 'string' && utils.hasColor(val)) {\n return val;\n }\n if (val) {\n let styles = this.styles;\n let enabled = choice.enabled === true;\n let style = enabled ? styles.success : styles.dark;\n let ele = val[enabled ? 'on' : 'off'] || val;\n return !utils.hasColor(ele) ? style(ele) : ele;\n }\n return '';\n }\n\n body() {\n return null;\n }\n\n footer() {\n if (this.state.status === 'pending') {\n return this.element('footer');\n }\n }\n\n header() {\n if (this.state.status === 'pending') {\n return this.element('header');\n }\n }\n\n async hint() {\n if (this.state.status === 'pending' && !this.isValue(this.state.input)) {\n let hint = await this.element('hint');\n if (!utils.hasColor(hint)) {\n return this.styles.muted(hint);\n }\n return hint;\n }\n }\n\n error(err) {\n return !this.state.submitted ? (err || this.state.error) : '';\n }\n\n format(value) {\n return value;\n }\n\n result(value) {\n return value;\n }\n\n validate(value) {\n if (this.options.required === true) {\n return this.isValue(value);\n }\n return true;\n }\n\n isValue(value) {\n return value != null && value !== '';\n }\n\n resolve(value, ...args) {\n return utils.resolve(this, value, ...args);\n }\n\n get base() {\n return Prompt.prototype;\n }\n\n get style() {\n return this.styles[this.state.status];\n }\n\n get height() {\n return this.options.rows || utils.height(this.stdout, 25);\n }\n get width() {\n return this.options.columns || utils.width(this.stdout, 80);\n }\n get size() {\n return { width: this.width, height: this.height };\n }\n\n set cursor(value) {\n this.state.cursor = value;\n }\n get cursor() {\n return this.state.cursor;\n }\n\n set input(value) {\n this.state.input = value;\n }\n get input() {\n return this.state.input;\n }\n\n set value(value) {\n this.state.value = value;\n }\n get value() {\n let { input, value } = this.state;\n let result = [value, input].find(this.isValue.bind(this));\n return this.isValue(result) ? result : this.initial;\n }\n\n static get prompt() {\n return options => new this(options).run();\n }\n}\n\nfunction setOptions(prompt) {\n let isValidKey = key => {\n return prompt[key] === void 0 || typeof prompt[key] === 'function';\n };\n\n let ignore = [\n 'actions',\n 'choices',\n 'initial',\n 'margin',\n 'roles',\n 'styles',\n 'symbols',\n 'theme',\n 'timers',\n 'value'\n ];\n\n let ignoreFn = [\n 'body',\n 'footer',\n 'error',\n 'header',\n 'hint',\n 'indicator',\n 'message',\n 'prefix',\n 'separator',\n 'skip'\n ];\n\n for (let key of Object.keys(prompt.options)) {\n if (ignore.includes(key)) continue;\n if (/^on[A-Z]/.test(key)) continue;\n let option = prompt.options[key];\n if (typeof option === 'function' && isValidKey(key)) {\n if (!ignoreFn.includes(key)) {\n prompt[key] = option.bind(prompt);\n }\n } else if (typeof prompt[key] !== 'function') {\n prompt[key] = option;\n }\n }\n}\n\nfunction margin(value) {\n if (typeof value === 'number') {\n value = [value, value, value, value];\n }\n let arr = [].concat(value || []);\n let pad = i => i % 2 === 0 ? '\\n' : ' ';\n let res = [];\n for (let i = 0; i < 4; i++) {\n let char = pad(i);\n if (arr[i]) {\n res.push(char.repeat(arr[i]));\n } else {\n res.push('');\n }\n }\n return res;\n}\n\nmodule.exports = Prompt;\n", "'use strict';\n\nconst utils = require('./utils');\nconst roles = {\n default(prompt, choice) {\n return choice;\n },\n checkbox(prompt, choice) {\n throw new Error('checkbox role is not implemented yet');\n },\n editable(prompt, choice) {\n throw new Error('editable role is not implemented yet');\n },\n expandable(prompt, choice) {\n throw new Error('expandable role is not implemented yet');\n },\n heading(prompt, choice) {\n choice.disabled = '';\n choice.indicator = [choice.indicator, ' '].find(v => v != null);\n choice.message = choice.message || '';\n return choice;\n },\n input(prompt, choice) {\n throw new Error('input role is not implemented yet');\n },\n option(prompt, choice) {\n return roles.default(prompt, choice);\n },\n radio(prompt, choice) {\n throw new Error('radio role is not implemented yet');\n },\n separator(prompt, choice) {\n choice.disabled = '';\n choice.indicator = [choice.indicator, ' '].find(v => v != null);\n choice.message = choice.message || prompt.symbols.line.repeat(5);\n return choice;\n },\n spacer(prompt, choice) {\n return choice;\n }\n};\n\nmodule.exports = (name, options = {}) => {\n let role = utils.merge({}, roles, options.roles);\n return role[name] || role.default;\n};\n", "'use strict';\n\nconst colors = require('ansi-colors');\nconst Prompt = require('../prompt');\nconst roles = require('../roles');\nconst utils = require('../utils');\nconst { reorder, scrollUp, scrollDown, isObject, swap } = utils;\n\nclass ArrayPrompt extends Prompt {\n constructor(options) {\n super(options);\n this.cursorHide();\n this.maxSelected = options.maxSelected || Infinity;\n this.multiple = options.multiple || false;\n this.initial = options.initial || 0;\n this.delay = options.delay || 0;\n this.longest = 0;\n this.num = '';\n }\n\n async initialize() {\n if (typeof this.options.initial === 'function') {\n this.initial = await this.options.initial.call(this);\n }\n await this.reset(true);\n await super.initialize();\n }\n\n async reset() {\n let { choices, initial, autofocus, suggest } = this.options;\n this.state._choices = [];\n this.state.choices = [];\n\n this.choices = await Promise.all(await this.toChoices(choices));\n this.choices.forEach(ch => (ch.enabled = false));\n\n if (typeof suggest !== 'function' && this.selectable.length === 0) {\n throw new Error('At least one choice must be selectable');\n }\n\n if (isObject(initial)) initial = Object.keys(initial);\n if (Array.isArray(initial)) {\n if (autofocus != null) this.index = this.findIndex(autofocus);\n initial.forEach(v => this.enable(this.find(v)));\n await this.render();\n } else {\n if (autofocus != null) initial = autofocus;\n if (typeof initial === 'string') initial = this.findIndex(initial);\n if (typeof initial === 'number' && initial > -1) {\n this.index = Math.max(0, Math.min(initial, this.choices.length));\n this.enable(this.find(this.index));\n }\n }\n\n if (this.isDisabled(this.focused)) {\n await this.down();\n }\n }\n\n async toChoices(value, parent) {\n this.state.loadingChoices = true;\n let choices = [];\n let index = 0;\n\n let toChoices = async(items, parent) => {\n if (typeof items === 'function') items = await items.call(this);\n if (items instanceof Promise) items = await items;\n\n for (let i = 0; i < items.length; i++) {\n let choice = items[i] = await this.toChoice(items[i], index++, parent);\n choices.push(choice);\n\n if (choice.choices) {\n await toChoices(choice.choices, choice);\n }\n }\n return choices;\n };\n\n return toChoices(value, parent)\n .then(choices => {\n this.state.loadingChoices = false;\n return choices;\n });\n }\n\n async toChoice(ele, i, parent) {\n if (typeof ele === 'function') ele = await ele.call(this, this);\n if (ele instanceof Promise) ele = await ele;\n if (typeof ele === 'string') ele = { name: ele };\n\n if (ele.normalized) return ele;\n ele.normalized = true;\n\n let origVal = ele.value;\n let role = roles(ele.role, this.options);\n ele = role(this, ele);\n\n if (typeof ele.disabled === 'string' && !ele.hint) {\n ele.hint = ele.disabled;\n ele.disabled = true;\n }\n\n if (ele.disabled === true && ele.hint == null) {\n ele.hint = '(disabled)';\n }\n\n // if the choice was already normalized, return it\n if (ele.index != null) return ele;\n ele.name = ele.name || ele.key || ele.title || ele.value || ele.message;\n ele.message = ele.message || ele.name || '';\n ele.value = [ele.value, ele.name].find(this.isValue.bind(this));\n\n ele.input = '';\n ele.index = i;\n ele.cursor = 0;\n\n utils.define(ele, 'parent', parent);\n ele.level = parent ? parent.level + 1 : 1;\n if (ele.indent == null) {\n ele.indent = parent ? parent.indent + ' ' : (ele.indent || '');\n }\n\n ele.path = parent ? parent.path + '.' + ele.name : ele.name;\n ele.enabled = !!(this.multiple && !this.isDisabled(ele) && (ele.enabled || this.isSelected(ele)));\n\n if (!this.isDisabled(ele)) {\n this.longest = Math.max(this.longest, colors.unstyle(ele.message).length);\n }\n\n // shallow clone the choice first\n let choice = { ...ele };\n\n // then allow the choice to be reset using the \"original\" values\n ele.reset = (input = choice.input, value = choice.value) => {\n for (let key of Object.keys(choice)) ele[key] = choice[key];\n ele.input = input;\n ele.value = value;\n };\n\n if (origVal == null && typeof ele.initial === 'function') {\n ele.input = await ele.initial.call(this, this.state, ele, i);\n }\n\n return ele;\n }\n\n async onChoice(choice, i) {\n this.emit('choice', choice, i, this);\n\n if (typeof choice.onChoice === 'function') {\n await choice.onChoice.call(this, this.state, choice, i);\n }\n }\n\n async addChoice(ele, i, parent) {\n let choice = await this.toChoice(ele, i, parent);\n this.choices.push(choice);\n this.index = this.choices.length - 1;\n this.limit = this.choices.length;\n return choice;\n }\n\n async newItem(item, i, parent) {\n let ele = { name: 'New choice name?', editable: true, newChoice: true, ...item };\n let choice = await this.addChoice(ele, i, parent);\n\n choice.updateChoice = () => {\n delete choice.newChoice;\n choice.name = choice.message = choice.input;\n choice.input = '';\n choice.cursor = 0;\n };\n\n return this.render();\n }\n\n indent(choice) {\n if (choice.indent == null) {\n return choice.level > 1 ? ' '.repeat(choice.level - 1) : '';\n }\n return choice.indent;\n }\n\n dispatch(s, key) {\n if (this.multiple && this[key.name]) return this[key.name]();\n this.alert();\n }\n\n focus(choice, enabled) {\n if (typeof enabled !== 'boolean') enabled = choice.enabled;\n if (enabled && !choice.enabled && this.selected.length >= this.maxSelected) {\n return this.alert();\n }\n this.index = choice.index;\n choice.enabled = enabled && !this.isDisabled(choice);\n return choice;\n }\n\n space() {\n if (!this.multiple) return this.alert();\n this.toggle(this.focused);\n return this.render();\n }\n\n a() {\n if (this.maxSelected < this.choices.length) return this.alert();\n let enabled = this.selectable.every(ch => ch.enabled);\n this.choices.forEach(ch => (ch.enabled = !enabled));\n return this.render();\n }\n\n i() {\n // don't allow choices to be inverted if it will result in\n // more than the maximum number of allowed selected items.\n if (this.choices.length - this.selected.length > this.maxSelected) {\n return this.alert();\n }\n this.choices.forEach(ch => (ch.enabled = !ch.enabled));\n return this.render();\n }\n\n g(choice = this.focused) {\n if (!this.choices.some(ch => !!ch.parent)) return this.a();\n this.toggle((choice.parent && !choice.choices) ? choice.parent : choice);\n return this.render();\n }\n\n toggle(choice, enabled) {\n if (!choice.enabled && this.selected.length >= this.maxSelected) {\n return this.alert();\n }\n\n if (typeof enabled !== 'boolean') enabled = !choice.enabled;\n choice.enabled = enabled;\n\n if (choice.choices) {\n choice.choices.forEach(ch => this.toggle(ch, enabled));\n }\n\n let parent = choice.parent;\n while (parent) {\n let choices = parent.choices.filter(ch => this.isDisabled(ch));\n parent.enabled = choices.every(ch => ch.enabled === true);\n parent = parent.parent;\n }\n\n reset(this, this.choices);\n this.emit('toggle', choice, this);\n return choice;\n }\n\n enable(choice) {\n if (this.selected.length >= this.maxSelected) return this.alert();\n choice.enabled = !this.isDisabled(choice);\n choice.choices && choice.choices.forEach(this.enable.bind(this));\n return choice;\n }\n\n disable(choice) {\n choice.enabled = false;\n choice.choices && choice.choices.forEach(this.disable.bind(this));\n return choice;\n }\n\n number(n) {\n this.num += n;\n\n let number = num => {\n let i = Number(num);\n if (i > this.choices.length - 1) return this.alert();\n\n let focused = this.focused;\n let choice = this.choices.find(ch => i === ch.index);\n\n if (!choice.enabled && this.selected.length >= this.maxSelected) {\n return this.alert();\n }\n\n if (this.visible.indexOf(choice) === -1) {\n let choices = reorder(this.choices);\n let actualIdx = choices.indexOf(choice);\n\n if (focused.index > actualIdx) {\n let start = choices.slice(actualIdx, actualIdx + this.limit);\n let end = choices.filter(ch => !start.includes(ch));\n this.choices = start.concat(end);\n } else {\n let pos = actualIdx - this.limit + 1;\n this.choices = choices.slice(pos).concat(choices.slice(0, pos));\n }\n }\n\n this.index = this.choices.indexOf(choice);\n this.toggle(this.focused);\n return this.render();\n };\n\n clearTimeout(this.numberTimeout);\n\n return new Promise(resolve => {\n let len = this.choices.length;\n let num = this.num;\n\n let handle = (val = false, res) => {\n clearTimeout(this.numberTimeout);\n if (val) res = number(num);\n this.num = '';\n resolve(res);\n };\n\n if (num === '0' || (num.length === 1 && Number(num + '0') > len)) {\n return handle(true);\n }\n\n if (Number(num) > len) {\n return handle(false, this.alert());\n }\n\n this.numberTimeout = setTimeout(() => handle(true), this.delay);\n });\n }\n\n home() {\n this.choices = reorder(this.choices);\n this.index = 0;\n return this.render();\n }\n\n end() {\n let pos = this.choices.length - this.limit;\n let choices = reorder(this.choices);\n this.choices = choices.slice(pos).concat(choices.slice(0, pos));\n this.index = this.limit - 1;\n return this.render();\n }\n\n first() {\n this.index = 0;\n return this.render();\n }\n\n last() {\n this.index = this.visible.length - 1;\n return this.render();\n }\n\n prev() {\n if (this.visible.length <= 1) return this.alert();\n return this.up();\n }\n\n next() {\n if (this.visible.length <= 1) return this.alert();\n return this.down();\n }\n\n right() {\n if (this.cursor >= this.input.length) return this.alert();\n this.cursor++;\n return this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.alert();\n this.cursor--;\n return this.render();\n }\n\n up() {\n let len = this.choices.length;\n let vis = this.visible.length;\n let idx = this.index;\n if (this.options.scroll === false && idx === 0) {\n return this.alert();\n }\n if (len > vis && idx === 0) {\n return this.scrollUp();\n }\n this.index = ((idx - 1 % len) + len) % len;\n if (this.isDisabled()) {\n return this.up();\n }\n return this.render();\n }\n\n down() {\n let len = this.choices.length;\n let vis = this.visible.length;\n let idx = this.index;\n if (this.options.scroll === false && idx === vis - 1) {\n return this.alert();\n }\n if (len > vis && idx === vis - 1) {\n return this.scrollDown();\n }\n this.index = (idx + 1) % len;\n if (this.isDisabled()) {\n return this.down();\n }\n return this.render();\n }\n\n scrollUp(i = 0) {\n this.choices = scrollUp(this.choices);\n this.index = i;\n if (this.isDisabled()) {\n return this.up();\n }\n return this.render();\n }\n\n scrollDown(i = this.visible.length - 1) {\n this.choices = scrollDown(this.choices);\n this.index = i;\n if (this.isDisabled()) {\n return this.down();\n }\n return this.render();\n }\n\n async shiftUp() {\n if (this.options.sort === true) {\n this.sorting = true;\n this.swap(this.index - 1);\n await this.up();\n this.sorting = false;\n return;\n }\n return this.scrollUp(this.index);\n }\n\n async shiftDown() {\n if (this.options.sort === true) {\n this.sorting = true;\n this.swap(this.index + 1);\n await this.down();\n this.sorting = false;\n return;\n }\n return this.scrollDown(this.index);\n }\n\n pageUp() {\n if (this.visible.length <= 1) return this.alert();\n this.limit = Math.max(this.limit - 1, 0);\n this.index = Math.min(this.limit - 1, this.index);\n this._limit = this.limit;\n if (this.isDisabled()) {\n return this.up();\n }\n return this.render();\n }\n\n pageDown() {\n if (this.visible.length >= this.choices.length) return this.alert();\n this.index = Math.max(0, this.index);\n this.limit = Math.min(this.limit + 1, this.choices.length);\n this._limit = this.limit;\n if (this.isDisabled()) {\n return this.down();\n }\n return this.render();\n }\n\n swap(pos) {\n swap(this.choices, this.index, pos);\n }\n\n isDisabled(choice = this.focused) {\n let keys = ['disabled', 'collapsed', 'hidden', 'completing', 'readonly'];\n if (choice && keys.some(key => choice[key] === true)) {\n return true;\n }\n return choice && choice.role === 'heading';\n }\n\n isEnabled(choice = this.focused) {\n if (Array.isArray(choice)) return choice.every(ch => this.isEnabled(ch));\n if (choice.choices) {\n let choices = choice.choices.filter(ch => !this.isDisabled(ch));\n return choice.enabled && choices.every(ch => this.isEnabled(ch));\n }\n return choice.enabled && !this.isDisabled(choice);\n }\n\n isChoice(choice, value) {\n return choice.name === value || choice.index === Number(value);\n }\n\n isSelected(choice) {\n if (Array.isArray(this.initial)) {\n return this.initial.some(value => this.isChoice(choice, value));\n }\n return this.isChoice(choice, this.initial);\n }\n\n map(names = [], prop = 'value') {\n return [].concat(names || []).reduce((acc, name) => {\n acc[name] = this.find(name, prop);\n return acc;\n }, {});\n }\n\n filter(value, prop) {\n let isChoice = (ele, i) => [ele.name, i].includes(value);\n let fn = typeof value === 'function' ? value : isChoice;\n let choices = this.options.multiple ? this.state._choices : this.choices;\n let result = choices.filter(fn);\n if (prop) {\n return result.map(ch => ch[prop]);\n }\n return result;\n }\n\n find(value, prop) {\n if (isObject(value)) return prop ? value[prop] : value;\n let isChoice = (ele, i) => [ele.name, i].includes(value);\n let fn = typeof value === 'function' ? value : isChoice;\n let choice = this.choices.find(fn);\n if (choice) {\n return prop ? choice[prop] : choice;\n }\n }\n\n findIndex(value) {\n return this.choices.indexOf(this.find(value));\n }\n\n async submit() {\n let choice = this.focused;\n if (!choice) return this.alert();\n\n if (choice.newChoice) {\n if (!choice.input) return this.alert();\n choice.updateChoice();\n return this.render();\n }\n\n if (this.choices.some(ch => ch.newChoice)) {\n return this.alert();\n }\n\n let { reorder, sort } = this.options;\n let multi = this.multiple === true;\n let value = this.selected;\n if (value === void 0) {\n return this.alert();\n }\n\n // re-sort choices to original order\n if (Array.isArray(value) && reorder !== false && sort !== true) {\n value = utils.reorder(value);\n }\n\n this.value = multi ? value.map(ch => ch.name) : value.name;\n return super.submit();\n }\n\n set choices(choices = []) {\n this.state._choices = this.state._choices || [];\n this.state.choices = choices;\n\n for (let choice of choices) {\n if (!this.state._choices.some(ch => ch.name === choice.name)) {\n this.state._choices.push(choice);\n }\n }\n\n if (!this._initial && this.options.initial) {\n this._initial = true;\n let init = this.initial;\n if (typeof init === 'string' || typeof init === 'number') {\n let choice = this.find(init);\n if (choice) {\n this.initial = choice.index;\n this.focus(choice, true);\n }\n }\n }\n }\n get choices() {\n return reset(this, this.state.choices || []);\n }\n\n set visible(visible) {\n this.state.visible = visible;\n }\n get visible() {\n return (this.state.visible || this.choices).slice(0, this.limit);\n }\n\n set limit(num) {\n this.state.limit = num;\n }\n get limit() {\n let { state, options, choices } = this;\n let limit = state.limit || this._limit || options.limit || choices.length;\n return Math.min(limit, this.height);\n }\n\n set value(value) {\n super.value = value;\n }\n get value() {\n if (typeof super.value !== 'string' && super.value === this.initial) {\n return this.input;\n }\n return super.value;\n }\n\n set index(i) {\n this.state.index = i;\n }\n get index() {\n return Math.max(0, this.state ? this.state.index : 0);\n }\n\n get enabled() {\n return this.filter(this.isEnabled.bind(this));\n }\n\n get focused() {\n let choice = this.choices[this.index];\n if (choice && this.state.submitted && this.multiple !== true) {\n choice.enabled = true;\n }\n return choice;\n }\n\n get selectable() {\n return this.choices.filter(choice => !this.isDisabled(choice));\n }\n\n get selected() {\n return this.multiple ? this.enabled : this.focused;\n }\n}\n\nfunction reset(prompt, choices) {\n if (choices instanceof Promise) return choices;\n if (typeof choices === 'function') {\n if (utils.isAsyncFn(choices)) return choices;\n choices = choices.call(prompt, prompt);\n }\n for (let choice of choices) {\n if (Array.isArray(choice.choices)) {\n let items = choice.choices.filter(ch => !prompt.isDisabled(ch));\n choice.enabled = items.every(ch => ch.enabled === true);\n }\n if (prompt.isDisabled(choice) === true) {\n delete choice.enabled;\n }\n }\n return choices;\n}\n\nmodule.exports = ArrayPrompt;\n", "'use strict';\n\nconst ArrayPrompt = require('../types/array');\nconst utils = require('../utils');\n\nclass SelectPrompt extends ArrayPrompt {\n constructor(options) {\n super(options);\n this.emptyError = this.options.emptyError || 'No items were selected';\n }\n\n async dispatch(s, key) {\n if (this.multiple) {\n return this[key.name] ? await this[key.name](s, key) : await super.dispatch(s, key);\n }\n this.alert();\n }\n\n separator() {\n if (this.options.separator) return super.separator();\n let sep = this.styles.muted(this.symbols.ellipsis);\n return this.state.submitted ? super.separator() : sep;\n }\n\n pointer(choice, i) {\n return (!this.multiple || this.options.pointer) ? super.pointer(choice, i) : '';\n }\n\n indicator(choice, i) {\n return this.multiple ? super.indicator(choice, i) : '';\n }\n\n choiceMessage(choice, i) {\n let message = this.resolve(choice.message, this.state, choice, i);\n if (choice.role === 'heading' && !utils.hasColor(message)) {\n message = this.styles.strong(message);\n }\n return this.resolve(message, this.state, choice, i);\n }\n\n choiceSeparator() {\n return ':';\n }\n\n async renderChoice(choice, i) {\n await this.onChoice(choice, i);\n\n let focused = this.index === i;\n let pointer = await this.pointer(choice, i);\n let check = await this.indicator(choice, i) + (choice.pad || '');\n let hint = await this.resolve(choice.hint, this.state, choice, i);\n\n if (hint && !utils.hasColor(hint)) {\n hint = this.styles.muted(hint);\n }\n\n let ind = this.indent(choice);\n let msg = await this.choiceMessage(choice, i);\n let line = () => [this.margin[3], ind + pointer + check, msg, this.margin[1], hint].filter(Boolean).join(' ');\n\n if (choice.role === 'heading') {\n return line();\n }\n\n if (choice.disabled) {\n if (!utils.hasColor(msg)) {\n msg = this.styles.disabled(msg);\n }\n return line();\n }\n\n if (focused) {\n msg = this.styles.em(msg);\n }\n\n return line();\n }\n\n async renderChoices() {\n if (this.state.loading === 'choices') {\n return this.styles.warning('Loading choices');\n }\n\n if (this.state.submitted) return '';\n let choices = this.visible.map(async(ch, i) => await this.renderChoice(ch, i));\n let visible = await Promise.all(choices);\n if (!visible.length) visible.push(this.styles.danger('No matching choices'));\n let result = this.margin[0] + visible.join('\\n');\n let header;\n\n if (this.options.choicesHeader) {\n header = await this.resolve(this.options.choicesHeader, this.state);\n }\n\n return [header, result].filter(Boolean).join('\\n');\n }\n\n format() {\n if (!this.state.submitted || this.state.cancelled) return '';\n if (Array.isArray(this.selected)) {\n return this.selected.map(choice => this.styles.primary(choice.name)).join(', ');\n }\n return this.styles.primary(this.selected.name);\n }\n\n async render() {\n let { submitted, size } = this.state;\n\n let prompt = '';\n let header = await this.header();\n let prefix = await this.prefix();\n let separator = await this.separator();\n let message = await this.message();\n\n if (this.options.promptLine !== false) {\n prompt = [prefix, message, separator, ''].join(' ');\n this.state.prompt = prompt;\n }\n\n let output = await this.format();\n let help = (await this.error()) || (await this.hint());\n let body = await this.renderChoices();\n let footer = await this.footer();\n\n if (output) prompt += output;\n if (help && !prompt.includes(help)) prompt += ' ' + help;\n\n if (submitted && !output && !body.trim() && this.multiple && this.emptyError != null) {\n prompt += this.styles.danger(this.emptyError);\n }\n\n this.clear(size);\n this.write([header, prompt, body, footer].filter(Boolean).join('\\n'));\n this.write(this.margin[2]);\n this.restore();\n }\n}\n\nmodule.exports = SelectPrompt;\n", "'use strict';\n\nconst Select = require('./select');\n\nconst highlight = (input, color) => {\n let val = input.toLowerCase();\n return str => {\n let s = str.toLowerCase();\n let i = s.indexOf(val);\n let colored = color(str.slice(i, i + val.length));\n return i >= 0 ? str.slice(0, i) + colored + str.slice(i + val.length) : str;\n };\n};\n\nclass AutoComplete extends Select {\n constructor(options) {\n super(options);\n this.cursorShow();\n }\n\n moveCursor(n) {\n this.state.cursor += n;\n }\n\n dispatch(ch) {\n return this.append(ch);\n }\n\n space(ch) {\n return this.options.multiple ? super.space(ch) : this.append(ch);\n }\n\n append(ch) {\n let { cursor, input } = this.state;\n this.input = input.slice(0, cursor) + ch + input.slice(cursor);\n this.moveCursor(1);\n return this.complete();\n }\n\n delete() {\n let { cursor, input } = this.state;\n if (!input) return this.alert();\n this.input = input.slice(0, cursor - 1) + input.slice(cursor);\n this.moveCursor(-1);\n return this.complete();\n }\n\n deleteForward() {\n let { cursor, input } = this.state;\n if (input[cursor] === void 0) return this.alert();\n this.input = `${input}`.slice(0, cursor) + `${input}`.slice(cursor + 1);\n return this.complete();\n }\n\n number(ch) {\n return this.append(ch);\n }\n\n async complete() {\n this.completing = true;\n this.choices = await this.suggest(this.input, this.state._choices);\n this.state.limit = void 0; // allow getter/setter to reset limit\n this.index = Math.min(Math.max(this.visible.length - 1, 0), this.index);\n await this.render();\n this.completing = false;\n }\n\n suggest(input = this.input, choices = this.state._choices) {\n if (typeof this.options.suggest === 'function') {\n return this.options.suggest.call(this, input, choices);\n }\n let str = input.toLowerCase();\n return choices.filter(ch => ch.message.toLowerCase().includes(str));\n }\n\n pointer() {\n return '';\n }\n\n format() {\n if (!this.focused) return this.input;\n if (this.options.multiple && this.state.submitted) {\n return this.selected.map(ch => this.styles.primary(ch.message)).join(', ');\n }\n if (this.state.submitted) {\n let value = this.value = this.input = this.focused.value;\n return this.styles.primary(value);\n }\n return this.input;\n }\n\n async render() {\n if (this.state.status !== 'pending') return super.render();\n let style = this.options.highlight\n ? this.options.highlight.bind(this)\n : this.styles.placeholder;\n\n let color = highlight(this.input, style);\n let choices = this.choices;\n this.choices = choices.map(ch => ({ ...ch, message: color(ch.message) }));\n await super.render();\n this.choices = choices;\n }\n\n submit() {\n if (this.options.multiple) {\n this.value = this.selected.map(ch => ch.name);\n }\n return super.submit();\n }\n}\n\nmodule.exports = AutoComplete;\n", "'use strict';\n\nconst utils = require('./utils');\n\n/**\n * Render a placeholder value with cursor and styling based on the\n * position of the cursor.\n *\n * @param {Object} `prompt` Prompt instance.\n * @param {String} `input` Input string.\n * @param {String} `initial` The initial user-provided value.\n * @param {Number} `pos` Current cursor position.\n * @param {Boolean} `showCursor` Render a simulated cursor using the inverse primary style.\n * @return {String} Returns the styled placeholder string.\n * @api public\n */\n\nmodule.exports = (prompt, options = {}) => {\n prompt.cursorHide();\n\n let { input = '', initial = '', pos, showCursor = true, color } = options;\n let style = color || prompt.styles.placeholder;\n let inverse = utils.inverse(prompt.styles.primary);\n let blinker = str => inverse(prompt.styles.black(str));\n let output = input;\n let char = ' ';\n let reverse = blinker(char);\n\n if (prompt.blink && prompt.blink.off === true) {\n blinker = str => str;\n reverse = '';\n }\n\n if (showCursor && pos === 0 && initial === '' && input === '') {\n return blinker(char);\n }\n\n if (showCursor && pos === 0 && (input === initial || input === '')) {\n return blinker(initial[0]) + style(initial.slice(1));\n }\n\n initial = utils.isPrimitive(initial) ? `${initial}` : '';\n input = utils.isPrimitive(input) ? `${input}` : '';\n\n let placeholder = initial && initial.startsWith(input) && initial !== input;\n let cursor = placeholder ? blinker(initial[input.length]) : reverse;\n\n if (pos !== input.length && showCursor === true) {\n output = input.slice(0, pos) + blinker(input[pos]) + input.slice(pos + 1);\n cursor = '';\n }\n\n if (showCursor === false) {\n cursor = '';\n }\n\n if (placeholder) {\n let raw = prompt.styles.unstyle(output + cursor);\n return output + cursor + style(initial.slice(raw.length));\n }\n\n return output + cursor;\n};\n", "'use strict';\n\nconst colors = require('ansi-colors');\nconst SelectPrompt = require('./select');\nconst placeholder = require('../placeholder');\n\nclass FormPrompt extends SelectPrompt {\n constructor(options) {\n super({ ...options, multiple: true });\n this.type = 'form';\n this.initial = this.options.initial;\n this.align = [this.options.align, 'right'].find(v => v != null);\n this.emptyError = '';\n this.values = {};\n }\n\n async reset(first) {\n await super.reset();\n if (first === true) this._index = this.index;\n this.index = this._index;\n this.values = {};\n this.choices.forEach(choice => choice.reset && choice.reset());\n return this.render();\n }\n\n dispatch(char) {\n return !!char && this.append(char);\n }\n\n append(char) {\n let choice = this.focused;\n if (!choice) return this.alert();\n let { cursor, input } = choice;\n choice.value = choice.input = input.slice(0, cursor) + char + input.slice(cursor);\n choice.cursor++;\n return this.render();\n }\n\n delete() {\n let choice = this.focused;\n if (!choice || choice.cursor <= 0) return this.alert();\n let { cursor, input } = choice;\n choice.value = choice.input = input.slice(0, cursor - 1) + input.slice(cursor);\n choice.cursor--;\n return this.render();\n }\n\n deleteForward() {\n let choice = this.focused;\n if (!choice) return this.alert();\n let { cursor, input } = choice;\n if (input[cursor] === void 0) return this.alert();\n let str = `${input}`.slice(0, cursor) + `${input}`.slice(cursor + 1);\n choice.value = choice.input = str;\n return this.render();\n }\n\n right() {\n let choice = this.focused;\n if (!choice) return this.alert();\n if (choice.cursor >= choice.input.length) return this.alert();\n choice.cursor++;\n return this.render();\n }\n\n left() {\n let choice = this.focused;\n if (!choice) return this.alert();\n if (choice.cursor <= 0) return this.alert();\n choice.cursor--;\n return this.render();\n }\n\n space(ch, key) {\n return this.dispatch(ch, key);\n }\n\n number(ch, key) {\n return this.dispatch(ch, key);\n }\n\n next() {\n let ch = this.focused;\n if (!ch) return this.alert();\n let { initial, input } = ch;\n if (initial && initial.startsWith(input) && input !== initial) {\n ch.value = ch.input = initial;\n ch.cursor = ch.value.length;\n return this.render();\n }\n return super.next();\n }\n\n prev() {\n let ch = this.focused;\n if (!ch) return this.alert();\n if (ch.cursor === 0) return super.prev();\n ch.value = ch.input = '';\n ch.cursor = 0;\n return this.render();\n }\n\n separator() {\n return '';\n }\n\n format(value) {\n return !this.state.submitted ? super.format(value) : '';\n }\n\n pointer() {\n return '';\n }\n\n indicator(choice) {\n return choice.input ? '\u29BF' : '\u2299';\n }\n\n async choiceSeparator(choice, i) {\n let sep = await this.resolve(choice.separator, this.state, choice, i) || ':';\n return sep ? ' ' + this.styles.disabled(sep) : '';\n }\n\n async renderChoice(choice, i) {\n await this.onChoice(choice, i);\n\n let { state, styles } = this;\n let { cursor, initial = '', name, hint, input = '' } = choice;\n let { muted, submitted, primary, danger } = styles;\n\n let help = hint;\n let focused = this.index === i;\n let validate = choice.validate || (() => true);\n let sep = await this.choiceSeparator(choice, i);\n let msg = choice.message;\n\n if (this.align === 'right') msg = msg.padStart(this.longest + 1, ' ');\n if (this.align === 'left') msg = msg.padEnd(this.longest + 1, ' ');\n\n // re-populate the form values (answers) object\n let value = this.values[name] = (input || initial);\n let color = input ? 'success' : 'dark';\n\n if ((await validate.call(choice, value, this.state)) !== true) {\n color = 'danger';\n }\n\n let style = styles[color];\n let indicator = style(await this.indicator(choice, i)) + (choice.pad || '');\n\n let indent = this.indent(choice);\n let line = () => [indent, indicator, msg + sep, input, help].filter(Boolean).join(' ');\n\n if (state.submitted) {\n msg = colors.unstyle(msg);\n input = submitted(input);\n help = '';\n return line();\n }\n\n if (choice.format) {\n input = await choice.format.call(this, input, choice, i);\n } else {\n let color = this.styles.muted;\n let options = { input, initial, pos: cursor, showCursor: focused, color };\n input = placeholder(this, options);\n }\n\n if (!this.isValue(input)) {\n input = this.styles.muted(this.symbols.ellipsis);\n }\n\n if (choice.result) {\n this.values[name] = await choice.result.call(this, value, choice, i);\n }\n\n if (focused) {\n msg = primary(msg);\n }\n\n if (choice.error) {\n input += (input ? ' ' : '') + danger(choice.error.trim());\n } else if (choice.hint) {\n input += (input ? ' ' : '') + muted(choice.hint.trim());\n }\n\n return line();\n }\n\n async submit() {\n this.value = this.values;\n return super.base.submit.call(this);\n }\n}\n\nmodule.exports = FormPrompt;\n", "'use strict';\n\nconst FormPrompt = require('../prompts/form');\n\nconst defaultAuthenticate = () => {\n throw new Error('expected prompt to have a custom authenticate method');\n};\n\nconst factory = (authenticate = defaultAuthenticate) => {\n\n class AuthPrompt extends FormPrompt {\n constructor(options) {\n super(options);\n }\n\n async submit() {\n this.value = await authenticate.call(this, this.values, this.state);\n super.base.submit.call(this);\n }\n\n static create(authenticate) {\n return factory(authenticate);\n }\n }\n\n return AuthPrompt;\n};\n\nmodule.exports = factory();\n", "'use strict';\n\nconst AuthPrompt = require('../types/auth');\n\nfunction defaultAuthenticate(value, state) {\n if (value.username === this.options.username && value.password === this.options.password) {\n return true;\n }\n return false;\n}\n\nconst factory = (authenticate = defaultAuthenticate) => {\n const choices = [\n { name: 'username', message: 'username' },\n {\n name: 'password',\n message: 'password',\n format(input) {\n if (this.options.showPassword) {\n return input;\n }\n let color = this.state.submitted ? this.styles.primary : this.styles.muted;\n return color(this.symbols.asterisk.repeat(input.length));\n }\n }\n ];\n\n class BasicAuthPrompt extends AuthPrompt.create(authenticate) {\n constructor(options) {\n super({ ...options, choices });\n }\n\n static create(authenticate) {\n return factory(authenticate);\n }\n }\n\n return BasicAuthPrompt;\n};\n\nmodule.exports = factory();\n", "'use strict';\n\nconst Prompt = require('../prompt');\nconst { isPrimitive, hasColor } = require('../utils');\n\nclass BooleanPrompt extends Prompt {\n constructor(options) {\n super(options);\n this.cursorHide();\n }\n\n async initialize() {\n let initial = await this.resolve(this.initial, this.state);\n this.input = await this.cast(initial);\n await super.initialize();\n }\n\n dispatch(ch) {\n if (!this.isValue(ch)) return this.alert();\n this.input = ch;\n return this.submit();\n }\n\n format(value) {\n let { styles, state } = this;\n return !state.submitted ? styles.primary(value) : styles.success(value);\n }\n\n cast(input) {\n return this.isTrue(input);\n }\n\n isTrue(input) {\n return /^[ty1]/i.test(input);\n }\n\n isFalse(input) {\n return /^[fn0]/i.test(input);\n }\n\n isValue(value) {\n return isPrimitive(value) && (this.isTrue(value) || this.isFalse(value));\n }\n\n async hint() {\n if (this.state.status === 'pending') {\n let hint = await this.element('hint');\n if (!hasColor(hint)) {\n return this.styles.muted(hint);\n }\n return hint;\n }\n }\n\n async render() {\n let { input, size } = this.state;\n\n let prefix = await this.prefix();\n let sep = await this.separator();\n let msg = await this.message();\n let hint = this.styles.muted(this.default);\n\n let promptLine = [prefix, msg, hint, sep].filter(Boolean).join(' ');\n this.state.prompt = promptLine;\n\n let header = await this.header();\n let value = this.value = this.cast(input);\n let output = await this.format(value);\n let help = (await this.error()) || (await this.hint());\n let footer = await this.footer();\n\n if (help && !promptLine.includes(help)) output += ' ' + help;\n promptLine += ' ' + output;\n\n this.clear(size);\n this.write([header, promptLine, footer].filter(Boolean).join('\\n'));\n this.restore();\n }\n\n set value(value) {\n super.value = value;\n }\n get value() {\n return this.cast(super.value);\n }\n}\n\nmodule.exports = BooleanPrompt;\n", "'use strict';\n\nconst BooleanPrompt = require('../types/boolean');\n\nclass ConfirmPrompt extends BooleanPrompt {\n constructor(options) {\n super(options);\n this.default = this.options.default || (this.initial ? '(Y/n)' : '(y/N)');\n }\n}\n\nmodule.exports = ConfirmPrompt;\n\n", "'use strict';\n\nconst Select = require('./select');\nconst Form = require('./form');\nconst form = Form.prototype;\n\nclass Editable extends Select {\n constructor(options) {\n super({ ...options, multiple: true });\n this.align = [this.options.align, 'left'].find(v => v != null);\n this.emptyError = '';\n this.values = {};\n }\n\n dispatch(char, key) {\n let choice = this.focused;\n let parent = choice.parent || {};\n if (!choice.editable && !parent.editable) {\n if (char === 'a' || char === 'i') return super[char]();\n }\n return form.dispatch.call(this, char, key);\n }\n\n append(char, key) {\n return form.append.call(this, char, key);\n }\n\n delete(char, key) {\n return form.delete.call(this, char, key);\n }\n\n space(char) {\n return this.focused.editable ? this.append(char) : super.space();\n }\n\n number(char) {\n return this.focused.editable ? this.append(char) : super.number(char);\n }\n\n next() {\n return this.focused.editable ? form.next.call(this) : super.next();\n }\n\n prev() {\n return this.focused.editable ? form.prev.call(this) : super.prev();\n }\n\n async indicator(choice, i) {\n let symbol = choice.indicator || '';\n let value = choice.editable ? symbol : super.indicator(choice, i);\n return await this.resolve(value, this.state, choice, i) || '';\n }\n\n indent(choice) {\n return choice.role === 'heading' ? '' : (choice.editable ? ' ' : ' ');\n }\n\n async renderChoice(choice, i) {\n choice.indent = '';\n if (choice.editable) return form.renderChoice.call(this, choice, i);\n return super.renderChoice(choice, i);\n }\n\n error() {\n return '';\n }\n\n footer() {\n return this.state.error;\n }\n\n async validate() {\n let result = true;\n\n for (let choice of this.choices) {\n if (typeof choice.validate !== 'function') {\n continue;\n }\n\n if (choice.role === 'heading') {\n continue;\n }\n\n let val = choice.parent ? this.value[choice.parent.name] : this.value;\n\n if (choice.editable) {\n val = choice.value === choice.name ? choice.initial || '' : choice.value;\n } else if (!this.isDisabled(choice)) {\n val = choice.enabled === true;\n }\n\n result = await choice.validate(val, this.state);\n\n if (result !== true) {\n break;\n }\n }\n\n if (result !== true) {\n this.state.error = typeof result === 'string' ? result : 'Invalid Input';\n }\n\n return result;\n }\n\n submit() {\n if (this.focused.newChoice === true) return super.submit();\n if (this.choices.some(ch => ch.newChoice)) {\n return this.alert();\n }\n\n this.value = {};\n\n for (let choice of this.choices) {\n let val = choice.parent ? this.value[choice.parent.name] : this.value;\n\n if (choice.role === 'heading') {\n this.value[choice.name] = {};\n continue;\n }\n\n if (choice.editable) {\n val[choice.name] = choice.value === choice.name\n ? (choice.initial || '')\n : choice.value;\n\n } else if (!this.isDisabled(choice)) {\n val[choice.name] = choice.enabled === true;\n }\n }\n\n return this.base.submit.call(this);\n }\n}\n\nmodule.exports = Editable;\n", "'use strict';\n\nconst Prompt = require('../prompt');\nconst placeholder = require('../placeholder');\nconst { isPrimitive } = require('../utils');\n\nclass StringPrompt extends Prompt {\n constructor(options) {\n super(options);\n this.initial = isPrimitive(this.initial) ? String(this.initial) : '';\n if (this.initial) this.cursorHide();\n this.state.prevCursor = 0;\n this.state.clipboard = [];\n }\n\n async keypress(input, key = {}) {\n let prev = this.state.prevKeypress;\n this.state.prevKeypress = key;\n if (this.options.multiline === true && key.name === 'return') {\n if (!prev || prev.name !== 'return') {\n return this.append('\\n', key);\n }\n }\n return super.keypress(input, key);\n }\n\n moveCursor(n) {\n this.cursor += n;\n }\n\n reset() {\n this.input = this.value = '';\n this.cursor = 0;\n return this.render();\n }\n\n dispatch(ch, key) {\n if (!ch || key.ctrl || key.code) return this.alert();\n this.append(ch);\n }\n\n append(ch) {\n let { cursor, input } = this.state;\n this.input = `${input}`.slice(0, cursor) + ch + `${input}`.slice(cursor);\n this.moveCursor(String(ch).length);\n this.render();\n }\n\n insert(str) {\n this.append(str);\n }\n\n delete() {\n let { cursor, input } = this.state;\n if (cursor <= 0) return this.alert();\n this.input = `${input}`.slice(0, cursor - 1) + `${input}`.slice(cursor);\n this.moveCursor(-1);\n this.render();\n }\n\n deleteForward() {\n let { cursor, input } = this.state;\n if (input[cursor] === void 0) return this.alert();\n this.input = `${input}`.slice(0, cursor) + `${input}`.slice(cursor + 1);\n this.render();\n }\n\n cutForward() {\n let pos = this.cursor;\n if (this.input.length <= pos) return this.alert();\n this.state.clipboard.push(this.input.slice(pos));\n this.input = this.input.slice(0, pos);\n this.render();\n }\n\n cutLeft() {\n let pos = this.cursor;\n if (pos === 0) return this.alert();\n let before = this.input.slice(0, pos);\n let after = this.input.slice(pos);\n let words = before.split(' ');\n this.state.clipboard.push(words.pop());\n this.input = words.join(' ');\n this.cursor = this.input.length;\n this.input += after;\n this.render();\n }\n\n paste() {\n if (!this.state.clipboard.length) return this.alert();\n this.insert(this.state.clipboard.pop());\n this.render();\n }\n\n toggleCursor() {\n if (this.state.prevCursor) {\n this.cursor = this.state.prevCursor;\n this.state.prevCursor = 0;\n } else {\n this.state.prevCursor = this.cursor;\n this.cursor = 0;\n }\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.input.length - 1;\n this.render();\n }\n\n next() {\n let init = this.initial != null ? String(this.initial) : '';\n if (!init || !init.startsWith(this.input)) return this.alert();\n this.input = this.initial;\n this.cursor = this.initial.length;\n this.render();\n }\n\n prev() {\n if (!this.input) return this.alert();\n this.reset();\n }\n\n backward() {\n return this.left();\n }\n\n forward() {\n return this.right();\n }\n\n right() {\n if (this.cursor >= this.input.length) return this.alert();\n this.moveCursor(1);\n return this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.alert();\n this.moveCursor(-1);\n return this.render();\n }\n\n isValue(value) {\n return !!value;\n }\n\n async format(input = this.value) {\n let initial = await this.resolve(this.initial, this.state);\n if (!this.state.submitted) {\n return placeholder(this, { input, initial, pos: this.cursor });\n }\n return this.styles.submitted(input || initial);\n }\n\n async render() {\n let size = this.state.size;\n\n let prefix = await this.prefix();\n let separator = await this.separator();\n let message = await this.message();\n\n let prompt = [prefix, message, separator].filter(Boolean).join(' ');\n this.state.prompt = prompt;\n\n let header = await this.header();\n let output = await this.format();\n let help = (await this.error()) || (await this.hint());\n let footer = await this.footer();\n\n if (help && !output.includes(help)) output += ' ' + help;\n prompt += ' ' + output;\n\n this.clear(size);\n this.write([header, prompt, footer].filter(Boolean).join('\\n'));\n this.restore();\n }\n}\n\nmodule.exports = StringPrompt;\n", "'use strict';\n\nconst unique = arr => arr.filter((v, i) => arr.lastIndexOf(v) === i);\nconst compact = arr => unique(arr).filter(Boolean);\n\nmodule.exports = (action, data = {}, value = '') => {\n let { past = [], present = '' } = data;\n let rest, prev;\n\n switch (action) {\n case 'prev':\n case 'undo':\n rest = past.slice(0, past.length - 1);\n prev = past[past.length - 1] || '';\n return {\n past: compact([value, ...rest]),\n present: prev\n };\n\n case 'next':\n case 'redo':\n rest = past.slice(1);\n prev = past[0] || '';\n return {\n past: compact([...rest, value]),\n present: prev\n };\n\n case 'save':\n return {\n past: compact([...past, value]),\n present: ''\n };\n\n case 'remove':\n prev = compact(past.filter(v => v !== value));\n present = '';\n\n if (prev.length) {\n present = prev.pop();\n }\n\n return {\n past: prev,\n present\n };\n\n default: {\n throw new Error(`Invalid action: \"${action}\"`);\n }\n }\n};\n", "'use strict';\n\nconst Prompt = require('../types/string');\nconst completer = require('../completer');\n\nclass Input extends Prompt {\n constructor(options) {\n super(options);\n let history = this.options.history;\n if (history && history.store) {\n let initial = history.values || this.initial;\n this.autosave = !!history.autosave;\n this.store = history.store;\n this.data = this.store.get('values') || { past: [], present: initial };\n this.initial = this.data.present || this.data.past[this.data.past.length - 1];\n }\n }\n\n completion(action) {\n if (!this.store) return this.alert();\n this.data = completer(action, this.data, this.input);\n if (!this.data.present) return this.alert();\n this.input = this.data.present;\n this.cursor = this.input.length;\n return this.render();\n }\n\n altUp() {\n return this.completion('prev');\n }\n\n altDown() {\n return this.completion('next');\n }\n\n prev() {\n this.save();\n return super.prev();\n }\n\n save() {\n if (!this.store) return;\n this.data = completer('save', this.data, this.input);\n this.store.set('values', this.data);\n }\n\n submit() {\n if (this.store && this.autosave === true) {\n this.save();\n }\n return super.submit();\n }\n}\n\nmodule.exports = Input;\n", "'use strict';\n\nconst StringPrompt = require('../types/string');\n\nclass InvisiblePrompt extends StringPrompt {\n format() {\n return '';\n }\n}\n\nmodule.exports = InvisiblePrompt;\n", "'use strict';\n\nconst StringPrompt = require('../types/string');\n\nclass ListPrompt extends StringPrompt {\n constructor(options = {}) {\n super(options);\n this.sep = this.options.separator || /, */;\n this.initial = options.initial || '';\n }\n\n split(input = this.value) {\n return input ? String(input).split(this.sep) : [];\n }\n\n format() {\n let style = this.state.submitted ? this.styles.primary : val => val;\n return this.list.map(style).join(', ');\n }\n\n async submit(value) {\n let result = this.state.error || await this.validate(this.list, this.state);\n if (result !== true) {\n this.state.error = result;\n return super.submit();\n }\n this.value = this.list;\n return super.submit();\n }\n\n get list() {\n return this.split();\n }\n}\n\nmodule.exports = ListPrompt;\n", "'use strict';\n\nconst Select = require('./select');\n\nclass MultiSelect extends Select {\n constructor(options) {\n super({ ...options, multiple: true });\n }\n}\n\nmodule.exports = MultiSelect;\n", "'use strict';\n\nconst StringPrompt = require('./string');\n\nclass NumberPrompt extends StringPrompt {\n constructor(options = {}) {\n super({ style: 'number', ...options });\n this.min = this.isValue(options.min) ? this.toNumber(options.min) : -Infinity;\n this.max = this.isValue(options.max) ? this.toNumber(options.max) : Infinity;\n this.delay = options.delay != null ? options.delay : 1000;\n this.float = options.float !== false;\n this.round = options.round === true || options.float === false;\n this.major = options.major || 10;\n this.minor = options.minor || 1;\n this.initial = options.initial != null ? options.initial : '';\n this.input = String(this.initial);\n this.cursor = this.input.length;\n this.cursorShow();\n }\n\n append(ch) {\n if (!/[-+.]/.test(ch) || (ch === '.' && this.input.includes('.'))) {\n return this.alert('invalid number');\n }\n return super.append(ch);\n }\n\n number(ch) {\n return super.append(ch);\n }\n\n next() {\n if (this.input && this.input !== this.initial) return this.alert();\n if (!this.isValue(this.initial)) return this.alert();\n this.input = this.initial;\n this.cursor = String(this.initial).length;\n return this.render();\n }\n\n up(number) {\n let step = number || this.minor;\n let num = this.toNumber(this.input);\n if (num > this.max + step) return this.alert();\n this.input = `${num + step}`;\n return this.render();\n }\n\n down(number) {\n let step = number || this.minor;\n let num = this.toNumber(this.input);\n if (num < this.min - step) return this.alert();\n this.input = `${num - step}`;\n return this.render();\n }\n\n shiftDown() {\n return this.down(this.major);\n }\n\n shiftUp() {\n return this.up(this.major);\n }\n\n format(input = this.input) {\n if (typeof this.options.format === 'function') {\n return this.options.format.call(this, input);\n }\n return this.styles.info(input);\n }\n\n toNumber(value = '') {\n return this.float ? +value : Math.round(+value);\n }\n\n isValue(value) {\n return /^[-+]?[0-9]+((\\.)|(\\.[0-9]+))?$/.test(value);\n }\n\n submit() {\n let value = [this.input, this.initial].find(v => this.isValue(v));\n this.value = this.toNumber(value || 0);\n return super.submit();\n }\n}\n\nmodule.exports = NumberPrompt;\n", "module.exports = require('../types/number');\n", "'use strict';\n\nconst StringPrompt = require('../types/string');\n\nclass PasswordPrompt extends StringPrompt {\n constructor(options) {\n super(options);\n this.cursorShow();\n }\n\n format(input = this.input) {\n if (!this.keypressed) return '';\n let color = this.state.submitted ? this.styles.primary : this.styles.muted;\n return color(this.symbols.asterisk.repeat(input.length));\n }\n}\n\nmodule.exports = PasswordPrompt;\n", "'use strict';\n\nconst colors = require('ansi-colors');\nconst ArrayPrompt = require('../types/array');\nconst utils = require('../utils');\n\nclass LikertScale extends ArrayPrompt {\n constructor(options = {}) {\n super(options);\n this.widths = [].concat(options.messageWidth || 50);\n this.align = [].concat(options.align || 'left');\n this.linebreak = options.linebreak || false;\n this.edgeLength = options.edgeLength || 3;\n this.newline = options.newline || '\\n ';\n let start = options.startNumber || 1;\n if (typeof this.scale === 'number') {\n this.scaleKey = false;\n this.scale = Array(this.scale).fill(0).map((v, i) => ({ name: i + start }));\n }\n }\n\n async reset() {\n this.tableized = false;\n await super.reset();\n return this.render();\n }\n\n tableize() {\n if (this.tableized === true) return;\n this.tableized = true;\n let longest = 0;\n\n for (let ch of this.choices) {\n longest = Math.max(longest, ch.message.length);\n ch.scaleIndex = ch.initial || 2;\n ch.scale = [];\n\n for (let i = 0; i < this.scale.length; i++) {\n ch.scale.push({ index: i });\n }\n }\n this.widths[0] = Math.min(this.widths[0], longest + 3);\n }\n\n async dispatch(s, key) {\n if (this.multiple) {\n return this[key.name] ? await this[key.name](s, key) : await super.dispatch(s, key);\n }\n this.alert();\n }\n\n heading(msg, item, i) {\n return this.styles.strong(msg);\n }\n\n separator() {\n return this.styles.muted(this.symbols.ellipsis);\n }\n\n right() {\n let choice = this.focused;\n if (choice.scaleIndex >= this.scale.length - 1) return this.alert();\n choice.scaleIndex++;\n return this.render();\n }\n\n left() {\n let choice = this.focused;\n if (choice.scaleIndex <= 0) return this.alert();\n choice.scaleIndex--;\n return this.render();\n }\n\n indent() {\n return '';\n }\n\n format() {\n if (this.state.submitted) {\n let values = this.choices.map(ch => this.styles.info(ch.index));\n return values.join(', ');\n }\n return '';\n }\n\n pointer() {\n return '';\n }\n\n /**\n * Render the scale \"Key\". Something like:\n * @return {String}\n */\n\n renderScaleKey() {\n if (this.scaleKey === false) return '';\n if (this.state.submitted) return '';\n let scale = this.scale.map(item => ` ${item.name} - ${item.message}`);\n let key = ['', ...scale].map(item => this.styles.muted(item));\n return key.join('\\n');\n }\n\n /**\n * Render the heading row for the scale.\n * @return {String}\n */\n\n renderScaleHeading(max) {\n let keys = this.scale.map(ele => ele.name);\n if (typeof this.options.renderScaleHeading === 'function') {\n keys = this.options.renderScaleHeading.call(this, max);\n }\n let diff = this.scaleLength - keys.join('').length;\n let spacing = Math.round(diff / (keys.length - 1));\n let names = keys.map(key => this.styles.strong(key));\n let headings = names.join(' '.repeat(spacing));\n let padding = ' '.repeat(this.widths[0]);\n return this.margin[3] + padding + this.margin[1] + headings;\n }\n\n /**\n * Render a scale indicator => \u25EF or \u25C9 by default\n */\n\n scaleIndicator(choice, item, i) {\n if (typeof this.options.scaleIndicator === 'function') {\n return this.options.scaleIndicator.call(this, choice, item, i);\n }\n let enabled = choice.scaleIndex === item.index;\n if (item.disabled) return this.styles.hint(this.symbols.radio.disabled);\n if (enabled) return this.styles.success(this.symbols.radio.on);\n return this.symbols.radio.off;\n }\n\n /**\n * Render the actual scale => \u25EF\u2500\u2500\u2500\u2500\u25EF\u2500\u2500\u2500\u2500\u25C9\u2500\u2500\u2500\u2500\u25EF\u2500\u2500\u2500\u2500\u25EF\n */\n\n renderScale(choice, i) {\n let scale = choice.scale.map(item => this.scaleIndicator(choice, item, i));\n let padding = this.term === 'Hyper' ? '' : ' ';\n return scale.join(padding + this.symbols.line.repeat(this.edgeLength));\n }\n\n /**\n * Render a choice, including scale =>\n * \"The website is easy to navigate. \u25EF\u2500\u2500\u2500\u25EF\u2500\u2500\u2500\u25C9\u2500\u2500\u2500\u25EF\u2500\u2500\u2500\u25EF\"\n */\n\n async renderChoice(choice, i) {\n await this.onChoice(choice, i);\n\n let focused = this.index === i;\n let pointer = await this.pointer(choice, i);\n let hint = await choice.hint;\n\n if (hint && !utils.hasColor(hint)) {\n hint = this.styles.muted(hint);\n }\n\n let pad = str => this.margin[3] + str.replace(/\\s+$/, '').padEnd(this.widths[0], ' ');\n let newline = this.newline;\n let ind = this.indent(choice);\n let message = await this.resolve(choice.message, this.state, choice, i);\n let scale = await this.renderScale(choice, i);\n let margin = this.margin[1] + this.margin[3];\n this.scaleLength = colors.unstyle(scale).length;\n this.widths[0] = Math.min(this.widths[0], this.width - this.scaleLength - margin.length);\n let msg = utils.wordWrap(message, { width: this.widths[0], newline });\n let lines = msg.split('\\n').map(line => pad(line) + this.margin[1]);\n\n if (focused) {\n scale = this.styles.info(scale);\n lines = lines.map(line => this.styles.info(line));\n }\n\n lines[0] += scale;\n\n if (this.linebreak) lines.push('');\n return [ind + pointer, lines.join('\\n')].filter(Boolean);\n }\n\n async renderChoices() {\n if (this.state.submitted) return '';\n this.tableize();\n let choices = this.visible.map(async(ch, i) => await this.renderChoice(ch, i));\n let visible = await Promise.all(choices);\n let heading = await this.renderScaleHeading();\n return this.margin[0] + [heading, ...visible.map(v => v.join(' '))].join('\\n');\n }\n\n async render() {\n let { submitted, size } = this.state;\n\n let prefix = await this.prefix();\n let separator = await this.separator();\n let message = await this.message();\n\n let prompt = '';\n if (this.options.promptLine !== false) {\n prompt = [prefix, message, separator, ''].join(' ');\n this.state.prompt = prompt;\n }\n\n let header = await this.header();\n let output = await this.format();\n let key = await this.renderScaleKey();\n let help = await this.error() || await this.hint();\n let body = await this.renderChoices();\n let footer = await this.footer();\n let err = this.emptyError;\n\n if (output) prompt += output;\n if (help && !prompt.includes(help)) prompt += ' ' + help;\n\n if (submitted && !output && !body.trim() && this.multiple && err != null) {\n prompt += this.styles.danger(err);\n }\n\n this.clear(size);\n this.write([header, prompt, key, body, footer].filter(Boolean).join('\\n'));\n if (!this.state.submitted) {\n this.write(this.margin[2]);\n }\n this.restore();\n }\n\n submit() {\n this.value = {};\n for (let choice of this.choices) {\n this.value[choice.name] = choice.scaleIndex;\n }\n return this.base.submit.call(this);\n }\n}\n\nmodule.exports = LikertScale;\n", "'use strict';\n\nconst colors = require('ansi-colors');\nconst clean = (str = '') => {\n return typeof str === 'string' ? str.replace(/^['\"]|['\"]$/g, '') : '';\n};\n\n/**\n * This file contains the interpolation and rendering logic for\n * the Snippet prompt.\n */\n\nclass Item {\n constructor(token) {\n this.name = token.key;\n this.field = token.field || {};\n this.value = clean(token.initial || this.field.initial || '');\n this.message = token.message || this.name;\n this.cursor = 0;\n this.input = '';\n this.lines = [];\n }\n}\n\nconst tokenize = async(options = {}, defaults = {}, fn = token => token) => {\n let unique = new Set();\n let fields = options.fields || [];\n let input = options.template;\n let tabstops = [];\n let items = [];\n let keys = [];\n let line = 1;\n\n if (typeof input === 'function') {\n input = await input();\n }\n\n let i = -1;\n let next = () => input[++i];\n let peek = () => input[i + 1];\n let push = token => {\n token.line = line;\n tabstops.push(token);\n };\n\n push({ type: 'bos', value: '' });\n\n while (i < input.length - 1) {\n let value = next();\n\n if (/^[^\\S\\n ]$/.test(value)) {\n push({ type: 'text', value });\n continue;\n }\n\n if (value === '\\n') {\n push({ type: 'newline', value });\n line++;\n continue;\n }\n\n if (value === '\\\\') {\n value += next();\n push({ type: 'text', value });\n continue;\n }\n\n if ((value === '$' || value === '#' || value === '{') && peek() === '{') {\n let n = next();\n value += n;\n\n let token = { type: 'template', open: value, inner: '', close: '', value };\n let ch;\n\n while ((ch = next())) {\n if (ch === '}') {\n if (peek() === '}') ch += next();\n token.value += ch;\n token.close = ch;\n break;\n }\n\n if (ch === ':') {\n token.initial = '';\n token.key = token.inner;\n } else if (token.initial !== void 0) {\n token.initial += ch;\n }\n\n token.value += ch;\n token.inner += ch;\n }\n\n token.template = token.open + (token.initial || token.inner) + token.close;\n token.key = token.key || token.inner;\n\n if (defaults.hasOwnProperty(token.key)) {\n token.initial = defaults[token.key];\n }\n\n token = fn(token);\n push(token);\n\n keys.push(token.key);\n unique.add(token.key);\n\n let item = items.find(item => item.name === token.key);\n token.field = fields.find(ch => ch.name === token.key);\n\n if (!item) {\n item = new Item(token);\n items.push(item);\n }\n\n item.lines.push(token.line - 1);\n continue;\n }\n\n let last = tabstops[tabstops.length - 1];\n if (last.type === 'text' && last.line === line) {\n last.value += value;\n } else {\n push({ type: 'text', value });\n }\n }\n\n push({ type: 'eos', value: '' });\n return { input, tabstops, unique, keys, items };\n};\n\nmodule.exports = async prompt => {\n let options = prompt.options;\n let required = new Set(options.required === true ? [] : (options.required || []));\n let defaults = { ...options.values, ...options.initial };\n let { tabstops, items, keys } = await tokenize(options, defaults);\n\n let result = createFn('result', prompt, options);\n let format = createFn('format', prompt, options);\n let isValid = createFn('validate', prompt, options, true);\n let isVal = prompt.isValue.bind(prompt);\n\n return async(state = {}, submitted = false) => {\n let index = 0;\n\n state.required = required;\n state.items = items;\n state.keys = keys;\n state.output = '';\n\n let validate = async(value, state, item, index) => {\n let error = await isValid(value, state, item, index);\n if (error === false) {\n return 'Invalid field ' + item.name;\n }\n return error;\n };\n\n for (let token of tabstops) {\n let value = token.value;\n let key = token.key;\n\n if (token.type !== 'template') {\n if (value) state.output += value;\n continue;\n }\n\n if (token.type === 'template') {\n let item = items.find(ch => ch.name === key);\n\n if (options.required === true) {\n state.required.add(item.name);\n }\n\n let val = [item.input, state.values[item.value], item.value, value].find(isVal);\n let field = item.field || {};\n let message = field.message || token.inner;\n\n if (submitted) {\n let error = await validate(state.values[key], state, item, index);\n if ((error && typeof error === 'string') || error === false) {\n state.invalid.set(key, error);\n continue;\n }\n\n state.invalid.delete(key);\n let res = await result(state.values[key], state, item, index);\n state.output += colors.unstyle(res);\n continue;\n }\n\n item.placeholder = false;\n\n let before = value;\n value = await format(value, state, item, index);\n\n if (val !== value) {\n state.values[key] = val;\n value = prompt.styles.typing(val);\n state.missing.delete(message);\n\n } else {\n state.values[key] = void 0;\n val = `<${message}>`;\n value = prompt.styles.primary(val);\n item.placeholder = true;\n\n if (state.required.has(key)) {\n state.missing.add(message);\n }\n }\n\n if (state.missing.has(message) && state.validating) {\n value = prompt.styles.warning(val);\n }\n\n if (state.invalid.has(key) && state.validating) {\n value = prompt.styles.danger(val);\n }\n\n if (index === state.index) {\n if (before !== value) {\n value = prompt.styles.underline(value);\n } else {\n value = prompt.styles.heading(colors.unstyle(value));\n }\n }\n\n index++;\n }\n\n if (value) {\n state.output += value;\n }\n }\n\n let lines = state.output.split('\\n').map(l => ' ' + l);\n let len = items.length;\n let done = 0;\n\n for (let item of items) {\n if (state.invalid.has(item.name)) {\n item.lines.forEach(i => {\n if (lines[i][0] !== ' ') return;\n lines[i] = state.styles.danger(state.symbols.bullet) + lines[i].slice(1);\n });\n }\n\n if (prompt.isValue(state.values[item.name])) {\n done++;\n }\n }\n\n state.completed = ((done / len) * 100).toFixed(0);\n state.output = lines.join('\\n');\n return state.output;\n };\n};\n\nfunction createFn(prop, prompt, options, fallback) {\n return (value, state, item, index) => {\n if (typeof item.field[prop] === 'function') {\n return item.field[prop].call(prompt, value, state, item, index);\n }\n return [fallback, value].find(v => prompt.isValue(v));\n };\n}\n", "'use strict';\n\nconst colors = require('ansi-colors');\nconst interpolate = require('../interpolate');\nconst Prompt = require('../prompt');\n\nclass SnippetPrompt extends Prompt {\n constructor(options) {\n super(options);\n this.cursorHide();\n this.reset(true);\n }\n\n async initialize() {\n this.interpolate = await interpolate(this);\n await super.initialize();\n }\n\n async reset(first) {\n this.state.keys = [];\n this.state.invalid = new Map();\n this.state.missing = new Set();\n this.state.completed = 0;\n this.state.values = {};\n\n if (first !== true) {\n await this.initialize();\n await this.render();\n }\n }\n\n moveCursor(n) {\n let item = this.getItem();\n this.cursor += n;\n item.cursor += n;\n }\n\n dispatch(ch, key) {\n if (!key.code && !key.ctrl && ch != null && this.getItem()) {\n this.append(ch, key);\n return;\n }\n this.alert();\n }\n\n append(ch, key) {\n let item = this.getItem();\n let prefix = item.input.slice(0, this.cursor);\n let suffix = item.input.slice(this.cursor);\n this.input = item.input = `${prefix}${ch}${suffix}`;\n this.moveCursor(1);\n this.render();\n }\n\n delete() {\n let item = this.getItem();\n if (this.cursor <= 0 || !item.input) return this.alert();\n let suffix = item.input.slice(this.cursor);\n let prefix = item.input.slice(0, this.cursor - 1);\n this.input = item.input = `${prefix}${suffix}`;\n this.moveCursor(-1);\n this.render();\n }\n\n increment(i) {\n return i >= this.state.keys.length - 1 ? 0 : i + 1;\n }\n\n decrement(i) {\n return i <= 0 ? this.state.keys.length - 1 : i - 1;\n }\n\n first() {\n this.state.index = 0;\n this.render();\n }\n\n last() {\n this.state.index = this.state.keys.length - 1;\n this.render();\n }\n\n right() {\n if (this.cursor >= this.input.length) return this.alert();\n this.moveCursor(1);\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.alert();\n this.moveCursor(-1);\n this.render();\n }\n\n prev() {\n this.state.index = this.decrement(this.state.index);\n this.getItem();\n this.render();\n }\n\n next() {\n this.state.index = this.increment(this.state.index);\n this.getItem();\n this.render();\n }\n\n up() {\n this.prev();\n }\n\n down() {\n this.next();\n }\n\n format(value) {\n let color = this.state.completed < 100 ? this.styles.warning : this.styles.success;\n if (this.state.submitted === true && this.state.completed !== 100) {\n color = this.styles.danger;\n }\n return color(`${this.state.completed}% completed`);\n }\n\n async render() {\n let { index, keys = [], submitted, size } = this.state;\n\n let newline = [this.options.newline, '\\n'].find(v => v != null);\n let prefix = await this.prefix();\n let separator = await this.separator();\n let message = await this.message();\n\n let prompt = [prefix, message, separator].filter(Boolean).join(' ');\n this.state.prompt = prompt;\n\n let header = await this.header();\n let error = (await this.error()) || '';\n let hint = (await this.hint()) || '';\n let body = submitted ? '' : await this.interpolate(this.state);\n\n let key = this.state.key = keys[index] || '';\n let input = await this.format(key);\n let footer = await this.footer();\n if (input) prompt += ' ' + input;\n if (hint && !input && this.state.completed === 0) prompt += ' ' + hint;\n\n this.clear(size);\n let lines = [header, prompt, body, footer, error.trim()];\n this.write(lines.filter(Boolean).join(newline));\n this.restore();\n }\n\n getItem(name) {\n let { items, keys, index } = this.state;\n let item = items.find(ch => ch.name === keys[index]);\n if (item && item.input != null) {\n this.input = item.input;\n this.cursor = item.cursor;\n }\n return item;\n }\n\n async submit() {\n if (typeof this.interpolate !== 'function') await this.initialize();\n await this.interpolate(this.state, true);\n\n let { invalid, missing, output, values } = this.state;\n if (invalid.size) {\n let err = '';\n for (let [key, value] of invalid) err += `Invalid ${key}: ${value}\\n`;\n this.state.error = err;\n return super.submit();\n }\n\n if (missing.size) {\n this.state.error = 'Required: ' + [...missing.keys()].join(', ');\n return super.submit();\n }\n\n let lines = colors.unstyle(output).split('\\n');\n let result = lines.map(v => v.slice(1)).join('\\n');\n this.value = { values, result };\n return super.submit();\n }\n}\n\nmodule.exports = SnippetPrompt;\n", "'use strict';\n\nconst hint = '(Use <shift>+<up/down> to sort)';\nconst Prompt = require('./select');\n\nclass Sort extends Prompt {\n constructor(options) {\n super({ ...options, reorder: false, sort: true, multiple: true });\n this.state.hint = [this.options.hint, hint].find(this.isValue.bind(this));\n }\n\n indicator() {\n return '';\n }\n\n async renderChoice(choice, i) {\n let str = await super.renderChoice(choice, i);\n let sym = this.symbols.identicalTo + ' ';\n let pre = (this.index === i && this.sorting) ? this.styles.muted(sym) : ' ';\n if (this.options.drag === false) pre = '';\n if (this.options.numbered === true) {\n return pre + `${i + 1} - ` + str;\n }\n return pre + str;\n }\n\n get selected() {\n return this.choices;\n }\n\n submit() {\n this.value = this.choices.map(choice => choice.value);\n return super.submit();\n }\n}\n\nmodule.exports = Sort;\n", "'use strict';\n\nconst ArrayPrompt = require('../types/array');\n\nclass Survey extends ArrayPrompt {\n constructor(options = {}) {\n super(options);\n this.emptyError = options.emptyError || 'No items were selected';\n this.term = process.env.TERM_PROGRAM;\n\n if (!this.options.header) {\n let header = ['', '4 - Strongly Agree', '3 - Agree', '2 - Neutral', '1 - Disagree', '0 - Strongly Disagree', ''];\n header = header.map(ele => this.styles.muted(ele));\n this.state.header = header.join('\\n ');\n }\n }\n\n async toChoices(...args) {\n if (this.createdScales) return false;\n this.createdScales = true;\n let choices = await super.toChoices(...args);\n for (let choice of choices) {\n choice.scale = createScale(5, this.options);\n choice.scaleIdx = 2;\n }\n return choices;\n }\n\n dispatch() {\n this.alert();\n }\n\n space() {\n let choice = this.focused;\n let ele = choice.scale[choice.scaleIdx];\n let selected = ele.selected;\n choice.scale.forEach(e => (e.selected = false));\n ele.selected = !selected;\n return this.render();\n }\n\n indicator() {\n return '';\n }\n\n pointer() {\n return '';\n }\n\n separator() {\n return this.styles.muted(this.symbols.ellipsis);\n }\n\n right() {\n let choice = this.focused;\n if (choice.scaleIdx >= choice.scale.length - 1) return this.alert();\n choice.scaleIdx++;\n return this.render();\n }\n\n left() {\n let choice = this.focused;\n if (choice.scaleIdx <= 0) return this.alert();\n choice.scaleIdx--;\n return this.render();\n }\n\n indent() {\n return ' ';\n }\n\n async renderChoice(item, i) {\n await this.onChoice(item, i);\n let focused = this.index === i;\n let isHyper = this.term === 'Hyper';\n let n = !isHyper ? 8 : 9;\n let s = !isHyper ? ' ' : '';\n let ln = this.symbols.line.repeat(n);\n let sp = ' '.repeat(n + (isHyper ? 0 : 1));\n let dot = enabled => (enabled ? this.styles.success('\u25C9') : '\u25EF') + s;\n\n let num = i + 1 + '.';\n let color = focused ? this.styles.heading : this.styles.noop;\n let msg = await this.resolve(item.message, this.state, item, i);\n let indent = this.indent(item);\n let scale = indent + item.scale.map((e, i) => dot(i === item.scaleIdx)).join(ln);\n let val = i => i === item.scaleIdx ? color(i) : i;\n let next = indent + item.scale.map((e, i) => val(i)).join(sp);\n\n let line = () => [num, msg].filter(Boolean).join(' ');\n let lines = () => [line(), scale, next, ' '].filter(Boolean).join('\\n');\n\n if (focused) {\n scale = this.styles.cyan(scale);\n next = this.styles.cyan(next);\n }\n\n return lines();\n }\n\n async renderChoices() {\n if (this.state.submitted) return '';\n let choices = this.visible.map(async(ch, i) => await this.renderChoice(ch, i));\n let visible = await Promise.all(choices);\n if (!visible.length) visible.push(this.styles.danger('No matching choices'));\n return visible.join('\\n');\n }\n\n format() {\n if (this.state.submitted) {\n let values = this.choices.map(ch => this.styles.info(ch.scaleIdx));\n return values.join(', ');\n }\n return '';\n }\n\n async render() {\n let { submitted, size } = this.state;\n\n let prefix = await this.prefix();\n let separator = await this.separator();\n let message = await this.message();\n\n let prompt = [prefix, message, separator].filter(Boolean).join(' ');\n this.state.prompt = prompt;\n\n let header = await this.header();\n let output = await this.format();\n let help = await this.error() || await this.hint();\n let body = await this.renderChoices();\n let footer = await this.footer();\n\n if (output || !help) prompt += ' ' + output;\n if (help && !prompt.includes(help)) prompt += ' ' + help;\n\n if (submitted && !output && !body && this.multiple && this.type !== 'form') {\n prompt += this.styles.danger(this.emptyError);\n }\n\n this.clear(size);\n this.write([prompt, header, body, footer].filter(Boolean).join('\\n'));\n this.restore();\n }\n\n submit() {\n this.value = {};\n for (let choice of this.choices) {\n this.value[choice.name] = choice.scaleIdx;\n }\n return this.base.submit.call(this);\n }\n}\n\nfunction createScale(n, options = {}) {\n if (Array.isArray(options.scale)) {\n return options.scale.map(ele => ({ ...ele }));\n }\n let scale = [];\n for (let i = 1; i < n + 1; i++) scale.push({ i, selected: false });\n return scale;\n}\n\nmodule.exports = Survey;\n", "module.exports = require('./input');\n", "'use strict';\n\nconst BooleanPrompt = require('../types/boolean');\n\nclass TogglePrompt extends BooleanPrompt {\n async initialize() {\n await super.initialize();\n this.value = this.initial = !!this.options.initial;\n this.disabled = this.options.disabled || 'no';\n this.enabled = this.options.enabled || 'yes';\n await this.render();\n }\n\n reset() {\n this.value = this.initial;\n this.render();\n }\n\n delete() {\n this.alert();\n }\n\n toggle() {\n this.value = !this.value;\n this.render();\n }\n\n enable() {\n if (this.value === true) return this.alert();\n this.value = true;\n this.render();\n }\n disable() {\n if (this.value === false) return this.alert();\n this.value = false;\n this.render();\n }\n\n up() {\n this.toggle();\n }\n down() {\n this.toggle();\n }\n right() {\n this.toggle();\n }\n left() {\n this.toggle();\n }\n next() {\n this.toggle();\n }\n prev() {\n this.toggle();\n }\n\n dispatch(ch = '', key) {\n switch (ch.toLowerCase()) {\n case ' ':\n return this.toggle();\n case '1':\n case 'y':\n case 't':\n return this.enable();\n case '0':\n case 'n':\n case 'f':\n return this.disable();\n default: {\n return this.alert();\n }\n }\n }\n\n format() {\n let active = str => this.styles.primary.underline(str);\n let value = [\n this.value ? this.disabled : active(this.disabled),\n this.value ? active(this.enabled) : this.enabled\n ];\n return value.join(this.styles.muted(' / '));\n }\n\n async render() {\n let { size } = this.state;\n\n let header = await this.header();\n let prefix = await this.prefix();\n let separator = await this.separator();\n let message = await this.message();\n\n let output = await this.format();\n let help = (await this.error()) || (await this.hint());\n let footer = await this.footer();\n\n let prompt = [prefix, message, separator, output].join(' ');\n this.state.prompt = prompt;\n\n if (help && !prompt.includes(help)) prompt += ' ' + help;\n\n this.clear(size);\n this.write([header, prompt, footer].filter(Boolean).join('\\n'));\n this.write(this.margin[2]);\n this.restore();\n }\n}\n\nmodule.exports = TogglePrompt;\n", "'use strict';\n\nconst SelectPrompt = require('./select');\n\nclass Quiz extends SelectPrompt {\n constructor(options) {\n super(options);\n if (typeof this.options.correctChoice !== 'number' || this.options.correctChoice < 0) {\n throw new Error('Please specify the index of the correct answer from the list of choices');\n }\n }\n\n async toChoices(value, parent) {\n let choices = await super.toChoices(value, parent);\n if (choices.length < 2) {\n throw new Error('Please give at least two choices to the user');\n }\n if (this.options.correctChoice > choices.length) {\n throw new Error('Please specify the index of the correct answer from the list of choices');\n }\n return choices;\n }\n\n check(state) {\n return state.index === this.options.correctChoice;\n }\n\n async result(selected) {\n return {\n selectedAnswer: selected,\n correctAnswer: this.options.choices[this.options.correctChoice].value,\n correct: await this.check(this.state)\n };\n }\n}\n\nmodule.exports = Quiz;\n", "'use strict';\n\nconst utils = require('../utils');\n\nconst define = (key, fn) => {\n utils.defineExport(exports, key, fn);\n utils.defineExport(exports, key.toLowerCase(), fn);\n};\n\ndefine('AutoComplete', () => require('./autocomplete'));\ndefine('BasicAuth', () => require('./basicauth'));\ndefine('Confirm', () => require('./confirm'));\ndefine('Editable', () => require('./editable'));\ndefine('Form', () => require('./form'));\ndefine('Input', () => require('./input'));\ndefine('Invisible', () => require('./invisible'));\ndefine('List', () => require('./list'));\ndefine('MultiSelect', () => require('./multiselect'));\ndefine('Numeral', () => require('./numeral'));\ndefine('Password', () => require('./password'));\ndefine('Scale', () => require('./scale'));\ndefine('Select', () => require('./select'));\ndefine('Snippet', () => require('./snippet'));\ndefine('Sort', () => require('./sort'));\ndefine('Survey', () => require('./survey'));\ndefine('Text', () => require('./text'));\ndefine('Toggle', () => require('./toggle'));\ndefine('Quiz', () => require('./quiz'));\n", "module.exports = {\n ArrayPrompt: require('./array'),\n AuthPrompt: require('./auth'),\n BooleanPrompt: require('./boolean'),\n NumberPrompt: require('./number'),\n StringPrompt: require('./string')\n};\n", "'use strict';\n\nconst assert = require('assert');\nconst Events = require('events');\nconst utils = require('./lib/utils');\n\n/**\n * Create an instance of `Enquirer`.\n *\n * ```js\n * const Enquirer = require('enquirer');\n * const enquirer = new Enquirer();\n * ```\n * @name Enquirer\n * @param {Object} `options` (optional) Options to use with all prompts.\n * @param {Object} `answers` (optional) Answers object to initialize with.\n * @api public\n */\n\nclass Enquirer extends Events {\n constructor(options, answers) {\n super();\n this.options = utils.merge({}, options);\n this.answers = { ...answers };\n }\n\n /**\n * Register a custom prompt type.\n *\n * ```js\n * const Enquirer = require('enquirer');\n * const enquirer = new Enquirer();\n * enquirer.register('customType', require('./custom-prompt'));\n * ```\n * @name register()\n * @param {String} `type`\n * @param {Function|Prompt} `fn` `Prompt` class, or a function that returns a `Prompt` class.\n * @return {Object} Returns the Enquirer instance\n * @api public\n */\n\n register(type, fn) {\n if (utils.isObject(type)) {\n for (let key of Object.keys(type)) this.register(key, type[key]);\n return this;\n }\n assert.equal(typeof fn, 'function', 'expected a function');\n let name = type.toLowerCase();\n if (fn.prototype instanceof this.Prompt) {\n this.prompts[name] = fn;\n } else {\n this.prompts[name] = fn(this.Prompt, this);\n }\n return this;\n }\n\n /**\n * Prompt function that takes a \"question\" object or array of question objects,\n * and returns an object with responses from the user.\n *\n * ```js\n * const Enquirer = require('enquirer');\n * const enquirer = new Enquirer();\n *\n * const response = await enquirer.prompt({\n * type: 'input',\n * name: 'username',\n * message: 'What is your username?'\n * });\n * console.log(response);\n * ```\n * @name prompt()\n * @param {Array|Object} `questions` Options objects for one or more prompts to run.\n * @return {Promise} Promise that returns an \"answers\" object with the user's responses.\n * @api public\n */\n\n async prompt(questions = []) {\n for (let question of [].concat(questions)) {\n try {\n if (typeof question === 'function') question = await question.call(this);\n await this.ask(utils.merge({}, this.options, question));\n } catch (err) {\n return Promise.reject(err);\n }\n }\n return this.answers;\n }\n\n async ask(question) {\n if (typeof question === 'function') {\n question = await question.call(this);\n }\n\n let opts = utils.merge({}, this.options, question);\n let { type, name } = question;\n let { set, get } = utils;\n\n if (typeof type === 'function') {\n type = await type.call(this, question, this.answers);\n }\n\n if (!type) return this.answers[name];\n\n assert(this.prompts[type], `Prompt \"${type}\" is not registered`);\n\n let prompt = new this.prompts[type](opts);\n let value = get(this.answers, name);\n\n prompt.state.answers = this.answers;\n prompt.enquirer = this;\n\n if (name) {\n prompt.on('submit', value => {\n this.emit('answer', name, value, prompt);\n set(this.answers, name, value);\n });\n }\n\n // bubble events\n let emit = prompt.emit.bind(prompt);\n prompt.emit = (...args) => {\n this.emit.call(this, ...args);\n return emit(...args);\n };\n\n this.emit('prompt', prompt, this);\n\n if (opts.autofill && value != null) {\n prompt.value = prompt.input = value;\n\n // if \"autofill=show\" render the prompt, otherwise stay \"silent\"\n if (opts.autofill === 'show') {\n await prompt.submit();\n }\n } else {\n value = prompt.value = await prompt.run();\n }\n\n return value;\n }\n\n /**\n * Use an enquirer plugin.\n *\n * ```js\n * const Enquirer = require('enquirer');\n * const enquirer = new Enquirer();\n * const plugin = enquirer => {\n * // do stuff to enquire instance\n * };\n * enquirer.use(plugin);\n * ```\n * @name use()\n * @param {Function} `plugin` Plugin function that takes an instance of Enquirer.\n * @return {Object} Returns the Enquirer instance.\n * @api public\n */\n\n use(plugin) {\n plugin.call(this, this);\n return this;\n }\n\n set Prompt(value) {\n this._Prompt = value;\n }\n get Prompt() {\n return this._Prompt || this.constructor.Prompt;\n }\n\n get prompts() {\n return this.constructor.prompts;\n }\n\n static set Prompt(value) {\n this._Prompt = value;\n }\n static get Prompt() {\n return this._Prompt || require('./lib/prompt');\n }\n\n static get prompts() {\n return require('./lib/prompts');\n }\n\n static get types() {\n return require('./lib/types');\n }\n\n /**\n * Prompt function that takes a \"question\" object or array of question objects,\n * and returns an object with responses from the user.\n *\n * ```js\n * const { prompt } = require('enquirer');\n * const response = await prompt({\n * type: 'input',\n * name: 'username',\n * message: 'What is your username?'\n * });\n * console.log(response);\n * ```\n * @name Enquirer#prompt\n * @param {Array|Object} `questions` Options objects for one or more prompts to run.\n * @return {Promise} Promise that returns an \"answers\" object with the user's responses.\n * @api public\n */\n\n static get prompt() {\n const fn = (questions, ...rest) => {\n let enquirer = new this(...rest);\n let emit = enquirer.emit.bind(enquirer);\n enquirer.emit = (...args) => {\n fn.emit(...args);\n return emit(...args);\n };\n return enquirer.prompt(questions);\n };\n utils.mixinEmitter(fn, new Events());\n return fn;\n }\n}\n\nutils.mixinEmitter(Enquirer, new Events());\nconst prompts = Enquirer.prompts;\n\nfor (let name of Object.keys(prompts)) {\n let key = name.toLowerCase();\n\n let run = options => new prompts[name](options).run();\n Enquirer.prompt[key] = run;\n Enquirer[key] = run;\n\n if (!Enquirer[name]) {\n Reflect.defineProperty(Enquirer, name, { get: () => prompts[name] });\n }\n}\n\nconst exp = name => {\n utils.defineExport(Enquirer, name, () => Enquirer.types[name]);\n};\n\nexp('ArrayPrompt');\nexp('AuthPrompt');\nexp('BooleanPrompt');\nexp('NumberPrompt');\nexp('StringPrompt');\n\nmodule.exports = Enquirer;\n", "import { Command } from 'commander'\r\nimport { esbuildCommand } from './commands/esbuild'\r\nimport { generateCommand } from './commands/generate'\r\nimport { syncCommand } from './commands/sync'\r\n\r\nconst main = new Command()\r\nmain\r\n .addCommand(esbuildCommand)\r\n .addCommand(generateCommand)\r\n .addCommand(syncCommand)\r\n .parse()\r\n", "import { Command } from 'commander'\r\nimport { ESBuildProgram } from './ESBuildProgram'\r\nimport path from 'path'\r\n\r\nexport const esbuildCommand = new Command('build')\r\n .addCommand(\r\n new Command('lib')\r\n .description('\u4F7F\u7528 esbulid \u5C06 ts lib \u6253\u5305\u5230 dist \u76EE\u5F55\uFF0C\u683C\u5F0F\u4E3A esm/cjs')\r\n .option('-w --watch', '\u76D1\u89C6\u6A21\u5F0F')\r\n .action(async (option: { watch?: boolean }) => {\r\n const buildProgram = new ESBuildProgram({\r\n base: path.resolve(),\r\n isWatch: !!option.watch,\r\n })\r\n await buildProgram.buildLib()\r\n })\r\n .alias('pkg'),\r\n )\r\n .addCommand(\r\n new Command('cli')\r\n .description(\r\n '\u4F7F\u7528 esbulid \u5C06 ts cli \u6253\u5305\u5230 dist \u76EE\u5F55\uFF0C\u683C\u5F0F\u4E3A cjs\uFF0C\u5E76\u4E14\u6346\u7ED1\u4F9D\u8D56',\r\n )\r\n .option('-w, --watch', '\u76D1\u89C6\u6A21\u5F0F')\r\n .action(async (option: { watch?: boolean }) => {\r\n const buildProgram = new ESBuildProgram({\r\n base: path.resolve(),\r\n isWatch: !!option.watch,\r\n })\r\n await buildProgram.buildCli()\r\n }),\r\n )\r\n", "import { build, BuildOptions, Platform, Plugin } from 'esbuild'\r\nimport { pathExists, readJson } from 'fs-extra'\r\nimport * as path from 'path'\r\nimport { PackageJson } from 'type-fest'\r\nimport { Project } from 'ts-morph'\r\nimport { promise } from 'glob-promise'\r\nimport { IOptions } from 'glob'\r\nimport { nativeNodeModules, nodeExternals } from './util/esbuildPlugins'\r\nimport { watch } from 'chokidar'\r\nimport Spinnies from 'spinnies'\r\nimport { debounce } from './util/debounce'\r\n\r\ninterface ESBuildProgramOptions {\r\n base: string\r\n isWatch: boolean\r\n}\r\n\r\ninterface Task {\r\n title: string\r\n task(): Promise<any>\r\n}\r\n\r\nexport class ESBuildProgram {\r\n constructor(private readonly options: ESBuildProgramOptions) {}\r\n\r\n static readonly globalExternal = ['esbuild', 'pnpapi', 'ts-morph']\r\n\r\n /**\r\n * \u83B7\u53D6\u6240\u6709\u4F9D\u8D56\r\n */\r\n static async getDeps(base: string): Promise<string[]> {\r\n const json = (await readJson(\r\n path.resolve(base, 'package.json'),\r\n )) as PackageJson\r\n return Object.keys({\r\n ...json.dependencies,\r\n ...json.devDependencies,\r\n ...json.peerDependencies,\r\n })\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6240\u5728\u6A21\u5757\u7684\u7C7B\u578B\r\n */\r\n static async getPlatform(base: string): Promise<Platform> {\r\n const tsconfigPath = path.resolve(base, 'tsconfig.json')\r\n if (await pathExists(tsconfigPath)) {\r\n const tsconfigJson = await readJson(tsconfigPath)\r\n if (\r\n (tsconfigJson.compilerOptions.lib as string[]).some(\r\n (lib) => lib.toLowerCase() === 'dom',\r\n )\r\n ) {\r\n return 'browser'\r\n }\r\n }\r\n const pkgPath = path.resolve(base, 'package.json')\r\n if (await pathExists(pkgPath)) {\r\n const pkgJson = (await readJson(pkgPath)) as PackageJson\r\n if (Object.keys(pkgJson.devDependencies ?? {}).includes('@types/node')) {\r\n return 'node'\r\n }\r\n }\r\n return 'neutral'\r\n }\r\n static getWatchOptions(base: string): {\r\n pattern: string\r\n options: IOptions\r\n } {\r\n const pattern = 'src/**/*.ts'\r\n const options: Pick<IOptions, 'cwd' | 'ignore'> = {\r\n cwd: base,\r\n ignore: '**/__tests__/**/*',\r\n }\r\n return { pattern, options }\r\n }\r\n /**\r\n * \u751F\u6210\u7C7B\u578B\u5B9A\u4E49\r\n */\r\n async genDTS(): Promise<void> {\r\n const base = this.options.base\r\n const { pattern, options } = ESBuildProgram.getWatchOptions(\r\n this.options.base,\r\n )\r\n const project = new Project({\r\n tsConfigFilePath: path.resolve(base, 'tsconfig.json'),\r\n skipAddingFilesFromTsConfig: true,\r\n compilerOptions: {\r\n emitDeclarationOnly: true,\r\n noEmit: false,\r\n incremental: this.options.isWatch,\r\n },\r\n })\r\n const fileList = (await promise(pattern, options)).map((filePath) =>\r\n path.resolve(base, filePath),\r\n )\r\n project.addSourceFilesAtPaths(fileList)\r\n await project.emit({\r\n emitOnlyDtsFiles: true,\r\n })\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cjs \u7684\u9009\u9879\r\n * @param deps\r\n * @param platform\r\n * @param plugins\r\n */\r\n getBuildCjsOption({\r\n deps,\r\n platform,\r\n }: {\r\n deps: string[]\r\n platform: Platform\r\n }): BuildOptions {\r\n return {\r\n outfile: './dist/index.js',\r\n format: 'cjs',\r\n sourcemap: true,\r\n entryPoints: ['./src/index.ts'],\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal, ...deps],\r\n platform: platform,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA esm \u7684\u9009\u9879\r\n * @param deps\r\n * @param platform\r\n * @param plugins\r\n */\r\n getBuildESMOption({\r\n deps,\r\n platform,\r\n }: {\r\n deps: string[]\r\n platform: Platform\r\n }): BuildOptions {\r\n return {\r\n outfile: './dist/index.esm.js',\r\n format: 'esm',\r\n sourcemap: true,\r\n entryPoints: ['./src/index.ts'],\r\n bundle: true,\r\n external: [...ESBuildProgram.globalExternal, ...deps],\r\n platform: platform,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n }\r\n }\r\n\r\n /**\r\n * \u83B7\u53D6\u6784\u5EFA cli \u7684\u9009\u9879\r\n * @param deps\r\n * @param platform\r\n * @param plugins\r\n */\r\n getBuildCliOption({\r\n deps,\r\n platform,\r\n }: {\r\n deps: string[]\r\n platform: Platform\r\n }): BuildOptions {\r\n const plugins = ESBuildProgram.getPlugins(platform)\r\n return {\r\n entryPoints: ['./src/bin.ts'],\r\n outfile: './dist/bin.js',\r\n format: 'cjs',\r\n sourcemap: true,\r\n platform: platform,\r\n bundle: true,\r\n banner: {\r\n js: '#!/usr/bin/env node',\r\n },\r\n external: [\r\n ...ESBuildProgram.globalExternal,\r\n ...(this.options.isWatch ? deps : []),\r\n ],\r\n plugins,\r\n minify: !this.options.isWatch,\r\n incremental: this.options.isWatch,\r\n }\r\n }\r\n\r\n static getPlugins(platform: string): Plugin[] {\r\n const plugins: Plugin[] = []\r\n if (platform === 'node') {\r\n plugins.push(nodeExternals(), nativeNodeModules())\r\n }\r\n return plugins\r\n }\r\n\r\n async buildLib(): Promise<void> {\r\n await this.build(this.getBuildLibTask.bind(this))\r\n }\r\n\r\n async buildCli(): Promise<void> {\r\n await this.build(this.getBuildCliTask.bind(this))\r\n }\r\n\r\n getBuildLibTask(deps: string[], platform: Platform): Task[] {\r\n return [\r\n {\r\n title: '\u6784\u5EFA esm',\r\n task: () =>\r\n build(\r\n this.getBuildESMOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n {\r\n title: '\u6784\u5EFA cjs',\r\n task: () =>\r\n build(\r\n this.getBuildCjsOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n {\r\n title: '\u751F\u6210\u7C7B\u578B\u5B9A\u4E49',\r\n task: () => this.genDTS(),\r\n },\r\n ]\r\n }\r\n getBuildCliTask(deps: string[], platform: Platform): Task[] {\r\n return [\r\n {\r\n title: '\u6784\u5EFA cli',\r\n task: () =>\r\n build(\r\n this.getBuildCliOption({\r\n deps: deps,\r\n platform: platform,\r\n }),\r\n ),\r\n },\r\n ...this.getBuildLibTask(deps, platform),\r\n ]\r\n }\r\n\r\n static async execTask(spinnies: Spinnies, task: Task): Promise<void> {\r\n const start = Date.now()\r\n spinnies.add(task.title, { text: task.title })\r\n try {\r\n await task.task()\r\n spinnies.succeed(task.title, {\r\n text: `${task.title}: ${Date.now() - start}ms`,\r\n })\r\n } catch (e) {\r\n spinnies.fail(task.title, { text: task.title })\r\n }\r\n }\r\n async build(\r\n genTasks: (deps: string[], platform: Platform) => Task[],\r\n ): Promise<void> {\r\n const run = async () => {\r\n const start = Date.now()\r\n const deps = await ESBuildProgram.getDeps(this.options.base)\r\n const platform = await ESBuildProgram.getPlatform(this.options.base)\r\n const tasks = genTasks(deps, platform)\r\n const spinnies = new Spinnies()\r\n await Promise.all(\r\n tasks.map(async (task) => ESBuildProgram.execTask(spinnies, task)),\r\n )\r\n console.log(`\u6784\u5EFA\u5B8C\u6210: ${Date.now() - start}ms`)\r\n }\r\n\r\n if (!this.options.isWatch) {\r\n await run()\r\n return\r\n }\r\n\r\n const { pattern, options } = ESBuildProgram.getWatchOptions(\r\n this.options.base,\r\n )\r\n await new Promise((resolve, reject) => {\r\n watch(pattern, options).on('error', reject).on('all', debounce(run, 10))\r\n })\r\n }\r\n}\r\n", "import { Plugin } from 'esbuild'\r\n\r\n/**\r\n * \u5904\u7406 nodejs \u539F\u751F\u6A21\u5757\r\n * @link https://github.com/evanw/esbuild/issues/1051#issuecomment-806325487\r\n */\r\nexport function nativeNodeModules(): Plugin {\r\n return {\r\n name: 'native-node-modules',\r\n setup(build) {\r\n // If a \".node\" file is imported within a module in the \"file\" namespace, resolve\r\n // it to an absolute path and put it into the \"node-file\" virtual namespace.\r\n build.onResolve({ filter: /\\.node$/, namespace: 'file' }, (args) => ({\r\n path: require.resolve(args.path, { paths: [args.resolveDir] }),\r\n namespace: 'node-file',\r\n }))\r\n\r\n // Files in the \"node-file\" virtual namespace call \"require()\" on the\r\n // path from esbuild of the \".node\" file in the output directory.\r\n build.onLoad({ filter: /.*/, namespace: 'node-file' }, (args) => ({\r\n contents: `\r\n import path from ${JSON.stringify(args.path)}\r\n try { module.exports = require(path) }\r\n catch {}\r\n `,\r\n }))\r\n\r\n // If a \".node\" file is imported within a module in the \"node-file\" namespace, put\r\n // it in the \"file\" namespace where esbuild's default loading behavior will handle\r\n // it. It is already an absolute path since we resolved it to one above.\r\n build.onResolve(\r\n { filter: /\\.node$/, namespace: 'node-file' },\r\n (args) => ({\r\n path: args.path,\r\n namespace: 'file',\r\n }),\r\n )\r\n\r\n // Tell esbuild's default loading behavior to use the \"file\" loader for\r\n // these \".node\" files.\r\n const opts = build.initialOptions\r\n opts.loader = opts.loader || {}\r\n opts.loader['.node'] = 'file'\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * \u6392\u9664\u548C\u66FF\u6362 node \u5185\u7F6E\u6A21\u5757\r\n */\r\nexport function nodeExternals(): Plugin {\r\n return {\r\n name: 'esbuild-plugin-node-externals',\r\n setup(build) {\r\n build.onResolve({ filter: /(^node:)/ }, (args) => ({\r\n path: args.path.slice(5),\r\n external: true,\r\n }))\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * \u81EA\u52A8\u6392\u9664\u6240\u6709\u4F9D\u8D56\u9879\r\n * golang \u4E0D\u652F\u6301 js \u7684\u4E00\u4E9B\u8BED\u6CD5\uFF0C\u53C2\u8003 https://github.com/evanw/esbuild/issues/1634\r\n */\r\nexport function autoExternal(): Plugin {\r\n return {\r\n name: 'esbuild-plugin-auto-external',\r\n setup(build) {\r\n build.onResolve({ filter: /.*/ }, (args) => {\r\n if (/^\\.{1,2}\\//.test(args.path)) {\r\n return\r\n }\r\n return {\r\n path: args.path,\r\n external: true,\r\n }\r\n })\r\n },\r\n }\r\n}\r\n", "/**\r\n * \u51FD\u6570\u53BB\u6296\r\n * \u53BB\u6296 (debounce) \u53BB\u6296\u5C31\u662F\u5BF9\u4E8E\u4E00\u5B9A\u65F6\u95F4\u6BB5\u7684\u8FDE\u7EED\u7684\u51FD\u6570\u8C03\u7528\uFF0C\u53EA\u8BA9\u5176\u6267\u884C\u4E00\u6B21\r\n * \u6CE8: \u5305\u88C5\u540E\u7684\u51FD\u6570\u5982\u679C\u4E24\u6B21\u64CD\u4F5C\u95F4\u9694\u5C0F\u4E8E delay \u5219\u4E0D\u4F1A\u88AB\u6267\u884C, \u5982\u679C\u4E00\u76F4\u5728\u64CD\u4F5C\u5C31\u4F1A\u4E00\u76F4\u4E0D\u6267\u884C, \u76F4\u5230\u64CD\u4F5C\u505C\u6B62\u7684\u65F6\u95F4\u5927\u4E8E delay \u6700\u5C0F\u95F4\u9694\u65F6\u95F4\u624D\u4F1A\u6267\u884C\u4E00\u6B21, \u4E0D\u7BA1\u4EFB\u4F55\u65F6\u95F4\u8C03\u7528\u90FD\u9700\u8981\u505C\u6B62\u64CD\u4F5C\u7B49\u5F85\u6700\u5C0F\u5EF6\u8FDF\u65F6\u95F4\r\n * \u5E94\u7528\u573A\u666F\u4E3B\u8981\u5728\u90A3\u4E9B\u8FDE\u7EED\u7684\u64CD\u4F5C, \u4F8B\u5982\u9875\u9762\u6EDA\u52A8\u76D1\u542C, \u5305\u88C5\u540E\u7684\u51FD\u6570\u53EA\u4F1A\u6267\u884C\u6700\u540E\u4E00\u6B21\r\n * \u6CE8: \u8BE5\u51FD\u6570\u7B2C\u4E00\u6B21\u8C03\u7528\u4E00\u5B9A\u4E0D\u4F1A\u6267\u884C\uFF0C\u7B2C\u4E00\u6B21\u4E00\u5B9A\u62FF\u4E0D\u5230\u7F13\u5B58\u503C\uFF0C\u540E\u9762\u7684\u8FDE\u7EED\u8C03\u7528\u90FD\u4F1A\u62FF\u5230\u4E0A\u4E00\u6B21\u7684\u7F13\u5B58\u503C\u3002\u5982\u679C\u9700\u8981\u5728\u7B2C\u4E00\u6B21\u8C03\u7528\u83B7\u53D6\u5230\u7684\u7F13\u5B58\u503C\uFF0C\u5219\u9700\u8981\u4F20\u5165\u7B2C\u4E09\u4E2A\u53C2\u6570 {@param init}\uFF0C\u9ED8\u8BA4\u4E3A {@code undefined} \u7684\u53EF\u9009\u53C2\u6570\r\n * \u6CE8: \u8FD4\u56DE\u51FD\u6570\u7ED3\u679C\u7684\u9AD8\u9636\u51FD\u6570\u9700\u8981\u4F7F\u7528 {@see Proxy} \u5B9E\u73B0\uFF0C\u4EE5\u907F\u514D\u539F\u51FD\u6570\u539F\u578B\u94FE\u4E0A\u7684\u4FE1\u606F\u4E22\u5931\r\n *\r\n * @param fn \u771F\u6B63\u9700\u8981\u6267\u884C\u7684\u64CD\u4F5C\r\n * @param delay \u6700\u5C0F\u5EF6\u8FDF\u65F6\u95F4\uFF0C\u5355\u4F4D\u4E3A ms\r\n * @param init \u521D\u59CB\u7684\u7F13\u5B58\u503C\uFF0C\u4E0D\u586B\u9ED8\u8BA4\u4E3A {@see undefined}\r\n * @return \u5305\u88C5\u540E\u6709\u53BB\u6296\u529F\u80FD\u7684\u51FD\u6570\u3002\u8BE5\u51FD\u6570\u662F\u5F02\u6B65\u7684\uFF0C\u4E0E\u9700\u8981\u5305\u88C5\u7684\u51FD\u6570 {@param fn} \u662F\u5426\u5F02\u6B65\u6CA1\u6709\u592A\u5927\u5173\u8054\r\n */\r\nexport function debounce<\r\n T extends (...args: any[]) => any,\r\n R extends (...args: Parameters<T>) => Promise<ReturnType<T>>,\r\n>(fn: T, delay: number, init: any = null): R {\r\n let flag: number\r\n let result = init\r\n return async function (...args) {\r\n return new Promise((resolve) => {\r\n if (flag) {\r\n clearTimeout(flag as any)\r\n }\r\n flag = setTimeout(() => resolve((result = fn(...args))), delay) as any\r\n setTimeout(() => resolve(result), delay)\r\n })\r\n } as R\r\n}\r\n", "import { Command, Option } from 'commander'\r\nimport {\r\n GenerateConfig,\r\n GenerateProgram,\r\n TemplateTypeEnum,\r\n} from './GenerateProgram'\r\n\r\nconst generateProgram = new GenerateProgram()\r\n\r\nconst templateOption = new Option('--template [template]', '\u6A21\u677F\u7C7B\u578B').choices([\r\n TemplateTypeEnum.Lib,\r\n TemplateTypeEnum.Cli,\r\n])\r\ntemplateOption.required = true\r\n\r\nexport const generateCommand = new Command()\r\n .command('generate [dest]')\r\n .description('\u751F\u6210\u4E00\u4E9B\u521D\u59CB\u9879\u76EE')\r\n .addOption(templateOption)\r\n .action(async (dest, options: Pick<GenerateConfig, 'template'>) => {\r\n await generateProgram.generate({\r\n ...options,\r\n dest: dest,\r\n initSync: true,\r\n })\r\n })\r\n", "import path from 'path'\r\nimport {\r\n copy,\r\n pathExists,\r\n readdir,\r\n readFile,\r\n readJSON,\r\n remove,\r\n writeFile,\r\n writeJSON,\r\n} from 'fs-extra'\r\nimport { prompt } from 'enquirer'\r\nimport { SyncProgram } from '../sync/SyncProgram'\r\nimport { PathUtil } from '../../PathUtil'\r\n\r\nexport enum TemplateTypeEnum {\r\n Cli = 'cli',\r\n Lib = 'lib',\r\n}\r\n\r\nexport interface GenerateConfig {\r\n template: TemplateTypeEnum\r\n dest: string\r\n initSync?: boolean\r\n}\r\n\r\nexport class GenerateProgram {\r\n /**\r\n * \u751F\u6210\u9879\u76EE\r\n */\r\n async generate(config: GenerateConfig): Promise<void> {\r\n if (!config.dest) {\r\n const { dest } = await prompt<{ dest: string }>({\r\n name: 'dest',\r\n type: 'input',\r\n message: '\u8BF7\u8F93\u5165\u9879\u76EE\u540D',\r\n validate(input: string): boolean {\r\n return input.trim() !== ''\r\n },\r\n })\r\n config.dest = path.resolve(dest)\r\n }\r\n if (!config.template) {\r\n const { template } = await prompt<{ template: TemplateTypeEnum }>({\r\n name: 'template',\r\n type: 'list',\r\n message: '\u8BF7\u9009\u62E9\u6A21\u677F',\r\n choices: [\r\n TemplateTypeEnum.Lib,\r\n TemplateTypeEnum.Cli,\r\n ] as TemplateTypeEnum[],\r\n })\r\n config.template = template\r\n }\r\n\r\n /*\r\n \u514B\u9686\u9879\u76EE\r\n \u4FEE\u6539\u4E00\u4E9B\u5185\u5BB9\r\n \u5171\u901A\u4FEE\u6539\r\n - \u4FEE\u6539 package.json\uFF0C\u5220\u9664 private\uFF0C\u4FEE\u6539\u540D\u5B57\r\n \u6A21\u677F\u7279\u5B9A\u4FEE\u6539\r\n */\r\n const srcFile = path.resolve(\r\n PathUtil.RootPath,\r\n `templates/${config.template}`,\r\n )\r\n const destFile = path.resolve(config.dest)\r\n if (\r\n (await pathExists(destFile)) &&\r\n (await readdir(destFile)).some((file) => pathExists(file))\r\n ) {\r\n const { override } = await prompt<{\r\n override: boolean\r\n }>({\r\n name: 'override',\r\n type: 'confirm',\r\n initial: true,\r\n message: '\u76EE\u6807\u4F4D\u7F6E\u4E0D\u662F\u4E00\u4E2A\u7A7A\u76EE\u5F55\uFF0C\u786E\u8BA4\u8981\u8986\u76D6\u4E48\uFF1F',\r\n })\r\n if (!override) {\r\n return\r\n }\r\n }\r\n await remove(destFile)\r\n await copy(srcFile, destFile)\r\n await GenerateProgram.updatePackageJSON(destFile)\r\n await GenerateProgram.updateReadme(destFile)\r\n if (config.initSync) {\r\n const syncProgram = new SyncProgram(path.resolve(config.dest))\r\n await syncProgram.init()\r\n await syncProgram.sync()\r\n }\r\n }\r\n\r\n static async updatePackageJSON(destFile: string): Promise<void> {\r\n const pkgPath = path.resolve(destFile, 'package.json')\r\n await writeJSON(\r\n pkgPath,\r\n {\r\n ...(await readJSON(pkgPath)),\r\n name: path.basename(destFile),\r\n },\r\n {\r\n spaces: 2,\r\n },\r\n )\r\n }\r\n\r\n static async updateReadme(destFile: string): Promise<void> {\r\n const readmePath = path.resolve(destFile, 'README.md')\r\n let readmeFile = await readFile(readmePath, 'utf-8')\r\n readmeFile = readmeFile.replace('template', path.basename(destFile))\r\n await writeFile(readmePath, readmeFile)\r\n }\r\n}\r\n", "import { readFile, readJson, writeFile, writeJson } from 'fs-extra'\r\nimport path from 'path'\r\nimport { merge } from 'lodash-es'\r\nimport { PackageJson } from 'type-fest'\r\nimport prettier from '@liuli-util/prettier-standard-config/package.json'\r\nimport eslintTs from '@liuli-util/eslint-config-ts/package.json'\r\nimport eslintReactTs from '@liuli-util/eslint-config-react-ts/package.json'\r\nimport commitlint from '@liuli-util/commitlint-standard-config/package.json'\r\nimport { prompt } from 'enquirer'\r\nimport { isIncludeDep, isNpmPackage, isYarnRoot, isYarnSubModule } from './when'\r\nimport { appendScript, arrayToMap, AsyncArray } from '../../utils'\r\nimport { PathUtil } from '../../PathUtil'\r\n\r\nexport async function mergeJson(base: string, json: object): Promise<void> {\r\n const pkgJsonFilePath = path.resolve(base, './package.json')\r\n await writeJson(\r\n pkgJsonFilePath,\r\n merge(await readJson(pkgJsonFilePath), json),\r\n {\r\n spaces: 2,\r\n },\r\n )\r\n}\r\n\r\nexport type SyncConfigType =\r\n | 'prettier'\r\n | 'commitlint'\r\n | 'simplehooks'\r\n | 'workspaces'\r\n | 'gitignore'\r\n | 'eslint-ts'\r\n | 'eslint-vue-ts'\r\n | 'eslint-react-ts'\r\n | 'jest'\r\n\r\nexport interface SyncConfig {\r\n type: SyncConfigType\r\n handler(): Promise<void>\r\n when?(): Promise<boolean>\r\n}\r\n\r\nexport class SyncProgram {\r\n constructor(private readonly base: string) {}\r\n private syncConfigs: SyncConfig[] = [\r\n {\r\n type: 'workspaces',\r\n handler: async () => {\r\n const pkgPath = path.resolve(this.base, './package.json')\r\n const lernaPath = path.resolve(this.base, 'lerna.json')\r\n const pkgJson = (await readJson(pkgPath)) as { workspaces: string[] }\r\n const lernaJson = await readJson(lernaPath)\r\n lernaJson.packages = pkgJson.workspaces\r\n await writeJson(lernaPath, lernaJson, {\r\n spaces: 2,\r\n })\r\n },\r\n when: isYarnRoot,\r\n },\r\n {\r\n type: 'prettier',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n prettier: '@liuli-util/prettier-standard-config',\r\n devDependencies: {\r\n prettier: '^2.3.2',\r\n '@liuli-util/prettier-standard-config': `^${prettier.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n )\r\n },\r\n },\r\n {\r\n type: 'commitlint',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n 'simple-git-hooks': {\r\n 'commit-msg': 'yarn commitlint --edit $1',\r\n },\r\n commitlint: {\r\n extends: ['@liuli-util/commitlint-standard-config'],\r\n },\r\n devDependencies: {\r\n '@commitlint/cli': '^12.1.4',\r\n '@liuli-util/commitlint-standard-config': `^${commitlint.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n )\r\n },\r\n },\r\n {\r\n type: 'gitignore',\r\n handler: async () => {\r\n const gitignorePath = path.resolve(this.base, '.gitignore')\r\n await writeFile(\r\n gitignorePath,\r\n await readFile(\r\n path.resolve(PathUtil.RootPath, '_gitignore'),\r\n 'utf-8',\r\n ),\r\n )\r\n },\r\n },\r\n {\r\n type: 'eslint-ts',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n eslintConfig: {\r\n extends: ['@liuli-util/eslint-config-ts'],\r\n },\r\n devDependencies: {\r\n '@liuli-util/eslint-config-ts': `^${eslintTs.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n !(await isIncludeDep(['vue'])) &&\r\n !(await isIncludeDep(['react']))\r\n )\r\n },\r\n },\r\n {\r\n type: 'eslint-react-ts',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n eslintConfig: {\r\n extends: ['@liuli-util/eslint-config-react-ts'],\r\n },\r\n devDependencies: {\r\n '@liuli-util/eslint-config-react-ts': `^${eslintReactTs.version}`,\r\n },\r\n } as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (await isNpmPackage()) && (await isIncludeDep(['react']))\r\n },\r\n },\r\n {\r\n type: 'jest',\r\n handler: async () => {\r\n await mergeJson(this.base, {\r\n jest: {\r\n preset: 'ts-jest',\r\n testMatch: ['<rootDir>/src/**/__tests__/*.test.ts'],\r\n },\r\n })\r\n },\r\n },\r\n //\u5FC5\u987B\u653E\u5230\u6700\u540E\u4E00\u4E2A\uFF0C\u540E\u7EED\u6839\u636E\u68C0\u6D4B\u7ED3\u679C\u6DFB\u52A0 hooks\r\n {\r\n type: 'simplehooks',\r\n handler: async () => {\r\n const json = await readJson(path.resolve(this.base, './package.json'))\r\n const lintStaged: string[] = []\r\n if (json.prettier) {\r\n lintStaged.push('prettier --write')\r\n }\r\n if (json.eslintConfig) {\r\n lintStaged.push('eslint --fix')\r\n }\r\n let config = {\r\n scripts: {\r\n postinstall: appendScript(\r\n json?.scripts?.postinstall,\r\n 'npx simple-git-hooks',\r\n ),\r\n },\r\n 'simple-git-hooks': {\r\n 'pre-commit': 'yarn lint-staged',\r\n },\r\n 'lint-staged': {\r\n '*.{ts,tsx,js,jsx,css,vue}': [...lintStaged, 'git add'],\r\n },\r\n devDependencies: {\r\n 'simple-git-hooks': '^2.5.1',\r\n 'lint-staged': '^11.1.1',\r\n },\r\n }\r\n if (json.commitlint) {\r\n config = merge(config, {\r\n 'simple-git-hooks': {\r\n 'commit-msg': 'yarn commitlint --edit $1',\r\n },\r\n })\r\n }\r\n await mergeJson(this.base, config as PackageJson)\r\n },\r\n async when(): Promise<boolean> {\r\n return (\r\n (await isNpmPackage()) &&\r\n ((await isYarnRoot()) || !(await isYarnSubModule()))\r\n )\r\n },\r\n },\r\n ]\r\n\r\n async sync(): Promise<void> {\r\n const { sync } = (await readJson(\r\n path.resolve(this.base, 'package.json'),\r\n )) as {\r\n sync?: SyncConfigType[]\r\n }\r\n if (!sync) {\r\n return\r\n }\r\n const syncConfigs = this.syncConfigs.filter((config) =>\r\n sync.includes(config.type),\r\n )\r\n for (const syncConfig of syncConfigs) {\r\n await syncConfig.handler()\r\n }\r\n }\r\n\r\n async init(): Promise<void> {\r\n const configMap = arrayToMap(\r\n await AsyncArray.filter(this.syncConfigs, async (config) => {\r\n if (!config.when) {\r\n return true\r\n }\r\n return await config.when()\r\n }),\r\n (item) => item.type,\r\n )\r\n const res = await prompt<{\r\n sync: string[]\r\n }>({\r\n type: 'multiselect',\r\n message: '\u8BF7\u9009\u62E9\u9700\u8981\u540C\u6B65\u7684\u914D\u7F6E\u9879',\r\n name: 'sync',\r\n choices: [...configMap.keys()],\r\n })\r\n await mergeJson(this.base, {\r\n sync: res.sync,\r\n })\r\n }\r\n}\r\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n", "import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n", "import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n", "/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n", "import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n", "import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n", "/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n", "import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n", "/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n", "import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n", "import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n", "/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n", "/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n", "/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n", "import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n", "import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n", "import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n", "import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n", "/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n", "import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n", "import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n", "import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n", "/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n", "import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n", "import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n", "import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n", "/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n", "import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n", "import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n", "/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n", "import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n", "import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n", "/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n", "import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n", "import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n", "import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n", "/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n", "/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n", "import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n", "import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n", "import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n", "import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n", "/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n", "import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n", "import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n", "/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n", "import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n", "import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n", "import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n", "import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n", "import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n", "/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n", "import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n", "import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n", "import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n", "import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n", "import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n", "import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n", "/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n", "/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n", "/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n", "import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n", "import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n", "import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n", "import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n", "import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n", "import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n", "import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n", "/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n", "import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n", "import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n", "import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n", "/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n", "import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n", "import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n", "import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n", "import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n", "/**\n * @license\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"es\" -o ./`\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nexport { default as add } from './add.js';\nexport { default as after } from './after.js';\nexport { default as ary } from './ary.js';\nexport { default as assign } from './assign.js';\nexport { default as assignIn } from './assignIn.js';\nexport { default as assignInWith } from './assignInWith.js';\nexport { default as assignWith } from './assignWith.js';\nexport { default as at } from './at.js';\nexport { default as attempt } from './attempt.js';\nexport { default as before } from './before.js';\nexport { default as bind } from './bind.js';\nexport { default as bindAll } from './bindAll.js';\nexport { default as bindKey } from './bindKey.js';\nexport { default as camelCase } from './camelCase.js';\nexport { default as capitalize } from './capitalize.js';\nexport { default as castArray } from './castArray.js';\nexport { default as ceil } from './ceil.js';\nexport { default as chain } from './chain.js';\nexport { default as chunk } from './chunk.js';\nexport { default as clamp } from './clamp.js';\nexport { default as clone } from './clone.js';\nexport { default as cloneDeep } from './cloneDeep.js';\nexport { default as cloneDeepWith } from './cloneDeepWith.js';\nexport { default as cloneWith } from './cloneWith.js';\nexport { default as commit } from './commit.js';\nexport { default as compact } from './compact.js';\nexport { default as concat } from './concat.js';\nexport { default as cond } from './cond.js';\nexport { default as conforms } from './conforms.js';\nexport { default as conformsTo } from './conformsTo.js';\nexport { default as constant } from './constant.js';\nexport { default as countBy } from './countBy.js';\nexport { default as create } from './create.js';\nexport { default as curry } from './curry.js';\nexport { default as curryRight } from './curryRight.js';\nexport { default as debounce } from './debounce.js';\nexport { default as deburr } from './deburr.js';\nexport { default as defaultTo } from './defaultTo.js';\nexport { default as defaults } from './defaults.js';\nexport { default as defaultsDeep } from './defaultsDeep.js';\nexport { default as defer } from './defer.js';\nexport { default as delay } from './delay.js';\nexport { default as difference } from './difference.js';\nexport { default as differenceBy } from './differenceBy.js';\nexport { default as differenceWith } from './differenceWith.js';\nexport { default as divide } from './divide.js';\nexport { default as drop } from './drop.js';\nexport { default as dropRight } from './dropRight.js';\nexport { default as dropRightWhile } from './dropRightWhile.js';\nexport { default as dropWhile } from './dropWhile.js';\nexport { default as each } from './each.js';\nexport { default as eachRight } from './eachRight.js';\nexport { default as endsWith } from './endsWith.js';\nexport { default as entries } from './entries.js';\nexport { default as entriesIn } from './entriesIn.js';\nexport { default as eq } from './eq.js';\nexport { default as escape } from './escape.js';\nexport { default as escapeRegExp } from './escapeRegExp.js';\nexport { default as every } from './every.js';\nexport { default as extend } from './extend.js';\nexport { default as extendWith } from './extendWith.js';\nexport { default as fill } from './fill.js';\nexport { default as filter } from './filter.js';\nexport { default as find } from './find.js';\nexport { default as findIndex } from './findIndex.js';\nexport { default as findKey } from './findKey.js';\nexport { default as findLast } from './findLast.js';\nexport { default as findLastIndex } from './findLastIndex.js';\nexport { default as findLastKey } from './findLastKey.js';\nexport { default as first } from './first.js';\nexport { default as flatMap } from './flatMap.js';\nexport { default as flatMapDeep } from './flatMapDeep.js';\nexport { default as flatMapDepth } from './flatMapDepth.js';\nexport { default as flatten } from './flatten.js';\nexport { default as flattenDeep } from './flattenDeep.js';\nexport { default as flattenDepth } from './flattenDepth.js';\nexport { default as flip } from './flip.js';\nexport { default as floor } from './floor.js';\nexport { default as flow } from './flow.js';\nexport { default as flowRight } from './flowRight.js';\nexport { default as forEach } from './forEach.js';\nexport { default as forEachRight } from './forEachRight.js';\nexport { default as forIn } from './forIn.js';\nexport { default as forInRight } from './forInRight.js';\nexport { default as forOwn } from './forOwn.js';\nexport { default as forOwnRight } from './forOwnRight.js';\nexport { default as fromPairs } from './fromPairs.js';\nexport { default as functions } from './functions.js';\nexport { default as functionsIn } from './functionsIn.js';\nexport { default as get } from './get.js';\nexport { default as groupBy } from './groupBy.js';\nexport { default as gt } from './gt.js';\nexport { default as gte } from './gte.js';\nexport { default as has } from './has.js';\nexport { default as hasIn } from './hasIn.js';\nexport { default as head } from './head.js';\nexport { default as identity } from './identity.js';\nexport { default as inRange } from './inRange.js';\nexport { default as includes } from './includes.js';\nexport { default as indexOf } from './indexOf.js';\nexport { default as initial } from './initial.js';\nexport { default as intersection } from './intersection.js';\nexport { default as intersectionBy } from './intersectionBy.js';\nexport { default as intersectionWith } from './intersectionWith.js';\nexport { default as invert } from './invert.js';\nexport { default as invertBy } from './invertBy.js';\nexport { default as invoke } from './invoke.js';\nexport { default as invokeMap } from './invokeMap.js';\nexport { default as isArguments } from './isArguments.js';\nexport { default as isArray } from './isArray.js';\nexport { default as isArrayBuffer } from './isArrayBuffer.js';\nexport { default as isArrayLike } from './isArrayLike.js';\nexport { default as isArrayLikeObject } from './isArrayLikeObject.js';\nexport { default as isBoolean } from './isBoolean.js';\nexport { default as isBuffer } from './isBuffer.js';\nexport { default as isDate } from './isDate.js';\nexport { default as isElement } from './isElement.js';\nexport { default as isEmpty } from './isEmpty.js';\nexport { default as isEqual } from './isEqual.js';\nexport { default as isEqualWith } from './isEqualWith.js';\nexport { default as isError } from './isError.js';\nexport { default as isFinite } from './isFinite.js';\nexport { default as isFunction } from './isFunction.js';\nexport { default as isInteger } from './isInteger.js';\nexport { default as isLength } from './isLength.js';\nexport { default as isMap } from './isMap.js';\nexport { default as isMatch } from './isMatch.js';\nexport { default as isMatchWith } from './isMatchWith.js';\nexport { default as isNaN } from './isNaN.js';\nexport { default as isNative } from './isNative.js';\nexport { default as isNil } from './isNil.js';\nexport { default as isNull } from './isNull.js';\nexport { default as isNumber } from './isNumber.js';\nexport { default as isObject } from './isObject.js';\nexport { default as isObjectLike } from './isObjectLike.js';\nexport { default as isPlainObject } from './isPlainObject.js';\nexport { default as isRegExp } from './isRegExp.js';\nexport { default as isSafeInteger } from './isSafeInteger.js';\nexport { default as isSet } from './isSet.js';\nexport { default as isString } from './isString.js';\nexport { default as isSymbol } from './isSymbol.js';\nexport { default as isTypedArray } from './isTypedArray.js';\nexport { default as isUndefined } from './isUndefined.js';\nexport { default as isWeakMap } from './isWeakMap.js';\nexport { default as isWeakSet } from './isWeakSet.js';\nexport { default as iteratee } from './iteratee.js';\nexport { default as join } from './join.js';\nexport { default as kebabCase } from './kebabCase.js';\nexport { default as keyBy } from './keyBy.js';\nexport { default as keys } from './keys.js';\nexport { default as keysIn } from './keysIn.js';\nexport { default as last } from './last.js';\nexport { default as lastIndexOf } from './lastIndexOf.js';\nexport { default as lodash } from './wrapperLodash.js';\nexport { default as lowerCase } from './lowerCase.js';\nexport { default as lowerFirst } from './lowerFirst.js';\nexport { default as lt } from './lt.js';\nexport { default as lte } from './lte.js';\nexport { default as map } from './map.js';\nexport { default as mapKeys } from './mapKeys.js';\nexport { default as mapValues } from './mapValues.js';\nexport { default as matches } from './matches.js';\nexport { default as matchesProperty } from './matchesProperty.js';\nexport { default as max } from './max.js';\nexport { default as maxBy } from './maxBy.js';\nexport { default as mean } from './mean.js';\nexport { default as meanBy } from './meanBy.js';\nexport { default as memoize } from './memoize.js';\nexport { default as merge } from './merge.js';\nexport { default as mergeWith } from './mergeWith.js';\nexport { default as method } from './method.js';\nexport { default as methodOf } from './methodOf.js';\nexport { default as min } from './min.js';\nexport { default as minBy } from './minBy.js';\nexport { default as mixin } from './mixin.js';\nexport { default as multiply } from './multiply.js';\nexport { default as negate } from './negate.js';\nexport { default as next } from './next.js';\nexport { default as noop } from './noop.js';\nexport { default as now } from './now.js';\nexport { default as nth } from './nth.js';\nexport { default as nthArg } from './nthArg.js';\nexport { default as omit } from './omit.js';\nexport { default as omitBy } from './omitBy.js';\nexport { default as once } from './once.js';\nexport { default as orderBy } from './orderBy.js';\nexport { default as over } from './over.js';\nexport { default as overArgs } from './overArgs.js';\nexport { default as overEvery } from './overEvery.js';\nexport { default as overSome } from './overSome.js';\nexport { default as pad } from './pad.js';\nexport { default as padEnd } from './padEnd.js';\nexport { default as padStart } from './padStart.js';\nexport { default as parseInt } from './parseInt.js';\nexport { default as partial } from './partial.js';\nexport { default as partialRight } from './partialRight.js';\nexport { default as partition } from './partition.js';\nexport { default as pick } from './pick.js';\nexport { default as pickBy } from './pickBy.js';\nexport { default as plant } from './plant.js';\nexport { default as property } from './property.js';\nexport { default as propertyOf } from './propertyOf.js';\nexport { default as pull } from './pull.js';\nexport { default as pullAll } from './pullAll.js';\nexport { default as pullAllBy } from './pullAllBy.js';\nexport { default as pullAllWith } from './pullAllWith.js';\nexport { default as pullAt } from './pullAt.js';\nexport { default as random } from './random.js';\nexport { default as range } from './range.js';\nexport { default as rangeRight } from './rangeRight.js';\nexport { default as rearg } from './rearg.js';\nexport { default as reduce } from './reduce.js';\nexport { default as reduceRight } from './reduceRight.js';\nexport { default as reject } from './reject.js';\nexport { default as remove } from './remove.js';\nexport { default as repeat } from './repeat.js';\nexport { default as replace } from './replace.js';\nexport { default as rest } from './rest.js';\nexport { default as result } from './result.js';\nexport { default as reverse } from './reverse.js';\nexport { default as round } from './round.js';\nexport { default as sample } from './sample.js';\nexport { default as sampleSize } from './sampleSize.js';\nexport { default as set } from './set.js';\nexport { default as setWith } from './setWith.js';\nexport { default as shuffle } from './shuffle.js';\nexport { default as size } from './size.js';\nexport { default as slice } from './slice.js';\nexport { default as snakeCase } from './snakeCase.js';\nexport { default as some } from './some.js';\nexport { default as sortBy } from './sortBy.js';\nexport { default as sortedIndex } from './sortedIndex.js';\nexport { default as sortedIndexBy } from './sortedIndexBy.js';\nexport { default as sortedIndexOf } from './sortedIndexOf.js';\nexport { default as sortedLastIndex } from './sortedLastIndex.js';\nexport { default as sortedLastIndexBy } from './sortedLastIndexBy.js';\nexport { default as sortedLastIndexOf } from './sortedLastIndexOf.js';\nexport { default as sortedUniq } from './sortedUniq.js';\nexport { default as sortedUniqBy } from './sortedUniqBy.js';\nexport { default as split } from './split.js';\nexport { default as spread } from './spread.js';\nexport { default as startCase } from './startCase.js';\nexport { default as startsWith } from './startsWith.js';\nexport { default as stubArray } from './stubArray.js';\nexport { default as stubFalse } from './stubFalse.js';\nexport { default as stubObject } from './stubObject.js';\nexport { default as stubString } from './stubString.js';\nexport { default as stubTrue } from './stubTrue.js';\nexport { default as subtract } from './subtract.js';\nexport { default as sum } from './sum.js';\nexport { default as sumBy } from './sumBy.js';\nexport { default as tail } from './tail.js';\nexport { default as take } from './take.js';\nexport { default as takeRight } from './takeRight.js';\nexport { default as takeRightWhile } from './takeRightWhile.js';\nexport { default as takeWhile } from './takeWhile.js';\nexport { default as tap } from './tap.js';\nexport { default as template } from './template.js';\nexport { default as templateSettings } from './templateSettings.js';\nexport { default as throttle } from './throttle.js';\nexport { default as thru } from './thru.js';\nexport { default as times } from './times.js';\nexport { default as toArray } from './toArray.js';\nexport { default as toFinite } from './toFinite.js';\nexport { default as toInteger } from './toInteger.js';\nexport { default as toIterator } from './toIterator.js';\nexport { default as toJSON } from './toJSON.js';\nexport { default as toLength } from './toLength.js';\nexport { default as toLower } from './toLower.js';\nexport { default as toNumber } from './toNumber.js';\nexport { default as toPairs } from './toPairs.js';\nexport { default as toPairsIn } from './toPairsIn.js';\nexport { default as toPath } from './toPath.js';\nexport { default as toPlainObject } from './toPlainObject.js';\nexport { default as toSafeInteger } from './toSafeInteger.js';\nexport { default as toString } from './toString.js';\nexport { default as toUpper } from './toUpper.js';\nexport { default as transform } from './transform.js';\nexport { default as trim } from './trim.js';\nexport { default as trimEnd } from './trimEnd.js';\nexport { default as trimStart } from './trimStart.js';\nexport { default as truncate } from './truncate.js';\nexport { default as unary } from './unary.js';\nexport { default as unescape } from './unescape.js';\nexport { default as union } from './union.js';\nexport { default as unionBy } from './unionBy.js';\nexport { default as unionWith } from './unionWith.js';\nexport { default as uniq } from './uniq.js';\nexport { default as uniqBy } from './uniqBy.js';\nexport { default as uniqWith } from './uniqWith.js';\nexport { default as uniqueId } from './uniqueId.js';\nexport { default as unset } from './unset.js';\nexport { default as unzip } from './unzip.js';\nexport { default as unzipWith } from './unzipWith.js';\nexport { default as update } from './update.js';\nexport { default as updateWith } from './updateWith.js';\nexport { default as upperCase } from './upperCase.js';\nexport { default as upperFirst } from './upperFirst.js';\nexport { default as value } from './value.js';\nexport { default as valueOf } from './valueOf.js';\nexport { default as values } from './values.js';\nexport { default as valuesIn } from './valuesIn.js';\nexport { default as without } from './without.js';\nexport { default as words } from './words.js';\nexport { default as wrap } from './wrap.js';\nexport { default as wrapperAt } from './wrapperAt.js';\nexport { default as wrapperChain } from './wrapperChain.js';\nexport { default as wrapperCommit } from './commit.js';\nexport { default as wrapperLodash } from './wrapperLodash.js';\nexport { default as wrapperNext } from './next.js';\nexport { default as wrapperPlant } from './plant.js';\nexport { default as wrapperReverse } from './wrapperReverse.js';\nexport { default as wrapperToIterator } from './toIterator.js';\nexport { default as wrapperValue } from './wrapperValue.js';\nexport { default as xor } from './xor.js';\nexport { default as xorBy } from './xorBy.js';\nexport { default as xorWith } from './xorWith.js';\nexport { default as zip } from './zip.js';\nexport { default as zipObject } from './zipObject.js';\nexport { default as zipObjectDeep } from './zipObjectDeep.js';\nexport { default as zipWith } from './zipWith.js';\nexport { default } from './lodash.default.js';\n", "import { pathExists, readJson } from 'fs-extra'\r\nimport path from 'path'\r\nimport { PackageJson } from 'type-fest'\r\nimport { findParent } from '../../utils'\r\n\r\n/**\r\n * \u5224\u65AD\u662F\u5426\u5305\u542B package.json\r\n * @param cwd\r\n */\r\nexport async function isNpmPackage(\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n return await pathExists(path.resolve(cwd, './package.json'))\r\n}\r\n\r\n/**\r\n * \u5224\u65AD\u662F yarn2 monorepo \u9879\u76EE\r\n * @param cwd\r\n */\r\nexport async function isYarnRoot(\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(\r\n path.resolve(cwd, './package.json'),\r\n )) as PackageJson\r\n return !!json.workspaces\r\n}\r\n\r\n/**\r\n * \u5224\u65AD\u662F yarn2 monorepo \u7684\u5B50\u6A21\u5757\r\n */\r\nexport async function isYarnSubModule(\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n //\u5982\u679C\u662F yarn monorepo \u6839\u6A21\u5757\u5219\u76F4\u63A5\u8FD4\u56DE true\r\n if (await isYarnRoot(cwd)) {\r\n return false\r\n }\r\n return (await findParent(path.dirname(cwd), isYarnRoot)) !== null\r\n}\r\n\r\n/**\r\n * \u662F\u5426\u5305\u542B\u6307\u5B9A\u4F9D\u8D56\r\n * @param deps\r\n * @param cwd\r\n */\r\nexport async function isIncludeDep(\r\n deps: string[],\r\n cwd: string = process.cwd(),\r\n): Promise<boolean> {\r\n if (!(await isNpmPackage(cwd))) {\r\n return false\r\n }\r\n const json = (await readJson(\r\n path.resolve(cwd, './package.json'),\r\n )) as PackageJson\r\n const set = new Set(\r\n Object.keys({ ...json.dependencies, ...json.devDependencies }),\r\n )\r\n return deps.every((dep) => set.has(dep))\r\n}\r\n", "export function arrayToMap<T, K>(\r\n arr: T[],\r\n kFn: (item: T, index: number, arr: T[]) => K,\r\n): Map<K, T>\r\nexport function arrayToMap<T, K, V>(\r\n arr: T[],\r\n kFn: (item: T, index: number, arr: T[]) => K,\r\n vFn: (item: T, index: number, arr: T[]) => V,\r\n): Map<K, V>\r\n/**\r\n * \u5C06\u6570\u7EC4\u6620\u5C04\u4E3A Map\r\n * @param arr \u6570\u7EC4\r\n * @param kFn \u4EA7\u751F Map \u5143\u7D20\u552F\u4E00\u6807\u8BC6\u7684\u51FD\u6570\r\n * @param vFn \u4EA7\u751F Map \u503C\u7684\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3A\u8FD4\u56DE\u6570\u7EC4\u7684\u5143\u7D20\r\n * @returns \u6620\u5C04\u4EA7\u751F\u7684 map \u96C6\u5408\r\n */\r\nexport function arrayToMap<T, K, V>(\r\n arr: T[],\r\n kFn: (item: T, index: number, arr: T[]) => K,\r\n vFn: (item: T, index: number, arr: T[]) => V = (v) => v as any,\r\n): Map<K, V> {\r\n return arr.reduce(\r\n (res, item, index, arr) =>\r\n res.set(kFn(item, index, arr), vFn(item, index, arr)),\r\n new Map<K, V>(),\r\n )\r\n}\r\n", "/**\r\n * \u5728\u4E4B\u524D\u7684\u811A\u672C\u4E2D\u8FFD\u52A0\u65B0\u7684\u811A\u672C\r\n * @param oldScript\r\n * @param newScript\r\n */\r\nexport function appendScript(\r\n oldScript: string | undefined,\r\n newScript: string,\r\n): string {\r\n if (!oldScript) {\r\n return newScript\r\n }\r\n if (oldScript.includes(newScript)) {\r\n return oldScript\r\n }\r\n return oldScript + ' && ' + newScript\r\n}\r\n", "import path from 'path'\r\n\r\n/**\r\n * \u5411\u4E0A\u67E5\u627E\u76EE\u5F55\r\n * @param cwd\r\n * @param predicate\r\n */\r\nexport function findParent(\r\n cwd: string,\r\n predicate: (dir: string) => boolean,\r\n): string | null\r\nexport function findParent(\r\n cwd: string,\r\n predicate: (dir: string) => Promise<boolean>,\r\n): Promise<string | null>\r\nexport function findParent<\r\n T extends (dir: string) => boolean | Promise<boolean>,\r\n R extends string | null,\r\n>(\r\n cwd: string,\r\n predicate: T,\r\n): ReturnType<T> extends Promise<any> ? Promise<R> : R {\r\n const res = predicate(cwd)\r\n function f(res: boolean): string | null {\r\n if (res) {\r\n return cwd\r\n }\r\n const parent = path.dirname(cwd)\r\n if (parent === cwd) {\r\n return null\r\n }\r\n return findParent(parent, predicate as any)\r\n }\r\n\r\n return res instanceof Promise ? res.then(f) : (f(res) as any)\r\n}\r\n", "import { IterableElement } from 'type-fest'\r\n\r\nenum ActionTypeEnum {\r\n Filter = 'filter',\r\n Map = 'map',\r\n ForEach = 'forEach',\r\n Reduce = 'reduce',\r\n FlatMap = 'flatMap',\r\n}\r\n\r\nclass Action {\r\n public static Type = ActionTypeEnum\r\n\r\n constructor(\r\n public readonly type: ActionTypeEnum,\r\n public readonly args: any[],\r\n ) {\r\n this.type = type\r\n this.args = args\r\n }\r\n}\r\n\r\n/**\r\n * \u5F02\u6B65\u6570\u7EC4\uFF0C\u652F\u6301\u9759\u6001\u65B9\u6CD5\u548C\u94FE\u5F0F\u8C03\u7528\r\n */\r\nexport class AsyncArray<T> implements PromiseLike<T[]> {\r\n static reduce<T extends any[], R>(\r\n arr: T,\r\n fn: (res: R, item: IterableElement<T>, index: number) => Promise<R>,\r\n res: R,\r\n ): Promise<R> {\r\n return arr.reduce(\r\n (res: Promise<R>, item: IterableElement<T>, index: number) =>\r\n res.then((r) => fn(r, item, index)),\r\n Promise.resolve(res),\r\n )\r\n }\r\n\r\n static map<T, R>(\r\n arr: T[],\r\n fn: (item: T, index: number) => Promise<R>,\r\n ): Promise<R[]> {\r\n return Promise.all(arr.map((item, index) => fn(item, index)))\r\n }\r\n\r\n static async filter<T>(\r\n arr: T[],\r\n fn: (item: T, index: number) => Promise<boolean>,\r\n ): Promise<T[]> {\r\n const res: T[] = []\r\n await AsyncArray.map(arr, async (item, index) => {\r\n if (await fn(item, index)) {\r\n res.push(item)\r\n }\r\n })\r\n return res\r\n }\r\n\r\n static async flatMap<T, R>(\r\n arr: T[],\r\n fn: (item: T, index: number) => Promise<R[]>,\r\n ): Promise<R[]> {\r\n return (\r\n await Promise.all(arr.map((item, index) => fn(item, index)))\r\n ).flatMap((r) => r)\r\n }\r\n\r\n static async forEach<T extends any[]>(\r\n arr: T,\r\n fn: (item: IterableElement<T>, index: number) => Promise<void>,\r\n ): Promise<void> {\r\n await AsyncArray.map(arr, fn)\r\n }\r\n\r\n private tasks: Action[] = []\r\n\r\n constructor(private readonly arr: T[]) {}\r\n\r\n map<R>(fn: (item: T, index: number) => Promise<R>): AsyncArray<R> {\r\n this.tasks.push(new Action(ActionTypeEnum.Map, [fn]))\r\n return this as any\r\n }\r\n\r\n flatMap<R>(fn: (item: T, index: number) => Promise<R[]>): AsyncArray<R> {\r\n this.tasks.push(new Action(ActionTypeEnum.FlatMap, [fn]))\r\n return this as any\r\n }\r\n\r\n filter(fn: (item: T, index: number) => Promise<boolean>): this {\r\n this.tasks.push(new Action(ActionTypeEnum.Filter, [fn]))\r\n return this\r\n }\r\n\r\n async forEach<R>(fn: (item: T, index: number) => Promise<R>): Promise<void> {\r\n this.tasks.push(new Action(ActionTypeEnum.Map, [fn]))\r\n await this\r\n }\r\n\r\n then<TResult1 = T[], TResult2 = never>(\r\n resolve?:\r\n | ((value: T[]) => PromiseLike<TResult1> | TResult1)\r\n | undefined\r\n | null,\r\n reject?:\r\n | ((reason: any) => PromiseLike<TResult2> | TResult2)\r\n | undefined\r\n | null,\r\n ): PromiseLike<TResult1 | TResult2> {\r\n const res = this.value()\r\n res\r\n .then((r) => {\r\n resolve && resolve(res as any)\r\n return r\r\n })\r\n .catch((e) => {\r\n reject && reject(e as any)\r\n throw e\r\n })\r\n return res as any\r\n }\r\n\r\n private async value(): Promise<any> {\r\n let res = this.arr\r\n for (const task of this.tasks) {\r\n switch (task.type) {\r\n case ActionTypeEnum.Filter:\r\n res = await AsyncArray.filter(res, task.args[0])\r\n break\r\n case ActionTypeEnum.Map:\r\n res = await AsyncArray.map(res, task.args[0])\r\n break\r\n case ActionTypeEnum.FlatMap:\r\n res = await AsyncArray.flatMap(res, task.args[0])\r\n break\r\n case ActionTypeEnum.ForEach:\r\n await AsyncArray.forEach(res, task.args[0])\r\n return\r\n case ActionTypeEnum.Reduce:\r\n return await AsyncArray.reduce(res, task.args[0], task.args[1])\r\n }\r\n }\r\n return res\r\n }\r\n}\r\n", "import path from 'path'\r\n\r\nexport class PathUtil {\r\n /**\r\n * \u4ECE\u8FD9\u4E2A\u9879\u76EE\u7684\u6839\u76EE\u5F55\u8BFB\u53D6\uFF0C\u5F00\u53D1\u73AF\u5883\u662F src/../\uFF0C\u8FD0\u884C\u65F6\u5219\u662F dist/../\r\n */\r\n static readonly RootPath = path.resolve(__dirname, '..')\r\n}\r\n", "import { Command } from 'commander'\r\nimport { SyncProgram } from './SyncProgram'\r\n\r\nconst syncProgram = new SyncProgram(process.cwd())\r\nexport const syncCommand = new Command('sync')\r\n .description('\u540C\u6B65\u914D\u7F6E')\r\n .action(async () => {\r\n await syncProgram.sync()\r\n })\r\n .addCommand(\r\n new Command('init').description('\u521D\u59CB\u5316\u540C\u6B65\u914D\u7F6E').action(async () => {\r\n await syncProgram.init()\r\n await syncProgram.sync()\r\n }),\r\n )\r\n"],
5
+ "mappings": ";ovBAAA,cAMA,oBAA6B,MAAM,CAQjC,YAAY,EAAU,EAAM,EAAS,CACnC,MAAM,GAEN,MAAM,kBAAkB,KAAM,KAAK,aACnC,KAAK,KAAO,KAAK,YAAY,KAC7B,KAAK,KAAO,EACZ,KAAK,SAAW,EAChB,KAAK,YAAc,SAQvB,gBAAmC,GAAe,CAMhD,YAAY,EAAS,CACnB,MAAM,EAAG,4BAA6B,GAEtC,MAAM,kBAAkB,KAAM,KAAK,aACnC,KAAK,KAAO,KAAK,YAAY,OAIjC,GAAQ,eAAiB,GACzB,GAAQ,qBAAuB,KC5C/B,iBAAM,CAAE,yBAAyB,KAIjC,QAAe,CAUb,YAAY,EAAM,EAAa,CAQ7B,OAPA,KAAK,YAAc,GAAe,GAClC,KAAK,SAAW,GAChB,KAAK,SAAW,OAChB,KAAK,aAAe,OACpB,KAAK,wBAA0B,OAC/B,KAAK,WAAa,OAEV,EAAK,QACN,IACH,KAAK,SAAW,GAChB,KAAK,MAAQ,EAAK,MAAM,EAAG,IAC3B,UACG,IACH,KAAK,SAAW,GAChB,KAAK,MAAQ,EAAK,MAAM,EAAG,IAC3B,cAEA,KAAK,SAAW,GAChB,KAAK,MAAQ,EACb,MAGJ,AAAI,KAAK,MAAM,OAAS,GAAK,KAAK,MAAM,MAAM,MAAQ,OACpD,MAAK,SAAW,GAChB,KAAK,MAAQ,KAAK,MAAM,MAAM,EAAG,KAUrC,MAAO,CACL,MAAO,MAAK,MAOd,aAAa,EAAO,EAAU,CAC5B,MAAI,KAAa,KAAK,cAAgB,CAAC,MAAM,QAAQ,GAC5C,CAAC,GAGH,EAAS,OAAO,GAWzB,QAAQ,EAAO,EAAa,CAC1B,YAAK,aAAe,EACpB,KAAK,wBAA0B,EACxB,KAUT,UAAU,EAAI,CACZ,YAAK,SAAW,EACT,KAUT,QAAQ,EAAQ,CACd,YAAK,WAAa,EAClB,KAAK,SAAW,CAAC,EAAK,IAAa,CACjC,GAAI,CAAC,EAAO,SAAS,GACnB,KAAM,IAAI,IAAqB,uBAAuB,EAAO,KAAK,UAEpE,MAAI,MAAK,SACA,KAAK,aAAa,EAAK,GAEzB,GAEF,KAMT,aAAc,CACZ,YAAK,SAAW,GACT,KAMT,aAAc,CACZ,YAAK,SAAW,GACT,OAYX,YAA8B,EAAK,CACjC,GAAM,GAAa,EAAI,OAAU,GAAI,WAAa,GAAO,MAAQ,IAEjE,MAAO,GAAI,SACP,IAAM,EAAa,IACnB,IAAM,EAAa,IAGzB,GAAQ,SAAW,GACnB,GAAQ,qBAAuB,KClJ/B,iBAAM,CAAE,yBAAyB,KAajC,QAAW,CACT,aAAc,CACZ,KAAK,UAAY,OACjB,KAAK,gBAAkB,GACvB,KAAK,YAAc,GAUrB,gBAAgB,EAAK,CACnB,GAAM,GAAkB,EAAI,SAAS,OAAO,GAAO,CAAC,EAAI,SACxD,GAAI,EAAI,0BAA2B,CAEjC,GAAM,CAAC,CAAE,EAAU,GAAY,EAAI,wBAAwB,MAAM,iBAC3D,EAAc,EAAI,cAAc,GACnC,WAAW,IACd,EAAY,YAAY,EAAI,yBACxB,GAAU,EAAY,UAAU,GACpC,EAAgB,KAAK,GAEvB,MAAI,MAAK,iBACP,EAAgB,KAAK,CAAC,EAAG,IAEhB,EAAE,OAAO,cAAc,EAAE,SAG7B,EAUT,eAAe,EAAK,CAClB,GAAM,GAAiB,EAAI,QAAQ,OAAO,AAAC,GAAW,CAAC,EAAO,QAExD,EAAoB,EAAI,gBAAkB,EAAI,gBAAkB,CAAC,EAAI,YAAY,EAAI,gBACrF,EAAmB,EAAI,gBAAkB,CAAC,EAAI,YAAY,EAAI,eACpE,GAAI,GAAqB,EAAkB,CACzC,GAAI,GACJ,AAAK,EAEE,AAAK,EAGV,EAAa,EAAI,aAAa,EAAI,WAAY,EAAI,kBAFlD,EAAa,EAAI,aAAa,EAAI,eAAgB,EAAI,kBAFtD,EAAa,EAAI,aAAa,EAAI,cAAe,EAAI,kBAMvD,EAAe,KAAK,GAEtB,GAAI,KAAK,YAAa,CACpB,GAAM,GAAa,AAAC,GAEX,EAAO,MAAQ,EAAO,MAAM,QAAQ,KAAM,IAAM,EAAO,KAAK,QAAQ,MAAO,IAEpF,EAAe,KAAK,CAAC,EAAG,IACf,EAAW,GAAG,cAAc,EAAW,KAGlD,MAAO,GAUT,iBAAiB,EAAK,CASpB,MAPI,GAAI,kBACN,EAAI,MAAM,QAAQ,GAAY,CAC5B,EAAS,YAAc,EAAS,aAAe,EAAI,iBAAiB,EAAS,SAAW,KAKxF,EAAI,MAAM,KAAK,GAAY,EAAS,aAC/B,EAAI,MAEN,GAUT,eAAe,EAAK,CAElB,GAAM,GAAO,EAAI,MAAM,IAAI,GAAO,GAAqB,IAAM,KAAK,KAClE,MAAO,GAAI,MACR,GAAI,SAAS,GAAK,IAAM,EAAI,SAAS,GAAK,IAC1C,GAAI,QAAQ,OAAS,aAAe,IACpC,GAAO,IAAM,EAAO,IAUzB,WAAW,EAAQ,CACjB,MAAO,GAAO,MAUhB,aAAa,EAAU,CACrB,MAAO,GAAS,OAWlB,4BAA4B,EAAK,EAAQ,CACvC,MAAO,GAAO,gBAAgB,GAAK,OAAO,CAAC,EAAK,IACvC,KAAK,IAAI,EAAK,EAAO,eAAe,GAAS,QACnD,GAWL,wBAAwB,EAAK,EAAQ,CACnC,MAAO,GAAO,eAAe,GAAK,OAAO,CAAC,EAAK,IACtC,KAAK,IAAI,EAAK,EAAO,WAAW,GAAQ,QAC9C,GAWL,0BAA0B,EAAK,EAAQ,CACrC,MAAO,GAAO,iBAAiB,GAAK,OAAO,CAAC,EAAK,IACxC,KAAK,IAAI,EAAK,EAAO,aAAa,GAAU,QAClD,GAUL,aAAa,EAAK,CAEhB,GAAI,GAAU,EAAI,MAClB,AAAI,EAAI,SAAS,IACf,GAAU,EAAU,IAAM,EAAI,SAAS,IAEzC,GAAI,GAAiB,GACrB,OAAS,GAAY,EAAI,OAAQ,EAAW,EAAY,EAAU,OAChE,EAAiB,EAAU,OAAS,IAAM,EAE5C,MAAO,GAAiB,EAAU,IAAM,EAAI,QAU9C,mBAAmB,EAAK,CAEtB,MAAO,GAAI,cAUb,sBAAsB,EAAK,CAEzB,MAAO,GAAI,cAUb,kBAAkB,EAAQ,CACxB,GAAM,GAAY,GAclB,MAXI,GAAO,YAAc,CAAC,EAAO,QAC/B,EAAU,KAER,YAAY,EAAO,WAAW,IAAI,AAAC,GAAW,KAAK,UAAU,IAAS,KAAK,SAE3E,EAAO,eAAiB,QAAa,CAAC,EAAO,QAC/C,EAAU,KAAK,YAAY,EAAO,yBAA2B,KAAK,UAAU,EAAO,iBAEjF,EAAO,SAAW,QACpB,EAAU,KAAK,QAAQ,EAAO,UAE5B,EAAU,OAAS,EACd,GAAG,EAAO,gBAAgB,EAAU,KAAK,SAG3C,EAAO,YAUhB,oBAAoB,EAAU,CAC5B,GAAM,GAAY,GASlB,GARI,EAAS,YACX,EAAU,KAER,YAAY,EAAS,WAAW,IAAI,AAAC,GAAW,KAAK,UAAU,IAAS,KAAK,SAE7E,EAAS,eAAiB,QAC5B,EAAU,KAAK,YAAY,EAAS,yBAA2B,KAAK,UAAU,EAAS,iBAErF,EAAU,OAAS,EAAG,CACxB,GAAM,GAAkB,IAAI,EAAU,KAAK,SAC3C,MAAI,GAAS,YACJ,GAAG,EAAS,eAAe,IAE7B,EAET,MAAO,GAAS,YAWlB,WAAW,EAAK,EAAQ,CACtB,GAAM,GAAY,EAAO,SAAS,EAAK,GACjC,EAAY,EAAO,WAAa,GAChC,EAAkB,EAClB,EAAqB,EAC3B,WAAoB,EAAM,EAAa,CACrC,GAAI,EAAa,CACf,GAAM,GAAW,GAAG,EAAK,OAAO,EAAY,KAAsB,IAClE,MAAO,GAAO,KAAK,EAAU,EAAY,EAAiB,EAAY,GAExE,MAAO,GAET,WAAoB,EAAW,CAC7B,MAAO,GAAU,KAAK;AAAA,GAAM,QAAQ,MAAO,IAAI,OAAO,IAIxD,GAAI,GAAS,CAAC,UAAU,EAAO,aAAa,KAAQ,IAG9C,EAAqB,EAAO,mBAAmB,GACrD,AAAI,EAAmB,OAAS,GAC9B,GAAS,EAAO,OAAO,CAAC,EAAoB,MAI9C,GAAM,GAAe,EAAO,iBAAiB,GAAK,IAAI,AAAC,GAC9C,EAAW,EAAO,aAAa,GAAW,EAAO,oBAAoB,KAE9E,AAAI,EAAa,OAAS,GACxB,GAAS,EAAO,OAAO,CAAC,aAAc,EAAW,GAAe,MAIlE,GAAM,GAAa,EAAO,eAAe,GAAK,IAAI,AAAC,GAC1C,EAAW,EAAO,WAAW,GAAS,EAAO,kBAAkB,KAExE,AAAI,EAAW,OAAS,GACtB,GAAS,EAAO,OAAO,CAAC,WAAY,EAAW,GAAa,MAI9D,GAAM,GAAc,EAAO,gBAAgB,GAAK,IAAI,AAAC,GAC5C,EAAW,EAAO,eAAe,GAAM,EAAO,sBAAsB,KAE7E,MAAI,GAAY,OAAS,GACvB,GAAS,EAAO,OAAO,CAAC,YAAa,EAAW,GAAc,MAGzD,EAAO,KAAK;AAAA,GAWrB,SAAS,EAAK,EAAQ,CACpB,MAAO,MAAK,IACV,EAAO,wBAAwB,EAAK,GACpC,EAAO,4BAA4B,EAAK,GACxC,EAAO,0BAA0B,EAAK,IAgB1C,KAAK,EAAK,EAAO,EAAQ,EAAiB,GAAI,CAG5C,GAAI,EAAI,MAAM,WAAY,MAAO,GAEjC,GAAM,GAAc,EAAQ,EAC5B,GAAI,EAAc,EAAgB,MAAO,GAEzC,GAAM,GAAa,EAAI,OAAO,EAAG,GAC3B,EAAa,EAAI,OAAO,GAExB,EAAe,IAAI,OAAO,GAC1B,EAAQ,GAAI,QAAO,OAAU,GAAc,GAAK,iDAAkD,KAClG,EAAQ,EAAW,MAAM,IAAU,GACzC,MAAO,GAAa,EAAM,IAAI,CAAC,EAAM,IAC/B,GAAK,MAAM,MAAQ;AAAA,GACrB,GAAO,EAAK,MAAM,EAAG,EAAK,OAAS,IAE5B,GAAI,EAAK,EAAe,IAAM,EAAK,cAC3C,KAAK;AAAA,KAIZ,GAAQ,KAAO,KC3Yf,iBAAM,CAAE,yBAAyB,KAIjC,QAAa,CAQX,YAAY,EAAO,EAAa,CAC9B,KAAK,MAAQ,EACb,KAAK,YAAc,GAAe,GAElC,KAAK,SAAW,EAAM,SAAS,KAC/B,KAAK,SAAW,EAAM,SAAS,KAE/B,KAAK,SAAW,iBAAiB,KAAK,GACtC,KAAK,UAAY,GACjB,GAAM,GAAc,GAAiB,GACrC,KAAK,MAAQ,EAAY,UACzB,KAAK,KAAO,EAAY,SACxB,KAAK,OAAS,GACV,KAAK,MACP,MAAK,OAAS,KAAK,KAAK,WAAW,UAErC,KAAK,aAAe,OACpB,KAAK,wBAA0B,OAC/B,KAAK,OAAS,OACd,KAAK,SAAW,OAChB,KAAK,OAAS,GACd,KAAK,WAAa,OAWpB,QAAQ,EAAO,EAAa,CAC1B,YAAK,aAAe,EACpB,KAAK,wBAA0B,EACxB,KAWT,IAAI,EAAM,CACR,YAAK,OAAS,EACP,KAUT,UAAU,EAAI,CACZ,YAAK,SAAW,EACT,KAUT,oBAAoB,EAAY,GAAM,CACpC,YAAK,UAAY,CAAC,CAAC,EACZ,KAUT,SAAS,EAAO,GAAM,CACpB,YAAK,OAAS,CAAC,CAAC,EACT,KAOT,aAAa,EAAO,EAAU,CAC5B,MAAI,KAAa,KAAK,cAAgB,CAAC,MAAM,QAAQ,GAC5C,CAAC,GAGH,EAAS,OAAO,GAUzB,QAAQ,EAAQ,CACd,YAAK,WAAa,EAClB,KAAK,SAAW,CAAC,EAAK,IAAa,CACjC,GAAI,CAAC,EAAO,SAAS,GACnB,KAAM,IAAI,IAAqB,uBAAuB,EAAO,KAAK,UAEpE,MAAI,MAAK,SACA,KAAK,aAAa,EAAK,GAEzB,GAEF,KAST,MAAO,CACL,MAAI,MAAK,KACA,KAAK,KAAK,QAAQ,MAAO,IAE3B,KAAK,MAAM,QAAQ,KAAM,IAWlC,eAAgB,CACd,MAAO,IAAU,KAAK,OAAO,QAAQ,OAAQ,KAW/C,GAAG,EAAK,CACN,MAAO,MAAK,QAAU,GAAO,KAAK,OAAS,IAY/C,YAAmB,EAAK,CACtB,MAAO,GAAI,MAAM,KAAK,OAAO,CAAC,EAAK,IAC1B,EAAM,EAAK,GAAG,cAAgB,EAAK,MAAM,IAUpD,YAA0B,EAAO,CAC/B,GAAI,GACA,EAGE,EAAY,EAAM,MAAM,UAC9B,MAAI,GAAU,OAAS,GAAK,CAAC,QAAQ,KAAK,EAAU,KAAK,GAAY,EAAU,SAC/E,EAAW,EAAU,QAEjB,CAAC,GAAa,UAAU,KAAK,IAC/B,GAAY,EACZ,EAAW,QAEN,CAAE,YAAW,YAGtB,GAAQ,OAAS,GACjB,GAAQ,iBAAmB,KC/M3B,iBAAM,IAAc,EAEpB,YAAsB,EAAG,EAAG,CAM1B,GAAI,KAAK,IAAI,EAAE,OAAS,EAAE,QAAU,GAAa,MAAO,MAAK,IAAI,EAAE,OAAQ,EAAE,QAG7E,GAAM,GAAI,GAGV,OAAS,GAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,EAAE,GAAK,CAAC,GAGV,OAAS,GAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,EAAE,GAAG,GAAK,EAIZ,OAAS,GAAI,EAAG,GAAK,EAAE,OAAQ,IAC7B,OAAS,GAAI,EAAG,GAAK,EAAE,OAAQ,IAAK,CAClC,GAAI,GAAO,EACX,AAAI,EAAE,EAAI,KAAO,EAAE,EAAI,GACrB,EAAO,EAEP,EAAO,EAET,EAAE,GAAG,GAAK,KAAK,IACb,EAAE,EAAI,GAAG,GAAK,EACd,EAAE,GAAG,EAAI,GAAK,EACd,EAAE,EAAI,GAAG,EAAI,GAAK,GAGhB,EAAI,GAAK,EAAI,GAAK,EAAE,EAAI,KAAO,EAAE,EAAI,IAAM,EAAE,EAAI,KAAO,EAAE,EAAI,IAChE,GAAE,GAAG,GAAK,KAAK,IAAI,EAAE,GAAG,GAAI,EAAE,EAAI,GAAG,EAAI,GAAK,IAKpD,MAAO,GAAE,EAAE,QAAQ,EAAE,QAWvB,YAAwB,EAAM,EAAY,CACxC,GAAI,CAAC,GAAc,EAAW,SAAW,EAAG,MAAO,GAEnD,EAAa,MAAM,KAAK,GAAI,KAAI,IAEhC,GAAM,GAAmB,EAAK,WAAW,MACzC,AAAI,GACF,GAAO,EAAK,MAAM,GAClB,EAAa,EAAW,IAAI,GAAa,EAAU,MAAM,KAG3D,GAAI,GAAU,GACV,EAAe,GACb,EAAgB,GAuBtB,MAtBA,GAAW,QAAQ,AAAC,GAAc,CAChC,GAAI,EAAU,QAAU,EAAG,OAE3B,GAAM,GAAW,GAAa,EAAM,GAC9B,EAAS,KAAK,IAAI,EAAK,OAAQ,EAAU,QAE/C,AAAI,AADgB,GAAS,GAAY,EACxB,GACf,CAAI,EAAW,EAEb,GAAe,EACf,EAAU,CAAC,IACF,IAAa,GACtB,EAAQ,KAAK,MAKnB,EAAQ,KAAK,CAAC,EAAG,IAAM,EAAE,cAAc,IACnC,GACF,GAAU,EAAQ,IAAI,GAAa,KAAK,MAGtC,EAAQ,OAAS,EACZ;AAAA,uBAA0B,EAAQ,KAAK,UAE5C,EAAQ,SAAW,EACd;AAAA,gBAAmB,EAAQ,OAE7B,GAGT,GAAQ,eAAiB,KCnGzB,iBAAM,IAAe,QAAQ,UAAU,aACjC,GAAe,QAAQ,iBACvB,GAAO,QAAQ,QACf,GAAK,QAAQ,MAEb,CAAE,YAAU,yBAAyB,KACrC,CAAE,mBAAmB,KACrB,CAAE,SAAS,KACX,CAAE,UAAQ,qBAAqB,KAC/B,CAAE,mBAAmB,KAI3B,gBAAsB,GAAa,CAOjC,YAAY,EAAM,CAChB,QAEA,KAAK,SAAW,GAEhB,KAAK,QAAU,GACf,KAAK,OAAS,KACd,KAAK,oBAAsB,GAC3B,KAAK,sBAAwB,GAE7B,KAAK,MAAQ,GAEb,KAAK,KAAO,GACZ,KAAK,QAAU,GACf,KAAK,cAAgB,GACrB,KAAK,YAAc,KACnB,KAAK,MAAQ,GAAQ,GACrB,KAAK,cAAgB,GACrB,KAAK,oBAAsB,GAC3B,KAAK,0BAA4B,GACjC,KAAK,eAAiB,KACtB,KAAK,mBAAqB,GAC1B,KAAK,gBAAkB,KACvB,KAAK,oBAAsB,KAC3B,KAAK,cAAgB,KACrB,KAAK,SAAW,GAChB,KAAK,6BAA+B,GACpC,KAAK,aAAe,GACpB,KAAK,iBAAmB,OACxB,KAAK,yBAA2B,GAChC,KAAK,oBAAsB,GAC3B,KAAK,gBAAkB,GAEvB,KAAK,oBAAsB,GAC3B,KAAK,0BAA4B,GAGjC,KAAK,qBAAuB,CAC1B,SAAU,AAAC,GAAQ,QAAQ,OAAO,MAAM,GACxC,SAAU,AAAC,GAAQ,QAAQ,OAAO,MAAM,GACxC,gBAAiB,IAAM,QAAQ,OAAO,MAAQ,QAAQ,OAAO,QAAU,OACvE,gBAAiB,IAAM,QAAQ,OAAO,MAAQ,QAAQ,OAAO,QAAU,OACvE,YAAa,CAAC,EAAK,IAAU,EAAM,IAGrC,KAAK,QAAU,GACf,KAAK,eAAiB,GACtB,KAAK,WAAa,aAClB,KAAK,iBAAmB,2BACxB,KAAK,eAAiB,KACtB,KAAK,cAAgB,SACrB,KAAK,wBAA0B,OAC/B,KAAK,iBAAmB,OACxB,KAAK,wBAA0B,iBAC/B,KAAK,wBAA0B,2BAC/B,KAAK,mBAAqB,GAW5B,sBAAsB,EAAe,CACnC,YAAK,qBAAuB,EAAc,qBAC1C,KAAK,eAAiB,EAAc,eACpC,KAAK,WAAa,EAAc,WAChC,KAAK,iBAAmB,EAAc,iBACtC,KAAK,eAAiB,EAAc,eACpC,KAAK,cAAgB,EAAc,cACnC,KAAK,iBAAmB,EAAc,iBACtC,KAAK,wBAA0B,EAAc,wBAC7C,KAAK,wBAA0B,EAAc,wBAC7C,KAAK,mBAAqB,EAAc,mBACxC,KAAK,cAAgB,EAAc,cACnC,KAAK,0BAA4B,EAAc,0BAC/C,KAAK,6BAA+B,EAAc,6BAClD,KAAK,sBAAwB,EAAc,sBAC3C,KAAK,yBAA2B,EAAc,yBAC9C,KAAK,oBAAsB,EAAc,oBACzC,KAAK,0BAA4B,EAAc,0BAExC,KA4BT,QAAQ,EAAa,EAAsB,EAAU,CACnD,GAAI,GAAO,EACP,EAAO,EACX,AAAI,MAAO,IAAS,UAAY,IAAS,MACvC,GAAO,EACP,EAAO,MAET,EAAO,GAAQ,GACf,GAAM,CAAC,CAAE,EAAM,GAAQ,EAAY,MAAM,iBAEnC,EAAM,KAAK,cAAc,GAa/B,MAZI,IACF,GAAI,YAAY,GAChB,EAAI,mBAAqB,IAEvB,EAAK,WAAW,MAAK,oBAAsB,EAAI,OACnD,EAAI,QAAU,CAAC,CAAE,GAAK,QAAU,EAAK,QACrC,EAAI,gBAAkB,EAAK,gBAAkB,KACzC,GAAM,EAAI,UAAU,GACxB,KAAK,SAAS,KAAK,GACnB,EAAI,OAAS,KACb,EAAI,sBAAsB,MAEtB,EAAa,KACV,EAaT,cAAc,EAAM,CAClB,MAAO,IAAI,IAAQ,GAUrB,YAAa,CACX,MAAO,QAAO,OAAO,GAAI,IAAQ,KAAK,iBAWxC,cAAc,EAAe,CAC3B,MAAI,KAAkB,OAAkB,KAAK,mBAE7C,MAAK,mBAAqB,EACnB,MAsBT,gBAAgB,EAAe,CAC7B,MAAI,KAAkB,OAAkB,KAAK,qBAE7C,QAAO,OAAO,KAAK,qBAAsB,GAClC,MAST,mBAAmB,EAAc,GAAM,CACrC,MAAI,OAAO,IAAgB,UAAU,GAAc,CAAC,CAAC,GACrD,KAAK,oBAAsB,EACpB,KAST,yBAAyB,EAAoB,GAAM,CACjD,YAAK,0BAA4B,CAAC,CAAC,EAC5B,KAaT,WAAW,EAAK,EAAM,CACpB,GAAI,CAAC,EAAI,MAAO,KAAM,IAAI,OAAM,oDAIhC,WAA4B,EAAc,CACxC,EAAa,QAAQ,AAAC,GAAQ,CAC5B,GAAI,EAAI,oBAAsB,CAAC,EAAI,gBACjC,KAAM,IAAI,OAAM,6DAA6D,EAAI,UAEnF,EAAmB,EAAI,YAG3B,SAAmB,EAAI,UAEvB,EAAO,GAAQ,GACX,EAAK,WAAW,MAAK,oBAAsB,EAAI,OAC/C,GAAK,QAAU,EAAK,SAAQ,GAAI,QAAU,IAE9C,KAAK,SAAS,KAAK,GACnB,EAAI,OAAS,KACN,KAcT,eAAe,EAAM,EAAa,CAChC,MAAO,IAAI,IAAS,EAAM,GAmB5B,SAAS,EAAM,EAAa,EAAI,EAAc,CAC5C,GAAM,GAAW,KAAK,eAAe,EAAM,GAC3C,MAAI,OAAO,IAAO,WAChB,EAAS,QAAQ,GAAc,UAAU,GAEzC,EAAS,QAAQ,GAEnB,KAAK,YAAY,GACV,KAeT,UAAU,EAAO,CACf,SAAM,MAAM,MAAM,QAAQ,AAAC,GAAW,CACpC,KAAK,SAAS,KAET,KAST,YAAY,EAAU,CACpB,GAAM,GAAmB,KAAK,MAAM,MAAM,IAAI,GAC9C,GAAI,GAAoB,EAAiB,SACvC,KAAM,IAAI,OAAM,2CAA2C,EAAiB,WAE9E,GAAI,EAAS,UAAY,EAAS,eAAiB,QAAa,EAAS,WAAa,OACpF,KAAM,IAAI,OAAM,2DAA2D,EAAS,WAEtF,YAAK,MAAM,KAAK,GACT,KAaT,eAAe,EAAqB,EAAa,CAC/C,MAAI,KAAwB,GAC1B,KAAK,wBAA0B,GAE/B,MAAK,wBAA0B,GAC3B,MAAO,IAAwB,UACjC,MAAK,iBAAmB,EAAoB,MAAM,KAAK,GACvD,KAAK,wBAA0B,GAEjC,KAAK,wBAA0B,GAAe,KAAK,yBAE9C,KAQT,yBAA0B,CACxB,MAAI,MAAK,0BAA4B,OAC5B,KAAK,SAAS,QAAU,CAAC,KAAK,gBAAkB,CAAC,KAAK,aAAa,QAErE,KAAK,wBAWd,KAAK,EAAO,EAAU,CACpB,GAAM,GAAgB,CAAC,YAAa,cACpC,GAAI,CAAC,EAAc,SAAS,GAC1B,KAAM,IAAI,OAAM,gDAAgD;AAAA,oBAClD,EAAc,KAAK,YAEnC,MAAI,MAAK,gBAAgB,GACvB,KAAK,gBAAgB,GAAO,KAAK,GAEjC,KAAK,gBAAgB,GAAS,CAAC,GAE1B,KAUT,aAAa,EAAI,CACf,MAAI,GACF,KAAK,cAAgB,EAErB,KAAK,cAAgB,AAAC,GAAQ,CAC5B,GAAI,EAAI,OAAS,mCACf,KAAM,IAML,KAaT,MAAM,EAAU,EAAM,EAAS,CAC7B,AAAI,KAAK,eACP,KAAK,cAAc,GAAI,IAAe,EAAU,EAAM,IAGxD,QAAQ,KAAK,GAkBf,OAAO,EAAI,CACT,GAAM,GAAW,AAAC,GAAS,CAEzB,GAAM,GAAoB,KAAK,MAAM,OAC/B,EAAa,EAAK,MAAM,EAAG,GACjC,MAAI,MAAK,0BACP,EAAW,GAAqB,KAEhC,EAAW,GAAqB,KAAK,OAEvC,EAAW,KAAK,MAET,EAAG,MAAM,KAAM,IAExB,YAAK,eAAiB,EACf,KAcT,aAAa,EAAO,EAAa,CAC/B,MAAO,IAAI,IAAO,EAAO,GAS3B,UAAU,EAAQ,CAChB,GAAM,GAAQ,EAAO,OACf,EAAO,EAAO,gBAEhB,EAAe,EAAO,aAG1B,GAAI,EAAO,QAAU,EAAO,UAAY,EAAO,UAAY,MAAO,IAAiB,UAAW,CAE5F,GAAI,EAAO,OAAQ,CACjB,GAAM,GAAmB,EAAO,KAAK,QAAQ,SAAU,MACvD,EAAe,KAAK,YAAY,GAAoB,KAAK,eAAe,GAAQ,GAGlF,AAAI,IAAiB,QACnB,KAAK,0BAA0B,EAAM,EAAc,WAKvD,KAAK,QAAQ,KAAK,GAGlB,GAAM,GAAoB,CAAC,EAAK,EAAqB,IAAgB,CAEnE,GAAM,GAAW,KAAK,eAAe,GAGrC,GAAI,IAAQ,MAAQ,EAAO,SACzB,GAAI,CACF,EAAM,EAAO,SAAS,EAAK,IAAa,OAAY,EAAe,SAC5D,EAAP,CACA,GAAI,EAAI,OAAS,4BAA6B,CAC5C,GAAM,GAAU,GAAG,KAAuB,EAAI,UAC9C,KAAK,cAAc,EAAI,SAAU,EAAI,KAAM,GAE7C,KAAM,OAEH,AAAI,KAAQ,MAAQ,EAAO,UAChC,GAAM,EAAO,aAAa,EAAK,IAIjC,AAAI,MAAO,IAAa,WAAa,MAAO,IAAa,YAEvD,AAAI,GAAO,KACT,KAAK,0BAA0B,EAAM,EAAO,OAAS,GAAQ,GAAgB,GAAM,GAEnF,KAAK,0BAA0B,EAAM,EAAK,GAEnC,IAAQ,MAEjB,KAAK,0BAA0B,EAAM,EAAO,OAAS,GAAQ,EAAK,IAItE,YAAK,GAAG,UAAY,EAAO,AAAC,GAAQ,CAClC,GAAM,GAAsB,kBAAkB,EAAO,oBAAoB,iBACzE,EAAkB,EAAK,EAAqB,SAG1C,EAAO,QACT,KAAK,GAAG,aAAe,EAAO,AAAC,GAAQ,CACrC,GAAM,GAAsB,kBAAkB,EAAO,iBAAiB,gBAAkB,EAAO,sBAC/F,EAAkB,EAAK,EAAqB,SAIzC,KAQT,UAAU,EAAQ,EAAO,EAAa,EAAI,EAAc,CACtD,GAAM,GAAS,KAAK,aAAa,EAAO,GAExC,GADA,EAAO,oBAAoB,CAAC,CAAC,EAAO,WAChC,MAAO,IAAO,WAChB,EAAO,QAAQ,GAAc,UAAU,WAC9B,YAAc,QAAQ,CAE/B,GAAM,GAAQ,EACd,EAAK,CAAC,EAAK,IAAQ,CACjB,GAAM,GAAI,EAAM,KAAK,GACrB,MAAO,GAAI,EAAE,GAAK,GAEpB,EAAO,QAAQ,GAAc,UAAU,OAEvC,GAAO,QAAQ,GAGjB,MAAO,MAAK,UAAU,GAqDxB,OAAO,EAAO,EAAa,EAAI,EAAc,CAC3C,MAAO,MAAK,UAAU,GAAI,EAAO,EAAa,EAAI,GAgBpD,eAAe,EAAO,EAAa,EAAI,EAAc,CACnD,MAAO,MAAK,UAAU,CAAE,UAAW,IAAQ,EAAO,EAAa,EAAI,GAarE,4BAA4B,EAAU,GAAM,CAC1C,YAAK,6BAA+B,CAAC,CAAC,EAC/B,KAST,mBAAmB,EAAe,GAAM,CACtC,YAAK,oBAAsB,CAAC,CAAC,EACtB,KAST,qBAAqB,EAAc,GAAM,CACvC,YAAK,sBAAwB,CAAC,CAAC,EACxB,KAUT,wBAAwB,EAAa,GAAM,CACzC,YAAK,yBAA2B,CAAC,CAAC,EAC3B,KAYT,mBAAmB,EAAc,GAAM,CAErC,GADA,KAAK,oBAAsB,CAAC,CAAC,EACzB,CAAC,CAAC,KAAK,QAAU,GAAe,CAAC,KAAK,OAAO,yBAC/C,KAAM,IAAI,OAAM,uGAElB,MAAO,MAWT,yBAAyB,EAAoB,GAAM,CAEjD,GADA,KAAK,0BAA4B,CAAC,CAAC,EAC/B,KAAK,QAAQ,OACf,KAAM,IAAI,OAAM,0DAElB,MAAO,MAUT,eAAe,EAAK,CAClB,MAAI,MAAK,0BACA,KAAK,GAEP,KAAK,cAAc,GAW5B,eAAe,EAAK,EAAO,CACzB,MAAI,MAAK,0BACP,KAAK,GAAO,EAEZ,KAAK,cAAc,GAAO,EAErB,KAMT,0BAA0B,EAAK,EAAO,EAAQ,CAC5C,KAAK,eAAe,EAAK,GACzB,KAAK,oBAAoB,GAAO,EAUlC,iBAAiB,EAAM,EAAc,CACnC,GAAI,IAAS,QAAa,CAAC,MAAM,QAAQ,GACvC,KAAM,IAAI,OAAM,uDAElB,EAAe,GAAgB,GAG3B,IAAS,QACX,GAAO,QAAQ,KAEX,QAAQ,UAAY,QAAQ,SAAS,UACvC,GAAa,KAAO,aAGxB,KAAK,QAAU,EAAK,QAGpB,GAAI,GACJ,OAAQ,EAAa,UACd,YACA,OACH,KAAK,YAAc,EAAK,GACxB,EAAW,EAAK,MAAM,GACtB,UACG,WAEH,AAAI,QAAQ,WACV,MAAK,YAAc,EAAK,GACxB,EAAW,EAAK,MAAM,IAEtB,EAAW,EAAK,MAAM,GAExB,UACG,OACH,EAAW,EAAK,MAAM,GACtB,cAEA,KAAM,IAAI,OAAM,oCAAoC,EAAa,WAErE,MAAI,CAAC,KAAK,aAAe,QAAQ,MAC/B,MAAK,YAAc,QAAQ,KAAK,UAIlC,KAAK,MAAQ,KAAK,OAAU,KAAK,aAAe,GAAK,SAAS,KAAK,YAAa,GAAK,QAAQ,KAAK,cAE3F,EAoBT,MAAM,EAAM,EAAc,CACxB,GAAM,GAAW,KAAK,iBAAiB,EAAM,GAC7C,YAAK,cAAc,GAAI,GAEhB,UAsBH,YAAW,EAAM,EAAc,CACnC,GAAM,GAAW,KAAK,iBAAiB,EAAM,GAC7C,YAAM,MAAK,cAAc,GAAI,GAEtB,KAST,mBAAmB,EAAY,EAAM,CACnC,EAAO,EAAK,QACZ,GAAI,GAAiB,GACf,EAAY,CAAC,MAAO,MAAO,OAAQ,OAAQ,QAGjD,KAAK,mCAGL,GAAI,GAAa,KAAK,YAEtB,AAAI,CAAC,GAAc,QAAQ,MACzB,GAAa,QAAQ,KAAK,UAG5B,GAAI,GACJ,GAAI,CACF,GAAM,GAAe,GAAG,aAAa,GACrC,EAAU,GAAK,QAAQ,SAChB,EAAP,CACA,EAAU,IAIZ,GAAI,GAAM,GAAK,SAAS,EAAY,GAAK,QAAQ,IAAe,IAAM,EAAW,MACjF,AAAI,EAAW,iBACb,GAAM,EAAW,iBAGnB,GAAM,GAAW,GAAK,KAAK,EAAS,GACpC,AAAI,GAAG,WAAW,GAEhB,EAAM,EAGN,EAAU,QAAQ,AAAC,GAAQ,CACzB,AAAI,GAAG,WAAW,GAAG,IAAW,MAC9B,GAAM,GAAG,IAAW,OAI1B,EAAiB,EAAU,SAAS,GAAK,QAAQ,IAEjD,GAAI,GACJ,AAAI,QAAQ,WAAa,QACvB,AAAI,EACF,GAAK,QAAQ,GAEb,EAAO,GAA2B,QAAQ,UAAU,OAAO,GAE3D,EAAO,GAAa,MAAM,QAAQ,KAAK,GAAI,EAAM,CAAE,MAAO,aAE1D,EAAO,GAAa,MAAM,EAAK,EAAM,CAAE,MAAO,YAGhD,GAAK,QAAQ,GAEb,EAAO,GAA2B,QAAQ,UAAU,OAAO,GAC3D,EAAO,GAAa,MAAM,QAAQ,SAAU,EAAM,CAAE,MAAO,aAI7D,AADgB,CAAC,UAAW,UAAW,UAAW,SAAU,UACpD,QAAQ,AAAC,GAAW,CAE1B,QAAQ,GAAG,EAAQ,IAAM,CACvB,AAAI,EAAK,SAAW,IAAS,EAAK,WAAa,MAC7C,EAAK,KAAK,OAOhB,GAAM,GAAe,KAAK,cAC1B,AAAK,EAGH,EAAK,GAAG,QAAS,IAAM,CACrB,EAAa,GAAI,IAAe,QAAQ,UAAY,EAAG,mCAAoC,cAH7F,EAAK,GAAG,QAAS,QAAQ,KAAK,KAAK,UAMrC,EAAK,GAAG,QAAS,AAAC,GAAQ,CAExB,GAAI,EAAI,OAAS,SAAU,CACzB,GAAM,GAAoB,IAAI;AAAA,SAC7B,EAAW;AAAA,0GAEZ,KAAM,IAAI,OAAM,WAEP,EAAI,OAAS,SACtB,KAAM,IAAI,OAAM,IAAI,qBAEtB,GAAI,CAAC,EACH,QAAQ,KAAK,OACR,CACL,GAAM,GAAe,GAAI,IAAe,EAAG,mCAAoC,WAC/E,EAAa,YAAc,EAC3B,EAAa,MAKjB,KAAK,eAAiB,EAOxB,oBAAoB,EAAa,EAAU,EAAS,CAClD,GAAM,GAAa,KAAK,aAAa,GAGrC,GAFK,GAAY,KAAK,KAAK,CAAE,MAAO,KAEhC,EAAW,mBACb,KAAK,mBAAmB,EAAY,EAAS,OAAO,QAEpD,OAAO,GAAW,cAAc,EAAU,GAU9C,yBAA0B,CAQxB,AANA,KAAK,MAAM,QAAQ,CAAC,EAAK,IAAM,CAC7B,AAAI,EAAI,UAAY,KAAK,KAAK,IAAM,MAClC,KAAK,gBAAgB,EAAI,UAIzB,OAAK,MAAM,OAAS,GAAK,KAAK,MAAM,KAAK,MAAM,OAAS,GAAG,WAG3D,KAAK,KAAK,OAAS,KAAK,MAAM,QAChC,KAAK,iBAAiB,KAAK,MAU/B,mBAAoB,CAClB,GAAM,GAAa,CAAC,EAAU,EAAO,IAAa,CAEhD,GAAI,GAAc,EAClB,GAAI,IAAU,MAAQ,EAAS,SAC7B,GAAI,CACF,EAAc,EAAS,SAAS,EAAO,SAChC,EAAP,CACA,GAAI,EAAI,OAAS,4BAA6B,CAC5C,GAAM,GAAU,kCAAkC,+BAAmC,EAAS,YAAY,EAAI,UAC9G,KAAK,cAAc,EAAI,SAAU,EAAI,KAAM,GAE7C,KAAM,GAGV,MAAO,IAGT,KAAK,0BAEL,GAAM,GAAgB,GACtB,KAAK,MAAM,QAAQ,CAAC,EAAa,IAAU,CACzC,GAAI,GAAQ,EAAY,aACxB,AAAI,EAAY,SAEd,AAAI,EAAQ,KAAK,KAAK,OACpB,GAAQ,KAAK,KAAK,MAAM,GACpB,EAAY,UACd,GAAQ,EAAM,OAAO,CAAC,EAAW,IACxB,EAAW,EAAa,EAAG,GACjC,EAAY,gBAER,IAAU,QACnB,GAAQ,IAED,EAAQ,KAAK,KAAK,QAC3B,GAAQ,KAAK,KAAK,GACd,EAAY,UACd,GAAQ,EAAW,EAAa,EAAO,EAAY,gBAGvD,EAAc,GAAS,IAEzB,KAAK,cAAgB,EAWvB,aAAa,EAAS,EAAI,CAExB,MAAI,IAAW,EAAQ,MAAQ,MAAO,GAAQ,MAAS,WAE9C,EAAQ,KAAK,IAAM,KAGrB,IAWT,kBAAkB,EAAS,EAAO,CAChC,GAAI,GAAS,EACP,EAAQ,GACd,UAAqB,MAClB,UACA,OAAO,GAAO,EAAI,gBAAgB,KAAW,QAC7C,QAAQ,GAAiB,CACxB,EAAc,gBAAgB,GAAO,QAAQ,AAAC,GAAa,CACzD,EAAM,KAAK,CAAE,gBAAe,iBAG9B,IAAU,cACZ,EAAM,UAGR,EAAM,QAAQ,AAAC,GAAe,CAC5B,EAAS,KAAK,aAAa,EAAQ,IAC1B,EAAW,SAAS,EAAW,cAAe,SAGlD,EAUT,cAAc,EAAU,EAAS,CAC/B,GAAM,GAAS,KAAK,aAAa,GAMjC,GALA,KAAK,mBACL,EAAW,EAAS,OAAO,EAAO,UAClC,EAAU,EAAO,QACjB,KAAK,KAAO,EAAS,OAAO,GAExB,GAAY,KAAK,aAAa,EAAS,IACzC,MAAO,MAAK,oBAAoB,EAAS,GAAI,EAAS,MAAM,GAAI,GAElE,GAAI,KAAK,2BAA6B,EAAS,KAAO,KAAK,iBACzD,MAAI,GAAS,SAAW,GACtB,KAAK,OAEA,KAAK,oBAAoB,EAAS,GAAI,GAAI,CAAC,KAAK,gBAEzD,GAAI,KAAK,oBACP,UAAsB,KAAM,GACrB,KAAK,oBAAoB,KAAK,oBAAqB,EAAU,GAEtE,AAAI,KAAK,SAAS,QAAU,KAAK,KAAK,SAAW,GAAK,CAAC,KAAK,gBAAkB,CAAC,KAAK,qBAElF,KAAK,KAAK,CAAE,MAAO,KAGrB,GAAsB,KAAM,EAAO,SACnC,KAAK,mCAGL,GAAM,GAAyB,IAAM,CACnC,AAAI,EAAO,QAAQ,OAAS,GAC1B,KAAK,cAAc,EAAO,QAAQ,KAIhC,EAAe,WAAW,KAAK,SACrC,GAAI,KAAK,eAAgB,CACvB,IACA,KAAK,oBAEL,GAAI,GACJ,SAAe,KAAK,kBAAkB,EAAc,aACpD,EAAe,KAAK,aAAa,EAAc,IAAM,KAAK,eAAe,KAAK,gBAC1E,KAAK,QAAQ,KAAK,OAAO,KAAK,EAAc,EAAU,GAC1D,EAAe,KAAK,kBAAkB,EAAc,cAC7C,EAET,GAAI,KAAK,QAAU,KAAK,OAAO,cAAc,GAC3C,IACA,KAAK,oBACL,KAAK,OAAO,KAAK,EAAc,EAAU,WAChC,EAAS,OAAQ,CAC1B,GAAI,KAAK,aAAa,KACpB,MAAO,MAAK,oBAAoB,IAAK,EAAU,GAEjD,AAAI,KAAK,cAAc,aAErB,KAAK,KAAK,YAAa,EAAU,GAC5B,AAAI,KAAK,SAAS,OACvB,KAAK,iBAEL,KACA,KAAK,yBAEF,AAAI,MAAK,SAAS,OACvB,KAEA,KAAK,KAAK,CAAE,MAAO,MAEnB,KACA,KAAK,qBAUT,aAAa,EAAM,CACjB,GAAI,EAAC,EACL,MAAO,MAAK,SAAS,KAAK,GAAO,EAAI,QAAU,GAAQ,EAAI,SAAS,SAAS,IAW/E,YAAY,EAAK,CACf,MAAO,MAAK,QAAQ,KAAK,GAAU,EAAO,GAAG,IAU/C,kCAAmC,CAEjC,OAAS,GAAM,KAAM,EAAK,EAAM,EAAI,OAClC,EAAI,QAAQ,QAAQ,AAAC,GAAa,CAChC,AAAI,EAAS,WAAc,EAAI,eAAe,EAAS,mBAAqB,QAC1E,EAAI,4BAA4B,KAsBxC,aAAa,EAAM,CACjB,GAAM,GAAW,GACX,EAAU,GACZ,EAAO,EACL,EAAO,EAAK,QAElB,WAAqB,EAAK,CACxB,MAAO,GAAI,OAAS,GAAK,EAAI,KAAO,IAItC,GAAI,GAAuB,KAC3B,KAAO,EAAK,QAAQ,CAClB,GAAM,GAAM,EAAK,QAGjB,GAAI,IAAQ,KAAM,CAChB,AAAI,IAAS,GAAS,EAAK,KAAK,GAChC,EAAK,KAAK,GAAG,GACb,MAGF,GAAI,GAAwB,CAAC,EAAY,GAAM,CAC7C,KAAK,KAAK,UAAU,EAAqB,SAAU,GACnD,SAIF,GAFA,EAAuB,KAEnB,EAAY,GAAM,CACpB,GAAM,GAAS,KAAK,YAAY,GAEhC,GAAI,EAAQ,CACV,GAAI,EAAO,SAAU,CACnB,GAAM,GAAQ,EAAK,QACnB,AAAI,IAAU,QAAW,KAAK,sBAAsB,GACpD,KAAK,KAAK,UAAU,EAAO,SAAU,WAC5B,EAAO,SAAU,CAC1B,GAAI,GAAQ,KAEZ,AAAI,EAAK,OAAS,GAAK,CAAC,EAAY,EAAK,KACvC,GAAQ,EAAK,SAEf,KAAK,KAAK,UAAU,EAAO,SAAU,OAErC,MAAK,KAAK,UAAU,EAAO,UAE7B,EAAuB,EAAO,SAAW,EAAS,KAClD,UAKJ,GAAI,EAAI,OAAS,GAAK,EAAI,KAAO,KAAO,EAAI,KAAO,IAAK,CACtD,GAAM,GAAS,KAAK,YAAY,IAAI,EAAI,MACxC,GAAI,EAAQ,CACV,AAAI,EAAO,UAAa,EAAO,UAAY,KAAK,6BAE9C,KAAK,KAAK,UAAU,EAAO,SAAU,EAAI,MAAM,IAG/C,MAAK,KAAK,UAAU,EAAO,UAC3B,EAAK,QAAQ,IAAI,EAAI,MAAM,OAE7B,UAKJ,GAAI,YAAY,KAAK,GAAM,CACzB,GAAM,GAAQ,EAAI,QAAQ,KACpB,EAAS,KAAK,YAAY,EAAI,MAAM,EAAG,IAC7C,GAAI,GAAW,GAAO,UAAY,EAAO,UAAW,CAClD,KAAK,KAAK,UAAU,EAAO,SAAU,EAAI,MAAM,EAAQ,IACvD,UAaJ,GALI,EAAY,IACd,GAAO,GAIJ,MAAK,0BAA4B,KAAK,sBAAwB,EAAS,SAAW,GAAK,EAAQ,SAAW,GAC7G,GAAI,KAAK,aAAa,GAAM,CAC1B,EAAS,KAAK,GACV,EAAK,OAAS,GAAG,EAAQ,KAAK,GAAG,GACrC,cACS,IAAQ,KAAK,kBAAoB,KAAK,0BAA2B,CAC1E,EAAS,KAAK,GACV,EAAK,OAAS,GAAG,EAAS,KAAK,GAAG,GACtC,cACS,KAAK,oBAAqB,CACnC,EAAQ,KAAK,GACT,EAAK,OAAS,GAAG,EAAQ,KAAK,GAAG,GACrC,OAKJ,GAAI,KAAK,oBAAqB,CAC5B,EAAK,KAAK,GACN,EAAK,OAAS,GAAG,EAAK,KAAK,GAAG,GAClC,MAIF,EAAK,KAAK,GAGZ,MAAO,CAAE,WAAU,WAQrB,MAAO,CACL,GAAI,KAAK,0BAA2B,CAElC,GAAM,GAAS,GACT,EAAM,KAAK,QAAQ,OAEzB,OAAS,GAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,GAAM,GAAM,KAAK,QAAQ,GAAG,gBAC5B,EAAO,GAAO,IAAQ,KAAK,mBAAqB,KAAK,SAAW,KAAK,GAEvE,MAAO,GAGT,MAAO,MAAK,cAQd,cAAc,EAAU,EAAM,EAAS,CACrC,KAAK,qBAAqB,YAAY,GAAG;AAAA,EAAa,KAAK,qBAAqB,UAChF,AAAI,MAAO,MAAK,qBAAwB,SACtC,KAAK,qBAAqB,SAAS,GAAG,KAAK;AAAA,GAClC,KAAK,qBACd,MAAK,qBAAqB,SAAS;AAAA,GACnC,KAAK,WAAW,CAAE,MAAO,MAE3B,KAAK,MAAM,EAAU,EAAM,GAS7B,kBAAmB,CACjB,KAAK,QAAQ,QAAQ,AAAC,GAAW,CAC/B,GAAI,EAAO,QAAU,EAAO,SAAU,SAAQ,IAAK,CACjD,GAAM,GAAY,EAAO,gBAEzB,AAAI,MAAK,eAAe,KAAe,QAAa,KAAK,oBAAoB,KAAe,YAC1F,CAAI,EAAO,UAAY,EAAO,SAE5B,KAAK,KAAK,aAAa,EAAO,SAAU,QAAQ,IAAI,EAAO,SAG3D,KAAK,KAAK,aAAa,EAAO,cAcxC,gBAAgB,EAAM,CACpB,GAAM,GAAU,qCAAqC,KACrD,KAAK,cAAc,EAAG,4BAA6B,GAUrD,sBAAsB,EAAQ,CAC5B,GAAM,GAAU,kBAAkB,EAAO,0BACzC,KAAK,cAAc,EAAG,kCAAmC,GAU3D,4BAA4B,EAAQ,CAClC,GAAM,GAAU,2BAA2B,EAAO,uBAClD,KAAK,cAAc,EAAG,wCAAyC,GAUjE,cAAc,EAAM,CAClB,GAAI,KAAK,oBAAqB,OAC9B,GAAI,GAAa,GAEjB,GAAI,EAAK,WAAW,OAAS,KAAK,0BAA2B,CAE3D,GAAI,GAAiB,GACjB,EAAU,KACd,EAAG,CACD,GAAM,GAAY,EAAQ,aAAa,eAAe,GACnD,OAAO,GAAU,EAAO,MACxB,IAAI,GAAU,EAAO,MACxB,EAAiB,EAAe,OAAO,GACvC,EAAU,EAAQ,aACX,GAAW,CAAC,EAAQ,0BAC7B,EAAa,GAAe,EAAM,GAGpC,GAAM,GAAU,0BAA0B,KAAQ,IAClD,KAAK,cAAc,EAAG,0BAA2B,GAUnD,iBAAiB,EAAc,CAC7B,GAAI,KAAK,sBAAuB,OAEhC,GAAM,GAAW,KAAK,MAAM,OACtB,EAAK,IAAa,EAAK,GAAK,IAE5B,EAAU,4BADM,KAAK,OAAS,SAAS,KAAK,UAAY,gBACS,aAAoB,aAAa,EAAa,UACrH,KAAK,cAAc,EAAG,4BAA6B,GASrD,gBAAiB,CACf,GAAM,GAAc,KAAK,KAAK,GAC1B,EAAa,GAEjB,GAAI,KAAK,0BAA2B,CAClC,GAAM,GAAiB,GACvB,KAAK,aAAa,gBAAgB,MAAM,QAAQ,AAAC,GAAY,CAC3D,EAAe,KAAK,EAAQ,QAExB,EAAQ,SAAS,EAAe,KAAK,EAAQ,WAEnD,EAAa,GAAe,EAAa,GAG3C,GAAM,GAAU,2BAA2B,KAAe,IAC1D,KAAK,cAAc,EAAG,2BAA4B,GAiBpD,QAAQ,EAAK,EAAO,EAAa,CAC/B,GAAI,IAAQ,OAAW,MAAO,MAAK,SACnC,KAAK,SAAW,EAChB,EAAQ,GAAS,gBACjB,EAAc,GAAe,4BAC7B,GAAM,GAAgB,KAAK,aAAa,EAAO,GAC/C,YAAK,mBAAqB,EAAc,gBACxC,KAAK,QAAQ,KAAK,GAClB,KAAK,GAAG,UAAY,EAAc,OAAQ,IAAM,CAC9C,KAAK,qBAAqB,SAAS,GAAG;AAAA,GACtC,KAAK,MAAM,EAAG,oBAAqB,KAE9B,KAUT,YAAY,EAAK,EAAiB,CAChC,MAAI,KAAQ,QAAa,IAAoB,OAAkB,KAAK,aACpE,MAAK,aAAe,EAChB,GACF,MAAK,iBAAmB,GAEnB,MAYT,MAAM,EAAO,CACX,GAAI,IAAU,OAAW,MAAO,MAAK,SAAS,GAG9C,GAAI,GAAU,KAMd,GALI,KAAK,SAAS,SAAW,GAAK,KAAK,SAAS,KAAK,SAAS,OAAS,GAAG,oBAExE,GAAU,KAAK,SAAS,KAAK,SAAS,OAAS,IAG7C,IAAU,EAAQ,MAAO,KAAM,IAAI,OAAM,+CAE7C,SAAQ,SAAS,KAAK,GACf,KAYT,QAAQ,EAAS,CAEf,MAAI,KAAY,OAAkB,KAAK,SAEvC,GAAQ,QAAQ,AAAC,GAAU,KAAK,MAAM,IAC/B,MAUT,MAAM,EAAK,CACT,GAAI,IAAQ,OAAW,CACrB,GAAI,KAAK,OAAQ,MAAO,MAAK,OAE7B,GAAM,GAAO,KAAK,MAAM,IAAI,AAAC,GACpB,GAAqB,IAE9B,MAAO,GAAG,OACP,KAAK,QAAQ,QAAU,KAAK,eAAiB,YAAc,GAC3D,KAAK,SAAS,OAAS,YAAc,GACrC,KAAK,MAAM,OAAS,EAAO,IAC5B,KAAK,KAGT,YAAK,OAAS,EACP,KAUT,KAAK,EAAK,CACR,MAAI,KAAQ,OAAkB,KAAK,MACnC,MAAK,MAAQ,EACN,MAUT,gBAAgB,EAAgB,CAC9B,GAAM,GAAS,KAAK,aACpB,MAAI,GAAO,YAAc,QACvB,GAAO,UAAa,GAAkB,EAAe,MAAS,KAAK,qBAAqB,kBAAoB,KAAK,qBAAqB,mBAEjI,EAAO,WAAW,KAAM,GAOjC,gBAAgB,EAAgB,CAC9B,EAAiB,GAAkB,GACnC,GAAM,GAAU,CAAE,MAAO,CAAC,CAAC,EAAe,OACtC,EACJ,MAAI,GAAQ,MACV,EAAQ,AAAC,GAAQ,KAAK,qBAAqB,SAAS,GAEpD,EAAQ,AAAC,GAAQ,KAAK,qBAAqB,SAAS,GAEtD,EAAQ,MAAQ,EAAe,OAAS,EACxC,EAAQ,QAAU,KACX,EAWT,WAAW,EAAgB,CACzB,GAAI,GACJ,AAAI,MAAO,IAAmB,YAC5B,GAAqB,EACrB,EAAiB,QAEnB,GAAM,GAAU,KAAK,gBAAgB,GAErC,GAAqB,MAAM,UAAU,QAAQ,GAAW,EAAQ,KAAK,gBAAiB,IACtF,KAAK,KAAK,aAAc,GAExB,GAAI,GAAkB,KAAK,gBAAgB,GAC3C,GAAI,GACF,GAAkB,EAAmB,GACjC,MAAO,IAAoB,UAAY,CAAC,OAAO,SAAS,IAC1D,KAAM,IAAI,OAAM,wDAGpB,EAAQ,MAAM,GAEd,KAAK,KAAK,KAAK,eACf,KAAK,KAAK,YAAa,GACvB,GAAqB,MAAM,QAAQ,GAAW,EAAQ,KAAK,eAAgB,IAa7E,WAAW,EAAO,EAAa,CAC7B,GAAI,MAAO,IAAU,UACnB,YAAK,eAAiB,EACf,KAET,KAAK,WAAa,GAAS,KAAK,WAChC,KAAK,iBAAmB,GAAe,KAAK,iBAE5C,GAAM,GAAY,GAAiB,KAAK,YACxC,YAAK,eAAiB,EAAU,UAChC,KAAK,cAAgB,EAAU,SAExB,KAWT,KAAK,EAAgB,CACnB,KAAK,WAAW,GAChB,GAAI,GAAW,QAAQ,UAAY,EACnC,AAAI,IAAa,GAAK,GAAkB,MAAO,IAAmB,YAAc,EAAe,OAC7F,GAAW,GAGb,KAAK,MAAM,EAAU,iBAAkB,gBAazC,YAAY,EAAU,EAAM,CAC1B,GAAM,GAAgB,CAAC,YAAa,SAAU,QAAS,YACvD,GAAI,CAAC,EAAc,SAAS,GAC1B,KAAM,IAAI,OAAM;AAAA,oBACF,EAAc,KAAK,YAEnC,GAAM,GAAY,GAAG,QACrB,YAAK,GAAG,EAAW,AAAC,GAAY,CAC9B,GAAI,GACJ,AAAI,MAAO,IAAS,WAClB,EAAU,EAAK,CAAE,MAAO,EAAQ,MAAO,QAAS,EAAQ,UAExD,EAAU,EAGR,GACF,EAAQ,MAAM,GAAG;AAAA,KAGd,OAYX,YAA+B,EAAK,EAAM,CAExC,AAAI,AADe,EAAI,gBAAkB,EAAK,KAAK,GAAO,IAAQ,EAAI,eAAiB,IAAQ,EAAI,iBAEjG,GAAI,aAEJ,EAAI,MAAM,EAAG,0BAA2B,iBAY5C,YAAoC,EAAM,CAKxC,MAAO,GAAK,IAAI,AAAC,GAAQ,CACvB,GAAI,CAAC,EAAI,WAAW,aAClB,MAAO,GAET,GAAI,GACA,EAAY,YACZ,EAAY,OACZ,EAoBJ,MAnBA,AAAK,GAAQ,EAAI,MAAM,2BAA6B,KAElD,EAAc,EAAM,GACf,AAAK,GAAQ,EAAI,MAAM,yCAA2C,KACvE,GAAc,EAAM,GACpB,AAAI,QAAQ,KAAK,EAAM,IAErB,EAAY,EAAM,GAGlB,EAAY,EAAM,IAEV,GAAQ,EAAI,MAAM,+CAAiD,MAE7E,GAAc,EAAM,GACpB,EAAY,EAAM,GAClB,EAAY,EAAM,IAGhB,GAAe,IAAc,IACxB,GAAG,KAAe,KAAa,SAAS,GAAa,IAEvD,IAUX,YAA8B,EAAc,CAC1C,GAAM,GAAS,GACf,OAAS,GAAU,EAAc,EAAS,EAAU,EAAQ,OAC1D,EAAO,KAAK,GAEd,MAAO,GAGT,GAAQ,QAAU,KCn4DlB,sBAAM,CAAE,aAAa,KACf,CAAE,YAAY,KACd,CAAE,kBAAgB,yBAAyB,KAC3C,CAAE,SAAS,KACX,CAAE,WAAW,KAQnB,GAAU,GAAO,QAAU,GAAI,IAC/B,GAAQ,QAAU,GAOlB,GAAQ,SAAW,GACnB,GAAQ,QAAU,GAClB,GAAQ,eAAiB,GACzB,GAAQ,KAAO,GACf,GAAQ,qBAAuB,GAC/B,GAAQ,2BAA6B,GACrC,GAAQ,OAAS,KC1BjB,2BAEA,GAAQ,aAAe,SAAU,EAAI,CACnC,MAAO,QAAO,eAAe,YAAa,EAAM,CAC9C,GAAI,MAAO,GAAK,EAAK,OAAS,IAAO,WAAY,EAAG,MAAM,KAAM,OAE9D,OAAO,IAAI,SAAQ,CAAC,EAAS,IAAW,CACtC,EAAG,KACD,KACA,GAAG,EACH,CAAC,EAAK,IAAS,GAAO,KAAQ,EAAO,GAAO,EAAQ,OAIzD,OAAQ,CAAE,MAAO,EAAG,QAGzB,GAAQ,YAAc,SAAU,EAAI,CAClC,MAAO,QAAO,eAAe,YAAa,EAAM,CAC9C,GAAM,GAAK,EAAK,EAAK,OAAS,GAC9B,GAAI,MAAO,IAAO,WAAY,MAAO,GAAG,MAAM,KAAM,GAC/C,EAAG,MAAM,KAAM,EAAK,MAAM,EAAG,KAAK,KAAK,GAAK,EAAG,KAAM,GAAI,IAC7D,OAAQ,CAAE,MAAO,EAAG,UCtBzB,sBAAI,IAAY,QAAQ,aAEpB,GAAU,QAAQ,IAClB,GAAM,KAEN,GAAW,QAAQ,IAAI,sBAAwB,QAAQ,SAE3D,QAAQ,IAAM,UAAW,CACvB,MAAK,KACH,IAAM,GAAQ,KAAK,UACd,IAET,GAAI,CACF,QAAQ,YACD,EAAP,EAGF,AAAI,MAAO,SAAQ,OAAU,YACvB,IAAQ,QAAQ,MACpB,QAAQ,MAAQ,SAAU,EAAG,CAC3B,GAAM,KACN,GAAM,KAAK,QAAS,IAElB,OAAO,gBAAgB,OAAO,eAAe,QAAQ,MAAO,KAL5D,OAQN,GAAO,QAAU,GAEjB,YAAgB,EAAI,CAKlB,AAAI,GAAU,eAAe,cACzB,QAAQ,QAAQ,MAAM,2BACxB,EAAY,GAIT,EAAG,SACN,EAAa,GAQf,EAAG,MAAQ,EAAS,EAAG,OACvB,EAAG,OAAS,EAAS,EAAG,QACxB,EAAG,OAAS,EAAS,EAAG,QAExB,EAAG,MAAQ,EAAS,EAAG,OACvB,EAAG,OAAS,EAAS,EAAG,QACxB,EAAG,OAAS,EAAS,EAAG,QAExB,EAAG,UAAY,EAAa,EAAG,WAC/B,EAAG,WAAa,EAAa,EAAG,YAChC,EAAG,WAAa,EAAa,EAAG,YAEhC,EAAG,UAAY,EAAa,EAAG,WAC/B,EAAG,WAAa,EAAa,EAAG,YAChC,EAAG,WAAa,EAAa,EAAG,YAEhC,EAAG,KAAO,EAAQ,EAAG,MACrB,EAAG,MAAQ,EAAQ,EAAG,OACtB,EAAG,MAAQ,EAAQ,EAAG,OAEtB,EAAG,SAAW,EAAY,EAAG,UAC7B,EAAG,UAAY,EAAY,EAAG,WAC9B,EAAG,UAAY,EAAY,EAAG,WAGzB,EAAG,QACN,GAAG,OAAS,SAAU,EAAM,EAAM,EAAI,CACpC,AAAI,GAAI,QAAQ,SAAS,IAE3B,EAAG,WAAa,UAAY,IAEzB,EAAG,QACN,GAAG,OAAS,SAAU,EAAM,EAAK,EAAK,EAAI,CACxC,AAAI,GAAI,QAAQ,SAAS,IAE3B,EAAG,WAAa,UAAY,IAY1B,KAAa,SACf,GAAG,OAAU,SAAU,EAAW,CAAE,MAAO,UAAU,EAAM,EAAI,EAAI,CACjE,GAAI,GAAQ,KAAK,MACb,EAAU,EACd,EAAU,EAAM,EAAI,WAAa,EAAI,CACnC,GAAI,GACI,GAAG,OAAS,UAAY,EAAG,OAAS,UACrC,KAAK,MAAQ,EAAQ,IAAO,CACjC,WAAW,UAAW,CACpB,EAAG,KAAK,EAAI,SAAU,EAAQ,EAAI,CAChC,AAAI,GAAU,EAAO,OAAS,SAC5B,EAAU,EAAM,EAAI,GAEpB,EAAG,MAEN,GACC,EAAU,KACZ,IAAW,IACb,OAEF,AAAI,GAAI,EAAG,OAEX,EAAG,SAIT,EAAG,KAAQ,SAAU,EAAS,CAC5B,WAAe,EAAI,EAAQ,EAAQ,EAAQ,EAAU,EAAW,CAC9D,GAAI,GACJ,GAAI,GAAa,MAAO,IAAc,WAAY,CAChD,GAAI,GAAa,EACjB,EAAW,SAAU,EAAI,EAAG,EAAI,CAC9B,GAAI,GAAM,EAAG,OAAS,UAAY,EAAa,GAC7C,WACO,EAAQ,KAAK,EAAI,EAAI,EAAQ,EAAQ,EAAQ,EAAU,GAEhE,EAAU,MAAM,KAAM,YAG1B,MAAO,GAAQ,KAAK,EAAI,EAAI,EAAQ,EAAQ,EAAQ,EAAU,GAIhE,MAAI,QAAO,gBAAgB,OAAO,eAAe,EAAM,GAChD,GACN,EAAG,MAEN,EAAG,SAAY,SAAU,EAAa,CAAE,MAAO,UAAU,EAAI,EAAQ,EAAQ,EAAQ,EAAU,CAE7F,OADI,GAAa,IAEf,GAAI,CACF,MAAO,GAAY,KAAK,EAAI,EAAI,EAAQ,EAAQ,EAAQ,SACjD,EAAP,CACA,GAAI,EAAG,OAAS,UAAY,EAAa,GAAI,CAC3C,IACA,SAEF,KAAM,MAGR,EAAG,UAEP,WAAsB,EAAI,CACxB,EAAG,OAAS,SAAU,EAAM,EAAM,EAAU,CAC1C,EAAG,KAAM,EACA,GAAU,SAAW,GAAU,UAC/B,EACA,SAAU,EAAK,EAAI,CAC1B,GAAI,EAAK,CACP,AAAI,GAAU,EAAS,GACvB,OAIF,EAAG,OAAO,EAAI,EAAM,SAAU,EAAK,CACjC,EAAG,MAAM,EAAI,SAAS,EAAM,CAC1B,AAAI,GAAU,EAAS,GAAO,UAMtC,EAAG,WAAa,SAAU,EAAM,EAAM,CACpC,GAAI,GAAK,EAAG,SAAS,EAAM,GAAU,SAAW,GAAU,UAAW,GAIjE,EAAQ,GACR,EACJ,GAAI,CACF,EAAM,EAAG,WAAW,EAAI,GACxB,EAAQ,UACR,CACA,GAAI,EACF,GAAI,CACF,EAAG,UAAU,SACN,EAAP,MAEF,GAAG,UAAU,GAGjB,MAAO,IAIX,WAAuB,EAAI,CACzB,AAAI,GAAU,eAAe,aAC3B,GAAG,QAAU,SAAU,EAAM,EAAI,EAAI,EAAI,CACvC,EAAG,KAAK,EAAM,GAAU,UAAW,SAAU,EAAI,EAAI,CACnD,GAAI,EAAI,CACN,AAAI,GAAI,EAAG,GACX,OAEF,EAAG,QAAQ,EAAI,EAAI,EAAI,SAAU,EAAI,CACnC,EAAG,MAAM,EAAI,SAAU,EAAK,CAC1B,AAAI,GAAI,EAAG,GAAM,UAMzB,EAAG,YAAc,SAAU,EAAM,EAAI,EAAI,CACvC,GAAI,GAAK,EAAG,SAAS,EAAM,GAAU,WACjC,EACA,EAAQ,GACZ,GAAI,CACF,EAAM,EAAG,YAAY,EAAI,EAAI,GAC7B,EAAQ,UACR,CACA,GAAI,EACF,GAAI,CACF,EAAG,UAAU,SACN,EAAP,MAEF,GAAG,UAAU,GAGjB,MAAO,KAIT,GAAG,QAAU,SAAU,EAAI,EAAI,EAAI,EAAI,CAAE,AAAI,GAAI,QAAQ,SAAS,IAClE,EAAG,YAAc,UAAY,IAIjC,WAAmB,EAAM,CACvB,MAAK,IACE,SAAU,EAAQ,EAAM,EAAI,CACjC,MAAO,GAAK,KAAK,EAAI,EAAQ,EAAM,SAAU,EAAI,CAC/C,AAAI,EAAU,IAAK,GAAK,MACpB,GAAI,EAAG,MAAM,KAAM,cAK7B,WAAuB,EAAM,CAC3B,MAAK,IACE,SAAU,EAAQ,EAAM,CAC7B,GAAI,CACF,MAAO,GAAK,KAAK,EAAI,EAAQ,SACtB,EAAP,CACA,GAAI,CAAC,EAAU,GAAK,KAAM,KAMhC,WAAmB,EAAM,CACvB,MAAK,IACE,SAAU,EAAQ,EAAK,EAAK,EAAI,CACrC,MAAO,GAAK,KAAK,EAAI,EAAQ,EAAK,EAAK,SAAU,EAAI,CACnD,AAAI,EAAU,IAAK,GAAK,MACpB,GAAI,EAAG,MAAM,KAAM,cAK7B,WAAuB,EAAM,CAC3B,MAAK,IACE,SAAU,EAAQ,EAAK,EAAK,CACjC,GAAI,CACF,MAAO,GAAK,KAAK,EAAI,EAAQ,EAAK,SAC3B,EAAP,CACA,GAAI,CAAC,EAAU,GAAK,KAAM,KAKhC,WAAkB,EAAM,CACtB,MAAK,IAGE,SAAU,EAAQ,EAAS,EAAI,CACpC,AAAI,MAAO,IAAY,YACrB,GAAK,EACL,EAAU,MAEZ,WAAmB,EAAI,EAAO,CAC5B,AAAI,GACE,GAAM,IAAM,GAAG,GAAM,KAAO,YAC5B,EAAM,IAAM,GAAG,GAAM,KAAO,aAE9B,GAAI,EAAG,MAAM,KAAM,WAEzB,MAAO,GAAU,EAAK,KAAK,EAAI,EAAQ,EAAS,GAC5C,EAAK,KAAK,EAAI,EAAQ,IAI9B,WAAsB,EAAM,CAC1B,MAAK,IAGE,SAAU,EAAQ,EAAS,CAChC,GAAI,GAAQ,EAAU,EAAK,KAAK,EAAI,EAAQ,GACxC,EAAK,KAAK,EAAI,GAClB,MAAI,GAAM,IAAM,GAAG,GAAM,KAAO,YAC5B,EAAM,IAAM,GAAG,GAAM,KAAO,YACzB,GAgBX,WAAoB,EAAI,CAItB,GAHI,CAAC,GAGD,EAAG,OAAS,SACd,MAAO,GAET,GAAI,GAAU,CAAC,QAAQ,QAAU,QAAQ,WAAa,EACtD,MAAI,MACE,GAAG,OAAS,UAAY,EAAG,OAAS,cCnV9C,sBAAI,IAAS,QAAQ,UAAU,OAE/B,GAAO,QAAU,GAEjB,YAAiB,EAAI,CACnB,MAAO,CACL,WAAY,EACZ,YAAa,GAGf,WAAqB,EAAM,EAAS,CAClC,GAAI,CAAE,gBAAgB,IAAa,MAAO,IAAI,GAAW,EAAM,GAE/D,GAAO,KAAK,MAEZ,GAAI,GAAO,KAEX,KAAK,KAAO,EACZ,KAAK,GAAK,KACV,KAAK,SAAW,GAChB,KAAK,OAAS,GAEd,KAAK,MAAQ,IACb,KAAK,KAAO,IACZ,KAAK,WAAa,GAAK,KAEvB,EAAU,GAAW,GAIrB,OADI,GAAO,OAAO,KAAK,GACd,EAAQ,EAAG,EAAS,EAAK,OAAQ,EAAQ,EAAQ,IAAS,CACjE,GAAI,GAAM,EAAK,GACf,KAAK,GAAO,EAAQ,GAKtB,GAFI,KAAK,UAAU,KAAK,YAAY,KAAK,UAErC,KAAK,QAAU,OAAW,CAC5B,GAAI,AAAa,MAAO,MAAK,OAAzB,SACF,KAAM,WAAU,0BAElB,GAAI,KAAK,MAAQ,OACf,KAAK,IAAM,YACF,AAAa,MAAO,MAAK,KAAzB,SACT,KAAM,WAAU,wBAGlB,GAAI,KAAK,MAAQ,KAAK,IACpB,KAAM,IAAI,OAAM,wBAGlB,KAAK,IAAM,KAAK,MAGlB,GAAI,KAAK,KAAO,KAAM,CACpB,QAAQ,SAAS,UAAW,CAC1B,EAAK,UAEP,OAGF,EAAG,KAAK,KAAK,KAAM,KAAK,MAAO,KAAK,KAAM,SAAU,EAAK,EAAI,CAC3D,GAAI,EAAK,CACP,EAAK,KAAK,QAAS,GACnB,EAAK,SAAW,GAChB,OAGF,EAAK,GAAK,EACV,EAAK,KAAK,OAAQ,GAClB,EAAK,UAIT,WAAsB,EAAM,EAAS,CACnC,GAAI,CAAE,gBAAgB,IAAc,MAAO,IAAI,GAAY,EAAM,GAEjE,GAAO,KAAK,MAEZ,KAAK,KAAO,EACZ,KAAK,GAAK,KACV,KAAK,SAAW,GAEhB,KAAK,MAAQ,IACb,KAAK,SAAW,SAChB,KAAK,KAAO,IACZ,KAAK,aAAe,EAEpB,EAAU,GAAW,GAIrB,OADI,GAAO,OAAO,KAAK,GACd,EAAQ,EAAG,EAAS,EAAK,OAAQ,EAAQ,EAAQ,IAAS,CACjE,GAAI,GAAM,EAAK,GACf,KAAK,GAAO,EAAQ,GAGtB,GAAI,KAAK,QAAU,OAAW,CAC5B,GAAI,AAAa,MAAO,MAAK,OAAzB,SACF,KAAM,WAAU,0BAElB,GAAI,KAAK,MAAQ,EACf,KAAM,IAAI,OAAM,yBAGlB,KAAK,IAAM,KAAK,MAGlB,KAAK,KAAO,GACZ,KAAK,OAAS,GAEV,KAAK,KAAO,MACd,MAAK,MAAQ,EAAG,KAChB,KAAK,OAAO,KAAK,CAAC,KAAK,MAAO,KAAK,KAAM,KAAK,MAAO,KAAK,KAAM,SAChE,KAAK,aClHX,gCAEA,GAAO,QAAU,GAEjB,GAAI,IAAiB,OAAO,gBAAkB,SAAU,EAAK,CAC3D,MAAO,GAAI,WAGb,YAAgB,EAAK,CACnB,GAAI,IAAQ,MAAQ,MAAO,IAAQ,SACjC,MAAO,GAET,GAAI,YAAe,QACjB,GAAI,GAAO,CAAE,UAAW,GAAe,QAEvC,IAAI,GAAO,OAAO,OAAO,MAE3B,cAAO,oBAAoB,GAAK,QAAQ,SAAU,EAAK,CACrD,OAAO,eAAe,EAAM,EAAK,OAAO,yBAAyB,EAAK,MAGjE,KCrBT,sBAAI,GAAK,QAAQ,MACb,GAAY,KACZ,GAAS,KACT,GAAQ,KAER,GAAO,QAAQ,QAGf,GACA,GAGJ,AAAI,MAAO,SAAW,YAAc,MAAO,QAAO,KAAQ,WACxD,IAAgB,OAAO,IAAI,qBAE3B,GAAiB,OAAO,IAAI,yBAE5B,IAAgB,uBAChB,GAAiB,2BAGnB,aAAiB,EAEjB,YAAsB,EAAS,EAAO,CACpC,OAAO,eAAe,EAAS,GAAe,CAC5C,IAAK,UAAW,CACd,MAAO,MAKb,GAAI,IAAQ,GACZ,AAAI,GAAK,SACP,GAAQ,GAAK,SAAS,QACf,YAAY,KAAK,QAAQ,IAAI,YAAc,KAClD,IAAQ,UAAW,CACjB,GAAI,GAAI,GAAK,OAAO,MAAM,GAAM,WAChC,EAAI,SAAW,EAAE,MAAM,MAAM,KAAK;AAAA,SAClC,QAAQ,MAAM,KAIlB,AAAK,EAAG,KAEF,IAAQ,OAAO,KAAkB,GACrC,GAAa,EAAI,IAMjB,EAAG,MAAS,SAAU,EAAU,CAC9B,WAAgB,EAAI,EAAI,CACtB,MAAO,GAAS,KAAK,EAAI,EAAI,SAAU,EAAK,CAE1C,AAAK,GACH,KAGE,MAAO,IAAO,YAChB,EAAG,MAAM,KAAM,aAIrB,cAAO,eAAe,EAAO,GAAgB,CAC3C,MAAO,IAEF,GACN,EAAG,OAEN,EAAG,UAAa,SAAU,EAAc,CACtC,WAAoB,EAAI,CAEtB,EAAa,MAAM,EAAI,WACvB,KAGF,cAAO,eAAe,EAAW,GAAgB,CAC/C,MAAO,IAEF,GACN,EAAG,WAEF,YAAY,KAAK,QAAQ,IAAI,YAAc,KAC7C,QAAQ,GAAG,OAAQ,UAAW,CAC5B,GAAM,EAAG,KACT,QAAQ,UAAU,MAAM,EAAG,IAAe,OAAQ,MA1ClD,OA+CN,AAAK,OAAO,KACV,GAAa,OAAQ,EAAG,KAG1B,GAAO,QAAU,GAAM,GAAM,IAC7B,AAAI,QAAQ,IAAI,+BAAiC,CAAC,EAAG,WACjD,IAAO,QAAU,GAAM,GACvB,EAAG,UAAY,IAGnB,YAAgB,EAAI,CAElB,GAAU,GACV,EAAG,YAAc,GAEjB,EAAG,iBAAmB,EACtB,EAAG,kBAAoB,EACvB,GAAI,GAAc,EAAG,SACrB,EAAG,SAAW,EACd,WAAmB,EAAM,EAAS,EAAI,CACpC,MAAI,OAAO,IAAY,YACrB,GAAK,EAAS,EAAU,MAEnB,EAAY,EAAM,EAAS,GAElC,WAAsB,EAAM,EAAS,EAAI,EAAW,CAClD,MAAO,GAAY,EAAM,EAAS,SAAU,EAAK,CAC/C,AAAI,GAAQ,GAAI,OAAS,UAAY,EAAI,OAAS,UAChD,GAAQ,CAAC,EAAa,CAAC,EAAM,EAAS,GAAK,EAAK,GAAa,KAAK,MAAO,KAAK,QAE1E,MAAO,IAAO,YAChB,EAAG,MAAM,KAAM,cAMzB,GAAI,GAAe,EAAG,UACtB,EAAG,UAAY,EACf,WAAoB,EAAM,EAAM,EAAS,EAAI,CAC3C,MAAI,OAAO,IAAY,YACrB,GAAK,EAAS,EAAU,MAEnB,EAAa,EAAM,EAAM,EAAS,GAEzC,WAAuB,EAAM,EAAM,EAAS,EAAI,EAAW,CACzD,MAAO,GAAa,EAAM,EAAM,EAAS,SAAU,EAAK,CACtD,AAAI,GAAQ,GAAI,OAAS,UAAY,EAAI,OAAS,UAChD,GAAQ,CAAC,EAAc,CAAC,EAAM,EAAM,EAAS,GAAK,EAAK,GAAa,KAAK,MAAO,KAAK,QAEjF,MAAO,IAAO,YAChB,EAAG,MAAM,KAAM,cAMzB,GAAI,GAAgB,EAAG,WACvB,AAAI,GACF,GAAG,WAAa,GAClB,WAAqB,EAAM,EAAM,EAAS,EAAI,CAC5C,MAAI,OAAO,IAAY,YACrB,GAAK,EAAS,EAAU,MAEnB,EAAc,EAAM,EAAM,EAAS,GAE1C,WAAwB,EAAM,EAAM,EAAS,EAAI,EAAW,CAC1D,MAAO,GAAc,EAAM,EAAM,EAAS,SAAU,EAAK,CACvD,AAAI,GAAQ,GAAI,OAAS,UAAY,EAAI,OAAS,UAChD,GAAQ,CAAC,EAAe,CAAC,EAAM,EAAM,EAAS,GAAK,EAAK,GAAa,KAAK,MAAO,KAAK,QAElF,MAAO,IAAO,YAChB,EAAG,MAAM,KAAM,cAMzB,GAAI,GAAc,EAAG,SACrB,AAAI,GACF,GAAG,SAAW,GAChB,WAAmB,EAAK,EAAM,EAAO,EAAI,CACvC,MAAI,OAAO,IAAU,YACnB,GAAK,EACL,EAAQ,GAEH,EAAY,EAAK,EAAM,EAAO,GAErC,WAAsB,EAAK,EAAM,EAAO,EAAI,EAAW,CACrD,MAAO,GAAY,EAAK,EAAM,EAAO,SAAU,EAAK,CAClD,AAAI,GAAQ,GAAI,OAAS,UAAY,EAAI,OAAS,UAChD,GAAQ,CAAC,EAAa,CAAC,EAAK,EAAM,EAAO,GAAK,EAAK,GAAa,KAAK,MAAO,KAAK,QAE7E,MAAO,IAAO,YAChB,EAAG,MAAM,KAAM,cAMzB,GAAI,GAAa,EAAG,QACpB,EAAG,QAAU,EACb,WAAkB,EAAM,EAAS,EAAI,CACnC,MAAI,OAAO,IAAY,YACrB,GAAK,EAAS,EAAU,MAEnB,EAAW,EAAM,EAAS,GAEjC,WAAqB,EAAM,EAAS,EAAI,EAAW,CACjD,MAAO,GAAW,EAAM,EAAS,SAAU,EAAK,EAAO,CACrD,AAAI,GAAQ,GAAI,OAAS,UAAY,EAAI,OAAS,UAChD,GAAQ,CAAC,EAAY,CAAC,EAAM,EAAS,GAAK,EAAK,GAAa,KAAK,MAAO,KAAK,QAEzE,IAAS,EAAM,MACjB,EAAM,OAEJ,MAAO,IAAO,YAChB,EAAG,KAAK,KAAM,EAAK,OAM7B,GAAI,QAAQ,QAAQ,OAAO,EAAG,KAAO,OAAQ,CAC3C,GAAI,GAAa,GAAO,GACxB,EAAa,EAAW,WACxB,EAAc,EAAW,YAG3B,GAAI,GAAgB,EAAG,WACvB,AAAI,GACF,GAAW,UAAY,OAAO,OAAO,EAAc,WACnD,EAAW,UAAU,KAAO,GAG9B,GAAI,GAAiB,EAAG,YACxB,AAAI,GACF,GAAY,UAAY,OAAO,OAAO,EAAe,WACrD,EAAY,UAAU,KAAO,GAG/B,OAAO,eAAe,EAAI,aAAc,CACtC,IAAK,UAAY,CACf,MAAO,IAET,IAAK,SAAU,EAAK,CAClB,EAAa,GAEf,WAAY,GACZ,aAAc,KAEhB,OAAO,eAAe,EAAI,cAAe,CACvC,IAAK,UAAY,CACf,MAAO,IAET,IAAK,SAAU,EAAK,CAClB,EAAc,GAEhB,WAAY,GACZ,aAAc,KAIhB,GAAI,GAAiB,EACrB,OAAO,eAAe,EAAI,iBAAkB,CAC1C,IAAK,UAAY,CACf,MAAO,IAET,IAAK,SAAU,EAAK,CAClB,EAAiB,GAEnB,WAAY,GACZ,aAAc,KAEhB,GAAI,GAAkB,EACtB,OAAO,eAAe,EAAI,kBAAmB,CAC3C,IAAK,UAAY,CACf,MAAO,IAET,IAAK,SAAU,EAAK,CAClB,EAAkB,GAEpB,WAAY,GACZ,aAAc,KAGhB,WAAqB,EAAM,EAAS,CAClC,MAAI,gBAAgB,GACX,GAAc,MAAM,KAAM,WAAY,MAEtC,EAAW,MAAM,OAAO,OAAO,EAAW,WAAY,WAGjE,YAA4B,CAC1B,GAAI,GAAO,KACX,EAAK,EAAK,KAAM,EAAK,MAAO,EAAK,KAAM,SAAU,EAAK,EAAI,CACxD,AAAI,EACE,GAAK,WACP,EAAK,UAEP,EAAK,KAAK,QAAS,IAEnB,GAAK,GAAK,EACV,EAAK,KAAK,OAAQ,GAClB,EAAK,UAKX,WAAsB,EAAM,EAAS,CACnC,MAAI,gBAAgB,GACX,GAAe,MAAM,KAAM,WAAY,MAEvC,EAAY,MAAM,OAAO,OAAO,EAAY,WAAY,WAGnE,YAA6B,CAC3B,GAAI,GAAO,KACX,EAAK,EAAK,KAAM,EAAK,MAAO,EAAK,KAAM,SAAU,EAAK,EAAI,CACxD,AAAI,EACF,GAAK,UACL,EAAK,KAAK,QAAS,IAEnB,GAAK,GAAK,EACV,EAAK,KAAK,OAAQ,MAKxB,WAA2B,EAAM,EAAS,CACxC,MAAO,IAAI,GAAG,WAAW,EAAM,GAGjC,WAA4B,EAAM,EAAS,CACzC,MAAO,IAAI,GAAG,YAAY,EAAM,GAGlC,GAAI,GAAU,EAAG,KACjB,EAAG,KAAO,EACV,WAAe,EAAM,EAAO,EAAM,EAAI,CACpC,MAAI,OAAO,IAAS,YAClB,GAAK,EAAM,EAAO,MAEb,EAAQ,EAAM,EAAO,EAAM,GAElC,WAAkB,EAAM,EAAO,EAAM,EAAI,EAAW,CAClD,MAAO,GAAQ,EAAM,EAAO,EAAM,SAAU,EAAK,GAAI,CACnD,AAAI,GAAQ,GAAI,OAAS,UAAY,EAAI,OAAS,UAChD,GAAQ,CAAC,EAAS,CAAC,EAAM,EAAO,EAAM,GAAK,EAAK,GAAa,KAAK,MAAO,KAAK,QAE1E,MAAO,IAAO,YAChB,EAAG,MAAM,KAAM,cAMzB,MAAO,GAGT,YAAkB,EAAM,CACtB,GAAM,UAAW,EAAK,GAAG,KAAM,EAAK,IACpC,EAAG,IAAe,KAAK,GACvB,KAIF,GAAI,IAKJ,aAAuB,CAErB,OADI,GAAM,KAAK,MACN,EAAI,EAAG,EAAI,EAAG,IAAe,OAAQ,EAAE,EAG9C,AAAI,EAAG,IAAe,GAAG,OAAS,GAChC,GAAG,IAAe,GAAG,GAAK,EAC1B,EAAG,IAAe,GAAG,GAAK,GAI9B,KAGF,aAAkB,CAKhB,GAHA,aAAa,IACb,GAAa,OAET,EAAG,IAAe,SAAW,EAGjC,IAAI,GAAO,EAAG,IAAe,QACzB,EAAK,EAAK,GACV,EAAO,EAAK,GAEZ,EAAM,EAAK,GACX,EAAY,EAAK,GACjB,EAAW,EAAK,GAIpB,GAAI,IAAc,OAChB,GAAM,QAAS,EAAG,KAAM,GACxB,EAAG,MAAM,KAAM,WACN,KAAK,MAAQ,GAAa,IAAO,CAE1C,GAAM,UAAW,EAAG,KAAM,GAC1B,GAAI,GAAK,EAAK,MACd,AAAI,MAAO,IAAO,YAChB,EAAG,KAAK,KAAM,OACX,CAEL,GAAI,GAAe,KAAK,MAAQ,EAG5B,EAAa,KAAK,IAAI,EAAW,EAAW,GAG5C,EAAe,KAAK,IAAI,EAAa,IAAK,KAE9C,AAAI,GAAgB,EAClB,IAAM,QAAS,EAAG,KAAM,GACxB,EAAG,MAAM,KAAM,EAAK,OAAO,CAAC,MAI5B,EAAG,IAAe,KAAK,GAK3B,AAAI,KAAe,QACjB,IAAa,WAAW,GAAO,QC1anC,2BAGA,GAAM,IAAI,KAAwB,aAC5B,GAAK,KAEL,GAAM,CACV,SACA,aACA,QACA,QACA,QACA,WACA,SACA,SACA,YACA,QACA,QACA,YACA,UACA,SACA,SACA,OACA,QACA,QACA,UACA,OACA,UACA,UACA,WACA,WACA,WACA,SACA,KACA,QACA,OACA,UACA,WACA,SACA,SACA,aACA,OAAO,GAKA,MAAO,IAAG,IAAS,YAI5B,OAAO,OAAO,GAAS,IAGvB,GAAI,QAAQ,GAAU,CACpB,GAAQ,GAAU,GAAE,GAAG,MAEzB,GAAQ,SAAS,OAAS,GAAE,GAAG,SAAS,QAIxC,GAAQ,OAAS,SAAU,EAAU,EAAU,CAC7C,MAAI,OAAO,IAAa,WACf,GAAG,OAAO,EAAU,GAEtB,GAAI,SAAQ,GACV,GAAG,OAAO,EAAU,KAM/B,GAAQ,KAAO,SAAU,EAAI,EAAQ,EAAQ,EAAQ,EAAU,EAAU,CACvE,MAAI,OAAO,IAAa,WACf,GAAG,KAAK,EAAI,EAAQ,EAAQ,EAAQ,EAAU,GAEhD,GAAI,SAAQ,CAAC,EAAS,IAAW,CACtC,GAAG,KAAK,EAAI,EAAQ,EAAQ,EAAQ,EAAU,CAAC,EAAK,EAAW,IAAW,CACxE,GAAI,EAAK,MAAO,GAAO,GACvB,EAAQ,CAAE,YAAW,gBAU3B,GAAQ,MAAQ,SAAU,EAAI,KAAW,EAAM,CAC7C,MAAI,OAAO,GAAK,EAAK,OAAS,IAAO,WAC5B,GAAG,MAAM,EAAI,EAAQ,GAAG,GAG1B,GAAI,SAAQ,CAAC,EAAS,IAAW,CACtC,GAAG,MAAM,EAAI,EAAQ,GAAG,EAAM,CAAC,EAAK,EAAc,IAAW,CAC3D,GAAI,EAAK,MAAO,GAAO,GACvB,EAAQ,CAAE,eAAc,gBAM9B,AAAI,MAAO,IAAG,QAAW,YAIvB,IAAQ,OAAS,SAAU,EAAI,KAAY,EAAM,CAC/C,MAAI,OAAO,GAAK,EAAK,OAAS,IAAO,WAC5B,GAAG,OAAO,EAAI,EAAS,GAAG,GAG5B,GAAI,SAAQ,CAAC,EAAS,IAAW,CACtC,GAAG,OAAO,EAAI,EAAS,GAAG,EAAM,CAAC,EAAK,EAAc,IAAY,CAC9D,GAAI,EAAK,MAAO,GAAO,GACvB,EAAQ,CAAE,eAAc,oBClHhC,mBAKA,aACA,GAAM,IAAO,QAAQ,QAIrB,GAAO,QAAQ,UAAY,SAAoB,EAAK,CAClD,GAAI,QAAQ,WAAa,SACa,YAAY,KAAK,EAAI,QAAQ,GAAK,MAAM,GAAK,KAAM,KAEtD,CAC/B,GAAM,GAAQ,GAAI,OAAM,qCAAqC,KAC7D,QAAM,KAAO,SACP,MCjBZ,gCACA,GAAM,IAAK,KACL,CAAE,cAAc,KAEhB,GAAU,GAAW,CACzB,GAAM,GAAW,CAAE,KAAM,KACzB,MAAI,OAAO,IAAY,SAAiB,EAChC,IAAK,KAAa,GAAW,MAGvC,GAAO,QAAQ,QAAU,MAAO,EAAK,IACnC,IAAU,GAEH,GAAG,MAAM,EAAK,CACnB,KAAM,GAAQ,GACd,UAAW,MAIf,GAAO,QAAQ,YAAc,CAAC,EAAK,IACjC,IAAU,GAEH,GAAG,UAAU,EAAK,CACvB,KAAM,GAAQ,GACd,UAAW,QCxBf,gCACA,GAAM,IAAI,KAAwB,YAC5B,CAAE,QAAS,GAAU,gBAAgB,KACrC,GAAU,GAAE,IAElB,GAAO,QAAU,CACf,OAAQ,GACR,WAAY,GAEZ,OAAQ,GACR,WAAY,GACZ,UAAW,GACX,cAAe,MCZjB,gCAEA,GAAM,IAAK,KAEX,YAAuB,EAAM,EAAO,EAAO,EAAU,CAEnD,GAAG,KAAK,EAAM,KAAM,CAAC,EAAK,IAAO,CAC/B,GAAI,EAAK,MAAO,GAAS,GACzB,GAAG,QAAQ,EAAI,EAAO,EAAO,GAAc,CACzC,GAAG,MAAM,EAAI,GAAY,CACvB,AAAI,GAAU,EAAS,GAAc,SAM7C,YAA2B,EAAM,EAAO,EAAO,CAC7C,GAAM,GAAK,GAAG,SAAS,EAAM,MAC7B,UAAG,YAAY,EAAI,EAAO,GACnB,GAAG,UAAU,GAGtB,GAAO,QAAU,CACf,gBACA,uBCxBF,gCAEA,GAAM,IAAK,KACL,GAAO,QAAQ,QACf,GAAO,QAAQ,QAErB,YAAmB,EAAK,EAAM,EAAM,CAClC,GAAM,GAAW,EAAK,YAClB,AAAC,GAAS,GAAG,KAAK,EAAM,CAAE,OAAQ,KAClC,AAAC,GAAS,GAAG,MAAM,EAAM,CAAE,OAAQ,KACvC,MAAO,SAAQ,IAAI,CACjB,EAAS,GACT,EAAS,GAAM,MAAM,GAAO,CAC1B,GAAI,EAAI,OAAS,SAAU,MAAO,MAClC,KAAM,OAEP,KAAK,CAAC,CAAC,EAAS,KAAe,EAAE,UAAS,cAG/C,YAAuB,EAAK,EAAM,EAAM,CACtC,GAAI,GACE,EAAW,EAAK,YAClB,AAAC,GAAS,GAAG,SAAS,EAAM,CAAE,OAAQ,KACtC,AAAC,GAAS,GAAG,UAAU,EAAM,CAAE,OAAQ,KACrC,EAAU,EAAS,GACzB,GAAI,CACF,EAAW,EAAS,SACb,EAAP,CACA,GAAI,EAAI,OAAS,SAAU,MAAO,CAAE,UAAS,SAAU,MACvD,KAAM,GAER,MAAO,CAAE,UAAS,YAGpB,YAAqB,EAAK,EAAM,EAAU,EAAM,EAAI,CAClD,GAAK,YAAY,IAAU,EAAK,EAAM,EAAM,CAAC,EAAK,IAAU,CAC1D,GAAI,EAAK,MAAO,GAAG,GACnB,GAAM,CAAE,UAAS,YAAa,EAE9B,GAAI,EAAU,CACZ,GAAI,GAAa,EAAS,GAAW,CACnC,GAAM,GAAc,GAAK,SAAS,GAC5B,EAAe,GAAK,SAAS,GACnC,MAAI,KAAa,QACf,IAAgB,GAChB,EAAY,gBAAkB,EAAa,cACpC,EAAG,KAAM,CAAE,UAAS,WAAU,eAAgB,KAEhD,EAAG,GAAI,OAAM,iDAEtB,GAAI,EAAQ,eAAiB,CAAC,EAAS,cACrC,MAAO,GAAG,GAAI,OAAM,mCAAmC,sBAAyB,QAElF,GAAI,CAAC,EAAQ,eAAiB,EAAS,cACrC,MAAO,GAAG,GAAI,OAAM,+BAA+B,0BAA6B,QAIpF,MAAI,GAAQ,eAAiB,GAAY,EAAK,GACrC,EAAG,GAAI,OAAM,GAAO,EAAK,EAAM,KAEjC,EAAG,KAAM,CAAE,UAAS,eAI/B,YAAyB,EAAK,EAAM,EAAU,EAAM,CAClD,GAAM,CAAE,UAAS,YAAa,GAAa,EAAK,EAAM,GAEtD,GAAI,EAAU,CACZ,GAAI,GAAa,EAAS,GAAW,CACnC,GAAM,GAAc,GAAK,SAAS,GAC5B,EAAe,GAAK,SAAS,GACnC,GAAI,IAAa,QACf,IAAgB,GAChB,EAAY,gBAAkB,EAAa,cAC3C,MAAO,CAAE,UAAS,WAAU,eAAgB,IAE9C,KAAM,IAAI,OAAM,gDAElB,GAAI,EAAQ,eAAiB,CAAC,EAAS,cACrC,KAAM,IAAI,OAAM,mCAAmC,sBAAyB,OAE9E,GAAI,CAAC,EAAQ,eAAiB,EAAS,cACrC,KAAM,IAAI,OAAM,+BAA+B,0BAA6B,OAIhF,GAAI,EAAQ,eAAiB,GAAY,EAAK,GAC5C,KAAM,IAAI,OAAM,GAAO,EAAK,EAAM,IAEpC,MAAO,CAAE,UAAS,YAOpB,YAA2B,EAAK,EAAS,EAAM,EAAU,EAAI,CAC3D,GAAM,GAAY,GAAK,QAAQ,GAAK,QAAQ,IACtC,EAAa,GAAK,QAAQ,GAAK,QAAQ,IAC7C,GAAI,IAAe,GAAa,IAAe,GAAK,MAAM,GAAY,KAAM,MAAO,KACnF,GAAG,KAAK,EAAY,CAAE,OAAQ,IAAQ,CAAC,EAAK,IACtC,EACE,EAAI,OAAS,SAAiB,IAC3B,EAAG,GAER,GAAa,EAAS,GACjB,EAAG,GAAI,OAAM,GAAO,EAAK,EAAM,KAEjC,GAAiB,EAAK,EAAS,EAAY,EAAU,IAIhE,YAA+B,EAAK,EAAS,EAAM,EAAU,CAC3D,GAAM,GAAY,GAAK,QAAQ,GAAK,QAAQ,IACtC,EAAa,GAAK,QAAQ,GAAK,QAAQ,IAC7C,GAAI,IAAe,GAAa,IAAe,GAAK,MAAM,GAAY,KAAM,OAC5E,GAAI,GACJ,GAAI,CACF,EAAW,GAAG,SAAS,EAAY,CAAE,OAAQ,WACtC,EAAP,CACA,GAAI,EAAI,OAAS,SAAU,OAC3B,KAAM,GAER,GAAI,GAAa,EAAS,GACxB,KAAM,IAAI,OAAM,GAAO,EAAK,EAAM,IAEpC,MAAO,IAAqB,EAAK,EAAS,EAAY,GAGxD,YAAuB,EAAS,EAAU,CACxC,MAAO,GAAS,KAAO,EAAS,KAAO,EAAS,MAAQ,EAAQ,KAAO,EAAS,MAAQ,EAAQ,IAKlG,YAAsB,EAAK,EAAM,CAC/B,GAAM,GAAS,GAAK,QAAQ,GAAK,MAAM,GAAK,KAAK,OAAO,GAAK,GACvD,EAAU,GAAK,QAAQ,GAAM,MAAM,GAAK,KAAK,OAAO,GAAK,GAC/D,MAAO,GAAO,OAAO,CAAC,EAAK,EAAK,IAAM,GAAO,EAAQ,KAAO,EAAK,IAGnE,YAAiB,EAAK,EAAM,EAAU,CACpC,MAAO,UAAU,MAAa,oCAAsC,MAGtE,GAAO,QAAU,CACf,cACA,kBACA,oBACA,wBACA,eACA,mBCxJF,gCAEA,GAAM,IAAK,KACL,GAAO,QAAQ,QACf,GAAa,KAAqB,WAClC,GAAmB,KAA0B,iBAC7C,GAAO,KAEb,YAAmB,EAAK,EAAM,EAAM,CAClC,AAAI,MAAO,IAAS,YAClB,GAAO,CAAE,OAAQ,IAGnB,EAAO,GAAQ,GACf,EAAK,QAAU,WAAa,GAAO,CAAC,CAAC,EAAK,QAAU,GACpD,EAAK,UAAY,aAAe,GAAO,CAAC,CAAC,EAAK,UAAY,EAAK,QAG3D,EAAK,oBAAsB,QAAQ,OAAS,QAC9C,QAAQ,KAAK;AAAA;AAAA,mEAIf,GAAM,CAAE,UAAS,YAAa,GAAK,eAAe,EAAK,EAAM,OAAQ,GACrE,UAAK,qBAAqB,EAAK,EAAS,EAAM,QACvC,GAAoB,EAAU,EAAK,EAAM,GAGlD,YAA8B,EAAU,EAAK,EAAM,EAAM,CACvD,GAAI,EAAK,QAAU,CAAC,EAAK,OAAO,EAAK,GAAO,OAC5C,GAAM,GAAa,GAAK,QAAQ,GAChC,MAAK,IAAG,WAAW,IAAa,GAAW,GACpC,GAAS,EAAU,EAAK,EAAM,GAGvC,YAAoB,EAAU,EAAK,EAAM,EAAM,CAC7C,GAAI,IAAK,QAAU,CAAC,EAAK,OAAO,EAAK,IACrC,MAAO,IAAS,EAAU,EAAK,EAAM,GAGvC,YAAmB,EAAU,EAAK,EAAM,EAAM,CAE5C,GAAM,GAAU,AADC,GAAK,YAAc,GAAG,SAAW,GAAG,WAC5B,GAEzB,GAAI,EAAQ,cAAe,MAAO,IAAM,EAAS,EAAU,EAAK,EAAM,GACjE,GAAI,EAAQ,UACR,EAAQ,qBACR,EAAQ,gBAAiB,MAAO,IAAO,EAAS,EAAU,EAAK,EAAM,GACzE,GAAI,EAAQ,iBAAkB,MAAO,IAAO,EAAU,EAAK,EAAM,GACjE,KAAI,GAAQ,WAAkB,GAAI,OAAM,8BAA8B,KAClE,EAAQ,SAAgB,GAAI,OAAM,4BAA4B,KACjE,GAAI,OAAM,iBAAiB,KAGnC,YAAiB,EAAS,EAAU,EAAK,EAAM,EAAM,CACnD,MAAK,GACE,GAAY,EAAS,EAAK,EAAM,GADjB,GAAS,EAAS,EAAK,EAAM,GAIrD,YAAsB,EAAS,EAAK,EAAM,EAAM,CAC9C,GAAI,EAAK,UACP,UAAG,WAAW,GACP,GAAS,EAAS,EAAK,EAAM,GAC/B,GAAI,EAAK,aACd,KAAM,IAAI,OAAM,IAAI,qBAIxB,YAAmB,EAAS,EAAK,EAAM,EAAM,CAC3C,UAAG,aAAa,EAAK,GACjB,EAAK,oBAAoB,GAAiB,EAAQ,KAAM,EAAK,GAC1D,GAAY,EAAM,EAAQ,MAGnC,YAA2B,EAAS,EAAK,EAAM,CAI7C,MAAI,IAAkB,IAAU,GAAiB,EAAM,GAChD,GAAkB,EAAK,GAGhC,YAA4B,EAAS,CACnC,MAAQ,GAAU,MAAW,EAG/B,YAA2B,EAAM,EAAS,CACxC,MAAO,IAAY,EAAM,EAAU,KAGrC,YAAsB,EAAM,EAAS,CACnC,MAAO,IAAG,UAAU,EAAM,GAG5B,YAA4B,EAAK,EAAM,CAIrC,GAAM,GAAiB,GAAG,SAAS,GACnC,MAAO,IAAiB,EAAM,EAAe,MAAO,EAAe,OAGrE,YAAgB,EAAS,EAAU,EAAK,EAAM,EAAM,CAClD,MAAK,GACE,GAAQ,EAAK,EAAM,GADJ,GAAa,EAAQ,KAAM,EAAK,EAAM,GAI9D,YAAuB,EAAS,EAAK,EAAM,EAAM,CAC/C,UAAG,UAAU,GACb,GAAQ,EAAK,EAAM,GACZ,GAAY,EAAM,GAG3B,YAAkB,EAAK,EAAM,EAAM,CACjC,GAAG,YAAY,GAAK,QAAQ,GAAQ,GAAY,EAAM,EAAK,EAAM,IAGnE,YAAsB,EAAM,EAAK,EAAM,EAAM,CAC3C,GAAM,GAAU,GAAK,KAAK,EAAK,GACzB,EAAW,GAAK,KAAK,EAAM,GAC3B,CAAE,YAAa,GAAK,eAAe,EAAS,EAAU,OAAQ,GACpE,MAAO,IAAU,EAAU,EAAS,EAAU,GAGhD,YAAiB,EAAU,EAAK,EAAM,EAAM,CAC1C,GAAI,GAAc,GAAG,aAAa,GAKlC,GAJI,EAAK,aACP,GAAc,GAAK,QAAQ,QAAQ,MAAO,IAGvC,EAEE,CACL,GAAI,GACJ,GAAI,CACF,EAAe,GAAG,aAAa,SACxB,EAAP,CAIA,GAAI,EAAI,OAAS,UAAY,EAAI,OAAS,UAAW,MAAO,IAAG,YAAY,EAAa,GACxF,KAAM,GAKR,GAHI,EAAK,aACP,GAAe,GAAK,QAAQ,QAAQ,MAAO,IAEzC,GAAK,YAAY,EAAa,GAChC,KAAM,IAAI,OAAM,gBAAgB,oCAA8C,OAMhF,GAAI,GAAG,SAAS,GAAM,eAAiB,GAAK,YAAY,EAAc,GACpE,KAAM,IAAI,OAAM,qBAAqB,YAAuB,OAE9D,MAAO,IAAS,EAAa,OAzB7B,OAAO,IAAG,YAAY,EAAa,GA6BvC,YAAmB,EAAa,EAAM,CACpC,UAAG,WAAW,GACP,GAAG,YAAY,EAAa,GAGrC,GAAO,QAAU,KCrKjB,gCAEA,GAAO,QAAU,CACf,SAAU,QCHZ,gCACA,GAAM,IAAI,KAAwB,YAC5B,GAAK,KAEX,YAAqB,EAAM,CACzB,MAAO,IAAG,OAAO,GAAM,KAAK,IAAM,IAAM,MAAM,IAAM,IAGtD,GAAO,QAAU,CACf,WAAY,GAAE,IACd,eAAgB,GAAG,cCVrB,gCAEA,GAAM,IAAK,KACL,GAAO,QAAQ,QACf,GAAS,KAAqB,OAC9B,GAAa,KAA0B,WACvC,GAAe,KAA0B,aACzC,GAAO,KAEb,YAAe,EAAK,EAAM,EAAM,EAAI,CAClC,AAAI,MAAO,IAAS,YAAc,CAAC,EACjC,GAAK,EACL,EAAO,IACE,MAAO,IAAS,YACzB,GAAO,CAAE,OAAQ,IAGnB,EAAK,GAAM,UAAY,GACvB,EAAO,GAAQ,GAEf,EAAK,QAAU,WAAa,GAAO,CAAC,CAAC,EAAK,QAAU,GACpD,EAAK,UAAY,aAAe,GAAO,CAAC,CAAC,EAAK,UAAY,EAAK,QAG3D,EAAK,oBAAsB,QAAQ,OAAS,QAC9C,QAAQ,KAAK;AAAA;AAAA,mEAIf,GAAK,WAAW,EAAK,EAAM,OAAQ,EAAM,CAAC,EAAK,IAAU,CACvD,GAAI,EAAK,MAAO,GAAG,GACnB,GAAM,CAAE,UAAS,YAAa,EAC9B,GAAK,iBAAiB,EAAK,EAAS,EAAM,OAAQ,GAC5C,EAAY,EAAG,GACf,EAAK,OAAe,GAAa,GAAgB,EAAU,EAAK,EAAM,EAAM,GACzE,GAAe,EAAU,EAAK,EAAM,EAAM,MAKvD,YAAyB,EAAU,EAAK,EAAM,EAAM,EAAI,CACtD,GAAM,GAAa,GAAK,QAAQ,GAChC,GAAW,EAAY,CAAC,EAAK,IAAc,CACzC,GAAI,EAAK,MAAO,GAAG,GACnB,GAAI,EAAW,MAAO,IAAS,EAAU,EAAK,EAAM,EAAM,GAC1D,GAAO,EAAY,GACb,EAAY,EAAG,GACZ,GAAS,EAAU,EAAK,EAAM,EAAM,MAKjD,YAAuB,EAAW,EAAU,EAAK,EAAM,EAAM,EAAI,CAC/D,QAAQ,QAAQ,EAAK,OAAO,EAAK,IAAO,KAAK,GACvC,EAAgB,EAAU,EAAU,EAAK,EAAM,EAAM,GAClD,IACN,GAAS,EAAG,IAGjB,YAAoB,EAAU,EAAK,EAAM,EAAM,EAAI,CACjD,MAAI,GAAK,OAAe,GAAa,GAAU,EAAU,EAAK,EAAM,EAAM,GACnE,GAAS,EAAU,EAAK,EAAM,EAAM,GAG7C,YAAmB,EAAU,EAAK,EAAM,EAAM,EAAI,CAEhD,AADa,GAAK,YAAc,GAAG,KAAO,GAAG,OACxC,EAAK,CAAC,EAAK,IACV,EAAY,EAAG,GAEf,EAAQ,cAAsB,GAAM,EAAS,EAAU,EAAK,EAAM,EAAM,GACnE,EAAQ,UACR,EAAQ,qBACR,EAAQ,gBAAwB,GAAO,EAAS,EAAU,EAAK,EAAM,EAAM,GAC3E,EAAQ,iBAAyB,GAAO,EAAU,EAAK,EAAM,EAAM,GACnE,EAAQ,WAAmB,EAAG,GAAI,OAAM,8BAA8B,MACtE,EAAQ,SAAiB,EAAG,GAAI,OAAM,4BAA4B,MACpE,EAAG,GAAI,OAAM,iBAAiB,OAIzC,YAAiB,EAAS,EAAU,EAAK,EAAM,EAAM,EAAI,CACvD,MAAK,GACE,GAAY,EAAS,EAAK,EAAM,EAAM,GADvB,GAAS,EAAS,EAAK,EAAM,EAAM,GAI3D,YAAsB,EAAS,EAAK,EAAM,EAAM,EAAI,CAClD,GAAI,EAAK,UACP,GAAG,OAAO,EAAM,GACV,EAAY,EAAG,GACZ,GAAS,EAAS,EAAK,EAAM,EAAM,QAEvC,OAAI,GAAK,aACP,EAAG,GAAI,OAAM,IAAI,sBACZ,IAGhB,YAAmB,EAAS,EAAK,EAAM,EAAM,EAAI,CAC/C,GAAG,SAAS,EAAK,EAAM,GACjB,EAAY,EAAG,GACf,EAAK,mBAA2B,GAAwB,EAAQ,KAAM,EAAK,EAAM,GAC9E,GAAY,EAAM,EAAQ,KAAM,IAI3C,YAAkC,EAAS,EAAK,EAAM,EAAI,CAIxD,MAAI,IAAkB,GACb,GAAiB,EAAM,EAAS,GACjC,EAAY,EAAG,GACZ,GAAyB,EAAS,EAAK,EAAM,IAGjD,GAAyB,EAAS,EAAK,EAAM,GAGtD,YAA4B,EAAS,CACnC,MAAQ,GAAU,MAAW,EAG/B,YAA2B,EAAM,EAAS,EAAI,CAC5C,MAAO,IAAY,EAAM,EAAU,IAAO,GAG5C,YAAmC,EAAS,EAAK,EAAM,EAAI,CACzD,GAAkB,EAAK,EAAM,GACvB,EAAY,EAAG,GACZ,GAAY,EAAM,EAAS,IAItC,YAAsB,EAAM,EAAS,EAAI,CACvC,MAAO,IAAG,MAAM,EAAM,EAAS,GAGjC,YAA4B,EAAK,EAAM,EAAI,CAIzC,GAAG,KAAK,EAAK,CAAC,EAAK,IACb,EAAY,EAAG,GACZ,GAAa,EAAM,EAAe,MAAO,EAAe,MAAO,IAI1E,YAAgB,EAAS,EAAU,EAAK,EAAM,EAAM,EAAI,CACtD,MAAK,GACE,GAAQ,EAAK,EAAM,EAAM,GADV,GAAa,EAAQ,KAAM,EAAK,EAAM,EAAM,GAIpE,YAAuB,EAAS,EAAK,EAAM,EAAM,EAAI,CACnD,GAAG,MAAM,EAAM,GAAO,CACpB,GAAI,EAAK,MAAO,GAAG,GACnB,GAAQ,EAAK,EAAM,EAAM,GACnB,EAAY,EAAG,GACZ,GAAY,EAAM,EAAS,MAKxC,YAAkB,EAAK,EAAM,EAAM,EAAI,CACrC,GAAG,QAAQ,EAAK,CAAC,EAAK,IAChB,EAAY,EAAG,GACZ,GAAa,EAAO,EAAK,EAAM,EAAM,IAIhD,YAAuB,EAAO,EAAK,EAAM,EAAM,EAAI,CACjD,GAAM,GAAO,EAAM,MACnB,MAAK,GACE,GAAY,EAAO,EAAM,EAAK,EAAM,EAAM,GAD/B,IAIpB,YAAsB,EAAO,EAAM,EAAK,EAAM,EAAM,EAAI,CACtD,GAAM,GAAU,GAAK,KAAK,EAAK,GACzB,EAAW,GAAK,KAAK,EAAM,GACjC,GAAK,WAAW,EAAS,EAAU,OAAQ,EAAM,CAAC,EAAK,IAAU,CAC/D,GAAI,EAAK,MAAO,GAAG,GACnB,GAAM,CAAE,YAAa,EACrB,GAAU,EAAU,EAAS,EAAU,EAAM,GACvC,EAAY,EAAG,GACZ,GAAa,EAAO,EAAK,EAAM,EAAM,MAKlD,YAAiB,EAAU,EAAK,EAAM,EAAM,EAAI,CAC9C,GAAG,SAAS,EAAK,CAAC,EAAK,IAAgB,CACrC,GAAI,EAAK,MAAO,GAAG,GAKnB,GAJI,EAAK,aACP,GAAc,GAAK,QAAQ,QAAQ,MAAO,IAGvC,EAGH,GAAG,SAAS,EAAM,CAAC,EAAK,IAClB,EAIE,EAAI,OAAS,UAAY,EAAI,OAAS,UAAkB,GAAG,QAAQ,EAAa,EAAM,GACnF,EAAG,GAER,GAAK,aACP,GAAe,GAAK,QAAQ,QAAQ,MAAO,IAEzC,GAAK,YAAY,EAAa,GACzB,EAAG,GAAI,OAAM,gBAAgB,oCAA8C,QAMhF,EAAS,eAAiB,GAAK,YAAY,EAAc,GACpD,EAAG,GAAI,OAAM,qBAAqB,YAAuB,QAE3D,GAAS,EAAa,EAAM,SAvBrC,OAAO,IAAG,QAAQ,EAAa,EAAM,KA6B3C,YAAmB,EAAa,EAAM,EAAI,CACxC,GAAG,OAAO,EAAM,GACV,EAAY,EAAG,GACZ,GAAG,QAAQ,EAAa,EAAM,IAIzC,GAAO,QAAU,KCvOjB,gCAEA,GAAM,IAAI,KAAwB,aAClC,GAAO,QAAU,CACf,KAAM,GAAE,SCJV,gCAEA,GAAM,IAAK,KACL,GAAO,QAAQ,QACf,EAAS,QAAQ,UAEjB,GAAa,QAAQ,WAAa,QAExC,YAAmB,EAAS,CAS1B,AARgB,CACd,SACA,QACA,OACA,QACA,QACA,WAEM,QAAQ,GAAK,CACnB,EAAQ,GAAK,EAAQ,IAAM,GAAG,GAC9B,EAAI,EAAI,OACR,EAAQ,GAAK,EAAQ,IAAM,GAAG,KAGhC,EAAQ,aAAe,EAAQ,cAAgB,EAGjD,YAAiB,EAAG,EAAS,EAAI,CAC/B,GAAI,GAAY,EAEhB,AAAI,MAAO,IAAY,YACrB,GAAK,EACL,EAAU,IAGZ,EAAO,EAAG,wBACV,EAAO,YAAY,MAAO,GAAG,SAAU,mCACvC,EAAO,YAAY,MAAO,GAAI,WAAY,sCAC1C,EAAO,EAAS,6CAChB,EAAO,YAAY,MAAO,GAAS,SAAU,oCAE7C,GAAS,GAET,GAAQ,EAAG,EAAS,WAAa,EAAI,CACnC,GAAI,EAAI,CACN,GAAK,GAAG,OAAS,SAAW,EAAG,OAAS,aAAe,EAAG,OAAS,UAC/D,EAAY,EAAQ,aAAc,CACpC,IACA,GAAM,GAAO,EAAY,IAEzB,MAAO,YAAW,IAAM,GAAQ,EAAG,EAAS,GAAK,GAInD,AAAI,EAAG,OAAS,UAAU,GAAK,MAGjC,EAAG,KAeP,YAAkB,EAAG,EAAS,EAAI,CAChC,EAAO,GACP,EAAO,GACP,EAAO,MAAO,IAAO,YAIrB,EAAQ,MAAM,EAAG,CAAC,EAAI,IAAO,CAC3B,GAAI,GAAM,EAAG,OAAS,SACpB,MAAO,GAAG,MAIZ,GAAI,GAAM,EAAG,OAAS,SAAW,GAC/B,MAAO,IAAY,EAAG,EAAS,EAAI,GAGrC,GAAI,GAAM,EAAG,cACX,MAAO,IAAM,EAAG,EAAS,EAAI,GAG/B,EAAQ,OAAO,EAAG,GAAM,CACtB,GAAI,EAAI,CACN,GAAI,EAAG,OAAS,SACd,MAAO,GAAG,MAEZ,GAAI,EAAG,OAAS,QACd,MAAQ,IACJ,GAAY,EAAG,EAAS,EAAI,GAC5B,GAAM,EAAG,EAAS,EAAI,GAE5B,GAAI,EAAG,OAAS,SACd,MAAO,IAAM,EAAG,EAAS,EAAI,GAGjC,MAAO,GAAG,OAKhB,YAAsB,EAAG,EAAS,EAAI,EAAI,CACxC,EAAO,GACP,EAAO,GACP,EAAO,MAAO,IAAO,YAErB,EAAQ,MAAM,EAAG,IAAO,GAAO,CAC7B,AAAI,EACF,EAAG,EAAI,OAAS,SAAW,KAAO,GAElC,EAAQ,KAAK,EAAG,CAAC,EAAK,IAAU,CAC9B,AAAI,EACF,EAAG,EAAI,OAAS,SAAW,KAAO,GAC7B,AAAI,EAAM,cACf,GAAM,EAAG,EAAS,EAAI,GAEtB,EAAQ,OAAO,EAAG,OAO5B,YAA0B,EAAG,EAAS,EAAI,CACxC,GAAI,GAEJ,EAAO,GACP,EAAO,GAEP,GAAI,CACF,EAAQ,UAAU,EAAG,WACd,EAAP,CACA,GAAI,EAAI,OAAS,SACf,OAEA,KAAM,GAIV,GAAI,CACF,EAAQ,EAAQ,SAAS,SAClB,EAAP,CACA,GAAI,EAAI,OAAS,SACf,OAEA,KAAM,GAIV,AAAI,EAAM,cACR,GAAU,EAAG,EAAS,GAEtB,EAAQ,WAAW,GAIvB,YAAgB,EAAG,EAAS,EAAY,EAAI,CAC1C,EAAO,GACP,EAAO,GACP,EAAO,MAAO,IAAO,YAKrB,EAAQ,MAAM,EAAG,GAAM,CACrB,AAAI,GAAO,GAAG,OAAS,aAAe,EAAG,OAAS,UAAY,EAAG,OAAS,SACxE,GAAO,EAAG,EAAS,GACd,AAAI,GAAM,EAAG,OAAS,UAC3B,EAAG,GAEH,EAAG,KAKT,YAAiB,EAAG,EAAS,EAAI,CAC/B,EAAO,GACP,EAAO,GACP,EAAO,MAAO,IAAO,YAErB,EAAQ,QAAQ,EAAG,CAAC,EAAI,IAAU,CAChC,GAAI,EAAI,MAAO,GAAG,GAElB,GAAI,GAAI,EAAM,OACV,EAEJ,GAAI,IAAM,EAAG,MAAO,GAAQ,MAAM,EAAG,GAErC,EAAM,QAAQ,GAAK,CACjB,GAAO,GAAK,KAAK,EAAG,GAAI,EAAS,GAAM,CACrC,GAAI,GAGJ,IAAI,EAAI,MAAO,GAAG,EAAW,GAC7B,AAAI,EAAE,GAAM,GACV,EAAQ,MAAM,EAAG,UAU3B,YAAqB,EAAG,EAAS,CAC/B,GAAI,GAEJ,EAAU,GAAW,GACrB,GAAS,GAET,EAAO,EAAG,wBACV,EAAO,YAAY,MAAO,GAAG,SAAU,mCACvC,EAAO,EAAS,2BAChB,EAAO,YAAY,MAAO,GAAS,SAAU,oCAE7C,GAAI,CACF,EAAK,EAAQ,UAAU,SAChB,EAAP,CACA,GAAI,EAAG,OAAS,SACd,OAIF,AAAI,EAAG,OAAS,SAAW,IACzB,GAAgB,EAAG,EAAS,GAIhC,GAAI,CAEF,AAAI,GAAM,EAAG,cACX,GAAU,EAAG,EAAS,MAEtB,EAAQ,WAAW,SAEd,EAAP,CACA,GAAI,EAAG,OAAS,SACd,OACK,GAAI,EAAG,OAAS,QACrB,MAAO,IAAY,GAAgB,EAAG,EAAS,GAAM,GAAU,EAAG,EAAS,GACtE,GAAI,EAAG,OAAS,SACrB,KAAM,GAER,GAAU,EAAG,EAAS,IAI1B,YAAoB,EAAG,EAAS,EAAY,CAC1C,EAAO,GACP,EAAO,GAEP,GAAI,CACF,EAAQ,UAAU,SACX,EAAP,CACA,GAAI,EAAG,OAAS,UACd,KAAM,GACD,GAAI,EAAG,OAAS,aAAe,EAAG,OAAS,UAAY,EAAG,OAAS,QACxE,GAAW,EAAG,WACL,EAAG,OAAS,SACrB,KAAM,IAKZ,YAAqB,EAAG,EAAS,CAK/B,GAJA,EAAO,GACP,EAAO,GACP,EAAQ,YAAY,GAAG,QAAQ,GAAK,GAAW,GAAK,KAAK,EAAG,GAAI,IAE5D,GAAW,CAOb,GAAM,GAAY,KAAK,MACvB,EACE,IAAI,CAEF,MADY,GAAQ,UAAU,EAAG,QAEjC,QACK,KAAK,MAAQ,EAAY,SAGlC,OADY,GAAQ,UAAU,EAAG,GAKrC,GAAO,QAAU,GACjB,GAAO,KAAO,KC7Sd,gCAEA,GAAM,IAAK,KACL,GAAI,KAAwB,aAC5B,GAAS,KAEf,YAAiB,EAAM,EAAU,CAE/B,GAAI,GAAG,GAAI,MAAO,IAAG,GAAG,EAAM,CAAE,UAAW,GAAM,MAAO,IAAQ,GAChE,GAAO,EAAM,GAGf,YAAqB,EAAM,CAEzB,GAAI,GAAG,OAAQ,MAAO,IAAG,OAAO,EAAM,CAAE,UAAW,GAAM,MAAO,KAChE,GAAO,KAAK,GAGd,GAAO,QAAU,CACf,OAAQ,GAAE,IACV,iBCpBF,gCAEA,GAAM,IAAI,KAAwB,YAC5B,GAAK,KACL,GAAO,QAAQ,QACf,GAAQ,KACR,GAAS,KAET,GAAW,GAAE,eAAyB,EAAK,CAC/C,GAAI,GACJ,GAAI,CACF,EAAQ,KAAM,IAAG,QAAQ,QACzB,CACA,MAAO,IAAM,OAAO,GAGtB,MAAO,SAAQ,IAAI,EAAM,IAAI,GAAQ,GAAO,OAAO,GAAK,KAAK,EAAK,QAGpE,YAAuB,EAAK,CAC1B,GAAI,GACJ,GAAI,CACF,EAAQ,GAAG,YAAY,QACvB,CACA,MAAO,IAAM,WAAW,GAG1B,EAAM,QAAQ,GAAQ,CACpB,EAAO,GAAK,KAAK,EAAK,GACtB,GAAO,WAAW,KAItB,GAAO,QAAU,CACf,gBACA,aAAc,GACd,YACA,SAAU,MCrCZ,gCAEA,GAAM,IAAI,KAAwB,aAC5B,GAAO,QAAQ,QACf,GAAK,KACL,GAAQ,KAEd,YAAqB,EAAM,EAAU,CACnC,YAAqB,CACnB,GAAG,UAAU,EAAM,GAAI,GAAO,CAC5B,GAAI,EAAK,MAAO,GAAS,GACzB,MAIJ,GAAG,KAAK,EAAM,CAAC,EAAK,IAAU,CAC5B,GAAI,CAAC,GAAO,EAAM,SAAU,MAAO,KACnC,GAAM,GAAM,GAAK,QAAQ,GACzB,GAAG,KAAK,EAAK,CAAC,EAAK,IAAU,CAC3B,GAAI,EAEF,MAAI,GAAI,OAAS,SACR,GAAM,OAAO,EAAK,GAAO,CAC9B,GAAI,EAAK,MAAO,GAAS,GACzB,MAGG,EAAS,GAGlB,AAAI,EAAM,cAAe,IAIvB,GAAG,QAAQ,EAAK,GAAO,CACrB,GAAI,EAAK,MAAO,GAAS,SAOnC,YAAyB,EAAM,CAC7B,GAAI,GACJ,GAAI,CACF,EAAQ,GAAG,SAAS,QACpB,EACF,GAAI,GAAS,EAAM,SAAU,OAE7B,GAAM,GAAM,GAAK,QAAQ,GACzB,GAAI,CACF,AAAK,GAAG,SAAS,GAAK,eAGpB,GAAG,YAAY,SAEV,EAAP,CAEA,GAAI,GAAO,EAAI,OAAS,SAAU,GAAM,WAAW,OAC9C,MAAM,GAGb,GAAG,cAAc,EAAM,IAGzB,GAAO,QAAU,CACf,WAAY,GAAE,IACd,qBCnEF,gCAEA,GAAM,IAAI,KAAwB,aAC5B,GAAO,QAAQ,QACf,GAAK,KACL,GAAQ,KACR,GAAa,KAA0B,WACvC,CAAE,iBAAiB,KAEzB,YAAqB,EAAS,EAAS,EAAU,CAC/C,WAAmB,EAAS,EAAS,CACnC,GAAG,KAAK,EAAS,EAAS,GAAO,CAC/B,GAAI,EAAK,MAAO,GAAS,GACzB,EAAS,QAIb,GAAG,MAAM,EAAS,CAAC,EAAG,IAAY,CAChC,GAAG,MAAM,EAAS,CAAC,EAAK,IAAY,CAClC,GAAI,EACF,SAAI,QAAU,EAAI,QAAQ,QAAQ,QAAS,cACpC,EAAS,GAElB,GAAI,GAAW,GAAa,EAAS,GAAU,MAAO,GAAS,MAE/D,GAAM,GAAM,GAAK,QAAQ,GACzB,GAAW,EAAK,CAAC,EAAK,IAAc,CAClC,GAAI,EAAK,MAAO,GAAS,GACzB,GAAI,EAAW,MAAO,GAAS,EAAS,GACxC,GAAM,OAAO,EAAK,GAAO,CACvB,GAAI,EAAK,MAAO,GAAS,GACzB,EAAS,EAAS,WAO5B,YAAyB,EAAS,EAAS,CACzC,GAAI,GACJ,GAAI,CACF,EAAU,GAAG,UAAU,QACvB,EAEF,GAAI,CACF,GAAM,GAAU,GAAG,UAAU,GAC7B,GAAI,GAAW,GAAa,EAAS,GAAU,aACxC,EAAP,CACA,QAAI,QAAU,EAAI,QAAQ,QAAQ,QAAS,cACrC,EAGR,GAAM,GAAM,GAAK,QAAQ,GAEzB,MADkB,IAAG,WAAW,IAEhC,GAAM,WAAW,GAEV,GAAG,SAAS,EAAS,GAG9B,GAAO,QAAU,CACf,WAAY,GAAE,IACd,qBC9DF,gCAEA,GAAM,IAAO,QAAQ,QACf,GAAK,KACL,GAAa,KAA0B,WAwB7C,YAAuB,EAAS,EAAS,EAAU,CACjD,GAAI,GAAK,WAAW,GAClB,MAAO,IAAG,MAAM,EAAS,AAAC,GACpB,EACF,GAAI,QAAU,EAAI,QAAQ,QAAQ,QAAS,iBACpC,EAAS,IAEX,EAAS,KAAM,CACpB,MAAO,EACP,MAAO,KAGN,CACL,GAAM,GAAS,GAAK,QAAQ,GACtB,EAAgB,GAAK,KAAK,EAAQ,GACxC,MAAO,IAAW,EAAe,CAAC,EAAK,IACjC,EAAY,EAAS,GACrB,EACK,EAAS,KAAM,CACpB,MAAO,EACP,MAAO,IAGF,GAAG,MAAM,EAAS,AAAC,GACpB,EACF,GAAI,QAAU,EAAI,QAAQ,QAAQ,QAAS,iBACpC,EAAS,IAEX,EAAS,KAAM,CACpB,MAAO,EACP,MAAO,GAAK,SAAS,EAAQ,QAQzC,YAA2B,EAAS,EAAS,CAC3C,GAAI,GACJ,GAAI,GAAK,WAAW,GAAU,CAE5B,GADA,EAAS,GAAG,WAAW,GACnB,CAAC,EAAQ,KAAM,IAAI,OAAM,mCAC7B,MAAO,CACL,MAAO,EACP,MAAO,OAEJ,CACL,GAAM,GAAS,GAAK,QAAQ,GACtB,EAAgB,GAAK,KAAK,EAAQ,GAExC,GADA,EAAS,GAAG,WAAW,GACnB,EACF,MAAO,CACL,MAAO,EACP,MAAO,GAIT,GADA,EAAS,GAAG,WAAW,GACnB,CAAC,EAAQ,KAAM,IAAI,OAAM,mCAC7B,MAAO,CACL,MAAO,EACP,MAAO,GAAK,SAAS,EAAQ,KAMrC,GAAO,QAAU,CACf,gBACA,uBCjGF,gCAEA,GAAM,IAAK,KAEX,YAAsB,EAAS,EAAM,EAAU,CAG7C,GAFA,EAAY,MAAO,IAAS,WAAc,EAAO,EACjD,EAAQ,MAAO,IAAS,WAAc,GAAQ,EAC1C,EAAM,MAAO,GAAS,KAAM,GAChC,GAAG,MAAM,EAAS,CAAC,EAAK,IAAU,CAChC,GAAI,EAAK,MAAO,GAAS,KAAM,QAC/B,EAAQ,GAAS,EAAM,cAAiB,MAAQ,OAChD,EAAS,KAAM,KAInB,YAA0B,EAAS,EAAM,CACvC,GAAI,GAEJ,GAAI,EAAM,MAAO,GACjB,GAAI,CACF,EAAQ,GAAG,UAAU,QACrB,CACA,MAAO,OAET,MAAQ,IAAS,EAAM,cAAiB,MAAQ,OAGlD,GAAO,QAAU,CACf,eACA,sBC7BF,gCAEA,GAAM,IAAI,KAAwB,aAC5B,GAAO,QAAQ,QACf,GAAK,KACL,GAAU,KACV,GAAS,GAAQ,OACjB,GAAa,GAAQ,WAErB,GAAgB,KAChB,GAAe,GAAc,aAC7B,GAAmB,GAAc,iBAEjC,GAAe,KACf,GAAc,GAAa,YAC3B,GAAkB,GAAa,gBAE/B,GAAa,KAA0B,WAEvC,CAAE,iBAAiB,KAEzB,YAAwB,EAAS,EAAS,EAAM,EAAU,CACxD,EAAY,MAAO,IAAS,WAAc,EAAO,EACjD,EAAQ,MAAO,IAAS,WAAc,GAAQ,EAE9C,GAAG,MAAM,EAAS,CAAC,EAAK,IAAU,CAChC,AAAI,CAAC,GAAO,EAAM,iBAChB,QAAQ,IAAI,CACV,GAAG,KAAK,GACR,GAAG,KAAK,KACP,KAAK,CAAC,CAAC,EAAS,KAAa,CAC9B,GAAI,GAAa,EAAS,GAAU,MAAO,GAAS,MACpD,GAAe,EAAS,EAAS,EAAM,KAEpC,GAAe,EAAS,EAAS,EAAM,KAIlD,YAAyB,EAAS,EAAS,EAAM,EAAU,CACzD,GAAa,EAAS,EAAS,CAAC,EAAK,IAAa,CAChD,GAAI,EAAK,MAAO,GAAS,GACzB,EAAU,EAAS,MACnB,GAAY,EAAS,MAAO,EAAM,CAAC,EAAK,IAAS,CAC/C,GAAI,EAAK,MAAO,GAAS,GACzB,GAAM,GAAM,GAAK,QAAQ,GACzB,GAAW,EAAK,CAAC,EAAK,IAAc,CAClC,GAAI,EAAK,MAAO,GAAS,GACzB,GAAI,EAAW,MAAO,IAAG,QAAQ,EAAS,EAAS,EAAM,GACzD,GAAO,EAAK,GAAO,CACjB,GAAI,EAAK,MAAO,GAAS,GACzB,GAAG,QAAQ,EAAS,EAAS,EAAM,WAO7C,YAA4B,EAAS,EAAS,EAAM,CAClD,GAAI,GACJ,GAAI,CACF,EAAQ,GAAG,UAAU,QACrB,EACF,GAAI,GAAS,EAAM,iBAAkB,CACnC,GAAM,GAAU,GAAG,SAAS,GACtB,EAAU,GAAG,SAAS,GAC5B,GAAI,GAAa,EAAS,GAAU,OAGtC,GAAM,GAAW,GAAiB,EAAS,GAC3C,EAAU,EAAS,MACnB,EAAO,GAAgB,EAAS,MAAO,GACvC,GAAM,GAAM,GAAK,QAAQ,GAEzB,MADe,IAAG,WAAW,IAE7B,GAAW,GACJ,GAAG,YAAY,EAAS,EAAS,GAG1C,GAAO,QAAU,CACf,cAAe,GAAE,IACjB,wBChFF,gCAEA,GAAM,IAAO,KACP,GAAO,KACP,GAAU,KAEhB,GAAO,QAAU,CAEf,WAAY,GAAK,WACjB,eAAgB,GAAK,eACrB,WAAY,GAAK,WACjB,eAAgB,GAAK,eAErB,WAAY,GAAK,WACjB,eAAgB,GAAK,eACrB,WAAY,GAAK,WACjB,eAAgB,GAAK,eAErB,cAAe,GAAQ,cACvB,kBAAmB,GAAQ,kBAC3B,cAAe,GAAQ,cACvB,kBAAmB,GAAQ,qBCrB7B,+BAAoB,EAAK,CAAE,MAAM;AAAA,EAAM,WAAW,GAAM,WAAW,KAAM,UAAW,GAAI,CACtF,GAAM,GAAM,EAAW,EAAM,GAG7B,MAAO,AAFK,MAAK,UAAU,EAAK,EAAU,GAE/B,QAAQ,MAAO,GAAO,EAGnC,YAAmB,EAAS,CAE1B,MAAI,QAAO,SAAS,IAAU,GAAU,EAAQ,SAAS,SAClD,EAAQ,QAAQ,UAAW,IAGpC,GAAO,QAAU,CAAE,aAAW,eCb9B,sBAAI,IACJ,GAAI,CACF,GAAM,WACC,EAAP,CACA,GAAM,QAAQ,MAEhB,GAAM,IAAe,KACf,CAAE,aAAW,aAAa,KAEhC,kBAA0B,EAAM,EAAU,GAAI,CAC5C,AAAI,MAAO,IAAY,UACrB,GAAU,CAAE,SAAU,IAGxB,GAAM,GAAK,EAAQ,IAAM,GAEnB,EAAc,UAAY,GAAU,EAAQ,OAAS,GAEvD,EAAO,KAAM,IAAa,aAAa,EAAG,UAAU,EAAM,GAE9D,EAAO,GAAS,GAEhB,GAAI,GACJ,GAAI,CACF,EAAM,KAAK,MAAM,EAAM,EAAU,EAAQ,QAAU,YAC5C,EAAP,CACA,GAAI,EACF,QAAI,QAAU,GAAG,MAAS,EAAI,UACxB,EAEN,MAAO,MAIX,MAAO,GAGT,GAAM,IAAW,GAAa,YAAY,IAE1C,YAAuB,EAAM,EAAU,GAAI,CACzC,AAAI,MAAO,IAAY,UACrB,GAAU,CAAE,SAAU,IAGxB,GAAM,GAAK,EAAQ,IAAM,GAEnB,EAAc,UAAY,GAAU,EAAQ,OAAS,GAE3D,GAAI,CACF,GAAI,GAAU,EAAG,aAAa,EAAM,GACpC,SAAU,GAAS,GACZ,KAAK,MAAM,EAAS,EAAQ,eAC5B,EAAP,CACA,GAAI,EACF,QAAI,QAAU,GAAG,MAAS,EAAI,UACxB,EAEN,MAAO,OAKb,kBAA2B,EAAM,EAAK,EAAU,GAAI,CAClD,GAAM,GAAK,EAAQ,IAAM,GAEnB,EAAM,GAAU,EAAK,GAE3B,KAAM,IAAa,aAAa,EAAG,WAAW,EAAM,EAAK,GAG3D,GAAM,IAAY,GAAa,YAAY,IAE3C,YAAwB,EAAM,EAAK,EAAU,GAAI,CAC/C,GAAM,GAAK,EAAQ,IAAM,GAEnB,EAAM,GAAU,EAAK,GAE3B,MAAO,GAAG,cAAc,EAAM,EAAK,GAGrC,GAAM,IAAW,CACf,YACA,gBACA,aACA,kBAGF,GAAO,QAAU,KCvFjB,gCAEA,GAAM,IAAW,KAEjB,GAAO,QAAU,CAEf,SAAU,GAAS,SACnB,aAAc,GAAS,aACvB,UAAW,GAAS,UACpB,cAAe,GAAS,iBCT1B,gCAEA,GAAM,IAAI,KAAwB,aAC5B,GAAK,KACL,GAAO,QAAQ,QACf,GAAQ,KACR,GAAa,KAA0B,WAE7C,YAAqB,EAAM,EAAM,EAAU,EAAU,CACnD,AAAI,MAAO,IAAa,YACtB,GAAW,EACX,EAAW,QAGb,GAAM,GAAM,GAAK,QAAQ,GACzB,GAAW,EAAK,CAAC,EAAK,IAAW,CAC/B,GAAI,EAAK,MAAO,GAAS,GACzB,GAAI,EAAQ,MAAO,IAAG,UAAU,EAAM,EAAM,EAAU,GAEtD,GAAM,OAAO,EAAK,GAAO,CACvB,GAAI,EAAK,MAAO,GAAS,GAEzB,GAAG,UAAU,EAAM,EAAM,EAAU,OAKzC,YAAyB,KAAS,EAAM,CACtC,GAAM,GAAM,GAAK,QAAQ,GACzB,GAAI,GAAG,WAAW,GAChB,MAAO,IAAG,cAAc,EAAM,GAAG,GAEnC,GAAM,WAAW,GACjB,GAAG,cAAc,EAAM,GAAG,GAG5B,GAAO,QAAU,CACf,WAAY,GAAE,IACd,qBCtCF,gCAEA,GAAM,CAAE,cAAc,KAChB,CAAE,eAAe,KAEvB,kBAA2B,EAAM,EAAM,EAAU,GAAI,CACnD,GAAM,GAAM,GAAU,EAAM,GAE5B,KAAM,IAAW,EAAM,EAAK,GAG9B,GAAO,QAAU,KCXjB,gCAEA,GAAM,CAAE,cAAc,KAChB,CAAE,mBAAmB,KAE3B,YAAyB,EAAM,EAAM,EAAS,CAC5C,GAAM,GAAM,GAAU,EAAM,GAE5B,GAAe,EAAM,EAAK,GAG5B,GAAO,QAAU,KCXjB,gCAEA,GAAM,IAAI,KAAwB,YAC5B,GAAW,KAEjB,GAAS,WAAa,GAAE,MACxB,GAAS,eAAiB,KAE1B,GAAS,WAAa,GAAS,WAC/B,GAAS,eAAiB,GAAS,eACnC,GAAS,UAAY,GAAS,UAC9B,GAAS,cAAgB,GAAS,cAClC,GAAS,SAAW,GAAS,SAC7B,GAAS,aAAe,GAAS,aAEjC,GAAO,QAAU,KCfjB,gCAEA,GAAM,IAAK,KACL,GAAO,QAAQ,QACf,GAAW,KAAwB,SACnC,GAAa,KAAqB,WAClC,GAAa,KAAqB,WAClC,GAAO,KAEb,YAAmB,EAAK,EAAM,EAAM,CAClC,EAAO,GAAQ,GACf,GAAM,GAAY,EAAK,WAAa,EAAK,SAAW,GAE9C,CAAE,UAAS,iBAAiB,IAAU,GAAK,eAAe,EAAK,EAAM,OAAQ,GACnF,UAAK,qBAAqB,EAAK,EAAS,EAAM,QACzC,GAAa,IAAO,GAAW,GAAK,QAAQ,IAC1C,GAAS,EAAK,EAAM,EAAW,GAGxC,YAAuB,EAAM,CAC3B,GAAM,GAAS,GAAK,QAAQ,GAE5B,MAAO,AADY,IAAK,MAAM,GACZ,OAAS,EAG7B,YAAmB,EAAK,EAAM,EAAW,EAAgB,CACvD,GAAI,EAAgB,MAAO,IAAO,EAAK,EAAM,GAC7C,GAAI,EACF,UAAW,GACJ,GAAO,EAAK,EAAM,GAE3B,GAAI,GAAG,WAAW,GAAO,KAAM,IAAI,OAAM,wBACzC,MAAO,IAAO,EAAK,EAAM,GAG3B,YAAiB,EAAK,EAAM,EAAW,CACrC,GAAI,CACF,GAAG,WAAW,EAAK,SACZ,EAAP,CACA,GAAI,EAAI,OAAS,QAAS,KAAM,GAChC,MAAO,IAAiB,EAAK,EAAM,IAIvC,YAA2B,EAAK,EAAM,EAAW,CAK/C,UAAS,EAAK,EAJD,CACX,YACA,aAAc,KAGT,GAAW,GAGpB,GAAO,QAAU,KCrDjB,gCAEA,GAAO,QAAU,CACf,SAAU,QCHZ,gCAEA,GAAM,IAAK,KACL,GAAO,QAAQ,QACf,GAAO,KAAmB,KAC1B,GAAS,KAAqB,OAC9B,GAAS,KAAqB,OAC9B,GAAa,KAA0B,WACvC,GAAO,KAEb,YAAe,EAAK,EAAM,EAAM,EAAI,CAClC,AAAI,MAAO,IAAS,YAClB,GAAK,EACL,EAAO,IAGT,GAAM,GAAY,EAAK,WAAa,EAAK,SAAW,GAEpD,GAAK,WAAW,EAAK,EAAM,OAAQ,EAAM,CAAC,EAAK,IAAU,CACvD,GAAI,EAAK,MAAO,GAAG,GACnB,GAAM,CAAE,UAAS,iBAAiB,IAAU,EAC5C,GAAK,iBAAiB,EAAK,EAAS,EAAM,OAAQ,GAAO,CACvD,GAAI,EAAK,MAAO,GAAG,GACnB,GAAI,GAAa,GAAO,MAAO,IAAS,EAAK,EAAM,EAAW,EAAgB,GAC9E,GAAO,GAAK,QAAQ,GAAO,GACrB,EAAY,EAAG,GACZ,GAAS,EAAK,EAAM,EAAW,EAAgB,QAM9D,YAAuB,EAAM,CAC3B,GAAM,GAAS,GAAK,QAAQ,GAE5B,MAAO,AADY,IAAK,MAAM,GACZ,OAAS,EAG7B,YAAmB,EAAK,EAAM,EAAW,EAAgB,EAAI,CAC3D,GAAI,EAAgB,MAAO,IAAO,EAAK,EAAM,EAAW,GACxD,GAAI,EACF,MAAO,IAAO,EAAM,GACd,EAAY,EAAG,GACZ,GAAO,EAAK,EAAM,EAAW,IAGxC,GAAW,EAAM,CAAC,EAAK,IACjB,EAAY,EAAG,GACf,EAAmB,EAAG,GAAI,OAAM,yBAC7B,GAAO,EAAK,EAAM,EAAW,IAIxC,YAAiB,EAAK,EAAM,EAAW,EAAI,CACzC,GAAG,OAAO,EAAK,EAAM,GACd,EACD,EAAI,OAAS,QAAgB,EAAG,GAC7B,GAAiB,EAAK,EAAM,EAAW,GAF7B,KAMrB,YAA2B,EAAK,EAAM,EAAW,EAAI,CAKnD,GAAK,EAAK,EAJG,CACX,YACA,aAAc,IAEM,GAChB,EAAY,EAAG,GACZ,GAAO,EAAK,IAIvB,GAAO,QAAU,KCxEjB,gCAEA,GAAM,IAAI,KAAwB,aAClC,GAAO,QAAU,CACf,KAAM,GAAE,SCJV,gCAEA,GAAO,QAAU,IAEZ,QAEA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QChBL,cAqBA,GAAI,IAAa,QAAQ,QACrB,GAAY,QAAQ,WAAa,QACjC,GAAK,QAAQ,MAIb,GAAQ,QAAQ,IAAI,YAAc,KAAK,KAAK,QAAQ,IAAI,YAE5D,aAAmB,CAGjB,GAAI,GACJ,GAAI,GAAO,CACT,GAAI,GAAY,GAAI,OACpB,EAAW,MAEX,GAAW,EAEb,MAAO,GAEP,WAAuB,EAAK,CAC1B,AAAI,GACF,GAAU,QAAU,EAAI,QACxB,EAAM,EACN,EAAgB,IAIpB,WAAyB,EAAK,CAC5B,GAAI,EAAK,CACP,GAAI,QAAQ,iBACV,KAAM,GACH,GAAI,CAAC,QAAQ,cAAe,CAC/B,GAAI,GAAM,wBAA2B,GAAI,OAAS,EAAI,SACtD,AAAI,QAAQ,iBACV,QAAQ,MAAM,GAEd,QAAQ,MAAM,MAMxB,YAAuB,EAAI,CACzB,MAAO,OAAO,IAAO,WAAa,EAAK,KAGzC,GAAI,IAAY,GAAW,UAI3B,AAAI,GACE,GAAa,sBAEb,GAAa,oBAFb,OAMN,AAAI,GACE,GAAc,yDAEd,GAAc,SAFd,OAKN,GAAQ,aAAe,SAAsB,EAAG,EAAO,CAIrD,GAFA,EAAI,GAAW,QAAQ,GAEnB,GAAS,OAAO,UAAU,eAAe,KAAK,EAAO,GACvD,MAAO,GAAM,GAGf,GAAI,GAAW,EACX,EAAY,GACZ,EAAY,GAGZ,EAEA,EAEA,EAEA,EAEJ,IAEA,YAAiB,CAEf,GAAI,GAAI,GAAY,KAAK,GACzB,EAAM,EAAE,GAAG,OACX,EAAU,EAAE,GACZ,EAAO,EAAE,GACT,EAAW,GAGP,IAAa,CAAC,EAAU,IAC1B,IAAG,UAAU,GACb,EAAU,GAAQ,IAOtB,KAAO,EAAM,EAAE,QAAQ,CAErB,GAAW,UAAY,EACvB,GAAI,GAAS,GAAW,KAAK,GAO7B,GANA,EAAW,EACX,GAAW,EAAO,GAClB,EAAO,EAAW,EAAO,GACzB,EAAM,GAAW,UAGb,IAAU,IAAU,GAAS,EAAM,KAAU,GAIjD,IAAI,GACJ,GAAI,GAAS,OAAO,UAAU,eAAe,KAAK,EAAO,GAEvD,EAAe,EAAM,OAChB,CACL,GAAI,GAAO,GAAG,UAAU,GACxB,GAAI,CAAC,EAAK,iBAAkB,CAC1B,EAAU,GAAQ,GACd,GAAO,GAAM,GAAQ,GACzB,SAKF,GAAI,GAAa,KACjB,GAAI,CAAC,GAAW,CACd,GAAI,GAAK,EAAK,IAAI,SAAS,IAAM,IAAM,EAAK,IAAI,SAAS,IACzD,AAAI,EAAU,eAAe,IAC3B,GAAa,EAAU,IAG3B,AAAI,IAAe,MACjB,IAAG,SAAS,GACZ,EAAa,GAAG,aAAa,IAE/B,EAAe,GAAW,QAAQ,EAAU,GAExC,GAAO,GAAM,GAAQ,GACpB,IAAW,GAAU,GAAM,GAIlC,EAAI,GAAW,QAAQ,EAAc,EAAE,MAAM,IAC7C,KAGF,MAAI,IAAO,GAAM,GAAY,GAEtB,GAIT,GAAQ,SAAW,SAAkB,EAAG,EAAO,EAAI,CASjD,GARI,MAAO,IAAO,YAChB,GAAK,GAAc,GACnB,EAAQ,MAIV,EAAI,GAAW,QAAQ,GAEnB,GAAS,OAAO,UAAU,eAAe,KAAK,EAAO,GACvD,MAAO,SAAQ,SAAS,EAAG,KAAK,KAAM,KAAM,EAAM,KAGpD,GAAI,GAAW,EACX,EAAY,GACZ,EAAY,GAGZ,EAEA,EAEA,EAEA,EAEJ,IAEA,YAAiB,CAEf,GAAI,GAAI,GAAY,KAAK,GACzB,EAAM,EAAE,GAAG,OACX,EAAU,EAAE,GACZ,EAAO,EAAE,GACT,EAAW,GAGX,AAAI,IAAa,CAAC,EAAU,GAC1B,GAAG,MAAM,EAAM,SAAS,EAAK,CAC3B,GAAI,EAAK,MAAO,GAAG,GACnB,EAAU,GAAQ,GAClB,MAGF,QAAQ,SAAS,GAMrB,YAAgB,CAEd,GAAI,GAAO,EAAE,OACX,MAAI,IAAO,GAAM,GAAY,GACtB,EAAG,KAAM,GAIlB,GAAW,UAAY,EACvB,GAAI,GAAS,GAAW,KAAK,GAO7B,MANA,GAAW,EACX,GAAW,EAAO,GAClB,EAAO,EAAW,EAAO,GACzB,EAAM,GAAW,UAGb,EAAU,IAAU,GAAS,EAAM,KAAU,EACxC,QAAQ,SAAS,GAGtB,GAAS,OAAO,UAAU,eAAe,KAAK,EAAO,GAEhD,EAAgB,EAAM,IAGxB,GAAG,MAAM,EAAM,GAGxB,WAAiB,EAAK,EAAM,CAC1B,GAAI,EAAK,MAAO,GAAG,GAGnB,GAAI,CAAC,EAAK,iBACR,SAAU,GAAQ,GACd,GAAO,GAAM,GAAQ,GAClB,QAAQ,SAAS,GAM1B,GAAI,CAAC,GAAW,CACd,GAAI,GAAK,EAAK,IAAI,SAAS,IAAM,IAAM,EAAK,IAAI,SAAS,IACzD,GAAI,EAAU,eAAe,GAC3B,MAAO,GAAU,KAAM,EAAU,GAAK,GAG1C,GAAG,KAAK,EAAM,SAAS,EAAK,CAC1B,GAAI,EAAK,MAAO,GAAG,GAEnB,GAAG,SAAS,EAAM,SAAS,EAAK,EAAQ,CACtC,AAAK,IAAW,GAAU,GAAM,GAChC,EAAU,EAAK,OAKrB,WAAmB,EAAK,EAAQ,EAAM,CACpC,GAAI,EAAK,MAAO,GAAG,GAEnB,GAAI,GAAe,GAAW,QAAQ,EAAU,GAChD,AAAI,GAAO,GAAM,GAAQ,GACzB,EAAgB,GAGlB,WAAyB,EAAc,CAErC,EAAI,GAAW,QAAQ,EAAc,EAAE,MAAM,IAC7C,QC5SJ,sBAAO,QAAU,GACjB,GAAS,SAAW,GACpB,GAAS,KAAO,GAChB,GAAS,aAAe,GACxB,GAAS,YAAc,GACvB,GAAS,cAAgB,GAEzB,GAAI,IAAK,QAAQ,MACb,GAAe,GAAG,SAClB,GAAmB,GAAG,aAEtB,GAAU,QAAQ,QAClB,GAAK,YAAY,KAAK,IACtB,GAAM,KAEV,YAAmB,EAAI,CACrB,MAAO,IAAM,EAAG,UAAY,YAC1B,GAAG,OAAS,SACZ,EAAG,OAAS,UACZ,EAAG,OAAS,gBAIhB,YAAmB,EAAG,EAAO,EAAI,CAC/B,GAAI,GACF,MAAO,IAAa,EAAG,EAAO,GAGhC,AAAI,MAAO,IAAU,YACnB,GAAK,EACL,EAAQ,MAEV,GAAa,EAAG,EAAO,SAAU,EAAI,EAAQ,CAC3C,AAAI,GAAS,GACX,GAAI,SAAS,EAAG,EAAO,GAEvB,EAAG,EAAI,KAKb,YAAuB,EAAG,EAAO,CAC/B,GAAI,GACF,MAAO,IAAiB,EAAG,GAG7B,GAAI,CACF,MAAO,IAAiB,EAAG,SACpB,EAAP,CACA,GAAI,GAAS,GACX,MAAO,IAAI,aAAa,EAAG,GAE3B,KAAM,IAKZ,aAAwB,CACtB,GAAG,SAAW,GACd,GAAG,aAAe,GAGpB,aAA0B,CACxB,GAAG,SAAW,GACd,GAAG,aAAe,MChEpB,sBAAO,QAAU,SAAU,EAAI,EAAI,CAE/B,OADI,GAAM,GACD,EAAI,EAAG,EAAI,EAAG,OAAQ,IAAK,CAChC,GAAI,GAAI,EAAG,EAAG,GAAI,GAClB,AAAI,GAAQ,GAAI,EAAI,KAAK,MAAM,EAAK,GAC/B,EAAI,KAAK,GAElB,MAAO,IAGX,GAAI,IAAU,MAAM,SAAW,SAAU,EAAI,CACzC,MAAO,QAAO,UAAU,SAAS,KAAK,KAAQ,oBCXlD,gCACA,GAAO,QAAU,GACjB,YAAkB,EAAG,EAAG,EAAK,CAC3B,AAAI,YAAa,SAAQ,GAAI,GAAW,EAAG,IACvC,YAAa,SAAQ,GAAI,GAAW,EAAG,IAE3C,GAAI,GAAI,GAAM,EAAG,EAAG,GAEpB,MAAO,IAAK,CACV,MAAO,EAAE,GACT,IAAK,EAAE,GACP,IAAK,EAAI,MAAM,EAAG,EAAE,IACpB,KAAM,EAAI,MAAM,EAAE,GAAK,EAAE,OAAQ,EAAE,IACnC,KAAM,EAAI,MAAM,EAAE,GAAK,EAAE,SAI7B,YAAoB,EAAK,EAAK,CAC5B,GAAI,GAAI,EAAI,MAAM,GAClB,MAAO,GAAI,EAAE,GAAK,KAGpB,GAAS,MAAQ,GACjB,YAAe,EAAG,EAAG,EAAK,CACxB,GAAI,GAAM,EAAK,EAAM,EAAO,EACxB,EAAK,EAAI,QAAQ,GACjB,EAAK,EAAI,QAAQ,EAAG,EAAK,GACzB,EAAI,EAER,GAAI,GAAM,GAAK,EAAK,EAAG,CACrB,GAAG,IAAI,EACL,MAAO,CAAC,EAAI,GAKd,IAHA,EAAO,GACP,EAAO,EAAI,OAEJ,GAAK,GAAK,CAAC,GAChB,AAAI,GAAK,EACP,GAAK,KAAK,GACV,EAAK,EAAI,QAAQ,EAAG,EAAI,IACnB,AAAI,EAAK,QAAU,EACxB,EAAS,CAAE,EAAK,MAAO,GAEvB,GAAM,EAAK,MACP,EAAM,GACR,GAAO,EACP,EAAQ,GAGV,EAAK,EAAI,QAAQ,EAAG,EAAI,IAG1B,EAAI,EAAK,GAAM,GAAM,EAAI,EAAK,EAGhC,AAAI,EAAK,QACP,GAAS,CAAE,EAAM,IAIrB,MAAO,MC5DT,sBAAI,IAAY,KACZ,GAAW,KAEf,GAAO,QAAU,GAEjB,GAAI,IAAW,UAAU,KAAK,SAAS,KACnC,GAAU,SAAS,KAAK,SAAS,KACjC,GAAW,UAAU,KAAK,SAAS,KACnC,GAAW,UAAU,KAAK,SAAS,KACnC,GAAY,WAAW,KAAK,SAAS,KAEzC,YAAiB,EAAK,CACpB,MAAO,UAAS,EAAK,KAAO,EACxB,SAAS,EAAK,IACd,EAAI,WAAW,GAGrB,YAAsB,EAAK,CACzB,MAAO,GAAI,MAAM,QAAQ,KAAK,IACnB,MAAM,OAAO,KAAK,IAClB,MAAM,OAAO,KAAK,IAClB,MAAM,OAAO,KAAK,IAClB,MAAM,OAAO,KAAK,IAG/B,YAAwB,EAAK,CAC3B,MAAO,GAAI,MAAM,IAAU,KAAK,MACrB,MAAM,IAAS,KAAK,KACpB,MAAM,IAAU,KAAK,KACrB,MAAM,IAAU,KAAK,KACrB,MAAM,IAAW,KAAK,KAOnC,YAAyB,EAAK,CAC5B,GAAI,CAAC,EACH,MAAO,CAAC,IAEV,GAAI,GAAQ,GACR,EAAI,GAAS,IAAK,IAAK,GAE3B,GAAI,CAAC,EACH,MAAO,GAAI,MAAM,KAEnB,GAAI,GAAM,EAAE,IACR,EAAO,EAAE,KACT,EAAO,EAAE,KACT,EAAI,EAAI,MAAM,KAElB,EAAE,EAAE,OAAO,IAAM,IAAM,EAAO,IAC9B,GAAI,GAAY,GAAgB,GAChC,MAAI,GAAK,QACP,GAAE,EAAE,OAAO,IAAM,EAAU,QAC3B,EAAE,KAAK,MAAM,EAAG,IAGlB,EAAM,KAAK,MAAM,EAAO,GAEjB,EAGT,YAAmB,EAAK,CACtB,MAAK,GASD,GAAI,OAAO,EAAG,KAAO,MACvB,GAAM,SAAW,EAAI,OAAO,IAGvB,GAAO,GAAa,GAAM,IAAM,IAAI,KAZlC,GAmBX,YAAiB,EAAK,CACpB,MAAO,IAAM,EAAM,IAErB,YAAkB,EAAI,CACpB,MAAO,SAAS,KAAK,GAGvB,YAAa,EAAG,EAAG,CACjB,MAAO,IAAK,EAEd,YAAa,EAAG,EAAG,CACjB,MAAO,IAAK,EAGd,YAAgB,EAAK,EAAO,CAC1B,GAAI,GAAa,GAEb,EAAI,GAAS,IAAK,IAAK,GAC3B,GAAI,CAAC,GAAK,MAAM,KAAK,EAAE,KAAM,MAAO,CAAC,GAErC,GAAI,GAAoB,iCAAiC,KAAK,EAAE,MAC5D,EAAkB,uCAAuC,KAAK,EAAE,MAChE,EAAa,GAAqB,EAClC,EAAY,EAAE,KAAK,QAAQ,MAAQ,EACvC,GAAI,CAAC,GAAc,CAAC,EAElB,MAAI,GAAE,KAAK,MAAM,SACf,GAAM,EAAE,IAAM,IAAM,EAAE,KAAO,GAAW,EAAE,KACnC,GAAO,IAET,CAAC,GAGV,GAAI,GACJ,GAAI,EACF,EAAI,EAAE,KAAK,MAAM,gBAEjB,EAAI,GAAgB,EAAE,MAClB,EAAE,SAAW,GAEf,GAAI,GAAO,EAAE,GAAI,IAAO,IAAI,IACxB,EAAE,SAAW,GAAG,CAClB,GAAI,GAAO,EAAE,KAAK,OACd,GAAO,EAAE,KAAM,IACf,CAAC,IACL,MAAO,GAAK,IAAI,SAAS,EAAG,CAC1B,MAAO,GAAE,IAAM,EAAE,GAAK,IAU9B,GAAI,GAAM,EAAE,IACR,EAAO,EAAE,KAAK,OACd,GAAO,EAAE,KAAM,IACf,CAAC,IAED,EAEJ,GAAI,EAAY,CACd,GAAI,GAAI,GAAQ,EAAE,IACd,EAAI,GAAQ,EAAE,IACd,EAAQ,KAAK,IAAI,EAAE,GAAG,OAAQ,EAAE,GAAG,QACnC,EAAO,EAAE,QAAU,EACnB,KAAK,IAAI,GAAQ,EAAE,KACnB,EACA,EAAO,GACP,EAAU,EAAI,EAClB,AAAI,GACF,IAAQ,GACR,EAAO,IAET,GAAI,GAAM,EAAE,KAAK,IAEjB,EAAI,GAEJ,OAAS,GAAI,EAAG,EAAK,EAAG,GAAI,GAAK,EAAM,CACrC,GAAI,GACJ,GAAI,EACF,EAAI,OAAO,aAAa,GACpB,IAAM,MACR,GAAI,YAEN,EAAI,OAAO,GACP,EAAK,CACP,GAAI,GAAO,EAAQ,EAAE,OACrB,GAAI,EAAO,EAAG,CACZ,GAAI,GAAI,GAAI,OAAM,EAAO,GAAG,KAAK,KACjC,AAAI,EAAI,EACN,EAAI,IAAM,EAAI,EAAE,MAAM,GAEtB,EAAI,EAAI,GAIhB,EAAE,KAAK,QAGT,GAAI,GAAU,EAAG,SAAS,EAAI,CAAE,MAAO,IAAO,EAAI,MAGpD,OAAS,GAAI,EAAG,EAAI,EAAE,OAAQ,IAC5B,OAAS,GAAI,EAAG,EAAI,EAAK,OAAQ,IAAK,CACpC,GAAI,GAAY,EAAM,EAAE,GAAK,EAAK,GAClC,AAAI,EAAC,GAAS,GAAc,IAC1B,EAAW,KAAK,GAItB,MAAO,MCtMT,sBAAO,QAAU,GACjB,GAAU,UAAY,GAEtB,GAAI,IAAO,CAAE,IAAK,KAClB,GAAI,CACF,GAAO,QAAQ,cACR,EAAP,EAEF,GAAI,IAAW,GAAU,SAAW,GAAU,SAAW,GACrD,GAAS,KAET,GAAU,CACZ,IAAK,CAAE,KAAM,YAAa,MAAO,aACjC,IAAK,CAAE,KAAM,MAAO,MAAO,MAC3B,IAAK,CAAE,KAAM,MAAO,MAAO,MAC3B,IAAK,CAAE,KAAM,MAAO,MAAO,MAC3B,IAAK,CAAE,KAAM,MAAO,MAAO,MAKzB,GAAQ,OAGR,GAAO,GAAQ,KAKf,GAAa,0CAIb,GAAe,0BAGf,GAAa,GAAQ,mBAGzB,YAAkB,EAAG,CACnB,MAAO,GAAE,MAAM,IAAI,OAAO,SAAU,EAAK,EAAG,CAC1C,SAAI,GAAK,GACF,GACN,IAIL,GAAI,IAAa,MAEjB,GAAU,OAAS,GACnB,YAAiB,EAAS,EAAS,CACjC,SAAU,GAAW,GACd,SAAU,EAAG,EAAG,EAAM,CAC3B,MAAO,IAAU,EAAG,EAAS,IAIjC,YAAc,EAAG,EAAG,CAClB,EAAI,GAAK,GACT,EAAI,GAAK,GACT,GAAI,GAAI,GACR,cAAO,KAAK,GAAG,QAAQ,SAAU,EAAG,CAClC,EAAE,GAAK,EAAE,KAEX,OAAO,KAAK,GAAG,QAAQ,SAAU,EAAG,CAClC,EAAE,GAAK,EAAE,KAEJ,EAGT,GAAU,SAAW,SAAU,EAAK,CAClC,GAAI,CAAC,GAAO,CAAC,OAAO,KAAK,GAAK,OAAQ,MAAO,IAE7C,GAAI,GAAO,GAEP,EAAI,SAAoB,EAAG,EAAS,EAAS,CAC/C,MAAO,GAAK,UAAU,EAAG,EAAS,GAAI,EAAK,KAG7C,SAAE,UAAY,SAAoB,EAAS,EAAS,CAClD,MAAO,IAAI,GAAK,UAAU,EAAS,GAAI,EAAK,KAGvC,GAGT,GAAU,SAAW,SAAU,EAAK,CAClC,MAAI,CAAC,GAAO,CAAC,OAAO,KAAK,GAAK,OAAe,GACtC,GAAU,SAAS,GAAK,WAGjC,YAAoB,EAAG,EAAS,EAAS,CACvC,GAAI,MAAO,IAAY,SACrB,KAAM,IAAI,WAAU,gCAMtB,MAHK,IAAS,GAAU,IAGpB,CAAC,EAAQ,WAAa,EAAQ,OAAO,KAAO,IACvC,GAIL,EAAQ,SAAW,GAAW,IAAM,GAEjC,GAAI,IAAU,EAAS,GAAS,MAAM,GAG/C,YAAoB,EAAS,EAAS,CACpC,GAAI,CAAE,gBAAgB,KACpB,MAAO,IAAI,IAAU,EAAS,GAGhC,GAAI,MAAO,IAAY,SACrB,KAAM,IAAI,WAAU,gCAGtB,AAAK,GAAS,GAAU,IACxB,EAAU,EAAQ,OAGd,GAAK,MAAQ,KACf,GAAU,EAAQ,MAAM,GAAK,KAAK,KAAK,MAGzC,KAAK,QAAU,EACf,KAAK,IAAM,GACX,KAAK,QAAU,EACf,KAAK,OAAS,KACd,KAAK,OAAS,GACd,KAAK,QAAU,GACf,KAAK,MAAQ,GAGb,KAAK,OAGP,GAAU,UAAU,MAAQ,UAAY,GAExC,GAAU,UAAU,KAAO,GAC3B,aAAiB,CAEf,GAAI,MAAK,MAET,IAAI,GAAU,KAAK,QACf,EAAU,KAAK,QAGnB,GAAI,CAAC,EAAQ,WAAa,EAAQ,OAAO,KAAO,IAAK,CACnD,KAAK,QAAU,GACf,OAEF,GAAI,CAAC,EAAS,CACZ,KAAK,MAAQ,GACb,OAIF,KAAK,cAGL,GAAI,GAAM,KAAK,QAAU,KAAK,cAE9B,AAAI,EAAQ,OAAO,MAAK,MAAQ,QAAQ,OAExC,KAAK,MAAM,KAAK,QAAS,GAOzB,EAAM,KAAK,UAAY,EAAI,IAAI,SAAU,EAAG,CAC1C,MAAO,GAAE,MAAM,MAGjB,KAAK,MAAM,KAAK,QAAS,GAGzB,EAAM,EAAI,IAAI,SAAU,EAAG,EAAI,EAAK,CAClC,MAAO,GAAE,IAAI,KAAK,MAAO,OACxB,MAEH,KAAK,MAAM,KAAK,QAAS,GAGzB,EAAM,EAAI,OAAO,SAAU,EAAG,CAC5B,MAAO,GAAE,QAAQ,MAAW,KAG9B,KAAK,MAAM,KAAK,QAAS,GAEzB,KAAK,IAAM,GAGb,GAAU,UAAU,YAAc,GAClC,aAAwB,CACtB,GAAI,GAAU,KAAK,QACf,EAAS,GACT,EAAU,KAAK,QACf,EAAe,EAEnB,GAAI,GAAQ,SAEZ,QAAS,GAAI,EAAG,EAAI,EAAQ,OACxB,EAAI,GAAK,EAAQ,OAAO,KAAO,IAC/B,IACF,EAAS,CAAC,EACV,IAGF,AAAI,GAAc,MAAK,QAAU,EAAQ,OAAO,IAChD,KAAK,OAAS,GAahB,GAAU,YAAc,SAAU,EAAS,EAAS,CAClD,MAAO,IAAY,EAAS,IAG9B,GAAU,UAAU,YAAc,GAElC,YAAsB,EAAS,EAAS,CAYtC,GAXK,GACH,CAAI,eAAgB,IAClB,EAAU,KAAK,QAEf,EAAU,IAId,EAAU,MAAO,IAAY,YACzB,KAAK,QAAU,EAEf,MAAO,IAAY,YACrB,KAAM,IAAI,WAAU,qBAGtB,MAAI,GAAQ,SACV,CAAC,EAAQ,MAAM,UAER,CAAC,GAGH,GAAO,GAchB,GAAU,UAAU,MAAQ,GAC5B,GAAI,IAAW,GACf,YAAgB,EAAS,EAAO,CAC9B,GAAI,EAAQ,OAAS,KAAO,GAC1B,KAAM,IAAI,WAAU,uBAGtB,GAAI,GAAU,KAAK,QAGnB,GAAI,CAAC,EAAQ,YAAc,IAAY,KAAM,MAAO,IACpD,GAAI,IAAY,GAAI,MAAO,GAE3B,GAAI,GAAK,GACL,EAAW,CAAC,CAAC,EAAQ,OACrB,EAAW,GAEX,EAAmB,GACnB,EAAgB,GAChB,EACA,EAAU,GACV,EAAe,GACf,EAAa,GAGb,EAAe,EAAQ,OAAO,KAAO,IAAM,GAE7C,EAAQ,IAAM,iCACd,UACE,EAAO,KAEX,YAA2B,CACzB,GAAI,EAAW,CAGb,OAAQ,OACD,IACH,GAAM,GACN,EAAW,GACb,UACK,IACH,GAAM,GACN,EAAW,GACb,cAEE,GAAM,KAAO,EACf,MAEF,EAAK,MAAM,uBAAwB,EAAW,GAC9C,EAAY,IAIhB,OAAS,GAAI,EAAG,EAAM,EAAQ,OAAQ,EACjC,EAAI,GAAS,GAAI,EAAQ,OAAO,IACjC,IAAK,CAIP,GAHA,KAAK,MAAM,cAAgB,EAAS,EAAG,EAAI,GAGvC,GAAY,GAAW,GAAI,CAC7B,GAAM,KAAO,EACb,EAAW,GACX,SAGF,OAAQ,OACD,IAGH,MAAO,OAEJ,KACH,IACA,EAAW,GACb,aAIK,QACA,QACA,QACA,QACA,IAKH,GAJA,KAAK,MAAM,4BAA8B,EAAS,EAAG,EAAI,GAIrD,EAAS,CACX,KAAK,MAAM,cACP,IAAM,KAAO,IAAM,EAAa,GAAG,GAAI,KAC3C,GAAM,EACN,SAMF,EAAK,MAAM,yBAA0B,GACrC,IACA,EAAY,EAIR,EAAQ,OAAO,IACrB,aAEK,IACH,GAAI,EAAS,CACX,GAAM,IACN,SAGF,GAAI,CAAC,EAAW,CACd,GAAM,MACN,SAGF,EAAiB,KAAK,CACpB,KAAM,EACN,MAAO,EAAI,EACX,QAAS,EAAG,OACZ,KAAM,GAAQ,GAAW,KACzB,MAAO,GAAQ,GAAW,QAG5B,GAAM,IAAc,IAAM,YAAc,MACxC,KAAK,MAAM,eAAgB,EAAW,GACtC,EAAY,GACd,aAEK,IACH,GAAI,GAAW,CAAC,EAAiB,OAAQ,CACvC,GAAM,MACN,SAGF,IACA,EAAW,GACX,GAAI,GAAK,EAAiB,MAG1B,GAAM,EAAG,MACL,EAAG,OAAS,KACd,EAAc,KAAK,GAErB,EAAG,MAAQ,EAAG,OAChB,aAEK,IACH,GAAI,GAAW,CAAC,EAAiB,QAAU,EAAU,CACnD,GAAM,MACN,EAAW,GACX,SAGF,IACA,GAAM,IACR,aAGK,IAIH,GAFA,IAEI,EAAS,CACX,GAAM,KAAO,EACb,SAGF,EAAU,GACV,EAAa,EACb,EAAe,EAAG,OAClB,GAAM,EACR,aAEK,IAKH,GAAI,IAAM,EAAa,GAAK,CAAC,EAAS,CACpC,GAAM,KAAO,EACb,EAAW,GACX,SAKF,GAAI,EAAS,CAQX,GAAI,GAAK,EAAQ,UAAU,EAAa,EAAG,GAC3C,GAAI,CACF,OAAO,IAAM,EAAK,WACX,GAAP,CAEA,GAAI,GAAK,KAAK,MAAM,EAAI,IACxB,EAAK,EAAG,OAAO,EAAG,GAAgB,MAAQ,EAAG,GAAK,MAClD,EAAW,GAAY,EAAG,GAC1B,EAAU,GACV,UAKJ,EAAW,GACX,EAAU,GACV,GAAM,EACR,iBAIE,IAEA,AAAI,EAEF,EAAW,GACF,GAAW,IACjB,CAAE,KAAM,KAAO,IAClB,IAAM,MAGR,GAAM,GAwBZ,IAjBI,GAKF,GAAK,EAAQ,OAAO,EAAa,GACjC,EAAK,KAAK,MAAM,EAAI,IACpB,EAAK,EAAG,OAAO,EAAG,GAAgB,MAAQ,EAAG,GAC7C,EAAW,GAAY,EAAG,IASvB,EAAK,EAAiB,MAAO,EAAI,EAAK,EAAiB,MAAO,CACjE,GAAI,GAAO,EAAG,MAAM,EAAG,QAAU,EAAG,KAAK,QACzC,KAAK,MAAM,eAAgB,EAAI,GAE/B,EAAO,EAAK,QAAQ,4BAA6B,SAAU,GAAG,GAAI,GAAI,CACpE,MAAK,KAEH,IAAK,MASA,GAAK,GAAK,GAAK,MAGxB,KAAK,MAAM;AAAA,OAAkB,EAAM,EAAM,EAAI,GAC7C,GAAI,GAAI,EAAG,OAAS,IAAM,GACtB,EAAG,OAAS,IAAM,GAClB,KAAO,EAAG,KAEd,EAAW,GACX,EAAK,EAAG,MAAM,EAAG,EAAG,SAAW,EAAI,MAAQ,EAI7C,IACI,GAEF,IAAM,QAKR,GAAI,GAAkB,GACtB,OAAQ,EAAG,OAAO,QACX,QACA,QACA,IAAK,EAAkB,GAQ9B,OAAS,GAAI,EAAc,OAAS,EAAG,EAAI,GAAI,IAAK,CAClD,GAAI,GAAK,EAAc,GAEnB,EAAW,EAAG,MAAM,EAAG,EAAG,SAC1B,EAAU,EAAG,MAAM,EAAG,QAAS,EAAG,MAAQ,GAC1C,EAAS,EAAG,MAAM,EAAG,MAAQ,EAAG,EAAG,OACnC,EAAU,EAAG,MAAM,EAAG,OAE1B,GAAU,EAKV,GAAI,GAAmB,EAAS,MAAM,KAAK,OAAS,EAChD,EAAa,EACjB,IAAK,EAAI,EAAG,EAAI,EAAkB,IAChC,EAAa,EAAW,QAAQ,WAAY,IAE9C,EAAU,EAEV,GAAI,GAAS,GACb,AAAI,IAAY,IAAM,IAAU,IAC9B,GAAS,KAEX,GAAI,GAAQ,EAAW,EAAU,EAAU,EAAS,EACpD,EAAK,EAeP,GATI,IAAO,IAAM,GACf,GAAK,QAAU,GAGb,GACF,GAAK,EAAe,GAIlB,IAAU,GACZ,MAAO,CAAC,EAAI,GAMd,GAAI,CAAC,EACH,MAAO,IAAa,GAGtB,GAAI,GAAQ,EAAQ,OAAS,IAAM,GACnC,GAAI,CACF,GAAI,IAAS,GAAI,QAAO,IAAM,EAAK,IAAK,SACjC,GAAP,CAKA,MAAO,IAAI,QAAO,MAGpB,UAAO,MAAQ,EACf,GAAO,KAAO,EAEP,GAGT,GAAU,OAAS,SAAU,EAAS,EAAS,CAC7C,MAAO,IAAI,IAAU,EAAS,GAAW,IAAI,UAG/C,GAAU,UAAU,OAAS,GAC7B,aAAmB,CACjB,GAAI,KAAK,QAAU,KAAK,SAAW,GAAO,MAAO,MAAK,OAQtD,GAAI,GAAM,KAAK,IAEf,GAAI,CAAC,EAAI,OACP,YAAK,OAAS,GACP,KAAK,OAEd,GAAI,GAAU,KAAK,QAEf,EAAU,EAAQ,WAAa,GAC/B,EAAQ,IAAM,GACd,GACA,EAAQ,EAAQ,OAAS,IAAM,GAE/B,EAAK,EAAI,IAAI,SAAU,EAAS,CAClC,MAAO,GAAQ,IAAI,SAAU,EAAG,CAC9B,MAAQ,KAAM,GAAY,EACvB,MAAO,IAAM,SAAY,GAAa,GACvC,EAAE,OACH,KAAK,SACP,KAAK,KAIR,EAAK,OAAS,EAAK,KAGf,KAAK,QAAQ,GAAK,OAAS,EAAK,QAEpC,GAAI,CACF,KAAK,OAAS,GAAI,QAAO,EAAI,SACtB,EAAP,CACA,KAAK,OAAS,GAEhB,MAAO,MAAK,OAGd,GAAU,MAAQ,SAAU,EAAM,EAAS,EAAS,CAClD,EAAU,GAAW,GACrB,GAAI,GAAK,GAAI,IAAU,EAAS,GAChC,SAAO,EAAK,OAAO,SAAU,EAAG,CAC9B,MAAO,GAAG,MAAM,KAEd,EAAG,QAAQ,QAAU,CAAC,EAAK,QAC7B,EAAK,KAAK,GAEL,GAGT,GAAU,UAAU,MAAQ,GAC5B,YAAgB,EAAG,EAAS,CAI1B,GAHA,KAAK,MAAM,QAAS,EAAG,KAAK,SAGxB,KAAK,QAAS,MAAO,GACzB,GAAI,KAAK,MAAO,MAAO,KAAM,GAE7B,GAAI,IAAM,KAAO,EAAS,MAAO,GAEjC,GAAI,GAAU,KAAK,QAGnB,AAAI,GAAK,MAAQ,KACf,GAAI,EAAE,MAAM,GAAK,KAAK,KAAK,MAI7B,EAAI,EAAE,MAAM,IACZ,KAAK,MAAM,KAAK,QAAS,QAAS,GAOlC,GAAI,GAAM,KAAK,IACf,KAAK,MAAM,KAAK,QAAS,MAAO,GAGhC,GAAI,GACA,EACJ,IAAK,EAAI,EAAE,OAAS,EAAG,GAAK,GAC1B,GAAW,EAAE,GACT,IAFyB,IAE7B,CAGF,IAAK,EAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CAC/B,GAAI,GAAU,EAAI,GACd,EAAO,EACX,AAAI,EAAQ,WAAa,EAAQ,SAAW,GAC1C,GAAO,CAAC,IAEV,GAAI,GAAM,KAAK,SAAS,EAAM,EAAS,GACvC,GAAI,EACF,MAAI,GAAQ,WAAmB,GACxB,CAAC,KAAK,OAMjB,MAAI,GAAQ,WAAmB,GACxB,KAAK,OAQd,GAAU,UAAU,SAAW,SAAU,EAAM,EAAS,EAAS,CAC/D,GAAI,GAAU,KAAK,QAEnB,KAAK,MAAM,WACT,CAAE,KAAQ,KAAM,KAAM,EAAM,QAAS,IAEvC,KAAK,MAAM,WAAY,EAAK,OAAQ,EAAQ,QAE5C,OAAS,GAAK,EACV,EAAK,EACL,EAAK,EAAK,OACV,EAAK,EAAQ,OACV,EAAK,GAAQ,EAAK,EACnB,IAAM,IAAM,CAChB,KAAK,MAAM,iBACX,GAAI,GAAI,EAAQ,GACZ,EAAI,EAAK,GAMb,GAJA,KAAK,MAAM,EAAS,EAAG,GAInB,IAAM,GAAO,MAAO,GAExB,GAAI,IAAM,GAAU,CAClB,KAAK,MAAM,WAAY,CAAC,EAAS,EAAG,IAwBpC,GAAI,GAAK,EACL,EAAK,EAAK,EACd,GAAI,IAAO,EAAI,CAQb,IAPA,KAAK,MAAM,iBAOJ,EAAK,EAAI,IACd,GAAI,EAAK,KAAQ,KAAO,EAAK,KAAQ,MAClC,CAAC,EAAQ,KAAO,EAAK,GAAI,OAAO,KAAO,IAAM,MAAO,GAEzD,MAAO,GAIT,KAAO,EAAK,GAAI,CACd,GAAI,GAAY,EAAK,GAKrB,GAHA,KAAK,MAAM;AAAA,gBAAoB,EAAM,EAAI,EAAS,EAAI,GAGlD,KAAK,SAAS,EAAK,MAAM,GAAK,EAAQ,MAAM,GAAK,GACnD,YAAK,MAAM,wBAAyB,EAAI,EAAI,GAErC,GAIP,GAAI,IAAc,KAAO,IAAc,MACpC,CAAC,EAAQ,KAAO,EAAU,OAAO,KAAO,IAAM,CAC/C,KAAK,MAAM,gBAAiB,EAAM,EAAI,EAAS,GAC/C,MAIF,KAAK,MAAM,4CACX,IAOJ,MAAI,MAEF,MAAK,MAAM;AAAA,wBAA4B,EAAM,EAAI,EAAS,GACtD,IAAO,IAQf,GAAI,GAaJ,GAZA,AAAI,MAAO,IAAM,SACf,CAAI,EAAQ,OACV,EAAM,EAAE,gBAAkB,EAAE,cAE5B,EAAM,IAAM,EAEd,KAAK,MAAM,eAAgB,EAAG,EAAG,IAEjC,GAAM,EAAE,MAAM,GACd,KAAK,MAAM,gBAAiB,EAAG,EAAG,IAGhC,CAAC,EAAK,MAAO,GAenB,GAAI,IAAO,GAAM,IAAO,EAGtB,MAAO,GACF,GAAI,IAAO,EAIhB,MAAO,GACF,GAAI,IAAO,EAAI,CAKpB,GAAI,GAAgB,IAAO,EAAK,GAAO,EAAK,KAAQ,GACpD,MAAO,GAIT,KAAM,IAAI,OAAM,SAIlB,YAAuB,EAAG,CACxB,MAAO,GAAE,QAAQ,SAAU,MAG7B,YAAuB,EAAG,CACxB,MAAO,GAAE,QAAQ,2BAA4B,WCz5B/C,mBAAI,MAAO,QAAO,QAAW,WAE3B,GAAO,QAAU,SAAkB,EAAM,EAAW,CAClD,AAAI,GACF,GAAK,OAAS,EACd,EAAK,UAAY,OAAO,OAAO,EAAU,UAAW,CAClD,YAAa,CACX,MAAO,EACP,WAAY,GACZ,SAAU,GACV,aAAc,QAOtB,GAAO,QAAU,SAAkB,EAAM,EAAW,CAClD,GAAI,EAAW,CACb,EAAK,OAAS,EACd,GAAI,GAAW,UAAY,GAC3B,EAAS,UAAY,EAAU,UAC/B,EAAK,UAAY,GAAI,GACrB,EAAK,UAAU,YAAc,MCvBnC,sBAAI,CAGF,GAFI,GAAO,QAAQ,QAEf,MAAO,IAAK,UAAa,WAAY,KAAM,GAC/C,GAAO,QAAU,GAAK,eACf,EAAP,CAEA,GAAO,QAAU,KANb,SCDN,gCAEA,YAAe,EAAM,CACpB,MAAO,GAAK,OAAO,KAAO,IAG3B,YAAe,EAAM,CAEpB,GAAI,GAAgB,qEAChB,EAAS,EAAc,KAAK,GAC5B,EAAS,EAAO,IAAM,GACtB,EAAQ,QAAQ,GAAU,EAAO,OAAO,KAAO,KAGnD,MAAO,SAAQ,EAAO,IAAM,GAG7B,GAAO,QAAU,QAAQ,WAAa,QAAU,GAAQ,GACxD,GAAO,QAAQ,MAAQ,GACvB,GAAO,QAAQ,MAAQ,KCnBvB,iBAAQ,QAAU,GAClB,GAAQ,QAAU,GAClB,GAAQ,QAAU,GAClB,GAAQ,OAAS,GACjB,GAAQ,KAAO,GACf,GAAQ,UAAY,GACpB,GAAQ,gBAAkB,GAE1B,YAAkB,EAAK,EAAO,CAC5B,MAAO,QAAO,UAAU,eAAe,KAAK,EAAK,GAGnD,GAAI,IAAK,QAAQ,MACb,GAAO,QAAQ,QACf,GAAY,KACZ,GAAa,KACb,GAAY,GAAU,UAE1B,YAAoB,EAAG,EAAG,CACxB,MAAO,GAAE,cAAc,EAAG,MAG5B,YAAuB,EAAM,EAAS,CACpC,EAAK,OAAS,EAAQ,QAAU,GAE3B,MAAM,QAAQ,EAAK,SACtB,GAAK,OAAS,CAAC,EAAK,SAElB,EAAK,OAAO,QACd,GAAK,OAAS,EAAK,OAAO,IAAI,KAKlC,YAAoB,EAAS,CAC3B,GAAI,GAAW,KACf,GAAI,EAAQ,MAAM,MAAQ,MAAO,CAC/B,GAAI,GAAW,EAAQ,QAAQ,aAAc,IAC7C,EAAW,GAAI,IAAU,EAAU,CAAE,IAAK,KAG5C,MAAO,CACL,QAAS,GAAI,IAAU,EAAS,CAAE,IAAK,KACvC,SAAU,GAId,YAAkB,EAAM,EAAS,EAAS,CAKxC,GAJK,GACH,GAAU,IAGR,EAAQ,WAAa,AAAO,EAAQ,QAAQ,OAAvB,GAA6B,CACpD,GAAI,EAAQ,WACV,KAAM,IAAI,OAAM,mCAElB,EAAU,MAAQ,EAGpB,EAAK,OAAS,CAAC,CAAC,EAAQ,OACxB,EAAK,QAAU,EACf,EAAK,OAAS,EAAQ,SAAW,GACjC,EAAK,SAAW,CAAC,CAAC,EAAQ,SAC1B,EAAK,cAAgB,EAAQ,eAAiB,OAAO,OAAO,MAC5D,EAAK,OAAS,CAAC,CAAC,EAAQ,OACxB,EAAK,IAAM,CAAC,CAAC,EAAQ,IACrB,EAAK,KAAO,CAAC,CAAC,EAAQ,KACtB,EAAK,MAAQ,CAAC,CAAC,EAAQ,MACnB,EAAK,OACP,GAAK,KAAO,IACd,EAAK,KAAO,CAAC,CAAC,EAAQ,KACtB,EAAK,SAAW,CAAC,CAAC,EAAQ,SAC1B,EAAK,OAAS,CAAC,CAAC,EAAQ,OACxB,EAAK,OAAS,CAAC,CAAC,EAAQ,OACxB,EAAK,OAAS,CAAC,CAAC,EAAQ,OACxB,EAAK,KAAO,CAAC,CAAC,EAAQ,KACtB,EAAK,UAAY,CAAC,CAAC,EAAQ,UAC3B,EAAK,SAAW,CAAC,CAAC,EAAQ,SAC1B,EAAK,GAAK,EAAQ,IAAM,GAExB,EAAK,UAAY,EAAQ,WAAa,IACtC,EAAK,MAAQ,EAAQ,OAAS,OAAO,OAAO,MAC5C,EAAK,UAAY,EAAQ,WAAa,OAAO,OAAO,MACpD,EAAK,SAAW,EAAQ,UAAY,OAAO,OAAO,MAElD,GAAa,EAAM,GAEnB,EAAK,WAAa,GAClB,GAAI,GAAM,QAAQ,MAClB,AAAK,GAAQ,EAAS,OAGpB,GAAK,IAAM,GAAK,QAAQ,EAAQ,KAChC,EAAK,WAAa,EAAK,MAAQ,GAH/B,EAAK,IAAM,EAMb,EAAK,KAAO,EAAQ,MAAQ,GAAK,QAAQ,EAAK,IAAK,KACnD,EAAK,KAAO,GAAK,QAAQ,EAAK,MAC1B,QAAQ,WAAa,SACvB,GAAK,KAAO,EAAK,KAAK,QAAQ,MAAO,MAIvC,EAAK,OAAS,GAAW,EAAK,KAAO,EAAK,IAAM,GAAQ,EAAM,EAAK,KAC/D,QAAQ,WAAa,SACvB,GAAK,OAAS,EAAK,OAAO,QAAQ,MAAO,MAC3C,EAAK,QAAU,CAAC,CAAC,EAAQ,QAIzB,EAAQ,SAAW,GACnB,EAAQ,UAAY,GAEpB,EAAK,UAAY,GAAI,IAAU,EAAS,GACxC,EAAK,QAAU,EAAK,UAAU,QAGhC,YAAiB,EAAM,CAIrB,OAHI,GAAM,EAAK,SACX,EAAM,EAAM,GAAK,OAAO,OAAO,MAE1B,EAAI,EAAG,EAAI,EAAK,QAAQ,OAAQ,EAAI,EAAG,IAAM,CACpD,GAAI,GAAU,EAAK,QAAQ,GAC3B,GAAI,CAAC,GAAW,OAAO,KAAK,GAAS,SAAW,GAC9C,GAAI,EAAK,OAAQ,CAEf,GAAI,GAAU,EAAK,UAAU,QAAQ,GACrC,AAAI,EACF,EAAI,KAAK,GAET,EAAI,GAAW,QAEd,CAEL,GAAI,GAAI,OAAO,KAAK,GACpB,AAAI,EACF,EAAI,KAAK,MAAM,EAAK,GAEpB,EAAE,QAAQ,SAAU,EAAG,CACrB,EAAI,GAAK,MAYjB,GAPK,GACH,GAAM,OAAO,KAAK,IAEf,EAAK,QACR,GAAM,EAAI,KAAK,KAGb,EAAK,KAAM,CACb,OAAS,GAAI,EAAG,EAAI,EAAI,OAAQ,IAC9B,EAAI,GAAK,EAAK,MAAM,EAAI,IAE1B,AAAI,EAAK,OACP,GAAM,EAAI,OAAO,SAAU,EAAG,CAC5B,GAAI,GAAS,CAAE,MAAM,KAAK,GACtB,EAAI,EAAK,MAAM,IAAM,EAAK,MAAM,GAAQ,EAAM,IAClD,MAAI,IAAU,GACZ,GAAS,IAAM,OAAS,CAAC,MAAM,QAAQ,IAClC,KAKb,AAAI,EAAK,OAAO,QACd,GAAM,EAAI,OAAO,SAAS,EAAG,CAC3B,MAAO,CAAC,GAAU,EAAM,MAG5B,EAAK,MAAQ,EAGf,YAAe,EAAM,EAAG,CACtB,GAAI,GAAM,GAAQ,EAAM,GACpB,EAAI,EAAK,MAAM,GACf,EAAI,EACR,GAAI,EAAG,CACL,GAAI,GAAQ,IAAM,OAAS,MAAM,QAAQ,GACrC,EAAQ,EAAE,MAAM,MAAQ,IAO5B,GALA,AAAI,GAAS,CAAC,EACZ,GAAK,IACE,CAAC,GAAS,GACjB,GAAI,EAAE,MAAM,EAAG,KAEb,IAAM,EAAG,CACX,GAAI,GAAO,GAAQ,EAAM,GACzB,EAAK,UAAU,GAAQ,EAAK,UAAU,GACtC,EAAK,MAAM,GAAQ,EAAK,MAAM,IAIlC,MAAO,GAIT,YAAkB,EAAM,EAAG,CACzB,GAAI,GAAM,EACV,MAAI,GAAE,OAAO,KAAO,IAClB,EAAM,GAAK,KAAK,EAAK,KAAM,GACtB,AAAI,GAAW,IAAM,IAAM,GAChC,EAAM,EACD,AAAI,EAAK,WACd,EAAM,GAAK,QAAQ,EAAK,IAAK,GAE7B,EAAM,GAAK,QAAQ,GAGjB,QAAQ,WAAa,SACvB,GAAM,EAAI,QAAQ,MAAO,MAEpB,EAMT,YAAoB,EAAM,EAAM,CAC9B,MAAK,GAAK,OAAO,OAGV,EAAK,OAAO,KAAK,SAAS,EAAM,CACrC,MAAO,GAAK,QAAQ,MAAM,IAAS,CAAC,CAAE,GAAK,UAAY,EAAK,SAAS,MAAM,MAHpE,GAOX,YAA0B,EAAM,EAAM,CACpC,MAAK,GAAK,OAAO,OAGV,EAAK,OAAO,KAAK,SAAS,EAAM,CACrC,MAAO,CAAC,CAAE,GAAK,UAAY,EAAK,SAAS,MAAM,MAHxC,MCtOX,sBAAO,QAAU,GACjB,GAAS,SAAW,GAEpB,GAAI,IAAK,KACL,GAAY,KACZ,GAAY,GAAU,UACtB,GAAO,KAAqB,KAC5B,GAAO,QAAQ,QACf,GAAO,QAAQ,QACf,GAAS,QAAQ,UACjB,GAAa,KACb,GAAS,KACT,GAAU,GAAO,QACjB,GAAU,GAAO,QACjB,GAAkB,GAAO,gBACzB,GAAY,GAAO,UAEvB,YAAmB,EAAS,EAAS,CACnC,GAAI,MAAO,IAAY,YAAc,UAAU,SAAW,EACxD,KAAM,IAAI,WAAU;AAAA,sDAGtB,MAAO,IAAI,IAAS,EAAS,GAAS,MAGxC,YAAmB,EAAS,EAAS,CACnC,GAAI,CAAC,EACH,KAAM,IAAI,OAAM,wBAElB,GAAI,MAAO,IAAY,YAAc,UAAU,SAAW,EACxD,KAAM,IAAI,WAAU;AAAA,sDAGtB,GAAI,CAAE,gBAAgB,KACpB,MAAO,IAAI,IAAS,EAAS,GAI/B,GAFA,GAAQ,KAAM,EAAS,GAEnB,KAAK,UACP,MAAO,MAET,GAAI,GAAI,KAAK,UAAU,IAAI,OAC3B,KAAK,QAAU,GAAI,OAAM,GACzB,OAAS,GAAI,EAAG,EAAI,EAAG,IACrB,KAAK,SAAS,KAAK,UAAU,IAAI,GAAI,EAAG,IAE1C,KAAK,UAGP,GAAS,UAAU,QAAU,UAAY,CAEvC,GADA,GAAO,eAAgB,KACnB,KAAK,SAAU,CACjB,GAAI,GAAO,KACX,KAAK,QAAQ,QAAQ,SAAU,EAAU,EAAO,CAC9C,GAAI,GAAM,EAAK,QAAQ,GAAS,OAAO,OAAO,MAC9C,OAAS,KAAK,GACZ,GAAI,CACF,EAAI,EAAK,SAAS,GAClB,GAAI,GAAO,GAAG,aAAa,EAAG,EAAK,eACnC,EAAI,GAAQ,SACL,EAAP,CACA,GAAI,EAAG,UAAY,OACjB,EAAI,EAAK,SAAS,IAAM,OAExB,MAAM,MAKhB,GAAO,OAAO,OAIhB,GAAS,UAAU,SAAW,SAAU,EAAS,EAAO,EAAY,CAClE,GAAO,eAAgB,KAIvB,OADI,GAAI,EACD,MAAO,GAAQ,IAAO,UAC3B,IAKF,GAAI,GACJ,OAAQ,OAED,GAAQ,OACX,KAAK,eAAe,EAAQ,KAAK,KAAM,GACvC,WAEG,GAGH,EAAS,KACT,cAMA,EAAS,EAAQ,MAAM,EAAG,GAAG,KAAK,KAClC,MAGJ,GAAI,GAAS,EAAQ,MAAM,GAGvB,EACJ,AAAI,IAAW,KACb,EAAO,IACA,KAAW,IAAW,GAAW,EAAQ,KAAK,QACjD,EAAC,GAAU,CAAC,GAAW,KACzB,GAAS,IAAM,GACjB,EAAO,GAIT,GAAI,GAAM,KAAK,SAAS,GAGxB,GAAI,IAAgB,KAAM,GAG1B,IAAI,GAAa,EAAO,KAAO,GAAU,SACzC,AAAI,EACF,KAAK,iBAAiB,EAAQ,EAAM,EAAK,EAAQ,EAAO,GAExD,KAAK,gBAAgB,EAAQ,EAAM,EAAK,EAAQ,EAAO,KAI3D,GAAS,UAAU,gBAAkB,SAAU,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,CAC3F,GAAI,GAAU,KAAK,SAAS,EAAK,GAGjC,GAAI,EAAC,EAWL,QANI,GAAK,EAAO,GACZ,EAAS,CAAC,CAAC,KAAK,UAAU,OAC1B,EAAU,EAAG,MACb,EAAQ,KAAK,KAAO,EAAQ,OAAO,KAAO,IAE1C,EAAiB,GACZ,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAI,GAAI,EAAQ,GAChB,GAAI,EAAE,OAAO,KAAO,KAAO,EAAO,CAChC,GAAI,GACJ,AAAI,GAAU,CAAC,EACb,EAAI,CAAC,EAAE,MAAM,GAEb,EAAI,EAAE,MAAM,GAEV,GACF,EAAe,KAAK,IAI1B,GAAI,GAAM,EAAe,OAEzB,GAAI,IAAQ,EAQZ,IAAI,EAAO,SAAW,GAAK,CAAC,KAAK,MAAQ,CAAC,KAAK,KAAM,CACnD,AAAK,KAAK,QAAQ,IAChB,MAAK,QAAQ,GAAS,OAAO,OAAO,OAEtC,OAAS,GAAI,EAAG,EAAI,EAAK,IAAM,CAC7B,GAAI,GAAI,EAAe,GACvB,AAAI,GACF,CAAI,EAAO,MAAM,MAAQ,IACvB,EAAI,EAAS,IAAM,EAEnB,EAAI,EAAS,GAGb,EAAE,OAAO,KAAO,KAAO,CAAC,KAAK,SAC/B,GAAI,GAAK,KAAK,KAAK,KAAM,IAE3B,KAAK,WAAW,EAAO,GAGzB,OAKF,EAAO,QACP,OAAS,GAAI,EAAG,EAAI,EAAK,IAAM,CAC7B,GAAI,GAAI,EAAe,GACnB,EACJ,AAAI,EACF,EAAa,CAAC,EAAQ,GAEtB,EAAa,CAAC,GAChB,KAAK,SAAS,EAAW,OAAO,GAAS,EAAO,OAKpD,GAAS,UAAU,WAAa,SAAU,EAAO,EAAG,CAClD,GAAI,IAAU,KAAM,GAGpB,IAAI,GAAM,KAAK,SAAS,GASxB,GAPI,KAAK,MACP,GAAI,KAAK,MAAM,IAEb,KAAK,UACP,GAAI,GAGF,MAAK,QAAQ,GAAO,GAGxB,IAAI,KAAK,MAAO,CACd,GAAI,GAAI,KAAK,MAAM,GACnB,GAAI,IAAM,OAAS,MAAM,QAAQ,GAC/B,OAGJ,KAAK,QAAQ,GAAO,GAAK,GAErB,KAAK,MACP,KAAK,MAAM,MAIf,GAAS,UAAU,mBAAqB,SAAU,EAAK,CAGrD,GAAI,KAAK,OACP,MAAO,MAAK,SAAS,EAAK,IAE5B,GAAI,GACA,EACA,EACJ,GAAI,CACF,EAAQ,KAAK,GAAG,UAAU,SACnB,EAAP,CACA,GAAI,EAAG,OAAS,SAEd,MAAO,MAIX,GAAI,GAAQ,GAAS,EAAM,iBAC3B,YAAK,SAAS,GAAO,EAIrB,AAAI,CAAC,GAAS,GAAS,CAAC,EAAM,cAC5B,KAAK,MAAM,GAAO,OAElB,EAAU,KAAK,SAAS,EAAK,IAExB,GAGT,GAAS,UAAU,SAAW,SAAU,EAAK,EAAY,CACvD,GAAI,GAEJ,GAAI,GAAc,CAAC,GAAQ,KAAK,SAAU,GACxC,MAAO,MAAK,mBAAmB,GAEjC,GAAI,GAAQ,KAAK,MAAO,GAAM,CAC5B,GAAI,GAAI,KAAK,MAAM,GACnB,GAAI,CAAC,GAAK,IAAM,OACd,MAAO,MAET,GAAI,MAAM,QAAQ,GAChB,MAAO,GAGX,GAAI,CACF,MAAO,MAAK,gBAAgB,EAAK,KAAK,GAAG,YAAY,UAC9C,EAAP,CACA,YAAK,cAAc,EAAK,GACjB,OAIX,GAAS,UAAU,gBAAkB,SAAU,EAAK,EAAS,CAI3D,GAAI,CAAC,KAAK,MAAQ,CAAC,KAAK,KACtB,OAAS,GAAI,EAAG,EAAI,EAAQ,OAAQ,IAAM,CACxC,GAAI,GAAI,EAAQ,GAChB,AAAI,IAAQ,IACV,EAAI,EAAM,EAEV,EAAI,EAAM,IAAM,EAClB,KAAK,MAAM,GAAK,GAIpB,YAAK,MAAM,GAAO,EAGX,GAGT,GAAS,UAAU,cAAgB,SAAU,EAAG,EAAI,CAElD,OAAQ,EAAG,UACJ,cACA,UACH,GAAI,GAAM,KAAK,SAAS,GAExB,GADA,KAAK,MAAM,GAAO,OACd,IAAQ,KAAK,OAAQ,CACvB,GAAI,GAAQ,GAAI,OAAM,EAAG,KAAO,gBAAkB,KAAK,KACvD,QAAM,KAAO,KAAK,IAClB,EAAM,KAAO,EAAG,KACV,EAER,UAEG,aACA,YACA,mBACA,UACH,KAAK,MAAM,KAAK,SAAS,IAAM,GAC/B,cAIA,GADA,KAAK,MAAM,KAAK,SAAS,IAAM,GAC3B,KAAK,OACP,KAAM,GACR,AAAK,KAAK,QACR,QAAQ,MAAM,aAAc,GAC9B,QAIN,GAAS,UAAU,iBAAmB,SAAU,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,CAE5F,GAAI,GAAU,KAAK,SAAS,EAAK,GAIjC,GAAI,EAAC,EAKL,IAAI,GAAwB,EAAO,MAAM,GACrC,EAAS,EAAS,CAAE,GAAW,GAC/B,EAAa,EAAO,OAAO,GAG/B,KAAK,SAAS,EAAY,EAAO,IAEjC,GAAI,GAAM,EAAQ,OACd,EAAQ,KAAK,SAAS,GAG1B,GAAI,KAAS,GAGb,OAAS,GAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,GAAI,GAAI,EAAQ,GAChB,GAAI,IAAE,OAAO,KAAO,KAAO,CAAC,KAAK,KAIjC,IAAI,GAAU,EAAO,OAAO,EAAQ,GAAI,GACxC,KAAK,SAAS,EAAS,EAAO,IAE9B,GAAI,GAAQ,EAAO,OAAO,EAAQ,GAAI,GACtC,KAAK,SAAS,EAAO,EAAO,QAIhC,GAAS,UAAU,eAAiB,SAAU,EAAQ,EAAO,CAG3D,GAAI,GAAS,KAAK,MAAM,GAMxB,GAJK,KAAK,QAAQ,IAChB,MAAK,QAAQ,GAAS,OAAO,OAAO,OAGlC,EAAC,EAGL,IAAI,GAAU,GAAW,IAAW,CAAC,KAAK,QAAS,CACjD,GAAI,GAAQ,UAAU,KAAK,GAC3B,AAAI,EAAO,OAAO,KAAO,IACvB,EAAS,GAAK,KAAK,KAAK,KAAM,GAE9B,GAAS,GAAK,QAAQ,KAAK,KAAM,GAC7B,GACF,IAAU,MAIhB,AAAI,QAAQ,WAAa,SACvB,GAAS,EAAO,QAAQ,MAAO,MAGjC,KAAK,WAAW,EAAO,KAIzB,GAAS,UAAU,MAAQ,SAAU,EAAG,CACtC,GAAI,GAAM,KAAK,SAAS,GACpB,EAAU,EAAE,MAAM,MAAQ,IAE9B,GAAI,EAAE,OAAS,KAAK,UAClB,MAAO,GAET,GAAI,CAAC,KAAK,MAAQ,GAAQ,KAAK,MAAO,GAAM,CAC1C,GAAI,GAAI,KAAK,MAAM,GAMnB,GAJI,MAAM,QAAQ,IAChB,GAAI,OAGF,CAAC,GAAW,IAAM,MACpB,MAAO,GAET,GAAI,GAAW,IAAM,OACnB,MAAO,GAMX,GAAI,GACA,EAAO,KAAK,UAAU,GAC1B,GAAI,CAAC,EAAM,CACT,GAAI,GACJ,GAAI,CACF,EAAQ,KAAK,GAAG,UAAU,SACnB,EAAP,CACA,GAAI,GAAO,GAAG,OAAS,UAAY,EAAG,OAAS,WAC7C,YAAK,UAAU,GAAO,GACf,GAIX,GAAI,GAAS,EAAM,iBACjB,GAAI,CACF,EAAO,KAAK,GAAG,SAAS,SACjB,EAAP,CACA,EAAO,MAGT,GAAO,EAIX,KAAK,UAAU,GAAO,EAEtB,GAAI,GAAI,GAMR,MALI,IACF,GAAI,EAAK,cAAgB,MAAQ,QAEnC,KAAK,MAAM,GAAO,KAAK,MAAM,IAAQ,EAEjC,GAAW,IAAM,OACZ,GAEF,GAGT,GAAS,UAAU,MAAQ,SAAU,EAAG,CACtC,MAAO,IAAO,KAAK,KAAM,IAG3B,GAAS,UAAU,SAAW,SAAU,EAAG,CACzC,MAAO,IAAO,QAAQ,KAAM,MCje9B,mBAKA,GAAO,QAAU,GACjB,YAAiB,EAAI,EAAI,CACvB,GAAI,GAAM,EAAI,MAAO,IAAO,GAAI,GAEhC,GAAI,MAAO,IAAO,WAChB,KAAM,IAAI,WAAU,yBAEtB,cAAO,KAAK,GAAI,QAAQ,SAAU,EAAG,CACnC,EAAQ,GAAK,EAAG,KAGX,EAEP,YAAmB,CAEjB,OADI,GAAO,GAAI,OAAM,UAAU,QACtB,EAAI,EAAG,EAAI,EAAK,OAAQ,IAC/B,EAAK,GAAK,UAAU,GAEtB,GAAI,GAAM,EAAG,MAAM,KAAM,GACrB,EAAK,EAAK,EAAK,OAAO,GAC1B,MAAI,OAAO,IAAQ,YAAc,IAAQ,GACvC,OAAO,KAAK,GAAI,QAAQ,SAAU,EAAG,CACnC,EAAI,GAAK,EAAG,KAGT,MC9BX,sBAAI,IAAS,KACb,GAAO,QAAU,GAAO,IACxB,GAAO,QAAQ,OAAS,GAAO,IAE/B,GAAK,MAAQ,GAAK,UAAY,CAC5B,OAAO,eAAe,SAAS,UAAW,OAAQ,CAChD,MAAO,UAAY,CACjB,MAAO,IAAK,OAEd,aAAc,KAGhB,OAAO,eAAe,SAAS,UAAW,aAAc,CACtD,MAAO,UAAY,CACjB,MAAO,IAAW,OAEpB,aAAc,OAIlB,YAAe,EAAI,CACjB,GAAI,GAAI,UAAY,CAClB,MAAI,GAAE,OAAe,EAAE,MACvB,GAAE,OAAS,GACJ,EAAE,MAAQ,EAAG,MAAM,KAAM,aAElC,SAAE,OAAS,GACJ,EAGT,YAAqB,EAAI,CACvB,GAAI,GAAI,UAAY,CAClB,GAAI,EAAE,OACJ,KAAM,IAAI,OAAM,EAAE,WACpB,SAAE,OAAS,GACJ,EAAE,MAAQ,EAAG,MAAM,KAAM,YAE9B,EAAO,EAAG,MAAQ,+BACtB,SAAE,UAAY,EAAO,sCACrB,EAAE,OAAS,GACJ,KCxCT,sBAAI,IAAS,KACT,GAAO,OAAO,OAAO,MACrB,GAAO,KAEX,GAAO,QAAU,GAAO,IAExB,YAAmB,EAAK,EAAI,CAC1B,MAAI,IAAK,GACP,IAAK,GAAK,KAAK,GACR,MAEP,IAAK,GAAO,CAAC,GACN,GAAQ,IAInB,YAAkB,EAAK,CACrB,MAAO,IAAK,YAAgB,CAC1B,GAAI,GAAM,GAAK,GACX,EAAM,EAAI,OACV,EAAO,GAAM,WAQjB,GAAI,CACF,OAAS,GAAI,EAAG,EAAI,EAAK,IACvB,EAAI,GAAG,MAAM,KAAM,UAErB,CACA,AAAI,EAAI,OAAS,EAGf,GAAI,OAAO,EAAG,GACd,QAAQ,SAAS,UAAY,CAC3B,EAAI,MAAM,KAAM,MAGlB,MAAO,IAAK,MAMpB,YAAgB,EAAM,CAIpB,OAHI,GAAS,EAAK,OACd,EAAQ,GAEH,EAAI,EAAG,EAAI,EAAQ,IAAK,EAAM,GAAK,EAAK,GACjD,MAAO,MCpDT,mBAwCA,GAAO,QAAU,GAEjB,GAAI,IAAK,KACL,GAAY,KACZ,GAAY,GAAU,UACtB,GAAW,KACX,GAAK,QAAQ,UAAU,aACvB,GAAO,QAAQ,QACf,GAAS,QAAQ,UACjB,GAAa,KACb,GAAW,KACX,GAAS,KACT,GAAU,GAAO,QACjB,GAAU,GAAO,QACjB,GAAW,KACX,GAAO,QAAQ,QACf,GAAkB,GAAO,gBACzB,GAAY,GAAO,UAEnB,GAAO,KAEX,YAAe,EAAS,EAAS,EAAI,CAInC,GAHI,MAAO,IAAY,YAAY,GAAK,EAAS,EAAU,IACtD,GAAS,GAAU,IAEpB,EAAQ,KAAM,CAChB,GAAI,EACF,KAAM,IAAI,WAAU,kCACtB,MAAO,IAAS,EAAS,GAG3B,MAAO,IAAI,GAAK,EAAS,EAAS,GAGpC,GAAK,KAAO,GACZ,GAAI,IAAW,GAAK,SAAW,GAAS,SAGxC,GAAK,KAAO,GAEZ,YAAiB,EAAQ,EAAK,CAC5B,GAAI,IAAQ,MAAQ,MAAO,IAAQ,SACjC,MAAO,GAKT,OAFI,GAAO,OAAO,KAAK,GACnB,EAAI,EAAK,OACN,KACL,EAAO,EAAK,IAAM,EAAI,EAAK,IAE7B,MAAO,GAGT,GAAK,SAAW,SAAU,EAAS,EAAU,CAC3C,GAAI,GAAU,GAAO,GAAI,GACzB,EAAQ,UAAY,GAEpB,GAAI,GAAI,GAAI,GAAK,EAAS,GACtB,EAAM,EAAE,UAAU,IAEtB,GAAI,CAAC,EACH,MAAO,GAET,GAAI,EAAI,OAAS,EACf,MAAO,GAET,OAAS,GAAI,EAAG,EAAI,EAAI,GAAG,OAAQ,IACjC,GAAI,MAAO,GAAI,GAAG,IAAO,SACvB,MAAO,GAGX,MAAO,IAGT,GAAK,KAAO,EACZ,GAAS,EAAM,IACf,WAAe,EAAS,EAAS,EAAI,CAMnC,GALI,MAAO,IAAY,YACrB,GAAK,EACL,EAAU,MAGR,GAAW,EAAQ,KAAM,CAC3B,GAAI,EACF,KAAM,IAAI,WAAU,kCACtB,MAAO,IAAI,IAAS,EAAS,GAG/B,GAAI,CAAE,gBAAgB,IACpB,MAAO,IAAI,GAAK,EAAS,EAAS,GAEpC,GAAQ,KAAM,EAAS,GACvB,KAAK,aAAe,GAGpB,GAAI,GAAI,KAAK,UAAU,IAAI,OAM3B,KAAK,QAAU,GAAI,OAAM,GAErB,MAAO,IAAO,YAChB,GAAK,GAAK,GACV,KAAK,GAAG,QAAS,GACjB,KAAK,GAAG,MAAO,SAAU,EAAS,CAChC,EAAG,KAAM,MAIb,GAAI,GAAO,KAOX,GANA,KAAK,YAAc,EAEnB,KAAK,WAAa,GAClB,KAAK,cAAgB,GACrB,KAAK,OAAS,GAEV,KAAK,UACP,MAAO,MAET,GAAI,IAAM,EACR,MAAO,KAGT,OADI,GAAO,GACF,EAAI,EAAG,EAAI,EAAG,IACrB,KAAK,SAAS,KAAK,UAAU,IAAI,GAAI,EAAG,GAAO,GAEjD,EAAO,GAEP,YAAiB,CACf,EAAE,EAAK,YACH,EAAK,aAAe,GACtB,CAAI,EACF,QAAQ,SAAS,UAAY,CAC3B,EAAK,YAGP,EAAK,YAMb,EAAK,UAAU,QAAU,UAAY,CAEnC,GADA,GAAO,eAAgB,IACnB,MAAK,QAGT,IAAI,KAAK,UAAY,CAAC,KAAK,aACzB,MAAO,MAAK,YAEd,GAAO,OAAO,MACd,KAAK,KAAK,MAAO,KAAK,SAGxB,EAAK,UAAU,UAAY,UAAY,CACrC,GAAI,KAAK,aACP,OAEF,KAAK,aAAe,GAEpB,GAAI,GAAI,KAAK,QAAQ,OACrB,GAAI,IAAM,EACR,MAAO,MAAK,UAGd,OADI,GAAO,KACF,EAAI,EAAG,EAAI,KAAK,QAAQ,OAAQ,IACvC,KAAK,aAAa,EAAG,GAEvB,YAAiB,CACf,AAAI,EAAE,GAAM,GACV,EAAK,YAIX,EAAK,UAAU,aAAe,SAAU,EAAO,EAAI,CACjD,GAAI,GAAW,KAAK,QAAQ,GAC5B,GAAI,CAAC,EACH,MAAO,KAET,GAAI,GAAQ,OAAO,KAAK,GACpB,EAAO,KACP,EAAI,EAAM,OAEd,GAAI,IAAM,EACR,MAAO,KAET,GAAI,GAAM,KAAK,QAAQ,GAAS,OAAO,OAAO,MAC9C,EAAM,QAAQ,SAAU,EAAG,EAAG,CAI5B,EAAI,EAAK,SAAS,GAClB,GAAG,SAAS,EAAG,EAAK,cAAe,SAAU,EAAI,EAAM,CACrD,AAAK,EAEA,AAAI,EAAG,UAAY,OACtB,EAAI,GAAK,GAET,EAAK,KAAK,QAAS,GAJnB,EAAI,GAAQ,GAMV,EAAE,GAAM,GACV,GAAK,QAAQ,GAAS,EACtB,UAMR,EAAK,UAAU,MAAQ,SAAU,EAAG,CAClC,MAAO,IAAO,KAAK,KAAM,IAG3B,EAAK,UAAU,SAAW,SAAU,EAAG,CACrC,MAAO,IAAO,QAAQ,KAAM,IAG9B,EAAK,UAAU,MAAQ,UAAY,CACjC,KAAK,QAAU,GACf,KAAK,KAAK,UAGZ,EAAK,UAAU,MAAQ,UAAY,CACjC,AAAK,KAAK,QACR,MAAK,OAAS,GACd,KAAK,KAAK,WAId,EAAK,UAAU,OAAS,UAAY,CAClC,GAAI,KAAK,OAAQ,CAGf,GAFA,KAAK,KAAK,UACV,KAAK,OAAS,GACV,KAAK,WAAW,OAAQ,CAC1B,GAAI,GAAK,KAAK,WAAW,MAAM,GAC/B,KAAK,WAAW,OAAS,EACzB,OAAS,GAAI,EAAG,EAAI,EAAG,OAAQ,IAAM,CACnC,GAAI,GAAI,EAAG,GACX,KAAK,WAAW,EAAE,GAAI,EAAE,KAG5B,GAAI,KAAK,cAAc,OAAQ,CAC7B,GAAI,GAAK,KAAK,cAAc,MAAM,GAClC,KAAK,cAAc,OAAS,EAC5B,OAAS,GAAI,EAAG,EAAI,EAAG,OAAQ,IAAM,CACnC,GAAI,GAAI,EAAG,GACX,KAAK,cACL,KAAK,SAAS,EAAE,GAAI,EAAE,GAAI,EAAE,GAAI,EAAE,QAM1C,EAAK,UAAU,SAAW,SAAU,EAAS,EAAO,EAAY,EAAI,CAIlE,GAHA,GAAO,eAAgB,IACvB,GAAO,MAAO,IAAO,YAEjB,MAAK,QAIT,IADA,KAAK,cACD,KAAK,OAAQ,CACf,KAAK,cAAc,KAAK,CAAC,EAAS,EAAO,EAAY,IACrD,OAOF,OADI,GAAI,EACD,MAAO,GAAQ,IAAO,UAC3B,IAKF,GAAI,GACJ,OAAQ,OAED,GAAQ,OACX,KAAK,eAAe,EAAQ,KAAK,KAAM,EAAO,GAC9C,WAEG,GAGH,EAAS,KACT,cAMA,EAAS,EAAQ,MAAM,EAAG,GAAG,KAAK,KAClC,MAGJ,GAAI,GAAS,EAAQ,MAAM,GAGvB,EACJ,AAAI,IAAW,KACb,EAAO,IACA,KAAW,IAAW,GAAW,EAAQ,KAAK,QACjD,EAAC,GAAU,CAAC,GAAW,KACzB,GAAS,IAAM,GACjB,EAAO,GAIT,GAAI,GAAM,KAAK,SAAS,GAGxB,GAAI,GAAgB,KAAM,GACxB,MAAO,KAET,GAAI,GAAa,EAAO,KAAO,GAAU,SACzC,AAAI,EACF,KAAK,iBAAiB,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,GAEpE,KAAK,gBAAgB,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,KAGvE,EAAK,UAAU,gBAAkB,SAAU,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,EAAI,CAC3F,GAAI,GAAO,KACX,KAAK,SAAS,EAAK,EAAY,SAAU,EAAI,EAAS,CACpD,MAAO,GAAK,iBAAiB,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,EAAS,MAIxF,EAAK,UAAU,iBAAmB,SAAU,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,EAAS,EAAI,CAGrG,GAAI,CAAC,EACH,MAAO,KAUT,OANI,GAAK,EAAO,GACZ,EAAS,CAAC,CAAC,KAAK,UAAU,OAC1B,EAAU,EAAG,MACb,EAAQ,KAAK,KAAO,EAAQ,OAAO,KAAO,IAE1C,EAAiB,GACZ,EAAI,EAAG,EAAI,EAAQ,OAAQ,IAAK,CACvC,GAAI,GAAI,EAAQ,GAChB,GAAI,EAAE,OAAO,KAAO,KAAO,EAAO,CAChC,GAAI,GACJ,AAAI,GAAU,CAAC,EACb,EAAI,CAAC,EAAE,MAAM,GAEb,EAAI,EAAE,MAAM,GAEV,GACF,EAAe,KAAK,IAM1B,GAAI,GAAM,EAAe,OAEzB,GAAI,IAAQ,EACV,MAAO,KAOT,GAAI,EAAO,SAAW,GAAK,CAAC,KAAK,MAAQ,CAAC,KAAK,KAAM,CACnD,AAAK,KAAK,QAAQ,IAChB,MAAK,QAAQ,GAAS,OAAO,OAAO,OAEtC,OAAS,GAAI,EAAG,EAAI,EAAK,IAAM,CAC7B,GAAI,GAAI,EAAe,GACvB,AAAI,GACF,CAAI,IAAW,IACb,EAAI,EAAS,IAAM,EAEnB,EAAI,EAAS,GAGb,EAAE,OAAO,KAAO,KAAO,CAAC,KAAK,SAC/B,GAAI,GAAK,KAAK,KAAK,KAAM,IAE3B,KAAK,WAAW,EAAO,GAGzB,MAAO,KAKT,EAAO,QACP,OAAS,GAAI,EAAG,EAAI,EAAK,IAAM,CAC7B,GAAI,GAAI,EAAe,GACnB,EACJ,AAAI,GACF,CAAI,IAAW,IACb,EAAI,EAAS,IAAM,EAEnB,EAAI,EAAS,GAEjB,KAAK,SAAS,CAAC,GAAG,OAAO,GAAS,EAAO,EAAY,GAEvD,KAGF,EAAK,UAAU,WAAa,SAAU,EAAO,EAAG,CAC9C,GAAI,MAAK,SAGL,IAAU,KAAM,GAGpB,IAAI,KAAK,OAAQ,CACf,KAAK,WAAW,KAAK,CAAC,EAAO,IAC7B,OAGF,GAAI,GAAM,GAAW,GAAK,EAAI,KAAK,SAAS,GAQ5C,GANI,KAAK,MACP,GAAI,KAAK,MAAM,IAEb,KAAK,UACP,GAAI,GAEF,MAAK,QAAQ,GAAO,GAGxB,IAAI,KAAK,MAAO,CACd,GAAI,GAAI,KAAK,MAAM,GACnB,GAAI,IAAM,OAAS,MAAM,QAAQ,GAC/B,OAGJ,KAAK,QAAQ,GAAO,GAAK,GAEzB,GAAI,GAAK,KAAK,UAAU,GACxB,AAAI,GACF,KAAK,KAAK,OAAQ,EAAG,GAEvB,KAAK,KAAK,QAAS,MAGrB,EAAK,UAAU,mBAAqB,SAAU,EAAK,EAAI,CACrD,GAAI,KAAK,QACP,OAIF,GAAI,KAAK,OACP,MAAO,MAAK,SAAS,EAAK,GAAO,GAEnC,GAAI,GAAW,UAAY,EACvB,EAAO,KACP,EAAU,GAAS,EAAU,GAEjC,AAAI,GACF,EAAK,GAAG,MAAM,EAAK,GAErB,WAAmB,EAAI,EAAO,CAC5B,GAAI,GAAM,EAAG,OAAS,SACpB,MAAO,KAET,GAAI,GAAQ,GAAS,EAAM,iBAC3B,EAAK,SAAS,GAAO,EAIrB,AAAI,CAAC,GAAS,GAAS,CAAC,EAAM,cAC5B,GAAK,MAAM,GAAO,OAClB,KAEA,EAAK,SAAS,EAAK,GAAO,KAIhC,EAAK,UAAU,SAAW,SAAU,EAAK,EAAY,EAAI,CACvD,GAAI,MAAK,SAGT,GAAK,GAAS,YAAY,EAAI,KAAK,EAAY,GAC3C,EAAC,GAIL,IAAI,GAAc,CAAC,GAAQ,KAAK,SAAU,GACxC,MAAO,MAAK,mBAAmB,EAAK,GAEtC,GAAI,GAAQ,KAAK,MAAO,GAAM,CAC5B,GAAI,GAAI,KAAK,MAAM,GACnB,GAAI,CAAC,GAAK,IAAM,OACd,MAAO,KAET,GAAI,MAAM,QAAQ,GAChB,MAAO,GAAG,KAAM,GAGpB,GAAI,GAAO,KACX,EAAK,GAAG,QAAQ,EAAK,GAAU,KAAM,EAAK,MAG5C,YAAoB,EAAM,EAAK,EAAI,CACjC,MAAO,UAAU,EAAI,EAAS,CAC5B,AAAI,EACF,EAAK,cAAc,EAAK,EAAI,GAE5B,EAAK,gBAAgB,EAAK,EAAS,IAIzC,EAAK,UAAU,gBAAkB,SAAU,EAAK,EAAS,EAAI,CAC3D,GAAI,MAAK,QAMT,IAAI,CAAC,KAAK,MAAQ,CAAC,KAAK,KACtB,OAAS,GAAI,EAAG,EAAI,EAAQ,OAAQ,IAAM,CACxC,GAAI,GAAI,EAAQ,GAChB,AAAI,IAAQ,IACV,EAAI,EAAM,EAEV,EAAI,EAAM,IAAM,EAClB,KAAK,MAAM,GAAK,GAIpB,YAAK,MAAM,GAAO,EACX,EAAG,KAAM,KAGlB,EAAK,UAAU,cAAgB,SAAU,EAAG,EAAI,EAAI,CAClD,GAAI,MAAK,QAIT,QAAQ,EAAG,UACJ,cACA,UACH,GAAI,GAAM,KAAK,SAAS,GAExB,GADA,KAAK,MAAM,GAAO,OACd,IAAQ,KAAK,OAAQ,CACvB,GAAI,GAAQ,GAAI,OAAM,EAAG,KAAO,gBAAkB,KAAK,KACvD,EAAM,KAAO,KAAK,IAClB,EAAM,KAAO,EAAG,KAChB,KAAK,KAAK,QAAS,GACnB,KAAK,QAEP,UAEG,aACA,YACA,mBACA,UACH,KAAK,MAAM,KAAK,SAAS,IAAM,GAC/B,cAGA,KAAK,MAAM,KAAK,SAAS,IAAM,GAC3B,KAAK,QACP,MAAK,KAAK,QAAS,GAGnB,KAAK,SAEF,KAAK,QACR,QAAQ,MAAM,aAAc,GAC9B,MAGJ,MAAO,OAGT,EAAK,UAAU,iBAAmB,SAAU,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,EAAI,CAC5F,GAAI,GAAO,KACX,KAAK,SAAS,EAAK,EAAY,SAAU,EAAI,EAAS,CACpD,EAAK,kBAAkB,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,EAAS,MAKlF,EAAK,UAAU,kBAAoB,SAAU,EAAQ,EAAM,EAAK,EAAQ,EAAO,EAAY,EAAS,EAAI,CAKtG,GAAI,CAAC,EACH,MAAO,KAIT,GAAI,GAAwB,EAAO,MAAM,GACrC,EAAS,EAAS,CAAE,GAAW,GAC/B,EAAa,EAAO,OAAO,GAG/B,KAAK,SAAS,EAAY,EAAO,GAAO,GAExC,GAAI,GAAQ,KAAK,SAAS,GACtB,EAAM,EAAQ,OAGlB,GAAI,GAAS,EACX,MAAO,KAET,OAAS,GAAI,EAAG,EAAI,EAAK,IAAK,CAC5B,GAAI,GAAI,EAAQ,GAChB,GAAI,IAAE,OAAO,KAAO,KAAO,CAAC,KAAK,KAIjC,IAAI,GAAU,EAAO,OAAO,EAAQ,GAAI,GACxC,KAAK,SAAS,EAAS,EAAO,GAAM,GAEpC,GAAI,GAAQ,EAAO,OAAO,EAAQ,GAAI,GACtC,KAAK,SAAS,EAAO,EAAO,GAAM,IAGpC,KAGF,EAAK,UAAU,eAAiB,SAAU,EAAQ,EAAO,EAAI,CAG3D,GAAI,GAAO,KACX,KAAK,MAAM,EAAQ,SAAU,EAAI,EAAQ,CACvC,EAAK,gBAAgB,EAAQ,EAAO,EAAI,EAAQ,MAGpD,EAAK,UAAU,gBAAkB,SAAU,EAAQ,EAAO,EAAI,EAAQ,EAAI,CAQxE,GAJK,KAAK,QAAQ,IAChB,MAAK,QAAQ,GAAS,OAAO,OAAO,OAGlC,CAAC,EACH,MAAO,KAET,GAAI,GAAU,GAAW,IAAW,CAAC,KAAK,QAAS,CACjD,GAAI,GAAQ,UAAU,KAAK,GAC3B,AAAI,EAAO,OAAO,KAAO,IACvB,EAAS,GAAK,KAAK,KAAK,KAAM,GAE9B,GAAS,GAAK,QAAQ,KAAK,KAAM,GAC7B,GACF,IAAU,MAIhB,AAAI,QAAQ,WAAa,SACvB,GAAS,EAAO,QAAQ,MAAO,MAGjC,KAAK,WAAW,EAAO,GACvB,KAIF,EAAK,UAAU,MAAQ,SAAU,EAAG,EAAI,CACtC,GAAI,GAAM,KAAK,SAAS,GACpB,EAAU,EAAE,MAAM,MAAQ,IAE9B,GAAI,EAAE,OAAS,KAAK,UAClB,MAAO,KAET,GAAI,CAAC,KAAK,MAAQ,GAAQ,KAAK,MAAO,GAAM,CAC1C,GAAI,GAAI,KAAK,MAAM,GAMnB,GAJI,MAAM,QAAQ,IAChB,GAAI,OAGF,CAAC,GAAW,IAAM,MACpB,MAAO,GAAG,KAAM,GAElB,GAAI,GAAW,IAAM,OACnB,MAAO,KAMX,GAAI,GACA,EAAO,KAAK,UAAU,GAC1B,GAAI,IAAS,OAAW,CACtB,GAAI,IAAS,GACX,MAAO,GAAG,KAAM,GAEhB,GAAI,GAAO,EAAK,cAAgB,MAAQ,OACxC,MAAI,IAAW,IAAS,OACf,IAEA,EAAG,KAAM,EAAM,GAI5B,GAAI,GAAO,KACP,EAAS,GAAS,SAAW,EAAK,GACtC,AAAI,GACF,EAAK,GAAG,MAAM,EAAK,GAErB,WAAmB,EAAI,EAAO,CAC5B,GAAI,GAAS,EAAM,iBAGjB,MAAO,GAAK,GAAG,KAAK,EAAK,SAAU,EAAI,EAAM,CAC3C,AAAI,EACF,EAAK,OAAO,EAAG,EAAK,KAAM,EAAO,GAEjC,EAAK,OAAO,EAAG,EAAK,EAAI,EAAM,KAGlC,EAAK,OAAO,EAAG,EAAK,EAAI,EAAO,KAKrC,EAAK,UAAU,OAAS,SAAU,EAAG,EAAK,EAAI,EAAM,EAAI,CACtD,GAAI,GAAO,GAAG,OAAS,UAAY,EAAG,OAAS,WAC7C,YAAK,UAAU,GAAO,GACf,IAGT,GAAI,GAAU,EAAE,MAAM,MAAQ,IAG9B,GAFA,KAAK,UAAU,GAAO,EAElB,EAAI,MAAM,MAAQ,KAAO,GAAQ,CAAC,EAAK,cACzC,MAAO,GAAG,KAAM,GAAO,GAEzB,GAAI,GAAI,GAKR,MAJI,IACF,GAAI,EAAK,cAAgB,MAAQ,QACnC,KAAK,MAAM,GAAO,KAAK,MAAM,IAAQ,EAEjC,GAAW,IAAM,OACZ,IAEF,EAAG,KAAM,EAAG,MCjxBrB,sBAAM,IAAO,KAEP,GAAU,SAAU,EAAS,EAAS,CAC1C,MAAO,IAAI,SAAQ,CAAC,EAAS,IAAW,CACtC,GAAK,EAAS,EAAS,CAAC,EAAK,IAAU,IAAQ,KAAO,EAAQ,GAAS,EAAO,OAKlF,GAAO,QAAU,GAGjB,GAAO,QAAQ,KAAO,GACtB,GAAO,QAAQ,KAAO,GAAK,KAC3B,GAAO,QAAQ,SAAW,GAAK,SAC/B,GAAO,QAAQ,QAAU,GACzB,GAAO,QAAQ,KAAO,GAAK,OChB3B,gCAEA,GAAM,IAAO,QAAQ,QACf,GAAY,QACZ,GAAe,KAAK,MAMpB,GAAc,MACd,GAAe,MACf,GAAgB,MAChB,GAAgB,MAChB,GAAW,QACX,GAAQ,OACR,GAAa,MAAM,QACnB,GAAe,QAAQ,MACvB,GAAa,GAAG,UAAmB,KACnC,GAAS,MAAM,MACf,GAAU,MAAM,KAAe,MAC/B,GAAe,MAAM,UAAmB,MACxC,GAAgB,MAAM,MACtB,GAAe,MAAM,MACrB,GAAO,GAAG,OAEV,GAAc,CAClB,eACA,gBACA,iBACA,iBACA,YACA,SACA,cACA,cACA,UACA,WACA,gBACA,iBACA,gBACA,QACA,iBAOI,GAAgB,IACjB,GAEH,cAAe,IAAI,MACnB,MAAO,GACP,KAAM,GAAG,OACT,WAAY,GAAG,cAAuB,SACtC,OAAQ,MAAM,MACd,QAAS,YAAY,OAAc,cAAuB,UAC1D,aAAc,MAAM,cAAuB,UAC3C,cAAe,MAAM,cAAuB,UAC5C,aAAc,MAAM,MACpB,aAAc,SAAS,OACvB,WAAY,OAAO,UAOf,GAAqB,CACzB,MAAO,YACP,MAAO,SACP,MAAO,cACP,MAAO,OACP,MAAO,mBACP,MAAO,MACP,MAAO,cACP,MAAO,MACP,MAAO,eACP,MAAO,yCACP,MAAO,mBACP,MAAO,MACP,KAAM,aACN,OAAQ,aAGV,GAAO,QAAU,CACf,WAAY,KAAO,GACnB,sBAGA,gBAAiB,yBACjB,wBAAyB,4BACzB,oBAAqB,oBACrB,4BAA6B,oBAC7B,2BAA4B,uBAC5B,uBAAwB,4BAGxB,aAAc,CACZ,MAAO,IACP,QAAS,KACT,WAAY,MAId,OAAQ,GACR,OAAQ,GAGR,iBAAkB,GAClB,iBAAkB,GAClB,iBAAkB,GAClB,iBAAkB,IAElB,sBAAuB,GACvB,uBAAwB,GAExB,cAAe,GAGf,eAAgB,GAChB,QAAS,GACT,oBAAqB,GACrB,qBAAsB,GACtB,uBAAwB,GACxB,WAAY,GACZ,WAAY,GACZ,SAAU,GACV,kBAAmB,GACnB,WAAY,GACZ,sBAAuB,GACvB,eAAgB,GAChB,mBAAoB,GACpB,kBAAmB,GACnB,UAAW,GACX,kBAAmB,GACnB,wBAAyB,GACzB,sBAAuB,IACvB,yBAA0B,GAC1B,eAAgB,GAChB,oBAAqB,IACrB,aAAc,GACd,UAAW,GACX,mBAAoB,GACpB,yBAA0B,GAC1B,uBAAwB,IACxB,0BAA2B,GAC3B,eAAgB,GAChB,kBAAmB,GACnB,WAAY,GACZ,SAAU,EACV,gBAAiB,GACjB,mBAAoB,IACpB,8BAA+B,MAE/B,IAAK,GAAK,IAMV,aAAa,EAAO,CAClB,MAAO,CACL,IAAK,CAAE,KAAM,SAAU,KAAM,YAAa,MAAO,KAAK,EAAM,SAC5D,IAAK,CAAE,KAAM,QAAS,KAAM,MAAO,MAAO,MAC1C,IAAK,CAAE,KAAM,OAAQ,KAAM,MAAO,MAAO,MACzC,IAAK,CAAE,KAAM,OAAQ,KAAM,MAAO,MAAO,MACzC,IAAK,CAAE,KAAM,KAAM,KAAM,MAAO,MAAO,OAQ3C,UAAU,EAAO,CACf,MAAO,KAAU,GAAO,GAAgB,OChL5C,2BAEA,GAAM,IAAO,QAAQ,QACf,GAAQ,QAAQ,WAAa,QAC7B,CACJ,mBACA,0BACA,uBACA,+BACE,KAEJ,GAAQ,SAAW,GAAO,IAAQ,MAAQ,MAAO,IAAQ,UAAY,CAAC,MAAM,QAAQ,GACpF,GAAQ,cAAgB,GAAO,GAAoB,KAAK,GACxD,GAAQ,YAAc,GAAO,EAAI,SAAW,GAAK,GAAQ,cAAc,GACvE,GAAQ,YAAc,GAAO,EAAI,QAAQ,GAA4B,QACrE,GAAQ,eAAiB,GAAO,EAAI,QAAQ,GAAiB,KAE7D,GAAQ,kBAAoB,GACnB,EAAI,QAAQ,GAAwB,GAClC,IAAU,KAAO,GAAK,GAIjC,GAAQ,oBAAsB,IAAM,CAClC,GAAM,GAAO,QAAQ,QAAQ,MAAM,GAAG,MAAM,KAAK,IAAI,QACrD,MAAI,GAAK,SAAW,GAAK,EAAK,IAAM,GAAM,EAAK,KAAO,GAAK,EAAK,IAAM,IAMxE,GAAQ,UAAY,GACd,GAAW,MAAO,GAAQ,SAAY,UACjC,EAAQ,QAEV,KAAU,IAAQ,GAAK,MAAQ,KAGxC,GAAQ,WAAa,CAAC,EAAO,EAAM,IAAY,CAC7C,GAAM,GAAM,EAAM,YAAY,EAAM,GACpC,MAAI,KAAQ,GAAW,EACnB,EAAM,EAAM,KAAO,KAAa,GAAQ,WAAW,EAAO,EAAM,EAAM,GACnE,GAAG,EAAM,MAAM,EAAG,OAAS,EAAM,MAAM,MAGhD,GAAQ,aAAe,CAAC,EAAO,EAAQ,KAAO,CAC5C,GAAI,GAAS,EACb,MAAI,GAAO,WAAW,OACpB,GAAS,EAAO,MAAM,GACtB,EAAM,OAAS,MAEV,GAGT,GAAQ,WAAa,CAAC,EAAO,EAAQ,GAAI,EAAU,KAAO,CACxD,GAAM,GAAU,EAAQ,SAAW,GAAK,IAClC,EAAS,EAAQ,SAAW,GAAK,IAEnC,EAAS,GAAG,OAAa,KAAS,IACtC,MAAI,GAAM,UAAY,IACpB,GAAS,UAAU,UAEd,KC9DT,gCAEA,GAAM,IAAQ,KACR,CACJ,iBACA,WACA,uBACA,cACA,YACA,yBACA,sBACA,yBACA,yBACA,4BACA,aACA,sBACA,0BACA,0BACA,8BACE,KAEE,GAAkB,GACf,IAAS,IAAsB,IAAS,GAG3C,GAAQ,GAAS,CACrB,AAAI,EAAM,WAAa,IACrB,GAAM,MAAQ,EAAM,WAAa,IAAW,IAqB1C,GAAO,CAAC,EAAO,IAAY,CAC/B,GAAM,GAAO,GAAW,GAElB,EAAS,EAAM,OAAS,EACxB,EAAY,EAAK,QAAU,IAAQ,EAAK,YAAc,GACtD,EAAU,GACV,EAAS,GACT,EAAQ,GAEV,EAAM,EACN,EAAQ,GACR,EAAQ,EACR,EAAY,EACZ,EAAU,GACV,EAAY,GACZ,EAAS,GACT,EAAY,GACZ,EAAa,GACb,EAAe,GACf,EAAc,GACd,EAAU,GACV,EAAiB,GACjB,EAAW,GACX,EAAS,EACT,EACA,EACA,EAAQ,CAAE,MAAO,GAAI,MAAO,EAAG,OAAQ,IAErC,EAAM,IAAM,GAAS,EACrB,EAAO,IAAM,EAAI,WAAW,EAAQ,GACpC,EAAU,IACd,GAAO,EACA,EAAI,WAAW,EAAE,IAG1B,KAAO,EAAQ,GAAQ,CACrB,EAAO,IACP,GAAI,GAEJ,GAAI,IAAS,GAAqB,CAChC,EAAc,EAAM,YAAc,GAClC,EAAO,IAEH,IAAS,IACX,GAAe,IAEjB,SAGF,GAAI,IAAiB,IAAQ,IAAS,GAAuB,CAG3D,IAFA,IAEO,MAAU,IAAS,GAAO,MAAY,CAC3C,GAAI,IAAS,GAAqB,CAChC,EAAc,EAAM,YAAc,GAClC,IACA,SAGF,GAAI,IAAS,GAAuB,CAClC,IACA,SAGF,GAAI,IAAiB,IAAQ,IAAS,IAAa,GAAO,OAAe,GAAU,CAKjF,GAJA,EAAU,EAAM,QAAU,GAC1B,EAAS,EAAM,OAAS,GACxB,EAAW,GAEP,IAAc,GAChB,SAGF,MAGF,GAAI,IAAiB,IAAQ,IAAS,GAAY,CAKhD,GAJA,EAAU,EAAM,QAAU,GAC1B,EAAS,EAAM,OAAS,GACxB,EAAW,GAEP,IAAc,GAChB,SAGF,MAGF,GAAI,IAAS,IACX,KAEI,IAAW,GAAG,CAChB,EAAe,GACf,EAAU,EAAM,QAAU,GAC1B,EAAW,GACX,OAKN,GAAI,IAAc,GAChB,SAGF,MAGF,GAAI,IAAS,GAAoB,CAK/B,GAJA,EAAQ,KAAK,GACb,EAAO,KAAK,GACZ,EAAQ,CAAE,MAAO,GAAI,MAAO,EAAG,OAAQ,IAEnC,IAAa,GAAM,SACvB,GAAI,IAAS,IAAY,IAAW,EAAQ,EAAI,CAC9C,GAAS,EACT,SAGF,EAAY,EAAQ,EACpB,SAGF,GAAI,EAAK,QAAU,IAOb,AANkB,KAAS,IAC1B,IAAS,IACT,IAAS,IACT,IAAS,IACT,IAAS,MAEQ,IAAQ,MAAW,GAAuB,CAQ9D,GAPA,EAAS,EAAM,OAAS,GACxB,EAAY,EAAM,UAAY,GAC9B,EAAW,GACP,IAAS,IAAyB,IAAU,GAC9C,GAAiB,IAGf,IAAc,GAAM,CACtB,KAAO,MAAU,IAAS,GAAO,MAAY,CAC3C,GAAI,IAAS,GAAqB,CAChC,EAAc,EAAM,YAAc,GAClC,EAAO,IACP,SAGF,GAAI,IAAS,GAAwB,CACnC,EAAS,EAAM,OAAS,GACxB,EAAW,GACX,OAGJ,SAEF,MAIJ,GAAI,IAAS,GAAe,CAK1B,GAJI,IAAS,IAAe,GAAa,EAAM,WAAa,IAC5D,EAAS,EAAM,OAAS,GACxB,EAAW,GAEP,IAAc,GAChB,SAEF,MAGF,GAAI,IAAS,GAAoB,CAI/B,GAHA,EAAS,EAAM,OAAS,GACxB,EAAW,GAEP,IAAc,GAChB,SAEF,MAGF,GAAI,IAAS,GAA0B,CACrC,KAAO,MAAU,IAAS,GAAO,MAAY,CAC3C,GAAI,IAAS,GAAqB,CAChC,EAAc,EAAM,YAAc,GAClC,IACA,SAGF,GAAI,IAAS,GAA2B,CACtC,EAAY,EAAM,UAAY,GAC9B,EAAS,EAAM,OAAS,GACxB,EAAW,GACX,OAIJ,GAAI,IAAc,GAChB,SAGF,MAGF,GAAI,EAAK,WAAa,IAAQ,IAAS,IAAyB,IAAU,EAAO,CAC/E,EAAU,EAAM,QAAU,GAC1B,IACA,SAGF,GAAI,EAAK,UAAY,IAAQ,IAAS,GAAuB,CAG3D,GAFA,EAAS,EAAM,OAAS,GAEpB,IAAc,GAAM,CACtB,KAAO,MAAU,IAAS,GAAO,MAAY,CAC3C,GAAI,IAAS,GAAuB,CAClC,EAAc,EAAM,YAAc,GAClC,EAAO,IACP,SAGF,GAAI,IAAS,GAAwB,CACnC,EAAW,GACX,OAGJ,SAEF,MAGF,GAAI,IAAW,GAAM,CAGnB,GAFA,EAAW,GAEP,IAAc,GAChB,SAGF,OAIJ,AAAI,EAAK,QAAU,IACjB,GAAY,GACZ,EAAS,IAGX,GAAI,GAAO,EACP,EAAS,GACT,EAAO,GAEX,AAAI,EAAQ,GACV,GAAS,EAAI,MAAM,EAAG,GACtB,EAAM,EAAI,MAAM,GAChB,GAAa,GAGf,AAAI,GAAQ,IAAW,IAAQ,EAAY,EACzC,GAAO,EAAI,MAAM,EAAG,GACpB,EAAO,EAAI,MAAM,IACZ,AAAI,IAAW,GACpB,GAAO,GACP,EAAO,GAEP,EAAO,EAGL,GAAQ,IAAS,IAAM,IAAS,KAAO,IAAS,GAC9C,GAAgB,EAAK,WAAW,EAAK,OAAS,KAChD,GAAO,EAAK,MAAM,EAAG,KAIrB,EAAK,WAAa,IAChB,IAAM,GAAO,GAAM,kBAAkB,IAErC,GAAQ,IAAgB,IAC1B,GAAO,GAAM,kBAAkB,KAInC,GAAM,GAAQ,CACZ,SACA,QACA,QACA,OACA,OACA,UACA,YACA,SACA,YACA,aACA,UACA,kBAWF,GARI,EAAK,SAAW,IAClB,GAAM,SAAW,EACZ,GAAgB,IACnB,EAAO,KAAK,GAEd,EAAM,OAAS,GAGb,EAAK,QAAU,IAAQ,EAAK,SAAW,GAAM,CAC/C,GAAI,GAEJ,OAAS,GAAM,EAAG,EAAM,EAAQ,OAAQ,IAAO,CAC7C,GAAM,IAAI,EAAY,EAAY,EAAI,EAChC,GAAI,EAAQ,GACZ,GAAQ,EAAM,MAAM,GAAG,IAC7B,AAAI,EAAK,QACP,CAAI,IAAQ,GAAK,IAAU,EACzB,GAAO,GAAK,SAAW,GACvB,EAAO,GAAK,MAAQ,GAEpB,EAAO,GAAK,MAAQ,GAEtB,GAAM,EAAO,IACb,EAAM,UAAY,EAAO,GAAK,OAE5B,KAAQ,GAAK,KAAU,KACzB,EAAM,KAAK,IAEb,EAAY,GAGd,GAAI,GAAa,EAAY,EAAI,EAAM,OAAQ,CAC7C,GAAM,GAAQ,EAAM,MAAM,EAAY,GACtC,EAAM,KAAK,GAEP,EAAK,QACP,GAAO,EAAO,OAAS,GAAG,MAAQ,EAClC,GAAM,EAAO,EAAO,OAAS,IAC7B,EAAM,UAAY,EAAO,EAAO,OAAS,GAAG,OAIhD,EAAM,QAAU,EAChB,EAAM,MAAQ,EAGhB,MAAO,IAGT,GAAO,QAAU,KCtYjB,gCAEA,GAAM,IAAY,KACZ,GAAQ,KAMR,CACJ,cACA,sBACA,2BACA,+BACA,iBACE,GAME,GAAc,CAAC,EAAM,IAAY,CACrC,GAAI,MAAO,GAAQ,aAAgB,WACjC,MAAO,GAAQ,YAAY,GAAG,EAAM,GAGtC,EAAK,OACL,GAAM,GAAQ,IAAI,EAAK,KAAK,QAE5B,GAAI,CAEF,GAAI,QAAO,SACJ,EAAP,CACA,MAAO,GAAK,IAAI,GAAK,GAAM,YAAY,IAAI,KAAK,MAGlD,MAAO,IAOH,GAAc,CAAC,EAAM,IAClB,WAAW,OAAU,iBAAoB,iCAU5C,GAAQ,CAAC,EAAO,IAAY,CAChC,GAAI,MAAO,IAAU,SACnB,KAAM,IAAI,WAAU,qBAGtB,EAAQ,GAAa,IAAU,EAE/B,GAAM,GAAO,IAAK,GACZ,EAAM,MAAO,GAAK,WAAc,SAAW,KAAK,IAAI,GAAY,EAAK,WAAa,GAEpF,EAAM,EAAM,OAChB,GAAI,EAAM,EACR,KAAM,IAAI,aAAY,iBAAiB,sCAAwC,KAGjF,GAAM,GAAM,CAAE,KAAM,MAAO,MAAO,GAAI,OAAQ,EAAK,SAAW,IACxD,EAAS,CAAC,GAEV,EAAU,EAAK,QAAU,GAAK,KAC9B,EAAQ,GAAM,UAAU,GAGxB,EAAiB,GAAU,UAAU,GACrC,EAAgB,GAAU,aAAa,GAEvC,CACJ,cACA,eACA,gBACA,WACA,aACA,SACA,eACA,gBACA,QACA,eACA,OACA,gBACE,EAEE,EAAW,GACR,IAAI,UAAgB,IAAe,EAAK,IAAM,EAAa,UAG9D,EAAQ,EAAK,IAAM,GAAK,EACxB,EAAa,EAAK,IAAM,EAAQ,EAClC,EAAO,EAAK,OAAS,GAAO,EAAS,GAAQ,EAEjD,AAAI,EAAK,SACP,GAAO,IAAI,MAIT,MAAO,GAAK,OAAU,WACxB,GAAK,UAAY,EAAK,OAGxB,GAAM,GAAQ,CACZ,QACA,MAAO,GACP,MAAO,EACP,IAAK,EAAK,MAAQ,GAClB,SAAU,GACV,OAAQ,GACR,OAAQ,GACR,UAAW,GACX,QAAS,GACT,SAAU,EACV,OAAQ,EACR,OAAQ,EACR,OAAQ,EACR,SAAU,GACV,UAGF,EAAQ,GAAM,aAAa,EAAO,GAClC,EAAM,EAAM,OAEZ,GAAM,GAAW,GACX,EAAS,GACT,EAAQ,GACV,EAAO,EACP,EAME,EAAM,IAAM,EAAM,QAAU,EAAM,EAClC,EAAO,EAAM,KAAO,CAAC,EAAI,IAAM,EAAM,EAAM,MAAQ,GACnD,GAAU,EAAM,QAAU,IAAM,EAAM,EAAE,EAAM,QAAU,GACxD,GAAY,IAAM,EAAM,MAAM,EAAM,MAAQ,GAC5C,GAAU,CAAC,EAAQ,GAAI,EAAM,IAAM,CACvC,EAAM,UAAY,EAClB,EAAM,OAAS,GAGX,GAAS,GAAS,CACtB,EAAM,QAAU,EAAM,QAAU,KAAO,EAAM,OAAS,EAAM,MAC5D,GAAQ,EAAM,QAGV,GAAS,IAAM,CACnB,GAAI,GAAQ,EAEZ,KAAO,MAAW,KAAQ,GAAK,KAAO,KAAO,EAAK,KAAO,MACvD,KACA,EAAM,QACN,IAGF,MAAI,GAAQ,GAAM,EACT,GAGT,GAAM,QAAU,GAChB,EAAM,QACC,KAGH,GAAY,GAAQ,CACxB,EAAM,KACN,EAAM,KAAK,IAGP,GAAY,GAAQ,CACxB,EAAM,KACN,EAAM,OAWF,EAAO,GAAO,CAClB,GAAI,EAAK,OAAS,WAAY,CAC5B,GAAM,GAAU,EAAM,OAAS,GAAM,GAAI,OAAS,SAAW,EAAI,OAAS,SACpE,EAAY,EAAI,UAAY,IAAS,EAAS,QAAW,GAAI,OAAS,QAAU,EAAI,OAAS,SAEnG,AAAI,EAAI,OAAS,SAAW,EAAI,OAAS,SAAW,CAAC,GAAW,CAAC,GAC/D,GAAM,OAAS,EAAM,OAAO,MAAM,EAAG,CAAC,EAAK,OAAO,QAClD,EAAK,KAAO,OACZ,EAAK,MAAQ,IACb,EAAK,OAAS,EACd,EAAM,QAAU,EAAK,QASzB,GALI,EAAS,QAAU,EAAI,OAAS,SAClC,GAAS,EAAS,OAAS,GAAG,OAAS,EAAI,OAGzC,GAAI,OAAS,EAAI,SAAQ,GAAO,GAChC,GAAQ,EAAK,OAAS,QAAU,EAAI,OAAS,OAAQ,CACvD,EAAK,OAAS,EAAI,MAClB,EAAK,OAAU,GAAK,QAAU,IAAM,EAAI,MACxC,OAGF,EAAI,KAAO,EACX,EAAO,KAAK,GACZ,EAAO,GAGH,GAAc,CAAC,EAAM,IAAU,CACnC,GAAM,GAAQ,IAAK,EAAc,GAAQ,WAAY,EAAG,MAAO,IAE/D,EAAM,KAAO,EACb,EAAM,OAAS,EAAM,OACrB,EAAM,OAAS,EAAM,OACrB,GAAM,GAAU,GAAK,QAAU,IAAM,IAAM,EAAM,KAEjD,GAAU,UACV,EAAK,CAAE,OAAM,QAAO,OAAQ,EAAM,OAAS,GAAK,IAChD,EAAK,CAAE,KAAM,QAAS,QAAS,GAAM,MAAO,KAAW,WACvD,EAAS,KAAK,IAGV,GAAe,GAAS,CAC5B,GAAI,GAAS,EAAM,MAAS,GAAK,QAAU,IAAM,IAC7C,EAEJ,GAAI,EAAM,OAAS,SAAU,CAC3B,GAAI,GAAc,EAElB,AAAI,EAAM,OAAS,EAAM,MAAM,OAAS,GAAK,EAAM,MAAM,SAAS,MAChE,GAAc,EAAS,IAGrB,KAAgB,GAAQ,KAAS,QAAQ,KAAK,QAChD,GAAS,EAAM,MAAQ,OAAO,KAG5B,EAAM,MAAM,SAAS,MAAS,GAAO,OAAgB,eAAe,KAAK,IAC3E,GAAS,EAAM,MAAQ,IAAI,KAAQ,MAGjC,EAAM,KAAK,OAAS,OACtB,GAAM,eAAiB,IAI3B,EAAK,CAAE,KAAM,QAAS,QAAS,GAAM,QAAO,WAC5C,GAAU,WAOZ,GAAI,EAAK,YAAc,IAAS,CAAC,sBAAsB,KAAK,GAAQ,CAClE,GAAI,GAAc,GAEd,EAAS,EAAM,QAAQ,GAA6B,CAAC,EAAG,EAAK,EAAO,GAAO,GAAM,KAC/E,KAAU,KACZ,GAAc,GACP,GAGL,KAAU,IACR,EACK,EAAM,GAAS,IAAO,EAAM,OAAO,GAAK,QAAU,IAEvD,KAAU,EACL,EAAc,IAAO,EAAM,OAAO,GAAK,QAAU,IAEnD,EAAM,OAAO,EAAM,QAGxB,KAAU,IACL,EAAY,OAAO,EAAM,QAG9B,KAAU,IACR,EACK,EAAM,GAAS,IAAO,EAAO,IAE/B,EAEF,EAAM,EAAI,KAAK,KAaxB,MAVI,KAAgB,IAClB,CAAI,EAAK,WAAa,GACpB,EAAS,EAAO,QAAQ,MAAO,IAE/B,EAAS,EAAO,QAAQ,OAAQ,GACvB,EAAE,OAAS,GAAM,EAAI,OAAU,EAAI,KAAO,KAKnD,IAAW,GAAS,EAAK,WAAa,GACxC,GAAM,OAAS,EACR,GAGT,GAAM,OAAS,GAAM,WAAW,EAAQ,EAAO,GACxC,GAOT,KAAO,CAAC,KAAO,CAGb,GAFA,EAAQ,KAEJ,IAAU,KACZ,SAOF,GAAI,IAAU,KAAM,CAClB,GAAM,GAAO,IAMb,GAJI,IAAS,KAAO,EAAK,OAAS,IAI9B,IAAS,KAAO,IAAS,IAC3B,SAGF,GAAI,CAAC,EAAM,CACT,GAAS,KACT,EAAK,CAAE,KAAM,OAAQ,UACrB,SAIF,GAAM,GAAQ,OAAO,KAAK,MACtB,EAAU,EAgBd,GAdI,GAAS,EAAM,GAAG,OAAS,GAC7B,GAAU,EAAM,GAAG,OACnB,EAAM,OAAS,EACX,EAAU,GAAM,GAClB,IAAS,OAIb,AAAI,EAAK,WAAa,GACpB,EAAQ,KAER,GAAS,KAGP,EAAM,WAAa,EAAG,CACxB,EAAK,CAAE,KAAM,OAAQ,UACrB,UASJ,GAAI,EAAM,SAAW,GAAM,KAAU,KAAO,EAAK,QAAU,KAAO,EAAK,QAAU,MAAO,CACtF,GAAI,EAAK,QAAU,IAAS,IAAU,IAAK,CACzC,GAAM,GAAQ,EAAK,MAAM,MAAM,GAC/B,GAAI,EAAM,SAAS,MACjB,GAAK,MAAQ,GAET,EAAM,SAAS,MAAM,CACvB,GAAM,GAAM,EAAK,MAAM,YAAY,KAC7B,EAAM,EAAK,MAAM,MAAM,EAAG,GAC1B,GAAO,EAAK,MAAM,MAAM,EAAM,GAC9B,GAAQ,GAAmB,IACjC,GAAI,GAAO,CACT,EAAK,MAAQ,EAAM,GACnB,EAAM,UAAY,GAClB,KAEI,CAAC,EAAI,QAAU,EAAO,QAAQ,KAAU,GAC1C,GAAI,OAAS,GAEf,WAMR,AAAK,KAAU,KAAO,MAAW,KAAS,IAAU,KAAO,MAAW,MACpE,GAAQ,KAAK,KAGX,IAAU,KAAQ,GAAK,QAAU,KAAO,EAAK,QAAU,OACzD,GAAQ,KAAK,KAGX,EAAK,QAAU,IAAQ,IAAU,KAAO,EAAK,QAAU,KACzD,GAAQ,KAGV,EAAK,OAAS,EACd,GAAO,CAAE,UACT,SAQF,GAAI,EAAM,SAAW,GAAK,IAAU,IAAK,CACvC,EAAQ,GAAM,YAAY,GAC1B,EAAK,OAAS,EACd,GAAO,CAAE,UACT,SAOF,GAAI,IAAU,IAAK,CACjB,EAAM,OAAS,EAAM,SAAW,EAAI,EAAI,EACpC,EAAK,aAAe,IACtB,EAAK,CAAE,KAAM,OAAQ,UAEvB,SAOF,GAAI,IAAU,IAAK,CACjB,GAAU,UACV,EAAK,CAAE,KAAM,QAAS,UACtB,SAGF,GAAI,IAAU,IAAK,CACjB,GAAI,EAAM,SAAW,GAAK,EAAK,iBAAmB,GAChD,KAAM,IAAI,aAAY,GAAY,UAAW,MAG/C,GAAM,GAAU,EAAS,EAAS,OAAS,GAC3C,GAAI,GAAW,EAAM,SAAW,EAAQ,OAAS,EAAG,CAClD,GAAa,EAAS,OACtB,SAGF,EAAK,CAAE,KAAM,QAAS,QAAO,OAAQ,EAAM,OAAS,IAAM,QAC1D,GAAU,UACV,SAOF,GAAI,IAAU,IAAK,CACjB,GAAI,EAAK,YAAc,IAAQ,CAAC,KAAY,SAAS,KAAM,CACzD,GAAI,EAAK,YAAc,IAAQ,EAAK,iBAAmB,GACrD,KAAM,IAAI,aAAY,GAAY,UAAW,MAG/C,EAAQ,KAAK,QAEb,IAAU,YAGZ,EAAK,CAAE,KAAM,UAAW,UACxB,SAGF,GAAI,IAAU,IAAK,CACjB,GAAI,EAAK,YAAc,IAAS,GAAQ,EAAK,OAAS,WAAa,EAAK,MAAM,SAAW,EAAI,CAC3F,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,KAAK,MACzC,SAGF,GAAI,EAAM,WAAa,EAAG,CACxB,GAAI,EAAK,iBAAmB,GAC1B,KAAM,IAAI,aAAY,GAAY,UAAW,MAG/C,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,KAAK,MACzC,SAGF,GAAU,YAEV,GAAM,GAAY,EAAK,MAAM,MAAM,GAUnC,GATI,EAAK,QAAU,IAAQ,EAAU,KAAO,KAAO,CAAC,EAAU,SAAS,MACrE,GAAQ,IAAI,KAGd,EAAK,OAAS,EACd,GAAO,CAAE,UAIL,EAAK,kBAAoB,IAAS,GAAM,cAAc,GACxD,SAGF,GAAM,GAAU,GAAM,YAAY,EAAK,OAKvC,GAJA,EAAM,OAAS,EAAM,OAAO,MAAM,EAAG,CAAC,EAAK,MAAM,QAI7C,EAAK,kBAAoB,GAAM,CACjC,EAAM,QAAU,EAChB,EAAK,MAAQ,EACb,SAIF,EAAK,MAAQ,IAAI,IAAU,KAAW,EAAK,SAC3C,EAAM,QAAU,EAAK,MACrB,SAOF,GAAI,IAAU,KAAO,EAAK,UAAY,GAAM,CAC1C,GAAU,UAEV,GAAM,GAAO,CACX,KAAM,QACN,QACA,OAAQ,IACR,YAAa,EAAM,OAAO,OAC1B,YAAa,EAAM,OAAO,QAG5B,EAAO,KAAK,GACZ,EAAK,GACL,SAGF,GAAI,IAAU,IAAK,CACjB,GAAM,GAAQ,EAAO,EAAO,OAAS,GAErC,GAAI,EAAK,UAAY,IAAQ,CAAC,EAAO,CACnC,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,IACpC,SAGF,GAAI,GAAS,IAEb,GAAI,EAAM,OAAS,GAAM,CACvB,GAAM,GAAM,EAAO,QACb,GAAQ,GAEd,OAAS,IAAI,EAAI,OAAS,EAAG,IAAK,GAChC,GAAO,MACH,EAAI,IAAG,OAAS,SAFe,KAKnC,AAAI,EAAI,IAAG,OAAS,QAClB,GAAM,QAAQ,EAAI,IAAG,OAIzB,EAAS,GAAY,GAAO,GAC5B,EAAM,UAAY,GAGpB,GAAI,EAAM,QAAU,IAAQ,EAAM,OAAS,GAAM,CAC/C,GAAM,GAAM,EAAM,OAAO,MAAM,EAAG,EAAM,aAClC,GAAO,EAAM,OAAO,MAAM,EAAM,aACtC,EAAM,MAAQ,EAAM,OAAS,MAC7B,EAAQ,EAAS,MACjB,EAAM,OAAS,EACf,OAAW,MAAK,IACd,EAAM,QAAW,GAAE,QAAU,GAAE,MAInC,EAAK,CAAE,KAAM,QAAS,QAAO,WAC7B,GAAU,UACV,EAAO,MACP,SAOF,GAAI,IAAU,IAAK,CACjB,AAAI,EAAS,OAAS,GACpB,EAAS,EAAS,OAAS,GAAG,aAEhC,EAAK,CAAE,KAAM,OAAQ,UACrB,SAOF,GAAI,IAAU,IAAK,CACjB,GAAI,GAAS,EAEP,EAAQ,EAAO,EAAO,OAAS,GACrC,AAAI,GAAS,EAAM,EAAM,OAAS,KAAO,UACvC,GAAM,MAAQ,GACd,EAAS,KAGX,EAAK,CAAE,KAAM,QAAS,QAAO,WAC7B,SAOF,GAAI,IAAU,IAAK,CAKjB,GAAI,EAAK,OAAS,OAAS,EAAM,QAAU,EAAM,MAAQ,EAAG,CAC1D,EAAM,MAAQ,EAAM,MAAQ,EAC5B,EAAM,SAAW,GACjB,EAAM,OAAS,GACf,EAAO,MACP,EAAO,EACP,SAGF,EAAK,CAAE,KAAM,QAAS,QAAO,OAAQ,IACrC,SAOF,GAAI,IAAU,IAAK,CACjB,GAAI,EAAM,OAAS,GAAK,EAAK,OAAS,MAAO,CAC3C,AAAI,EAAK,QAAU,KAAK,GAAK,OAAS,GACtC,GAAM,GAAQ,EAAO,EAAO,OAAS,GACrC,EAAK,KAAO,OACZ,EAAK,QAAU,EACf,EAAK,OAAS,EACd,EAAM,KAAO,GACb,SAGF,GAAK,EAAM,OAAS,EAAM,SAAY,GAAK,EAAK,OAAS,OAAS,EAAK,OAAS,QAAS,CACvF,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,IACpC,SAGF,EAAK,CAAE,KAAM,MAAO,QAAO,OAAQ,IACnC,SAOF,GAAI,IAAU,IAAK,CAEjB,GAAI,CADY,IAAQ,EAAK,QAAU,MACvB,EAAK,YAAc,IAAQ,MAAW,KAAO,EAAK,KAAO,IAAK,CAC5E,GAAY,QAAS,GACrB,SAGF,GAAI,GAAQ,EAAK,OAAS,QAAS,CACjC,GAAM,GAAO,IACT,EAAS,EAEb,GAAI,IAAS,KAAO,CAAC,GAAM,sBACzB,KAAM,IAAI,OAAM,2DAGlB,AAAK,GAAK,QAAU,KAAO,CAAC,SAAS,KAAK,IAAW,IAAS,KAAO,CAAC,eAAe,KAAK,QACxF,GAAS,KAAK,KAGhB,EAAK,CAAE,KAAM,OAAQ,QAAO,WAC5B,SAGF,GAAI,EAAK,MAAQ,IAAS,GAAK,OAAS,SAAW,EAAK,OAAS,OAAQ,CACvE,EAAK,CAAE,KAAM,QAAS,QAAO,OAAQ,IACrC,SAGF,EAAK,CAAE,KAAM,QAAS,QAAO,OAAQ,IACrC,SAOF,GAAI,IAAU,IAAK,CACjB,GAAI,EAAK,YAAc,IAAQ,MAAW,KACpC,GAAK,KAAO,KAAO,CAAC,SAAS,KAAK,EAAK,KAAK,CAC9C,GAAY,SAAU,GACtB,SAIJ,GAAI,EAAK,WAAa,IAAQ,EAAM,QAAU,EAAG,CAC/C,KACA,UAQJ,GAAI,IAAU,IAAK,CACjB,GAAI,EAAK,YAAc,IAAQ,MAAW,KAAO,EAAK,KAAO,IAAK,CAChE,GAAY,OAAQ,GACpB,SAGF,GAAK,GAAQ,EAAK,QAAU,KAAQ,EAAK,QAAU,GAAO,CACxD,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,IACpC,SAGF,GAAK,GAAS,GAAK,OAAS,WAAa,EAAK,OAAS,SAAW,EAAK,OAAS,UAAa,EAAM,OAAS,EAAG,CAC7G,EAAK,CAAE,KAAM,OAAQ,UACrB,SAGF,EAAK,CAAE,KAAM,OAAQ,MAAO,IAC5B,SAOF,GAAI,IAAU,IAAK,CACjB,GAAI,EAAK,YAAc,IAAQ,MAAW,KAAO,EAAK,KAAO,IAAK,CAChE,EAAK,CAAE,KAAM,KAAM,QAAS,GAAM,QAAO,OAAQ,KACjD,SAGF,EAAK,CAAE,KAAM,OAAQ,UACrB,SAOF,GAAI,IAAU,IAAK,CACjB,AAAI,KAAU,KAAO,IAAU,MAC7B,GAAQ,KAAK,KAGf,GAAM,GAAQ,GAAwB,KAAK,MAC3C,AAAI,GACF,IAAS,EAAM,GACf,EAAM,OAAS,EAAM,GAAG,QAG1B,EAAK,CAAE,KAAM,OAAQ,UACrB,SAOF,GAAI,GAAS,GAAK,OAAS,YAAc,EAAK,OAAS,IAAO,CAC5D,EAAK,KAAO,OACZ,EAAK,KAAO,GACZ,EAAK,OAAS,EACd,EAAK,OAAS,EACd,EAAM,UAAY,GAClB,EAAM,SAAW,GACjB,GAAQ,GACR,SAGF,GAAI,GAAO,KACX,GAAI,EAAK,YAAc,IAAQ,UAAU,KAAK,GAAO,CACnD,GAAY,OAAQ,GACpB,SAGF,GAAI,EAAK,OAAS,OAAQ,CACxB,GAAI,EAAK,aAAe,GAAM,CAC5B,GAAQ,GACR,SAGF,GAAM,GAAQ,EAAK,KACb,EAAS,EAAM,KACf,EAAU,EAAM,OAAS,SAAW,EAAM,OAAS,MACnD,GAAY,GAAW,GAAO,OAAS,QAAU,EAAO,OAAS,YAEvE,GAAI,EAAK,OAAS,IAAS,EAAC,GAAY,EAAK,IAAM,EAAK,KAAO,KAAO,CACpE,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,KACpC,SAGF,GAAM,IAAU,EAAM,OAAS,GAAM,GAAM,OAAS,SAAW,EAAM,OAAS,SACxE,GAAY,EAAS,QAAW,GAAM,OAAS,QAAU,EAAM,OAAS,SAC9E,GAAI,CAAC,GAAW,EAAM,OAAS,SAAW,CAAC,IAAW,CAAC,GAAW,CAChE,EAAK,CAAE,KAAM,OAAQ,QAAO,OAAQ,KACpC,SAIF,KAAO,EAAK,MAAM,EAAG,KAAO,OAAO,CACjC,GAAM,IAAQ,EAAM,EAAM,MAAQ,GAClC,GAAI,IAAS,KAAU,IACrB,MAEF,EAAO,EAAK,MAAM,GAClB,GAAQ,MAAO,GAGjB,GAAI,EAAM,OAAS,OAAS,IAAO,CACjC,EAAK,KAAO,WACZ,EAAK,OAAS,EACd,EAAK,OAAS,EAAS,GACvB,EAAM,OAAS,EAAK,OACpB,EAAM,SAAW,GACjB,GAAQ,GACR,SAGF,GAAI,EAAM,OAAS,SAAW,EAAM,KAAK,OAAS,OAAS,CAAC,IAAa,IAAO,CAC9E,EAAM,OAAS,EAAM,OAAO,MAAM,EAAG,CAAE,GAAM,OAAS,EAAK,QAAQ,QACnE,EAAM,OAAS,MAAM,EAAM,SAE3B,EAAK,KAAO,WACZ,EAAK,OAAS,EAAS,GAAS,GAAK,cAAgB,IAAM,OAC3D,EAAK,OAAS,EACd,EAAM,SAAW,GACjB,EAAM,QAAU,EAAM,OAAS,EAAK,OACpC,GAAQ,GACR,SAGF,GAAI,EAAM,OAAS,SAAW,EAAM,KAAK,OAAS,OAAS,EAAK,KAAO,IAAK,CAC1E,GAAM,IAAM,EAAK,KAAO,OAAS,KAAO,GAExC,EAAM,OAAS,EAAM,OAAO,MAAM,EAAG,CAAE,GAAM,OAAS,EAAK,QAAQ,QACnE,EAAM,OAAS,MAAM,EAAM,SAE3B,EAAK,KAAO,WACZ,EAAK,OAAS,GAAG,EAAS,KAAQ,KAAiB,IAAgB,MACnE,EAAK,OAAS,EAEd,EAAM,QAAU,EAAM,OAAS,EAAK,OACpC,EAAM,SAAW,GAEjB,GAAQ,EAAQ,MAEhB,EAAK,CAAE,KAAM,QAAS,MAAO,IAAK,OAAQ,KAC1C,SAGF,GAAI,EAAM,OAAS,OAAS,EAAK,KAAO,IAAK,CAC3C,EAAK,KAAO,WACZ,EAAK,OAAS,EACd,EAAK,OAAS,QAAQ,KAAiB,EAAS,KAAQ,KACxD,EAAM,OAAS,EAAK,OACpB,EAAM,SAAW,GACjB,GAAQ,EAAQ,MAChB,EAAK,CAAE,KAAM,QAAS,MAAO,IAAK,OAAQ,KAC1C,SAIF,EAAM,OAAS,EAAM,OAAO,MAAM,EAAG,CAAC,EAAK,OAAO,QAGlD,EAAK,KAAO,WACZ,EAAK,OAAS,EAAS,GACvB,EAAK,OAAS,EAGd,EAAM,QAAU,EAAK,OACrB,EAAM,SAAW,GACjB,GAAQ,GACR,SAGF,GAAM,GAAQ,CAAE,KAAM,OAAQ,QAAO,OAAQ,GAE7C,GAAI,EAAK,OAAS,GAAM,CACtB,EAAM,OAAS,MACX,GAAK,OAAS,OAAS,EAAK,OAAS,UACvC,GAAM,OAAS,EAAQ,EAAM,QAE/B,EAAK,GACL,SAGF,GAAI,GAAS,GAAK,OAAS,WAAa,EAAK,OAAS,UAAY,EAAK,QAAU,GAAM,CACrF,EAAM,OAAS,EACf,EAAK,GACL,SAGF,AAAI,GAAM,QAAU,EAAM,OAAS,EAAK,OAAS,SAAW,EAAK,OAAS,QACxE,CAAI,EAAK,OAAS,MAChB,GAAM,QAAU,EAChB,EAAK,QAAU,GAEV,AAAI,EAAK,MAAQ,GACtB,GAAM,QAAU,EAChB,EAAK,QAAU,GAGf,GAAM,QAAU,EAChB,EAAK,QAAU,GAGb,MAAW,KACb,GAAM,QAAU,EAChB,EAAK,QAAU,IAInB,EAAK,GAGP,KAAO,EAAM,SAAW,GAAG,CACzB,GAAI,EAAK,iBAAmB,GAAM,KAAM,IAAI,aAAY,GAAY,UAAW,MAC/E,EAAM,OAAS,GAAM,WAAW,EAAM,OAAQ,KAC9C,GAAU,YAGZ,KAAO,EAAM,OAAS,GAAG,CACvB,GAAI,EAAK,iBAAmB,GAAM,KAAM,IAAI,aAAY,GAAY,UAAW,MAC/E,EAAM,OAAS,GAAM,WAAW,EAAM,OAAQ,KAC9C,GAAU,UAGZ,KAAO,EAAM,OAAS,GAAG,CACvB,GAAI,EAAK,iBAAmB,GAAM,KAAM,IAAI,aAAY,GAAY,UAAW,MAC/E,EAAM,OAAS,GAAM,WAAW,EAAM,OAAQ,KAC9C,GAAU,UAQZ,GALI,EAAK,gBAAkB,IAAS,GAAK,OAAS,QAAU,EAAK,OAAS,YACxE,EAAK,CAAE,KAAM,cAAe,MAAO,GAAI,OAAQ,GAAG,OAIhD,EAAM,YAAc,GAAM,CAC5B,EAAM,OAAS,GAEf,OAAW,KAAS,GAAM,OACxB,EAAM,QAAU,EAAM,QAAU,KAAO,EAAM,OAAS,EAAM,MAExD,EAAM,QACR,GAAM,QAAU,EAAM,QAK5B,MAAO,IAST,GAAM,UAAY,CAAC,EAAO,IAAY,CACpC,GAAM,GAAO,IAAK,GACZ,EAAM,MAAO,GAAK,WAAc,SAAW,KAAK,IAAI,GAAY,EAAK,WAAa,GAClF,EAAM,EAAM,OAClB,GAAI,EAAM,EACR,KAAM,IAAI,aAAY,iBAAiB,sCAAwC,KAGjF,EAAQ,GAAa,IAAU,EAC/B,GAAM,GAAQ,GAAM,UAAU,GAGxB,CACJ,cACA,gBACA,WACA,aACA,SACA,UACA,gBACA,OACA,gBACE,GAAU,UAAU,GAElB,EAAQ,EAAK,IAAM,EAAU,EAC7B,EAAW,EAAK,IAAM,EAAgB,EACtC,EAAU,EAAK,QAAU,GAAK,KAC9B,EAAQ,CAAE,QAAS,GAAO,OAAQ,IACpC,EAAO,EAAK,OAAS,GAAO,MAAQ,EAExC,AAAI,EAAK,SACP,GAAO,IAAI,MAGb,GAAM,GAAW,GACX,EAAK,aAAe,GAAa,EAC9B,IAAI,UAAgB,IAAe,EAAK,IAAM,EAAa,UAG9D,EAAS,GAAO,CACpB,OAAQ,OACD,IACH,MAAO,GAAG,IAAQ,IAAW,QAE1B,KACH,MAAO,GAAG,IAAc,IAAW,QAEhC,MACH,MAAO,GAAG,IAAQ,IAAO,IAAc,IAAW,QAE/C,MACH,MAAO,GAAG,IAAQ,IAAO,IAAgB,IAAW,IAAW,QAE5D,KACH,MAAO,GAAQ,EAAS,OAErB,OACH,MAAO,MAAM,IAAQ,EAAS,KAAQ,MAAkB,IAAW,IAAW,QAE3E,SACH,MAAO,MAAM,IAAQ,EAAS,KAAQ,MAAkB,IAAW,IAAO,IAAc,IAAW,QAEhG,QACH,MAAO,MAAM,IAAQ,EAAS,KAAQ,MAAkB,IAAc,IAAW,YAE1E,CACP,GAAM,GAAQ,iBAAiB,KAAK,GACpC,GAAI,CAAC,EAAO,OAEZ,GAAM,GAAS,EAAO,EAAM,IAC5B,MAAK,GAEE,EAAS,EAAc,EAAM,GAFvB,UAOb,EAAS,GAAM,aAAa,EAAO,GACrC,EAAS,EAAO,GAEpB,MAAI,IAAU,EAAK,gBAAkB,IACnC,IAAU,GAAG,MAGR,GAGT,GAAO,QAAU,KC3jCjB,gCAEA,GAAM,IAAO,QAAQ,QACf,GAAO,KACP,GAAQ,KACR,GAAQ,KACR,GAAY,KACZ,GAAW,GAAO,GAAO,MAAO,IAAQ,UAAY,CAAC,MAAM,QAAQ,GAwBnE,EAAY,CAAC,EAAM,EAAS,EAAc,KAAU,CACxD,GAAI,MAAM,QAAQ,GAAO,CACvB,GAAM,GAAM,EAAK,IAAI,GAAS,EAAU,EAAO,EAAS,IAQxD,MAPqB,IAAO,CAC1B,OAAW,KAAW,GAAK,CACzB,GAAM,GAAQ,EAAQ,GACtB,GAAI,EAAO,MAAO,GAEpB,MAAO,IAKX,GAAM,GAAU,GAAS,IAAS,EAAK,QAAU,EAAK,MAEtD,GAAI,IAAS,IAAO,MAAO,IAAS,UAAY,CAAC,EAC/C,KAAM,IAAI,WAAU,6CAGtB,GAAM,GAAO,GAAW,GAClB,EAAQ,GAAM,UAAU,GACxB,EAAQ,EACV,EAAU,UAAU,EAAM,GAC1B,EAAU,OAAO,EAAM,EAAS,GAAO,IAErC,EAAQ,EAAM,MACpB,MAAO,GAAM,MAEb,GAAI,GAAY,IAAM,GACtB,GAAI,EAAK,OAAQ,CACf,GAAM,GAAa,IAAK,EAAS,OAAQ,KAAM,QAAS,KAAM,SAAU,MACxE,EAAY,EAAU,EAAK,OAAQ,EAAY,GAGjD,GAAM,GAAU,CAAC,EAAO,EAAe,KAAU,CAC/C,GAAM,CAAE,UAAS,QAAO,UAAW,EAAU,KAAK,EAAO,EAAO,EAAS,CAAE,OAAM,UAC3E,EAAS,CAAE,OAAM,QAAO,QAAO,QAAO,QAAO,SAAQ,QAAO,WAMlE,MAJI,OAAO,GAAK,UAAa,YAC3B,EAAK,SAAS,GAGZ,IAAY,GACd,GAAO,QAAU,GACV,EAAe,EAAS,IAG7B,EAAU,GACR,OAAO,GAAK,UAAa,YAC3B,EAAK,SAAS,GAEhB,EAAO,QAAU,GACV,EAAe,EAAS,IAG7B,OAAO,GAAK,SAAY,YAC1B,EAAK,QAAQ,GAER,EAAe,EAAS,KAGjC,MAAI,IACF,GAAQ,MAAQ,GAGX,GAoBT,EAAU,KAAO,CAAC,EAAO,EAAO,EAAS,CAAE,OAAM,SAAU,KAAO,CAChE,GAAI,MAAO,IAAU,SACnB,KAAM,IAAI,WAAU,iCAGtB,GAAI,IAAU,GACZ,MAAO,CAAE,QAAS,GAAO,OAAQ,IAGnC,GAAM,GAAO,GAAW,GAClB,EAAS,EAAK,QAAW,GAAQ,GAAM,eAAiB,MAC1D,EAAQ,IAAU,EAClB,EAAU,GAAS,EAAU,EAAO,GAAS,EAEjD,MAAI,KAAU,IACZ,GAAS,EAAS,EAAO,GAAS,EAClC,EAAQ,IAAW,GAGjB,KAAU,IAAS,EAAK,UAAY,KACtC,CAAI,EAAK,YAAc,IAAQ,EAAK,WAAa,GAC/C,EAAQ,EAAU,UAAU,EAAO,EAAO,EAAS,GAEnD,EAAQ,EAAM,KAAK,IAIhB,CAAE,QAAS,QAAQ,GAAQ,QAAO,WAiB3C,EAAU,UAAY,CAAC,EAAO,EAAM,EAAS,EAAQ,GAAM,UAAU,KAE5D,AADO,aAAgB,QAAS,EAAO,EAAU,OAAO,EAAM,IACxD,KAAK,GAAK,SAAS,IAoBlC,EAAU,QAAU,CAAC,EAAK,EAAU,IAAY,EAAU,EAAU,GAAS,GAgB7E,EAAU,MAAQ,CAAC,EAAS,IACtB,MAAM,QAAQ,GAAiB,EAAQ,IAAI,GAAK,EAAU,MAAM,EAAG,IAChE,GAAM,EAAS,IAAK,EAAS,UAAW,KA8BjD,EAAU,KAAO,CAAC,EAAO,IAAY,GAAK,EAAO,GAcjD,EAAU,UAAY,CAAC,EAAO,EAAS,EAAe,GAAO,EAAc,KAAU,CACnF,GAAI,IAAiB,GACnB,MAAO,GAAM,OAGf,GAAM,GAAO,GAAW,GAClB,EAAU,EAAK,SAAW,GAAK,IAC/B,EAAS,EAAK,SAAW,GAAK,IAEhC,EAAS,GAAG,OAAa,EAAM,UAAU,IAC7C,AAAI,GAAS,EAAM,UAAY,IAC7B,GAAS,OAAO,SAGlB,GAAM,GAAQ,EAAU,QAAQ,EAAQ,GACxC,MAAI,KAAgB,IAClB,GAAM,MAAQ,GAGT,GAsBT,EAAU,OAAS,CAAC,EAAO,EAAU,GAAI,EAAe,GAAO,EAAc,KAAU,CACrF,GAAI,CAAC,GAAS,MAAO,IAAU,SAC7B,KAAM,IAAI,WAAU,+BAGtB,GAAI,GAAS,CAAE,QAAS,GAAO,UAAW,IAE1C,MAAI,GAAQ,YAAc,IAAU,GAAM,KAAO,KAAO,EAAM,KAAO,MACnE,GAAO,OAAS,GAAM,UAAU,EAAO,IAGpC,EAAO,QACV,GAAS,GAAM,EAAO,IAGjB,EAAU,UAAU,EAAQ,EAAS,EAAc,IAoB5D,EAAU,QAAU,CAAC,EAAQ,IAAY,CACvC,GAAI,CACF,GAAM,GAAO,GAAW,GACxB,MAAO,IAAI,QAAO,EAAQ,EAAK,OAAU,GAAK,OAAS,IAAM,WACtD,EAAP,CACA,GAAI,GAAW,EAAQ,QAAU,GAAM,KAAM,GAC7C,MAAO,OASX,EAAU,UAAY,GAMtB,GAAO,QAAU,ICrVjB,gCAEA,GAAO,QAAU,OCFjB,gCAEA,GAAM,IAAK,QAAQ,MACb,CAAE,aAAa,QAAQ,UACvB,GAAU,QAAQ,QAClB,CAAE,cAAc,QAAQ,QACxB,GAAY,KAEZ,GAAU,GAAU,GAAG,SACvB,GAAO,GAAU,GAAG,MACpB,GAAQ,GAAU,GAAG,OACrB,GAAW,GAAU,GAAG,UAWxB,GAAO,IACP,GAAuB,2BACvB,GAAqB,GAAI,KAAI,CAAC,SAAU,QAAS,SAAU,QAAS,KACpE,GAAY,QACZ,GAAW,cACX,GAAgB,oBAChB,GAAkB,MAClB,GAAY,CAAC,GAAW,GAAU,GAAe,IAEjD,GAAoB,GAAS,GAAmB,IAAI,EAAM,MAC1D,CAAC,GAAK,IAAO,QAAQ,SAAS,KAAK,MAAM,KAAK,MAAM,EAAG,GAAG,IAAI,GAAK,OAAO,SAAS,EAAG,KACtF,GAAoB,QAAQ,WAAa,SAAY,IAAM,IAAO,KAAQ,IAAM,IAAO,GAEvF,GAAkB,GAAU,CAChC,GAAI,IAAW,OACf,IAAI,MAAO,IAAW,WAAY,MAAO,GAEzC,GAAI,MAAO,IAAW,SAAU,CAC9B,GAAM,GAAO,GAAU,EAAO,QAC9B,MAAO,IAAS,EAAK,EAAM,UAG7B,GAAI,MAAM,QAAQ,GAAS,CACzB,GAAM,GAAW,GACX,EAAW,GACjB,OAAW,KAAQ,GAAQ,CACzB,GAAM,GAAU,EAAK,OACrB,AAAI,EAAQ,OAAO,KAAO,GACxB,EAAS,KAAK,GAAU,EAAQ,MAAM,KAEtC,EAAS,KAAK,GAAU,IAI5B,MAAI,GAAS,OAAS,EAChB,EAAS,OAAS,EACb,GACL,EAAS,KAAK,GAAK,EAAE,EAAM,YAAc,CAAC,EAAS,KAAK,GAAK,EAAE,EAAM,WAElE,GAAS,CAAC,EAAS,KAAK,GAAK,EAAE,EAAM,WAEvC,GAAS,EAAS,KAAK,GAAK,EAAE,EAAM,cAI/C,gBAA6B,GAAS,WACzB,iBAAiB,CAC1B,MAAO,CACL,KAAM,IAEN,WAAY,AAAC,GAAS,GACtB,gBAAiB,AAAC,GAAS,GAE3B,KAAM,GACN,MAAO,GACP,MAAO,WACP,WAAY,IAIhB,YAAY,EAAU,GAAI,CACxB,MAAM,CACJ,WAAY,GACZ,YAAa,GACb,cAAe,EAAQ,eAAiB,OAE1C,GAAM,GAAO,IAAK,GAAe,kBAAmB,GAC9C,CAAE,OAAM,QAAS,EAEvB,KAAK,YAAc,GAAgB,EAAK,YACxC,KAAK,iBAAmB,GAAgB,EAAK,iBAE7C,GAAM,GAAa,EAAK,MAAQ,GAAQ,GAExC,AAAI,GACF,KAAK,MAAQ,GAAQ,EAAW,EAAM,CAAE,OAAQ,KAEhD,KAAK,MAAQ,EAGf,KAAK,UAAY,EAAK,MACtB,KAAK,UAAY,CAAC,GAAU,GAAe,IAAiB,SAAS,GACrE,KAAK,WAAa,CAAC,GAAW,GAAe,IAAiB,SAAS,GACvE,KAAK,iBAAmB,IAAS,GACjC,KAAK,MAAQ,GAAQ,QAAQ,GAC7B,KAAK,UAAa,UAAY,KAAO,CAAC,EAAK,WAC3C,KAAK,WAAa,KAAK,UAAY,SAAW,QAC9C,KAAK,WAAa,CAAE,SAAU,OAAQ,cAAe,KAAK,WAG1D,KAAK,QAAU,CAAC,KAAK,YAAY,EAAM,IACvC,KAAK,QAAU,GACf,KAAK,OAAS,YAGV,OAAM,EAAO,CACjB,GAAI,MAAK,QACT,MAAK,QAAU,GAEf,GAAI,CACF,KAAO,CAAC,KAAK,WAAa,EAAQ,GAAG,CACnC,GAAM,CAAE,OAAM,QAAO,QAAQ,IAAO,KAAK,QAAU,GAEnD,GAAI,EAAM,OAAS,EAAG,CACpB,GAAM,GAAQ,EAAM,OAAO,EAAG,GAAO,IAAI,GAAU,KAAK,aAAa,EAAQ,IAC7E,OAAW,KAAS,MAAM,SAAQ,IAAI,GAAQ,CAC5C,GAAI,KAAK,UAAW,OAEpB,GAAM,GAAY,KAAM,MAAK,cAAc,GAC3C,AAAI,IAAc,aAAe,KAAK,iBAAiB,GACjD,IAAS,KAAK,WAChB,KAAK,QAAQ,KAAK,KAAK,YAAY,EAAM,SAAU,EAAQ,IAGzD,KAAK,WACP,MAAK,KAAK,GACV,MAEQ,KAAc,QAAU,KAAK,eAAe,KAAW,KAAK,YAAY,IAC9E,KAAK,YACP,MAAK,KAAK,GACV,UAID,CACL,GAAM,GAAS,KAAK,QAAQ,MAC5B,GAAI,CAAC,EAAQ,CACX,KAAK,KAAK,MACV,MAGF,GADA,KAAK,OAAS,KAAM,GAChB,KAAK,UAAW,eAGjB,EAAP,CACA,KAAK,QAAQ,UACb,CACA,KAAK,QAAU,UAIb,aAAY,EAAM,EAAO,CAC7B,GAAI,GACJ,GAAI,CACF,EAAQ,KAAM,IAAQ,EAAM,KAAK,kBAC1B,EAAP,CACA,KAAK,SAAS,GAEhB,MAAO,CAAE,QAAO,QAAO,aAGnB,cAAa,EAAQ,EAAM,CAC/B,GAAI,GACJ,GAAI,CACF,GAAM,GAAW,KAAK,UAAY,EAAO,KAAO,EAC1C,EAAW,GAAQ,QAAQ,GAAQ,KAAK,EAAM,IACpD,EAAQ,CAAE,KAAM,GAAQ,SAAS,KAAK,MAAO,GAAW,WAAU,YAClE,EAAM,KAAK,YAAc,KAAK,UAAY,EAAS,KAAM,MAAK,MAAM,SAC7D,EAAP,CACA,KAAK,SAAS,GAEhB,MAAO,GAGT,SAAS,EAAK,CACZ,AAAI,GAAkB,IAAQ,CAAC,KAAK,UAClC,KAAK,KAAK,OAAQ,GAElB,KAAK,QAAQ,QAIX,eAAc,EAAO,CAGzB,GAAM,GAAQ,GAAS,EAAM,KAAK,YAClC,GAAI,EAAC,EAGL,IAAI,EAAM,SACR,MAAO,OAET,GAAI,EAAM,cACR,MAAO,YAET,GAAI,GAAS,EAAM,iBAAkB,CACnC,GAAM,GAAO,EAAM,SACnB,GAAI,CACF,GAAM,GAAgB,KAAM,IAAS,GAC/B,EAAqB,KAAM,IAAM,GACvC,GAAI,EAAmB,SACrB,MAAO,OAET,GAAI,EAAmB,cAAe,CACpC,GAAM,GAAM,EAAc,OAC1B,GAAI,EAAK,WAAW,IAAkB,EAAK,OAAO,EAAK,KAAO,GAAQ,IAAK,CACzE,GAAM,GAAiB,GAAI,OACzB,+BAA+B,iBAAoB,MAErD,SAAe,KAAO,GACf,KAAK,SAAS,GAEvB,MAAO,mBAEF,EAAP,CACA,KAAK,SAAS,MAKpB,eAAe,EAAO,CACpB,GAAM,GAAQ,GAAS,EAAM,KAAK,YAElC,MAAO,IAAS,KAAK,kBAAoB,CAAC,EAAM,gBAoB9C,GAAW,CAAC,EAAM,EAAU,KAAO,CACvC,GAAI,GAAO,EAAQ,WAAa,EAAQ,KAGxC,GAFI,IAAS,QAAQ,GAAO,IACxB,GAAM,GAAQ,KAAO,GACpB,EAEE,IAAI,MAAO,IAAS,SACzB,KAAM,IAAI,WAAU,4EACf,GAAI,GAAQ,CAAC,GAAU,SAAS,GACrC,KAAM,IAAI,OAAM,6CAA6C,GAAU,KAAK,aAJ5E,MAAM,IAAI,OAAM,uEAOlB,SAAQ,KAAO,EACR,GAAI,IAAe,IAGtB,GAAkB,CAAC,EAAM,EAAU,KAChC,GAAI,SAAQ,CAAC,EAAS,IAAW,CACtC,GAAM,GAAQ,GACd,GAAS,EAAM,GACZ,GAAG,OAAQ,GAAS,EAAM,KAAK,IAC/B,GAAG,MAAO,IAAM,EAAQ,IACxB,GAAG,QAAS,GAAS,EAAO,MAInC,GAAS,QAAU,GACnB,GAAS,eAAiB,GAC1B,GAAS,QAAU,GAEnB,GAAO,QAAU,KC9RjB,mBAOA,GAAO,QAAU,SAAS,EAAM,EAAe,CAC7C,GAAI,MAAO,IAAS,SAClB,KAAM,IAAI,WAAU,gCAGtB,GAAI,IAAS,MAAQ,IAAS,IAAK,MAAO,IAE1C,GAAI,GAAM,EAAK,OACf,GAAI,GAAO,EAAG,MAAO,GAKrB,GAAI,GAAS,GACb,GAAI,EAAM,GAAK,EAAK,KAAO,KAAM,CAC/B,GAAI,GAAK,EAAK,GACd,AAAK,KAAO,KAAO,IAAO,MAAQ,EAAK,MAAM,EAAG,KAAO,QACrD,GAAO,EAAK,MAAM,GAClB,EAAS,MAIb,GAAI,GAAO,EAAK,MAAM,UACtB,MAAI,KAAkB,IAAS,EAAK,EAAK,OAAS,KAAO,IACvD,EAAK,MAEA,EAAS,EAAK,KAAK,QCjC5B,gCAEA,OAAO,eAAe,GAAS,aAAc,CAAE,MAAO,KAEtD,GAAM,IAAY,KACZ,GAAgB,KAOhB,GAAO,IACP,GAAkB,CAAC,YAAa,IAChC,GAAS,AAAC,GAAS,MAAM,QAAQ,GAAQ,EAAO,CAAC,GAOjD,GAAgB,CAAC,EAAS,IAAY,CAC1C,GAAI,MAAO,IAAY,WACrB,MAAO,GAET,GAAI,MAAO,IAAY,SAAU,CAC/B,GAAM,GAAO,GAAU,EAAS,GAChC,MAAO,AAAC,IAAW,IAAY,GAAU,EAAK,GAEhD,MAAI,aAAmB,QACd,AAAC,GAAW,EAAQ,KAAK,GAE3B,AAAC,GAAW,IAUf,GAAgB,CAAC,EAAU,EAAa,EAAM,IAAgB,CAClE,GAAM,GAAS,MAAM,QAAQ,GACvB,EAAQ,EAAS,EAAK,GAAK,EACjC,GAAI,CAAC,GAAU,MAAO,IAAU,SAC9B,KAAM,IAAI,WAAU,mDAClB,OAAO,UAAU,SAAS,KAAK,IAEnC,GAAM,GAAO,GAAc,GAE3B,OAAS,GAAQ,EAAG,EAAQ,EAAY,OAAQ,IAE9C,GAAI,AADU,EAAY,GAChB,GACR,MAAO,GAAc,GAAK,GAI9B,GAAM,GAAU,GAAU,CAAC,GAAM,OAAO,EAAK,MAAM,IACnD,OAAS,GAAQ,EAAG,EAAQ,EAAS,OAAQ,IAAS,CACpD,GAAM,GAAU,EAAS,GACzB,GAAI,EAAS,EAAQ,GAAG,GAAW,EAAQ,GACzC,MAAO,GAAc,EAAQ,GAIjC,MAAO,GAAc,GAAK,IAStB,GAAW,CAAC,EAAU,EAAY,EAAU,KAAoB,CACpE,GAAI,GAAY,KACd,KAAM,IAAI,WAAU,oCAEtB,GAAM,GAAO,MAAO,IAAY,UAAY,CAAC,YAAa,GAAW,EAC/D,EAAc,EAAK,aAAe,GAGlC,EAAU,GAAO,GACjB,EAAe,EAClB,OAAO,GAAQ,MAAO,IAAS,UAAY,EAAK,OAAO,KAAO,IAC9D,IAAI,GAAQ,EAAK,MAAM,IACvB,IAAI,GAAQ,GAAU,EAAM,IACzB,EAAW,EACd,OAAO,GAAQ,MAAO,IAAS,UAAa,MAAO,IAAS,UAAY,EAAK,OAAO,KAAO,IAC3F,IAAI,GAAW,GAAc,EAAS,IAEzC,MAAI,IAAc,KACT,CAAC,EAAY,EAAK,KAEhB,GAAc,EAAU,EAAc,EADzB,MAAO,IAAO,UAAY,EAAK,IAKhD,GAAc,EAAU,EAAc,EAAY,IAG3D,GAAS,QAAU,GACnB,GAAO,QAAU,KCvGjB,mBAOA,GAAO,QAAU,SAAmB,EAAK,CACvC,GAAI,MAAO,IAAQ,UAAY,IAAQ,GACrC,MAAO,GAIT,OADI,GACI,EAAQ,yBAAyB,KAAK,IAAO,CACnD,GAAI,EAAM,GAAI,MAAO,GACrB,EAAM,EAAI,MAAM,EAAM,MAAQ,EAAM,GAAG,QAGzC,MAAO,MClBT,mBAOA,GAAI,IAAY,KACZ,GAAQ,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,KACnC,GAAc,yFACd,GAAe,8BAEnB,GAAO,QAAU,SAAgB,EAAK,EAAS,CAC7C,GAAI,MAAO,IAAQ,UAAY,IAAQ,GACrC,MAAO,GAGT,GAAI,GAAU,GACZ,MAAO,GAGT,GAAI,GAAQ,GACR,EAOJ,IAJI,GAAW,EAAQ,SAAW,IAChC,GAAQ,IAGF,EAAQ,EAAM,KAAK,IAAO,CAChC,GAAI,EAAM,GAAI,MAAO,GACrB,GAAI,GAAM,EAAM,MAAQ,EAAM,GAAG,OAI7B,EAAO,EAAM,GACb,EAAQ,EAAO,GAAM,GAAQ,KACjC,GAAI,GAAQ,EAAO,CACjB,GAAI,GAAI,EAAI,QAAQ,EAAO,GAC3B,AAAI,IAAM,IACR,GAAM,EAAI,GAId,EAAM,EAAI,MAAM,GAElB,MAAO,MC9CT,gCAEA,GAAI,IAAS,KACT,GAAmB,QAAQ,QAAQ,MAAM,QACzC,GAAU,QAAQ,MAAM,aAAe,QAEvC,GAAQ,IACR,GAAY,MACZ,GAAY,kBACZ,GAAS,8BACT,GAAU,8BAQd,GAAO,QAAU,SAAoB,EAAK,EAAM,CAC9C,GAAI,GAAU,OAAO,OAAO,CAAE,gBAAiB,IAAQ,GAGvD,AAAI,EAAQ,iBAAmB,IAAW,EAAI,QAAQ,IAAS,GAC7D,GAAM,EAAI,QAAQ,GAAW,KAI3B,GAAU,KAAK,IACjB,IAAO,IAIT,GAAO,IAGP,EACE,GAAM,GAAiB,SAChB,GAAO,IAAQ,GAAO,KAAK,IAGpC,MAAO,GAAI,QAAQ,GAAS,SCxC9B,2BAEA,GAAQ,UAAY,GACd,MAAO,IAAQ,SACV,OAAO,UAAU,GAEtB,MAAO,IAAQ,UAAY,EAAI,SAAW,GACrC,OAAO,UAAU,OAAO,IAE1B,GAOT,GAAQ,KAAO,CAAC,EAAM,IAAS,EAAK,MAAM,KAAK,GAAQ,EAAK,OAAS,GAMrE,GAAQ,aAAe,CAAC,EAAK,EAAK,EAAO,EAAG,IACtC,IAAU,IACV,CAAC,GAAQ,UAAU,IAAQ,CAAC,GAAQ,UAAU,GAAa,GACtD,QAAO,GAAO,OAAO,IAAQ,OAAO,IAAU,EAOzD,GAAQ,WAAa,CAAC,EAAO,EAAI,EAAG,IAAS,CAC3C,GAAI,GAAO,EAAM,MAAM,GACvB,AAAI,CAAC,GAEA,IAAQ,EAAK,OAAS,GAAS,EAAK,OAAS,QAAU,EAAK,OAAS,UACpE,EAAK,UAAY,IACnB,GAAK,MAAQ,KAAO,EAAK,MACzB,EAAK,QAAU,KASrB,GAAQ,aAAe,GACjB,EAAK,OAAS,QAAgB,GAC7B,EAAK,QAAU,EAAI,EAAK,QAAU,GAAO,EAC5C,GAAK,QAAU,GACR,IAEF,GAOT,GAAQ,eAAiB,GACnB,EAAM,OAAS,QAAgB,GAC/B,EAAM,UAAY,IAAQ,EAAM,OAAe,GAC9C,EAAM,QAAU,EAAI,EAAM,QAAU,GAAO,GAI5C,EAAM,OAAS,IAAQ,EAAM,QAAU,GACzC,GAAM,QAAU,GACT,IAEF,GAOT,GAAQ,cAAgB,GAClB,EAAK,OAAS,QAAU,EAAK,OAAS,QACjC,GAEF,EAAK,OAAS,IAAQ,EAAK,QAAU,GAO9C,GAAQ,OAAS,GAAS,EAAM,OAAO,CAAC,EAAK,IACvC,GAAK,OAAS,QAAQ,EAAI,KAAK,EAAK,OACpC,EAAK,OAAS,SAAS,GAAK,KAAO,QAChC,GACN,IAMH,GAAQ,QAAU,IAAI,IAAS,CAC7B,GAAM,GAAS,GACT,EAAO,GAAO,CAClB,OAAS,GAAI,EAAG,EAAI,EAAI,OAAQ,IAAK,CACnC,GAAI,GAAM,EAAI,GACd,MAAM,QAAQ,GAAO,EAAK,EAAK,GAAU,IAAQ,QAAU,EAAO,KAAK,GAEzE,MAAO,IAET,SAAK,GACE,KC9GT,gCAEA,GAAM,IAAQ,KAEd,GAAO,QAAU,CAAC,EAAK,EAAU,KAAO,CACtC,GAAI,GAAY,CAAC,EAAM,EAAS,KAAO,CACrC,GAAI,GAAe,EAAQ,eAAiB,GAAM,eAAe,GAC7D,EAAc,EAAK,UAAY,IAAQ,EAAQ,gBAAkB,GACjE,EAAS,GAEb,GAAI,EAAK,MACP,MAAK,IAAgB,IAAgB,GAAM,cAAc,GAChD,KAAO,EAAK,MAEd,EAAK,MAGd,GAAI,EAAK,MACP,MAAO,GAAK,MAGd,GAAI,EAAK,MACP,OAAS,KAAS,GAAK,MACrB,GAAU,EAAU,GAGxB,MAAO,IAGT,MAAO,GAAU,MC7BnB,mBAOA,aAEA,GAAO,QAAU,SAAS,EAAK,CAC7B,MAAI,OAAO,IAAQ,SACV,EAAM,GAAQ,EAEnB,MAAO,IAAQ,UAAY,EAAI,SAAW,GACrC,OAAO,SAAW,OAAO,SAAS,CAAC,GAAO,SAAS,CAAC,GAEtD,MChBT,mBAOA,aAEA,GAAM,IAAW,KAEX,GAAe,CAAC,EAAK,EAAK,IAAY,CAC1C,GAAI,GAAS,KAAS,GACpB,KAAM,IAAI,WAAU,4DAGtB,GAAI,IAAQ,QAAU,IAAQ,EAC5B,MAAO,QAAO,GAGhB,GAAI,GAAS,KAAS,GACpB,KAAM,IAAI,WAAU,8DAGtB,GAAI,GAAO,CAAE,WAAY,MAAS,GAClC,AAAI,MAAO,GAAK,aAAgB,WAC9B,GAAK,WAAa,EAAK,cAAgB,IAGzC,GAAI,GAAQ,OAAO,EAAK,YACpB,EAAY,OAAO,EAAK,WACxB,EAAU,OAAO,EAAK,SACtB,EAAO,OAAO,EAAK,MACnB,EAAW,EAAM,IAAM,EAAM,IAAM,EAAQ,EAAY,EAAU,EAErE,GAAI,GAAa,MAAM,eAAe,GACpC,MAAO,IAAa,MAAM,GAAU,OAGtC,GAAI,GAAI,KAAK,IAAI,EAAK,GAClB,EAAI,KAAK,IAAI,EAAK,GAEtB,GAAI,KAAK,IAAI,EAAI,KAAO,EAAG,CACzB,GAAI,GAAS,EAAM,IAAM,EACzB,MAAI,GAAK,QACA,IAAI,KAET,EAAK,OAAS,GACT,EAEF,MAAM,KAGf,GAAI,GAAW,GAAW,IAAQ,GAAW,GACzC,EAAQ,CAAE,MAAK,MAAK,IAAG,KACvB,EAAY,GACZ,EAAY,GAOhB,GALI,GACF,GAAM,SAAW,EACjB,EAAM,OAAS,OAAO,EAAM,KAAK,QAG/B,EAAI,EAAG,CACT,GAAI,GAAS,EAAI,EAAI,KAAK,IAAI,GAAK,EACnC,EAAY,GAAgB,EAAQ,KAAK,IAAI,GAAI,EAAO,GACxD,EAAI,EAAM,EAAI,EAGhB,MAAI,IAAK,GACP,GAAY,GAAgB,EAAG,EAAG,EAAO,IAG3C,EAAM,UAAY,EAClB,EAAM,UAAY,EAClB,EAAM,OAAS,GAAgB,EAAW,EAAW,GAErD,AAAI,EAAK,UAAY,GACnB,EAAM,OAAS,IAAI,EAAM,UAChB,EAAK,OAAS,IAAU,EAAU,OAAS,EAAU,OAAU,GACxE,GAAM,OAAS,MAAM,EAAM,WAG7B,GAAa,MAAM,GAAY,EACxB,EAAM,QAGf,YAAyB,EAAK,EAAK,EAAS,CAC1C,GAAI,GAAe,GAAe,EAAK,EAAK,IAAK,GAAO,IAAY,GAChE,EAAe,GAAe,EAAK,EAAK,GAAI,GAAO,IAAY,GAC/D,EAAc,GAAe,EAAK,EAAK,KAAM,GAAM,IAAY,GAEnE,MAAO,AADW,GAAa,OAAO,GAAa,OAAO,GACvC,KAAK,KAG1B,YAAuB,EAAK,EAAK,CAC/B,GAAI,GAAQ,EACR,EAAQ,EAER,EAAO,GAAW,EAAK,GACvB,EAAQ,GAAI,KAAI,CAAC,IAErB,KAAO,GAAO,GAAQ,GAAQ,GAC5B,EAAM,IAAI,GACV,GAAS,EACT,EAAO,GAAW,EAAK,GAKzB,IAFA,EAAO,GAAW,EAAM,EAAG,GAAS,EAE7B,EAAM,GAAQ,GAAQ,GAC3B,EAAM,IAAI,GACV,GAAS,EACT,EAAO,GAAW,EAAM,EAAG,GAAS,EAGtC,SAAQ,CAAC,GAAG,GACZ,EAAM,KAAK,IACJ,EAUT,YAAwB,EAAO,EAAM,EAAS,CAC5C,GAAI,IAAU,EACZ,MAAO,CAAE,QAAS,EAAO,MAAO,GAAI,OAAQ,GAG9C,GAAI,GAAS,GAAI,EAAO,GACpB,EAAS,EAAO,OAChB,EAAU,GACV,EAAQ,EAEZ,OAAS,GAAI,EAAG,EAAI,EAAQ,IAAK,CAC/B,GAAI,CAAC,EAAY,GAAa,EAAO,GAErC,AAAI,IAAe,EACjB,GAAW,EAEN,AAAI,IAAe,KAAO,IAAc,IAC7C,GAAW,GAAiB,EAAY,EAAW,GAGnD,IAIJ,MAAI,IACF,IAAW,EAAQ,YAAc,GAAO,MAAQ,SAG3C,CAAE,UAAS,MAAO,CAAC,GAAQ,UAGpC,YAAyB,EAAK,EAAK,EAAK,EAAS,CAC/C,GAAI,GAAS,GAAc,EAAK,GAC5B,EAAS,GACT,EAAQ,EACR,EAEJ,OAAS,GAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,GAAI,GAAM,EAAO,GACb,EAAM,GAAe,OAAO,GAAQ,OAAO,GAAM,GACjD,EAAQ,GAEZ,GAAI,CAAC,EAAI,UAAY,GAAQ,EAAK,UAAY,EAAI,QAAS,CACzD,AAAI,EAAK,MAAM,OAAS,GACtB,EAAK,MAAM,MAGb,EAAK,MAAM,KAAK,EAAI,MAAM,IAC1B,EAAK,OAAS,EAAK,QAAU,GAAa,EAAK,OAC/C,EAAQ,EAAM,EACd,SAGF,AAAI,EAAI,UACN,GAAQ,GAAS,EAAK,EAAK,IAG7B,EAAI,OAAS,EAAQ,EAAI,QAAU,GAAa,EAAI,OACpD,EAAO,KAAK,GACZ,EAAQ,EAAM,EACd,EAAO,EAGT,MAAO,GAGT,YAAwB,EAAK,EAAY,EAAQ,EAAc,EAAS,CACtE,GAAI,GAAS,GAEb,OAAS,KAAO,GAAK,CACnB,GAAI,CAAE,UAAW,EAGjB,AAAI,CAAC,GAAgB,CAAC,GAAS,EAAY,SAAU,IACnD,EAAO,KAAK,EAAS,GAInB,GAAgB,GAAS,EAAY,SAAU,IACjD,EAAO,KAAK,EAAS,GAGzB,MAAO,GAOT,YAAa,EAAG,EAAG,CACjB,GAAI,GAAM,GACV,OAAS,GAAI,EAAG,EAAI,EAAE,OAAQ,IAAK,EAAI,KAAK,CAAC,EAAE,GAAI,EAAE,KACrD,MAAO,GAGT,YAAiB,EAAG,EAAG,CACrB,MAAO,GAAI,EAAI,EAAI,EAAI,EAAI,GAAK,EAGlC,YAAkB,EAAK,EAAK,EAAK,CAC/B,MAAO,GAAI,KAAK,GAAO,EAAI,KAAS,GAGtC,YAAoB,EAAK,EAAK,CAC5B,MAAO,QAAO,OAAO,GAAK,MAAM,EAAG,CAAC,GAAO,IAAI,OAAO,IAGxD,YAAoB,EAAS,EAAO,CAClC,MAAO,GAAW,EAAU,KAAK,IAAI,GAAI,GAG3C,YAAsB,EAAQ,CAC5B,GAAI,CAAC,EAAQ,EAAG,EAAO,IAAM,EAC7B,MAAI,IAAQ,EAAQ,EACX,IAAI,EAAS,GAAO,IAAM,EAAO,OAEnC,GAGT,YAA0B,EAAG,EAAG,EAAS,CACvC,MAAO,IAAI,IAAK,EAAI,GAAM,EAAK,GAAK,MAAM,KAG5C,YAAoB,EAAK,CACvB,MAAO,YAAY,KAAK,GAG1B,YAAkB,EAAO,EAAK,EAAS,CACrC,GAAI,CAAC,EAAI,SACP,MAAO,GAGT,GAAI,GAAO,KAAK,IAAI,EAAI,OAAS,OAAO,GAAO,QAC3C,EAAQ,EAAQ,aAAe,GAEnC,OAAQ,OACD,GACH,MAAO,OACJ,GACH,MAAO,GAAQ,KAAO,QACnB,GACH,MAAO,GAAQ,SAAW,aAE1B,MAAO,GAAQ,OAAO,KAAU,KAAK,MAS3C,GAAa,MAAQ,GACrB,GAAa,WAAa,IAAO,GAAa,MAAQ,GAMtD,GAAO,QAAU,KC/RjB,mBAOA,aAEA,GAAM,IAAO,QAAQ,QACf,GAAe,KAEf,GAAW,GAAO,IAAQ,MAAQ,MAAO,IAAQ,UAAY,CAAC,MAAM,QAAQ,GAE5E,GAAY,GACT,GAAS,IAAa,GAAO,OAAO,GAAS,OAAO,GAGvD,GAAe,GACZ,MAAO,IAAU,UAAa,MAAO,IAAU,UAAY,IAAU,GAGxE,GAAW,GAAO,OAAO,UAAU,CAAC,GAEpC,GAAQ,GAAS,CACrB,GAAI,GAAQ,GAAG,IACX,EAAQ,GAEZ,GADI,EAAM,KAAO,KAAK,GAAQ,EAAM,MAAM,IACtC,IAAU,IAAK,MAAO,GAC1B,KAAO,EAAM,EAAE,KAAW,KAAI,CAC9B,MAAO,GAAQ,GAGX,GAAY,CAAC,EAAO,EAAK,IACzB,MAAO,IAAU,UAAY,MAAO,IAAQ,SACvC,GAEF,EAAQ,YAAc,GAGzB,GAAM,CAAC,EAAO,EAAW,IAAa,CAC1C,GAAI,EAAY,EAAG,CACjB,GAAI,GAAO,EAAM,KAAO,IAAM,IAAM,GACpC,AAAI,GAAM,GAAQ,EAAM,MAAM,IAC9B,EAAS,EAAO,EAAM,SAAS,EAAO,EAAY,EAAI,EAAW,KAEnE,MAAI,KAAa,GACR,OAAO,GAET,GAGH,GAAW,CAAC,EAAO,IAAc,CACrC,GAAI,GAAW,EAAM,KAAO,IAAM,IAAM,GAKxC,IAJI,GACF,GAAQ,EAAM,MAAM,GACpB,KAEK,EAAM,OAAS,GAAW,EAAQ,IAAM,EAC/C,MAAO,GAAY,IAAM,EAAS,GAG9B,GAAa,CAAC,EAAO,IAAY,CACrC,EAAM,UAAU,KAAK,CAAC,EAAG,IAAM,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,GACxD,EAAM,UAAU,KAAK,CAAC,EAAG,IAAM,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI,GAExD,GAAI,GAAS,EAAQ,QAAU,GAAK,KAChC,EAAY,GACZ,EAAY,GACZ,EAgBJ,MAdI,GAAM,UAAU,QAClB,GAAY,EAAM,UAAU,KAAK,MAG/B,EAAM,UAAU,QAClB,GAAY,KAAK,IAAS,EAAM,UAAU,KAAK,SAGjD,AAAI,GAAa,EACf,EAAS,GAAG,KAAa,IAEzB,EAAS,GAAa,EAGpB,EAAQ,KACH,IAAI,IAAS,KAGf,GAGH,GAAU,CAAC,EAAG,EAAG,EAAW,IAAY,CAC5C,GAAI,EACF,MAAO,IAAa,EAAG,EAAG,CAAE,KAAM,MAAU,IAG9C,GAAI,GAAQ,OAAO,aAAa,GAChC,GAAI,IAAM,EAAG,MAAO,GAEpB,GAAI,GAAO,OAAO,aAAa,GAC/B,MAAO,IAAI,KAAS,MAGhB,GAAU,CAAC,EAAO,EAAK,IAAY,CACvC,GAAI,MAAM,QAAQ,GAAQ,CACxB,GAAI,GAAO,EAAQ,OAAS,GACxB,EAAS,EAAQ,QAAU,GAAK,KACpC,MAAO,GAAO,IAAI,IAAS,EAAM,KAAK,QAAU,EAAM,KAAK,KAE7D,MAAO,IAAa,EAAO,EAAK,IAG5B,GAAa,IAAI,IACd,GAAI,YAAW,4BAA8B,GAAK,QAAQ,GAAG,IAGhE,GAAe,CAAC,EAAO,EAAK,IAAY,CAC5C,GAAI,EAAQ,eAAiB,GAAM,KAAM,IAAW,CAAC,EAAO,IAC5D,MAAO,IAGH,GAAc,CAAC,EAAM,IAAY,CACrC,GAAI,EAAQ,eAAiB,GAC3B,KAAM,IAAI,WAAU,kBAAkB,qBAExC,MAAO,IAGH,GAAc,CAAC,EAAO,EAAK,EAAO,EAAG,EAAU,KAAO,CAC1D,GAAI,GAAI,OAAO,GACX,EAAI,OAAO,GAEf,GAAI,CAAC,OAAO,UAAU,IAAM,CAAC,OAAO,UAAU,GAAI,CAChD,GAAI,EAAQ,eAAiB,GAAM,KAAM,IAAW,CAAC,EAAO,IAC5D,MAAO,GAIT,AAAI,IAAM,GAAG,GAAI,GACb,IAAM,GAAG,GAAI,GAEjB,GAAI,GAAa,EAAI,EACjB,EAAc,OAAO,GACrB,EAAY,OAAO,GACnB,EAAa,OAAO,GACxB,EAAO,KAAK,IAAI,KAAK,IAAI,GAAO,GAEhC,GAAI,GAAS,GAAM,IAAgB,GAAM,IAAc,GAAM,GACzD,EAAS,EAAS,KAAK,IAAI,EAAY,OAAQ,EAAU,OAAQ,EAAW,QAAU,EACtF,EAAW,IAAW,IAAS,GAAU,EAAO,EAAK,KAAa,GAClE,EAAS,EAAQ,WAAa,GAAU,GAE5C,GAAI,EAAQ,SAAW,IAAS,EAC9B,MAAO,IAAQ,GAAS,EAAO,GAAS,GAAS,EAAK,GAAS,GAAM,GAGvE,GAAI,GAAQ,CAAE,UAAW,GAAI,UAAW,IACpC,EAAO,GAAO,EAAM,EAAM,EAAI,YAAc,aAAa,KAAK,KAAK,IAAI,IACvE,EAAQ,GACR,EAAQ,EAEZ,KAAO,EAAa,GAAK,EAAI,GAAK,GAChC,AAAI,EAAQ,UAAY,IAAQ,EAAO,EACrC,EAAK,GAEL,EAAM,KAAK,GAAI,EAAO,EAAG,GAAQ,EAAQ,IAE3C,EAAI,EAAa,EAAI,EAAO,EAAI,EAChC,IAGF,MAAI,GAAQ,UAAY,GACf,EAAO,EACV,GAAW,EAAO,GAClB,GAAQ,EAAO,KAAM,CAAE,KAAM,MAAU,IAGtC,GAGH,GAAc,CAAC,EAAO,EAAK,EAAO,EAAG,EAAU,KAAO,CAC1D,GAAK,CAAC,GAAS,IAAU,EAAM,OAAS,GAAO,CAAC,GAAS,IAAQ,EAAI,OAAS,EAC5E,MAAO,IAAa,EAAO,EAAK,GAIlC,GAAI,GAAS,EAAQ,WAAc,IAAO,OAAO,aAAa,IAC1D,EAAI,GAAG,IAAQ,WAAW,GAC1B,EAAI,GAAG,IAAM,WAAW,GAExB,EAAa,EAAI,EACjB,EAAM,KAAK,IAAI,EAAG,GAClB,EAAM,KAAK,IAAI,EAAG,GAEtB,GAAI,EAAQ,SAAW,IAAS,EAC9B,MAAO,IAAQ,EAAK,EAAK,GAAO,GAGlC,GAAI,GAAQ,GACR,EAAQ,EAEZ,KAAO,EAAa,GAAK,EAAI,GAAK,GAChC,EAAM,KAAK,EAAO,EAAG,IACrB,EAAI,EAAa,EAAI,EAAO,EAAI,EAChC,IAGF,MAAI,GAAQ,UAAY,GACf,GAAQ,EAAO,KAAM,CAAE,KAAM,GAAO,YAGtC,GAGH,GAAO,CAAC,EAAO,EAAK,EAAM,EAAU,KAAO,CAC/C,GAAI,GAAO,MAAQ,GAAa,GAC9B,MAAO,CAAC,GAGV,GAAI,CAAC,GAAa,IAAU,CAAC,GAAa,GACxC,MAAO,IAAa,EAAO,EAAK,GAGlC,GAAI,MAAO,IAAS,WAClB,MAAO,IAAK,EAAO,EAAK,EAAG,CAAE,UAAW,IAG1C,GAAI,GAAS,GACX,MAAO,IAAK,EAAO,EAAK,EAAG,GAG7B,GAAI,GAAO,IAAK,GAIhB,MAHI,GAAK,UAAY,IAAM,GAAK,KAAO,IACvC,EAAO,GAAQ,EAAK,MAAQ,EAExB,AAAC,GAAS,GAKV,GAAS,IAAU,GAAS,GACvB,GAAY,EAAO,EAAK,EAAM,GAGhC,GAAY,EAAO,EAAK,KAAK,IAAI,KAAK,IAAI,GAAO,GAAI,GARtD,GAAQ,MAAQ,CAAC,GAAS,GAAc,GAAY,EAAM,GACvD,GAAK,EAAO,EAAK,EAAG,IAU/B,GAAO,QAAU,KCxPjB,gCAEA,GAAM,IAAO,KACP,GAAQ,KAER,GAAU,CAAC,EAAK,EAAU,KAAO,CACrC,GAAI,GAAO,CAAC,EAAM,EAAS,KAAO,CAChC,GAAI,GAAe,GAAM,eAAe,GACpC,EAAc,EAAK,UAAY,IAAQ,EAAQ,gBAAkB,GACjE,EAAU,IAAiB,IAAQ,IAAgB,GACnD,EAAS,EAAQ,gBAAkB,GAAO,KAAO,GACjD,EAAS,GAKb,GAHI,EAAK,SAAW,IAGhB,EAAK,UAAY,GACnB,MAAO,GAAS,EAAK,MAGvB,GAAI,EAAK,OAAS,OAChB,MAAO,GAAW,EAAS,EAAK,MAAS,IAG3C,GAAI,EAAK,OAAS,QAChB,MAAO,GAAW,EAAS,EAAK,MAAS,IAG3C,GAAI,EAAK,OAAS,QAChB,MAAO,GAAK,KAAK,OAAS,QAAU,GAAM,EAAU,EAAK,MAAQ,IAGnE,GAAI,EAAK,MACP,MAAO,GAAK,MAGd,GAAI,EAAK,OAAS,EAAK,OAAS,EAAG,CACjC,GAAI,GAAO,GAAM,OAAO,EAAK,OACzB,EAAQ,GAAK,GAAG,EAAM,IAAK,EAAS,KAAM,GAAO,QAAS,KAE9D,GAAI,EAAM,SAAW,EACnB,MAAO,GAAK,OAAS,GAAK,EAAM,OAAS,EAAI,IAAI,KAAW,EAIhE,GAAI,EAAK,MACP,OAAS,KAAS,GAAK,MACrB,GAAU,EAAK,EAAO,GAG1B,MAAO,IAGT,MAAO,GAAK,IAGd,GAAO,QAAU,KCxDjB,gCAEA,GAAM,IAAO,KACP,GAAY,KACZ,GAAQ,KAER,GAAS,CAAC,EAAQ,GAAI,EAAQ,GAAI,EAAU,KAAU,CAC1D,GAAI,GAAS,GAKb,GAHA,EAAQ,GAAG,OAAO,GAClB,EAAQ,GAAG,OAAO,GAEd,CAAC,EAAM,OAAQ,MAAO,GAC1B,GAAI,CAAC,EAAM,OACT,MAAO,GAAU,GAAM,QAAQ,GAAO,IAAI,GAAO,IAAI,MAAU,EAGjE,OAAS,KAAQ,GACf,GAAI,MAAM,QAAQ,GAChB,OAAS,KAAS,GAChB,EAAO,KAAK,GAAO,EAAO,EAAO,QAGnC,QAAS,KAAO,GACd,AAAI,IAAY,IAAQ,MAAO,IAAQ,UAAU,GAAM,IAAI,MAC3D,EAAO,KAAK,MAAM,QAAQ,GAAO,GAAO,EAAM,EAAK,GAAY,EAAO,GAI5E,MAAO,IAAM,QAAQ,IAGjB,GAAS,CAAC,EAAK,EAAU,KAAO,CACpC,GAAI,GAAa,EAAQ,aAAe,OAAS,IAAO,EAAQ,WAE5D,EAAO,CAAC,EAAM,EAAS,KAAO,CAChC,EAAK,MAAQ,GAEb,GAAI,GAAI,EACJ,EAAI,EAAO,MAEf,KAAO,EAAE,OAAS,SAAW,EAAE,OAAS,QAAU,EAAE,QAClD,EAAI,EAAE,OACN,EAAI,EAAE,MAGR,GAAI,EAAK,SAAW,EAAK,OAAQ,CAC/B,EAAE,KAAK,GAAO,EAAE,MAAO,GAAU,EAAM,KACvC,OAGF,GAAI,EAAK,OAAS,SAAW,EAAK,UAAY,IAAQ,EAAK,MAAM,SAAW,EAAG,CAC7E,EAAE,KAAK,GAAO,EAAE,MAAO,CAAC,QACxB,OAGF,GAAI,EAAK,OAAS,EAAK,OAAS,EAAG,CACjC,GAAI,GAAO,GAAM,OAAO,EAAK,OAE7B,GAAI,GAAM,aAAa,GAAG,EAAM,EAAQ,KAAM,GAC5C,KAAM,IAAI,YAAW,uGAGvB,GAAI,GAAQ,GAAK,GAAG,EAAM,GAC1B,AAAI,EAAM,SAAW,GACnB,GAAQ,GAAU,EAAM,IAG1B,EAAE,KAAK,GAAO,EAAE,MAAO,IACvB,EAAK,MAAQ,GACb,OAGF,GAAI,GAAU,GAAM,aAAa,GAC7B,EAAQ,EAAK,MACb,EAAQ,EAEZ,KAAO,EAAM,OAAS,SAAW,EAAM,OAAS,QAAU,EAAM,QAC9D,EAAQ,EAAM,OACd,EAAQ,EAAM,MAGhB,OAAS,GAAI,EAAG,EAAI,EAAK,MAAM,OAAQ,IAAK,CAC1C,GAAI,GAAQ,EAAK,MAAM,GAEvB,GAAI,EAAM,OAAS,SAAW,EAAK,OAAS,QAAS,CACnD,AAAI,IAAM,GAAG,EAAM,KAAK,IACxB,EAAM,KAAK,IACX,SAGF,GAAI,EAAM,OAAS,QAAS,CAC1B,EAAE,KAAK,GAAO,EAAE,MAAO,EAAO,IAC9B,SAGF,GAAI,EAAM,OAAS,EAAM,OAAS,OAAQ,CACxC,EAAM,KAAK,GAAO,EAAM,MAAO,EAAM,QACrC,SAGF,AAAI,EAAM,OACR,EAAK,EAAO,GAIhB,MAAO,IAGT,MAAO,IAAM,QAAQ,EAAK,KAG5B,GAAO,QAAU,KChHjB,gCAEA,GAAO,QAAU,CACf,WAAY,KAAO,GAGnB,OAAQ,IACR,OAAQ,IAGR,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAClB,iBAAkB,IAElB,sBAAuB,IACvB,uBAAwB,IAExB,cAAe,IAGf,eAAgB,IAChB,QAAS,IACT,eAAgB,KAChB,cAAe,IACf,qBAAsB,KACtB,uBAAwB,IACxB,WAAY,IACZ,WAAY,IACZ,YAAa,IACb,SAAU,IACV,kBAAmB,IACnB,WAAY,IACZ,sBAAuB,IACvB,eAAgB,KAChB,mBAAoB,IACpB,UAAW,IACX,kBAAmB,IACnB,wBAAyB,IACzB,sBAAuB,IACvB,yBAA0B,IAC1B,eAAgB;AAAA,EAChB,oBAAqB,OACrB,aAAc,IACd,UAAW,IACX,mBAAoB,IACpB,yBAA0B,IAC1B,uBAAwB,IACxB,0BAA2B,IAC3B,eAAgB,IAChB,kBAAmB,IACnB,WAAY,IACZ,SAAU,IACV,gBAAiB,IACjB,mBAAoB,IACpB,8BAA+B,YCvDjC,gCAEA,GAAM,IAAY,KAMZ,CACJ,cACA,kBACA,iBACA,cACA,YACA,yBACA,0BACA,yBACA,0BACA,4BACA,6BACA,qBACA,qBACA,uBACA,kCACE,KAME,GAAQ,CAAC,EAAO,EAAU,KAAO,CACrC,GAAI,MAAO,IAAU,SACnB,KAAM,IAAI,WAAU,qBAGtB,GAAI,GAAO,GAAW,GAClB,EAAM,MAAO,GAAK,WAAc,SAAW,KAAK,IAAI,GAAY,EAAK,WAAa,GACtF,GAAI,EAAM,OAAS,EACjB,KAAM,IAAI,aAAY,iBAAiB,EAAM,oCAAoC,MAGnF,GAAI,GAAM,CAAE,KAAM,OAAQ,QAAO,MAAO,IACpC,EAAQ,CAAC,GACT,EAAQ,EACR,EAAO,EACP,EAAW,EACX,EAAS,EAAM,OACf,EAAQ,EACR,EAAQ,EACR,EACA,EAAO,GAML,EAAU,IAAM,EAAM,KACtB,EAAO,GAAQ,CAKnB,GAJI,EAAK,OAAS,QAAU,EAAK,OAAS,OACxC,GAAK,KAAO,QAGV,GAAQ,EAAK,OAAS,QAAU,EAAK,OAAS,OAAQ,CACxD,EAAK,OAAS,EAAK,MACnB,OAGF,SAAM,MAAM,KAAK,GACjB,EAAK,OAAS,EACd,EAAK,KAAO,EACZ,EAAO,EACA,GAKT,IAFA,EAAK,CAAE,KAAM,QAEN,EAAQ,GAQb,GAPA,EAAQ,EAAM,EAAM,OAAS,GAC7B,EAAQ,IAMJ,MAAU,IAAiC,IAAU,IAQzD,IAAI,IAAU,GAAgB,CAC5B,EAAK,CAAE,KAAM,OAAQ,MAAQ,GAAQ,aAAe,EAAQ,IAAM,MAClE,SAOF,GAAI,IAAU,GAA2B,CACvC,EAAK,CAAE,KAAM,OAAQ,MAAO,KAAO,IACnC,SAOF,GAAI,IAAU,GAA0B,CACtC,IAEA,GAAI,GAAS,GACT,EAEJ,KAAO,EAAQ,GAAW,GAAO,MAAY,CAG3C,GAFA,GAAS,EAEL,IAAS,GAA0B,CACrC,IACA,SAGF,GAAI,IAAS,GAAgB,CAC3B,GAAS,IACT,SAGF,GAAI,IAAS,IACX,KAEI,IAAa,GACf,MAKN,EAAK,CAAE,KAAM,OAAQ,UACrB,SAOF,GAAI,IAAU,GAAuB,CACnC,EAAQ,EAAK,CAAE,KAAM,QAAS,MAAO,KACrC,EAAM,KAAK,GACX,EAAK,CAAE,KAAM,OAAQ,UACrB,SAGF,GAAI,IAAU,GAAwB,CACpC,GAAI,EAAM,OAAS,QAAS,CAC1B,EAAK,CAAE,KAAM,OAAQ,UACrB,SAEF,EAAQ,EAAM,MACd,EAAK,CAAE,KAAM,OAAQ,UACrB,EAAQ,EAAM,EAAM,OAAS,GAC7B,SAOF,GAAI,IAAU,IAAqB,IAAU,IAAqB,IAAU,GAAe,CACzF,GAAI,GAAO,EACP,EAMJ,IAJI,EAAQ,aAAe,IACzB,GAAQ,IAGH,EAAQ,GAAW,GAAO,MAAY,CAC3C,GAAI,IAAS,GAAgB,CAC3B,GAAS,EAAO,IAChB,SAGF,GAAI,IAAS,EAAM,CACjB,AAAI,EAAQ,aAAe,IAAM,IAAS,GAC1C,MAGF,GAAS,EAGX,EAAK,CAAE,KAAM,OAAQ,UACrB,SAOF,GAAI,IAAU,GAAuB,CACnC,IAEA,GAAI,GAAS,EAAK,OAAS,EAAK,MAAM,MAAM,MAAQ,KAAO,EAAM,SAAW,GAY5E,EAAQ,EAXI,CACV,KAAM,QACN,KAAM,GACN,MAAO,GACP,SACA,QACA,OAAQ,EACR,OAAQ,EACR,MAAO,KAIT,EAAM,KAAK,GACX,EAAK,CAAE,KAAM,OAAQ,UACrB,SAOF,GAAI,IAAU,GAAwB,CACpC,GAAI,EAAM,OAAS,QAAS,CAC1B,EAAK,CAAE,KAAM,OAAQ,UACrB,SAGF,GAAI,GAAO,QACX,EAAQ,EAAM,MACd,EAAM,MAAQ,GAEd,EAAK,CAAE,OAAM,UACb,IAEA,EAAQ,EAAM,EAAM,OAAS,GAC7B,SAOF,GAAI,IAAU,IAAc,EAAQ,EAAG,CACrC,GAAI,EAAM,OAAS,EAAG,CACpB,EAAM,OAAS,EACf,GAAI,GAAO,EAAM,MAAM,QACvB,EAAM,MAAQ,CAAC,EAAM,CAAE,KAAM,OAAQ,MAAO,GAAU,KAGxD,EAAK,CAAE,KAAM,QAAS,UACtB,EAAM,SACN,SAOF,GAAI,IAAU,IAAY,EAAQ,GAAK,EAAM,SAAW,EAAG,CACzD,GAAI,GAAW,EAAM,MAErB,GAAI,IAAU,GAAK,EAAS,SAAW,EAAG,CACxC,EAAK,CAAE,KAAM,OAAQ,UACrB,SAGF,GAAI,EAAK,OAAS,MAAO,CAKvB,GAJA,EAAM,MAAQ,GACd,EAAK,OAAS,EACd,EAAK,KAAO,QAER,EAAM,MAAM,SAAW,GAAK,EAAM,MAAM,SAAW,EAAG,CACxD,EAAM,QAAU,GAChB,EAAM,OAAS,EACf,EAAK,KAAO,OACZ,SAGF,EAAM,SACN,EAAM,KAAO,GACb,SAGF,GAAI,EAAK,OAAS,QAAS,CACzB,EAAS,MAET,GAAI,GAAS,EAAS,EAAS,OAAS,GACxC,EAAO,OAAS,EAAK,MAAQ,EAC7B,EAAO,EACP,EAAM,SACN,SAGF,EAAK,CAAE,KAAM,MAAO,UACpB,SAOF,EAAK,CAAE,KAAM,OAAQ,UAIvB,EAGE,IAFA,EAAQ,EAAM,MAEV,EAAM,OAAS,OAAQ,CACzB,EAAM,MAAM,QAAQ,GAAQ,CAC1B,AAAK,EAAK,OACJ,GAAK,OAAS,QAAQ,GAAK,OAAS,IACpC,EAAK,OAAS,SAAS,GAAK,QAAU,IACrC,EAAK,OAAO,GAAK,KAAO,QAC7B,EAAK,QAAU,MAKnB,GAAI,GAAS,EAAM,EAAM,OAAS,GAC9B,EAAQ,EAAO,MAAM,QAAQ,GAEjC,EAAO,MAAM,OAAO,EAAO,EAAG,GAAG,EAAM,aAElC,EAAM,OAAS,GAExB,SAAK,CAAE,KAAM,QACN,GAGT,GAAO,QAAU,KC5UjB,gCAEA,GAAM,IAAY,KACZ,GAAU,KACV,GAAS,KACT,GAAQ,KAgBR,GAAS,CAAC,EAAO,EAAU,KAAO,CACtC,GAAI,GAAS,GAEb,GAAI,MAAM,QAAQ,GAChB,OAAS,KAAW,GAAO,CACzB,GAAI,GAAS,GAAO,OAAO,EAAS,GACpC,AAAI,MAAM,QAAQ,GAChB,EAAO,KAAK,GAAG,GAEf,EAAO,KAAK,OAIhB,GAAS,GAAG,OAAO,GAAO,OAAO,EAAO,IAG1C,MAAI,IAAW,EAAQ,SAAW,IAAQ,EAAQ,UAAY,IAC5D,GAAS,CAAC,GAAG,GAAI,KAAI,KAEhB,GAiBT,GAAO,MAAQ,CAAC,EAAO,EAAU,KAAO,GAAM,EAAO,GAgBrD,GAAO,UAAY,CAAC,EAAO,EAAU,KAC/B,AACK,GADL,MAAO,IAAU,SACF,GAAO,MAAM,EAAO,GAEtB,EAFgC,GAoBnD,GAAO,QAAU,CAAC,EAAO,EAAU,KAC7B,OAAO,IAAU,UACnB,GAAQ,GAAO,MAAM,EAAO,IAEvB,GAAQ,EAAO,IAoBxB,GAAO,OAAS,CAAC,EAAO,EAAU,KAAO,CACvC,AAAI,MAAO,IAAU,UACnB,GAAQ,GAAO,MAAM,EAAO,IAG9B,GAAI,GAAS,GAAO,EAAO,GAG3B,MAAI,GAAQ,UAAY,IACtB,GAAS,EAAO,OAAO,UAIrB,EAAQ,UAAY,IACtB,GAAS,CAAC,GAAG,GAAI,KAAI,KAGhB,GAmBT,GAAO,OAAS,CAAC,EAAO,EAAU,KAC5B,IAAU,IAAM,EAAM,OAAS,EAC1B,CAAC,GAGJ,EAAQ,SAAW,GACrB,GAAO,QAAQ,EAAO,GACtB,GAAO,OAAO,EAAO,GAO3B,GAAO,QAAU,8oDCzKjB,sBAAO,QAAU,OCAjB,gCACA,GAAM,IAAO,QAAQ,QACf,GAAmB,KAEnB,GAAa,GAAI,KAAI,IAE3B,GAAO,QAAU,GAAY,GAAW,IAAI,GAAK,QAAQ,GAAU,MAAM,GAAG,iBCN5E,0BAEA,GAAM,CAAC,QAAO,QAAQ,QAChB,CAAC,aAAY,QACb,GAAK,QAAQ,MAEnB,EAAQ,OAAS,MACjB,EAAQ,SAAW,QACnB,EAAQ,OAAS,MACjB,EAAQ,UAAY,SACpB,EAAQ,WAAa,SACrB,EAAQ,UAAY,SACpB,EAAQ,cAAgB,YACxB,EAAQ,OAAS,MACjB,EAAQ,SAAW,QAEnB,EAAQ,SAAW,OACnB,EAAQ,QAAU,MAClB,EAAQ,UAAY,QAEpB,EAAQ,gBAAkB,UAC1B,EAAQ,iBAAmB,WAC3B,EAAQ,gBAAkB,UAC1B,EAAQ,cAAgB,QACxB,EAAQ,eAAiB,SACzB,EAAQ,gBAAkB,UAC1B,EAAQ,kBAAoB,OAC5B,EAAQ,uBAAyB,YACjC,EAAQ,qBAAuB,UAE/B,EAAQ,cAAgB,YACxB,EAAQ,QAAU,cAClB,EAAQ,QAAU,cAClB,EAAQ,aAAe,CAAC,EAAQ,cAAe,EAAQ,QAAS,EAAQ,SAExE,EAAQ,UAAY,IAAI,KAExB,EAAQ,cAAgB,MACxB,EAAQ,gBAAkB,OAC1B,EAAQ,uBAAyB,QACjC,EAAQ,OAAS,mCACjB,EAAQ,YAAc,WAEtB,EAAQ,MAAQ,IAChB,EAAQ,YAAc,KACtB,EAAQ,YAAc,IACtB,EAAQ,KAAO,IACf,EAAQ,QAAU,IAClB,EAAQ,SAAW,KACnB,EAAQ,KAAO,IACf,EAAQ,SAAW,KACnB,EAAQ,cAAgB,QACxB,EAAQ,eAAiB,MACzB,EAAQ,WAAa,MACrB,EAAQ,cAAgB,CAAC,IAAK,IAC9B,EAAQ,YAAc,SACtB,EAAQ,cAAgB,WACxB,EAAQ,UAAY,GACpB,EAAQ,SAAW,IAAM,GACzB,EAAQ,YAAc,GAAO,EAE7B,EAAQ,UAAY,KAAa,QACjC,EAAQ,QAAU,KAAa,SAC/B,EAAQ,QAAU,KAAa,QAC/B,EAAQ,OAAS,GAAG,SAAW,UChE/B,gCAEA,GAAM,IAAK,QAAQ,MACb,GAAU,QAAQ,QAClB,CAAE,cAAc,QAAQ,QACxB,GAAe,KACf,CACJ,aACA,WACA,YACA,aACA,iBACA,WACA,WACA,gBACA,aACA,UACA,cACA,YACA,YACA,WACA,eACA,SACE,KAEE,GAAsB,QAEtB,GAAO,GAAU,GAAG,MACpB,GAAO,GAAU,GAAG,MACpB,GAAQ,GAAU,GAAG,OACrB,GAAQ,GAAU,GAAG,OACrB,GAAa,GAAU,GAAG,UAE1B,GAAc,CAAE,SAAO,SAGvB,GAAU,CAAC,EAAK,IAAO,CAC3B,AAAI,YAAe,KACjB,EAAI,QAAQ,GAEZ,EAAG,IAID,GAAgB,CAAC,EAAM,EAAM,IAAS,CAC1C,GAAI,GAAY,EAAK,GACrB,AAAM,YAAqB,MACzB,GAAK,GAAQ,EAAY,GAAI,KAAI,CAAC,KAEpC,EAAU,IAAI,IAGV,GAAY,GAAQ,GAAO,CAC/B,GAAM,GAAM,EAAK,GACjB,AAAI,YAAe,KACjB,EAAI,QAEJ,MAAO,GAAK,IAIV,GAAa,CAAC,EAAM,EAAM,IAAS,CACvC,GAAM,GAAY,EAAK,GACvB,AAAI,YAAqB,KACvB,EAAU,OAAO,GACR,IAAc,GACvB,MAAO,GAAK,IAIV,GAAa,AAAC,GAAQ,YAAe,KAAM,EAAI,OAAS,EAAI,CAAC,EAuB7D,GAAmB,GAAI,KAW7B,YAA+B,EAAM,EAAS,EAAU,EAAY,EAAS,CAC3E,GAAM,GAAc,CAAC,EAAU,IAAW,CACxC,EAAS,GACT,EAAQ,EAAU,EAAQ,CAAC,YAAa,IAIpC,GAAU,IAAS,GACrB,GACE,GAAQ,QAAQ,EAAM,GAAS,GAAe,GAAQ,KAAK,EAAM,KAIvE,GAAI,CACF,MAAO,IAAG,MAAM,EAAM,EAAS,SACxB,EAAP,CACA,EAAW,IAYf,GAAM,IAAmB,CAAC,EAAU,EAAM,EAAM,EAAM,IAAS,CAC7D,GAAM,GAAO,GAAiB,IAAI,GAClC,AAAI,CAAC,GACL,GAAQ,EAAK,GAAO,AAAC,GAAa,CAChC,EAAS,EAAM,EAAM,MAYnB,GAAqB,CAAC,EAAM,EAAU,EAAS,IAAa,CAChE,GAAM,CAAC,WAAU,aAAY,cAAc,EACvC,EAAO,GAAiB,IAAI,GAG5B,EACJ,GAAI,CAAC,EAAQ,WACX,SAAU,GACR,EAAM,EAAS,EAAU,EAAY,GAEhC,EAAQ,MAAM,KAAK,GAE5B,GAAI,EACF,GAAc,EAAM,GAAe,GACnC,GAAc,EAAM,GAAS,GAC7B,GAAc,EAAM,GAAS,OACxB,CAQL,GAPA,EAAU,GACR,EACA,EACA,GAAiB,KAAK,KAAM,EAAU,IACtC,EACA,GAAiB,KAAK,KAAM,EAAU,KAEpC,CAAC,EAAS,OACd,EAAQ,GAAG,GAAU,KAAO,IAAU,CACpC,GAAM,GAAe,GAAiB,KAAK,KAAM,EAAU,IAG3D,GAFA,EAAK,gBAAkB,GAEnB,IAAa,EAAM,OAAS,QAC9B,GAAI,CACF,GAAM,GAAK,KAAM,IAAK,EAAM,KAC5B,KAAM,IAAM,GACZ,EAAa,SACN,EAAP,MAEF,GAAa,KAGjB,EAAO,CACL,UAAW,EACX,YAAa,EACb,YAAa,EACb,WAEF,GAAiB,IAAI,EAAU,GAMjC,MAAO,IAAM,CACX,GAAW,EAAM,GAAe,GAChC,GAAW,EAAM,GAAS,GAC1B,GAAW,EAAM,GAAS,GACtB,GAAW,EAAK,YAGlB,GAAK,QAAQ,QAEb,GAAiB,OAAO,GACxB,GAAa,QAAQ,GAAU,IAC/B,EAAK,QAAU,OACf,OAAO,OAAO,MASd,GAAuB,GAAI,KAW3B,GAAyB,CAAC,EAAM,EAAU,EAAS,IAAa,CACpE,GAAM,CAAC,WAAU,cAAc,EAC3B,EAAO,GAAqB,IAAI,GAGhC,EAAY,GAAI,KAChB,EAAc,GAAI,KAEhB,EAAQ,GAAQ,EAAK,QAC3B,MAAI,IAAU,GAAM,WAAa,EAAQ,YAAc,EAAM,SAAW,EAAQ,WAK9E,GAAY,EAAK,UACjB,EAAc,EAAK,YACnB,GAAG,YAAY,GACf,EAAO,QAKT,AAAI,EACF,IAAc,EAAM,GAAe,GACnC,GAAc,EAAM,GAAS,IAK7B,GAAO,CACL,UAAW,EACX,YAAa,EACb,UACA,QAAS,GAAG,UAAU,EAAU,EAAS,CAAC,EAAM,IAAS,CACvD,GAAQ,EAAK,YAAa,AAAC,GAAe,CACxC,EAAW,GAAW,EAAU,CAAC,OAAM,WAEzC,GAAM,GAAY,EAAK,QACvB,AAAI,GAAK,OAAS,EAAK,MAAQ,EAAY,EAAK,SAAW,IAAc,IACvE,GAAQ,EAAK,UAAW,AAAC,GAAa,EAAS,EAAM,OAI3D,GAAqB,IAAI,EAAU,IAM9B,IAAM,CACX,GAAW,EAAM,GAAe,GAChC,GAAW,EAAM,GAAS,GACtB,GAAW,EAAK,YAClB,IAAqB,OAAO,GAC5B,GAAG,YAAY,GACf,EAAK,QAAU,EAAK,QAAU,OAC9B,OAAO,OAAO,MAQpB,QAAoB,CAKpB,YAAY,EAAK,CACf,KAAK,IAAM,EACX,KAAK,kBAAoB,AAAC,GAAU,EAAI,aAAa,GASvD,iBAAiB,EAAM,EAAU,CAC/B,GAAM,GAAO,KAAK,IAAI,QAChB,EAAY,GAAQ,QAAQ,GAC5B,EAAW,GAAQ,SAAS,GAElC,AADe,KAAK,IAAI,eAAe,GAChC,IAAI,GACX,GAAM,GAAe,GAAQ,QAAQ,GAC/B,EAAU,CAAC,WAAY,EAAK,YAClC,AAAK,GAAU,GAAW,IAE1B,GAAI,GACJ,MAAI,GAAK,WACP,GAAQ,SAAW,EAAK,sBAAwB,GAAa,GAC3D,EAAK,eAAiB,EAAK,SAC7B,EAAS,GAAuB,EAAM,EAAc,EAAS,CAC3D,WACA,WAAY,KAAK,IAAI,YAGvB,EAAS,GAAmB,EAAM,EAAc,EAAS,CACvD,WACA,WAAY,KAAK,kBACjB,WAAY,KAAK,IAAI,WAGlB,EAUT,YAAY,EAAM,EAAO,EAAY,CACnC,GAAI,KAAK,IAAI,OACX,OAEF,GAAM,GAAU,GAAQ,QAAQ,GAC1B,EAAW,GAAQ,SAAS,GAC5B,EAAS,KAAK,IAAI,eAAe,GAEnC,EAAY,EAGhB,GAAI,EAAO,IAAI,GAAW,OAE1B,GAAM,GAAW,MAAO,EAAM,IAAa,CACzC,GAAI,EAAC,KAAK,IAAI,UAAU,GAAqB,EAAM,IACnD,GAAI,CAAC,GAAY,EAAS,UAAY,EACpC,GAAI,CACF,GAAM,GAAW,KAAM,IAAK,GAC5B,GAAI,KAAK,IAAI,OAAQ,OAErB,GAAM,GAAK,EAAS,QACd,EAAK,EAAS,QACpB,AAAI,EAAC,GAAM,GAAM,GAAM,IAAO,EAAU,UACtC,KAAK,IAAI,MAAM,GAAW,EAAM,GAElC,AAAI,IAAW,EAAU,MAAQ,EAAS,IACxC,MAAK,IAAI,WAAW,GACpB,EAAY,EACZ,KAAK,IAAI,eAAe,EAAM,KAAK,iBAAiB,EAAM,KAE1D,EAAY,QAEP,EAAP,CAEA,KAAK,IAAI,QAAQ,EAAS,WAGnB,EAAO,IAAI,GAAW,CAE/B,GAAM,GAAK,EAAS,QACd,EAAK,EAAS,QACpB,AAAI,EAAC,GAAM,GAAM,GAAM,IAAO,EAAU,UACtC,KAAK,IAAI,MAAM,GAAW,EAAM,GAElC,EAAY,KAIV,EAAS,KAAK,iBAAiB,EAAM,GAG3C,GAAI,CAAE,IAAc,KAAK,IAAI,QAAQ,gBAAkB,KAAK,IAAI,aAAa,GAAO,CAClF,GAAI,CAAC,KAAK,IAAI,UAAU,GAAQ,EAAM,GAAI,OAC1C,KAAK,IAAI,MAAM,GAAQ,EAAM,GAG/B,MAAO,QAWH,gBAAe,EAAO,EAAW,EAAM,EAAM,CACjD,GAAI,KAAK,IAAI,OACX,OAEF,GAAM,GAAO,EAAM,SACb,EAAM,KAAK,IAAI,eAAe,GAEpC,GAAI,CAAC,KAAK,IAAI,QAAQ,eAAgB,CAEpC,KAAK,IAAI,kBACT,GAAM,GAAW,KAAM,IAAW,GAClC,MAAI,MAAK,IAAI,OAAQ,OACrB,CAAI,EAAI,IAAI,GACN,KAAK,IAAI,cAAc,IAAI,KAAU,GACvC,MAAK,IAAI,cAAc,IAAI,EAAM,GACjC,KAAK,IAAI,MAAM,GAAW,EAAM,EAAM,QAGxC,GAAI,IAAI,GACR,KAAK,IAAI,cAAc,IAAI,EAAM,GACjC,KAAK,IAAI,MAAM,GAAQ,EAAM,EAAM,QAErC,KAAK,IAAI,aACF,IAIT,GAAI,KAAK,IAAI,cAAc,IAAI,GAC7B,MAAO,GAGT,KAAK,IAAI,cAAc,IAAI,EAAM,IAGnC,YAAY,EAAW,EAAY,EAAI,EAAQ,EAAK,EAAO,EAAW,CAIpE,GAFA,EAAY,GAAQ,KAAK,EAAW,IAEhC,CAAC,EAAG,SACN,GAAY,KAAK,IAAI,UAAU,UAAW,EAAW,KACjD,CAAC,GAAW,OAGlB,GAAM,GAAW,KAAK,IAAI,eAAe,EAAG,MACtC,EAAU,GAAI,KAEhB,EAAS,KAAK,IAAI,UAAU,EAAW,CACzC,WAAY,GAAS,EAAG,WAAW,GACnC,gBAAiB,GAAS,EAAG,UAAU,GACvC,MAAO,IACN,GAAG,GAAU,KAAO,IAAU,CAC/B,GAAI,KAAK,IAAI,OAAQ,CACnB,EAAS,OACT,OAEF,GAAM,GAAO,EAAM,KACf,EAAO,GAAQ,KAAK,EAAW,GAGnC,GAFA,EAAQ,IAAI,GAER,IAAM,MAAM,kBAAoB,KAAM,MAAK,eAAe,EAAO,EAAW,EAAM,IAItF,IAAI,KAAK,IAAI,OAAQ,CACnB,EAAS,OACT,OAKF,AAAI,KAAS,GAAU,CAAC,GAAU,CAAC,EAAS,IAAI,KAC9C,MAAK,IAAI,kBAGT,EAAO,GAAQ,KAAK,EAAK,GAAQ,SAAS,EAAK,IAE/C,KAAK,aAAa,EAAM,EAAY,EAAI,EAAQ,OAEjD,GAAG,GAAU,KAAK,mBAErB,MAAO,IAAI,SAAQ,GACjB,EAAO,KAAK,GAAS,IAAM,CACzB,GAAI,KAAK,IAAI,OAAQ,CACnB,EAAS,OACT,OAEF,GAAM,GAAe,EAAY,EAAU,QAAU,GAErD,IAKA,EAAS,cAAc,OAAO,AAAC,GACtB,IAAS,GACd,CAAC,EAAQ,IAAI,IAIZ,EAAC,EAAG,SAAW,EAAG,WAAW,CAC5B,SAAU,GAAQ,QAAQ,EAAW,OAExC,QAAQ,AAAC,GAAS,CACnB,KAAK,IAAI,QAAQ,EAAW,KAG9B,EAAS,OAGL,GAAc,KAAK,YAAY,EAAW,GAAO,EAAI,EAAQ,EAAK,EAAO,WAgB7E,YAAW,EAAK,EAAO,EAAY,EAAO,EAAQ,EAAI,EAAU,CACpE,GAAM,GAAY,KAAK,IAAI,eAAe,GAAQ,QAAQ,IACpD,EAAU,EAAU,IAAI,GAAQ,SAAS,IAC/C,AAAI,CAAE,IAAc,KAAK,IAAI,QAAQ,gBAAkB,CAAC,GAAU,CAAC,GAC7D,EAAC,EAAG,SAAW,EAAG,WAAW,KAAM,KAAK,IAAI,MAAM,GAAY,EAAK,GAIzE,EAAU,IAAI,GAAQ,SAAS,IAC/B,KAAK,IAAI,eAAe,GACxB,GAAI,GACA,EAEE,EAAS,KAAK,IAAI,QAAQ,MAChC,GAAK,IAAU,MAAQ,GAAS,IAAW,CAAC,KAAK,IAAI,cAAc,IAAI,GAAW,CAChF,GAAI,CAAC,GACH,MAAM,MAAK,YAAY,EAAK,EAAY,EAAI,EAAQ,EAAK,EAAO,GAC5D,KAAK,IAAI,QAAQ,OAGvB,EAAS,KAAK,iBAAiB,EAAK,CAAC,EAAS,IAAU,CAEtD,AAAI,GAAS,EAAM,UAAY,GAE/B,KAAK,YAAY,EAAS,GAAO,EAAI,EAAQ,EAAK,EAAO,KAG7D,MAAO,QAaH,cAAa,EAAM,EAAY,EAAS,EAAO,EAAQ,CAC3D,GAAM,GAAQ,KAAK,IAAI,WACvB,GAAI,KAAK,IAAI,WAAW,IAAS,KAAK,IAAI,OACxC,WACO,GAGT,GAAM,GAAK,KAAK,IAAI,iBAAiB,EAAM,GAC3C,AAAI,CAAC,EAAG,SAAW,GACjB,GAAG,QAAU,EAAQ,QACrB,EAAG,WAAa,EAAQ,WACxB,EAAG,WAAa,GAAS,EAAQ,WAAW,GAC5C,EAAG,UAAY,GAAS,EAAQ,UAAU,IAI5C,GAAI,CACF,GAAM,GAAQ,KAAM,IAAY,EAAG,YAAY,EAAG,WAClD,GAAI,KAAK,IAAI,OAAQ,OACrB,GAAI,KAAK,IAAI,WAAW,EAAG,UAAW,GACpC,WACO,GAGT,GAAM,GAAS,KAAK,IAAI,QAAQ,gBAAkB,CAAC,EAAK,SAAS,KAAS,CAAC,EAAK,SAAS,IACrF,EACJ,GAAI,EAAM,cAAe,CACvB,GAAM,GAAU,GAAQ,QAAQ,GAC1B,EAAa,EAAS,KAAM,IAAW,GAAQ,EAGrD,GAFI,KAAK,IAAI,QACb,GAAS,KAAM,MAAK,WAAW,EAAG,UAAW,EAAO,EAAY,EAAO,EAAQ,EAAI,GAC/E,KAAK,IAAI,QAAQ,OAErB,AAAI,IAAY,GAAc,IAAe,QAC3C,KAAK,IAAI,cAAc,IAAI,EAAS,WAE7B,EAAM,iBAAkB,CACjC,GAAM,GAAa,EAAS,KAAM,IAAW,GAAQ,EACrD,GAAI,KAAK,IAAI,OAAQ,OACrB,GAAM,GAAS,GAAQ,QAAQ,EAAG,WAIlC,GAHA,KAAK,IAAI,eAAe,GAAQ,IAAI,EAAG,WACvC,KAAK,IAAI,MAAM,GAAQ,EAAG,UAAW,GACrC,EAAS,KAAM,MAAK,WAAW,EAAQ,EAAO,EAAY,EAAO,EAAM,EAAI,GACvE,KAAK,IAAI,OAAQ,OAGrB,AAAI,IAAe,QACjB,KAAK,IAAI,cAAc,IAAI,GAAQ,QAAQ,GAAO,OAGpD,GAAS,KAAK,YAAY,EAAG,UAAW,EAAO,GAEjD,WAEA,KAAK,IAAI,eAAe,EAAM,GACvB,SAEA,EAAP,CACA,GAAI,KAAK,IAAI,aAAa,GACxB,WACO,KAOb,GAAO,QAAU,KCroBjB,gCAEA,GAAM,IAAK,QAAQ,MACb,GAAU,QAAQ,QAClB,CAAE,cAAc,QAAQ,QAE1B,GACJ,GAAI,CACF,GAAW,QAAQ,kBACZ,EAAP,CACA,AAAI,QAAQ,IAAI,uCAAuC,QAAQ,MAAM,GAGvE,GAAI,GAAU,CAEZ,GAAM,GAAO,QAAQ,QAAQ,MAAM,iBACnC,GAAI,GAAQ,EAAK,IAAM,EAAK,GAAI,CAC9B,GAAM,GAAM,OAAO,SAAS,EAAK,GAAI,IAC/B,EAAM,OAAO,SAAS,EAAK,GAAI,IACrC,AAAI,IAAQ,GAAK,EAAM,IACrB,IAAW,SAKjB,GAAM,CACJ,UACA,aACA,cACA,aACA,YACA,YACA,WACA,mBACA,oBACA,mBACA,iBAEA,mBACA,qBACA,0BACA,wBAEA,iBACA,cACA,aACA,iBACA,YACA,gBACE,KAEE,GAAQ,AAAC,GAAU,MAAM,GAAS,GAAK,CAAC,MAAO,GAE/C,GAAO,GAAU,GAAG,MACpB,GAAQ,GAAU,GAAG,OACrB,GAAW,GAAU,GAAG,UAExB,GAAc,CAAE,QAAM,UAkBtB,GAAmB,GAAI,KAIvB,GAAwB,GAExB,GAAkB,GAAI,KAAI,CAC9B,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,SAS/C,GAAyB,CAAC,EAAM,IAE7B,EAAC,KADK,GAAS,MAAM,EAAM,KAapC,YAA6B,EAAM,EAAU,EAAU,EAAY,CACjE,GAAI,GAAY,GAAQ,QAAQ,GAAY,GAAQ,QAAQ,GAAY,EAElE,EAAa,GAAQ,QAAQ,GAC/B,EAAO,GAAiB,IAAI,GAMhC,AAAI,GAAiB,IACnB,GAAY,GAGd,GAAM,GAAe,GAAQ,QAAQ,GAC/B,EAAa,IAAiB,EAE9B,EAAmB,CAAC,EAAU,EAAO,IAAS,CAClD,AAAI,GAAY,GAAW,EAAS,QAAQ,EAAU,IAEpD,KAAa,GACb,CAAC,EAAS,QAAQ,EAAe,GAAQ,OACzC,EAAS,EAAU,EAAO,IAK1B,EAAgB,GACpB,OAAW,KAAe,IAAiB,OACzC,GAAI,EAAS,QAAQ,GAAQ,QAAQ,GAAe,GAAQ,OAAS,EAAG,CACtE,EAAY,EACZ,EAAO,GAAiB,IAAI,GAC5B,EAAgB,GAChB,MAIJ,MAAI,IAAQ,EACV,EAAK,UAAU,IAAI,GAEnB,GAAO,CACL,UAAW,GAAI,KAAI,CAAC,IACpB,aACA,QAAS,GAAuB,EAAW,CAAC,EAAU,IAAU,CAC9D,GAAI,CAAC,EAAK,UAAU,KAAM,OAC1B,GAAM,GAAO,GAAS,QAAQ,EAAU,GACxC,EAAK,UAAU,QAAQ,GAAQ,CAC7B,EAAK,EAAU,EAAO,KAGxB,EAAK,WAAW,EAAK,MAAO,EAAU,MAG1C,GAAiB,IAAI,EAAW,IAK3B,IAAM,CACX,GAAM,GAAM,EAAK,UAGjB,GADA,EAAI,OAAO,GACP,CAAC,EAAI,MACP,IAAiB,OAAO,GACpB,EAAK,SAAS,MAAO,GAAK,QAAQ,OAAO,KAAK,IAAM,CACtD,EAAK,WAAa,EAAK,QAAU,OACjC,OAAO,OAAO,MAQtB,GAAM,IAAmB,AAAC,GAAS,CACjC,GAAI,GAAQ,EACZ,OAAW,KAAa,IAAiB,OACvC,GAAI,EAAU,QAAQ,KAAU,GAC9B,KACI,GAAS,IACX,MAAO,GAKb,MAAO,IAIH,GAAS,IAAM,IAAY,GAAiB,KAAO,IAGnD,GAAY,CAAC,EAAM,IAAS,CAChC,GAAI,GAAI,EACR,KAAO,CAAC,EAAK,QAAQ,IAAU,GAAO,GAAQ,QAAQ,MAAW,GAAM,IACvE,MAAO,IAKH,GAAY,CAAC,EAAM,IACvB,EAAK,OAAS,IAA0B,EAAM,eAC9C,EAAK,OAAS,IAAwB,EAAM,kBAC5C,EAAK,OAAS,IAAqB,EAAM,SAM3C,QAAsB,CAKtB,YAAY,EAAK,CACf,KAAK,IAAM,EAEb,aAAa,EAAM,EAAO,CACxB,GAAM,GAAS,KAAK,IAAI,cACxB,GAAI,KAAK,IAAI,WAAW,EAAM,GAC5B,SAAO,IAAI,GACP,GAAS,EAAM,eACjB,EAAO,IAAI,EAAO,IAEb,GAGT,EAAO,OAAO,GACd,EAAO,OAAO,EAAO,IAGvB,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,EAAM,CAC1E,GAAM,GAAQ,EAAW,IAAI,GAAQ,GAAY,GACjD,KAAK,YAAY,EAAO,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,QAG9E,aAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,EAAM,CAChF,GAAI,CACF,GAAM,GAAQ,KAAM,IAAK,GACzB,GAAI,KAAK,IAAI,OAAQ,OACrB,AAAI,GAAU,EAAM,GAClB,KAAK,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,GAE3E,KAAK,YAAY,GAAW,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,SAEjF,EAAP,CACA,AAAI,EAAM,OAAS,SACjB,KAAK,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,GAE3E,KAAK,YAAY,GAAW,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,IAK5F,YAAY,EAAO,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,EAAM,CACjF,GAAI,OAAK,IAAI,QAAU,KAAK,aAAa,IAEzC,GAAI,IAAU,GAAW,CACvB,GAAM,GAAc,EAAK,OAAS,GAElC,AAAI,IAAe,EAAW,IAAI,KAChC,KAAK,IAAI,QAAQ,EAAQ,EAAM,OAE5B,CACL,GAAI,IAAU,GAAQ,CAIpB,GAFI,EAAK,OAAS,IAAwB,KAAK,IAAI,eAAe,GAE9D,EAAK,OAAS,IAAwB,EAAK,eAAgB,CAE7D,GAAM,GAAW,EAAK,QAAU,OAC9B,OAAY,GAAU,EAAU,GAAY,EAC9C,MAAO,MAAK,eAAe,EAAM,GAAO,GAAM,GAKhD,KAAK,IAAI,eAAe,GAAQ,IAAI,GAKtC,GAAM,GAAY,EAAK,OAAS,GAAyB,EAAQ,GAAa,EAC9E,KAAK,IAAI,MAAM,EAAW,GACtB,IAAc,IAAY,KAAK,eAAe,EAAM,GAAO,KAYnE,mBAAmB,EAAW,EAAU,EAAW,EAAY,CAC7D,GAAI,KAAK,IAAI,QAAU,KAAK,IAAI,WAAW,GAAY,OACvD,GAAM,GAAO,KAAK,IAAI,QA+ChB,EAAS,GACb,EACA,EAhDoB,MAAO,EAAU,EAAO,IAAS,CAErD,GADI,KAAK,IAAI,QAEX,EAAK,QAAU,QACf,GAAU,EAAU,GAAY,EAAK,MACrC,OACF,GAAM,GAAO,EAAU,GAAQ,KAC7B,EAAW,GAAQ,SAAS,EAAW,KAEzC,GAAI,GAAc,CAAC,EAAW,GAAO,OAErC,GAAM,GAAS,GAAQ,QAAQ,GACzB,EAAO,GAAQ,SAAS,GACxB,EAAa,KAAK,IAAI,eAC1B,EAAK,OAAS,GAAyB,EAAO,GAIhD,GAAI,GAAgB,IAAI,IAAU,EAAK,QAAU,GAC/C,GAAI,MAAO,GAAK,UAAY,GAAe,CACzC,GAAI,GACJ,GAAI,CACF,EAAQ,KAAM,IAAK,SACZ,EAAP,EAEF,GADI,KAAK,IAAI,QACT,KAAK,aAAa,EAAM,GAAQ,OACpC,AAAI,GAAU,EAAM,GAClB,KAAK,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,GAE3E,KAAK,YAAY,GAAW,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,OAGxF,MAAK,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,OAG7E,QAAQ,EAAK,WACR,QACA,IACH,MAAO,MAAK,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,OAC/E,QACA,IACH,MAAO,MAAK,YAAY,EAAM,EAAU,EAAU,EAAQ,EAAY,EAAM,EAAM,KAStF,KAAK,IAAI,UAGX,YAAK,IAAI,aACF,OAWH,wBAAuB,EAAU,EAAU,EAAW,EAAU,CAEpE,GAAI,OAAK,IAAI,QAAU,KAAK,IAAI,cAAc,IAAI,IAElD,MAAK,IAAI,cAAc,IAAI,EAAU,IACrC,KAAK,IAAI,kBAET,GAAI,CACF,GAAM,GAAa,KAAM,IAAS,GAClC,GAAI,KAAK,IAAI,OAAQ,OACrB,GAAI,KAAK,IAAI,WAAW,GACtB,MAAO,MAAK,IAAI,aAGlB,KAAK,IAAI,kBAIT,KAAK,eAAe,GAAc,EAAU,AAAC,GAAS,CACpD,GAAI,GAAc,EAClB,MAAI,IAAc,IAAe,GAC/B,EAAc,EAAK,QAAQ,EAAY,GAC9B,IAAS,IAClB,GAAc,GAAQ,KAAK,EAAU,IAEhC,EAAU,IAChB,GAAO,SACJ,EAAN,CACA,GAAI,KAAK,IAAI,aAAa,GACxB,MAAO,MAAK,IAAI,eAUtB,QAAQ,EAAS,EAAO,EAAa,EAAM,EAAU,CACnD,GAAM,GAAK,EAAY,GACjB,EAAQ,EAAM,cACd,EAAS,KAAK,IAAI,eAAe,GAAQ,QAAQ,IACjD,EAAO,GAAQ,SAAS,GAI9B,AADI,GAAO,KAAK,IAAI,eAAe,GAC/B,GAAO,IAAI,IACf,GAAO,IAAI,GAEP,EAAC,EAAK,eAAiB,IAAa,KACtC,KAAK,IAAI,MAAM,EAAQ,GAAa,GAAQ,EAAI,IAIpD,UAAU,EAAU,EAAM,EAAI,EAAa,CACzC,GAAI,KAAK,IAAI,OAAQ,OACrB,GAAM,GAAS,KAAK,mBAClB,EAAG,UACH,GAAQ,QAAQ,GAAY,EAAG,WAC/B,EACA,EAAG,YAEL,KAAK,IAAI,eAAe,EAAM,QAW1B,gBAAe,EAAM,EAAW,EAAU,EAAY,CAC1D,GAAI,KAAK,IAAI,OACX,OAEF,GAAM,GAAO,KAAK,IAAI,QAChB,EAAc,MAAO,KAAc,GAAgB,EAAY,GAE/D,EAAK,KAAK,IAAI,iBAAiB,GAGrC,GAAI,CACF,GAAM,GAAQ,KAAM,IAAY,EAAG,YAAY,EAAG,WAClD,GAAI,KAAK,IAAI,OAAQ,OACrB,GAAI,KAAK,IAAI,WAAW,EAAG,UAAW,GACpC,KAAM,MAER,GAAI,EAAM,cAAe,CAKvB,GAHK,EAAG,YAAY,KAAK,QAAQ,EAAY,GAAO,EAAO,EAAa,EAAM,GAG1E,GAAc,EAAa,EAAK,MAAO,OAG3C,KAAK,IAAI,UAAU,EAAG,UAAW,CAC/B,WAAY,GAAS,EAAG,WAAW,GACnC,gBAAiB,GAAS,EAAG,UAAU,MACpC,GAAM,EAAK,MAAS,IAAc,MACpC,GAAG,GAAU,AAAC,GAAU,CAKzB,GAHI,KAAK,IAAI,QAGT,EAAM,MAAM,eAAiB,CAAC,EAAG,WAAW,GAAQ,OAExD,GAAM,GAAa,GAAQ,KAAK,EAAG,UAAW,EAAM,MAC9C,CAAC,YAAY,EAEnB,GAAI,EAAG,gBAAkB,EAAM,MAAM,iBAAkB,CAGrD,GAAM,GAAW,EAAK,QAAU,OAC9B,OAAY,GAAU,EAAY,GAAQ,QAAQ,EAAG,YAAc,EAErE,KAAK,uBAAuB,EAAY,EAAU,EAAa,OAE/D,MAAK,QAAQ,EAAY,EAAM,MAAO,EAAa,EAAM,KAE1D,GAAG,GAAU,IAAU,GAAG,GAAS,IAAM,CAC1C,KAAK,IAAI,mBAGX,MAAK,QAAQ,EAAG,UAAW,EAAO,EAAa,EAAM,GACrD,KAAK,IAAI,mBAEJ,EAAP,CACA,AAAI,EAAC,GAAS,KAAK,IAAI,aAAa,KAElC,MAAK,IAAI,aACT,KAAK,IAAI,cAIb,GAAI,EAAK,YAAc,IAAa,GAClC,GAAI,MAAO,KAAc,GAEvB,KAAK,UAAU,OAAW,EAAM,EAAI,OAC/B,CACL,GAAI,GACJ,GAAI,CACF,EAAW,KAAM,IAAS,EAAG,iBACtB,EAAP,EACF,KAAK,UAAU,EAAU,EAAM,EAAI,MAOzC,GAAO,QAAU,GACjB,GAAO,QAAQ,OAAS,KC3gBxB,2BAEA,GAAM,CAAE,iBAAiB,QAAQ,UAC3B,GAAK,QAAQ,MACb,EAAU,QAAQ,QAClB,CAAE,cAAc,QAAQ,QACxB,GAAW,KACX,GAAW,KAAoB,QAC/B,GAAa,KACb,GAAS,KACT,GAAS,KACT,GAAgB,KAEhB,GAAgB,KAChB,GAAkB,KAClB,CACJ,UACA,YACA,UACA,aACA,aACA,cACA,iBACA,UACA,YAEA,aACA,WAEA,iBACA,mBACA,0BACA,UACA,eAEA,SACA,eACA,eACA,QACA,WACA,YACA,YACA,kBACA,iBACA,eACA,iBACA,aACA,YAEA,aACA,WACA,WACE,KAEE,GAAO,GAAU,GAAG,MACpB,GAAU,GAAU,GAAG,SAsBvB,GAAS,CAAC,EAAQ,KAAO,MAAM,QAAQ,GAAS,EAAQ,CAAC,GACzD,GAAU,CAAC,EAAM,EAAS,KAC9B,GAAK,QAAQ,GAAQ,CACnB,AAAI,MAAM,QAAQ,GAChB,GAAQ,EAAM,GAEd,EAAO,KAAK,KAGT,GAGH,GAAa,AAAC,GAAW,CAI7B,GAAM,GAAQ,GAAQ,GAAO,IAC7B,GAAI,CAAC,EAAM,MAAM,GAAK,MAAO,KAAM,IACjC,KAAM,IAAI,WAAU,sCAAsC,KAE5D,MAAO,GAAM,IAAI,KAKb,GAAS,AAAC,GAAW,CACzB,GAAI,GAAM,EAAO,QAAQ,GAAe,IACpC,EAAU,GAId,IAHI,EAAI,WAAW,KACjB,GAAU,IAEL,EAAI,MAAM,KACf,EAAM,EAAI,QAAQ,GAAiB,IAErC,MAAI,IACF,GAAM,GAAQ,GAET,GAKH,GAAsB,AAAC,GAAS,GAAO,EAAQ,UAAU,GAAO,KAEhE,GAAmB,CAAC,EAAM,KAAc,AAAC,GACzC,MAAO,KAAS,GAAoB,EACjC,GAAoB,EAAQ,WAAW,GAAQ,EAAO,EAAQ,KAAK,EAAK,IAG3E,GAAkB,CAAC,EAAM,IACzB,EAAQ,WAAW,GACd,EAEL,EAAK,WAAW,IACX,GAAO,EAAQ,KAAK,EAAK,EAAK,MAAM,IAEtC,EAAQ,KAAK,EAAK,GAGrB,GAAQ,CAAC,EAAM,IAAQ,EAAK,KAAS,OAO3C,QAAe,CAKb,YAAY,EAAK,EAAe,CAC9B,KAAK,KAAO,EACZ,KAAK,eAAiB,EAEtB,KAAK,MAAQ,GAAI,KAGnB,IAAI,EAAM,CACR,GAAM,CAAC,SAAS,KAChB,AAAI,CAAC,GACD,IAAS,IAAW,IAAS,IAAU,EAAM,IAAI,QAGjD,QAAO,EAAM,CACjB,GAAM,CAAC,SAAS,KAGhB,GAFI,CAAC,GACL,GAAM,OAAO,GACT,EAAM,KAAO,GAAG,OAEpB,GAAM,GAAM,KAAK,KACjB,GAAI,CACF,KAAM,IAAQ,SACP,EAAP,CACA,AAAI,KAAK,gBACP,KAAK,eAAe,EAAQ,QAAQ,GAAM,EAAQ,SAAS,KAKjE,IAAI,EAAM,CACR,GAAM,CAAC,SAAS,KAChB,GAAI,EAAC,EACL,MAAO,GAAM,IAAI,GAMnB,aAAc,CACZ,GAAM,CAAC,SAAS,KAChB,GAAI,EAAC,EACL,MAAO,CAAC,GAAG,EAAM,UAGnB,SAAU,CACR,KAAK,MAAM,QACX,MAAO,MAAK,KACZ,MAAO,MAAK,eACZ,MAAO,MAAK,MACZ,OAAO,OAAO,QAIZ,GAAgB,OAChB,GAAgB,QACtB,QAAkB,CAChB,YAAY,EAAM,EAAW,EAAQ,EAAK,CACxC,KAAK,IAAM,EACX,KAAK,KAAO,EAAO,EAAK,QAAQ,GAAa,IAC7C,KAAK,UAAY,EACjB,KAAK,cAAgB,EAAQ,QAAQ,GACrC,KAAK,QAAU,IAAc,EAEzB,IAAS,IAAW,MAAK,QAAU,IACvC,KAAK,YAAc,KAAK,SAAW,EAAS,OAAY,GACxD,KAAK,WAAa,KAAK,QAAU,GAAS,EAAM,OAAW,IAAiB,GAC5E,KAAK,SAAW,KAAK,YAAY,GACjC,KAAK,SAAS,QAAQ,AAAC,GAAU,CAC/B,AAAI,EAAM,OAAS,GAAG,EAAM,QAE9B,KAAK,eAAiB,EACtB,KAAK,WAAa,EAAS,GAAgB,GAG7C,iBAAiB,EAAO,CAQtB,MALI,MAAK,cAAgB,QACvB,MAAK,YAAc,EAAM,gBAAkB,KAAK,cAC9C,GAAQ,CAAC,SAAU,EAAM,cAAe,SAAU,KAAK,gBAGvD,KAAK,YACA,EAAM,SAAS,QAAQ,KAAK,YAAY,SAAU,KAAK,YAAY,UAGrE,EAAM,SAGf,UAAU,EAAO,CACf,MAAO,GAAQ,KAAK,KAAK,UACvB,EAAQ,SAAS,KAAK,UAAW,KAAK,iBAAiB,KAI3D,WAAW,EAAO,CAChB,GAAM,CAAC,SAAS,EAChB,GAAI,GAAS,EAAM,iBAAkB,MAAO,MAAK,UAAU,GAC3D,GAAM,GAAe,KAAK,UAAU,GAGpC,MAAO,AAFa,MAAK,SAAW,MAAO,MAAK,aAAe,GAC7D,KAAK,WAAW,GAAgB,KAEhC,KAAK,IAAI,aAAa,EAAc,IACpC,KAAK,IAAI,oBAAoB,GAGjC,YAAY,EAAM,CAChB,GAAI,CAAC,KAAK,QAAS,MAAO,GAC1B,GAAM,GAAQ,GAEd,MADqB,GAAK,SAAS,IAAe,GAAO,OAAO,GAAQ,CAAC,IAC5D,QAAQ,AAAC,GAAS,CAC7B,EAAM,KAAK,EAAQ,SAAS,KAAK,UAAW,GAAM,MAAM,OAEnD,EAGT,UAAU,EAAO,CACf,GAAI,KAAK,QAAS,CAChB,GAAM,GAAa,KAAK,YAAY,KAAK,iBAAiB,IACtD,EAAW,GACf,KAAK,cAAgB,CAAC,KAAK,SAAS,KAAK,AAAC,GACjC,EAAM,MAAM,CAAC,EAAM,IACpB,KAAS,IAAU,GAAW,IAC3B,GAAY,CAAC,EAAW,GAAG,IAAM,GAAS,EAAM,EAAW,GAAG,GAAI,OAI/E,MAAO,CAAC,KAAK,eAAiB,KAAK,IAAI,aAAa,KAAK,UAAU,GAAQ,EAAM,SAYrF,gBAAwB,GAAa,CAErC,YAAY,EAAO,CACjB,QAEA,GAAM,GAAO,GACb,AAAI,GAAO,OAAO,OAAO,EAAM,GAG/B,KAAK,SAAW,GAAI,KAEpB,KAAK,SAAW,GAAI,KAEpB,KAAK,cAAgB,GAAI,KAGzB,KAAK,WAAa,GAAI,KAGtB,KAAK,cAAgB,GAAI,KAEzB,KAAK,SAAW,GAAI,KACpB,KAAK,OAAS,GAGV,GAAM,EAAM,eAAe,GAAK,WAAa,IAC7C,GAAM,EAAM,kBAAkB,GAAK,cAAgB,IACnD,GAAM,EAAM,2BAA2B,GAAK,uBAAyB,IACrE,GAAM,EAAM,aAAa,GAAK,SAAW,KACzC,GAAM,EAAM,mBAAmB,GAAK,eAAiB,KACrD,GAAM,EAAM,oBAAoB,GAAK,gBAAkB,IAC3D,EAAK,qBAAuB,EAAK,iBAAmB,EAAK,SAGrD,GAAM,EAAM,gBAAgB,GAAK,YAAc,CAAC,EAAK,YAIpD,AADkB,GAAgB,UAClB,GAAK,YAAc,IAIpC,GAAM,EAAM,eAAiB,CAAC,EAAK,aACrC,GAAK,WAAa,IAIjB,IACD,GAAK,WAAa,IAKpB,GAAM,GAAU,QAAQ,IAAI,oBAC5B,GAAI,IAAY,OAAW,CACzB,GAAM,GAAW,EAAQ,cAEzB,AAAI,IAAa,SAAW,IAAa,IACvC,EAAK,WAAa,GACb,AAAI,IAAa,QAAU,IAAa,IAC7C,EAAK,WAAa,GAElB,EAAK,WAAa,CAAC,CAAC,EAGxB,GAAM,GAAc,QAAQ,IAAI,kBAChC,AAAI,GACF,GAAK,SAAW,OAAO,SAAS,EAAa,KAI3C,GAAM,EAAM,WAAW,GAAK,OAAS,CAAC,EAAK,YAAc,CAAC,EAAK,aAC/D,EAAK,QAAQ,MAAK,gBAAkB,GAAI,MAExC,GAAM,EAAM,mBAAmB,GAAK,eAAiB,IAErD,GAAM,EAAM,qBAAqB,GAAK,iBAAmB,IACzD,EAAK,mBAAqB,IAAM,GAAK,iBAAmB,IAC5D,GAAM,GAAM,EAAK,iBACjB,AAAI,GACG,GAAI,oBAAoB,GAAI,mBAAqB,KACjD,EAAI,cAAc,GAAI,aAAe,KAC1C,KAAK,eAAiB,GAAI,MAExB,EAAK,SAAS,GAAK,QAAU,GAAO,EAAK,UAE7C,GAAI,GAAa,EACjB,KAAK,WAAa,IAAM,CACtB,IACI,GAAc,KAAK,aACrB,MAAK,WAAa,GAClB,KAAK,cAAgB,GAErB,QAAQ,SAAS,IAAM,KAAK,KAAK,OAGrC,KAAK,SAAW,IAAI,IAAS,KAAK,KAAK,GAAQ,GAAG,GAClD,KAAK,cAAgB,GACrB,KAAK,QAAU,EAGf,AAAI,EAAK,YACP,KAAK,iBAAmB,GAAI,IAAgB,MAE5C,KAAK,eAAiB,GAAI,IAAc,MAI1C,OAAO,OAAO,GAYhB,IAAI,EAAQ,EAAU,EAAW,CAC/B,GAAM,CAAC,MAAK,mBAAmB,KAAK,QACpC,KAAK,OAAS,GACd,GAAI,GAAQ,GAAW,GACvB,MAAI,IACF,GAAQ,EAAM,IAAI,AAAC,GAAS,CAC1B,GAAM,GAAU,GAAgB,EAAM,GAGtC,MAAI,IAAmB,CAAC,GAAO,GACtB,EAEF,GAAc,MAKzB,EAAQ,EAAM,OAAO,AAAC,GAChB,EAAK,WAAW,IAClB,MAAK,cAAc,IAAI,EAAK,MAAM,IAC3B,IAIT,MAAK,cAAc,OAAO,GAC1B,KAAK,cAAc,OAAO,EAAO,IAIjC,KAAK,aAAe,OAEb,KAGT,AAAI,KAAK,QAAQ,aAAe,KAAK,iBAC9B,MAAK,aAAa,MAAK,YAAc,EAAM,QAC5C,KAAK,QAAQ,YAAY,MAAK,aAAe,GACjD,EAAM,QAAQ,AAAC,GAAS,KAAK,iBAAiB,eAAe,KAExD,MAAK,aAAa,MAAK,YAAc,GAC1C,KAAK,aAAe,EAAM,OAC1B,QAAQ,IACN,EAAM,IAAI,KAAM,IAAQ,CACtB,GAAM,GAAM,KAAM,MAAK,eAAe,aAAa,EAAM,CAAC,EAAW,EAAG,EAAG,GAC3E,MAAI,IAAK,KAAK,aACP,KAET,KAAK,GAAW,CAChB,AAAI,KAAK,QACT,EAAQ,OAAO,GAAQ,GAAM,QAAQ,GAAQ,CAC3C,KAAK,IAAI,EAAQ,QAAQ,GAAO,EAAQ,SAAS,GAAY,SAK5D,KAQT,QAAQ,EAAQ,CACd,GAAI,KAAK,OAAQ,MAAO,MACxB,GAAM,GAAQ,GAAW,GACnB,CAAC,OAAO,KAAK,QAEnB,SAAM,QAAQ,AAAC,GAAS,CAEtB,AAAI,CAAC,EAAQ,WAAW,IAAS,CAAC,KAAK,SAAS,IAAI,IAC9C,IAAK,GAAO,EAAQ,KAAK,EAAK,IAClC,EAAO,EAAQ,QAAQ,IAGzB,KAAK,WAAW,GAEhB,KAAK,cAAc,IAAI,GACnB,KAAK,SAAS,IAAI,IACpB,KAAK,cAAc,IAAI,EAAO,IAKhC,KAAK,aAAe,SAGf,KAOT,OAAQ,CACN,GAAI,KAAK,OAAQ,MAAO,MAAK,cAC7B,KAAK,OAAS,GAGd,KAAK,qBACL,GAAM,GAAU,GAChB,YAAK,SAAS,QAAQ,GAAc,EAAW,QAAQ,GAAU,CAC/D,GAAM,GAAU,IAChB,AAAI,YAAmB,UAAS,EAAQ,KAAK,MAE/C,KAAK,SAAS,QAAQ,GAAU,EAAO,WACvC,KAAK,aAAe,OACpB,KAAK,YAAc,EACnB,KAAK,cAAgB,GACrB,KAAK,SAAS,QAAQ,GAAU,EAAO,WACvC,CAAC,UAAW,UAAW,UAAW,eAAgB,aAAa,QAAQ,GAAO,CAC5E,KAAK,IAAI,KAAO,UAGlB,KAAK,cAAgB,EAAQ,OAAS,QAAQ,IAAI,GAAS,KAAK,IAAG,IAAgB,QAAQ,UACpF,KAAK,cAOd,YAAa,CACX,GAAM,GAAY,GAClB,YAAK,SAAS,QAAQ,CAAC,EAAO,IAAQ,CACpC,GAAM,GAAM,KAAK,QAAQ,IAAM,EAAQ,SAAS,KAAK,QAAQ,IAAK,GAAO,EACzE,EAAU,GAAO,IAAW,EAAM,cAAc,SAE3C,EAGT,YAAY,EAAO,EAAM,CACvB,KAAK,KAAK,GAAG,GACT,IAAU,IAAU,KAAK,KAAK,GAAQ,GAAG,QAgBzC,OAAM,EAAO,EAAM,EAAM,EAAM,EAAM,CACzC,GAAI,KAAK,OAAQ,OAEjB,GAAM,GAAO,KAAK,QAClB,AAAI,IAAW,GAAO,EAAQ,UAAU,IACpC,EAAK,KAAK,GAAO,EAAQ,SAAS,EAAK,IAAK,IAEhD,GAAM,GAAO,CAAC,EAAO,GACrB,AAAI,IAAS,OAAW,EAAK,KAAK,EAAM,EAAM,GACzC,AAAI,IAAS,OAAW,EAAK,KAAK,EAAM,GACpC,IAAS,QAAW,EAAK,KAAK,GAEvC,GAAM,GAAM,EAAK,iBACb,EACJ,GAAI,GAAQ,GAAK,KAAK,eAAe,IAAI,IACvC,SAAG,WAAa,GAAI,MACb,KAGT,GAAI,EAAK,OAAQ,CACf,GAAI,IAAU,GACZ,YAAK,gBAAgB,IAAI,EAAM,GAC/B,WAAW,IAAM,CACf,KAAK,gBAAgB,QAAQ,CAAC,EAAO,IAAS,CAC5C,KAAK,KAAK,GAAG,GACb,KAAK,KAAK,GAAQ,GAAG,GACrB,KAAK,gBAAgB,OAAO,MAE7B,MAAO,GAAK,QAAW,SAAW,EAAK,OAAS,KAC5C,KAET,AAAI,IAAU,IAAU,KAAK,gBAAgB,IAAI,IAC/C,GAAQ,EAAK,GAAK,GAClB,KAAK,gBAAgB,OAAO,IAIhC,GAAI,GAAQ,KAAU,IAAU,IAAU,KAAc,KAAK,cAAe,CAC1E,GAAM,GAAU,CAAC,EAAK,IAAU,CAC9B,AAAI,EACF,GAAQ,EAAK,GAAK,GAClB,EAAK,GAAK,EACV,KAAK,YAAY,EAAO,IACf,GAET,CAAI,EAAK,OAAS,EAChB,EAAK,GAAK,EAEV,EAAK,KAAK,GAEZ,KAAK,YAAY,EAAO,KAI5B,YAAK,kBAAkB,EAAM,EAAI,mBAAoB,EAAO,GACrD,KAGT,GAAI,IAAU,IACQ,CAAC,KAAK,UAAU,GAAW,EAAM,IACpC,MAAO,MAG1B,GAAI,EAAK,YAAc,IAAS,QAC7B,KAAU,IAAU,IAAU,IAAc,IAAU,IACvD,CACA,GAAM,GAAW,EAAK,IAAM,EAAQ,KAAK,EAAK,IAAK,GAAQ,EACvD,EACJ,GAAI,CACF,EAAQ,KAAM,IAAK,SACZ,EAAP,EAEF,GAAI,CAAC,GAAS,KAAK,OAAQ,OAC3B,EAAK,KAAK,GAEZ,YAAK,YAAY,EAAO,GAEjB,KAQT,aAAa,EAAO,CAClB,GAAM,GAAO,GAAS,EAAM,KAC5B,MAAI,IAAS,IAAS,UAAY,IAAS,WACxC,EAAC,KAAK,QAAQ,wBAA2B,IAAS,SAAW,IAAS,WAEvE,KAAK,KAAK,GAAU,GAEf,GAAS,KAAK,OAUvB,UAAU,EAAY,EAAM,EAAS,CACnC,AAAK,KAAK,WAAW,IAAI,IACvB,KAAK,WAAW,IAAI,EAAY,GAAI,MAItC,GAAM,GAAS,KAAK,WAAW,IAAI,GAE7B,EAAa,EAAO,IAAI,GAE9B,GAAI,EACF,SAAW,QACJ,GAGT,GAAI,GACE,EAAQ,IAAM,CAClB,GAAM,GAAO,EAAO,IAAI,GAClB,EAAQ,EAAO,EAAK,MAAQ,EAClC,SAAO,OAAO,GACd,aAAa,GACT,GAAM,aAAa,EAAK,eACrB,GAET,EAAgB,WAAW,EAAO,GAClC,GAAM,GAAM,CAAC,gBAAe,QAAO,MAAO,GAC1C,SAAO,IAAI,EAAM,GACV,EAGT,iBAAkB,CAChB,MAAO,MAAK,cAWd,kBAAkB,EAAM,EAAW,EAAO,EAAS,CACjD,GAAI,GAEA,EAAW,EACf,AAAI,KAAK,QAAQ,KAAO,CAAC,EAAQ,WAAW,IAC1C,GAAW,EAAQ,KAAK,KAAK,QAAQ,IAAK,IAG5C,GAAM,GAAM,GAAI,MAEV,EAAmB,AAAC,GAAa,CACrC,GAAG,KAAK,EAAU,CAAC,EAAK,IAAY,CAClC,GAAI,GAAO,CAAC,KAAK,eAAe,IAAI,GAAO,CACzC,AAAI,GAAO,EAAI,OAAS,UAAU,EAAQ,GAC1C,OAGF,GAAM,GAAM,OAAO,GAAI,OAEvB,AAAI,GAAY,EAAQ,OAAS,EAAS,MACxC,MAAK,eAAe,IAAI,GAAM,WAAa,GAE7C,GAAM,GAAK,KAAK,eAAe,IAAI,GAGnC,AAAI,AAFO,EAAM,EAAG,YAEV,EACR,MAAK,eAAe,OAAO,GAC3B,EAAQ,OAAW,IAEnB,EAAiB,WACf,EACA,KAAK,QAAQ,iBAAiB,aAC9B,MAMR,AAAK,KAAK,eAAe,IAAI,IAC3B,MAAK,eAAe,IAAI,EAAM,CAC5B,WAAY,EACZ,WAAY,IACV,MAAK,eAAe,OAAO,GAC3B,aAAa,GACN,KAGX,EAAiB,WACf,EACA,KAAK,QAAQ,iBAAiB,eAKpC,iBAAkB,CAChB,MAAO,CAAC,GAAG,KAAK,cAAc,UAShC,WAAW,EAAM,EAAO,CACtB,GAAI,KAAK,QAAQ,QAAU,GAAO,KAAK,GAAO,MAAO,GACrD,GAAI,CAAC,KAAK,aAAc,CACtB,GAAM,CAAC,OAAO,KAAK,QACb,EAAM,KAAK,QAAQ,QAEnB,EAAU,GAAO,EAAI,IAAI,GAAiB,IAC1C,EAAQ,GAAO,GAClB,OAAO,AAAC,GAAS,MAAO,KAAS,IAAe,CAAC,GAAO,IACxD,IAAI,AAAC,GAAS,EAAO,IAClB,EAAO,KAAK,kBAAkB,IAAI,GAAiB,IAAM,OAAO,EAAS,GAC/E,KAAK,aAAe,GAAS,EAAM,OAAW,IAGhD,MAAO,MAAK,aAAa,CAAC,EAAM,IAGlC,aAAa,EAAM,EAAM,CACvB,MAAO,CAAC,KAAK,WAAW,EAAM,GAShC,iBAAiB,EAAM,EAAO,CAC5B,GAAM,GAAY,GAAS,KAAK,QAAQ,iBAAmB,CAAC,GAAO,GAAQ,EAAO,GAAW,GACvF,EAAS,KAAK,QAAQ,eAE5B,MAAO,IAAI,IAAY,EAAM,EAAW,EAAQ,MAWlD,eAAe,EAAW,CACxB,AAAK,KAAK,cAAc,MAAK,aAAe,KAAK,QAAQ,KAAK,OAC9D,GAAM,GAAM,EAAQ,QAAQ,GAC5B,MAAK,MAAK,SAAS,IAAI,IAAM,KAAK,SAAS,IAAI,EAAK,GAAI,IAAS,EAAK,KAAK,eACpE,KAAK,SAAS,IAAI,GAY3B,oBAAoB,EAAO,CACzB,GAAI,KAAK,QAAQ,uBAAwB,MAAO,GAIhD,GAAM,GAAK,AADA,IAAS,OAAO,SAAS,EAAM,KAAM,KAChC,IACV,EAAK,OAAO,SAAS,EAAG,SAAS,GAAG,GAAI,IAC9C,MAAO,SAAQ,EAAI,GAWrB,QAAQ,EAAW,EAAM,EAAa,CAIpC,GAAM,GAAO,EAAQ,KAAK,EAAW,GAC/B,EAAW,EAAQ,QAAQ,GAOjC,GANA,EAAc,GAEV,MAAK,SAAS,IAAI,IAAS,KAAK,SAAS,IAAI,IAI7C,CAAC,KAAK,UAAU,SAAU,EAAM,KAAM,OAG1C,AAAI,CAAC,GAAe,CAAC,KAAK,QAAQ,aAAe,KAAK,SAAS,OAAS,GACtE,KAAK,IAAI,EAAW,EAAM,IAS5B,AAHgC,AADrB,KAAK,eAAe,GACI,cAGX,QAAQ,GAAU,KAAK,QAAQ,EAAM,IAG7D,GAAM,GAAS,KAAK,eAAe,GAC7B,EAAa,EAAO,IAAI,GAC9B,EAAO,OAAO,GAOV,KAAK,cAAc,IAAI,IACzB,KAAK,cAAc,OAAO,GAI5B,GAAI,GAAU,EAEd,GADI,KAAK,QAAQ,KAAK,GAAU,EAAQ,SAAS,KAAK,QAAQ,IAAK,IAC/D,KAAK,QAAQ,kBAAoB,KAAK,eAAe,IAAI,IAEvD,AADU,KAAK,eAAe,IAAI,GAAS,eACjC,GAAQ,OAKxB,KAAK,SAAS,OAAO,GACrB,KAAK,SAAS,OAAO,GACrB,GAAM,GAAY,EAAc,GAAgB,GAChD,AAAI,GAAc,CAAC,KAAK,WAAW,IAAO,KAAK,MAAM,EAAW,GAG3D,KAAK,QAAQ,aAChB,KAAK,WAAW,GAQpB,WAAW,EAAM,CACf,KAAK,WAAW,GAChB,GAAM,GAAM,EAAQ,QAAQ,GAC5B,KAAK,eAAe,GAAK,OAAO,EAAQ,SAAS,IAOnD,WAAW,EAAM,CACf,GAAM,GAAU,KAAK,SAAS,IAAI,GAClC,AAAI,CAAC,GACL,GAAQ,QAAQ,GAAU,KAC1B,KAAK,SAAS,OAAO,IAQvB,eAAe,EAAM,EAAQ,CAC3B,GAAI,CAAC,EAAQ,OACb,GAAI,GAAO,KAAK,SAAS,IAAI,GAC7B,AAAK,GACH,GAAO,GACP,KAAK,SAAS,IAAI,EAAM,IAE1B,EAAK,KAAK,GAGZ,UAAU,EAAM,EAAM,CACpB,GAAI,KAAK,OAAQ,OACjB,GAAM,GAAU,CAAC,KAAM,GAAQ,WAAY,GAAM,MAAO,MAAS,GAC7D,EAAS,GAAS,EAAM,GAC5B,YAAK,SAAS,IAAI,GAClB,EAAO,KAAK,GAAW,IAAM,CAC3B,EAAS,SAEX,EAAO,KAAK,GAAS,IAAM,CACzB,AAAI,GACF,MAAK,SAAS,OAAO,GACrB,EAAS,UAGN,IAMT,GAAQ,UAAY,GAQpB,GAAM,IAAQ,CAAC,EAAO,IAAY,CAChC,GAAM,GAAU,GAAI,IAAU,GAC9B,SAAQ,IAAI,GACL,GAGT,GAAQ,MAAQ,KC58BhB,gCAEA,GAAI,IAAmB,sBAEvB,GAAO,QAAU,SAAU,EAAK,CAC/B,GAAI,MAAO,IAAQ,SAClB,KAAM,IAAI,WAAU,qBAGrB,MAAO,GAAI,QAAQ,GAAkB,WCTtC,gCAEA,GAAO,QAAU,CAChB,UAAa,CAAC,IAAK,IAAK,KACxB,aAAgB,CAAC,IAAK,IAAK,KAC3B,KAAQ,CAAC,EAAG,IAAK,KACjB,WAAc,CAAC,IAAK,IAAK,KACzB,MAAS,CAAC,IAAK,IAAK,KACpB,MAAS,CAAC,IAAK,IAAK,KACpB,OAAU,CAAC,IAAK,IAAK,KACrB,MAAS,CAAC,EAAG,EAAG,GAChB,eAAkB,CAAC,IAAK,IAAK,KAC7B,KAAQ,CAAC,EAAG,EAAG,KACf,WAAc,CAAC,IAAK,GAAI,KACxB,MAAS,CAAC,IAAK,GAAI,IACnB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,GAAI,IAAK,KACvB,WAAc,CAAC,IAAK,IAAK,GACzB,UAAa,CAAC,IAAK,IAAK,IACxB,MAAS,CAAC,IAAK,IAAK,IACpB,eAAkB,CAAC,IAAK,IAAK,KAC7B,SAAY,CAAC,IAAK,IAAK,KACvB,QAAW,CAAC,IAAK,GAAI,IACrB,KAAQ,CAAC,EAAG,IAAK,KACjB,SAAY,CAAC,EAAG,EAAG,KACnB,SAAY,CAAC,EAAG,IAAK,KACrB,cAAiB,CAAC,IAAK,IAAK,IAC5B,SAAY,CAAC,IAAK,IAAK,KACvB,UAAa,CAAC,EAAG,IAAK,GACtB,SAAY,CAAC,IAAK,IAAK,KACvB,UAAa,CAAC,IAAK,IAAK,KACxB,YAAe,CAAC,IAAK,EAAG,KACxB,eAAkB,CAAC,GAAI,IAAK,IAC5B,WAAc,CAAC,IAAK,IAAK,GACzB,WAAc,CAAC,IAAK,GAAI,KACxB,QAAW,CAAC,IAAK,EAAG,GACpB,WAAc,CAAC,IAAK,IAAK,KACzB,aAAgB,CAAC,IAAK,IAAK,KAC3B,cAAiB,CAAC,GAAI,GAAI,KAC1B,cAAiB,CAAC,GAAI,GAAI,IAC1B,cAAiB,CAAC,GAAI,GAAI,IAC1B,cAAiB,CAAC,EAAG,IAAK,KAC1B,WAAc,CAAC,IAAK,EAAG,KACvB,SAAY,CAAC,IAAK,GAAI,KACtB,YAAe,CAAC,EAAG,IAAK,KACxB,QAAW,CAAC,IAAK,IAAK,KACtB,QAAW,CAAC,IAAK,IAAK,KACtB,WAAc,CAAC,GAAI,IAAK,KACxB,UAAa,CAAC,IAAK,GAAI,IACvB,YAAe,CAAC,IAAK,IAAK,KAC1B,YAAe,CAAC,GAAI,IAAK,IACzB,QAAW,CAAC,IAAK,EAAG,KACpB,UAAa,CAAC,IAAK,IAAK,KACxB,WAAc,CAAC,IAAK,IAAK,KACzB,KAAQ,CAAC,IAAK,IAAK,GACnB,UAAa,CAAC,IAAK,IAAK,IACxB,KAAQ,CAAC,IAAK,IAAK,KACnB,MAAS,CAAC,EAAG,IAAK,GAClB,YAAe,CAAC,IAAK,IAAK,IAC1B,KAAQ,CAAC,IAAK,IAAK,KACnB,SAAY,CAAC,IAAK,IAAK,KACvB,QAAW,CAAC,IAAK,IAAK,KACtB,UAAa,CAAC,IAAK,GAAI,IACvB,OAAU,CAAC,GAAI,EAAG,KAClB,MAAS,CAAC,IAAK,IAAK,KACpB,MAAS,CAAC,IAAK,IAAK,KACpB,SAAY,CAAC,IAAK,IAAK,KACvB,cAAiB,CAAC,IAAK,IAAK,KAC5B,UAAa,CAAC,IAAK,IAAK,GACxB,aAAgB,CAAC,IAAK,IAAK,KAC3B,UAAa,CAAC,IAAK,IAAK,KACxB,WAAc,CAAC,IAAK,IAAK,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,qBAAwB,CAAC,IAAK,IAAK,KACnC,UAAa,CAAC,IAAK,IAAK,KACxB,WAAc,CAAC,IAAK,IAAK,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,IAAK,IAAK,KACxB,YAAe,CAAC,IAAK,IAAK,KAC1B,cAAiB,CAAC,GAAI,IAAK,KAC3B,aAAgB,CAAC,IAAK,IAAK,KAC3B,eAAkB,CAAC,IAAK,IAAK,KAC7B,eAAkB,CAAC,IAAK,IAAK,KAC7B,eAAkB,CAAC,IAAK,IAAK,KAC7B,YAAe,CAAC,IAAK,IAAK,KAC1B,KAAQ,CAAC,EAAG,IAAK,GACjB,UAAa,CAAC,GAAI,IAAK,IACvB,MAAS,CAAC,IAAK,IAAK,KACpB,QAAW,CAAC,IAAK,EAAG,KACpB,OAAU,CAAC,IAAK,EAAG,GACnB,iBAAoB,CAAC,IAAK,IAAK,KAC/B,WAAc,CAAC,EAAG,EAAG,KACrB,aAAgB,CAAC,IAAK,GAAI,KAC1B,aAAgB,CAAC,IAAK,IAAK,KAC3B,eAAkB,CAAC,GAAI,IAAK,KAC5B,gBAAmB,CAAC,IAAK,IAAK,KAC9B,kBAAqB,CAAC,EAAG,IAAK,KAC9B,gBAAmB,CAAC,GAAI,IAAK,KAC7B,gBAAmB,CAAC,IAAK,GAAI,KAC7B,aAAgB,CAAC,GAAI,GAAI,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,IAAK,IAAK,KACxB,SAAY,CAAC,IAAK,IAAK,KACvB,YAAe,CAAC,IAAK,IAAK,KAC1B,KAAQ,CAAC,EAAG,EAAG,KACf,QAAW,CAAC,IAAK,IAAK,KACtB,MAAS,CAAC,IAAK,IAAK,GACpB,UAAa,CAAC,IAAK,IAAK,IACxB,OAAU,CAAC,IAAK,IAAK,GACrB,UAAa,CAAC,IAAK,GAAI,GACvB,OAAU,CAAC,IAAK,IAAK,KACrB,cAAiB,CAAC,IAAK,IAAK,KAC5B,UAAa,CAAC,IAAK,IAAK,KACxB,cAAiB,CAAC,IAAK,IAAK,KAC5B,cAAiB,CAAC,IAAK,IAAK,KAC5B,WAAc,CAAC,IAAK,IAAK,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,KAAQ,CAAC,IAAK,IAAK,IACnB,KAAQ,CAAC,IAAK,IAAK,KACnB,KAAQ,CAAC,IAAK,IAAK,KACnB,WAAc,CAAC,IAAK,IAAK,KACzB,OAAU,CAAC,IAAK,EAAG,KACnB,cAAiB,CAAC,IAAK,GAAI,KAC3B,IAAO,CAAC,IAAK,EAAG,GAChB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,GAAI,IAAK,KACvB,YAAe,CAAC,IAAK,GAAI,IACzB,OAAU,CAAC,IAAK,IAAK,KACrB,WAAc,CAAC,IAAK,IAAK,IACzB,SAAY,CAAC,GAAI,IAAK,IACtB,SAAY,CAAC,IAAK,IAAK,KACvB,OAAU,CAAC,IAAK,GAAI,IACpB,OAAU,CAAC,IAAK,IAAK,KACrB,QAAW,CAAC,IAAK,IAAK,KACtB,UAAa,CAAC,IAAK,GAAI,KACvB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,IAAK,IAAK,KACxB,KAAQ,CAAC,IAAK,IAAK,KACnB,YAAe,CAAC,EAAG,IAAK,KACxB,UAAa,CAAC,GAAI,IAAK,KACvB,IAAO,CAAC,IAAK,IAAK,KAClB,KAAQ,CAAC,EAAG,IAAK,KACjB,QAAW,CAAC,IAAK,IAAK,KACtB,OAAU,CAAC,IAAK,GAAI,IACpB,UAAa,CAAC,GAAI,IAAK,KACvB,OAAU,CAAC,IAAK,IAAK,KACrB,MAAS,CAAC,IAAK,IAAK,KACpB,MAAS,CAAC,IAAK,IAAK,KACpB,WAAc,CAAC,IAAK,IAAK,KACzB,OAAU,CAAC,IAAK,IAAK,GACrB,YAAe,CAAC,IAAK,IAAK,OCtJ3B,mBACA,GAAI,IAAc,KAMd,GAAkB,GACtB,IAAS,KAAO,IACf,AAAI,GAAY,eAAe,KAC9B,IAAgB,GAAY,KAAQ,IAF7B,OAML,EAAU,GAAO,QAAU,CAC9B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,KAAM,CAAC,SAAU,EAAG,OAAQ,QAC5B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,IAAK,CAAC,SAAU,EAAG,OAAQ,OAC3B,IAAK,CAAC,SAAU,EAAG,OAAQ,CAAC,QAC5B,QAAS,CAAC,SAAU,EAAG,OAAQ,CAAC,YAChC,OAAQ,CAAC,SAAU,EAAG,OAAQ,CAAC,WAC/B,QAAS,CAAC,SAAU,EAAG,OAAQ,CAAC,YAChC,IAAK,CAAC,SAAU,EAAG,OAAQ,CAAC,IAAK,IAAK,MACtC,MAAO,CAAC,SAAU,EAAG,OAAQ,CAAC,MAAO,MAAO,QAC5C,KAAM,CAAC,SAAU,EAAG,OAAQ,CAAC,UAI9B,IAAS,KAAS,GACjB,GAAI,EAAQ,eAAe,IAAQ,CAClC,GAAI,CAAE,aAAc,GAAQ,KAC3B,KAAM,IAAI,OAAM,8BAAgC,IAGjD,GAAI,CAAE,WAAY,GAAQ,KACzB,KAAM,IAAI,OAAM,oCAAsC,IAGvD,GAAI,EAAQ,IAAO,OAAO,SAAW,EAAQ,IAAO,SACnD,KAAM,IAAI,OAAM,sCAAwC,IAGrD,GAAW,EAAQ,IAAO,SAC1B,GAAS,EAAQ,IAAO,OAC5B,MAAO,GAAQ,IAAO,SACtB,MAAO,GAAQ,IAAO,OACtB,OAAO,eAAe,EAAQ,IAAQ,WAAY,CAAC,MAAO,KAC1D,OAAO,eAAe,EAAQ,IAAQ,SAAU,CAAC,MAAO,KALpD,OACA,GAfG,GAuBT,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAM,KAAK,IAAI,EAAG,EAAG,GACrB,EAAM,KAAK,IAAI,EAAG,EAAG,GACrB,EAAQ,EAAM,EACd,EACA,EACA,EAEJ,MAAI,KAAQ,EACX,EAAI,EACE,AAAI,IAAM,EAChB,EAAK,GAAI,GAAK,EACR,AAAI,IAAM,EAChB,EAAI,EAAK,GAAI,GAAK,EACR,IAAM,GAChB,GAAI,EAAK,GAAI,GAAK,GAGnB,EAAI,KAAK,IAAI,EAAI,GAAI,KAEjB,EAAI,GACP,IAAK,KAGN,EAAK,GAAM,GAAO,EAElB,AAAI,IAAQ,EACX,EAAI,EACE,AAAI,GAAK,GACf,EAAI,EAAS,GAAM,GAEnB,EAAI,EAAS,GAAI,EAAM,GAGjB,CAAC,EAAG,EAAI,IAAK,EAAI,MAGzB,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GACA,EACA,EACA,EACA,EAEA,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,KAAK,IAAI,EAAG,EAAG,GACnB,EAAO,EAAI,KAAK,IAAI,EAAG,EAAG,GAC1B,EAAQ,SAAU,EAAG,CACxB,MAAQ,GAAI,GAAK,EAAI,EAAO,EAAI,GAGjC,MAAI,KAAS,EACZ,EAAI,EAAI,EAER,GAAI,EAAO,EACX,EAAO,EAAM,GACb,EAAO,EAAM,GACb,EAAO,EAAM,GAEb,AAAI,IAAM,EACT,EAAI,EAAO,EACL,AAAI,IAAM,EAChB,EAAK,EAAI,EAAK,EAAO,EACX,IAAM,GAChB,GAAK,EAAI,EAAK,EAAO,GAEtB,AAAI,EAAI,EACP,GAAK,EACK,EAAI,GACd,IAAK,IAIA,CACN,EAAI,IACJ,EAAI,IACJ,EAAI,MAIN,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAQ,IAAI,IAAI,GAAK,GACzB,EAAI,EAAI,IAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,IAE1C,SAAI,EAAI,EAAI,IAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,IAEnC,CAAC,EAAG,EAAI,IAAK,EAAI,MAGzB,EAAQ,IAAI,KAAO,SAAU,EAAK,CACjC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EACA,EACA,EACA,EAEJ,SAAI,KAAK,IAAI,EAAI,EAAG,EAAI,EAAG,EAAI,GAC/B,EAAK,GAAI,EAAI,GAAM,GAAI,IAAM,EAC7B,EAAK,GAAI,EAAI,GAAM,GAAI,IAAM,EAC7B,EAAK,GAAI,EAAI,GAAM,GAAI,IAAM,EAEtB,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,IAAK,EAAI,MAMxC,YAA6B,EAAG,EAAG,CAClC,MACC,MAAK,IAAI,EAAE,GAAK,EAAE,GAAI,GACtB,KAAK,IAAI,EAAE,GAAK,EAAE,GAAI,GACtB,KAAK,IAAI,EAAE,GAAK,EAAE,GAAI,GAIxB,EAAQ,IAAI,QAAU,SAAU,EAAK,CACpC,GAAI,GAAW,GAAgB,GAC/B,GAAI,EACH,MAAO,GAGR,GAAI,GAAyB,IACzB,EAEJ,OAAS,KAAW,IACnB,GAAI,GAAY,eAAe,GAAU,CACxC,GAAI,GAAQ,GAAY,GAGpB,EAAW,GAAoB,EAAK,GAGxC,AAAI,EAAW,GACd,GAAyB,EACzB,EAAwB,GAK3B,MAAO,IAGR,EAAQ,QAAQ,IAAM,SAAU,EAAS,CACxC,MAAO,IAAY,IAGpB,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IAGjB,EAAI,EAAI,OAAU,KAAK,IAAM,GAAI,MAAS,MAAQ,KAAQ,EAAI,MAC9D,EAAI,EAAI,OAAU,KAAK,IAAM,GAAI,MAAS,MAAQ,KAAQ,EAAI,MAC9D,EAAI,EAAI,OAAU,KAAK,IAAM,GAAI,MAAS,MAAQ,KAAQ,EAAI,MAE9D,GAAI,GAAK,EAAI,MAAW,EAAI,MAAW,EAAI,MACvC,EAAK,EAAI,MAAW,EAAI,MAAW,EAAI,MACvC,EAAK,EAAI,MAAW,EAAI,MAAW,EAAI,MAE3C,MAAO,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,MAG/B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAM,EAAQ,IAAI,IAAI,GACtB,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EACA,EACA,EAEJ,UAAK,OACL,GAAK,IACL,GAAK,QAEL,EAAI,EAAI,QAAW,KAAK,IAAI,EAAG,EAAI,GAAM,MAAQ,EAAM,GAAK,IAC5D,EAAI,EAAI,QAAW,KAAK,IAAI,EAAG,EAAI,GAAM,MAAQ,EAAM,GAAK,IAC5D,EAAI,EAAI,QAAW,KAAK,IAAI,EAAG,EAAI,GAAM,MAAQ,EAAM,GAAK,IAE5D,EAAK,IAAM,EAAK,GAChB,EAAI,IAAO,GAAI,GACf,EAAI,IAAO,GAAI,GAER,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EACA,EACA,EACA,EACA,EAEJ,GAAI,IAAM,EACT,SAAM,EAAI,IACH,CAAC,EAAK,EAAK,GAGnB,AAAI,EAAI,GACP,EAAK,EAAK,GAAI,GAEd,EAAK,EAAI,EAAI,EAAI,EAGlB,EAAK,EAAI,EAAI,EAEb,EAAM,CAAC,EAAG,EAAG,GACb,OAAS,GAAI,EAAG,EAAI,EAAG,IACtB,EAAK,EAAI,EAAI,EAAI,CAAE,GAAI,GACnB,EAAK,GACR,IAEG,EAAK,GACR,IAGD,AAAI,EAAI,EAAK,EACZ,EAAM,EAAM,GAAK,GAAM,EAAI,EACrB,AAAI,EAAI,EAAK,EACnB,EAAM,EACA,AAAI,EAAI,EAAK,EACnB,EAAM,EAAM,GAAK,GAAO,GAAI,EAAI,GAAM,EAEtC,EAAM,EAGP,EAAI,GAAK,EAAM,IAGhB,MAAO,IAGR,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAO,EACP,EAAO,KAAK,IAAI,EAAG,KACnB,EACA,EAEJ,UAAK,EACL,GAAM,GAAK,EAAK,EAAI,EAAI,EACxB,GAAQ,GAAQ,EAAI,EAAO,EAAI,EAC/B,EAAK,GAAI,GAAK,EACd,EAAK,IAAM,EAAK,EAAI,EAAS,GAAO,GAAS,EAAI,EAAM,GAAI,GAEpD,CAAC,EAAG,EAAK,IAAK,EAAI,MAG1B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,GACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAK,KAAK,MAAM,GAAK,EAErB,EAAI,EAAI,KAAK,MAAM,GACnB,EAAI,IAAM,EAAK,GAAI,GACnB,EAAI,IAAM,EAAK,GAAK,EAAI,GACxB,EAAI,IAAM,EAAK,GAAK,EAAK,GAAI,IAGjC,OAFA,GAAK,IAEG,OACF,GACJ,MAAO,CAAC,EAAG,EAAG,OACV,GACJ,MAAO,CAAC,EAAG,EAAG,OACV,GACJ,MAAO,CAAC,EAAG,EAAG,OACV,GACJ,MAAO,CAAC,EAAG,EAAG,OACV,GACJ,MAAO,CAAC,EAAG,EAAG,OACV,GACJ,MAAO,CAAC,EAAG,EAAG,KAIjB,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAO,KAAK,IAAI,EAAG,KACnB,EACA,EACA,EAEJ,SAAK,GAAI,GAAK,EACd,EAAQ,GAAI,GAAK,EACjB,EAAK,EAAI,EACT,GAAO,GAAQ,EAAK,EAAO,EAAI,EAC/B,EAAK,GAAM,EACX,GAAK,EAEE,CAAC,EAAG,EAAK,IAAK,EAAI,MAI1B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAK,EAAI,GAAK,IACd,EAAK,EAAI,GAAK,IACd,EAAQ,EAAK,EACb,EACA,EACA,EACA,EAGJ,AAAI,EAAQ,GACX,IAAM,EACN,GAAM,GAGP,EAAI,KAAK,MAAM,EAAI,GACnB,EAAI,EAAI,EACR,EAAI,EAAI,EAAI,EAEP,GAAI,IAAU,GAClB,GAAI,EAAI,GAGT,EAAI,EAAK,EAAK,GAAI,GAElB,GAAI,GACA,EACA,EACJ,OAAQ,eAEF,OACA,GAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAI,UACzB,GAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAI,UACzB,GAAG,EAAI,EAAI,EAAI,EAAG,EAAI,EAAG,UACzB,GAAG,EAAI,EAAI,EAAI,EAAG,EAAI,EAAG,UACzB,GAAG,EAAI,EAAG,EAAI,EAAI,EAAI,EAAG,UACzB,GAAG,EAAI,EAAG,EAAI,EAAI,EAAI,EAAG,MAG/B,MAAO,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,MAG/B,EAAQ,KAAK,IAAM,SAAU,EAAM,CAClC,GAAI,GAAI,EAAK,GAAK,IACd,EAAI,EAAK,GAAK,IACd,EAAI,EAAK,GAAK,IACd,EAAI,EAAK,GAAK,IACd,EACA,EACA,EAEJ,SAAI,EAAI,KAAK,IAAI,EAAG,EAAK,GAAI,GAAK,GAClC,EAAI,EAAI,KAAK,IAAI,EAAG,EAAK,GAAI,GAAK,GAClC,EAAI,EAAI,KAAK,IAAI,EAAG,EAAK,GAAI,GAAK,GAE3B,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,MAG/B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EACA,EACA,EAEJ,SAAK,EAAI,OAAW,EAAI,QAAY,EAAI,OACxC,EAAK,EAAI,OAAY,EAAI,OAAW,EAAI,MACxC,EAAK,EAAI,MAAW,EAAI,MAAY,EAAI,MAGxC,EAAI,EAAI,SACH,MAAQ,KAAK,IAAI,EAAG,EAAM,KAAQ,KACpC,EAAI,MAEP,EAAI,EAAI,SACH,MAAQ,KAAK,IAAI,EAAG,EAAM,KAAQ,KACpC,EAAI,MAEP,EAAI,EAAI,SACH,MAAQ,KAAK,IAAI,EAAG,EAAM,KAAQ,KACpC,EAAI,MAEP,EAAI,KAAK,IAAI,KAAK,IAAI,EAAG,GAAI,GAC7B,EAAI,KAAK,IAAI,KAAK,IAAI,EAAG,GAAI,GAC7B,EAAI,KAAK,IAAI,KAAK,IAAI,EAAG,GAAI,GAEtB,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,MAG/B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EACA,EACA,EAEJ,UAAK,OACL,GAAK,IACL,GAAK,QAEL,EAAI,EAAI,QAAW,KAAK,IAAI,EAAG,EAAI,GAAM,MAAQ,EAAM,GAAK,IAC5D,EAAI,EAAI,QAAW,KAAK,IAAI,EAAG,EAAI,GAAM,MAAQ,EAAM,GAAK,IAC5D,EAAI,EAAI,QAAW,KAAK,IAAI,EAAG,EAAI,GAAM,MAAQ,EAAM,GAAK,IAE5D,EAAK,IAAM,EAAK,GAChB,EAAI,IAAO,GAAI,GACf,EAAI,IAAO,GAAI,GAER,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EACA,EACA,EAEJ,EAAK,GAAI,IAAM,IACf,EAAI,EAAI,IAAM,EACd,EAAI,EAAI,EAAI,IAEZ,GAAI,GAAK,KAAK,IAAI,EAAG,GACjB,EAAK,KAAK,IAAI,EAAG,GACjB,EAAK,KAAK,IAAI,EAAG,GACrB,SAAI,EAAK,QAAW,EAAM,GAAI,GAAK,KAAO,MAC1C,EAAI,EAAK,QAAW,EAAM,GAAI,GAAK,KAAO,MAC1C,EAAI,EAAK,QAAW,EAAM,GAAI,GAAK,KAAO,MAE1C,GAAK,OACL,GAAK,IACL,GAAK,QAEE,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EACA,EACA,EAEJ,SAAK,KAAK,MAAM,EAAG,GACnB,EAAI,EAAK,IAAM,EAAI,KAAK,GAEpB,EAAI,GACP,IAAK,KAGN,EAAI,KAAK,KAAK,EAAI,EAAI,EAAI,GAEnB,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GACR,EAAI,EAAI,GACR,EAAI,EAAI,GACR,EACA,EACA,EAEJ,SAAK,EAAI,IAAM,EAAI,KAAK,GACxB,EAAI,EAAI,KAAK,IAAI,GACjB,EAAI,EAAI,KAAK,IAAI,GAEV,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,OAAS,SAAU,EAAM,CACpC,GAAI,GAAI,EAAK,GACT,EAAI,EAAK,GACT,EAAI,EAAK,GACT,EAAQ,IAAK,WAAY,UAAU,GAAK,EAAQ,IAAI,IAAI,GAAM,GAIlE,GAFA,EAAQ,KAAK,MAAM,EAAQ,IAEvB,IAAU,EACb,MAAO,IAGR,GAAI,GAAO,GACN,MAAK,MAAM,EAAI,MAAQ,EACxB,KAAK,MAAM,EAAI,MAAQ,EACxB,KAAK,MAAM,EAAI,MAElB,MAAI,KAAU,GACb,IAAQ,IAGF,GAGR,EAAQ,IAAI,OAAS,SAAU,EAAM,CAGpC,MAAO,GAAQ,IAAI,OAAO,EAAQ,IAAI,IAAI,GAAO,EAAK,KAGvD,EAAQ,IAAI,QAAU,SAAU,EAAM,CACrC,GAAI,GAAI,EAAK,GACT,EAAI,EAAK,GACT,EAAI,EAAK,GAIb,GAAI,IAAM,GAAK,IAAM,EACpB,MAAI,GAAI,EACA,GAGJ,EAAI,IACA,IAGD,KAAK,MAAQ,GAAI,GAAK,IAAO,IAAM,IAG3C,GAAI,GAAO,GACP,GAAK,KAAK,MAAM,EAAI,IAAM,GAC1B,EAAI,KAAK,MAAM,EAAI,IAAM,GAC1B,KAAK,MAAM,EAAI,IAAM,GAExB,MAAO,IAGR,EAAQ,OAAO,IAAM,SAAU,EAAM,CACpC,GAAI,GAAQ,EAAO,GAGnB,GAAI,IAAU,GAAK,IAAU,EAC5B,MAAI,GAAO,IACV,IAAS,KAGV,EAAQ,EAAQ,KAAO,IAEhB,CAAC,EAAO,EAAO,GAGvB,GAAI,GAAQ,EAAC,CAAE,GAAO,IAAM,GAAK,GAC7B,EAAM,GAAQ,GAAK,EAAQ,IAC3B,EAAO,IAAS,EAAK,GAAK,EAAQ,IAClC,EAAO,IAAS,EAAK,GAAK,EAAQ,IAEtC,MAAO,CAAC,EAAG,EAAG,IAGf,EAAQ,QAAQ,IAAM,SAAU,EAAM,CAErC,GAAI,GAAQ,IAAK,CAChB,GAAI,GAAK,GAAO,KAAO,GAAK,EAC5B,MAAO,CAAC,EAAG,EAAG,GAGf,GAAQ,GAER,GAAI,GACA,EAAI,KAAK,MAAM,EAAO,IAAM,EAAI,IAChC,EAAI,KAAK,MAAO,GAAM,EAAO,IAAM,GAAK,EAAI,IAC5C,EAAK,EAAM,EAAK,EAAI,IAExB,MAAO,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,IAAM,SAAU,EAAM,CACjC,GAAI,GAAY,OAAK,MAAM,EAAK,IAAM,MAAS,IAC1C,OAAK,MAAM,EAAK,IAAM,MAAS,GAChC,MAAK,MAAM,EAAK,IAAM,KAEtB,EAAS,EAAQ,SAAS,IAAI,cAClC,MAAO,SAAS,UAAU,EAAO,QAAU,GAG5C,EAAQ,IAAI,IAAM,SAAU,EAAM,CACjC,GAAI,GAAQ,EAAK,SAAS,IAAI,MAAM,4BACpC,GAAI,CAAC,EACJ,MAAO,CAAC,EAAG,EAAG,GAGf,GAAI,GAAc,EAAM,GAExB,AAAI,EAAM,GAAG,SAAW,GACvB,GAAc,EAAY,MAAM,IAAI,IAAI,SAAU,EAAM,CACvD,MAAO,GAAO,IACZ,KAAK,KAGT,GAAI,GAAU,SAAS,EAAa,IAChC,EAAK,GAAW,GAAM,IACtB,EAAK,GAAW,EAAK,IACrB,EAAI,EAAU,IAElB,MAAO,CAAC,EAAG,EAAG,IAGf,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAM,KAAK,IAAI,KAAK,IAAI,EAAG,GAAI,GAC/B,EAAM,KAAK,IAAI,KAAK,IAAI,EAAG,GAAI,GAC/B,EAAU,EAAM,EAChB,EACA,EAEJ,MAAI,GAAS,EACZ,EAAY,EAAO,GAAI,GAEvB,EAAY,EAGb,AAAI,GAAU,EACb,EAAM,EAEP,AAAI,IAAQ,EACX,EAAQ,GAAI,GAAK,EAAU,EAE5B,AAAI,IAAQ,EACX,EAAM,EAAK,GAAI,GAAK,EAEpB,EAAM,EAAK,GAAI,GAAK,EAAS,EAG9B,GAAO,EACP,GAAO,EAEA,CAAC,EAAM,IAAK,EAAS,IAAK,EAAY,MAG9C,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EACJ,EAAI,EAER,MAAI,GAAI,GACP,EAAI,EAAM,EAAI,EAEd,EAAI,EAAM,EAAK,GAAM,GAGlB,EAAI,GACP,GAAK,GAAI,GAAM,GAAM,GAAM,IAGrB,CAAC,EAAI,GAAI,EAAI,IAAK,EAAI,MAG9B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IAEb,EAAI,EAAI,EACR,EAAI,EAER,MAAI,GAAI,GACP,GAAK,GAAI,GAAM,GAAI,IAGb,CAAC,EAAI,GAAI,EAAI,IAAK,EAAI,MAG9B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IAEjB,GAAI,IAAM,EACT,MAAO,CAAC,EAAI,IAAK,EAAI,IAAK,EAAI,KAG/B,GAAI,GAAO,CAAC,EAAG,EAAG,GACd,EAAM,EAAI,EAAK,EACf,EAAI,EAAK,EACT,EAAI,EAAI,EACR,EAAK,EAET,OAAQ,KAAK,MAAM,QACb,GACJ,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,UACnC,GACJ,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,UACnC,GACJ,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,UACnC,GACJ,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,UACnC,GACJ,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,cAEvC,EAAK,GAAK,EAAG,EAAK,GAAK,EAAG,EAAK,GAAK,EAGtC,SAAM,GAAM,GAAK,EAEV,CACL,GAAI,EAAK,GAAK,GAAM,IACpB,GAAI,EAAK,GAAK,GAAM,IACpB,GAAI,EAAK,GAAK,GAAM,MAIvB,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IAEb,EAAI,EAAI,EAAK,GAAM,GACnB,EAAI,EAER,MAAI,GAAI,GACP,GAAI,EAAI,GAGF,CAAC,EAAI,GAAI,EAAI,IAAK,EAAI,MAG9B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IAEb,EAAI,EAAK,GAAM,GAAK,GAAM,EAC1B,EAAI,EAER,MAAI,GAAI,GAAO,EAAI,GAClB,EAAI,EAAK,GAAI,GAEV,GAAK,IAAO,EAAI,GACnB,GAAI,EAAK,GAAK,GAAI,KAGZ,CAAC,EAAI,GAAI,EAAI,IAAK,EAAI,MAG9B,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,EAAK,GAAM,GACvB,MAAO,CAAC,EAAI,GAAK,GAAI,GAAK,IAAM,GAAI,GAAK,MAG1C,EAAQ,IAAI,IAAM,SAAU,EAAK,CAChC,GAAI,GAAI,EAAI,GAAK,IACb,EAAI,EAAI,GAAK,IACb,EAAI,EAAI,EACR,EAAI,EAAI,EACR,EAAI,EAER,MAAI,GAAI,GACP,GAAK,GAAI,GAAM,GAAI,IAGb,CAAC,EAAI,GAAI,EAAI,IAAK,EAAI,MAG9B,EAAQ,MAAM,IAAM,SAAU,EAAO,CACpC,MAAO,CAAE,EAAM,GAAK,MAAS,IAAM,EAAM,GAAK,MAAS,IAAM,EAAM,GAAK,MAAS,MAGlF,EAAQ,IAAI,MAAQ,SAAU,EAAK,CAClC,MAAO,CAAE,EAAI,GAAK,IAAO,MAAQ,EAAI,GAAK,IAAO,MAAQ,EAAI,GAAK,IAAO,QAG1E,EAAQ,KAAK,IAAM,SAAU,EAAM,CAClC,MAAO,CAAC,EAAK,GAAK,IAAM,IAAK,EAAK,GAAK,IAAM,IAAK,EAAK,GAAK,IAAM,MAGnE,EAAQ,KAAK,IAAM,EAAQ,KAAK,IAAM,SAAU,EAAM,CACrD,MAAO,CAAC,EAAG,EAAG,EAAK,KAGpB,EAAQ,KAAK,IAAM,SAAU,EAAM,CAClC,MAAO,CAAC,EAAG,IAAK,EAAK,KAGtB,EAAQ,KAAK,KAAO,SAAU,EAAM,CACnC,MAAO,CAAC,EAAG,EAAG,EAAG,EAAK,KAGvB,EAAQ,KAAK,IAAM,SAAU,EAAM,CAClC,MAAO,CAAC,EAAK,GAAI,EAAG,IAGrB,EAAQ,KAAK,IAAM,SAAU,EAAM,CAClC,GAAI,GAAM,KAAK,MAAM,EAAK,GAAK,IAAM,KAAO,IACxC,EAAW,IAAO,IAAO,IAAO,GAAK,EAErC,EAAS,EAAQ,SAAS,IAAI,cAClC,MAAO,SAAS,UAAU,EAAO,QAAU,GAG5C,EAAQ,IAAI,KAAO,SAAU,EAAK,CACjC,GAAI,GAAO,GAAI,GAAK,EAAI,GAAK,EAAI,IAAM,EACvC,MAAO,CAAC,EAAM,IAAM,QCl2BrB,sBAAI,IAAc,KAalB,aAAsB,CAKrB,OAJI,GAAQ,GAER,EAAS,OAAO,KAAK,IAEhB,EAAM,EAAO,OAAQ,EAAI,EAAG,EAAI,EAAK,IAC7C,EAAM,EAAO,IAAM,CAGlB,SAAU,GACV,OAAQ,MAIV,MAAO,GAIR,YAAmB,EAAW,CAC7B,GAAI,GAAQ,KACR,EAAQ,CAAC,GAIb,IAFA,EAAM,GAAW,SAAW,EAErB,EAAM,QAIZ,OAHI,GAAU,EAAM,MAChB,EAAY,OAAO,KAAK,GAAY,IAE/B,EAAM,EAAU,OAAQ,EAAI,EAAG,EAAI,EAAK,IAAK,CACrD,GAAI,GAAW,EAAU,GACrB,EAAO,EAAM,GAEjB,AAAI,EAAK,WAAa,IACrB,GAAK,SAAW,EAAM,GAAS,SAAW,EAC1C,EAAK,OAAS,EACd,EAAM,QAAQ,IAKjB,MAAO,GAGR,YAAc,EAAM,EAAI,CACvB,MAAO,UAAU,EAAM,CACtB,MAAO,GAAG,EAAK,KAIjB,YAAwB,EAAS,EAAO,CAKvC,OAJI,GAAO,CAAC,EAAM,GAAS,OAAQ,GAC/B,EAAK,GAAY,EAAM,GAAS,QAAQ,GAExC,EAAM,EAAM,GAAS,OAClB,EAAM,GAAK,QACjB,EAAK,QAAQ,EAAM,GAAK,QACxB,EAAK,GAAK,GAAY,EAAM,GAAK,QAAQ,GAAM,GAC/C,EAAM,EAAM,GAAK,OAGlB,SAAG,WAAa,EACT,EAGR,GAAO,QAAU,SAAU,EAAW,CAKrC,OAJI,GAAQ,GAAU,GAClB,EAAa,GAEb,EAAS,OAAO,KAAK,GAChB,EAAM,EAAO,OAAQ,EAAI,EAAG,EAAI,EAAK,IAAK,CAClD,GAAI,GAAU,EAAO,GACjB,EAAO,EAAM,GAEjB,AAAI,EAAK,SAAW,MAKpB,GAAW,GAAW,GAAe,EAAS,IAG/C,MAAO,MC9FR,sBAAI,IAAc,KACd,GAAQ,KAER,GAAU,GAEV,GAAS,OAAO,KAAK,IAEzB,YAAiB,EAAI,CACpB,GAAI,GAAY,SAAU,EAAM,CAC/B,MAAI,AAAsB,IAAS,KAC3B,EAGJ,WAAU,OAAS,GACtB,GAAO,MAAM,UAAU,MAAM,KAAK,YAG5B,EAAG,KAIX,MAAI,cAAgB,IACnB,GAAU,WAAa,EAAG,YAGpB,EAGR,YAAqB,EAAI,CACxB,GAAI,GAAY,SAAU,EAAM,CAC/B,GAAI,AAAsB,GAAS,KAClC,MAAO,GAGR,AAAI,UAAU,OAAS,GACtB,GAAO,MAAM,UAAU,MAAM,KAAK,YAGnC,GAAI,GAAS,EAAG,GAKhB,GAAI,MAAO,IAAW,SACrB,OAAS,GAAM,EAAO,OAAQ,EAAI,EAAG,EAAI,EAAK,IAC7C,EAAO,GAAK,KAAK,MAAM,EAAO,IAIhC,MAAO,IAIR,MAAI,cAAgB,IACnB,GAAU,WAAa,EAAG,YAGpB,EAGR,GAAO,QAAQ,SAAU,EAAW,CACnC,GAAQ,GAAa,GAErB,OAAO,eAAe,GAAQ,GAAY,WAAY,CAAC,MAAO,GAAY,GAAW,WACrF,OAAO,eAAe,GAAQ,GAAY,SAAU,CAAC,MAAO,GAAY,GAAW,SAEnF,GAAI,GAAS,GAAM,GACf,EAAc,OAAO,KAAK,GAE9B,EAAY,QAAQ,SAAU,EAAS,CACtC,GAAI,GAAK,EAAO,GAEhB,GAAQ,GAAW,GAAW,GAAY,GAC1C,GAAQ,GAAW,GAAS,IAAM,GAAQ,OAI5C,GAAO,QAAU,KC7EjB,gCACA,GAAM,IAAe,KAEf,GAAa,CAAC,EAAI,IAAW,UAAY,CAE9C,MAAO,KAAU,AADJ,EAAG,MAAM,GAAc,WACZ,MAGnB,GAAc,CAAC,EAAI,IAAW,UAAY,CAC/C,GAAM,GAAO,EAAG,MAAM,GAAc,WACpC,MAAO,KAAU,GAAK,OAAY,MAG7B,GAAc,CAAC,EAAI,IAAW,UAAY,CAC/C,GAAM,GAAM,EAAG,MAAM,GAAc,WACnC,MAAO,KAAU,GAAK,OAAY,EAAI,MAAM,EAAI,MAAM,EAAI,OAG3D,aAA0B,CACzB,GAAM,GAAQ,GAAI,KACZ,EAAS,CACd,SAAU,CACT,MAAO,CAAC,EAAG,GAEX,KAAM,CAAC,EAAG,IACV,IAAK,CAAC,EAAG,IACT,OAAQ,CAAC,EAAG,IACZ,UAAW,CAAC,EAAG,IACf,QAAS,CAAC,EAAG,IACb,OAAQ,CAAC,EAAG,IACZ,cAAe,CAAC,EAAG,KAEpB,MAAO,CACN,MAAO,CAAC,GAAI,IACZ,IAAK,CAAC,GAAI,IACV,MAAO,CAAC,GAAI,IACZ,OAAQ,CAAC,GAAI,IACb,KAAM,CAAC,GAAI,IACX,QAAS,CAAC,GAAI,IACd,KAAM,CAAC,GAAI,IACX,MAAO,CAAC,GAAI,IACZ,KAAM,CAAC,GAAI,IAGX,UAAW,CAAC,GAAI,IAChB,YAAa,CAAC,GAAI,IAClB,aAAc,CAAC,GAAI,IACnB,WAAY,CAAC,GAAI,IACjB,cAAe,CAAC,GAAI,IACpB,WAAY,CAAC,GAAI,IACjB,YAAa,CAAC,GAAI,KAEnB,QAAS,CACR,QAAS,CAAC,GAAI,IACd,MAAO,CAAC,GAAI,IACZ,QAAS,CAAC,GAAI,IACd,SAAU,CAAC,GAAI,IACf,OAAQ,CAAC,GAAI,IACb,UAAW,CAAC,GAAI,IAChB,OAAQ,CAAC,GAAI,IACb,QAAS,CAAC,GAAI,IAGd,cAAe,CAAC,IAAK,IACrB,YAAa,CAAC,IAAK,IACnB,cAAe,CAAC,IAAK,IACrB,eAAgB,CAAC,IAAK,IACtB,aAAc,CAAC,IAAK,IACpB,gBAAiB,CAAC,IAAK,IACvB,aAAc,CAAC,IAAK,IACpB,cAAe,CAAC,IAAK,MAKvB,EAAO,MAAM,KAAO,EAAO,MAAM,KAEjC,OAAW,KAAa,QAAO,KAAK,GAAS,CAC5C,GAAM,GAAQ,EAAO,GAErB,OAAW,KAAa,QAAO,KAAK,GAAQ,CAC3C,GAAM,GAAQ,EAAM,GAEpB,EAAO,GAAa,CACnB,KAAM,KAAU,EAAM,MACtB,MAAO,KAAU,EAAM,OAGxB,EAAM,GAAa,EAAO,GAE1B,EAAM,IAAI,EAAM,GAAI,EAAM,IAG3B,OAAO,eAAe,EAAQ,EAAW,CACxC,MAAO,EACP,WAAY,KAGb,OAAO,eAAe,EAAQ,QAAS,CACtC,MAAO,EACP,WAAY,KAId,GAAM,GAAY,GAAK,EACjB,EAAU,CAAC,EAAG,EAAG,IAAM,CAAC,EAAG,EAAG,GAEpC,EAAO,MAAM,MAAQ,QACrB,EAAO,QAAQ,MAAQ,QAEvB,EAAO,MAAM,KAAO,CACnB,KAAM,GAAW,EAAW,IAE7B,EAAO,MAAM,QAAU,CACtB,QAAS,GAAY,EAAW,IAEjC,EAAO,MAAM,QAAU,CACtB,IAAK,GAAY,EAAS,IAG3B,EAAO,QAAQ,KAAO,CACrB,KAAM,GAAW,EAAW,KAE7B,EAAO,QAAQ,QAAU,CACxB,QAAS,GAAY,EAAW,KAEjC,EAAO,QAAQ,QAAU,CACxB,IAAK,GAAY,EAAS,KAG3B,OAAS,KAAO,QAAO,KAAK,IAAe,CAC1C,GAAI,MAAO,IAAa,IAAS,SAChC,SAGD,GAAM,GAAQ,GAAa,GAE3B,AAAI,IAAQ,UACX,GAAM,QAGH,UAAY,IACf,GAAO,MAAM,KAAK,GAAO,GAAW,EAAM,OAAQ,GAClD,EAAO,QAAQ,KAAK,GAAO,GAAW,EAAM,OAAQ,KAGjD,WAAa,IAChB,GAAO,MAAM,QAAQ,GAAO,GAAY,EAAM,QAAS,GACvD,EAAO,QAAQ,QAAQ,GAAO,GAAY,EAAM,QAAS,KAGtD,OAAS,IACZ,GAAO,MAAM,QAAQ,GAAO,GAAY,EAAM,IAAK,GACnD,EAAO,QAAQ,QAAQ,GAAO,GAAY,EAAM,IAAK,KAIvD,MAAO,GAIR,OAAO,eAAe,GAAQ,UAAW,CACxC,WAAY,GACZ,IAAK,OCnKN,gCACA,GAAO,QAAU,CAAC,EAAM,IAAS,CAChC,EAAO,GAAQ,QAAQ,KACvB,GAAM,GAAS,EAAK,WAAW,KAAO,GAAM,EAAK,SAAW,EAAI,IAAM,KAChE,EAAM,EAAK,QAAQ,EAAS,GAC5B,EAAgB,EAAK,QAAQ,MACnC,MAAO,KAAQ,IAAO,KAAkB,GAAK,GAAO,EAAM,MCN3D,gCACA,GAAM,IAAK,QAAQ,MACb,GAAU,KAEV,GAAM,QAAQ,IAEhB,GACJ,AAAI,GAAQ,aACX,GAAQ,cACR,GAAQ,eACR,GAAa,GACH,IAAQ,UAClB,GAAQ,WACR,GAAQ,eACR,GAAQ,kBACR,IAAa,IAEd,AAAI,eAAiB,KACpB,IAAa,GAAI,YAAY,SAAW,GAAK,SAAS,GAAI,YAAa,MAAQ,GAGhF,YAAwB,EAAO,CAC9B,MAAI,KAAU,EACN,GAGD,CACN,QACA,SAAU,GACV,OAAQ,GAAS,EACjB,OAAQ,GAAS,GAInB,YAAuB,EAAQ,CAC9B,GAAI,KAAe,GAClB,MAAO,GAGR,GAAI,GAAQ,cACX,GAAQ,eACR,GAAQ,mBACR,MAAO,GAGR,GAAI,GAAQ,aACX,MAAO,GAGR,GAAI,GAAU,CAAC,EAAO,OAAS,KAAe,GAC7C,MAAO,GAGR,GAAM,GAAM,GAAa,EAAI,EAE7B,GAAI,QAAQ,WAAa,QAAS,CAOjC,GAAM,GAAY,GAAG,UAAU,MAAM,KACrC,MACC,QAAO,QAAQ,SAAS,KAAK,MAAM,KAAK,KAAO,GAC/C,OAAO,EAAU,KAAO,IACxB,OAAO,EAAU,KAAO,MAEjB,OAAO,EAAU,KAAO,MAAQ,EAAI,EAGrC,EAGR,GAAI,MAAQ,IACX,MAAI,CAAC,SAAU,WAAY,WAAY,aAAa,KAAK,GAAQ,IAAQ,MAAQ,GAAI,UAAY,WACzF,EAGD,EAGR,GAAI,oBAAsB,IACzB,MAAO,gCAAgC,KAAK,GAAI,kBAAoB,EAAI,EAGzE,GAAI,GAAI,YAAc,YACrB,MAAO,GAGR,GAAI,gBAAkB,IAAK,CAC1B,GAAM,GAAU,SAAU,IAAI,sBAAwB,IAAI,MAAM,KAAK,GAAI,IAEzE,OAAQ,GAAI,kBACN,YACJ,MAAO,IAAW,EAAI,EAAI,MACtB,iBACJ,MAAO,IAKV,MAAI,iBAAiB,KAAK,GAAI,MACtB,EAGJ,8DAA8D,KAAK,GAAI,OAIvE,aAAe,IACX,EAGJ,IAAI,OAAS,OACT,GAMT,YAAyB,EAAQ,CAChC,GAAM,GAAQ,GAAc,GAC5B,MAAO,IAAe,GAGvB,GAAO,QAAU,CAChB,cAAe,GACf,OAAQ,GAAgB,QAAQ,QAChC,OAAQ,GAAgB,QAAQ,WCjIjC,gCACA,GAAM,IAAiB,uIACjB,GAAc,iCACd,GAAe,mCACf,GAAe,0CAEf,GAAU,GAAI,KAAI,CACvB,CAAC,IAAK;AAAA,GACN,CAAC,IAAK,MACN,CAAC,IAAK,KACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,IAAK,MACN,CAAC,KAAM,MACP,CAAC,IAAK,KACN,CAAC,IAAK,UAGP,YAAkB,EAAG,CACpB,MAAK,GAAE,KAAO,KAAO,EAAE,SAAW,GAAO,EAAE,KAAO,KAAO,EAAE,SAAW,EAC9D,OAAO,aAAa,SAAS,EAAE,MAAM,GAAI,KAG1C,GAAQ,IAAI,IAAM,EAG1B,YAAwB,EAAM,EAAM,CACnC,GAAM,GAAU,GACV,EAAS,EAAK,OAAO,MAAM,YAC7B,EAEJ,OAAW,KAAS,GACnB,GAAI,CAAC,MAAM,GACV,EAAQ,KAAK,OAAO,YACT,EAAU,EAAM,MAAM,IACjC,EAAQ,KAAK,EAAQ,GAAG,QAAQ,GAAc,CAAC,EAAG,EAAQ,IAAQ,EAAS,GAAS,GAAU,QAE9F,MAAM,IAAI,OAAM,0CAA0C,gBAAoB,OAIhF,MAAO,GAGR,YAAoB,EAAO,CAC1B,GAAY,UAAY,EAExB,GAAM,GAAU,GACZ,EAEJ,KAAQ,GAAU,GAAY,KAAK,MAAY,MAAM,CACpD,GAAM,GAAO,EAAQ,GAErB,GAAI,EAAQ,GAAI,CACf,GAAM,GAAO,GAAe,EAAM,EAAQ,IAC1C,EAAQ,KAAK,CAAC,GAAM,OAAO,QAE3B,GAAQ,KAAK,CAAC,IAIhB,MAAO,GAGR,YAAoB,EAAO,EAAQ,CAClC,GAAM,GAAU,GAEhB,OAAW,KAAS,GACnB,OAAW,KAAS,GAAM,OACzB,EAAQ,EAAM,IAAM,EAAM,QAAU,KAAO,EAAM,MAAM,GAIzD,GAAI,GAAU,EACd,OAAW,KAAa,QAAO,KAAK,GACnC,GAAI,MAAM,QAAQ,EAAQ,IAAa,CACtC,GAAI,CAAE,KAAa,IAClB,KAAM,IAAI,OAAM,wBAAwB,KAGzC,AAAI,EAAQ,GAAW,OAAS,EAC/B,EAAU,EAAQ,GAAW,MAAM,EAAS,EAAQ,IAEpD,EAAU,EAAQ,GAKrB,MAAO,GAGR,GAAO,QAAU,CAAC,EAAO,IAAQ,CAChC,GAAM,GAAS,GACT,EAAS,GACX,EAAQ,GA0BZ,GAvBA,EAAI,QAAQ,GAAgB,CAAC,EAAG,EAAY,EAAS,EAAO,EAAO,IAAQ,CAC1E,GAAI,EACH,EAAM,KAAK,GAAS,YACV,EAAO,CACjB,GAAM,GAAM,EAAM,KAAK,IACvB,EAAQ,GACR,EAAO,KAAK,EAAO,SAAW,EAAI,EAAM,GAAW,EAAO,GAAQ,IAClE,EAAO,KAAK,CAAC,UAAS,OAAQ,GAAW,aAC/B,EAAO,CACjB,GAAI,EAAO,SAAW,EACrB,KAAM,IAAI,OAAM,gDAGjB,EAAO,KAAK,GAAW,EAAO,GAAQ,EAAM,KAAK,MACjD,EAAQ,GACR,EAAO,UAEP,GAAM,KAAK,KAIb,EAAO,KAAK,EAAM,KAAK,KAEnB,EAAO,OAAS,EAAG,CACtB,GAAM,GAAS,qCAAqC,EAAO,yBAAyB,EAAO,SAAW,EAAI,GAAK,cAC/G,KAAM,IAAI,OAAM,GAGjB,MAAO,GAAO,KAAK,OC9HpB,gCACA,GAAM,IAAqB,KACrB,EAAa,KACb,GAAc,KAA0B,OAExC,GAAW,KAEX,GAAsB,QAAQ,WAAa,SAAW,CAAE,SAAQ,IAAI,MAAQ,IAAI,cAAc,WAAW,SAGzG,GAAe,CAAC,OAAQ,OAAQ,UAAW,WAG3C,GAAa,GAAI,KAAI,CAAC,SAEtB,GAAS,OAAO,OAAO,MAE7B,YAAsB,EAAK,EAAS,CACnC,EAAU,GAAW,GAGrB,GAAM,GAAU,GAAc,GAAY,MAAQ,EAClD,EAAI,MAAQ,EAAQ,QAAU,OAAY,EAAU,EAAQ,MAC5D,EAAI,QAAU,WAAa,GAAU,EAAQ,QAAU,EAAI,MAAQ,EAGpE,YAAe,EAAS,CAGvB,GAAI,CAAC,MAAQ,CAAE,gBAAgB,MAAU,KAAK,SAAU,CACvD,GAAM,GAAQ,GACd,UAAa,EAAO,GAEpB,EAAM,SAAW,UAAY,CAC5B,GAAM,GAAO,GAAG,MAAM,KAAK,WAC3B,MAAO,IAAS,MAAM,KAAM,CAAC,EAAM,UAAU,OAAO,KAGrD,OAAO,eAAe,EAAO,GAAM,WACnC,OAAO,eAAe,EAAM,SAAU,GAEtC,EAAM,SAAS,YAAc,GAEtB,EAAM,SAGd,GAAa,KAAM,GAIpB,AAAI,IACH,GAAW,KAAK,KAAO,SAGxB,OAAW,KAAO,QAAO,KAAK,GAC7B,EAAW,GAAK,QAAU,GAAI,QAAO,GAAmB,EAAW,GAAK,OAAQ,KAEhF,GAAO,GAAO,CACb,KAAM,CACL,GAAM,GAAQ,EAAW,GACzB,MAAO,IAAM,KAAK,KAAM,KAAK,QAAU,KAAK,QAAQ,OAAO,GAAS,CAAC,GAAQ,KAAK,OAAQ,KAK7F,GAAO,QAAU,CAChB,KAAM,CACL,MAAO,IAAM,KAAK,KAAM,KAAK,SAAW,GAAI,GAAM,aAIpD,EAAW,MAAM,QAAU,GAAI,QAAO,GAAmB,EAAW,MAAM,OAAQ,KAClF,OAAW,KAAS,QAAO,KAAK,EAAW,MAAM,MAChD,AAAI,GAAW,IAAI,IAInB,IAAO,GAAS,CACf,KAAM,CACL,GAAM,GAAQ,KAAK,MACnB,MAAO,WAAY,CAElB,GAAM,GAAQ,CACb,KAFY,EAAW,MAAM,GAAa,IAAQ,GAAO,MAAM,KAAM,WAGrE,MAAO,EAAW,MAAM,MACxB,QAAS,EAAW,MAAM,SAE3B,MAAO,IAAM,KAAK,KAAM,KAAK,QAAU,KAAK,QAAQ,OAAO,GAAS,CAAC,GAAQ,KAAK,OAAQ,OAM9F,EAAW,QAAQ,QAAU,GAAI,QAAO,GAAmB,EAAW,QAAQ,OAAQ,KACtF,OAAW,KAAS,QAAO,KAAK,EAAW,QAAQ,MAAO,CACzD,GAAI,GAAW,IAAI,GAClB,SAGD,GAAM,GAAU,KAAO,EAAM,GAAG,cAAgB,EAAM,MAAM,GAC5D,GAAO,GAAW,CACjB,KAAM,CACL,GAAM,GAAQ,KAAK,MACnB,MAAO,WAAY,CAElB,GAAM,GAAQ,CACb,KAFY,EAAW,QAAQ,GAAa,IAAQ,GAAO,MAAM,KAAM,WAGvE,MAAO,EAAW,QAAQ,MAC1B,QAAS,EAAW,QAAQ,SAE7B,MAAO,IAAM,KAAK,KAAM,KAAK,QAAU,KAAK,QAAQ,OAAO,GAAS,CAAC,GAAQ,KAAK,OAAQ,MAM9F,GAAM,IAAQ,OAAO,iBAAiB,IAAM,GAAI,IAEhD,YAAe,EAAS,EAAQ,EAAK,CACpC,GAAM,GAAU,UAAY,CAC3B,MAAO,IAAW,MAAM,EAAS,YAGlC,EAAQ,QAAU,EAClB,EAAQ,OAAS,EAEjB,GAAM,GAAO,KAEb,cAAO,eAAe,EAAS,QAAS,CACvC,WAAY,GACZ,KAAM,CACL,MAAO,GAAK,OAEb,IAAI,EAAO,CACV,EAAK,MAAQ,KAIf,OAAO,eAAe,EAAS,UAAW,CACzC,WAAY,GACZ,KAAM,CACL,MAAO,GAAK,SAEb,IAAI,EAAS,CACZ,EAAK,QAAU,KAKjB,EAAQ,QAAU,KAAK,SAAW,IAAQ,QAAU,IAAQ,OAI5D,EAAQ,UAAY,GAEb,EAGR,aAAsB,CAErB,GAAM,GAAO,UACP,EAAU,EAAK,OACjB,EAAM,OAAO,UAAU,IAE3B,GAAI,IAAY,EACf,MAAO,GAGR,GAAI,EAAU,EAEb,OAAS,GAAI,EAAG,EAAI,EAAS,IAC5B,GAAO,IAAM,EAAK,GAIpB,GAAI,CAAC,KAAK,SAAW,KAAK,OAAS,GAAK,CAAC,EACxC,MAAO,MAAK,OAAS,GAAK,EAM3B,GAAM,GAAc,EAAW,IAAI,KACnC,AAAI,IAAuB,KAAK,SAC/B,GAAW,IAAI,KAAO,IAGvB,OAAW,KAAQ,MAAK,QAAQ,QAAQ,UAIvC,EAAM,EAAK,KAAO,EAAI,QAAQ,EAAK,QAAS,EAAK,MAAQ,EAAK,MAK9D,EAAM,EAAI,QAAQ,SAAU,GAAG,EAAK,UAAU,EAAK,QAIpD,SAAW,IAAI,KAAO,EAEf,EAGR,YAAkB,EAAO,EAAS,CACjC,GAAI,CAAC,MAAM,QAAQ,GAGlB,MAAO,GAAG,MAAM,KAAK,UAAW,GAAG,KAAK,KAGzC,GAAM,GAAO,GAAG,MAAM,KAAK,UAAW,GAChC,EAAQ,CAAC,EAAQ,IAAI,IAE3B,OAAS,GAAI,EAAG,EAAI,EAAQ,OAAQ,IACnC,EAAM,KAAK,OAAO,EAAK,EAAI,IAAI,QAAQ,UAAW,SAClD,EAAM,KAAK,OAAO,EAAQ,IAAI,KAG/B,MAAO,IAAS,EAAO,EAAM,KAAK,KAGnC,OAAO,iBAAiB,GAAM,UAAW,IAEzC,GAAO,QAAU,KACjB,GAAO,QAAQ,cAAgB,GAC/B,GAAO,QAAQ,QAAU,GAAO,UCnOhC,gCAEA,GAAM,IAAU,CAAC,EAAI,IAAS,CAC7B,OAAW,KAAQ,SAAQ,QAAQ,GAClC,OAAO,eAAe,EAAI,EAAM,OAAO,yBAAyB,EAAM,IAGvE,MAAO,IAGR,GAAO,QAAU,GAEjB,GAAO,QAAQ,QAAU,KCZzB,gCACA,GAAM,IAAU,KAEV,GAAkB,GAAI,SAEtB,GAAU,CAAC,EAAW,EAAU,KAAO,CAC5C,GAAI,MAAO,IAAc,WACxB,KAAM,IAAI,WAAU,uBAGrB,GAAI,GACA,EAAY,EACV,EAAe,EAAU,aAAe,EAAU,MAAQ,cAE1D,EAAU,YAAa,EAAY,CAGxC,GAFA,GAAgB,IAAI,EAAS,EAAE,GAE3B,IAAc,EACjB,EAAc,EAAU,MAAM,KAAM,GACpC,EAAY,aACF,EAAQ,QAAU,GAC5B,KAAM,IAAI,OAAM,cAAc,+BAG/B,MAAO,IAGR,UAAQ,EAAS,GACjB,GAAgB,IAAI,EAAS,GAEtB,GAGR,GAAO,QAAU,GAEjB,GAAO,QAAQ,QAAU,GAEzB,GAAO,QAAQ,UAAY,GAAa,CACvC,GAAI,CAAC,GAAgB,IAAI,GACxB,KAAM,IAAI,OAAM,wBAAwB,EAAU,oDAGnD,MAAO,IAAgB,IAAI,MC1C5B,mBAoBA,GAAO,QAAU,CACf,UACA,UACA,SACA,SACA,WAGF,AAAI,QAAQ,WAAa,SACvB,GAAO,QAAQ,KACb,YACA,UACA,UACA,UACA,UACA,SACA,UACA,UAOJ,AAAI,QAAQ,WAAa,SACvB,GAAO,QAAQ,KACb,QACA,UACA,SACA,YACA,eClDJ,mBAGA,GAAI,IAAS,QAAQ,UACjB,GAAU,KACV,GAAQ,QAAQ,KAAK,QAAQ,UAE7B,GAAK,QAAQ,UAEjB,AAAI,MAAO,KAAO,YAChB,IAAK,GAAG,cAGV,GAAI,IACJ,AAAI,QAAQ,wBACV,GAAU,QAAQ,wBAElB,IAAU,QAAQ,wBAA0B,GAAI,IAChD,GAAQ,MAAQ,EAChB,GAAQ,QAAU,IAOpB,AAAK,GAAQ,UACX,IAAQ,gBAAgB,KACxB,GAAQ,SAAW,IAGrB,GAAO,QAAU,SAAU,EAAI,EAAM,CACnC,GAAO,MAAM,MAAO,GAAI,WAAY,gDAEhC,KAAW,IACb,KAGF,GAAI,GAAK,OACT,AAAI,GAAQ,EAAK,YACf,GAAK,aAGP,GAAI,GAAS,UAAY,CACvB,GAAQ,eAAe,EAAI,GACvB,GAAQ,UAAU,QAAQ,SAAW,GACrC,GAAQ,UAAU,aAAa,SAAW,GAC5C,MAGJ,UAAQ,GAAG,EAAI,GAER,GAGT,GAAO,QAAQ,OAAS,GACxB,aAAmB,CACjB,AAAI,CAAC,IAGL,IAAS,GAET,GAAQ,QAAQ,SAAU,EAAK,CAC7B,GAAI,CACF,QAAQ,eAAe,EAAK,GAAa,UAClC,EAAP,KAEJ,QAAQ,KAAO,GACf,QAAQ,WAAa,GACrB,GAAQ,OAAS,GAGnB,YAAe,EAAO,EAAM,EAAQ,CAClC,AAAI,GAAQ,QAAQ,IAGpB,IAAQ,QAAQ,GAAS,GACzB,GAAQ,KAAK,EAAO,EAAM,IAI5B,GAAI,IAAe,GACnB,GAAQ,QAAQ,SAAU,EAAK,CAC7B,GAAa,GAAO,UAAqB,CAKvC,GAAI,GAAY,QAAQ,UAAU,GAClC,AAAI,EAAU,SAAW,GAAQ,OAC/B,MACA,GAAK,OAAQ,KAAM,GAEnB,GAAK,YAAa,KAAM,GAEpB,IAAS,IAAQ,UAGnB,GAAM,UAER,QAAQ,KAAK,QAAQ,IAAK,OAKhC,GAAO,QAAQ,QAAU,UAAY,CACnC,MAAO,KAGT,GAAO,QAAQ,KAAO,GAEtB,GAAI,IAAS,GAEb,aAAiB,CACf,AAAI,IAGJ,IAAS,GAMT,GAAQ,OAAS,EAEjB,GAAU,GAAQ,OAAO,SAAU,EAAK,CACtC,GAAI,CACF,eAAQ,GAAG,EAAK,GAAa,IACtB,SACA,EAAP,CACA,MAAO,MAIX,QAAQ,KAAO,GACf,QAAQ,WAAa,IAGvB,GAAI,IAA4B,QAAQ,WACxC,YAA4B,EAAM,CAChC,QAAQ,SAAW,GAAQ,EAC3B,GAAK,OAAQ,QAAQ,SAAU,MAE/B,GAAK,YAAa,QAAQ,SAAU,MAEpC,GAA0B,KAAK,QAAS,QAAQ,UAGlD,GAAI,IAAsB,QAAQ,KAClC,YAAsB,EAAI,EAAK,CAC7B,GAAI,IAAO,OAAQ,CACjB,AAAI,IAAQ,QACV,SAAQ,SAAW,GAErB,GAAI,GAAM,GAAoB,MAAM,KAAM,WAC1C,UAAK,OAAQ,QAAQ,SAAU,MAE/B,GAAK,YAAa,QAAQ,SAAU,MAC7B,MAEP,OAAO,IAAoB,MAAM,KAAM,cChK3C,gCACA,GAAM,IAAU,KACV,GAAa,KAEnB,GAAO,QAAU,GAAQ,IAAM,CAC9B,GAAW,IAAM,CAChB,QAAQ,OAAO,MAAM,WACnB,CAAC,WAAY,SCPjB,2BACA,GAAM,IAAgB,KAElB,GAAW,GAEf,GAAQ,KAAO,CAAC,EAAiB,QAAQ,SAAW,CACnD,AAAI,CAAC,EAAe,OAIpB,IAAW,GACX,EAAe,MAAM,YAGtB,GAAQ,KAAO,CAAC,EAAiB,QAAQ,SAAW,CACnD,AAAI,CAAC,EAAe,OAIpB,MACA,GAAW,GACX,EAAe,MAAM,YAGtB,GAAQ,OAAS,CAAC,EAAO,IAAmB,CAC3C,AAAI,IAAU,QACb,IAAW,GAGZ,AAAI,GACH,GAAQ,KAAK,GAEb,GAAQ,KAAK,oMChCf,gCAEA,GAAO,QAAU,GAAW,CAC3B,EAAU,OAAO,OAAO,CACvB,UAAW,IACT,GAEH,GAAM,GAAU,CACf,8FACA,4DACC,KAAK,KAEP,MAAO,IAAI,QAAO,EAAS,EAAQ,UAAY,OAAY,QCZ5D,gCACA,GAAM,IAAY,KAEZ,GAAY,GAAU,MAAO,IAAW,SAAW,EAAO,QAAQ,KAAa,IAAM,EAE3F,GAAO,QAAU,GACjB,GAAO,QAAQ,QAAU,KCNzB,gCAEA,GAAM,IAAW,QAAQ,YACnB,GAAY,KACZ,CAAE,UAAQ,SAAS,KAEnB,GAAiB,CAAC,UAAW,OAAQ,WAAY,gBAAiB,WAClE,GAAe,CAAC,QAAS,MAAO,QAAS,SAAU,OAAQ,UAAW,OAAQ,QAAS,OAAQ,YAAa,cAAe,eAAgB,aAAc,gBAAiB,aAAc,eAE9L,YAA6B,EAAS,CACpC,GAAM,CAAE,OAAM,SAAQ,UAAW,EAC3B,EAAO,CAAE,OAAM,SAAQ,UACvB,EAAS,GAAa,GAE5B,MAAK,IAAe,SAAS,IAAS,MAAO,GAAK,OAC9C,MAAO,IAAS,UAAU,MAAO,GAAK,KACtC,MAAO,IAAW,UAAU,MAAO,GAAK,OAErC,IAAK,KAAW,GAGzB,YAA8B,CAAE,UAAS,kBAAiB,GAAU,CAClE,GAAM,GAAS,GAAa,GACtB,EAAW,GAAc,GACzB,EAAqB,MAAO,IAAiB,UAAY,CAAE,gBAAiB,GAClF,SAAU,GAAmB,GAEtB,IAAK,KAAW,KAAa,EAAoB,WAG1D,YAA4B,EAAU,GAAI,CACxC,GAAM,GAAkB,KAA4B,GAAO,GAC3D,GAAI,CAAC,MAAO,KAAY,SAAU,MAAO,GACzC,GAAI,CAAE,WAAU,UAAW,EAC3B,MAAI,EAAC,MAAM,QAAQ,IAAW,EAAO,OAAS,IAAG,GAAS,EAAgB,QACtE,MAAO,IAAa,UAAU,GAAW,EAAgB,UAEtD,CAAE,WAAU,UAGrB,YAAsB,CAAE,QAAO,eAAc,YAAW,gBAAgB,CACtE,GAAM,GAAS,CAAE,QAAO,eAAc,YAAW,gBACjD,cAAO,KAAK,GAAQ,QAAQ,GAAO,CACjC,AAAK,GAAa,SAAS,EAAO,KAAO,MAAO,GAAO,KAGlD,EAGT,YAAuB,CAAE,gBAAe,cAAc,CACpD,MAAG,MACD,GAAgB,GAAiB,SACjC,EAAa,GAAc,UAE3B,GAAgB,GAAiB,SACjC,EAAa,GAAc,QAGtB,CAAE,gBAAe,cAG1B,YAAmB,EAAM,EAAc,CACrC,MAAO,GAAK,MAAM;AAAA,GACf,IAAI,CAAC,EAAM,IAAU,IAAU,EAAI,GAAU,EAAM,GAAgB,GAAU,EAAM,IACnF,KAAK;AAAA,GAGV,YAAmB,EAAM,EAAc,CACrC,GAAM,GAAU,QAAQ,OAAO,SAAW,GAC1C,MAAO,GAAK,QAAW,EAAU,EAC7B,GAAG,EAAK,UAAU,EAAG,EAAU,EAAe;AAAA,EAC9C,GAAU,EAAK,UAAU,EAAU,EAAe,EAAG,EAAK,QAAS,KAEnE,EAGN,YAAwB,EAAM,EAAc,CAC1C,MAAO,IAAU,GACd,MAAM;AAAA,GACN,IAAI,CAAC,EAAM,IAAU,IAAU,EAAI,EAAK,OAAS,EAAe,EAAK,QAG1E,YAAqB,EAAQ,EAAQ,EAAU,CAC7C,EAAO,MAAM,GACb,GAAS,WAAW,EAAQ,EAAG,CAAC,EAAS,QAG3C,YAAqB,EAAQ,EAAU,CACrC,EAAS,QAAQ,CAAC,EAAY,IAAU,CACtC,GAAS,WAAW,EAAQ,EAAY,GACxC,GAAS,UAAU,EAAQ,GAC3B,GAAS,WAAW,EAAQ,CAAC,EAAY,CAAC,KAE5C,GAAS,WAAW,EAAQ,EAAG,EAAS,QACxC,GAAS,gBAAgB,GACzB,GAAS,WAAW,EAAQ,EAAG,CAAC,EAAS,QAG3C,aAAmC,CAG/B,MAAO,SAAQ,WAAa,SACvB,QAAQ,IAAI,eAAiB,UAC7B,CAAC,CAAC,QAAQ,IAAI,WAGvB,GAAO,QAAU,CACf,wBACA,uBACA,gBACA,aACA,kBACA,eACA,eACA,8BClHF,gCAEA,GAAM,IAAW,QAAQ,YACnB,GAAQ,KACR,GAAY,KACZ,CAAE,UAAQ,SAAS,KAEnB,CAAE,uBAAqB,wBAAsB,gBAAc,aAAW,kBAAgB,4BAA4B,KAClH,CAAE,iBAAe,eAAa,gBAAgB,KAEpD,QAAe,CACb,YAAY,EAAU,GAAI,CACxB,EAAU,GAAqB,GAC/B,KAAK,QAAU,CACb,aAAc,cACd,aAAc,QACd,UAAW,MACX,QAAS,KAA4B,GAAO,GAC5C,aAAc,MACX,GAEL,KAAK,SAAW,GAChB,KAAK,eAAiB,GACtB,KAAK,gBAAkB,KACvB,KAAK,OAAS,QAAQ,OACtB,KAAK,UAAY,EACjB,KAAK,kBAAoB,EACzB,KAAK,KAAO,CAAC,KAAK,QAAQ,cAAgB,CAAC,QAAQ,IAAI,IAAM,QAAQ,QAAU,QAAQ,OAAO,MAC9F,KAAK,aAGP,KAAK,EAAM,CACT,MAAO,MAAK,SAAS,GAGvB,IAAI,EAAM,EAAU,GAAI,CACtB,GAAI,MAAO,IAAS,SAAU,KAAM,OAAM,8CAC1C,AAAK,EAAQ,MAAM,GAAQ,KAAO,GAClC,GAAM,GAAoB,IACrB,GAAa,KAAK,SACrB,cAAe,KAAK,QAAQ,cAC5B,WAAY,KAAK,QAAQ,WACzB,OAAQ,cACL,GAAoB,IAGzB,YAAK,SAAS,GAAQ,EACtB,KAAK,qBAEE,EAGT,OAAO,EAAM,EAAU,GAAI,CACzB,GAAM,CAAE,UAAW,EACnB,YAAK,qBAAqB,EAAM,EAAS,GACzC,KAAK,qBAEE,KAAK,SAAS,GAGvB,QAAQ,EAAM,EAAU,GAAI,CAC1B,YAAK,qBAAqB,EAAM,EAAS,WACzC,KAAK,qBAEE,KAAK,SAAS,GAGvB,KAAK,EAAM,EAAU,GAAI,CACvB,YAAK,qBAAqB,EAAM,EAAS,QACzC,KAAK,qBAEE,KAAK,SAAS,GAGvB,OAAO,EAAM,CACX,GAAI,MAAO,IAAS,SAAU,KAAM,OAAM,8CAC1C,GAAM,GAAU,KAAK,SAAS,GAC9B,aAAO,MAAK,SAAS,GAEd,EAGT,QAAQ,EAAY,UAAW,CAC7B,cAAO,KAAK,KAAK,UAAU,QAAQ,GAAQ,CACzC,GAAM,CAAE,OAAQ,GAAkB,KAAK,SAAS,GAChD,AAAI,IAAkB,QAAU,IAAkB,WAAa,IAAkB,iBAC/E,CAAI,IAAc,WAAa,IAAc,OAC3C,MAAK,SAAS,GAAM,OAAS,EAC7B,KAAK,SAAS,GAAM,MAAQ,KAAK,QAAQ,GAAG,WAE5C,MAAK,SAAS,GAAM,OAAS,UAC7B,KAAK,SAAS,GAAM,MAAQ,WAIlC,KAAK,wBAEE,KAAK,SAGd,mBAAoB,CAClB,MAAO,CAAC,CAAC,OAAO,OAAO,KAAK,UAAU,KAAK,CAAC,CAAE,YAAa,IAAW,YAGxE,qBAAqB,EAAM,EAAS,EAAQ,CAC1C,GAAI,MAAO,IAAS,SAAU,KAAM,OAAM,8CAC1C,GAAI,CAAC,KAAK,SAAS,GAAO,KAAM,OAAM,oCAAoC,KAC1E,EAAU,GAAoB,GAC9B,EAAS,GAAU,WAEnB,KAAK,SAAS,GAAQ,IAAK,KAAK,SAAS,MAAU,EAAS,UAG9D,mBAAmB,EAAM,EAAU,GAAI,EAAQ,CAC7C,AAAI,KAAK,KACP,eAAc,KAAK,iBACnB,KAAK,gBAAkB,KAAK,aACvB,KAAK,gBAAgB,GAAU,OACpC,KAAK,eAAiB,GACtB,KAAK,yBAEL,KAAK,qBAIT,YAAa,CACX,GAAM,CAAE,SAAQ,YAAa,KAAK,QAAQ,QAC1C,MAAO,aAAY,IAAM,CACvB,KAAK,gBAAgB,EAAO,KAAK,oBACjC,KAAK,kBAAoB,KAAK,oBAAsB,EAAO,OAAS,EAAI,EAAI,EAAE,KAAK,mBAClF,GAGL,gBAAgB,EAAQ,GAAI,CAC1B,GAAI,GAAS,GACP,EAAc,GACd,EAAoB,KAAK,oBAC/B,OACG,OAAO,KAAK,UACZ,IAAI,CAAC,CAAE,OAAM,SAAQ,QAAO,eAAc,eAAc,YAAW,gBAAe,aAAY,YAAa,CAC1G,GAAI,GACA,EAAe,GAAU,EAC7B,AAAI,IAAW,WACb,IAAgB,EAAM,OAAS,EAC/B,EAAO,GAAU,EAAM,GACvB,EAAO,GAAG,GAAM,GAAc,MAAU,EAAQ,GAAM,GAAO,GAAQ,KAErE,AAAI,IAAW,UACb,IAAgB,EAAc,OAAS,EACnC,GAAmB,GAAO,GAAU,EAAM,IAC9C,EAAO,GAAG,GAAM,MAAM,MAAkB,GAAM,GAAc,MACvD,AAAI,IAAW,OACpB,IAAgB,EAAW,OAAS,EAChC,GAAmB,GAAO,GAAU,EAAM,IAC9C,EAAO,GAAG,GAAM,IAAI,MAAe,GAAM,GAAW,MAEhD,IAAmB,GAAO,GAAU,EAAM,IAC9C,EAAO,EAAQ,GAAM,GAAO,GAAQ,GAGxC,EAAY,KAAK,GAAG,GAAe,EAAM,IACzC,GAAU,EAAS,GAAG,IAAI,OAAO,KAAU;AAAA,EAAW,GAAG;AAAA,IAGzD,GAAmB,GAAS,gBAAgB,KAAK,QACrD,GAAY,KAAK,OAAQ,EAAQ,GAC7B,GAAmB,GAAY,KAAK,OAAQ,GAChD,KAAK,UAAY,EAAY,OAG/B,oBAAqB,CACnB,OAAO,OAAO,KAAK,UAAU,QAAQ,GAAK,CACxC,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,KAIhC,uBAAwB,CACtB,AAAK,KAAK,qBACJ,MAAK,MACP,MAAK,kBACL,GAAS,WAAW,KAAK,OAAQ,EAAG,KAAK,WACzC,cAAc,KAAK,iBACnB,KAAK,eAAiB,GACtB,GAAU,QAEZ,KAAK,SAAW,IAIpB,WAAW,EAAO,CAChB,QAAQ,mBAAmB,UAC3B,QAAQ,GAAG,SAAU,IAAM,CACzB,GAAU,OACV,GAAS,WAAW,QAAQ,OAAQ,EAAG,KAAK,WAC5C,QAAQ,KAAK,OAKnB,GAAO,QAAU,GACjB,GAAO,QAAQ,KAAO,GACtB,GAAO,QAAQ,OAAS,KCzMxB,gCAEA,GAAM,IAAU,QAAQ,IAAI,eAAiB,QACvC,GAAY,QAAQ,WAAa,QACjC,GAAU,QAAQ,WAAa,QAE/B,GAAS,CACb,eAAgB,SAChB,UAAW,SACX,SAAU,SACV,OAAQ,SACR,YAAa,SACb,UAAW,SACX,MAAO,SACP,YAAa,SACb,KAAM,SACN,KAAM,SACN,OAAQ,OACR,MAAO,SACP,eAAgB,OAChB,OAAQ,OACR,gBAAiB,SACjB,YAAa,SACb,cAAe,SACf,QAAS,IACT,SAAU,SACV,QAAS,OACT,UAAW,OACX,QAAS,OACT,SAAU,SACV,QAAS,SACT,YAAa,UAGT,GAAU,OAAO,OAAO,GAAI,GAAQ,CACxC,MAAO,SACP,MAAO,OACP,cAAe,MACf,SAAU,MACV,KAAM,IACN,SAAU,IACV,cAAe,IACf,QAAS,IACT,aAAc,OACd,SAAU,MACV,QAAS,MACT,QAAS,WAGL,GAAQ,OAAO,OAAO,GAAI,GAAQ,CACtC,YAAa,SACb,MAAO,SACP,MAAO,SACP,cAAe,SACf,SAAU,SACV,KAAM,SACN,SAAU,IACV,aAAc,SACd,cAAe,SACf,QAAS,GAAU,SAAM,SACzB,aAAc,GAAU,SAAM,SAC9B,SAAU,SACV,QAAS,SACT,QAAS,WAGX,GAAO,QAAW,IAAa,CAAC,GAAW,GAAU,GACrD,QAAQ,eAAe,GAAO,QAAS,SAAU,CAAE,WAAY,GAAO,MAAO,KAC7E,QAAQ,eAAe,GAAO,QAAS,UAAW,CAAE,WAAY,GAAO,MAAO,KAC9E,QAAQ,eAAe,GAAO,QAAS,QAAS,CAAE,WAAY,GAAO,MAAO,OCrE5E,gCAEA,GAAM,IAAW,GAAO,IAAQ,MAAQ,MAAO,IAAQ,UAAY,CAAC,MAAM,QAAQ,GAK5E,GAAa,uHAEb,GAAS,IAAM,CACnB,GAAM,GAAS,CAAE,QAAS,GAAM,QAAS,GAAM,OAAQ,GAAI,KAAM,IAEjE,AAAI,eAAiB,SAAQ,KAC3B,GAAO,QAAU,QAAQ,IAAI,cAAgB,KAG/C,GAAM,GAAO,GAAS,CACpB,GAAI,GAAO,EAAM,KAAO,KAAU,EAAM,MAAM,MAC1C,EAAQ,EAAM,MAAQ,KAAU,EAAM,MAAM,MAC5C,EAAQ,EAAM,MAAQ,GAAI,QAAO,aAAa,EAAM,MAAM,MAAO,KACrE,SAAM,KAAO,CAAC,EAAO,IAAY,CAC/B,AAAI,EAAM,SAAS,IAAQ,GAAQ,EAAM,QAAQ,EAAO,EAAQ,IAChE,GAAI,GAAS,EAAO,EAAQ,EAI5B,MAAO,GAAU,EAAO,QAAQ,SAAU,GAAG,MAAU,KAAU,GAE5D,GAGH,EAAO,CAAC,EAAO,EAAO,IACnB,MAAO,IAAU,WAAa,EAAM,GAAS,EAAM,KAAK,EAAO,GAGlE,EAAQ,CAAC,EAAO,IAAU,CAC9B,GAAI,IAAU,IAAM,GAAS,KAAM,MAAO,GAC1C,GAAI,EAAO,UAAY,GAAO,MAAO,GACrC,GAAI,EAAO,UAAY,GAAO,MAAO,GACrC,GAAI,GAAM,GAAK,EACX,EAAK,EAAI,SAAS;AAAA,GAClB,EAAI,EAAM,OAId,IAHI,EAAI,GAAK,EAAM,SAAS,YAC1B,GAAQ,CAAC,GAAG,GAAI,KAAI,CAAC,UAAW,GAAG,KAAS,WAEvC,KAAM,GAAG,EAAM,EAAK,EAAO,OAAO,EAAM,IAAK,EAAK,GACzD,MAAO,IAGH,EAAS,CAAC,EAAM,EAAO,IAAS,CACpC,EAAO,OAAO,GAAQ,EAAK,CAAE,OAAM,UAEnC,AADW,GAAO,KAAK,IAAU,GAAO,KAAK,GAAQ,KAChD,KAAK,GAEV,QAAQ,eAAe,EAAQ,EAAM,CACnC,aAAc,GACd,WAAY,GACZ,IAAI,EAAO,CACT,EAAO,MAAM,EAAM,IAErB,KAAM,CACJ,GAAI,GAAQ,GAAS,EAAM,EAAO,EAAM,OACxC,eAAQ,eAAe,EAAO,GAC9B,EAAM,MAAQ,KAAK,MAAQ,KAAK,MAAM,OAAO,GAAQ,CAAC,GAC/C,MAKb,SAAO,QAAS,CAAC,EAAG,GAAI,YACxB,EAAO,OAAQ,CAAC,EAAG,IAAK,YACxB,EAAO,MAAO,CAAC,EAAG,IAAK,YACvB,EAAO,SAAU,CAAC,EAAG,IAAK,YAC1B,EAAO,YAAa,CAAC,EAAG,IAAK,YAC7B,EAAO,UAAW,CAAC,EAAG,IAAK,YAC3B,EAAO,SAAU,CAAC,EAAG,IAAK,YAC1B,EAAO,gBAAiB,CAAC,EAAG,IAAK,YAEjC,EAAO,QAAS,CAAC,GAAI,IAAK,SAC1B,EAAO,MAAO,CAAC,GAAI,IAAK,SACxB,EAAO,QAAS,CAAC,GAAI,IAAK,SAC1B,EAAO,SAAU,CAAC,GAAI,IAAK,SAC3B,EAAO,OAAQ,CAAC,GAAI,IAAK,SACzB,EAAO,UAAW,CAAC,GAAI,IAAK,SAC5B,EAAO,OAAQ,CAAC,GAAI,IAAK,SACzB,EAAO,QAAS,CAAC,GAAI,IAAK,SAC1B,EAAO,OAAQ,CAAC,GAAI,IAAK,SACzB,EAAO,OAAQ,CAAC,GAAI,IAAK,SAEzB,EAAO,UAAW,CAAC,GAAI,IAAK,MAC5B,EAAO,QAAS,CAAC,GAAI,IAAK,MAC1B,EAAO,UAAW,CAAC,GAAI,IAAK,MAC5B,EAAO,WAAY,CAAC,GAAI,IAAK,MAC7B,EAAO,SAAU,CAAC,GAAI,IAAK,MAC3B,EAAO,YAAa,CAAC,GAAI,IAAK,MAC9B,EAAO,SAAU,CAAC,GAAI,IAAK,MAC3B,EAAO,UAAW,CAAC,GAAI,IAAK,MAE5B,EAAO,cAAe,CAAC,GAAI,IAAK,UAChC,EAAO,YAAa,CAAC,GAAI,IAAK,UAC9B,EAAO,cAAe,CAAC,GAAI,IAAK,UAChC,EAAO,eAAgB,CAAC,GAAI,IAAK,UACjC,EAAO,aAAc,CAAC,GAAI,IAAK,UAC/B,EAAO,gBAAiB,CAAC,GAAI,IAAK,UAClC,EAAO,aAAc,CAAC,GAAI,IAAK,UAC/B,EAAO,cAAe,CAAC,GAAI,IAAK,UAEhC,EAAO,gBAAiB,CAAC,IAAK,IAAK,YACnC,EAAO,cAAe,CAAC,IAAK,IAAK,YACjC,EAAO,gBAAiB,CAAC,IAAK,IAAK,YACnC,EAAO,iBAAkB,CAAC,IAAK,IAAK,YACpC,EAAO,eAAgB,CAAC,IAAK,IAAK,YAClC,EAAO,kBAAmB,CAAC,IAAK,IAAK,YACrC,EAAO,eAAgB,CAAC,IAAK,IAAK,YAClC,EAAO,gBAAiB,CAAC,IAAK,IAAK,YAEnC,EAAO,UAAY,GACnB,EAAO,SAAW,EAAO,QAAU,GACjC,GAAO,UAAU,UAAY,EACtB,MAAO,IAAQ,UAAY,IAAQ,IAAM,EAAO,UAAU,KAAK,IAGxE,EAAO,MAAQ,CAAC,EAAM,IAAU,CAC9B,GAAI,GAAK,MAAO,IAAU,SAAW,EAAO,GAAS,EAErD,GAAI,MAAO,IAAO,WAChB,KAAM,IAAI,WAAU,6EAGtB,AAAK,EAAG,OACN,SAAQ,eAAe,EAAI,OAAQ,CAAE,MAAO,IAC5C,EAAO,OAAO,GAAQ,EACtB,EAAG,MAAQ,CAAC,IAGd,QAAQ,eAAe,EAAQ,EAAM,CACnC,aAAc,GACd,WAAY,GACZ,IAAI,EAAO,CACT,EAAO,MAAM,EAAM,IAErB,KAAM,CACJ,GAAI,GAAQ,GAAS,EAAM,EAAO,EAAM,OACxC,eAAQ,eAAe,EAAO,GAC9B,EAAM,MAAQ,KAAK,MAAQ,KAAK,MAAM,OAAO,EAAG,OAAS,EAAG,MACrD,MAKb,EAAO,MAAQ,GAAU,CACvB,GAAI,CAAC,GAAS,GAAS,KAAM,IAAI,WAAU,kCAC3C,OAAS,KAAQ,QAAO,KAAK,GAC3B,EAAO,MAAM,EAAM,EAAO,IAE5B,MAAO,IAGT,EAAO,MAAM,UAAW,GAClB,MAAO,IAAQ,UAAY,IAAQ,GACrC,GAAO,UAAU,UAAY,EACtB,EAAI,QAAQ,EAAO,UAAW,KAEhC,IAGT,EAAO,MAAM,OAAQ,GAAO,GAC5B,EAAO,KAAO,EAAO,MAAQ,EAAO,KAEpC,EAAO,WAAa,EAAO,QAC3B,EAAO,QAAU,KACjB,EAAO,OAAS,EACT,GAGT,GAAO,QAAU,KACjB,GAAO,QAAQ,OAAS,KChLxB,0BAEA,GAAM,IAAW,OAAO,UAAU,SAC5B,GAAS,KACX,GAAS,GACT,GAAM,GAEJ,GAAc,CAClB,OAAU,OACV,KAAQ,MACR,MAAS,UACT,MAAS,QACT,KAAQ,SACR,IAAO,OACP,QAAW,QACX,MAAS,SAGX,EAAQ,QAAU,CAAC,EAAK,IACf,EAAI,OAAO,CAAC,EAAG,IAAM,KAAK,IAAI,EAAG,EAAO,EAAE,GAAM,OAAS,EAAE,QAAS,GAG7E,EAAQ,SAAW,GAAO,CAAC,CAAC,GAAO,GAAO,SAAS,GAEnD,GAAM,IAAW,EAAQ,SAAW,GAC3B,IAAQ,MAAQ,MAAO,IAAQ,UAAY,CAAC,MAAM,QAAQ,GAGnE,EAAQ,WAAa,GACZ,GAAS,KAAK,GAAK,MAAM,EAAG,IAAI,cAAc,QAAQ,MAAO,IAGtE,EAAQ,UAAY,GACX,EAAQ,WAAW,KAAS,gBAGrC,EAAQ,YAAc,GACb,GAAO,MAAQ,MAAO,IAAQ,UAAY,MAAO,IAAQ,WAGlE,EAAQ,QAAU,CAAC,EAAS,KAAU,IAChC,MAAO,IAAU,WACZ,EAAM,KAAK,EAAS,GAAG,GAEzB,EAGT,EAAQ,WAAa,CAAC,EAAU,KAAO,CAAC,GAAG,EAAQ,MAAM,GAAI,EAAQ,IACrE,EAAQ,SAAW,CAAC,EAAU,KAAO,CAAC,EAAQ,MAAO,GAAG,GAExD,EAAQ,QAAU,CAAC,EAAM,KAAO,CAC9B,GAAI,GAAM,EAAI,QACd,SAAI,KAAK,CAAC,EAAG,IACP,EAAE,MAAQ,EAAE,MAAc,EAC1B,EAAE,MAAQ,EAAE,MAAc,GACvB,GAEF,GAGT,EAAQ,KAAO,CAAC,EAAK,EAAO,IAAQ,CAClC,GAAI,GAAM,EAAI,OACV,EAAM,IAAQ,EAAM,EAAI,EAAM,EAAI,EAAM,EAAI,EAC5C,EAAS,EAAI,GACjB,EAAI,GAAS,EAAI,GACjB,EAAI,GAAO,GAGb,EAAQ,MAAQ,CAAC,EAAQ,EAAW,KAAO,CACzC,GAAI,GAAW,GAAU,EAAO,QAAW,EAAO,QAAU,EAI5D,MAHI,IAAU,MAAO,GAAO,eAAkB,YAC5C,GAAU,EAAO,gBAAgB,IAE/B,QAAQ,WAAa,QAChB,EAAU,EAEZ,GAGT,EAAQ,OAAS,CAAC,EAAQ,EAAW,KAAO,CAC1C,GAAI,GAAQ,GAAU,EAAO,KAAQ,EAAO,KAAO,EACnD,MAAI,IAAU,MAAO,GAAO,eAAkB,YAC5C,GAAO,EAAO,gBAAgB,IAEzB,GAGT,EAAQ,SAAW,CAAC,EAAK,EAAU,KAAO,CACxC,GAAI,CAAC,EAAK,MAAO,GAEjB,AAAI,MAAO,IAAY,UACrB,GAAU,CAAE,MAAO,IAGrB,GAAI,CAAE,SAAS,GAAI,UAAW;AAAA,EAAO,EAAS,QAAQ,IAAO,EAE7D,GAAS,AADK,IAAU,GAAQ,MAAM,aAAe,IACrC,OAChB,GAAI,GAAS,OAAO,uDAChB,EAAS,EAAI,OACb,EAAQ,GAAI,QAAO,EAAQ,KAC3B,EAAQ,EAAO,MAAM,IAAU,GACnC,SAAQ,EAAM,IAAI,GAAQ,EAAK,QAAQ,MAAO,KAC1C,EAAQ,QAAQ,GAAQ,EAAM,IAAI,GAAQ,EAAK,OAAO,EAAO,OAC7D,EAAQ,UAAU,GAAQ,EAAM,IAAI,GAAQ,EAAK,SAAS,EAAO,OAC9D,EAAS,EAAM,KAAK,IAG7B,EAAQ,OAAS,GAAS,CACxB,GAAI,GAAO,EAAM,MAAM,KAAK,GAAK,GAAO,KAAK,MAAM,SAAS,IAC5D,MAAI,GACK,GAAO,GAEP,EAAM,MAAM,KAAK,GAAK,EAAE,MAAM,KAAO,MAErC,GAAO,EAAK,MAAM,IAEpB,GAAO,GAGhB,EAAQ,OAAS,GAAO,EAAM,EAAI,GAAG,cAAgB,EAAI,MAAM,GAAK,GAEpE,EAAQ,QAAU,GAAS,CACzB,GAAI,CAAC,GAAS,CAAC,EAAM,MAAO,MAAO,GACnC,GAAI,GAAO,EAAM,MAAM,KAAK,GAAK,GAAO,KAAK,MAAM,SAAS,IAC5D,GAAI,EAAM,CACR,GAAI,GAAM,GAAO,KAAO,EAAQ,OAAO,IACvC,MAAO,GAAM,EAAI,MAAQ,EAE3B,GAAI,GAAK,EAAM,MAAM,KAAK,GAAK,EAAE,MAAM,EAAG,KAAO,MACjD,MAAI,GACK,GAAO,EAAG,MAAM,GAAG,gBAAkB,EAEvC,GAAO,MAGhB,EAAQ,WAAa,GAAS,CAC5B,GAAI,CAAC,GAAS,CAAC,EAAM,MAAO,MAAO,GACnC,GAAI,GAAO,EAAM,MAAM,KAAK,GAAK,GAAO,KAAK,MAAM,SAAS,IACxD,EAAK,EAAM,MAAM,KAAK,GAAK,EAAE,MAAM,EAAG,KAAO,MACjD,GAAI,GAAQ,CAAC,EACX,MAAO,IAAO,GAAY,IAAS,GAErC,GAAI,EAAI,CACN,GAAI,GAAQ,EAAG,MAAM,GAAG,cACpB,EAAO,GAAY,GACvB,MAAK,IACE,GAAO,KAAO,EAAQ,OAAO,KAAU,EAEhD,MAAO,IAAO,MAGhB,EAAQ,SAAW,GAAQ,CACzB,GAAI,GAAQ,EAAK,WACb,EAAU,EAAK,aACf,EAAO,GAAS,GAAK,KAAO,KAChC,EAAQ,EAAQ,GAChB,GAAI,GAAM,IAAU,EAAI,GAAK,EACzB,EAAM,EAAU,GAAK,IAAM,EAAU,EACzC,MAAO,GAAM,IAAM,EAAM,IAAM,GAUjC,EAAQ,IAAM,CAAC,EAAM,GAAI,EAAO,GAAI,IAC3B,EAAK,MAAM,KAAK,OAAO,CAAC,EAAK,EAAG,EAAG,IAAQ,CAChD,GAAI,GAAQ,EAAI,OAAS,EAAI,EAAK,EAAI,IAAM,GAAM,EAClD,MAAI,CAAC,EAAQ,SAAS,IAAU,EAAI,EAAI,OAAS,GAAG,GAAQ,IACpD,EAAI,GAAK,GAChB,GASL,EAAQ,IAAM,CAAC,EAAM,GAAI,EAAO,GAAI,IAAa,CAC/C,GAAI,GAAQ,EAAI,IAAS,KACrB,EAAK,MAAM,KAAK,OAAO,CAAC,EAAK,IAAM,GAAO,EAAI,GAAI,GAClD,EAAI,GACR,MAAO,IAAgB,GAGzB,EAAQ,MAAQ,CAAC,EAAQ,IAAM,CAC7B,GAAI,CAAC,GAAS,GAAS,MAAO,GAC9B,GAAI,CAAC,GAAS,GAAI,MAAO,GACzB,OAAS,KAAO,QAAO,KAAK,GAAI,CAC9B,GAAI,GAAO,OAAO,yBAAyB,EAAG,GAC9C,GAAI,EAAK,eAAe,SACtB,GAAI,EAAO,eAAe,IAAQ,GAAS,EAAK,OAAQ,CACtD,GAAI,GAAW,OAAO,yBAAyB,EAAQ,GACvD,AAAI,GAAS,EAAS,OACpB,EAAO,GAAO,EAAQ,MAAM,GAAI,EAAO,GAAM,EAAE,IAE/C,QAAQ,eAAe,EAAQ,EAAK,OAGtC,SAAQ,eAAe,EAAQ,EAAK,OAGtC,SAAQ,eAAe,EAAQ,EAAK,GAGxC,MAAO,IAGT,EAAQ,MAAQ,IAAI,IAAS,CAC3B,GAAI,GAAS,GACb,OAAS,KAAO,GAAM,EAAQ,MAAM,EAAQ,GAC5C,MAAO,IAGT,EAAQ,aAAe,CAAC,EAAK,IAAY,CACvC,GAAI,GAAQ,EAAQ,YAAY,UAChC,OAAS,KAAO,QAAO,KAAK,GAAQ,CAClC,GAAI,GAAM,EAAM,GAChB,AAAI,MAAO,IAAQ,WACjB,EAAQ,OAAO,EAAK,EAAK,EAAI,KAAK,IAElC,EAAQ,OAAO,EAAK,EAAK,KAK/B,EAAQ,OAAS,GAAY,CAC3B,GAAM,GAAS,CAAC,EAAM,IAAS,CAC7B,AAAI,IAEJ,IAAS,GACT,GAAI,QAAQ,GAAM,KAEd,IAAS,IACX,QAAQ,KAAK,IAAM,KAIvB,AAAI,GAAI,SAAW,GACjB,SAAQ,KAAK,UAAW,EAAO,KAAK,KAAM,GAAM,KAChD,QAAQ,KAAK,SAAU,EAAO,KAAK,KAAM,GAAM,IAC/C,QAAQ,KAAK,OAAQ,IAGvB,GAAI,KAAK,IAGX,EAAQ,OAAS,CAAC,EAAK,EAAK,IAAU,CACpC,QAAQ,eAAe,EAAK,EAAK,CAAE,WAGrC,EAAQ,aAAe,CAAC,EAAK,EAAK,IAAO,CACvC,GAAI,GACJ,QAAQ,eAAe,EAAK,EAAK,CAC/B,WAAY,GACZ,aAAc,GACd,IAAI,EAAK,CACP,EAAS,GAEX,KAAM,CACJ,MAAO,GAAS,IAAW,UCxQjC,2BAOA,GAAQ,KAAO,CACb,EAAG,QACH,EAAG,WACH,EAAG,SACH,EAAG,gBACH,EAAG,OACH,EAAG,UACH,EAAG,QACH,EAAG,MACH,EAAG,aACH,EAAG,QACH,EAAG,UACH,EAAG,SACH,EAAG,SACH,EAAG,SACH,EAAG,SACH,EAAG,OACH,EAAG,OACH,EAAG,UACH,EAAG,eACH,EAAG,SAGL,GAAQ,MAAQ,CACd,GAAI,UACJ,KAAM,YACN,KAAM,YACN,MAAO,aACP,IAAK,QAGP,GAAQ,GAAK,CACX,GAAI,SACJ,KAAM,WACN,KAAM,WACN,MAAO,YACP,OAAQ,iBAIV,GAAQ,OAAS,CACf,EAAG,WACH,EAAG,UACH,EAAG,WACH,KAAM,UACN,GAAI,QACJ,KAAM,WAGR,GAAQ,KAAO,CACb,OAAQ,SACR,SAAU,WACV,KAAM,OACN,IAAK,MACL,OAAQ,SACR,OAAQ,gBACR,UAAW,SACX,KAAM,OACN,MAAO,SACP,OAAQ,SACR,KAAM,OACN,MAAO,QACP,OAAQ,SACR,OAAQ,SACR,MAAO,QACP,IAAK,OACL,GAAI,QCzEN,gCAEA,GAAM,IAAW,QAAQ,YACnB,GAAS,KAGT,GAAgB,0BAChB,GAAU,6EACV,GAAU,CAEZ,GAAM,KACN,GAAM,KACN,GAAM,KACN,GAAM,KAEN,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KAER,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KAEP,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,MACR,OAAQ,MACR,OAAQ,MAER,KAAM,KACN,KAAM,OACN,KAAM,QACN,KAAM,OACN,KAAM,QACN,KAAM,MACN,KAAM,OAEN,GAAM,KACN,GAAM,OACN,GAAM,QACN,GAAM,OACN,GAAM,QACN,GAAM,MACN,GAAM,OAEN,MAAO,OACP,MAAO,SACP,MAAO,SACP,MAAO,MACP,MAAO,SACP,MAAO,WAEP,OAAQ,SACR,OAAQ,WAER,MAAO,OACP,MAAO,MAEP,KAAM,KACN,KAAM,OACN,KAAM,QACN,KAAM,OACN,KAAM,QAEN,MAAO,SACP,MAAO,SACP,MAAO,SACP,MAAO,WACP,MAAO,OACP,MAAO,MAEP,GAAM,KACN,GAAM,OACN,GAAM,QACN,GAAM,OACN,GAAM,QAEN,MAAO,SACP,MAAO,SACP,MAAO,SACP,MAAO,WACP,MAAO,OACP,MAAO,MAEP,KAAM,OAGV,YAAoB,EAAM,CACtB,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAM,SAAS,GAGnG,YAAmB,EAAM,CACrB,MAAO,CAAE,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,OAAO,SAAS,GAG9F,GAAM,IAAW,CAAC,EAAI,GAAI,EAAQ,KAAO,CACvC,GAAI,GACA,EAAM,CACR,KAAM,EAAM,KACZ,KAAM,GACN,KAAM,GACN,MAAO,GACP,OAAQ,GACR,SAAU,EACV,IAAK,KACF,GAkBL,GAfA,AAAI,OAAO,SAAS,GAClB,AAAI,EAAE,GAAK,KAAO,EAAE,KAAO,OACzB,GAAE,IAAM,IACR,EAAI,IAAS,OAAO,IAEpB,EAAI,OAAO,GAER,AAAI,IAAM,QAAU,MAAO,IAAM,SACtC,EAAI,OAAO,GACD,GACV,GAAI,EAAI,UAAY,IAGtB,EAAI,SAAW,EAAI,UAAY,GAAK,EAAI,KAEpC,IAAM,KAER,EAAI,IAAM,OACV,EAAI,KAAO,iBACF,IAAM;AAAA,EAEf,EAAI,KAAO,gBACF,IAAM,IAEf,EAAI,KAAO,cACF,IAAM,MAAQ,IAAM,QAAU,IAAM,SAAc,IAAM,MAEjE,EAAI,KAAO,YACX,EAAI,KAAO,EAAE,OAAO,KAAO,YAClB,IAAM,KAAU,IAAM,KAE/B,EAAI,KAAO,SACX,EAAI,KAAO,EAAE,SAAW,UACf,IAAM,KAAO,IAAM,KAC5B,EAAI,KAAO,QACX,EAAI,KAAO,EAAE,SAAW,UACf,GAAK,IAEd,EAAI,KAAO,OAAO,aAAa,EAAE,WAAW,GAAK,IAAI,WAAW,GAAK,GACrE,EAAI,KAAO,WACF,EAAE,SAAW,GAAK,GAAK,KAAO,GAAK,IAE5C,EAAI,KAAO,iBACF,EAAE,SAAW,GAAK,GAAK,KAAO,GAAK,IAE5C,EAAI,KAAO,UACF,EAAE,SAAW,GAAK,GAAK,KAAO,GAAK,IAE5C,EAAI,KAAO,EAAE,cACb,EAAI,MAAQ,WACF,EAAQ,GAAc,KAAK,GAErC,EAAI,KAAO,GACX,EAAI,MAAQ,UAAU,KAAK,EAAM,YACvB,EAAQ,GAAQ,KAAK,GAAK,CACpC,GAAI,GAAO,CAAC,GAAG,GAEf,AAAI,EAAK,KAAO,KAAY,EAAK,KAAO,KACtC,GAAI,OAAS,IAMf,GAAI,GAAO,CAAC,EAAM,GAAI,EAAM,GAAI,EAAM,GAAI,EAAM,IAAI,OAAO,SAAS,KAAK,IACrE,EAAY,GAAM,IAAM,EAAM,IAAM,GAAK,EAG7C,EAAI,KAAO,CAAC,CAAE,GAAW,GACzB,EAAI,KAAO,CAAC,CAAE,GAAW,IACzB,EAAI,MAAQ,CAAC,CAAE,GAAW,GAC1B,EAAI,KAAO,EAEX,EAAI,KAAO,GAAQ,GACnB,EAAI,MAAQ,GAAW,IAAS,EAAI,MACpC,EAAI,KAAO,GAAU,IAAS,EAAI,KAEpC,MAAO,IAGT,GAAS,OAAS,CAAC,EAAU,GAAI,IAAe,CAC9C,GAAI,CAAE,SAAU,EAEhB,GAAI,CAAC,GAAU,IAAU,QAAQ,OAAS,CAAC,EAAM,MAC/C,KAAM,IAAI,OAAM,yBAGlB,GAAI,GAAK,GAAS,gBAAgB,CAAE,SAAU,GAAM,MAAO,IAC3D,GAAS,mBAAmB,EAAO,GAEnC,GAAI,GAAK,CAAC,EAAK,IAAQ,EAAW,EAAK,GAAS,EAAK,GAAM,GACvD,EAAQ,EAAM,MAElB,MAAI,GAAM,OAAO,EAAM,WAAW,IAClC,EAAM,GAAG,WAAY,GACrB,EAAG,SAEO,IAAM,CACd,AAAI,EAAM,OAAO,EAAM,WAAW,GAClC,EAAM,eAAe,WAAY,GACjC,EAAG,QACH,EAAG,UAMP,GAAS,OAAS,CAAC,EAAK,EAAK,IAAkB,CAC7C,GAAI,GAAM,IAAK,MAAW,GAC1B,MAAI,GAAI,KACN,GAAI,OAAS,EAAI,KAAK,EAAI,MACnB,GAGL,EAAI,QAAU,EAAI,OACpB,GAAI,OAAS,EAAI,OAAO,EAAI,MACrB,GAGL,EAAI,MACN,GAAI,OAAS,EAAI,MAAM,EAAI,MACpB,GAGT,GAAI,OAAS,EAAI,KAAK,EAAI,MACnB,IAGT,GAAO,QAAU,KClPjB,gCAEA,GAAO,QAAU,GAAU,CACzB,EAAO,OAAS,EAAO,QAAU,GAEjC,GAAI,GAAS,EAAO,QAAQ,OAC5B,GAAI,EAAC,EAEL,OAAS,KAAO,QAAO,KAAK,GAAS,CACnC,GAAI,GAAO,EAAO,GAClB,AAAI,MAAO,IAAS,UAClB,GAAO,CAAE,SAAU,IAErB,GAAO,EAAQ,EAAK,KAIxB,YAAgB,EAAQ,EAAM,EAAU,GAAI,CAC1C,GAAI,GAAQ,EAAO,OAAO,GAAQ,CAAE,OAAM,MAAO,KAAK,MAAO,GAAI,EAAG,KAAM,GACtE,EAAK,EAAQ,UAAY,IAC7B,EAAM,OAAS,EAAQ,QAAU,GACjC,EAAM,QAAU,GAEhB,GAAI,GAAW,YAAY,IAAM,CAC/B,EAAM,GAAK,KAAK,MAAQ,EAAM,MAC9B,EAAM,OACN,EAAO,UACN,GAEH,SAAM,KAAO,IAAM,CACjB,EAAM,QAAU,GAChB,cAAc,IAGhB,QAAQ,eAAe,EAAO,WAAY,CAAE,MAAO,IACnD,EAAO,KAAK,QAAS,IAAM,EAAM,QAC1B,EAAM,QCpCf,gCAEA,GAAM,CAAE,UAAQ,UAAU,KAE1B,QAAY,CACV,YAAY,EAAQ,CAClB,GAAI,GAAU,EAAO,QACrB,GAAO,KAAM,UAAW,GACxB,KAAK,KAAO,EAAO,KACnB,KAAK,KAAO,EAAO,KACnB,KAAK,QAAU,GACf,KAAK,OAAS,GACd,KAAK,OAAS,GACd,KAAK,MAAQ,GACb,KAAK,KAAO,GACZ,KAAK,MAAQ,GACb,KAAK,OAAS,EACd,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,OAAS,GACd,KAAK,OAAS,GACd,KAAK,MAAQ,GAAM,EAAQ,QAAU,QAAQ,QAC7C,OAAO,OAAO,KAAM,GACpB,KAAK,KAAO,KAAK,MAAQ,KAAK,QAC9B,KAAK,QAAU,KAAK,SAAW,KAAK,KACpC,KAAK,QAAU,EAAO,QACtB,KAAK,OAAS,EAAO,OACrB,KAAK,SAAW,GAAI,KACpB,KAAK,UAAY,GACjB,KAAK,UAAY,GAGnB,OAAQ,CACN,GAAI,GAAQ,IAAK,MACjB,SAAM,OAAS,KAAK,OACpB,EAAM,OAAS,OAAO,KAAK,EAAM,QACjC,MAAO,GAAM,MACN,KAGL,OAAM,EAAK,CACb,KAAK,OAAS,KAEZ,QAAQ,CACV,GAAI,GAAS,KAAK,OAAO,OACzB,GAAI,KAAK,UAAW,MAAO,GAAO,UAClC,GAAI,KAAK,UAAW,MAAO,GAAO,UAClC,GAAI,GAAQ,KAAK,QAAU,EAAO,KAAK,QACvC,MAAO,OAAO,IAAU,WAAa,EAAQ,EAAO,WAGlD,SAAQ,EAAO,CACjB,KAAK,SAAW,KAEd,UAAU,CACZ,MAAI,OAAO,MAAK,UAAa,UAAkB,KAAK,SAChD,KAAK,eAAuB,UACzB,MAGL,SAAS,CACX,MAAI,MAAK,UAAkB,YACvB,KAAK,UAAkB,YACpB,YAIX,GAAO,QAAU,KCpEjB,gCAEA,GAAM,IAAQ,KACR,GAAS,KAET,GAAS,CACb,QAAS,GAAO,KAChB,KAAM,GAAO,QAMT,SAAQ,EAAQ,CAClB,KAAK,SAAW,MAEd,UAAU,CACZ,MAAO,MAAK,UAAY,GAAM,QAAQ,KAAK,aAGzC,YAAW,EAAQ,CACrB,KAAK,YAAc,MAEjB,aAAa,CACf,MAAO,MAAK,aAAe,GAAM,WAAW,KAAK,UAOnD,QAAS,GAAO,KAMhB,QAAS,GAAO,MAChB,OAAQ,GAAO,QACf,OAAQ,GAAO,KACf,QAAS,GAAO,OAChB,MAAO,GAAO,IACd,SAAU,GAAO,KACjB,KAAM,GAAO,IAAI,KACjB,UAAW,GAAO,aAEd,MAAK,EAAQ,CACf,KAAK,MAAQ,MAEX,OAAO,CACT,MAAO,MAAK,OAAS,KAAK,YAGxB,IAAG,EAAQ,CACb,KAAK,IAAM,MAET,KAAK,CACP,MAAO,MAAK,KAAO,KAAK,QAAQ,cAG9B,SAAQ,EAAQ,CAClB,KAAK,SAAW,MAEd,UAAU,CACZ,MAAO,MAAK,UAAY,KAAK,MAAM,cAOjC,SAAQ,EAAQ,CAClB,KAAK,SAAW,MAEd,UAAU,CACZ,MAAO,MAAK,UAAY,KAAK,YAG3B,WAAU,EAAQ,CACpB,KAAK,WAAa,MAEhB,YAAY,CACd,MAAO,MAAK,YAAc,KAAK,YAG7B,WAAU,EAAQ,CACpB,KAAK,WAAa,MAEhB,YAAY,CACd,MAAO,MAAK,YAAc,KAAK,WAO7B,QAAO,EAAQ,CACjB,KAAK,QAAU,MAEb,SAAS,CACX,MAAO,MAAK,SAAW,KAAK,QAG1B,aAAY,EAAQ,CACtB,KAAK,aAAe,MAElB,cAAc,CAChB,MAAO,MAAK,cAAgB,KAAK,QAAQ,QAGvC,WAAU,EAAQ,CACpB,KAAK,WAAa,MAEhB,YAAY,CACd,MAAO,MAAK,YAAc,KAAK,UAInC,GAAO,MAAQ,CAAC,EAAU,KAAO,CAC/B,AAAI,EAAQ,QAAU,MAAO,GAAQ,OAAO,SAAY,WACtD,IAAO,QAAU,EAAQ,OAAO,SAE9B,EAAQ,QAAU,MAAO,GAAQ,OAAO,SAAY,WACtD,IAAO,QAAU,EAAQ,OAAO,SAGlC,GAAI,GAAS,GAAM,MAAM,GAAI,GAAQ,EAAQ,QAC7C,MAAO,GAAO,MAEd,OAAS,KAAO,QAAO,KAAK,IAC1B,AAAK,EAAO,eAAe,IACzB,QAAQ,eAAe,EAAQ,EAAK,CAAE,IAAK,IAAM,GAAO,KAI5D,OAAS,KAAO,QAAO,KAAK,GAAO,QACjC,AAAK,EAAO,eAAe,IACzB,QAAQ,eAAe,EAAQ,EAAK,CAAE,IAAK,IAAM,GAAO,KAG5D,MAAO,IAGT,GAAO,QAAU,KC/IjB,gCAEA,GAAM,IAAY,QAAQ,WAAa,QACjC,GAAS,KACT,GAAQ,KAER,GAAU,IACX,GAAO,QACV,kBAAmB,SACnB,mBAAoB,SACpB,YAAa,SACb,SAAU,IACV,SAAU,SACV,YAAa,SACb,cAAe,SACf,cAAe,SACf,cAAe,SACf,UAAW,SACX,YAAa,SACb,UAAW,GAAO,QAAQ,MAC1B,UAAW,SACX,KAAM,SACN,MAAO,SACP,eAAgB,OAChB,OAAQ,OACR,QAAS,IACT,QAAS,OACT,SAAU,SACV,cAAe,SACf,gBAAiB,SACjB,YAAa,SACb,KAAM,IACN,UAAW,OACX,WAAY,SACZ,WAAY,SACZ,QAAS,OACT,QAAS,CAAE,IAAK,SAAK,GAAI,SAAK,SAAU,UACxC,OAAQ,CAAE,GAAI,SAAK,IAAK,SAAK,SAAU,UACvC,MAAO,CAAE,GAAI,SAAK,IAAK,SAAK,SAAU,UACtC,OAAQ,CAAE,GAAI,SAAK,IAAK,SAAK,SAAU,UACvC,OAAQ,CACN,QAAS,GAAO,QAAQ,SACxB,UAAW,GAAO,QAAQ,MAC1B,UAAW,GAAO,QAAQ,OAE5B,UAAW,CACT,QAAS,GAAO,QAAQ,aACxB,UAAW,GAAO,QAAQ,OAC1B,UAAW,GAAO,QAAQ,QAE5B,MAAO,CACL,IAAK,GAAY,MAAQ,SACzB,GAAI,GAAY,MAAQ,SACxB,SAAU,GAAY,MAAQ,UAEhC,QAAS,CAAC,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,SAAK,WAGtQ,GAAQ,MAAQ,GAAW,CACzB,GAAI,GAAS,GAAM,MAAM,GAAI,GAAO,QAAS,GAAS,EAAQ,SAC9D,aAAO,GAAO,MACP,GAGT,GAAO,QAAU,KChEjB,gCAEA,GAAM,IAAS,KACT,GAAU,KACV,GAAQ,KAEd,GAAO,QAAU,GAAU,CACzB,EAAO,QAAU,GAAM,MAAM,GAAI,EAAO,QAAQ,MAAO,EAAO,SAC9D,EAAO,QAAU,GAAQ,MAAM,EAAO,SACtC,EAAO,OAAS,GAAO,MAAM,EAAO,YCTtC,gCAEA,GAAM,IAAS,QAAQ,IAAI,eAAiB,iBACtC,GAAS,KACT,GAAQ,KACR,GAAO,GAAO,QAAU,GACxB,EAAM,KACN,GAAM,OACR,GAAS,GAEP,GAAO,GAAK,KAAO,CACvB,KAAM,GACN,KAAM,GACN,UAAW,GAAG,KACd,KAAM,GAAG,KACT,IAAK,EACL,YAAa,GAAG,MAChB,KAAM,GAAG,QACT,KAAM,GAAG,MACT,QAAS,GAAG,KACZ,UAAW,GAAG,MACd,gBAAiB,EAAO,IAAS,IAAM,KACvC,aAAc,EAAO,IAAS,IAAM,KACpC,OAAQ,GAAG,MACX,KAAM,GAAG,QACT,GAAI,GAAG,OAGH,GAAS,GAAK,OAAS,IACvB,SAAS,CACX,MAAO,KAGT,MAAO,CACL,UAAS,GACF,GAAK,MAEd,MAAO,CACL,UAAS,GACF,GAAK,MAGd,QAAS,CAAC,EAAQ,IAAM,GAAG,IAAM,KACjC,SAAU,CAAC,EAAQ,IAAM,GAAG,IAAM,KAClC,SAAU,CAAC,EAAQ,IAAM,GAAG,KAAO,OAAO,GAC1C,SAAU,CAAC,EAAQ,IAAM,GAAG,KAAO,OAAO,GAE1C,GAAI,CAAC,EAAQ,IAAM,EAAQ,GAAG,IAAM,KAAW,GAC/C,KAAM,CAAC,EAAQ,IAAM,EAAQ,GAAG,IAAM,KAAW,GACjD,MAAO,CAAC,EAAQ,IAAM,EAAQ,GAAG,IAAM,KAAW,GAClD,KAAM,CAAC,EAAQ,IAAM,EAAQ,GAAG,IAAM,KAAW,GAEjD,GAAG,EAAG,EAAG,CACP,MAAO,GAAI,GAAG,IAAM,EAAI,KAAK,EAAI,KAAO,GAAG,IAAM,EAAI,MAGvD,KAAK,EAAI,EAAG,EAAI,EAAG,CACjB,GAAI,GAAM,GACV,UAAQ,EAAI,EAAK,GAAO,KAAK,CAAC,GAAM,EAAI,EAAK,GAAO,MAAM,GAAK,GAC/D,GAAQ,EAAI,EAAK,GAAO,GAAG,CAAC,GAAM,EAAI,EAAK,GAAO,KAAK,GAAK,GACrD,GAGT,QAAQ,EAAQ,GAAI,CAClB,GAAI,CAAE,QAAO,SAAQ,UAAS,QAAO,SAAQ,OAAM,SAAU,EAK7D,GAJA,EAAU,GAAM,YAAY,GAAW,OAAO,GAAW,GACzD,EAAQ,GAAM,YAAY,GAAS,OAAO,GAAS,GACnD,EAAQ,GAAM,YAAY,GAAS,OAAO,GAAS,GAE/C,EAAM,CACR,GAAI,GAAQ,GAAK,OAAO,GAAG,GAAQ,GAAK,OAAO,GAAG,EAAO,QACrD,EAAO,EAAM,OAAS,EAC1B,MAAI,GAAO,GACT,IAAS,GAAK,OAAO,KAAK,IAErB,EAGT,GAAI,GAAS,EAAO,CAClB,GAAI,GAAO,CAAC,GAAS,CAAC,CAAC,EAAW,CAAC,EAAQ,OAAS,CAAC,EAAM,OAAS,EACpE,MAAI,IAAO,IAAO,EAAM,QACpB,IAAU,IAAM,GAAW,CAAC,EAAO,SAAS,IAC9C,IAAO,EAAQ,QAEV,GAAK,OAAO,KAAK,MAKxB,GAAQ,GAAK,MAAQ,CACzB,OAAQ,GAAK,OACb,GAAI,GAAK,GACT,KAAM,GAAK,KACX,KAAM,GAAK,KACX,QAAS,GAAK,QACd,UAAW,GAAK,UAChB,MAAM,EAAG,CACP,GAAI,GAAM,GACV,OAAS,GAAI,EAAG,EAAI,EAAG,IACrB,GAAO,GAAK,MAAM,KAAQ,GAAI,EAAI,EAAI,GAAK,OAAO,GAAG,GAAK,IAE5D,MAAI,IAAG,IAAO,GAAK,KAAK,WACjB,IAIX,GAAK,MAAQ,CAAC,EAAQ,GAAI,EAAU,QAAQ,OAAO,UAAY,CAC7D,GAAI,CAAC,EAAS,MAAO,IAAM,KAAO,GAAO,GAAG,GAC5C,GAAI,GAAQ,GAAO,CAAC,GAAG,GAAO,QAAQ,IAAM,OACxC,EAAQ,EAAM,MAAM,SACpB,EAAO,EACX,OAAS,KAAQ,GACf,GAAQ,EAAI,KAAK,MAAM,KAAK,IAAI,EAAM,GAAQ,EAAG,GAAK,GAExD,MAAQ,IAAM,KAAO,GAAO,YAAY,OAAO,EAAO,GAAK,GAAM,KAAO,GAAO,GAAG,MClHpF,gCAEA,GAAM,IAAS,QAAQ,UACjB,GAAS,KACT,GAAW,KACX,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAO,KAOb,gBAAqB,GAAO,CAC1B,YAAY,EAAU,GAAI,CACxB,QACA,KAAK,KAAO,EAAQ,KACpB,KAAK,KAAO,EAAQ,KACpB,KAAK,QAAU,EACf,GAAM,MACN,GAAM,MACN,KAAK,MAAQ,GAAI,IAAM,MACvB,KAAK,QAAU,CAAC,EAAQ,QAAS,EAAQ,SAAS,KAAK,GAAK,GAAK,MACjE,KAAK,OAAS,EAAQ,QAAU,QAAQ,OACxC,KAAK,MAAQ,EAAQ,OAAS,QAAQ,MACtC,KAAK,MAAQ,EAAQ,OAAS,EAC9B,KAAK,KAAO,KAAK,QAAQ,MAAQ,QAAQ,IAAI,aAC7C,KAAK,OAAS,GAAO,KAAK,QAAQ,QAClC,KAAK,gBAAgB,GACrB,GAAW,WAGP,UAAS,EAAO,EAAQ,GAAI,CAChC,KAAK,WAAa,GAClB,GAAI,GAAM,GAAS,OAAO,EAAO,GAAS,EAAO,GAAQ,KAAK,QAAQ,SACtE,KAAK,MAAM,SAAW,EACtB,KAAK,KAAK,WAAY,EAAO,GAC7B,KAAK,KAAK,QAAS,KAAK,MAAM,SAC9B,GAAI,GAAK,KAAK,QAAQ,EAAI,SAAW,KAAK,EAAI,SAAW,KAAK,SAC9D,GAAI,MAAO,IAAO,WAChB,MAAO,MAAM,GAAG,KAAK,KAAM,EAAO,GAEpC,KAAK,QAGP,OAAQ,CACN,MAAO,MAAK,MAAM,MAClB,AAAI,KAAK,QAAQ,OAAS,GACxB,KAAK,KAAK,SAEV,KAAK,OAAO,MAAM,GAAK,KAAK,MAIhC,YAAa,CACX,KAAK,OAAO,MAAM,GAAK,OAAO,QAC9B,GAAM,OAAO,IAAM,KAAK,cAG1B,YAAa,CACX,KAAK,OAAO,MAAM,GAAK,OAAO,QAGhC,MAAM,EAAK,CACT,AAAI,CAAC,GACD,MAAK,QAAU,KAAK,MAAM,OAAS,IACrC,KAAK,OAAO,MAAM,GAEpB,KAAK,MAAM,QAAU,GAGvB,MAAM,EAAQ,EAAG,CACf,GAAI,GAAS,KAAK,MAAM,OAExB,AADA,KAAK,MAAM,OAAS,GACf,GAAC,GAAU,CAAC,GAAU,KAAK,QAAQ,OAAS,KACjD,KAAK,OAAO,MAAM,GAAK,OAAO,KAAK,GAAS,GAAK,MAAM,EAAQ,KAAK,QAGtE,SAAU,CACR,GAAI,KAAK,MAAM,QAAU,KAAK,QAAQ,OAAS,GAAO,OAEtD,GAAI,CAAE,SAAQ,QAAO,QAAS,KAAK,WAC/B,CAAE,SAAQ,UAAU,GAAI,QAAQ,GAAI,QAAQ,IAAO,KAEnD,EAAO,KAAK,MAAM,KAAO,EAAK,OAC9B,EAAQ,CAAE,QAAO,SAAQ,UAAS,QAAO,SAAQ,OAAM,SACvD,EAAQ,GAAK,OAAO,QAAQ,GAChC,AAAI,GACF,KAAK,OAAO,MAAM,GAItB,UAAW,CACT,GAAI,CAAE,SAAQ,QAAO,UAAW,KAAK,MACrC,EAAS,GAAO,QAAQ,GACxB,GAAI,GAAM,GAAO,QAAQ,GACrB,EAAM,EAAI,QAAQ,GAClB,EAAS,EAAI,MAAM,EAAG,GAEtB,EAAQ,AADD,EAAI,MAAM,GACJ,MAAM;AAAA,GACnB,EAAQ,EAAM,GACd,EAAO,EAAM,EAAM,OAAS,GAE5B,EAAM,AADO,GAAU,GAAQ,IAAM,EAAQ,KAC5B,OACjB,EAAQ,EAAM,EAAM,OAAS,EAAM,MAAM,EAAM,GAAK,GACxD,MAAO,CAAE,SAAQ,OAAQ,EAAO,QAAO,KAAM,EAAM,MAAM,GAAI,aAGzD,SAAS,CACb,KAAK,MAAM,UAAY,GACvB,KAAK,MAAM,WAAa,GAKpB,KAAK,QAAQ,UACf,KAAM,MAAK,QAAQ,SAAS,KAAK,KAAM,KAAK,KAAM,KAAK,MAAO,MAGhE,GAAI,GAAS,KAAK,MAAM,OAAS,KAAM,MAAK,SAAS,KAAK,MAAO,KAAK,OACtE,GAAI,IAAW,GAAM,CACnB,GAAI,GAAQ;AAAA,EAAO,KAAK,QAAQ,QAAU,IAE1C,AAAI,MAAO,IAAW,SACpB,GAAS,EAAO,OAEhB,GAAS,gBAGX,KAAK,MAAM,MAAQ;AAAA,EAAO,KAAK,OAAO,OAAO,GAC7C,KAAK,MAAM,UAAY,GACvB,KAAM,MAAK,SACX,KAAM,MAAK,QACX,KAAK,MAAM,WAAa,GACxB,KAAK,MAAM,MAAQ,OACnB,OAGF,KAAK,MAAM,WAAa,GACxB,KAAM,MAAK,SACX,KAAM,MAAK,QAEX,KAAK,MAAQ,KAAM,MAAK,OAAO,KAAK,OACpC,KAAK,KAAK,SAAU,KAAK,YAGrB,QAAO,EAAK,CAChB,KAAK,MAAM,UAAY,KAAK,MAAM,UAAY,GAE9C,KAAM,MAAK,SACX,KAAM,MAAK,QAEP,MAAO,MAAK,QAAQ,UAAa,YACnC,KAAM,MAAK,QAAQ,SAAS,KAAK,KAAM,KAAK,KAAM,KAAK,MAAO,MAGhE,KAAK,KAAK,SAAU,KAAM,MAAK,MAAM,SAGjC,QAAQ,CACZ,KAAK,MAAM,OAAS,GAEpB,GAAI,CACF,GAAI,GAAW,KAAK,WAChB,EAAQ,KAAK,KAAK,EAAS,OAAO,OAAS,KAAK,OACpD,AAAI,EAAS,MACX,KAAK,MAAM,GAAK,OAAO,KAAK,EAAS,KAAK,SAE5C,KAAK,MAAM;AAAA,EAAK,OAAO,UAChB,EAAP,EAEF,KAAK,KAAK,SAGZ,OAAQ,CACN,AAAI,CAAC,KAAK,MAAQ,KAAK,QAAQ,OAAS,IACtC,MAAK,KAAO,GAAS,OAAO,KAAM,KAAK,SAAS,KAAK,OACrD,KAAK,KAAK,QAAS,KAAK,YAItB,OAAO,CACX,YAAK,QAAU,KAAK,QAAQ,OAAS,GACjC,MAAO,MAAK,QAAQ,MAAS,YAC/B,MAAK,QAAU,KAAM,MAAK,QAAQ,KAAK,KAAK,KAAM,KAAK,KAAM,KAAK,QAE7D,KAAK,aAGR,aAAa,CACjB,GAAI,CAAE,SAAQ,UAAS,UAAW,KAgBlC,GAdA,KAAK,OAAS,IAAM,EAAO,KAAK,KAAM,KAAK,OAC3C,KAAK,OAAS,IAAM,EAAO,KAAK,KAAM,KAAK,OAEvC,MAAO,GAAQ,SAAY,YAC7B,MAAK,QAAU,KAAM,GAAQ,QAAQ,KAAK,KAAM,OAG9C,MAAO,GAAQ,OAAU,YAC3B,KAAM,GAAQ,MAAM,KAAK,KAAM,MAM7B,MAAO,GAAQ,UAAa,WAAY,CAC1C,GAAI,GAAW,EAAQ,SAAS,KAAK,MACjC,EAAS,KAAK,OAAO,KAAK,MAC9B,MAAO,MAAK,QAAQ,SACpB,KAAK,OAAS,SACZ,MAAM,GAAS,KAAK,KAAM,KAAK,MAAO,MAC/B,KAIX,KAAM,MAAK,QACX,KAAM,MAAK,SAGb,QAAS,CACP,KAAM,IAAI,OAAM,kDAGlB,KAAM,CACJ,MAAO,IAAI,SAAQ,MAAM,EAAS,IAAW,CAG3C,GAFA,KAAK,KAAK,SAAU,GACpB,KAAK,KAAK,SAAU,GAChB,KAAM,MAAK,OACb,YAAK,OAAS,IAAM,GACb,KAAK,SAEd,KAAM,MAAK,aACX,KAAK,KAAK,cAIR,SAAQ,EAAM,EAAQ,EAAG,CAC7B,GAAI,CAAE,UAAS,QAAO,UAAS,UAAW,KACtC,EAAQ,GAAU,EAAO,GAC7B,EAAM,MAAQ,EACd,GAAI,GAAQ,EAAQ,IAAS,EAAM,IAAS,EAAQ,GAChD,EAAM,GAAU,EAAO,IAAS,KAAO,EAAO,GAAQ,KAAM,GAChE,GAAI,IAAQ,GAAI,MAAO,GAEvB,GAAI,GAAM,KAAM,MAAK,QAAQ,EAAK,EAAO,EAAQ,GACjD,MAAI,CAAC,GAAO,GAAU,EAAO,GACpB,KAAK,QAAQ,EAAO,EAAO,EAAQ,GAErC,OAGH,SAAS,CACb,GAAI,GAAU,KAAM,MAAK,QAAQ,WAAa,KAAK,QAC/C,EAAQ,KAAK,QAAU,KAAK,OAAO,OACnC,EAAQ,KAAK,MAGjB,MAFA,GAAM,MAAQ,EACV,GAAM,SAAS,IAAU,GAAU,EAAQ,EAAM,SAAW,EAAQ,SACpE,AAAC,GAAM,SAAS,GAIb,EAFE,AADK,MAAK,OAAO,EAAM,SAAW,KAAK,OAAO,SACxC,QAKX,UAAU,CACd,GAAI,GAAU,KAAM,MAAK,QAAQ,WACjC,MAAK,IAAM,SAAS,GAGb,EAFE,KAAK,OAAO,OAAO,QAKxB,YAAY,CAChB,GAAI,GAAU,KAAM,MAAK,QAAQ,cAAgB,KAAK,QAClD,EAAQ,KAAK,QAAU,KAAK,OAAO,UACnC,EAAQ,KAAK,MACjB,EAAM,MAAQ,EACd,GAAI,GAAQ,EAAQ,EAAM,SAAW,EAAQ,SAAW,EAAM,UAC1D,EAAM,KAAM,MAAK,QAAQ,EAAO,GAEpC,MADI,IAAM,SAAS,IAAM,GAAM,EAAI,EAAM,SAAW,EAAI,SACpD,AAAC,GAAM,SAAS,GAGb,EAFE,KAAK,OAAO,MAAM,QAKvB,SAAQ,EAAQ,EAAG,CACvB,GAAI,GAAM,KAAM,MAAK,QAAQ,UAAW,EAAQ,GAEhD,GAAI,MAAO,IAAQ,UAAY,GAAM,SAAS,GAC5C,MAAO,GAGT,GAAI,EAAK,CACP,GAAI,GAAS,KAAK,OACd,EAAU,KAAK,QAAU,EACzB,EAAQ,EAAU,EAAO,QAAU,GAAO,EAC1C,EAAM,KAAM,MAAK,QAAQ,EAAI,EAAU,KAAO,QAAU,EAAK,KAAK,OAClE,EAAS,AAAC,GAAM,SAAS,GAAoB,EAAb,EAAM,GAC1C,MAAO,GAAU,EAAS,IAAI,OAAO,EAAI,cAIvC,WAAU,EAAQ,EAAG,CACzB,GAAI,GAAM,KAAM,MAAK,QAAQ,YAAa,EAAQ,GAClD,GAAI,MAAO,IAAQ,UAAY,GAAM,SAAS,GAC5C,MAAO,GAET,GAAI,EAAK,CACP,GAAI,GAAS,KAAK,OACd,EAAU,EAAO,UAAY,GAC7B,EAAQ,EAAU,EAAO,QAAU,EAAO,KAC1C,EAAM,EAAI,EAAU,KAAO,QAAU,EACzC,MAAO,AAAC,IAAM,SAAS,GAAoB,EAAb,EAAM,GAEtC,MAAO,GAGT,MAAO,CACL,MAAO,MAGT,QAAS,CACP,GAAI,KAAK,MAAM,SAAW,UACxB,MAAO,MAAK,QAAQ,UAIxB,QAAS,CACP,GAAI,KAAK,MAAM,SAAW,UACxB,MAAO,MAAK,QAAQ,eAIlB,OAAO,CACX,GAAI,KAAK,MAAM,SAAW,WAAa,CAAC,KAAK,QAAQ,KAAK,MAAM,OAAQ,CACtE,GAAI,GAAO,KAAM,MAAK,QAAQ,QAC9B,MAAK,IAAM,SAAS,GAGb,EAFE,KAAK,OAAO,MAAM,IAM/B,MAAM,EAAK,CACT,MAAO,AAAC,MAAK,MAAM,UAAwC,GAA3B,GAAO,KAAK,MAAM,MAGpD,OAAO,EAAO,CACZ,MAAO,GAGT,OAAO,EAAO,CACZ,MAAO,GAGT,SAAS,EAAO,CACd,MAAI,MAAK,QAAQ,WAAa,GACrB,KAAK,QAAQ,GAEf,GAGT,QAAQ,EAAO,CACb,MAAO,IAAS,MAAQ,IAAU,GAGpC,QAAQ,KAAU,EAAM,CACtB,MAAO,IAAM,QAAQ,KAAM,EAAO,GAAG,MAGnC,OAAO,CACT,MAAO,IAAO,aAGZ,QAAQ,CACV,MAAO,MAAK,OAAO,KAAK,MAAM,WAG5B,SAAS,CACX,MAAO,MAAK,QAAQ,MAAQ,GAAM,OAAO,KAAK,OAAQ,OAEpD,QAAQ,CACV,MAAO,MAAK,QAAQ,SAAW,GAAM,MAAM,KAAK,OAAQ,OAEtD,OAAO,CACT,MAAO,CAAE,MAAO,KAAK,MAAO,OAAQ,KAAK,WAGvC,QAAO,EAAO,CAChB,KAAK,MAAM,OAAS,KAElB,SAAS,CACX,MAAO,MAAK,MAAM,UAGhB,OAAM,EAAO,CACf,KAAK,MAAM,MAAQ,KAEjB,QAAQ,CACV,MAAO,MAAK,MAAM,SAGhB,OAAM,EAAO,CACf,KAAK,MAAM,MAAQ,KAEjB,QAAQ,CACV,GAAI,CAAE,QAAO,SAAU,KAAK,MACxB,EAAS,CAAC,EAAO,GAAO,KAAK,KAAK,QAAQ,KAAK,OACnD,MAAO,MAAK,QAAQ,GAAU,EAAS,KAAK,kBAGnC,SAAS,CAClB,MAAO,IAAW,GAAI,MAAK,GAAS,QAIxC,YAAoB,EAAQ,CAC1B,GAAI,GAAa,GACR,EAAO,KAAS,QAAU,MAAO,GAAO,IAAS,WAGtD,EAAS,CACX,UACA,UACA,UACA,SACA,QACA,SACA,UACA,QACA,SACA,SAGE,EAAW,CACb,OACA,SACA,QACA,SACA,OACA,YACA,UACA,SACA,YACA,QAGF,OAAS,KAAO,QAAO,KAAK,EAAO,SAAU,CAE3C,GADI,EAAO,SAAS,IAChB,WAAW,KAAK,GAAM,SAC1B,GAAI,GAAS,EAAO,QAAQ,GAC5B,AAAI,MAAO,IAAW,YAAc,EAAW,GACxC,EAAS,SAAS,IACrB,GAAO,GAAO,EAAO,KAAK,IAEnB,MAAO,GAAO,IAAS,YAChC,GAAO,GAAO,IAKpB,YAAgB,EAAO,CACrB,AAAI,MAAO,IAAU,UACnB,GAAQ,CAAC,EAAO,EAAO,EAAO,IAEhC,GAAI,GAAM,GAAG,OAAO,GAAS,IACzB,EAAM,GAAK,EAAI,GAAM,EAAI;AAAA,EAAO,IAChC,EAAM,GACV,OAAS,GAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,GAAI,GAAO,EAAI,GACf,AAAI,EAAI,GACN,EAAI,KAAK,EAAK,OAAO,EAAI,KAEzB,EAAI,KAAK,IAGb,MAAO,GAGT,GAAO,QAAU,KCpejB,gCAEA,GAAM,IAAQ,KACR,GAAQ,CACZ,QAAQ,EAAQ,EAAQ,CACtB,MAAO,IAET,SAAS,EAAQ,EAAQ,CACvB,KAAM,IAAI,OAAM,yCAElB,SAAS,EAAQ,EAAQ,CACvB,KAAM,IAAI,OAAM,yCAElB,WAAW,EAAQ,EAAQ,CACzB,KAAM,IAAI,OAAM,2CAElB,QAAQ,EAAQ,EAAQ,CACtB,SAAO,SAAW,GAClB,EAAO,UAAY,CAAC,EAAO,UAAW,KAAK,KAAK,GAAK,GAAK,MAC1D,EAAO,QAAU,EAAO,SAAW,GAC5B,GAET,MAAM,EAAQ,EAAQ,CACpB,KAAM,IAAI,OAAM,sCAElB,OAAO,EAAQ,EAAQ,CACrB,MAAO,IAAM,QAAQ,EAAQ,IAE/B,MAAM,EAAQ,EAAQ,CACpB,KAAM,IAAI,OAAM,sCAElB,UAAU,EAAQ,EAAQ,CACxB,SAAO,SAAW,GAClB,EAAO,UAAY,CAAC,EAAO,UAAW,KAAK,KAAK,GAAK,GAAK,MAC1D,EAAO,QAAU,EAAO,SAAW,EAAO,QAAQ,KAAK,OAAO,GACvD,GAET,OAAO,EAAQ,EAAQ,CACrB,MAAO,KAIX,GAAO,QAAU,CAAC,EAAM,EAAU,KAAO,CACvC,GAAI,GAAO,GAAM,MAAM,GAAI,GAAO,EAAQ,OAC1C,MAAO,GAAK,IAAS,EAAK,WC5C5B,gCAEA,GAAM,IAAS,KACT,GAAS,KACT,GAAQ,KACR,GAAQ,KACR,CAAE,WAAS,YAAU,cAAY,YAAU,SAAS,GAE1D,gBAA0B,GAAO,CAC/B,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,aACL,KAAK,YAAc,EAAQ,aAAe,IAC1C,KAAK,SAAW,EAAQ,UAAY,GACpC,KAAK,QAAU,EAAQ,SAAW,EAClC,KAAK,MAAQ,EAAQ,OAAS,EAC9B,KAAK,QAAU,EACf,KAAK,IAAM,QAGP,aAAa,CACjB,AAAI,MAAO,MAAK,QAAQ,SAAY,YAClC,MAAK,QAAU,KAAM,MAAK,QAAQ,QAAQ,KAAK,OAEjD,KAAM,MAAK,MAAM,IACjB,KAAM,OAAM,kBAGR,QAAQ,CACZ,GAAI,CAAE,UAAS,UAAS,YAAW,WAAY,KAAK,QAOpD,GANA,KAAK,MAAM,SAAW,GACtB,KAAK,MAAM,QAAU,GAErB,KAAK,QAAU,KAAM,SAAQ,IAAI,KAAM,MAAK,UAAU,IACtD,KAAK,QAAQ,QAAQ,GAAO,EAAG,QAAU,IAErC,MAAO,IAAY,YAAc,KAAK,WAAW,SAAW,EAC9D,KAAM,IAAI,OAAM,0CAGlB,AAAI,GAAS,IAAU,GAAU,OAAO,KAAK,IAC7C,AAAI,MAAM,QAAQ,GACZ,IAAa,MAAM,MAAK,MAAQ,KAAK,UAAU,IACnD,EAAQ,QAAQ,GAAK,KAAK,OAAO,KAAK,KAAK,KAC3C,KAAM,MAAK,UAEP,IAAa,MAAM,GAAU,GAC7B,MAAO,IAAY,UAAU,GAAU,KAAK,UAAU,IACtD,MAAO,IAAY,UAAY,EAAU,IAC3C,MAAK,MAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,KAAK,QAAQ,SACxD,KAAK,OAAO,KAAK,KAAK,KAAK,UAI3B,KAAK,WAAW,KAAK,UACvB,KAAM,MAAK,YAIT,WAAU,EAAO,EAAQ,CAC7B,KAAK,MAAM,eAAiB,GAC5B,GAAI,GAAU,GACV,EAAQ,EAER,EAAY,MAAM,EAAO,IAAW,CACtC,AAAI,MAAO,IAAU,YAAY,GAAQ,KAAM,GAAM,KAAK,OACtD,YAAiB,UAAS,GAAQ,KAAM,IAE5C,OAAS,GAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,GAAI,GAAS,EAAM,GAAK,KAAM,MAAK,SAAS,EAAM,GAAI,IAAS,GAC/D,EAAQ,KAAK,GAET,EAAO,SACT,KAAM,GAAU,EAAO,QAAS,GAGpC,MAAO,IAGT,MAAO,GAAU,EAAO,GACrB,KAAK,GACJ,MAAK,MAAM,eAAiB,GACrB,SAIP,UAAS,EAAK,EAAG,EAAQ,CAK7B,GAJI,MAAO,IAAQ,YAAY,GAAM,KAAM,GAAI,KAAK,KAAM,OACtD,YAAe,UAAS,GAAM,KAAM,IACpC,MAAO,IAAQ,UAAU,GAAM,CAAE,KAAM,IAEvC,EAAI,WAAY,MAAO,GAC3B,EAAI,WAAa,GAEjB,GAAI,GAAU,EAAI,MAclB,GAZA,EAAM,AADK,GAAM,EAAI,KAAM,KAAK,SACrB,KAAM,GAEb,MAAO,GAAI,UAAa,UAAY,CAAC,EAAI,MAC3C,GAAI,KAAO,EAAI,SACf,EAAI,SAAW,IAGb,EAAI,WAAa,IAAQ,EAAI,MAAQ,MACvC,GAAI,KAAO,cAIT,EAAI,OAAS,KAAM,MAAO,GAC9B,EAAI,KAAO,EAAI,MAAQ,EAAI,KAAO,EAAI,OAAS,EAAI,OAAS,EAAI,QAChE,EAAI,QAAU,EAAI,SAAW,EAAI,MAAQ,GACzC,EAAI,MAAQ,CAAC,EAAI,MAAO,EAAI,MAAM,KAAK,KAAK,QAAQ,KAAK,OAEzD,EAAI,MAAQ,GACZ,EAAI,MAAQ,EACZ,EAAI,OAAS,EAEb,GAAM,OAAO,EAAK,SAAU,GAC5B,EAAI,MAAQ,EAAS,EAAO,MAAQ,EAAI,EACpC,EAAI,QAAU,MAChB,GAAI,OAAS,EAAS,EAAO,OAAS,KAAQ,EAAI,QAAU,IAG9D,EAAI,KAAO,EAAS,EAAO,KAAO,IAAM,EAAI,KAAO,EAAI,KACvD,EAAI,QAAU,CAAC,CAAE,MAAK,UAAY,CAAC,KAAK,WAAW,IAAS,GAAI,SAAW,KAAK,WAAW,KAEtF,KAAK,WAAW,IACnB,MAAK,QAAU,KAAK,IAAI,KAAK,QAAS,GAAO,QAAQ,EAAI,SAAS,SAIpE,GAAI,GAAS,IAAK,GAGlB,SAAI,MAAQ,CAAC,EAAQ,EAAO,MAAO,EAAQ,EAAO,QAAU,CAC1D,OAAS,KAAO,QAAO,KAAK,GAAS,EAAI,GAAO,EAAO,GACvD,EAAI,MAAQ,EACZ,EAAI,MAAQ,GAGV,GAAW,MAAQ,MAAO,GAAI,SAAY,YAC5C,GAAI,MAAQ,KAAM,GAAI,QAAQ,KAAK,KAAM,KAAK,MAAO,EAAK,IAGrD,OAGH,UAAS,EAAQ,EAAG,CACxB,KAAK,KAAK,SAAU,EAAQ,EAAG,MAE3B,MAAO,GAAO,UAAa,YAC7B,KAAM,GAAO,SAAS,KAAK,KAAM,KAAK,MAAO,EAAQ,QAInD,WAAU,EAAK,EAAG,EAAQ,CAC9B,GAAI,GAAS,KAAM,MAAK,SAAS,EAAK,EAAG,GACzC,YAAK,QAAQ,KAAK,GAClB,KAAK,MAAQ,KAAK,QAAQ,OAAS,EACnC,KAAK,MAAQ,KAAK,QAAQ,OACnB,OAGH,SAAQ,EAAM,EAAG,EAAQ,CAC7B,GAAI,GAAM,CAAE,KAAM,mBAAoB,SAAU,GAAM,UAAW,MAAS,GACtE,EAAS,KAAM,MAAK,UAAU,EAAK,EAAG,GAE1C,SAAO,aAAe,IAAM,CAC1B,MAAO,GAAO,UACd,EAAO,KAAO,EAAO,QAAU,EAAO,MACtC,EAAO,MAAQ,GACf,EAAO,OAAS,GAGX,KAAK,SAGd,OAAO,EAAQ,CACb,MAAI,GAAO,QAAU,KACZ,EAAO,MAAQ,EAAI,KAAK,OAAO,EAAO,MAAQ,GAAK,GAErD,EAAO,OAGhB,SAAS,EAAG,EAAK,CACf,GAAI,KAAK,UAAY,KAAK,EAAI,MAAO,MAAO,MAAK,EAAI,QACrD,KAAK,QAGP,MAAM,EAAQ,EAAS,CAErB,MADI,OAAO,IAAY,WAAW,GAAU,EAAO,SAC/C,GAAW,CAAC,EAAO,SAAW,KAAK,SAAS,QAAU,KAAK,YACtD,KAAK,QAEd,MAAK,MAAQ,EAAO,MACpB,EAAO,QAAU,GAAW,CAAC,KAAK,WAAW,GACtC,GAGT,OAAQ,CACN,MAAK,MAAK,SACV,MAAK,OAAO,KAAK,SACV,KAAK,UAFe,KAAK,QAKlC,GAAI,CACF,GAAI,KAAK,YAAc,KAAK,QAAQ,OAAQ,MAAO,MAAK,QACxD,GAAI,GAAU,KAAK,WAAW,MAAM,GAAM,EAAG,SAC7C,YAAK,QAAQ,QAAQ,GAAO,EAAG,QAAU,CAAC,GACnC,KAAK,SAGd,GAAI,CAGF,MAAI,MAAK,QAAQ,OAAS,KAAK,SAAS,OAAS,KAAK,YAC7C,KAAK,QAEd,MAAK,QAAQ,QAAQ,GAAO,EAAG,QAAU,CAAC,EAAG,SACtC,KAAK,UAGd,EAAE,EAAS,KAAK,QAAS,CACvB,MAAK,MAAK,QAAQ,KAAK,GAAM,CAAC,CAAC,EAAG,QAClC,MAAK,OAAQ,EAAO,QAAU,CAAC,EAAO,QAAW,EAAO,OAAS,GAC1D,KAAK,UAFsC,KAAK,IAKzD,OAAO,EAAQ,EAAS,CACtB,GAAI,CAAC,EAAO,SAAW,KAAK,SAAS,QAAU,KAAK,YAClD,MAAO,MAAK,QAGd,AAAI,MAAO,IAAY,WAAW,GAAU,CAAC,EAAO,SACpD,EAAO,QAAU,EAEb,EAAO,SACT,EAAO,QAAQ,QAAQ,GAAM,KAAK,OAAO,EAAI,IAG/C,GAAI,GAAS,EAAO,OACpB,KAAO,GAAQ,CACb,GAAI,GAAU,EAAO,QAAQ,OAAO,GAAM,KAAK,WAAW,IAC1D,EAAO,QAAU,EAAQ,MAAM,GAAM,EAAG,UAAY,IACpD,EAAS,EAAO,OAGlB,UAAM,KAAM,KAAK,SACjB,KAAK,KAAK,SAAU,EAAQ,MACrB,EAGT,OAAO,EAAQ,CACb,MAAI,MAAK,SAAS,QAAU,KAAK,YAAoB,KAAK,QAC1D,GAAO,QAAU,CAAC,KAAK,WAAW,GAClC,EAAO,SAAW,EAAO,QAAQ,QAAQ,KAAK,OAAO,KAAK,OACnD,GAGT,QAAQ,EAAQ,CACd,SAAO,QAAU,GACjB,EAAO,SAAW,EAAO,QAAQ,QAAQ,KAAK,QAAQ,KAAK,OACpD,EAGT,OAAO,EAAG,CACR,KAAK,KAAO,EAEZ,GAAI,GAAS,GAAO,CAClB,GAAI,GAAI,OAAO,GACf,GAAI,EAAI,KAAK,QAAQ,OAAS,EAAG,MAAO,MAAK,QAE7C,GAAI,GAAU,KAAK,QACf,EAAS,KAAK,QAAQ,KAAK,GAAM,IAAM,EAAG,OAE9C,GAAI,CAAC,EAAO,SAAW,KAAK,SAAS,QAAU,KAAK,YAClD,MAAO,MAAK,QAGd,GAAI,KAAK,QAAQ,QAAQ,KAAY,GAAI,CACvC,GAAI,GAAU,GAAQ,KAAK,SACvB,EAAY,EAAQ,QAAQ,GAEhC,GAAI,EAAQ,MAAQ,EAAW,CAC7B,GAAI,GAAQ,EAAQ,MAAM,EAAW,EAAY,KAAK,OAClD,EAAM,EAAQ,OAAO,GAAM,CAAC,EAAM,SAAS,IAC/C,KAAK,QAAU,EAAM,OAAO,OACvB,CACL,GAAI,GAAM,EAAY,KAAK,MAAQ,EACnC,KAAK,QAAU,EAAQ,MAAM,GAAK,OAAO,EAAQ,MAAM,EAAG,KAI9D,YAAK,MAAQ,KAAK,QAAQ,QAAQ,GAClC,KAAK,OAAO,KAAK,SACV,KAAK,UAGd,oBAAa,KAAK,eAEX,GAAI,SAAQ,GAAW,CAC5B,GAAI,GAAM,KAAK,QAAQ,OACnB,EAAM,KAAK,IAEX,EAAS,CAAC,EAAM,GAAO,IAAQ,CACjC,aAAa,KAAK,eACd,GAAK,GAAM,EAAO,IACtB,KAAK,IAAM,GACX,EAAQ,IAGV,GAAI,IAAQ,KAAQ,EAAI,SAAW,GAAK,OAAO,EAAM,KAAO,EAC1D,MAAO,GAAO,IAGhB,GAAI,OAAO,GAAO,EAChB,MAAO,GAAO,GAAO,KAAK,SAG5B,KAAK,cAAgB,WAAW,IAAM,EAAO,IAAO,KAAK,SAI7D,MAAO,CACL,YAAK,QAAU,GAAQ,KAAK,SAC5B,KAAK,MAAQ,EACN,KAAK,SAGd,KAAM,CACJ,GAAI,GAAM,KAAK,QAAQ,OAAS,KAAK,MACjC,EAAU,GAAQ,KAAK,SAC3B,YAAK,QAAU,EAAQ,MAAM,GAAK,OAAO,EAAQ,MAAM,EAAG,IAC1D,KAAK,MAAQ,KAAK,MAAQ,EACnB,KAAK,SAGd,OAAQ,CACN,YAAK,MAAQ,EACN,KAAK,SAGd,MAAO,CACL,YAAK,MAAQ,KAAK,QAAQ,OAAS,EAC5B,KAAK,SAGd,MAAO,CACL,MAAI,MAAK,QAAQ,QAAU,EAAU,KAAK,QACnC,KAAK,KAGd,MAAO,CACL,MAAI,MAAK,QAAQ,QAAU,EAAU,KAAK,QACnC,KAAK,OAGd,OAAQ,CACN,MAAI,MAAK,QAAU,KAAK,MAAM,OAAe,KAAK,QAClD,MAAK,SACE,KAAK,UAGd,MAAO,CACL,MAAI,MAAK,QAAU,EAAU,KAAK,QAClC,MAAK,SACE,KAAK,UAGd,IAAK,CACH,GAAI,GAAM,KAAK,QAAQ,OACnB,EAAM,KAAK,QAAQ,OACnB,EAAM,KAAK,MACf,MAAI,MAAK,QAAQ,SAAW,IAAS,IAAQ,EACpC,KAAK,QAEV,EAAM,GAAO,IAAQ,EAChB,KAAK,WAEd,MAAK,MAAU,GAAM,EAAI,EAAO,GAAO,EACnC,KAAK,aACA,KAAK,KAEP,KAAK,UAGd,MAAO,CACL,GAAI,GAAM,KAAK,QAAQ,OACnB,EAAM,KAAK,QAAQ,OACnB,EAAM,KAAK,MACf,MAAI,MAAK,QAAQ,SAAW,IAAS,IAAQ,EAAM,EAC1C,KAAK,QAEV,EAAM,GAAO,IAAQ,EAAM,EACtB,KAAK,aAEd,MAAK,MAAS,GAAM,GAAK,EACrB,KAAK,aACA,KAAK,OAEP,KAAK,UAGd,SAAS,EAAI,EAAG,CAGd,MAFA,MAAK,QAAU,GAAS,KAAK,SAC7B,KAAK,MAAQ,EACT,KAAK,aACA,KAAK,KAEP,KAAK,SAGd,WAAW,EAAI,KAAK,QAAQ,OAAS,EAAG,CAGtC,MAFA,MAAK,QAAU,GAAW,KAAK,SAC/B,KAAK,MAAQ,EACT,KAAK,aACA,KAAK,OAEP,KAAK,cAGR,UAAU,CACd,GAAI,KAAK,QAAQ,OAAS,GAAM,CAC9B,KAAK,QAAU,GACf,KAAK,KAAK,KAAK,MAAQ,GACvB,KAAM,MAAK,KACX,KAAK,QAAU,GACf,OAEF,MAAO,MAAK,SAAS,KAAK,YAGtB,YAAY,CAChB,GAAI,KAAK,QAAQ,OAAS,GAAM,CAC9B,KAAK,QAAU,GACf,KAAK,KAAK,KAAK,MAAQ,GACvB,KAAM,MAAK,OACX,KAAK,QAAU,GACf,OAEF,MAAO,MAAK,WAAW,KAAK,OAG9B,QAAS,CACP,MAAI,MAAK,QAAQ,QAAU,EAAU,KAAK,QAC1C,MAAK,MAAQ,KAAK,IAAI,KAAK,MAAQ,EAAG,GACtC,KAAK,MAAQ,KAAK,IAAI,KAAK,MAAQ,EAAG,KAAK,OAC3C,KAAK,OAAS,KAAK,MACf,KAAK,aACA,KAAK,KAEP,KAAK,UAGd,UAAW,CACT,MAAI,MAAK,QAAQ,QAAU,KAAK,QAAQ,OAAe,KAAK,QAC5D,MAAK,MAAQ,KAAK,IAAI,EAAG,KAAK,OAC9B,KAAK,MAAQ,KAAK,IAAI,KAAK,MAAQ,EAAG,KAAK,QAAQ,QACnD,KAAK,OAAS,KAAK,MACf,KAAK,aACA,KAAK,OAEP,KAAK,UAGd,KAAK,EAAK,CACR,GAAK,KAAK,QAAS,KAAK,MAAO,GAGjC,WAAW,EAAS,KAAK,QAAS,CAEhC,MAAI,IAAU,AADH,CAAC,WAAY,YAAa,SAAU,aAAc,YAC1C,KAAK,GAAO,EAAO,KAAS,IACtC,GAEF,GAAU,EAAO,OAAS,UAGnC,UAAU,EAAS,KAAK,QAAS,CAC/B,GAAI,MAAM,QAAQ,GAAS,MAAO,GAAO,MAAM,GAAM,KAAK,UAAU,IACpE,GAAI,EAAO,QAAS,CAClB,GAAI,GAAU,EAAO,QAAQ,OAAO,GAAM,CAAC,KAAK,WAAW,IAC3D,MAAO,GAAO,SAAW,EAAQ,MAAM,GAAM,KAAK,UAAU,IAE9D,MAAO,GAAO,SAAW,CAAC,KAAK,WAAW,GAG5C,SAAS,EAAQ,EAAO,CACtB,MAAO,GAAO,OAAS,GAAS,EAAO,QAAU,OAAO,GAG1D,WAAW,EAAQ,CACjB,MAAI,OAAM,QAAQ,KAAK,SACd,KAAK,QAAQ,KAAK,GAAS,KAAK,SAAS,EAAQ,IAEnD,KAAK,SAAS,EAAQ,KAAK,SAGpC,IAAI,EAAQ,GAAI,EAAO,QAAS,CAC9B,MAAO,GAAG,OAAO,GAAS,IAAI,OAAO,CAAC,EAAK,IACzC,GAAI,GAAQ,KAAK,KAAK,EAAM,GACrB,GACN,IAGL,OAAO,EAAO,EAAM,CAElB,GAAI,GAAK,MAAO,IAAU,WAAa,EADxB,CAAC,EAAK,IAAM,CAAC,EAAI,KAAM,GAAG,SAAS,GAG9C,EAAS,AADC,MAAK,QAAQ,SAAW,KAAK,MAAM,SAAW,KAAK,SAC5C,OAAO,GAC5B,MAAI,GACK,EAAO,IAAI,GAAM,EAAG,IAEtB,EAGT,KAAK,EAAO,EAAM,CAChB,GAAI,GAAS,GAAQ,MAAO,GAAO,EAAM,GAAQ,EAEjD,GAAI,GAAK,MAAO,IAAU,WAAa,EADxB,CAAC,EAAK,IAAM,CAAC,EAAI,KAAM,GAAG,SAAS,GAE9C,EAAS,KAAK,QAAQ,KAAK,GAC/B,GAAI,EACF,MAAO,GAAO,EAAO,GAAQ,EAIjC,UAAU,EAAO,CACf,MAAO,MAAK,QAAQ,QAAQ,KAAK,KAAK,SAGlC,SAAS,CACb,GAAI,GAAS,KAAK,QAClB,GAAI,CAAC,EAAQ,MAAO,MAAK,QAEzB,GAAI,EAAO,UACT,MAAK,GAAO,MACZ,GAAO,eACA,KAAK,UAFc,KAAK,QAKjC,GAAI,KAAK,QAAQ,KAAK,GAAM,EAAG,WAC7B,MAAO,MAAK,QAGd,GAAI,CAAE,UAAS,QAAS,KAAK,QACzB,EAAQ,KAAK,WAAa,GAC1B,EAAQ,KAAK,SACjB,MAAI,KAAU,OACL,KAAK,QAIV,OAAM,QAAQ,IAAU,IAAY,IAAS,IAAS,IACxD,GAAQ,GAAM,QAAQ,IAGxB,KAAK,MAAQ,EAAQ,EAAM,IAAI,GAAM,EAAG,MAAQ,EAAM,KAC/C,MAAM,aAGX,SAAQ,EAAU,GAAI,CACxB,KAAK,MAAM,SAAW,KAAK,MAAM,UAAY,GAC7C,KAAK,MAAM,QAAU,EAErB,OAAS,KAAU,GACjB,AAAK,KAAK,MAAM,SAAS,KAAK,GAAM,EAAG,OAAS,EAAO,OACrD,KAAK,MAAM,SAAS,KAAK,GAI7B,GAAI,CAAC,KAAK,UAAY,KAAK,QAAQ,QAAS,CAC1C,KAAK,SAAW,GAChB,GAAI,GAAO,KAAK,QAChB,GAAI,MAAO,IAAS,UAAY,MAAO,IAAS,SAAU,CACxD,GAAI,GAAS,KAAK,KAAK,GACvB,AAAI,GACF,MAAK,QAAU,EAAO,MACtB,KAAK,MAAM,EAAQ,UAKvB,UAAU,CACZ,MAAO,IAAM,KAAM,KAAK,MAAM,SAAW,OAGvC,SAAQ,EAAS,CACnB,KAAK,MAAM,QAAU,KAEnB,UAAU,CACZ,MAAQ,MAAK,MAAM,SAAW,KAAK,SAAS,MAAM,EAAG,KAAK,UAGxD,OAAM,EAAK,CACb,KAAK,MAAM,MAAQ,KAEjB,QAAQ,CACV,GAAI,CAAE,QAAO,UAAS,WAAY,KAC9B,EAAQ,EAAM,OAAS,KAAK,QAAU,EAAQ,OAAS,EAAQ,OACnE,MAAO,MAAK,IAAI,EAAO,KAAK,WAG1B,OAAM,EAAO,CACf,MAAM,MAAQ,KAEZ,QAAQ,CACV,MAAI,OAAO,OAAM,OAAU,UAAY,MAAM,QAAU,KAAK,QACnD,KAAK,MAEP,MAAM,SAGX,OAAM,EAAG,CACX,KAAK,MAAM,MAAQ,KAEjB,QAAQ,CACV,MAAO,MAAK,IAAI,EAAG,KAAK,MAAQ,KAAK,MAAM,MAAQ,MAGjD,UAAU,CACZ,MAAO,MAAK,OAAO,KAAK,UAAU,KAAK,UAGrC,UAAU,CACZ,GAAI,GAAS,KAAK,QAAQ,KAAK,OAC/B,MAAI,IAAU,KAAK,MAAM,WAAa,KAAK,WAAa,IACtD,GAAO,QAAU,IAEZ,KAGL,aAAa,CACf,MAAO,MAAK,QAAQ,OAAO,GAAU,CAAC,KAAK,WAAW,OAGpD,WAAW,CACb,MAAO,MAAK,SAAW,KAAK,QAAU,KAAK,UAI/C,YAAe,EAAQ,EAAS,CAC9B,GAAI,YAAmB,SAAS,MAAO,GACvC,GAAI,MAAO,IAAY,WAAY,CACjC,GAAI,GAAM,UAAU,GAAU,MAAO,GACrC,EAAU,EAAQ,KAAK,EAAQ,GAEjC,OAAS,KAAU,GAAS,CAC1B,GAAI,MAAM,QAAQ,EAAO,SAAU,CACjC,GAAI,GAAQ,EAAO,QAAQ,OAAO,GAAM,CAAC,EAAO,WAAW,IAC3D,EAAO,QAAU,EAAM,MAAM,GAAM,EAAG,UAAY,IAEpD,AAAI,EAAO,WAAW,KAAY,IAChC,MAAO,GAAO,QAGlB,MAAO,GAGT,GAAO,QAAU,KCjpBjB,gCAEA,GAAM,IAAc,KACd,GAAQ,KAEd,gBAA2B,GAAY,CACrC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,WAAa,KAAK,QAAQ,YAAc,8BAGzC,UAAS,EAAG,EAAK,CACrB,GAAI,KAAK,SACP,MAAO,MAAK,EAAI,MAAQ,KAAM,MAAK,EAAI,MAAM,EAAG,GAAO,KAAM,OAAM,SAAS,EAAG,GAEjF,KAAK,QAGP,WAAY,CACV,GAAI,KAAK,QAAQ,UAAW,MAAO,OAAM,YACzC,GAAI,GAAM,KAAK,OAAO,MAAM,KAAK,QAAQ,UACzC,MAAO,MAAK,MAAM,UAAY,MAAM,YAAc,EAGpD,QAAQ,EAAQ,EAAG,CACjB,MAAQ,CAAC,KAAK,UAAY,KAAK,QAAQ,QAAW,MAAM,QAAQ,EAAQ,GAAK,GAG/E,UAAU,EAAQ,EAAG,CACnB,MAAO,MAAK,SAAW,MAAM,UAAU,EAAQ,GAAK,GAGtD,cAAc,EAAQ,EAAG,CACvB,GAAI,GAAU,KAAK,QAAQ,EAAO,QAAS,KAAK,MAAO,EAAQ,GAC/D,MAAI,GAAO,OAAS,WAAa,CAAC,GAAM,SAAS,IAC/C,GAAU,KAAK,OAAO,OAAO,IAExB,KAAK,QAAQ,EAAS,KAAK,MAAO,EAAQ,GAGnD,iBAAkB,CAChB,MAAO,SAGH,cAAa,EAAQ,EAAG,CAC5B,KAAM,MAAK,SAAS,EAAQ,GAE5B,GAAI,GAAU,KAAK,QAAU,EACzB,EAAU,KAAM,MAAK,QAAQ,EAAQ,GACrC,EAAQ,KAAM,MAAK,UAAU,EAAQ,GAAM,GAAO,KAAO,IACzD,EAAO,KAAM,MAAK,QAAQ,EAAO,KAAM,KAAK,MAAO,EAAQ,GAE/D,AAAI,GAAQ,CAAC,GAAM,SAAS,IAC1B,GAAO,KAAK,OAAO,MAAM,IAG3B,GAAI,GAAM,KAAK,OAAO,GAClB,EAAM,KAAM,MAAK,cAAc,EAAQ,GACvC,EAAO,IAAM,CAAC,KAAK,OAAO,GAAI,EAAM,EAAU,EAAO,EAAK,KAAK,OAAO,GAAI,GAAM,OAAO,SAAS,KAAK,KAEzG,MAAI,GAAO,OAAS,UACX,IAGL,EAAO,SACJ,IAAM,SAAS,IAClB,GAAM,KAAK,OAAO,SAAS,IAEtB,KAGL,IACF,GAAM,KAAK,OAAO,GAAG,IAGhB,UAGH,gBAAgB,CACpB,GAAI,KAAK,MAAM,UAAY,UACzB,MAAO,MAAK,OAAO,QAAQ,mBAG7B,GAAI,KAAK,MAAM,UAAW,MAAO,GACjC,GAAI,GAAU,KAAK,QAAQ,IAAI,MAAM,EAAI,IAAM,KAAM,MAAK,aAAa,EAAI,IACvE,EAAU,KAAM,SAAQ,IAAI,GAChC,AAAK,EAAQ,QAAQ,EAAQ,KAAK,KAAK,OAAO,OAAO,wBACrD,GAAI,GAAS,KAAK,OAAO,GAAK,EAAQ,KAAK;AAAA,GACvC,EAEJ,MAAI,MAAK,QAAQ,eACf,GAAS,KAAM,MAAK,QAAQ,KAAK,QAAQ,cAAe,KAAK,QAGxD,CAAC,EAAQ,GAAQ,OAAO,SAAS,KAAK;AAAA,GAG/C,QAAS,CACP,MAAI,CAAC,KAAK,MAAM,WAAa,KAAK,MAAM,UAAkB,GACtD,MAAM,QAAQ,KAAK,UACd,KAAK,SAAS,IAAI,GAAU,KAAK,OAAO,QAAQ,EAAO,OAAO,KAAK,MAErE,KAAK,OAAO,QAAQ,KAAK,SAAS,WAGrC,SAAS,CACb,GAAI,CAAE,YAAW,QAAS,KAAK,MAE3B,EAAS,GACT,EAAS,KAAM,MAAK,SACpB,EAAS,KAAM,MAAK,SACpB,EAAY,KAAM,MAAK,YACvB,EAAU,KAAM,MAAK,UAEzB,AAAI,KAAK,QAAQ,aAAe,IAC9B,GAAS,CAAC,EAAQ,EAAS,EAAW,IAAI,KAAK,KAC/C,KAAK,MAAM,OAAS,GAGtB,GAAI,GAAS,KAAM,MAAK,SACpB,EAAQ,KAAM,MAAK,SAAa,KAAM,MAAK,OAC3C,EAAO,KAAM,MAAK,gBAClB,EAAS,KAAM,MAAK,SAExB,AAAI,GAAQ,IAAU,GAClB,GAAQ,CAAC,EAAO,SAAS,IAAO,IAAU,IAAM,GAEhD,GAAa,CAAC,GAAU,CAAC,EAAK,QAAU,KAAK,UAAY,KAAK,YAAc,MAC9E,IAAU,KAAK,OAAO,OAAO,KAAK,aAGpC,KAAK,MAAM,GACX,KAAK,MAAM,CAAC,EAAQ,EAAQ,EAAM,GAAQ,OAAO,SAAS,KAAK;AAAA,IAC/D,KAAK,MAAM,KAAK,OAAO,IACvB,KAAK,YAIT,GAAO,QAAU,KC1IjB,gCAEA,GAAM,IAAS,KAET,GAAY,CAAC,EAAO,IAAU,CAClC,GAAI,GAAM,EAAM,cAChB,MAAO,IAAO,CAEZ,GAAI,GAAI,AADA,EAAI,cACF,QAAQ,GACd,EAAU,EAAM,EAAI,MAAM,EAAG,EAAI,EAAI,SACzC,MAAO,IAAK,EAAI,EAAI,MAAM,EAAG,GAAK,EAAU,EAAI,MAAM,EAAI,EAAI,QAAU,IAI5E,gBAA2B,GAAO,CAChC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,aAGP,WAAW,EAAG,CACZ,KAAK,MAAM,QAAU,EAGvB,SAAS,EAAI,CACX,MAAO,MAAK,OAAO,GAGrB,MAAM,EAAI,CACR,MAAO,MAAK,QAAQ,SAAW,MAAM,MAAM,GAAM,KAAK,OAAO,GAG/D,OAAO,EAAI,CACT,GAAI,CAAE,SAAQ,SAAU,KAAK,MAC7B,YAAK,MAAQ,EAAM,MAAM,EAAG,GAAU,EAAK,EAAM,MAAM,GACvD,KAAK,WAAW,GACT,KAAK,WAGd,QAAS,CACP,GAAI,CAAE,SAAQ,SAAU,KAAK,MAC7B,MAAK,GACL,MAAK,MAAQ,EAAM,MAAM,EAAG,EAAS,GAAK,EAAM,MAAM,GACtD,KAAK,WAAW,IACT,KAAK,YAHO,KAAK,QAM1B,eAAgB,CACd,GAAI,CAAE,SAAQ,SAAU,KAAK,MAC7B,MAAI,GAAM,KAAY,OAAe,KAAK,QAC1C,MAAK,MAAQ,GAAG,IAAQ,MAAM,EAAG,GAAU,GAAG,IAAQ,MAAM,EAAS,GAC9D,KAAK,YAGd,OAAO,EAAI,CACT,MAAO,MAAK,OAAO,QAGf,WAAW,CACf,KAAK,WAAa,GAClB,KAAK,QAAU,KAAM,MAAK,QAAQ,KAAK,MAAO,KAAK,MAAM,UACzD,KAAK,MAAM,MAAQ,OACnB,KAAK,MAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,OAAS,EAAG,GAAI,KAAK,OACjE,KAAM,MAAK,SACX,KAAK,WAAa,GAGpB,QAAQ,EAAQ,KAAK,MAAO,EAAU,KAAK,MAAM,SAAU,CACzD,GAAI,MAAO,MAAK,QAAQ,SAAY,WAClC,MAAO,MAAK,QAAQ,QAAQ,KAAK,KAAM,EAAO,GAEhD,GAAI,GAAM,EAAM,cAChB,MAAO,GAAQ,OAAO,GAAM,EAAG,QAAQ,cAAc,SAAS,IAGhE,SAAU,CACR,MAAO,GAGT,QAAS,CACP,GAAI,CAAC,KAAK,QAAS,MAAO,MAAK,MAC/B,GAAI,KAAK,QAAQ,UAAY,KAAK,MAAM,UACtC,MAAO,MAAK,SAAS,IAAI,GAAM,KAAK,OAAO,QAAQ,EAAG,UAAU,KAAK,MAEvE,GAAI,KAAK,MAAM,UAAW,CACxB,GAAI,GAAQ,KAAK,MAAQ,KAAK,MAAQ,KAAK,QAAQ,MACnD,MAAO,MAAK,OAAO,QAAQ,GAE7B,MAAO,MAAK,WAGR,SAAS,CACb,GAAI,KAAK,MAAM,SAAW,UAAW,MAAO,OAAM,SAClD,GAAI,GAAQ,KAAK,QAAQ,UACrB,KAAK,QAAQ,UAAU,KAAK,MAC5B,KAAK,OAAO,YAEZ,EAAQ,GAAU,KAAK,MAAO,GAC9B,EAAU,KAAK,QACnB,KAAK,QAAU,EAAQ,IAAI,GAAO,KAAK,EAAI,QAAS,EAAM,EAAG,YAC7D,KAAM,OAAM,SACZ,KAAK,QAAU,EAGjB,QAAS,CACP,MAAI,MAAK,QAAQ,UACf,MAAK,MAAQ,KAAK,SAAS,IAAI,GAAM,EAAG,OAEnC,MAAM,WAIjB,GAAO,QAAU,KChHjB,gCAEA,GAAM,IAAQ,KAed,GAAO,QAAU,CAAC,EAAQ,EAAU,KAAO,CACzC,EAAO,aAEP,GAAI,CAAE,QAAQ,GAAI,UAAU,GAAI,MAAK,aAAa,GAAM,SAAU,EAC9D,EAAQ,GAAS,EAAO,OAAO,YAC/B,EAAU,GAAM,QAAQ,EAAO,OAAO,SACtC,EAAU,GAAO,EAAQ,EAAO,OAAO,MAAM,IAC7C,EAAS,EACT,EAAO,IACP,EAAU,EAAQ,GAOtB,GALI,EAAO,OAAS,EAAO,MAAM,MAAQ,IACvC,GAAU,GAAO,EACjB,EAAU,IAGR,GAAc,IAAQ,GAAK,IAAY,IAAM,IAAU,GACzD,MAAO,GAAQ,GAGjB,GAAI,GAAc,IAAQ,GAAM,KAAU,GAAW,IAAU,IAC7D,MAAO,GAAQ,EAAQ,IAAM,EAAM,EAAQ,MAAM,IAGnD,EAAU,GAAM,YAAY,GAAW,GAAG,IAAY,GACtD,EAAQ,GAAM,YAAY,GAAS,GAAG,IAAU,GAEhD,GAAI,GAAc,GAAW,EAAQ,WAAW,IAAU,IAAY,EAClE,EAAS,EAAc,EAAQ,EAAQ,EAAM,SAAW,EAW5D,GATI,IAAQ,EAAM,QAAU,IAAe,IACzC,GAAS,EAAM,MAAM,EAAG,GAAO,EAAQ,EAAM,IAAQ,EAAM,MAAM,EAAM,GACvE,EAAS,IAGP,IAAe,IACjB,GAAS,IAGP,EAAa,CACf,GAAI,GAAM,EAAO,OAAO,QAAQ,EAAS,GACzC,MAAO,GAAS,EAAS,EAAM,EAAQ,MAAM,EAAI,SAGnD,MAAO,GAAS,KC7DlB,gCAEA,GAAM,IAAS,KACT,GAAe,KACf,GAAc,KAEpB,gBAAyB,GAAa,CACpC,YAAY,EAAS,CACnB,MAAM,IAAK,EAAS,SAAU,KAC9B,KAAK,KAAO,OACZ,KAAK,QAAU,KAAK,QAAQ,QAC5B,KAAK,MAAQ,CAAC,KAAK,QAAQ,MAAO,SAAS,KAAK,GAAK,GAAK,MAC1D,KAAK,WAAa,GAClB,KAAK,OAAS,QAGV,OAAM,EAAO,CACjB,YAAM,OAAM,QACR,IAAU,IAAM,MAAK,OAAS,KAAK,OACvC,KAAK,MAAQ,KAAK,OAClB,KAAK,OAAS,GACd,KAAK,QAAQ,QAAQ,GAAU,EAAO,OAAS,EAAO,SAC/C,KAAK,SAGd,SAAS,EAAM,CACb,MAAO,CAAC,CAAC,GAAQ,KAAK,OAAO,GAG/B,OAAO,EAAM,CACX,GAAI,GAAS,KAAK,QAClB,GAAI,CAAC,EAAQ,MAAO,MAAK,QACzB,GAAI,CAAE,SAAQ,SAAU,EACxB,SAAO,MAAQ,EAAO,MAAQ,EAAM,MAAM,EAAG,GAAU,EAAO,EAAM,MAAM,GAC1E,EAAO,SACA,KAAK,SAGd,QAAS,CACP,GAAI,GAAS,KAAK,QAClB,GAAI,CAAC,GAAU,EAAO,QAAU,EAAG,MAAO,MAAK,QAC/C,GAAI,CAAE,SAAQ,SAAU,EACxB,SAAO,MAAQ,EAAO,MAAQ,EAAM,MAAM,EAAG,EAAS,GAAK,EAAM,MAAM,GACvE,EAAO,SACA,KAAK,SAGd,eAAgB,CACd,GAAI,GAAS,KAAK,QAClB,GAAI,CAAC,EAAQ,MAAO,MAAK,QACzB,GAAI,CAAE,SAAQ,SAAU,EACxB,GAAI,EAAM,KAAY,OAAQ,MAAO,MAAK,QAC1C,GAAI,GAAM,GAAG,IAAQ,MAAM,EAAG,GAAU,GAAG,IAAQ,MAAM,EAAS,GAClE,SAAO,MAAQ,EAAO,MAAQ,EACvB,KAAK,SAGd,OAAQ,CACN,GAAI,GAAS,KAAK,QAClB,MAAK,GACD,EAAO,QAAU,EAAO,MAAM,OAAe,KAAK,QACtD,GAAO,SACA,KAAK,UAHQ,KAAK,QAM3B,MAAO,CACL,GAAI,GAAS,KAAK,QAClB,MAAK,GACD,EAAO,QAAU,EAAU,KAAK,QACpC,GAAO,SACA,KAAK,UAHQ,KAAK,QAM3B,MAAM,EAAI,EAAK,CACb,MAAO,MAAK,SAAS,EAAI,GAG3B,OAAO,EAAI,EAAK,CACd,MAAO,MAAK,SAAS,EAAI,GAG3B,MAAO,CACL,GAAI,GAAK,KAAK,QACd,GAAI,CAAC,EAAI,MAAO,MAAK,QACrB,GAAI,CAAE,UAAS,SAAU,EACzB,MAAI,IAAW,EAAQ,WAAW,IAAU,IAAU,EACpD,GAAG,MAAQ,EAAG,MAAQ,EACtB,EAAG,OAAS,EAAG,MAAM,OACd,KAAK,UAEP,MAAM,OAGf,MAAO,CACL,GAAI,GAAK,KAAK,QACd,MAAK,GACD,EAAG,SAAW,EAAU,MAAM,OAClC,GAAG,MAAQ,EAAG,MAAQ,GACtB,EAAG,OAAS,EACL,KAAK,UAJI,KAAK,QAOvB,WAAY,CACV,MAAO,GAGT,OAAO,EAAO,CACZ,MAAO,AAAC,MAAK,MAAM,UAAkC,GAAtB,MAAM,OAAO,GAG9C,SAAU,CACR,MAAO,GAGT,UAAU,EAAQ,CAChB,MAAO,GAAO,MAAQ,SAAM,cAGxB,iBAAgB,EAAQ,EAAG,CAC/B,GAAI,GAAM,KAAM,MAAK,QAAQ,EAAO,UAAW,KAAK,MAAO,EAAQ,IAAM,IACzE,MAAO,GAAM,IAAM,KAAK,OAAO,SAAS,GAAO,QAG3C,cAAa,EAAQ,EAAG,CAC5B,KAAM,MAAK,SAAS,EAAQ,GAE5B,GAAI,CAAE,QAAO,UAAW,KACpB,CAAE,SAAQ,UAAU,GAAI,OAAM,OAAM,QAAQ,IAAO,EACnD,CAAE,QAAO,YAAW,UAAS,UAAW,EAExC,EAAO,EACP,EAAU,KAAK,QAAU,EACzB,EAAW,EAAO,UAAa,KAAM,IACrC,EAAM,KAAM,MAAK,gBAAgB,EAAQ,GACzC,EAAM,EAAO,QAEjB,AAAI,KAAK,QAAU,SAAS,GAAM,EAAI,SAAS,KAAK,QAAU,EAAG,MAC7D,KAAK,QAAU,QAAQ,GAAM,EAAI,OAAO,KAAK,QAAU,EAAG,MAG9D,GAAI,GAAQ,KAAK,OAAO,GAAS,GAAS,EACtC,EAAQ,EAAQ,UAAY,OAEhC,AAAK,KAAM,GAAS,KAAK,EAAQ,EAAO,KAAK,SAAY,IACvD,GAAQ,UAIV,GAAI,GAAY,AADJ,EAAO,GACG,KAAM,MAAK,UAAU,EAAQ,IAAO,GAAO,KAAO,IAEpE,EAAS,KAAK,OAAO,GACrB,EAAO,IAAM,CAAC,EAAQ,EAAW,EAAM,EAAK,EAAO,GAAM,OAAO,SAAS,KAAK,KAElF,GAAI,EAAM,UACR,SAAM,GAAO,QAAQ,GACrB,EAAQ,EAAU,GAClB,EAAO,GACA,IAGT,GAAI,EAAO,OACT,EAAQ,KAAM,GAAO,OAAO,KAAK,KAAM,EAAO,EAAQ,OACjD,CACL,GAAI,GAAQ,KAAK,OAAO,MAExB,EAAQ,GAAY,KADN,CAAE,QAAO,UAAS,IAAK,EAAQ,WAAY,EAAS,UAIpE,MAAK,MAAK,QAAQ,IAChB,GAAQ,KAAK,OAAO,MAAM,KAAK,QAAQ,WAGrC,EAAO,QACT,MAAK,OAAO,GAAQ,KAAM,GAAO,OAAO,KAAK,KAAM,EAAO,EAAQ,IAGhE,GACF,GAAM,EAAQ,IAGhB,AAAI,EAAO,MACT,GAAU,GAAQ,IAAM,IAAM,EAAO,EAAO,MAAM,QACzC,EAAO,MAChB,IAAU,GAAQ,IAAM,IAAM,EAAM,EAAO,KAAK,SAG3C,SAGH,SAAS,CACb,YAAK,MAAQ,KAAK,OACX,MAAM,KAAK,OAAO,KAAK,QAIlC,GAAO,QAAU,KCnMjB,gCAEA,GAAM,IAAa,KAEb,GAAsB,IAAM,CAChC,KAAM,IAAI,OAAM,yDAGZ,GAAU,CAAC,EAAe,KAAwB,CAEtD,eAAyB,GAAW,CAClC,YAAY,EAAS,CACnB,MAAM,QAGF,SAAS,CACb,KAAK,MAAQ,KAAM,GAAa,KAAK,KAAM,KAAK,OAAQ,KAAK,OAC7D,MAAM,KAAK,OAAO,KAAK,YAGlB,QAAO,EAAc,CAC1B,MAAO,IAAQ,IAInB,MAAO,IAGT,GAAO,QAAU,OC5BjB,gCAEA,GAAM,IAAa,KAEnB,YAA6B,EAAO,EAAO,CACzC,MAAI,GAAM,WAAa,KAAK,QAAQ,UAAY,EAAM,WAAa,KAAK,QAAQ,SAMlF,GAAM,IAAU,CAAC,EAAe,KAAwB,CACtD,GAAM,GAAU,CACd,CAAE,KAAM,WAAY,QAAS,YAC7B,CACE,KAAM,WACN,QAAS,WACT,OAAO,EAAO,CACZ,MAAI,MAAK,QAAQ,aACR,EAGF,AADK,MAAK,MAAM,UAAY,KAAK,OAAO,QAAU,KAAK,OAAO,OACxD,KAAK,QAAQ,SAAS,OAAO,EAAM,YAKtD,eAA8B,IAAW,OAAO,EAAc,CAC5D,YAAY,EAAS,CACnB,MAAM,IAAK,EAAS,kBAGf,QAAO,EAAc,CAC1B,MAAO,IAAQ,IAInB,MAAO,IAGT,GAAO,QAAU,OCxCjB,gCAEA,GAAM,IAAS,KACT,CAAE,eAAa,aAAa,KAElC,gBAA4B,GAAO,CACjC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,kBAGD,aAAa,CACjB,GAAI,GAAU,KAAM,MAAK,QAAQ,KAAK,QAAS,KAAK,OACpD,KAAK,MAAQ,KAAM,MAAK,KAAK,GAC7B,KAAM,OAAM,aAGd,SAAS,EAAI,CACX,MAAK,MAAK,QAAQ,GAClB,MAAK,MAAQ,EACN,KAAK,UAFkB,KAAK,QAKrC,OAAO,EAAO,CACZ,GAAI,CAAE,SAAQ,SAAU,KACxB,MAAO,AAAC,GAAM,UAAoC,EAAO,QAAQ,GAAvC,EAAO,QAAQ,GAG3C,KAAK,EAAO,CACV,MAAO,MAAK,OAAO,GAGrB,OAAO,EAAO,CACZ,MAAO,UAAU,KAAK,GAGxB,QAAQ,EAAO,CACb,MAAO,UAAU,KAAK,GAGxB,QAAQ,EAAO,CACb,MAAO,IAAY,IAAW,MAAK,OAAO,IAAU,KAAK,QAAQ,SAG7D,OAAO,CACX,GAAI,KAAK,MAAM,SAAW,UAAW,CACnC,GAAI,GAAO,KAAM,MAAK,QAAQ,QAC9B,MAAK,IAAS,GAGP,EAFE,KAAK,OAAO,MAAM,SAMzB,SAAS,CACb,GAAI,CAAE,QAAO,QAAS,KAAK,MAEvB,EAAS,KAAM,MAAK,SACpB,EAAM,KAAM,MAAK,YACjB,EAAM,KAAM,MAAK,UACjB,EAAO,KAAK,OAAO,MAAM,KAAK,SAE9B,EAAa,CAAC,EAAQ,EAAK,EAAM,GAAK,OAAO,SAAS,KAAK,KAC/D,KAAK,MAAM,OAAS,EAEpB,GAAI,GAAS,KAAM,MAAK,SACpB,EAAQ,KAAK,MAAQ,KAAK,KAAK,GAC/B,EAAS,KAAM,MAAK,OAAO,GAC3B,EAAQ,KAAM,MAAK,SAAa,KAAM,MAAK,OAC3C,EAAS,KAAM,MAAK,SAExB,AAAI,GAAQ,CAAC,EAAW,SAAS,IAAO,IAAU,IAAM,GACxD,GAAc,IAAM,EAEpB,KAAK,MAAM,GACX,KAAK,MAAM,CAAC,EAAQ,EAAY,GAAQ,OAAO,SAAS,KAAK;AAAA,IAC7D,KAAK,aAGH,OAAM,EAAO,CACf,MAAM,MAAQ,KAEZ,QAAQ,CACV,MAAO,MAAK,KAAK,MAAM,SAI3B,GAAO,QAAU,KCvFjB,gCAEA,GAAM,IAAgB,KAEtB,gBAA4B,GAAc,CACxC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,QAAU,KAAK,QAAQ,SAAY,MAAK,QAAU,QAAU,WAIrE,GAAO,QAAU,KCXjB,gCAEA,GAAM,IAAS,KACT,GAAO,KACP,GAAO,GAAK,UAElB,gBAAuB,GAAO,CAC5B,YAAY,EAAS,CACnB,MAAM,IAAK,EAAS,SAAU,KAC9B,KAAK,MAAQ,CAAC,KAAK,QAAQ,MAAO,QAAQ,KAAK,GAAK,GAAK,MACzD,KAAK,WAAa,GAClB,KAAK,OAAS,GAGhB,SAAS,EAAM,EAAK,CAClB,GAAI,GAAS,KAAK,QACd,EAAS,EAAO,QAAU,GAC9B,MAAI,CAAC,EAAO,UAAY,CAAC,EAAO,UAC1B,KAAS,KAAO,IAAS,KAAY,MAAM,KAE1C,GAAK,SAAS,KAAK,KAAM,EAAM,GAGxC,OAAO,EAAM,EAAK,CAChB,MAAO,IAAK,OAAO,KAAK,KAAM,EAAM,GAGtC,OAAO,EAAM,EAAK,CAChB,MAAO,IAAK,OAAO,KAAK,KAAM,EAAM,GAGtC,MAAM,EAAM,CACV,MAAO,MAAK,QAAQ,SAAW,KAAK,OAAO,GAAQ,MAAM,QAG3D,OAAO,EAAM,CACX,MAAO,MAAK,QAAQ,SAAW,KAAK,OAAO,GAAQ,MAAM,OAAO,GAGlE,MAAO,CACL,MAAO,MAAK,QAAQ,SAAW,GAAK,KAAK,KAAK,MAAQ,MAAM,OAG9D,MAAO,CACL,MAAO,MAAK,QAAQ,SAAW,GAAK,KAAK,KAAK,MAAQ,MAAM,YAGxD,WAAU,EAAQ,EAAG,CACzB,GAAI,GAAS,EAAO,WAAa,GAC7B,EAAQ,EAAO,SAAW,EAAS,MAAM,UAAU,EAAQ,GAC/D,MAAO,MAAM,MAAK,QAAQ,EAAO,KAAK,MAAO,EAAQ,IAAM,GAG7D,OAAO,EAAQ,CACb,MAAO,GAAO,OAAS,UAAY,GAAM,EAAO,SAAW,IAAM,UAG7D,cAAa,EAAQ,EAAG,CAE5B,MADA,GAAO,OAAS,GACZ,EAAO,SAAiB,GAAK,aAAa,KAAK,KAAM,EAAQ,GAC1D,MAAM,aAAa,EAAQ,GAGpC,OAAQ,CACN,MAAO,GAGT,QAAS,CACP,MAAO,MAAK,MAAM,WAGd,WAAW,CACf,GAAI,GAAS,GAEb,OAAS,KAAU,MAAK,QAAS,CAK/B,GAJI,MAAO,GAAO,UAAa,YAI3B,EAAO,OAAS,UAClB,SAGF,GAAI,GAAM,EAAO,OAAS,KAAK,MAAM,EAAO,OAAO,MAAQ,KAAK,MAUhE,GARA,AAAI,EAAO,SACT,EAAM,EAAO,QAAU,EAAO,KAAO,EAAO,SAAW,GAAK,EAAO,MACzD,KAAK,WAAW,IAC1B,GAAM,EAAO,UAAY,IAG3B,EAAS,KAAM,GAAO,SAAS,EAAK,KAAK,OAErC,IAAW,GACb,MAIJ,MAAI,KAAW,IACb,MAAK,MAAM,MAAQ,MAAO,IAAW,SAAW,EAAS,iBAGpD,EAGT,QAAS,CACP,GAAI,KAAK,QAAQ,YAAc,GAAM,MAAO,OAAM,SAClD,GAAI,KAAK,QAAQ,KAAK,GAAM,EAAG,WAC7B,MAAO,MAAK,QAGd,KAAK,MAAQ,GAEb,OAAS,KAAU,MAAK,QAAS,CAC/B,GAAI,GAAM,EAAO,OAAS,KAAK,MAAM,EAAO,OAAO,MAAQ,KAAK,MAEhE,GAAI,EAAO,OAAS,UAAW,CAC7B,KAAK,MAAM,EAAO,MAAQ,GAC1B,SAGF,AAAI,EAAO,SACT,EAAI,EAAO,MAAQ,EAAO,QAAU,EAAO,KACtC,EAAO,SAAW,GACnB,EAAO,MAED,KAAK,WAAW,IAC1B,GAAI,EAAO,MAAQ,EAAO,UAAY,IAI1C,MAAO,MAAK,KAAK,OAAO,KAAK,QAIjC,GAAO,QAAU,KCvIjB,gCAEA,GAAM,IAAS,KACT,GAAc,KACd,CAAE,gBAAgB,KAExB,gBAA2B,GAAO,CAChC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,QAAU,GAAY,KAAK,SAAW,OAAO,KAAK,SAAW,GAC9D,KAAK,SAAS,KAAK,aACvB,KAAK,MAAM,WAAa,EACxB,KAAK,MAAM,UAAY,QAGnB,UAAS,EAAO,EAAM,GAAI,CAC9B,GAAI,GAAO,KAAK,MAAM,aAEtB,MADA,MAAK,MAAM,aAAe,EACtB,KAAK,QAAQ,YAAc,IAAQ,EAAI,OAAS,UAC9C,EAAC,GAAQ,EAAK,OAAS,UAClB,KAAK,OAAO;AAAA,EAAM,GAGtB,MAAM,SAAS,EAAO,GAG/B,WAAW,EAAG,CACZ,KAAK,QAAU,EAGjB,OAAQ,CACN,YAAK,MAAQ,KAAK,MAAQ,GAC1B,KAAK,OAAS,EACP,KAAK,SAGd,SAAS,EAAI,EAAK,CAChB,GAAI,CAAC,GAAM,EAAI,MAAQ,EAAI,KAAM,MAAO,MAAK,QAC7C,KAAK,OAAO,GAGd,OAAO,EAAI,CACT,GAAI,CAAE,SAAQ,SAAU,KAAK,MAC7B,KAAK,MAAQ,GAAG,IAAQ,MAAM,EAAG,GAAU,EAAK,GAAG,IAAQ,MAAM,GACjE,KAAK,WAAW,OAAO,GAAI,QAC3B,KAAK,SAGP,OAAO,EAAK,CACV,KAAK,OAAO,GAGd,QAAS,CACP,GAAI,CAAE,SAAQ,SAAU,KAAK,MAC7B,GAAI,GAAU,EAAG,MAAO,MAAK,QAC7B,KAAK,MAAQ,GAAG,IAAQ,MAAM,EAAG,EAAS,GAAK,GAAG,IAAQ,MAAM,GAChE,KAAK,WAAW,IAChB,KAAK,SAGP,eAAgB,CACd,GAAI,CAAE,SAAQ,SAAU,KAAK,MAC7B,GAAI,EAAM,KAAY,OAAQ,MAAO,MAAK,QAC1C,KAAK,MAAQ,GAAG,IAAQ,MAAM,EAAG,GAAU,GAAG,IAAQ,MAAM,EAAS,GACrE,KAAK,SAGP,YAAa,CACX,GAAI,GAAM,KAAK,OACf,GAAI,KAAK,MAAM,QAAU,EAAK,MAAO,MAAK,QAC1C,KAAK,MAAM,UAAU,KAAK,KAAK,MAAM,MAAM,IAC3C,KAAK,MAAQ,KAAK,MAAM,MAAM,EAAG,GACjC,KAAK,SAGP,SAAU,CACR,GAAI,GAAM,KAAK,OACf,GAAI,IAAQ,EAAG,MAAO,MAAK,QAC3B,GAAI,GAAS,KAAK,MAAM,MAAM,EAAG,GAC7B,EAAQ,KAAK,MAAM,MAAM,GACzB,EAAQ,EAAO,MAAM,KACzB,KAAK,MAAM,UAAU,KAAK,EAAM,OAChC,KAAK,MAAQ,EAAM,KAAK,KACxB,KAAK,OAAS,KAAK,MAAM,OACzB,KAAK,OAAS,EACd,KAAK,SAGP,OAAQ,CACN,GAAI,CAAC,KAAK,MAAM,UAAU,OAAQ,MAAO,MAAK,QAC9C,KAAK,OAAO,KAAK,MAAM,UAAU,OACjC,KAAK,SAGP,cAAe,CACb,AAAI,KAAK,MAAM,WACb,MAAK,OAAS,KAAK,MAAM,WACzB,KAAK,MAAM,WAAa,GAExB,MAAK,MAAM,WAAa,KAAK,OAC7B,KAAK,OAAS,GAEhB,KAAK,SAGP,OAAQ,CACN,KAAK,OAAS,EACd,KAAK,SAGP,MAAO,CACL,KAAK,OAAS,KAAK,MAAM,OAAS,EAClC,KAAK,SAGP,MAAO,CACL,GAAI,GAAO,KAAK,SAAW,KAAO,OAAO,KAAK,SAAW,GACzD,GAAI,CAAC,GAAQ,CAAC,EAAK,WAAW,KAAK,OAAQ,MAAO,MAAK,QACvD,KAAK,MAAQ,KAAK,QAClB,KAAK,OAAS,KAAK,QAAQ,OAC3B,KAAK,SAGP,MAAO,CACL,GAAI,CAAC,KAAK,MAAO,MAAO,MAAK,QAC7B,KAAK,QAGP,UAAW,CACT,MAAO,MAAK,OAGd,SAAU,CACR,MAAO,MAAK,QAGd,OAAQ,CACN,MAAI,MAAK,QAAU,KAAK,MAAM,OAAe,KAAK,QAClD,MAAK,WAAW,GACT,KAAK,UAGd,MAAO,CACL,MAAI,MAAK,QAAU,EAAU,KAAK,QAClC,MAAK,WAAW,IACT,KAAK,UAGd,QAAQ,EAAO,CACb,MAAO,CAAC,CAAC,OAGL,QAAO,EAAQ,KAAK,MAAO,CAC/B,GAAI,GAAU,KAAM,MAAK,QAAQ,KAAK,QAAS,KAAK,OACpD,MAAK,MAAK,MAAM,UAGT,KAAK,OAAO,UAAU,GAAS,GAF7B,GAAY,KAAM,CAAE,QAAO,UAAS,IAAK,KAAK,cAKnD,SAAS,CACb,GAAI,GAAO,KAAK,MAAM,KAElB,EAAS,KAAM,MAAK,SACpB,EAAY,KAAM,MAAK,YACvB,EAAU,KAAM,MAAK,UAErB,EAAS,CAAC,EAAQ,EAAS,GAAW,OAAO,SAAS,KAAK,KAC/D,KAAK,MAAM,OAAS,EAEpB,GAAI,GAAS,KAAM,MAAK,SACpB,EAAS,KAAM,MAAK,SACpB,EAAQ,KAAM,MAAK,SAAa,KAAM,MAAK,OAC3C,EAAS,KAAM,MAAK,SAExB,AAAI,GAAQ,CAAC,EAAO,SAAS,IAAO,IAAU,IAAM,GACpD,GAAU,IAAM,EAEhB,KAAK,MAAM,GACX,KAAK,MAAM,CAAC,EAAQ,EAAQ,GAAQ,OAAO,SAAS,KAAK;AAAA,IACzD,KAAK,YAIT,GAAO,QAAU,KCxLjB,gCAEA,GAAM,IAAS,GAAO,EAAI,OAAO,CAAC,EAAG,IAAM,EAAI,YAAY,KAAO,GAC5D,GAAU,GAAO,GAAO,GAAK,OAAO,SAE1C,GAAO,QAAU,CAAC,EAAQ,EAAO,GAAI,EAAQ,KAAO,CAClD,GAAI,CAAE,OAAO,GAAI,UAAU,IAAO,EAC9B,EAAM,EAEV,OAAQ,OACD,WACA,OACH,SAAO,EAAK,MAAM,EAAG,EAAK,OAAS,GACnC,EAAO,EAAK,EAAK,OAAS,IAAM,GACzB,CACL,KAAM,GAAQ,CAAC,EAAO,GAAG,IACzB,QAAS,OAGR,WACA,OACH,SAAO,EAAK,MAAM,GAClB,EAAO,EAAK,IAAM,GACX,CACL,KAAM,GAAQ,CAAC,GAAG,EAAM,IACxB,QAAS,OAGR,OACH,MAAO,CACL,KAAM,GAAQ,CAAC,GAAG,EAAM,IACxB,QAAS,QAGR,SACH,SAAO,GAAQ,EAAK,OAAO,GAAK,IAAM,IACtC,EAAU,GAEN,EAAK,QACP,GAAU,EAAK,OAGV,CACL,KAAM,EACN,mBAIF,KAAM,IAAI,OAAM,oBAAoB,UChD1C,gCAEA,GAAM,IAAS,KACT,GAAY,KAElB,gBAAoB,GAAO,CACzB,YAAY,EAAS,CACnB,MAAM,GACN,GAAI,GAAU,KAAK,QAAQ,QAC3B,GAAI,GAAW,EAAQ,MAAO,CAC5B,GAAI,GAAU,EAAQ,QAAU,KAAK,QACrC,KAAK,SAAW,CAAC,CAAC,EAAQ,SAC1B,KAAK,MAAQ,EAAQ,MACrB,KAAK,KAAO,KAAK,MAAM,IAAI,WAAa,CAAE,KAAM,GAAI,QAAS,GAC7D,KAAK,QAAU,KAAK,KAAK,SAAW,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,OAAS,IAI/E,WAAW,EAAQ,CACjB,MAAK,MAAK,MACV,MAAK,KAAO,GAAU,EAAQ,KAAK,KAAM,KAAK,OAC1C,AAAC,KAAK,KAAK,QACf,MAAK,MAAQ,KAAK,KAAK,QACvB,KAAK,OAAS,KAAK,MAAM,OAClB,KAAK,UAHmB,KAAK,SAFZ,KAAK,QAQ/B,OAAQ,CACN,MAAO,MAAK,WAAW,QAGzB,SAAU,CACR,MAAO,MAAK,WAAW,QAGzB,MAAO,CACL,YAAK,OACE,MAAM,OAGf,MAAO,CACL,AAAI,CAAC,KAAK,OACV,MAAK,KAAO,GAAU,OAAQ,KAAK,KAAM,KAAK,OAC9C,KAAK,MAAM,IAAI,SAAU,KAAK,OAGhC,QAAS,CACP,MAAI,MAAK,OAAS,KAAK,WAAa,IAClC,KAAK,OAEA,MAAM,WAIjB,GAAO,QAAU,KCtDjB,gCAEA,GAAM,IAAe,KAErB,gBAA8B,GAAa,CACzC,QAAS,CACP,MAAO,KAIX,GAAO,QAAU,KCVjB,gCAEA,GAAM,IAAe,KAErB,gBAAyB,GAAa,CACpC,YAAY,EAAU,GAAI,CACxB,MAAM,GACN,KAAK,IAAM,KAAK,QAAQ,WAAa,MACrC,KAAK,QAAU,EAAQ,SAAW,GAGpC,MAAM,EAAQ,KAAK,MAAO,CACxB,MAAO,GAAQ,OAAO,GAAO,MAAM,KAAK,KAAO,GAGjD,QAAS,CACP,GAAI,GAAQ,KAAK,MAAM,UAAY,KAAK,OAAO,QAAU,GAAO,EAChE,MAAO,MAAK,KAAK,IAAI,GAAO,KAAK,WAG7B,QAAO,EAAO,CAClB,GAAI,GAAS,KAAK,MAAM,OAAS,KAAM,MAAK,SAAS,KAAK,KAAM,KAAK,OACrE,MAAI,KAAW,GACb,MAAK,MAAM,MAAQ,EACZ,MAAM,UAEf,MAAK,MAAQ,KAAK,KACX,MAAM,aAGX,OAAO,CACT,MAAO,MAAK,UAIhB,GAAO,QAAU,KCnCjB,gCAEA,GAAM,IAAS,KAEf,gBAA0B,GAAO,CAC/B,YAAY,EAAS,CACnB,MAAM,IAAK,EAAS,SAAU,OAIlC,GAAO,QAAU,KCVjB,gCAEA,GAAM,IAAe,KAErB,gBAA2B,GAAa,CACtC,YAAY,EAAU,GAAI,CACxB,MAAM,CAAE,MAAO,YAAa,IAC5B,KAAK,IAAM,KAAK,QAAQ,EAAQ,KAAO,KAAK,SAAS,EAAQ,KAAO,KACpE,KAAK,IAAM,KAAK,QAAQ,EAAQ,KAAO,KAAK,SAAS,EAAQ,KAAO,IACpE,KAAK,MAAQ,EAAQ,OAAS,KAAO,EAAQ,MAAQ,IACrD,KAAK,MAAQ,EAAQ,QAAU,GAC/B,KAAK,MAAQ,EAAQ,QAAU,IAAQ,EAAQ,QAAU,GACzD,KAAK,MAAQ,EAAQ,OAAS,GAC9B,KAAK,MAAQ,EAAQ,OAAS,EAC9B,KAAK,QAAU,EAAQ,SAAW,KAAO,EAAQ,QAAU,GAC3D,KAAK,MAAQ,OAAO,KAAK,SACzB,KAAK,OAAS,KAAK,MAAM,OACzB,KAAK,aAGP,OAAO,EAAI,CACT,MAAI,CAAC,QAAQ,KAAK,IAAQ,IAAO,KAAO,KAAK,MAAM,SAAS,KACnD,KAAK,MAAM,kBAEb,MAAM,OAAO,GAGtB,OAAO,EAAI,CACT,MAAO,OAAM,OAAO,GAGtB,MAAO,CACL,MAAI,MAAK,OAAS,KAAK,QAAU,KAAK,QAAgB,KAAK,QACtD,KAAK,QAAQ,KAAK,SACvB,MAAK,MAAQ,KAAK,QAClB,KAAK,OAAS,OAAO,KAAK,SAAS,OAC5B,KAAK,UAH4B,KAAK,QAM/C,GAAG,EAAQ,CACT,GAAI,GAAO,GAAU,KAAK,MACtB,EAAM,KAAK,SAAS,KAAK,OAC7B,MAAI,GAAM,KAAK,IAAM,EAAa,KAAK,QACvC,MAAK,MAAQ,GAAG,EAAM,IACf,KAAK,UAGd,KAAK,EAAQ,CACX,GAAI,GAAO,GAAU,KAAK,MACtB,EAAM,KAAK,SAAS,KAAK,OAC7B,MAAI,GAAM,KAAK,IAAM,EAAa,KAAK,QACvC,MAAK,MAAQ,GAAG,EAAM,IACf,KAAK,UAGd,WAAY,CACV,MAAO,MAAK,KAAK,KAAK,OAGxB,SAAU,CACR,MAAO,MAAK,GAAG,KAAK,OAGtB,OAAO,EAAQ,KAAK,MAAO,CACzB,MAAI,OAAO,MAAK,QAAQ,QAAW,WAC1B,KAAK,QAAQ,OAAO,KAAK,KAAM,GAEjC,KAAK,OAAO,KAAK,GAG1B,SAAS,EAAQ,GAAI,CACnB,MAAO,MAAK,MAAQ,CAAC,EAAQ,KAAK,MAAM,CAAC,GAG3C,QAAQ,EAAO,CACb,MAAO,kCAAkC,KAAK,GAGhD,QAAS,CACP,GAAI,GAAQ,CAAC,KAAK,MAAO,KAAK,SAAS,KAAK,GAAK,KAAK,QAAQ,IAC9D,YAAK,MAAQ,KAAK,SAAS,GAAS,GAC7B,MAAM,WAIjB,GAAO,QAAU,KCrFjB,sBAAO,QAAU,OCAjB,gCAEA,GAAM,IAAe,KAErB,gBAA6B,GAAa,CACxC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,aAGP,OAAO,EAAQ,KAAK,MAAO,CACzB,MAAK,MAAK,WAEH,AADK,MAAK,MAAM,UAAY,KAAK,OAAO,QAAU,KAAK,OAAO,OACxD,KAAK,QAAQ,SAAS,OAAO,EAAM,SAFnB,KAMjC,GAAO,QAAU,KCjBjB,gCAEA,GAAM,IAAS,KACT,GAAc,KACd,GAAQ,KAEd,gBAA0B,GAAY,CACpC,YAAY,EAAU,GAAI,CACxB,MAAM,GACN,KAAK,OAAS,GAAG,OAAO,EAAQ,cAAgB,IAChD,KAAK,MAAQ,GAAG,OAAO,EAAQ,OAAS,QACxC,KAAK,UAAY,EAAQ,WAAa,GACtC,KAAK,WAAa,EAAQ,YAAc,EACxC,KAAK,QAAU,EAAQ,SAAW;AAAA,KAClC,GAAI,GAAQ,EAAQ,aAAe,EACnC,AAAI,MAAO,MAAK,OAAU,UACxB,MAAK,SAAW,GAChB,KAAK,MAAQ,MAAM,KAAK,OAAO,KAAK,GAAG,IAAI,CAAC,EAAG,IAAO,EAAE,KAAM,EAAI,WAIhE,QAAQ,CACZ,YAAK,UAAY,GACjB,KAAM,OAAM,QACL,KAAK,SAGd,UAAW,CACT,GAAI,KAAK,YAAc,GAAM,OAC7B,KAAK,UAAY,GACjB,GAAI,GAAU,EAEd,OAAS,KAAM,MAAK,QAAS,CAC3B,EAAU,KAAK,IAAI,EAAS,EAAG,QAAQ,QACvC,EAAG,WAAa,EAAG,SAAW,EAC9B,EAAG,MAAQ,GAEX,OAAS,GAAI,EAAG,EAAI,KAAK,MAAM,OAAQ,IACrC,EAAG,MAAM,KAAK,CAAE,MAAO,IAG3B,KAAK,OAAO,GAAK,KAAK,IAAI,KAAK,OAAO,GAAI,EAAU,QAGhD,UAAS,EAAG,EAAK,CACrB,GAAI,KAAK,SACP,MAAO,MAAK,EAAI,MAAQ,KAAM,MAAK,EAAI,MAAM,EAAG,GAAO,KAAM,OAAM,SAAS,EAAG,GAEjF,KAAK,QAGP,QAAQ,EAAK,EAAM,EAAG,CACpB,MAAO,MAAK,OAAO,OAAO,GAG5B,WAAY,CACV,MAAO,MAAK,OAAO,MAAM,KAAK,QAAQ,UAGxC,OAAQ,CACN,GAAI,GAAS,KAAK,QAClB,MAAI,GAAO,YAAc,KAAK,MAAM,OAAS,EAAU,KAAK,QAC5D,GAAO,aACA,KAAK,UAGd,MAAO,CACL,GAAI,GAAS,KAAK,QAClB,MAAI,GAAO,YAAc,EAAU,KAAK,QACxC,GAAO,aACA,KAAK,UAGd,QAAS,CACP,MAAO,GAGT,QAAS,CACP,MAAI,MAAK,MAAM,UAEN,AADM,KAAK,QAAQ,IAAI,GAAM,KAAK,OAAO,KAAK,EAAG,QAC1C,KAAK,MAEd,GAGT,SAAU,CACR,MAAO,GAQT,gBAAiB,CAEf,GADI,KAAK,WAAa,IAClB,KAAK,MAAM,UAAW,MAAO,GACjC,GAAI,GAAQ,KAAK,MAAM,IAAI,GAAQ,MAAM,EAAK,UAAU,EAAK,WAE7D,MAAO,AADG,CAAC,GAAI,GAAG,GAAO,IAAI,GAAQ,KAAK,OAAO,MAAM,IAC5C,KAAK;AAAA,GAQlB,mBAAmB,EAAK,CACtB,GAAI,GAAO,KAAK,MAAM,IAAI,GAAO,EAAI,MACrC,AAAI,MAAO,MAAK,QAAQ,oBAAuB,YAC7C,GAAO,KAAK,QAAQ,mBAAmB,KAAK,KAAM,IAEpD,GAAI,GAAO,KAAK,YAAc,EAAK,KAAK,IAAI,OACxC,EAAU,KAAK,MAAM,EAAQ,GAAK,OAAS,IAE3C,EAAW,AADH,EAAK,IAAI,GAAO,KAAK,OAAO,OAAO,IAC1B,KAAK,IAAI,OAAO,IACjC,EAAU,IAAI,OAAO,KAAK,OAAO,IACrC,MAAO,MAAK,OAAO,GAAK,EAAU,KAAK,OAAO,GAAK,EAOrD,eAAe,EAAQ,EAAM,EAAG,CAC9B,GAAI,MAAO,MAAK,QAAQ,gBAAmB,WACzC,MAAO,MAAK,QAAQ,eAAe,KAAK,KAAM,EAAQ,EAAM,GAE9D,GAAI,GAAU,EAAO,aAAe,EAAK,MACzC,MAAI,GAAK,SAAiB,KAAK,OAAO,KAAK,KAAK,QAAQ,MAAM,UAC1D,EAAgB,KAAK,OAAO,QAAQ,KAAK,QAAQ,MAAM,IACpD,KAAK,QAAQ,MAAM,IAO5B,YAAY,EAAQ,EAAG,CACrB,GAAI,GAAQ,EAAO,MAAM,IAAI,GAAQ,KAAK,eAAe,EAAQ,EAAM,IACnE,EAAU,KAAK,OAAS,QAAU,GAAK,IAC3C,MAAO,GAAM,KAAK,EAAU,KAAK,QAAQ,KAAK,OAAO,KAAK,kBAQtD,cAAa,EAAQ,EAAG,CAC5B,KAAM,MAAK,SAAS,EAAQ,GAE5B,GAAI,GAAU,KAAK,QAAU,EACzB,EAAU,KAAM,MAAK,QAAQ,EAAQ,GACrC,EAAO,KAAM,GAAO,KAExB,AAAI,GAAQ,CAAC,GAAM,SAAS,IAC1B,GAAO,KAAK,OAAO,MAAM,IAG3B,GAAI,GAAM,GAAO,KAAK,OAAO,GAAK,EAAI,QAAQ,OAAQ,IAAI,OAAO,KAAK,OAAO,GAAI,KAC7E,EAAU,KAAK,QACf,EAAM,KAAK,OAAO,GAClB,EAAU,KAAM,MAAK,QAAQ,EAAO,QAAS,KAAK,MAAO,EAAQ,GACjE,EAAQ,KAAM,MAAK,YAAY,EAAQ,GACvC,EAAS,KAAK,OAAO,GAAK,KAAK,OAAO,GAC1C,KAAK,YAAc,GAAO,QAAQ,GAAO,OACzC,KAAK,OAAO,GAAK,KAAK,IAAI,KAAK,OAAO,GAAI,KAAK,MAAQ,KAAK,YAAc,EAAO,QAEjF,GAAI,GAAQ,AADF,GAAM,SAAS,EAAS,CAAE,MAAO,KAAK,OAAO,GAAI,YAC3C,MAAM;AAAA,GAAM,IAAI,GAAQ,EAAI,GAAQ,KAAK,OAAO,IAEhE,MAAI,IACF,GAAQ,KAAK,OAAO,KAAK,GACzB,EAAQ,EAAM,IAAI,GAAQ,KAAK,OAAO,KAAK,KAG7C,EAAM,IAAM,EAER,KAAK,WAAW,EAAM,KAAK,IACxB,CAAC,EAAM,EAAS,EAAM,KAAK;AAAA,IAAO,OAAO,cAG5C,gBAAgB,CACpB,GAAI,KAAK,MAAM,UAAW,MAAO,GACjC,KAAK,WACL,GAAI,GAAU,KAAK,QAAQ,IAAI,MAAM,EAAI,IAAM,KAAM,MAAK,aAAa,EAAI,IACvE,EAAU,KAAM,SAAQ,IAAI,GAC5B,EAAU,KAAM,MAAK,qBACzB,MAAO,MAAK,OAAO,GAAK,CAAC,EAAS,GAAG,EAAQ,IAAI,GAAK,EAAE,KAAK,OAAO,KAAK;AAAA,QAGrE,SAAS,CACb,GAAI,CAAE,YAAW,QAAS,KAAK,MAE3B,EAAS,KAAM,MAAK,SACpB,EAAY,KAAM,MAAK,YACvB,EAAU,KAAM,MAAK,UAErB,EAAS,GACb,AAAI,KAAK,QAAQ,aAAe,IAC9B,GAAS,CAAC,EAAQ,EAAS,EAAW,IAAI,KAAK,KAC/C,KAAK,MAAM,OAAS,GAGtB,GAAI,GAAS,KAAM,MAAK,SACpB,EAAS,KAAM,MAAK,SACpB,EAAM,KAAM,MAAK,iBACjB,EAAO,KAAM,MAAK,SAAW,KAAM,MAAK,OACxC,EAAO,KAAM,MAAK,gBAClB,EAAS,KAAM,MAAK,SACpB,EAAM,KAAK,WAEf,AAAI,GAAQ,IAAU,GAClB,GAAQ,CAAC,EAAO,SAAS,IAAO,IAAU,IAAM,GAEhD,GAAa,CAAC,GAAU,CAAC,EAAK,QAAU,KAAK,UAAY,GAAO,MAClE,IAAU,KAAK,OAAO,OAAO,IAG/B,KAAK,MAAM,GACX,KAAK,MAAM,CAAC,EAAQ,EAAQ,EAAK,EAAM,GAAQ,OAAO,SAAS,KAAK;AAAA,IAC/D,KAAK,MAAM,WACd,KAAK,MAAM,KAAK,OAAO,IAEzB,KAAK,UAGP,QAAS,CACP,KAAK,MAAQ,GACb,OAAS,KAAU,MAAK,QACtB,KAAK,MAAM,EAAO,MAAQ,EAAO,WAEnC,MAAO,MAAK,KAAK,OAAO,KAAK,QAIjC,GAAO,QAAU,KC5OjB,gCAEA,GAAM,IAAS,KACT,GAAQ,CAAC,EAAM,KACZ,MAAO,IAAQ,SAAW,EAAI,QAAQ,eAAgB,IAAM,GAQrE,QAAW,CACT,YAAY,EAAO,CACjB,KAAK,KAAO,EAAM,IAClB,KAAK,MAAQ,EAAM,OAAS,GAC5B,KAAK,MAAQ,GAAM,EAAM,SAAW,KAAK,MAAM,SAAW,IAC1D,KAAK,QAAU,EAAM,SAAW,KAAK,KACrC,KAAK,OAAS,EACd,KAAK,MAAQ,GACb,KAAK,MAAQ,KAIX,GAAW,MAAM,EAAU,GAAI,EAAW,GAAI,EAAK,GAAS,IAAU,CAC1E,GAAI,GAAS,GAAI,KACb,EAAS,EAAQ,QAAU,GAC3B,EAAQ,EAAQ,SAChB,EAAW,GACX,EAAQ,GACR,EAAO,GACP,EAAO,EAEX,AAAI,MAAO,IAAU,YACnB,GAAQ,KAAM,MAGhB,GAAI,GAAI,GACJ,EAAO,IAAM,EAAM,EAAE,GACrB,EAAO,IAAM,EAAM,EAAI,GACvB,EAAO,GAAS,CAClB,EAAM,KAAO,EACb,EAAS,KAAK,IAKhB,IAFA,EAAK,CAAE,KAAM,MAAO,MAAO,KAEpB,EAAI,EAAM,OAAS,GAAG,CAC3B,GAAI,GAAQ,IAEZ,GAAI,aAAa,KAAK,GAAQ,CAC5B,EAAK,CAAE,KAAM,OAAQ,UACrB,SAGF,GAAI,IAAU;AAAA,EAAM,CAClB,EAAK,CAAE,KAAM,UAAW,UACxB,IACA,SAGF,GAAI,IAAU,KAAM,CAClB,GAAS,IACT,EAAK,CAAE,KAAM,OAAQ,UACrB,SAGF,GAAK,KAAU,KAAO,IAAU,KAAO,IAAU,MAAQ,MAAW,IAAK,CAEvE,GADQ,IAGR,GAAI,GAAQ,CAAE,KAAM,WAAY,KAAM,EAAO,MAAO,GAAI,MAAO,GAAI,SAC/D,EAEJ,KAAQ,EAAK,KAAS,CACpB,GAAI,IAAO,IAAK,CACd,AAAI,MAAW,KAAK,IAAM,KAC1B,EAAM,OAAS,EACf,EAAM,MAAQ,EACd,MAGF,AAAI,IAAO,IACT,GAAM,QAAU,GAChB,EAAM,IAAM,EAAM,OACT,EAAM,UAAY,QAC3B,GAAM,SAAW,GAGnB,EAAM,OAAS,EACf,EAAM,OAAS,EAGjB,EAAM,SAAW,EAAM,KAAQ,GAAM,SAAW,EAAM,OAAS,EAAM,MACrE,EAAM,IAAM,EAAM,KAAO,EAAM,MAE3B,EAAS,eAAe,EAAM,MAChC,GAAM,QAAU,EAAS,EAAM,MAGjC,EAAQ,EAAG,GACX,EAAK,GAEL,EAAK,KAAK,EAAM,KAChB,EAAO,IAAI,EAAM,KAEjB,GAAI,GAAO,EAAM,KAAK,GAAQ,EAAK,OAAS,EAAM,KAClD,EAAM,MAAQ,EAAO,KAAK,GAAM,EAAG,OAAS,EAAM,KAE7C,GACH,GAAO,GAAI,IAAK,GAChB,EAAM,KAAK,IAGb,EAAK,MAAM,KAAK,EAAM,KAAO,GAC7B,SAGF,GAAI,GAAO,EAAS,EAAS,OAAS,GACtC,AAAI,EAAK,OAAS,QAAU,EAAK,OAAS,EACxC,EAAK,OAAS,EAEd,EAAK,CAAE,KAAM,OAAQ,UAIzB,SAAK,CAAE,KAAM,MAAO,MAAO,KACpB,CAAE,QAAO,WAAU,SAAQ,OAAM,UAG1C,GAAO,QAAU,KAAM,IAAU,CAC/B,GAAI,GAAU,EAAO,QACjB,EAAW,GAAI,KAAI,EAAQ,WAAa,GAAO,GAAM,EAAQ,UAAY,IACzE,EAAW,IAAK,EAAQ,UAAW,EAAQ,SAC3C,CAAE,WAAU,QAAO,QAAS,KAAM,IAAS,EAAS,GAEpD,EAAS,GAAS,SAAU,EAAQ,GACpC,EAAS,GAAS,SAAU,EAAQ,GACpC,EAAU,GAAS,WAAY,EAAQ,EAAS,IAChD,EAAQ,EAAO,QAAQ,KAAK,GAEhC,MAAO,OAAM,EAAQ,GAAI,EAAY,KAAU,CAC7C,GAAI,GAAQ,EAEZ,EAAM,SAAW,EACjB,EAAM,MAAQ,EACd,EAAM,KAAO,EACb,EAAM,OAAS,GAEf,GAAI,GAAW,MAAM,EAAO,EAAO,EAAM,IAAU,CACjD,GAAI,GAAQ,KAAM,GAAQ,EAAO,EAAO,EAAM,GAC9C,MAAI,KAAU,GACL,iBAAmB,EAAK,KAE1B,GAGT,OAAS,KAAS,GAAU,CAC1B,GAAI,GAAQ,EAAM,MACd,EAAM,EAAM,IAEhB,GAAI,EAAM,OAAS,WAAY,CAC7B,AAAI,GAAO,GAAM,QAAU,GAC3B,SAGF,GAAI,EAAM,OAAS,WAAY,CAC7B,GAAI,GAAO,EAAM,KAAK,GAAM,EAAG,OAAS,GAExC,AAAI,EAAQ,WAAa,IACvB,EAAM,SAAS,IAAI,EAAK,MAG1B,GAAI,GAAM,CAAC,EAAK,MAAO,EAAM,OAAO,EAAK,OAAQ,EAAK,MAAO,GAAO,KAAK,GAErE,EAAU,AADF,GAAK,OAAS,IACN,SAAW,EAAM,MAErC,GAAI,EAAW,CACb,GAAI,GAAQ,KAAM,GAAS,EAAM,OAAO,GAAM,EAAO,EAAM,GAC3D,GAAK,GAAS,MAAO,IAAU,UAAa,IAAU,GAAO,CAC3D,EAAM,QAAQ,IAAI,EAAK,GACvB,SAGF,EAAM,QAAQ,OAAO,GACrB,GAAI,GAAM,KAAM,GAAO,EAAM,OAAO,GAAM,EAAO,EAAM,GACvD,EAAM,QAAU,GAAO,QAAQ,GAC/B,SAGF,EAAK,YAAc,GAEnB,GAAI,GAAS,EACb,EAAQ,KAAM,GAAO,EAAO,EAAO,EAAM,GAEzC,AAAI,IAAQ,EACV,GAAM,OAAO,GAAO,EACpB,EAAQ,EAAO,OAAO,OAAO,GAC7B,EAAM,QAAQ,OAAO,IAGrB,GAAM,OAAO,GAAO,OACpB,EAAM,IAAI,KACV,EAAQ,EAAO,OAAO,QAAQ,GAC9B,EAAK,YAAc,GAEf,EAAM,SAAS,IAAI,IACrB,EAAM,QAAQ,IAAI,IAIlB,EAAM,QAAQ,IAAI,IAAY,EAAM,YACtC,GAAQ,EAAO,OAAO,QAAQ,IAG5B,EAAM,QAAQ,IAAI,IAAQ,EAAM,YAClC,GAAQ,EAAO,OAAO,OAAO,IAG3B,IAAU,EAAM,OAClB,CAAI,IAAW,EACb,EAAQ,EAAO,OAAO,UAAU,GAEhC,EAAQ,EAAO,OAAO,QAAQ,GAAO,QAAQ,KAIjD,IAGF,AAAI,GACF,GAAM,QAAU,GAIpB,GAAI,GAAQ,EAAM,OAAO,MAAM;AAAA,GAAM,IAAI,GAAK,IAAM,GAChD,EAAM,EAAM,OACZ,EAAO,EAEX,OAAS,KAAQ,GACf,AAAI,EAAM,QAAQ,IAAI,EAAK,OACzB,EAAK,MAAM,QAAQ,GAAK,CACtB,AAAI,EAAM,GAAG,KAAO,KACpB,GAAM,GAAK,EAAM,OAAO,OAAO,EAAM,QAAQ,QAAU,EAAM,GAAG,MAAM,MAItE,EAAO,QAAQ,EAAM,OAAO,EAAK,QACnC,IAIJ,SAAM,UAAc,GAAO,EAAO,KAAK,QAAQ,GAC/C,EAAM,OAAS,EAAM,KAAK;AAAA,GACnB,EAAM,SAIjB,YAAkB,EAAM,EAAQ,EAAS,EAAU,CACjD,MAAO,CAAC,EAAO,EAAO,EAAM,IACtB,MAAO,GAAK,MAAM,IAAU,WACvB,EAAK,MAAM,GAAM,KAAK,EAAQ,EAAO,EAAO,EAAM,GAEpD,CAAC,EAAU,GAAO,KAAK,GAAK,EAAO,QAAQ,OCvQtD,gCAEA,GAAM,IAAS,KACT,GAAc,KACd,GAAS,KAEf,gBAA4B,GAAO,CACjC,YAAY,EAAS,CACnB,MAAM,GACN,KAAK,aACL,KAAK,MAAM,SAGP,aAAa,CACjB,KAAK,YAAc,KAAM,IAAY,MACrC,KAAM,OAAM,kBAGR,OAAM,EAAO,CACjB,KAAK,MAAM,KAAO,GAClB,KAAK,MAAM,QAAU,GAAI,KACzB,KAAK,MAAM,QAAU,GAAI,KACzB,KAAK,MAAM,UAAY,EACvB,KAAK,MAAM,OAAS,GAEhB,IAAU,IACZ,MAAM,MAAK,aACX,KAAM,MAAK,UAIf,WAAW,EAAG,CACZ,GAAI,GAAO,KAAK,UAChB,KAAK,QAAU,EACf,EAAK,QAAU,EAGjB,SAAS,EAAI,EAAK,CAChB,GAAI,CAAC,EAAI,MAAQ,CAAC,EAAI,MAAQ,GAAM,MAAQ,KAAK,UAAW,CAC1D,KAAK,OAAO,EAAI,GAChB,OAEF,KAAK,QAGP,OAAO,EAAI,EAAK,CACd,GAAI,GAAO,KAAK,UACZ,EAAS,EAAK,MAAM,MAAM,EAAG,KAAK,QAClC,EAAS,EAAK,MAAM,MAAM,KAAK,QACnC,KAAK,MAAQ,EAAK,MAAQ,GAAG,IAAS,IAAK,IAC3C,KAAK,WAAW,GAChB,KAAK,SAGP,QAAS,CACP,GAAI,GAAO,KAAK,UAChB,GAAI,KAAK,QAAU,GAAK,CAAC,EAAK,MAAO,MAAO,MAAK,QACjD,GAAI,GAAS,EAAK,MAAM,MAAM,KAAK,QAC/B,EAAS,EAAK,MAAM,MAAM,EAAG,KAAK,OAAS,GAC/C,KAAK,MAAQ,EAAK,MAAQ,GAAG,IAAS,IACtC,KAAK,WAAW,IAChB,KAAK,SAGP,UAAU,EAAG,CACX,MAAO,IAAK,KAAK,MAAM,KAAK,OAAS,EAAI,EAAI,EAAI,EAGnD,UAAU,EAAG,CACX,MAAO,IAAK,EAAI,KAAK,MAAM,KAAK,OAAS,EAAI,EAAI,EAGnD,OAAQ,CACN,KAAK,MAAM,MAAQ,EACnB,KAAK,SAGP,MAAO,CACL,KAAK,MAAM,MAAQ,KAAK,MAAM,KAAK,OAAS,EAC5C,KAAK,SAGP,OAAQ,CACN,GAAI,KAAK,QAAU,KAAK,MAAM,OAAQ,MAAO,MAAK,QAClD,KAAK,WAAW,GAChB,KAAK,SAGP,MAAO,CACL,GAAI,KAAK,QAAU,EAAG,MAAO,MAAK,QAClC,KAAK,WAAW,IAChB,KAAK,SAGP,MAAO,CACL,KAAK,MAAM,MAAQ,KAAK,UAAU,KAAK,MAAM,OAC7C,KAAK,UACL,KAAK,SAGP,MAAO,CACL,KAAK,MAAM,MAAQ,KAAK,UAAU,KAAK,MAAM,OAC7C,KAAK,UACL,KAAK,SAGP,IAAK,CACH,KAAK,OAGP,MAAO,CACL,KAAK,OAGP,OAAO,EAAO,CACZ,GAAI,GAAQ,KAAK,MAAM,UAAY,IAAM,KAAK,OAAO,QAAU,KAAK,OAAO,QAC3E,MAAI,MAAK,MAAM,YAAc,IAAQ,KAAK,MAAM,YAAc,KAC5D,GAAQ,KAAK,OAAO,QAEf,EAAM,GAAG,KAAK,MAAM,6BAGvB,SAAS,CACb,GAAI,CAAE,QAAO,OAAO,GAAI,YAAW,QAAS,KAAK,MAE7C,EAAU,CAAC,KAAK,QAAQ,QAAS;AAAA,GAAM,KAAK,GAAK,GAAK,MACtD,EAAS,KAAM,MAAK,SACpB,EAAY,KAAM,MAAK,YACvB,EAAU,KAAM,MAAK,UAErB,EAAS,CAAC,EAAQ,EAAS,GAAW,OAAO,SAAS,KAAK,KAC/D,KAAK,MAAM,OAAS,EAEpB,GAAI,GAAS,KAAM,MAAK,SACpB,EAAS,KAAM,MAAK,SAAY,GAChC,EAAQ,KAAM,MAAK,QAAW,GAC9B,EAAO,EAAY,GAAK,KAAM,MAAK,YAAY,KAAK,OAEpD,EAAM,KAAK,MAAM,IAAM,EAAK,IAAU,GACtC,EAAQ,KAAM,MAAK,OAAO,GAC1B,EAAS,KAAM,MAAK,SACxB,AAAI,GAAO,IAAU,IAAM,GACvB,GAAQ,CAAC,GAAS,KAAK,MAAM,YAAc,GAAG,IAAU,IAAM,GAElE,KAAK,MAAM,GACX,GAAI,GAAQ,CAAC,EAAQ,EAAQ,EAAM,EAAQ,EAAM,QACjD,KAAK,MAAM,EAAM,OAAO,SAAS,KAAK,IACtC,KAAK,UAGP,QAAQ,EAAM,CACZ,GAAI,CAAE,QAAO,OAAM,SAAU,KAAK,MAC9B,EAAO,EAAM,KAAK,GAAM,EAAG,OAAS,EAAK,IAC7C,MAAI,IAAQ,EAAK,OAAS,MACxB,MAAK,MAAQ,EAAK,MAClB,KAAK,OAAS,EAAK,QAEd,OAGH,SAAS,CACb,AAAI,MAAO,MAAK,aAAgB,YAAY,KAAM,MAAK,aACvD,KAAM,MAAK,YAAY,KAAK,MAAO,IAEnC,GAAI,CAAE,UAAS,UAAS,SAAQ,UAAW,KAAK,MAChD,GAAI,EAAQ,KAAM,CAChB,GAAI,GAAM,GACV,OAAS,CAAC,EAAK,IAAU,GAAS,GAAO,WAAW,MAAQ;AAAA,EAC5D,YAAK,MAAM,MAAQ,EACZ,MAAM,SAGf,GAAI,EAAQ,KACV,YAAK,MAAM,MAAQ,aAAe,CAAC,GAAG,EAAQ,QAAQ,KAAK,MACpD,MAAM,SAIf,GAAI,GAAS,AADD,GAAO,QAAQ,GAAQ,MAAM;AAAA,GACtB,IAAI,GAAK,EAAE,MAAM,IAAI,KAAK;AAAA,GAC7C,YAAK,MAAQ,CAAE,SAAQ,UAChB,MAAM,WAIjB,GAAO,QAAU,KCxLjB,gCAEA,GAAM,IAAO,kCACP,GAAS,KAEf,gBAAmB,GAAO,CACxB,YAAY,EAAS,CACnB,MAAM,IAAK,EAAS,QAAS,GAAO,KAAM,GAAM,SAAU,KAC1D,KAAK,MAAM,KAAO,CAAC,KAAK,QAAQ,KAAM,IAAM,KAAK,KAAK,QAAQ,KAAK,OAGrE,WAAY,CACV,MAAO,QAGH,cAAa,EAAQ,EAAG,CAC5B,GAAI,GAAM,KAAM,OAAM,aAAa,EAAQ,GACvC,EAAM,KAAK,QAAQ,YAAc,IACjC,EAAO,KAAK,QAAU,GAAK,KAAK,QAAW,KAAK,OAAO,MAAM,GAAO,KAExE,MADI,MAAK,QAAQ,OAAS,IAAO,GAAM,IACnC,KAAK,QAAQ,WAAa,GACrB,EAAM,GAAG,EAAI,OAAS,EAExB,EAAM,KAGX,WAAW,CACb,MAAO,MAAK,QAGd,QAAS,CACP,YAAK,MAAQ,KAAK,QAAQ,IAAI,GAAU,EAAO,OACxC,MAAM,WAIjB,GAAO,QAAU,KCpCjB,gCAEA,GAAM,IAAc,KAEpB,gBAAqB,GAAY,CAC/B,YAAY,EAAU,GAAI,CACxB,MAAM,GAIN,GAHA,KAAK,WAAa,EAAQ,YAAc,yBACxC,KAAK,KAAO,QAAQ,IAAI,aAEpB,CAAC,KAAK,QAAQ,OAAQ,CACxB,GAAI,GAAS,CAAC,GAAI,qBAAsB,YAAa,cAAe,eAAgB,wBAAyB,IAC7G,EAAS,EAAO,IAAI,GAAO,KAAK,OAAO,MAAM,IAC7C,KAAK,MAAM,OAAS,EAAO,KAAK;AAAA,YAI9B,cAAa,EAAM,CACvB,GAAI,KAAK,cAAe,MAAO,GAC/B,KAAK,cAAgB,GACrB,GAAI,GAAU,KAAM,OAAM,UAAU,GAAG,GACvC,OAAS,KAAU,GACjB,EAAO,MAAQ,GAAY,EAAG,KAAK,SACnC,EAAO,SAAW,EAEpB,MAAO,GAGT,UAAW,CACT,KAAK,QAGP,OAAQ,CACN,GAAI,GAAS,KAAK,QACd,EAAM,EAAO,MAAM,EAAO,UAC1B,EAAW,EAAI,SACnB,SAAO,MAAM,QAAQ,GAAM,EAAE,SAAW,IACxC,EAAI,SAAW,CAAC,EACT,KAAK,SAGd,WAAY,CACV,MAAO,GAGT,SAAU,CACR,MAAO,GAGT,WAAY,CACV,MAAO,MAAK,OAAO,MAAM,KAAK,QAAQ,UAGxC,OAAQ,CACN,GAAI,GAAS,KAAK,QAClB,MAAI,GAAO,UAAY,EAAO,MAAM,OAAS,EAAU,KAAK,QAC5D,GAAO,WACA,KAAK,UAGd,MAAO,CACL,GAAI,GAAS,KAAK,QAClB,MAAI,GAAO,UAAY,EAAU,KAAK,QACtC,GAAO,WACA,KAAK,UAGd,QAAS,CACP,MAAO,WAGH,cAAa,EAAM,EAAG,CAC1B,KAAM,MAAK,SAAS,EAAM,GAC1B,GAAI,GAAU,KAAK,QAAU,EACzB,EAAU,KAAK,OAAS,QACxB,EAAI,AAAC,EAAc,EAAJ,EACf,EAAI,AAAC,EAAgB,GAAN,IACf,EAAK,KAAK,QAAQ,KAAK,OAAO,GAC9B,EAAK,IAAI,OAAO,EAAK,GAAU,EAAI,IACnC,EAAM,GAAY,GAAU,KAAK,OAAO,QAAQ,UAAO,UAAO,EAE9D,EAAM,EAAI,EAAI,IACd,EAAQ,EAAU,KAAK,OAAO,QAAU,KAAK,OAAO,KACpD,EAAM,KAAM,MAAK,QAAQ,EAAK,QAAS,KAAK,MAAO,EAAM,GACzD,EAAS,KAAK,OAAO,GACrB,EAAQ,EAAS,EAAK,MAAM,IAAI,CAAC,EAAG,IAAM,EAAI,IAAM,EAAK,WAAW,KAAK,GACzE,EAAM,GAAK,IAAM,EAAK,SAAW,EAAM,GAAK,EAC5C,EAAO,EAAS,EAAK,MAAM,IAAI,CAAC,EAAG,IAAM,EAAI,IAAI,KAAK,GAEtD,EAAO,IAAM,CAAC,EAAK,GAAK,OAAO,SAAS,KAAK,KAC7C,EAAQ,IAAM,CAAC,IAAQ,EAAO,EAAM,KAAK,OAAO,SAAS,KAAK;AAAA,GAElE,MAAI,IACF,GAAQ,KAAK,OAAO,KAAK,GACzB,EAAO,KAAK,OAAO,KAAK,IAGnB,SAGH,gBAAgB,CACpB,GAAI,KAAK,MAAM,UAAW,MAAO,GACjC,GAAI,GAAU,KAAK,QAAQ,IAAI,MAAM,EAAI,IAAM,KAAM,MAAK,aAAa,EAAI,IACvE,EAAU,KAAM,SAAQ,IAAI,GAChC,MAAK,GAAQ,QAAQ,EAAQ,KAAK,KAAK,OAAO,OAAO,wBAC9C,EAAQ,KAAK;AAAA,GAGtB,QAAS,CACP,MAAI,MAAK,MAAM,UAEN,AADM,KAAK,QAAQ,IAAI,GAAM,KAAK,OAAO,KAAK,EAAG,WAC1C,KAAK,MAEd,QAGH,SAAS,CACb,GAAI,CAAE,YAAW,QAAS,KAAK,MAE3B,EAAS,KAAM,MAAK,SACpB,EAAY,KAAM,MAAK,YACvB,EAAU,KAAM,MAAK,UAErB,EAAS,CAAC,EAAQ,EAAS,GAAW,OAAO,SAAS,KAAK,KAC/D,KAAK,MAAM,OAAS,EAEpB,GAAI,GAAS,KAAM,MAAK,SACpB,EAAS,KAAM,MAAK,SACpB,EAAO,KAAM,MAAK,SAAW,KAAM,MAAK,OACxC,EAAO,KAAM,MAAK,gBAClB,EAAS,KAAM,MAAK,SAExB,AAAI,IAAU,CAAC,IAAM,IAAU,IAAM,GACjC,GAAQ,CAAC,EAAO,SAAS,IAAO,IAAU,IAAM,GAEhD,GAAa,CAAC,GAAU,CAAC,GAAQ,KAAK,UAAY,KAAK,OAAS,QAClE,IAAU,KAAK,OAAO,OAAO,KAAK,aAGpC,KAAK,MAAM,GACX,KAAK,MAAM,CAAC,EAAQ,EAAQ,EAAM,GAAQ,OAAO,SAAS,KAAK;AAAA,IAC/D,KAAK,UAGP,QAAS,CACP,KAAK,MAAQ,GACb,OAAS,KAAU,MAAK,QACtB,KAAK,MAAM,EAAO,MAAQ,EAAO,SAEnC,MAAO,MAAK,KAAK,OAAO,KAAK,QAIjC,YAAqB,EAAG,EAAU,GAAI,CACpC,GAAI,MAAM,QAAQ,EAAQ,OACxB,MAAO,GAAQ,MAAM,IAAI,GAAQ,KAAK,KAExC,GAAI,GAAQ,GACZ,OAAS,GAAI,EAAG,EAAI,EAAI,EAAG,IAAK,EAAM,KAAK,CAAE,EAAG,SAAU,KAC1D,MAAO,GAGT,GAAO,QAAU,KClKjB,sBAAO,QAAU,OCAjB,gCAEA,GAAM,IAAgB,KAEtB,gBAA2B,GAAc,MACjC,aAAa,CACjB,KAAM,OAAM,aACZ,KAAK,MAAQ,KAAK,QAAU,CAAC,CAAC,KAAK,QAAQ,QAC3C,KAAK,SAAW,KAAK,QAAQ,UAAY,KACzC,KAAK,QAAU,KAAK,QAAQ,SAAW,MACvC,KAAM,MAAK,SAGb,OAAQ,CACN,KAAK,MAAQ,KAAK,QAClB,KAAK,SAGP,QAAS,CACP,KAAK,QAGP,QAAS,CACP,KAAK,MAAQ,CAAC,KAAK,MACnB,KAAK,SAGP,QAAS,CACP,GAAI,KAAK,QAAU,GAAM,MAAO,MAAK,QACrC,KAAK,MAAQ,GACb,KAAK,SAEP,SAAU,CACR,GAAI,KAAK,QAAU,GAAO,MAAO,MAAK,QACtC,KAAK,MAAQ,GACb,KAAK,SAGP,IAAK,CACH,KAAK,SAEP,MAAO,CACL,KAAK,SAEP,OAAQ,CACN,KAAK,SAEP,MAAO,CACL,KAAK,SAEP,MAAO,CACL,KAAK,SAEP,MAAO,CACL,KAAK,SAGP,SAAS,EAAK,GAAI,EAAK,CACrB,OAAQ,EAAG,mBACJ,IACH,MAAO,MAAK,aACT,QACA,QACA,IACH,MAAO,MAAK,aACT,QACA,QACA,IACH,MAAO,MAAK,kBAEZ,MAAO,MAAK,SAKlB,QAAS,CACP,GAAI,GAAS,GAAO,KAAK,OAAO,QAAQ,UAAU,GAKlD,MAAO,AAJK,CACV,KAAK,MAAQ,KAAK,SAAW,EAAO,KAAK,UACzC,KAAK,MAAQ,EAAO,KAAK,SAAW,KAAK,SAE9B,KAAK,KAAK,OAAO,MAAM,aAGhC,SAAS,CACb,GAAI,CAAE,QAAS,KAAK,MAEhB,EAAS,KAAM,MAAK,SACpB,EAAS,KAAM,MAAK,SACpB,EAAY,KAAM,MAAK,YACvB,EAAU,KAAM,MAAK,UAErB,EAAS,KAAM,MAAK,SACpB,EAAQ,KAAM,MAAK,SAAa,KAAM,MAAK,OAC3C,EAAS,KAAM,MAAK,SAEpB,EAAS,CAAC,EAAQ,EAAS,EAAW,GAAQ,KAAK,KACvD,KAAK,MAAM,OAAS,EAEhB,GAAQ,CAAC,EAAO,SAAS,IAAO,IAAU,IAAM,GAEpD,KAAK,MAAM,GACX,KAAK,MAAM,CAAC,EAAQ,EAAQ,GAAQ,OAAO,SAAS,KAAK;AAAA,IACzD,KAAK,MAAM,KAAK,OAAO,IACvB,KAAK,YAIT,GAAO,QAAU,KC5GjB,gCAEA,GAAM,IAAe,KAErB,gBAAmB,GAAa,CAC9B,YAAY,EAAS,CACnB,MAAM,GACN,GAAI,MAAO,MAAK,QAAQ,eAAkB,UAAY,KAAK,QAAQ,cAAgB,EACjF,KAAM,IAAI,OAAM,gFAId,WAAU,EAAO,EAAQ,CAC7B,GAAI,GAAU,KAAM,OAAM,UAAU,EAAO,GAC3C,GAAI,EAAQ,OAAS,EACnB,KAAM,IAAI,OAAM,gDAElB,GAAI,KAAK,QAAQ,cAAgB,EAAQ,OACvC,KAAM,IAAI,OAAM,2EAElB,MAAO,GAGT,MAAM,EAAO,CACX,MAAO,GAAM,QAAU,KAAK,QAAQ,mBAGhC,QAAO,EAAU,CACrB,MAAO,CACL,eAAgB,EAChB,cAAe,KAAK,QAAQ,QAAQ,KAAK,QAAQ,eAAe,MAChE,QAAS,KAAM,MAAK,MAAM,KAAK,UAKrC,GAAO,QAAU,KCpCjB,2BAEA,GAAM,IAAQ,KAER,GAAS,CAAC,EAAK,IAAO,CAC1B,GAAM,aAAa,GAAS,EAAK,GACjC,GAAM,aAAa,GAAS,EAAI,cAAe,IAGjD,GAAO,eAAgB,IAAM,MAC7B,GAAO,YAAa,IAAM,MAC1B,GAAO,UAAW,IAAM,MACxB,GAAO,WAAY,IAAM,MACzB,GAAO,OAAQ,IAAM,MACrB,GAAO,QAAS,IAAM,MACtB,GAAO,YAAa,IAAM,MAC1B,GAAO,OAAQ,IAAM,MACrB,GAAO,cAAe,IAAM,MAC5B,GAAO,UAAW,IAAM,MACxB,GAAO,WAAY,IAAM,MACzB,GAAO,QAAS,IAAM,MACtB,GAAO,SAAU,IAAM,MACvB,GAAO,UAAW,IAAM,MACxB,GAAO,OAAQ,IAAM,MACrB,GAAO,SAAU,IAAM,MACvB,GAAO,OAAQ,IAAM,MACrB,GAAO,SAAU,IAAM,MACvB,GAAO,OAAQ,IAAM,QC3BrB,sBAAO,QAAU,CACf,YAAa,KACb,WAAY,KACZ,cAAe,KACf,aAAc,KACd,aAAc,QCLhB,gCAEA,GAAM,IAAS,QAAQ,UACjB,GAAS,QAAQ,UACjB,GAAQ,KAed,gBAAuB,GAAO,CAC5B,YAAY,EAAS,EAAS,CAC5B,QACA,KAAK,QAAU,GAAM,MAAM,GAAI,GAC/B,KAAK,QAAU,IAAK,GAkBtB,SAAS,EAAM,EAAI,CACjB,GAAI,GAAM,SAAS,GAAO,CACxB,OAAS,KAAO,QAAO,KAAK,GAAO,KAAK,SAAS,EAAK,EAAK,IAC3D,MAAO,MAET,GAAO,MAAM,MAAO,GAAI,WAAY,uBACpC,GAAI,GAAO,EAAK,cAChB,MAAI,GAAG,oBAAqB,MAAK,OAC/B,KAAK,QAAQ,GAAQ,EAErB,KAAK,QAAQ,GAAQ,EAAG,KAAK,OAAQ,MAEhC,UAwBH,QAAO,EAAY,GAAI,CAC3B,OAAS,KAAY,GAAG,OAAO,GAC7B,GAAI,CACF,AAAI,MAAO,IAAa,YAAY,GAAW,KAAM,GAAS,KAAK,OACnE,KAAM,MAAK,IAAI,GAAM,MAAM,GAAI,KAAK,QAAS,UACtC,EAAP,CACA,MAAO,SAAQ,OAAO,GAG1B,MAAO,MAAK,aAGR,KAAI,EAAU,CAClB,AAAI,MAAO,IAAa,YACtB,GAAW,KAAM,GAAS,KAAK,OAGjC,GAAI,GAAO,GAAM,MAAM,GAAI,KAAK,QAAS,GACrC,CAAE,OAAM,QAAS,EACjB,CAAE,MAAK,OAAQ,GAMnB,GAJI,MAAO,IAAS,YAClB,GAAO,KAAM,GAAK,KAAK,KAAM,EAAU,KAAK,UAG1C,CAAC,EAAM,MAAO,MAAK,QAAQ,GAE/B,GAAO,KAAK,QAAQ,GAAO,WAAW,wBAEtC,GAAI,GAAS,GAAI,MAAK,QAAQ,GAAM,GAChC,EAAQ,EAAI,KAAK,QAAS,GAE9B,EAAO,MAAM,QAAU,KAAK,QAC5B,EAAO,SAAW,KAEd,GACF,EAAO,GAAG,SAAU,GAAS,CAC3B,KAAK,KAAK,SAAU,EAAM,EAAO,GACjC,EAAI,KAAK,QAAS,EAAM,KAK5B,GAAI,GAAO,EAAO,KAAK,KAAK,GAC5B,SAAO,KAAO,IAAI,IAChB,MAAK,KAAK,KAAK,KAAM,GAAG,GACjB,EAAK,GAAG,IAGjB,KAAK,KAAK,SAAU,EAAQ,MAE5B,AAAI,EAAK,UAAY,GAAS,KAC5B,GAAO,MAAQ,EAAO,MAAQ,EAG1B,EAAK,WAAa,QACpB,KAAM,GAAO,UAGf,EAAQ,EAAO,MAAQ,KAAM,GAAO,MAG/B,EAoBT,IAAI,EAAQ,CACV,SAAO,KAAK,KAAM,MACX,QAGL,QAAO,EAAO,CAChB,KAAK,QAAU,KAEb,SAAS,CACX,MAAO,MAAK,SAAW,KAAK,YAAY,UAGtC,UAAU,CACZ,MAAO,MAAK,YAAY,kBAGf,QAAO,EAAO,CACvB,KAAK,QAAU,YAEN,SAAS,CAClB,MAAO,MAAK,SAAW,eAGd,UAAU,CACnB,MAAO,gBAGE,QAAQ,CACjB,MAAO,gBAsBE,SAAS,CAClB,GAAM,GAAK,CAAC,KAAc,IAAS,CACjC,GAAI,GAAW,GAAI,MAAK,GAAG,GACvB,EAAO,EAAS,KAAK,KAAK,GAC9B,SAAS,KAAO,IAAI,IAClB,GAAG,KAAK,GAAG,GACJ,EAAK,GAAG,IAEV,EAAS,OAAO,IAEzB,UAAM,aAAa,EAAI,GAAI,KACpB,IAIX,GAAM,aAAa,GAAU,GAAI,KACjC,GAAM,IAAU,GAAS,QAEzB,OAAS,KAAQ,QAAO,KAAK,IAAU,CACrC,GAAI,GAAM,EAAK,cAEX,EAAM,GAAW,GAAI,IAAQ,GAAM,GAAS,MAChD,GAAS,OAAO,GAAO,EACvB,GAAS,GAAO,EAEX,GAAS,IACZ,QAAQ,eAAe,GAAU,EAAM,CAAE,IAAK,IAAM,GAAQ,KAIhE,GAAM,IAAM,GAAQ,CAClB,GAAM,aAAa,GAAU,EAAM,IAAM,GAAS,MAAM,KAG1D,GAAI,eACJ,GAAI,cACJ,GAAI,iBACJ,GAAI,gBACJ,GAAI,gBAEJ,GAAO,QAAU,KCzPjB,OAAwB,QCAxB,OAAwB,QCAxB,OAAsD,sBACtD,GAAqC,QACrC,GAAsB,mBAEtB,GAAwB,uBACxB,GAAwB,QCCjB,aAAqC,CAC1C,MAAO,CACL,KAAM,sBACN,MAAM,EAAO,CAGX,EAAM,UAAU,CAAE,OAAQ,UAAW,UAAW,QAAU,AAAC,GAAU,EACnE,KAAM,QAAQ,QAAQ,EAAK,KAAM,CAAE,MAAO,CAAC,EAAK,cAChD,UAAW,eAKb,EAAM,OAAO,CAAE,OAAQ,KAAM,UAAW,aAAe,AAAC,GAAU,EAChE,SAAU;AAAA,2BACS,KAAK,UAAU,EAAK;AAAA;AAAA;AAAA,WASzC,EAAM,UACJ,CAAE,OAAQ,UAAW,UAAW,aAChC,AAAC,GAAU,EACT,KAAM,EAAK,KACX,UAAW,UAMf,GAAM,GAAO,EAAM,eACnB,EAAK,OAAS,EAAK,QAAU,GAC7B,EAAK,OAAO,SAAW,SAQtB,aAAiC,CACtC,MAAO,CACL,KAAM,gCACN,MAAM,EAAO,CACX,EAAM,UAAU,CAAE,OAAQ,YAAc,AAAC,GAAU,EACjD,KAAM,EAAK,KAAK,MAAM,GACtB,SAAU,QDhDlB,OAAsB,QACtB,GAAqB,QEId,YAGL,EAAO,EAAe,EAAY,KAAS,CAC3C,GAAI,GACA,EAAS,EACb,MAAO,mBAAmB,EAAM,CAC9B,MAAO,IAAI,SAAQ,AAAC,GAAY,CAC9B,AAAI,GACF,aAAa,GAEf,EAAO,WAAW,IAAM,EAAS,EAAS,EAAG,GAAG,IAAS,GACzD,WAAW,IAAM,EAAQ,GAAS,MFHjC,YAAqB,CAC1B,YAA6B,EAAgC,CAAhC,2BAOhB,SAAQ,EAAiC,CACpD,GAAM,GAAQ,KAAM,gBAClB,AAAK,WAAQ,EAAM,iBAErB,MAAO,QAAO,KAAK,IACd,EAAK,gBACL,EAAK,mBACL,EAAK,+BAOC,aAAY,EAAiC,CACxD,GAAM,GAAe,AAAK,WAAQ,EAAM,iBACxC,GAAI,KAAM,kBAAW,IAGhB,AAFkB,MAAM,gBAAS,IAEpB,gBAAgB,IAAiB,KAC7C,AAAC,GAAQ,EAAI,gBAAkB,OAGjC,MAAO,UAGX,GAAM,GAAU,AAAK,WAAQ,EAAM,gBACnC,GAAI,KAAM,kBAAW,GAAU,CAC7B,GAAM,GAAW,KAAM,gBAAS,GAChC,GAAI,OAAO,KAAK,EAAQ,iBAAmB,IAAI,SAAS,eACtD,MAAO,OAGX,MAAO,gBAEF,iBAAgB,EAGrB,CAMA,MAAO,CAAE,QALO,cAKE,QAJgC,CAChD,IAAK,EACL,OAAQ,2BAON,SAAwB,CAC5B,GAAM,GAAO,KAAK,QAAQ,KACpB,CAAE,UAAS,WAAY,GAAe,gBAC1C,KAAK,QAAQ,MAET,EAAU,GAAI,YAAQ,CAC1B,iBAAkB,AAAK,WAAQ,EAAM,iBACrC,4BAA6B,GAC7B,gBAAiB,CACf,oBAAqB,GACrB,OAAQ,GACR,YAAa,KAAK,QAAQ,WAGxB,EAAY,MAAM,eAAQ,EAAS,IAAU,IAAI,AAAC,GACtD,AAAK,WAAQ,EAAM,IAErB,EAAQ,sBAAsB,GAC9B,KAAM,GAAQ,KAAK,CACjB,iBAAkB,KAUtB,kBAAkB,CAChB,OACA,YAIe,CACf,MAAO,CACL,QAAS,kBACT,OAAQ,MACR,UAAW,GACX,YAAa,CAAC,kBACd,OAAQ,GACR,SAAU,CAAC,GAAG,GAAe,eAAgB,GAAG,GAChD,SAAU,EACV,OAAQ,CAAC,KAAK,QAAQ,QACtB,YAAa,KAAK,QAAQ,SAU9B,kBAAkB,CAChB,OACA,YAIe,CACf,MAAO,CACL,QAAS,sBACT,OAAQ,MACR,UAAW,GACX,YAAa,CAAC,kBACd,OAAQ,GACR,SAAU,CAAC,GAAG,GAAe,eAAgB,GAAG,GAChD,SAAU,EACV,OAAQ,CAAC,KAAK,QAAQ,QACtB,YAAa,KAAK,QAAQ,SAU9B,kBAAkB,CAChB,OACA,YAIe,CACf,GAAM,GAAU,GAAe,WAAW,GAC1C,MAAO,CACL,YAAa,CAAC,gBACd,QAAS,gBACT,OAAQ,MACR,UAAW,GACX,SAAU,EACV,OAAQ,GACR,OAAQ,CACN,GAAI,uBAEN,SAAU,CACR,GAAG,GAAe,eAClB,GAAI,KAAK,QAAQ,QAAU,EAAO,IAEpC,UACA,OAAQ,CAAC,KAAK,QAAQ,QACtB,YAAa,KAAK,QAAQ,eAIvB,YAAW,EAA4B,CAC5C,GAAM,GAAoB,GAC1B,MAAI,KAAa,QACf,EAAQ,KAAK,KAAiB,MAEzB,OAGH,WAA0B,CAC9B,KAAM,MAAK,MAAM,KAAK,gBAAgB,KAAK,YAGvC,WAA0B,CAC9B,KAAM,MAAK,MAAM,KAAK,gBAAgB,KAAK,OAG7C,gBAAgB,EAAgB,EAA4B,CAC1D,MAAO,CACL,CACE,MAAO,mBACP,KAAM,IACJ,aACE,KAAK,kBAAkB,CACrB,KAAM,EACN,SAAU,MAIlB,CACE,MAAO,mBACP,KAAM,IACJ,aACE,KAAK,kBAAkB,CACrB,KAAM,EACN,SAAU,MAIlB,CACE,MAAO,uCACP,KAAM,IAAM,KAAK,WAIvB,gBAAgB,EAAgB,EAA4B,CAC1D,MAAO,CACL,CACE,MAAO,mBACP,KAAM,IACJ,aACE,KAAK,kBAAkB,CACrB,KAAM,EACN,SAAU,MAIlB,GAAG,KAAK,gBAAgB,EAAM,gBAIrB,UAAS,EAAoB,EAA2B,CACnE,GAAM,GAAQ,KAAK,MACnB,EAAS,IAAI,EAAK,MAAO,CAAE,KAAM,EAAK,QACtC,GAAI,CACF,KAAM,GAAK,OACX,EAAS,QAAQ,EAAK,MAAO,CAC3B,KAAM,GAAG,EAAK,UAAU,KAAK,MAAQ,cAEhC,EAAP,CACA,EAAS,KAAK,EAAK,MAAO,CAAE,KAAM,EAAK,cAGrC,OACJ,EACe,CACf,GAAM,GAAM,SAAY,CACtB,GAAM,GAAQ,KAAK,MACb,EAAO,KAAM,IAAe,QAAQ,KAAK,QAAQ,MACjD,EAAW,KAAM,IAAe,YAAY,KAAK,QAAQ,MACzD,EAAQ,EAAS,EAAM,GACvB,EAAW,GAAI,YACrB,KAAM,SAAQ,IACZ,EAAM,IAAI,KAAO,IAAS,GAAe,SAAS,EAAU,KAE9D,QAAQ,IAAI,6BAAS,KAAK,MAAQ,QAGpC,GAAI,CAAC,KAAK,QAAQ,QAAS,CACzB,KAAM,KACN,OAGF,GAAM,CAAE,UAAS,WAAY,GAAe,gBAC1C,KAAK,QAAQ,MAEf,KAAM,IAAI,SAAQ,CAAC,EAAS,IAAW,CACrC,aAAM,EAAS,GAAS,GAAG,QAAS,GAAQ,GAAG,MAAO,GAAS,EAAK,SAtQnE,MAGW,GAHX,GAGW,iBAAiB,CAAC,UAAW,SAAU,aDvBzD,OAAiB,mBAEJ,GAAiB,GAAI,YAAQ,SACvC,WACC,GAAI,YAAQ,OACT,YAAY,2GACZ,OAAO,aAAc,4BACrB,OAAO,KAAO,IAAgC,CAK7C,KAAM,AAJe,IAAI,IAAe,CACtC,KAAM,WAAK,UACX,QAAS,CAAC,CAAC,EAAO,QAED,aAEpB,MAAM,QAEV,WACC,GAAI,YAAQ,OACT,YACC,iJAED,OAAO,cAAe,4BACtB,OAAO,KAAO,IAAgC,CAK7C,KAAM,AAJe,IAAI,IAAe,CACtC,KAAM,WAAK,UACX,QAAS,CAAC,CAAC,EAAO,QAED,cI7B3B,OAAgC,QCAhC,OAAiB,mBACjB,GASO,QACP,GAAuB,QCXvB,OAAyD,QACzD,GAAiB,mBCAjB,GAAI,IAAa,MAAO,SAAU,UAAY,QAAU,OAAO,SAAW,QAAU,OAE7E,GAAQ,GCAf,GAAI,IAAW,MAAO,OAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxE,GAAO,IAAc,IAAY,SAAS,iBAEvC,GAAQ,GCLf,GAAI,IAAS,GAAK,OAEX,GAAQ,GCFf,GAAI,IAAc,OAAO,UAGrB,GAAiB,GAAY,eAO7B,GAAuB,GAAY,SAGnC,GAAiB,GAAS,GAAO,YAAc,OASnD,YAAmB,EAAO,CACxB,GAAI,GAAQ,GAAe,KAAK,EAAO,IACnC,EAAM,EAAM,IAEhB,GAAI,CACF,EAAM,IAAkB,OACxB,GAAI,GAAW,SACR,EAAP,EAEF,GAAI,GAAS,GAAqB,KAAK,GACvC,MAAI,IACF,CAAI,EACF,EAAM,IAAkB,EAExB,MAAO,GAAM,KAGV,EAGT,GAAO,IAAQ,GC5Cf,GAAI,IAAc,OAAO,UAOrB,GAAuB,GAAY,SASvC,YAAwB,EAAO,CAC7B,MAAO,IAAqB,KAAK,GAGnC,GAAO,IAAQ,GChBf,GAAI,IAAU,gBACV,GAAe,qBAGf,GAAiB,GAAS,GAAO,YAAc,OASnD,YAAoB,EAAO,CACzB,MAAI,IAAS,KACJ,IAAU,OAAY,GAAe,GAEtC,IAAkB,KAAkB,QAAO,GAC/C,GAAU,GACV,GAAe,GAGrB,GAAO,IAAQ,GCHf,YAAsB,EAAO,CAC3B,MAAO,IAAS,MAAQ,MAAO,IAAS,SAG1C,GAAO,IAAQ,GCLf,GAAI,IAAU,MAAM,QAEb,GAAQ,GCAf,YAAkB,EAAO,CACvB,GAAI,GAAO,MAAO,GAClB,MAAO,IAAS,MAAS,IAAQ,UAAY,GAAQ,YAGvD,GAAO,IAAQ,GCdf,YAAkB,EAAO,CACvB,MAAO,GAGT,GAAO,IAAQ,GChBf,GAAI,IAAW,yBACX,GAAU,oBACV,GAAS,6BACT,GAAW,iBAmBf,YAAoB,EAAO,CACzB,GAAI,CAAC,GAAS,GACZ,MAAO,GAIT,GAAI,GAAM,GAAW,GACrB,MAAO,IAAO,IAAW,GAAO,IAAU,GAAO,IAAY,GAAO,GAGtE,GAAO,IAAQ,GCjCf,GAAI,IAAa,GAAK,sBAEf,GAAQ,GCFf,GAAI,IAAc,UAAW,CAC3B,GAAI,GAAM,SAAS,KAAK,IAAc,GAAW,MAAQ,GAAW,KAAK,UAAY,IACrF,MAAO,GAAO,iBAAmB,EAAO,MAU1C,YAAkB,EAAM,CACtB,MAAO,CAAC,CAAC,IAAe,KAAc,GAGxC,GAAO,IAAQ,GClBf,GAAI,IAAY,SAAS,UAGrB,GAAe,GAAU,SAS7B,YAAkB,EAAM,CACtB,GAAI,GAAQ,KAAM,CAChB,GAAI,CACF,MAAO,IAAa,KAAK,SAClB,EAAP,EACF,GAAI,CACF,MAAQ,GAAO,SACR,EAAP,GAEJ,MAAO,GAGT,GAAO,IAAQ,GChBf,GAAI,IAAe,sBAGf,GAAe,8BAGf,GAAY,SAAS,UACrB,GAAc,OAAO,UAGrB,GAAe,GAAU,SAGzB,GAAiB,GAAY,eAG7B,GAAa,OAAO,IACtB,GAAa,KAAK,IAAgB,QAAQ,GAAc,QACvD,QAAQ,yDAA0D,SAAW,KAWhF,YAAsB,EAAO,CAC3B,GAAI,CAAC,GAAS,IAAU,GAAS,GAC/B,MAAO,GAET,GAAI,GAAU,GAAW,GAAS,GAAa,GAC/C,MAAO,GAAQ,KAAK,GAAS,IAG/B,GAAO,IAAQ,GCtCf,YAAkB,EAAQ,EAAK,CAC7B,MAAO,IAAU,KAAO,OAAY,EAAO,GAG7C,GAAO,IAAQ,GCDf,YAAmB,EAAQ,EAAK,CAC9B,GAAI,GAAQ,GAAS,EAAQ,GAC7B,MAAO,IAAa,GAAS,EAAQ,OAGvC,GAAO,IAAQ,GCbf,GAAI,IAAe,OAAO,OAUtB,GAAc,UAAW,CAC3B,YAAkB,EAClB,MAAO,UAAS,EAAO,CACrB,GAAI,CAAC,GAAS,GACZ,MAAO,GAET,GAAI,GACF,MAAO,IAAa,GAEtB,EAAO,UAAY,EACnB,GAAI,GAAS,GAAI,GACjB,SAAO,UAAY,OACZ,MAIJ,GAAQ,GCnBf,YAAe,EAAM,EAAS,EAAM,CAClC,OAAQ,EAAK,YACN,GAAG,MAAO,GAAK,KAAK,OACpB,GAAG,MAAO,GAAK,KAAK,EAAS,EAAK,QAClC,GAAG,MAAO,GAAK,KAAK,EAAS,EAAK,GAAI,EAAK,QAC3C,GAAG,MAAO,GAAK,KAAK,EAAS,EAAK,GAAI,EAAK,GAAI,EAAK,IAE3D,MAAO,GAAK,MAAM,EAAS,GAG7B,GAAO,IAAQ,GCZf,YAAmB,EAAQ,EAAO,CAChC,GAAI,GAAQ,GACR,EAAS,EAAO,OAGpB,IADA,GAAU,GAAQ,MAAM,IACjB,EAAE,EAAQ,GACf,EAAM,GAAS,EAAO,GAExB,MAAO,GAGT,GAAO,IAAQ,GClBf,GAAI,IAAY,IACZ,GAAW,GAGX,GAAY,KAAK,IAWrB,YAAkB,EAAM,CACtB,GAAI,GAAQ,EACR,EAAa,EAEjB,MAAO,WAAW,CAChB,GAAI,GAAQ,KACR,EAAY,GAAY,GAAQ,GAGpC,GADA,EAAa,EACT,EAAY,GACd,GAAI,EAAE,GAAS,GACb,MAAO,WAAU,OAGnB,GAAQ,EAEV,MAAO,GAAK,MAAM,OAAW,YAIjC,GAAO,IAAQ,GCjBf,YAAkB,EAAO,CACvB,MAAO,WAAW,CAChB,MAAO,IAIX,GAAO,IAAQ,GCvBf,GAAI,IAAkB,UAAW,CAC/B,GAAI,CACF,GAAI,GAAO,GAAU,OAAQ,kBAC7B,SAAK,GAAI,GAAI,IACN,QACA,EAAP,MAGG,GAAQ,GCEf,GAAI,IAAkB,AAAC,GAA4B,SAAS,EAAM,EAAQ,CACxE,MAAO,IAAe,EAAM,WAAY,CACtC,aAAgB,GAChB,WAAc,GACd,MAAS,GAAS,GAClB,SAAY,MALwB,GASjC,GAAQ,GCVf,GAAI,IAAc,GAAS,IAEpB,GAAQ,GCZf,GAAI,IAAmB,iBAGnB,GAAW,mBAUf,YAAiB,EAAO,EAAQ,CAC9B,GAAI,GAAO,MAAO,GAClB,SAAS,GAAiB,GAEnB,CAAC,CAAC,GACN,IAAQ,UACN,GAAQ,UAAY,GAAS,KAAK,KAChC,EAAQ,IAAM,EAAQ,GAAK,GAAK,EAAQ,EAGjD,GAAO,IAAQ,GCbf,YAAyB,EAAQ,EAAK,EAAO,CAC3C,AAAI,GAAO,aAAe,GACxB,GAAe,EAAQ,EAAK,CAC1B,aAAgB,GAChB,WAAc,GACd,MAAS,EACT,SAAY,KAGd,EAAO,GAAO,EAIlB,GAAO,IAAQ,GCQf,YAAY,EAAO,EAAO,CACxB,MAAO,KAAU,GAAU,IAAU,GAAS,IAAU,EAG1D,GAAO,IAAQ,GChCf,GAAI,IAAc,OAAO,UAGrB,GAAiB,GAAY,eAYjC,YAAqB,EAAQ,EAAK,EAAO,CACvC,GAAI,GAAW,EAAO,GACtB,AAAI,EAAE,IAAe,KAAK,EAAQ,IAAQ,GAAG,EAAU,KAClD,IAAU,QAAa,CAAE,KAAO,MACnC,GAAgB,EAAQ,EAAK,GAIjC,GAAO,IAAQ,GCdf,YAAoB,EAAQ,EAAO,EAAQ,EAAY,CACrD,GAAI,GAAQ,CAAC,EACb,GAAW,GAAS,IAKpB,OAHI,GAAQ,GACR,EAAS,EAAM,OAEZ,EAAE,EAAQ,GAAQ,CACvB,GAAI,GAAM,EAAM,GAEZ,EAAW,EACX,EAAW,EAAO,GAAM,EAAO,GAAM,EAAK,EAAQ,GAClD,OAEJ,AAAI,IAAa,QACf,GAAW,EAAO,IAEpB,AAAI,EACF,GAAgB,EAAQ,EAAK,GAE7B,GAAY,EAAQ,EAAK,GAG7B,MAAO,GAGT,GAAO,IAAQ,GCpCf,GAAI,IAAY,KAAK,IAWrB,YAAkB,EAAM,EAAO,EAAW,CACxC,SAAQ,GAAU,IAAU,OAAa,EAAK,OAAS,EAAK,EAAO,GAC5D,UAAW,CAMhB,OALI,GAAO,UACP,EAAQ,GACR,EAAS,GAAU,EAAK,OAAS,EAAO,GACxC,EAAQ,MAAM,GAEX,EAAE,EAAQ,GACf,EAAM,GAAS,EAAK,EAAQ,GAE9B,EAAQ,GAER,OADI,GAAY,MAAM,EAAQ,GACvB,EAAE,EAAQ,GACf,EAAU,GAAS,EAAK,GAE1B,SAAU,GAAS,EAAU,GACtB,GAAM,EAAM,KAAM,IAI7B,GAAO,IAAQ,GCvBf,YAAkB,EAAM,EAAO,CAC7B,MAAO,IAAY,GAAS,EAAM,EAAO,IAAW,EAAO,IAG7D,GAAO,IAAQ,GCff,GAAI,IAAmB,iBA4BvB,YAAkB,EAAO,CACvB,MAAO,OAAO,IAAS,UACrB,EAAQ,IAAM,EAAQ,GAAK,GAAK,GAAS,GAG7C,GAAO,IAAQ,GCNf,YAAqB,EAAO,CAC1B,MAAO,IAAS,MAAQ,GAAS,EAAM,SAAW,CAAC,GAAW,GAGhE,GAAO,IAAQ,GCjBf,YAAwB,EAAO,EAAO,EAAQ,CAC5C,GAAI,CAAC,GAAS,GACZ,MAAO,GAET,GAAI,GAAO,MAAO,GAClB,MAAI,IAAQ,SACH,GAAY,IAAW,GAAQ,EAAO,EAAO,QAC7C,GAAQ,UAAY,IAAS,IAE7B,GAAG,EAAO,GAAQ,GAEpB,GAGT,GAAO,IAAQ,GCnBf,YAAwB,EAAU,CAChC,MAAO,IAAS,SAAS,EAAQ,EAAS,CACxC,GAAI,GAAQ,GACR,EAAS,EAAQ,OACjB,EAAa,EAAS,EAAI,EAAQ,EAAS,GAAK,OAChD,EAAQ,EAAS,EAAI,EAAQ,GAAK,OAWtC,IATA,EAAc,EAAS,OAAS,GAAK,MAAO,IAAc,WACrD,KAAU,GACX,OAEA,GAAS,GAAe,EAAQ,GAAI,EAAQ,GAAI,IAClD,GAAa,EAAS,EAAI,OAAY,EACtC,EAAS,GAEX,EAAS,OAAO,GACT,EAAE,EAAQ,GAAQ,CACvB,GAAI,GAAS,EAAQ,GACrB,AAAI,GACF,EAAS,EAAQ,EAAQ,EAAO,GAGpC,MAAO,KAIX,GAAO,IAAQ,GCnCf,GAAI,IAAc,OAAO,UASzB,YAAqB,EAAO,CAC1B,GAAI,GAAO,GAAS,EAAM,YACtB,EAAS,MAAO,IAAQ,YAAc,EAAK,WAAc,GAE7D,MAAO,KAAU,EAGnB,GAAO,IAAQ,GCRf,YAAmB,EAAG,EAAU,CAI9B,OAHI,GAAQ,GACR,EAAS,MAAM,GAEZ,EAAE,EAAQ,GACf,EAAO,GAAS,EAAS,GAE3B,MAAO,GAGT,GAAO,IAAQ,GCff,GAAI,IAAU,qBASd,YAAyB,EAAO,CAC9B,MAAO,IAAa,IAAU,GAAW,IAAU,GAGrD,GAAO,IAAQ,GCbf,GAAI,IAAc,OAAO,UAGrB,GAAiB,GAAY,eAG7B,GAAuB,GAAY,qBAoBnC,GAAc,GAAgB,UAAW,CAAE,MAAO,eAAkB,GAAkB,SAAS,EAAO,CACxG,MAAO,IAAa,IAAU,GAAe,KAAK,EAAO,WACvD,CAAC,GAAqB,KAAK,EAAO,WAG/B,GAAQ,GCtBf,aAAqB,CACnB,MAAO,GAGT,GAAO,IAAQ,GCbf,GAAI,IAAc,MAAO,UAAW,UAAY,SAAW,CAAC,QAAQ,UAAY,QAG5E,GAAa,IAAe,MAAO,SAAU,UAAY,QAAU,CAAC,OAAO,UAAY,OAGvF,GAAgB,IAAc,GAAW,UAAY,GAGrD,GAAS,GAAgB,GAAK,OAAS,OAGvC,GAAiB,GAAS,GAAO,SAAW,OAmB5C,GAAW,IAAkB,GAE1B,GAAQ,GChCf,GAAI,IAAU,qBACV,GAAW,iBACX,GAAU,mBACV,GAAU,gBACV,GAAW,iBACX,GAAU,oBACV,GAAS,eACT,GAAY,kBACZ,GAAY,kBACZ,GAAY,kBACZ,GAAS,eACT,GAAY,kBACZ,GAAa,mBAEb,GAAiB,uBACjB,GAAc,oBACd,GAAa,wBACb,GAAa,wBACb,GAAU,qBACV,GAAW,sBACX,GAAW,sBACX,GAAW,sBACX,GAAkB,6BAClB,GAAY,uBACZ,GAAY,uBAGZ,EAAiB,GACrB,EAAe,IAAc,EAAe,IAC5C,EAAe,IAAW,EAAe,IACzC,EAAe,IAAY,EAAe,IAC1C,EAAe,IAAmB,EAAe,IACjD,EAAe,IAAa,GAC5B,EAAe,IAAW,EAAe,IACzC,EAAe,IAAkB,EAAe,IAChD,EAAe,IAAe,EAAe,IAC7C,EAAe,IAAY,EAAe,IAC1C,EAAe,IAAU,EAAe,IACxC,EAAe,IAAa,EAAe,IAC3C,EAAe,IAAU,EAAe,IACxC,EAAe,IAAc,GAS7B,YAA0B,EAAO,CAC/B,MAAO,IAAa,IAClB,GAAS,EAAM,SAAW,CAAC,CAAC,EAAe,GAAW,IAG1D,GAAO,IAAQ,GCpDf,YAAmB,EAAM,CACvB,MAAO,UAAS,EAAO,CACrB,MAAO,GAAK,IAIhB,GAAO,IAAQ,GCVf,GAAI,IAAc,MAAO,UAAW,UAAY,SAAW,CAAC,QAAQ,UAAY,QAG5E,GAAa,IAAe,MAAO,SAAU,UAAY,QAAU,CAAC,OAAO,UAAY,OAGvF,GAAgB,IAAc,GAAW,UAAY,GAGrD,GAAc,IAAiB,GAAW,QAG1C,GAAY,UAAW,CACzB,GAAI,CAEF,GAAI,GAAQ,IAAc,GAAW,SAAW,GAAW,QAAQ,QAAQ,MAE3E,MAAI,IAKG,IAAe,GAAY,SAAW,GAAY,QAAQ,cAC1D,EAAP,MAGG,GAAQ,GCxBf,GAAI,IAAmB,IAAY,GAAS,aAmBxC,GAAe,GAAmB,GAAU,IAAoB,GAE7D,GAAQ,GClBf,GAAI,IAAc,OAAO,UAGrB,GAAiB,GAAY,eAUjC,YAAuB,EAAO,EAAW,CACvC,GAAI,GAAQ,GAAQ,GAChB,EAAQ,CAAC,GAAS,GAAY,GAC9B,EAAS,CAAC,GAAS,CAAC,GAAS,GAAS,GACtC,EAAS,CAAC,GAAS,CAAC,GAAS,CAAC,GAAU,GAAa,GACrD,EAAc,GAAS,GAAS,GAAU,EAC1C,EAAS,EAAc,GAAU,EAAM,OAAQ,QAAU,GACzD,EAAS,EAAO,OAEpB,OAAS,KAAO,GACd,AAAK,IAAa,GAAe,KAAK,EAAO,KACzC,CAAE,IAEC,IAAO,UAEN,GAAW,IAAO,UAAY,GAAO,WAErC,GAAW,IAAO,UAAY,GAAO,cAAgB,GAAO,eAE7D,GAAQ,EAAK,MAElB,EAAO,KAAK,GAGhB,MAAO,GAGT,GAAO,IAAQ,GCxCf,YAAiB,EAAM,EAAW,CAChC,MAAO,UAAS,EAAK,CACnB,MAAO,GAAK,EAAU,KAI1B,GAAO,IAAQ,GCLf,YAAsB,EAAQ,CAC5B,GAAI,GAAS,GACb,GAAI,GAAU,KACZ,OAAS,KAAO,QAAO,GACrB,EAAO,KAAK,GAGhB,MAAO,GAGT,GAAO,IAAQ,GCdf,GAAI,IAAc,OAAO,UAGrB,GAAiB,GAAY,eASjC,YAAoB,EAAQ,CAC1B,GAAI,CAAC,GAAS,GACZ,MAAO,IAAa,GAEtB,GAAI,GAAU,GAAY,GACtB,EAAS,GAEb,OAAS,KAAO,GACd,AAAM,GAAO,eAAkB,IAAW,CAAC,GAAe,KAAK,EAAQ,KACrE,EAAO,KAAK,GAGhB,MAAO,GAGT,GAAO,IAAQ,GCLf,YAAgB,EAAQ,CACtB,MAAO,IAAY,GAAU,GAAc,EAAQ,IAAQ,GAAW,GAGxE,GAAO,IAAQ,GC5Bf,GAAI,IAAe,GAAU,OAAQ,UAE9B,GAAQ,GCIf,aAAqB,CACnB,KAAK,SAAW,GAAe,GAAa,MAAQ,GACpD,KAAK,KAAO,EAGd,GAAO,IAAQ,GCJf,YAAoB,EAAK,CACvB,GAAI,GAAS,KAAK,IAAI,IAAQ,MAAO,MAAK,SAAS,GACnD,YAAK,MAAQ,EAAS,EAAI,EACnB,EAGT,GAAO,IAAQ,GCbf,GAAI,IAAiB,4BAGjB,GAAc,OAAO,UAGrB,GAAiB,GAAY,eAWjC,YAAiB,EAAK,CACpB,GAAI,GAAO,KAAK,SAChB,GAAI,GAAc,CAChB,GAAI,GAAS,EAAK,GAClB,MAAO,KAAW,GAAiB,OAAY,EAEjD,MAAO,IAAe,KAAK,EAAM,GAAO,EAAK,GAAO,OAGtD,GAAO,IAAQ,GC1Bf,GAAI,IAAc,OAAO,UAGrB,GAAiB,GAAY,eAWjC,YAAiB,EAAK,CACpB,GAAI,GAAO,KAAK,SAChB,MAAO,IAAgB,EAAK,KAAS,OAAa,GAAe,KAAK,EAAM,GAG9E,GAAO,IAAQ,GCnBf,GAAI,IAAiB,4BAYrB,YAAiB,EAAK,EAAO,CAC3B,GAAI,GAAO,KAAK,SAChB,YAAK,MAAQ,KAAK,IAAI,GAAO,EAAI,EACjC,EAAK,GAAQ,IAAgB,IAAU,OAAa,GAAiB,EAC9D,KAGT,GAAO,IAAQ,GCTf,YAAc,EAAS,CACrB,GAAI,GAAQ,GACR,EAAS,GAAW,KAAO,EAAI,EAAQ,OAG3C,IADA,KAAK,QACE,EAAE,EAAQ,GAAQ,CACvB,GAAI,GAAQ,EAAQ,GACpB,KAAK,IAAI,EAAM,GAAI,EAAM,KAK7B,GAAK,UAAU,MAAQ,GACvB,GAAK,UAAU,OAAY,GAC3B,GAAK,UAAU,IAAM,GACrB,GAAK,UAAU,IAAM,GACrB,GAAK,UAAU,IAAM,GAErB,GAAO,IAAQ,GCxBf,aAA0B,CACxB,KAAK,SAAW,GAChB,KAAK,KAAO,EAGd,GAAO,IAAQ,GCFf,YAAsB,EAAO,EAAK,CAEhC,OADI,GAAS,EAAM,OACZ,KACL,GAAI,GAAG,EAAM,GAAQ,GAAI,GACvB,MAAO,GAGX,MAAO,GAGT,GAAO,IAAQ,GCjBf,GAAI,IAAa,MAAM,UAGnB,GAAS,GAAW,OAWxB,YAAyB,EAAK,CAC5B,GAAI,GAAO,KAAK,SACZ,EAAQ,GAAa,EAAM,GAE/B,GAAI,EAAQ,EACV,MAAO,GAET,GAAI,GAAY,EAAK,OAAS,EAC9B,MAAI,IAAS,EACX,EAAK,MAEL,GAAO,KAAK,EAAM,EAAO,GAE3B,EAAE,KAAK,KACA,GAGT,GAAO,IAAQ,GCvBf,YAAsB,EAAK,CACzB,GAAI,GAAO,KAAK,SACZ,EAAQ,GAAa,EAAM,GAE/B,MAAO,GAAQ,EAAI,OAAY,EAAK,GAAO,GAG7C,GAAO,IAAQ,GCPf,YAAsB,EAAK,CACzB,MAAO,IAAa,KAAK,SAAU,GAAO,GAG5C,GAAO,IAAQ,GCHf,YAAsB,EAAK,EAAO,CAChC,GAAI,GAAO,KAAK,SACZ,EAAQ,GAAa,EAAM,GAE/B,MAAI,GAAQ,EACV,GAAE,KAAK,KACP,EAAK,KAAK,CAAC,EAAK,KAEhB,EAAK,GAAO,GAAK,EAEZ,KAGT,GAAO,IAAQ,GCZf,YAAmB,EAAS,CAC1B,GAAI,GAAQ,GACR,EAAS,GAAW,KAAO,EAAI,EAAQ,OAG3C,IADA,KAAK,QACE,EAAE,EAAQ,GAAQ,CACvB,GAAI,GAAQ,EAAQ,GACpB,KAAK,IAAI,EAAM,GAAI,EAAM,KAK7B,GAAU,UAAU,MAAQ,GAC5B,GAAU,UAAU,OAAY,GAChC,GAAU,UAAU,IAAM,GAC1B,GAAU,UAAU,IAAM,GAC1B,GAAU,UAAU,IAAM,GAE1B,GAAO,IAAQ,GC3Bf,GAAI,IAAM,GAAU,GAAM,OAEnB,GAAQ,GCKf,aAAyB,CACvB,KAAK,KAAO,EACZ,KAAK,SAAW,CACd,KAAQ,GAAI,IACZ,IAAO,GAAK,KAAO,IACnB,OAAU,GAAI,KAIlB,GAAO,IAAQ,GCbf,YAAmB,EAAO,CACxB,GAAI,GAAO,MAAO,GAClB,MAAQ,IAAQ,UAAY,GAAQ,UAAY,GAAQ,UAAY,GAAQ,UACvE,IAAU,YACV,IAAU,KAGjB,GAAO,IAAQ,GCJf,YAAoB,EAAK,EAAK,CAC5B,GAAI,GAAO,EAAI,SACf,MAAO,IAAU,GACb,EAAK,MAAO,IAAO,SAAW,SAAW,QACzC,EAAK,IAGX,GAAO,IAAQ,GCNf,YAAwB,EAAK,CAC3B,GAAI,GAAS,GAAW,KAAM,GAAK,OAAU,GAC7C,YAAK,MAAQ,EAAS,EAAI,EACnB,EAGT,GAAO,IAAQ,GCNf,YAAqB,EAAK,CACxB,MAAO,IAAW,KAAM,GAAK,IAAI,GAGnC,GAAO,IAAQ,GCJf,YAAqB,EAAK,CACxB,MAAO,IAAW,KAAM,GAAK,IAAI,GAGnC,GAAO,IAAQ,GCHf,YAAqB,EAAK,EAAO,CAC/B,GAAI,GAAO,GAAW,KAAM,GACxB,EAAO,EAAK,KAEhB,SAAK,IAAI,EAAK,GACd,KAAK,MAAQ,EAAK,MAAQ,EAAO,EAAI,EAC9B,KAGT,GAAO,IAAQ,GCRf,YAAkB,EAAS,CACzB,GAAI,GAAQ,GACR,EAAS,GAAW,KAAO,EAAI,EAAQ,OAG3C,IADA,KAAK,QACE,EAAE,EAAQ,GAAQ,CACvB,GAAI,GAAQ,EAAQ,GACpB,KAAK,IAAI,EAAM,GAAI,EAAM,KAK7B,GAAS,UAAU,MAAQ,GAC3B,GAAS,UAAU,OAAY,GAC/B,GAAS,UAAU,IAAM,GACzB,GAAS,UAAU,IAAM,GACzB,GAAS,UAAU,IAAM,GAEzB,GAAO,IAAQ,GC5Bf,GAAI,IAAe,GAAQ,OAAO,eAAgB,QAE3C,GAAQ,GCAf,GAAI,IAAY,kBAGZ,GAAY,SAAS,UACrB,GAAc,OAAO,UAGrB,GAAe,GAAU,SAGzB,GAAiB,GAAY,eAG7B,GAAmB,GAAa,KAAK,QA8BzC,YAAuB,EAAO,CAC5B,GAAI,CAAC,GAAa,IAAU,GAAW,IAAU,GAC/C,MAAO,GAET,GAAI,GAAQ,GAAa,GACzB,GAAI,IAAU,KACZ,MAAO,GAET,GAAI,GAAO,GAAe,KAAK,EAAO,gBAAkB,EAAM,YAC9D,MAAO,OAAO,IAAQ,YAAc,YAAgB,IAClD,GAAa,KAAK,IAAS,GAG/B,GAAO,IAAQ,GCpDf,aAAsB,CACpB,KAAK,SAAW,GAAI,IACpB,KAAK,KAAO,EAGd,GAAO,IAAQ,GCLf,YAAqB,EAAK,CACxB,GAAI,GAAO,KAAK,SACZ,EAAS,EAAK,OAAU,GAE5B,YAAK,KAAO,EAAK,KACV,EAGT,GAAO,IAAQ,GCRf,YAAkB,EAAK,CACrB,MAAO,MAAK,SAAS,IAAI,GAG3B,GAAO,IAAQ,GCJf,YAAkB,EAAK,CACrB,MAAO,MAAK,SAAS,IAAI,GAG3B,GAAO,IAAQ,GCRf,GAAI,IAAmB,IAYvB,YAAkB,EAAK,EAAO,CAC5B,GAAI,GAAO,KAAK,SAChB,GAAI,YAAgB,IAAW,CAC7B,GAAI,GAAQ,EAAK,SACjB,GAAI,CAAC,IAAQ,EAAM,OAAS,GAAmB,EAC7C,SAAM,KAAK,CAAC,EAAK,IACjB,KAAK,KAAO,EAAE,EAAK,KACZ,KAET,EAAO,KAAK,SAAW,GAAI,IAAS,GAEtC,SAAK,IAAI,EAAK,GACd,KAAK,KAAO,EAAK,KACV,KAGT,GAAO,IAAQ,GCnBf,YAAe,EAAS,CACtB,GAAI,GAAO,KAAK,SAAW,GAAI,IAAU,GACzC,KAAK,KAAO,EAAK,KAInB,GAAM,UAAU,MAAQ,GACxB,GAAM,UAAU,OAAY,GAC5B,GAAM,UAAU,IAAM,GACtB,GAAM,UAAU,IAAM,GACtB,GAAM,UAAU,IAAM,GAEtB,GAAO,IAAQ,GCvBf,GAAI,IAAc,MAAO,UAAW,UAAY,SAAW,CAAC,QAAQ,UAAY,QAG5E,GAAa,IAAe,MAAO,SAAU,UAAY,QAAU,CAAC,OAAO,UAAY,OAGvF,GAAgB,IAAc,GAAW,UAAY,GAGrD,GAAS,GAAgB,GAAK,OAAS,OACvC,GAAc,GAAS,GAAO,YAAc,OAUhD,YAAqB,EAAQ,EAAQ,CACnC,GAAI,EACF,MAAO,GAAO,QAEhB,GAAI,GAAS,EAAO,OAChB,EAAS,GAAc,GAAY,GAAU,GAAI,GAAO,YAAY,GAExE,SAAO,KAAK,GACL,EAGT,GAAO,IAAQ,GC/Bf,GAAI,IAAa,GAAK,WAEf,GAAQ,GCIf,YAA0B,EAAa,CACrC,GAAI,GAAS,GAAI,GAAY,YAAY,EAAY,YACrD,UAAI,IAAW,GAAQ,IAAI,GAAI,IAAW,IACnC,EAGT,GAAO,IAAQ,GCLf,YAAyB,EAAY,EAAQ,CAC3C,GAAI,GAAS,EAAS,GAAiB,EAAW,QAAU,EAAW,OACvE,MAAO,IAAI,GAAW,YAAY,EAAQ,EAAW,WAAY,EAAW,QAG9E,GAAO,IAAQ,GCJf,YAAyB,EAAQ,CAC/B,MAAQ,OAAO,GAAO,aAAe,YAAc,CAAC,GAAY,GAC5D,GAAW,GAAa,IACxB,GAGN,GAAO,IAAQ,GCVf,YAAuB,EAAW,CAChC,MAAO,UAAS,EAAQ,EAAU,EAAU,CAM1C,OALI,GAAQ,GACR,EAAW,OAAO,GAClB,EAAQ,EAAS,GACjB,EAAS,EAAM,OAEZ,KAAU,CACf,GAAI,GAAM,EAAM,EAAY,EAAS,EAAE,GACvC,GAAI,EAAS,EAAS,GAAM,EAAK,KAAc,GAC7C,MAGJ,MAAO,IAIX,GAAO,IAAQ,GCXf,GAAI,IAAU,KAEP,GAAQ,GCHf,YAA0B,EAAQ,EAAK,EAAO,CAC5C,AAAK,KAAU,QAAa,CAAC,GAAG,EAAO,GAAM,IACxC,IAAU,QAAa,CAAE,KAAO,MACnC,GAAgB,EAAQ,EAAK,GAIjC,GAAO,IAAQ,GCSf,YAA2B,EAAO,CAChC,MAAO,IAAa,IAAU,GAAY,GAG5C,GAAO,IAAQ,GCxBf,YAAiB,EAAQ,EAAK,CAC5B,GAAI,MAAQ,eAAiB,MAAO,GAAO,IAAS,aAIhD,GAAO,YAIX,MAAO,GAAO,GAGhB,GAAO,IAAQ,GCOf,YAAuB,EAAO,CAC5B,MAAO,IAAW,EAAO,GAAO,IAGlC,GAAO,IAAQ,GCAf,YAAuB,EAAQ,EAAQ,EAAK,EAAU,EAAW,EAAY,EAAO,CAClF,GAAI,GAAW,GAAQ,EAAQ,GAC3B,EAAW,GAAQ,EAAQ,GAC3B,EAAU,EAAM,IAAI,GAExB,GAAI,EAAS,CACX,GAAiB,EAAQ,EAAK,GAC9B,OAEF,GAAI,GAAW,EACX,EAAW,EAAU,EAAW,EAAM,GAAK,EAAQ,EAAQ,GAC3D,OAEA,EAAW,IAAa,OAE5B,GAAI,EAAU,CACZ,GAAI,GAAQ,GAAQ,GAChB,EAAS,CAAC,GAAS,GAAS,GAC5B,EAAU,CAAC,GAAS,CAAC,GAAU,GAAa,GAEhD,EAAW,EACX,AAAI,GAAS,GAAU,EACrB,AAAI,GAAQ,GACV,EAAW,EAER,AAAI,GAAkB,GACzB,EAAW,GAAU,GAElB,AAAI,EACP,GAAW,GACX,EAAW,GAAY,EAAU,KAE9B,AAAI,EACP,GAAW,GACX,EAAW,GAAgB,EAAU,KAGrC,EAAW,GAGV,AAAI,GAAc,IAAa,GAAY,GAC9C,GAAW,EACX,AAAI,GAAY,GACd,EAAW,GAAc,GAElB,EAAC,GAAS,IAAa,GAAW,KACzC,GAAW,GAAgB,KAI7B,EAAW,GAGf,AAAI,GAEF,GAAM,IAAI,EAAU,GACpB,EAAU,EAAU,EAAU,EAAU,EAAY,GACpD,EAAM,OAAU,IAElB,GAAiB,EAAQ,EAAK,GAGhC,GAAO,IAAQ,GC1Ef,YAAmB,EAAQ,EAAQ,EAAU,EAAY,EAAO,CAC9D,AAAI,IAAW,GAGf,GAAQ,EAAQ,SAAS,EAAU,EAAK,CAEtC,GADA,GAAU,GAAQ,GAAI,KAClB,GAAS,GACX,GAAc,EAAQ,EAAQ,EAAK,EAAU,GAAW,EAAY,OAEjE,CACH,GAAI,GAAW,EACX,EAAW,GAAQ,EAAQ,GAAM,EAAW,EAAM,GAAK,EAAQ,EAAQ,GACvE,OAEJ,AAAI,IAAa,QACf,GAAW,GAEb,GAAiB,EAAQ,EAAK,KAE/B,IAGL,GAAO,IAAQ,GCPf,GAAI,IAAQ,GAAe,SAAS,EAAQ,EAAQ,EAAU,CAC5D,GAAU,EAAQ,EAAQ,KAGrB,GAAQ,GCtCf,upDjGQA,OAAuB,QkGRvB,OAAqC,QACrC,GAAiB,mBCeV,YACL,EACA,EACA,EAA+C,AAAC,GAAM,EAC3C,CACX,MAAO,GAAI,OACT,CAAC,EAAK,EAAM,EAAO,IACjB,EAAI,IAAI,EAAI,EAAM,EAAO,GAAM,EAAI,EAAM,EAAO,IAClD,GAAI,MCnBD,YACL,EACA,EACQ,CACR,MAAK,GAGD,EAAU,SAAS,GACd,EAEF,EAAY,OAAS,EALnB,ECVX,OAAiB,mBAeV,YAIL,EACA,EACqD,CACrD,GAAM,GAAM,EAAU,GACtB,WAAW,EAA6B,CACtC,GAAI,EACF,MAAO,GAET,GAAM,GAAS,WAAK,QAAQ,GAC5B,MAAI,KAAW,EACN,KAEF,GAAW,EAAQ,GAG5B,MAAO,aAAe,SAAU,EAAI,KAAK,GAAM,EAAE,GChCnD,GAAK,IAAL,UAAK,EAAL,CACE,SAAS,SACT,MAAM,MACN,UAAU,UACV,SAAS,SACT,UAAU,YALP,aAQL,YAAa,CAGX,YACkB,EACA,EAChB,CAFgB,YACA,YAEhB,KAAK,KAAO,EACZ,KAAK,KAAO,IAPA,GADhB,GACgB,OAAO,IAchB,YAAgD,CAmDrD,YAA6B,EAAU,CAAV,iBAlDtB,QACL,EACA,EACA,EACY,CACZ,MAAO,GAAI,OACT,CAAC,EAAiB,EAA0B,IAC1C,EAAI,KAAK,AAAC,GAAM,EAAG,EAAG,EAAM,IAC9B,QAAQ,QAAQ,UAIb,KACL,EACA,EACc,CACd,MAAO,SAAQ,IAAI,EAAI,IAAI,CAAC,EAAM,IAAU,EAAG,EAAM,iBAG1C,QACX,EACA,EACc,CACd,GAAM,GAAW,GACjB,YAAM,IAAW,IAAI,EAAK,MAAO,EAAM,IAAU,CAC/C,AAAI,KAAM,GAAG,EAAM,IACjB,EAAI,KAAK,KAGN,cAGI,SACX,EACA,EACc,CACd,MACE,MAAM,SAAQ,IAAI,EAAI,IAAI,CAAC,EAAM,IAAU,EAAG,EAAM,MACpD,QAAQ,AAAC,GAAM,eAGN,SACX,EACA,EACe,CACf,KAAM,IAAW,IAAI,EAAK,GAGpB,MAAkB,GAI1B,IAAO,EAA2D,CAChE,YAAK,MAAM,KAAK,GAAI,IAAO,GAAe,IAAK,CAAC,KACzC,KAGT,QAAW,EAA6D,CACtE,YAAK,MAAM,KAAK,GAAI,IAAO,GAAe,QAAS,CAAC,KAC7C,KAGT,OAAO,EAAwD,CAC7D,YAAK,MAAM,KAAK,GAAI,IAAO,GAAe,OAAQ,CAAC,KAC5C,UAGH,SAAW,EAA2D,CAC1E,KAAK,MAAM,KAAK,GAAI,IAAO,GAAe,IAAK,CAAC,KAChD,KAAM,MAGR,KACE,EAIA,EAIkC,CAClC,GAAM,GAAM,KAAK,QACjB,SACG,KAAK,AAAC,GACL,IAAW,EAAQ,GACZ,IAER,MAAM,AAAC,GAAM,CACZ,SAAU,EAAO,GACX,IAEH,OAGK,QAAsB,CAClC,GAAI,GAAM,KAAK,IACf,OAAW,KAAQ,MAAK,MACtB,OAAQ,EAAK,UACN,IAAe,OAClB,EAAM,KAAM,IAAW,OAAO,EAAK,EAAK,KAAK,IAC7C,UACG,IAAe,IAClB,EAAM,KAAM,IAAW,IAAI,EAAK,EAAK,KAAK,IAC1C,UACG,IAAe,QAClB,EAAM,KAAM,IAAW,QAAQ,EAAK,EAAK,KAAK,IAC9C,UACG,IAAe,QAClB,KAAM,IAAW,QAAQ,EAAK,EAAK,KAAK,IACxC,WACG,IAAe,OAClB,MAAO,MAAM,IAAW,OAAO,EAAK,EAAK,KAAK,GAAI,EAAK,KAAK,IAGlE,MAAO,KJpIX,kBACE,EAAc,QAAQ,MACJ,CAClB,MAAO,MAAM,kBAAW,WAAK,QAAQ,EAAK,mBAO5C,kBACE,EAAc,QAAQ,MACJ,CAClB,MAAM,MAAM,IAAa,GAMlB,CAAC,CAAC,AAHK,MAAM,gBAClB,WAAK,QAAQ,EAAK,oBAEN,WALL,GAWX,kBACE,EAAc,QAAQ,MACJ,CAKlB,MAJI,CAAE,KAAM,IAAa,IAIrB,KAAM,IAAW,GACZ,GAED,KAAM,IAAW,WAAK,QAAQ,GAAM,MAAiB,KAQ/D,kBACE,EACA,EAAc,QAAQ,MACJ,CAClB,GAAI,CAAE,KAAM,IAAa,GACvB,MAAO,GAET,GAAM,GAAQ,KAAM,gBAClB,WAAK,QAAQ,EAAK,mBAEd,EAAM,GAAI,KACd,OAAO,KAAK,IAAK,EAAK,gBAAiB,EAAK,mBAE9C,MAAO,GAAK,MAAM,AAAC,GAAQ,EAAI,IAAI,IKjErC,OAAiB,mBAEV,QAAe,GAIJ,GAJX,GAIW,WAAW,WAAK,QAAQ,UAAW,OvGOrD,kBAAgC,EAAc,EAA6B,CACzE,GAAM,GAAkB,WAAK,QAAQ,EAAM,kBAC3C,KAAM,iBACJ,EACA,GAAM,KAAM,gBAAS,GAAkB,GACvC,CACE,OAAQ,IAsBP,YAAkB,CACvB,YAA6B,EAAc,CAAd,YACrB,YAA4B,CAClC,CACE,KAAM,aACN,QAAS,SAAY,CACnB,GAAM,GAAU,WAAK,QAAQ,KAAK,KAAM,kBAClC,EAAY,WAAK,QAAQ,KAAK,KAAM,cACpC,EAAW,KAAM,gBAAS,GAC1B,EAAY,KAAM,gBAAS,GACjC,EAAU,SAAW,EAAQ,WAC7B,KAAM,iBAAU,EAAW,EAAW,CACpC,OAAQ,KAGZ,KAAM,IAER,CACE,KAAM,WACN,QAAS,SAAY,CACnB,KAAM,IAAU,KAAK,KAAM,CACzB,SAAU,uCACV,gBAAiB,CACf,SAAU,SACV,uCAAwC,IAAI,GAAS,mBAIrD,OAAyB,CAC7B,MACG,MAAM,OACL,MAAM,OAAiB,CAAE,KAAM,SAIvC,CACE,KAAM,aACN,QAAS,SAAY,CACnB,KAAM,IAAU,KAAK,KAAM,CACzB,mBAAoB,CAClB,aAAc,6BAEhB,WAAY,CACV,QAAS,CAAC,2CAEZ,gBAAiB,CACf,kBAAmB,UACnB,yCAA0C,IAAI,GAAW,mBAIzD,OAAyB,CAC7B,MACG,MAAM,OACL,MAAM,OAAiB,CAAE,KAAM,SAIvC,CACE,KAAM,YACN,QAAS,SAAY,CACnB,GAAM,GAAgB,WAAK,QAAQ,KAAK,KAAM,cAC9C,KAAM,iBACJ,EACA,KAAM,gBACJ,WAAK,QAAQ,GAAS,SAAU,cAChC,YAKR,CACE,KAAM,YACN,QAAS,SAAY,CACnB,KAAM,IAAU,KAAK,KAAM,CACzB,aAAc,CACZ,QAAS,CAAC,iCAEZ,gBAAiB,CACf,+BAAgC,IAAI,GAAS,mBAI7C,OAAyB,CAC7B,MACG,MAAM,OACP,CAAE,KAAM,IAAa,CAAC,SACtB,CAAE,KAAM,IAAa,CAAC,YAI5B,CACE,KAAM,kBACN,QAAS,SAAY,CACnB,KAAM,IAAU,KAAK,KAAM,CACzB,aAAc,CACZ,QAAS,CAAC,uCAEZ,gBAAiB,CACf,qCAAsC,IAAI,GAAc,mBAIxD,OAAyB,CAC7B,MAAQ,MAAM,OAAoB,KAAM,IAAa,CAAC,YAG1D,CACE,KAAM,OACN,QAAS,SAAY,CACnB,KAAM,IAAU,KAAK,KAAM,CACzB,KAAM,CACJ,OAAQ,UACR,UAAW,CAAC,6CAMpB,CACE,KAAM,cACN,QAAS,SAAY,CACnB,GAAM,GAAO,KAAM,gBAAS,WAAK,QAAQ,KAAK,KAAM,mBAC9C,EAAuB,GAC7B,AAAI,EAAK,UACP,EAAW,KAAK,oBAEd,EAAK,cACP,EAAW,KAAK,gBAElB,GAAI,GAAS,CACX,QAAS,CACP,YAAa,GACX,GAAM,SAAS,YACf,yBAGJ,mBAAoB,CAClB,aAAc,oBAEhB,cAAe,CACb,4BAA6B,CAAC,GAAG,EAAY,YAE/C,gBAAiB,CACf,mBAAoB,SACpB,cAAe,YAGnB,AAAI,EAAK,YACP,GAAS,GAAM,EAAQ,CACrB,mBAAoB,CAClB,aAAc,gCAIpB,KAAM,IAAU,KAAK,KAAM,SAEvB,OAAyB,CAC7B,MACG,MAAM,OACL,MAAM,OAAiB,CAAE,KAAM,eAMnC,OAAsB,CAC1B,GAAM,CAAE,QAAU,KAAM,gBACtB,WAAK,QAAQ,KAAK,KAAM,iBAI1B,GAAI,CAAC,EACH,OAEF,GAAM,GAAc,KAAK,YAAY,OAAO,AAAC,GAC3C,EAAK,SAAS,EAAO,OAEvB,OAAW,KAAc,GACvB,KAAM,GAAW,eAIf,OAAsB,CAC1B,GAAM,GAAY,GAChB,KAAM,IAAW,OAAO,KAAK,YAAa,KAAO,IAC1C,EAAO,KAGL,KAAM,GAAO,OAFX,IAIX,AAAC,GAAS,EAAK,MAEX,EAAM,KAAM,cAEf,CACD,KAAM,cACN,QAAS,qEACT,KAAM,OACN,QAAS,CAAC,GAAG,EAAU,UAEzB,KAAM,IAAU,KAAK,KAAM,CACzB,KAAM,EAAI,SDpOT,GAAK,IAAL,UAAK,EAAL,CACL,MAAM,MACN,MAAM,QAFI,aAWL,YAAsB,MAIrB,UAAS,EAAuC,CACpD,GAAI,CAAC,EAAO,KAAM,CAChB,GAAM,CAAE,QAAS,KAAM,cAAyB,CAC9C,KAAM,OACN,KAAM,QACN,QAAS,uCACT,SAAS,EAAwB,CAC/B,MAAO,GAAM,SAAW,MAG5B,EAAO,KAAO,WAAK,QAAQ,GAE7B,GAAI,CAAC,EAAO,SAAU,CACpB,GAAM,CAAE,YAAa,KAAM,cAAuC,CAChE,KAAM,WACN,KAAM,OACN,QAAS,iCACT,QAAS,CACP,GAAiB,IACjB,GAAiB,OAGrB,EAAO,SAAW,EAUpB,GAAM,GAAU,WAAK,QACnB,GAAS,SACT,aAAa,EAAO,YAEhB,EAAW,WAAK,QAAQ,EAAO,MACrC,GACG,KAAM,kBAAW,IACjB,MAAM,eAAQ,IAAW,KAAK,AAAC,GAAS,kBAAW,IACpD,CACA,GAAM,CAAE,YAAa,KAAM,cAExB,CACD,KAAM,WACN,KAAM,UACN,QAAS,GACT,QAAS,uHAEX,GAAI,CAAC,EACH,OAOJ,GAJA,KAAM,cAAO,GACb,KAAM,YAAK,EAAS,GACpB,KAAM,IAAgB,kBAAkB,GACxC,KAAM,IAAgB,aAAa,GAC/B,EAAO,SAAU,CACnB,GAAM,GAAc,GAAI,IAAY,WAAK,QAAQ,EAAO,OACxD,KAAM,GAAY,OAClB,KAAM,GAAY,oBAIT,mBAAkB,EAAiC,CAC9D,GAAM,GAAU,WAAK,QAAQ,EAAU,gBACvC,KAAM,iBACJ,EACA,IACM,KAAM,gBAAS,GACnB,KAAM,WAAK,SAAS,IAEtB,CACE,OAAQ,gBAKD,cAAa,EAAiC,CACzD,GAAM,GAAa,WAAK,QAAQ,EAAU,aACtC,EAAa,KAAM,gBAAS,EAAY,SAC5C,EAAa,EAAW,QAAQ,WAAY,WAAK,SAAS,IAC1D,KAAM,iBAAU,EAAY,KDzGhC,GAAM,IAAkB,GAAI,IAEtB,GAAiB,GAAI,WAAO,wBAAyB,4BAAQ,QAAQ,CACzE,GAAiB,IACjB,GAAiB,MAEnB,GAAe,SAAW,GAEnB,GAAM,IAAkB,GAAI,cAChC,QAAQ,mBACR,YAAY,oDACZ,UAAU,IACV,OAAO,MAAO,EAAM,IAA8C,CACjE,KAAM,IAAgB,SAAS,IAC1B,EACH,KAAM,EACN,SAAU,O0GvBhB,OAAwB,QAGxB,GAAM,IAAc,GAAI,IAAY,QAAQ,OAC/B,GAAc,GAAI,YAAQ,QACpC,YAAY,4BACZ,OAAO,SAAY,CAClB,KAAM,IAAY,SAEnB,WACC,GAAI,YAAQ,QAAQ,YAAY,8CAAW,OAAO,SAAY,CAC5D,KAAM,IAAY,OAClB,KAAM,IAAY,U/GPxB,GAAM,IAAO,GAAI,YACjB,GACG,WAAW,IACX,WAAW,IACX,WAAW,IACX",
6
+ "names": []
7
+ }