@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.mjs","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","chalk","styles","ansiStyles","require$$2","require$$3","_a","_options","_archiveDeleteTimeout","_logMessage","_debug","_error","_warn","_processLoopExecutor","uuidv4","_StartRunner","_StopRunner","_PauseRunner","_ResumeRunner","_TerminateRunner","_ResetRunner","_ExecuteRunner","_UpdateRunner","error","publishMessagePayload","payload"],"mappings":";;;;;;;;;;;;;;AA0BY,IAAA,uCAAAA,wBAAL;AACNA,sBAAA,qBAAqB,IAAA;AAErBA,sBAAA,aAAc,IAAA;AACdA,sBAAA,qBAAsB,IAAA;AAEtBA,sBAAA,WAAY,IAAA;AACZA,sBAAA,mBAAoB,IAAA;AAEpBA,sBAAA,aAAc,IAAA;AACdA,sBAAA,qBAAsB,IAAA;AAEtBA,sBAAA,YAAa,IAAA;AACbA,sBAAA,oBAAqB,IAAA;AAErBA,sBAAA,aAAc,IAAA;AACdA,sBAAA,qBAAsB,IAAA;AAEtBA,sBAAA,cAAe,IAAA;AACfA,sBAAA,sBAAuB,IAAA;AAEvBA,sBAAA,aAAc,IAAA;AACdA,sBAAA,qBAAsB,IAAA;AAEtBA,sBAAA,eAAgB,IAAA;AAChBA,sBAAA,uBAAwB,IAAA;AAExBA,sBAAA,WAAY,IAAA;AAEZA,sBAAA,cAAe,IAAA;AACfA,sBAAA,sBAAuB,IAAA;AAEvBA,sBAAA,iBAAkB,IAAA;AAClBA,sBAAA,yBAA0B,IAAA;AAE1BA,sBAAA,mBAAoB,IAAA;AAEpBA,sBAAA,YAAa,IAAA;AACbA,sBAAA,oBAAqB,IAAA;AAtCVA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AAiEA,IAAA,iCAAAC,kBAAL;AACNA,gBAAA,SAAU,IAAA;AACVA,gBAAA,SAAU,IAAA;AACVA,gBAAA,QAAS,IAAA;AACTA,gBAAA,WAAY,IAAA;AACZA,gBAAA,SAAU,IAAA;AACVA,gBAAA,YAAa,IAAA;AACbA,gBAAA,OAAQ,IAAA;AAPGA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;AAkFA,IAAA,iCAAAC,kBAAL;AACNA,gBAAA,UAAW,IAAA;AACXA,gBAAA,SAAU,IAAA;AACVA,gBAAA,SAAU,IAAA;AACVA,gBAAA,QAAS,IAAA;AACTA,gBAAA,OAAQ,IAAA;AALGA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;AAkHL,MAAM,mCAAmC;AAAA,EAC5C,GAAG;AAAA,EACH,gBAAgB;AAAA,EAChB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,6BAA6B;AACjC;ACrSA,MAAA,SAAe,OAAO,UAAU,SAAS,KAAK,OAAO,YAAY,cAAc,UAAU,CAAC,MAAM;;;;;;;;;;ACChG,cAAiB;AAAA,IAChB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC9B,QAAQ,CAAC,GAAG,KAAK,GAAG;AAAA,IACpB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,IACxB,SAAS,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,IAChC,QAAQ,CAAC,GAAG,GAAG,GAAG;AAAA,IAClB,cAAc,CAAC,KAAK,IAAI,GAAG;AAAA,IAC3B,SAAS,CAAC,KAAK,IAAI,EAAE;AAAA,IACrB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,IAC1B,cAAc,CAAC,KAAK,KAAK,CAAC;AAAA,IAC1B,aAAa,CAAC,KAAK,KAAK,EAAE;AAAA,IAC1B,SAAS,CAAC,KAAK,KAAK,EAAE;AAAA,IACtB,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,IAChC,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,WAAW,CAAC,KAAK,IAAI,EAAE;AAAA,IACvB,QAAQ,CAAC,GAAG,KAAK,GAAG;AAAA,IACpB,YAAY,CAAC,GAAG,GAAG,GAAG;AAAA,IACtB,YAAY,CAAC,GAAG,KAAK,GAAG;AAAA,IACxB,iBAAiB,CAAC,KAAK,KAAK,EAAE;AAAA,IAC9B,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,aAAa,CAAC,GAAG,KAAK,CAAC;AAAA,IACvB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,eAAe,CAAC,KAAK,GAAG,GAAG;AAAA,IAC3B,kBAAkB,CAAC,IAAI,KAAK,EAAE;AAAA,IAC9B,cAAc,CAAC,KAAK,KAAK,CAAC;AAAA,IAC1B,cAAc,CAAC,KAAK,IAAI,GAAG;AAAA,IAC3B,WAAW,CAAC,KAAK,GAAG,CAAC;AAAA,IACrB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC9B,iBAAiB,CAAC,IAAI,IAAI,GAAG;AAAA,IAC7B,iBAAiB,CAAC,IAAI,IAAI,EAAE;AAAA,IAC5B,iBAAiB,CAAC,IAAI,IAAI,EAAE;AAAA,IAC5B,iBAAiB,CAAC,GAAG,KAAK,GAAG;AAAA,IAC7B,cAAc,CAAC,KAAK,GAAG,GAAG;AAAA,IAC1B,YAAY,CAAC,KAAK,IAAI,GAAG;AAAA,IACzB,eAAe,CAAC,GAAG,KAAK,GAAG;AAAA,IAC3B,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,cAAc,CAAC,IAAI,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,KAAK,IAAI,EAAE;AAAA,IACzB,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,IAC7B,eAAe,CAAC,IAAI,KAAK,EAAE;AAAA,IAC3B,WAAW,CAAC,KAAK,GAAG,GAAG;AAAA,IACvB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,QAAQ,CAAC,KAAK,KAAK,CAAC;AAAA,IACpB,aAAa,CAAC,KAAK,KAAK,EAAE;AAAA,IAC1B,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,IACtB,SAAS,CAAC,GAAG,KAAK,CAAC;AAAA,IACnB,eAAe,CAAC,KAAK,KAAK,EAAE;AAAA,IAC5B,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,IACtB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,aAAa,CAAC,KAAK,IAAI,EAAE;AAAA,IACzB,UAAU,CAAC,IAAI,GAAG,GAAG;AAAA,IACrB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC/B,aAAa,CAAC,KAAK,KAAK,CAAC;AAAA,IACzB,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC9B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,wBAAwB,CAAC,KAAK,KAAK,GAAG;AAAA,IACtC,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,IAC7B,iBAAiB,CAAC,IAAI,KAAK,GAAG;AAAA,IAC9B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC9B,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,IAChC,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,IAChC,kBAAkB,CAAC,KAAK,KAAK,GAAG;AAAA,IAChC,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,IAC7B,QAAQ,CAAC,GAAG,KAAK,CAAC;AAAA,IAClB,aAAa,CAAC,IAAI,KAAK,EAAE;AAAA,IACzB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,WAAW,CAAC,KAAK,GAAG,GAAG;AAAA,IACvB,UAAU,CAAC,KAAK,GAAG,CAAC;AAAA,IACpB,oBAAoB,CAAC,KAAK,KAAK,GAAG;AAAA,IAClC,cAAc,CAAC,GAAG,GAAG,GAAG;AAAA,IACxB,gBAAgB,CAAC,KAAK,IAAI,GAAG;AAAA,IAC7B,gBAAgB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC9B,kBAAkB,CAAC,IAAI,KAAK,GAAG;AAAA,IAC/B,mBAAmB,CAAC,KAAK,KAAK,GAAG;AAAA,IACjC,qBAAqB,CAAC,GAAG,KAAK,GAAG;AAAA,IACjC,mBAAmB,CAAC,IAAI,KAAK,GAAG;AAAA,IAChC,mBAAmB,CAAC,KAAK,IAAI,GAAG;AAAA,IAChC,gBAAgB,CAAC,IAAI,IAAI,GAAG;AAAA,IAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,eAAe,CAAC,KAAK,KAAK,GAAG;AAAA,IAC7B,QAAQ,CAAC,GAAG,GAAG,GAAG;AAAA,IAClB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,SAAS,CAAC,KAAK,KAAK,CAAC;AAAA,IACrB,aAAa,CAAC,KAAK,KAAK,EAAE;AAAA,IAC1B,UAAU,CAAC,KAAK,KAAK,CAAC;AAAA,IACtB,aAAa,CAAC,KAAK,IAAI,CAAC;AAAA,IACxB,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,IACxB,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC/B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC/B,iBAAiB,CAAC,KAAK,KAAK,GAAG;AAAA,IAC/B,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,QAAQ,CAAC,KAAK,KAAK,EAAE;AAAA,IACrB,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,IACtB,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,IACtB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,UAAU,CAAC,KAAK,GAAG,GAAG;AAAA,IACtB,iBAAiB,CAAC,KAAK,IAAI,GAAG;AAAA,IAC9B,OAAO,CAAC,KAAK,GAAG,CAAC;AAAA,IACjB,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,IAC1B,eAAe,CAAC,KAAK,IAAI,EAAE;AAAA,IAC3B,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,IACxB,cAAc,CAAC,KAAK,KAAK,EAAE;AAAA,IAC3B,YAAY,CAAC,IAAI,KAAK,EAAE;AAAA,IACxB,YAAY,CAAC,KAAK,KAAK,GAAG;AAAA,IAC1B,UAAU,CAAC,KAAK,IAAI,EAAE;AAAA,IACtB,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,IACxB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,aAAa,CAAC,KAAK,IAAI,GAAG;AAAA,IAC1B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,KAAK,KAAK,GAAG;AAAA,IAC3B,QAAQ,CAAC,KAAK,KAAK,GAAG;AAAA,IACtB,eAAe,CAAC,GAAG,KAAK,GAAG;AAAA,IAC3B,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,IAC1B,OAAO,CAAC,KAAK,KAAK,GAAG;AAAA,IACrB,QAAQ,CAAC,GAAG,KAAK,GAAG;AAAA,IACpB,WAAW,CAAC,KAAK,KAAK,GAAG;AAAA,IACzB,UAAU,CAAC,KAAK,IAAI,EAAE;AAAA,IACtB,aAAa,CAAC,IAAI,KAAK,GAAG;AAAA,IAC1B,UAAU,CAAC,KAAK,KAAK,GAAG;AAAA,IACxB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,SAAS,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB,cAAc,CAAC,KAAK,KAAK,GAAG;AAAA,IAC5B,UAAU,CAAC,KAAK,KAAK,CAAC;AAAA,IACtB,eAAe,CAAC,KAAK,KAAK,EAAE;AAAA,EAC5B;;;;;;;;ACrJD,QAAM,cAAcC,iBAAqB;AAMzC,QAAM,kBAAkB,CAAE;AAC1B,aAAW,OAAO,OAAO,KAAK,WAAW,GAAG;AAC3C,oBAAgB,YAAY,GAAG,CAAC,IAAI;AAAA,EACrC;AAEA,QAAM,UAAU;AAAA,IACf,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,MAAM,EAAC,UAAU,GAAG,QAAQ,OAAM;AAAA,IAClC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,MAAK;AAAA,IAChC,KAAK,EAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAC;AAAA,IAClC,SAAS,EAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAC;AAAA,IAC1C,QAAQ,EAAC,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAC;AAAA,IACxC,SAAS,EAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,EAAC;AAAA,IAC1C,KAAK,EAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,KAAK,GAAG,EAAC;AAAA,IAC1C,OAAO,EAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,OAAO,KAAK,EAAC;AAAA,IAClD,MAAM,EAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAC;AAAA,EACpC;AAED,gBAAiB;AAGjB,aAAW,SAAS,OAAO,KAAK,OAAO,GAAG;AACzC,QAAI,EAAE,cAAc,QAAQ,KAAK,IAAI;AACpC,YAAM,IAAI,MAAM,gCAAgC,KAAK;AAAA,IACvD;AAEC,QAAI,EAAE,YAAY,QAAQ,KAAK,IAAI;AAClC,YAAM,IAAI,MAAM,sCAAsC,KAAK;AAAA,IAC7D;AAEC,QAAI,QAAQ,KAAK,EAAE,OAAO,WAAW,QAAQ,KAAK,EAAE,UAAU;AAC7D,YAAM,IAAI,MAAM,wCAAwC,KAAK;AAAA,IAC/D;AAEC,UAAM,EAAC,UAAU,OAAM,IAAI,QAAQ,KAAK;AACxC,WAAO,QAAQ,KAAK,EAAE;AACtB,WAAO,QAAQ,KAAK,EAAE;AACtB,WAAO,eAAe,QAAQ,KAAK,GAAG,YAAY,EAAC,OAAO,SAAQ,CAAC;AACnE,WAAO,eAAe,QAAQ,KAAK,GAAG,UAAU,EAAC,OAAO,OAAM,CAAC;AAAA,EAChE;AAEA,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,UAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,UAAM,QAAQ,MAAM;AACpB,QAAI;AACJ,QAAI;AAEJ,QAAI,QAAQ,KAAK;AAChB,UAAI;AAAA,IACN,WAAY,MAAM,KAAK;AACrB,WAAK,IAAI,KAAK;AAAA,IAChB,WAAY,MAAM,KAAK;AACrB,UAAI,KAAK,IAAI,KAAK;AAAA,IACpB,WAAY,MAAM,KAAK;AACrB,UAAI,KAAK,IAAI,KAAK;AAAA,IACpB;AAEC,QAAI,KAAK,IAAI,IAAI,IAAI,GAAG;AAExB,QAAI,IAAI,GAAG;AACV,WAAK;AAAA,IACP;AAEC,UAAM,KAAK,MAAM,OAAO;AAExB,QAAI,QAAQ,KAAK;AAChB,UAAI;AAAA,IACN,WAAY,KAAK,KAAK;AACpB,UAAI,SAAS,MAAM;AAAA,IACrB,OAAQ;AACN,UAAI,SAAS,IAAI,MAAM;AAAA,IACzB;AAEC,WAAO,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAC3B;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC;AAC1B,UAAM,OAAO,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC;AACjC,UAAM,QAAQ,SAAU,GAAG;AAC1B,cAAQ,IAAI,KAAK,IAAI,OAAO,IAAI;AAAA,IAChC;AAED,QAAI,SAAS,GAAG;AACf,UAAI;AACJ,UAAI;AAAA,IACN,OAAQ;AACN,UAAI,OAAO;AACX,aAAO,MAAM,CAAC;AACd,aAAO,MAAM,CAAC;AACd,aAAO,MAAM,CAAC;AAEd,UAAI,MAAM,GAAG;AACZ,YAAI,OAAO;AAAA,MACd,WAAa,MAAM,GAAG;AACnB,YAAK,IAAI,IAAK,OAAO;AAAA,MACxB,WAAa,MAAM,GAAG;AACnB,YAAK,IAAI,IAAK,OAAO;AAAA,MACxB;AAEE,UAAI,IAAI,GAAG;AACV,aAAK;AAAA,MACR,WAAa,IAAI,GAAG;AACjB,aAAK;AAAA,MACR;AAAA,IACA;AAEC,WAAO;AAAA,MACN,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACJ;AAAA,EACD;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AACf,QAAI,IAAI,IAAI,CAAC;AACb,UAAM,IAAI,QAAQ,IAAI,IAAI,GAAG,EAAE,CAAC;AAChC,UAAM,IAAI,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAE9C,QAAI,IAAI,IAAI,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC;AAE5C,WAAO,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAC3B;AAED,UAAQ,IAAI,OAAO,SAAU,KAAK;AACjC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,UAAM,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACtC,UAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;AACnC,UAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;AACnC,UAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM;AAEnC,WAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,EAC1C;AAED,WAAS,oBAAoB,GAAG,GAAG;AAIlC,YACG,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAChB,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAChB,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM;AAAA,EAEpB;AAEA,UAAQ,IAAI,UAAU,SAAU,KAAK;AACpC,UAAM,WAAW,gBAAgB,GAAG;AACpC,QAAI,UAAU;AACb,aAAO;AAAA,IACT;AAEC,QAAI,yBAAyB;AAC7B,QAAI;AAEJ,eAAW,WAAW,OAAO,KAAK,WAAW,GAAG;AAC/C,YAAM,QAAQ,YAAY,OAAO;AAGjC,YAAM,WAAW,oBAAoB,KAAK,KAAK;AAG/C,UAAI,WAAW,wBAAwB;AACtC,iCAAyB;AACzB,gCAAwB;AAAA,MAC3B;AAAA,IACA;AAEC,WAAO;AAAA,EACP;AAED,UAAQ,QAAQ,MAAM,SAAU,SAAS;AACxC,WAAO,YAAY,OAAO;AAAA,EAC1B;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,QAAI,IAAI,IAAI,CAAC,IAAI;AACjB,QAAI,IAAI,IAAI,CAAC,IAAI;AACjB,QAAI,IAAI,IAAI,CAAC,IAAI;AAGjB,QAAI,IAAI,YAAa,IAAI,SAAS,UAAU,MAAQ,IAAI;AACxD,QAAI,IAAI,YAAa,IAAI,SAAS,UAAU,MAAQ,IAAI;AACxD,QAAI,IAAI,YAAa,IAAI,SAAS,UAAU,MAAQ,IAAI;AAExD,UAAM,IAAK,IAAI,SAAW,IAAI,SAAW,IAAI;AAC7C,UAAM,IAAK,IAAI,SAAW,IAAI,SAAW,IAAI;AAC7C,UAAM,IAAK,IAAI,SAAW,IAAI,SAAW,IAAI;AAE7C,WAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,EACjC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,MAAM,QAAQ,IAAI,IAAI,GAAG;AAC/B,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,IAAI,IAAI,CAAC;AAEb,SAAK;AACL,SAAK;AACL,SAAK;AAEL,QAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,QAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,QAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AAExD,UAAM,IAAK,MAAM,IAAK;AACtB,UAAM,IAAI,OAAO,IAAI;AACrB,UAAM,IAAI,OAAO,IAAI;AAErB,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAI,MAAM,GAAG;AACZ,YAAM,IAAI;AACV,aAAO,CAAC,KAAK,KAAK,GAAG;AAAA,IACvB;AAEC,QAAI,IAAI,KAAK;AACZ,WAAK,KAAK,IAAI;AAAA,IAChB,OAAQ;AACN,WAAK,IAAI,IAAI,IAAI;AAAA,IACnB;AAEC,UAAM,KAAK,IAAI,IAAI;AAEnB,UAAM,MAAM,CAAC,GAAG,GAAG,CAAC;AACpB,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,WAAK,IAAI,IAAI,IAAI,EAAE,IAAI;AACvB,UAAI,KAAK,GAAG;AACX;AAAA,MACH;AAEE,UAAI,KAAK,GAAG;AACX;AAAA,MACH;AAEE,UAAI,IAAI,KAAK,GAAG;AACf,cAAM,MAAM,KAAK,MAAM,IAAI;AAAA,MAC9B,WAAa,IAAI,KAAK,GAAG;AACtB,cAAM;AAAA,MACT,WAAa,IAAI,KAAK,GAAG;AACtB,cAAM,MAAM,KAAK,OAAO,IAAI,IAAI,MAAM;AAAA,MACzC,OAAS;AACN,cAAM;AAAA,MACT;AAEE,UAAI,CAAC,IAAI,MAAM;AAAA,IACjB;AAEC,WAAO;AAAA,EACP;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC;AACf,QAAI,IAAI,IAAI,CAAC,IAAI;AACjB,QAAI,IAAI,IAAI,CAAC,IAAI;AACjB,QAAI,OAAO;AACX,UAAM,OAAO,KAAK,IAAI,GAAG,IAAI;AAE7B,SAAK;AACL,SAAM,KAAK,IAAK,IAAI,IAAI;AACxB,YAAQ,QAAQ,IAAI,OAAO,IAAI;AAC/B,UAAM,KAAK,IAAI,KAAK;AACpB,UAAM,KAAK,MAAM,IAAK,IAAI,QAAS,OAAO,QAAS,IAAI,KAAM,IAAI;AAEjE,WAAO,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG;AAAA,EAC5B;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,QAAI,IAAI,IAAI,CAAC,IAAI;AACjB,UAAM,KAAK,KAAK,MAAM,CAAC,IAAI;AAE3B,UAAM,IAAI,IAAI,KAAK,MAAM,CAAC;AAC1B,UAAM,IAAI,MAAM,KAAK,IAAI;AACzB,UAAM,IAAI,MAAM,KAAK,IAAK,IAAI;AAC9B,UAAM,IAAI,MAAM,KAAK,IAAK,KAAK,IAAI;AACnC,SAAK;AAEL,YAAQ,IAAE;AAAA,MACT,KAAK;AACJ,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MAChB,KAAK;AACJ,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MAChB,KAAK;AACJ,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MAChB,KAAK;AACJ,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MAChB,KAAK;AACJ,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,MAChB,KAAK;AACJ,eAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IAClB;AAAA,EACC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,OAAO,KAAK,IAAI,GAAG,IAAI;AAC7B,QAAI;AACJ,QAAI;AAEJ,SAAK,IAAI,KAAK;AACd,UAAM,QAAQ,IAAI,KAAK;AACvB,SAAK,IAAI;AACT,UAAO,QAAQ,IAAK,OAAO,IAAI;AAC/B,SAAK,MAAM;AACX,SAAK;AAEL,WAAO,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG;AAAA,EAC5B;AAGD,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,QAAI,KAAK,IAAI,CAAC,IAAI;AAClB,QAAI,KAAK,IAAI,CAAC,IAAI;AAClB,UAAM,QAAQ,KAAK;AACnB,QAAI;AAGJ,QAAI,QAAQ,GAAG;AACd,YAAM;AACN,YAAM;AAAA,IACR;AAEC,UAAM,IAAI,KAAK,MAAM,IAAI,CAAC;AAC1B,UAAM,IAAI,IAAI;AACd,QAAI,IAAI,IAAI;AAEZ,SAAK,IAAI,OAAU,GAAG;AACrB,UAAI,IAAI;AAAA,IACV;AAEC,UAAM,IAAI,KAAK,KAAK,IAAI;AAExB,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,YAAQ,GAAC;AAAA,MACR;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAG,YAAI;AAAI,YAAI;AAAI,YAAI;AAAI;AAAA,MAChC,KAAK;AAAG,YAAI;AAAI,YAAI;AAAI,YAAI;AAAI;AAAA,MAChC,KAAK;AAAG,YAAI;AAAI,YAAI;AAAI,YAAI;AAAG;AAAA,MAC/B,KAAK;AAAG,YAAI;AAAI,YAAI;AAAI,YAAI;AAAG;AAAA,MAC/B,KAAK;AAAG,YAAI;AAAI,YAAI;AAAI,YAAI;AAAG;AAAA,MAC/B,KAAK;AAAG,YAAI;AAAI,YAAI;AAAI,YAAI;AAAG;AAAA,IACjC;AAGC,WAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,EACjC;AAED,UAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,UAAM,IAAI,KAAK,CAAC,IAAI;AACpB,UAAM,IAAI,KAAK,CAAC,IAAI;AACpB,UAAM,IAAI,KAAK,CAAC,IAAI;AACpB,UAAM,IAAI,KAAK,CAAC,IAAI;AAEpB,UAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;AACzC,UAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;AACzC,UAAM,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;AAEzC,WAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,EACjC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,QAAK,IAAI,SAAW,IAAI,UAAY,IAAI;AACxC,QAAK,IAAI,UAAY,IAAI,SAAW,IAAI;AACxC,QAAK,IAAI,SAAW,IAAI,SAAY,IAAI;AAGxC,QAAI,IAAI,WACH,QAAS,MAAM,IAAM,OAAS,QAChC,IAAI;AAEP,QAAI,IAAI,WACH,QAAS,MAAM,IAAM,OAAS,QAChC,IAAI;AAEP,QAAI,IAAI,WACH,QAAS,MAAM,IAAM,OAAS,QAChC,IAAI;AAEP,QAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAC9B,QAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAC9B,QAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AAE9B,WAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,EACjC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,IAAI,IAAI,CAAC;AACb,QAAI,IAAI,IAAI,CAAC;AAEb,SAAK;AACL,SAAK;AACL,SAAK;AAEL,QAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,QAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AACxD,QAAI,IAAI,UAAY,MAAM,IAAI,KAAO,QAAQ,IAAM,KAAK;AAExD,UAAM,IAAK,MAAM,IAAK;AACtB,UAAM,IAAI,OAAO,IAAI;AACrB,UAAM,IAAI,OAAO,IAAI;AAErB,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AACf,QAAI;AACJ,QAAI;AACJ,QAAI;AAEJ,SAAK,IAAI,MAAM;AACf,QAAI,IAAI,MAAM;AACd,QAAI,IAAI,IAAI;AAEZ,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,UAAM,KAAK,KAAK;AAChB,QAAI,KAAK,UAAW,MAAM,IAAI,KAAK,OAAO;AAC1C,QAAI,KAAK,UAAW,MAAM,IAAI,KAAK,OAAO;AAC1C,QAAI,KAAK,UAAW,MAAM,IAAI,KAAK,OAAO;AAE1C,SAAK;AACL,SAAK;AACL,SAAK;AAEL,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AACf,QAAI;AAEJ,UAAM,KAAK,KAAK,MAAM,GAAG,CAAC;AAC1B,QAAI,KAAK,MAAM,IAAI,KAAK;AAExB,QAAI,IAAI,GAAG;AACV,WAAK;AAAA,IACP;AAEC,UAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC;AAEjC,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AACf,UAAM,IAAI,IAAI,CAAC;AAEf,UAAM,KAAK,IAAI,MAAM,IAAI,KAAK;AAC9B,UAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,UAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AAEzB,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,SAAS,SAAU,MAAM,aAAa,MAAM;AACvD,UAAM,CAAC,GAAG,GAAG,CAAC,IAAI;AAClB,QAAI,QAAQ,eAAe,OAAO,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI;AAE7D,YAAQ,KAAK,MAAM,QAAQ,EAAE;AAE7B,QAAI,UAAU,GAAG;AAChB,aAAO;AAAA,IACT;AAEC,QAAI,OAAO,MACN,KAAK,MAAM,IAAI,GAAG,KAAK,IACxB,KAAK,MAAM,IAAI,GAAG,KAAK,IACxB,KAAK,MAAM,IAAI,GAAG;AAErB,QAAI,UAAU,GAAG;AAChB,cAAQ;AAAA,IACV;AAEC,WAAO;AAAA,EACP;AAED,UAAQ,IAAI,SAAS,SAAU,MAAM;AAGpC,WAAO,QAAQ,IAAI,OAAO,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;AAAA,EACxD;AAED,UAAQ,IAAI,UAAU,SAAU,MAAM;AACrC,UAAM,IAAI,KAAK,CAAC;AAChB,UAAM,IAAI,KAAK,CAAC;AAChB,UAAM,IAAI,KAAK,CAAC;AAIhB,QAAI,MAAM,KAAK,MAAM,GAAG;AACvB,UAAI,IAAI,GAAG;AACV,eAAO;AAAA,MACV;AAEE,UAAI,IAAI,KAAK;AACZ,eAAO;AAAA,MACV;AAEE,aAAO,KAAK,OAAQ,IAAI,KAAK,MAAO,EAAE,IAAI;AAAA,IAC5C;AAEC,UAAM,OAAO,KACT,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,IAC3B,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAC3B,KAAK,MAAM,IAAI,MAAM,CAAC;AAEzB,WAAO;AAAA,EACP;AAED,UAAQ,OAAO,MAAM,SAAU,MAAM;AACpC,QAAI,QAAQ,OAAO;AAGnB,QAAI,UAAU,KAAK,UAAU,GAAG;AAC/B,UAAI,OAAO,IAAI;AACd,iBAAS;AAAA,MACZ;AAEE,cAAQ,QAAQ,OAAO;AAEvB,aAAO,CAAC,OAAO,OAAO,KAAK;AAAA,IAC7B;AAEC,UAAM,QAAQ,CAAC,EAAE,OAAO,MAAM,KAAK;AACnC,UAAM,KAAM,QAAQ,KAAK,OAAQ;AACjC,UAAM,KAAO,SAAS,IAAK,KAAK,OAAQ;AACxC,UAAM,KAAO,SAAS,IAAK,KAAK,OAAQ;AAExC,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,QAAQ,MAAM,SAAU,MAAM;AAErC,QAAI,QAAQ,KAAK;AAChB,YAAM,KAAK,OAAO,OAAO,KAAK;AAC9B,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAEC,YAAQ;AAER,QAAI;AACJ,UAAM,IAAI,KAAK,MAAM,OAAO,EAAE,IAAI,IAAI;AACtC,UAAM,IAAI,KAAK,OAAO,MAAM,OAAO,MAAM,CAAC,IAAI,IAAI;AAClD,UAAM,IAAK,MAAM,IAAK,IAAI;AAE1B,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,MAAM,SAAU,MAAM;AACjC,UAAM,YAAY,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,QAAS,QAC5C,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,QAAS,MAChC,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI;AAE1B,UAAM,SAAS,QAAQ,SAAS,EAAE,EAAE,YAAa;AACjD,WAAO,SAAS,UAAU,OAAO,MAAM,IAAI;AAAA,EAC3C;AAED,UAAQ,IAAI,MAAM,SAAU,MAAM;AACjC,UAAM,QAAQ,KAAK,SAAS,EAAE,EAAE,MAAM,0BAA0B;AAChE,QAAI,CAAC,OAAO;AACX,aAAO,CAAC,GAAG,GAAG,CAAC;AAAA,IACjB;AAEC,QAAI,cAAc,MAAM,CAAC;AAEzB,QAAI,MAAM,CAAC,EAAE,WAAW,GAAG;AAC1B,oBAAc,YAAY,MAAM,EAAE,EAAE,IAAI,UAAQ;AAC/C,eAAO,OAAO;AAAA,MACjB,CAAG,EAAE,KAAK,EAAE;AAAA,IACZ;AAEC,UAAM,UAAU,SAAS,aAAa,EAAE;AACxC,UAAM,IAAK,WAAW,KAAM;AAC5B,UAAM,IAAK,WAAW,IAAK;AAC3B,UAAM,IAAI,UAAU;AAEpB,WAAO,CAAC,GAAG,GAAG,CAAC;AAAA,EACf;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AACtC,UAAM,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;AACtC,UAAM,SAAU,MAAM;AACtB,QAAI;AACJ,QAAI;AAEJ,QAAI,SAAS,GAAG;AACf,kBAAY,OAAO,IAAI;AAAA,IACzB,OAAQ;AACN,kBAAY;AAAA,IACd;AAEC,QAAI,UAAU,GAAG;AAChB,YAAM;AAAA,IACN,WACG,QAAQ,GAAG;AACd,aAAQ,IAAI,KAAK,SAAU;AAAA,IAC3B,WACG,QAAQ,GAAG;AACd,YAAM,KAAK,IAAI,KAAK;AAAA,IACtB,OAAQ;AACN,YAAM,KAAK,IAAI,KAAK;AAAA,IACtB;AAEC,WAAO;AACP,WAAO;AAEP,WAAO,CAAC,MAAM,KAAK,SAAS,KAAK,YAAY,GAAG;AAAA,EAChD;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,UAAM,IAAI,IAAI,MAAO,IAAM,IAAI,IAAM,IAAM,KAAK,IAAM;AAEtD,QAAI,IAAI;AACR,QAAI,IAAI,GAAK;AACZ,WAAK,IAAI,MAAM,MAAM,IAAM;AAAA,IAC7B;AAEC,WAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAChC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,UAAM,IAAI,IAAI;AACd,QAAI,IAAI;AAER,QAAI,IAAI,GAAK;AACZ,WAAK,IAAI,MAAM,IAAI;AAAA,IACrB;AAEC,WAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAChC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,QAAI,MAAM,GAAK;AACd,aAAO,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA,IACnC;AAEC,UAAM,OAAO,CAAC,GAAG,GAAG,CAAC;AACrB,UAAM,KAAM,IAAI,IAAK;AACrB,UAAM,IAAI,KAAK;AACf,UAAM,IAAI,IAAI;AACd,QAAI,KAAK;AAGT,YAAQ,KAAK,MAAM,EAAE,GAAC;AAAA,MACrB,KAAK;AACJ,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG;AAAA,MACxC,KAAK;AACJ,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG;AAAA,MACxC,KAAK;AACJ,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG;AAAA,MACxC,KAAK;AACJ,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG;AAAA,MACxC,KAAK;AACJ,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG;AAAA,MACxC;AACC,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAG,aAAK,CAAC,IAAI;AAAA,IACvC;AAGC,UAAM,IAAM,KAAK;AAEjB,WAAO;AAAA,OACL,IAAI,KAAK,CAAC,IAAI,MAAM;AAAA,OACpB,IAAI,KAAK,CAAC,IAAI,MAAM;AAAA,OACpB,IAAI,KAAK,CAAC,IAAI,MAAM;AAAA,IACrB;AAAA,EACD;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,UAAM,IAAI,IAAI,KAAK,IAAM;AACzB,QAAI,IAAI;AAER,QAAI,IAAI,GAAK;AACZ,UAAI,IAAI;AAAA,IACV;AAEC,WAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAChC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AAEnB,UAAM,IAAI,KAAK,IAAM,KAAK,MAAM;AAChC,QAAI,IAAI;AAER,QAAI,IAAI,KAAO,IAAI,KAAK;AACvB,UAAI,KAAK,IAAI;AAAA,IACb,WACG,KAAK,OAAO,IAAI,GAAK;AACxB,UAAI,KAAK,KAAK,IAAI;AAAA,IACpB;AAEC,WAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAChC;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,KAAK,IAAM;AACzB,WAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,GAAG;AAAA,EAC5C;AAED,UAAQ,IAAI,MAAM,SAAU,KAAK;AAChC,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI,CAAC,IAAI;AACnB,UAAM,IAAI,IAAI;AACd,UAAM,IAAI,IAAI;AACd,QAAI,IAAI;AAER,QAAI,IAAI,GAAG;AACV,WAAK,IAAI,MAAM,IAAI;AAAA,IACrB;AAEC,WAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG;AAAA,EAChC;AAED,UAAQ,MAAM,MAAM,SAAU,OAAO;AACpC,WAAO,CAAE,MAAM,CAAC,IAAI,QAAS,KAAM,MAAM,CAAC,IAAI,QAAS,KAAM,MAAM,CAAC,IAAI,QAAS,GAAG;AAAA,EACpF;AAED,UAAQ,IAAI,QAAQ,SAAU,KAAK;AAClC,WAAO,CAAE,IAAI,CAAC,IAAI,MAAO,OAAQ,IAAI,CAAC,IAAI,MAAO,OAAQ,IAAI,CAAC,IAAI,MAAO,KAAK;AAAA,EAC9E;AAED,UAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,WAAO,CAAC,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,MAAM,GAAG;AAAA,EACrE;AAED,UAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,WAAO,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA,EACrB;AAED,UAAQ,KAAK,MAAM,QAAQ,KAAK;AAEhC,UAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,WAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACvB;AAED,UAAQ,KAAK,OAAO,SAAU,MAAM;AACnC,WAAO,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA,EACxB;AAED,UAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,WAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAAA,EACrB;AAED,UAAQ,KAAK,MAAM,SAAU,MAAM;AAClC,UAAM,MAAM,KAAK,MAAM,KAAK,CAAC,IAAI,MAAM,GAAG,IAAI;AAC9C,UAAM,WAAW,OAAO,OAAO,OAAO,KAAK;AAE3C,UAAM,SAAS,QAAQ,SAAS,EAAE,EAAE,YAAa;AACjD,WAAO,SAAS,UAAU,OAAO,MAAM,IAAI;AAAA,EAC3C;AAED,UAAQ,IAAI,OAAO,SAAU,KAAK;AACjC,UAAM,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;AACzC,WAAO,CAAC,MAAM,MAAM,GAAG;AAAA,EACvB;;;;;;;;ACt0BD,QAAMC,eAAcD,mBAAwB;AAa5C,WAAS,aAAa;AACrB,UAAM,QAAQ,CAAE;AAEhB,UAAM,SAAS,OAAO,KAAKC,YAAW;AAEtC,aAAS,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAClD,YAAM,OAAO,CAAC,CAAC,IAAI;AAAA;AAAA;AAAA,QAGlB,UAAU;AAAA,QACV,QAAQ;AAAA,MACR;AAAA,IACH;AAEC,WAAO;AAAA,EACR;AAGA,WAAS,UAAU,WAAW;AAC7B,UAAM,QAAQ,WAAY;AAC1B,UAAM,QAAQ,CAAC,SAAS;AAExB,UAAM,SAAS,EAAE,WAAW;AAE5B,WAAO,MAAM,QAAQ;AACpB,YAAM,UAAU,MAAM,IAAK;AAC3B,YAAM,YAAY,OAAO,KAAKA,aAAY,OAAO,CAAC;AAElD,eAAS,MAAM,UAAU,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AACrD,cAAM,WAAW,UAAU,CAAC;AAC5B,cAAM,OAAO,MAAM,QAAQ;AAE3B,YAAI,KAAK,aAAa,IAAI;AACzB,eAAK,WAAW,MAAM,OAAO,EAAE,WAAW;AAC1C,eAAK,SAAS;AACd,gBAAM,QAAQ,QAAQ;AAAA,QAC1B;AAAA,MACA;AAAA,IACA;AAEC,WAAO;AAAA,EACR;AAEA,WAAS,KAAK,MAAM,IAAI;AACvB,WAAO,SAAU,MAAM;AACtB,aAAO,GAAG,KAAK,IAAI,CAAC;AAAA,IACpB;AAAA,EACF;AAEA,WAAS,eAAe,SAAS,OAAO;AACvC,UAAM,OAAO,CAAC,MAAM,OAAO,EAAE,QAAQ,OAAO;AAC5C,QAAI,KAAKA,aAAY,MAAM,OAAO,EAAE,MAAM,EAAE,OAAO;AAEnD,QAAI,MAAM,MAAM,OAAO,EAAE;AACzB,WAAO,MAAM,GAAG,EAAE,QAAQ;AACzB,WAAK,QAAQ,MAAM,GAAG,EAAE,MAAM;AAC9B,WAAK,KAAKA,aAAY,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE;AACjD,YAAM,MAAM,GAAG,EAAE;AAAA,IACnB;AAEC,OAAG,aAAa;AAChB,WAAO;AAAA,EACR;AAEc,UAAG,SAAU,WAAW;AACrC,UAAM,QAAQ,UAAU,SAAS;AACjC,UAAM,aAAa,CAAE;AAErB,UAAM,SAAS,OAAO,KAAK,KAAK;AAChC,aAAS,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAClD,YAAM,UAAU,OAAO,CAAC;AACxB,YAAM,OAAO,MAAM,OAAO;AAE1B,UAAI,KAAK,WAAW,MAAM;AAEzB;AAAA,MACH;AAEE,iBAAW,OAAO,IAAI,eAAe,SAAS,KAAK;AAAA,IACrD;AAEC,WAAO;AAAA,EACP;;;;;;;;AC/FD,QAAMA,eAAcD,mBAAwB;AAC5C,QAAME,SAAQC,aAAkB;AAEhC,QAAM,UAAU,CAAE;AAElB,QAAM,SAAS,OAAO,KAAKF,YAAW;AAEtC,WAAS,QAAQ,IAAI;AACpB,UAAM,YAAY,YAAa,MAAM;AACpC,YAAM,OAAO,KAAK,CAAC;AACnB,UAAI,SAAS,UAAa,SAAS,MAAM;AACxC,eAAO;AAAA,MACV;AAEE,UAAI,KAAK,SAAS,GAAG;AACpB,eAAO;AAAA,MACV;AAEE,aAAO,GAAG,IAAI;AAAA,IACd;AAGD,QAAI,gBAAgB,IAAI;AACvB,gBAAU,aAAa,GAAG;AAAA,IAC5B;AAEC,WAAO;AAAA,EACR;AAEA,WAAS,YAAY,IAAI;AACxB,UAAM,YAAY,YAAa,MAAM;AACpC,YAAM,OAAO,KAAK,CAAC;AAEnB,UAAI,SAAS,UAAa,SAAS,MAAM;AACxC,eAAO;AAAA,MACV;AAEE,UAAI,KAAK,SAAS,GAAG;AACpB,eAAO;AAAA,MACV;AAEE,YAAM,SAAS,GAAG,IAAI;AAKtB,UAAI,OAAO,WAAW,UAAU;AAC/B,iBAAS,MAAM,OAAO,QAAQ,IAAI,GAAG,IAAI,KAAK,KAAK;AAClD,iBAAO,CAAC,IAAI,KAAK,MAAM,OAAO,CAAC,CAAC;AAAA,QACpC;AAAA,MACA;AAEE,aAAO;AAAA,IACP;AAGD,QAAI,gBAAgB,IAAI;AACvB,gBAAU,aAAa,GAAG;AAAA,IAC5B;AAEC,WAAO;AAAA,EACR;AAEA,SAAO,QAAQ,eAAa;AAC3B,YAAQ,SAAS,IAAI,CAAE;AAEvB,WAAO,eAAe,QAAQ,SAAS,GAAG,YAAY,EAAC,OAAOA,aAAY,SAAS,EAAE,SAAQ,CAAC;AAC9F,WAAO,eAAe,QAAQ,SAAS,GAAG,UAAU,EAAC,OAAOA,aAAY,SAAS,EAAE,OAAM,CAAC;AAE1F,UAAM,SAASC,OAAM,SAAS;AAC9B,UAAM,cAAc,OAAO,KAAK,MAAM;AAEtC,gBAAY,QAAQ,aAAW;AAC9B,YAAM,KAAK,OAAO,OAAO;AAEzB,cAAQ,SAAS,EAAE,OAAO,IAAI,YAAY,EAAE;AAC5C,cAAQ,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,EAAE;AAAA,IAC9C,CAAE;AAAA,EACF,CAAC;AAED,iBAAiB;;;;;;;;;AC9EjB,UAAM,aAAa,CAAC,IAAI,WAAW,IAAI,SAAS;AAC/C,YAAM,OAAO,GAAG,GAAG,IAAI;AACvB,aAAO,QAAU,OAAO,MAAM;AAAA,IAC9B;AAED,UAAM,cAAc,CAAC,IAAI,WAAW,IAAI,SAAS;AAChD,YAAM,OAAO,GAAG,GAAG,IAAI;AACvB,aAAO,QAAU,KAAK,MAAM,MAAM,IAAI;AAAA,IACtC;AAED,UAAM,cAAc,CAAC,IAAI,WAAW,IAAI,SAAS;AAChD,YAAM,MAAM,GAAG,GAAG,IAAI;AACtB,aAAO,QAAU,KAAK,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AAAA,IAC5D;AAED,UAAM,YAAY,OAAK;AACvB,UAAM,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC;AAErC,UAAM,kBAAkB,CAAC,QAAQ,UAAU,QAAQ;AAClD,aAAO,eAAe,QAAQ,UAAU;AAAA,QACvC,KAAK,MAAM;AACV,gBAAM,QAAQ,IAAK;AAEnB,iBAAO,eAAe,QAAQ,UAAU;AAAA,YACvC;AAAA,YACA,YAAY;AAAA,YACZ,cAAc;AAAA,UAClB,CAAI;AAED,iBAAO;AAAA,QACP;AAAA,QACD,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAE;AAAA,IACD;AAGD,QAAIE;AACJ,UAAM,oBAAoB,CAAC,MAAM,aAAa,UAAU,iBAAiB;AACxE,UAAIA,kBAAiB,QAAW;AAC/B,QAAAA,gBAAeJ,oBAAwB;AAAA,MACzC;AAEC,YAAM,SAAS,eAAe,KAAK;AACnC,YAAM,SAAS,CAAE;AAEjB,iBAAW,CAAC,aAAa,KAAK,KAAK,OAAO,QAAQI,aAAY,GAAG;AAChE,cAAM,OAAO,gBAAgB,WAAW,SAAS;AACjD,YAAI,gBAAgB,aAAa;AAChC,iBAAO,IAAI,IAAI,KAAK,UAAU,MAAM;AAAA,QACvC,WAAa,OAAO,UAAU,UAAU;AACrC,iBAAO,IAAI,IAAI,KAAK,MAAM,WAAW,GAAG,MAAM;AAAA,QACjD;AAAA,MACA;AAEC,aAAO;AAAA,IACP;AAED,aAAS,iBAAiB;AACzB,YAAM,QAAQ,oBAAI,IAAK;AACvB,YAAM,SAAS;AAAA,QACd,UAAU;AAAA,UACT,OAAO,CAAC,GAAG,CAAC;AAAA;AAAA,UAEZ,MAAM,CAAC,GAAG,EAAE;AAAA,UACZ,KAAK,CAAC,GAAG,EAAE;AAAA,UACX,QAAQ,CAAC,GAAG,EAAE;AAAA,UACd,WAAW,CAAC,GAAG,EAAE;AAAA,UACjB,SAAS,CAAC,GAAG,EAAE;AAAA,UACf,QAAQ,CAAC,GAAG,EAAE;AAAA,UACd,eAAe,CAAC,GAAG,EAAE;AAAA,QACrB;AAAA,QACD,OAAO;AAAA,UACN,OAAO,CAAC,IAAI,EAAE;AAAA,UACd,KAAK,CAAC,IAAI,EAAE;AAAA,UACZ,OAAO,CAAC,IAAI,EAAE;AAAA,UACd,QAAQ,CAAC,IAAI,EAAE;AAAA,UACf,MAAM,CAAC,IAAI,EAAE;AAAA,UACb,SAAS,CAAC,IAAI,EAAE;AAAA,UAChB,MAAM,CAAC,IAAI,EAAE;AAAA,UACb,OAAO,CAAC,IAAI,EAAE;AAAA;AAAA,UAGd,aAAa,CAAC,IAAI,EAAE;AAAA,UACpB,WAAW,CAAC,IAAI,EAAE;AAAA,UAClB,aAAa,CAAC,IAAI,EAAE;AAAA,UACpB,cAAc,CAAC,IAAI,EAAE;AAAA,UACrB,YAAY,CAAC,IAAI,EAAE;AAAA,UACnB,eAAe,CAAC,IAAI,EAAE;AAAA,UACtB,YAAY,CAAC,IAAI,EAAE;AAAA,UACnB,aAAa,CAAC,IAAI,EAAE;AAAA,QACpB;AAAA,QACD,SAAS;AAAA,UACR,SAAS,CAAC,IAAI,EAAE;AAAA,UAChB,OAAO,CAAC,IAAI,EAAE;AAAA,UACd,SAAS,CAAC,IAAI,EAAE;AAAA,UAChB,UAAU,CAAC,IAAI,EAAE;AAAA,UACjB,QAAQ,CAAC,IAAI,EAAE;AAAA,UACf,WAAW,CAAC,IAAI,EAAE;AAAA,UAClB,QAAQ,CAAC,IAAI,EAAE;AAAA,UACf,SAAS,CAAC,IAAI,EAAE;AAAA;AAAA,UAGhB,eAAe,CAAC,KAAK,EAAE;AAAA,UACvB,aAAa,CAAC,KAAK,EAAE;AAAA,UACrB,eAAe,CAAC,KAAK,EAAE;AAAA,UACvB,gBAAgB,CAAC,KAAK,EAAE;AAAA,UACxB,cAAc,CAAC,KAAK,EAAE;AAAA,UACtB,iBAAiB,CAAC,KAAK,EAAE;AAAA,UACzB,cAAc,CAAC,KAAK,EAAE;AAAA,UACtB,eAAe,CAAC,KAAK,EAAE;AAAA,QAC1B;AAAA,MACE;AAGD,aAAO,MAAM,OAAO,OAAO,MAAM;AACjC,aAAO,QAAQ,SAAS,OAAO,QAAQ;AACvC,aAAO,MAAM,OAAO,OAAO,MAAM;AACjC,aAAO,QAAQ,SAAS,OAAO,QAAQ;AAEvC,iBAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACxD,mBAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AACvD,iBAAO,SAAS,IAAI;AAAA,YACnB,MAAM,QAAU,MAAM,CAAC,CAAC;AAAA,YACxB,OAAO,QAAU,MAAM,CAAC,CAAC;AAAA,UACzB;AAED,gBAAM,SAAS,IAAI,OAAO,SAAS;AAEnC,gBAAM,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,QAC/B;AAEE,eAAO,eAAe,QAAQ,WAAW;AAAA,UACxC,OAAO;AAAA,UACP,YAAY;AAAA,QACf,CAAG;AAAA,MACH;AAEC,aAAO,eAAe,QAAQ,SAAS;AAAA,QACtC,OAAO;AAAA,QACP,YAAY;AAAA,MACd,CAAE;AAED,aAAO,MAAM,QAAQ;AACrB,aAAO,QAAQ,QAAQ;AAEvB,sBAAgB,OAAO,OAAO,QAAQ,MAAM,kBAAkB,YAAY,UAAU,WAAW,KAAK,CAAC;AACrG,sBAAgB,OAAO,OAAO,WAAW,MAAM,kBAAkB,aAAa,WAAW,WAAW,KAAK,CAAC;AAC1G,sBAAgB,OAAO,OAAO,WAAW,MAAM,kBAAkB,aAAa,OAAO,SAAS,KAAK,CAAC;AACpG,sBAAgB,OAAO,SAAS,QAAQ,MAAM,kBAAkB,YAAY,UAAU,WAAW,IAAI,CAAC;AACtG,sBAAgB,OAAO,SAAS,WAAW,MAAM,kBAAkB,aAAa,WAAW,WAAW,IAAI,CAAC;AAC3G,sBAAgB,OAAO,SAAS,WAAW,MAAM,kBAAkB,aAAa,OAAO,SAAS,IAAI,CAAC;AAErG,aAAO;AAAA,IACR;AAGA,WAAO,eAAe,QAAQ,WAAW;AAAA,MACxC,YAAY;AAAA,MACZ,KAAK;AAAA,IACN,CAAC;AAAA;;;;;;;;ACjKD,YAAiB;AAAA,IAChB,QAAQ;AAAA,IACR,QAAQ;AAAA,EACR;;;;;;;;ACFD,QAAM,mBAAmB,CAAC,QAAQ,WAAW,aAAa;AACzD,QAAI,QAAQ,OAAO,QAAQ,SAAS;AACpC,QAAI,UAAU,IAAI;AACjB,aAAO;AAAA,IACT;AAEC,UAAM,kBAAkB,UAAU;AAClC,QAAI,WAAW;AACf,QAAI,cAAc;AAClB,OAAG;AACF,qBAAe,OAAO,OAAO,UAAU,QAAQ,QAAQ,IAAI,YAAY;AACvE,iBAAW,QAAQ;AACnB,cAAQ,OAAO,QAAQ,WAAW,QAAQ;AAAA,IAC1C,SAAQ,UAAU;AAEnB,mBAAe,OAAO,OAAO,QAAQ;AACrC,WAAO;AAAA,EACP;AAED,QAAM,iCAAiC,CAAC,QAAQ,QAAQ,SAAS,UAAU;AAC1E,QAAI,WAAW;AACf,QAAI,cAAc;AAClB,OAAG;AACF,YAAM,QAAQ,OAAO,QAAQ,CAAC,MAAM;AACpC,qBAAe,OAAO,OAAO,WAAW,QAAQ,QAAQ,IAAI,SAAS,QAAQ,IAAI,UAAU,QAAQ,SAAS,QAAQ;AACpH,iBAAW,QAAQ;AACnB,cAAQ,OAAO,QAAQ,MAAM,QAAQ;AAAA,IACrC,SAAQ,UAAU;AAEnB,mBAAe,OAAO,OAAO,QAAQ;AACrC,WAAO;AAAA,EACP;AAED,SAAiB;AAAA,IAChB;AAAA,IACA;AAAA,EACA;;;;;;;;ACrCD,QAAM,iBAAiB;AACvB,QAAM,cAAc;AACpB,QAAM,eAAe;AACrB,QAAM,eAAe;AAErB,QAAM,UAAU,oBAAI,IAAI;AAAA,IACvB,CAAC,KAAK,IAAI;AAAA,IACV,CAAC,KAAK,IAAI;AAAA,IACV,CAAC,KAAK,GAAI;AAAA,IACV,CAAC,KAAK,IAAI;AAAA,IACV,CAAC,KAAK,IAAI;AAAA,IACV,CAAC,KAAK,IAAI;AAAA,IACV,CAAC,KAAK,IAAI;AAAA,IACV,CAAC,MAAM,IAAI;AAAA,IACX,CAAC,KAAK,MAAQ;AAAA,IACd,CAAC,KAAK,MAAQ;AAAA,EACf,CAAC;AAED,WAAS,SAAS,GAAG;AACpB,UAAM,IAAI,EAAE,CAAC,MAAM;AACnB,UAAM,UAAU,EAAE,CAAC,MAAM;AAEzB,QAAK,KAAK,CAAC,WAAW,EAAE,WAAW,KAAO,EAAE,CAAC,MAAM,OAAO,EAAE,WAAW,GAAI;AAC1E,aAAO,OAAO,aAAa,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;AAAA,IACrD;AAEC,QAAI,KAAK,SAAS;AACjB,aAAO,OAAO,cAAc,SAAS,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;AAAA,IAC1D;AAEC,WAAO,QAAQ,IAAI,CAAC,KAAK;AAAA,EAC1B;AAEA,WAAS,eAAe,MAAM,YAAY;AACzC,UAAM,UAAU,CAAE;AAClB,UAAM,SAAS,WAAW,KAAI,EAAG,MAAM,UAAU;AACjD,QAAI;AAEJ,eAAW,SAAS,QAAQ;AAC3B,YAAM,SAAS,OAAO,KAAK;AAC3B,UAAI,CAAC,OAAO,MAAM,MAAM,GAAG;AAC1B,gBAAQ,KAAK,MAAM;AAAA,MACnB,WAAW,UAAU,MAAM,MAAM,YAAY,GAAI;AACjD,gBAAQ,KAAK,QAAQ,CAAC,EAAE,QAAQ,cAAc,CAAC,GAAG,QAAQ,cAAc,SAAS,SAAS,MAAM,IAAI,SAAS,CAAC;AAAA,MACjH,OAAS;AACN,cAAM,IAAI,MAAM,0CAA0C,KAAK,eAAe,IAAI,IAAI;AAAA,MACzF;AAAA,IACA;AAEC,WAAO;AAAA,EACR;AAEA,WAAS,WAAW,OAAO;AAC1B,gBAAY,YAAY;AAExB,UAAM,UAAU,CAAE;AAClB,QAAI;AAEJ,YAAQ,UAAU,YAAY,KAAK,KAAK,OAAO,MAAM;AACpD,YAAM,OAAO,QAAQ,CAAC;AAEtB,UAAI,QAAQ,CAAC,GAAG;AACf,cAAM,OAAO,eAAe,MAAM,QAAQ,CAAC,CAAC;AAC5C,gBAAQ,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MACnC,OAAS;AACN,gBAAQ,KAAK,CAAC,IAAI,CAAC;AAAA,MACtB;AAAA,IACA;AAEC,WAAO;AAAA,EACR;AAEA,WAAS,WAAWC,QAAO,QAAQ;AAClC,UAAM,UAAU,CAAE;AAElB,eAAW,SAAS,QAAQ;AAC3B,iBAAW,SAAS,MAAM,QAAQ;AACjC,gBAAQ,MAAM,CAAC,CAAC,IAAI,MAAM,UAAU,OAAO,MAAM,MAAM,CAAC;AAAA,MAC3D;AAAA,IACA;AAEC,QAAI,UAAUA;AACd,eAAW,CAAC,WAAWC,OAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC1D,UAAI,CAAC,MAAM,QAAQA,OAAM,GAAG;AAC3B;AAAA,MACH;AAEE,UAAI,EAAE,aAAa,UAAU;AAC5B,cAAM,IAAI,MAAM,wBAAwB,SAAS,EAAE;AAAA,MACtD;AAEE,gBAAUA,QAAO,SAAS,IAAI,QAAQ,SAAS,EAAE,GAAGA,OAAM,IAAI,QAAQ,SAAS;AAAA,IACjF;AAEC,WAAO;AAAA,EACR;AAEA,cAAiB,CAACD,QAAO,cAAc;AACtC,UAAM,SAAS,CAAE;AACjB,UAAM,SAAS,CAAE;AACjB,QAAI,QAAQ,CAAE;AAGd,cAAU,QAAQ,gBAAgB,CAAC,GAAG,iBAAiB,SAAS,OAAO,OAAO,cAAc;AAC3F,UAAI,iBAAiB;AACpB,cAAM,KAAK,SAAS,eAAe,CAAC;AAAA,MACpC,WAAU,OAAO;AACjB,cAAM,SAAS,MAAM,KAAK,EAAE;AAC5B,gBAAQ,CAAE;AACV,eAAO,KAAK,OAAO,WAAW,IAAI,SAAS,WAAWA,QAAO,MAAM,EAAE,MAAM,CAAC;AAC5E,eAAO,KAAK,EAAC,SAAS,QAAQ,WAAW,KAAK,EAAC,CAAC;AAAA,MAChD,WAAU,OAAO;AACjB,YAAI,OAAO,WAAW,GAAG;AACxB,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QAClE;AAEG,eAAO,KAAK,WAAWA,QAAO,MAAM,EAAE,MAAM,KAAK,EAAE,CAAC,CAAC;AACrD,gBAAQ,CAAE;AACV,eAAO,IAAK;AAAA,MACf,OAAS;AACN,cAAM,KAAK,SAAS;AAAA,MACvB;AAAA,IACA,CAAE;AAED,WAAO,KAAK,MAAM,KAAK,EAAE,CAAC;AAE1B,QAAI,OAAO,SAAS,GAAG;AACtB,YAAM,aAAa,qCAAqC,OAAO,MAAM,mBAAmB,OAAO,WAAW,IAAI,KAAK,GAAG;AACtH,YAAM,IAAI,MAAM,UAAU;AAAA,IAC5B;AAEC,WAAO,OAAO,KAAK,EAAE;AAAA,EACrB;;;;;;;;ACpID,QAAME,cAAaP,kBAAsB;AACzC,QAAM,EAAC,QAAQ,aAAa,QAAQ,YAAW,IAAIG,eAAyB;AAC5E,QAAM;AAAA,IACL;AAAA,IACA;AAAA,EACA,IAAGK,YAAiB;AAErB,QAAM,EAAC,QAAO,IAAI;AAGlB,QAAM,eAAe;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACA;AAED,QAAM,SAAS,uBAAO,OAAO,IAAI;AAEjC,QAAM,eAAe,CAAC,QAAQ,UAAU,CAAA,MAAO;AAC9C,QAAI,QAAQ,SAAS,EAAE,OAAO,UAAU,QAAQ,KAAK,KAAK,QAAQ,SAAS,KAAK,QAAQ,SAAS,IAAI;AACpG,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAGC,UAAM,aAAa,cAAc,YAAY,QAAQ;AACrD,WAAO,QAAQ,QAAQ,UAAU,SAAY,aAAa,QAAQ;AAAA,EAClE;AAAA,EAED,MAAM,WAAW;AAAA,IAChB,YAAY,SAAS;AAEpB,aAAO,aAAa,OAAO;AAAA,IAC7B;AAAA,EACA;AAEA,QAAM,eAAe,aAAW;AAC/B,UAAMH,SAAQ,CAAE;AAChB,iBAAaA,QAAO,OAAO;AAE3B,IAAAA,OAAM,WAAW,IAAI,eAAe,SAASA,OAAM,UAAU,GAAG,UAAU;AAE1E,WAAO,eAAeA,QAAO,MAAM,SAAS;AAC5C,WAAO,eAAeA,OAAM,UAAUA,MAAK;AAE3C,IAAAA,OAAM,SAAS,cAAc,MAAM;AAClC,YAAM,IAAI,MAAM,0EAA0E;AAAA,IAC1F;AAED,IAAAA,OAAM,SAAS,WAAW;AAE1B,WAAOA,OAAM;AAAA,EACb;AAED,WAAS,MAAM,SAAS;AACvB,WAAO,aAAa,OAAO;AAAA,EAC5B;AAEA,aAAW,CAAC,WAAW,KAAK,KAAK,OAAO,QAAQE,WAAU,GAAG;AAC5D,WAAO,SAAS,IAAI;AAAA,MACnB,MAAM;AACL,cAAM,UAAU,cAAc,MAAM,aAAa,MAAM,MAAM,MAAM,OAAO,KAAK,OAAO,GAAG,KAAK,QAAQ;AACtG,eAAO,eAAe,MAAM,WAAW,EAAC,OAAO,QAAO,CAAC;AACvD,eAAO;AAAA,MACV;AAAA,IACE;AAAA,EACF;AAEA,SAAO,UAAU;AAAA,IAChB,MAAM;AACL,YAAM,UAAU,cAAc,MAAM,KAAK,SAAS,IAAI;AACtD,aAAO,eAAe,MAAM,WAAW,EAAC,OAAO,QAAO,CAAC;AACvD,aAAO;AAAA,IACT;AAAA,EACC;AAED,QAAM,aAAa,CAAC,OAAO,OAAO,WAAW,OAAO,OAAO,OAAO,QAAQ,SAAS;AAEnF,aAAW,SAAS,YAAY;AAC/B,WAAO,KAAK,IAAI;AAAA,MACf,MAAM;AACL,cAAM,EAAC,MAAK,IAAI;AAChB,eAAO,YAAa,YAAY;AAC/B,gBAAM,SAAS,aAAaA,YAAW,MAAM,aAAa,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,GAAGA,YAAW,MAAM,OAAO,KAAK,OAAO;AAC7H,iBAAO,cAAc,MAAM,QAAQ,KAAK,QAAQ;AAAA,QAChD;AAAA,MACJ;AAAA,IACE;AAAA,EACF;AAEA,aAAW,SAAS,YAAY;AAC/B,UAAM,UAAU,OAAO,MAAM,CAAC,EAAE,gBAAgB,MAAM,MAAM,CAAC;AAC7D,WAAO,OAAO,IAAI;AAAA,MACjB,MAAM;AACL,cAAM,EAAC,MAAK,IAAI;AAChB,eAAO,YAAa,YAAY;AAC/B,gBAAM,SAAS,aAAaA,YAAW,QAAQ,aAAa,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,GAAGA,YAAW,QAAQ,OAAO,KAAK,OAAO;AACjI,iBAAO,cAAc,MAAM,QAAQ,KAAK,QAAQ;AAAA,QAChD;AAAA,MACJ;AAAA,IACE;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO,iBAAiB,MAAM;AAAA,EAAA,GAAI;AAAA,IAC/C,GAAG;AAAA,IACH,OAAO;AAAA,MACN,YAAY;AAAA,MACZ,MAAM;AACL,eAAO,KAAK,WAAW;AAAA,MACvB;AAAA,MACD,IAAI,OAAO;AACV,aAAK,WAAW,QAAQ;AAAA,MAC3B;AAAA,IACA;AAAA,EACA,CAAC;AAED,QAAM,eAAe,CAAC,MAAM,OAAO,WAAW;AAC7C,QAAI;AACJ,QAAI;AACJ,QAAI,WAAW,QAAW;AACzB,gBAAU;AACV,iBAAW;AAAA,IACb,OAAQ;AACN,gBAAU,OAAO,UAAU;AAC3B,iBAAW,QAAQ,OAAO;AAAA,IAC5B;AAEC,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACA;AAAA,EACD;AAED,QAAM,gBAAgB,CAAC,MAAM,SAAS,aAAa;AAClD,UAAM,UAAU,IAAI,eAAe;AAClC,UAAI,QAAQ,WAAW,CAAC,CAAC,KAAK,QAAQ,WAAW,CAAC,EAAE,GAAG,GAAG;AAEzD,eAAO,WAAW,SAAS,SAAS,SAAS,GAAG,UAAU,CAAC;AAAA,MAC9D;AAIE,aAAO,WAAW,SAAU,WAAW,WAAW,IAAM,KAAK,WAAW,CAAC,IAAK,WAAW,KAAK,GAAG,CAAC;AAAA,IAClG;AAID,WAAO,eAAe,SAAS,KAAK;AAEpC,YAAQ,aAAa;AACrB,YAAQ,UAAU;AAClB,YAAQ,WAAW;AAEnB,WAAO;AAAA,EACP;AAED,QAAM,aAAa,CAAC,MAAM,WAAW;AACpC,QAAI,KAAK,SAAS,KAAK,CAAC,QAAQ;AAC/B,aAAO,KAAK,WAAW,KAAK;AAAA,IAC9B;AAEC,QAAI,SAAS,KAAK;AAElB,QAAI,WAAW,QAAW;AACzB,aAAO;AAAA,IACT;AAEC,UAAM,EAAC,SAAS,SAAQ,IAAI;AAC5B,QAAI,OAAO,QAAQ,MAAQ,MAAM,IAAI;AACpC,aAAO,WAAW,QAAW;AAI5B,iBAAS,iBAAiB,QAAQ,OAAO,OAAO,OAAO,IAAI;AAE3D,iBAAS,OAAO;AAAA,MACnB;AAAA,IACA;AAKC,UAAM,UAAU,OAAO,QAAQ,IAAI;AACnC,QAAI,YAAY,IAAI;AACnB,eAAS,+BAA+B,QAAQ,UAAU,SAAS,OAAO;AAAA,IAC5E;AAEC,WAAO,UAAU,SAAS;AAAA,EAC1B;AAED,MAAI;AACJ,QAAM,WAAW,CAACF,WAAU,YAAY;AACvC,UAAM,CAAC,WAAW,IAAI;AAEtB,QAAI,CAAC,QAAQ,WAAW,KAAK,CAAC,QAAQ,YAAY,GAAG,GAAG;AAGvD,aAAO,QAAQ,KAAK,GAAG;AAAA,IACzB;AAEC,UAAM,aAAa,QAAQ,MAAM,CAAC;AAClC,UAAM,QAAQ,CAAC,YAAY,IAAI,CAAC,CAAC;AAEjC,aAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC5C,YAAM;AAAA,QACL,OAAO,WAAW,IAAI,CAAC,CAAC,EAAE,QAAQ,WAAW,MAAM;AAAA,QACnD,OAAO,YAAY,IAAI,CAAC,CAAC;AAAA,MACzB;AAAA,IACH;AAEC,QAAI,aAAa,QAAW;AAC3B,iBAAWI,iBAAsB;AAAA,IACnC;AAEC,WAAO,SAASJ,QAAO,MAAM,KAAK,EAAE,CAAC;AAAA,EACrC;AAED,SAAO,iBAAiB,MAAM,WAAW,MAAM;AAE/C,QAAMA,SAAQ;AACd,EAAAA,OAAM,gBAAgB;AACtB,EAAAA,OAAM,SAAS,MAAM,EAAC,OAAO,cAAc,YAAY,QAAQ,EAAC,CAAC;AACjE,EAAAA,OAAM,OAAO,gBAAgB;AAE7B,WAAiBA;;;;;ACvNjB,MAAM,QAAQ;AAUP,MAAe,eAAe;AAAA,EAuEjC,cAAc;AAvEX;AACH,gDAA8C;AAC9C,iCAA+C,CAAE;AACjD,iCAAkC;AAClC,kCAA2B;AAC3B,8CAAgC;AAMhC,oCAAc,CAAC,IAA4B,YAAoB;AAC3D,UAAI,mBAAK,WAAU;AACZ,WAAA,SAAS,QAAQ,GAAG,iCAAiC,mBAAK,UAAS,WAAW,OAAO,GAAG;AAAA,MAAA,OACxF;AACH,WAAG,SAAS,QAAQ,GAAG,2BAA2B,OAAO,GAAG;AAAA,MAAA;AAAA,IAEpE;AAEA,+BAAS,CAAC,YAAoB,mBAAK,aAAL,WAAiB,KAAK,OAAO,OAAO;AAClE,+BAAS,CAAC,UAAe,mBAAK,aAAL,WAAiB,KAAK,OAAO,OAAO;AAC7D,8BAAQ,CAAC,YAAiB,mBAAK,aAAL,WAAiB,KAAK,OAAO,OAAO;AAE9D,6CAAuB,YAAY;AAC3B,UAAA;AACA,cAAM,aAAuB,CAAE;AACpB,mBAAA,CAAG,EAAA,MAAM,KAAK,OAAO,QAAQ,mBAAK,SAAQ,GAAG;AAChD,cAAA,OAAO,aAAa,UACnB,OAAO,OAAO,UAAU,aAAa,aACtC,OAAO,OAAO,UAAU,aAAa,SACrC,OAAO,OAAO,UAAU,aAAa,WACrC,OAAO,OAAO,UAAU,aAAa,aAAa;AAYvC,uBAAA,KAAK,OAAO,OAAO,EAAE;AAAA,UAAA;AAAA,QACpC;AAEA,YAAA,WAAW,SAAS,GAAG;AACvB,qBAAW,MAAM;AACb,+BAAK,QAAL,WAAY,MAAM,KAAK,6EAA6E,UAAU,GAAG;AACjH,qBAAS,IAAE,GAAG,IAAI,WAAW,QAAQ,KAAK;AACtC,iCAAK,UAAS,WAAW,CAAC,CAAC,EAAE,WAAW;AACpC,kBAAA,mBAAK,2BAA0B,GAAG;AAClC,oBAAI,QAAQ;AACR,6BAAW,MAAM,OAAO,mBAAK,UAAS,WAAW,CAAC,CAAC,GAAG,mBAAK,yBAAwB,GAAM,EAAE,MAAM;AAAA,gBAAA,OAC9F;AACQ,6BAAA,MAAM,OAAO,mBAAK,UAAS,WAAW,CAAC,CAAC,GAAG,mBAAK,yBAAwB,GAAM;AAAA,gBAAA;AAAA,cAC7F;AAAA,YACJ;AAEC,+BAAA,QAAA,WAAO,MAAM,KAAK,mEAAmE,OAAO,KAAK,mBAAK,SAAQ,EAAE,MAAM,GAAG;AACnH,uBAAA,mBAAK,uBAAsB,GAAI;AAAA,aAC3C,GAAG;AAAA,QAAA,OACH;AACQ,qBAAA,mBAAK,uBAAsB,GAAI;AAAA,QAAA;AAAA,eAEzC,OAAO;AACP,2BAAA,QAAA,WAAO,4BAA4B,KAAK;AAClC,mBAAA,mBAAK,uBAAsB,GAAI;AAAA,MAAA;AAAA,IAElD;AAOA,wCAAe,CAAC,QAAgB;AAC5B,yBAAK,QAAL,WAAY;AACL,aAAA,KAAK,MAAM,KAAK,WAAW,KAAK,MAAM,GAAG,CAAC;AAAA,IACrD;AAEA,6CAAoB,CAAC,OAAe;AAChC,yBAAK,iCAAL,WAAqC,mBAAmB,qBAAqB,IAAI;AAAA,IACrF;AAUA,wCAAkB,CAAC,sBAAkD;AAC7D,UAAA;AACA,2BAAK,QAAL,WAAY;AACZ,2BAAK,yBAA0B,kBAAkB;AAIjD,YAAI,QAAQ;AACR,6BAAK,yBAAwB,GAAG,WAAW,CAAC,SAAc;AACtD,+BAAK,QAAL,WAAY,yCAAyC,KAAK,UAAU,IAAI,CAAC;AAAA,UAAE,CAC9E;AAAA,QAAA,OACE;AAKF,6BAAK,yBAAgC,iBAAiB,WAAW,CAAC,SAAc;AAC7E,+BAAK,QAAL,WAAY,uDAAuD,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,UAAE,CACjG;AAAA,QAAA;AAGL,cAAM,WAA8B;AAAA,UAChC,SAAS,mBAAmB;AAAA,UAC5B,SAAS,CAAA;AAAA,QACb;AAEK,2BAAA,yBAAwB,YAAY,QAAQ;AAAA,eAC5C,OAAO;AACP,2BAAA,QAAA,WAAO,uBAAuB,KAAK;AAAA,MAAG;AAAA,IAEnD;AAEA,6CAAoB,OAAO,+BAA6F;AAC7G,aAAA;AAAA,IACX;AAEA,iDAA2B,OAAO,QAAiB,mBAAmD;AAC9F,UAAA;AACK,2BAAA,UAAS,OAAO,EAAE,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA,UAAU;AAAA,QACd;AACA,2BAAK,UAAS,OAAO,EAAE,EAAE,OAAO,YAAY;AAC5C,2BAAK,wBAAL,WAA4B,OAAO,IAAI,aAAa;AAAA,eAC/C,OAAO;AACP,2BAAA,QAAA,WAAO,gCAAgC,KAAK;AAAA,MAAG;AAAA,IAE5D;AAEA,+CAAyB,CAAC,IAAY,UAAwB;AACtD,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,6BAAK,UAAS,EAAE,EAAE,OAAO,QAAQ;AAEjC,6BAAK,iCAAL,WAAqC,mBAAmB,mBAAmB,IAAI;AAAA,QAAK,OACjF;AACE,6BAAA,OAAA,WAAM,yCAAyC,EAAE;AAAA,QAAa;AAAA,eAElE,OAAO;AACP,2BAAA,QAAA,WAAO,8BAA8B,KAAK;AAAA,MAAG;AAAA,IAE1D;AAGA;AAAA,qDAA+B,CAAC,OAAwB;AAChD,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,gBAAM,QAAQ,mBAAK,UAAS,EAAE,EAAE,OAAO;AACnC,cAAA,UAAU,aAAa,SAAS;AACzB,mBAAA;AAAA,UAAA;AAEJ,iBAAA;AAAA,QAAA,OACJ;AACE,6BAAA,OAAA,WAAM,+CAA+C,EAAE;AACrD,iBAAA;AAAA,QAAA;AAAA,eAEN,OAAO;AACP,2BAAA,QAAA,WAAO,oCAAoC,KAAK;AAC9C,eAAA;AAAA,MAAA;AAAA,IAEf;AAGA;AAAA,yCAAmB,CAAC,OAAwB;AACpC,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,gBAAM,QAAQ,mBAAK,UAAS,EAAE,EAAE,OAAO;AACnC,cAAA,UAAU,aAAa,SACvB,UAAU,aAAa,aACvB,UAAU,aAAa,WACvB,UAAU,aAAa,YAAY;AAC5B,mBAAA;AAAA,UAAA;AAEJ,iBAAA;AAAA,QAAA,OACJ;AACE,6BAAA,OAAA,WAAM,mCAAmC,EAAE;AACzC,iBAAA;AAAA,QAAA;AAAA,eAEN,OAAO;AACP,2BAAA,QAAA,WAAO,wBAAwB,KAAK;AAClC,eAAA;AAAA,MAAA;AAAA,IAEf;AAEA,gDAA0B,CAAC,OAAuB;AAC1C,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,iBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,QAAA,OAC7B;AACE,6BAAA,OAAA,WAAM,0CAA0C,EAAE;AAChD,iBAAA;AAAA,QAAA;AAAA,eAEN,OAAO;AACP,2BAAA,QAAA,WAAO,+BAA+B,KAAK;AACzC,eAAA;AAAA,MAAA;AAAA,IAEf;AAEA,kDAA4B,CAAC,OAAuB;AAC5C,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,6BAAK,UAAS,EAAE,EAAE,OAAO,YAAY;AAC9B,iBAAA;AAAA,QAAA,OACJ;AACE,6BAAA,OAAA,WAAM,4CAA4C,EAAE;AAClD,iBAAA;AAAA,QAAA;AAAA,eAEN,OAAO;AACP,2BAAA,QAAA,WAAO,iCAAiC,KAAK;AAC3C,eAAA;AAAA,MAAA;AAAA,IAEf;AAEA,gDAA0B,CAAC,OAAuB;AAC1C,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACd,6BAAA,UAAS,EAAE,EAAE,OAAO;AACzB,iBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,QAAA,OAC7B;AACE,6BAAA,OAAA,WAAM,0CAA0C,EAAE;AAChD,iBAAA;AAAA,QAAA;AAAA,eAEN,OAAO;AACP,2BAAA,QAAA,WAAO,+BAA+B,KAAK;AACzC,eAAA;AAAA,MAAA;AAAA,IAEf;AAEA,+CAAyB,CAAC,OAA4C;AAC9D,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACZ,iBAAA,mBAAK,UAAS,EAAE,EAAE;AAAA,QAAA,OACtB;AACE,6BAAA,OAAA,WAAM,yCAAyC,EAAE;AAAA,QAAa;AAAA,eAElE,OAAO;AACP,2BAAA,QAAA,WAAO,8BAA8B,KAAK;AAAA,MAAG;AAAA,IAE1D;AAEA,uDAAiC,CAAC,OAA8C;AACxE,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,iBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO,QAAQ;AAAA,QAAA,OACrC;AACE,6BAAA,OAAA,WAAM,iDAAiD,EAAE;AAAA,QAAa;AAAA,eAE1E,OAAO;AACP,2BAAA,QAAA,WAAO,sCAAsC,KAAK;AAAA,MAAG;AAAA,IAElE;AAEA,8CAAwB,CAAC,OAA2C;AAC5D,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,iBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,QAAA,OAC7B;AACE,6BAAA,OAAA,WAAM,wCAAwC,EAAE;AAAA,QAAa;AAAA,eAEjE,OAAO;AACP,2BAAA,QAAA,WAAO,6BAA6B,KAAK;AAAA,MAAG;AAAA,IAEzD;AAEA,8CAAwB,CAAC,IAAY,YAAwD;AACrF,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,6BAAK,UAAS,EAAE,EAAE,OAAO,UAAU,EAAE,GAAG,QAAQ;AAChD,iBAAO,mBAAK,UAAS,EAAE,EAAE,OAAO;AAAA,QAAA,OAC7B;AACE,6BAAA,OAAA,WAAM,wCAAwC,EAAE;AAAA,QAAa;AAAA,eAEjE,OAAO;AACP,2BAAA,QAAA,WAAO,6BAA6B,KAAK;AAAA,MAAG;AAAA,IAEzD;AAEA,mCAAa,OAAO,+BAA0F;AACtG,UAAA;AACA,UAAA;AAEA,UAAA;AACM,cAAA,EAAE,WAAW;AACnB,cAAM,sBAAsB,MAAM,KAAK,kBAAkB,0BAA0B;AACnF,YAAI,qBAAqB;AACf,gBAAA,mBAAK,0BAAL,WAA8B,QAAQ;AAAA,QAAmB,OAC5D;AACH,6BAAK,OAAL,WAAW;AAAA,QAA8C;AAE9C,uBAAA,EAAE,GAAG,OAAO;AAAA,eACtB,OAAO;AACP,2BAAA,QAAA,WAAO,kBAAkB,KAAK;AAAA,MAAG;AAI1C,yBAAK,4BAAL,WAAgC,mBAAmB,mBAAmB,4BAA4B;AAE3F,aAAA;AAAA,IACX;AAQA,wDAAkC,OAAO,SAA6B,UAAkB,aAAqC;AACrH,UAAA;AACA,YAAI,mBAAK,0BAAyB;AAC1B,cAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,kBAAM,UAA6B;AAAA,cAC/B;AAAA,cACA,SAAS;AAAA,gBACL,QAAQ,mBAAK,UAAS,QAAQ,EAAE;AAAA,cAAA;AAAA,YAExC;AACK,+BAAA,yBAAwB,YAAY,OAAO;AAChD,kBAAM,MAAM,CAAC;AAAA,UAAA,OACV;AACE,+BAAA,OAAA,WAAM,+CAA+C,QAAQ;AAAA,UAAa;AAAA,QACnF;AAAA,eAEC,OAAO;AACP,2BAAA,QAAA,WAAO,uCAAuC,KAAK;AAAA,MAAG;AAAA,IAEnE;AAEA,oDAA8B,OAAO,SAA6B,mBAAqD;AAC/G,UAAA;AACA,YAAI,mBAAK,0BAAyB;AAC9B,gBAAM,UAA6B;AAAA,YAC/B,SAAS,mBAAmB;AAAA,YAC5B,SAAS;AAAA,cACL,WAAW,eAAe,QAAQ;AAAA,cAClC,UAAU,mBAAK;AAAA,cACf,SAAS,OAAO,OAAO,mBAAK,SAAQ,EAAE,IAAI,CAAC,aAAa,SAAS,MAAM;AAAA,YAAA;AAAA,UAE/E;AACK,6BAAA,yBAAwB,YAAY,OAAO;AAChD,gBAAM,MAAM,CAAC;AAAA,QAAA;AAAA,eAEZ,OAAO;AACP,2BAAA,QAAA,WAAO,mCAAmC,KAAK;AAAA,MAAG;AAAA,IAE/D;AAEA,qCAAe,OAAO,+BAA0E;;AACxF,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,cAAA,UAAU,aAAa,SAAS;AAChC,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,+BAAA,wBAAA,WAAuB,UAAU,aAAa;AACnD,kBAAM,MAAM,CAAC;AACP,kBAAA,gCAAgB,KAAK;AAC3B,kBAAM,cAAc,YAAY;;AACxB,kBAAA;AACA,oBAAI,OAAgB;AACd,sBAAA,mBAAmB,mBAAK,gCAAL,WAAoC;AAC7D,oBAAI,kBAAkB;AAClB,wBAAM,EAAE,YAAY,UAAU,wBAAwB,gBAAoB,IAAA;AAC1E,sBAAI,aAAa,GAAG;AACT,2BAAA,mBAAK,yBAAL,WAA6B,YAAY;AAC5C,wBAAA,SAAS,SAAS,oBAAoB,QAAQ,mBAAK,UAAS,QAAQ,EAAE,OAAO,UAAU,aAAa,QAAQ;AACrG,6BAAA;AAAA,oBAAA;AAAA,kBACX,WACO,WAAW,GAAG;AACZ,6BAAA,oBAAI,QAAO,YAAY,UAAU,aAAa,MAAQ;AAAA,kBAAA;AAEnE,sBAAI,MAAM;AACF,wBAAA,mBAAK,8BAAL,WAAkC,WAAW;AAE7C,8BAAMK,MAAA,mBAAK,wBAAL,WAA4B,cAA5B,gBAAAA,IAAuC;AAG7C,0BAAI,CAAC,mBAAK,kBAAL,WAAsB,WAAW;AAGlC,2CAAK,yBAAL,WAA6B;AAAA,sBAAQ;AAAA,oBACzC;AAIA,wBAAA,mBAAK,8BAAL,WAAkC,WAAW;AAC7C,0BAAI,yBAAyB,GAAG;AAC5B,8BAAM,MAAM,sBAAsB;AAAA,sBAAA,OAC/B;AACH,8BAAM,sBAAK,8CAAL;AAAA,sBAAqB;AAEnB,kCAAA;AAAA,oBAAA,OACT;AACH,0BAAI,CAAC,mBAAK,kBAAL,WAAsB,WAAW;AAClC,8BAAM,MAAM,EAAE;AACF,oCAAA;AAAA,sBAAA;AAAA,oBAChB;AAAA,kBACJ,OACG;AACH,wBAAI,oBAAoB,MAAM;AAC1B,8BAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACxC,yCAAA,wBAAA,WAAuB,UAAU,aAAa;AACvC,kCAAA;AAAA,oBAAA,OACT;AACH,8BAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACxC,yCAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,oBAAS;AAAA,kBAChE;AAAA,gBACJ,OACG;AACE,qCAAA,OAAA,WAAM,yEAAyE,QAAQ;AAAA,gBAAG;AAAA,uBAE9F,OAAO;AACP,mCAAA,QAAA,WAAO,uCAAuC,KAAK;AAAA,cAAG;AAAA,YAEnE;AACY,wBAAA;AAAA,UAAA;AAAA,QAChB,OACG;AACE,6BAAA,OAAA,WAAM,4BAA4B,QAAQ;AAAA,QAAa;AAAA,eAE3D,OAAO;AACP,2BAAA,QAAA,WAAO,2BAA2B,KAAK;AAAA,MAAG;AAInD,yBAAK,4BAAL,WAAgC,mBAAmB,qBAAqB,4BAA4B;AAAA,IACxG;AAEA,8CAAwB,OAAO,OAA6B;;AACpD,UAAA;AACA,UAAA;AACI,YAAA,mBAAK,UAAS,EAAE,GAAG;AACnB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,EAAE,EAAE;AACpC,cAAI,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAChC,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,QAA5B,mBAAiC;AAC3C,+BAAA,wBAAA,WAAuB,IAAI,aAAa;AAAA,UAAO;AAAA,QACxD,OACG;AACE,6BAAA,OAAA,WAAM,qCAAqC,EAAE;AAAA,QAAa;AAAA,eAE9D,OAAO;AACP,2BAAA,QAAA,WAAO,oCAAoC,KAAK;AAAA,MAAG;AAErD,aAAA;AAAA,IACX;AAEA,oCAAc,OAAO,+BAA2E;AACxF,UAAA;AACA,UAAA;AACA,iBAAS,MAAM,mBAAK,uBAAL,WAA2B,2BAA2B,OAAO;AAAA,eACvE,OAAO;AACP,2BAAA,QAAA,WAAO,0BAA0B,KAAK;AAAA,MAAG;AAIlD,yBAAK,4BAAL,WAAgC,mBAAmB,oBAAoB,4BAA4B;AAAA,IACvG;AAEA,yCAAmB,OAAO,+BAA2E;;AAC7F,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,cAAA,UAAU,aAAa,WACvB,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAChC,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,+BAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,UAAU;AAAA,QACjE,OACG;AACE,6BAAA,OAAA,WAAM,gCAAgC,QAAQ;AAAA,QAAa;AAAA,eAE/D,OAAO;AACP,2BAAA,QAAA,WAAO,+BAA+B,KAAK;AAAA,MAAG;AAIvD,yBAAK,4BAAL,WAAgC,mBAAmB,yBAAyB,4BAA4B;AAAA,IAC5G;AAEA,mDAA6B,CAAC,SAA6B,4BAAyD,WAAsB;AAElI,UAAA;AACA,YAAI,SAAS;AACP,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AAEzB,mBAAS,EAAE,GAAG,mBAAK,UAAS,QAAQ,EAAE,OAAO;AAAA,QAAA;AAEjD,YAAI,mBAAK,0BAAyB;AAC9B,gBAAM,UAA6B;AAAA,YAC/B;AAAA,YACA,SAAS;AAAA,cACL,WAAW,2BAA2B;AAAA,cACtC;AAAA,cACA,2BAA2B;AAAA,gBACvB,iBAAiB,2BAA2B,OAAO;AAAA,gBACnD,UAAU,2BAA2B,OAAO;AAAA,gBAC5C,UAAU,2BAA2B,OAAO;AAAA,gBAC5C;AAAA,cAAA;AAAA,YACJ;AAAA,UAER;AACK,6BAAA,yBAAwB,YAAY,OAAO;AAAA,QAAA;AAAA,eAE/C,OAAO;AACP,2BAAA,QAAA,WAAO,kCAAkC,KAAK;AAAA,MAAG;AAAA,IAE9D;AAEA,qCAAe,OAAO,+BAA2E;;AACzF,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,cAAA,UAAU,aAAa,SAAS;AAChC,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,+BAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,UAAM;AAAA,QAC7D,OACG;AACE,6BAAA,OAAA,WAAM,4BAA4B,QAAQ;AAAA,QAAa;AAAA,eAE3D,OAAO;AACP,2BAAA,QAAA,WAAO,2BAA2B,KAAK;AAAA,MAAG;AAInD,yBAAK,4BAAL,WAAgC,mBAAmB,qBAAqB,4BAA4B;AAAA,IACxG;AAEA,sCAAgB,OAAO,+BAA2E;;AAC1F,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,cAAA,UAAU,aAAa,QAAQ;AAC/B,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,+BAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,UAAO;AAAA,QAC9D,OACG;AACE,6BAAA,OAAA,WAAM,6BAA6B,QAAQ;AAAA,QAAa;AAAA,eAE5D,OAAO;AACP,2BAAA,QAAA,WAAO,4BAA4B,KAAK;AAAA,MAAG;AAIpD,yBAAK,4BAAL,WAAgC,mBAAmB,sBAAsB,4BAA4B;AAAA,IACzG;AAEA,qCAAe,OAAO,+BAA2E;;AACzF,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AAC1C,cAAI,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAChC,+BAAK,2BAAL,WAA+B;AAC/B,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AACjD,+BAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,UAAM;AAAA,QAC7D,OACG;AACE,6BAAA,OAAA,WAAM,4BAA4B,QAAQ;AAAA,QAAa;AAAA,eAE3D,OAAO;AACP,2BAAA,QAAA,WAAO,2BAA2B,KAAK;AAAA,MAAG;AAInD,yBAAK,4BAAL,WAAgC,mBAAmB,qBAAqB,4BAA4B;AAAA,IACxG;AAGA;AAAA,uCAAiB,OAAO,+BAA4D;;AAC5E,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AAC1C,cAAI,UAAU,aAAa,UACvB,UAAU,aAAa,SAAS;AAC1B,kBAAA,mBAAmB,mBAAK,yBAAL,WAA6B;AACjD,+BAAA,QAAA,WAAO,GAAG,MAAM,QAAQ,YAAY,QAAQ,GAAG,CAAC,kBAAkB,gBAAgB;AACvF,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AAChD,kBAAA,eAAe,mBAAK,yBAAL,WAA6B;AAC7C,+BAAA,QAAA,WAAO,GAAG,MAAM,QAAQ,kBAAkB,QAAQ,GAAG,CAAC,4BAA4B,YAAY;AAC9F,+BAAA,wBAAA,WAAuB,UAAU,aAAa;AAAA,UAAM;AAAA,QAC7D,OACG;AACE,6BAAA,OAAA,WAAM,8BAA8B,QAAQ;AAAA,QAAa;AAAA,eAE7D,OAAO;AACP,2BAAA,QAAA,WAAO,6BAA6B,KAAK;AAAA,MAAG;AAIrD,yBAAK,4BAAL,WAAgC,mBAAmB,uBAAuB,4BAA4B;AAAA,IAC1G;AAEA,sCAAgB,OAAO,+BAA4D;;AAC3E,UAAA;AACA,UAAA;AACM,cAAA,WAAW,2BAA2B,OAAO;AAC/C,YAAA,mBAAK,UAAS,QAAQ,GAAG;AACzB,gBAAM,EAAE,MAAM,IAAI,mBAAK,UAAS,QAAQ,EAAE;AACtC,cAAA,UAAU,aAAa,UACvB,UAAU,aAAa,WACvB,UAAU,aAAa,SAAS;AAChC,+BAAK,QAAL,WAAY,MAAM,KAAK,YAAY,KAAK,UAAU,mBAAK,uBAAL,WAA2B,SAAS,CAAC,GAAG;AAC1F,+BAAK,uBAAL,WAA2B,UAAU,2BAA2B,OAAO;AACvE,+BAAK,QAAL,WAAY,MAAM,KAAK,WAAW,KAAK,UAAU,mBAAK,uBAAL,WAA2B,SAAS,CAAC,GAAG;AACzF,qBAAS,QAAM,wBAAK,wBAAL,WAA4B,cAA5B,mBAAuC;AAAA,UAAa;AAAA,QAEvE,OACG;AACE,6BAAA,OAAA,WAAM,6BAA6B,QAAQ;AAAA,QAAa;AAAA,eAE5D,OAAO;AACP,2BAAA,QAAA,WAAO,4BAA4B,KAAK;AAAA,MAAG;AAIpD,yBAAK,4BAAL,WAAgC,mBAAmB,sBAAsB,4BAA4B;AAAA,IACzG;AAGA;AAAA,0CAAiB,OAAM,SAAc;AAE7B,UAAA;AACA,cAAM,iBAAoC;AAC1C,gBAAQ,eAAe,SAAS;AAAA,UAChC,KAAK,mBAAmB;AACf,+BAAA,iBAAA,WAAgB,eAAe;AAC/B,+BAAA,UAAY,eAAe,QAAuC;AAClE,+BAAA,WAAa,eAAe,QAAuC;AACxE,+BAAK,QAAL,WAAY,+BAA+B,mBAAK,UAAS;AACzD,+BAAK,QAAL,WAAY,8BAA8B,KAAK,UAAU,mBAAK,SAAQ,CAAC;AACvE;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,YAAA,WAAW,eAAe;AAC/B;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,cAAA,WAAa,eAAe;AACjC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,aAAA,WAAY,eAAe;AAChC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,kBAAA,WAAiB,eAAe;AACrC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,cAAA,WAAa,eAAe;AACjC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,eAAA,WAAc,eAAe;AAClC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,cAAA,WAAa,eAAe;AACjC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,gBAAA,WAAe,eAAe;AACnC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,eAAA,WAAc,eAAe;AAClC;AAAA,UACJ,KAAK,mBAAmB;AACpB,+BAAK,QAAL,WAAY;AACP,+BAAA,6BAAA,WAA4B,mBAAmB,YAAY;AAChE;AAAA,UACJ;AACI,+BAAK,OAAL,WAAW,6DAA6D,eAAe,OAAO;AAAA,QAAc;AAAA,eAE3G,OAAY;AACZ,2BAAA,QAAA,WAAO,6BAA6B,KAAK;AAC9C,2BAAK,QAAL,WAAY;AAAA,MAAK;AAAA,IAEzB;AAxnBI,uBAAK,QAAL,WAAY;AACZ,uBAAK,sBAAL;AAAA,EAA0B;AAAA,EAlE9B,IAAI,SAAqB;AACd,WAAA;AAAA,EAAA;AAAA,EA6EX,IAAI,yBAA6C;AAC7C,WAAO,mBAAK;AAAA,EAAA;AAAA,EAGhB,IAAI,UAAiC;AACjC,WAAO,mBAAK;AAAA,EAAA;AAumBpB;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,oBAAiC,WAAA;AAC7B,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC5B,YAAA;AAAA,EAAA,CACX;AAAA;AAGL;AAqBA;AAmBA;AAkFA;AAmBA;AAYA;AAuBA;AA8BA;AAqBA;AAqBA;AAwBA;AA0BA;AC9nBG,MAAM,mBAAmB;AAAA,EAAzB;AACH,4CAAmB,CAAC,6BAA0D,cAAyC;AACnH,UAAI,SAAS;AAEb,UAAI,UAAU,SAAS;AACT,kBAAA,QAAQ,QAAQ,CAAC,YAAY;AACnC,sCAA4B,MAAM,OAAO;AAAA,QAAA,CAC5C;AACQ,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,cAAc;AACI,oCAAA,iBAAiB,MAAM,qBAAqB;AAAA,UACpE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,YAAY;AACM,oCAAA,iBAAiB,MAAM,mBAAmB;AAAA,UAClE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,YAAY;AACM,oCAAA,iBAAiB,MAAM,mBAAmB;AAAA,UAClE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,qBAAqB;AACH,oCAAA,iBAAiB,MAAM,4BAA4B;AAAA,UAC3E,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,0BAA0B;AACR,oCAAA,iBAAiB,MAAM,kCAAkC;AAAA,UACjF,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,0BAA0B;AACR,oCAAA,iBAAiB,MAAM,kCAAkC;AAAA,UACjF,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,WAAW;AACO,oCAAA,iBAAiB,MAAM,kBAAkB;AAAA,UACjE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,OAAO;AACW,oCAAA,iBAAiB,MAAM,aAAa;AAAA,UAC5D,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGe,kCAAA,iBAAiB,MAAM,sBAAsB;AAAA,QACrE,KAAK,UAAU;AAAA,MAAA,CACU;AAE7B,UAAI,UAAU,UAAU;AACQ,oCAAA,iBAAiB,MAAM,gBAAgB;AAAA,UAC/D,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,UAAU;AACQ,oCAAA,iBAAiB,MAAM,gBAAgB;AAAA,UAC/D,KAAK,UAAU;AAAA,QAAA,CACU;AACD,oCAAA,iBAAiB,MAAM,0BAA0B;AAAA,UACzE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,SAAS;AACS,oCAAA,iBAAiB,MAAM,eAAe;AAAA,UAC9D,KAAK,UAAU;AAAA,QAAA,CACU;AACD,oCAAA,iBAAiB,MAAM,yBAAyB;AAAA,UACxE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,YAAY;AACM,oCAAA,iBAAiB,MAAM,aAAa;AAAA,UAC5D,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,IAAI;AACc,oCAAA,iBAAiB,MAAM,kBAAkB;AAAA,UACjE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGb,UAAI,UAAU,IAAI;AACc,oCAAA,iBAAiB,MAAM,kBAAkB;AAAA,UACjE,KAAK,UAAU;AAAA,QAAA,CACU;AACpB,iBAAA;AAAA,MAAA;AAGN,aAAA;AAAA,IACX;AAAA;AACJ;AC3HA,MAAM,YAAY,CAAE;AACpB,SAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,YAAU,MAAM,IAAI,KAAO,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACpD;AACO,SAAS,gBAAgB,KAAK,SAAS,GAAG;AAC7C,UAAQ,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;AAClD;AC1BA,IAAI;AACJ,MAAM,QAAQ,IAAI,WAAW,EAAE;AAChB,SAAS,MAAM;AAC1B,MAAI,CAAC,iBAAiB;AAClB,QAAI,OAAO,WAAW,eAAe,CAAC,OAAO,iBAAiB;AAC1D,YAAM,IAAI,MAAM,0GAA0G;AAAA,IACtI;AACQ,sBAAkB,OAAO,gBAAgB,KAAK,MAAM;AAAA,EAC5D;AACI,SAAO,gBAAgB,KAAK;AAChC;ACVA,MAAM,aAAa,OAAO,WAAW,eAAe,OAAO,cAAc,OAAO,WAAW,KAAK,MAAM;AACtG,MAAe,SAAA,EAAE,WAAY;ACE7B,SAAS,GAAG,SAAS,KAAK,QAAQ;;AAC9B,MAAI,OAAO,cAAc,QAAQ,CAAC,SAAS;AACvC,WAAO,OAAO,WAAY;AAAA,EAClC;AACI,YAAU,WAAW,CAAE;AACvB,QAAM,OAAO,QAAQ,YAAU,aAAQ,QAAR,qCAAmB,IAAK;AACvD,MAAI,KAAK,SAAS,IAAI;AAClB,UAAM,IAAI,MAAM,mCAAmC;AAAA,EAC3D;AACI,OAAK,CAAC,IAAK,KAAK,CAAC,IAAI,KAAQ;AAC7B,OAAK,CAAC,IAAK,KAAK,CAAC,IAAI,KAAQ;AAW7B,SAAO,gBAAgB,IAAI;AAC/B;ACPA,MAAM,QAAQ;AAMP,MAAM,iBAAiB;AAAA,EAW1B,YAAY,SAAiC;AAX1C;AAEH;AAAA,mCAAwC,CAAE;AAC1C,uBAAAC;AACA,iDAA+D;AAC/D,4CAAiD;AACjD,qCAA0B,CAAE;AAC5B;AACA,kCAAiC,CAAE;AACnC,uBAAAC,wBAAgC;AAkBhC,uBAAAC,cAAc,CAAC,IAA4B,YAAoB;AACxD,SAAA,SAAS,QAAQ,GAAG,4BAA4B,mBAAK,IAAG,WAAW,OAAO,GAAG;AAAA,IACpF;AAQA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAAC,SAAS,CAAC,YAAoB,mBAAKD,cAAL,WAAiB,mBAAKF,WAAS,OAAO,OAAO;AAC3E,uBAAAI,SAAS,CAAC,UAAe,mBAAKF,cAAL,WAAiB,mBAAKF,WAAS,OAAO,OAAO;AACtE,uBAAAK,QAAQ,CAAC,UAAe,mBAAKH,cAAL,WAAiB,mBAAKF,WAAS,OAAO,MAAM;AA0FpE,uBAAAM,uBAAuB,YAAY;AAC3B,UAAA;AACA,cAAM,aAA2B,CAAE;AACxB,mBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AAC7C,qBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,SAAS,SAAS,GAAG;AAC3D,kBAAM,cAAc,SAAS;AAC7B,gBAAI,SAAS,aAAa,UACrB,gBAAgB,aAAa,aAC9B,gBAAgB,aAAa,SAC7B,gBAAgB,aAAa,WAC7B,gBAAgB,aAAa,aAAa;AAO1C,yBAAW,KAAK;AAAA,gBACZ,UAAU,SAAS;AAAA,gBACnB,UAAU,SAAS;AAAA,cAAA,CACtB;AAAA,YAAA;AAAA,UACL;AAAA,QACJ;AAEA,YAAA,WAAW,SAAS,GAAG;AACvB,qBAAW,YAAY;AACd,+BAAAH,SAAA,WAAO,MAAM,KAAK,+EAA+E,KAAK,UAAU,UAAU,CAAC,GAAG;AACnI,qBAAS,IAAE,GAAG,IAAI,WAAW,QAAQ,KAAK;AACtC,oBAAM,WAAW,mBAAK,YAAW,WAAW,CAAC,EAAE,QAAQ;AACvD,kBAAI,UAAU;AACV,sBAAM,WAAW,SAAS,UAAU,WAAW,CAAC,EAAE,QAAQ;AAC1D,oBAAI,UAAU;AACV,sBAAI,SAAS,6BAA6B;AACjC,uCAAAA,SAAA,WAAO,MAAM,KAAK,+BAA+B,KAAK,UAAU,SAAS,kBAAkB,CAAC,GAAG;AACpG,6BAAS,4BAA4B,WAAW;AAAA,kBAAA;AAIhD,sBAAA,SAAS,UAAU,aAAa,YAAY;AACvC,uCAAAA,SAAA,WAAO,MAAM,KAAK,oBAAoB,KAAK,UAAU,SAAS,kBAAkB,CAAC,GAAG;AACnF,0BAAA,SAAkB,KAAK,iBAAiB,QAAQ;AACjD,uCAAA,cAAa,KAAK,MAAM;AAC7B,wBAAI,mBAAK,cAAa,SAAS,mBAAKH,WAAS,sBAAsB;AAC/D,yCAAK,cAAa,MAAM;AAAA,oBAAA;AAAA,kBAC5B,OACG;AACE,uCAAAG,SAAA,WAAO,MAAM,KAAK,iEAAiE,KAAK,UAAU,SAAS,kBAAkB,CAAC,GAAG;AAAA,kBAAC;AAE3I,2BAAS,WAAW;AAEhB,sBAAA,mBAAKF,4BAA0B,GAAG;AAClC,wBAAI,QAAQ;AACR,iCAAW,MAAM,OAAO,SAAS,UAAU,WAAW,CAAC,EAAE,QAAQ,GAAG,mBAAKA,0BAAwB,GAAM,EAAE,MAAM;AAAA,oBAAA,OAC5G;AACQ,iCAAA,MAAM,OAAO,SAAS,UAAU,WAAW,CAAC,EAAE,QAAQ,GAAG,mBAAKA,0BAAwB,GAAM;AAAA,oBAAA;AAAA,kBAC3G;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAEO,uBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AACxD,iCAAKE,SAAL,WAAY,MAAM,KAAK,4EAA4E,SAAS,EAAE,OAAO,OAAO,KAAK,SAAS,SAAS,EAAE,MAAM,GAAG;AAAA,YAAC;AAExJ,uBAAA,mBAAKG,wBAAsB,GAAI;AAAA,aAC3C,GAAG;AAAA,QAAA,OACH;AACQ,qBAAA,mBAAKA,wBAAsB,GAAI;AAAA,QAAA;AAAA,eAEzC,OAAO;AACP,2BAAAF,SAAA,WAAO,kCAAkC,KAAK;AAC7C,cAAA;AAAA,MAAA;AAAA,IAEd;AAMA,sCAAa,YAA+B;AACpC,UAAA;AACA,cAAM,mBAAK,4BAAL;AACN,cAAM,SAAmB,CAAE;AAChB,mBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AACxD,iBAAO,SAAS,EAAE,IAAI,KAAK,iBAAiB,QAAQ;AAAA,QAAA;AAEjD,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,yBAAyB,KAAK;AACpC,cAAA;AAAA,MAAA;AAAA,IAEd;AAIA;AAAA;AAAA,2CAAkB,OAAO,WAA8C;AAC/D,UAAA;AACA,cAAM,mBAAK,4BAAL;AACN,cAAM,SAAmB,CAAE;AAChB,mBAAA,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,mBAAK,WAAU,GAAG;AACvD,iBAAO,SAAS,EAAE,IAAY,KAAK,sBAAsB,UAAU,MAAM;AAAA,QAAA;AAEvE,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,yBAAyB,KAAK;AACpC,cAAA;AAAA,MAAA;AAAA,IAEd;AAOA;AAAA,0CAAiB,CAAC,wBAAyD;AACnE,UAAA;AACA,eAAO,mBAAK,cACP,OAAO,CAAC;;AAAY,kBAAC,oBAAoB,OAAQ,SAAO,kBAAO,QAAQ,eAAf,mBAA2B,SAA3B,mBAAiC,cAAc,oBAAoB,WAAU;AAAA,SAAC,EACtI,OAAO,CAAC,WAAA;;AAAY,kBAAC,oBAAoB,iBAAkB,SAAO,kBAAO,QAAQ,eAAf,mBAA2B,mBAA3B,mBAA2C,cAAc,oBAAoB,qBAAoB;AAAA,SAAC,EACpK,OAAO,CAAC,WAAA;;AAAY,kBAAC,oBAAoB,MAAO,QAAO,YAAO,QAAQ,QAAf,mBAAoB,SAAS,oBAAoB;AAAA,SAAI,EAC5G,OAAO,CAAC,WAAY,CAAC,oBAAoB,cAAe,OAAQ,CAAC,OAAO,QAAQ,WAAY,QAAQ,CAAC,CAAC,OAAO,QAAQ,SAAS,oBAAoB,WAAW,CAAC;AAAA,eAC9J,OAAO;AACP,2BAAAA,SAAA,WAAO,6BAA6B,KAAK;AAC9C,eAAO,CAAE;AAAA,MAAA;AAAA,IAEjB;AAEA,qCAAY,OAAO,aAAuC;AAClD,UAAA;AACA,cAAM,mBAAK,2BAAL,WAA+B,mBAAK,YAAW,QAAQ;AAC7D,eAAO,KAAK,iBAAiB,mBAAK,YAAW,QAAQ,CAAC;AAAA,eACjD,OAAO;AACP,2BAAAA,SAAA,WAAO,wBAAwB,KAAK;AACnC,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,qCAAY,OAAO,UAAkB,aAAuC;AACpE,UAAA;AACA,cAAM,mBAAK,2BAAL,WAA+B,mBAAK,YAAW,QAAQ;AACtD,eAAA,KAAK,iBAAiB,mBAAK,YAAW,QAAQ,EAAE,UAAU,QAAQ,CAAC;AAAA,eACrE,OAAO;AACP,2BAAAA,SAAA,WAAO,wBAAwB,KAAK;AACnC,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,qCAAY,CAAC,eAA+B,qBAAiD;AACrF,UAAA;AACI,YAAA;AACJ,YAAI,kBAAkB;AAEF,0BAAA;AAAA,QAAA,OACb;AAEH,0BAAgB,mBAAKJ,WAAS;AAAA,QAAA;AAG5B,cAAA;AAAA,UACF;AAAA;AAAA,UACA;AAAA;AAAA,QACJ,IAAI,IAAI,eAAe;AAEvB,YAAI,CAAC,QAAQ;AAGT,gBAAM,MAAM;AAAA,QAAA;AAGhB,cAAM,WAAWO,GAAO;AACxB,cAAM,cAAyB;AAAA,UAC3B,IAAI;AAAA,UACJ,iBAAiB,mBAAK;AAAA,UACtB,QAAQ,cAAc,yBAAyB;AAAA,UAC/C,cAAc,CAAE;AAAA,UAChB,aAAa;AAAA,UACb,SAAS;AAAA,UACT,WAAW,CAAE;AAAA,UACb,eAAe,CAAE;AAAA,UAEjB,WAAW,CAAC,OAAiC,mBAAK,YAAW,QAAQ,EAAE,UAAU,EAAE;AAAA;AAAA,UAGnF,WAAW,CAAC,kBAAsD,KAAK,kBAAkB,aAAa,aAAa;AAAA,UACnH,aAAa,CAAC,WAA2D,mBAAKC,eAAL,WAAkB,aAAa;AAAA,UACxG,YAAY,CAAC,WAA2D,mBAAKC,cAAL,WAAiB,aAAa;AAAA,UACtG,aAAa,CAAC,WAA2D,mBAAKC,eAAL,WAAkB,aAAa;AAAA,UACxG,cAAc,CAAC,WAA2D,mBAAKC,gBAAL,WAAmB,aAAa;AAAA,UAC1G,iBAAiB,CAAC,WAA2D,mBAAKC,mBAAL,WAAsB,aAAa;AAAA,UAChH,aAAa,CAAC,WAA2D,mBAAKC,eAAL,WAAkB,aAAa;AAAA,UACxG,eAAe,CAAC,WAA2D,mBAAKC,iBAAL,WAAoB,aAAa;AAAA,UAC5G,cAAc,CAAC,QAAmB,qBAA6E,mBAAKC,gBAAL,WAAmB,aAAa,QAAQ;AAAA;AAAA,UAGvJ,OAAO,MAA6C,mBAAK,cAAL,WAAkB;AAAA,UACtE,MAAM,MAA6C,mBAAK,aAAL,WAAiB;AAAA,UACpE,OAAO,MAA6C,mBAAK,cAAL,WAAkB;AAAA,UACtE,QAAQ,MAA6C,mBAAK,eAAL,WAAmB;AAAA,UACxE,WAAW,MAA6C,mBAAK,kBAAL,WAAsB;AAAA,UAC9E,OAAO,MAA6C,mBAAK,cAAL,WAAkB;AAAA,UACtE,SAAS,MAA6C,mBAAK,gBAAL,WAAoB;AAAA,UAC1E,QAAQ,CAAC,qBAA+E,mBAAK,sBAAL,WAA0B,aAAa;AAAA,UAE/H,IAAI,CAAC,WAAmB,OAAwC;AAC5D,wBAAY,aAAa,KAAK;AAAA,cAC1B;AAAA,cACA;AAAA,YAAA,CACH;AACM,mBAAA;AAAA,UAAA;AAAA,QAEf;AACA,YAAI,mBAAK,2BAA0B;AAC1B,6BAAA,0BAAyB,MAAM,MAAM,OAAO,SAAS,QAAQ,GAAG,2BAA2B,YAAY,EAAE,GAAG,CAAC;AAAA,QAAA;AAGtH,2BAAKZ,SAAL,WAAY,qDAAqD,YAAY,EAAE,eAAe,YAAY,OAAO;AAE7G,YAAA,YAAY,QAAQ,QAAQ;AAC3B,sBAAY,OAAe,QAAQ;AAAA,YAChC,SAAS,mBAAmB;AAAA,YAC5B,SAAS;AAAA,cACL,WAAWI,GAAO;AAAA,cAClB,MAAM;AAAA,cACN,SAAS;AAAA,gBACL,GAAG,YAAY;AAAA,cACnB;AAAA,cACA;AAAA,YAAA;AAAA,UACJ,CACH;AAAA,QAAA,OACE;AACE,6BAAA,yCAAA,WAAwC,aAAa,mBAAmB,aAAa;AAAA,YACtF,WAAWA,GAAO;AAAA,YAClB,MAAM;AAAA;AAAA,YAEN,SAAS;AAAA,cACL,GAAG,YAAY;AAAA,YACnB;AAAA,YACA;AAAA,aAC+B;AAAA,QAAK;AAIxC,YAAA,CAAC,YAAY,QAAQ,QAAQ;AAC7B,cAAI,QAAQ;AACR,wBAAY,OAAO,GAAG,QAAQ,CAAC,SAAc;AACrC,kBAAA;AACA,mCAAKJ,SAAL,WAAY,MAAM,QAAQ,0EAA0E,IAAI,EAAE;AACrG,mCAAA,kBAAA,WAAiB,QAAQ;AAC9B,oBAAI,mBAAK,YAAW,YAAY,EAAE,GAAG;AAC1B,yBAAA,mBAAK,YAAW,YAAY,EAAE;AACrC,qCAAKA,SAAL,WAAY,MAAM,QAAQ,0DAA0D,YAAY,EAAE,gDAAgD;AAAA,gBAAC;AAAA,uBAElJ,OAAO;AACP,mCAAAC,SAAA,WAAO,MAAM,IAAI,yDAAyD,KAAK,cAAc,YAAY,EAAE,GAAG;AAAA,cAAC;AAAA,YACxH,CACH;AAED,wBAAY,OAAO,GAAG,SAAS,CAAC,UAAe;AACvC,kBAAA;AACA,mCAAKA,SAAL,WAAY,MAAM,IAAI,gEAAgE,KAAK,EAAE;AACxF,mCAAA,kBAAA,WAAiB,SAAS;AAAA,uBAC1BY,QAAO;AACP,mCAAAZ,SAAA,WAAO,MAAM,IAAI,0DAA0DY,MAAK,cAAc,YAAY,EAAE,GAAG;AAAA,cAAC;AAAA,YACzH,CACH;AAAA,UAAA,OACE;AAEF,wBAAY,OAAe,UAAU,CAAC,UAAe;AAC9C,kBAAA;AACA,mCAAKZ,SAAL,WAAY,MAAM,IAAI,mEAAmE,KAAK;AACzF,mCAAA,kBAAA,WAAiB,WAAW;AACjC,oBAAI,mBAAK,YAAW,YAAY,EAAE,GAAG;AAC1B,yBAAA,mBAAK,YAAW,YAAY,EAAE;AACrC,qCAAKD,SAAL,WAAY,MAAM,QAAQ,gEAAgE,YAAY,EAAE,gDAAgD;AAAA,gBAAC;AAAA,uBAExJa,QAAO;AACP,mCAAAZ,SAAA,WAAO,MAAM,IAAI,+DAA+DY,MAAK,cAAc,YAAY,EAAE,GAAG;AAAA,cAAC;AAAA,YAElI;AAGC,wBAAY,OAAe,iBAAiB,CAAC,UAAe;AACrD,kBAAA;AACA,mCAAKZ,SAAL,WAAY,MAAM,IAAI,kFAAkF,KAAK;AACxG,mCAAA,kBAAA,WAAiB,kBAAkB;AAAA,uBACnCY,QAAO;AACP,mCAAAZ,SAAA,WAAO,MAAM,IAAI,sEAAsEY,MAAK,cAAc,YAAY,EAAE,GAAG;AAAA,cAAC;AAAA,YAEzI;AAAA,UAAA;AAAA,QACJ;AAGE,cAAA,iBAAiB,CAAC,SAAc;AAC9B,cAAA;AACA,kBAAMC,yBAA2C;AAEjD,oBAAQA,uBAAsB,SAAS;AAAA,cACvC,KAAK,mBAAmB;AACpB,mCAAKd,SAAL,WAAY;AACZ;AAAA,cACJ,KAAK,mBAAmB;AACf,mCAAA,mBAAA,WAAkB,aAAac,uBAAsB;AAC1D;AAAA,cACJ,KAAK,mBAAmB;AACf,mCAAA,oBAAA,WAAmB,aAAaA,uBAAsB;AAC3D;AAAA,cACJ,KAAK,mBAAmB;AACf,sCAAA,oDAAA,WAAoB,aAAaA,uBAAsB;AAC5D;AAAA,cACJ,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAKf,sCAAA,uDAAA,WAAuB,aAAaA,uBAAsB;AAC/D;AAAA,cACJ;AACI,mCAAKZ,QAAL,WAAW,gDAAgDY,uBAAsB,OAAO;AAAA,YAAG;AAAA,mBAE1F,OAAO;AACP,+BAAAb,SAAA,WAAO,uCAAuC,KAAK;AAClD,kBAAA;AAAA,UAAA;AAAA,QAEd;AAEI,YAAA;AACJ,YAAI,QAAQ;AACP,sBAAY,YAAoB,GAAG,WAAW,CAAC,SAAc;AAClC,oCAAA;AACxB,2BAAe,qBAAqB;AAAA,UAAA,CACvC;AAAA,QAAA,OACE;AAKF,sBAAY,YAAoB,iBAAiB,WAAW,CAAC,SAAuB;AACjF,oCAAwB,KAAK;AAC7B,2BAAe,qBAAqB;AAAA,UAAA,CACvC;AAAA,QAAA;AAGA,2BAAA,YAAW,YAAY,EAAE,IAAI;AAElC,2BAAKD,SAAL,WAAY,kBAAkB,YAAY,EAAE;AAErC,eAAA;AAAA,eACF,OAAO;AACP,2BAAAC,SAAA,WAAO,sBAAsB,KAAK;AACjC,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,6CAAoB,OAAO,aAAwB,kBAAsD;AACjG,UAAA;AACA,cAAM,WAAsB,mBAAK,oBAAL,WAAwB,aAAa;AACrD,oBAAA,UAAU,SAAS,EAAE,IAAI;AACrC,cAAM,SAAS,MAAM,mBAAK,sBAAL,WAA0B,aAAa;AAC5D,YAAI,SAAS,6BAA6B;AAC7B,mBAAA,4BAA4B,MAAM,MAAM,MAAM,kBAAkB,SAAS,EAAE,mBAAmB,YAAY,EAAE,GAAG,CAAC;AAAA,QAAA;AAE7H,YAAI,QAAQ;AACR,6BAAKD,SAAL,WAAY,MAAM,MAAM,kBAAkB,SAAS,EAAE,mBAAmB,YAAY,EAAE,cAAc,KAAK,UAAU,MAAM,CAAC,GAAG;AAAA,QAAC;AAE3H,eAAA;AAAA,eACF,OAAO;AACP,2BAAAC,SAAA,WAAO,gCAAgC,KAAK;AAC3C,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,6CAAuB,OAAO,UAAqB,aAA6D;AAC5G,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKD,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,0CAAoB,CAAC,UAAqB,oBAAuD;AACzF,UAAA;AACM,cAAA,EAAE,WAAW;AAEnB,YAAI,SAAS,UAAU,OAAO,EAAE,GAAG;AAC/B,gBAAM,WAAsB,SAAS,UAAU,OAAO,EAAE;AACnD,6BAAA,iBAAA,WAAgB,UAAU;AAC3B,cAAA,SAAS,+BAA+B,mBAAK,sBAAqB;AAClE,+BAAK,qBAAoB,iBAAiB,SAAS,6BAA6B,SAAS,cAAc;AAAA,UAAA;AAE3G,6BAAK,kBAAL,WAAsB,aAAa,UAAU,OAAO;AAAA,QAAE;AAAA,eAErD,OAAO;AACP,2BAAAC,SAAA,WAAO,+BAA+B,KAAK;AAC1C,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,yCAAmB,CAAC,WAAmB,aAAwB;AACvD,UAAA;AACS,iBAAA,aAAa,QAAQ,CAAM,OAAA;AAChC,cAAI,GAAG,UAAU,cAAc,SAAS,MAAM,GAAG;AAC7C,eAAG,GAAG,QAAQ;AAAA,UAAA;AAAA,QAClB,CACH;AAAA,eACI,OAAO;AACP,2BAAAA,SAAA,WAAO,8BAA8B,KAAK;AACzC,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,yCAAmB,CAAC,WAAmB,UAAqB,aAAqB;AACzE,UAAA;AACI,YAAA,SAAS,cAAc,QAAQ,GAAG;AAC5B,gBAAA,gBAAgC,SAAS,cAAc,QAAQ;AACrE,wBAAc,QAAQ,CAAM,OAAA;AACxB,gBAAI,GAAG,UAAU,cAAc,SAAS,MAAM,GAAG;AAC7C,iBAAG,GAAG,SAAS,UAAU,QAAQ,CAAC;AAAA,YAAA;AAAA,UACtC,CACH;AAAA,QAAA;AAAA,eAEA,OAAO;AACP,2BAAAA,SAAA,WAAO,8BAA8B,KAAK;AACzC,cAAA;AAAA,MAAA;AAAA,IAEd;AAKA;AAAA;AAAA;AAAA,2CAAqB,CAAC,UAAqB,oBAAuD;AAC1F,UAAA;AACM,cAAA,EAAE,WAAW;AAEnB,YAAI,SAAS,UAAU,OAAO,EAAE,GAAG;AAC/B,gBAAM,WAAsB,SAAS,UAAU,OAAO,EAAE;AACxD,gBAAM,gBAAgB,SAAS;AAC/B,mBAAS,QAAQ,OAAO;AACpB,cAAA,CAAC,SAAS,eAAe;AACzB,qBAAS,gBAAgB,CAAE;AAAA,UAAA;AAE/B,mBAAS,cAAc,KAAK;AAAA,YACxB,+BAAe,KAAK;AAAA,YACpB,QAAQ,EAAE,GAAG,OAAO;AAAA,UAAA,CACvB;AACI,6BAAA,iBAAA,WAAgB,UAAU;AAC/B,6BAAKD,SAAL,WAAY,mDAAmD,SAAS,EAAE,cAAc,OAAO,EAAE,sBAAsB,aAAa,aAAa,OAAO,KAAK;AAC7J,6BAAK,kBAAL,WAAsB,eAAe,UAAU,OAAO;AAAA,QAAE;AAAA,eAEvD,OAAO;AACP,2BAAAC,SAAA,WAAO,gCAAgC,KAAK;AAC3C,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,2CAAqB,CAAC,UAAqB,kBAA6C;AACpF,YAAM,WAAWG,GAAO;AACxB,UAAI,mBAAK,2BAA0B;AAC/B,2BAAK,0BAAyB,MAAM,MAAM,OAAO,+BAA+B,QAAQ,GAAG,CAAC;AAAA,MAAA;AAEhG,YAAM,qBAA0C;AAAA;AAAA;AAAA,QAG5C,KAAK,GACf,SAAS,QAAQ,QAAQ,GAAG,eAAe,mBAAmB,GAAG,SAAS,QAAQ,OAAO,IAAI,SAAS,QAAQ,SAAS,GACvH,eAAe,aAAa,GAC5B,SAAS,EAAE,GACX,eAAe,SAAS,GACxB,QAAQ;AAAA,QACE,UAAU,SAAS,QAAQ;AAAA;AAAA,QAC3B,WAAW,GAAG,SAAS,QAAQ,OAAO,IAAI,SAAS,QAAQ,SAAS;AAAA;AAAA,QACpE,UAAU,GAAG,SAAS,EAAE;AAAA;AAAA,QACxB,IAAI;AAAA;AAAA,MACR;AAEA,YAAM,WAAsB;AAAA,QACxB,IAAI;AAAA,QACJ,UAAU,SAAS;AAAA,QACnB,iBAAiB,mBAAK;AAAA,QACtB,OAAO,aAAa;AAAA,QACpB,WAAW;AAAA,QACX,6BAA8B,mBAAK,4BAA4B,mBAAK,0BAAyB,+BAA+B,kBAAkB,IAAI;AAAA,QAClJ;AAAA,QACA,SAAS;AAAA,QACT,eAAe,CAAE;AAAA,QACjB,gBAAgB;AAAA,UACZ,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,qBAAqB;AAAA,UACrB,0BAA0B;AAAA,UAC1B,0BAA0B;AAAA,UAC1B,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,UACP,UAAU;AAAA,UACV,SAAS;AAAA,UACT,oBAAoB;AAAA,UACpB,SAAS,CAAE;AAAA,UACX,YAAY;AAAA,UACZ,IAAI;AAAA,UACJ,IAAI;AAAA,QACR;AAAA,QACA,OAAO,MAA2C,mBAAKC,eAAL,WAAkB,UAAU;AAAA,QAC9E,MAAM,MAA2C,mBAAKC,cAAL,WAAiB,UAAU;AAAA,QAC5E,OAAO,MAA2C,mBAAKC,eAAL,WAAkB,UAAU;AAAA,QAC9E,QAAQ,MAA2C,mBAAKC,gBAAL,WAAmB,UAAU;AAAA,QAChF,OAAO,MAA2C,mBAAKE,eAAL,WAAkB,UAAU;AAAA,QAC9E,SAAS,MAA2C,mBAAKC,iBAAL,WAAoB,UAAU;AAAA,QAClF,WAAW,MAA2C,mBAAKF,mBAAL,WAAsB,UAAU;AAAA,QACtF,QAAQ,CAAC,qBAA6E,mBAAKG,gBAAL,WAAmB,UAAU,UAAU;AAAA,QAC7H,IAAI,CAAC,WAAmB,OAAwC;AAC5D,cAAI,CAAC,SAAS,cAAc,SAAS,EAAE,GAAG;AACtC,qBAAS,cAAc,SAAS,EAAE,IAAI,CAAE;AAAA,UAAA;AAE5C,mBAAS,cAAc,SAAS,EAAE,EAAE,KAAK;AAAA,YACrC;AAAA,YACA;AAAA,UAAA,CACH;AACM,iBAAA;AAAA,QACX;AAAA,QACA,UAAU;AAAA,MACd;AAEO,aAAA;AAAA,IACX;AAGA,gEAA0C,CAAC,UAAqB,SAA4B,SAA8C,mBAAyB;AAC3J,UAAA;AACA,YAAI,gBAAgB;AAChB,6BAAKZ,SAAL,WAAY;AACH,mBAAA,OAAO,YAAY,EAAE,SAAS,QAAW,GAAA,CAAC,cAAc,CAAC;AAClE,6BAAKA,SAAL,WAAY;AAAA,QAAqD,OAC9D;AACH,6BAAKA,SAAL,WAAY;AACZ,mBAAS,OAAO,YAAY,EAAE,SAAS,SAAS;AAAA,QAAA;AAAA,eAE/C,OAAO;AACP,2BAAAA,SAAA,WAAO,qDAAqD,KAAK;AAChE,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,uBAAAK,eAAe,OAAO,UAAqB,aAA6D;AACpG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKL,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAM,cAAc,OAAO,UAAqB,aAA6D;AACnG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKN,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,0BAA0B,KAAK;AACrC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAU,eAAe,OAAO,UAAqB,aAA6D;AACpG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKV,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAW,iBAAiB,OAAO,UAAqB,aAA6D;AACtG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKX,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,6BAA6B,KAAK;AACxC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAS,mBAAmB,OAAO,UAAqB,aAA6D;AACxG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKT,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAO,eAAe,OAAO,UAAqB,aAA6D;AACpG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKP,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAQ,gBAAgB,OAAO,UAAqB,aAA6D;AACrG,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKR,SAAL,WAAY;AACZ,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,uBAAAY,gBAAgB,OAAO,UAAqB,UAAqB,qBAA6E;AAC1I,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKZ,SAAL,WAAY;AACZ,mBAAS,QAAQ,mBAAmB,EAAE,GAAG,iBAAiB;AAC1D,gBAAM,UAAU,mBAAmB;AACnC,gBAAM,YAAY,mBAAK,uBAAL,WAA2B,SAAS,QAAQ;AAC9D,gBAAM,UAAuC;AAAA,YACzC;AAAA,YACA,QAAQ,KAAK,0BAA0B,QAAQ;AAAA,UACnD;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAA,SAAA,WAAO,2BAA2B,KAAK;AACtC,gBAAA;AAAA,QAAA;AAAA,MACV,CACH;AAAA,IACL;AAEA,qCAAe,OAAO,aAA+D;AACjF,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,MAAA;AAE9B,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAEA,oCAAc,OAAO,aAA+D;AAChF,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,MAAM;AAAA,MAAA;AAE7B,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAEA,qCAAe,OAAO,aAA+D;AACjF,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,MAAA;AAE9B,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAEA,sCAAgB,OAAO,aAA+D;AAClF,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,QAAQ;AAAA,MAAA;AAE/B,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAEA,qCAAe,OAAO,aAA+D;AACjF,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,MAAA;AAE9B,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAEA,uCAAiB,OAAO,aAA+D;AACnF,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,SAAS;AAAA,MAAA;AAEhC,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAGA;AAAA,6CAAuB,OAAO,UAAqB,qBAA+E;AAC9H,YAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,YAAM,YAAmD,CAAE;AAC3D,eAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,gBAAgB,CAAC;AAAA,MAAA;AAE/C,aAAA,QAAQ,IAAI,SAAS;AAAA,IAChC;AAEA,yCAAmB,OAAO,aAA+D;AACjF,UAAA;AAEA,cAAM,UAAU,OAAO,OAAO,SAAS,SAAS;AAChD,cAAM,YAAmD,CAAE;AAC3D,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK,QAAQ,CAAC,EAAE,WAAW;AAAA,QAAA;AAEnC,cAAA,SAAS,QAAQ,IAAI,SAAS;AAEpC,YAAI,SAAS,QAAQ;AACjB,qBAAW,MAAM;AACb,qBAAS,OAAO,UAAU;AAC1B,+BAAKA,SAAL,WAAY,uBAAuB,SAAS,EAAE;AAC9C,gBAAI,mBAAK,YAAW,SAAS,EAAE,GAAG;AACvB,qBAAA,mBAAK,YAAW,SAAS,EAAE;AAClC,iCAAKA,SAAL,WAAY,MAAM,QAAQ,0DAA0D,SAAS,EAAE,gDAAgD;AAAA,YAAC;AAAA,aAErJ,GAAG;AAAA,QAAA;AAGH,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,8BAA8B,KAAK;AAC/C,eAAO,CAAE;AAAA,MAAA;AAAA,IAEjB;AAEA,kDAAyB,MAAwB;AACzC,UAAA;AAEA,YAAI,oBAAsC;AAC/B,mBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACxD,cAAI,mBAAmB;AACf,gBAAA,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,kBAAkB,SAAS,EAAE,QAAQ;AACvE,kCAAA;AAAA,YAAA;AAAA,UACxB,OACG;AACiB,gCAAA;AAAA,UAAA;AAAA,QACxB;AAEG,eAAA;AAAA,eACF,OAAO;AACP,2BAAAC,SAAA,WAAO,sCAAsC,KAAK;AAChD,eAAA;AAAA,MAAA;AAAA,IAEf;AAEA,yCAAgB,MAAwB;AAChC,UAAA;AAEA,YAAI,aAA+B;AACxB,mBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACxD,cAAI,YAAY;AACR,gBAAA,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,WAAW,SAAS,EAAE,QAAQ;AACvE,2BAAA;AAAA,YAAA;AAAA,UACjB,OACG;AACU,yBAAA;AAAA,UAAA;AAAA,QACjB;AAEG,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,6BAA6B,KAAK;AACvC,eAAA;AAAA,MAAA;AAAA,IAEf;AAUA,+CAAyB,OAAO,WAC5B,SACA,YAAuE;AACnE,UAAA;AACA,cAAM,YAAqD,CAAE;AAE7D,cAAM,UAAU,OAAO,OAAO,KAAK,SAAS,EAAE,OAAO,CAAC,aAAc,UAAU,WAAW,IAAI,OAAO,UAAU,SAAS,SAAS,EAAE,CAAE;AAEpI,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,cAAI,YAAY,UAAU;AACtB,sBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAQ,CAAC;AAAA,UAAA,OACzC;AACH,sBAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,GAAG;AAAA,UAAA;AAAA,QACxC;AAGJ,cAAM,eAAe,MAAM,QAAQ,IAAI,SAAS;AAEhD,cAAM,YAA0C,CAAE;AAClD,iBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,oBAAU,KAAK;AAAA,YACX,iBAAiB,mBAAK;AAAA,YACtB,UAAU,QAAQ,CAAC,EAAE;AAAA,YACrB,4BAA4B,aAAa,CAAC;AAAA,UAAA,CACf;AAAA,QAAA;AAE5B,eAAA;AAAA,eACF,OAAO;AACZ,2BAAKA,SAAL,WAAY,sCAAsC,OAAO,iBAAiB,SAAS,aAAa,KAAK;AACrG,eAAO,CAAE;AAAA,MAAA;AAAA,IAEjB;AAEA,wCAAe,OAAO,cAA+D;AAC1E,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,uCAAc,OAAO,cAA+D;AACzE,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,wCAAe,OAAO,cAA+D;AAC1E,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,yCAAgB,OAAO,cAA+D;AAC3E,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,0CAAiB,OAAO,cAA+D;AAC5E,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,wCAAe,OAAO,cAA+D;AAC1E,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,4CAAmB,OAAO,cAA+D;AAC9E,aAAA,mBAAK,wBAAL,WAA4B,WAAW;AAAA,IAClD;AAEA,yCAAgB,OAAO,WAAqB,YAAsE;AAC9G,aAAO,mBAAK,wBAAL,WAA4B,WAAW,UAAU;AAAA,IAC5D;AAEA,yDAAmC,OAAO,UAAkB,WACxD,SACA,qBAAgF;AAC5E,UAAA;AACI,YAAA,mBAAK,YAAW,QAAQ,GAAG;AACvB,cAAA,UAAU,WAAW,GAAG;AACxB,gBAAI,YAAY,UAAU;AACtB,qBAAO,mBAAK,YAAW,QAAQ,EAAE,OAAO,EAAE,gBAAiB;AAAA,YAAA,OACxD;AACH,qBAAO,mBAAK,YAAW,QAAQ,EAAE,OAAO,EAAE;AAAA,YAAA;AAAA,UAC9C,OACG;AACH,kBAAM,YAAmD,CAAE;AAErD,kBAAA,UAAU,OAAO,OAAO,mBAAK,YAAW,QAAQ,EAAE,SAAS,EAC5D,OAAO,CAAC,aAAc,UAAU,WAAW,IAAI,OAAO,UAAU,SAAS,SAAS,EAAE,CAAE;AAE3F,qBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,kBAAI,YAAY,UAAU;AACtB,0BAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,EAAE,gBAAiB,CAAC;AAAA,cAAA,OAClD;AACH,0BAAU,KAAK,QAAQ,CAAC,EAAE,OAAO,GAAG;AAAA,cAAA;AAAA,YACxC;AAGJ,kBAAM,eAAe,MAAM,QAAQ,IAAI,SAAS;AAEhD,kBAAM,YAA0C,CAAE;AAClD,qBAAS,IAAE,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACnC,wBAAU,KAAK,EAAE,GAAG,aAAa,CAAC,GAAG;AAAA,YAAA;AAElC,mBAAA;AAAA,UAAA;AAAA,QACX;AAEJ,eAAO,CAAE;AAAA,eACJ,OAAO;AACP,2BAAAA,SAAA,WAAO,+CAA+C,OAAO,gBAAgB,QAAQ,iBAAiB,SAAS,aAAa,KAAK;AACtI,eAAO,CAAE;AAAA,MAAA;AAAA,IAEjB;AAEA,uCAAc,OAAO,UAAkB,cAA+D;AAClG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,wCAAe,OAAO,UAAkB,cAA+D;AACnG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,wCAAe,OAAO,UAAkB,cAA+D;AACnG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,yCAAgB,OAAO,UAAkB,cAA+D;AACpG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,0CAAiB,OAAO,UAAkB,cAA+D;AACrG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,wCAAe,OAAO,UAAkB,cAA+D;AACnG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,4CAAmB,OAAO,UAAkB,cAA+D;AACvG,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW;AAAA,IACtE;AAEA,yCAAgB,OAAO,UAAkB,WAAqB,qBAA+E;AACzI,aAAO,mBAAK,kCAAL,WAAsC,UAAU,WAAW,UAAU;AAAA,IAChF;AAuCA,wCAAkB,CAAC,UAAqB,WAAoB;AACpD,UAAA;AACA,iBAAS,YAAY,OAAO;AAC5B,iBAAS,QAAQ,OAAO;AACxB,iBAAS,iBAAiB,EAAE,GAAG,OAAO,eAAe;AAAA,eAChD,OAAO;AACP,2BAAAA,SAAA,WAAO,8BAA8B,KAAK;AAAA,MAAG;AAAA,IAE1D;AAEA,mDAA6B,CAAC,YAAyC;AAE/D,UAAA;AACA,YAAI,mBAAK,YAAW,QAAQ,QAAQ,GAAG;AACnC,gBAAM,YAAY,mBAAK,YAAW,QAAQ,QAAQ,EAAE;AACpD,cAAI,WAAW;AACH,oBAAA,QAAQ,QAAQ,CAAC,WAAW;AAC5B,kBAAA,UAAU,OAAO,EAAE,GAAG;AACtB,mCAAK,iBAAL,WAAqB,UAAU,OAAO,EAAE,GAAG;AAAA,cAAM;AAAA,YACrD,CACH;AAAA,UAAA;AAAA,QACL;AAAA,eAEC,OAAO;AACP,2BAAAA,SAAA,WAAO,yCAAyC,KAAK;AAAA,MAAG;AAAA,IAErE;AAEA,kDAA4B,OAAO,aAAoD;AAC/E,UAAA;AACA,cAAM,SAAS,MAAM,mBAAK,gCAAL,WAAoC,UAAU,mBAAmB;AAEjF,2BAAA,4BAAA,WAA2B,OAAO;AAChC,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,wCAAwC,KAAK;AACnD,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,mDAA6B,YAA0C;AAC/D,UAAA;AACA,cAAM,SAAS,MAAM,QAAQ,IAAI,OAAO,OAAO,mBAAK,WAAU,EAAE,IAAI,cAAY,mBAAK,gCAAL,WAAoC,UAAU,mBAAmB,WAAW,CAAC;AAEtJ,eAAA,QAAQ,CAAC,mBAAsC;AAC7C,6BAAA,4BAAA,WAA2B,eAAe;AAAA,QAAgC,CAClF;AACM,eAAA;AAAA,eACF,OAAO;AACP,2BAAAA,SAAA,WAAO,yCAAyC,KAAK;AACpD,cAAA;AAAA,MAAA;AAAA,IAEd;AAEA,8CAAwB,CAAC,SAAc,QAAa,YAA+B;AAC/E,YAAM,YAAYG,GAAO;AACpB,yBAAA,WAAU,SAAS,IAAI;AAAA,QACxB,SAAS,WAAW,MAAM;AACd,iBAAA,mBAAK,WAAU,SAAS;AAChC,iBAAO,6CAA6C,SAAS,gBAAgB,OAAO,GAAG;AAAA,WACxF,GAAI;AAAA,QACP,gBAAgB,CAAC,YAA+B;AAC5C,kBAAQ,OAAO;AAAA,QAAA;AAAA,MAEvB;AACO,aAAA;AAAA,IACX;AAEA,uDAAiC,OAAO,UAAqB,YAA2D;AACpH,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChC,YAAA;AACA,6BAAKJ,SAAL,WAAY;AACZ,gBAAM,YAAYI,GAAO;AACpB,6BAAA,WAAU,SAAS,IAAI;AAAA,YACxB,SAAS,WAAW,MAAM;AACd,qBAAA,mBAAK,WAAU,SAAS;AAChC,qBAAO,6CAA6C,SAAS,gBAAgB,OAAO,GAAG;AAAA,eACxF,GAAI;AAAA,YACP,gBAAgB,CAACW,aAA+B;AAC5C,sBAAQA,QAAO;AAAA,YAAA;AAAA,UAEvB;AACA,gBAAM,UAAwC;AAAA,YAC1C;AAAA,UACJ;AACA,mBAAS,YAAY,YAAY,EAAE,SAAS,SAAS;AAAA,iBAChD,OAAO;AACP,6BAAAd,SAAA,WAAO,6CAA6C,KAAK;AAAA,QAAG;AAAA,MACrE,CACH;AAAA,IACL;AA3sCI,uBAAK,KAAMG,GAAO;AAClB,QAAI,SAAS;AACT,yBAAKP,WAAW;AAAA,IAAA,OACb;AACH,yBAAKA,WAAW,CAAE;AAAA,IAAA;AAGlB,QAAA,mBAAKA,WAAS,6BAA6B;AACtC,yBAAA,0BAA2B,mBAAKA,WAAS;AACzC,yBAAA,qBAAsB,IAAI,mBAAmB;AAAA,IAAA;AAGtD,uBAAKM,uBAAL;AAAA,EAA0B;AAAA,EAiB9B,0BAA0B,UAA8B;AAChD,QAAA;AACO,aAAA;AAAA,QACH,IAAI,SAAS;AAAA,QACb,oBAAoB,EAAE,GAAG,SAAS,mBAAmB;AAAA,QACrD,gBAAgB,EAAE,GAAG,SAAS,eAAe;AAAA,QAC7C,WAAW,SAAS;AAAA,QACpB,SAAS,EAAE,GAAG,SAAS,QAAQ;AAAA,QAC/B,OAAO,SAAS;AAAA,QAChB,UAAU,SAAS;AAAA,QACnB,iBAAiB,mBAAK;AAAA,MAC1B;AAAA,aACK,OAAO;AACP,yBAAAF,SAAA,WAAO,wCAAwC,KAAK;AACnD,YAAA;AAAA,IAAA;AAAA,EACV;AAAA,EAGJ,iBAAiB,UAA8B;AACvC,QAAA;AACM,YAAA,SAAS,KAAK,0BAA0B,QAAQ;AACtD,UAAI,SAAS,eAAe;AACxB,eAAO,gBAAgB,CAAE,GAAG,SAAS,aAAc;AAAA,MAAA;AAEhD,aAAA;AAAA,aACF,OAAO;AACP,yBAAAA,SAAA,WAAO,+BAA+B,KAAK;AAC1C,YAAA;AAAA,IAAA;AAAA,EACV;AAAA,EAGJ,sBAAsB,UAAuC;AACrD,QAAA;AACA,YAAM,SAA2B;AAAA,QAC7B,IAAI,SAAS;AAAA,QACb,WAAW,SAAS;AAAA,QACpB,OAAO,SAAS;AAAA,MACpB;AACA,UAAI,SAAS,WAAW,SAAS,QAAQ,YAAY;AACjD,eAAO,UAAU;AAAA,UACb,YAAY,EAAE,GAAG,SAAS,QAAQ,WAAW;AAAA,QACjD;AAAA,MAAA;AAEG,aAAA;AAAA,aACF,OAAO;AACP,yBAAAA,SAAA,WAAO,+BAA+B,KAAK;AAC1C,YAAA;AAAA,IAAA;AAAA,EACV;AAAA,EAGJ,iBAAiB,UAA8B;AACvC,QAAA;AACA,YAAM,EAAE,IAAI,SAAS,WAAW,gBAAoB,IAAA;AACpD,YAAM,aAAsB;AAAA,QACxB;AAAA,QACA,SAAS,EAAE,GAAG,QAAQ;AAAA,QACtB,SAAS,CAAE;AAAA,QACX;AAAA,MACJ;AACA,iBAAW,CAAG,EAAA,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AACjD,mBAAW,QAAqB,SAAS,EAAE,IAAI,KAAK,iBAAiB,QAAQ;AAAA,MAAA;AAE3E,aAAA;AAAA,aACF,OAAO;AACP,yBAAAA,SAAA,WAAO,+BAA+B,KAAK;AAC1C,YAAA;AAAA,IAAA;AAAA,EACV;AAAA,EAGJ,sBAAsB,UAAqB,QAA0C;AAC7E,QAAA;AACA,YAAM,aAA+B;AAAA,QACjC,IAAI,SAAS;AAAA,QACb,SAAS,CAAA;AAAA,MACb;AAGA,aAAO,OAAO,SAAS,SAAS,EAAE,OAAO,CAAA,aAAY,OAAO,WAAW,IAAI,OAAO,OAAO,SAAS,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,aAAa;AACpI,mBAAW,QAAgB,SAAS,EAAE,IAAI,KAAK,sBAAsB,QAAQ;AAAA,MAAA,CACjF;AAEM,aAAA;AAAA,aACF,OAAO;AACP,yBAAAA,SAAA,WAAO,oCAAoC,KAAK;AAC/C,YAAA;AAAA,IAAA;AAAA,EACV;AAAA,EA6EJ,IAAI,KAAa;AACb,WAAO,mBAAK;AAAA,EAAA;AAAA,EAiChB,IAAI,YAAuC;AACvC,WAAO,mBAAK;AAAA,EAAA;AAAA,EAwtBhB,IAAI,UAAiC;AACjC,WAAO,mBAAKJ;AAAA,EAAA;AAAA,EAGhB,IAAI,QAAQ,SAAgC;AACxC,uBAAKA,WAAW;AAAA,EAAA;AA6QxB;AAttCI;AACAA,YAAA;AACA;AACA;AACA;AACA;AACA;AACAC,yBAAA;AAkBAC,eAAA;AAUAC,UAAA;AACAC,UAAA;AACAC,SAAA;AA0FAC,wBAAA;AA0XA;AAkBA;AAkBA;AAaA;AAmBA;AAyBA;AAyEA;AAgBAE,gBAAA;AAkBAC,eAAA;AAkBAI,gBAAA;AAkBAC,kBAAA;AAkBAF,oBAAA;AAkBAF,gBAAA;AAkBAC,iBAAA;AAkBAI,iBAAA;AAmBA;AASA;AASA;AASA;AASA;AASA;AAUA;AASA;AA4EA;AAiEA;AA/gCG;AAwlCH,wBAAA,SAAoB,aAAwB,SAAgC;AACpE,MAAA;AACA,UAAM,YAAY,QAAQ;AACtB,QAAA,mBAAK,WAAU,SAAS,GAAG;AACrB,YAAA,gBAAgB,mBAAK,WAAU,SAAS;AAC9C,mBAAa,cAAc,OAAO;AAClC,YAAM,gBAAmC;AAAA,QACrC,SAAS,mBAAmB;AAAA,QAC5B,SAAS;AAAA,UACL;AAAA,UACA,UAAU,YAAY;AAAA,UACtB,SAAS,QAAQ;AAAA,QAAA;AAAA,MAEzB;AACO,aAAA,mBAAK,WAAU,SAAS;AAC/B,oBAAc,eAAe,aAAa;AAAA,IAAA;AAAA,WAEzC,OAAO;AACP,uBAAAX,SAAA,WAAO,kCAAkC,KAAK;AAAA,EAAG;AAC1D;AAGJ,2BAAA,SAAuB,aAAwB,SAA8C;AACrF,MAAA;AACA,UAAM,YAAY,QAAQ;AACtB,QAAA,mBAAK,WAAU,SAAS,GAAG;AACrB,YAAA,gBAAgB,mBAAK,WAAU,SAAS;AAC9C,mBAAa,cAAc,OAAO;AAClC,YAAM,aAAyC,EAAE,GAAG,QAAQ,0BAA0B;AAC/E,aAAA,mBAAK,WAAU,SAAS;AAC/B,oBAAc,eAAe,UAAU;AAAA,IAAA;AAAA,WAEtC,OAAO;AACP,uBAAAA,SAAA,WAAO,qCAAqC,KAAK;AAAA,EAAG;AAC7D;AAGJ;AAUA;AAkBA;AAYA;AAcA;AAcA;","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,13,14,15,16]}
1
+ {"version":3,"file":"stsrunnerframework.mjs","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","chalk","styles","ansiStyles","require$$2","require$$3","_a","_options","_archiveDeleteTimeout","_logMessage","_debug","_error","_warn","_processLoopExecutor","uuidv4","_StartRunner","_StopRunner","_PauseRunner","_ResumeRunner","_TerminateRunner","_ResetRunner","_ExecuteRunner","_UpdateRunner","error","publishMessagePayload","payload"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,13,14,15,16]}