@nsshunt/stsrunnerframework 1.0.151 → 1.0.152
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stsrunnerframework.umd.js","sources":["../src/commonTypes.ts","../node_modules/detect-node/index.esm.js","../node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/ansi-styles/index.js","../node_modules/supports-color/browser.js","../node_modules/chalk/source/util.js","../node_modules/chalk/source/templates.js","../node_modules/chalk/source/index.js","../src/workerInstance.ts","../src/telemetryProcessor.ts","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/workerManager.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\n\nimport { Worker, MessagePort } from 'node:worker_threads';\n\nimport { PublishInstrumentController, IContextBase } from '@nsshunt/stsobservability'\n\nimport { ISTSLogger } from '@nsshunt/stsutils';\n\nexport interface IAsyncRunnerContext extends IContextBase {\n\tid: string\n\thostName: string\n\tagentName: string\n\tthreadId: string\n\t//@@ asyncRunnerId: number ??\n}\n\n/**\n * Inter-Worker (IW) Payload context base.\n */\nexport interface IIWMessagePayloadContentBase {\n messageId: string\n}\n\n/**\n * Inter-Worker (IW) message commands.\n */\nexport enum eIWMessageCommands {\n\tInstrumentTelemetry ='__STS__InstrumentTelemetry', // Used to send instrument telemetry\n\n\tMessagePort = '__STS__MessagePort',\n\tMessagePortResponse = '__STS__MessagePortResponse',\n\n\tAddRunner = '__STS__AddRunner',\n\tAddRunnerResponse = '__STS__AddRunnerResponse',\n\n\tStartRunner = '__STS__StartRunner',\n\tStartRunnerResponse = '__STS__StartRunnerResponse',\n\n\tStopRunner = '__STS__StopRunner',\n\tStopRunnerResponse = '__STS__StopRunnerResponse',\n\n\tPauseRunner = '__STS__PauseRunner',\n\tPauseRunnerResponse = '__STS__PauseRunnerResult',\n\n\tResumeRunner = '__STS__ResumeRunner',\n\tResumeRunnerResponse = '__STS__ResumeRunnerResponse',\n\n\tResetRunner = '__STS__ResetRunner',\n\tResetRunnerResponse = '__STS__ResetRunnerResponse',\n\n\tExecuteRunner = '__STS__ExecuteRunner',\n\tExecuteRunnerResponse = '__STS__ExecuteRunnerResponse',\n\n\tCompleted = '__STS__Completed',\n\n\tUpdateRunner = '__STS__UpdateRunner',\n\tUpdateRunnerResponse = '__STS__UpdateRunnerResponse',\n\n\tTerminateRunner = '__STS__TerminateRunner',\n\tTerminateRunnerResponse = '__STS__TerminateRunnerResponse',\n\n\tRunnerStateChange = '__STS__RunnerStateChange',\n\n\tGetRunners = '__STS__GetRunners',\n\tGetRunnersResponse = '__STS__GetRunnersResponse'\n}\n\n/**\n * Inter-Worker (IW) message command.\n */\nexport type IIWMessageCommand = eIWMessageCommands\n\n/**\n * Inter-Worker (IW) message payload.\n */\nexport interface IIWMessagePayload {\n command: IIWMessageCommand\n payload: IIWMessagePayloadContentBase\n}\n\nexport interface ISTSAgentWorkerMessagePort extends IIWMessagePayloadContentBase {\n port: MessagePort\n options: IWorkerOptions\n\tworkerId: string\n}\n\nexport interface ISTSGetRunnersPayload extends IIWMessagePayloadContentBase {\n\tworkerId: string\n\trunners: IRunner[]\n}\n\nexport enum IRunnerState {\n\tcreated = 'created',\n\trunning = 'running',\n\tpaused = 'paused',\n\tcompleted = 'completed',\n\tstopped = 'stopped',\n\tterminated = 'terminated',\n\terror = 'error'\n}\n\nexport interface IRunnerTelemetry {\n\trequestCount: number // requestCount\n\terrorCount: number\n\tretryCount: number\n\tauthenticationCount: number\n\tauthenticationErrorCount: number\n\tauthenticationRetryCount: number\n\tvelocity: number\n\tcoreCount: number\n\ttimer: number\n\tduration: number\n\tlatency: number\n\tactiveRequestCount: number\n\tmessage: string[]\n\tchildCount: number\n\trx: number\n\ttx: number\n}\n\nexport interface IRunnerHistoryRecord {\n\teventDate: Date\n\trunner: IRunner\n}\n\nexport interface IRunnerPlan {\n\tid: string // Unique ID for this plan (uuidv4)\n\tplan: string // Human readable plan name (for drop-down, select lists, logging, etc.)\n\tplanInstanceId: string // unique instance ID (uuidv4) for this runner being exected within a plan\n\tstage: number // 0 based stage number within a plans execution\n\tplanVU: number // The plan virtual user identifer. When a plan executed, the VU number will start from 0 and increase as VUs are added.\n}\n\nexport interface IRunner {\n\tget id(): string\n\tget workerId(): string\n\tget workerManagerId(): string\n\tstate: IRunnerState\n\titeration: number\n\tget asyncRunnerContext(): IAsyncRunnerContext\n\tget options(): IRunnerOptions\n\tset options(options: IRunnerOptions)\n\tget instrumentData(): IRunnerTelemetry\n\tset instrumentData(newRunnerTelemetry: IRunnerTelemetry)\n\trunnerHistory?: IRunnerHistoryRecord[]\n}\n\nexport interface IRunnerEx extends IRunner {\n Start: () => Promise<IExecuteRunnerActionResult> // Start runner iterations\n\tStop: () => Promise<IExecuteRunnerActionResult> // Stop iteration processing and keep the current iteration number. Currently, this is the same as Pause.\n Pause: () => Promise<IExecuteRunnerActionResult> // Pause iteration processing and keep the current iteration number.\n Resume: () => Promise<IExecuteRunnerActionResult> // Resume iteration processing from the previously paused iteration number.\n\tTerminate: () => Promise<IExecuteRunnerActionResult> // Stop the runner iterations and terminate the instance, stop any instrument publishers.\n\tReset: () => Promise<IExecuteRunnerActionResult> // Stop the current iterations and reset the iteration count back to 0.\n\tExecute: () => Promise<IExecuteRunnerActionResult> // Execute a single iteration for this test.\n\tUpdate: (executionProfile: IExecutionProfile) => Promise<IExecuteRunnerActionResult>\n\ton: (eventName: string, cb: (args?: any) => void) => IRunnerEx // Register event handler.\n\tpublishInstrumentController?: PublishInstrumentController\n\tarchived: boolean\n}\n\nexport interface IRunnerInstance {\n\tStartRunner: () => Promise<any>\n\tStopRunner: () => Promise<any>\n\tPauseRunner: () => Promise<any>\n\tResumeRunner: () => Promise<any>\n\tTerminateRunner: () => Promise<any>\n\tResetRunner: () => Promise<any>\n\tExecuteRunner: () => Promise<any> // Execute a single iteration for this test\n\tUpdateRunner: () => Promise<any>\n\tCompleted: () => Promise<any>\n}\n\nexport enum IWorkerState {\n\tstarting = 'starting', // worker is starting up (very short state transition from this to started)\n\tstarted = 'started', // worker has been started and is currently running\n\tstopped = 'stopped', // workers has been stopped\n\tpaused = 'paused', // worker has been paused\n\terror = 'error' // worker has stopped in an error state\n}\n \nexport interface IWorkerOptions {\n hostName: string\n agentId: string\n userAgent: string\n\tmocked: boolean // true if this worker is mocked (i.e. in the same thread as the running thread - not using workers)\n\ttags: string[]\n\tuserData: any\n}\n\nexport type IRunners = Record<string, IRunner>\n\nexport interface IWorker {\n\tid: string\n\toptions: IWorkerOptions\n\tworkerManagerId: string\n\trunners?: IRunners // Will be created by utility helper\n\tstate?: IWorkerState // This should be a computed state based on the runners within this worker\n}\n\nexport type IWorkers = Record<string, IWorker>\n\n// If both iterations and duration are 0, run continuously until stop using the API.\nexport interface IExecutionProfile {\n iterations: number // Number of iterations to execute per runner. 0 = do not consider iterations.\n\tduration: number // Number of seconds to run per runner. 0 = do not consider duration.\n\tdelayBetweenIterations: number // Number of ms to delay between iterations\n\tpauseOnComplete: boolean // When either the iterations or the duration is hit, the runner will pause instead of being set to complete.\n}\n\nexport interface IRunnerOptions {\n\ttestType: string\n\tdescription: string\n\texecutionProfile: IExecutionProfile\n\ttag: string[]\n\tuserData: any\n\trunnerPlan?: IRunnerPlan\n}\n\nexport interface IRunnerEvent {\n\teventName: string\n\tcb: (args?: any) => void\n}\n\nexport interface IWorkerEvent {\n\teventName: string\n\tcb: (args?: any) => void\n}\n\nexport interface IWorkerEx extends IWorker {\n\tworker: Worker\n\tmessagePort: MessagePort\n\trunnersEx: Record<string, IRunnerEx>\n\tworkerEvents: IWorkerEvent[]\n\trunnersEvents: Record<string, IRunnerEvent[]>\n\tGetRunner(id: string): IRunnerEx | null\n\t\n\tAddRunner: (runnerOptions: IRunnerOptions) => Promise<IRunnerEx>\n\n\tStartRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tStopRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tPauseRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tResumeRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tTerminateRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tResetRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tExecuteRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tUpdateRunner: (runner: IRunnerEx, executionProfile: IExecutionProfile) => Promise<IExecuteRunnerActionResult>\n\n\tStart: () => Promise<IExecuteRunnerActionResult[]>\n\tStop: () => Promise<IExecuteRunnerActionResult[]>\n\tPause: () => Promise<IExecuteRunnerActionResult[]>\n\tResume: () => Promise<IExecuteRunnerActionResult[]>\n\tTerminate: () => Promise<IExecuteRunnerActionResult[]>\n\tReset: () => Promise<IExecuteRunnerActionResult[]>\n\tExecute: () => Promise<IExecuteRunnerActionResult[]> // Execute a single iteration\n\tUpdate: (executionProfile: IExecutionProfile) => Promise<IExecuteRunnerActionResult[]>\n\n\ton: (eventName: string, cb: (args?: any) => void) => IWorkerEx // Register event handler.\n}\n\nexport interface ISTSTestWorkerOptions {\n iterations: number\n}\n\nexport interface ITelemetryStore {\n\tworkers: IWorkers\n}\n\nexport interface ITestRunnerTelemetryPayload extends IIWMessagePayloadContentBase {\n\trunner: IRunner\n}\n\nexport interface ITestRunnerTelemetryPayloadResponse extends ITestRunnerTelemetryPayload {\n\texecuteRunnerActionResult: IExecuteRunnerActionResult\n}\n\nexport interface IWorkerFactory {\n\tcreateWorkerThreadWorker: () => any // | wt.Worker\n}\n\nexport interface IWorkerManagerOptions {\n workerFactory: IWorkerFactory\n\tpublishInstrumentController?: PublishInstrumentController\n\tmaxArchiveListLength: number\n\tlogger: ISTSLogger\n}\n\nexport const PublishMessageCommandsTestRunner = {\n ...eIWMessageCommands,\n GetAccessToken: '__GetAccessToken',\n GetAccessTokenResponse: '__GetAccessTokenResponse',\n GetDataFromPrimary: '__GetDataFromPrimary',\n ExecuteRefreshToken: '__ExecuteRefreshToken',\n ExecuteRefreshTokenResponse: '__ExecuteRefreshTokenResponse'\n} as const\n\nexport type PublishMessageCommandsTestRunner = typeof PublishMessageCommandsTestRunner[keyof typeof PublishMessageCommandsTestRunner];\n\nexport interface IExecuteWorkerActionResult {\n\tworkerManagerId: string\n\tworkerId: string\n\texecuteRunnerActionResults: IExecuteRunnerActionResult[] \n}\n\nexport interface IExecuteRunnerActionResult {\n\tworkerManagerId: string\n\tworkerId: string\n\trunnerId: string\n\tresult: any\n}\n\nexport interface IRunnerSearchFilters {\n\tplan?: string\n\tplanInstanceId?: string\n\ttag?: string\n\tuserDataKey?: string\n}\n","// Only Node.JS has a process variable that is of [[Class]] process\nexport default Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\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 */\n/* eslint-disable no-mixed-operators */\nconst 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\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\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\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\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\tconst l = (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\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 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\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\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst 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\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\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\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst 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\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet 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\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let 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\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\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = 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\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst 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\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (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\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\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\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 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\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet 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 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (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\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = 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\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet 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\tconst r = args[0];\n\tconst g = args[1];\n\tconst 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\tconst 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\tlet 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\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst 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\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst 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\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst 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\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet 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;\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\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\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\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet 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\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\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\t/* eslint-enable max-statements-per-line */\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\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet 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\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet 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\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet 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 = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\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\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const 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\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let 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\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst 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\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet 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\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst 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","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\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\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst 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 (let 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(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\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst 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';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\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\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\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// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\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\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\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 = {\n\tstdout: false,\n\tstderr: false\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|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}|{[a-f\\d]{1,6}})|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\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\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, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\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(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\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 strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\nimport { MessagePort } from 'worker_threads';\n\nimport isNode from 'detect-node'\n\nimport { IIWMessagePayload, eIWMessageCommands, IIWMessagePayloadContentBase, IRunnerInstance,\n ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload, IWorkerOptions,\n IRunnerState, IRunnerOptions, ISTSGetRunnersPayload,\n IExecutionProfile, ITestRunnerTelemetryPayloadResponse\n} from './commonTypes'\n\nimport chalk from 'chalk';\n// Force chalk level\nchalk.level = 3;\n\nimport { ISTSLogger, Sleep, defaultLogger } from '@nsshunt/stsutils';\n\nexport interface IRunnerEx2RunState {\n runnerInstance: IRunnerInstance\n runner: IRunner\n archived: boolean\n}\n\nexport abstract class WorkerInstance {\n #collectorCollectorPort: MessagePort | null = null;\n #runners: Record<string, IRunnerEx2RunState> = { };\n #options: IWorkerOptions | null = null;\n #workerId: string | null = null;\n #archiveDeleteTimeout: number = 30;\n\n get logger(): ISTSLogger {\n return defaultLogger;\n }\n\n #logMessage = (fn: (message: any) => void, message: string) => {\n if (this.#options) {\n fn(`pid: [${process.pid}] WorkerInstance: Worker ID: [${this.#workerId}] Log: [${message}]`);\n } else {\n fn(`pid: [${process.pid}] WorkerInstance: Log: [${message}]`);\n }\n }\n\n #debug = (message: string) => this.#logMessage(this.logger.debug, message);\n #error = (error: any) => this.#logMessage(this.logger.error, error);\n #warn = (message: any) => this.#logMessage(this.logger.debug, message);\n\n #processLoopExecutor = async () => {\n try {\n const removeList: string[] = [ ];\n for (const [, runner] of Object.entries(this.#runners)) {\n if (runner.archived === false &&\n (runner.runner.state === IRunnerState.completed ||\n runner.runner.state === IRunnerState.error ||\n runner.runner.state === IRunnerState.stopped ||\n runner.runner.state === IRunnerState.terminated)) {\n // Remove the runner from the collection\n\n\n //@@ Check how longs it has been since 'stopped'\n //@@ if > than some figure - say 60 seconds\n //@@ then archive ...\n\n\n // perhaps have a concept of archived runners ?\n // and then a way to access them ?\n // needs to be a limited stack - say 200 so no memory leak\n removeList.push(runner.runner.id);\n }\n }\n if (removeList.length > 0) {\n setTimeout(() => {\n this.#debug(chalk.grey(`WorkerInstance:#processLoopExecutor(): Removing runners from collection: [${removeList}]`));\n for (let i=0; i < removeList.length; i++) {\n this.#runners[removeList[i]].archived = true;\n if (this.#archiveDeleteTimeout !== 0) {\n if (isNode) {\n setTimeout(() => delete this.#runners[removeList[i]], this.#archiveDeleteTimeout * 1000.0).unref();\n } else {\n setTimeout(() => delete this.#runners[removeList[i]], this.#archiveDeleteTimeout * 1000.0);\n }\n }\n }\n this.#debug(chalk.grey(`WorkerInstance:#processLoopExecutor(): Remaining Runner Count: [${Object.keys(this.#runners).length}]`));\n setTimeout(this.#processLoopExecutor, 1000);\n }, 100);\n } else {\n setTimeout(this.#processLoopExecutor, 1000);\n }\n } catch (error) {\n this.#error(`#processLoopExecutor(): [${error}]`);\n setTimeout(this.#processLoopExecutor, 1000);\n }\n }\n\n constructor() {\n this.#debug(`constructor`)\n this.#processLoopExecutor();\n }\n\n GetRandomInt = (max: number) => {\n this.#debug(`GetRandomInt`)\n return Math.floor(Math.random() * Math.floor(max));\n };\n\n PostTelemetryById = (id: string) => {\n this.#PostMessageToWorkerManagerById(eIWMessageCommands.InstrumentTelemetry, id, false);\n }\n\n get CollectorCollectorPort(): MessagePort | null {\n return this.#collectorCollectorPort;\n }\n\n get Options(): IWorkerOptions | null {\n return this.#options;\n }\n\n #SetMessagePort = (workerMessagePort: ISTSAgentWorkerMessagePort) => {\n try {\n this.#debug(`SetMessagePort`)\n this.#collectorCollectorPort = workerMessagePort.port as MessagePort;\n\n // NodeJS version\n\n if (isNode) {\n this.#collectorCollectorPort.on('message', (data: any) => {\n this.#debug(`collectorCollectorPort on('message'): ${JSON.stringify(data)}`);\n });\n } else {\n // In browser, onmessage will only allow a single event. We need to use add addEventListener('message', fn)\n // Also note that if onmessage is used in browser, the port will be automatically started (port.start()).\n // Becuase we are going to use addEventListener, we will need to start the ports manually both from the\n // sender (port1) and the receiver (port2).\n (this.#collectorCollectorPort as any).addEventListener('message', (data: any) => { // MessageEvent\n this.#debug(`collectorCollectorPort addEventListener('message'): ${JSON.stringify(data.data)}`);\n });\n }\n\n const response: IIWMessagePayload = {\n command: eIWMessageCommands.MessagePortResponse,\n payload: { } as IIWMessagePayloadContentBase\n }\n\n this.#collectorCollectorPort.postMessage(response);\n } catch (error) {\n this.#error(`#SetMessagePort(): [${error}]`)\n }\n }\n\n CreateAsyncRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<IRunnerInstance | null> => {\n return null;\n }\n\n #CreateRunnerEx2RunState = async (runner: IRunner, runnerInstance: IRunnerInstance): Promise<void> => {\n try {\n this.#runners[runner.id] = {\n runner,\n runnerInstance,\n archived: false\n }\n this.#runners[runner.id].runner.iteration = 0;\n this.#UpdateRunnerStateById(runner.id, IRunnerState.created);\n } catch (error) {\n this.#error(`#CreateRunnerEx2RunState(): [${error}]`)\n }\n }\n\n #UpdateRunnerStateById = (id: string, state: IRunnerState) => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.state = state;\n // Send message to worker manager\n this.#PostMessageToWorkerManagerById(eIWMessageCommands.RunnerStateChange, id, false);\n } else {\n this.#warn(`#UpdateRunnerStateById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#UpdateRunnerStateById(): [${error}]`)\n }\n }\n\n // If an error occurs or the runner does not exist, treat as cannot execute next iteration\n #CanExecuteNextIterationById = (id: string): boolean => {\n try {\n if (this.#runners[id]) {\n const state = this.#runners[id].runner.state;\n if (state === IRunnerState.running) {\n return true;\n }\n return false;\n } else {\n this.#warn(`#CanExecuteNextIterationById(): Runner ID: [${id}] not found`);\n return false;\n }\n } catch (error) {\n this.#error(`#CanExecuteNextIterationById(): [${error}]`)\n return false;\n }\n }\n\n // If an error occurs or the runner does not exist, treat as completed.\n #IsCompletedById = (id: string): boolean => {\n try {\n if (this.#runners[id]) {\n const state = this.#runners[id].runner.state;\n if (state === IRunnerState.error ||\n state === IRunnerState.completed ||\n state === IRunnerState.stopped ||\n state === IRunnerState.terminated) {\n return true;\n }\n return false;\n } else {\n this.#warn(`#IsCompletedById(): Runner ID: [${id}] not found`);\n return true;\n }\n } catch (error) {\n this.#error(`#IsCompletedById(): [${error}]`)\n return true;\n }\n }\n\n #GetRunnerIterationById = (id: string): number => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runner.iteration;\n } else {\n this.#warn(`#GetRunnerIterationById(): Runner ID: [${id}] not found`);\n return 0;\n }\n } catch (error) {\n this.#error(`#GetRunnerIterationById(): [${error}]`)\n return 0;\n }\n }\n\n #ResetRunnerIterationById = (id: string): number => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.iteration = 0;\n return 0;\n } else {\n this.#warn(`#ResetRunnerIterationById(): Runner ID: [${id}] not found`);\n return 0;\n }\n } catch (error) {\n this.#error(`#ResetRunnerIterationById(): [${error}]`)\n return 0;\n }\n }\n\n #IncRunnerIterationById = (id: string): number => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.iteration++;\n return this.#runners[id].runner.iteration;\n } else {\n this.#warn(`#IncRunnerIterationById(): Runner ID: [${id}] not found`);\n return 0;\n }\n } catch (error) {\n this.#error(`#IncRunnerIterationById(): [${error}]`)\n return 0;\n }\n }\n\n #GetRunnerInstanceById = (id: string): IRunnerInstance | undefined => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runnerInstance;\n } else {\n this.#warn(`#GetRunnerInstanceById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#GetRunnerInstanceById(): [${error}]`)\n }\n }\n\n #GetRunnerExecutionProfileById = (id: string): IExecutionProfile | undefined => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runner.options.executionProfile;\n } else {\n this.#warn(`#GetRunnerExecutionProfileById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#GetRunnerExecutionProfileById(): [${error}]`)\n }\n }\n\n #GetRunnerOptionsById = (id: string): IRunnerOptions | undefined => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runner.options;\n } else {\n this.#warn(`#GetRunnerOptionsById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#GetRunnerOptionsById(): [${error}]`)\n }\n }\n\n #SetRunnerOptionsById = (id: string, options: IRunnerOptions): IRunnerOptions | undefined => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.options = { ...options };\n return this.#runners[id].runner.options\n } else {\n this.#warn(`#SetRunnerOptionsById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#SetRunnerOptionsById(): [${error}]`)\n }\n }\n\n #AddRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<IRunner | undefined> => {\n let result;\n let returnRunner;\n\n try {\n const { runner } = testRunnerTelemetryPayload;\n const asyncRunnerInstance = await this.CreateAsyncRunner(testRunnerTelemetryPayload);\n if (asyncRunnerInstance) {\n await this.#CreateRunnerEx2RunState(runner, asyncRunnerInstance);\n } else {\n this.#warn(`#AddRunner(): CreateAsyncRunner not defined.`);\n }\n returnRunner = { ...runner };\n } catch (error) {\n this.#error(`#AddRunner(): [${error}]`)\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.AddRunnerResponse, testRunnerTelemetryPayload, result);\n\n return returnRunner;\n }\n\n #SleepImmediate(): Promise<void> { \n return new Promise((resolve, reject) => {\n resolve();\n });\n }\n\n #PostMessageToWorkerManagerById = async (command: eIWMessageCommands, runnerId: string, response: boolean): Promise<void> => {\n try {\n if (this.#collectorCollectorPort) {\n if (this.#runners[runnerId]) {\n const message: IIWMessagePayload = {\n command,\n payload: {\n runner: this.#runners[runnerId].runner\n } as ITestRunnerTelemetryPayload\n }\n this.#collectorCollectorPort.postMessage(message);\n await Sleep(0);\n } else {\n this.#warn(`#PostMessageToWorkerManagerById(): Runner: [${runnerId}] not found`);\n }\n }\n } catch (error) {\n this.#error(`#PostMessageToWorkerManagerById(): [${error}]`)\n }\n }\n\n #PostRunnersToWorkerManager = async (command: eIWMessageCommands, messagePayload: IIWMessagePayload): Promise<void> => {\n try {\n if (this.#collectorCollectorPort) {\n const message: IIWMessagePayload = {\n command: eIWMessageCommands.GetRunnersResponse,\n payload: {\n messageId: messagePayload.payload.messageId,\n workerId: this.#workerId,\n runners: Object.values(this.#runners).map((runnerEx) => runnerEx.runner)\n } as ISTSGetRunnersPayload,\n }\n this.#collectorCollectorPort.postMessage(message);\n await Sleep(0);\n }\n } catch (error) {\n this.#error(`#PostRunnersToWorkerManager(): [${error}]`)\n }\n }\n\n #StartRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<any> => {\n let result;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.created) {\n result = await this.#GetRunnerInstanceById(runnerId)?.StartRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.running);\n await Sleep(0);\n const startLoop = new Date();\n const ExecuteLoop = async () => {\n try {\n let cont: boolean = true;\n const executionProfile = this.#GetRunnerExecutionProfileById(runnerId);\n if (executionProfile) {\n const { iterations, duration, delayBetweenIterations, pauseOnComplete } = executionProfile;\n if (iterations > 0) {\n cont = this.#GetRunnerIterationById(runnerId) < iterations;\n if (cont === false && pauseOnComplete === true && this.#runners[runnerId].runner.state === IRunnerState.paused) {\n cont = true;\n }\n } else if (duration > 0) {\n cont = ((new Date().getTime() - startLoop.getTime()) / 1000) < duration;\n }\n if (cont) {\n if (this.#CanExecuteNextIterationById(runnerId)) {\n //@@ during this await call, the runner may have been stopped (or terminated) and then moved to archive!\n await this.#GetRunnerInstanceById(runnerId)?.ExecuteRunner();\n // Note: After the await above, the actual run state may have changed (to paused, stopped, terminated, etc...)\n // Need to handle these cases.\n if (!this.#IsCompletedById(runnerId)) {\n // See comments above. At this point, the runner may not exist in the normal collection becuase it has been\n // stopped or terminated then moved to archived. (race condition 101)\n this.#IncRunnerIterationById(runnerId);\n }\n }\n //@@await Sleep(0); // Yield to the event loop to make sure we can process worker messages if any in the event loop queue\n //await this.#SleepImmediate();\n if (this.#CanExecuteNextIterationById(runnerId)) {\n if (delayBetweenIterations > 0) {\n await Sleep(delayBetweenIterations);\n } else {\n await this.#SleepImmediate();\n }\n ExecuteLoop();\n } else {\n if (!this.#IsCompletedById(runnerId)) {\n await Sleep(50);\n ExecuteLoop();\n }\n }\n } else {\n if (pauseOnComplete === true) {\n await this.#GetRunnerInstanceById(runnerId)?.PauseRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n ExecuteLoop();\n } else {\n await this.#GetRunnerInstanceById(runnerId)?.Completed();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.completed);\n }\n }\n } else {\n this.#warn(`#StartRunner:ExecuteLoop(): Cannot get execution profile for runner: [${runnerId}]`);\n }\n } catch (error) {\n this.#error(`#StartRunner:ExecuteLoop(): Error: [${error}]`);\n }\n }\n ExecuteLoop();\n }\n } else {\n this.#warn(`#StartRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#StartRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.StartRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #StopRunnerByRunnerId = async (id: string): Promise<any> => {\n let retVal;\n try {\n if (this.#runners[id]) {\n const { state } = this.#runners[id].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.running) {\n retVal = await this.#GetRunnerInstanceById(id)?.StopRunner();\n this.#UpdateRunnerStateById(id, IRunnerState.stopped);\n }\n } else {\n this.#warn(`#StopRunnerByRunnerId(): Runner: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#StopRunnerByRunnerId(): Error: [${error}]`);\n }\n return retVal;\n }\n\n #StopRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n result = await this.#StopRunnerByRunnerId(testRunnerTelemetryPayload.runner.id);\n } catch (error) {\n this.#error(`#StopRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.StopRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #TerminateRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.created ||\n state === IRunnerState.paused ||\n state === IRunnerState.running) {\n result = await this.#GetRunnerInstanceById(runnerId)?.TerminateRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.terminated);\n }\n } else {\n this.#warn(`#TerminateRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#TerminateRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.TerminateRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #SendRunnerCommandResponse = (command: eIWMessageCommands, testRunnerTelemetryPayload: ITestRunnerTelemetryPayload, result: any): void => {\n // Now send response ...\n try {\n let runner = undefined;\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n // Get a full copy of the runner current state from the local store\n runner = { ...this.#runners[runnerId].runner };\n }\n if (this.#collectorCollectorPort) {\n const message: IIWMessagePayload = {\n command,\n payload: {\n messageId: testRunnerTelemetryPayload.messageId,\n runner,\n executeRunnerActionResult: {\n workerManagerId: testRunnerTelemetryPayload.runner.workerManagerId,\n workerId: testRunnerTelemetryPayload.runner.workerId,\n runnerId: testRunnerTelemetryPayload.runner.id,\n result\n }\n } as ITestRunnerTelemetryPayloadResponse,\n }\n this.#collectorCollectorPort.postMessage(message);\n }\n } catch (error) {\n this.#error(`#SendRunnerCommandResponse(): [${error}]`)\n }\n }\n\n #PauseRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.running) {\n result = await this.#GetRunnerInstanceById(runnerId)?.PauseRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n }\n } else {\n this.#warn(`#PauseRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#PauseRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.PauseRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #ResumeRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused) {\n result = await this.#GetRunnerInstanceById(runnerId)?.ResumeRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.running);\n }\n } else {\n this.#warn(`#ResumeRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#ResumeRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.ResumeRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #ResetRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.running) {\n this.#ResetRunnerIterationById(runnerId);\n result = await this.#GetRunnerInstanceById(runnerId)?.ResetRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n }\n } else {\n this.#warn(`#ResetRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#ResetRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.ResetRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n // Execute a single iteration of this runners work item\n #ExecuteRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.created) {\n const currentIteration = this.#GetRunnerIterationById(runnerId);\n this.#debug(`${chalk.magenta(`runner: [${runnerId}]`)} ExecuteRunner(${currentIteration})`)\n result = await this.#GetRunnerInstanceById(runnerId)?.ExecuteRunner();\n const newIteration = this.#IncRunnerIterationById(runnerId);\n this.#debug(`${chalk.magenta(` --> runner: [${runnerId}]`)} Next iteration number: [${newIteration}] for next Execute or Resume.`);\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n }\n } else {\n this.#warn(`#ExecuteRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#ExecuteRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.ExecuteRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #UpdateRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.created ||\n state === IRunnerState.running) {\n this.#debug(chalk.cyan(`before: [${JSON.stringify(this.#GetRunnerOptionsById(runnerId))}]`))\n this.#SetRunnerOptionsById(runnerId, testRunnerTelemetryPayload.runner.options);\n this.#debug(chalk.cyan(`after: [${JSON.stringify(this.#GetRunnerOptionsById(runnerId))}]`))\n result = await this.#GetRunnerInstanceById(runnerId)?.UpdateRunner();\n // Note the state does not get updated when options are updated. This is so that options can be updated while running.\n }\n } else {\n this.#warn(`#UpdateRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#UpdateRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.UpdateRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n // ProcessMessage = async(data: MessageEvent) => { // Browser version\n ProcessMessage = async(data: any) => {\n //this.#debug(`ProcessMessage: data: [${JSON.stringify(data)}]`)\n try {\n const payloadMessage: IIWMessagePayload = data as IIWMessagePayload;\n switch (payloadMessage.command) {\n case eIWMessageCommands.MessagePort :\n this.#SetMessagePort(payloadMessage.payload as ISTSAgentWorkerMessagePort);\n this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;\n this.#workerId = (payloadMessage.payload as ISTSAgentWorkerMessagePort).workerId;\n this.#debug(`ProcessMessage::#workerId: [${this.#workerId}]`)\n this.#debug(`ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)\n break;\n case eIWMessageCommands.AddRunner :\n this.#debug(`ProcessMessage::AddRunner`);\n this.#AddRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.StartRunner :\n this.#debug(`ProcessMessage::StartRunner`);\n this.#StartRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.StopRunner :\n this.#debug(`ProcessMessage::StopRunner`);\n this.#StopRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.TerminateRunner :\n this.#debug(`ProcessMessage::TerminateRunner`);\n this.#TerminateRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.PauseRunner :\n this.#debug(`ProcessMessage::PauseRunner`);\n this.#PauseRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.ResumeRunner :\n this.#debug(`ProcessMessage::ResumeRunner`);\n this.#ResumeRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.ResetRunner :\n this.#debug(`ProcessMessage::ResetRunner`);\n this.#ResetRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.ExecuteRunner :\n this.#debug(`ProcessMessage::ExecuteRunner`);\n this.#ExecuteRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.UpdateRunner :\n this.#debug(`ProcessMessage::UpdateRunner`);\n this.#UpdateRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.GetRunners :\n this.#debug(`ProcessMessage::GetRunners`);\n this.#PostRunnersToWorkerManager(eIWMessageCommands.GetRunners, payloadMessage);\n break;\n default :\n this.#warn(`ProcessMessage::default: Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);\n }\n } catch (error: any) {\n this.#error(`ProcessMessage(): Error: [${error}]`);\n this.#error(error);\n }\n }\n}","import { PublishInstrumentController, InstrumentGaugeTelemetry, Gauge } from \"@nsshunt/stsobservability\";\nimport { IRunnerTelemetry } from \"./commonTypes\";\n\nexport class TelemetryProcessor {\n ProcessTelemetry = (publishInstrumentController: PublishInstrumentController, telemetry: IRunnerTelemetry): boolean => {\n let update = false;\n\n if (telemetry.message) {\n telemetry.message.forEach((message) => {\n publishInstrumentController.LogEx(message);\n });\n update = true;\n }\n\n if (telemetry.requestCount) {\n publishInstrumentController.UpdateInstrument(Gauge.REQUEST_COUNT_GAUGE, {\n val: telemetry.requestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.errorCount) {\n publishInstrumentController.UpdateInstrument(Gauge.ERROR_COUNT_GAUGE, {\n val: telemetry.errorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.retryCount) {\n publishInstrumentController.UpdateInstrument(Gauge.RETRY_COUNT_GAUGE, {\n val: telemetry.retryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.authenticationCount) {\n publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_COUNT_GAUGE, {\n val: telemetry.authenticationCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.authenticationErrorCount) {\n publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, {\n val: telemetry.authenticationErrorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.authenticationRetryCount) {\n publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, {\n val: telemetry.authenticationRetryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.coreCount) {\n publishInstrumentController.UpdateInstrument(Gauge.CORE_COUNT_GAUGE, {\n val: telemetry.coreCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.timer) {\n publishInstrumentController.UpdateInstrument(Gauge.TIMER_GAUGE, {\n val: telemetry.timer\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n publishInstrumentController.UpdateInstrument(Gauge.ACTIVE_REQUEST_GAUGE, {\n val: telemetry.activeRequestCount\n } as InstrumentGaugeTelemetry);\n\n if (telemetry.velocity) {\n publishInstrumentController.UpdateInstrument(Gauge.VELOCITY_GAUGE, {\n Inc: telemetry.velocity\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.duration) {\n publishInstrumentController.UpdateInstrument(Gauge.DURATION_GAUGE, {\n val: telemetry.duration\n } as InstrumentGaugeTelemetry);\n publishInstrumentController.UpdateInstrument(Gauge.DURATION_HISTOGRAM_GAUGE, {\n val: telemetry.duration\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.latency) {\n publishInstrumentController.UpdateInstrument(Gauge.LATENCY_GAUGE, {\n val: telemetry.latency\n } as InstrumentGaugeTelemetry);\n publishInstrumentController.UpdateInstrument(Gauge.LATENCY_HISTOGRAM_GAUGE, {\n val: telemetry.latency\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.childCount) {\n publishInstrumentController.UpdateInstrument(Gauge.CHILD_COUNT, {\n val: telemetry.childCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.rx) {\n publishInstrumentController.UpdateInstrument(Gauge.NETWORK_RX_GAUGE, {\n Inc: telemetry.rx\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.tx) {\n publishInstrumentController.UpdateInstrument(Gauge.NETWORK_TX_GAUGE, {\n Inc: telemetry.tx\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n return update;\n }\n}","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n//import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers\nimport { IAsyncRunnerContext, IIWMessagePayload, IIWMessagePayloadContentBase, \n IIWMessageCommand, eIWMessageCommands, \n IWorkerEx, IRunner, IRunnerEx,\n ITestRunnerTelemetryPayload, IRunnerOptions, IRunnerTelemetry,\n IWorkerManagerOptions, IWorkerFactory, IRunnerEvent,\n IWorkerOptions, IExecutionProfile, IRunnerState, ISTSGetRunnersPayload,\n IWorker, IRunners, IExecuteWorkerActionResult, IExecuteRunnerActionResult, IWorkers,\n IRunnerSearchFilters, ITestRunnerTelemetryPayloadResponse\n} from './commonTypes'\n\nimport { JSONObject, ModelDelimeter } from '@nsshunt/stsutils';\n\nimport { PublishInstrumentController } from '@nsshunt/stsobservability'\n\nimport chalk from 'chalk';\nimport { TelemetryProcessor } from './telemetryProcessor'\nchalk.level = 3;\n\nimport isNode from 'detect-node'\n\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class STSWorkerManager {\n //#agentSession: string = null;\n #workersEx: Record<string, IWorkerEx> = { };\n #options: IWorkerManagerOptions;\n #STSInstrumentController: PublishInstrumentController | null = null;\n #telemetryProcessor: TelemetryProcessor | null = null;\n #archiveList: IRunner[] = [ ];\n #id: string;\n #messages: Record<string, any> = { };\n #archiveDeleteTimeout: number = 30;\n\n constructor(options?: IWorkerManagerOptions) {\n this.#id = uuidv4();\n if (options) {\n this.#options = options;\n } else {\n this.#options = { } as IWorkerManagerOptions;\n }\n\n if (this.#options.publishInstrumentController) {\n this.#STSInstrumentController = this.#options.publishInstrumentController;\n this.#telemetryProcessor = new TelemetryProcessor();\n }\n\n this.#processLoopExecutor();\n }\n \n #logMessage = (fn: (message: any) => void, message: string) => {\n fn(`pid: [${process.pid}] STSWorkerManager: ID: [${this.#id}] Log: [${message}]`);\n }\n\n /*\n #debug = (message: string) => this.#logMessage(defaultLogger.debug, message);\n #error = (error: any) => this.#logMessage(defaultLogger.error, error);\n #warn = (error: any) => this.#logMessage(defaultLogger.warn, error);\n */\n \n #debug = (message: string) => this.#logMessage(this.#options.logger.debug, message);\n #error = (error: any) => this.#logMessage(this.#options.logger.error, error);\n #warn = (error: any) => this.#logMessage(this.#options.logger.warn, error);\n\n CreateRunnerCopyNoHistory(runnerEx: IRunnerEx): IRunner {\n try {\n return {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n instrumentData: { ...runnerEx.instrumentData },\n iteration: runnerEx.iteration,\n options: { ...runnerEx.options },\n state: runnerEx.state,\n workerId: runnerEx.workerId,\n workerManagerId: this.#id\n } \n } catch (error) {\n this.#error(`CreateRunnerCopyNoHistory(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateRunnerCopy(runnerEx: IRunnerEx): IRunner {\n try {\n const retVal = this.CreateRunnerCopyNoHistory(runnerEx);\n if (runnerEx.runnerHistory) {\n retVal.runnerHistory = [ ...runnerEx.runnerHistory ];\n }\n return retVal;\n } catch (error) {\n this.#error(`CreateRunnerCopy(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateRunnerCopySmall(runnerEx: IRunnerEx): Partial<IRunner> {\n try {\n const retVal: Partial<IRunner> = {\n id: runnerEx.id,\n iteration: runnerEx.iteration,\n state: runnerEx.state\n }\n if (runnerEx.options && runnerEx.options.runnerPlan) {\n retVal.options = {\n runnerPlan: { ...runnerEx.options.runnerPlan }\n } as IRunnerOptions\n }\n return retVal;\n } catch (error) {\n this.#error(`CreateRunnerCopy(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateWorkerCopy(workerEx: IWorkerEx): IWorker {\n try {\n const { id, options, runnersEx, workerManagerId } = workerEx;\n const workerCopy: IWorker = {\n id,\n options: { ...options },\n runners: { },\n workerManagerId\n }\n for (const [, runnerEx] of Object.entries(runnersEx)) {\n (workerCopy.runners as IRunners)[runnerEx.id] = this.CreateRunnerCopy(runnerEx);\n }\n return workerCopy;\n } catch (error) {\n this.#error(`CreateWorkerCopy(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateWorkerCopySmall(workerEx: IWorkerEx, states: IRunnerState[]): Partial<IWorker> {\n try {\n const workerCopy: Partial<IWorker> = {\n id: workerEx.id,\n runners: { }\n }\n\n // Filter the list by only those states lissted in states\n Object.values(workerEx.runnersEx).filter(runnerEx => states.length === 0 ? true : states.includes(runnerEx.state)).forEach((runnerEx) => {\n (workerCopy.runners as any)[runnerEx.id] = this.CreateRunnerCopySmall(runnerEx);\n });\n\n return workerCopy;\n } catch (error) {\n this.#error(`CreateWorkerCopySmall(): Error: [${error}]`);\n throw error;\n }\n }\n\n #processLoopExecutor = async () => {\n try {\n const removeList: JSONObject[] = [ ];\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n for (const [, runnerEx] of Object.entries(workerEx.runnersEx)) {\n const runnerState = runnerEx.state;\n if (runnerEx.archived === false &&\n (runnerState === IRunnerState.completed ||\n runnerState === IRunnerState.error ||\n runnerState === IRunnerState.stopped ||\n runnerState === IRunnerState.terminated)) {\n // Remove the runner from the collection\n\n //@@ Check how longs it has been since 'stopped'\n //@@ if > than some figure - say 60 seconds\n //@@ then archive ...\n\n removeList.push({\n workerId: workerEx.id,\n runnerId: runnerEx.id\n });\n }\n }\n }\n if (removeList.length > 0) {\n setTimeout(async () => {\n this.#debug(chalk.grey(`STSWorkerManager:#processLoopExecutor(): Removing runners from collection: [${JSON.stringify(removeList)}]`));\n for (let i=0; i < removeList.length; i++) {\n const workerEx = this.#workersEx[removeList[i].workerId];\n if (workerEx) {\n const runnerEx = workerEx.runnersEx[removeList[i].runnerId];\n if (runnerEx) {\n if (runnerEx.publishInstrumentController) {\n this.#debug(chalk.grey(`Ending publish for runner: [${JSON.stringify(runnerEx.asyncRunnerContext)}]`));\n runnerEx.publishInstrumentController.EndPublish(); // No need to wait for this or delay after EndPublish ...\n }\n\n // Terminated runners are not archived.\n if (runnerEx.state !== IRunnerState.terminated) {\n this.#debug(chalk.grey(`Archive runner: [${JSON.stringify(runnerEx.asyncRunnerContext)}]`));\n const runner: IRunner = this.CreateRunnerCopy(runnerEx);\n this.#archiveList.push(runner);\n if (this.#archiveList.length > this.#options.maxArchiveListLength) {\n this.#archiveList.shift();\n }\n } else {\n this.#debug(chalk.grey(`Runner has been terminated and will not be archived, runner: [${JSON.stringify(runnerEx.asyncRunnerContext)}]`));\n }\n runnerEx.archived = true; // All states considered archived including terminated\n\n if (this.#archiveDeleteTimeout !== 0) {\n if (isNode) {\n setTimeout(() => delete workerEx.runnersEx[removeList[i].runnerId], this.#archiveDeleteTimeout * 1000.0).unref();\n } else {\n setTimeout(() => delete workerEx.runnersEx[removeList[i].runnerId], this.#archiveDeleteTimeout * 1000.0);\n }\n }\n }\n }\n }\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n this.#debug(chalk.grey(`STSWorkerManager:#processLoopExecutor(): Remaining runners from worker: [${workerEx.id}]: [${Object.keys(workerEx.runnersEx).length}]`));\n }\n setTimeout(this.#processLoopExecutor, 1000);\n }, 100);\n } else {\n setTimeout(this.#processLoopExecutor, 1000);\n }\n } catch (error) {\n this.#error(`processLoopExecutor(): Error: [${error}]`);\n throw error;\n }\n }\n\n get id(): string {\n return this.#id;\n }\n\n GetWorkers = async (): Promise<IWorkers> => {\n try {\n await this.#SyncWorkerDataFromWorkers();\n const retVal: IWorkers = { };\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n retVal[workerEx.id] = this.CreateWorkerCopy(workerEx);\n }\n return retVal;\n } catch (error) {\n this.#error(`GetWorkers(): Error: [${error}]`);\n throw error;\n }\n }\n\n // only include runners that are in the specified states.\n // Use [] to include all runners irrespective of state.\n GetWorkersSmall = async (states: IRunnerState[]): Promise<IWorkers> => {\n try {\n await this.#SyncWorkerDataFromWorkers();\n const retVal: IWorkers = { };\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n (retVal[workerEx.id] as any) = this.CreateWorkerCopySmall(workerEx, states);\n }\n return retVal;\n } catch (error) {\n this.#error(`GetWorkers(): Error: [${error}]`);\n throw error;\n }\n } \n\n get WorkersEx(): Record<string, IWorkerEx> {\n return this.#workersEx;\n }\n\n // Filter by plan and/or tag. Leave blank to not use in filter.\n GetArchiveList = (runnerSearchFilters: IRunnerSearchFilters): IRunner[] => {\n try {\n return this.#archiveList\n .filter((runner) => (!runnerSearchFilters.plan) ? true : runner.options.runnerPlan?.plan?.localeCompare(runnerSearchFilters.plan) === 0)\n .filter((runner) => (!runnerSearchFilters.planInstanceId) ? true : runner.options.runnerPlan?.planInstanceId?.localeCompare(runnerSearchFilters.planInstanceId) === 0)\n .filter((runner) => (!runnerSearchFilters.tag) ? true : runner.options.tag?.includes(runnerSearchFilters.tag))\n .filter((runner) => (!runnerSearchFilters.userDataKey) ? true : (!runner.options.userData) ? false : !!runner.options.userData[runnerSearchFilters.userDataKey])\n } catch (error) {\n this.#error(`GetArchiveList(): Error: [${error}]`);\n return [ ];\n }\n }\n\n GetWorker = async (workerId: string): Promise<IWorker> => {\n try {\n await this.#SyncWorkerDataFromWorker(this.#workersEx[workerId]);\n return this.CreateWorkerCopy(this.#workersEx[workerId]);\n } catch (error) {\n this.#error(`GetWorker(): Error: [${error}]`);\n throw error;\n }\n }\n\n GetRunner = async (workerId: string, runnerId: string): Promise<IRunner> => {\n try {\n await this.#SyncWorkerDataFromWorker(this.#workersEx[workerId]);\n return this.CreateRunnerCopy(this.#workersEx[workerId].runnersEx[runnerId]);\n } catch (error) {\n this.#error(`GetRunner(): Error: [${error}]`);\n throw error;\n }\n }\n\n AddWorker = (workerOptions: IWorkerOptions, useWorkerFactory?: IWorkerFactory): IWorkerEx => {\n try {\n let workerFactory: IWorkerFactory;\n if (useWorkerFactory) {\n // Use the supplied workFactory\n workerFactory = useWorkerFactory;\n } else {\n // Use the default workFactory\n workerFactory = this.#options.workerFactory\n }\n\n const { \n port1, // process message port\n port2 // collector message port\n } = new MessageChannel();\n\n if (!isNode) {\n // We need to manually start the ports in browser mode. The transfered port will also need\n // to be started within the worker instance.\n port1.start();\n }\n\n const workerId = uuidv4();\n const stsWorkerEx: IWorkerEx = {\n id: workerId,\n workerManagerId: this.#id,\n worker: workerFactory.createWorkerThreadWorker(),\n workerEvents: [ ],\n messagePort: port1 as any,\n options: workerOptions,\n runnersEx: { } as Record<string, IRunnerEx>,\n runnersEvents: { } as Record<string, IRunnerEvent[]>,\n\n GetRunner: (id: string): IRunnerEx | null => this.#workersEx[workerId].runnersEx[id],\n\n // Commands to execute on individual runners\n AddRunner: (runnerOptions: IRunnerOptions): Promise<IRunnerEx> => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),\n StartRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#StartRunner(stsWorkerEx, runner),\n StopRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#StopRunner(stsWorkerEx, runner),\n PauseRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#PauseRunner(stsWorkerEx, runner),\n ResumeRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#ResumeRunner(stsWorkerEx, runner),\n TerminateRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#TerminateRunner(stsWorkerEx, runner),\n ResetRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#ResetRunner(stsWorkerEx, runner),\n ExecuteRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#ExecuteRunner(stsWorkerEx, runner),\n UpdateRunner: (runner: IRunnerEx, executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult> => this.#UpdateRunner(stsWorkerEx, runner, executionProfile),\n\n // Commands to execute on all runners\n Start: (): Promise<IExecuteRunnerActionResult[]> => this.#StartWorker(stsWorkerEx),\n Stop: (): Promise<IExecuteRunnerActionResult[]> => this.#StopWorker(stsWorkerEx),\n Pause: (): Promise<IExecuteRunnerActionResult[]> => this.#PauseWorker(stsWorkerEx),\n Resume: (): Promise<IExecuteRunnerActionResult[]> => this.#ResumeWorker(stsWorkerEx),\n Terminate: (): Promise<IExecuteRunnerActionResult[]> => this.#TerminateWorker(stsWorkerEx),\n Reset: (): Promise<IExecuteRunnerActionResult[]> => this.#ResetWorker(stsWorkerEx),\n Execute: (): Promise<IExecuteRunnerActionResult[]> => this.#ExecuteWorker(stsWorkerEx),\n Update: (executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => this.#UpdateOptionsWorker(stsWorkerEx, executionProfile),\n\n on: (eventName: string, cb: (args?: any) => void): IWorkerEx => {\n stsWorkerEx.workerEvents.push({\n eventName,\n cb\n });\n return stsWorkerEx;\n }\n }\n if (this.#STSInstrumentController) {\n this.#STSInstrumentController.LogEx(chalk.yellow(`pid: [${process.pid}] Creating new worker: [${stsWorkerEx.id}]`));\n }\n \n this.#debug(`AddWorker::workerThreadWorkerOptions: Worker ID: [${stsWorkerEx.id}] Options: [${stsWorkerEx.options}]`);\n\n if (stsWorkerEx.options.mocked) {\n (stsWorkerEx.worker as any).SetPort({\n command: eIWMessageCommands.MessagePort, \n payload: {\n messageId: uuidv4(),\n port: port2,\n options: {\n ...stsWorkerEx.options\n } as IWorkerOptions,\n workerId\n } as IIWMessagePayloadContentBase\n });\n } else {\n this.#PostMessageToWorkerUsingDefaultChannel(stsWorkerEx, eIWMessageCommands.MessagePort, {\n messageId: uuidv4(),\n port: port2,\n //applicationStoreState: stateCopy,\n options: {\n ...stsWorkerEx.options\n } as IWorkerOptions,\n workerId\n } as IIWMessagePayloadContentBase, port2);\n }\n //} as any, port2);\n\n if (!stsWorkerEx.options.mocked) {\n if (isNode) {\n stsWorkerEx.worker.on('exit', (code: any) => {\n try {\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.on(exit): Worker exited with code: ${code}`));\n this.#EmitWorkerEvent('exit', stsWorkerEx);\n if (this.#workersEx[stsWorkerEx.id]) {\n delete this.#workersEx[stsWorkerEx.id];\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.on(exit): Worker: [${stsWorkerEx.id}] has been removed from the worker collection.`));\n }\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.on(exit): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n });\n\n stsWorkerEx.worker.on('error', (error: any) => {\n try {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.on(error): Worker error: ${error}`));\n this.#EmitWorkerEvent('error', stsWorkerEx);\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.on(error): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n });\n } else {\n // Listen for errors from the worker\n (stsWorkerEx.worker as any).onerror = (error: any) => {\n try {\n this.#error(chalk.red('STSWorkerManager:stsWorkerEx.worker.onerror(): Error in worker:', error));\n this.#EmitWorkerEvent('onerror', stsWorkerEx);\n if (this.#workersEx[stsWorkerEx.id]) {\n delete this.#workersEx[stsWorkerEx.id];\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.onerror(error): Worker: [${stsWorkerEx.id}] has been removed from the worker collection.`));\n }\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.onerror(error): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n };\n\n // Optional: Listen for message errors (invalid messages)\n (stsWorkerEx.worker as any).onmessageerror = (error: any) => {\n try {\n this.#error(chalk.red('STSWorkerManager:stsWorkerEx.worker.onmessageerror(): Message error in worker:', error));\n this.#EmitWorkerEvent('onmessageerror', stsWorkerEx);\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.onmessageerror(error): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n };\n }\n }\n\n const processMessage = (data: any) => {\n try {\n const publishMessagePayload: IIWMessagePayload = data;\n\n switch (publishMessagePayload.command) {\n case eIWMessageCommands.MessagePortResponse : \n this.#debug(`AddWorker:processMessage(): eIWMessageCommands.MessagePortResponse`);\n break;\n case eIWMessageCommands.InstrumentTelemetry :\n this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.RunnerStateChange :\n this.#RunnerStateChange(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.GetRunnersResponse :\n this.#GetRunnersResponse(stsWorkerEx, publishMessagePayload.payload as ISTSGetRunnersPayload);\n break;\n case eIWMessageCommands.AddRunnerResponse : \n case eIWMessageCommands.StartRunnerResponse :\n case eIWMessageCommands.StopRunnerResponse :\n case eIWMessageCommands.PauseRunnerResponse :\n case eIWMessageCommands.ResumeRunnerResponse :\n case eIWMessageCommands.ExecuteRunnerResponse :\n case eIWMessageCommands.ResetRunnerResponse :\n case eIWMessageCommands.UpdateRunnerResponse :\n case eIWMessageCommands.TerminateRunnerResponse :\n //@@ check for runner state change in any of these responses and apply before resolve back to caller\n //@@ this makes the call eIWMessageCommands.RunnerStateChange redundant as this data should be in\n //@@ these response payloads. This is to stop the race condition of the state potentially being out of\n //@@ step with the client after the await call to any of these actions.\n this.#ProcessRunnerResponse(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayloadResponse);\n break;\n default :\n this.#warn(`processMessage::default: Command Not Found: [${publishMessagePayload.command}]`);\n }\n } catch (error) {\n this.#error(`AddWorker:processMessage(): Error: [${error}]`);\n throw error;\n }\n }\n\n let publishMessagePayload: IIWMessagePayload;\n if (isNode) {\n (stsWorkerEx.messagePort as any).on('message', (data: any) => {\n publishMessagePayload = data as IIWMessagePayload;\n processMessage(publishMessagePayload);\n });\n } else {\n // In browser, onmessage will only allow a single event. We need to use add addEventListener('message', fn)\n // Also note that if onmessage is used in browser, the port will be automatically started (port.start()).\n // Becuase we are going to use addEventListener, we will need to start the ports manually both from the\n // sender (port1) and the receiver (port2).\n (stsWorkerEx.messagePort as any).addEventListener('message', (data: MessageEvent) => {\n publishMessagePayload = data.data as IIWMessagePayload; // browser version\n processMessage(publishMessagePayload);\n });\n }\n\n this.#workersEx[stsWorkerEx.id] = stsWorkerEx;\n\n this.#debug(`Added worker: [${stsWorkerEx.id}]`);\n\n return stsWorkerEx;\n } catch (error) {\n this.#error(`AddWorker: Error: [${error}]`);\n throw error;\n }\n }\n\n AddRunnerToWorker = async (stsWorkerEx: IWorkerEx, runnerOptions: IRunnerOptions): Promise<IRunnerEx> => {\n try {\n const runnerEx: IRunnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);\n stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;\n const retVal = await this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);\n if (runnerEx.publishInstrumentController) {\n runnerEx.publishInstrumentController.LogEx(chalk.green(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}]`));\n }\n if (retVal) {\n this.#debug(chalk.green(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}] result: [${JSON.stringify(retVal)}]`));\n }\n return runnerEx;\n } catch (error) {\n this.#error(`AddRunnerToWorker(): Error: [${error}]`);\n throw error;\n }\n }\n\n #SetRunnerIntoWorker = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#SetRunnerIntoWorker`);\n const command = eIWMessageCommands.AddRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#PauseRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ProcessTelemetry = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n try {\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n this.#SyncRunnerData(runnerEx, runner);\n if (runnerEx.publishInstrumentController && this.#telemetryProcessor) {\n this.#telemetryProcessor.ProcessTelemetry(runnerEx.publishInstrumentController, runnerEx.instrumentData);\n }\n this.#EmitRunnerEvent('Telemetry', workerEx, runner.id);\n }\n } catch (error) {\n this.#error(`ProcessTelemetry(): Error: [${error}]`);\n throw error;\n }\n }\n\n #EmitWorkerEvent = (eventName: string, workerEx: IWorkerEx) => {\n try {\n workerEx.workerEvents.forEach(ev => {\n if (ev.eventName.localeCompare(eventName) === 0) {\n ev.cb(workerEx);\n }\n })\n } catch (error) {\n this.#error(`EmitWorkerEvent(): Error: [${error}]`);\n throw error;\n }\n }\n\n #EmitRunnerEvent = (eventName: string, workerEx: IWorkerEx, runnerId: string) => {\n try {\n if (workerEx.runnersEvents[runnerId]) {\n const runnersEvents: IRunnerEvent[] = workerEx.runnersEvents[runnerId];\n runnersEvents.forEach(ev => {\n if (ev.eventName.localeCompare(eventName) === 0) {\n ev.cb(workerEx.runnersEx[runnerId]);\n }\n })\n }\n } catch (error) {\n this.#error(`EmitRunnerEvent(): Error: [${error}]`);\n throw error;\n }\n }\n\n //@@ make this have an event\n //@@ make refactor event to own method\n //@@ check for other events to capture\n #RunnerStateChange = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n try {\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n const previousState = runnerEx.state;\n runnerEx.state = runner.state;\n if (!runnerEx.runnerHistory) {\n runnerEx.runnerHistory = [ ];\n }\n runnerEx.runnerHistory.push({\n eventDate: new Date(),\n runner: { ...runner }\n })\n this.#SyncRunnerData(runnerEx, runner);\n this.#debug(`STSWorkerManager:#RunnerStateChange(): Worker: [${workerEx.id}] Runner: [${runner.id}] Previous State: [${previousState}] State: [${runner.state}]`);\n this.#EmitRunnerEvent('StateChange', workerEx, runner.id);\n }\n } catch (error) {\n this.#error(`RunnerStateChange(): Error: [${error}]`);\n throw error;\n }\n }\n\n #CreateAsyncRunner = (workerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n const runnerId = uuidv4();\n if (this.#STSInstrumentController) {\n this.#STSInstrumentController.LogEx(chalk.yellow(`Creating new async runner: [${runnerId}]`));\n }\n const asyncRunnerContext: IAsyncRunnerContext = {\n // [level1]@[level2]^[level3]|[level4]\n // [hostName]@[agentId]-[userAgent]^[workerId]|[runnerId]\n nid: `\\\n${workerEx.options.hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.options.agentId}-${workerEx.options.userAgent}\\\n${ModelDelimeter.NID_SEPERATOR}\\\n${workerEx.id}\\\n${ModelDelimeter.SEPERATOR}\\\n${runnerId}`,\n hostName: workerEx.options.hostName, // level 1 (e.g. host name)\n agentName: `${workerEx.options.agentId}-${workerEx.options.userAgent}`, // level 2 (e.g. service instance ID or user agent type and tab or instance)\n threadId: `${workerEx.id}`, // level 3 (web worker)\n id: runnerId, // level 4 // (async runner within a web worker)\n }\n\n const runnerEx: IRunnerEx = {\n id: runnerId,\n workerId: workerEx.id,\n workerManagerId: this.#id,\n state: IRunnerState.created,\n iteration: 0,\n publishInstrumentController: (this.#STSInstrumentController) ? this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext) : undefined,\n asyncRunnerContext: asyncRunnerContext,\n options: runnerOptions,\n runnerHistory: [ ],\n instrumentData: {\n requestCount: 0,\n errorCount: 0,\n retryCount: 0,\n authenticationCount: 0,\n authenticationErrorCount: 0,\n authenticationRetryCount: 0,\n velocity: 0,\n coreCount: 0,\n timer: 0,\n duration: 0,\n latency: 0,\n activeRequestCount: 0,\n message: [ ],\n childCount: 0,\n rx: 0,\n tx: 0\n } as IRunnerTelemetry,\n Start: (): Promise<IExecuteRunnerActionResult> => this.#StartRunner(workerEx, runnerEx),\n Stop: (): Promise<IExecuteRunnerActionResult> => this.#StopRunner(workerEx, runnerEx),\n Pause: (): Promise<IExecuteRunnerActionResult> => this.#PauseRunner(workerEx, runnerEx),\n Resume: (): Promise<IExecuteRunnerActionResult> => this.#ResumeRunner(workerEx, runnerEx),\n Reset: (): Promise<IExecuteRunnerActionResult> => this.#ResetRunner(workerEx, runnerEx),\n Execute: (): Promise<IExecuteRunnerActionResult> => this.#ExecuteRunner(workerEx, runnerEx),\n Terminate: (): Promise<IExecuteRunnerActionResult> => this.#TerminateRunner(workerEx, runnerEx),\n Update: (executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult> => this.#UpdateRunner(workerEx, runnerEx, executionProfile),\n on: (eventName: string, cb: (args?: any) => void): IRunnerEx => {\n if (!workerEx.runnersEvents[runnerEx.id]) {\n workerEx.runnersEvents[runnerEx.id] = [ ];\n }\n workerEx.runnersEvents[runnerEx.id].push({\n eventName,\n cb\n });\n return runnerEx;\n },\n archived: false\n }\n\n return runnerEx;\n }\n \n \n #PostMessageToWorkerUsingDefaultChannel = (workerEx: IWorkerEx, command: IIWMessageCommand, payload: IIWMessagePayloadContentBase | null, transferObject?: any) => {\n try {\n if (transferObject) {\n this.#debug(`#PostMessageToWorker with transfer object`);\n workerEx.worker.postMessage({ command, payload }, [transferObject]);\n this.#debug(`#PostMessageToWorker with transfer object - done...`);\n } else {\n this.#debug(`#PostMessageToWorker`);\n workerEx.worker.postMessage({ command, payload });\n }\n } catch (error) {\n this.#debug(`PostMessageToWorkerUsingDefaultChannel(): Error: [${error}]`);\n throw error;\n }\n }\n\n #StartRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#StartRunner`);\n const command = eIWMessageCommands.StartRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#StartRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #StopRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#StopRunner`);\n const command = eIWMessageCommands.StopRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#StopRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ResetRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#ResetRunner`);\n const command = eIWMessageCommands.ResetRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#ResetRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ExecuteRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#ExecuteRunner`);\n const command = eIWMessageCommands.ExecuteRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#ExecuteRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #TerminateRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#TerminateRunner`);\n const command = eIWMessageCommands.TerminateRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#PauseRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #PauseRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#PauseRunner`);\n const command = eIWMessageCommands.PauseRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#PauseRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ResumeRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#ResumeRunner`);\n const command = eIWMessageCommands.ResumeRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`ResumeRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #UpdateRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx, executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#UpdateRunner`);\n runnerEx.options.executionProfile = { ...executionProfile };\n const command = eIWMessageCommands.UpdateRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`UpdateRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #StartWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Start());\n }\n return Promise.all(promArray);\n }\n\n #StopWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Stop());\n }\n return Promise.all(promArray);\n }\n\n #PauseWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Pause());\n }\n return Promise.all(promArray);\n }\n\n #ResumeWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Resume());\n }\n return Promise.all(promArray);\n }\n\n #ResetWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Reset());\n }\n return Promise.all(promArray);\n }\n\n #ExecuteWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Execute());\n }\n return Promise.all(promArray);\n }\n\n // IExecutionProfile\n #UpdateOptionsWorker = async (workerEx: IWorkerEx, executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Update(executionProfile));\n }\n return Promise.all(promArray);\n }\n\n #TerminateWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n try {\n\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Terminate());\n }\n const retVal = Promise.all(promArray);\n\n if (workerEx.worker) {\n setTimeout(() => {\n workerEx.worker.terminate();\n this.#debug(`Terminated worker: [${workerEx.id}]`);\n if (this.#workersEx[workerEx.id]) {\n delete this.#workersEx[workerEx.id];\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.on(exit): Worker: [${workerEx.id}] has been removed from the worker collection.`));\n }\n }, 500);\n }\n\n return retVal;\n } catch (error) {\n this.#debug(`TerminateWorker(): Error: [${error}]`);\n return [ ];\n }\n }\n\n GetNextAvailableWorker = (): IWorkerEx | null => {\n try {\n // Calculate the worker with the least runners\n let leastRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (leastRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {\n leastRunnerWorker = stsWorker;\n }\n } else {\n leastRunnerWorker = stsWorker;\n }\n }\n return leastRunnerWorker;\n } catch (error) {\n this.#error(`#GetNextAvailableWorker(): Error: [${error}]`);\n return null;\n }\n }\n\n GetBusyWorker = (): IWorkerEx | null => {\n try {\n // Calculate the worker with the least runners\n let busyWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (busyWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {\n busyWorker = stsWorker;\n }\n } else {\n busyWorker = stsWorker;\n }\n }\n return busyWorker;\n } catch (error) {\n this.#error(`#GetBusyWorker(): Error: [${error}]`);\n return null;\n }\n }\n\n get Options(): IWorkerManagerOptions {\n return this.#options;\n }\n\n set Options(options: IWorkerManagerOptions) {\n this.#options = options;\n }\n \n #ProcessWorkerCommands = async (workerIds: string[], \n command: 'Start' | 'Stop' | 'Pause' | 'Resume' | 'Execute' | 'Reset' | 'Terminate' | 'Update',\n options?: IExecutionProfile): Promise<IExecuteWorkerActionResult[]> => {\n try {\n const promArray: Promise<IExecuteRunnerActionResult[]>[] = [ ];\n // Setup specified workers\n const workers = Object.values(this.WorkersEx).filter((workerEx) => (workerIds.length === 0 ? true : workerIds.includes(workerEx.id)));\n // Setup array of promises for each worker\n for (let i=0; i < workers.length; i++) {\n if (command === 'Update') {\n promArray.push(workers[i][command](options!));\n } else {\n promArray.push(workers[i][command]());\n }\n }\n // Wait for all to complete\n const retValResult = await Promise.all(promArray);\n // Construct return value\n const returnVal: IExecuteWorkerActionResult[] = [ ];\n for (let i=0; i < workers.length; i++) {\n returnVal.push({\n workerManagerId: this.#id,\n workerId: workers[i].id,\n executeRunnerActionResults: retValResult[i]\n } as IExecuteWorkerActionResult)\n }\n return returnVal;\n } catch (error) {\n this.#error(`ProcessWorkerCommands(): command: [${command}] workerIds: [${workerIds}] Error: [${error}]`);\n return [ ];\n }\n };\n\n StartWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Start');\n }\n \n StopWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Stop');\n };\n\n PauseWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Pause');\n };\n\n ResumeWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Resume');\n }\n\n ExecuteWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Execute');\n }\n\n ResetWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Reset');\n }\n\n TerminateWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Terminate');\n }\n\n UpdateWorkers = async (workerIds: string[], options: IExecutionProfile): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Update', options);\n }\n\n #ExecuteVariableCommandOnRunners = async (workerId: string, runnerIds: string[], \n command: 'Start' | 'Stop' | 'Pause' | 'Resume' | 'Execute' | 'Reset' | 'Terminate' | 'Update',\n executionProfile?: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => {\n try {\n if (this.#workersEx[workerId]) {\n if (runnerIds.length === 0) {\n if (command === 'Update') {\n return this.#workersEx[workerId][command](executionProfile!);\n } else {\n return this.#workersEx[workerId][command]();\n }\n } else {\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n // Setup specified runners\n const runners = Object.values(this.#workersEx[workerId].runnersEx)\n .filter((runnerEx) => (runnerIds.length === 0 ? true : runnerIds.includes(runnerEx.id)));\n // Setup array of promises for each runner\n for (let i=0; i < runners.length; i++) {\n if (command === 'Update') {\n promArray.push(runners[i][command](executionProfile!));\n } else {\n promArray.push(runners[i][command]());\n }\n }\n // Wait for all to complete\n const retValResult = await Promise.all(promArray);\n // Construct return value\n const returnVal: IExecuteRunnerActionResult[] = [ ];\n for (let i=0; i < runners.length; i++) {\n returnVal.push({ ...retValResult[i] });\n }\n return returnVal;\n }\n }\n return [ ];\n } catch (error) {\n this.#error(`#ExecuteVariableCommandRunners(): command: [${command}] workerId: [${workerId}] runnerIds: [${runnerIds}] Error: [${error}]`);\n return [ ];\n }\n }\n\n StopRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Stop');\n }\n\n StartRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Start');\n }\n\n PauseRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Pause');\n }\n\n ResumeRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Resume');\n }\n\n ExecuteRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Execute');\n }\n\n ResetRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Reset');\n }\n\n TerminateRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Terminate');\n }\n\n UpdateRunners = async (workerId: string, runnerIds: string[], executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Update', executionProfile);\n }\n \n #GetRunnersResponse(stsWorkerEx: IWorkerEx, payload: ISTSGetRunnersPayload) {\n try {\n const messageId = payload.messageId as string;\n if (this.#messages[messageId]) {\n const messageRecord = this.#messages[messageId];\n clearTimeout(messageRecord.timeout);\n const returnPayload: IIWMessagePayload = {\n command: eIWMessageCommands.GetRunners,\n payload: {\n messageId: messageId,\n workerId: stsWorkerEx.id,\n runners: payload.runners,\n } as ISTSGetRunnersPayload\n }\n delete this.#messages[messageId];\n messageRecord.resolveMessage(returnPayload);\n }\n } catch (error) {\n this.#error(`#GetRunnersResponse(): Error: [${error}]`);\n }\n }\n\n #ProcessRunnerResponse(stsWorkerEx: IWorkerEx, payload: ITestRunnerTelemetryPayloadResponse) {\n try {\n const messageId = payload.messageId as string;\n if (this.#messages[messageId]) {\n const messageRecord = this.#messages[messageId];\n clearTimeout(messageRecord.timeout);\n const retPayload: IExecuteRunnerActionResult = { ...payload.executeRunnerActionResult };\n delete this.#messages[messageId];\n messageRecord.resolveMessage(retPayload);\n }\n } catch (error) {\n this.#error(`#ProcessRunnerResponse(): Error: [${error}]`);\n }\n }\n \n #SyncRunnerData = (runnerEx: IRunnerEx, runner: IRunner) => {\n try {\n runnerEx.iteration = runner.iteration;\n runnerEx.state = runner.state;\n runnerEx.instrumentData = { ...runner.instrumentData };\n } catch (error) {\n this.#error(`#SyncRunnerData(): Error: [${error}]`);\n }\n }\n\n #SyncWorkerDataFromPayload = (payload: ISTSGetRunnersPayload): void => {\n // Update in-memory graph\n try {\n if (this.#workersEx[payload.workerId]) {\n const runnersEx = this.#workersEx[payload.workerId].runnersEx;\n if (runnersEx) {\n payload.runners.forEach((runner) => {\n if (runnersEx[runner.id]) {\n this.#SyncRunnerData(runnersEx[runner.id], runner);\n }\n });\n }\n }\n } catch (error) {\n this.#error(`#SyncWorkerDataFromPayload(): Error: [${error}]`);\n }\n }\n\n #SyncWorkerDataFromWorker = async (workerEx: IWorkerEx): Promise<IIWMessagePayload> => {\n try {\n const retVal = await this.#PostMessageToWorkerGetRunners(workerEx, eIWMessageCommands.GetRunners);\n // Update in-memory graph\n this.#SyncWorkerDataFromPayload(retVal.payload as ISTSGetRunnersPayload);\n return retVal;\n } catch (error) {\n this.#error(`#SyncWorkerDataFromWorker(): Error: [${error}]`);\n throw error;\n }\n }\n\n #SyncWorkerDataFromWorkers = async (): Promise<IIWMessagePayload[]> => {\n try {\n const retVal = await Promise.all(Object.values(this.#workersEx).map(workerEx => this.#PostMessageToWorkerGetRunners(workerEx, eIWMessageCommands.GetRunners)));\n // Update in-memory graph\n retVal.forEach((messagePayload: IIWMessagePayload) => {\n this.#SyncWorkerDataFromPayload(messagePayload.payload as ISTSGetRunnersPayload);\n });\n return retVal;\n } catch (error) {\n this.#error(`#SyncWorkerDataFromWorkers(): Error: [${error}]`);\n throw error;\n }\n }\n\n #SetupCallbackMessage = (resolve: any, reject: any, command: IIWMessageCommand) => {\n const messageId = uuidv4();\n this.#messages[messageId] = {\n timeout: setTimeout(() => {\n delete this.#messages[messageId]\n reject(`message response timeout for message id: [${messageId}], command: [${command}]`);\n }, 5000),\n resolveMessage: (payload: IIWMessagePayload) => {\n resolve(payload);\n }\n }\n return messageId;\n }\n\n #PostMessageToWorkerGetRunners = async (workerEx: IWorkerEx, command: IIWMessageCommand): Promise<IIWMessagePayload> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#PostMessageToWorkerGetRunners`);\n const messageId = uuidv4();\n this.#messages[messageId] = {\n timeout: setTimeout(() => {\n delete this.#messages[messageId]\n reject(`message response timeout for message id: [${messageId}], command: [${command}]`);\n }, 5000),\n resolveMessage: (payload: IIWMessagePayload) => {\n resolve(payload);\n }\n }\n const payload: IIWMessagePayloadContentBase = {\n messageId: messageId\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#error(`#PostMessageToWorkerGetRunners(): Error: [${error}]`);\n }\n });\n }\n}\n"],"names":["eIWMessageCommands","IRunnerState","IWorkerState","require$$0","conversions","route","require$$1","colorConvert","module","chalk","styles","ansiStyles","require$$2","self","require$$3","Sleep","_a","defaultLogger","Gauge","_options","_archiveDeleteTimeout","_logMessage","_debug","_error","_warn","_processLoopExecutor","uuidv4","_StartRunner","_StopRunner","_PauseRunner","_ResumeRunner","_TerminateRunner","_ResetRunner","_ExecuteRunner","_UpdateRunner","error","publishMessagePayload","ModelDelimeter","payload"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,13,14,15,16]}
|
|
1
|
+
{"version":3,"file":"stsrunnerframework.umd.js","sources":["../src/commonTypes.ts","../node_modules/detect-node/index.esm.js","../node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/ansi-styles/index.js","../node_modules/supports-color/browser.js","../node_modules/chalk/source/util.js","../node_modules/chalk/source/templates.js","../node_modules/chalk/source/index.js","../src/workerInstance.ts","../src/telemetryProcessor.ts","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/native.js","../node_modules/uuid/dist/esm-browser/v4.js","../src/workerManager.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\n\nimport { Worker, MessagePort } from 'node:worker_threads';\n\nimport { PublishInstrumentController, IContextBase } from '@nsshunt/stsobservability'\n\nimport { ISTSLogger } from '@nsshunt/stsutils';\n\nexport interface IAsyncRunnerContext extends IContextBase {\n\tid: string\n\thostName: string\n\tagentName: string\n\tthreadId: string\n\t//@@ asyncRunnerId: number ??\n}\n\n/**\n * Inter-Worker (IW) Payload context base.\n */\nexport interface IIWMessagePayloadContentBase {\n messageId: string\n}\n\n/**\n * Inter-Worker (IW) message commands.\n */\nexport enum eIWMessageCommands {\n\tInstrumentTelemetry ='__STS__InstrumentTelemetry', // Used to send instrument telemetry\n\n\tMessagePort = '__STS__MessagePort',\n\tMessagePortResponse = '__STS__MessagePortResponse',\n\n\tAddRunner = '__STS__AddRunner',\n\tAddRunnerResponse = '__STS__AddRunnerResponse',\n\n\tStartRunner = '__STS__StartRunner',\n\tStartRunnerResponse = '__STS__StartRunnerResponse',\n\n\tStopRunner = '__STS__StopRunner',\n\tStopRunnerResponse = '__STS__StopRunnerResponse',\n\n\tPauseRunner = '__STS__PauseRunner',\n\tPauseRunnerResponse = '__STS__PauseRunnerResult',\n\n\tResumeRunner = '__STS__ResumeRunner',\n\tResumeRunnerResponse = '__STS__ResumeRunnerResponse',\n\n\tResetRunner = '__STS__ResetRunner',\n\tResetRunnerResponse = '__STS__ResetRunnerResponse',\n\n\tExecuteRunner = '__STS__ExecuteRunner',\n\tExecuteRunnerResponse = '__STS__ExecuteRunnerResponse',\n\n\tCompleted = '__STS__Completed',\n\n\tUpdateRunner = '__STS__UpdateRunner',\n\tUpdateRunnerResponse = '__STS__UpdateRunnerResponse',\n\n\tTerminateRunner = '__STS__TerminateRunner',\n\tTerminateRunnerResponse = '__STS__TerminateRunnerResponse',\n\n\tRunnerStateChange = '__STS__RunnerStateChange',\n\n\tGetRunners = '__STS__GetRunners',\n\tGetRunnersResponse = '__STS__GetRunnersResponse'\n}\n\n/**\n * Inter-Worker (IW) message command.\n */\nexport type IIWMessageCommand = eIWMessageCommands\n\n/**\n * Inter-Worker (IW) message payload.\n */\nexport interface IIWMessagePayload {\n command: IIWMessageCommand\n payload: IIWMessagePayloadContentBase\n}\n\nexport interface ISTSAgentWorkerMessagePort extends IIWMessagePayloadContentBase {\n port: MessagePort\n options: IWorkerOptions\n\tworkerId: string\n}\n\nexport interface ISTSGetRunnersPayload extends IIWMessagePayloadContentBase {\n\tworkerId: string\n\trunners: IRunner[]\n}\n\nexport enum IRunnerState {\n\tcreated = 'created',\n\trunning = 'running',\n\tpaused = 'paused',\n\tcompleted = 'completed',\n\tstopped = 'stopped',\n\tterminated = 'terminated',\n\terror = 'error'\n}\n\nexport interface IRunnerTelemetry {\n\trequestCount: number // requestCount\n\terrorCount: number\n\tretryCount: number\n\tauthenticationCount: number\n\tauthenticationErrorCount: number\n\tauthenticationRetryCount: number\n\tvelocity: number\n\tcoreCount: number\n\ttimer: number\n\tduration: number\n\tlatency: number\n\tactiveRequestCount: number\n\tmessage: string[]\n\tchildCount: number\n\trx: number\n\ttx: number\n}\n\nexport interface IRunnerHistoryRecord {\n\teventDate: Date\n\trunner: IRunner\n}\n\nexport interface IRunnerPlan {\n\tid: string // Unique ID for this plan (uuidv4)\n\tplan: string // Human readable plan name (for drop-down, select lists, logging, etc.)\n\tplanInstanceId: string // unique instance ID (uuidv4) for this runner being exected within a plan\n\tstage: number // 0 based stage number within a plans execution\n\tplanVU: number // The plan virtual user identifer. When a plan executed, the VU number will start from 0 and increase as VUs are added.\n}\n\nexport interface IRunner {\n\tget id(): string\n\tget workerId(): string\n\tget workerManagerId(): string\n\tstate: IRunnerState\n\titeration: number\n\tget asyncRunnerContext(): IAsyncRunnerContext\n\tget options(): IRunnerOptions\n\tset options(options: IRunnerOptions)\n\tget instrumentData(): IRunnerTelemetry\n\tset instrumentData(newRunnerTelemetry: IRunnerTelemetry)\n\trunnerHistory?: IRunnerHistoryRecord[]\n}\n\nexport interface IRunnerEx extends IRunner {\n Start: () => Promise<IExecuteRunnerActionResult> // Start runner iterations\n\tStop: () => Promise<IExecuteRunnerActionResult> // Stop iteration processing and keep the current iteration number. Currently, this is the same as Pause.\n Pause: () => Promise<IExecuteRunnerActionResult> // Pause iteration processing and keep the current iteration number.\n Resume: () => Promise<IExecuteRunnerActionResult> // Resume iteration processing from the previously paused iteration number.\n\tTerminate: () => Promise<IExecuteRunnerActionResult> // Stop the runner iterations and terminate the instance, stop any instrument publishers.\n\tReset: () => Promise<IExecuteRunnerActionResult> // Stop the current iterations and reset the iteration count back to 0.\n\tExecute: () => Promise<IExecuteRunnerActionResult> // Execute a single iteration for this test.\n\tUpdate: (executionProfile: IExecutionProfile) => Promise<IExecuteRunnerActionResult>\n\ton: (eventName: string, cb: (args?: any) => void) => IRunnerEx // Register event handler.\n\tpublishInstrumentController?: PublishInstrumentController\n\tarchived: boolean\n}\n\nexport interface IRunnerInstance {\n\tStartRunner: () => Promise<any>\n\tStopRunner: () => Promise<any>\n\tPauseRunner: () => Promise<any>\n\tResumeRunner: () => Promise<any>\n\tTerminateRunner: () => Promise<any>\n\tResetRunner: () => Promise<any>\n\tExecuteRunner: () => Promise<any> // Execute a single iteration for this test\n\tUpdateRunner: () => Promise<any>\n\tCompleted: () => Promise<any>\n}\n\nexport enum IWorkerState {\n\tstarting = 'starting', // worker is starting up (very short state transition from this to started)\n\tstarted = 'started', // worker has been started and is currently running\n\tstopped = 'stopped', // workers has been stopped\n\tpaused = 'paused', // worker has been paused\n\terror = 'error' // worker has stopped in an error state\n}\n \nexport interface IWorkerOptions {\n hostName: string\n agentId: string\n userAgent: string\n\tmocked: boolean // true if this worker is mocked (i.e. in the same thread as the running thread - not using workers)\n\ttags: string[]\n\tuserData: any\n}\n\nexport type IRunners = Record<string, IRunner>\n\nexport interface IWorker {\n\tid: string\n\toptions: IWorkerOptions\n\tworkerManagerId: string\n\trunners?: IRunners // Will be created by utility helper\n\tstate?: IWorkerState // This should be a computed state based on the runners within this worker\n}\n\nexport type IWorkers = Record<string, IWorker>\n\n// If both iterations and duration are 0, run continuously until stop using the API.\nexport interface IExecutionProfile {\n iterations: number // Number of iterations to execute per runner. 0 = do not consider iterations.\n\tduration: number // Number of seconds to run per runner. 0 = do not consider duration.\n\tdelayBetweenIterations: number // Number of ms to delay between iterations\n\tpauseOnComplete: boolean // When either the iterations or the duration is hit, the runner will pause instead of being set to complete.\n}\n\nexport interface IRunnerOptions {\n\ttestType: string\n\tdescription: string\n\texecutionProfile: IExecutionProfile\n\ttag: string[]\n\tuserData: any\n\trunnerPlan?: IRunnerPlan\n}\n\nexport interface IRunnerEvent {\n\teventName: string\n\tcb: (args?: any) => void\n}\n\nexport interface IWorkerEvent {\n\teventName: string\n\tcb: (args?: any) => void\n}\n\nexport interface IWorkerEx extends IWorker {\n\tworker: Worker\n\tmessagePort: MessagePort\n\trunnersEx: Record<string, IRunnerEx>\n\tworkerEvents: IWorkerEvent[]\n\trunnersEvents: Record<string, IRunnerEvent[]>\n\tGetRunner(id: string): IRunnerEx | null\n\t\n\tAddRunner: (runnerOptions: IRunnerOptions) => Promise<IRunnerEx>\n\n\tStartRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tStopRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tPauseRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tResumeRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tTerminateRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tResetRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tExecuteRunner: (runner: IRunnerEx) => Promise<IExecuteRunnerActionResult>\n\tUpdateRunner: (runner: IRunnerEx, executionProfile: IExecutionProfile) => Promise<IExecuteRunnerActionResult>\n\n\tStart: () => Promise<IExecuteRunnerActionResult[]>\n\tStop: () => Promise<IExecuteRunnerActionResult[]>\n\tPause: () => Promise<IExecuteRunnerActionResult[]>\n\tResume: () => Promise<IExecuteRunnerActionResult[]>\n\tTerminate: () => Promise<IExecuteRunnerActionResult[]>\n\tReset: () => Promise<IExecuteRunnerActionResult[]>\n\tExecute: () => Promise<IExecuteRunnerActionResult[]> // Execute a single iteration\n\tUpdate: (executionProfile: IExecutionProfile) => Promise<IExecuteRunnerActionResult[]>\n\n\ton: (eventName: string, cb: (args?: any) => void) => IWorkerEx // Register event handler.\n}\n\nexport interface ISTSTestWorkerOptions {\n iterations: number\n}\n\nexport interface ITelemetryStore {\n\tworkers: IWorkers\n}\n\nexport interface ITestRunnerTelemetryPayload extends IIWMessagePayloadContentBase {\n\trunner: IRunner\n}\n\nexport interface ITestRunnerTelemetryPayloadResponse extends ITestRunnerTelemetryPayload {\n\texecuteRunnerActionResult: IExecuteRunnerActionResult\n}\n\nexport interface IWorkerFactory {\n\tcreateWorkerThreadWorker: () => any // | wt.Worker\n}\n\nexport interface IWorkerManagerOptions {\n workerFactory: IWorkerFactory\n\tpublishInstrumentController?: PublishInstrumentController\n\tmaxArchiveListLength: number\n\tlogger: ISTSLogger\n}\n\nexport const PublishMessageCommandsTestRunner = {\n ...eIWMessageCommands,\n GetAccessToken: '__GetAccessToken',\n GetAccessTokenResponse: '__GetAccessTokenResponse',\n GetDataFromPrimary: '__GetDataFromPrimary',\n ExecuteRefreshToken: '__ExecuteRefreshToken',\n ExecuteRefreshTokenResponse: '__ExecuteRefreshTokenResponse'\n} as const\n\nexport type PublishMessageCommandsTestRunner = typeof PublishMessageCommandsTestRunner[keyof typeof PublishMessageCommandsTestRunner];\n\nexport interface IExecuteWorkerActionResult {\n\tworkerManagerId: string\n\tworkerId: string\n\texecuteRunnerActionResults: IExecuteRunnerActionResult[] \n}\n\nexport interface IExecuteRunnerActionResult {\n\tworkerManagerId: string\n\tworkerId: string\n\trunnerId: string\n\tresult: any\n}\n\nexport interface IRunnerSearchFilters {\n\tplan?: string\n\tplanInstanceId?: string\n\ttag?: string\n\tuserDataKey?: string\n}\n","// Only Node.JS has a process variable that is of [[Class]] process\nexport default Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\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 */\n/* eslint-disable no-mixed-operators */\nconst 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\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\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\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\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\tconst l = (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\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 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\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\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst 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\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\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\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst 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\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet 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\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let 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\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\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = 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\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst 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\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (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\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\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\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 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\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet 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 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (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\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = 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\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet 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\tconst r = args[0];\n\tconst g = args[1];\n\tconst 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\tconst 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\tlet 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\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst 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\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst 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\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst 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\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet 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;\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\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\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\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet 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\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\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\t/* eslint-enable max-statements-per-line */\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\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet 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\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet 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\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet 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 = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\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\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const 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\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let 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\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst 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\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet 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\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst 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","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\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\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst 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 (let 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(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\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst 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';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\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\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\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// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\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\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\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 = {\n\tstdout: false,\n\tstderr: false\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|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}|{[a-f\\d]{1,6}})|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\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\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, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\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(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\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 strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\nimport { MessagePort } from 'worker_threads';\n\nimport isNode from 'detect-node'\n\nimport { IIWMessagePayload, eIWMessageCommands, IIWMessagePayloadContentBase, IRunnerInstance,\n ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload, IWorkerOptions,\n IRunnerState, IRunnerOptions, ISTSGetRunnersPayload,\n IExecutionProfile, ITestRunnerTelemetryPayloadResponse\n} from './commonTypes'\n\nimport chalk from 'chalk';\n// Force chalk level\nchalk.level = 3;\n\nimport { ISTSLogger, Sleep, defaultLogger } from '@nsshunt/stsutils';\n\nexport interface IRunnerEx2RunState {\n runnerInstance: IRunnerInstance\n runner: IRunner\n archived: boolean\n}\n\nexport abstract class WorkerInstance {\n #collectorCollectorPort: MessagePort | null = null;\n #runners: Record<string, IRunnerEx2RunState> = { };\n #options: IWorkerOptions | null = null;\n #workerId: string | null = null;\n #archiveDeleteTimeout: number = 30;\n\n get logger(): ISTSLogger {\n return defaultLogger;\n }\n\n #logMessage = (fn: (message: any) => void, message: string) => {\n if (this.#options) {\n fn(`pid: [${process.pid}] WorkerInstance: Worker ID: [${this.#workerId}] Log: [${message}]`);\n } else {\n fn(`pid: [${process.pid}] WorkerInstance: Log: [${message}]`);\n }\n }\n\n #debug = (message: string) => this.#logMessage(this.logger.debug, message);\n #error = (error: any) => this.#logMessage(this.logger.error, error);\n #warn = (message: any) => this.#logMessage(this.logger.debug, message);\n\n #processLoopExecutor = async () => {\n try {\n const removeList: string[] = [ ];\n for (const [, runner] of Object.entries(this.#runners)) {\n if (runner.archived === false &&\n (runner.runner.state === IRunnerState.completed ||\n runner.runner.state === IRunnerState.error ||\n runner.runner.state === IRunnerState.stopped ||\n runner.runner.state === IRunnerState.terminated)) {\n // Remove the runner from the collection\n\n\n //@@ Check how longs it has been since 'stopped'\n //@@ if > than some figure - say 60 seconds\n //@@ then archive ...\n\n\n // perhaps have a concept of archived runners ?\n // and then a way to access them ?\n // needs to be a limited stack - say 200 so no memory leak\n removeList.push(runner.runner.id);\n }\n }\n if (removeList.length > 0) {\n setTimeout(() => {\n this.#debug(chalk.grey(`WorkerInstance:#processLoopExecutor(): Removing runners from collection: [${removeList}]`));\n for (let i=0; i < removeList.length; i++) {\n this.#runners[removeList[i]].archived = true;\n if (this.#archiveDeleteTimeout !== 0) {\n if (isNode) {\n setTimeout(() => delete this.#runners[removeList[i]], this.#archiveDeleteTimeout * 1000.0).unref();\n } else {\n setTimeout(() => delete this.#runners[removeList[i]], this.#archiveDeleteTimeout * 1000.0);\n }\n }\n }\n this.#debug(chalk.grey(`WorkerInstance:#processLoopExecutor(): Remaining Runner Count: [${Object.keys(this.#runners).length}]`));\n setTimeout(this.#processLoopExecutor, 1000);\n }, 100);\n } else {\n setTimeout(this.#processLoopExecutor, 1000);\n }\n } catch (error) {\n this.#error(`#processLoopExecutor(): [${error}]`);\n setTimeout(this.#processLoopExecutor, 1000);\n }\n }\n\n constructor() {\n this.#debug(`constructor`)\n this.#processLoopExecutor();\n }\n\n GetRandomInt = (max: number) => {\n this.#debug(`GetRandomInt`)\n return Math.floor(Math.random() * Math.floor(max));\n };\n\n PostTelemetryById = (id: string) => {\n this.#PostMessageToWorkerManagerById(eIWMessageCommands.InstrumentTelemetry, id, false);\n }\n\n get CollectorCollectorPort(): MessagePort | null {\n return this.#collectorCollectorPort;\n }\n\n get Options(): IWorkerOptions | null {\n return this.#options;\n }\n\n #SetMessagePort = (workerMessagePort: ISTSAgentWorkerMessagePort) => {\n try {\n this.#debug(`SetMessagePort`)\n this.#collectorCollectorPort = workerMessagePort.port as MessagePort;\n\n // NodeJS version\n\n if (isNode) {\n this.#collectorCollectorPort.on('message', (data: any) => {\n this.#debug(`collectorCollectorPort on('message'): ${JSON.stringify(data)}`);\n });\n } else {\n // In browser, onmessage will only allow a single event. We need to use add addEventListener('message', fn)\n // Also note that if onmessage is used in browser, the port will be automatically started (port.start()).\n // Becuase we are going to use addEventListener, we will need to start the ports manually both from the\n // sender (port1) and the receiver (port2).\n (this.#collectorCollectorPort as any).addEventListener('message', (data: any) => { // MessageEvent\n this.#debug(`collectorCollectorPort addEventListener('message'): ${JSON.stringify(data.data)}`);\n });\n }\n\n const response: IIWMessagePayload = {\n command: eIWMessageCommands.MessagePortResponse,\n payload: { } as IIWMessagePayloadContentBase\n }\n\n this.#collectorCollectorPort.postMessage(response);\n } catch (error) {\n this.#error(`#SetMessagePort(): [${error}]`)\n }\n }\n\n CreateAsyncRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<IRunnerInstance | null> => {\n return null;\n }\n\n #CreateRunnerEx2RunState = async (runner: IRunner, runnerInstance: IRunnerInstance): Promise<void> => {\n try {\n this.#runners[runner.id] = {\n runner,\n runnerInstance,\n archived: false\n }\n this.#runners[runner.id].runner.iteration = 0;\n this.#UpdateRunnerStateById(runner.id, IRunnerState.created);\n } catch (error) {\n this.#error(`#CreateRunnerEx2RunState(): [${error}]`)\n }\n }\n\n #UpdateRunnerStateById = (id: string, state: IRunnerState) => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.state = state;\n // Send message to worker manager\n this.#PostMessageToWorkerManagerById(eIWMessageCommands.RunnerStateChange, id, false);\n } else {\n this.#warn(`#UpdateRunnerStateById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#UpdateRunnerStateById(): [${error}]`)\n }\n }\n\n // If an error occurs or the runner does not exist, treat as cannot execute next iteration\n #CanExecuteNextIterationById = (id: string): boolean => {\n try {\n if (this.#runners[id]) {\n const state = this.#runners[id].runner.state;\n if (state === IRunnerState.running) {\n return true;\n }\n return false;\n } else {\n this.#warn(`#CanExecuteNextIterationById(): Runner ID: [${id}] not found`);\n return false;\n }\n } catch (error) {\n this.#error(`#CanExecuteNextIterationById(): [${error}]`)\n return false;\n }\n }\n\n // If an error occurs or the runner does not exist, treat as completed.\n #IsCompletedById = (id: string): boolean => {\n try {\n if (this.#runners[id]) {\n const state = this.#runners[id].runner.state;\n if (state === IRunnerState.error ||\n state === IRunnerState.completed ||\n state === IRunnerState.stopped ||\n state === IRunnerState.terminated) {\n return true;\n }\n return false;\n } else {\n this.#warn(`#IsCompletedById(): Runner ID: [${id}] not found`);\n return true;\n }\n } catch (error) {\n this.#error(`#IsCompletedById(): [${error}]`)\n return true;\n }\n }\n\n #GetRunnerIterationById = (id: string): number => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runner.iteration;\n } else {\n this.#warn(`#GetRunnerIterationById(): Runner ID: [${id}] not found`);\n return 0;\n }\n } catch (error) {\n this.#error(`#GetRunnerIterationById(): [${error}]`)\n return 0;\n }\n }\n\n #ResetRunnerIterationById = (id: string): number => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.iteration = 0;\n return 0;\n } else {\n this.#warn(`#ResetRunnerIterationById(): Runner ID: [${id}] not found`);\n return 0;\n }\n } catch (error) {\n this.#error(`#ResetRunnerIterationById(): [${error}]`)\n return 0;\n }\n }\n\n #IncRunnerIterationById = (id: string): number => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.iteration++;\n return this.#runners[id].runner.iteration;\n } else {\n this.#warn(`#IncRunnerIterationById(): Runner ID: [${id}] not found`);\n return 0;\n }\n } catch (error) {\n this.#error(`#IncRunnerIterationById(): [${error}]`)\n return 0;\n }\n }\n\n #GetRunnerInstanceById = (id: string): IRunnerInstance | undefined => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runnerInstance;\n } else {\n this.#warn(`#GetRunnerInstanceById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#GetRunnerInstanceById(): [${error}]`)\n }\n }\n\n #GetRunnerExecutionProfileById = (id: string): IExecutionProfile | undefined => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runner.options.executionProfile;\n } else {\n this.#warn(`#GetRunnerExecutionProfileById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#GetRunnerExecutionProfileById(): [${error}]`)\n }\n }\n\n #GetRunnerOptionsById = (id: string): IRunnerOptions | undefined => {\n try {\n if (this.#runners[id]) {\n return this.#runners[id].runner.options;\n } else {\n this.#warn(`#GetRunnerOptionsById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#GetRunnerOptionsById(): [${error}]`)\n }\n }\n\n #SetRunnerOptionsById = (id: string, options: IRunnerOptions): IRunnerOptions | undefined => {\n try {\n if (this.#runners[id]) {\n this.#runners[id].runner.options = { ...options };\n return this.#runners[id].runner.options\n } else {\n this.#warn(`#SetRunnerOptionsById(): Runner ID: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#SetRunnerOptionsById(): [${error}]`)\n }\n }\n\n #AddRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<IRunner | undefined> => {\n let result;\n let returnRunner;\n\n try {\n const { runner } = testRunnerTelemetryPayload;\n const asyncRunnerInstance = await this.CreateAsyncRunner(testRunnerTelemetryPayload);\n if (asyncRunnerInstance) {\n await this.#CreateRunnerEx2RunState(runner, asyncRunnerInstance);\n } else {\n this.#warn(`#AddRunner(): CreateAsyncRunner not defined.`);\n }\n returnRunner = { ...runner };\n } catch (error) {\n this.#error(`#AddRunner(): [${error}]`)\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.AddRunnerResponse, testRunnerTelemetryPayload, result);\n\n return returnRunner;\n }\n\n #SleepImmediate(): Promise<void> { \n return new Promise((resolve, reject) => {\n resolve();\n });\n }\n\n #PostMessageToWorkerManagerById = async (command: eIWMessageCommands, runnerId: string, response: boolean): Promise<void> => {\n try {\n if (this.#collectorCollectorPort) {\n if (this.#runners[runnerId]) {\n const message: IIWMessagePayload = {\n command,\n payload: {\n runner: this.#runners[runnerId].runner\n } as ITestRunnerTelemetryPayload\n }\n this.#collectorCollectorPort.postMessage(message);\n await Sleep(0);\n } else {\n this.#warn(`#PostMessageToWorkerManagerById(): Runner: [${runnerId}] not found`);\n }\n }\n } catch (error) {\n this.#error(`#PostMessageToWorkerManagerById(): [${error}]`)\n }\n }\n\n #PostRunnersToWorkerManager = async (command: eIWMessageCommands, messagePayload: IIWMessagePayload): Promise<void> => {\n try {\n if (this.#collectorCollectorPort) {\n const message: IIWMessagePayload = {\n command: eIWMessageCommands.GetRunnersResponse,\n payload: {\n messageId: messagePayload.payload.messageId,\n workerId: this.#workerId,\n runners: Object.values(this.#runners).map((runnerEx) => runnerEx.runner)\n } as ISTSGetRunnersPayload,\n }\n this.#collectorCollectorPort.postMessage(message);\n await Sleep(0);\n }\n } catch (error) {\n this.#error(`#PostRunnersToWorkerManager(): [${error}]`)\n }\n }\n\n #StartRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<any> => {\n let result;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.created) {\n result = await this.#GetRunnerInstanceById(runnerId)?.StartRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.running);\n await Sleep(0);\n const startLoop = new Date();\n const ExecuteLoop = async () => {\n try {\n let cont: boolean = true;\n const executionProfile = this.#GetRunnerExecutionProfileById(runnerId);\n if (executionProfile) {\n const { iterations, duration, delayBetweenIterations, pauseOnComplete } = executionProfile;\n if (iterations > 0) {\n cont = this.#GetRunnerIterationById(runnerId) < iterations;\n if (cont === false && pauseOnComplete === true && this.#runners[runnerId].runner.state === IRunnerState.paused) {\n cont = true;\n }\n } else if (duration > 0) {\n cont = ((new Date().getTime() - startLoop.getTime()) / 1000) < duration;\n }\n if (cont) {\n if (this.#CanExecuteNextIterationById(runnerId)) {\n //@@ during this await call, the runner may have been stopped (or terminated) and then moved to archive!\n await this.#GetRunnerInstanceById(runnerId)?.ExecuteRunner();\n // Note: After the await above, the actual run state may have changed (to paused, stopped, terminated, etc...)\n // Need to handle these cases.\n if (!this.#IsCompletedById(runnerId)) {\n // See comments above. At this point, the runner may not exist in the normal collection becuase it has been\n // stopped or terminated then moved to archived. (race condition 101)\n this.#IncRunnerIterationById(runnerId);\n }\n }\n //@@await Sleep(0); // Yield to the event loop to make sure we can process worker messages if any in the event loop queue\n //await this.#SleepImmediate();\n if (this.#CanExecuteNextIterationById(runnerId)) {\n if (delayBetweenIterations > 0) {\n await Sleep(delayBetweenIterations);\n } else {\n await this.#SleepImmediate();\n }\n ExecuteLoop();\n } else {\n if (!this.#IsCompletedById(runnerId)) {\n await Sleep(50);\n ExecuteLoop();\n }\n }\n } else {\n if (pauseOnComplete === true) {\n await this.#GetRunnerInstanceById(runnerId)?.PauseRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n ExecuteLoop();\n } else {\n await this.#GetRunnerInstanceById(runnerId)?.Completed();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.completed);\n }\n }\n } else {\n this.#warn(`#StartRunner:ExecuteLoop(): Cannot get execution profile for runner: [${runnerId}]`);\n }\n } catch (error) {\n this.#error(`#StartRunner:ExecuteLoop(): Error: [${error}]`);\n }\n }\n ExecuteLoop();\n }\n } else {\n this.#warn(`#StartRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#StartRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.StartRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #StopRunnerByRunnerId = async (id: string): Promise<any> => {\n let retVal;\n try {\n if (this.#runners[id]) {\n const { state } = this.#runners[id].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.running) {\n retVal = await this.#GetRunnerInstanceById(id)?.StopRunner();\n this.#UpdateRunnerStateById(id, IRunnerState.stopped);\n }\n } else {\n this.#warn(`#StopRunnerByRunnerId(): Runner: [${id}] not found`);\n }\n } catch (error) {\n this.#error(`#StopRunnerByRunnerId(): Error: [${error}]`);\n }\n return retVal;\n }\n\n #StopRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n result = await this.#StopRunnerByRunnerId(testRunnerTelemetryPayload.runner.id);\n } catch (error) {\n this.#error(`#StopRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.StopRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #TerminateRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.created ||\n state === IRunnerState.paused ||\n state === IRunnerState.running) {\n result = await this.#GetRunnerInstanceById(runnerId)?.TerminateRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.terminated);\n }\n } else {\n this.#warn(`#TerminateRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#TerminateRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.TerminateRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #SendRunnerCommandResponse = (command: eIWMessageCommands, testRunnerTelemetryPayload: ITestRunnerTelemetryPayload, result: any): void => {\n // Now send response ...\n try {\n let runner = undefined;\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n // Get a full copy of the runner current state from the local store\n runner = { ...this.#runners[runnerId].runner };\n }\n if (this.#collectorCollectorPort) {\n const message: IIWMessagePayload = {\n command,\n payload: {\n messageId: testRunnerTelemetryPayload.messageId,\n runner,\n executeRunnerActionResult: {\n workerManagerId: testRunnerTelemetryPayload.runner.workerManagerId,\n workerId: testRunnerTelemetryPayload.runner.workerId,\n runnerId: testRunnerTelemetryPayload.runner.id,\n result\n }\n } as ITestRunnerTelemetryPayloadResponse,\n }\n this.#collectorCollectorPort.postMessage(message);\n }\n } catch (error) {\n this.#error(`#SendRunnerCommandResponse(): [${error}]`)\n }\n }\n\n #PauseRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.running) {\n result = await this.#GetRunnerInstanceById(runnerId)?.PauseRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n }\n } else {\n this.#warn(`#PauseRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#PauseRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.PauseRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #ResumeRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused) {\n result = await this.#GetRunnerInstanceById(runnerId)?.ResumeRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.running);\n }\n } else {\n this.#warn(`#ResumeRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#ResumeRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.ResumeRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #ResetRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload): Promise<void> => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.running) {\n this.#ResetRunnerIterationById(runnerId);\n result = await this.#GetRunnerInstanceById(runnerId)?.ResetRunner();\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n }\n } else {\n this.#warn(`#ResetRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#ResetRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.ResetRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n // Execute a single iteration of this runners work item\n #ExecuteRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.created) {\n const currentIteration = this.#GetRunnerIterationById(runnerId);\n this.#debug(`${chalk.magenta(`runner: [${runnerId}]`)} ExecuteRunner(${currentIteration})`)\n result = await this.#GetRunnerInstanceById(runnerId)?.ExecuteRunner();\n const newIteration = this.#IncRunnerIterationById(runnerId);\n this.#debug(`${chalk.magenta(` --> runner: [${runnerId}]`)} Next iteration number: [${newIteration}] for next Execute or Resume.`);\n this.#UpdateRunnerStateById(runnerId, IRunnerState.paused);\n }\n } else {\n this.#warn(`#ExecuteRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#ExecuteRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.ExecuteRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n #UpdateRunner = async (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n let result: any;\n try {\n const runnerId = testRunnerTelemetryPayload.runner.id;\n if (this.#runners[runnerId]) {\n const { state } = this.#runners[runnerId].runner;\n if (state === IRunnerState.paused ||\n state === IRunnerState.created ||\n state === IRunnerState.running) {\n this.#debug(chalk.cyan(`before: [${JSON.stringify(this.#GetRunnerOptionsById(runnerId))}]`))\n this.#SetRunnerOptionsById(runnerId, testRunnerTelemetryPayload.runner.options);\n this.#debug(chalk.cyan(`after: [${JSON.stringify(this.#GetRunnerOptionsById(runnerId))}]`))\n result = await this.#GetRunnerInstanceById(runnerId)?.UpdateRunner();\n // Note the state does not get updated when options are updated. This is so that options can be updated while running.\n }\n } else {\n this.#warn(`#UpdateRunner(): Runner: [${runnerId}] not found`);\n }\n } catch (error) {\n this.#error(`#UpdateRunner(): Error: [${error}]`);\n }\n\n // Now send response ...\n this.#SendRunnerCommandResponse(eIWMessageCommands.UpdateRunnerResponse, testRunnerTelemetryPayload, result);\n }\n\n // ProcessMessage = async(data: MessageEvent) => { // Browser version\n ProcessMessage = async(data: any) => {\n //this.#debug(`ProcessMessage: data: [${JSON.stringify(data)}]`)\n try {\n const payloadMessage: IIWMessagePayload = data as IIWMessagePayload;\n switch (payloadMessage.command) {\n case eIWMessageCommands.MessagePort :\n this.#SetMessagePort(payloadMessage.payload as ISTSAgentWorkerMessagePort);\n this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;\n this.#workerId = (payloadMessage.payload as ISTSAgentWorkerMessagePort).workerId;\n this.#debug(`ProcessMessage::#workerId: [${this.#workerId}]`)\n this.#debug(`ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)\n break;\n case eIWMessageCommands.AddRunner :\n this.#debug(`ProcessMessage::AddRunner`);\n this.#AddRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.StartRunner :\n this.#debug(`ProcessMessage::StartRunner`);\n this.#StartRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.StopRunner :\n this.#debug(`ProcessMessage::StopRunner`);\n this.#StopRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.TerminateRunner :\n this.#debug(`ProcessMessage::TerminateRunner`);\n this.#TerminateRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.PauseRunner :\n this.#debug(`ProcessMessage::PauseRunner`);\n this.#PauseRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.ResumeRunner :\n this.#debug(`ProcessMessage::ResumeRunner`);\n this.#ResumeRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.ResetRunner :\n this.#debug(`ProcessMessage::ResetRunner`);\n this.#ResetRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.ExecuteRunner :\n this.#debug(`ProcessMessage::ExecuteRunner`);\n this.#ExecuteRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break; \n case eIWMessageCommands.UpdateRunner :\n this.#debug(`ProcessMessage::UpdateRunner`);\n this.#UpdateRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.GetRunners :\n this.#debug(`ProcessMessage::GetRunners`);\n this.#PostRunnersToWorkerManager(eIWMessageCommands.GetRunners, payloadMessage);\n break;\n default :\n this.#warn(`ProcessMessage::default: Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);\n }\n } catch (error: any) {\n this.#error(`ProcessMessage(): Error: [${error}]`);\n this.#error(error);\n }\n }\n}","import { PublishInstrumentController, InstrumentGaugeTelemetry, Gauge } from \"@nsshunt/stsobservability\";\nimport { IRunnerTelemetry } from \"./commonTypes\";\n\nexport class TelemetryProcessor {\n ProcessTelemetry = (publishInstrumentController: PublishInstrumentController, telemetry: IRunnerTelemetry): boolean => {\n let update = false;\n\n if (telemetry.message) {\n telemetry.message.forEach((message) => {\n publishInstrumentController.LogEx(message);\n });\n update = true;\n }\n\n if (telemetry.requestCount) {\n publishInstrumentController.UpdateInstrument(Gauge.REQUEST_COUNT_GAUGE, {\n val: telemetry.requestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.errorCount) {\n publishInstrumentController.UpdateInstrument(Gauge.ERROR_COUNT_GAUGE, {\n val: telemetry.errorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.retryCount) {\n publishInstrumentController.UpdateInstrument(Gauge.RETRY_COUNT_GAUGE, {\n val: telemetry.retryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.authenticationCount) {\n publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_COUNT_GAUGE, {\n val: telemetry.authenticationCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.authenticationErrorCount) {\n publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, {\n val: telemetry.authenticationErrorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.authenticationRetryCount) {\n publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, {\n val: telemetry.authenticationRetryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.coreCount) {\n publishInstrumentController.UpdateInstrument(Gauge.CORE_COUNT_GAUGE, {\n val: telemetry.coreCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.timer) {\n publishInstrumentController.UpdateInstrument(Gauge.TIMER_GAUGE, {\n val: telemetry.timer\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n publishInstrumentController.UpdateInstrument(Gauge.ACTIVE_REQUEST_GAUGE, {\n val: telemetry.activeRequestCount\n } as InstrumentGaugeTelemetry);\n\n if (telemetry.velocity) {\n publishInstrumentController.UpdateInstrument(Gauge.VELOCITY_GAUGE, {\n Inc: telemetry.velocity\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.duration) {\n publishInstrumentController.UpdateInstrument(Gauge.DURATION_GAUGE, {\n val: telemetry.duration\n } as InstrumentGaugeTelemetry);\n publishInstrumentController.UpdateInstrument(Gauge.DURATION_HISTOGRAM_GAUGE, {\n val: telemetry.duration\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.latency) {\n publishInstrumentController.UpdateInstrument(Gauge.LATENCY_GAUGE, {\n val: telemetry.latency\n } as InstrumentGaugeTelemetry);\n publishInstrumentController.UpdateInstrument(Gauge.LATENCY_HISTOGRAM_GAUGE, {\n val: telemetry.latency\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.childCount) {\n publishInstrumentController.UpdateInstrument(Gauge.CHILD_COUNT, {\n val: telemetry.childCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.rx) {\n publishInstrumentController.UpdateInstrument(Gauge.NETWORK_RX_GAUGE, {\n Inc: telemetry.rx\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (telemetry.tx) {\n publishInstrumentController.UpdateInstrument(Gauge.NETWORK_TX_GAUGE, {\n Inc: telemetry.tx\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n return update;\n }\n}","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n//import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers\nimport { IAsyncRunnerContext, IIWMessagePayload, IIWMessagePayloadContentBase, \n IIWMessageCommand, eIWMessageCommands, \n IWorkerEx, IRunner, IRunnerEx,\n ITestRunnerTelemetryPayload, IRunnerOptions, IRunnerTelemetry,\n IWorkerManagerOptions, IWorkerFactory, IRunnerEvent,\n IWorkerOptions, IExecutionProfile, IRunnerState, ISTSGetRunnersPayload,\n IWorker, IRunners, IExecuteWorkerActionResult, IExecuteRunnerActionResult, IWorkers,\n IRunnerSearchFilters, ITestRunnerTelemetryPayloadResponse\n} from './commonTypes'\n\nimport { JSONObject, ModelDelimeter, Sleep } from '@nsshunt/stsutils';\n\nimport { PublishInstrumentController } from '@nsshunt/stsobservability'\n\nimport chalk from 'chalk';\nimport { TelemetryProcessor } from './telemetryProcessor'\nchalk.level = 3;\n\nimport isNode from 'detect-node'\n\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class STSWorkerManager {\n //#agentSession: string = null;\n #workersEx: Record<string, IWorkerEx> = { };\n #options: IWorkerManagerOptions;\n #STSInstrumentController: PublishInstrumentController | null = null;\n #telemetryProcessor: TelemetryProcessor | null = null;\n #archiveList: IRunner[] = [ ];\n #id: string;\n #messages: Record<string, any> = { };\n #archiveDeleteTimeout: number = 30;\n\n constructor(options?: IWorkerManagerOptions) {\n this.#id = uuidv4();\n if (options) {\n this.#options = options;\n } else {\n this.#options = { } as IWorkerManagerOptions;\n }\n\n if (this.#options.publishInstrumentController) {\n this.#STSInstrumentController = this.#options.publishInstrumentController;\n this.#telemetryProcessor = new TelemetryProcessor();\n }\n\n this.#processLoopExecutor();\n }\n \n #logMessage = (fn: (message: any) => void, message: string) => {\n fn(`pid: [${process.pid}] STSWorkerManager: ID: [${this.#id}] Log: [${message}]`);\n }\n\n /*\n #debug = (message: string) => this.#logMessage(defaultLogger.debug, message);\n #error = (error: any) => this.#logMessage(defaultLogger.error, error);\n #warn = (error: any) => this.#logMessage(defaultLogger.warn, error);\n */\n \n #debug = (message: string) => this.#logMessage(this.#options.logger.debug, message);\n #error = (error: any) => this.#logMessage(this.#options.logger.error, error);\n #warn = (error: any) => this.#logMessage(this.#options.logger.warn, error);\n\n CreateRunnerCopyNoHistory(runnerEx: IRunnerEx): IRunner {\n try {\n return {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n instrumentData: { ...runnerEx.instrumentData },\n iteration: runnerEx.iteration,\n options: { ...runnerEx.options },\n state: runnerEx.state,\n workerId: runnerEx.workerId,\n workerManagerId: this.#id\n } \n } catch (error) {\n this.#error(`CreateRunnerCopyNoHistory(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateRunnerCopy(runnerEx: IRunnerEx): IRunner {\n try {\n const retVal = this.CreateRunnerCopyNoHistory(runnerEx);\n if (runnerEx.runnerHistory) {\n retVal.runnerHistory = [ ...runnerEx.runnerHistory ];\n }\n return retVal;\n } catch (error) {\n this.#error(`CreateRunnerCopy(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateRunnerCopySmall(runnerEx: IRunnerEx): Partial<IRunner> {\n try {\n const retVal: Partial<IRunner> = {\n id: runnerEx.id,\n iteration: runnerEx.iteration,\n state: runnerEx.state\n }\n if (runnerEx.options && runnerEx.options.runnerPlan) {\n retVal.options = {\n runnerPlan: { ...runnerEx.options.runnerPlan }\n } as IRunnerOptions\n }\n return retVal;\n } catch (error) {\n this.#error(`CreateRunnerCopy(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateWorkerCopy(workerEx: IWorkerEx): IWorker {\n try {\n const { id, options, runnersEx, workerManagerId } = workerEx;\n const workerCopy: IWorker = {\n id,\n options: { ...options },\n runners: { },\n workerManagerId\n }\n for (const [, runnerEx] of Object.entries(runnersEx)) {\n (workerCopy.runners as IRunners)[runnerEx.id] = this.CreateRunnerCopy(runnerEx);\n }\n return workerCopy;\n } catch (error) {\n this.#error(`CreateWorkerCopy(): Error: [${error}]`);\n throw error;\n }\n }\n\n CreateWorkerCopySmall(workerEx: IWorkerEx, states: IRunnerState[]): Partial<IWorker> {\n try {\n const workerCopy: Partial<IWorker> = {\n id: workerEx.id,\n runners: { }\n }\n\n // Filter the list by only those states lissted in states\n Object.values(workerEx.runnersEx).filter(runnerEx => states.length === 0 ? true : states.includes(runnerEx.state)).forEach((runnerEx) => {\n (workerCopy.runners as any)[runnerEx.id] = this.CreateRunnerCopySmall(runnerEx);\n });\n\n return workerCopy;\n } catch (error) {\n this.#error(`CreateWorkerCopySmall(): Error: [${error}]`);\n throw error;\n }\n }\n\n #processLoopExecutor = async () => {\n try {\n const removeList: JSONObject[] = [ ];\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n for (const [, runnerEx] of Object.entries(workerEx.runnersEx)) {\n const runnerState = runnerEx.state;\n if (runnerEx.archived === false &&\n (runnerState === IRunnerState.completed ||\n runnerState === IRunnerState.error ||\n runnerState === IRunnerState.stopped ||\n runnerState === IRunnerState.terminated)) {\n // Remove the runner from the collection\n\n //@@ Check how longs it has been since 'stopped'\n //@@ if > than some figure - say 60 seconds\n //@@ then archive ...\n\n removeList.push({\n workerId: workerEx.id,\n runnerId: runnerEx.id\n });\n }\n }\n }\n if (removeList.length > 0) {\n setTimeout(async () => {\n this.#debug(chalk.grey(`STSWorkerManager:#processLoopExecutor(): Removing runners from collection: [${JSON.stringify(removeList)}]`));\n for (let i=0; i < removeList.length; i++) {\n const workerEx = this.#workersEx[removeList[i].workerId];\n if (workerEx) {\n const runnerEx = workerEx.runnersEx[removeList[i].runnerId];\n if (runnerEx) {\n if (runnerEx.publishInstrumentController) {\n this.#debug(chalk.grey(`Ending publish for runner: [${JSON.stringify(runnerEx.asyncRunnerContext)}]`));\n runnerEx.publishInstrumentController.EndPublish(); // No need to wait for this or delay after EndPublish ...\n }\n\n // Terminated runners are not archived.\n if (runnerEx.state !== IRunnerState.terminated) {\n this.#debug(chalk.grey(`Archive runner: [${JSON.stringify(runnerEx.asyncRunnerContext)}]`));\n const runner: IRunner = this.CreateRunnerCopy(runnerEx);\n this.#archiveList.push(runner);\n if (this.#archiveList.length > this.#options.maxArchiveListLength) {\n this.#archiveList.shift();\n }\n } else {\n this.#debug(chalk.grey(`Runner has been terminated and will not be archived, runner: [${JSON.stringify(runnerEx.asyncRunnerContext)}]`));\n }\n runnerEx.archived = true; // All states considered archived including terminated\n\n if (this.#archiveDeleteTimeout !== 0) {\n if (isNode) {\n setTimeout(() => delete workerEx.runnersEx[removeList[i].runnerId], this.#archiveDeleteTimeout * 1000.0).unref();\n } else {\n setTimeout(() => delete workerEx.runnersEx[removeList[i].runnerId], this.#archiveDeleteTimeout * 1000.0);\n }\n }\n }\n }\n }\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n this.#debug(chalk.grey(`STSWorkerManager:#processLoopExecutor(): Remaining runners from worker: [${workerEx.id}]: [${Object.keys(workerEx.runnersEx).length}]`));\n }\n setTimeout(this.#processLoopExecutor, 1000);\n }, 100);\n } else {\n setTimeout(this.#processLoopExecutor, 1000);\n }\n } catch (error) {\n this.#error(`processLoopExecutor(): Error: [${error}]`);\n throw error;\n }\n }\n\n get id(): string {\n return this.#id;\n }\n\n GetWorkers = async (): Promise<IWorkers> => {\n try {\n await this.#SyncWorkerDataFromWorkers();\n const retVal: IWorkers = { };\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n retVal[workerEx.id] = this.CreateWorkerCopy(workerEx);\n }\n return retVal;\n } catch (error) {\n this.#error(`GetWorkers(): Error: [${error}]`);\n throw error;\n }\n }\n\n // only include runners that are in the specified states.\n // Use [] to include all runners irrespective of state.\n GetWorkersSmall = async (states: IRunnerState[]): Promise<IWorkers> => {\n try {\n await this.#SyncWorkerDataFromWorkers();\n const retVal: IWorkers = { };\n for (const [, workerEx] of Object.entries(this.#workersEx)) {\n (retVal[workerEx.id] as any) = this.CreateWorkerCopySmall(workerEx, states);\n }\n return retVal;\n } catch (error) {\n this.#error(`GetWorkers(): Error: [${error}]`);\n throw error;\n }\n } \n\n get WorkersEx(): Record<string, IWorkerEx> {\n return this.#workersEx;\n }\n\n // Filter by plan and/or tag. Leave blank to not use in filter.\n GetArchiveList = (runnerSearchFilters: IRunnerSearchFilters): IRunner[] => {\n try {\n return this.#archiveList\n .filter((runner) => (!runnerSearchFilters.plan) ? true : runner.options.runnerPlan?.plan?.localeCompare(runnerSearchFilters.plan) === 0)\n .filter((runner) => (!runnerSearchFilters.planInstanceId) ? true : runner.options.runnerPlan?.planInstanceId?.localeCompare(runnerSearchFilters.planInstanceId) === 0)\n .filter((runner) => (!runnerSearchFilters.tag) ? true : runner.options.tag?.includes(runnerSearchFilters.tag))\n .filter((runner) => (!runnerSearchFilters.userDataKey) ? true : (!runner.options.userData) ? false : !!runner.options.userData[runnerSearchFilters.userDataKey])\n } catch (error) {\n this.#error(`GetArchiveList(): Error: [${error}]`);\n return [ ];\n }\n }\n\n GetWorker = async (workerId: string): Promise<IWorker> => {\n try {\n await this.#SyncWorkerDataFromWorker(this.#workersEx[workerId]);\n return this.CreateWorkerCopy(this.#workersEx[workerId]);\n } catch (error) {\n this.#error(`GetWorker(): Error: [${error}]`);\n throw error;\n }\n }\n\n GetRunner = async (workerId: string, runnerId: string): Promise<IRunner> => {\n try {\n await this.#SyncWorkerDataFromWorker(this.#workersEx[workerId]);\n return this.CreateRunnerCopy(this.#workersEx[workerId].runnersEx[runnerId]);\n } catch (error) {\n this.#error(`GetRunner(): Error: [${error}]`);\n throw error;\n }\n }\n\n AddWorker = async (workerOptions: IWorkerOptions, useWorkerFactory?: IWorkerFactory): Promise<IWorkerEx> => {\n try {\n let workerFactory: IWorkerFactory;\n if (useWorkerFactory) {\n // Use the supplied workFactory\n workerFactory = useWorkerFactory;\n } else {\n // Use the default workFactory\n workerFactory = this.#options.workerFactory\n }\n\n const { \n port1, // process message port\n port2 // collector message port\n } = new MessageChannel();\n\n if (!isNode) {\n // We need to manually start the ports in browser mode. The transfered port will also need\n // to be started within the worker instance.\n port1.start();\n }\n\n const workerId = uuidv4();\n const stsWorkerEx: IWorkerEx = {\n id: workerId,\n workerManagerId: this.#id,\n worker: workerFactory.createWorkerThreadWorker(),\n workerEvents: [ ],\n messagePort: port1 as any,\n options: workerOptions,\n runnersEx: { } as Record<string, IRunnerEx>,\n runnersEvents: { } as Record<string, IRunnerEvent[]>,\n\n GetRunner: (id: string): IRunnerEx | null => this.#workersEx[workerId].runnersEx[id],\n\n // Commands to execute on individual runners\n AddRunner: (runnerOptions: IRunnerOptions): Promise<IRunnerEx> => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),\n StartRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#StartRunner(stsWorkerEx, runner),\n StopRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#StopRunner(stsWorkerEx, runner),\n PauseRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#PauseRunner(stsWorkerEx, runner),\n ResumeRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#ResumeRunner(stsWorkerEx, runner),\n TerminateRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#TerminateRunner(stsWorkerEx, runner),\n ResetRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#ResetRunner(stsWorkerEx, runner),\n ExecuteRunner: (runner: IRunnerEx): Promise<IExecuteRunnerActionResult> => this.#ExecuteRunner(stsWorkerEx, runner),\n UpdateRunner: (runner: IRunnerEx, executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult> => this.#UpdateRunner(stsWorkerEx, runner, executionProfile),\n\n // Commands to execute on all runners\n Start: (): Promise<IExecuteRunnerActionResult[]> => this.#StartWorker(stsWorkerEx),\n Stop: (): Promise<IExecuteRunnerActionResult[]> => this.#StopWorker(stsWorkerEx),\n Pause: (): Promise<IExecuteRunnerActionResult[]> => this.#PauseWorker(stsWorkerEx),\n Resume: (): Promise<IExecuteRunnerActionResult[]> => this.#ResumeWorker(stsWorkerEx),\n Terminate: (): Promise<IExecuteRunnerActionResult[]> => this.#TerminateWorker(stsWorkerEx),\n Reset: (): Promise<IExecuteRunnerActionResult[]> => this.#ResetWorker(stsWorkerEx),\n Execute: (): Promise<IExecuteRunnerActionResult[]> => this.#ExecuteWorker(stsWorkerEx),\n Update: (executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => this.#UpdateOptionsWorker(stsWorkerEx, executionProfile),\n\n on: (eventName: string, cb: (args?: any) => void): IWorkerEx => {\n stsWorkerEx.workerEvents.push({\n eventName,\n cb\n });\n return stsWorkerEx;\n }\n }\n if (this.#STSInstrumentController) {\n this.#STSInstrumentController.LogEx(chalk.yellow(`pid: [${process.pid}] Creating new worker: [${stsWorkerEx.id}]`));\n }\n \n this.#debug(`AddWorker::workerThreadWorkerOptions: Worker ID: [${stsWorkerEx.id}] Options: [${stsWorkerEx.options}]`);\n\n if (stsWorkerEx.options.mocked) {\n (stsWorkerEx.worker as any).SetPort({\n command: eIWMessageCommands.MessagePort, \n payload: {\n messageId: uuidv4(),\n port: port2,\n options: {\n ...stsWorkerEx.options\n } as IWorkerOptions,\n workerId\n } as IIWMessagePayloadContentBase\n });\n } else {\n this.#PostMessageToWorkerUsingDefaultChannel(stsWorkerEx, eIWMessageCommands.MessagePort, {\n messageId: uuidv4(),\n port: port2,\n //applicationStoreState: stateCopy,\n options: {\n ...stsWorkerEx.options\n } as IWorkerOptions,\n workerId\n } as IIWMessagePayloadContentBase, port2);\n }\n //} as any, port2);\n\n if (!stsWorkerEx.options.mocked) {\n if (isNode) {\n stsWorkerEx.worker.on('exit', (code: any) => {\n try {\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.on(exit): Worker exited with code: ${code}`));\n this.#EmitWorkerEvent('exit', stsWorkerEx);\n if (this.#workersEx[stsWorkerEx.id]) {\n delete this.#workersEx[stsWorkerEx.id];\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.on(exit): Worker: [${stsWorkerEx.id}] has been removed from the worker collection.`));\n }\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.on(exit): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n });\n\n stsWorkerEx.worker.on('error', (error: any) => {\n try {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.on(error): Worker error: ${error}`));\n this.#EmitWorkerEvent('error', stsWorkerEx);\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.on(error): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n });\n } else {\n // Listen for errors from the worker\n (stsWorkerEx.worker as any).onerror = (error: any) => {\n try {\n this.#error(chalk.red('STSWorkerManager:stsWorkerEx.worker.onerror(): Error in worker:', error));\n this.#EmitWorkerEvent('onerror', stsWorkerEx);\n if (this.#workersEx[stsWorkerEx.id]) {\n delete this.#workersEx[stsWorkerEx.id];\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.onerror(error): Worker: [${stsWorkerEx.id}] has been removed from the worker collection.`));\n }\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.onerror(error): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n };\n\n // Optional: Listen for message errors (invalid messages)\n (stsWorkerEx.worker as any).onmessageerror = (error: any) => {\n try {\n this.#error(chalk.red('STSWorkerManager:stsWorkerEx.worker.onmessageerror(): Message error in worker:', error));\n this.#EmitWorkerEvent('onmessageerror', stsWorkerEx);\n } catch (error) {\n this.#error(chalk.red(`STSWorkerManager:stsWorkerEx.worker.onmessageerror(error): Error: [${error}] Worker: [${stsWorkerEx.id}]`));\n }\n };\n }\n }\n\n const processMessage = (data: any) => {\n try {\n const publishMessagePayload: IIWMessagePayload = data;\n\n switch (publishMessagePayload.command) {\n case eIWMessageCommands.MessagePortResponse : \n this.#debug(`AddWorker:processMessage(): eIWMessageCommands.MessagePortResponse`);\n break;\n case eIWMessageCommands.InstrumentTelemetry :\n this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.RunnerStateChange :\n this.#RunnerStateChange(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n case eIWMessageCommands.GetRunnersResponse :\n this.#GetRunnersResponse(stsWorkerEx, publishMessagePayload.payload as ISTSGetRunnersPayload);\n break;\n case eIWMessageCommands.AddRunnerResponse : \n case eIWMessageCommands.StartRunnerResponse :\n case eIWMessageCommands.StopRunnerResponse :\n case eIWMessageCommands.PauseRunnerResponse :\n case eIWMessageCommands.ResumeRunnerResponse :\n case eIWMessageCommands.ExecuteRunnerResponse :\n case eIWMessageCommands.ResetRunnerResponse :\n case eIWMessageCommands.UpdateRunnerResponse :\n case eIWMessageCommands.TerminateRunnerResponse :\n //@@ check for runner state change in any of these responses and apply before resolve back to caller\n //@@ this makes the call eIWMessageCommands.RunnerStateChange redundant as this data should be in\n //@@ these response payloads. This is to stop the race condition of the state potentially being out of\n //@@ step with the client after the await call to any of these actions.\n this.#ProcessRunnerResponse(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayloadResponse);\n break;\n default :\n this.#warn(`processMessage::default: Command Not Found: [${publishMessagePayload.command}]`);\n }\n } catch (error) {\n this.#error(`AddWorker:processMessage(): Error: [${error}]`);\n throw error;\n }\n }\n\n let publishMessagePayload: IIWMessagePayload;\n if (isNode) {\n (stsWorkerEx.messagePort as any).on('message', (data: any) => {\n publishMessagePayload = data as IIWMessagePayload;\n processMessage(publishMessagePayload);\n });\n } else {\n // In browser, onmessage will only allow a single event. We need to use add addEventListener('message', fn)\n // Also note that if onmessage is used in browser, the port will be automatically started (port.start()).\n // Becuase we are going to use addEventListener, we will need to start the ports manually both from the\n // sender (port1) and the receiver (port2).\n (stsWorkerEx.messagePort as any).addEventListener('message', (data: MessageEvent) => {\n publishMessagePayload = data.data as IIWMessagePayload; // browser version\n processMessage(publishMessagePayload);\n });\n }\n\n this.#workersEx[stsWorkerEx.id] = stsWorkerEx;\n\n this.#debug(`Added worker: [${stsWorkerEx.id}]`);\n\n await Sleep(10);\n\n // Now, attempt to get the newly added worker ...\n const worker = await this.GetWorker(stsWorkerEx.id);\n if (worker.id.localeCompare(stsWorkerEx.id) === 0) {\n return stsWorkerEx;\n } else {\n throw new Error('AddWorker(): Could not get newly created worker.');\n }\n } catch (error) {\n this.#error(`AddWorker: Error: [${error}]`);\n throw error;\n }\n }\n\n AddRunnerToWorker = async (stsWorkerEx: IWorkerEx, runnerOptions: IRunnerOptions): Promise<IRunnerEx> => {\n try {\n const runnerEx: IRunnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);\n stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;\n const retVal = await this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);\n if (runnerEx.publishInstrumentController) {\n runnerEx.publishInstrumentController.LogEx(chalk.green(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}]`));\n }\n if (retVal) {\n this.#debug(chalk.green(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}] result: [${JSON.stringify(retVal)}]`));\n }\n return runnerEx;\n } catch (error) {\n this.#error(`AddRunnerToWorker(): Error: [${error}]`);\n throw error;\n }\n }\n\n #SetRunnerIntoWorker = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#SetRunnerIntoWorker`);\n const command = eIWMessageCommands.AddRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#PauseRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ProcessTelemetry = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n try {\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n this.#SyncRunnerData(runnerEx, runner);\n if (runnerEx.publishInstrumentController && this.#telemetryProcessor) {\n this.#telemetryProcessor.ProcessTelemetry(runnerEx.publishInstrumentController, runnerEx.instrumentData);\n }\n this.#EmitRunnerEvent('Telemetry', workerEx, runner.id);\n }\n } catch (error) {\n this.#error(`ProcessTelemetry(): Error: [${error}]`);\n throw error;\n }\n }\n\n #EmitWorkerEvent = (eventName: string, workerEx: IWorkerEx) => {\n try {\n workerEx.workerEvents.forEach(ev => {\n if (ev.eventName.localeCompare(eventName) === 0) {\n ev.cb(workerEx);\n }\n })\n } catch (error) {\n this.#error(`EmitWorkerEvent(): Error: [${error}]`);\n throw error;\n }\n }\n\n #EmitRunnerEvent = (eventName: string, workerEx: IWorkerEx, runnerId: string) => {\n try {\n if (workerEx.runnersEvents[runnerId]) {\n const runnersEvents: IRunnerEvent[] = workerEx.runnersEvents[runnerId];\n runnersEvents.forEach(ev => {\n if (ev.eventName.localeCompare(eventName) === 0) {\n ev.cb(workerEx.runnersEx[runnerId]);\n }\n })\n }\n } catch (error) {\n this.#error(`EmitRunnerEvent(): Error: [${error}]`);\n throw error;\n }\n }\n\n //@@ make this have an event\n //@@ make refactor event to own method\n //@@ check for other events to capture\n #RunnerStateChange = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n try {\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n const previousState = runnerEx.state;\n runnerEx.state = runner.state;\n if (!runnerEx.runnerHistory) {\n runnerEx.runnerHistory = [ ];\n }\n runnerEx.runnerHistory.push({\n eventDate: new Date(),\n runner: { ...runner }\n })\n this.#SyncRunnerData(runnerEx, runner);\n this.#debug(`STSWorkerManager:#RunnerStateChange(): Worker: [${workerEx.id}] Runner: [${runner.id}] Previous State: [${previousState}] State: [${runner.state}]`);\n this.#EmitRunnerEvent('StateChange', workerEx, runner.id);\n }\n } catch (error) {\n this.#error(`RunnerStateChange(): Error: [${error}]`);\n throw error;\n }\n }\n\n #CreateAsyncRunner = (workerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n const runnerId = uuidv4();\n if (this.#STSInstrumentController) {\n this.#STSInstrumentController.LogEx(chalk.yellow(`Creating new async runner: [${runnerId}]`));\n }\n const asyncRunnerContext: IAsyncRunnerContext = {\n // [level1]@[level2]^[level3]|[level4]\n // [hostName]@[agentId]-[userAgent]^[workerId]|[runnerId]\n nid: `\\\n${workerEx.options.hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.options.agentId}-${workerEx.options.userAgent}\\\n${ModelDelimeter.NID_SEPERATOR}\\\n${workerEx.id}\\\n${ModelDelimeter.SEPERATOR}\\\n${runnerId}`,\n hostName: workerEx.options.hostName, // level 1 (e.g. host name)\n agentName: `${workerEx.options.agentId}-${workerEx.options.userAgent}`, // level 2 (e.g. service instance ID or user agent type and tab or instance)\n threadId: `${workerEx.id}`, // level 3 (web worker)\n id: runnerId, // level 4 // (async runner within a web worker)\n }\n\n const runnerEx: IRunnerEx = {\n id: runnerId,\n workerId: workerEx.id,\n workerManagerId: this.#id,\n state: IRunnerState.created,\n iteration: 0,\n publishInstrumentController: (this.#STSInstrumentController) ? this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext) : undefined,\n asyncRunnerContext: asyncRunnerContext,\n options: runnerOptions,\n runnerHistory: [ ],\n instrumentData: {\n requestCount: 0,\n errorCount: 0,\n retryCount: 0,\n authenticationCount: 0,\n authenticationErrorCount: 0,\n authenticationRetryCount: 0,\n velocity: 0,\n coreCount: 0,\n timer: 0,\n duration: 0,\n latency: 0,\n activeRequestCount: 0,\n message: [ ],\n childCount: 0,\n rx: 0,\n tx: 0\n } as IRunnerTelemetry,\n Start: (): Promise<IExecuteRunnerActionResult> => this.#StartRunner(workerEx, runnerEx),\n Stop: (): Promise<IExecuteRunnerActionResult> => this.#StopRunner(workerEx, runnerEx),\n Pause: (): Promise<IExecuteRunnerActionResult> => this.#PauseRunner(workerEx, runnerEx),\n Resume: (): Promise<IExecuteRunnerActionResult> => this.#ResumeRunner(workerEx, runnerEx),\n Reset: (): Promise<IExecuteRunnerActionResult> => this.#ResetRunner(workerEx, runnerEx),\n Execute: (): Promise<IExecuteRunnerActionResult> => this.#ExecuteRunner(workerEx, runnerEx),\n Terminate: (): Promise<IExecuteRunnerActionResult> => this.#TerminateRunner(workerEx, runnerEx),\n Update: (executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult> => this.#UpdateRunner(workerEx, runnerEx, executionProfile),\n on: (eventName: string, cb: (args?: any) => void): IRunnerEx => {\n if (!workerEx.runnersEvents[runnerEx.id]) {\n workerEx.runnersEvents[runnerEx.id] = [ ];\n }\n workerEx.runnersEvents[runnerEx.id].push({\n eventName,\n cb\n });\n return runnerEx;\n },\n archived: false\n }\n\n return runnerEx;\n }\n \n \n #PostMessageToWorkerUsingDefaultChannel = (workerEx: IWorkerEx, command: IIWMessageCommand, payload: IIWMessagePayloadContentBase | null, transferObject?: any) => {\n try {\n if (transferObject) {\n this.#debug(`#PostMessageToWorker with transfer object`);\n workerEx.worker.postMessage({ command, payload }, [transferObject]);\n this.#debug(`#PostMessageToWorker with transfer object - done...`);\n } else {\n this.#debug(`#PostMessageToWorker`);\n workerEx.worker.postMessage({ command, payload });\n }\n } catch (error) {\n this.#debug(`PostMessageToWorkerUsingDefaultChannel(): Error: [${error}]`);\n throw error;\n }\n }\n\n #StartRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#StartRunner`);\n const command = eIWMessageCommands.StartRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#StartRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #StopRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#StopRunner`);\n const command = eIWMessageCommands.StopRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#StopRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ResetRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#ResetRunner`);\n const command = eIWMessageCommands.ResetRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#ResetRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ExecuteRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#ExecuteRunner`);\n const command = eIWMessageCommands.ExecuteRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#ExecuteRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #TerminateRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#TerminateRunner`);\n const command = eIWMessageCommands.TerminateRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#PauseRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #PauseRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#PauseRunner`);\n const command = eIWMessageCommands.PauseRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`#PauseRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #ResumeRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#ResumeRunner`);\n const command = eIWMessageCommands.ResumeRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`ResumeRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #UpdateRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx, executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#UpdateRunner`);\n runnerEx.options.executionProfile = { ...executionProfile };\n const command = eIWMessageCommands.UpdateRunner;\n const messageId = this.#SetupCallbackMessage(resolve, reject, command);\n const payload: ITestRunnerTelemetryPayload = {\n messageId: messageId,\n runner: this.CreateRunnerCopyNoHistory(runnerEx)\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#debug(`UpdateRunner(): Error: [${error}]`);\n throw error;\n }\n });\n }\n\n #StartWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Start());\n }\n return Promise.all(promArray);\n }\n\n #StopWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Stop());\n }\n return Promise.all(promArray);\n }\n\n #PauseWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Pause());\n }\n return Promise.all(promArray);\n }\n\n #ResumeWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Resume());\n }\n return Promise.all(promArray);\n }\n\n #ResetWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Reset());\n }\n return Promise.all(promArray);\n }\n\n #ExecuteWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Execute());\n }\n return Promise.all(promArray);\n }\n\n // IExecutionProfile\n #UpdateOptionsWorker = async (workerEx: IWorkerEx, executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => {\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Update(executionProfile));\n }\n return Promise.all(promArray);\n }\n\n #TerminateWorker = async (workerEx: IWorkerEx): Promise<IExecuteRunnerActionResult[]> => {\n try {\n\n const runners = Object.values(workerEx.runnersEx);\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n for (let i=0; i < runners.length; i++) {\n promArray.push(runners[i].Terminate());\n }\n const retVal = Promise.all(promArray);\n\n if (workerEx.worker) {\n setTimeout(() => {\n workerEx.worker.terminate();\n this.#debug(`Terminated worker: [${workerEx.id}]`);\n if (this.#workersEx[workerEx.id]) {\n delete this.#workersEx[workerEx.id];\n this.#debug(chalk.magenta(`STSWorkerManager:stsWorkerEx.worker.on(exit): Worker: [${workerEx.id}] has been removed from the worker collection.`));\n }\n }, 500);\n }\n\n return retVal;\n } catch (error) {\n this.#debug(`TerminateWorker(): Error: [${error}]`);\n return [ ];\n }\n }\n\n GetNextAvailableWorker = (): IWorkerEx | null => {\n try {\n // Calculate the worker with the least runners\n let leastRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (leastRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {\n leastRunnerWorker = stsWorker;\n }\n } else {\n leastRunnerWorker = stsWorker;\n }\n }\n return leastRunnerWorker;\n } catch (error) {\n this.#error(`#GetNextAvailableWorker(): Error: [${error}]`);\n return null;\n }\n }\n\n GetBusyWorker = (): IWorkerEx | null => {\n try {\n // Calculate the worker with the least runners\n let busyWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (busyWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {\n busyWorker = stsWorker;\n }\n } else {\n busyWorker = stsWorker;\n }\n }\n return busyWorker;\n } catch (error) {\n this.#error(`#GetBusyWorker(): Error: [${error}]`);\n return null;\n }\n }\n\n get Options(): IWorkerManagerOptions {\n return this.#options;\n }\n\n set Options(options: IWorkerManagerOptions) {\n this.#options = options;\n }\n \n #ProcessWorkerCommands = async (workerIds: string[], \n command: 'Start' | 'Stop' | 'Pause' | 'Resume' | 'Execute' | 'Reset' | 'Terminate' | 'Update',\n options?: IExecutionProfile): Promise<IExecuteWorkerActionResult[]> => {\n try {\n const promArray: Promise<IExecuteRunnerActionResult[]>[] = [ ];\n // Setup specified workers\n const workers = Object.values(this.WorkersEx).filter((workerEx) => (workerIds.length === 0 ? true : workerIds.includes(workerEx.id)));\n // Setup array of promises for each worker\n for (let i=0; i < workers.length; i++) {\n if (command === 'Update') {\n promArray.push(workers[i][command](options!));\n } else {\n promArray.push(workers[i][command]());\n }\n }\n // Wait for all to complete\n const retValResult = await Promise.all(promArray);\n // Construct return value\n const returnVal: IExecuteWorkerActionResult[] = [ ];\n for (let i=0; i < workers.length; i++) {\n returnVal.push({\n workerManagerId: this.#id,\n workerId: workers[i].id,\n executeRunnerActionResults: retValResult[i]\n } as IExecuteWorkerActionResult)\n }\n return returnVal;\n } catch (error) {\n this.#error(`ProcessWorkerCommands(): command: [${command}] workerIds: [${workerIds}] Error: [${error}]`);\n return [ ];\n }\n };\n\n StartWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Start');\n }\n \n StopWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Stop');\n };\n\n PauseWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Pause');\n };\n\n ResumeWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Resume');\n }\n\n ExecuteWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Execute');\n }\n\n ResetWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Reset');\n }\n\n TerminateWorkers = async (workerIds: string[]): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Terminate');\n }\n\n UpdateWorkers = async (workerIds: string[], options: IExecutionProfile): Promise<IExecuteWorkerActionResult[]> => {\n return this.#ProcessWorkerCommands(workerIds, 'Update', options);\n }\n\n #ExecuteVariableCommandOnRunners = async (workerId: string, runnerIds: string[], \n command: 'Start' | 'Stop' | 'Pause' | 'Resume' | 'Execute' | 'Reset' | 'Terminate' | 'Update',\n executionProfile?: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => {\n try {\n if (this.#workersEx[workerId]) {\n if (runnerIds.length === 0) {\n if (command === 'Update') {\n return this.#workersEx[workerId][command](executionProfile!);\n } else {\n return this.#workersEx[workerId][command]();\n }\n } else {\n const promArray: Promise<IExecuteRunnerActionResult>[] = [ ];\n // Setup specified runners\n const runners = Object.values(this.#workersEx[workerId].runnersEx)\n .filter((runnerEx) => (runnerIds.length === 0 ? true : runnerIds.includes(runnerEx.id)));\n // Setup array of promises for each runner\n for (let i=0; i < runners.length; i++) {\n if (command === 'Update') {\n promArray.push(runners[i][command](executionProfile!));\n } else {\n promArray.push(runners[i][command]());\n }\n }\n // Wait for all to complete\n const retValResult = await Promise.all(promArray);\n // Construct return value\n const returnVal: IExecuteRunnerActionResult[] = [ ];\n for (let i=0; i < runners.length; i++) {\n returnVal.push({ ...retValResult[i] });\n }\n return returnVal;\n }\n }\n return [ ];\n } catch (error) {\n this.#error(`#ExecuteVariableCommandRunners(): command: [${command}] workerId: [${workerId}] runnerIds: [${runnerIds}] Error: [${error}]`);\n return [ ];\n }\n }\n\n StopRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Stop');\n }\n\n StartRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Start');\n }\n\n PauseRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Pause');\n }\n\n ResumeRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Resume');\n }\n\n ExecuteRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Execute');\n }\n\n ResetRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Reset');\n }\n\n TerminateRunners = async (workerId: string, runnerIds: string[]): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Terminate');\n }\n\n UpdateRunners = async (workerId: string, runnerIds: string[], executionProfile: IExecutionProfile): Promise<IExecuteRunnerActionResult[]> => {\n return this.#ExecuteVariableCommandOnRunners(workerId, runnerIds, 'Update', executionProfile);\n }\n \n #GetRunnersResponse(stsWorkerEx: IWorkerEx, payload: ISTSGetRunnersPayload) {\n try {\n const messageId = payload.messageId as string;\n if (this.#messages[messageId]) {\n const messageRecord = this.#messages[messageId];\n clearTimeout(messageRecord.timeout);\n const returnPayload: IIWMessagePayload = {\n command: eIWMessageCommands.GetRunners,\n payload: {\n messageId: messageId,\n workerId: stsWorkerEx.id,\n runners: payload.runners,\n } as ISTSGetRunnersPayload\n }\n delete this.#messages[messageId];\n messageRecord.resolveMessage(returnPayload);\n }\n } catch (error) {\n this.#error(`#GetRunnersResponse(): Error: [${error}]`);\n }\n }\n\n #ProcessRunnerResponse(stsWorkerEx: IWorkerEx, payload: ITestRunnerTelemetryPayloadResponse) {\n try {\n const messageId = payload.messageId as string;\n if (this.#messages[messageId]) {\n const messageRecord = this.#messages[messageId];\n clearTimeout(messageRecord.timeout);\n const retPayload: IExecuteRunnerActionResult = { ...payload.executeRunnerActionResult };\n delete this.#messages[messageId];\n messageRecord.resolveMessage(retPayload);\n }\n } catch (error) {\n this.#error(`#ProcessRunnerResponse(): Error: [${error}]`);\n }\n }\n \n #SyncRunnerData = (runnerEx: IRunnerEx, runner: IRunner) => {\n try {\n runnerEx.iteration = runner.iteration;\n runnerEx.state = runner.state;\n runnerEx.instrumentData = { ...runner.instrumentData };\n } catch (error) {\n this.#error(`#SyncRunnerData(): Error: [${error}]`);\n }\n }\n\n #SyncWorkerDataFromPayload = (payload: ISTSGetRunnersPayload): void => {\n // Update in-memory graph\n try {\n if (this.#workersEx[payload.workerId]) {\n const runnersEx = this.#workersEx[payload.workerId].runnersEx;\n if (runnersEx) {\n payload.runners.forEach((runner) => {\n if (runnersEx[runner.id]) {\n this.#SyncRunnerData(runnersEx[runner.id], runner);\n }\n });\n }\n }\n } catch (error) {\n this.#error(`#SyncWorkerDataFromPayload(): Error: [${error}]`);\n }\n }\n\n #SyncWorkerDataFromWorker = async (workerEx: IWorkerEx): Promise<IIWMessagePayload> => {\n try {\n const retVal = await this.#PostMessageToWorkerGetRunners(workerEx, eIWMessageCommands.GetRunners);\n // Update in-memory graph\n this.#SyncWorkerDataFromPayload(retVal.payload as ISTSGetRunnersPayload);\n return retVal;\n } catch (error) {\n this.#error(`#SyncWorkerDataFromWorker(): Error: [${error}]`);\n throw error;\n }\n }\n\n #SyncWorkerDataFromWorkers = async (): Promise<IIWMessagePayload[]> => {\n try {\n const retVal = await Promise.all(Object.values(this.#workersEx).map(workerEx => this.#PostMessageToWorkerGetRunners(workerEx, eIWMessageCommands.GetRunners)));\n // Update in-memory graph\n retVal.forEach((messagePayload: IIWMessagePayload) => {\n this.#SyncWorkerDataFromPayload(messagePayload.payload as ISTSGetRunnersPayload);\n });\n return retVal;\n } catch (error) {\n this.#error(`#SyncWorkerDataFromWorkers(): Error: [${error}]`);\n throw error;\n }\n }\n\n #SetupCallbackMessage = (resolve: any, reject: any, command: IIWMessageCommand) => {\n const messageId = uuidv4();\n this.#messages[messageId] = {\n timeout: setTimeout(() => {\n delete this.#messages[messageId]\n reject(`message response timeout for message id: [${messageId}], command: [${command}]`);\n }, 5000),\n resolveMessage: (payload: IIWMessagePayload) => {\n resolve(payload);\n }\n }\n return messageId;\n }\n\n #PostMessageToWorkerGetRunners = async (workerEx: IWorkerEx, command: IIWMessageCommand): Promise<IIWMessagePayload> => {\n return new Promise((resolve, reject) => {\n try {\n this.#debug(`#PostMessageToWorkerGetRunners`);\n const messageId = uuidv4();\n this.#messages[messageId] = {\n timeout: setTimeout(() => {\n delete this.#messages[messageId]\n reject(`message response timeout for message id: [${messageId}], command: [${command}]`);\n }, 5000),\n resolveMessage: (payload: IIWMessagePayload) => {\n resolve(payload);\n }\n }\n const payload: IIWMessagePayloadContentBase = {\n messageId: messageId\n }\n workerEx.messagePort.postMessage({ command, payload });\n } catch (error) {\n this.#error(`#PostMessageToWorkerGetRunners(): Error: [${error}]`);\n }\n });\n }\n}\n"],"names":["eIWMessageCommands","IRunnerState","IWorkerState","require$$0","conversions","route","require$$1","colorConvert","module","chalk","styles","ansiStyles","require$$2","self","require$$3","Sleep","_a","defaultLogger","Gauge","_options","_archiveDeleteTimeout","_logMessage","_debug","_error","_warn","_processLoopExecutor","uuidv4","_StartRunner","_StopRunner","_PauseRunner","_ResumeRunner","_TerminateRunner","_ResetRunner","_ExecuteRunner","_UpdateRunner","error","publishMessagePayload","ModelDelimeter","payload"],"mappings":";;;;;;;;;;;;;;;;AA0BY,MAAA,uCAAAA,wBAAL;AACNA,wBAAA,qBAAqB,IAAA;AAErBA,wBAAA,aAAc,IAAA;AACdA,wBAAA,qBAAsB,IAAA;AAEtBA,wBAAA,WAAY,IAAA;AACZA,wBAAA,mBAAoB,IAAA;AAEpBA,wBAAA,aAAc,IAAA;AACdA,wBAAA,qBAAsB,IAAA;AAEtBA,wBAAA,YAAa,IAAA;AACbA,wBAAA,oBAAqB,IAAA;AAErBA,wBAAA,aAAc,IAAA;AACdA,wBAAA,qBAAsB,IAAA;AAEtBA,wBAAA,cAAe,IAAA;AACfA,wBAAA,sBAAuB,IAAA;AAEvBA,wBAAA,aAAc,IAAA;AACdA,wBAAA,qBAAsB,IAAA;AAEtBA,wBAAA,eAAgB,IAAA;AAChBA,wBAAA,uBAAwB,IAAA;AAExBA,wBAAA,WAAY,IAAA;AAEZA,wBAAA,cAAe,IAAA;AACfA,wBAAA,sBAAuB,IAAA;AAEvBA,wBAAA,iBAAkB,IAAA;AAClBA,wBAAA,yBAA0B,IAAA;AAE1BA,wBAAA,mBAAoB,IAAA;AAEpBA,wBAAA,YAAa,IAAA;AACbA,wBAAA,oBAAqB,IAAA;AAtCVA,WAAAA;AAAAA,EAAA,GAAA,sBAAA,CAAA,CAAA;AAiEA,MAAA,iCAAAC,kBAAL;AACNA,kBAAA,SAAU,IAAA;AACVA,kBAAA,SAAU,IAAA;AACVA,kBAAA,QAAS,IAAA;AACTA,kBAAA,WAAY,IAAA;AACZA,kBAAA,SAAU,IAAA;AACVA,kBAAA,YAAa,IAAA;AACbA,kBAAA,OAAQ,IAAA;AAPGA,WAAAA;AAAAA,EAAA,GAAA,gBAAA,CAAA,CAAA;AAkFA,MAAA,iCAAAC,kBAAL;AACNA,kBAAA,UAAW,IAAA;AACXA,kBAAA,SAAU,IAAA;AACVA,kBAAA,SAAU,IAAA;AACVA,kBAAA,QAAS,IAAA;AACTA,kBAAA,OAAQ,IAAA;AALGA,WAAAA;AAAAA,EAAA,GAAA,gBAAA,CAAA,CAAA;AAkHL,QAAM,mCAAmC;AAAA,IAC5C,GAAG;AAAA,IACH,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,6BAA6B;AAAA,EACjC;ACrSA,QAAA,SAAe,OAAO,UAAU,SAAS,KAAK,OAAO,YAAY,cAAc,UAAU,CAAC,MAAM;;;;;;;;;;ACChG,gBAAiB;AAAA,MAChB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC9B,QAAQ,CAAC,GAAG,KAAK,GAAG;AAAA,MACpB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,MACxB,SAAS,CAAC,GAAG,GAAG,CAAC;AAAA,MACjB,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,MAChC,QAAQ,CAAC,GAAG,GAAG,GAAG;AAAA,MAClB,cAAc,CAAC,KAAK,IAAI,GAAG;AAAA,MAC3B,SAAS,CAAC,KAAK,IAAI,EAAE;AAAA,MACrB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,MAC1B,cAAc,CAAC,KAAK,KAAK,CAAC;AAAA,MAC1B,aAAa,CAAC,KAAK,KAAK,EAAE;AAAA,MAC1B,SAAS,CAAC,KAAK,KAAK,EAAE;AAAA,MACtB,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,MAChC,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,WAAW,CAAC,KAAK,IAAI,EAAE;AAAA,MACvB,QAAQ,CAAC,GAAG,KAAK,GAAG;AAAA,MACpB,YAAY,CAAC,GAAG,GAAG,GAAG;AAAA,MACtB,YAAY,CAAC,GAAG,KAAK,GAAG;AAAA,MACxB,iBAAiB,CAAC,KAAK,KAAK,EAAE;AAAA,MAC9B,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,aAAa,CAAC,GAAG,KAAK,CAAC;AAAA,MACvB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,eAAe,CAAC,KAAK,GAAG,GAAG;AAAA,MAC3B,kBAAkB,CAAC,IAAI,KAAK,EAAE;AAAA,MAC9B,cAAc,CAAC,KAAK,KAAK,CAAC;AAAA,MAC1B,cAAc,CAAC,KAAK,IAAI,GAAG;AAAA,MAC3B,WAAW,CAAC,KAAK,GAAG,CAAC;AAAA,MACrB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC9B,iBAAiB,CAAC,IAAI,IAAI,GAAG;AAAA,MAC7B,iBAAiB,CAAC,IAAI,IAAI,EAAE;AAAA,MAC5B,iBAAiB,CAAC,IAAI,IAAI,EAAE;AAAA,MAC5B,iBAAiB,CAAC,GAAG,KAAK,GAAG;AAAA,MAC7B,cAAc,CAAC,KAAK,GAAG,GAAG;AAAA,MAC1B,YAAY,CAAC,KAAK,IAAI,GAAG;AAAA,MACzB,eAAe,CAAC,GAAG,KAAK,GAAG;AAAA,MAC3B,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,MACzB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,MACzB,cAAc,CAAC,IAAI,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,KAAK,IAAI,EAAE;AAAA,MACzB,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,MAC7B,eAAe,CAAC,IAAI,KAAK,EAAE;AAAA,MAC3B,WAAW,CAAC,KAAK,GAAG,GAAG;AAAA,MACvB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,QAAQ,CAAC,KAAK,KAAK,CAAC;AAAA,MACpB,aAAa,CAAC,KAAK,KAAK,EAAE;AAAA,MAC1B,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,MACtB,SAAS,CAAC,GAAG,KAAK,CAAC;AAAA,MACnB,eAAe,CAAC,KAAK,KAAK,EAAE;AAAA,MAC5B,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,MACtB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,MACzB,aAAa,CAAC,KAAK,IAAI,EAAE;AAAA,MACzB,UAAU,CAAC,IAAI,GAAG,GAAG;AAAA,MACrB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC/B,aAAa,CAAC,KAAK,KAAK,CAAC;AAAA,MACzB,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC9B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,wBAAwB,CAAC,KAAK,KAAK,GAAG;AAAA,MACtC,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,MAC7B,iBAAiB,CAAC,IAAI,KAAK,GAAG;AAAA,MAC9B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC9B,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,MAChC,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,MAChC,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,MAChC,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,MAC7B,QAAQ,CAAC,GAAG,KAAK,CAAC;AAAA,MAClB,aAAa,CAAC,IAAI,KAAK,EAAE;AAAA,MACzB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,WAAW,CAAC,KAAK,GAAG,GAAG;AAAA,MACvB,UAAU,CAAC,KAAK,GAAG,CAAC;AAAA,MACpB,oBAAoB,CAAC,KAAK,KAAK,GAAG;AAAA,MAClC,cAAc,CAAC,GAAG,GAAG,GAAG;AAAA,MACxB,gBAAgB,CAAC,KAAK,IAAI,GAAG;AAAA,MAC7B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC9B,kBAAkB,CAAC,IAAI,KAAK,GAAG;AAAA,MAC/B,mBAAmB,CAAC,KAAK,KAAK,GAAG;AAAA,MACjC,qBAAqB,CAAC,GAAG,KAAK,GAAG;AAAA,MACjC,mBAAmB,CAAC,IAAI,KAAK,GAAG;AAAA,MAChC,mBAAmB,CAAC,KAAK,IAAI,GAAG;AAAA,MAChC,gBAAgB,CAAC,IAAI,IAAI,GAAG;AAAA,MAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,MAC7B,QAAQ,CAAC,GAAG,GAAG,GAAG;AAAA,MAClB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,MACzB,SAAS,CAAC,KAAK,KAAK,CAAC;AAAA,MACrB,aAAa,CAAC,KAAK,KAAK,EAAE;AAAA,MAC1B,UAAU,CAAC,KAAK,KAAK,CAAC;AAAA,MACtB,aAAa,CAAC,KAAK,IAAI,CAAC;AAAA,MACxB,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,MACxB,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC/B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC/B,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,MAC/B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,QAAQ,CAAC,KAAK,KAAK,EAAE;AAAA,MACrB,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,MACtB,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,MACtB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,UAAU,CAAC,KAAK,GAAG,GAAG;AAAA,MACtB,iBAAiB,CAAC,KAAK,IAAI,GAAG;AAAA,MAC9B,OAAO,CAAC,KAAK,GAAG,CAAC;AAAA,MACjB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,MAC1B,eAAe,CAAC,KAAK,IAAI,EAAE;AAAA,MAC3B,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,MACxB,cAAc,CAAC,KAAK,KAAK,EAAE;AAAA,MAC3B,YAAY,CAAC,IAAI,KAAK,EAAE;AAAA,MACxB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,MAC1B,UAAU,CAAC,KAAK,IAAI,EAAE;AAAA,MACtB,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,MACxB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,MACzB,aAAa,CAAC,KAAK,IAAI,GAAG;AAAA,MAC1B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,MAC3B,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,MACtB,eAAe,CAAC,GAAG,KAAK,GAAG;AAAA,MAC3B,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,MAC1B,OAAO,CAAC,KAAK,KAAK,GAAG;AAAA,MACrB,QAAQ,CAAC,GAAG,KAAK,GAAG;AAAA,MACpB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,MACzB,UAAU,CAAC,KAAK,IAAI,EAAE;AAAA,MACtB,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,MAC1B,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,MACxB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,MAC5B,UAAU,CAAC,KAAK,KAAK,CAAC;AAAA,MACtB,eAAe,CAAC,KAAK,KAAK,EAAE;AAAA,IAC5B;;;;;;;;ACrJD,UAAM,cAAcC,iBAAqB;AAMzC,UAAM,kBAAkB,CAAE;AAC1B,eAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC3C,sBAAgB,YAAY,GAAG,CAAC,IAAI;AAAA,IACrC;AAEA,UAAM,UAAU;AAAA,MACf,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,MAAM,EAAC,UAAU,GAAG,QAAQ,OAAM;AAAA,MAClC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,MAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAC;AAAA,MAClC,SAAS,EAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAC;AAAA,MAC1C,QAAQ,EAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAC;AAAA,MACxC,SAAS,EAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAC;AAAA,MAC1C,KAAK,EAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,KAAK,GAAG,EAAC;AAAA,MAC1C,OAAO,EAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,OAAO,KAAK,EAAC;AAAA,MAClD,MAAM,EAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAC;AAAA,IACpC;AAED,kBAAiB;AAGjB,eAAW,SAAS,OAAO,KAAK,OAAO,GAAG;AACzC,UAAI,EAAE,cAAc,QAAQ,KAAK,IAAI;AACpC,cAAM,IAAI,MAAM,gCAAgC,KAAK;AAAA,MACvD;AAEC,UAAI,EAAE,YAAY,QAAQ,KAAK,IAAI;AAClC,cAAM,IAAI,MAAM,sCAAsC,KAAK;AAAA,MAC7D;AAEC,UAAI,QAAQ,KAAK,EAAE,OAAO,WAAW,QAAQ,KAAK,EAAE,UAAU;AAC7D,cAAM,IAAI,MAAM,wCAAwC,KAAK;AAAA,MAC/D;AAEC,YAAM,EAAC,UAAU,OAAM,IAAI,QAAQ,KAAK;AACxC,aAAO,QAAQ,KAAK,EAAE;AACtB,aAAO,QAAQ,KAAK,EAAE;AACtB,aAAO,eAAe,QAAQ,KAAK,GAAG,YAAY,EAAC,OAAO,SAAQ,CAAC;AACnE,aAAO,eAAe,QAAQ,KAAK,GAAG,UAAU,EAAC,OAAO,OAAM,CAAC;AAAA,IAChE;AAEA,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,YAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,YAAM,QAAQ,MAAM;AACpB,UAAI;AACJ,UAAI;AAEJ,UAAI,QAAQ,KAAK;AAChB,YAAI;AAAA,MACN,WAAY,MAAM,KAAK;AACrB,aAAK,IAAI,KAAK;AAAA,MAChB,WAAY,MAAM,KAAK;AACrB,YAAI,KAAK,IAAI,KAAK;AAAA,MACpB,WAAY,MAAM,KAAK;AACrB,YAAI,KAAK,IAAI,KAAK;AAAA,MACpB;AAEC,UAAI,KAAK,IAAI,IAAI,IAAI,GAAG;AAExB,UAAI,IAAI,GAAG;AACV,aAAK;AAAA,MACP;AAEC,YAAM,KAAK,MAAM,OAAO;AAExB,UAAI,QAAQ,KAAK;AAChB,YAAI;AAAA,MACN,WAAY,KAAK,KAAK;AACpB,YAAI,SAAS,MAAM;AAAA,MACrB,OAAQ;AACN,YAAI,SAAS,IAAI,MAAM;AAAA,MACzB;AAEC,aAAO,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAC3B;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC;AAC1B,YAAM,OAAO,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC;AACjC,YAAM,QAAQ,SAAU,GAAG;AAC1B,gBAAQ,IAAI,KAAK,IAAI,OAAO,IAAI;AAAA,MAChC;AAED,UAAI,SAAS,GAAG;AACf,YAAI;AACJ,YAAI;AAAA,MACN,OAAQ;AACN,YAAI,OAAO;AACX,eAAO,MAAM,CAAC;AACd,eAAO,MAAM,CAAC;AACd,eAAO,MAAM,CAAC;AAEd,YAAI,MAAM,GAAG;AACZ,cAAI,OAAO;AAAA,QACd,WAAa,MAAM,GAAG;AACnB,cAAK,IAAI,IAAK,OAAO;AAAA,QACxB,WAAa,MAAM,GAAG;AACnB,cAAK,IAAI,IAAK,OAAO;AAAA,QACxB;AAEE,YAAI,IAAI,GAAG;AACV,eAAK;AAAA,QACR,WAAa,IAAI,GAAG;AACjB,eAAK;AAAA,QACR;AAAA,MACA;AAEC,aAAO;AAAA,QACN,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACJ;AAAA,IACD;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AACf,UAAI,IAAI,IAAI,CAAC;AACb,YAAM,IAAI,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC;AAChC,YAAM,IAAI,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAE9C,UAAI,IAAI,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAE5C,aAAO,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAC3B;AAED,YAAQ,IAAI,OAAO,SAAU,KAAK;AACjC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,YAAM,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC,YAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;AACnC,YAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;AACnC,YAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;AAEnC,aAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,IAC1C;AAED,aAAS,oBAAoB,GAAG,GAAG;AAIlC,cACG,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAChB,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAChB,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM;AAAA,IAEpB;AAEA,YAAQ,IAAI,UAAU,SAAU,KAAK;AACpC,YAAM,WAAW,gBAAgB,GAAG;AACpC,UAAI,UAAU;AACb,eAAO;AAAA,MACT;AAEC,UAAI,yBAAyB;AAC7B,UAAI;AAEJ,iBAAW,WAAW,OAAO,KAAK,WAAW,GAAG;AAC/C,cAAM,QAAQ,YAAY,OAAO;AAGjC,cAAM,WAAW,oBAAoB,KAAK,KAAK;AAG/C,YAAI,WAAW,wBAAwB;AACtC,mCAAyB;AACzB,kCAAwB;AAAA,QAC3B;AAAA,MACA;AAEC,aAAO;AAAA,IACP;AAED,YAAQ,QAAQ,MAAM,SAAU,SAAS;AACxC,aAAO,YAAY,OAAO;AAAA,IAC1B;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAI,IAAI,IAAI,CAAC,IAAI;AACjB,UAAI,IAAI,IAAI,CAAC,IAAI;AACjB,UAAI,IAAI,IAAI,CAAC,IAAI;AAGjB,UAAI,IAAI,YAAa,IAAI,SAAS,UAAU,MAAQ,IAAI;AACxD,UAAI,IAAI,YAAa,IAAI,SAAS,UAAU,MAAQ,IAAI;AACxD,UAAI,IAAI,YAAa,IAAI,SAAS,UAAU,MAAQ,IAAI;AAExD,YAAM,IAAK,IAAI,SAAW,IAAI,SAAW,IAAI;AAC7C,YAAM,IAAK,IAAI,SAAW,IAAI,SAAW,IAAI;AAC7C,YAAM,IAAK,IAAI,SAAW,IAAI,SAAW,IAAI;AAE7C,aAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,IACjC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,MAAM,QAAQ,IAAI,IAAI,GAAG;AAC/B,UAAI,IAAI,IAAI,CAAC;AACb,UAAI,IAAI,IAAI,CAAC;AACb,UAAI,IAAI,IAAI,CAAC;AAEb,WAAK;AACL,WAAK;AACL,WAAK;AAEL,UAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,UAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,UAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AAExD,YAAM,IAAK,MAAM,IAAK;AACtB,YAAM,IAAI,OAAO,IAAI;AACrB,YAAM,IAAI,OAAO,IAAI;AAErB,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAI,MAAM,GAAG;AACZ,cAAM,IAAI;AACV,eAAO,CAAC,KAAK,KAAK,GAAG;AAAA,MACvB;AAEC,UAAI,IAAI,KAAK;AACZ,aAAK,KAAK,IAAI;AAAA,MAChB,OAAQ;AACN,aAAK,IAAI,IAAI,IAAI;AAAA,MACnB;AAEC,YAAM,KAAK,IAAI,IAAI;AAEnB,YAAM,MAAM,CAAC,GAAG,GAAG,CAAC;AACpB,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,aAAK,IAAI,IAAI,IAAI,EAAE,IAAI;AACvB,YAAI,KAAK,GAAG;AACX;AAAA,QACH;AAEE,YAAI,KAAK,GAAG;AACX;AAAA,QACH;AAEE,YAAI,IAAI,KAAK,GAAG;AACf,gBAAM,MAAM,KAAK,MAAM,IAAI;AAAA,QAC9B,WAAa,IAAI,KAAK,GAAG;AACtB,gBAAM;AAAA,QACT,WAAa,IAAI,KAAK,GAAG;AACtB,gBAAM,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM;AAAA,QACzC,OAAS;AACN,gBAAM;AAAA,QACT;AAEE,YAAI,CAAC,IAAI,MAAM;AAAA,MACjB;AAEC,aAAO;AAAA,IACP;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC;AACf,UAAI,IAAI,IAAI,CAAC,IAAI;AACjB,UAAI,IAAI,IAAI,CAAC,IAAI;AACjB,UAAI,OAAO;AACX,YAAM,OAAO,KAAK,IAAI,GAAG,IAAI;AAE7B,WAAK;AACL,WAAM,KAAK,IAAK,IAAI,IAAI;AACxB,cAAQ,QAAQ,IAAI,OAAO,IAAI;AAC/B,YAAM,KAAK,IAAI,KAAK;AACpB,YAAM,KAAK,MAAM,IAAK,IAAI,QAAS,OAAO,QAAS,IAAI,KAAM,IAAI;AAEjE,aAAO,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG;AAAA,IAC5B;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAI,IAAI,IAAI,CAAC,IAAI;AACjB,YAAM,KAAK,KAAK,MAAM,CAAC,IAAI;AAE3B,YAAM,IAAI,IAAI,KAAK,MAAM,CAAC;AAC1B,YAAM,IAAI,MAAM,KAAK,IAAI;AACzB,YAAM,IAAI,MAAM,KAAK,IAAK,IAAI;AAC9B,YAAM,IAAI,MAAM,KAAK,IAAK,KAAK,IAAI;AACnC,WAAK;AAEL,cAAQ,IAAE;AAAA,QACT,KAAK;AACJ,iBAAO,CAAC,GAAG,GAAG,CAAC;AAAA,QAChB,KAAK;AACJ,iBAAO,CAAC,GAAG,GAAG,CAAC;AAAA,QAChB,KAAK;AACJ,iBAAO,CAAC,GAAG,GAAG,CAAC;AAAA,QAChB,KAAK;AACJ,iBAAO,CAAC,GAAG,GAAG,CAAC;AAAA,QAChB,KAAK;AACJ,iBAAO,CAAC,GAAG,GAAG,CAAC;AAAA,QAChB,KAAK;AACJ,iBAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MAClB;AAAA,IACC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,OAAO,KAAK,IAAI,GAAG,IAAI;AAC7B,UAAI;AACJ,UAAI;AAEJ,WAAK,IAAI,KAAK;AACd,YAAM,QAAQ,IAAI,KAAK;AACvB,WAAK,IAAI;AACT,YAAO,QAAQ,IAAK,OAAO,IAAI;AAC/B,WAAK,MAAM;AACX,WAAK;AAEL,aAAO,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG;AAAA,IAC5B;AAGD,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAI,KAAK,IAAI,CAAC,IAAI;AAClB,UAAI,KAAK,IAAI,CAAC,IAAI;AAClB,YAAM,QAAQ,KAAK;AACnB,UAAI;AAGJ,UAAI,QAAQ,GAAG;AACd,cAAM;AACN,cAAM;AAAA,MACR;AAEC,YAAM,IAAI,KAAK,MAAM,IAAI,CAAC;AAC1B,YAAM,IAAI,IAAI;AACd,UAAI,IAAI,IAAI;AAEZ,WAAK,IAAI,OAAU,GAAG;AACrB,YAAI,IAAI;AAAA,MACV;AAEC,YAAM,IAAI,KAAK,KAAK,IAAI;AAExB,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,cAAQ,GAAC;AAAA,QACR;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAG,cAAI;AAAI,cAAI;AAAI,cAAI;AAAI;AAAA,QAChC,KAAK;AAAG,cAAI;AAAI,cAAI;AAAI,cAAI;AAAI;AAAA,QAChC,KAAK;AAAG,cAAI;AAAI,cAAI;AAAI,cAAI;AAAG;AAAA,QAC/B,KAAK;AAAG,cAAI;AAAI,cAAI;AAAI,cAAI;AAAG;AAAA,QAC/B,KAAK;AAAG,cAAI;AAAI,cAAI;AAAI,cAAI;AAAG;AAAA,QAC/B,KAAK;AAAG,cAAI;AAAI,cAAI;AAAI,cAAI;AAAG;AAAA,MACjC;AAGC,aAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,IACjC;AAED,YAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,YAAM,IAAI,KAAK,CAAC,IAAI;AACpB,YAAM,IAAI,KAAK,CAAC,IAAI;AACpB,YAAM,IAAI,KAAK,CAAC,IAAI;AACpB,YAAM,IAAI,KAAK,CAAC,IAAI;AAEpB,YAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;AACzC,YAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;AACzC,YAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;AAEzC,aAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,IACjC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAK,IAAI,SAAW,IAAI,UAAY,IAAI;AACxC,UAAK,IAAI,UAAY,IAAI,SAAW,IAAI;AACxC,UAAK,IAAI,SAAW,IAAI,SAAY,IAAI;AAGxC,UAAI,IAAI,WACH,QAAS,MAAM,IAAM,OAAS,QAChC,IAAI;AAEP,UAAI,IAAI,WACH,QAAS,MAAM,IAAM,OAAS,QAChC,IAAI;AAEP,UAAI,IAAI,WACH,QAAS,MAAM,IAAM,OAAS,QAChC,IAAI;AAEP,UAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAC9B,UAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAC9B,UAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAE9B,aAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,IACjC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAI,IAAI,IAAI,CAAC;AACb,UAAI,IAAI,IAAI,CAAC;AACb,UAAI,IAAI,IAAI,CAAC;AAEb,WAAK;AACL,WAAK;AACL,WAAK;AAEL,UAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,UAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,UAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AAExD,YAAM,IAAK,MAAM,IAAK;AACtB,YAAM,IAAI,OAAO,IAAI;AACrB,YAAM,IAAI,OAAO,IAAI;AAErB,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AACf,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,WAAK,IAAI,MAAM;AACf,UAAI,IAAI,MAAM;AACd,UAAI,IAAI,IAAI;AAEZ,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,YAAM,KAAK,KAAK;AAChB,UAAI,KAAK,UAAW,MAAM,IAAI,KAAK,OAAO;AAC1C,UAAI,KAAK,UAAW,MAAM,IAAI,KAAK,OAAO;AAC1C,UAAI,KAAK,UAAW,MAAM,IAAI,KAAK,OAAO;AAE1C,WAAK;AACL,WAAK;AACL,WAAK;AAEL,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AACf,UAAI;AAEJ,YAAM,KAAK,KAAK,MAAM,GAAG,CAAC;AAC1B,UAAI,KAAK,MAAM,IAAI,KAAK;AAExB,UAAI,IAAI,GAAG;AACV,aAAK;AAAA,MACP;AAEC,YAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAEjC,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AACf,YAAM,IAAI,IAAI,CAAC;AAEf,YAAM,KAAK,IAAI,MAAM,IAAI,KAAK;AAC9B,YAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,YAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AAEzB,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,SAAS,SAAU,MAAM,aAAa,MAAM;AACvD,YAAM,CAAC,GAAG,GAAG,CAAC,IAAI;AAClB,UAAI,QAAQ,eAAe,OAAO,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI;AAE7D,cAAQ,KAAK,MAAM,QAAQ,EAAE;AAE7B,UAAI,UAAU,GAAG;AAChB,eAAO;AAAA,MACT;AAEC,UAAI,OAAO,MACN,KAAK,MAAM,IAAI,GAAG,KAAK,IACxB,KAAK,MAAM,IAAI,GAAG,KAAK,IACxB,KAAK,MAAM,IAAI,GAAG;AAErB,UAAI,UAAU,GAAG;AAChB,gBAAQ;AAAA,MACV;AAEC,aAAO;AAAA,IACP;AAED,YAAQ,IAAI,SAAS,SAAU,MAAM;AAGpC,aAAO,QAAQ,IAAI,OAAO,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,IACxD;AAED,YAAQ,IAAI,UAAU,SAAU,MAAM;AACrC,YAAM,IAAI,KAAK,CAAC;AAChB,YAAM,IAAI,KAAK,CAAC;AAChB,YAAM,IAAI,KAAK,CAAC;AAIhB,UAAI,MAAM,KAAK,MAAM,GAAG;AACvB,YAAI,IAAI,GAAG;AACV,iBAAO;AAAA,QACV;AAEE,YAAI,IAAI,KAAK;AACZ,iBAAO;AAAA,QACV;AAEE,eAAO,KAAK,OAAQ,IAAI,KAAK,MAAO,EAAE,IAAI;AAAA,MAC5C;AAEC,YAAM,OAAO,KACT,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,IAC3B,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAC3B,KAAK,MAAM,IAAI,MAAM,CAAC;AAEzB,aAAO;AAAA,IACP;AAED,YAAQ,OAAO,MAAM,SAAU,MAAM;AACpC,UAAI,QAAQ,OAAO;AAGnB,UAAI,UAAU,KAAK,UAAU,GAAG;AAC/B,YAAI,OAAO,IAAI;AACd,mBAAS;AAAA,QACZ;AAEE,gBAAQ,QAAQ,OAAO;AAEvB,eAAO,CAAC,OAAO,OAAO,KAAK;AAAA,MAC7B;AAEC,YAAM,QAAQ,CAAC,EAAE,OAAO,MAAM,KAAK;AACnC,YAAM,KAAM,QAAQ,KAAK,OAAQ;AACjC,YAAM,KAAO,SAAS,IAAK,KAAK,OAAQ;AACxC,YAAM,KAAO,SAAS,IAAK,KAAK,OAAQ;AAExC,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,QAAQ,MAAM,SAAU,MAAM;AAErC,UAAI,QAAQ,KAAK;AAChB,cAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MACjB;AAEC,cAAQ;AAER,UAAI;AACJ,YAAM,IAAI,KAAK,MAAM,OAAO,EAAE,IAAI,IAAI;AACtC,YAAM,IAAI,KAAK,OAAO,MAAM,OAAO,MAAM,CAAC,IAAI,IAAI;AAClD,YAAM,IAAK,MAAM,IAAK,IAAI;AAE1B,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,MAAM,SAAU,MAAM;AACjC,YAAM,YAAY,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,QAAS,QAC5C,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,QAAS,MAChC,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI;AAE1B,YAAM,SAAS,QAAQ,SAAS,EAAE,EAAE,YAAa;AACjD,aAAO,SAAS,UAAU,OAAO,MAAM,IAAI;AAAA,IAC3C;AAED,YAAQ,IAAI,MAAM,SAAU,MAAM;AACjC,YAAM,QAAQ,KAAK,SAAS,EAAE,EAAE,MAAM,0BAA0B;AAChE,UAAI,CAAC,OAAO;AACX,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MACjB;AAEC,UAAI,cAAc,MAAM,CAAC;AAEzB,UAAI,MAAM,CAAC,EAAE,WAAW,GAAG;AAC1B,sBAAc,YAAY,MAAM,EAAE,EAAE,IAAI,UAAQ;AAC/C,iBAAO,OAAO;AAAA,QACjB,CAAG,EAAE,KAAK,EAAE;AAAA,MACZ;AAEC,YAAM,UAAU,SAAS,aAAa,EAAE;AACxC,YAAM,IAAK,WAAW,KAAM;AAC5B,YAAM,IAAK,WAAW,IAAK;AAC3B,YAAM,IAAI,UAAU;AAEpB,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACf;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AACtC,YAAM,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AACtC,YAAM,SAAU,MAAM;AACtB,UAAI;AACJ,UAAI;AAEJ,UAAI,SAAS,GAAG;AACf,oBAAY,OAAO,IAAI;AAAA,MACzB,OAAQ;AACN,oBAAY;AAAA,MACd;AAEC,UAAI,UAAU,GAAG;AAChB,cAAM;AAAA,MACN,WACG,QAAQ,GAAG;AACd,eAAQ,IAAI,KAAK,SAAU;AAAA,MAC3B,WACG,QAAQ,GAAG;AACd,cAAM,KAAK,IAAI,KAAK;AAAA,MACtB,OAAQ;AACN,cAAM,KAAK,IAAI,KAAK;AAAA,MACtB;AAEC,aAAO;AACP,aAAO;AAEP,aAAO,CAAC,MAAM,KAAK,SAAS,KAAK,YAAY,GAAG;AAAA,IAChD;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,YAAM,IAAI,IAAI,MAAO,IAAM,IAAI,IAAM,IAAM,KAAK,IAAM;AAEtD,UAAI,IAAI;AACR,UAAI,IAAI,GAAK;AACZ,aAAK,IAAI,MAAM,MAAM,IAAM;AAAA,MAC7B;AAEC,aAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,YAAM,IAAI,IAAI;AACd,UAAI,IAAI;AAER,UAAI,IAAI,GAAK;AACZ,aAAK,IAAI,MAAM,IAAI;AAAA,MACrB;AAEC,aAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,UAAI,MAAM,GAAK;AACd,eAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,MACnC;AAEC,YAAM,OAAO,CAAC,GAAG,GAAG,CAAC;AACrB,YAAM,KAAM,IAAI,IAAK;AACrB,YAAM,IAAI,KAAK;AACf,YAAM,IAAI,IAAI;AACd,UAAI,KAAK;AAGT,cAAQ,KAAK,MAAM,EAAE,GAAC;AAAA,QACrB,KAAK;AACJ,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG;AAAA,QACxC,KAAK;AACJ,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG;AAAA,QACxC,KAAK;AACJ,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG;AAAA,QACxC,KAAK;AACJ,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG;AAAA,QACxC,KAAK;AACJ,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG;AAAA,QACxC;AACC,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAG,eAAK,CAAC,IAAI;AAAA,MACvC;AAGC,YAAM,IAAM,KAAK;AAEjB,aAAO;AAAA,SACL,IAAI,KAAK,CAAC,IAAI,MAAM;AAAA,SACpB,IAAI,KAAK,CAAC,IAAI,MAAM;AAAA,SACpB,IAAI,KAAK,CAAC,IAAI,MAAM;AAAA,MACrB;AAAA,IACD;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,YAAM,IAAI,IAAI,KAAK,IAAM;AACzB,UAAI,IAAI;AAER,UAAI,IAAI,GAAK;AACZ,YAAI,IAAI;AAAA,MACV;AAEC,aAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,YAAM,IAAI,KAAK,IAAM,KAAK,MAAM;AAChC,UAAI,IAAI;AAER,UAAI,IAAI,KAAO,IAAI,KAAK;AACvB,YAAI,KAAK,IAAI;AAAA,MACb,WACG,KAAK,OAAO,IAAI,GAAK;AACxB,YAAI,KAAK,KAAK,IAAI;AAAA,MACpB;AAEC,aAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,KAAK,IAAM;AACzB,aAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,GAAG;AAAA,IAC5C;AAED,YAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI,CAAC,IAAI;AACnB,YAAM,IAAI,IAAI;AACd,YAAM,IAAI,IAAI;AACd,UAAI,IAAI;AAER,UAAI,IAAI,GAAG;AACV,aAAK,IAAI,MAAM,IAAI;AAAA,MACrB;AAEC,aAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,IAChC;AAED,YAAQ,MAAM,MAAM,SAAU,OAAO;AACpC,aAAO,CAAE,MAAM,CAAC,IAAI,QAAS,KAAM,MAAM,CAAC,IAAI,QAAS,KAAM,MAAM,CAAC,IAAI,QAAS,GAAG;AAAA,IACpF;AAED,YAAQ,IAAI,QAAQ,SAAU,KAAK;AAClC,aAAO,CAAE,IAAI,CAAC,IAAI,MAAO,OAAQ,IAAI,CAAC,IAAI,MAAO,OAAQ,IAAI,CAAC,IAAI,MAAO,KAAK;AAAA,IAC9E;AAED,YAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,aAAO,CAAC,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,MAAM,GAAG;AAAA,IACrE;AAED,YAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,aAAO,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA,IACrB;AAED,YAAQ,KAAK,MAAM,QAAQ,KAAK;AAEhC,YAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,aAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,IACvB;AAED,YAAQ,KAAK,OAAO,SAAU,MAAM;AACnC,aAAO,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA,IACxB;AAED,YAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,aAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAAA,IACrB;AAED,YAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,YAAM,MAAM,KAAK,MAAM,KAAK,CAAC,IAAI,MAAM,GAAG,IAAI;AAC9C,YAAM,WAAW,OAAO,OAAO,OAAO,KAAK;AAE3C,YAAM,SAAS,QAAQ,SAAS,EAAE,EAAE,YAAa;AACjD,aAAO,SAAS,UAAU,OAAO,MAAM,IAAI;AAAA,IAC3C;AAED,YAAQ,IAAI,OAAO,SAAU,KAAK;AACjC,YAAM,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AACzC,aAAO,CAAC,MAAM,MAAM,GAAG;AAAA,IACvB;;;;;;;;ACt0BD,UAAMC,eAAcD,mBAAwB;AAa5C,aAAS,aAAa;AACrB,YAAM,QAAQ,CAAE;AAEhB,YAAM,SAAS,OAAO,KAAKC,YAAW;AAEtC,eAAS,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAClD,cAAM,OAAO,CAAC,CAAC,IAAI;AAAA;AAAA;AAAA,UAGlB,UAAU;AAAA,UACV,QAAQ;AAAA,QACR;AAAA,MACH;AAEC,aAAO;AAAA,IACR;AAGA,aAAS,UAAU,WAAW;AAC7B,YAAM,QAAQ,WAAY;AAC1B,YAAM,QAAQ,CAAC,SAAS;AAExB,YAAM,SAAS,EAAE,WAAW;AAE5B,aAAO,MAAM,QAAQ;AACpB,cAAM,UAAU,MAAM,IAAK;AAC3B,cAAM,YAAY,OAAO,KAAKA,aAAY,OAAO,CAAC;AAElD,iBAAS,MAAM,UAAU,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AACrD,gBAAM,WAAW,UAAU,CAAC;AAC5B,gBAAM,OAAO,MAAM,QAAQ;AAE3B,cAAI,KAAK,aAAa,IAAI;AACzB,iBAAK,WAAW,MAAM,OAAO,EAAE,WAAW;AAC1C,iBAAK,SAAS;AACd,kBAAM,QAAQ,QAAQ;AAAA,UAC1B;AAAA,QACA;AAAA,MACA;AAEC,aAAO;AAAA,IACR;AAEA,aAAS,KAAK,MAAM,IAAI;AACvB,aAAO,SAAU,MAAM;AACtB,eAAO,GAAG,KAAK,IAAI,CAAC;AAAA,MACpB;AAAA,IACF;AAEA,aAAS,eAAe,SAAS,OAAO;AACvC,YAAM,OAAO,CAAC,MAAM,OAAO,EAAE,QAAQ,OAAO;AAC5C,UAAI,KAAKA,aAAY,MAAM,OAAO,EAAE,MAAM,EAAE,OAAO;AAEnD,UAAI,MAAM,MAAM,OAAO,EAAE;AACzB,aAAO,MAAM,GAAG,EAAE,QAAQ;AACzB,aAAK,QAAQ,MAAM,GAAG,EAAE,MAAM;AAC9B,aAAK,KAAKA,aAAY,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE;AACjD,cAAM,MAAM,GAAG,EAAE;AAAA,MACnB;AAEC,SAAG,aAAa;AAChB,aAAO;AAAA,IACR;AAEc,YAAG,SAAU,WAAW;AACrC,YAAM,QAAQ,UAAU,SAAS;AACjC,YAAM,aAAa,CAAE;AAErB,YAAM,SAAS,OAAO,KAAK,KAAK;AAChC,eAAS,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAClD,cAAM,UAAU,OAAO,CAAC;AACxB,cAAM,OAAO,MAAM,OAAO;AAE1B,YAAI,KAAK,WAAW,MAAM;AAEzB;AAAA,QACH;AAEE,mBAAW,OAAO,IAAI,eAAe,SAAS,KAAK;AAAA,MACrD;AAEC,aAAO;AAAA,IACP;;;;;;;;AC/FD,UAAMA,eAAcD,mBAAwB;AAC5C,UAAME,SAAQC,aAAkB;AAEhC,UAAM,UAAU,CAAE;AAElB,UAAM,SAAS,OAAO,KAAKF,YAAW;AAEtC,aAAS,QAAQ,IAAI;AACpB,YAAM,YAAY,YAAa,MAAM;AACpC,cAAM,OAAO,KAAK,CAAC;AACnB,YAAI,SAAS,UAAa,SAAS,MAAM;AACxC,iBAAO;AAAA,QACV;AAEE,YAAI,KAAK,SAAS,GAAG;AACpB,iBAAO;AAAA,QACV;AAEE,eAAO,GAAG,IAAI;AAAA,MACd;AAGD,UAAI,gBAAgB,IAAI;AACvB,kBAAU,aAAa,GAAG;AAAA,MAC5B;AAEC,aAAO;AAAA,IACR;AAEA,aAAS,YAAY,IAAI;AACxB,YAAM,YAAY,YAAa,MAAM;AACpC,cAAM,OAAO,KAAK,CAAC;AAEnB,YAAI,SAAS,UAAa,SAAS,MAAM;AACxC,iBAAO;AAAA,QACV;AAEE,YAAI,KAAK,SAAS,GAAG;AACpB,iBAAO;AAAA,QACV;AAEE,cAAM,SAAS,GAAG,IAAI;AAKtB,YAAI,OAAO,WAAW,UAAU;AAC/B,mBAAS,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAClD,mBAAO,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,CAAC;AAAA,UACpC;AAAA,QACA;AAEE,eAAO;AAAA,MACP;AAGD,UAAI,gBAAgB,IAAI;AACvB,kBAAU,aAAa,GAAG;AAAA,MAC5B;AAEC,aAAO;AAAA,IACR;AAEA,WAAO,QAAQ,eAAa;AAC3B,cAAQ,SAAS,IAAI,CAAE;AAEvB,aAAO,eAAe,QAAQ,SAAS,GAAG,YAAY,EAAC,OAAOA,aAAY,SAAS,EAAE,SAAQ,CAAC;AAC9F,aAAO,eAAe,QAAQ,SAAS,GAAG,UAAU,EAAC,OAAOA,aAAY,SAAS,EAAE,OAAM,CAAC;AAE1F,YAAM,SAASC,OAAM,SAAS;AAC9B,YAAM,cAAc,OAAO,KAAK,MAAM;AAEtC,kBAAY,QAAQ,aAAW;AAC9B,cAAM,KAAK,OAAO,OAAO;AAEzB,gBAAQ,SAAS,EAAE,OAAO,IAAI,YAAY,EAAE;AAC5C,gBAAQ,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,EAAE;AAAA,MAC9C,CAAE;AAAA,IACF,CAAC;AAED,mBAAiB;;;;;;;;;AC9EjB,YAAM,aAAa,CAAC,IAAI,WAAW,IAAI,SAAS;AAC/C,cAAM,OAAO,GAAG,GAAG,IAAI;AACvB,eAAO,QAAU,OAAO,MAAM;AAAA,MAC9B;AAED,YAAM,cAAc,CAAC,IAAI,WAAW,IAAI,SAAS;AAChD,cAAM,OAAO,GAAG,GAAG,IAAI;AACvB,eAAO,QAAU,KAAK,MAAM,MAAM,IAAI;AAAA,MACtC;AAED,YAAM,cAAc,CAAC,IAAI,WAAW,IAAI,SAAS;AAChD,cAAM,MAAM,GAAG,GAAG,IAAI;AACtB,eAAO,QAAU,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AAAA,MAC5D;AAED,YAAM,YAAY,OAAK;AACvB,YAAM,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;AAErC,YAAM,kBAAkB,CAAC,QAAQ,UAAU,QAAQ;AAClD,eAAO,eAAe,QAAQ,UAAU;AAAA,UACvC,KAAK,MAAM;AACV,kBAAM,QAAQ,IAAK;AAEnB,mBAAO,eAAe,QAAQ,UAAU;AAAA,cACvC;AAAA,cACA,YAAY;AAAA,cACZ,cAAc;AAAA,YAClB,CAAI;AAED,mBAAO;AAAA,UACP;AAAA,UACD,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB,CAAE;AAAA,MACD;AAGD,UAAIE;AACJ,YAAM,oBAAoB,CAAC,MAAM,aAAa,UAAU,iBAAiB;AACxE,YAAIA,kBAAiB,QAAW;AAC/B,UAAAA,gBAAeJ,oBAAwB;AAAA,QACzC;AAEC,cAAM,SAAS,eAAe,KAAK;AACnC,cAAM,SAAS,CAAE;AAEjB,mBAAW,CAAC,aAAa,KAAK,KAAK,OAAO,QAAQI,aAAY,GAAG;AAChE,gBAAM,OAAO,gBAAgB,WAAW,SAAS;AACjD,cAAI,gBAAgB,aAAa;AAChC,mBAAO,IAAI,IAAI,KAAK,UAAU,MAAM;AAAA,UACvC,WAAa,OAAO,UAAU,UAAU;AACrC,mBAAO,IAAI,IAAI,KAAK,MAAM,WAAW,GAAG,MAAM;AAAA,UACjD;AAAA,QACA;AAEC,eAAO;AAAA,MACP;AAED,eAAS,iBAAiB;AACzB,cAAM,QAAQ,oBAAI,IAAK;AACvB,cAAM,SAAS;AAAA,UACd,UAAU;AAAA,YACT,OAAO,CAAC,GAAG,CAAC;AAAA;AAAA,YAEZ,MAAM,CAAC,GAAG,EAAE;AAAA,YACZ,KAAK,CAAC,GAAG,EAAE;AAAA,YACX,QAAQ,CAAC,GAAG,EAAE;AAAA,YACd,WAAW,CAAC,GAAG,EAAE;AAAA,YACjB,SAAS,CAAC,GAAG,EAAE;AAAA,YACf,QAAQ,CAAC,GAAG,EAAE;AAAA,YACd,eAAe,CAAC,GAAG,EAAE;AAAA,UACrB;AAAA,UACD,OAAO;AAAA,YACN,OAAO,CAAC,IAAI,EAAE;AAAA,YACd,KAAK,CAAC,IAAI,EAAE;AAAA,YACZ,OAAO,CAAC,IAAI,EAAE;AAAA,YACd,QAAQ,CAAC,IAAI,EAAE;AAAA,YACf,MAAM,CAAC,IAAI,EAAE;AAAA,YACb,SAAS,CAAC,IAAI,EAAE;AAAA,YAChB,MAAM,CAAC,IAAI,EAAE;AAAA,YACb,OAAO,CAAC,IAAI,EAAE;AAAA;AAAA,YAGd,aAAa,CAAC,IAAI,EAAE;AAAA,YACpB,WAAW,CAAC,IAAI,EAAE;AAAA,YAClB,aAAa,CAAC,IAAI,EAAE;AAAA,YACpB,cAAc,CAAC,IAAI,EAAE;AAAA,YACrB,YAAY,CAAC,IAAI,EAAE;AAAA,YACnB,eAAe,CAAC,IAAI,EAAE;AAAA,YACtB,YAAY,CAAC,IAAI,EAAE;AAAA,YACnB,aAAa,CAAC,IAAI,EAAE;AAAA,UACpB;AAAA,UACD,SAAS;AAAA,YACR,SAAS,CAAC,IAAI,EAAE;AAAA,YAChB,OAAO,CAAC,IAAI,EAAE;AAAA,YACd,SAAS,CAAC,IAAI,EAAE;AAAA,YAChB,UAAU,CAAC,IAAI,EAAE;AAAA,YACjB,QAAQ,CAAC,IAAI,EAAE;AAAA,YACf,WAAW,CAAC,IAAI,EAAE;AAAA,YAClB,QAAQ,CAAC,IAAI,EAAE;AAAA,YACf,SAAS,CAAC,IAAI,EAAE;AAAA;AAAA,YAGhB,eAAe,CAAC,KAAK,EAAE;AAAA,YACvB,aAAa,CAAC,KAAK,EAAE;AAAA,YACrB,eAAe,CAAC,KAAK,EAAE;AAAA,YACvB,gBAAgB,CAAC,KAAK,EAAE;AAAA,YACxB,cAAc,CAAC,KAAK,EAAE;AAAA,YACtB,iBAAiB,CAAC,KAAK,EAAE;AAAA,YACzB,cAAc,CAAC,KAAK,EAAE;AAAA,YACtB,eAAe,CAAC,KAAK,EAAE;AAAA,UAC1B;AAAA,QACE;AAGD,eAAO,MAAM,OAAO,OAAO,MAAM;AACjC,eAAO,QAAQ,SAAS,OAAO,QAAQ;AACvC,eAAO,MAAM,OAAO,OAAO,MAAM;AACjC,eAAO,QAAQ,SAAS,OAAO,QAAQ;AAEvC,mBAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACxD,qBAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AACvD,mBAAO,SAAS,IAAI;AAAA,cACnB,MAAM,QAAU,MAAM,CAAC,CAAC;AAAA,cACxB,OAAO,QAAU,MAAM,CAAC,CAAC;AAAA,YACzB;AAED,kBAAM,SAAS,IAAI,OAAO,SAAS;AAEnC,kBAAM,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,UAC/B;AAEE,iBAAO,eAAe,QAAQ,WAAW;AAAA,YACxC,OAAO;AAAA,YACP,YAAY;AAAA,UACf,CAAG;AAAA,QACH;AAEC,eAAO,eAAe,QAAQ,SAAS;AAAA,UACtC,OAAO;AAAA,UACP,YAAY;AAAA,QACd,CAAE;AAED,eAAO,MAAM,QAAQ;AACrB,eAAO,QAAQ,QAAQ;AAEvB,wBAAgB,OAAO,OAAO,QAAQ,MAAM,kBAAkB,YAAY,UAAU,WAAW,KAAK,CAAC;AACrG,wBAAgB,OAAO,OAAO,WAAW,MAAM,kBAAkB,aAAa,WAAW,WAAW,KAAK,CAAC;AAC1G,wBAAgB,OAAO,OAAO,WAAW,MAAM,kBAAkB,aAAa,OAAO,SAAS,KAAK,CAAC;AACpG,wBAAgB,OAAO,SAAS,QAAQ,MAAM,kBAAkB,YAAY,UAAU,WAAW,IAAI,CAAC;AACtG,wBAAgB,OAAO,SAAS,WAAW,MAAM,kBAAkB,aAAa,WAAW,WAAW,IAAI,CAAC;AAC3G,wBAAgB,OAAO,SAAS,WAAW,MAAM,kBAAkB,aAAa,OAAO,SAAS,IAAI,CAAC;AAErG,eAAO;AAAA,MACR;AAGA,aAAO,eAAeC,SAAQ,WAAW;AAAA,QACxC,YAAY;AAAA,QACZ,KAAK;AAAA,MACN,CAAC;AAAA;;;;;;;;ACjKD,cAAiB;AAAA,MAChB,QAAQ;AAAA,MACR,QAAQ;AAAA,IACR;;;;;;;;ACFD,UAAM,mBAAmB,CAAC,QAAQ,WAAW,aAAa;AACzD,UAAI,QAAQ,OAAO,QAAQ,SAAS;AACpC,UAAI,UAAU,IAAI;AACjB,eAAO;AAAA,MACT;AAEC,YAAM,kBAAkB,UAAU;AAClC,UAAI,WAAW;AACf,UAAI,cAAc;AAClB,SAAG;AACF,uBAAe,OAAO,OAAO,UAAU,QAAQ,QAAQ,IAAI,YAAY;AACvE,mBAAW,QAAQ;AACnB,gBAAQ,OAAO,QAAQ,WAAW,QAAQ;AAAA,MAC1C,SAAQ,UAAU;AAEnB,qBAAe,OAAO,OAAO,QAAQ;AACrC,aAAO;AAAA,IACP;AAED,UAAM,iCAAiC,CAAC,QAAQ,QAAQ,SAAS,UAAU;AAC1E,UAAI,WAAW;AACf,UAAI,cAAc;AAClB,SAAG;AACF,cAAM,QAAQ,OAAO,QAAQ,CAAC,MAAM;AACpC,uBAAe,OAAO,OAAO,WAAW,QAAQ,QAAQ,IAAI,SAAS,QAAQ,IAAI,UAAU,QAAQ,SAAS,QAAQ;AACpH,mBAAW,QAAQ;AACnB,gBAAQ,OAAO,QAAQ,MAAM,QAAQ;AAAA,MACrC,SAAQ,UAAU;AAEnB,qBAAe,OAAO,OAAO,QAAQ;AACrC,aAAO;AAAA,IACP;AAED,WAAiB;AAAA,MAChB;AAAA,MACA;AAAA,IACA;;;;;;;;ACrCD,UAAM,iBAAiB;AACvB,UAAM,cAAc;AACpB,UAAM,eAAe;AACrB,UAAM,eAAe;AAErB,UAAM,UAAU,oBAAI,IAAI;AAAA,MACvB,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,KAAK,GAAI;AAAA,MACV,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,KAAK,IAAI;AAAA,MACV,CAAC,MAAM,IAAI;AAAA,MACX,CAAC,KAAK,MAAQ;AAAA,MACd,CAAC,KAAK,MAAQ;AAAA,IACf,CAAC;AAED,aAAS,SAAS,GAAG;AACpB,YAAM,IAAI,EAAE,CAAC,MAAM;AACnB,YAAM,UAAU,EAAE,CAAC,MAAM;AAEzB,UAAK,KAAK,CAAC,WAAW,EAAE,WAAW,KAAO,EAAE,CAAC,MAAM,OAAO,EAAE,WAAW,GAAI;AAC1E,eAAO,OAAO,aAAa,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AAAA,MACrD;AAEC,UAAI,KAAK,SAAS;AACjB,eAAO,OAAO,cAAc,SAAS,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;AAAA,MAC1D;AAEC,aAAO,QAAQ,IAAI,CAAC,KAAK;AAAA,IAC1B;AAEA,aAAS,eAAe,MAAM,YAAY;AACzC,YAAM,UAAU,CAAE;AAClB,YAAM,SAAS,WAAW,KAAI,EAAG,MAAM,UAAU;AACjD,UAAI;AAEJ,iBAAW,SAAS,QAAQ;AAC3B,cAAM,SAAS,OAAO,KAAK;AAC3B,YAAI,CAAC,OAAO,MAAM,MAAM,GAAG;AAC1B,kBAAQ,KAAK,MAAM;AAAA,QACnB,WAAW,UAAU,MAAM,MAAM,YAAY,GAAI;AACjD,kBAAQ,KAAK,QAAQ,CAAC,EAAE,QAAQ,cAAc,CAAC,GAAG,QAAQ,cAAc,SAAS,SAAS,MAAM,IAAI,SAAS,CAAC;AAAA,QACjH,OAAS;AACN,gBAAM,IAAI,MAAM,0CAA0C,KAAK,eAAe,IAAI,IAAI;AAAA,QACzF;AAAA,MACA;AAEC,aAAO;AAAA,IACR;AAEA,aAAS,WAAW,OAAO;AAC1B,kBAAY,YAAY;AAExB,YAAM,UAAU,CAAE;AAClB,UAAI;AAEJ,cAAQ,UAAU,YAAY,KAAK,KAAK,OAAO,MAAM;AACpD,cAAM,OAAO,QAAQ,CAAC;AAEtB,YAAI,QAAQ,CAAC,GAAG;AACf,gBAAM,OAAO,eAAe,MAAM,QAAQ,CAAC,CAAC;AAC5C,kBAAQ,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,QACnC,OAAS;AACN,kBAAQ,KAAK,CAAC,IAAI,CAAC;AAAA,QACtB;AAAA,MACA;AAEC,aAAO;AAAA,IACR;AAEA,aAAS,WAAWC,QAAO,QAAQ;AAClC,YAAM,UAAU,CAAE;AAElB,iBAAW,SAAS,QAAQ;AAC3B,mBAAW,SAAS,MAAM,QAAQ;AACjC,kBAAQ,MAAM,CAAC,CAAC,IAAI,MAAM,UAAU,OAAO,MAAM,MAAM,CAAC;AAAA,QAC3D;AAAA,MACA;AAEC,UAAI,UAAUA;AACd,iBAAW,CAAC,WAAWC,OAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC1D,YAAI,CAAC,MAAM,QAAQA,OAAM,GAAG;AAC3B;AAAA,QACH;AAEE,YAAI,EAAE,aAAa,UAAU;AAC5B,gBAAM,IAAI,MAAM,wBAAwB,SAAS,EAAE;AAAA,QACtD;AAEE,kBAAUA,QAAO,SAAS,IAAI,QAAQ,SAAS,EAAE,GAAGA,OAAM,IAAI,QAAQ,SAAS;AAAA,MACjF;AAEC,aAAO;AAAA,IACR;AAEA,gBAAiB,CAACD,QAAO,cAAc;AACtC,YAAM,SAAS,CAAE;AACjB,YAAM,SAAS,CAAE;AACjB,UAAI,QAAQ,CAAE;AAGd,gBAAU,QAAQ,gBAAgB,CAAC,GAAG,iBAAiB,SAAS,OAAO,OAAO,cAAc;AAC3F,YAAI,iBAAiB;AACpB,gBAAM,KAAK,SAAS,eAAe,CAAC;AAAA,QACpC,WAAU,OAAO;AACjB,gBAAM,SAAS,MAAM,KAAK,EAAE;AAC5B,kBAAQ,CAAE;AACV,iBAAO,KAAK,OAAO,WAAW,IAAI,SAAS,WAAWA,QAAO,MAAM,EAAE,MAAM,CAAC;AAC5E,iBAAO,KAAK,EAAC,SAAS,QAAQ,WAAW,KAAK,EAAC,CAAC;AAAA,QAChD,WAAU,OAAO;AACjB,cAAI,OAAO,WAAW,GAAG;AACxB,kBAAM,IAAI,MAAM,8CAA8C;AAAA,UAClE;AAEG,iBAAO,KAAK,WAAWA,QAAO,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC;AACrD,kBAAQ,CAAE;AACV,iBAAO,IAAK;AAAA,QACf,OAAS;AACN,gBAAM,KAAK,SAAS;AAAA,QACvB;AAAA,MACA,CAAE;AAED,aAAO,KAAK,MAAM,KAAK,EAAE,CAAC;AAE1B,UAAI,OAAO,SAAS,GAAG;AACtB,cAAM,aAAa,qCAAqC,OAAO,MAAM,mBAAmB,OAAO,WAAW,IAAI,KAAK,GAAG;AACtH,cAAM,IAAI,MAAM,UAAU;AAAA,MAC5B;AAEC,aAAO,OAAO,KAAK,EAAE;AAAA,IACrB;;;;;;;;ACpID,UAAME,cAAaR,kBAAsB;AACzC,UAAM,EAAC,QAAQ,aAAa,QAAQ,YAAW,IAAIG,eAAyB;AAC5E,UAAM;AAAA,MACL;AAAA,MACA;AAAA,IACA,IAAGM,YAAiB;AAErB,UAAM,EAAC,QAAO,IAAI;AAGlB,UAAM,eAAe;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACA;AAED,UAAM,SAAS,uBAAO,OAAO,IAAI;AAEjC,UAAM,eAAe,CAAC,QAAQ,UAAU,CAAA,MAAO;AAC9C,UAAI,QAAQ,SAAS,EAAE,OAAO,UAAU,QAAQ,KAAK,KAAK,QAAQ,SAAS,KAAK,QAAQ,SAAS,IAAI;AACpG,cAAM,IAAI,MAAM,qDAAqD;AAAA,MACvE;AAGC,YAAM,aAAa,cAAc,YAAY,QAAQ;AACrD,aAAO,QAAQ,QAAQ,UAAU,SAAY,aAAa,QAAQ;AAAA,IAClE;AAAA,IAED,MAAM,WAAW;AAAA,MAChB,YAAY,SAAS;AAEpB,eAAO,aAAa,OAAO;AAAA,MAC7B;AAAA,IACA;AAEA,UAAM,eAAe,aAAW;AAC/B,YAAMH,SAAQ,CAAE;AAChB,mBAAaA,QAAO,OAAO;AAE3B,MAAAA,OAAM,WAAW,IAAI,eAAe,SAASA,OAAM,UAAU,GAAG,UAAU;AAE1E,aAAO,eAAeA,QAAO,MAAM,SAAS;AAC5C,aAAO,eAAeA,OAAM,UAAUA,MAAK;AAE3C,MAAAA,OAAM,SAAS,cAAc,MAAM;AAClC,cAAM,IAAI,MAAM,0EAA0E;AAAA,MAC1F;AAED,MAAAA,OAAM,SAAS,WAAW;AAE1B,aAAOA,OAAM;AAAA,IACb;AAED,aAAS,MAAM,SAAS;AACvB,aAAO,aAAa,OAAO;AAAA,IAC5B;AAEA,eAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQE,WAAU,GAAG;AAC5D,aAAO,SAAS,IAAI;AAAA,QACnB,MAAM;AACL,gBAAM,UAAU,cAAc,MAAM,aAAa,MAAM,MAAM,MAAM,OAAO,KAAK,OAAO,GAAG,KAAK,QAAQ;AACtG,iBAAO,eAAe,MAAM,WAAW,EAAC,OAAO,QAAO,CAAC;AACvD,iBAAO;AAAA,QACV;AAAA,MACE;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MAChB,MAAM;AACL,cAAM,UAAU,cAAc,MAAM,KAAK,SAAS,IAAI;AACtD,eAAO,eAAe,MAAM,WAAW,EAAC,OAAO,QAAO,CAAC;AACvD,eAAO;AAAA,MACT;AAAA,IACC;AAED,UAAM,aAAa,CAAC,OAAO,OAAO,WAAW,OAAO,OAAO,OAAO,QAAQ,SAAS;AAEnF,eAAW,SAAS,YAAY;AAC/B,aAAO,KAAK,IAAI;AAAA,QACf,MAAM;AACL,gBAAM,EAAC,MAAK,IAAI;AAChB,iBAAO,YAAa,YAAY;AAC/B,kBAAM,SAAS,aAAaA,YAAW,MAAM,aAAa,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,GAAGA,YAAW,MAAM,OAAO,KAAK,OAAO;AAC7H,mBAAO,cAAc,MAAM,QAAQ,KAAK,QAAQ;AAAA,UAChD;AAAA,QACJ;AAAA,MACE;AAAA,IACF;AAEA,eAAW,SAAS,YAAY;AAC/B,YAAM,UAAU,OAAO,MAAM,CAAC,EAAE,gBAAgB,MAAM,MAAM,CAAC;AAC7D,aAAO,OAAO,IAAI;AAAA,QACjB,MAAM;AACL,gBAAM,EAAC,MAAK,IAAI;AAChB,iBAAO,YAAa,YAAY;AAC/B,kBAAM,SAAS,aAAaA,YAAW,QAAQ,aAAa,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,GAAGA,YAAW,QAAQ,OAAO,KAAK,OAAO;AACjI,mBAAO,cAAc,MAAM,QAAQ,KAAK,QAAQ;AAAA,UAChD;AAAA,QACJ;AAAA,MACE;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO,iBAAiB,MAAM;AAAA,IAAA,GAAI;AAAA,MAC/C,GAAG;AAAA,MACH,OAAO;AAAA,QACN,YAAY;AAAA,QACZ,MAAM;AACL,iBAAO,KAAK,WAAW;AAAA,QACvB;AAAA,QACD,IAAI,OAAO;AACV,eAAK,WAAW,QAAQ;AAAA,QAC3B;AAAA,MACA;AAAA,IACA,CAAC;AAED,UAAM,eAAe,CAAC,MAAM,OAAO,WAAW;AAC7C,UAAI;AACJ,UAAI;AACJ,UAAI,WAAW,QAAW;AACzB,kBAAU;AACV,mBAAW;AAAA,MACb,OAAQ;AACN,kBAAU,OAAO,UAAU;AAC3B,mBAAW,QAAQ,OAAO;AAAA,MAC5B;AAEC,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACA;AAAA,IACD;AAED,UAAM,gBAAgB,CAACE,OAAM,SAAS,aAAa;AAClD,YAAM,UAAU,IAAI,eAAe;AAClC,YAAI,QAAQ,WAAW,CAAC,CAAC,KAAK,QAAQ,WAAW,CAAC,EAAE,GAAG,GAAG;AAEzD,iBAAO,WAAW,SAAS,SAAS,SAAS,GAAG,UAAU,CAAC;AAAA,QAC9D;AAIE,eAAO,WAAW,SAAU,WAAW,WAAW,IAAM,KAAK,WAAW,CAAC,IAAK,WAAW,KAAK,GAAG,CAAC;AAAA,MAClG;AAID,aAAO,eAAe,SAAS,KAAK;AAEpC,cAAQ,aAAaA;AACrB,cAAQ,UAAU;AAClB,cAAQ,WAAW;AAEnB,aAAO;AAAA,IACP;AAED,UAAM,aAAa,CAACA,OAAM,WAAW;AACpC,UAAIA,MAAK,SAAS,KAAK,CAAC,QAAQ;AAC/B,eAAOA,MAAK,WAAW,KAAK;AAAA,MAC9B;AAEC,UAAI,SAASA,MAAK;AAElB,UAAI,WAAW,QAAW;AACzB,eAAO;AAAA,MACT;AAEC,YAAM,EAAC,SAAS,SAAQ,IAAI;AAC5B,UAAI,OAAO,QAAQ,MAAQ,MAAM,IAAI;AACpC,eAAO,WAAW,QAAW;AAI5B,mBAAS,iBAAiB,QAAQ,OAAO,OAAO,OAAO,IAAI;AAE3D,mBAAS,OAAO;AAAA,QACnB;AAAA,MACA;AAKC,YAAM,UAAU,OAAO,QAAQ,IAAI;AACnC,UAAI,YAAY,IAAI;AACnB,iBAAS,+BAA+B,QAAQ,UAAU,SAAS,OAAO;AAAA,MAC5E;AAEC,aAAO,UAAU,SAAS;AAAA,IAC1B;AAED,QAAI;AACJ,UAAM,WAAW,CAACJ,WAAU,YAAY;AACvC,YAAM,CAAC,WAAW,IAAI;AAEtB,UAAI,CAAC,QAAQ,WAAW,KAAK,CAAC,QAAQ,YAAY,GAAG,GAAG;AAGvD,eAAO,QAAQ,KAAK,GAAG;AAAA,MACzB;AAEC,YAAM,aAAa,QAAQ,MAAM,CAAC;AAClC,YAAM,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;AAEjC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC5C,cAAM;AAAA,UACL,OAAO,WAAW,IAAI,CAAC,CAAC,EAAE,QAAQ,WAAW,MAAM;AAAA,UACnD,OAAO,YAAY,IAAI,CAAC,CAAC;AAAA,QACzB;AAAA,MACH;AAEC,UAAI,aAAa,QAAW;AAC3B,mBAAWK,iBAAsB;AAAA,MACnC;AAEC,aAAO,SAASL,QAAO,MAAM,KAAK,EAAE,CAAC;AAAA,IACrC;AAED,WAAO,iBAAiB,MAAM,WAAW,MAAM;AAE/C,UAAMA,SAAQ;AACd,IAAAA,OAAM,gBAAgB;AACtB,IAAAA,OAAM,SAAS,MAAM,EAAC,OAAO,cAAc,YAAY,QAAQ,EAAC,CAAC;AACjE,IAAAA,OAAM,OAAO,gBAAgB;AAE7B,aAAiBA;;;;;ACvNjB,QAAM,QAAQ;AAAA,EAUP,MAAe,eAAe;AAAA,IAuEjC,cAAc;AAvEX;AACH,kDAA8C;AAC9C,mCAA+C,CAAE;AACjD,mCAAkC;AAClC,oCAA2B;AAC3B,gDAAgC;AAMhC,sCAAc,CAAC,IAA4B,YAAoB;AAC3D,YAAI,mBAAK,WAAU;AACZ,aAAA,SAAS,QAAQ,GAAG,iCAAiC,mBAAK,UAAS,WAAW,OAAO,GAAG;AAAA,QAAA,OACxF;AACH,aAAG,SAAS,QAAQ,GAAG,2BAA2B,OAAO,GAAG;AAAA,QAAA;AAAA,MAEpE;AAEA,iCAAS,CAAC,YAAoB,mBAAK,aAAL,WAAiB,KAAK,OAAO,OAAO;AAClE,iCAAS,CAAC,UAAe,mBAAK,aAAL,WAAiB,KAAK,OAAO,OAAO;AAC7D,gCAAQ,CAAC,YAAiB,mBAAK,aAAL,WAAiB,KAAK,OAAO,OAAO;AAE9D,+CAAuB,YAAY;AAC3B,YAAA;AACA,gBAAM,aAAuB,CAAE;AACpB,qBAAA,CAAG,EAAA,MAAM,KAAK,OAAO,QAAQ,mBAAK,SAAQ,GAAG;AAChD,gBAAA,OAAO,aAAa,UACnB,OAAO,OAAO,UAAU,aAAa,aACtC,OAAO,OAAO,UAAU,aAAa,SACrC,OAAO,OAAO,UAAU,aAAa,WACrC,OAAO,OAAO,UAAU,aAAa,aAAa;AAYvC,yBAAA,KAAK,OAAO,OAAO,EAAE;AAAA,YAAA;AAAA,UACpC;AAEA,cAAA,WAAW,SAAS,GAAG;AACvB,uBAAW,MAAM;AACb,iCAAK,QAAL,WAAY,MAAM,KAAK,6EAA6E,UAAU,GAAG;AACjH,uBAAS,IAAE,GAAG,IAAI,WAAW,QAAQ,KAAK;AACtC,mCAAK,UAAS,WAAW,CAAC,CAAC,EAAE,WAAW;AACpC,oBAAA,mBAAK,2BAA0B,GAAG;AAClC,sBAAI,QAAQ;AACR,+BAAW,MAAM,OAAO,mBAAK,UAAS,WAAW,CAAC,CAAC,GAAG,mBAAK,yBAAwB,GAAM,EAAE,MAAM;AAAA,kBAAA,OAC9F;AACQ,+BAAA,MAAM,OAAO,mBAAK,UAAS,WAAW,CAAC,CAAC,GAAG,mBAAK,yBAAwB,GAAM;AAAA,kBAAA;AAAA,gBAC7F;AAAA,cACJ;AAEC,iCAAA,QAAA,WAAO,MAAM,KAAK,mEAAmE,OAAO,KAAK,mBAAK,SAAQ,EAAE,MAAM,GAAG;AACnH,yBAAA,mBAAK,uBAAsB,GAAI;AAAA,eAC3C,GAAG;AAAA,UAAA,OACH;AACQ,uBAAA,mBAAK,uBAAsB,GAAI;AAAA,UAAA;AAAA,iBAEzC,OAAO;AACP,6BAAA,QAAA,WAAO,4BAA4B,KAAK;AAClC,qBAAA,mBAAK,uBAAsB,GAAI;AAAA,QAAA;AAAA,MAElD;AAOA,0CAAe,CAAC,QAAgB;AAC5B,2BAAK,QAAL,WAAY;AACL,eAAA,KAAK,MAAM,KAAK,WAAW,KAAK,MAAM,GAAG,CAAC;AAAA,MACrD;AAEA,+CAAoB,CAAC,OAAe;AAChC,2BAAK,iCAAL,WAAqC,mBAAmB,qBAAqB,IAAI;AAAA,MACrF;AAUA,0CAAkB,CAAC,sBAAkD;AAC7D,YAAA;AACA,6BAAK,QAAL,WAAY;AACZ,6BAAK,yBAA0B,kBAAkB;AAIjD,cAAI,QAAQ;AACR,+BAAK,yBAAwB,GAAG,WAAW,CAAC,SAAc;AACtD,iCAAK,QAAL,WAAY,yCAAyC,KAAK,UAAU,IAAI,CAAC;AAAA,YAAE,CAC9E;AAAA,UAAA,OACE;AAKF,+BAAK,yBAAgC,iBAAiB,WAAW,CAAC,SAAc;AAC7E,iCAAK,QAAL,WAAY,uDAAuD,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,YAAE,CACjG;AAAA,UAAA;AAGL,gBAAM,WAA8B;AAAA,YAChC,SAAS,mBAAmB;AAAA,YAC5B,SAAS,CAAA;AAAA,UACb;AAEK,6BAAA,yBAAwB,YAAY,QAAQ;AAAA,iBAC5C,OAAO;AACP,6BAAA,QAAA,WAAO,uBAAuB,KAAK;AAAA,QAAG;AAAA,MAEnD;AAEA,+CAAoB,OAAO,+BAA6F;AAC7G,eAAA;AAAA,MACX;AAEA,mDAA2B,OAAO,QAAiB,mBAAmD;AAC9F,YAAA;AACK,6BAAA,UAAS,OAAO,EAAE,IAAI;AAAA,YACvB;AAAA,YACA;AAAA,YACA,UAAU;AAAA,UACd;AACA,6BAAK,UAAS,OAAO,EAAE,EAAE,OAAO,YAAY;AAC5C,6BAAK,wBAAL,WAA4B,OAAO,IAAI,aAAa;AAAA,iBAC/C,OAAO;AACP,6BAAA,QAAA,WAAO,gCAAgC,KAAK;AAAA,QAAG;AAAA,MAE5D;AAEA,iDAAyB,CAAC,IAAY,UAAwB;AACtD,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,+BAAK,UAAS,EAAE,EAAE,OAAO,QAAQ;AAEjC,+BAAK,iCAAL,WAAqC,mBAAmB,mBAAmB,IAAI;AAAA,UAAK,OACjF;AACE,+BAAA,OAAA,WAAM,yCAAyC,EAAE;AAAA,UAAa;AAAA,iBAElE,OAAO;AACP,6BAAA,QAAA,WAAO,8BAA8B,KAAK;AAAA,QAAG;AAAA,MAE1D;AAGA;AAAA,uDAA+B,CAAC,OAAwB;AAChD,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,kBAAM,QAAQ,mBAAK,UAAS,EAAE,EAAE,OAAO;AACnC,gBAAA,UAAU,aAAa,SAAS;AACzB,qBAAA;AAAA,YAAA;AAEJ,mBAAA;AAAA,UAAA,OACJ;AACE,+BAAA,OAAA,WAAM,+CAA+C,EAAE;AACrD,mBAAA;AAAA,UAAA;AAAA,iBAEN,OAAO;AACP,6BAAA,QAAA,WAAO,oCAAoC,KAAK;AAC9C,iBAAA;AAAA,QAAA;AAAA,MAEf;AAGA;AAAA,2CAAmB,CAAC,OAAwB;AACpC,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,kBAAM,QAAQ,mBAAK,UAAS,EAAE,EAAE,OAAO;AACnC,gBAAA,UAAU,aAAa,SACvB,UAAU,aAAa,aACvB,UAAU,aAAa,WACvB,UAAU,aAAa,YAAY;AAC5B,qBAAA;AAAA,YAAA;AAEJ,mBAAA;AAAA,UAAA,OACJ;AACE,+BAAA,OAAA,WAAM,mCAAmC,EAAE;AACzC,mBAAA;AAAA,UAAA;AAAA,iBAEN,OAAO;AACP,6BAAA,QAAA,WAAO,wBAAwB,KAAK;AAClC,iBAAA;AAAA,QAAA;AAAA,MAEf;AAEA,kDAA0B,CAAC,OAAuB;AAC1C,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,mBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,UAAA,OAC7B;AACE,+BAAA,OAAA,WAAM,0CAA0C,EAAE;AAChD,mBAAA;AAAA,UAAA;AAAA,iBAEN,OAAO;AACP,6BAAA,QAAA,WAAO,+BAA+B,KAAK;AACzC,iBAAA;AAAA,QAAA;AAAA,MAEf;AAEA,oDAA4B,CAAC,OAAuB;AAC5C,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,+BAAK,UAAS,EAAE,EAAE,OAAO,YAAY;AAC9B,mBAAA;AAAA,UAAA,OACJ;AACE,+BAAA,OAAA,WAAM,4CAA4C,EAAE;AAClD,mBAAA;AAAA,UAAA;AAAA,iBAEN,OAAO;AACP,6BAAA,QAAA,WAAO,iCAAiC,KAAK;AAC3C,iBAAA;AAAA,QAAA;AAAA,MAEf;AAEA,kDAA0B,CAAC,OAAuB;AAC1C,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACd,+BAAA,UAAS,EAAE,EAAE,OAAO;AACzB,mBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,UAAA,OAC7B;AACE,+BAAA,OAAA,WAAM,0CAA0C,EAAE;AAChD,mBAAA;AAAA,UAAA;AAAA,iBAEN,OAAO;AACP,6BAAA,QAAA,WAAO,+BAA+B,KAAK;AACzC,iBAAA;AAAA,QAAA;AAAA,MAEf;AAEA,iDAAyB,CAAC,OAA4C;AAC9D,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACZ,mBAAA,mBAAK,UAAS,EAAE,EAAE;AAAA,UAAA,OACtB;AACE,+BAAA,OAAA,WAAM,yCAAyC,EAAE;AAAA,UAAa;AAAA,iBAElE,OAAO;AACP,6BAAA,QAAA,WAAO,8BAA8B,KAAK;AAAA,QAAG;AAAA,MAE1D;AAEA,yDAAiC,CAAC,OAA8C;AACxE,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,mBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO,QAAQ;AAAA,UAAA,OACrC;AACE,+BAAA,OAAA,WAAM,iDAAiD,EAAE;AAAA,UAAa;AAAA,iBAE1E,OAAO;AACP,6BAAA,QAAA,WAAO,sCAAsC,KAAK;AAAA,QAAG;AAAA,MAElE;AAEA,gDAAwB,CAAC,OAA2C;AAC5D,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,mBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,UAAA,OAC7B;AACE,+BAAA,OAAA,WAAM,wCAAwC,EAAE;AAAA,UAAa;AAAA,iBAEjE,OAAO;AACP,6BAAA,QAAA,WAAO,6BAA6B,KAAK;AAAA,QAAG;AAAA,MAEzD;AAEA,gDAAwB,CAAC,IAAY,YAAwD;AACrF,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,+BAAK,UAAS,EAAE,EAAE,OAAO,UAAU,EAAE,GAAG,QAAQ;AAChD,mBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,UAAA,OAC7B;AACE,+BAAA,OAAA,WAAM,wCAAwC,EAAE;AAAA,UAAa;AAAA,iBAEjE,OAAO;AACP,6BAAA,QAAA,WAAO,6BAA6B,KAAK;AAAA,QAAG;AAAA,MAEzD;AAEA,qCAAa,OAAO,+BAA0F;AACtG,YAAA;AACA,YAAA;AAEA,YAAA;AACM,gBAAA,EAAE,WAAW;AACnB,gBAAM,sBAAsB,MAAM,KAAK,kBAAkB,0BAA0B;AACnF,cAAI,qBAAqB;AACf,kBAAA,mBAAK,0BAAL,WAA8B,QAAQ;AAAA,UAAmB,OAC5D;AACH,+BAAK,OAAL,WAAW;AAAA,UAA8C;AAE9C,yBAAA,EAAE,GAAG,OAAO;AAAA,iBACtB,OAAO;AACP,6BAAA,QAAA,WAAO,kBAAkB,KAAK;AAAA,QAAG;AAI1C,2BAAK,4BAAL,WAAgC,mBAAmB,mBAAmB,4BAA4B;AAE3F,eAAA;AAAA,MACX;AAQA,0DAAkC,OAAO,SAA6B,UAAkB,aAAqC;AACrH,YAAA;AACA,cAAI,mBAAK,0BAAyB;AAC1B,gBAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,oBAAM,UAA6B;AAAA,gBAC/B;AAAA,gBACA,SAAS;AAAA,kBACL,QAAQ,mBAAK,UAAS,QAAQ,EAAE;AAAA,gBAAA;AAAA,cAExC;AACK,iCAAA,yBAAwB,YAAY,OAAO;AAChD,oBAAMM,SAAAA,MAAM,CAAC;AAAA,YAAA,OACV;AACE,iCAAA,OAAA,WAAM,+CAA+C,QAAQ;AAAA,YAAa;AAAA,UACnF;AAAA,iBAEC,OAAO;AACP,6BAAA,QAAA,WAAO,uCAAuC,KAAK;AAAA,QAAG;AAAA,MAEnE;AAEA,sDAA8B,OAAO,SAA6B,mBAAqD;AAC/G,YAAA;AACA,cAAI,mBAAK,0BAAyB;AAC9B,kBAAM,UAA6B;AAAA,cAC/B,SAAS,mBAAmB;AAAA,cAC5B,SAAS;AAAA,gBACL,WAAW,eAAe,QAAQ;AAAA,gBAClC,UAAU,mBAAK;AAAA,gBACf,SAAS,OAAO,OAAO,mBAAK,SAAQ,EAAE,IAAI,CAAC,aAAa,SAAS,MAAM;AAAA,cAAA;AAAA,YAE/E;AACK,+BAAA,yBAAwB,YAAY,OAAO;AAChD,kBAAMA,SAAAA,MAAM,CAAC;AAAA,UAAA;AAAA,iBAEZ,OAAO;AACP,6BAAA,QAAA,WAAO,mCAAmC,KAAK;AAAA,QAAG;AAAA,MAE/D;AAEA,uCAAe,OAAO,+BAA0E;;AACxF,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,gBAAA,UAAU,aAAa,SAAS;AAChC,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,iCAAA,wBAAA,WAAuB,UAAU,aAAa;AACnD,oBAAMA,SAAAA,MAAM,CAAC;AACP,oBAAA,gCAAgB,KAAK;AAC3B,oBAAM,cAAc,YAAY;;AACxB,oBAAA;AACA,sBAAI,OAAgB;AACd,wBAAA,mBAAmB,mBAAK,gCAAL,WAAoC;AAC7D,sBAAI,kBAAkB;AAClB,0BAAM,EAAE,YAAY,UAAU,wBAAwB,gBAAoB,IAAA;AAC1E,wBAAI,aAAa,GAAG;AACT,6BAAA,mBAAK,yBAAL,WAA6B,YAAY;AAC5C,0BAAA,SAAS,SAAS,oBAAoB,QAAQ,mBAAK,UAAS,QAAQ,EAAE,OAAO,UAAU,aAAa,QAAQ;AACrG,+BAAA;AAAA,sBAAA;AAAA,oBACX,WACO,WAAW,GAAG;AACZ,+BAAA,oBAAI,QAAO,YAAY,UAAU,aAAa,MAAQ;AAAA,oBAAA;AAEnE,wBAAI,MAAM;AACF,0BAAA,mBAAK,8BAAL,WAAkC,WAAW;AAE7C,gCAAMC,MAAA,mBAAK,wBAAL,WAA4B,cAA5B,gBAAAA,IAAuC;AAG7C,4BAAI,CAAC,mBAAK,kBAAL,WAAsB,WAAW;AAGlC,6CAAK,yBAAL,WAA6B;AAAA,wBAAQ;AAAA,sBACzC;AAIA,0BAAA,mBAAK,8BAAL,WAAkC,WAAW;AAC7C,4BAAI,yBAAyB,GAAG;AAC5B,gCAAMD,SAAAA,MAAM,sBAAsB;AAAA,wBAAA,OAC/B;AACH,gCAAM,sBAAK,8CAAL;AAAA,wBAAqB;AAEnB,oCAAA;AAAA,sBAAA,OACT;AACH,4BAAI,CAAC,mBAAK,kBAAL,WAAsB,WAAW;AAClC,gCAAMA,SAAAA,MAAM,EAAE;AACF,sCAAA;AAAA,wBAAA;AAAA,sBAChB;AAAA,oBACJ,OACG;AACH,0BAAI,oBAAoB,MAAM;AAC1B,gCAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACxC,2CAAA,wBAAA,WAAuB,UAAU,aAAa;AACvC,oCAAA;AAAA,sBAAA,OACT;AACH,gCAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACxC,2CAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,sBAAS;AAAA,oBAChE;AAAA,kBACJ,OACG;AACE,uCAAA,OAAA,WAAM,yEAAyE,QAAQ;AAAA,kBAAG;AAAA,yBAE9F,OAAO;AACP,qCAAA,QAAA,WAAO,uCAAuC,KAAK;AAAA,gBAAG;AAAA,cAEnE;AACY,0BAAA;AAAA,YAAA;AAAA,UAChB,OACG;AACE,+BAAA,OAAA,WAAM,4BAA4B,QAAQ;AAAA,UAAa;AAAA,iBAE3D,OAAO;AACP,6BAAA,QAAA,WAAO,2BAA2B,KAAK;AAAA,QAAG;AAInD,2BAAK,4BAAL,WAAgC,mBAAmB,qBAAqB,4BAA4B;AAAA,MACxG;AAEA,gDAAwB,OAAO,OAA6B;;AACpD,YAAA;AACA,YAAA;AACI,cAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,EAAE,EAAE;AACpC,gBAAI,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAChC,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,QAA5B,mBAAiC;AAC3C,iCAAA,wBAAA,WAAuB,IAAI,aAAa;AAAA,YAAO;AAAA,UACxD,OACG;AACE,+BAAA,OAAA,WAAM,qCAAqC,EAAE;AAAA,UAAa;AAAA,iBAE9D,OAAO;AACP,6BAAA,QAAA,WAAO,oCAAoC,KAAK;AAAA,QAAG;AAErD,eAAA;AAAA,MACX;AAEA,sCAAc,OAAO,+BAA2E;AACxF,YAAA;AACA,YAAA;AACA,mBAAS,MAAM,mBAAK,uBAAL,WAA2B,2BAA2B,OAAO;AAAA,iBACvE,OAAO;AACP,6BAAA,QAAA,WAAO,0BAA0B,KAAK;AAAA,QAAG;AAIlD,2BAAK,4BAAL,WAAgC,mBAAmB,oBAAoB,4BAA4B;AAAA,MACvG;AAEA,2CAAmB,OAAO,+BAA2E;;AAC7F,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,gBAAA,UAAU,aAAa,WACvB,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAChC,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,iCAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,YAAU;AAAA,UACjE,OACG;AACE,+BAAA,OAAA,WAAM,gCAAgC,QAAQ;AAAA,UAAa;AAAA,iBAE/D,OAAO;AACP,6BAAA,QAAA,WAAO,+BAA+B,KAAK;AAAA,QAAG;AAIvD,2BAAK,4BAAL,WAAgC,mBAAmB,yBAAyB,4BAA4B;AAAA,MAC5G;AAEA,qDAA6B,CAAC,SAA6B,4BAAyD,WAAsB;AAElI,YAAA;AACA,cAAI,SAAS;AACP,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AAEzB,qBAAS,EAAE,GAAG,mBAAK,UAAS,QAAQ,EAAE,OAAO;AAAA,UAAA;AAEjD,cAAI,mBAAK,0BAAyB;AAC9B,kBAAM,UAA6B;AAAA,cAC/B;AAAA,cACA,SAAS;AAAA,gBACL,WAAW,2BAA2B;AAAA,gBACtC;AAAA,gBACA,2BAA2B;AAAA,kBACvB,iBAAiB,2BAA2B,OAAO;AAAA,kBACnD,UAAU,2BAA2B,OAAO;AAAA,kBAC5C,UAAU,2BAA2B,OAAO;AAAA,kBAC5C;AAAA,gBAAA;AAAA,cACJ;AAAA,YAER;AACK,+BAAA,yBAAwB,YAAY,OAAO;AAAA,UAAA;AAAA,iBAE/C,OAAO;AACP,6BAAA,QAAA,WAAO,kCAAkC,KAAK;AAAA,QAAG;AAAA,MAE9D;AAEA,uCAAe,OAAO,+BAA2E;;AACzF,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,gBAAA,UAAU,aAAa,SAAS;AAChC,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,iCAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,YAAM;AAAA,UAC7D,OACG;AACE,+BAAA,OAAA,WAAM,4BAA4B,QAAQ;AAAA,UAAa;AAAA,iBAE3D,OAAO;AACP,6BAAA,QAAA,WAAO,2BAA2B,KAAK;AAAA,QAAG;AAInD,2BAAK,4BAAL,WAAgC,mBAAmB,qBAAqB,4BAA4B;AAAA,MACxG;AAEA,wCAAgB,OAAO,+BAA2E;;AAC1F,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,gBAAA,UAAU,aAAa,QAAQ;AAC/B,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,iCAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,YAAO;AAAA,UAC9D,OACG;AACE,+BAAA,OAAA,WAAM,6BAA6B,QAAQ;AAAA,UAAa;AAAA,iBAE5D,OAAO;AACP,6BAAA,QAAA,WAAO,4BAA4B,KAAK;AAAA,QAAG;AAIpD,2BAAK,4BAAL,WAAgC,mBAAmB,sBAAsB,4BAA4B;AAAA,MACzG;AAEA,uCAAe,OAAO,+BAA2E;;AACzF,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AAC1C,gBAAI,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAChC,iCAAK,2BAAL,WAA+B;AAC/B,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,iCAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,YAAM;AAAA,UAC7D,OACG;AACE,+BAAA,OAAA,WAAM,4BAA4B,QAAQ;AAAA,UAAa;AAAA,iBAE3D,OAAO;AACP,6BAAA,QAAA,WAAO,2BAA2B,KAAK;AAAA,QAAG;AAInD,2BAAK,4BAAL,WAAgC,mBAAmB,qBAAqB,4BAA4B;AAAA,MACxG;AAGA;AAAA,yCAAiB,OAAO,+BAA4D;;AAC5E,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AAC1C,gBAAI,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAC1B,oBAAA,mBAAmB,mBAAK,yBAAL,WAA6B;AACjD,iCAAA,QAAA,WAAO,GAAG,MAAM,QAAQ,YAAY,QAAQ,GAAG,CAAC,kBAAkB,gBAAgB;AACvF,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AAChD,oBAAA,eAAe,mBAAK,yBAAL,WAA6B;AAC7C,iCAAA,QAAA,WAAO,GAAG,MAAM,QAAQ,kBAAkB,QAAQ,GAAG,CAAC,4BAA4B,YAAY;AAC9F,iCAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,YAAM;AAAA,UAC7D,OACG;AACE,+BAAA,OAAA,WAAM,8BAA8B,QAAQ;AAAA,UAAa;AAAA,iBAE7D,OAAO;AACP,6BAAA,QAAA,WAAO,6BAA6B,KAAK;AAAA,QAAG;AAIrD,2BAAK,4BAAL,WAAgC,mBAAmB,uBAAuB,4BAA4B;AAAA,MAC1G;AAEA,wCAAgB,OAAO,+BAA4D;;AAC3E,YAAA;AACA,YAAA;AACM,gBAAA,WAAW,2BAA2B,OAAO;AAC/C,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,gBAAA,UAAU,aAAa,UACvB,UAAU,aAAa,WACvB,UAAU,aAAa,SAAS;AAChC,iCAAK,QAAL,WAAY,MAAM,KAAK,YAAY,KAAK,UAAU,mBAAK,uBAAL,WAA2B,SAAS,CAAC,GAAG;AAC1F,iCAAK,uBAAL,WAA2B,UAAU,2BAA2B,OAAO;AACvE,iCAAK,QAAL,WAAY,MAAM,KAAK,WAAW,KAAK,UAAU,mBAAK,uBAAL,WAA2B,SAAS,CAAC,GAAG;AACzF,uBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AAAA,YAAa;AAAA,UAEvE,OACG;AACE,+BAAA,OAAA,WAAM,6BAA6B,QAAQ;AAAA,UAAa;AAAA,iBAE5D,OAAO;AACP,6BAAA,QAAA,WAAO,4BAA4B,KAAK;AAAA,QAAG;AAIpD,2BAAK,4BAAL,WAAgC,mBAAmB,sBAAsB,4BAA4B;AAAA,MACzG;AAGA;AAAA,4CAAiB,OAAM,SAAc;AAE7B,YAAA;AACA,gBAAM,iBAAoC;AAC1C,kBAAQ,eAAe,SAAS;AAAA,YAChC,KAAK,mBAAmB;AACf,iCAAA,iBAAA,WAAgB,eAAe;AAC/B,iCAAA,UAAY,eAAe,QAAuC;AAClE,iCAAA,WAAa,eAAe,QAAuC;AACxE,iCAAK,QAAL,WAAY,+BAA+B,mBAAK,UAAS;AACzD,iCAAK,QAAL,WAAY,8BAA8B,KAAK,UAAU,mBAAK,SAAQ,CAAC;AACvE;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,YAAA,WAAW,eAAe;AAC/B;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,cAAA,WAAa,eAAe;AACjC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,aAAA,WAAY,eAAe;AAChC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,kBAAA,WAAiB,eAAe;AACrC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,cAAA,WAAa,eAAe;AACjC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,eAAA,WAAc,eAAe;AAClC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,cAAA,WAAa,eAAe;AACjC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,gBAAA,WAAe,eAAe;AACnC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,eAAA,WAAc,eAAe;AAClC;AAAA,YACJ,KAAK,mBAAmB;AACpB,iCAAK,QAAL,WAAY;AACP,iCAAA,6BAAA,WAA4B,mBAAmB,YAAY;AAChE;AAAA,YACJ;AACI,iCAAK,OAAL,WAAW,6DAA6D,eAAe,OAAO;AAAA,UAAc;AAAA,iBAE3G,OAAY;AACZ,6BAAA,QAAA,WAAO,6BAA6B,KAAK;AAC9C,6BAAK,QAAL,WAAY;AAAA,QAAK;AAAA,MAEzB;AAxnBI,yBAAK,QAAL,WAAY;AACZ,yBAAK,sBAAL;AAAA,IAA0B;AAAA,IAlE9B,IAAI,SAAqB;AACd,aAAAE,SAAA;AAAA,IAAA;AAAA,IA6EX,IAAI,yBAA6C;AAC7C,aAAO,mBAAK;AAAA,IAAA;AAAA,IAGhB,IAAI,UAAiC;AACjC,aAAO,mBAAK;AAAA,IAAA;AAAA,EAumBpB;AAhsBI;AACA;AACA;AACA;AACA;AAMA;AAQA;AACA;AACA;AAEA;AAsEA;AAoCA;AAcA;AAeA;AAmBA;AAqBA;AAcA;AAeA;AAeA;AAYA;AAYA;AAYA;AAaA;AAnSG;AA0TH,sBAAiC,WAAA;AAC7B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC5B,cAAA;AAAA,IAAA,CACX;AAAA,EAAA;AAGL;AAqBA;AAmBA;AAkFA;AAmBA;AAYA;AAuBA;AA8BA;AAqBA;AAqBA;AAwBA;AA0BA;AAAA,EC9nBG,MAAM,mBAAmB;AAAA,IAAzB;AACH,8CAAmB,CAAC,6BAA0D,cAAyC;AACnH,YAAI,SAAS;AAEb,YAAI,UAAU,SAAS;AACT,oBAAA,QAAQ,QAAQ,CAAC,YAAY;AACnC,wCAA4B,MAAM,OAAO;AAAA,UAAA,CAC5C;AACQ,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,cAAc;AACI,sCAAA,iBAAiBC,uBAAM,qBAAqB;AAAA,YACpE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,YAAY;AACM,sCAAA,iBAAiBA,uBAAM,mBAAmB;AAAA,YAClE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,YAAY;AACM,sCAAA,iBAAiBA,uBAAM,mBAAmB;AAAA,YAClE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,qBAAqB;AACH,sCAAA,iBAAiBA,uBAAM,4BAA4B;AAAA,YAC3E,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,0BAA0B;AACR,sCAAA,iBAAiBA,uBAAM,kCAAkC;AAAA,YACjF,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,0BAA0B;AACR,sCAAA,iBAAiBA,uBAAM,kCAAkC;AAAA,YACjF,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,WAAW;AACO,sCAAA,iBAAiBA,uBAAM,kBAAkB;AAAA,YACjE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,OAAO;AACW,sCAAA,iBAAiBA,uBAAM,aAAa;AAAA,YAC5D,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGe,oCAAA,iBAAiBA,uBAAM,sBAAsB;AAAA,UACrE,KAAK,UAAU;AAAA,QAAA,CACU;AAE7B,YAAI,UAAU,UAAU;AACQ,sCAAA,iBAAiBA,uBAAM,gBAAgB;AAAA,YAC/D,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,UAAU;AACQ,sCAAA,iBAAiBA,uBAAM,gBAAgB;AAAA,YAC/D,KAAK,UAAU;AAAA,UAAA,CACU;AACD,sCAAA,iBAAiBA,uBAAM,0BAA0B;AAAA,YACzE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,SAAS;AACS,sCAAA,iBAAiBA,uBAAM,eAAe;AAAA,YAC9D,KAAK,UAAU;AAAA,UAAA,CACU;AACD,sCAAA,iBAAiBA,uBAAM,yBAAyB;AAAA,YACxE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,YAAY;AACM,sCAAA,iBAAiBA,uBAAM,aAAa;AAAA,YAC5D,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,IAAI;AACc,sCAAA,iBAAiBA,uBAAM,kBAAkB;AAAA,YACjE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGb,YAAI,UAAU,IAAI;AACc,sCAAA,iBAAiBA,uBAAM,kBAAkB;AAAA,YACjE,KAAK,UAAU;AAAA,UAAA,CACU;AACpB,mBAAA;AAAA,QAAA;AAGN,eAAA;AAAA,MACX;AAAA;AAAA,EACJ;AC3HA,QAAM,YAAY,CAAE;AACpB,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,cAAU,MAAM,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,EACpD;AACO,WAAS,gBAAgB,KAAK,SAAS,GAAG;AAC7C,YAAQ,UAAU,IAAI,SAAS,CAAC,CAAC,IAC7B,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,UAAU,IAAI,SAAS,CAAC,CAAC,IACzB,MACA,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,IAC1B,UAAU,IAAI,SAAS,EAAE,CAAC,GAAG,YAAa;AAAA,EAClD;AC1BA,MAAI;AACJ,QAAM,QAAQ,IAAI,WAAW,EAAE;AAChB,WAAS,MAAM;AAC1B,QAAI,CAAC,iBAAiB;AAClB,UAAI,OAAO,WAAW,eAAe,CAAC,OAAO,iBAAiB;AAC1D,cAAM,IAAI,MAAM,0GAA0G;AAAA,MACtI;AACQ,wBAAkB,OAAO,gBAAgB,KAAK,MAAM;AAAA,IAC5D;AACI,WAAO,gBAAgB,KAAK;AAAA,EAChC;ACVA,QAAM,aAAa,OAAO,WAAW,eAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM;AACvF,QAAA,SAAA,EAAE,WAAY;ACE7B,WAAS,GAAG,SAAS,KAAK,QAAQ;;AAC9B,QAAI,OAAO,cAAc,QAAQ,CAAC,SAAS;AACvC,aAAO,OAAO,WAAY;AAAA,IAClC;AACI,cAAU,WAAW,CAAE;AACvB,UAAM,OAAO,QAAQ,YAAU,aAAQ,QAAR,qCAAmB,IAAK;AACvD,QAAI,KAAK,SAAS,IAAI;AAClB,YAAM,IAAI,MAAM,mCAAmC;AAAA,IAC3D;AACI,SAAK,CAAC,IAAK,KAAK,CAAC,IAAI,KAAQ;AAC7B,SAAK,CAAC,IAAK,KAAK,CAAC,IAAI,KAAQ;AAW7B,WAAO,gBAAgB,IAAI;AAAA,EAC/B;ACPA,QAAM,QAAQ;AAAA,EAMP,MAAM,iBAAiB;AAAA,IAW1B,YAAY,SAAiC;AAX1C;AAEH;AAAA,qCAAwC,CAAE;AAC1C,yBAAAC;AACA,mDAA+D;AAC/D,8CAAiD;AACjD,uCAA0B,CAAE;AAC5B;AACA,oCAAiC,CAAE;AACnC,yBAAAC,wBAAgC;AAkBhC,yBAAAC,cAAc,CAAC,IAA4B,YAAoB;AACxD,WAAA,SAAS,QAAQ,GAAG,4BAA4B,mBAAK,IAAG,WAAW,OAAO,GAAG;AAAA,MACpF;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAAC,SAAS,CAAC,YAAoB,mBAAKD,cAAL,WAAiB,mBAAKF,WAAS,OAAO,OAAO;AAC3E,yBAAAI,SAAS,CAAC,UAAe,mBAAKF,cAAL,WAAiB,mBAAKF,WAAS,OAAO,OAAO;AACtE,yBAAAK,QAAQ,CAAC,UAAe,mBAAKH,cAAL,WAAiB,mBAAKF,WAAS,OAAO,MAAM;AA0FpE,yBAAAM,uBAAuB,YAAY;AAC3B,YAAA;AACA,gBAAM,aAA2B,CAAE;AACxB,qBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AAC7C,uBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,SAAS,SAAS,GAAG;AAC3D,oBAAM,cAAc,SAAS;AAC7B,kBAAI,SAAS,aAAa,UACrB,gBAAgB,aAAa,aAC9B,gBAAgB,aAAa,SAC7B,gBAAgB,aAAa,WAC7B,gBAAgB,aAAa,aAAa;AAO1C,2BAAW,KAAK;AAAA,kBACZ,UAAU,SAAS;AAAA,kBACnB,UAAU,SAAS;AAAA,gBAAA,CACtB;AAAA,cAAA;AAAA,YACL;AAAA,UACJ;AAEA,cAAA,WAAW,SAAS,GAAG;AACvB,uBAAW,YAAY;AACd,iCAAAH,SAAA,WAAO,MAAM,KAAK,+EAA+E,KAAK,UAAU,UAAU,CAAC,GAAG;AACnI,uBAAS,IAAE,GAAG,IAAI,WAAW,QAAQ,KAAK;AACtC,sBAAM,WAAW,mBAAK,YAAW,WAAW,CAAC,EAAE,QAAQ;AACvD,oBAAI,UAAU;AACV,wBAAM,WAAW,SAAS,UAAU,WAAW,CAAC,EAAE,QAAQ;AAC1D,sBAAI,UAAU;AACV,wBAAI,SAAS,6BAA6B;AACjC,yCAAAA,SAAA,WAAO,MAAM,KAAK,+BAA+B,KAAK,UAAU,SAAS,kBAAkB,CAAC,GAAG;AACpG,+BAAS,4BAA4B,WAAW;AAAA,oBAAA;AAIhD,wBAAA,SAAS,UAAU,aAAa,YAAY;AACvC,yCAAAA,SAAA,WAAO,MAAM,KAAK,oBAAoB,KAAK,UAAU,SAAS,kBAAkB,CAAC,GAAG;AACnF,4BAAA,SAAkB,KAAK,iBAAiB,QAAQ;AACjD,yCAAA,cAAa,KAAK,MAAM;AAC7B,0BAAI,mBAAK,cAAa,SAAS,mBAAKH,WAAS,sBAAsB;AAC/D,2CAAK,cAAa,MAAM;AAAA,sBAAA;AAAA,oBAC5B,OACG;AACE,yCAAAG,SAAA,WAAO,MAAM,KAAK,iEAAiE,KAAK,UAAU,SAAS,kBAAkB,CAAC,GAAG;AAAA,oBAAC;AAE3I,6BAAS,WAAW;AAEhB,wBAAA,mBAAKF,4BAA0B,GAAG;AAClC,0BAAI,QAAQ;AACR,mCAAW,MAAM,OAAO,SAAS,UAAU,WAAW,CAAC,EAAE,QAAQ,GAAG,mBAAKA,0BAAwB,GAAM,EAAE,MAAM;AAAA,sBAAA,OAC5G;AACQ,mCAAA,MAAM,OAAO,SAAS,UAAU,WAAW,CAAC,EAAE,QAAQ,GAAG,mBAAKA,0BAAwB,GAAM;AAAA,sBAAA;AAAA,oBAC3G;AAAA,kBACJ;AAAA,gBACJ;AAAA,cACJ;AAEO,yBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AACxD,mCAAKE,SAAL,WAAY,MAAM,KAAK,4EAA4E,SAAS,EAAE,OAAO,OAAO,KAAK,SAAS,SAAS,EAAE,MAAM,GAAG;AAAA,cAAC;AAExJ,yBAAA,mBAAKG,wBAAsB,GAAI;AAAA,eAC3C,GAAG;AAAA,UAAA,OACH;AACQ,uBAAA,mBAAKA,wBAAsB,GAAI;AAAA,UAAA;AAAA,iBAEzC,OAAO;AACP,6BAAAF,SAAA,WAAO,kCAAkC,KAAK;AAC7C,gBAAA;AAAA,QAAA;AAAA,MAEd;AAMA,wCAAa,YAA+B;AACpC,YAAA;AACA,gBAAM,mBAAK,4BAAL;AACN,gBAAM,SAAmB,CAAE;AAChB,qBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AACxD,mBAAO,SAAS,EAAE,IAAI,KAAK,iBAAiB,QAAQ;AAAA,UAAA;AAEjD,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAA,SAAA,WAAO,yBAAyB,KAAK;AACpC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAIA;AAAA;AAAA,6CAAkB,OAAO,WAA8C;AAC/D,YAAA;AACA,gBAAM,mBAAK,4BAAL;AACN,gBAAM,SAAmB,CAAE;AAChB,qBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AACvD,mBAAO,SAAS,EAAE,IAAY,KAAK,sBAAsB,UAAU,MAAM;AAAA,UAAA;AAEvE,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAA,SAAA,WAAO,yBAAyB,KAAK;AACpC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAOA;AAAA,4CAAiB,CAAC,wBAAyD;AACnE,YAAA;AACA,iBAAO,mBAAK,cACP,OAAO,CAAC;;AAAY,oBAAC,oBAAoB,OAAQ,SAAO,kBAAO,QAAQ,eAAf,mBAA2B,SAA3B,mBAAiC,cAAc,oBAAoB,WAAU;AAAA,WAAC,EACtI,OAAO,CAAC,WAAA;;AAAY,oBAAC,oBAAoB,iBAAkB,SAAO,kBAAO,QAAQ,eAAf,mBAA2B,mBAA3B,mBAA2C,cAAc,oBAAoB,qBAAoB;AAAA,WAAC,EACpK,OAAO,CAAC,WAAA;;AAAY,oBAAC,oBAAoB,MAAO,QAAO,YAAO,QAAQ,QAAf,mBAAoB,SAAS,oBAAoB;AAAA,WAAI,EAC5G,OAAO,CAAC,WAAY,CAAC,oBAAoB,cAAe,OAAQ,CAAC,OAAO,QAAQ,WAAY,QAAQ,CAAC,CAAC,OAAO,QAAQ,SAAS,oBAAoB,WAAW,CAAC;AAAA,iBAC9J,OAAO;AACP,6BAAAA,SAAA,WAAO,6BAA6B,KAAK;AAC9C,iBAAO,CAAE;AAAA,QAAA;AAAA,MAEjB;AAEA,uCAAY,OAAO,aAAuC;AAClD,YAAA;AACA,gBAAM,mBAAK,2BAAL,WAA+B,mBAAK,YAAW,QAAQ;AAC7D,iBAAO,KAAK,iBAAiB,mBAAK,YAAW,QAAQ,CAAC;AAAA,iBACjD,OAAO;AACP,6BAAAA,SAAA,WAAO,wBAAwB,KAAK;AACnC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,uCAAY,OAAO,UAAkB,aAAuC;AACpE,YAAA;AACA,gBAAM,mBAAK,2BAAL,WAA+B,mBAAK,YAAW,QAAQ;AACtD,iBAAA,KAAK,iBAAiB,mBAAK,YAAW,QAAQ,EAAE,UAAU,QAAQ,CAAC;AAAA,iBACrE,OAAO;AACP,6BAAAA,SAAA,WAAO,wBAAwB,KAAK;AACnC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,uCAAY,OAAO,eAA+B,qBAA0D;AACpG,YAAA;AACI,cAAA;AACJ,cAAI,kBAAkB;AAEF,4BAAA;AAAA,UAAA,OACb;AAEH,4BAAgB,mBAAKJ,WAAS;AAAA,UAAA;AAG5B,gBAAA;AAAA,YACF;AAAA;AAAA,YACA;AAAA;AAAA,UACJ,IAAI,IAAI,eAAe;AAEvB,cAAI,CAAC,QAAQ;AAGT,kBAAM,MAAM;AAAA,UAAA;AAGhB,gBAAM,WAAWO,GAAO;AACxB,gBAAM,cAAyB;AAAA,YAC3B,IAAI;AAAA,YACJ,iBAAiB,mBAAK;AAAA,YACtB,QAAQ,cAAc,yBAAyB;AAAA,YAC/C,cAAc,CAAE;AAAA,YAChB,aAAa;AAAA,YACb,SAAS;AAAA,YACT,WAAW,CAAE;AAAA,YACb,eAAe,CAAE;AAAA,YAEjB,WAAW,CAAC,OAAiC,mBAAK,YAAW,QAAQ,EAAE,UAAU,EAAE;AAAA;AAAA,YAGnF,WAAW,CAAC,kBAAsD,KAAK,kBAAkB,aAAa,aAAa;AAAA,YACnH,aAAa,CAAC,WAA2D,mBAAKC,eAAL,WAAkB,aAAa;AAAA,YACxG,YAAY,CAAC,WAA2D,mBAAKC,cAAL,WAAiB,aAAa;AAAA,YACtG,aAAa,CAAC,WAA2D,mBAAKC,eAAL,WAAkB,aAAa;AAAA,YACxG,cAAc,CAAC,WAA2D,mBAAKC,gBAAL,WAAmB,aAAa;AAAA,YAC1G,iBAAiB,CAAC,WAA2D,mBAAKC,mBAAL,WAAsB,aAAa;AAAA,YAChH,aAAa,CAAC,WAA2D,mBAAKC,eAAL,WAAkB,aAAa;AAAA,YACxG,eAAe,CAAC,WAA2D,mBAAKC,iBAAL,WAAoB,aAAa;AAAA,YAC5G,cAAc,CAAC,QAAmB,qBAA6E,mBAAKC,gBAAL,WAAmB,aAAa,QAAQ;AAAA;AAAA,YAGvJ,OAAO,MAA6C,mBAAK,cAAL,WAAkB;AAAA,YACtE,MAAM,MAA6C,mBAAK,aAAL,WAAiB;AAAA,YACpE,OAAO,MAA6C,mBAAK,cAAL,WAAkB;AAAA,YACtE,QAAQ,MAA6C,mBAAK,eAAL,WAAmB;AAAA,YACxE,WAAW,MAA6C,mBAAK,kBAAL,WAAsB;AAAA,YAC9E,OAAO,MAA6C,mBAAK,cAAL,WAAkB;AAAA,YACtE,SAAS,MAA6C,mBAAK,gBAAL,WAAoB;AAAA,YAC1E,QAAQ,CAAC,qBAA+E,mBAAK,sBAAL,WAA0B,aAAa;AAAA,YAE/H,IAAI,CAAC,WAAmB,OAAwC;AAC5D,0BAAY,aAAa,KAAK;AAAA,gBAC1B;AAAA,gBACA;AAAA,cAAA,CACH;AACM,qBAAA;AAAA,YAAA;AAAA,UAEf;AACA,cAAI,mBAAK,2BAA0B;AAC1B,+BAAA,0BAAyB,MAAM,MAAM,OAAO,SAAS,QAAQ,GAAG,2BAA2B,YAAY,EAAE,GAAG,CAAC;AAAA,UAAA;AAGtH,6BAAKZ,SAAL,WAAY,qDAAqD,YAAY,EAAE,eAAe,YAAY,OAAO;AAE7G,cAAA,YAAY,QAAQ,QAAQ;AAC3B,wBAAY,OAAe,QAAQ;AAAA,cAChC,SAAS,mBAAmB;AAAA,cAC5B,SAAS;AAAA,gBACL,WAAWI,GAAO;AAAA,gBAClB,MAAM;AAAA,gBACN,SAAS;AAAA,kBACL,GAAG,YAAY;AAAA,gBACnB;AAAA,gBACA;AAAA,cAAA;AAAA,YACJ,CACH;AAAA,UAAA,OACE;AACE,+BAAA,yCAAA,WAAwC,aAAa,mBAAmB,aAAa;AAAA,cACtF,WAAWA,GAAO;AAAA,cAClB,MAAM;AAAA;AAAA,cAEN,SAAS;AAAA,gBACL,GAAG,YAAY;AAAA,cACnB;AAAA,cACA;AAAA,eAC+B;AAAA,UAAK;AAIxC,cAAA,CAAC,YAAY,QAAQ,QAAQ;AAC7B,gBAAI,QAAQ;AACR,0BAAY,OAAO,GAAG,QAAQ,CAAC,SAAc;AACrC,oBAAA;AACA,qCAAKJ,SAAL,WAAY,MAAM,QAAQ,0EAA0E,IAAI,EAAE;AACrG,qCAAA,kBAAA,WAAiB,QAAQ;AAC9B,sBAAI,mBAAK,YAAW,YAAY,EAAE,GAAG;AAC1B,2BAAA,mBAAK,YAAW,YAAY,EAAE;AACrC,uCAAKA,SAAL,WAAY,MAAM,QAAQ,0DAA0D,YAAY,EAAE,gDAAgD;AAAA,kBAAC;AAAA,yBAElJ,OAAO;AACP,qCAAAC,SAAA,WAAO,MAAM,IAAI,yDAAyD,KAAK,cAAc,YAAY,EAAE,GAAG;AAAA,gBAAC;AAAA,cACxH,CACH;AAED,0BAAY,OAAO,GAAG,SAAS,CAAC,UAAe;AACvC,oBAAA;AACA,qCAAKA,SAAL,WAAY,MAAM,IAAI,gEAAgE,KAAK,EAAE;AACxF,qCAAA,kBAAA,WAAiB,SAAS;AAAA,yBAC1BY,QAAO;AACP,qCAAAZ,SAAA,WAAO,MAAM,IAAI,0DAA0DY,MAAK,cAAc,YAAY,EAAE,GAAG;AAAA,gBAAC;AAAA,cACzH,CACH;AAAA,YAAA,OACE;AAEF,0BAAY,OAAe,UAAU,CAAC,UAAe;AAC9C,oBAAA;AACA,qCAAKZ,SAAL,WAAY,MAAM,IAAI,mEAAmE,KAAK;AACzF,qCAAA,kBAAA,WAAiB,WAAW;AACjC,sBAAI,mBAAK,YAAW,YAAY,EAAE,GAAG;AAC1B,2BAAA,mBAAK,YAAW,YAAY,EAAE;AACrC,uCAAKD,SAAL,WAAY,MAAM,QAAQ,gEAAgE,YAAY,EAAE,gDAAgD;AAAA,kBAAC;AAAA,yBAExJa,QAAO;AACP,qCAAAZ,SAAA,WAAO,MAAM,IAAI,+DAA+DY,MAAK,cAAc,YAAY,EAAE,GAAG;AAAA,gBAAC;AAAA,cAElI;AAGC,0BAAY,OAAe,iBAAiB,CAAC,UAAe;AACrD,oBAAA;AACA,qCAAKZ,SAAL,WAAY,MAAM,IAAI,kFAAkF,KAAK;AACxG,qCAAA,kBAAA,WAAiB,kBAAkB;AAAA,yBACnCY,QAAO;AACP,qCAAAZ,SAAA,WAAO,MAAM,IAAI,sEAAsEY,MAAK,cAAc,YAAY,EAAE,GAAG;AAAA,gBAAC;AAAA,cAEzI;AAAA,YAAA;AAAA,UACJ;AAGE,gBAAA,iBAAiB,CAAC,SAAc;AAC9B,gBAAA;AACA,oBAAMC,yBAA2C;AAEjD,sBAAQA,uBAAsB,SAAS;AAAA,gBACvC,KAAK,mBAAmB;AACpB,qCAAKd,SAAL,WAAY;AACZ;AAAA,gBACJ,KAAK,mBAAmB;AACf,qCAAA,mBAAA,WAAkB,aAAac,uBAAsB;AAC1D;AAAA,gBACJ,KAAK,mBAAmB;AACf,qCAAA,oBAAA,WAAmB,aAAaA,uBAAsB;AAC3D;AAAA,gBACJ,KAAK,mBAAmB;AACf,wCAAA,oDAAA,WAAoB,aAAaA,uBAAsB;AAC5D;AAAA,gBACJ,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAAA,gBACxB,KAAK,mBAAmB;AAKf,wCAAA,uDAAA,WAAuB,aAAaA,uBAAsB;AAC/D;AAAA,gBACJ;AACI,qCAAKZ,QAAL,WAAW,gDAAgDY,uBAAsB,OAAO;AAAA,cAAG;AAAA,qBAE1F,OAAO;AACP,iCAAAb,SAAA,WAAO,uCAAuC,KAAK;AAClD,oBAAA;AAAA,YAAA;AAAA,UAEd;AAEI,cAAA;AACJ,cAAI,QAAQ;AACP,wBAAY,YAAoB,GAAG,WAAW,CAAC,SAAc;AAClC,sCAAA;AACxB,6BAAe,qBAAqB;AAAA,YAAA,CACvC;AAAA,UAAA,OACE;AAKF,wBAAY,YAAoB,iBAAiB,WAAW,CAAC,SAAuB;AACjF,sCAAwB,KAAK;AAC7B,6BAAe,qBAAqB;AAAA,YAAA,CACvC;AAAA,UAAA;AAGA,6BAAA,YAAW,YAAY,EAAE,IAAI;AAElC,6BAAKD,SAAL,WAAY,kBAAkB,YAAY,EAAE;AAE5C,gBAAMP,SAAAA,MAAM,EAAE;AAGd,gBAAM,SAAS,MAAM,KAAK,UAAU,YAAY,EAAE;AAClD,cAAI,OAAO,GAAG,cAAc,YAAY,EAAE,MAAM,GAAG;AACxC,mBAAA;AAAA,UAAA,OACJ;AACG,kBAAA,IAAI,MAAM,kDAAkD;AAAA,UAAA;AAAA,iBAEjE,OAAO;AACP,6BAAAQ,SAAA,WAAO,sBAAsB,KAAK;AACjC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,+CAAoB,OAAO,aAAwB,kBAAsD;AACjG,YAAA;AACA,gBAAM,WAAsB,mBAAK,oBAAL,WAAwB,aAAa;AACrD,sBAAA,UAAU,SAAS,EAAE,IAAI;AACrC,gBAAM,SAAS,MAAM,mBAAK,sBAAL,WAA0B,aAAa;AAC5D,cAAI,SAAS,6BAA6B;AAC7B,qBAAA,4BAA4B,MAAM,MAAM,MAAM,kBAAkB,SAAS,EAAE,mBAAmB,YAAY,EAAE,GAAG,CAAC;AAAA,UAAA;AAE7H,cAAI,QAAQ;AACR,+BAAKD,SAAL,WAAY,MAAM,MAAM,kBAAkB,SAAS,EAAE,mBAAmB,YAAY,EAAE,cAAc,KAAK,UAAU,MAAM,CAAC,GAAG;AAAA,UAAC;AAE3H,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAC,SAAA,WAAO,gCAAgC,KAAK;AAC3C,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,+CAAuB,OAAO,UAAqB,aAA6D;AAC5G,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKD,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,4CAAoB,CAAC,UAAqB,oBAAuD;AACzF,YAAA;AACM,gBAAA,EAAE,WAAW;AAEnB,cAAI,SAAS,UAAU,OAAO,EAAE,GAAG;AAC/B,kBAAM,WAAsB,SAAS,UAAU,OAAO,EAAE;AACnD,+BAAA,iBAAA,WAAgB,UAAU;AAC3B,gBAAA,SAAS,+BAA+B,mBAAK,sBAAqB;AAClE,iCAAK,qBAAoB,iBAAiB,SAAS,6BAA6B,SAAS,cAAc;AAAA,YAAA;AAE3G,+BAAK,kBAAL,WAAsB,aAAa,UAAU,OAAO;AAAA,UAAE;AAAA,iBAErD,OAAO;AACP,6BAAAC,SAAA,WAAO,+BAA+B,KAAK;AAC1C,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,2CAAmB,CAAC,WAAmB,aAAwB;AACvD,YAAA;AACS,mBAAA,aAAa,QAAQ,CAAM,OAAA;AAChC,gBAAI,GAAG,UAAU,cAAc,SAAS,MAAM,GAAG;AAC7C,iBAAG,GAAG,QAAQ;AAAA,YAAA;AAAA,UAClB,CACH;AAAA,iBACI,OAAO;AACP,6BAAAA,SAAA,WAAO,8BAA8B,KAAK;AACzC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,2CAAmB,CAAC,WAAmB,UAAqB,aAAqB;AACzE,YAAA;AACI,cAAA,SAAS,cAAc,QAAQ,GAAG;AAC5B,kBAAA,gBAAgC,SAAS,cAAc,QAAQ;AACrE,0BAAc,QAAQ,CAAM,OAAA;AACxB,kBAAI,GAAG,UAAU,cAAc,SAAS,MAAM,GAAG;AAC7C,mBAAG,GAAG,SAAS,UAAU,QAAQ,CAAC;AAAA,cAAA;AAAA,YACtC,CACH;AAAA,UAAA;AAAA,iBAEA,OAAO;AACP,6BAAAA,SAAA,WAAO,8BAA8B,KAAK;AACzC,gBAAA;AAAA,QAAA;AAAA,MAEd;AAKA;AAAA;AAAA;AAAA,6CAAqB,CAAC,UAAqB,oBAAuD;AAC1F,YAAA;AACM,gBAAA,EAAE,WAAW;AAEnB,cAAI,SAAS,UAAU,OAAO,EAAE,GAAG;AAC/B,kBAAM,WAAsB,SAAS,UAAU,OAAO,EAAE;AACxD,kBAAM,gBAAgB,SAAS;AAC/B,qBAAS,QAAQ,OAAO;AACpB,gBAAA,CAAC,SAAS,eAAe;AACzB,uBAAS,gBAAgB,CAAE;AAAA,YAAA;AAE/B,qBAAS,cAAc,KAAK;AAAA,cACxB,+BAAe,KAAK;AAAA,cACpB,QAAQ,EAAE,GAAG,OAAO;AAAA,YAAA,CACvB;AACI,+BAAA,iBAAA,WAAgB,UAAU;AAC/B,+BAAKD,SAAL,WAAY,mDAAmD,SAAS,EAAE,cAAc,OAAO,EAAE,sBAAsB,aAAa,aAAa,OAAO,KAAK;AAC7J,+BAAK,kBAAL,WAAsB,eAAe,UAAU,OAAO;AAAA,UAAE;AAAA,iBAEvD,OAAO;AACP,6BAAAC,SAAA,WAAO,gCAAgC,KAAK;AAC3C,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,6CAAqB,CAAC,UAAqB,kBAA6C;AACpF,cAAM,WAAWG,GAAO;AACxB,YAAI,mBAAK,2BAA0B;AAC/B,6BAAK,0BAAyB,MAAM,MAAM,OAAO,+BAA+B,QAAQ,GAAG,CAAC;AAAA,QAAA;AAEhG,cAAM,qBAA0C;AAAA;AAAA;AAAA,UAG5C,KAAK,GACf,SAAS,QAAQ,QAAQ,GAAGW,wBAAe,mBAAmB,GAAG,SAAS,QAAQ,OAAO,IAAI,SAAS,QAAQ,SAAS,GACvHA,SAAA,eAAe,aAAa,GAC5B,SAAS,EAAE,GACXA,SAAA,eAAe,SAAS,GACxB,QAAQ;AAAA,UACE,UAAU,SAAS,QAAQ;AAAA;AAAA,UAC3B,WAAW,GAAG,SAAS,QAAQ,OAAO,IAAI,SAAS,QAAQ,SAAS;AAAA;AAAA,UACpE,UAAU,GAAG,SAAS,EAAE;AAAA;AAAA,UACxB,IAAI;AAAA;AAAA,QACR;AAEA,cAAM,WAAsB;AAAA,UACxB,IAAI;AAAA,UACJ,UAAU,SAAS;AAAA,UACnB,iBAAiB,mBAAK;AAAA,UACtB,OAAO,aAAa;AAAA,UACpB,WAAW;AAAA,UACX,6BAA8B,mBAAK,4BAA4B,mBAAK,0BAAyB,+BAA+B,kBAAkB,IAAI;AAAA,UAClJ;AAAA,UACA,SAAS;AAAA,UACT,eAAe,CAAE;AAAA,UACjB,gBAAgB;AAAA,YACZ,cAAc;AAAA,YACd,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,qBAAqB;AAAA,YACrB,0BAA0B;AAAA,YAC1B,0BAA0B;AAAA,YAC1B,UAAU;AAAA,YACV,WAAW;AAAA,YACX,OAAO;AAAA,YACP,UAAU;AAAA,YACV,SAAS;AAAA,YACT,oBAAoB;AAAA,YACpB,SAAS,CAAE;AAAA,YACX,YAAY;AAAA,YACZ,IAAI;AAAA,YACJ,IAAI;AAAA,UACR;AAAA,UACA,OAAO,MAA2C,mBAAKV,eAAL,WAAkB,UAAU;AAAA,UAC9E,MAAM,MAA2C,mBAAKC,cAAL,WAAiB,UAAU;AAAA,UAC5E,OAAO,MAA2C,mBAAKC,eAAL,WAAkB,UAAU;AAAA,UAC9E,QAAQ,MAA2C,mBAAKC,gBAAL,WAAmB,UAAU;AAAA,UAChF,OAAO,MAA2C,mBAAKE,eAAL,WAAkB,UAAU;AAAA,UAC9E,SAAS,MAA2C,mBAAKC,iBAAL,WAAoB,UAAU;AAAA,UAClF,WAAW,MAA2C,mBAAKF,mBAAL,WAAsB,UAAU;AAAA,UACtF,QAAQ,CAAC,qBAA6E,mBAAKG,gBAAL,WAAmB,UAAU,UAAU;AAAA,UAC7H,IAAI,CAAC,WAAmB,OAAwC;AAC5D,gBAAI,CAAC,SAAS,cAAc,SAAS,EAAE,GAAG;AACtC,uBAAS,cAAc,SAAS,EAAE,IAAI,CAAE;AAAA,YAAA;AAE5C,qBAAS,cAAc,SAAS,EAAE,EAAE,KAAK;AAAA,cACrC;AAAA,cACA;AAAA,YAAA,CACH;AACM,mBAAA;AAAA,UACX;AAAA,UACA,UAAU;AAAA,QACd;AAEO,eAAA;AAAA,MACX;AAGA,kEAA0C,CAAC,UAAqB,SAA4B,SAA8C,mBAAyB;AAC3J,YAAA;AACA,cAAI,gBAAgB;AAChB,+BAAKZ,SAAL,WAAY;AACH,qBAAA,OAAO,YAAY,EAAE,SAAS,QAAW,GAAA,CAAC,cAAc,CAAC;AAClE,+BAAKA,SAAL,WAAY;AAAA,UAAqD,OAC9D;AACH,+BAAKA,SAAL,WAAY;AACZ,qBAAS,OAAO,YAAY,EAAE,SAAS,SAAS;AAAA,UAAA;AAAA,iBAE/C,OAAO;AACP,6BAAAA,SAAA,WAAO,qDAAqD,KAAK;AAChE,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,yBAAAK,eAAe,OAAO,UAAqB,aAA6D;AACpG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKL,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAM,cAAc,OAAO,UAAqB,aAA6D;AACnG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKN,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,0BAA0B,KAAK;AACrC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAU,eAAe,OAAO,UAAqB,aAA6D;AACpG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKV,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAW,iBAAiB,OAAO,UAAqB,aAA6D;AACtG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKX,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,6BAA6B,KAAK;AACxC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAS,mBAAmB,OAAO,UAAqB,aAA6D;AACxG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKT,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAO,eAAe,OAAO,UAAqB,aAA6D;AACpG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKP,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAQ,gBAAgB,OAAO,UAAqB,aAA6D;AACrG,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKR,SAAL,WAAY;AACZ,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,yBAAAY,gBAAgB,OAAO,UAAqB,UAAqB,qBAA6E;AAC1I,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKZ,SAAL,WAAY;AACZ,qBAAS,QAAQ,mBAAmB,EAAE,GAAG,iBAAiB;AAC1D,kBAAM,UAAU,mBAAmB;AACnC,kBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,kBAAM,UAAuC;AAAA,cACzC;AAAA,cACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,YACnD;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,kBAAA;AAAA,UAAA;AAAA,QACV,CACH;AAAA,MACL;AAEA,uCAAe,OAAO,aAA+D;AACjF,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,QAAA;AAE9B,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAEA,sCAAc,OAAO,aAA+D;AAChF,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,MAAM;AAAA,QAAA;AAE7B,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAEA,uCAAe,OAAO,aAA+D;AACjF,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,QAAA;AAE9B,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAEA,wCAAgB,OAAO,aAA+D;AAClF,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,QAAQ;AAAA,QAAA;AAE/B,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAEA,uCAAe,OAAO,aAA+D;AACjF,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,QAAA;AAE9B,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAEA,yCAAiB,OAAO,aAA+D;AACnF,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,SAAS;AAAA,QAAA;AAEhC,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAGA;AAAA,+CAAuB,OAAO,UAAqB,qBAA+E;AAC9H,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,gBAAgB,CAAC;AAAA,QAAA;AAE/C,eAAA,QAAQ,IAAI,SAAS;AAAA,MAChC;AAEA,2CAAmB,OAAO,aAA+D;AACjF,YAAA;AAEA,gBAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,gBAAM,YAAmD,CAAE;AAC3D,mBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,sBAAU,KAAK,QAAQ,CAAC,EAAE,WAAW;AAAA,UAAA;AAEnC,gBAAA,SAAS,QAAQ,IAAI,SAAS;AAEpC,cAAI,SAAS,QAAQ;AACjB,uBAAW,MAAM;AACb,uBAAS,OAAO,UAAU;AAC1B,iCAAKA,SAAL,WAAY,uBAAuB,SAAS,EAAE;AAC9C,kBAAI,mBAAK,YAAW,SAAS,EAAE,GAAG;AACvB,uBAAA,mBAAK,YAAW,SAAS,EAAE;AAClC,mCAAKA,SAAL,WAAY,MAAM,QAAQ,0DAA0D,SAAS,EAAE,gDAAgD;AAAA,cAAC;AAAA,eAErJ,GAAG;AAAA,UAAA;AAGH,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAA,SAAA,WAAO,8BAA8B,KAAK;AAC/C,iBAAO,CAAE;AAAA,QAAA;AAAA,MAEjB;AAEA,oDAAyB,MAAwB;AACzC,YAAA;AAEA,cAAI,oBAAsC;AAC/B,qBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACxD,gBAAI,mBAAmB;AACf,kBAAA,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,kBAAkB,SAAS,EAAE,QAAQ;AACvE,oCAAA;AAAA,cAAA;AAAA,YACxB,OACG;AACiB,kCAAA;AAAA,YAAA;AAAA,UACxB;AAEG,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAC,SAAA,WAAO,sCAAsC,KAAK;AAChD,iBAAA;AAAA,QAAA;AAAA,MAEf;AAEA,2CAAgB,MAAwB;AAChC,YAAA;AAEA,cAAI,aAA+B;AACxB,qBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACxD,gBAAI,YAAY;AACR,kBAAA,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,WAAW,SAAS,EAAE,QAAQ;AACvE,6BAAA;AAAA,cAAA;AAAA,YACjB,OACG;AACU,2BAAA;AAAA,YAAA;AAAA,UACjB;AAEG,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAA,SAAA,WAAO,6BAA6B,KAAK;AACvC,iBAAA;AAAA,QAAA;AAAA,MAEf;AAUA,iDAAyB,OAAO,WAC5B,SACA,YAAuE;AACnE,YAAA;AACA,gBAAM,YAAqD,CAAE;AAE7D,gBAAM,UAAU,OAAO,OAAO,KAAK,SAAS,EAAE,OAAO,CAAC,aAAc,UAAU,WAAW,IAAI,OAAO,UAAU,SAAS,SAAS,EAAE,CAAE;AAEpI,mBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,gBAAI,YAAY,UAAU;AACtB,wBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAQ,CAAC;AAAA,YAAA,OACzC;AACH,wBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,GAAG;AAAA,YAAA;AAAA,UACxC;AAGJ,gBAAM,eAAe,MAAM,QAAQ,IAAI,SAAS;AAEhD,gBAAM,YAA0C,CAAE;AAClD,mBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,sBAAU,KAAK;AAAA,cACX,iBAAiB,mBAAK;AAAA,cACtB,UAAU,QAAQ,CAAC,EAAE;AAAA,cACrB,4BAA4B,aAAa,CAAC;AAAA,YAAA,CACf;AAAA,UAAA;AAE5B,iBAAA;AAAA,iBACF,OAAO;AACZ,6BAAKA,SAAL,WAAY,sCAAsC,OAAO,iBAAiB,SAAS,aAAa,KAAK;AACrG,iBAAO,CAAE;AAAA,QAAA;AAAA,MAEjB;AAEA,0CAAe,OAAO,cAA+D;AAC1E,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,yCAAc,OAAO,cAA+D;AACzE,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,0CAAe,OAAO,cAA+D;AAC1E,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,2CAAgB,OAAO,cAA+D;AAC3E,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,4CAAiB,OAAO,cAA+D;AAC5E,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,0CAAe,OAAO,cAA+D;AAC1E,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,8CAAmB,OAAO,cAA+D;AAC9E,eAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,MAClD;AAEA,2CAAgB,OAAO,WAAqB,YAAsE;AAC9G,eAAO,mBAAK,wBAAL,WAA4B,WAAW,UAAU;AAAA,MAC5D;AAEA,2DAAmC,OAAO,UAAkB,WACxD,SACA,qBAAgF;AAC5E,YAAA;AACI,cAAA,mBAAK,YAAW,QAAQ,GAAG;AACvB,gBAAA,UAAU,WAAW,GAAG;AACxB,kBAAI,YAAY,UAAU;AACtB,uBAAO,mBAAK,YAAW,QAAQ,EAAE,OAAO,EAAE,gBAAiB;AAAA,cAAA,OACxD;AACH,uBAAO,mBAAK,YAAW,QAAQ,EAAE,OAAO,EAAE;AAAA,cAAA;AAAA,YAC9C,OACG;AACH,oBAAM,YAAmD,CAAE;AAErD,oBAAA,UAAU,OAAO,OAAO,mBAAK,YAAW,QAAQ,EAAE,SAAS,EAC5D,OAAO,CAAC,aAAc,UAAU,WAAW,IAAI,OAAO,UAAU,SAAS,SAAS,EAAE,CAAE;AAE3F,uBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAI,YAAY,UAAU;AACtB,4BAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,EAAE,gBAAiB,CAAC;AAAA,gBAAA,OAClD;AACH,4BAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,GAAG;AAAA,gBAAA;AAAA,cACxC;AAGJ,oBAAM,eAAe,MAAM,QAAQ,IAAI,SAAS;AAEhD,oBAAM,YAA0C,CAAE;AAClD,uBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,0BAAU,KAAK,EAAE,GAAG,aAAa,CAAC,GAAG;AAAA,cAAA;AAElC,qBAAA;AAAA,YAAA;AAAA,UACX;AAEJ,iBAAO,CAAE;AAAA,iBACJ,OAAO;AACP,6BAAAA,SAAA,WAAO,+CAA+C,OAAO,gBAAgB,QAAQ,iBAAiB,SAAS,aAAa,KAAK;AACtI,iBAAO,CAAE;AAAA,QAAA;AAAA,MAEjB;AAEA,yCAAc,OAAO,UAAkB,cAA+D;AAClG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,0CAAe,OAAO,UAAkB,cAA+D;AACnG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,0CAAe,OAAO,UAAkB,cAA+D;AACnG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,2CAAgB,OAAO,UAAkB,cAA+D;AACpG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,4CAAiB,OAAO,UAAkB,cAA+D;AACrG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,0CAAe,OAAO,UAAkB,cAA+D;AACnG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,8CAAmB,OAAO,UAAkB,cAA+D;AACvG,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,MACtE;AAEA,2CAAgB,OAAO,UAAkB,WAAqB,qBAA+E;AACzI,eAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW,UAAU;AAAA,MAChF;AAuCA,0CAAkB,CAAC,UAAqB,WAAoB;AACpD,YAAA;AACA,mBAAS,YAAY,OAAO;AAC5B,mBAAS,QAAQ,OAAO;AACxB,mBAAS,iBAAiB,EAAE,GAAG,OAAO,eAAe;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,8BAA8B,KAAK;AAAA,QAAG;AAAA,MAE1D;AAEA,qDAA6B,CAAC,YAAyC;AAE/D,YAAA;AACA,cAAI,mBAAK,YAAW,QAAQ,QAAQ,GAAG;AACnC,kBAAM,YAAY,mBAAK,YAAW,QAAQ,QAAQ,EAAE;AACpD,gBAAI,WAAW;AACH,sBAAA,QAAQ,QAAQ,CAAC,WAAW;AAC5B,oBAAA,UAAU,OAAO,EAAE,GAAG;AACtB,qCAAK,iBAAL,WAAqB,UAAU,OAAO,EAAE,GAAG;AAAA,gBAAM;AAAA,cACrD,CACH;AAAA,YAAA;AAAA,UACL;AAAA,iBAEC,OAAO;AACP,6BAAAA,SAAA,WAAO,yCAAyC,KAAK;AAAA,QAAG;AAAA,MAErE;AAEA,oDAA4B,OAAO,aAAoD;AAC/E,YAAA;AACA,gBAAM,SAAS,MAAM,mBAAK,gCAAL,WAAoC,UAAU,mBAAmB;AAEjF,6BAAA,4BAAA,WAA2B,OAAO;AAChC,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAA,SAAA,WAAO,wCAAwC,KAAK;AACnD,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,qDAA6B,YAA0C;AAC/D,YAAA;AACA,gBAAM,SAAS,MAAM,QAAQ,IAAI,OAAO,OAAO,mBAAK,WAAU,EAAE,IAAI,cAAY,mBAAK,gCAAL,WAAoC,UAAU,mBAAmB,WAAW,CAAC;AAEtJ,iBAAA,QAAQ,CAAC,mBAAsC;AAC7C,+BAAA,4BAAA,WAA2B,eAAe;AAAA,UAAgC,CAClF;AACM,iBAAA;AAAA,iBACF,OAAO;AACP,6BAAAA,SAAA,WAAO,yCAAyC,KAAK;AACpD,gBAAA;AAAA,QAAA;AAAA,MAEd;AAEA,gDAAwB,CAAC,SAAc,QAAa,YAA+B;AAC/E,cAAM,YAAYG,GAAO;AACpB,2BAAA,WAAU,SAAS,IAAI;AAAA,UACxB,SAAS,WAAW,MAAM;AACd,mBAAA,mBAAK,WAAU,SAAS;AAChC,mBAAO,6CAA6C,SAAS,gBAAgB,OAAO,GAAG;AAAA,aACxF,GAAI;AAAA,UACP,gBAAgB,CAAC,YAA+B;AAC5C,oBAAQ,OAAO;AAAA,UAAA;AAAA,QAEvB;AACO,eAAA;AAAA,MACX;AAEA,yDAAiC,OAAO,UAAqB,YAA2D;AACpH,eAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,cAAA;AACA,+BAAKJ,SAAL,WAAY;AACZ,kBAAM,YAAYI,GAAO;AACpB,+BAAA,WAAU,SAAS,IAAI;AAAA,cACxB,SAAS,WAAW,MAAM;AACd,uBAAA,mBAAK,WAAU,SAAS;AAChC,uBAAO,6CAA6C,SAAS,gBAAgB,OAAO,GAAG;AAAA,iBACxF,GAAI;AAAA,cACP,gBAAgB,CAACY,aAA+B;AAC5C,wBAAQA,QAAO;AAAA,cAAA;AAAA,YAEvB;AACA,kBAAM,UAAwC;AAAA,cAC1C;AAAA,YACJ;AACA,qBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,mBAChD,OAAO;AACP,+BAAAf,SAAA,WAAO,6CAA6C,KAAK;AAAA,UAAG;AAAA,QACrE,CACH;AAAA,MACL;AAntCI,yBAAK,KAAMG,GAAO;AAClB,UAAI,SAAS;AACT,2BAAKP,WAAW;AAAA,MAAA,OACb;AACH,2BAAKA,WAAW,CAAE;AAAA,MAAA;AAGlB,UAAA,mBAAKA,WAAS,6BAA6B;AACtC,2BAAA,0BAA2B,mBAAKA,WAAS;AACzC,2BAAA,qBAAsB,IAAI,mBAAmB;AAAA,MAAA;AAGtD,yBAAKM,uBAAL;AAAA,IAA0B;AAAA,IAiB9B,0BAA0B,UAA8B;AAChD,UAAA;AACO,eAAA;AAAA,UACH,IAAI,SAAS;AAAA,UACb,oBAAoB,EAAE,GAAG,SAAS,mBAAmB;AAAA,UACrD,gBAAgB,EAAE,GAAG,SAAS,eAAe;AAAA,UAC7C,WAAW,SAAS;AAAA,UACpB,SAAS,EAAE,GAAG,SAAS,QAAQ;AAAA,UAC/B,OAAO,SAAS;AAAA,UAChB,UAAU,SAAS;AAAA,UACnB,iBAAiB,mBAAK;AAAA,QAC1B;AAAA,eACK,OAAO;AACP,2BAAAF,SAAA,WAAO,wCAAwC,KAAK;AACnD,cAAA;AAAA,MAAA;AAAA,IACV;AAAA,IAGJ,iBAAiB,UAA8B;AACvC,UAAA;AACM,cAAA,SAAS,KAAK,0BAA0B,QAAQ;AACtD,YAAI,SAAS,eAAe;AACxB,iBAAO,gBAAgB,CAAE,GAAG,SAAS,aAAc;AAAA,QAAA;AAEhD,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,+BAA+B,KAAK;AAC1C,cAAA;AAAA,MAAA;AAAA,IACV;AAAA,IAGJ,sBAAsB,UAAuC;AACrD,UAAA;AACA,cAAM,SAA2B;AAAA,UAC7B,IAAI,SAAS;AAAA,UACb,WAAW,SAAS;AAAA,UACpB,OAAO,SAAS;AAAA,QACpB;AACA,YAAI,SAAS,WAAW,SAAS,QAAQ,YAAY;AACjD,iBAAO,UAAU;AAAA,YACb,YAAY,EAAE,GAAG,SAAS,QAAQ,WAAW;AAAA,UACjD;AAAA,QAAA;AAEG,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,+BAA+B,KAAK;AAC1C,cAAA;AAAA,MAAA;AAAA,IACV;AAAA,IAGJ,iBAAiB,UAA8B;AACvC,UAAA;AACA,cAAM,EAAE,IAAI,SAAS,WAAW,gBAAoB,IAAA;AACpD,cAAM,aAAsB;AAAA,UACxB;AAAA,UACA,SAAS,EAAE,GAAG,QAAQ;AAAA,UACtB,SAAS,CAAE;AAAA,UACX;AAAA,QACJ;AACA,mBAAW,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AACjD,qBAAW,QAAqB,SAAS,EAAE,IAAI,KAAK,iBAAiB,QAAQ;AAAA,QAAA;AAE3E,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,+BAA+B,KAAK;AAC1C,cAAA;AAAA,MAAA;AAAA,IACV;AAAA,IAGJ,sBAAsB,UAAqB,QAA0C;AAC7E,UAAA;AACA,cAAM,aAA+B;AAAA,UACjC,IAAI,SAAS;AAAA,UACb,SAAS,CAAA;AAAA,QACb;AAGA,eAAO,OAAO,SAAS,SAAS,EAAE,OAAO,CAAA,aAAY,OAAO,WAAW,IAAI,OAAO,OAAO,SAAS,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,aAAa;AACpI,qBAAW,QAAgB,SAAS,EAAE,IAAI,KAAK,sBAAsB,QAAQ;AAAA,QAAA,CACjF;AAEM,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,oCAAoC,KAAK;AAC/C,cAAA;AAAA,MAAA;AAAA,IACV;AAAA,IA6EJ,IAAI,KAAa;AACb,aAAO,mBAAK;AAAA,IAAA;AAAA,IAiChB,IAAI,YAAuC;AACvC,aAAO,mBAAK;AAAA,IAAA;AAAA,IAguBhB,IAAI,UAAiC;AACjC,aAAO,mBAAKJ;AAAA,IAAA;AAAA,IAGhB,IAAI,QAAQ,SAAgC;AACxC,yBAAKA,WAAW;AAAA,IAAA;AAAA,EA6QxB;AA9tCI;AACA,EAAAA,YAAA;AACA;AACA;AACA;AACA;AACA;AACA,EAAAC,yBAAA;AAkBA,EAAAC,eAAA;AAUA,EAAAC,UAAA;AACA,EAAAC,UAAA;AACA,EAAAC,SAAA;AA0FA,EAAAC,wBAAA;AAkYA;AAkBA;AAkBA;AAaA;AAmBA;AAyBA;AAyEA;AAgBA,EAAAE,gBAAA;AAkBA,EAAAC,eAAA;AAkBA,EAAAI,gBAAA;AAkBA,EAAAC,kBAAA;AAkBA,EAAAF,oBAAA;AAkBA,EAAAF,gBAAA;AAkBA,EAAAC,iBAAA;AAkBA,EAAAI,iBAAA;AAmBA;AASA;AASA;AASA;AASA;AASA;AAUA;AASA;AA4EA;AAiEA;AAvhCG;AAgmCH,0BAAA,SAAoB,aAAwB,SAAgC;AACpE,QAAA;AACA,YAAM,YAAY,QAAQ;AACtB,UAAA,mBAAK,WAAU,SAAS,GAAG;AACrB,cAAA,gBAAgB,mBAAK,WAAU,SAAS;AAC9C,qBAAa,cAAc,OAAO;AAClC,cAAM,gBAAmC;AAAA,UACrC,SAAS,mBAAmB;AAAA,UAC5B,SAAS;AAAA,YACL;AAAA,YACA,UAAU,YAAY;AAAA,YACtB,SAAS,QAAQ;AAAA,UAAA;AAAA,QAEzB;AACO,eAAA,mBAAK,WAAU,SAAS;AAC/B,sBAAc,eAAe,aAAa;AAAA,MAAA;AAAA,aAEzC,OAAO;AACP,yBAAAX,SAAA,WAAO,kCAAkC,KAAK;AAAA,IAAG;AAAA,EAC1D;AAGJ,6BAAA,SAAuB,aAAwB,SAA8C;AACrF,QAAA;AACA,YAAM,YAAY,QAAQ;AACtB,UAAA,mBAAK,WAAU,SAAS,GAAG;AACrB,cAAA,gBAAgB,mBAAK,WAAU,SAAS;AAC9C,qBAAa,cAAc,OAAO;AAClC,cAAM,aAAyC,EAAE,GAAG,QAAQ,0BAA0B;AAC/E,eAAA,mBAAK,WAAU,SAAS;AAC/B,sBAAc,eAAe,UAAU;AAAA,MAAA;AAAA,aAEtC,OAAO;AACP,yBAAAA,SAAA,WAAO,qCAAqC,KAAK;AAAA,IAAG;AAAA,EAC7D;AAGJ;AAUA;AAkBA;AAYA;AAcA;AAcA;;;;;;;;;","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,13,14,15,16]}
|