Index: frontend/node_modules/tsutils/util/control-flow.d.ts
===================================================================
--- frontend/node_modules/tsutils/util/control-flow.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/control-flow.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+import * as ts from 'typescript';
+export declare function endsControlFlow(statement: ts.Statement | ts.BlockLike, checker?: ts.TypeChecker): boolean;
+export declare type ControlFlowStatement = ts.BreakStatement | ts.ContinueStatement | ts.ReturnStatement | ts.ThrowStatement | ts.ExpressionStatement & {
+    expression: ts.CallExpression;
+};
+export interface ControlFlowEnd {
+    /**
+     * Statements that may end control flow at this statement.
+     * Does not contain control flow statements that jump only inside the statement, for example a `continue` inside a nested for loop.
+     */
+    readonly statements: ReadonlyArray<ControlFlowStatement>;
+    /** `true` if control flow definitely ends. */
+    readonly end: boolean;
+}
+export declare function getControlFlowEnd(statement: ts.Statement | ts.BlockLike, checker?: ts.TypeChecker): ControlFlowEnd;
+export declare enum SignatureEffect {
+    Never = 1,
+    Asserts = 2
+}
+/**
+ * Dermines whether a top level CallExpression has a control flow effect according to TypeScript's rules.
+ * This handles functions returning `never` and `asserts`.
+ */
+export declare function callExpressionAffectsControlFlow(node: ts.CallExpression, checker: ts.TypeChecker): SignatureEffect | undefined;
Index: frontend/node_modules/tsutils/util/control-flow.js
===================================================================
--- frontend/node_modules/tsutils/util/control-flow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/control-flow.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,296 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.callExpressionAffectsControlFlow = exports.SignatureEffect = exports.getControlFlowEnd = exports.endsControlFlow = void 0;
+const ts = require("typescript");
+const node_1 = require("../typeguard/node");
+const util_1 = require("./util");
+function endsControlFlow(statement, checker) {
+    return getControlFlowEnd(statement, checker).end;
+}
+exports.endsControlFlow = endsControlFlow;
+const defaultControlFlowEnd = { statements: [], end: false };
+function getControlFlowEnd(statement, checker) {
+    return node_1.isBlockLike(statement) ? handleBlock(statement, checker) : getControlFlowEndWorker(statement, checker);
+}
+exports.getControlFlowEnd = getControlFlowEnd;
+function getControlFlowEndWorker(statement, checker) {
+    switch (statement.kind) {
+        case ts.SyntaxKind.ReturnStatement:
+        case ts.SyntaxKind.ThrowStatement:
+        case ts.SyntaxKind.ContinueStatement:
+        case ts.SyntaxKind.BreakStatement:
+            return { statements: [statement], end: true };
+        case ts.SyntaxKind.Block:
+            return handleBlock(statement, checker);
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.WhileStatement:
+            return handleForAndWhileStatement(statement, checker);
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.ForInStatement:
+            return handleForInOrOfStatement(statement, checker);
+        case ts.SyntaxKind.DoStatement:
+            return matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);
+        case ts.SyntaxKind.IfStatement:
+            return handleIfStatement(statement, checker);
+        case ts.SyntaxKind.SwitchStatement:
+            return matchBreakOrContinue(handleSwitchStatement(statement, checker), node_1.isBreakStatement);
+        case ts.SyntaxKind.TryStatement:
+            return handleTryStatement(statement, checker);
+        case ts.SyntaxKind.LabeledStatement:
+            return matchLabel(getControlFlowEndWorker(statement.statement, checker), statement.label);
+        case ts.SyntaxKind.WithStatement:
+            return getControlFlowEndWorker(statement.statement, checker);
+        case ts.SyntaxKind.ExpressionStatement:
+            if (checker === undefined)
+                return defaultControlFlowEnd;
+            return handleExpressionStatement(statement, checker);
+        default:
+            return defaultControlFlowEnd;
+    }
+}
+function handleBlock(statement, checker) {
+    const result = { statements: [], end: false };
+    for (const s of statement.statements) {
+        const current = getControlFlowEndWorker(s, checker);
+        result.statements.push(...current.statements);
+        if (current.end) {
+            result.end = true;
+            break;
+        }
+    }
+    return result;
+}
+function handleForInOrOfStatement(statement, checker) {
+    const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);
+    end.end = false; // loop body is guaranteed to be executed
+    return end;
+}
+function handleForAndWhileStatement(statement, checker) {
+    const constantCondition = statement.kind === ts.SyntaxKind.WhileStatement
+        ? getConstantCondition(statement.expression)
+        : statement.condition === undefined || getConstantCondition(statement.condition);
+    if (constantCondition === false)
+        return defaultControlFlowEnd; // loop body is never executed
+    const end = matchBreakOrContinue(getControlFlowEndWorker(statement.statement, checker), node_1.isBreakOrContinueStatement);
+    if (constantCondition === undefined)
+        end.end = false; // can't be sure that loop body is executed at all
+    return end;
+}
+/** Simply detects `true` and `false` in conditions. That matches TypeScript's behavior. */
+function getConstantCondition(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.TrueKeyword:
+            return true;
+        case ts.SyntaxKind.FalseKeyword:
+            return false;
+        default:
+            return;
+    }
+}
+function handleIfStatement(node, checker) {
+    switch (getConstantCondition(node.expression)) {
+        case true:
+            // else branch is never executed
+            return getControlFlowEndWorker(node.thenStatement, checker);
+        case false:
+            // then branch is never executed
+            return node.elseStatement === undefined
+                ? defaultControlFlowEnd
+                : getControlFlowEndWorker(node.elseStatement, checker);
+    }
+    const then = getControlFlowEndWorker(node.thenStatement, checker);
+    if (node.elseStatement === undefined)
+        return {
+            statements: then.statements,
+            end: false,
+        };
+    const elze = getControlFlowEndWorker(node.elseStatement, checker);
+    return {
+        statements: [...then.statements, ...elze.statements],
+        end: then.end && elze.end,
+    };
+}
+function handleSwitchStatement(node, checker) {
+    let hasDefault = false;
+    const result = {
+        statements: [],
+        end: false,
+    };
+    for (const clause of node.caseBlock.clauses) {
+        if (clause.kind === ts.SyntaxKind.DefaultClause)
+            hasDefault = true;
+        const current = handleBlock(clause, checker);
+        result.end = current.end;
+        result.statements.push(...current.statements);
+    }
+    result.end && (result.end = hasDefault || checker !== undefined && util_1.hasExhaustiveCaseClauses(node, checker));
+    return result;
+}
+function handleTryStatement(node, checker) {
+    let finallyResult;
+    if (node.finallyBlock !== undefined) {
+        finallyResult = handleBlock(node.finallyBlock, checker);
+        // if 'finally' always ends control flow, we are not interested in any jump statements from 'try' or 'catch'
+        if (finallyResult.end)
+            return finallyResult;
+    }
+    const tryResult = handleBlock(node.tryBlock, checker);
+    if (node.catchClause === undefined)
+        return { statements: finallyResult.statements.concat(tryResult.statements), end: tryResult.end };
+    const catchResult = handleBlock(node.catchClause.block, checker);
+    return {
+        statements: tryResult.statements
+            // remove all throw statements and throwing function calls from the list of control flow statements inside tryBlock
+            .filter((s) => s.kind !== ts.SyntaxKind.ThrowStatement && s.kind !== ts.SyntaxKind.ExpressionStatement)
+            .concat(catchResult.statements, finallyResult === undefined ? [] : finallyResult.statements),
+        end: tryResult.end && catchResult.end, // only ends control flow if try AND catch definitely end control flow
+    };
+}
+/** Dotted name as TypeScript requires it for assertion signatures to affect control flow. */
+function isDottedNameWithExplicitTypeAnnotation(node, checker) {
+    while (true) {
+        switch (node.kind) {
+            case ts.SyntaxKind.Identifier: {
+                const symbol = checker.getExportSymbolOfSymbol(checker.getSymbolAtLocation(node));
+                return isExplicitlyTypedSymbol(util_1.isSymbolFlagSet(symbol, ts.SymbolFlags.Alias) ? checker.getAliasedSymbol(symbol) : symbol, checker);
+            }
+            case ts.SyntaxKind.ThisKeyword:
+                return isExplicitlyTypedThis(node);
+            case ts.SyntaxKind.SuperKeyword:
+                return true;
+            case ts.SyntaxKind.PropertyAccessExpression:
+                if (!isExplicitlyTypedSymbol(checker.getSymbolAtLocation(node), checker))
+                    return false;
+            // falls through
+            case ts.SyntaxKind.ParenthesizedExpression:
+                node = node.expression;
+                continue;
+            default:
+                return false;
+        }
+    }
+}
+function isExplicitlyTypedSymbol(symbol, checker) {
+    if (symbol === undefined)
+        return false;
+    if (util_1.isSymbolFlagSet(symbol, ts.SymbolFlags.Function | ts.SymbolFlags.Method | ts.SymbolFlags.Class | ts.SymbolFlags.ValueModule))
+        return true;
+    if (!util_1.isSymbolFlagSet(symbol, ts.SymbolFlags.Variable | ts.SymbolFlags.Property))
+        return false;
+    if (symbol.valueDeclaration === undefined)
+        return false;
+    if (declarationHasExplicitTypeAnnotation(symbol.valueDeclaration))
+        return true;
+    return node_1.isVariableDeclaration(symbol.valueDeclaration) &&
+        symbol.valueDeclaration.parent.parent.kind === ts.SyntaxKind.ForOfStatement &&
+        isDottedNameWithExplicitTypeAnnotation(symbol.valueDeclaration.parent.parent.expression, checker);
+}
+function declarationHasExplicitTypeAnnotation(node) {
+    if (ts.isJSDocPropertyLikeTag(node))
+        return node.typeExpression !== undefined;
+    return (node_1.isVariableDeclaration(node) ||
+        node_1.isParameterDeclaration(node) ||
+        node_1.isPropertyDeclaration(node) ||
+        node_1.isPropertySignature(node)) && (util_1.isNodeFlagSet(node, ts.NodeFlags.JavaScriptFile)
+        ? ts.getJSDocType(node)
+        : node.type) !== undefined;
+}
+function isExplicitlyTypedThis(node) {
+    var _a;
+    do {
+        node = node.parent;
+        if (node_1.isDecorator(node)) {
+            // `this` in decorators always resolves outside of the containing class
+            if (node.parent.kind === ts.SyntaxKind.Parameter && node_1.isClassLikeDeclaration(node.parent.parent.parent)) {
+                node = node.parent.parent.parent.parent;
+            }
+            else if (node_1.isClassLikeDeclaration(node.parent.parent)) {
+                node = node.parent.parent.parent;
+            }
+            else if (node_1.isClassLikeDeclaration(node.parent)) {
+                node = node.parent.parent;
+            }
+        }
+    } while (util_1.isFunctionScopeBoundary(node) !== 1 /* Function */ || node.kind === ts.SyntaxKind.ArrowFunction);
+    return util_1.isFunctionWithBody(node) &&
+        (util_1.isNodeFlagSet(node, ts.NodeFlags.JavaScriptFile)
+            ? ((_a = ts.getJSDocThisTag(node)) === null || _a === void 0 ? void 0 : _a.typeExpression) !== undefined
+            : node.parameters.length !== 0 && util_1.isThisParameter(node.parameters[0]) && node.parameters[0].type !== undefined) ||
+        node_1.isClassLikeDeclaration(node.parent);
+}
+var SignatureEffect;
+(function (SignatureEffect) {
+    SignatureEffect[SignatureEffect["Never"] = 1] = "Never";
+    SignatureEffect[SignatureEffect["Asserts"] = 2] = "Asserts";
+})(SignatureEffect = exports.SignatureEffect || (exports.SignatureEffect = {}));
+/**
+ * Dermines whether a top level CallExpression has a control flow effect according to TypeScript's rules.
+ * This handles functions returning `never` and `asserts`.
+ */
+function callExpressionAffectsControlFlow(node, checker) {
+    var _a, _b, _c;
+    if (!node_1.isExpressionStatement(node.parent) ||
+        ts.isOptionalChain(node) ||
+        !isDottedNameWithExplicitTypeAnnotation(node.expression, checker))
+        return;
+    const signature = checker.getResolvedSignature(node);
+    if ((signature === null || signature === void 0 ? void 0 : signature.declaration) === undefined)
+        return;
+    const typeNode = ts.isJSDocSignature(signature.declaration)
+        ? (_b = (_a = signature.declaration.type) === null || _a === void 0 ? void 0 : _a.typeExpression) === null || _b === void 0 ? void 0 : _b.type
+        : (_c = signature.declaration.type) !== null && _c !== void 0 ? _c : (util_1.isNodeFlagSet(signature.declaration, ts.NodeFlags.JavaScriptFile)
+            ? ts.getJSDocReturnType(signature.declaration)
+            : undefined);
+    if (typeNode === undefined)
+        return;
+    if (node_1.isTypePredicateNode(typeNode) && typeNode.assertsModifier !== undefined)
+        return 2 /* Asserts */;
+    return util_1.isTypeFlagSet(checker.getTypeFromTypeNode(typeNode), ts.TypeFlags.Never) ? 1 /* Never */ : undefined;
+}
+exports.callExpressionAffectsControlFlow = callExpressionAffectsControlFlow;
+function handleExpressionStatement(node, checker) {
+    if (!node_1.isCallExpression(node.expression))
+        return defaultControlFlowEnd;
+    switch (callExpressionAffectsControlFlow(node.expression, checker)) {
+        case 2 /* Asserts */:
+            return { statements: [node], end: false };
+        case 1 /* Never */:
+            return { statements: [node], end: true };
+        case undefined:
+            return defaultControlFlowEnd;
+    }
+}
+function matchBreakOrContinue(current, pred) {
+    const result = {
+        statements: [],
+        end: current.end,
+    };
+    for (const statement of current.statements) {
+        if (pred(statement) && statement.label === undefined) {
+            result.end = false;
+            continue;
+        }
+        result.statements.push(statement);
+    }
+    return result;
+}
+function matchLabel(current, label) {
+    const result = {
+        statements: [],
+        end: current.end,
+    };
+    const labelText = label.text;
+    for (const statement of current.statements) {
+        switch (statement.kind) {
+            case ts.SyntaxKind.BreakStatement:
+            case ts.SyntaxKind.ContinueStatement:
+                if (statement.label !== undefined && statement.label.text === labelText) {
+                    result.end = false;
+                    continue;
+                }
+        }
+        result.statements.push(statement);
+    }
+    return result;
+}
+//# sourceMappingURL=control-flow.js.map
Index: frontend/node_modules/tsutils/util/control-flow.js.map
===================================================================
--- frontend/node_modules/tsutils/util/control-flow.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/control-flow.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"control-flow.js","sourceRoot":"","sources":["control-flow.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,4CAa2B;AAC3B,iCASgB;AAEhB,SAAgB,eAAe,CAAC,SAAsC,EAAE,OAAwB;IAC5F,OAAO,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC;AACrD,CAAC;AAFD,0CAEC;AAuBD,MAAM,qBAAqB,GAAmB,EAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC;AAE3E,SAAgB,iBAAiB,CAAC,SAAsC,EAAE,OAAwB;IAC9F,OAAO,kBAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAClH,CAAC;AAFD,8CAEC;AAED,SAAS,uBAAuB,CAAC,SAAuB,EAAE,OAAwB;IAC9E,QAAQ,SAAS,CAAC,IAAI,EAAE;QACpB,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QAClC,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACrC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;YAC7B,OAAO,EAAC,UAAU,EAAE,CAAuB,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;QACtE,KAAK,EAAE,CAAC,UAAU,CAAC,KAAK;YACpB,OAAO,WAAW,CAAW,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAChC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;YAC7B,OAAO,0BAA0B,CAAsC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/F,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QAClC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;YAC7B,OAAO,wBAAwB,CAAwB,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/E,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;YAC1B,OAAO,oBAAoB,CACvB,uBAAuB,CAAkB,SAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EACvE,iCAA0B,CAC7B,CAAC;QACN,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;YAC1B,OAAO,iBAAiB,CAAiB,SAAS,EAAE,OAAO,CAAC,CAAC;QACjE,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;YAC9B,OAAO,oBAAoB,CAAC,qBAAqB,CAAqB,SAAS,EAAE,OAAO,CAAC,EAAE,uBAAgB,CAAC,CAAC;QACjH,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY;YAC3B,OAAO,kBAAkB,CAAkB,SAAS,EAAE,OAAO,CAAC,CAAC;QACnE,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;YAC/B,OAAO,UAAU,CACb,uBAAuB,CAAuB,SAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EACtD,SAAU,CAAC,KAAK,CACzC,CAAC;QACN,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;YAC5B,OAAO,uBAAuB,CAAoB,SAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrF,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB;YAClC,IAAI,OAAO,KAAK,SAAS;gBACrB,OAAO,qBAAqB,CAAC;YACjC,OAAO,yBAAyB,CAAyB,SAAS,EAAE,OAAO,CAAC,CAAC;QACjF;YACI,OAAO,qBAAqB,CAAC;KACpC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,SAAuB,EAAE,OAAwB;IAClE,MAAM,MAAM,GAA0B,EAAC,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE;QAClC,MAAM,OAAO,GAAG,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,OAAO,CAAC,GAAG,EAAE;YACb,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;YAClB,MAAM;SACT;KACJ;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAgC,EAAE,OAAwB;IACxF,MAAM,GAAG,GAAG,oBAAoB,CAAC,uBAAuB,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,iCAA0B,CAAC,CAAC;IACpH,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,yCAAyC;IAC1D,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CAAC,SAA8C,EAAE,OAAwB;IACxG,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;QACrE,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,oBAAoB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrF,IAAI,iBAAiB,KAAK,KAAK;QAC3B,OAAO,qBAAqB,CAAC,CAAC,8BAA8B;IAChE,MAAM,GAAG,GAAG,oBAAoB,CAAC,uBAAuB,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,iCAA0B,CAAC,CAAC;IACpH,IAAI,iBAAiB,KAAK,SAAS;QAC/B,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,kDAAkD;IACvE,OAAO,GAAG,CAAC;AACf,CAAC;AAED,2FAA2F;AAC3F,SAAS,oBAAoB,CAAC,IAAmB;IAC7C,QAAQ,IAAI,CAAC,IAAI,EAAE;QACf,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;YAC1B,OAAO,IAAI,CAAC;QAChB,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY;YAC3B,OAAO,KAAK,CAAC;QACjB;YACI,OAAO;KACd;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAoB,EAAE,OAAwB;IACrE,QAAQ,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC3C,KAAK,IAAI;YACL,gCAAgC;YAChC,OAAO,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAChE,KAAK,KAAK;YACN,gCAAgC;YAChC,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS;gBACnC,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KAClE;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;QAChC,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,EAAE,KAAK;SACb,CAAC;IACN,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO;QACH,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACpD,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;KAC5B,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAwB,EAAE,OAAwB;IAC7E,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,MAAM,GAA0B;QAClC,UAAU,EAAE,EAAE;QACd,GAAG,EAAE,KAAK;KACb,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QACzC,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;YAC3C,UAAU,GAAG,IAAI,CAAC;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACzB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;KACjD;IACD,MAAM,CAAC,GAAG,KAAV,MAAM,CAAC,GAAG,GAAK,UAAU,IAAI,OAAO,KAAK,SAAS,IAAI,+BAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,EAAC;IAC9F,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAqB,EAAE,OAAwB;IACvE,IAAI,aAAyC,CAAC;IAC9C,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;QACjC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACxD,4GAA4G;QAC5G,IAAI,aAAa,CAAC,GAAG;YACjB,OAAO,aAAa,CAAC;KAC5B;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAC9B,OAAO,EAAC,UAAU,EAAE,aAAc,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAC,CAAC;IAEpG,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO;QACH,UAAU,EAAE,SAAS,CAAC,UAAU;YAC5B,mHAAmH;aAClH,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;aACtG,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC;QAChG,GAAG,EAAE,SAAS,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,sEAAsE;KAChH,CAAC;AACN,CAAC;AAED,6FAA6F;AAC7F,SAAS,sCAAsC,CAAC,IAAmB,EAAE,OAAuB;IACxF,OAAO,IAAI,EAAE;QACT,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAE,CAAC,CAAC;gBACnF,OAAO,uBAAuB,CAC1B,sBAAe,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EACzF,OAAO,CACV,CAAC;aACL;YACD,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;gBAC1B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACvC,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY;gBAC3B,OAAO,IAAI,CAAC;YAChB,KAAK,EAAE,CAAC,UAAU,CAAC,wBAAwB;gBACvC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;oBACpE,OAAO,KAAK,CAAC;YACjB,gBAAgB;YACpB,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;gBACtC,IAAI,GAA8D,IAAK,CAAC,UAAU,CAAC;gBACnF,SAAS;YACb;gBACI,OAAO,KAAK,CAAC;SACpB;KACJ;AACL,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA6B,EAAE,OAAuB;IACnF,IAAI,MAAM,KAAK,SAAS;QACpB,OAAO,KAAK,CAAC;IACjB,IAAI,sBAAe,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC;QAC5H,OAAO,IAAI,CAAC;IAChB,IAAI,CAAC,sBAAe,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC3E,OAAO,KAAK,CAAC;IACjB,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;QACrC,OAAO,KAAK,CAAC;IACjB,IAAI,oCAAoC,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,OAAO,4BAAqB,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;QAC3E,sCAAsC,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,oCAAoC,CAAC,IAAoB;IAC9D,IAAI,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC;QAC/B,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC;IAC7C,OAAO,CACH,4BAAqB,CAAC,IAAI,CAAC;QAC3B,6BAAsB,CAAC,IAAI,CAAC;QAC5B,4BAAqB,CAAC,IAAI,CAAC;QAC3B,0BAAmB,CAAC,IAAI,CAAC,CAC5B,IAAI,CACD,oBAAa,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAClB,KAAK,SAAS,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAa;;IACxC,GAAG;QACC,IAAI,GAAG,IAAI,CAAC,MAAO,CAAC;QACpB,IAAI,kBAAW,CAAC,IAAI,CAAC,EAAE;YACnB,uEAAuE;YACvE,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,IAAI,6BAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBACnG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC3C;iBAAM,IAAI,6BAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBACnD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aACpC;iBAAM,IAAI,6BAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC5C,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;aAC7B;SACJ;KACJ,QAAQ,8BAAuB,CAAC,IAAI,CAAC,qBAA2B,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE;IAChH,OAAO,yBAAkB,CAAC,IAAI,CAAC;QAC3B,CACI,oBAAa,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC;YAC5C,CAAC,CAAC,CAAA,MAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,0CAAE,cAAc,MAAK,SAAS;YACxD,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,sBAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CACrH;QACD,6BAAsB,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC;AAC7C,CAAC;AAED,IAAkB,eAGjB;AAHD,WAAkB,eAAe;IAC7B,uDAAS,CAAA;IACT,2DAAO,CAAA;AACX,CAAC,EAHiB,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAGhC;AAED;;;GAGG;AACH,SAAgB,gCAAgC,CAAC,IAAuB,EAAE,OAAuB;;IAC7F,IACI,CAAC,4BAAqB,CAAC,IAAI,CAAC,MAAO,CAAC;QACpC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QACxB,CAAC,sCAAsC,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;QAEjE,OAAO;IACX,MAAM,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,MAAK,SAAS;QACpC,OAAO;IACX,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC;QACvD,CAAC,CAAC,MAAA,MAAA,SAAS,CAAC,WAAW,CAAC,IAAI,0CAAE,cAAc,0CAAE,IAAI;QAClD,CAAC,CAAC,MAAA,SAAS,CAAC,WAAW,CAAC,IAAI,mCAAI,CAC5B,oBAAa,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC;YAC9C,CAAC,CAAC,SAAS,CAClB,CAAC;IACN,IAAI,QAAQ,KAAK,SAAS;QACtB,OAAO;IACX,IAAI,0BAAmB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;QACvE,uBAA+B;IACnC,OAAO,oBAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,eAAuB,CAAC,CAAC,SAAS,CAAC;AACxH,CAAC;AAtBD,4EAsBC;AAED,SAAS,yBAAyB,CAAC,IAA4B,EAAE,OAAuB;IACpF,IAAI,CAAC,uBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC;QAClC,OAAO,qBAAqB,CAAC;IACjC,QAAQ,gCAAgC,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;QAChE;YACI,OAAO,EAAC,UAAU,EAAE,CAAM,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAC,CAAC;QACjD;YACI,OAAO,EAAC,UAAU,EAAE,CAAM,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;QAChD,KAAK,SAAS;YACV,OAAO,qBAAqB,CAAC;KACpC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAuB,EAAE,IAAuC;IAC1F,MAAM,MAAM,GAA0B;QAClC,UAAU,EAAE,EAAE;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;KACnB,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE;QACxC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE;YAClD,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;YACnB,SAAS;SACZ;QACD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACrC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,OAAuB,EAAE,KAAoB;IAC7D,MAAM,MAAM,GAA0B;QAClC,UAAU,EAAE,EAAE;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;KACnB,CAAC;IACF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE;QACxC,QAAQ,SAAS,CAAC,IAAI,EAAE;YACpB,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;YAClC,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB;gBAChC,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;oBACrE,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC;oBACnB,SAAS;iBACZ;SACR;QACD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACrC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
Index: frontend/node_modules/tsutils/util/convert-ast.d.ts
===================================================================
--- frontend/node_modules/tsutils/util/convert-ast.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/convert-ast.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+import * as ts from 'typescript';
+/** Wraps an AST node. Can be used as a tree using `children` or a linked list using `next` and `skip`. */
+export interface NodeWrap {
+    /** The real AST node. */
+    node: ts.Node;
+    /** The SyntaxKind of `node`. */
+    kind: ts.SyntaxKind;
+    /** All immediate children of `node` that would be visited by `ts.forEachChild(node, cb)`. */
+    children: NodeWrap[];
+    /** Link to the next NodeWrap, depth-first. */
+    next?: NodeWrap;
+    /** Link to the next NodeWrap skipping all children of the current node. */
+    skip?: NodeWrap;
+    /** Link to the parent NodeWrap */
+    parent?: NodeWrap;
+}
+export interface WrappedAst extends NodeWrap {
+    node: ts.SourceFile;
+    next: NodeWrap;
+    skip: undefined;
+    parent: undefined;
+}
+export interface ConvertedAst {
+    /** nodes wrapped in a data structure with useful links */
+    wrapped: WrappedAst;
+    /** depth-first array of all nodes excluding SourceFile */
+    flat: ReadonlyArray<ts.Node>;
+}
+/**
+ * Takes a `ts.SourceFile` and creates data structures that are easier (or more performant) to traverse.
+ * Note that there is only a performance gain if you can reuse these structures. It's not recommended for one-time AST walks.
+ */
+export declare function convertAst(sourceFile: ts.SourceFile): ConvertedAst;
Index: frontend/node_modules/tsutils/util/convert-ast.js
===================================================================
--- frontend/node_modules/tsutils/util/convert-ast.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/convert-ast.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,79 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.convertAst = void 0;
+const ts = require("typescript");
+const util_1 = require("./util");
+/**
+ * Takes a `ts.SourceFile` and creates data structures that are easier (or more performant) to traverse.
+ * Note that there is only a performance gain if you can reuse these structures. It's not recommended for one-time AST walks.
+ */
+function convertAst(sourceFile) {
+    const wrapped = {
+        node: sourceFile,
+        parent: undefined,
+        kind: ts.SyntaxKind.SourceFile,
+        children: [],
+        next: undefined,
+        skip: undefined,
+    };
+    const flat = [];
+    let current = wrapped;
+    function collectChildren(node) {
+        current.children.push({
+            node,
+            parent: current,
+            kind: node.kind,
+            children: [],
+            next: undefined,
+            skip: undefined,
+        });
+    }
+    const stack = [];
+    while (true) {
+        if (current.children.length === 0) {
+            ts.forEachChild(current.node, collectChildren);
+            if (current.children.length === 0) {
+                current = current.parent; // nothing to do here, go back to parent
+            }
+            else {
+                // recurse into first child
+                const firstChild = current.children[0];
+                current.next = firstChild;
+                flat.push(firstChild.node);
+                if (util_1.isNodeKind(firstChild.kind))
+                    current = firstChild;
+                stack.push(1); // set index in stack so we know where to continue processing children
+            }
+        }
+        else {
+            const index = stack[stack.length - 1];
+            if (index < current.children.length) { // handles 2nd child to the last
+                const currentChild = current.children[index];
+                flat.push(currentChild.node);
+                let previous = current.children[index - 1];
+                while (previous.children.length !== 0) {
+                    previous.skip = currentChild;
+                    previous = previous.children[previous.children.length - 1];
+                }
+                previous.skip = previous.next = currentChild;
+                ++stack[stack.length - 1];
+                if (util_1.isNodeKind(currentChild.kind))
+                    current = currentChild; // recurse into child
+            }
+            else {
+                // done on this node
+                if (stack.length === 1)
+                    break;
+                // remove index from stack and go back to parent
+                stack.pop();
+                current = current.parent;
+            }
+        }
+    }
+    return {
+        wrapped,
+        flat,
+    };
+}
+exports.convertAst = convertAst;
+//# sourceMappingURL=convert-ast.js.map
Index: frontend/node_modules/tsutils/util/convert-ast.js.map
===================================================================
--- frontend/node_modules/tsutils/util/convert-ast.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/convert-ast.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"convert-ast.js","sourceRoot":"","sources":["convert-ast.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,iCAAoC;AAgCpC;;;GAGG;AACH,SAAgB,UAAU,CAAC,UAAyB;IAChD,MAAM,OAAO,GAAe;QACxB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,UAAU;QAC9B,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAO,SAAS;QACpB,IAAI,EAAE,SAAS;KAClB,CAAC;IACF,MAAM,IAAI,GAAc,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAa,OAAO,CAAC;IAEhC,SAAS,eAAe,CAAC,IAAa;QAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClB,IAAI;YACJ,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;IACP,CAAC;IACD,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,OAAO,IAAI,EAAE;QACT,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/B,OAAO,GAAG,OAAO,CAAC,MAAO,CAAC,CAAC,wCAAwC;aACtE;iBAAM;gBACH,2BAA2B;gBAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,iBAAU,CAAC,UAAU,CAAC,IAAI,CAAC;oBAC3B,OAAO,GAAG,UAAU,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sEAAsE;aACxF;SACJ;aAAM;YACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtC,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,gCAAgC;gBACnE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC3C,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACnC,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;oBAC7B,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC9D;gBACD,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC;gBAC7C,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC1B,IAAI,iBAAU,CAAC,YAAY,CAAC,IAAI,CAAC;oBAC7B,OAAO,GAAG,YAAY,CAAC,CAAC,qBAAqB;aACpD;iBAAM;gBACH,oBAAoB;gBACpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;oBAClB,MAAM;gBACV,gDAAgD;gBAChD,KAAK,CAAC,GAAG,EAAE,CAAC;gBACZ,OAAO,GAAG,OAAO,CAAC,MAAO,CAAC;aAC7B;SACJ;KACJ;IAED,OAAO;QACH,OAAO;QACP,IAAI;KACP,CAAC;AACN,CAAC;AAlED,gCAkEC"}
Index: frontend/node_modules/tsutils/util/index.d.ts
===================================================================
--- frontend/node_modules/tsutils/util/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+export * from './util';
+export * from './usage';
+export * from './control-flow';
+export * from './type';
+export * from './convert-ast';
Index: frontend/node_modules/tsutils/util/index.js
===================================================================
--- frontend/node_modules/tsutils/util/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const tslib_1 = require("tslib");
+tslib_1.__exportStar(require("./util"), exports);
+tslib_1.__exportStar(require("./usage"), exports);
+tslib_1.__exportStar(require("./control-flow"), exports);
+tslib_1.__exportStar(require("./type"), exports);
+tslib_1.__exportStar(require("./convert-ast"), exports);
+//# sourceMappingURL=index.js.map
Index: frontend/node_modules/tsutils/util/index.js.map
===================================================================
--- frontend/node_modules/tsutils/util/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,kDAAwB;AACxB,yDAA+B;AAC/B,iDAAuB;AACvB,wDAA8B"}
Index: frontend/node_modules/tsutils/util/type.d.ts
===================================================================
--- frontend/node_modules/tsutils/util/type.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/type.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,35 @@
+import * as ts from 'typescript';
+import { PropertyName } from './util';
+export declare function isEmptyObjectType(type: ts.Type): type is ts.ObjectType;
+export declare function removeOptionalityFromType(checker: ts.TypeChecker, type: ts.Type): ts.Type;
+export declare function removeOptionalChainingUndefinedMarkerType(checker: ts.TypeChecker, type: ts.Type): ts.Type;
+export declare function isOptionalChainingUndefinedMarkerType(checker: ts.TypeChecker, t: ts.Type): boolean;
+export declare function isTypeAssignableToNumber(checker: ts.TypeChecker, type: ts.Type): boolean;
+export declare function isTypeAssignableToString(checker: ts.TypeChecker, type: ts.Type): boolean;
+export declare function getCallSignaturesOfType(type: ts.Type): ReadonlyArray<ts.Signature>;
+/** Returns all types of a union type or an array containing `type` itself if it's no union type. */
+export declare function unionTypeParts(type: ts.Type): ts.Type[];
+/** Returns all types of a intersection type or an array containing `type` itself if it's no intersection type. */
+export declare function intersectionTypeParts(type: ts.Type): ts.Type[];
+export declare function someTypePart(type: ts.Type, predicate: (t: ts.Type) => t is ts.UnionOrIntersectionType, cb: (t: ts.Type) => boolean): boolean;
+/** Determines if a type thenable and can be used with `await`. */
+export declare function isThenableType(checker: ts.TypeChecker, node: ts.Node, type: ts.Type): boolean;
+/** Determines if a type thenable and can be used with `await`. */
+export declare function isThenableType(checker: ts.TypeChecker, node: ts.Expression, type?: ts.Type): boolean;
+/** Determine if a type is definitely falsy. This function doesn't unwrap union types. */
+export declare function isFalsyType(type: ts.Type): boolean;
+/** Determines whether the given type is a boolean literal type and matches the given boolean literal (true or false). */
+export declare function isBooleanLiteralType(type: ts.Type, literal: boolean): boolean;
+export declare function getPropertyOfType(type: ts.Type, name: ts.__String): ts.Symbol | undefined;
+export declare function getWellKnownSymbolPropertyOfType(type: ts.Type, wellKnownSymbolName: string, checker: ts.TypeChecker): ts.Symbol | undefined;
+/** Determines if writing to a certain property of a given type is allowed. */
+export declare function isPropertyReadonlyInType(type: ts.Type, name: ts.__String, checker: ts.TypeChecker): boolean;
+export declare function symbolHasReadonlyDeclaration(symbol: ts.Symbol, checker: ts.TypeChecker): boolean;
+/** Returns the the literal name or unique symbol name from a given type. Doesn't unwrap union types. */
+export declare function getPropertyNameFromType(type: ts.Type): PropertyName | undefined;
+export declare function getSymbolOfClassLikeDeclaration(node: ts.ClassLikeDeclaration, checker: ts.TypeChecker): ts.Symbol;
+export declare function getConstructorTypeOfClassLikeDeclaration(node: ts.ClassLikeDeclaration, checker: ts.TypeChecker): ts.Type;
+export declare function getInstanceTypeOfClassLikeDeclaration(node: ts.ClassLikeDeclaration, checker: ts.TypeChecker): ts.Type;
+export declare function getIteratorYieldResultFromIteratorResult(type: ts.Type, node: ts.Node, checker: ts.TypeChecker): ts.Type;
+/** Lookup the declaration of a class member in the super class. */
+export declare function getBaseClassMemberOfClassElement(node: ts.PropertyDeclaration | ts.MethodDeclaration | ts.AccessorDeclaration, checker: ts.TypeChecker): ts.Symbol | undefined;
Index: frontend/node_modules/tsutils/util/type.js
===================================================================
--- frontend/node_modules/tsutils/util/type.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/type.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,331 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getBaseClassMemberOfClassElement = exports.getIteratorYieldResultFromIteratorResult = exports.getInstanceTypeOfClassLikeDeclaration = exports.getConstructorTypeOfClassLikeDeclaration = exports.getSymbolOfClassLikeDeclaration = exports.getPropertyNameFromType = exports.symbolHasReadonlyDeclaration = exports.isPropertyReadonlyInType = exports.getWellKnownSymbolPropertyOfType = exports.getPropertyOfType = exports.isBooleanLiteralType = exports.isFalsyType = exports.isThenableType = exports.someTypePart = exports.intersectionTypeParts = exports.unionTypeParts = exports.getCallSignaturesOfType = exports.isTypeAssignableToString = exports.isTypeAssignableToNumber = exports.isOptionalChainingUndefinedMarkerType = exports.removeOptionalChainingUndefinedMarkerType = exports.removeOptionalityFromType = exports.isEmptyObjectType = void 0;
+const ts = require("typescript");
+const type_1 = require("../typeguard/type");
+const util_1 = require("./util");
+const node_1 = require("../typeguard/node");
+function isEmptyObjectType(type) {
+    if (type_1.isObjectType(type) &&
+        type.objectFlags & ts.ObjectFlags.Anonymous &&
+        type.getProperties().length === 0 &&
+        type.getCallSignatures().length === 0 &&
+        type.getConstructSignatures().length === 0 &&
+        type.getStringIndexType() === undefined &&
+        type.getNumberIndexType() === undefined) {
+        const baseTypes = type.getBaseTypes();
+        return baseTypes === undefined || baseTypes.every(isEmptyObjectType);
+    }
+    return false;
+}
+exports.isEmptyObjectType = isEmptyObjectType;
+function removeOptionalityFromType(checker, type) {
+    if (!containsTypeWithFlag(type, ts.TypeFlags.Undefined))
+        return type;
+    const allowsNull = containsTypeWithFlag(type, ts.TypeFlags.Null);
+    type = checker.getNonNullableType(type);
+    return allowsNull ? checker.getNullableType(type, ts.TypeFlags.Null) : type;
+}
+exports.removeOptionalityFromType = removeOptionalityFromType;
+function containsTypeWithFlag(type, flag) {
+    for (const t of unionTypeParts(type))
+        if (util_1.isTypeFlagSet(t, flag))
+            return true;
+    return false;
+}
+function removeOptionalChainingUndefinedMarkerType(checker, type) {
+    if (!type_1.isUnionType(type))
+        return isOptionalChainingUndefinedMarkerType(checker, type) ? type.getNonNullableType() : type;
+    let flags = 0;
+    let containsUndefinedMarker = false;
+    for (const t of type.types) {
+        if (isOptionalChainingUndefinedMarkerType(checker, t)) {
+            containsUndefinedMarker = true;
+        }
+        else {
+            flags |= t.flags;
+        }
+    }
+    return containsUndefinedMarker
+        ? checker.getNullableType(type.getNonNullableType(), flags)
+        : type;
+}
+exports.removeOptionalChainingUndefinedMarkerType = removeOptionalChainingUndefinedMarkerType;
+function isOptionalChainingUndefinedMarkerType(checker, t) {
+    return util_1.isTypeFlagSet(t, ts.TypeFlags.Undefined) && checker.getNullableType(t.getNonNullableType(), ts.TypeFlags.Undefined) !== t;
+}
+exports.isOptionalChainingUndefinedMarkerType = isOptionalChainingUndefinedMarkerType;
+function isTypeAssignableToNumber(checker, type) {
+    return isTypeAssignableTo(checker, type, ts.TypeFlags.NumberLike);
+}
+exports.isTypeAssignableToNumber = isTypeAssignableToNumber;
+function isTypeAssignableToString(checker, type) {
+    return isTypeAssignableTo(checker, type, ts.TypeFlags.StringLike);
+}
+exports.isTypeAssignableToString = isTypeAssignableToString;
+function isTypeAssignableTo(checker, type, flags) {
+    flags |= ts.TypeFlags.Any;
+    let typeParametersSeen;
+    return (function check(t) {
+        if (type_1.isTypeParameter(t) && t.symbol !== undefined && t.symbol.declarations !== undefined) {
+            if (typeParametersSeen === undefined) {
+                typeParametersSeen = new Set([t]);
+            }
+            else if (!typeParametersSeen.has(t)) {
+                typeParametersSeen.add(t);
+            }
+            else {
+                return false;
+            }
+            const declaration = t.symbol.declarations[0];
+            if (declaration.constraint === undefined)
+                return true; // TODO really?
+            return check(checker.getTypeFromTypeNode(declaration.constraint));
+        }
+        if (type_1.isUnionType(t))
+            return t.types.every(check);
+        if (type_1.isIntersectionType(t))
+            return t.types.some(check);
+        return util_1.isTypeFlagSet(t, flags);
+    })(type);
+}
+function getCallSignaturesOfType(type) {
+    if (type_1.isUnionType(type)) {
+        const signatures = [];
+        for (const t of type.types)
+            signatures.push(...getCallSignaturesOfType(t));
+        return signatures;
+    }
+    if (type_1.isIntersectionType(type)) {
+        let signatures;
+        for (const t of type.types) {
+            const sig = getCallSignaturesOfType(t);
+            if (sig.length !== 0) {
+                if (signatures !== undefined)
+                    return []; // if more than one type of the intersection has call signatures, none of them is useful for inference
+                signatures = sig;
+            }
+        }
+        return signatures === undefined ? [] : signatures;
+    }
+    return type.getCallSignatures();
+}
+exports.getCallSignaturesOfType = getCallSignaturesOfType;
+/** Returns all types of a union type or an array containing `type` itself if it's no union type. */
+function unionTypeParts(type) {
+    return type_1.isUnionType(type) ? type.types : [type];
+}
+exports.unionTypeParts = unionTypeParts;
+/** Returns all types of a intersection type or an array containing `type` itself if it's no intersection type. */
+function intersectionTypeParts(type) {
+    return type_1.isIntersectionType(type) ? type.types : [type];
+}
+exports.intersectionTypeParts = intersectionTypeParts;
+function someTypePart(type, predicate, cb) {
+    return predicate(type) ? type.types.some(cb) : cb(type);
+}
+exports.someTypePart = someTypePart;
+function isThenableType(checker, node, type = checker.getTypeAtLocation(node)) {
+    for (const ty of unionTypeParts(checker.getApparentType(type))) {
+        const then = ty.getProperty('then');
+        if (then === undefined)
+            continue;
+        const thenType = checker.getTypeOfSymbolAtLocation(then, node);
+        for (const t of unionTypeParts(thenType))
+            for (const signature of t.getCallSignatures())
+                if (signature.parameters.length !== 0 && isCallback(checker, signature.parameters[0], node))
+                    return true;
+    }
+    return false;
+}
+exports.isThenableType = isThenableType;
+function isCallback(checker, param, node) {
+    let type = checker.getApparentType(checker.getTypeOfSymbolAtLocation(param, node));
+    if (param.valueDeclaration.dotDotDotToken) {
+        // unwrap array type of rest parameter
+        type = type.getNumberIndexType();
+        if (type === undefined)
+            return false;
+    }
+    for (const t of unionTypeParts(type))
+        if (t.getCallSignatures().length !== 0)
+            return true;
+    return false;
+}
+/** Determine if a type is definitely falsy. This function doesn't unwrap union types. */
+function isFalsyType(type) {
+    if (type.flags & (ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void))
+        return true;
+    if (type_1.isLiteralType(type))
+        return !type.value;
+    return isBooleanLiteralType(type, false);
+}
+exports.isFalsyType = isFalsyType;
+/** Determines whether the given type is a boolean literal type and matches the given boolean literal (true or false). */
+function isBooleanLiteralType(type, literal) {
+    return util_1.isTypeFlagSet(type, ts.TypeFlags.BooleanLiteral) &&
+        type.intrinsicName === (literal ? 'true' : 'false');
+}
+exports.isBooleanLiteralType = isBooleanLiteralType;
+function getPropertyOfType(type, name) {
+    if (!name.startsWith('__'))
+        return type.getProperty(name);
+    return type.getProperties().find((s) => s.escapedName === name);
+}
+exports.getPropertyOfType = getPropertyOfType;
+function getWellKnownSymbolPropertyOfType(type, wellKnownSymbolName, checker) {
+    const prefix = '__@' + wellKnownSymbolName;
+    for (const prop of type.getProperties()) {
+        if (!prop.name.startsWith(prefix))
+            continue;
+        const globalSymbol = checker.getApparentType(checker.getTypeAtLocation(prop.valueDeclaration.name.expression)).symbol;
+        if (prop.escapedName === getPropertyNameOfWellKnownSymbol(checker, globalSymbol, wellKnownSymbolName))
+            return prop;
+    }
+    return;
+}
+exports.getWellKnownSymbolPropertyOfType = getWellKnownSymbolPropertyOfType;
+function getPropertyNameOfWellKnownSymbol(checker, symbolConstructor, symbolName) {
+    const knownSymbol = symbolConstructor &&
+        checker.getTypeOfSymbolAtLocation(symbolConstructor, symbolConstructor.valueDeclaration).getProperty(symbolName);
+    const knownSymbolType = knownSymbol && checker.getTypeOfSymbolAtLocation(knownSymbol, knownSymbol.valueDeclaration);
+    if (knownSymbolType && type_1.isUniqueESSymbolType(knownSymbolType))
+        return knownSymbolType.escapedName;
+    return ('__@' + symbolName);
+}
+/** Determines if writing to a certain property of a given type is allowed. */
+function isPropertyReadonlyInType(type, name, checker) {
+    let seenProperty = false;
+    let seenReadonlySignature = false;
+    for (const t of unionTypeParts(type)) {
+        if (getPropertyOfType(t, name) === undefined) {
+            // property is not present in this part of the union -> check for readonly index signature
+            const index = (util_1.isNumericPropertyName(name) ? checker.getIndexInfoOfType(t, ts.IndexKind.Number) : undefined) ||
+                checker.getIndexInfoOfType(t, ts.IndexKind.String);
+            if (index !== undefined && index.isReadonly) {
+                if (seenProperty)
+                    return true;
+                seenReadonlySignature = true;
+            }
+        }
+        else if (seenReadonlySignature || isReadonlyPropertyIntersection(t, name, checker)) {
+            return true;
+        }
+        else {
+            seenProperty = true;
+        }
+    }
+    return false;
+}
+exports.isPropertyReadonlyInType = isPropertyReadonlyInType;
+function isReadonlyPropertyIntersection(type, name, checker) {
+    return someTypePart(type, type_1.isIntersectionType, (t) => {
+        const prop = getPropertyOfType(t, name);
+        if (prop === undefined)
+            return false;
+        if (prop.flags & ts.SymbolFlags.Transient) {
+            if (/^(?:[1-9]\d*|0)$/.test(name) && type_1.isTupleTypeReference(t))
+                return t.target.readonly;
+            switch (isReadonlyPropertyFromMappedType(t, name, checker)) {
+                case true:
+                    return true;
+                case false:
+                    return false;
+                default:
+                // `undefined` falls through
+            }
+        }
+        return (
+        // members of namespace import
+        util_1.isSymbolFlagSet(prop, ts.SymbolFlags.ValueModule) ||
+            // we unwrapped every mapped type, now we can check the actual declarations
+            symbolHasReadonlyDeclaration(prop, checker));
+    });
+}
+function isReadonlyPropertyFromMappedType(type, name, checker) {
+    if (!type_1.isObjectType(type) || !util_1.isObjectFlagSet(type, ts.ObjectFlags.Mapped))
+        return;
+    const declaration = type.symbol.declarations[0];
+    // well-known symbols are not affected by mapped types
+    if (declaration.readonlyToken !== undefined && !/^__@[^@]+$/.test(name))
+        return declaration.readonlyToken.kind !== ts.SyntaxKind.MinusToken;
+    return isPropertyReadonlyInType(type.modifiersType, name, checker);
+}
+function symbolHasReadonlyDeclaration(symbol, checker) {
+    return (symbol.flags & ts.SymbolFlags.Accessor) === ts.SymbolFlags.GetAccessor ||
+        symbol.declarations !== undefined &&
+            symbol.declarations.some((node) => util_1.isModifierFlagSet(node, ts.ModifierFlags.Readonly) ||
+                node_1.isVariableDeclaration(node) && util_1.isNodeFlagSet(node.parent, ts.NodeFlags.Const) ||
+                node_1.isCallExpression(node) && util_1.isReadonlyAssignmentDeclaration(node, checker) ||
+                node_1.isEnumMember(node) ||
+                (node_1.isPropertyAssignment(node) || node_1.isShorthandPropertyAssignment(node)) && util_1.isInConstContext(node.parent));
+}
+exports.symbolHasReadonlyDeclaration = symbolHasReadonlyDeclaration;
+/** Returns the the literal name or unique symbol name from a given type. Doesn't unwrap union types. */
+function getPropertyNameFromType(type) {
+    // string or number literal. bigint is intentionally excluded
+    if (type.flags & (ts.TypeFlags.StringLiteral | ts.TypeFlags.NumberLiteral)) {
+        const value = String(type.value);
+        return { displayName: value, symbolName: ts.escapeLeadingUnderscores(value) };
+    }
+    if (type_1.isUniqueESSymbolType(type))
+        return {
+            displayName: `[${type.symbol
+                ? `${isKnownSymbol(type.symbol) ? 'Symbol.' : ''}${type.symbol.name}`
+                : type.escapedName.replace(/^__@|@\d+$/g, '')}]`,
+            symbolName: type.escapedName,
+        };
+}
+exports.getPropertyNameFromType = getPropertyNameFromType;
+function isKnownSymbol(symbol) {
+    return util_1.isSymbolFlagSet(symbol, ts.SymbolFlags.Property) &&
+        symbol.valueDeclaration !== undefined &&
+        node_1.isInterfaceDeclaration(symbol.valueDeclaration.parent) &&
+        symbol.valueDeclaration.parent.name.text === 'SymbolConstructor' &&
+        isGlobalDeclaration(symbol.valueDeclaration.parent);
+}
+function isGlobalDeclaration(node) {
+    return util_1.isNodeFlagSet(node.parent, ts.NodeFlags.GlobalAugmentation) || node_1.isSourceFile(node.parent) && !ts.isExternalModule(node.parent);
+}
+function getSymbolOfClassLikeDeclaration(node, checker) {
+    var _a;
+    return checker.getSymbolAtLocation((_a = node.name) !== null && _a !== void 0 ? _a : util_1.getChildOfKind(node, ts.SyntaxKind.ClassKeyword));
+}
+exports.getSymbolOfClassLikeDeclaration = getSymbolOfClassLikeDeclaration;
+function getConstructorTypeOfClassLikeDeclaration(node, checker) {
+    return node.kind === ts.SyntaxKind.ClassExpression
+        ? checker.getTypeAtLocation(node)
+        : checker.getTypeOfSymbolAtLocation(getSymbolOfClassLikeDeclaration(node, checker), node);
+}
+exports.getConstructorTypeOfClassLikeDeclaration = getConstructorTypeOfClassLikeDeclaration;
+function getInstanceTypeOfClassLikeDeclaration(node, checker) {
+    return node.kind === ts.SyntaxKind.ClassDeclaration
+        ? checker.getTypeAtLocation(node)
+        : checker.getDeclaredTypeOfSymbol(getSymbolOfClassLikeDeclaration(node, checker));
+}
+exports.getInstanceTypeOfClassLikeDeclaration = getInstanceTypeOfClassLikeDeclaration;
+function getIteratorYieldResultFromIteratorResult(type, node, checker) {
+    return type_1.isUnionType(type) && type.types.find((t) => {
+        const done = t.getProperty('done');
+        return done !== undefined &&
+            isBooleanLiteralType(removeOptionalityFromType(checker, checker.getTypeOfSymbolAtLocation(done, node)), false);
+    }) || type;
+}
+exports.getIteratorYieldResultFromIteratorResult = getIteratorYieldResultFromIteratorResult;
+/** Lookup the declaration of a class member in the super class. */
+function getBaseClassMemberOfClassElement(node, checker) {
+    if (!node_1.isClassLikeDeclaration(node.parent))
+        return;
+    const base = util_1.getBaseOfClassLikeExpression(node.parent);
+    if (base === undefined)
+        return;
+    const name = util_1.getSingleLateBoundPropertyNameOfPropertyName(node.name, checker);
+    if (name === undefined)
+        return;
+    const baseType = checker.getTypeAtLocation(util_1.hasModifier(node.modifiers, ts.SyntaxKind.StaticKeyword)
+        ? base.expression
+        : base);
+    return getPropertyOfType(baseType, name.symbolName);
+}
+exports.getBaseClassMemberOfClassElement = getBaseClassMemberOfClassElement;
+//# sourceMappingURL=type.js.map
Index: frontend/node_modules/tsutils/util/type.js.map
===================================================================
--- frontend/node_modules/tsutils/util/type.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/type.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"type.js","sourceRoot":"","sources":["type.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsutils/util/usage.d.ts
===================================================================
--- frontend/node_modules/tsutils/util/usage.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/usage.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+import * as ts from 'typescript';
+export interface VariableInfo {
+    domain: DeclarationDomain;
+    exported: boolean;
+    uses: VariableUse[];
+    inGlobalScope: boolean;
+    declarations: ts.Identifier[];
+}
+export interface VariableUse {
+    domain: UsageDomain;
+    location: ts.Identifier;
+}
+export declare enum DeclarationDomain {
+    Namespace = 1,
+    Type = 2,
+    Value = 4,
+    Import = 8,
+    Any = 7
+}
+export declare enum UsageDomain {
+    Namespace = 1,
+    Type = 2,
+    Value = 4,
+    ValueOrNamespace = 5,
+    Any = 7,
+    TypeQuery = 8
+}
+export declare function getUsageDomain(node: ts.Identifier): UsageDomain | undefined;
+export declare function getDeclarationDomain(node: ts.Identifier): DeclarationDomain | undefined;
+export declare function collectVariableUsage(sourceFile: ts.SourceFile): Map<ts.Identifier, VariableInfo>;
Index: frontend/node_modules/tsutils/util/usage.js
===================================================================
--- frontend/node_modules/tsutils/util/usage.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/usage.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,658 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.collectVariableUsage = exports.getDeclarationDomain = exports.getUsageDomain = exports.UsageDomain = exports.DeclarationDomain = void 0;
+const util_1 = require("./util");
+const ts = require("typescript");
+var DeclarationDomain;
+(function (DeclarationDomain) {
+    DeclarationDomain[DeclarationDomain["Namespace"] = 1] = "Namespace";
+    DeclarationDomain[DeclarationDomain["Type"] = 2] = "Type";
+    DeclarationDomain[DeclarationDomain["Value"] = 4] = "Value";
+    DeclarationDomain[DeclarationDomain["Import"] = 8] = "Import";
+    DeclarationDomain[DeclarationDomain["Any"] = 7] = "Any";
+})(DeclarationDomain = exports.DeclarationDomain || (exports.DeclarationDomain = {}));
+var UsageDomain;
+(function (UsageDomain) {
+    UsageDomain[UsageDomain["Namespace"] = 1] = "Namespace";
+    UsageDomain[UsageDomain["Type"] = 2] = "Type";
+    UsageDomain[UsageDomain["Value"] = 4] = "Value";
+    UsageDomain[UsageDomain["ValueOrNamespace"] = 5] = "ValueOrNamespace";
+    UsageDomain[UsageDomain["Any"] = 7] = "Any";
+    UsageDomain[UsageDomain["TypeQuery"] = 8] = "TypeQuery";
+})(UsageDomain = exports.UsageDomain || (exports.UsageDomain = {}));
+// TODO handle cases where values are used only for their types, e.g. `declare [propSymbol]: number`
+function getUsageDomain(node) {
+    const parent = node.parent;
+    switch (parent.kind) {
+        case ts.SyntaxKind.TypeReference:
+            return node.originalKeywordKind !== ts.SyntaxKind.ConstKeyword ? 2 /* Type */ : undefined;
+        case ts.SyntaxKind.ExpressionWithTypeArguments:
+            return parent.parent.token === ts.SyntaxKind.ImplementsKeyword ||
+                parent.parent.parent.kind === ts.SyntaxKind.InterfaceDeclaration
+                ? 2 /* Type */
+                : 4 /* Value */;
+        case ts.SyntaxKind.TypeQuery:
+            return 5 /* ValueOrNamespace */ | 8 /* TypeQuery */;
+        case ts.SyntaxKind.QualifiedName:
+            if (parent.left === node) {
+                if (getEntityNameParent(parent).kind === ts.SyntaxKind.TypeQuery)
+                    return 1 /* Namespace */ | 8 /* TypeQuery */;
+                return 1 /* Namespace */;
+            }
+            break;
+        case ts.SyntaxKind.ExportSpecifier:
+            // either {name} or {propertyName as name}
+            if (parent.propertyName === undefined ||
+                parent.propertyName === node)
+                return 7 /* Any */; // TODO handle type-only exports
+            break;
+        case ts.SyntaxKind.ExportAssignment:
+            return 7 /* Any */;
+        // Value
+        case ts.SyntaxKind.BindingElement:
+            if (parent.initializer === node)
+                return 5 /* ValueOrNamespace */;
+            break;
+        case ts.SyntaxKind.Parameter:
+        case ts.SyntaxKind.EnumMember:
+        case ts.SyntaxKind.PropertyDeclaration:
+        case ts.SyntaxKind.VariableDeclaration:
+        case ts.SyntaxKind.PropertyAssignment:
+        case ts.SyntaxKind.PropertyAccessExpression:
+        case ts.SyntaxKind.ImportEqualsDeclaration:
+            if (parent.name !== node)
+                return 5 /* ValueOrNamespace */; // TODO handle type-only imports
+            break;
+        case ts.SyntaxKind.JsxAttribute:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.NamespaceImport:
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.ModuleDeclaration:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.LabeledStatement:
+        case ts.SyntaxKind.BreakStatement:
+        case ts.SyntaxKind.ContinueStatement:
+        case ts.SyntaxKind.ImportClause:
+        case ts.SyntaxKind.ImportSpecifier:
+        case ts.SyntaxKind.TypePredicate: // TODO this actually references a parameter
+        case ts.SyntaxKind.MethodSignature:
+        case ts.SyntaxKind.PropertySignature:
+        case ts.SyntaxKind.NamespaceExportDeclaration:
+        case ts.SyntaxKind.NamespaceExport:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+        case ts.SyntaxKind.TypeParameter:
+        case ts.SyntaxKind.NamedTupleMember:
+            break;
+        default:
+            return 5 /* ValueOrNamespace */;
+    }
+}
+exports.getUsageDomain = getUsageDomain;
+function getDeclarationDomain(node) {
+    switch (node.parent.kind) {
+        case ts.SyntaxKind.TypeParameter:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+            return 2 /* Type */;
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+            return 2 /* Type */ | 4 /* Value */;
+        case ts.SyntaxKind.EnumDeclaration:
+            return 7 /* Any */;
+        case ts.SyntaxKind.NamespaceImport:
+        case ts.SyntaxKind.ImportClause:
+            return 7 /* Any */ | 8 /* Import */; // TODO handle type-only imports
+        case ts.SyntaxKind.ImportEqualsDeclaration:
+        case ts.SyntaxKind.ImportSpecifier:
+            return node.parent.name === node
+                ? 7 /* Any */ | 8 /* Import */ // TODO handle type-only imports
+                : undefined;
+        case ts.SyntaxKind.ModuleDeclaration:
+            return 1 /* Namespace */;
+        case ts.SyntaxKind.Parameter:
+            if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature || node.originalKeywordKind === ts.SyntaxKind.ThisKeyword)
+                return;
+        // falls through
+        case ts.SyntaxKind.BindingElement:
+        case ts.SyntaxKind.VariableDeclaration:
+            return node.parent.name === node ? 4 /* Value */ : undefined;
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.FunctionExpression:
+            return 4 /* Value */;
+    }
+}
+exports.getDeclarationDomain = getDeclarationDomain;
+function collectVariableUsage(sourceFile) {
+    return new UsageWalker().getUsage(sourceFile);
+}
+exports.collectVariableUsage = collectVariableUsage;
+class AbstractScope {
+    constructor(_global) {
+        this._global = _global;
+        this._variables = new Map();
+        this._uses = [];
+        this._namespaceScopes = undefined;
+        this._enumScopes = undefined;
+    }
+    addVariable(identifier, name, selector, exported, domain) {
+        const variables = this.getDestinationScope(selector).getVariables();
+        const declaration = {
+            domain,
+            exported,
+            declaration: name,
+        };
+        const variable = variables.get(identifier);
+        if (variable === undefined) {
+            variables.set(identifier, {
+                domain,
+                declarations: [declaration],
+                uses: [],
+            });
+        }
+        else {
+            variable.domain |= domain;
+            variable.declarations.push(declaration);
+        }
+    }
+    addUse(use) {
+        this._uses.push(use);
+    }
+    getVariables() {
+        return this._variables;
+    }
+    getFunctionScope() {
+        return this;
+    }
+    end(cb) {
+        if (this._namespaceScopes !== undefined)
+            this._namespaceScopes.forEach((value) => value.finish(cb));
+        this._namespaceScopes = this._enumScopes = undefined;
+        this._applyUses();
+        this._variables.forEach((variable) => {
+            for (const declaration of variable.declarations) {
+                const result = {
+                    declarations: [],
+                    domain: declaration.domain,
+                    exported: declaration.exported,
+                    inGlobalScope: this._global,
+                    uses: [],
+                };
+                for (const other of variable.declarations)
+                    if (other.domain & declaration.domain)
+                        result.declarations.push(other.declaration);
+                for (const use of variable.uses)
+                    if (use.domain & declaration.domain)
+                        result.uses.push(use);
+                cb(result, declaration.declaration, this);
+            }
+        });
+    }
+    // tslint:disable-next-line:prefer-function-over-method
+    markExported(_name) { } // only relevant for the root scope
+    createOrReuseNamespaceScope(name, _exported, ambient, hasExportStatement) {
+        let scope;
+        if (this._namespaceScopes === undefined) {
+            this._namespaceScopes = new Map();
+        }
+        else {
+            scope = this._namespaceScopes.get(name);
+        }
+        if (scope === undefined) {
+            scope = new NamespaceScope(ambient, hasExportStatement, this);
+            this._namespaceScopes.set(name, scope);
+        }
+        else {
+            scope.refresh(ambient, hasExportStatement);
+        }
+        return scope;
+    }
+    createOrReuseEnumScope(name, _exported) {
+        let scope;
+        if (this._enumScopes === undefined) {
+            this._enumScopes = new Map();
+        }
+        else {
+            scope = this._enumScopes.get(name);
+        }
+        if (scope === undefined) {
+            scope = new EnumScope(this);
+            this._enumScopes.set(name, scope);
+        }
+        return scope;
+    }
+    _applyUses() {
+        for (const use of this._uses)
+            if (!this._applyUse(use))
+                this._addUseToParent(use);
+        this._uses = [];
+    }
+    _applyUse(use, variables = this._variables) {
+        const variable = variables.get(use.location.text);
+        if (variable === undefined || (variable.domain & use.domain) === 0)
+            return false;
+        variable.uses.push(use);
+        return true;
+    }
+    _addUseToParent(_use) { } // tslint:disable-line:prefer-function-over-method
+}
+class RootScope extends AbstractScope {
+    constructor(_exportAll, global) {
+        super(global);
+        this._exportAll = _exportAll;
+        this._exports = undefined;
+        this._innerScope = new NonRootScope(this, 1 /* Function */);
+    }
+    addVariable(identifier, name, selector, exported, domain) {
+        if (domain & 8 /* Import */)
+            return super.addVariable(identifier, name, selector, exported, domain);
+        return this._innerScope.addVariable(identifier, name, selector, exported, domain);
+    }
+    addUse(use, origin) {
+        if (origin === this._innerScope)
+            return super.addUse(use);
+        return this._innerScope.addUse(use);
+    }
+    markExported(id) {
+        if (this._exports === undefined) {
+            this._exports = [id.text];
+        }
+        else {
+            this._exports.push(id.text);
+        }
+    }
+    end(cb) {
+        this._innerScope.end((value, key) => {
+            value.exported = value.exported || this._exportAll
+                || this._exports !== undefined && this._exports.includes(key.text);
+            value.inGlobalScope = this._global;
+            return cb(value, key, this);
+        });
+        return super.end((value, key, scope) => {
+            value.exported = value.exported || scope === this
+                && this._exports !== undefined && this._exports.includes(key.text);
+            return cb(value, key, scope);
+        });
+    }
+    getDestinationScope() {
+        return this;
+    }
+}
+class NonRootScope extends AbstractScope {
+    constructor(_parent, _boundary) {
+        super(false);
+        this._parent = _parent;
+        this._boundary = _boundary;
+    }
+    _addUseToParent(use) {
+        return this._parent.addUse(use, this);
+    }
+    getDestinationScope(selector) {
+        return this._boundary & selector
+            ? this
+            : this._parent.getDestinationScope(selector);
+    }
+}
+class EnumScope extends NonRootScope {
+    constructor(parent) {
+        super(parent, 1 /* Function */);
+    }
+    end() {
+        this._applyUses();
+    }
+}
+class ConditionalTypeScope extends NonRootScope {
+    constructor(parent) {
+        super(parent, 8 /* ConditionalType */);
+        this._state = 0 /* Initial */;
+    }
+    updateState(newState) {
+        this._state = newState;
+    }
+    addUse(use) {
+        if (this._state === 2 /* TrueType */)
+            return void this._uses.push(use);
+        return this._parent.addUse(use, this);
+    }
+}
+class FunctionScope extends NonRootScope {
+    constructor(parent) {
+        super(parent, 1 /* Function */);
+    }
+    beginBody() {
+        this._applyUses();
+    }
+}
+class AbstractNamedExpressionScope extends NonRootScope {
+    constructor(_name, _domain, parent) {
+        super(parent, 1 /* Function */);
+        this._name = _name;
+        this._domain = _domain;
+    }
+    end(cb) {
+        this._innerScope.end(cb);
+        return cb({
+            declarations: [this._name],
+            domain: this._domain,
+            exported: false,
+            uses: this._uses,
+            inGlobalScope: false,
+        }, this._name, this);
+    }
+    addUse(use, source) {
+        if (source !== this._innerScope)
+            return this._innerScope.addUse(use);
+        if (use.domain & this._domain && use.location.text === this._name.text) {
+            this._uses.push(use);
+        }
+        else {
+            return this._parent.addUse(use, this);
+        }
+    }
+    getFunctionScope() {
+        return this._innerScope;
+    }
+    getDestinationScope() {
+        return this._innerScope;
+    }
+}
+class FunctionExpressionScope extends AbstractNamedExpressionScope {
+    constructor(name, parent) {
+        super(name, 4 /* Value */, parent);
+        this._innerScope = new FunctionScope(this);
+    }
+    beginBody() {
+        return this._innerScope.beginBody();
+    }
+}
+class ClassExpressionScope extends AbstractNamedExpressionScope {
+    constructor(name, parent) {
+        super(name, 4 /* Value */ | 2 /* Type */, parent);
+        this._innerScope = new NonRootScope(this, 1 /* Function */);
+    }
+}
+class BlockScope extends NonRootScope {
+    constructor(_functionScope, parent) {
+        super(parent, 2 /* Block */);
+        this._functionScope = _functionScope;
+    }
+    getFunctionScope() {
+        return this._functionScope;
+    }
+}
+function mapDeclaration(declaration) {
+    return {
+        declaration,
+        exported: true,
+        domain: getDeclarationDomain(declaration),
+    };
+}
+class NamespaceScope extends NonRootScope {
+    constructor(_ambient, _hasExport, parent) {
+        super(parent, 1 /* Function */);
+        this._ambient = _ambient;
+        this._hasExport = _hasExport;
+        this._innerScope = new NonRootScope(this, 1 /* Function */);
+        this._exports = undefined;
+    }
+    finish(cb) {
+        return super.end(cb);
+    }
+    end(cb) {
+        this._innerScope.end((variable, key, scope) => {
+            if (scope !== this._innerScope ||
+                !variable.exported && (!this._ambient || this._exports !== undefined && !this._exports.has(key.text)))
+                return cb(variable, key, scope);
+            const namespaceVar = this._variables.get(key.text);
+            if (namespaceVar === undefined) {
+                this._variables.set(key.text, {
+                    declarations: variable.declarations.map(mapDeclaration),
+                    domain: variable.domain,
+                    uses: [...variable.uses],
+                });
+            }
+            else {
+                outer: for (const declaration of variable.declarations) {
+                    for (const existing of namespaceVar.declarations)
+                        if (existing.declaration === declaration)
+                            continue outer;
+                    namespaceVar.declarations.push(mapDeclaration(declaration));
+                }
+                namespaceVar.domain |= variable.domain;
+                for (const use of variable.uses) {
+                    if (namespaceVar.uses.includes(use))
+                        continue;
+                    namespaceVar.uses.push(use);
+                }
+            }
+        });
+        this._applyUses();
+        this._innerScope = new NonRootScope(this, 1 /* Function */);
+    }
+    createOrReuseNamespaceScope(name, exported, ambient, hasExportStatement) {
+        if (!exported && (!this._ambient || this._hasExport))
+            return this._innerScope.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
+        return super.createOrReuseNamespaceScope(name, exported, ambient || this._ambient, hasExportStatement);
+    }
+    createOrReuseEnumScope(name, exported) {
+        if (!exported && (!this._ambient || this._hasExport))
+            return this._innerScope.createOrReuseEnumScope(name, exported);
+        return super.createOrReuseEnumScope(name, exported);
+    }
+    addUse(use, source) {
+        if (source !== this._innerScope)
+            return this._innerScope.addUse(use);
+        this._uses.push(use);
+    }
+    refresh(ambient, hasExport) {
+        this._ambient = ambient;
+        this._hasExport = hasExport;
+    }
+    markExported(name, _as) {
+        if (this._exports === undefined)
+            this._exports = new Set();
+        this._exports.add(name.text);
+    }
+    getDestinationScope() {
+        return this._innerScope;
+    }
+}
+function getEntityNameParent(name) {
+    let parent = name.parent;
+    while (parent.kind === ts.SyntaxKind.QualifiedName)
+        parent = parent.parent;
+    return parent;
+}
+// TODO class decorators resolve outside of class, element and parameter decorator resolve inside/at the class
+// TODO computed property name resolves inside/at the cass
+// TODO this and super in all of them are resolved outside of the class
+class UsageWalker {
+    constructor() {
+        this._result = new Map();
+    }
+    getUsage(sourceFile) {
+        const variableCallback = (variable, key) => {
+            this._result.set(key, variable);
+        };
+        const isModule = ts.isExternalModule(sourceFile);
+        this._scope = new RootScope(sourceFile.isDeclarationFile && isModule && !containsExportStatement(sourceFile), !isModule);
+        const cb = (node) => {
+            if (util_1.isBlockScopeBoundary(node))
+                return continueWithScope(node, new BlockScope(this._scope.getFunctionScope(), this._scope), handleBlockScope);
+            switch (node.kind) {
+                case ts.SyntaxKind.ClassExpression:
+                    return continueWithScope(node, node.name !== undefined
+                        ? new ClassExpressionScope(node.name, this._scope)
+                        : new NonRootScope(this._scope, 1 /* Function */));
+                case ts.SyntaxKind.ClassDeclaration:
+                    this._handleDeclaration(node, true, 4 /* Value */ | 2 /* Type */);
+                    return continueWithScope(node, new NonRootScope(this._scope, 1 /* Function */));
+                case ts.SyntaxKind.InterfaceDeclaration:
+                case ts.SyntaxKind.TypeAliasDeclaration:
+                    this._handleDeclaration(node, true, 2 /* Type */);
+                    return continueWithScope(node, new NonRootScope(this._scope, 4 /* Type */));
+                case ts.SyntaxKind.EnumDeclaration:
+                    this._handleDeclaration(node, true, 7 /* Any */);
+                    return continueWithScope(node, this._scope.createOrReuseEnumScope(node.name.text, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword)));
+                case ts.SyntaxKind.ModuleDeclaration:
+                    return this._handleModule(node, continueWithScope);
+                case ts.SyntaxKind.MappedType:
+                    return continueWithScope(node, new NonRootScope(this._scope, 4 /* Type */));
+                case ts.SyntaxKind.FunctionExpression:
+                case ts.SyntaxKind.ArrowFunction:
+                case ts.SyntaxKind.Constructor:
+                case ts.SyntaxKind.MethodDeclaration:
+                case ts.SyntaxKind.FunctionDeclaration:
+                case ts.SyntaxKind.GetAccessor:
+                case ts.SyntaxKind.SetAccessor:
+                case ts.SyntaxKind.MethodSignature:
+                case ts.SyntaxKind.CallSignature:
+                case ts.SyntaxKind.ConstructSignature:
+                case ts.SyntaxKind.ConstructorType:
+                case ts.SyntaxKind.FunctionType:
+                    return this._handleFunctionLikeDeclaration(node, cb, variableCallback);
+                case ts.SyntaxKind.ConditionalType:
+                    return this._handleConditionalType(node, cb, variableCallback);
+                // End of Scope specific handling
+                case ts.SyntaxKind.VariableDeclarationList:
+                    this._handleVariableDeclaration(node);
+                    break;
+                case ts.SyntaxKind.Parameter:
+                    if (node.parent.kind !== ts.SyntaxKind.IndexSignature &&
+                        (node.name.kind !== ts.SyntaxKind.Identifier ||
+                            node.name.originalKeywordKind !== ts.SyntaxKind.ThisKeyword))
+                        this._handleBindingName(node.name, false, false);
+                    break;
+                case ts.SyntaxKind.EnumMember:
+                    this._scope.addVariable(util_1.getPropertyName(node.name), node.name, 1 /* Function */, true, 4 /* Value */);
+                    break;
+                case ts.SyntaxKind.ImportClause:
+                case ts.SyntaxKind.ImportSpecifier:
+                case ts.SyntaxKind.NamespaceImport:
+                case ts.SyntaxKind.ImportEqualsDeclaration:
+                    this._handleDeclaration(node, false, 7 /* Any */ | 8 /* Import */);
+                    break;
+                case ts.SyntaxKind.TypeParameter:
+                    this._scope.addVariable(node.name.text, node.name, node.parent.kind === ts.SyntaxKind.InferType ? 8 /* InferType */ : 7 /* Type */, false, 2 /* Type */);
+                    break;
+                case ts.SyntaxKind.ExportSpecifier:
+                    if (node.propertyName !== undefined)
+                        return this._scope.markExported(node.propertyName, node.name);
+                    return this._scope.markExported(node.name);
+                case ts.SyntaxKind.ExportAssignment:
+                    if (node.expression.kind === ts.SyntaxKind.Identifier)
+                        return this._scope.markExported(node.expression);
+                    break;
+                case ts.SyntaxKind.Identifier:
+                    const domain = getUsageDomain(node);
+                    if (domain !== undefined)
+                        this._scope.addUse({ domain, location: node });
+                    return;
+            }
+            return ts.forEachChild(node, cb);
+        };
+        const continueWithScope = (node, scope, next = forEachChild) => {
+            const savedScope = this._scope;
+            this._scope = scope;
+            next(node);
+            this._scope.end(variableCallback);
+            this._scope = savedScope;
+        };
+        const handleBlockScope = (node) => {
+            if (node.kind === ts.SyntaxKind.CatchClause && node.variableDeclaration !== undefined)
+                this._handleBindingName(node.variableDeclaration.name, true, false);
+            return ts.forEachChild(node, cb);
+        };
+        ts.forEachChild(sourceFile, cb);
+        this._scope.end(variableCallback);
+        return this._result;
+        function forEachChild(node) {
+            return ts.forEachChild(node, cb);
+        }
+    }
+    _handleConditionalType(node, cb, varCb) {
+        const savedScope = this._scope;
+        const scope = this._scope = new ConditionalTypeScope(savedScope);
+        cb(node.checkType);
+        scope.updateState(1 /* Extends */);
+        cb(node.extendsType);
+        scope.updateState(2 /* TrueType */);
+        cb(node.trueType);
+        scope.updateState(3 /* FalseType */);
+        cb(node.falseType);
+        scope.end(varCb);
+        this._scope = savedScope;
+    }
+    _handleFunctionLikeDeclaration(node, cb, varCb) {
+        if (node.decorators !== undefined)
+            node.decorators.forEach(cb);
+        const savedScope = this._scope;
+        if (node.kind === ts.SyntaxKind.FunctionDeclaration)
+            this._handleDeclaration(node, false, 4 /* Value */);
+        const scope = this._scope = node.kind === ts.SyntaxKind.FunctionExpression && node.name !== undefined
+            ? new FunctionExpressionScope(node.name, savedScope)
+            : new FunctionScope(savedScope);
+        if (node.name !== undefined)
+            cb(node.name);
+        if (node.typeParameters !== undefined)
+            node.typeParameters.forEach(cb);
+        node.parameters.forEach(cb);
+        if (node.type !== undefined)
+            cb(node.type);
+        if (node.body !== undefined) {
+            scope.beginBody();
+            cb(node.body);
+        }
+        scope.end(varCb);
+        this._scope = savedScope;
+    }
+    _handleModule(node, next) {
+        if (node.flags & ts.NodeFlags.GlobalAugmentation)
+            return next(node, this._scope.createOrReuseNamespaceScope('-global', false, true, false));
+        if (node.name.kind === ts.SyntaxKind.Identifier) {
+            const exported = isNamespaceExported(node);
+            this._scope.addVariable(node.name.text, node.name, 1 /* Function */, exported, 1 /* Namespace */ | 4 /* Value */);
+            const ambient = util_1.hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword);
+            return next(node, this._scope.createOrReuseNamespaceScope(node.name.text, exported, ambient, ambient && namespaceHasExportStatement(node)));
+        }
+        return next(node, this._scope.createOrReuseNamespaceScope(`"${node.name.text}"`, false, true, namespaceHasExportStatement(node)));
+    }
+    _handleDeclaration(node, blockScoped, domain) {
+        if (node.name !== undefined)
+            this._scope.addVariable(node.name.text, node.name, blockScoped ? 3 /* Block */ : 1 /* Function */, util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword), domain);
+    }
+    _handleBindingName(name, blockScoped, exported) {
+        if (name.kind === ts.SyntaxKind.Identifier)
+            return this._scope.addVariable(name.text, name, blockScoped ? 3 /* Block */ : 1 /* Function */, exported, 4 /* Value */);
+        util_1.forEachDestructuringIdentifier(name, (declaration) => {
+            this._scope.addVariable(declaration.name.text, declaration.name, blockScoped ? 3 /* Block */ : 1 /* Function */, exported, 4 /* Value */);
+        });
+    }
+    _handleVariableDeclaration(declarationList) {
+        const blockScoped = util_1.isBlockScopedVariableDeclarationList(declarationList);
+        const exported = declarationList.parent.kind === ts.SyntaxKind.VariableStatement &&
+            util_1.hasModifier(declarationList.parent.modifiers, ts.SyntaxKind.ExportKeyword);
+        for (const declaration of declarationList.declarations)
+            this._handleBindingName(declaration.name, blockScoped, exported);
+    }
+}
+function isNamespaceExported(node) {
+    return node.parent.kind === ts.SyntaxKind.ModuleDeclaration || util_1.hasModifier(node.modifiers, ts.SyntaxKind.ExportKeyword);
+}
+function namespaceHasExportStatement(ns) {
+    if (ns.body === undefined || ns.body.kind !== ts.SyntaxKind.ModuleBlock)
+        return false;
+    return containsExportStatement(ns.body);
+}
+function containsExportStatement(block) {
+    for (const statement of block.statements)
+        if (statement.kind === ts.SyntaxKind.ExportDeclaration || statement.kind === ts.SyntaxKind.ExportAssignment)
+            return true;
+    return false;
+}
+//# sourceMappingURL=usage.js.map
Index: frontend/node_modules/tsutils/util/usage.js.map
===================================================================
--- frontend/node_modules/tsutils/util/usage.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/usage.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"usage.js","sourceRoot":"","sources":["usage.ts"],"names":[],"mappings":";;;AAAA,iCAQgB;AAChB,iCAAiC;AA2BjC,IAAkB,iBAMjB;AAND,WAAkB,iBAAiB;IAC/B,mEAAa,CAAA;IACb,yDAAQ,CAAA;IACR,2DAAS,CAAA;IACT,6DAAU,CAAA;IACV,uDAA8B,CAAA;AAClC,CAAC,EANiB,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAMlC;AAED,IAAkB,WAOjB;AAPD,WAAkB,WAAW;IACzB,uDAAa,CAAA;IACb,6CAAQ,CAAA;IACR,+CAAS,CAAA;IACT,qEAAoC,CAAA;IACpC,2CAA8B,CAAA;IAC9B,uDAAa,CAAA;AACjB,CAAC,EAPiB,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAO5B;AAED,oGAAoG;AACpG,SAAgB,cAAc,CAAC,IAAmB;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC;IAC5B,QAAQ,MAAM,CAAC,IAAI,EAAE;QACjB,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;YAC5B,OAAO,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,cAAkB,CAAC,CAAC,SAAS,CAAC;QAClG,KAAK,EAAE,CAAC,UAAU,CAAC,2BAA2B;YAC1C,OAA2B,MAAM,CAAC,MAAO,CAAC,KAAK,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB;gBAC/E,MAAM,CAAC,MAAO,CAAC,MAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB;gBAClE,CAAC;gBACD,CAAC,cAAkB,CAAC;QAC5B,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS;YACxB,OAAO,4CAAoD,CAAC;QAChE,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;YAC5B,IAAuB,MAAO,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC1C,IAAI,mBAAmB,CAAmB,MAAM,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS;oBAC9E,OAAO,qCAA6C,CAAC;gBACzD,yBAA6B;aAChC;YACD,MAAM;QACV,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;YAC9B,0CAA0C;YAC1C,IAAyB,MAAO,CAAC,YAAY,KAAK,SAAS;gBAClC,MAAO,CAAC,YAAY,KAAK,IAAI;gBAClD,mBAAuB,CAAC,gCAAgC;YAC5D,MAAM;QACV,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;YAC/B,mBAAuB;QAC3B,QAAQ;QACR,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;YAC7B,IAAwB,MAAO,CAAC,WAAW,KAAK,IAAI;gBAChD,gCAAoC;YACxC,MAAM;QACV,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7B,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAC9B,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACtC,KAAK,EAAE,CAAC,UAAU,CAAC,wBAAwB,CAAC;QAC5C,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;YACtC,IAA0B,MAAO,CAAC,IAAI,KAAK,IAAI;gBAC3C,gCAAoC,CAAC,gCAAgC;YACzE,MAAM;QACV,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAChC,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;QACtC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACrC,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACrC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAC/B,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAC/B,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpC,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QAClC,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACrC,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAChC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,4CAA4C;QAC9E,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACrC,KAAK,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC;QAC9C,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACxC,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACxC,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QACjC,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;YAC/B,MAAM;QACV;YACI,gCAAoC;KAC3C;AACL,CAAC;AAvED,wCAuEC;AAED,SAAgB,oBAAoB,CAAC,IAAmB;IACpD,QAAQ,IAAI,CAAC,MAAO,CAAC,IAAI,EAAE;QACvB,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;QACjC,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACxC,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB;YACnC,oBAA8B;QAClC,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;YAC9B,OAAO,4BAAgD,CAAC;QAC5D,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;YAC9B,mBAA6B;QACjC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;QACnC,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY;YAC3B,OAAO,4BAAgD,CAAC,CAAC,gCAAgC;QAC7F,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB,CAAC;QAC3C,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;YAC9B,OAAyD,IAAI,CAAC,MAAO,CAAC,IAAI,KAAK,IAAI;gBAC/E,CAAC,CAAC,4BAAgD,CAAC,gCAAgC;gBACnF,CAAC,CAAC,SAAS,CAAC;QACpB,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB;YAChC,yBAAmC;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS;YACxB,IAAI,IAAI,CAAC,MAAO,CAAC,MAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,CAAC,mBAAmB,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;gBACpH,OAAO;QACX,gBAAgB;QACpB,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC;QAClC,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB;YAClC,OAAoC,IAAI,CAAC,MAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,eAAyB,CAAC,CAAC,SAAS,CAAC;QACzG,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACvC,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB;YACjC,qBAA+B;KACtC;AACL,CAAC;AAhCD,oDAgCC;AAED,SAAgB,oBAAoB,CAAC,UAAyB;IAC1D,OAAO,IAAI,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAClD,CAAC;AAFD,oDAEC;AAsBD,MAAe,aAAa;IAMxB,YAAsB,OAAgB;QAAhB,YAAO,GAAP,OAAO,CAAS;QAL5B,eAAU,GAAG,IAAI,GAAG,EAAgC,CAAC;QACrD,UAAK,GAAkB,EAAE,CAAC;QAC1B,qBAAgB,GAA4C,SAAS,CAAC;QACxE,gBAAW,GAAuC,SAAS,CAAC;IAE3B,CAAC;IAEnC,WAAW,CACd,UAAkB,EAClB,IAAqB,EACrB,QAA+B,EAC/B,QAAiB,EACjB,MAAyB;QAEzB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,CAAC;QACpE,MAAM,WAAW,GAAoB;YACjC,MAAM;YACN,QAAQ;YACR,WAAW,EAAE,IAAI;SACpB,CAAC;QACF,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE;YACxB,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;gBACtB,MAAM;gBACN,YAAY,EAAE,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,EAAE;aACX,CAAC,CAAC;SACN;aAAM;YACH,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC;YAC1B,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC3C;IACL,CAAC;IAEM,MAAM,CAAC,GAAgB;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,GAAG,CAAC,EAAoB;QAC3B,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;YACnC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACjC,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAC7C,MAAM,MAAM,GAAiB;oBACzB,YAAY,EAAE,EAAE;oBAChB,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;oBAC9B,aAAa,EAAE,IAAI,CAAC,OAAO;oBAC3B,IAAI,EAAE,EAAE;iBACX,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,YAAY;oBACrC,IAAI,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;wBACjC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAgB,KAAK,CAAC,WAAW,CAAC,CAAC;gBACnE,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI;oBAC3B,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM;wBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,EAAE,CAAC,MAAM,EAAiB,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;aAC5D;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uDAAuD;IAChD,YAAY,CAAC,KAAoB,IAAG,CAAC,CAAC,mCAAmC;IAEzE,2BAA2B,CAAC,IAAY,EAAE,SAAkB,EAAE,OAAgB,EAAE,kBAA2B;QAC9G,IAAI,KAAiC,CAAC;QACtC,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACrC,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;SACrC;aAAM;YACH,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAC3C;QACD,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,KAAK,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAC1C;aAAM;YACH,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;SAC9C;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,sBAAsB,CAAC,IAAY,EAAE,SAAkB;QAC1D,IAAI,KAA4B,CAAC;QACjC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;SAChC;aAAM;YACH,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACtC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE;YACrB,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACrC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAES,UAAU;QAChB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IACpB,CAAC;IAES,SAAS,CAAC,GAAgB,EAAE,SAAS,GAAG,IAAI,CAAC,UAAU;QAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9D,OAAO,KAAK,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAIS,eAAe,CAAC,IAAiB,IAAG,CAAC,CAAC,kDAAkD;CACrG;AAED,MAAM,SAAU,SAAQ,aAAa;IAIjC,YAAoB,UAAmB,EAAE,MAAe;QACpD,KAAK,CAAC,MAAM,CAAC,CAAC;QADE,eAAU,GAAV,UAAU,CAAS;QAH/B,aAAQ,GAAyB,SAAS,CAAC;QAC3C,gBAAW,GAAG,IAAI,YAAY,CAAC,IAAI,mBAAyB,CAAC;IAIrE,CAAC;IAEM,WAAW,CACd,UAAkB,EAClB,IAAqB,EACrB,QAA+B,EAC/B,QAAiB,EACjB,MAAyB;QAEzB,IAAI,MAAM,iBAA2B;YACjC,OAAO,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;IAEM,MAAM,CAAC,GAAgB,EAAE,MAAc;QAC1C,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW;YAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAEM,YAAY,CAAC,EAAiB;QACjC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;SAC7B;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;SAC/B;IACL,CAAC;IAEM,GAAG,CAAC,EAAoB;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAChC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU;mBAC3C,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvE,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;YACnC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YACnC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,KAAK,IAAI;mBAC1C,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvE,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,MAAM,YAAa,SAAQ,aAAa;IACpC,YAAsB,OAAc,EAAY,SAAwB;QACpE,KAAK,CAAC,KAAK,CAAC,CAAC;QADK,YAAO,GAAP,OAAO,CAAO;QAAY,cAAS,GAAT,SAAS,CAAe;IAExE,CAAC;IAES,eAAe,CAAC,GAAgB;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEM,mBAAmB,CAAC,QAA+B;QACtD,OAAO,IAAI,CAAC,SAAS,GAAG,QAAQ;YAC5B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;CACJ;AAED,MAAM,SAAU,SAAQ,YAAY;IAChC,YAAY,MAAa;QACrB,KAAK,CAAC,MAAM,mBAAyB,CAAC;IAC1C,CAAC;IAEM,GAAG;QACN,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CACJ;AASD,MAAM,oBAAqB,SAAQ,YAAY;IAG3C,YAAY,MAAa;QACrB,KAAK,CAAC,MAAM,0BAAgC,CAAC;QAHzC,WAAM,mBAAqC;IAInD,CAAC;IAEM,WAAW,CAAC,QAAmC;QAClD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAEM,MAAM,CAAC,GAAgB;QAC1B,IAAI,IAAI,CAAC,MAAM,qBAAuC;YAClD,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACJ;AAED,MAAM,aAAc,SAAQ,YAAY;IACpC,YAAY,MAAa;QACrB,KAAK,CAAC,MAAM,mBAAyB,CAAC;IAC1C,CAAC;IAEM,SAAS;QACZ,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CACJ;AAED,MAAe,4BAAqD,SAAQ,YAAY;IAGpF,YAAoB,KAAoB,EAAU,OAA0B,EAAE,MAAa;QACvF,KAAK,CAAC,MAAM,mBAAyB,CAAC;QADtB,UAAK,GAAL,KAAK,CAAe;QAAU,YAAO,GAAP,OAAO,CAAmB;IAE5E,CAAC;IAEM,GAAG,CAAC,EAAoB;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,EAAE,CACL;YACI,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,aAAa,EAAE,KAAK;SACvB,EACD,IAAI,CAAC,KAAK,EACV,IAAI,CACP,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,GAAgB,EAAE,MAAc;QAC1C,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YACpE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxB;aAAM;YACH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SACzC;IACL,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;CACJ;AAED,MAAM,uBAAwB,SAAQ,4BAA2C;IAG7E,YAAY,IAAmB,EAAE,MAAa;QAC1C,KAAK,CAAC,IAAI,iBAA2B,MAAM,CAAC,CAAC;QAHvC,gBAAW,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IAIhD,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;IACxC,CAAC;CACJ;AAED,MAAM,oBAAqB,SAAQ,4BAA0C;IAGzE,YAAY,IAAmB,EAAE,MAAa;QAC1C,KAAK,CAAC,IAAI,EAAE,4BAAgD,EAAE,MAAM,CAAC,CAAC;QAHhE,gBAAW,GAAG,IAAI,YAAY,CAAC,IAAI,mBAAyB,CAAC;IAIvE,CAAC;CACJ;AAED,MAAM,UAAW,SAAQ,YAAY;IACjC,YAAoB,cAAqB,EAAE,MAAa;QACpD,KAAK,CAAC,MAAM,gBAAsB,CAAC;QADnB,mBAAc,GAAd,cAAc,CAAO;IAEzC,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;CACJ;AAED,SAAS,cAAc,CAAC,WAA0B;IAC9C,OAAO;QACH,WAAW;QACX,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,oBAAoB,CAAC,WAAW,CAAE;KAC7C,CAAC;AACN,CAAC;AAED,MAAM,cAAe,SAAQ,YAAY;IAIrC,YAAoB,QAAiB,EAAU,UAAmB,EAAE,MAAa;QAC7E,KAAK,CAAC,MAAM,mBAAyB,CAAC;QADtB,aAAQ,GAAR,QAAQ,CAAS;QAAU,eAAU,GAAV,UAAU,CAAS;QAH1D,gBAAW,GAAG,IAAI,YAAY,CAAC,IAAI,mBAAyB,CAAC;QAC7D,aAAQ,GAA4B,SAAS,CAAC;IAItD,CAAC;IAEM,MAAM,CAAC,EAAoB;QAC9B,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAEM,GAAG,CAAC,EAAoB;QAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YAC1C,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;gBAC1B,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrG,OAAO,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE;oBAC1B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC;oBACvD,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;aACN;iBAAM;gBACH,KAAK,EAAE,KAAK,MAAM,WAAW,IAAI,QAAQ,CAAC,YAAY,EAAE;oBACpD,KAAK,MAAM,QAAQ,IAAI,YAAY,CAAC,YAAY;wBAC5C,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW;4BACpC,SAAS,KAAK,CAAC;oBACvB,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;iBAC/D;gBACD,YAAY,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;gBACvC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE;oBAC7B,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAC/B,SAAS;oBACb,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC/B;aACJ;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,IAAI,mBAAyB,CAAC;IACtE,CAAC;IAEM,2BAA2B,CAAC,IAAY,EAAE,QAAiB,EAAE,OAAgB,EAAE,kBAA2B;QAC7G,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC;YAChD,OAAO,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACtH,OAAO,KAAK,CAAC,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAC3G,CAAC;IAEM,sBAAsB,CAAC,IAAY,EAAE,QAAiB;QACzD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC;YAChD,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC;IAEM,MAAM,CAAC,GAAgB,EAAE,MAAc;QAC1C,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEM,OAAO,CAAC,OAAgB,EAAE,SAAkB;QAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IAEM,YAAY,CAAC,IAAmB,EAAE,GAAmB;QACxD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;CACJ;AAED,SAAS,mBAAmB,CAAC,IAAmB;IAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC;IAC1B,OAAO,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;QAC9C,MAAM,GAAG,MAAM,CAAC,MAAO,CAAC;IAC5B,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,8GAA8G;AAC9G,0DAA0D;AAC1D,uEAAuE;AACvE,MAAM,WAAW;IAAjB;QACY,YAAO,GAAG,IAAI,GAAG,EAA+B,CAAC;IA+O7D,CAAC;IA7OU,QAAQ,CAAC,UAAyB;QACrC,MAAM,gBAAgB,GAAG,CAAC,QAAsB,EAAE,GAAkB,EAAE,EAAE;YACpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,MAAM,QAAQ,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CACvB,UAAU,CAAC,iBAAiB,IAAI,QAAQ,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAChF,CAAC,QAAQ,CACZ,CAAC;QACF,MAAM,EAAE,GAAG,CAAC,IAAa,EAAQ,EAAE;YAC/B,IAAI,2BAAoB,CAAC,IAAI,CAAC;gBAC1B,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAClH,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACf,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;oBAC9B,OAAO,iBAAiB,CAAC,IAAI,EAAuB,IAAK,CAAC,IAAI,KAAK,SAAS;wBACxE,CAAC,CAAC,IAAI,oBAAoB,CAAsB,IAAK,CAAC,IAAK,EAAE,IAAI,CAAC,MAAM,CAAC;wBACzE,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,mBAAyB,CAAC,CAAC;gBACjE,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;oBAC/B,IAAI,CAAC,kBAAkB,CAAsB,IAAI,EAAE,IAAI,EAAE,4BAAgD,CAAC,CAAC;oBAC3G,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,mBAAyB,CAAC,CAAC;gBAC1F,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC;gBACxC,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB;oBACnC,IAAI,CAAC,kBAAkB,CAAoD,IAAI,EAAE,IAAI,eAAyB,CAAC;oBAC/G,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,eAAqB,CAAC,CAAC;gBACtF,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;oBAC9B,IAAI,CAAC,kBAAkB,CAAqB,IAAI,EAAE,IAAI,cAAwB,CAAC;oBAC/E,OAAO,iBAAiB,CACpB,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAsB,IAAK,CAAC,IAAI,CAAC,IAAI,EACpC,kBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAC/F,CAAC;gBACN,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB;oBAChC,OAAO,IAAI,CAAC,aAAa,CAAuB,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBAC7E,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;oBACzB,OAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,eAAqB,CAAC,CAAC;gBACtF,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;gBACtC,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;gBACjC,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC/B,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBACrC,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;gBACvC,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC/B,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC/B,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBACnC,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC;gBACjC,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC;gBACtC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBACnC,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY;oBAC3B,OAAO,IAAI,CAAC,8BAA8B,CAA6B,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBACvG,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;oBAC9B,OAAO,IAAI,CAAC,sBAAsB,CAAyB,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC;gBAC3F,iCAAiC;gBACjC,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;oBACtC,IAAI,CAAC,0BAA0B,CAA6B,IAAI,CAAC,CAAC;oBAClE,MAAM;gBACV,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS;oBACxB,IAAI,IAAI,CAAC,MAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;wBAClD,CAA2B,IAAK,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;4BAChC,IAAK,CAAC,IAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;wBACrG,IAAI,CAAC,kBAAkB,CAAsC,IAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC3F,MAAM;gBACV,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;oBACzB,IAAI,CAAC,MAAM,CAAC,WAAW,CACnB,sBAAe,CAAiB,IAAK,CAAC,IAAI,CAAE,EAC5B,IAAK,CAAC,IAAI,oBAE1B,IAAI,gBAEP,CAAC;oBACF,MAAM;gBACV,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;gBAChC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBACnC,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBACnC,KAAK,EAAE,CAAC,UAAU,CAAC,uBAAuB;oBACtC,IAAI,CAAC,kBAAkB,CAAsB,IAAI,EAAE,KAAK,EAAE,4BAAgD,CAAC,CAAC;oBAC5G,MAAM;gBACV,KAAK,EAAE,CAAC,UAAU,CAAC,aAAa;oBAC5B,IAAI,CAAC,MAAM,CAAC,WAAW,CACW,IAAK,CAAC,IAAI,CAAC,IAAI,EACf,IAAK,CAAC,IAAI,EACxC,IAAI,CAAC,MAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,mBAAiC,CAAC,aAA2B,EAC5G,KAAK,eAER,CAAC;oBACF,MAAM;gBACV,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;oBAC9B,IAAyB,IAAK,CAAC,YAAY,KAAK,SAAS;wBACrD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAsB,IAAK,CAAC,YAAa,EAAuB,IAAK,CAAC,IAAI,CAAC,CAAC;oBAC/G,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAsB,IAAK,CAAC,IAAI,CAAC,CAAC;gBACrE,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;oBAC/B,IAA0B,IAAK,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;wBACxE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAsC,IAAK,CAAC,UAAU,CAAC,CAAC;oBAC3F,MAAM;gBACV,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;oBACzB,MAAM,MAAM,GAAG,cAAc,CAAgB,IAAI,CAAC,CAAC;oBACnD,IAAI,MAAM,KAAK,SAAS;wBACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAiB,IAAI,EAAC,CAAC,CAAC;oBAChE,OAAO;aAEd;YAED,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,iBAAiB,GAAG,CAAoB,IAAO,EAAE,KAAY,EAAE,OAA0B,YAAY,EAAE,EAAE;YAC3G,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,IAAqB,IAAK,CAAC,mBAAmB,KAAK,SAAS;gBACnG,IAAI,CAAC,kBAAkB,CAAkB,IAAK,CAAC,mBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3F,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QAEF,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC;QAEpB,SAAS,YAAY,CAAC,IAAa;YAC/B,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,IAA4B,EAAE,EAA2B,EAAE,KAAuB;QAC7G,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACjE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnB,KAAK,CAAC,WAAW,iBAAmC,CAAC;QACrD,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrB,KAAK,CAAC,WAAW,kBAAoC,CAAC;QACtD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClB,KAAK,CAAC,WAAW,mBAAqC,CAAC;QACvD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IAC7B,CAAC;IAEO,8BAA8B,CAAC,IAAgC,EAAE,EAA2B,EAAE,KAAuB;QACzH,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB;YAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,gBAA0B,CAAC;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YACjG,CAAC,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;YACpD,CAAC,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YACjC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACzB,KAAK,CAAC,SAAS,EAAE,CAAC;YAClB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACjB;QACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;IAC7B,CAAC;IAEO,aAAa,CAAC,IAA0B,EAAE,IAA2C;QACzF,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,kBAAkB;YAC5C,OAAO,IAAI,CACP,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,2BAA2B,CACnC,SAAS,EACT,KAAK,EACL,IAAI,EACJ,KAAK,CACR,CACR,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE;YAC7C,MAAM,QAAQ,GAAG,mBAAmB,CAA0B,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,CAAC,WAAW,CACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,oBAAkC,QAAQ,EAAE,iCAAqD,CAC7H,CAAC;YACF,MAAM,OAAO,GAAG,kBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC1E,OAAO,IAAI,CACP,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,2BAA2B,CACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,QAAQ,EACR,OAAO,EACP,OAAO,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAC/C,CACJ,CAAC;SACL;QACD,OAAO,IAAI,CACP,IAAI,EACJ,IAAI,CAAC,MAAM,CAAC,2BAA2B,CACnC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EACrB,KAAK,EACL,IAAI,EACJ,2BAA2B,CAAC,IAAI,CAAC,CACpC,CACJ,CAAC;IACN,CAAC;IAEO,kBAAkB,CAAC,IAAyB,EAAE,WAAoB,EAAE,MAAyB;QACjG,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,MAAM,CAAC,WAAW,CACH,IAAI,CAAC,IAAK,CAAC,IAAI,EAChB,IAAI,CAAC,IAAI,EACxB,WAAW,CAAC,CAAC,eAA6B,CAAC,iBAA+B,EAC1E,kBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EACxD,MAAM,CACT,CAAC;IACV,CAAC;IAEO,kBAAkB,CAAC,IAAoB,EAAE,WAAoB,EAAE,QAAiB;QACpF,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;YACtC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAC1B,IAAI,CAAC,IAAI,EACT,IAAI,EACJ,WAAW,CAAC,CAAC,eAA6B,CAAC,iBAA+B,EAC1E,QAAQ,gBAEX,CAAC;QACN,qCAA8B,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,CAAC,WAAW,CACnB,WAAW,CAAC,IAAI,CAAC,IAAI,EACrB,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,eAA6B,CAAC,iBAA+B,EAC5F,QAAQ,gBAEX,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,0BAA0B,CAAC,eAA2C;QAC1E,MAAM,WAAW,GAAG,2CAAoC,CAAC,eAAe,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB;YAC7E,kBAAW,CAAC,eAAe,CAAC,MAAO,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAChF,KAAK,MAAM,WAAW,IAAI,eAAe,CAAC,YAAY;YAClD,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACzE,CAAC;CACJ;AAED,SAAS,mBAAmB,CAAC,IAA6B;IACtD,OAAO,IAAI,CAAC,MAAO,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,IAAI,kBAAW,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAC7H,CAAC;AAED,SAAS,2BAA2B,CAAC,EAAwB;IACzD,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;QACnE,OAAO,KAAK,CAAC;IACjB,OAAO,uBAAuB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAmB;IAChD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU;QACpC,IAAI,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,iBAAiB,IAAI,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;YACvG,OAAO,IAAI,CAAC;IACpB,OAAO,KAAK,CAAC;AACjB,CAAC"}
Index: frontend/node_modules/tsutils/util/util.d.ts
===================================================================
--- frontend/node_modules/tsutils/util/util.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/util.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,265 @@
+import * as ts from 'typescript';
+import { NodeWrap } from './convert-ast';
+export declare function getChildOfKind<T extends ts.SyntaxKind>(node: ts.Node, kind: T, sourceFile?: ts.SourceFile): ts.Token<T> | undefined;
+export declare function isTokenKind(kind: ts.SyntaxKind): boolean;
+export declare function isNodeKind(kind: ts.SyntaxKind): boolean;
+export declare function isAssignmentKind(kind: ts.SyntaxKind): boolean;
+export declare function isTypeNodeKind(kind: ts.SyntaxKind): boolean;
+export declare function isJsDocKind(kind: ts.SyntaxKind): boolean;
+export declare function isKeywordKind(kind: ts.SyntaxKind): boolean;
+export declare function isThisParameter(parameter: ts.ParameterDeclaration): boolean;
+export declare function getModifier(node: ts.Node, kind: ts.Modifier['kind']): ts.Modifier | undefined;
+export declare function hasModifier(modifiers: ts.ModifiersArray | undefined, ...kinds: Array<ts.Modifier['kind']>): boolean;
+export declare function isParameterProperty(node: ts.ParameterDeclaration): boolean;
+export declare function hasAccessModifier(node: ts.ClassElement | ts.ParameterDeclaration): boolean;
+export declare const isNodeFlagSet: (node: ts.Node, flag: ts.NodeFlags) => boolean;
+export declare const isTypeFlagSet: (type: ts.Type, flag: ts.TypeFlags) => boolean;
+export declare const isSymbolFlagSet: (symbol: ts.Symbol, flag: ts.SymbolFlags) => boolean;
+export declare function isObjectFlagSet(objectType: ts.ObjectType, flag: ts.ObjectFlags): boolean;
+export declare function isModifierFlagSet(node: ts.Node, flag: ts.ModifierFlags): boolean;
+export declare function getPreviousStatement(statement: ts.Statement): ts.Statement | undefined;
+export declare function getNextStatement(statement: ts.Statement): ts.Statement | undefined;
+/** Returns the token before the start of `node` or `undefined` if there is none. */
+export declare function getPreviousToken(node: ts.Node, sourceFile?: ts.SourceFile): ts.Node | undefined;
+/** Returns the next token that begins after the end of `node`. Returns `undefined` for SourceFile and EndOfFileToken */
+export declare function getNextToken(node: ts.Node, sourceFile?: ts.SourceFile): ts.Node | undefined;
+/** Returns the token at or following the specified position or undefined if none is found inside `parent`. */
+export declare function getTokenAtPosition(parent: ts.Node, pos: number, sourceFile?: ts.SourceFile, allowJsDoc?: boolean): ts.Node | undefined;
+/**
+ * Return the comment at the specified position.
+ * You can pass an optional `parent` to avoid some work finding the corresponding token starting at `sourceFile`.
+ * If the `parent` parameter is passed, `pos` must be between `parent.pos` and `parent.end`.
+*/
+export declare function getCommentAtPosition(sourceFile: ts.SourceFile, pos: number, parent?: ts.Node): ts.CommentRange | undefined;
+/**
+ * Returns whether the specified position is inside a comment.
+ * You can pass an optional `parent` to avoid some work finding the corresponding token starting at `sourceFile`.
+ * If the `parent` parameter is passed, `pos` must be between `parent.pos` and `parent.end`.
+ */
+export declare function isPositionInComment(sourceFile: ts.SourceFile, pos: number, parent?: ts.Node): boolean;
+export declare function commentText(sourceText: string, comment: ts.CommentRange): string;
+/** Returns the deepest AST Node at `pos`. Returns undefined if `pos` is outside of the range of `node` */
+export declare function getAstNodeAtPosition(node: ts.Node, pos: number): ts.Node | undefined;
+/**
+ * Returns the NodeWrap of deepest AST node that contains `pos` between its `pos` and `end`.
+ * Only returns undefined if pos is outside of `wrap`
+ */
+export declare function getWrappedNodeAtPosition(wrap: NodeWrap, pos: number): NodeWrap | undefined;
+export declare function getPropertyName(propertyName: ts.PropertyName): string | undefined;
+export declare function forEachDestructuringIdentifier<T>(pattern: ts.BindingPattern, fn: (element: ts.BindingElement & {
+    name: ts.Identifier;
+}) => T): T | undefined;
+export declare function forEachDeclaredVariable<T>(declarationList: ts.VariableDeclarationList, cb: (element: (ts.VariableDeclaration | ts.BindingElement) & {
+    name: ts.Identifier;
+}) => T): T | undefined;
+export declare enum VariableDeclarationKind {
+    Var = 0,
+    Let = 1,
+    Const = 2
+}
+export declare function getVariableDeclarationKind(declarationList: ts.VariableDeclarationList): VariableDeclarationKind;
+export declare function isBlockScopedVariableDeclarationList(declarationList: ts.VariableDeclarationList): boolean;
+export declare function isBlockScopedVariableDeclaration(declaration: ts.VariableDeclaration): boolean;
+export declare function isBlockScopedDeclarationStatement(statement: ts.Statement): statement is ts.DeclarationStatement;
+export declare function isInSingleStatementContext(statement: ts.Statement): boolean;
+export declare enum ScopeBoundary {
+    None = 0,
+    Function = 1,
+    Block = 2,
+    Type = 4,
+    ConditionalType = 8
+}
+export declare enum ScopeBoundarySelector {
+    Function = 1,
+    Block = 3,
+    Type = 7,
+    InferType = 8
+}
+export declare function isScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function isTypeScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function isFunctionScopeBoundary(node: ts.Node): ScopeBoundary;
+export declare function isBlockScopeBoundary(node: ts.Node): ScopeBoundary;
+/** Returns true for scope boundaries that have their own `this` reference instead of inheriting it from the containing scope */
+export declare function hasOwnThisReference(node: ts.Node): boolean;
+export declare function isFunctionWithBody(node: ts.Node): node is ts.FunctionLikeDeclaration & {
+    body: {};
+};
+/**
+ * Iterate over all tokens of `node`
+ *
+ * @param node The node whose tokens should be visited
+ * @param cb Is called for every token contained in `node`
+ */
+export declare function forEachToken(node: ts.Node, cb: (node: ts.Node) => void, sourceFile?: ts.SourceFile): void;
+export declare type ForEachTokenCallback = (fullText: string, kind: ts.SyntaxKind, range: ts.TextRange, parent: ts.Node) => void;
+/**
+ * Iterate over all tokens and trivia of `node`
+ *
+ * @description JsDoc comments are treated like regular comments
+ *
+ * @param node The node whose tokens should be visited
+ * @param cb Is called for every token contained in `node` and trivia before the token
+ */
+export declare function forEachTokenWithTrivia(node: ts.Node, cb: ForEachTokenCallback, sourceFile?: ts.SourceFile): void;
+export declare type ForEachCommentCallback = (fullText: string, comment: ts.CommentRange) => void;
+/** Iterate over all comments owned by `node` or its children */
+export declare function forEachComment(node: ts.Node, cb: ForEachCommentCallback, sourceFile?: ts.SourceFile): void;
+export interface LineRange extends ts.TextRange {
+    contentLength: number;
+}
+export declare function getLineRanges(sourceFile: ts.SourceFile): LineRange[];
+/** Get the line break style used in sourceFile. This function only looks at the first line break. If there is none, \n is assumed. */
+export declare function getLineBreakStyle(sourceFile: ts.SourceFile): "\n" | "\r\n";
+/**
+ * Determines whether the given text parses as a standalone identifier.
+ * This is not a guarantee that it works in every context. The property name in PropertyAccessExpressions for example allows reserved words.
+ * Depending on the context it could be parsed as contextual keyword or TypeScript keyword.
+ */
+export declare function isValidIdentifier(text: string, languageVersion?: ts.ScriptTarget): boolean;
+/**
+ * Determines whether the given text can be used to access a property with a PropertyAccessExpression while preserving the property's name.
+ */
+export declare function isValidPropertyAccess(text: string, languageVersion?: ts.ScriptTarget): boolean;
+/**
+ * Determines whether the given text can be used as unquoted name of a property declaration while preserving the property's name.
+ */
+export declare function isValidPropertyName(text: string, languageVersion?: ts.ScriptTarget): boolean;
+/**
+ * Determines whether the given text can be parsed as a numeric literal.
+ */
+export declare function isValidNumericLiteral(text: string, languageVersion?: ts.ScriptTarget): boolean;
+/**
+ * Determines whether the given text can be used as JSX tag or attribute name while preserving the exact name.
+ */
+export declare function isValidJsxIdentifier(text: string, languageVersion?: ts.ScriptTarget): boolean;
+export declare function isNumericPropertyName(name: string | ts.__String): boolean;
+export declare function isSameLine(sourceFile: ts.SourceFile, pos1: number, pos2: number): boolean;
+export declare enum SideEffectOptions {
+    None = 0,
+    TaggedTemplate = 1,
+    Constructor = 2,
+    JsxElement = 4
+}
+export declare function hasSideEffects(node: ts.Expression, options?: SideEffectOptions): boolean;
+/** Returns the VariableDeclaration or ParameterDeclaration that contains the BindingElement */
+export declare function getDeclarationOfBindingElement(node: ts.BindingElement): ts.VariableDeclaration | ts.ParameterDeclaration;
+export declare function isExpressionValueUsed(node: ts.Expression): boolean;
+export declare enum AccessKind {
+    None = 0,
+    Read = 1,
+    Write = 2,
+    Delete = 4,
+    ReadWrite = 3,
+    Modification = 6
+}
+export declare function getAccessKind(node: ts.Node): AccessKind;
+export declare function isReassignmentTarget(node: ts.Expression): boolean;
+export declare function canHaveJsDoc(node: ts.Node): node is ts.HasJSDoc;
+/** Gets the JSDoc of a node. For performance reasons this function should only be called when `canHaveJsDoc` returns true. */
+export declare function getJsDoc(node: ts.Node, sourceFile?: ts.SourceFile): ts.JSDoc[];
+/**
+ * Parses the JsDoc of any node. This function is made for nodes that don't get their JsDoc parsed by the TypeScript parser.
+ *
+ * @param considerTrailingComments When set to `true` this function uses the trailing comments if the node starts on the same line
+ *                                 as the previous node ends.
+ */
+export declare function parseJsDocOfNode(node: ts.Node, considerTrailingComments?: boolean, sourceFile?: ts.SourceFile): ts.JSDoc[];
+export declare enum ImportKind {
+    ImportDeclaration = 1,
+    ImportEquals = 2,
+    ExportFrom = 4,
+    DynamicImport = 8,
+    Require = 16,
+    ImportType = 32,
+    All = 63,
+    AllImports = 59,
+    AllStaticImports = 3,
+    AllImportExpressions = 24,
+    AllRequireLike = 18
+}
+export declare function findImports(sourceFile: ts.SourceFile, kinds: ImportKind, ignoreFileName?: boolean): (ts.StringLiteral | ts.NoSubstitutionTemplateLiteral)[];
+export declare type ImportLike = ts.ImportDeclaration | ts.ImportEqualsDeclaration & {
+    moduleReference: ts.ExternalModuleReference;
+} | ts.ExportDeclaration & {
+    moduleSpecifier: {};
+} | ts.CallExpression & {
+    expression: ts.Token<ts.SyntaxKind.ImportKeyword> | ts.Identifier & {
+        text: 'require';
+    };
+    arguments: [ts.Expression, ...ts.Expression[]];
+} | ts.ImportTypeNode;
+export declare function findImportLikeNodes(sourceFile: ts.SourceFile, kinds: ImportKind, ignoreFileName?: boolean): ImportLike[];
+/**
+ * Ambient context means the statement itself has the `declare` keyword
+ * or is inside a `declare namespace`,  `delcare module` or `declare global`.
+ */
+export declare function isStatementInAmbientContext(node: ts.Statement): boolean;
+/** Includes `declare namespace`, `declare module` and `declare global` and namespace nested in one of the aforementioned. */
+export declare function isAmbientModuleBlock(node: ts.Node): node is ts.ModuleBlock;
+export declare function getIIFE(func: ts.FunctionExpression | ts.ArrowFunction): ts.CallExpression | undefined;
+export declare type StrictCompilerOption = 'noImplicitAny' | 'noImplicitThis' | 'strictNullChecks' | 'strictFunctionTypes' | 'strictPropertyInitialization' | 'alwaysStrict' | 'strictBindCallApply';
+export declare function isStrictCompilerOptionEnabled(options: ts.CompilerOptions, option: StrictCompilerOption): boolean;
+export declare type BooleanCompilerOptions = {
+    [K in keyof ts.CompilerOptions]: NonNullable<ts.CompilerOptions[K]> extends boolean ? K : never;
+} extends {
+    [_ in keyof ts.CompilerOptions]: infer U;
+} ? U : never;
+/**
+ * Checks if a given compiler option is enabled.
+ * It handles dependencies of options, e.g. `declaration` is implicitly enabled by `composite` or `strictNullChecks` is enabled by `strict`.
+ * However, it does not check dependencies that are already checked and reported as errors, e.g. `checkJs` without `allowJs`.
+ * This function only handles boolean flags.
+ */
+export declare function isCompilerOptionEnabled(options: ts.CompilerOptions, option: BooleanCompilerOptions | 'stripInternal'): boolean;
+/**
+ * Has nothing to do with `isAmbientModuleBlock`.
+ *
+ * @returns `true` if it's a global augmentation or has a string name.
+ */
+export declare function isAmbientModule(node: ts.ModuleDeclaration): boolean;
+/**
+ * @deprecated use `getTsCheckDirective` instead since `// @ts-nocheck` is no longer restricted to JS files.
+ * @returns the last `// @ts-check` or `// @ts-nocheck` directive in the given file.
+ */
+export declare function getCheckJsDirective(source: string): ts.CheckJsDirective | undefined;
+/** @returns the last `// @ts-check` or `// @ts-nocheck` directive in the given file. */
+export declare function getTsCheckDirective(source: string): ts.CheckJsDirective | undefined;
+export declare function isConstAssertion(node: ts.AssertionExpression): boolean;
+/** Detects whether an expression is affected by an enclosing 'as const' assertion and therefore treated literally. */
+export declare function isInConstContext(node: ts.Expression): boolean;
+/** Returns true for `Object.defineProperty(o, 'prop', {value, writable: false})` and  `Object.defineProperty(o, 'prop', {get: () => 1})`*/
+export declare function isReadonlyAssignmentDeclaration(node: ts.CallExpression, checker: ts.TypeChecker): boolean;
+/** Determines whether a call to `Object.defineProperty` is statically analyzable. */
+export declare function isBindableObjectDefinePropertyCall(node: ts.CallExpression): boolean;
+export interface WellKnownSymbolLiteral extends ts.PropertyAccessExpression {
+    expression: ts.Identifier & {
+        text: 'Symbol';
+        escapedText: 'symbol';
+    };
+}
+export declare function isWellKnownSymbolLiterally(node: ts.Expression): node is WellKnownSymbolLiteral;
+export interface PropertyName {
+    displayName: string;
+    symbolName: ts.__String;
+}
+/** @deprecated typescript 4.3 removed the concept of literal well known symbols. Use `getPropertyNameFromType` instead. */
+export declare function getPropertyNameOfWellKnownSymbol(node: WellKnownSymbolLiteral): PropertyName;
+export interface LateBoundPropertyNames {
+    /** Whether all constituents are literal names. */
+    known: boolean;
+    names: PropertyName[];
+}
+export declare function getLateBoundPropertyNames(node: ts.Expression, checker: ts.TypeChecker): LateBoundPropertyNames;
+export declare function getLateBoundPropertyNamesOfPropertyName(node: ts.PropertyName, checker: ts.TypeChecker): LateBoundPropertyNames;
+/** Most declarations demand there to be only one statically known name, e.g. class members with computed name. */
+export declare function getSingleLateBoundPropertyNameOfPropertyName(node: ts.PropertyName, checker: ts.TypeChecker): PropertyName | undefined;
+export declare function unwrapParentheses(node: ts.Expression): ts.Expression;
+export declare function formatPseudoBigInt(v: ts.PseudoBigInt): `${string}n` | `-${string}n`;
+/**
+ * Determines whether the given `SwitchStatement`'s `case` clauses cover every possible value of the switched expression.
+ * The logic is the same as TypeScript's control flow analysis.
+ * This does **not** check whether all `case` clauses do a certain action like assign a variable or return a value.
+ * This function ignores the `default` clause if present.
+ */
+export declare function hasExhaustiveCaseClauses(node: ts.SwitchStatement, checker: ts.TypeChecker): boolean;
+export declare function getBaseOfClassLikeExpression(node: ts.ClassLikeDeclaration): ts.ExpressionWithTypeArguments | undefined;
Index: frontend/node_modules/tsutils/util/util.js
===================================================================
--- frontend/node_modules/tsutils/util/util.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/util.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1686 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isValidIdentifier = exports.getLineBreakStyle = exports.getLineRanges = exports.forEachComment = exports.forEachTokenWithTrivia = exports.forEachToken = exports.isFunctionWithBody = exports.hasOwnThisReference = exports.isBlockScopeBoundary = exports.isFunctionScopeBoundary = exports.isTypeScopeBoundary = exports.isScopeBoundary = exports.ScopeBoundarySelector = exports.ScopeBoundary = exports.isInSingleStatementContext = exports.isBlockScopedDeclarationStatement = exports.isBlockScopedVariableDeclaration = exports.isBlockScopedVariableDeclarationList = exports.getVariableDeclarationKind = exports.VariableDeclarationKind = exports.forEachDeclaredVariable = exports.forEachDestructuringIdentifier = exports.getPropertyName = exports.getWrappedNodeAtPosition = exports.getAstNodeAtPosition = exports.commentText = exports.isPositionInComment = exports.getCommentAtPosition = exports.getTokenAtPosition = exports.getNextToken = exports.getPreviousToken = exports.getNextStatement = exports.getPreviousStatement = exports.isModifierFlagSet = exports.isObjectFlagSet = exports.isSymbolFlagSet = exports.isTypeFlagSet = exports.isNodeFlagSet = exports.hasAccessModifier = exports.isParameterProperty = exports.hasModifier = exports.getModifier = exports.isThisParameter = exports.isKeywordKind = exports.isJsDocKind = exports.isTypeNodeKind = exports.isAssignmentKind = exports.isNodeKind = exports.isTokenKind = exports.getChildOfKind = void 0;
+exports.getBaseOfClassLikeExpression = exports.hasExhaustiveCaseClauses = exports.formatPseudoBigInt = exports.unwrapParentheses = exports.getSingleLateBoundPropertyNameOfPropertyName = exports.getLateBoundPropertyNamesOfPropertyName = exports.getLateBoundPropertyNames = exports.getPropertyNameOfWellKnownSymbol = exports.isWellKnownSymbolLiterally = exports.isBindableObjectDefinePropertyCall = exports.isReadonlyAssignmentDeclaration = exports.isInConstContext = exports.isConstAssertion = exports.getTsCheckDirective = exports.getCheckJsDirective = exports.isAmbientModule = exports.isCompilerOptionEnabled = exports.isStrictCompilerOptionEnabled = exports.getIIFE = exports.isAmbientModuleBlock = exports.isStatementInAmbientContext = exports.findImportLikeNodes = exports.findImports = exports.ImportKind = exports.parseJsDocOfNode = exports.getJsDoc = exports.canHaveJsDoc = exports.isReassignmentTarget = exports.getAccessKind = exports.AccessKind = exports.isExpressionValueUsed = exports.getDeclarationOfBindingElement = exports.hasSideEffects = exports.SideEffectOptions = exports.isSameLine = exports.isNumericPropertyName = exports.isValidJsxIdentifier = exports.isValidNumericLiteral = exports.isValidPropertyName = exports.isValidPropertyAccess = void 0;
+const ts = require("typescript");
+const node_1 = require("../typeguard/node");
+const _3_2_1 = require("../typeguard/3.2");
+const type_1 = require("./type");
+function getChildOfKind(node, kind, sourceFile) {
+    for (const child of node.getChildren(sourceFile))
+        if (child.kind === kind)
+            return child;
+}
+exports.getChildOfKind = getChildOfKind;
+function isTokenKind(kind) {
+    return kind >= ts.SyntaxKind.FirstToken && kind <= ts.SyntaxKind.LastToken;
+}
+exports.isTokenKind = isTokenKind;
+function isNodeKind(kind) {
+    return kind >= ts.SyntaxKind.FirstNode;
+}
+exports.isNodeKind = isNodeKind;
+function isAssignmentKind(kind) {
+    return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;
+}
+exports.isAssignmentKind = isAssignmentKind;
+function isTypeNodeKind(kind) {
+    return kind >= ts.SyntaxKind.FirstTypeNode && kind <= ts.SyntaxKind.LastTypeNode;
+}
+exports.isTypeNodeKind = isTypeNodeKind;
+function isJsDocKind(kind) {
+    return kind >= ts.SyntaxKind.FirstJSDocNode && kind <= ts.SyntaxKind.LastJSDocNode;
+}
+exports.isJsDocKind = isJsDocKind;
+function isKeywordKind(kind) {
+    return kind >= ts.SyntaxKind.FirstKeyword && kind <= ts.SyntaxKind.LastKeyword;
+}
+exports.isKeywordKind = isKeywordKind;
+function isThisParameter(parameter) {
+    return parameter.name.kind === ts.SyntaxKind.Identifier && parameter.name.originalKeywordKind === ts.SyntaxKind.ThisKeyword;
+}
+exports.isThisParameter = isThisParameter;
+function getModifier(node, kind) {
+    if (node.modifiers !== undefined)
+        for (const modifier of node.modifiers)
+            if (modifier.kind === kind)
+                return modifier;
+}
+exports.getModifier = getModifier;
+function hasModifier(modifiers, ...kinds) {
+    if (modifiers === undefined)
+        return false;
+    for (const modifier of modifiers)
+        if (kinds.includes(modifier.kind))
+            return true;
+    return false;
+}
+exports.hasModifier = hasModifier;
+function isParameterProperty(node) {
+    return hasModifier(node.modifiers, ts.SyntaxKind.PublicKeyword, ts.SyntaxKind.ProtectedKeyword, ts.SyntaxKind.PrivateKeyword, ts.SyntaxKind.ReadonlyKeyword);
+}
+exports.isParameterProperty = isParameterProperty;
+function hasAccessModifier(node) {
+    return isModifierFlagSet(node, ts.ModifierFlags.AccessibilityModifier);
+}
+exports.hasAccessModifier = hasAccessModifier;
+function isFlagSet(obj, flag) {
+    return (obj.flags & flag) !== 0;
+}
+exports.isNodeFlagSet = isFlagSet;
+exports.isTypeFlagSet = isFlagSet;
+exports.isSymbolFlagSet = isFlagSet;
+function isObjectFlagSet(objectType, flag) {
+    return (objectType.objectFlags & flag) !== 0;
+}
+exports.isObjectFlagSet = isObjectFlagSet;
+function isModifierFlagSet(node, flag) {
+    return (ts.getCombinedModifierFlags(node) & flag) !== 0;
+}
+exports.isModifierFlagSet = isModifierFlagSet;
+function getPreviousStatement(statement) {
+    const parent = statement.parent;
+    if (node_1.isBlockLike(parent)) {
+        const index = parent.statements.indexOf(statement);
+        if (index > 0)
+            return parent.statements[index - 1];
+    }
+}
+exports.getPreviousStatement = getPreviousStatement;
+function getNextStatement(statement) {
+    const parent = statement.parent;
+    if (node_1.isBlockLike(parent)) {
+        const index = parent.statements.indexOf(statement);
+        if (index < parent.statements.length)
+            return parent.statements[index + 1];
+    }
+}
+exports.getNextStatement = getNextStatement;
+/** Returns the token before the start of `node` or `undefined` if there is none. */
+function getPreviousToken(node, sourceFile) {
+    const { pos } = node;
+    if (pos === 0)
+        return;
+    do
+        node = node.parent;
+    while (node.pos === pos);
+    return getTokenAtPositionWorker(node, pos - 1, sourceFile !== null && sourceFile !== void 0 ? sourceFile : node.getSourceFile(), false);
+}
+exports.getPreviousToken = getPreviousToken;
+/** Returns the next token that begins after the end of `node`. Returns `undefined` for SourceFile and EndOfFileToken */
+function getNextToken(node, sourceFile) {
+    if (node.kind === ts.SyntaxKind.SourceFile || node.kind === ts.SyntaxKind.EndOfFileToken)
+        return;
+    const end = node.end;
+    node = node.parent;
+    while (node.end === end) {
+        if (node.parent === undefined)
+            return node.endOfFileToken;
+        node = node.parent;
+    }
+    return getTokenAtPositionWorker(node, end, sourceFile !== null && sourceFile !== void 0 ? sourceFile : node.getSourceFile(), false);
+}
+exports.getNextToken = getNextToken;
+/** Returns the token at or following the specified position or undefined if none is found inside `parent`. */
+function getTokenAtPosition(parent, pos, sourceFile, allowJsDoc) {
+    if (pos < parent.pos || pos >= parent.end)
+        return;
+    if (isTokenKind(parent.kind))
+        return parent;
+    return getTokenAtPositionWorker(parent, pos, sourceFile !== null && sourceFile !== void 0 ? sourceFile : parent.getSourceFile(), allowJsDoc === true);
+}
+exports.getTokenAtPosition = getTokenAtPosition;
+function getTokenAtPositionWorker(node, pos, sourceFile, allowJsDoc) {
+    if (!allowJsDoc) {
+        // if we are not interested in JSDoc, we can skip to the deepest AST node at the given position
+        node = getAstNodeAtPosition(node, pos);
+        if (isTokenKind(node.kind))
+            return node;
+    }
+    outer: while (true) {
+        for (const child of node.getChildren(sourceFile)) {
+            if (child.end > pos && (allowJsDoc || child.kind !== ts.SyntaxKind.JSDocComment)) {
+                if (isTokenKind(child.kind))
+                    return child;
+                // next token is nested in another node
+                node = child;
+                continue outer;
+            }
+        }
+        return;
+    }
+}
+/**
+ * Return the comment at the specified position.
+ * You can pass an optional `parent` to avoid some work finding the corresponding token starting at `sourceFile`.
+ * If the `parent` parameter is passed, `pos` must be between `parent.pos` and `parent.end`.
+*/
+function getCommentAtPosition(sourceFile, pos, parent = sourceFile) {
+    const token = getTokenAtPosition(parent, pos, sourceFile);
+    if (token === undefined || token.kind === ts.SyntaxKind.JsxText || pos >= token.end - (ts.tokenToString(token.kind) || '').length)
+        return;
+    const startPos = token.pos === 0
+        ? (ts.getShebang(sourceFile.text) || '').length
+        : token.pos;
+    return startPos !== 0 && ts.forEachTrailingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos) ||
+        ts.forEachLeadingCommentRange(sourceFile.text, startPos, commentAtPositionCallback, pos);
+}
+exports.getCommentAtPosition = getCommentAtPosition;
+function commentAtPositionCallback(pos, end, kind, _nl, at) {
+    return at >= pos && at < end ? { pos, end, kind } : undefined;
+}
+/**
+ * Returns whether the specified position is inside a comment.
+ * You can pass an optional `parent` to avoid some work finding the corresponding token starting at `sourceFile`.
+ * If the `parent` parameter is passed, `pos` must be between `parent.pos` and `parent.end`.
+ */
+function isPositionInComment(sourceFile, pos, parent) {
+    return getCommentAtPosition(sourceFile, pos, parent) !== undefined;
+}
+exports.isPositionInComment = isPositionInComment;
+function commentText(sourceText, comment) {
+    return sourceText.substring(comment.pos + 2, comment.kind === ts.SyntaxKind.SingleLineCommentTrivia ? comment.end : comment.end - 2);
+}
+exports.commentText = commentText;
+/** Returns the deepest AST Node at `pos`. Returns undefined if `pos` is outside of the range of `node` */
+function getAstNodeAtPosition(node, pos) {
+    if (node.pos > pos || node.end <= pos)
+        return;
+    while (isNodeKind(node.kind)) {
+        const nested = ts.forEachChild(node, (child) => child.pos <= pos && child.end > pos ? child : undefined);
+        if (nested === undefined)
+            break;
+        node = nested;
+    }
+    return node;
+}
+exports.getAstNodeAtPosition = getAstNodeAtPosition;
+/**
+ * Returns the NodeWrap of deepest AST node that contains `pos` between its `pos` and `end`.
+ * Only returns undefined if pos is outside of `wrap`
+ */
+function getWrappedNodeAtPosition(wrap, pos) {
+    if (wrap.node.pos > pos || wrap.node.end <= pos)
+        return;
+    outer: while (true) {
+        for (const child of wrap.children) {
+            if (child.node.pos > pos)
+                return wrap;
+            if (child.node.end > pos) {
+                wrap = child;
+                continue outer;
+            }
+        }
+        return wrap;
+    }
+}
+exports.getWrappedNodeAtPosition = getWrappedNodeAtPosition;
+function getPropertyName(propertyName) {
+    if (propertyName.kind === ts.SyntaxKind.ComputedPropertyName) {
+        const expression = unwrapParentheses(propertyName.expression);
+        if (node_1.isPrefixUnaryExpression(expression)) {
+            let negate = false;
+            switch (expression.operator) {
+                case ts.SyntaxKind.MinusToken:
+                    negate = true;
+                // falls through
+                case ts.SyntaxKind.PlusToken:
+                    return node_1.isNumericLiteral(expression.operand)
+                        ? `${negate ? '-' : ''}${expression.operand.text}`
+                        : _3_2_1.isBigIntLiteral(expression.operand)
+                            ? `${negate ? '-' : ''}${expression.operand.text.slice(0, -1)}`
+                            : undefined;
+                default:
+                    return;
+            }
+        }
+        if (_3_2_1.isBigIntLiteral(expression))
+            // handle BigInt, even though TypeScript doesn't allow BigInt as computed property name
+            return expression.text.slice(0, -1);
+        if (node_1.isNumericOrStringLikeLiteral(expression))
+            return expression.text;
+        return;
+    }
+    return propertyName.kind === ts.SyntaxKind.PrivateIdentifier ? undefined : propertyName.text;
+}
+exports.getPropertyName = getPropertyName;
+function forEachDestructuringIdentifier(pattern, fn) {
+    for (const element of pattern.elements) {
+        if (element.kind !== ts.SyntaxKind.BindingElement)
+            continue;
+        let result;
+        if (element.name.kind === ts.SyntaxKind.Identifier) {
+            result = fn(element);
+        }
+        else {
+            result = forEachDestructuringIdentifier(element.name, fn);
+        }
+        if (result)
+            return result;
+    }
+}
+exports.forEachDestructuringIdentifier = forEachDestructuringIdentifier;
+function forEachDeclaredVariable(declarationList, cb) {
+    for (const declaration of declarationList.declarations) {
+        let result;
+        if (declaration.name.kind === ts.SyntaxKind.Identifier) {
+            result = cb(declaration);
+        }
+        else {
+            result = forEachDestructuringIdentifier(declaration.name, cb);
+        }
+        if (result)
+            return result;
+    }
+}
+exports.forEachDeclaredVariable = forEachDeclaredVariable;
+var VariableDeclarationKind;
+(function (VariableDeclarationKind) {
+    VariableDeclarationKind[VariableDeclarationKind["Var"] = 0] = "Var";
+    VariableDeclarationKind[VariableDeclarationKind["Let"] = 1] = "Let";
+    VariableDeclarationKind[VariableDeclarationKind["Const"] = 2] = "Const";
+})(VariableDeclarationKind = exports.VariableDeclarationKind || (exports.VariableDeclarationKind = {}));
+function getVariableDeclarationKind(declarationList) {
+    if (declarationList.flags & ts.NodeFlags.Let)
+        return 1 /* Let */;
+    if (declarationList.flags & ts.NodeFlags.Const)
+        return 2 /* Const */;
+    return 0 /* Var */;
+}
+exports.getVariableDeclarationKind = getVariableDeclarationKind;
+function isBlockScopedVariableDeclarationList(declarationList) {
+    return (declarationList.flags & ts.NodeFlags.BlockScoped) !== 0;
+}
+exports.isBlockScopedVariableDeclarationList = isBlockScopedVariableDeclarationList;
+function isBlockScopedVariableDeclaration(declaration) {
+    const parent = declaration.parent;
+    return parent.kind === ts.SyntaxKind.CatchClause ||
+        isBlockScopedVariableDeclarationList(parent);
+}
+exports.isBlockScopedVariableDeclaration = isBlockScopedVariableDeclaration;
+function isBlockScopedDeclarationStatement(statement) {
+    switch (statement.kind) {
+        case ts.SyntaxKind.VariableStatement:
+            return isBlockScopedVariableDeclarationList(statement.declarationList);
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isBlockScopedDeclarationStatement = isBlockScopedDeclarationStatement;
+function isInSingleStatementContext(statement) {
+    switch (statement.parent.kind) {
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.ForInStatement:
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.WhileStatement:
+        case ts.SyntaxKind.DoStatement:
+        case ts.SyntaxKind.IfStatement:
+        case ts.SyntaxKind.WithStatement:
+        case ts.SyntaxKind.LabeledStatement:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isInSingleStatementContext = isInSingleStatementContext;
+var ScopeBoundary;
+(function (ScopeBoundary) {
+    ScopeBoundary[ScopeBoundary["None"] = 0] = "None";
+    ScopeBoundary[ScopeBoundary["Function"] = 1] = "Function";
+    ScopeBoundary[ScopeBoundary["Block"] = 2] = "Block";
+    ScopeBoundary[ScopeBoundary["Type"] = 4] = "Type";
+    ScopeBoundary[ScopeBoundary["ConditionalType"] = 8] = "ConditionalType";
+})(ScopeBoundary = exports.ScopeBoundary || (exports.ScopeBoundary = {}));
+var ScopeBoundarySelector;
+(function (ScopeBoundarySelector) {
+    ScopeBoundarySelector[ScopeBoundarySelector["Function"] = 1] = "Function";
+    ScopeBoundarySelector[ScopeBoundarySelector["Block"] = 3] = "Block";
+    ScopeBoundarySelector[ScopeBoundarySelector["Type"] = 7] = "Type";
+    ScopeBoundarySelector[ScopeBoundarySelector["InferType"] = 8] = "InferType";
+})(ScopeBoundarySelector = exports.ScopeBoundarySelector || (exports.ScopeBoundarySelector = {}));
+function isScopeBoundary(node) {
+    return isFunctionScopeBoundary(node) || isBlockScopeBoundary(node) || isTypeScopeBoundary(node);
+}
+exports.isScopeBoundary = isScopeBoundary;
+function isTypeScopeBoundary(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+        case ts.SyntaxKind.MappedType:
+            return 4 /* Type */;
+        case ts.SyntaxKind.ConditionalType:
+            return 8 /* ConditionalType */;
+        default:
+            return 0 /* None */;
+    }
+}
+exports.isTypeScopeBoundary = isTypeScopeBoundary;
+function isFunctionScopeBoundary(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.ArrowFunction:
+        case ts.SyntaxKind.Constructor:
+        case ts.SyntaxKind.ModuleDeclaration:
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.MethodSignature:
+        case ts.SyntaxKind.CallSignature:
+        case ts.SyntaxKind.ConstructSignature:
+        case ts.SyntaxKind.ConstructorType:
+        case ts.SyntaxKind.FunctionType:
+            return 1 /* Function */;
+        case ts.SyntaxKind.SourceFile:
+            // if SourceFile is no module, it contributes to the global scope and is therefore no scope boundary
+            return ts.isExternalModule(node) ? 1 /* Function */ : 0 /* None */;
+        default:
+            return 0 /* None */;
+    }
+}
+exports.isFunctionScopeBoundary = isFunctionScopeBoundary;
+function isBlockScopeBoundary(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.Block:
+            const parent = node.parent;
+            return parent.kind !== ts.SyntaxKind.CatchClause &&
+                // blocks inside SourceFile are block scope boundaries
+                (parent.kind === ts.SyntaxKind.SourceFile ||
+                    // blocks that are direct children of a function scope boundary are no scope boundary
+                    // for example the FunctionBlock is part of the function scope of the containing function
+                    !isFunctionScopeBoundary(parent))
+                ? 2 /* Block */
+                : 0 /* None */;
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.ForInStatement:
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.CaseBlock:
+        case ts.SyntaxKind.CatchClause:
+        case ts.SyntaxKind.WithStatement:
+            return 2 /* Block */;
+        default:
+            return 0 /* None */;
+    }
+}
+exports.isBlockScopeBoundary = isBlockScopeBoundary;
+/** Returns true for scope boundaries that have their own `this` reference instead of inheriting it from the containing scope */
+function hasOwnThisReference(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.FunctionExpression:
+            return true;
+        case ts.SyntaxKind.FunctionDeclaration:
+            return node.body !== undefined;
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+            return node.parent.kind === ts.SyntaxKind.ObjectLiteralExpression;
+        default:
+            return false;
+    }
+}
+exports.hasOwnThisReference = hasOwnThisReference;
+function isFunctionWithBody(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.Constructor:
+            return node.body !== undefined;
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.ArrowFunction:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.isFunctionWithBody = isFunctionWithBody;
+/**
+ * Iterate over all tokens of `node`
+ *
+ * @param node The node whose tokens should be visited
+ * @param cb Is called for every token contained in `node`
+ */
+function forEachToken(node, cb, sourceFile = node.getSourceFile()) {
+    const queue = [];
+    while (true) {
+        if (isTokenKind(node.kind)) {
+            cb(node);
+        }
+        else if (node.kind !== ts.SyntaxKind.JSDocComment) {
+            const children = node.getChildren(sourceFile);
+            if (children.length === 1) {
+                node = children[0];
+                continue;
+            }
+            for (let i = children.length - 1; i >= 0; --i)
+                queue.push(children[i]); // add children in reverse order, when we pop the next element from the queue, it's the first child
+        }
+        if (queue.length === 0)
+            break;
+        node = queue.pop();
+    }
+}
+exports.forEachToken = forEachToken;
+/**
+ * Iterate over all tokens and trivia of `node`
+ *
+ * @description JsDoc comments are treated like regular comments
+ *
+ * @param node The node whose tokens should be visited
+ * @param cb Is called for every token contained in `node` and trivia before the token
+ */
+function forEachTokenWithTrivia(node, cb, sourceFile = node.getSourceFile()) {
+    const fullText = sourceFile.text;
+    const scanner = ts.createScanner(sourceFile.languageVersion, false, sourceFile.languageVariant, fullText);
+    return forEachToken(node, (token) => {
+        const tokenStart = token.kind === ts.SyntaxKind.JsxText || token.pos === token.end ? token.pos : token.getStart(sourceFile);
+        if (tokenStart !== token.pos) {
+            // we only have to handle trivia before each token. whitespace at the end of the file is followed by EndOfFileToken
+            scanner.setTextPos(token.pos);
+            let kind = scanner.scan();
+            let pos = scanner.getTokenPos();
+            while (pos < tokenStart) {
+                const textPos = scanner.getTextPos();
+                cb(fullText, kind, { pos, end: textPos }, token.parent);
+                if (textPos === tokenStart)
+                    break;
+                kind = scanner.scan();
+                pos = scanner.getTokenPos();
+            }
+        }
+        return cb(fullText, token.kind, { end: token.end, pos: tokenStart }, token.parent);
+    }, sourceFile);
+}
+exports.forEachTokenWithTrivia = forEachTokenWithTrivia;
+/** Iterate over all comments owned by `node` or its children */
+function forEachComment(node, cb, sourceFile = node.getSourceFile()) {
+    /* Visit all tokens and skip trivia.
+       Comment ranges between tokens are parsed without the need of a scanner.
+       forEachTokenWithWhitespace does intentionally not pay attention to the correct comment ownership of nodes as it always
+       scans all trivia before each token, which could include trailing comments of the previous token.
+       Comment onwership is done right in this function*/
+    const fullText = sourceFile.text;
+    const notJsx = sourceFile.languageVariant !== ts.LanguageVariant.JSX;
+    return forEachToken(node, (token) => {
+        if (token.pos === token.end)
+            return;
+        if (token.kind !== ts.SyntaxKind.JsxText)
+            ts.forEachLeadingCommentRange(fullText, 
+            // skip shebang at position 0
+            token.pos === 0 ? (ts.getShebang(fullText) || '').length : token.pos, commentCallback);
+        if (notJsx || canHaveTrailingTrivia(token))
+            return ts.forEachTrailingCommentRange(fullText, token.end, commentCallback);
+    }, sourceFile);
+    function commentCallback(pos, end, kind) {
+        cb(fullText, { pos, end, kind });
+    }
+}
+exports.forEachComment = forEachComment;
+/** Exclude trailing positions that would lead to scanning for trivia inside JsxText */
+function canHaveTrailingTrivia(token) {
+    switch (token.kind) {
+        case ts.SyntaxKind.CloseBraceToken:
+            // after a JsxExpression inside a JsxElement's body can only be other JsxChild, but no trivia
+            return token.parent.kind !== ts.SyntaxKind.JsxExpression || !isJsxElementOrFragment(token.parent.parent);
+        case ts.SyntaxKind.GreaterThanToken:
+            switch (token.parent.kind) {
+                case ts.SyntaxKind.JsxOpeningElement:
+                    // if end is not equal, this is part of the type arguments list. in all other cases it would be inside the element body
+                    return token.end !== token.parent.end;
+                case ts.SyntaxKind.JsxOpeningFragment:
+                    return false; // would be inside the fragment
+                case ts.SyntaxKind.JsxSelfClosingElement:
+                    return token.end !== token.parent.end || // if end is not equal, this is part of the type arguments list
+                        !isJsxElementOrFragment(token.parent.parent); // there's only trailing trivia if it's the end of the top element
+                case ts.SyntaxKind.JsxClosingElement:
+                case ts.SyntaxKind.JsxClosingFragment:
+                    // there's only trailing trivia if it's the end of the top element
+                    return !isJsxElementOrFragment(token.parent.parent.parent);
+            }
+    }
+    return true;
+}
+function isJsxElementOrFragment(node) {
+    return node.kind === ts.SyntaxKind.JsxElement || node.kind === ts.SyntaxKind.JsxFragment;
+}
+function getLineRanges(sourceFile) {
+    const lineStarts = sourceFile.getLineStarts();
+    const result = [];
+    const length = lineStarts.length;
+    const sourceText = sourceFile.text;
+    let pos = 0;
+    for (let i = 1; i < length; ++i) {
+        const end = lineStarts[i];
+        let lineEnd = end;
+        for (; lineEnd > pos; --lineEnd)
+            if (!ts.isLineBreak(sourceText.charCodeAt(lineEnd - 1)))
+                break;
+        result.push({
+            pos,
+            end,
+            contentLength: lineEnd - pos,
+        });
+        pos = end;
+    }
+    result.push({
+        pos,
+        end: sourceFile.end,
+        contentLength: sourceFile.end - pos,
+    });
+    return result;
+}
+exports.getLineRanges = getLineRanges;
+/** Get the line break style used in sourceFile. This function only looks at the first line break. If there is none, \n is assumed. */
+function getLineBreakStyle(sourceFile) {
+    const lineStarts = sourceFile.getLineStarts();
+    return lineStarts.length === 1 || lineStarts[1] < 2 || sourceFile.text[lineStarts[1] - 2] !== '\r'
+        ? '\n'
+        : '\r\n';
+}
+exports.getLineBreakStyle = getLineBreakStyle;
+let cachedScanner;
+function scanToken(text, languageVersion) {
+    if (cachedScanner === undefined) {
+        // cache scanner
+        cachedScanner = ts.createScanner(languageVersion, false, undefined, text);
+    }
+    else {
+        cachedScanner.setScriptTarget(languageVersion);
+        cachedScanner.setText(text);
+    }
+    cachedScanner.scan();
+    return cachedScanner;
+}
+/**
+ * Determines whether the given text parses as a standalone identifier.
+ * This is not a guarantee that it works in every context. The property name in PropertyAccessExpressions for example allows reserved words.
+ * Depending on the context it could be parsed as contextual keyword or TypeScript keyword.
+ */
+function isValidIdentifier(text, languageVersion = ts.ScriptTarget.Latest) {
+    const scan = scanToken(text, languageVersion);
+    return scan.isIdentifier() && scan.getTextPos() === text.length && scan.getTokenPos() === 0;
+}
+exports.isValidIdentifier = isValidIdentifier;
+function charSize(ch) {
+    return ch >= 0x10000 ? 2 : 1;
+}
+/**
+ * Determines whether the given text can be used to access a property with a PropertyAccessExpression while preserving the property's name.
+ */
+function isValidPropertyAccess(text, languageVersion = ts.ScriptTarget.Latest) {
+    if (text.length === 0)
+        return false;
+    let ch = text.codePointAt(0);
+    if (!ts.isIdentifierStart(ch, languageVersion))
+        return false;
+    for (let i = charSize(ch); i < text.length; i += charSize(ch)) {
+        ch = text.codePointAt(i);
+        if (!ts.isIdentifierPart(ch, languageVersion))
+            return false;
+    }
+    return true;
+}
+exports.isValidPropertyAccess = isValidPropertyAccess;
+/**
+ * Determines whether the given text can be used as unquoted name of a property declaration while preserving the property's name.
+ */
+function isValidPropertyName(text, languageVersion = ts.ScriptTarget.Latest) {
+    if (isValidPropertyAccess(text, languageVersion))
+        return true;
+    const scan = scanToken(text, languageVersion);
+    return scan.getTextPos() === text.length &&
+        scan.getToken() === ts.SyntaxKind.NumericLiteral && scan.getTokenValue() === text; // ensure stringified number equals literal
+}
+exports.isValidPropertyName = isValidPropertyName;
+/**
+ * Determines whether the given text can be parsed as a numeric literal.
+ */
+function isValidNumericLiteral(text, languageVersion = ts.ScriptTarget.Latest) {
+    const scan = scanToken(text, languageVersion);
+    return scan.getToken() === ts.SyntaxKind.NumericLiteral && scan.getTextPos() === text.length && scan.getTokenPos() === 0;
+}
+exports.isValidNumericLiteral = isValidNumericLiteral;
+/**
+ * Determines whether the given text can be used as JSX tag or attribute name while preserving the exact name.
+ */
+function isValidJsxIdentifier(text, languageVersion = ts.ScriptTarget.Latest) {
+    if (text.length === 0)
+        return false;
+    let seenNamespaceSeparator = false;
+    let ch = text.codePointAt(0);
+    if (!ts.isIdentifierStart(ch, languageVersion))
+        return false;
+    for (let i = charSize(ch); i < text.length; i += charSize(ch)) {
+        ch = text.codePointAt(i);
+        if (!ts.isIdentifierPart(ch, languageVersion) && ch !== 45 /* minus */) {
+            if (!seenNamespaceSeparator && ch === 58 /* colon */ && i + charSize(ch) !== text.length) {
+                seenNamespaceSeparator = true;
+            }
+            else {
+                return false;
+            }
+        }
+    }
+    return true;
+}
+exports.isValidJsxIdentifier = isValidJsxIdentifier;
+function isNumericPropertyName(name) {
+    return String(+name) === name;
+}
+exports.isNumericPropertyName = isNumericPropertyName;
+function isSameLine(sourceFile, pos1, pos2) {
+    return ts.getLineAndCharacterOfPosition(sourceFile, pos1).line === ts.getLineAndCharacterOfPosition(sourceFile, pos2).line;
+}
+exports.isSameLine = isSameLine;
+var SideEffectOptions;
+(function (SideEffectOptions) {
+    SideEffectOptions[SideEffectOptions["None"] = 0] = "None";
+    SideEffectOptions[SideEffectOptions["TaggedTemplate"] = 1] = "TaggedTemplate";
+    SideEffectOptions[SideEffectOptions["Constructor"] = 2] = "Constructor";
+    SideEffectOptions[SideEffectOptions["JsxElement"] = 4] = "JsxElement";
+})(SideEffectOptions = exports.SideEffectOptions || (exports.SideEffectOptions = {}));
+function hasSideEffects(node, options) {
+    var _a, _b;
+    const queue = [];
+    while (true) {
+        switch (node.kind) {
+            case ts.SyntaxKind.CallExpression:
+            case ts.SyntaxKind.PostfixUnaryExpression:
+            case ts.SyntaxKind.AwaitExpression:
+            case ts.SyntaxKind.YieldExpression:
+            case ts.SyntaxKind.DeleteExpression:
+                return true;
+            case ts.SyntaxKind.TypeAssertionExpression:
+            case ts.SyntaxKind.AsExpression:
+            case ts.SyntaxKind.ParenthesizedExpression:
+            case ts.SyntaxKind.NonNullExpression:
+            case ts.SyntaxKind.VoidExpression:
+            case ts.SyntaxKind.TypeOfExpression:
+            case ts.SyntaxKind.PropertyAccessExpression:
+            case ts.SyntaxKind.SpreadElement:
+            case ts.SyntaxKind.PartiallyEmittedExpression:
+                node = node.expression;
+                continue;
+            case ts.SyntaxKind.BinaryExpression:
+                if (isAssignmentKind(node.operatorToken.kind))
+                    return true;
+                queue.push(node.right);
+                node = node.left;
+                continue;
+            case ts.SyntaxKind.PrefixUnaryExpression:
+                switch (node.operator) {
+                    case ts.SyntaxKind.PlusPlusToken:
+                    case ts.SyntaxKind.MinusMinusToken:
+                        return true;
+                    default:
+                        node = node.operand;
+                        continue;
+                }
+            case ts.SyntaxKind.ElementAccessExpression:
+                if (node.argumentExpression !== undefined) // for compatibility with typescript@<2.9.0
+                    queue.push(node.argumentExpression);
+                node = node.expression;
+                continue;
+            case ts.SyntaxKind.ConditionalExpression:
+                queue.push(node.whenTrue, node.whenFalse);
+                node = node.condition;
+                continue;
+            case ts.SyntaxKind.NewExpression:
+                if (options & 2 /* Constructor */)
+                    return true;
+                if (node.arguments !== undefined)
+                    queue.push(...node.arguments);
+                node = node.expression;
+                continue;
+            case ts.SyntaxKind.TaggedTemplateExpression:
+                if (options & 1 /* TaggedTemplate */)
+                    return true;
+                queue.push(node.tag);
+                node = node.template;
+                if (node.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral)
+                    break;
+            // falls through
+            case ts.SyntaxKind.TemplateExpression:
+                for (const child of node.templateSpans)
+                    queue.push(child.expression);
+                break;
+            case ts.SyntaxKind.ClassExpression: {
+                if (node.decorators !== undefined)
+                    return true;
+                for (const child of node.members) {
+                    if (child.decorators !== undefined)
+                        return true;
+                    if (!hasModifier(child.modifiers, ts.SyntaxKind.DeclareKeyword)) {
+                        if (((_a = child.name) === null || _a === void 0 ? void 0 : _a.kind) === ts.SyntaxKind.ComputedPropertyName)
+                            queue.push(child.name.expression);
+                        if (node_1.isMethodDeclaration(child)) {
+                            for (const p of child.parameters)
+                                if (p.decorators !== undefined)
+                                    return true;
+                        }
+                        else if (node_1.isPropertyDeclaration(child) &&
+                            child.initializer !== undefined &&
+                            hasModifier(child.modifiers, ts.SyntaxKind.StaticKeyword)) {
+                            queue.push(child.initializer);
+                        }
+                    }
+                }
+                const base = getBaseOfClassLikeExpression(node);
+                if (base === undefined)
+                    break;
+                node = base.expression;
+                continue;
+            }
+            case ts.SyntaxKind.ArrayLiteralExpression:
+                queue.push(...node.elements);
+                break;
+            case ts.SyntaxKind.ObjectLiteralExpression:
+                for (const child of node.properties) {
+                    if (((_b = child.name) === null || _b === void 0 ? void 0 : _b.kind) === ts.SyntaxKind.ComputedPropertyName)
+                        queue.push(child.name.expression);
+                    switch (child.kind) {
+                        case ts.SyntaxKind.PropertyAssignment:
+                            queue.push(child.initializer);
+                            break;
+                        case ts.SyntaxKind.SpreadAssignment:
+                            queue.push(child.expression);
+                    }
+                }
+                break;
+            case ts.SyntaxKind.JsxExpression:
+                if (node.expression === undefined)
+                    break;
+                node = node.expression;
+                continue;
+            case ts.SyntaxKind.JsxElement:
+            case ts.SyntaxKind.JsxFragment:
+                for (const child of node.children)
+                    if (child.kind !== ts.SyntaxKind.JsxText)
+                        queue.push(child);
+                if (node.kind === ts.SyntaxKind.JsxFragment)
+                    break;
+                node = node.openingElement;
+            // falls through
+            case ts.SyntaxKind.JsxSelfClosingElement:
+            case ts.SyntaxKind.JsxOpeningElement:
+                if (options & 4 /* JsxElement */)
+                    return true;
+                for (const child of node.attributes.properties) {
+                    if (child.kind === ts.SyntaxKind.JsxSpreadAttribute) {
+                        queue.push(child.expression);
+                    }
+                    else if (child.initializer !== undefined) {
+                        queue.push(child.initializer);
+                    }
+                }
+                break;
+            case ts.SyntaxKind.CommaListExpression:
+                queue.push(...node.elements);
+        }
+        if (queue.length === 0)
+            return false;
+        node = queue.pop();
+    }
+}
+exports.hasSideEffects = hasSideEffects;
+/** Returns the VariableDeclaration or ParameterDeclaration that contains the BindingElement */
+function getDeclarationOfBindingElement(node) {
+    let parent = node.parent.parent;
+    while (parent.kind === ts.SyntaxKind.BindingElement)
+        parent = parent.parent.parent;
+    return parent;
+}
+exports.getDeclarationOfBindingElement = getDeclarationOfBindingElement;
+function isExpressionValueUsed(node) {
+    while (true) {
+        const parent = node.parent;
+        switch (parent.kind) {
+            case ts.SyntaxKind.CallExpression:
+            case ts.SyntaxKind.NewExpression:
+            case ts.SyntaxKind.ElementAccessExpression:
+            case ts.SyntaxKind.WhileStatement:
+            case ts.SyntaxKind.DoStatement:
+            case ts.SyntaxKind.WithStatement:
+            case ts.SyntaxKind.ThrowStatement:
+            case ts.SyntaxKind.ReturnStatement:
+            case ts.SyntaxKind.JsxExpression:
+            case ts.SyntaxKind.JsxSpreadAttribute:
+            case ts.SyntaxKind.JsxElement:
+            case ts.SyntaxKind.JsxFragment:
+            case ts.SyntaxKind.JsxSelfClosingElement:
+            case ts.SyntaxKind.ComputedPropertyName:
+            case ts.SyntaxKind.ArrowFunction:
+            case ts.SyntaxKind.ExportSpecifier:
+            case ts.SyntaxKind.ExportAssignment:
+            case ts.SyntaxKind.ImportDeclaration:
+            case ts.SyntaxKind.ExternalModuleReference:
+            case ts.SyntaxKind.Decorator:
+            case ts.SyntaxKind.TaggedTemplateExpression:
+            case ts.SyntaxKind.TemplateSpan:
+            case ts.SyntaxKind.ExpressionWithTypeArguments:
+            case ts.SyntaxKind.TypeOfExpression:
+            case ts.SyntaxKind.AwaitExpression:
+            case ts.SyntaxKind.YieldExpression:
+            case ts.SyntaxKind.LiteralType:
+            case ts.SyntaxKind.JsxAttributes:
+            case ts.SyntaxKind.JsxOpeningElement:
+            case ts.SyntaxKind.JsxClosingElement:
+            case ts.SyntaxKind.IfStatement:
+            case ts.SyntaxKind.CaseClause:
+            case ts.SyntaxKind.SwitchStatement:
+                return true;
+            case ts.SyntaxKind.PropertyAccessExpression:
+                return parent.expression === node;
+            case ts.SyntaxKind.QualifiedName:
+                return parent.left === node;
+            case ts.SyntaxKind.ShorthandPropertyAssignment:
+                return parent.objectAssignmentInitializer === node ||
+                    !isInDestructuringAssignment(parent);
+            case ts.SyntaxKind.PropertyAssignment:
+                return parent.initializer === node && !isInDestructuringAssignment(parent);
+            case ts.SyntaxKind.SpreadAssignment:
+            case ts.SyntaxKind.SpreadElement:
+            case ts.SyntaxKind.ArrayLiteralExpression:
+                return !isInDestructuringAssignment(parent);
+            case ts.SyntaxKind.ParenthesizedExpression:
+            case ts.SyntaxKind.AsExpression:
+            case ts.SyntaxKind.TypeAssertionExpression:
+            case ts.SyntaxKind.PostfixUnaryExpression:
+            case ts.SyntaxKind.PrefixUnaryExpression:
+            case ts.SyntaxKind.NonNullExpression:
+                node = parent;
+                continue;
+            case ts.SyntaxKind.ForStatement:
+                return parent.condition === node;
+            case ts.SyntaxKind.ForInStatement:
+            case ts.SyntaxKind.ForOfStatement:
+                return parent.expression === node;
+            case ts.SyntaxKind.ConditionalExpression:
+                if (parent.condition === node)
+                    return true;
+                node = parent;
+                break;
+            case ts.SyntaxKind.PropertyDeclaration:
+            case ts.SyntaxKind.BindingElement:
+            case ts.SyntaxKind.VariableDeclaration:
+            case ts.SyntaxKind.Parameter:
+            case ts.SyntaxKind.EnumMember:
+                return parent.initializer === node;
+            case ts.SyntaxKind.ImportEqualsDeclaration:
+                return parent.moduleReference === node;
+            case ts.SyntaxKind.CommaListExpression:
+                if (parent.elements[parent.elements.length - 1] !== node)
+                    return false;
+                node = parent;
+                break;
+            case ts.SyntaxKind.BinaryExpression:
+                if (parent.right === node) {
+                    if (parent.operatorToken.kind === ts.SyntaxKind.CommaToken) {
+                        node = parent;
+                        break;
+                    }
+                    return true;
+                }
+                switch (parent.operatorToken.kind) {
+                    case ts.SyntaxKind.CommaToken:
+                    case ts.SyntaxKind.EqualsToken:
+                        return false;
+                    case ts.SyntaxKind.EqualsEqualsEqualsToken:
+                    case ts.SyntaxKind.EqualsEqualsToken:
+                    case ts.SyntaxKind.ExclamationEqualsEqualsToken:
+                    case ts.SyntaxKind.ExclamationEqualsToken:
+                    case ts.SyntaxKind.InstanceOfKeyword:
+                    case ts.SyntaxKind.PlusToken:
+                    case ts.SyntaxKind.MinusToken:
+                    case ts.SyntaxKind.AsteriskToken:
+                    case ts.SyntaxKind.SlashToken:
+                    case ts.SyntaxKind.PercentToken:
+                    case ts.SyntaxKind.AsteriskAsteriskToken:
+                    case ts.SyntaxKind.GreaterThanToken:
+                    case ts.SyntaxKind.GreaterThanGreaterThanToken:
+                    case ts.SyntaxKind.GreaterThanGreaterThanGreaterThanToken:
+                    case ts.SyntaxKind.GreaterThanEqualsToken:
+                    case ts.SyntaxKind.LessThanToken:
+                    case ts.SyntaxKind.LessThanLessThanToken:
+                    case ts.SyntaxKind.LessThanEqualsToken:
+                    case ts.SyntaxKind.AmpersandToken:
+                    case ts.SyntaxKind.BarToken:
+                    case ts.SyntaxKind.CaretToken:
+                    case ts.SyntaxKind.BarBarToken:
+                    case ts.SyntaxKind.AmpersandAmpersandToken:
+                    case ts.SyntaxKind.QuestionQuestionToken:
+                    case ts.SyntaxKind.InKeyword:
+                    case ts.SyntaxKind.QuestionQuestionEqualsToken:
+                    case ts.SyntaxKind.AmpersandAmpersandEqualsToken:
+                    case ts.SyntaxKind.BarBarEqualsToken:
+                        return true;
+                    default:
+                        node = parent;
+                }
+                break;
+            default:
+                return false;
+        }
+    }
+}
+exports.isExpressionValueUsed = isExpressionValueUsed;
+function isInDestructuringAssignment(node) {
+    switch (node.kind) {
+        case ts.SyntaxKind.ShorthandPropertyAssignment:
+            if (node.objectAssignmentInitializer !== undefined)
+                return true;
+        // falls through
+        case ts.SyntaxKind.PropertyAssignment:
+        case ts.SyntaxKind.SpreadAssignment:
+            node = node.parent;
+            break;
+        case ts.SyntaxKind.SpreadElement:
+            if (node.parent.kind !== ts.SyntaxKind.ArrayLiteralExpression)
+                return false;
+            node = node.parent;
+    }
+    while (true) {
+        switch (node.parent.kind) {
+            case ts.SyntaxKind.BinaryExpression:
+                return node.parent.left === node &&
+                    node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
+            case ts.SyntaxKind.ForOfStatement:
+                return node.parent.initializer === node;
+            case ts.SyntaxKind.ArrayLiteralExpression:
+            case ts.SyntaxKind.ObjectLiteralExpression:
+                node = node.parent;
+                break;
+            case ts.SyntaxKind.SpreadAssignment:
+            case ts.SyntaxKind.PropertyAssignment:
+                node = node.parent.parent;
+                break;
+            case ts.SyntaxKind.SpreadElement:
+                if (node.parent.parent.kind !== ts.SyntaxKind.ArrayLiteralExpression)
+                    return false;
+                node = node.parent.parent;
+                break;
+            default:
+                return false;
+        }
+    }
+}
+var AccessKind;
+(function (AccessKind) {
+    AccessKind[AccessKind["None"] = 0] = "None";
+    AccessKind[AccessKind["Read"] = 1] = "Read";
+    AccessKind[AccessKind["Write"] = 2] = "Write";
+    AccessKind[AccessKind["Delete"] = 4] = "Delete";
+    AccessKind[AccessKind["ReadWrite"] = 3] = "ReadWrite";
+    AccessKind[AccessKind["Modification"] = 6] = "Modification";
+})(AccessKind = exports.AccessKind || (exports.AccessKind = {}));
+function getAccessKind(node) {
+    const parent = node.parent;
+    switch (parent.kind) {
+        case ts.SyntaxKind.DeleteExpression:
+            return 4 /* Delete */;
+        case ts.SyntaxKind.PostfixUnaryExpression:
+            return 3 /* ReadWrite */;
+        case ts.SyntaxKind.PrefixUnaryExpression:
+            return parent.operator === ts.SyntaxKind.PlusPlusToken ||
+                parent.operator === ts.SyntaxKind.MinusMinusToken
+                ? 3 /* ReadWrite */
+                : 1 /* Read */;
+        case ts.SyntaxKind.BinaryExpression:
+            return parent.right === node
+                ? 1 /* Read */
+                : !isAssignmentKind(parent.operatorToken.kind)
+                    ? 1 /* Read */
+                    : parent.operatorToken.kind === ts.SyntaxKind.EqualsToken
+                        ? 2 /* Write */
+                        : 3 /* ReadWrite */;
+        case ts.SyntaxKind.ShorthandPropertyAssignment:
+            return parent.objectAssignmentInitializer === node
+                ? 1 /* Read */
+                : isInDestructuringAssignment(parent)
+                    ? 2 /* Write */
+                    : 1 /* Read */;
+        case ts.SyntaxKind.PropertyAssignment:
+            return parent.name === node
+                ? 0 /* None */
+                : isInDestructuringAssignment(parent)
+                    ? 2 /* Write */
+                    : 1 /* Read */;
+        case ts.SyntaxKind.ArrayLiteralExpression:
+        case ts.SyntaxKind.SpreadElement:
+        case ts.SyntaxKind.SpreadAssignment:
+            return isInDestructuringAssignment(parent)
+                ? 2 /* Write */
+                : 1 /* Read */;
+        case ts.SyntaxKind.ParenthesizedExpression:
+        case ts.SyntaxKind.NonNullExpression:
+        case ts.SyntaxKind.TypeAssertionExpression:
+        case ts.SyntaxKind.AsExpression:
+            // (<number>foo! as {})++
+            return getAccessKind(parent);
+        case ts.SyntaxKind.ForOfStatement:
+        case ts.SyntaxKind.ForInStatement:
+            return parent.initializer === node
+                ? 2 /* Write */
+                : 1 /* Read */;
+        case ts.SyntaxKind.ExpressionWithTypeArguments:
+            return parent.parent.token === ts.SyntaxKind.ExtendsKeyword &&
+                parent.parent.parent.kind !== ts.SyntaxKind.InterfaceDeclaration
+                ? 1 /* Read */
+                : 0 /* None */;
+        case ts.SyntaxKind.ComputedPropertyName:
+        case ts.SyntaxKind.ExpressionStatement:
+        case ts.SyntaxKind.TypeOfExpression:
+        case ts.SyntaxKind.ElementAccessExpression:
+        case ts.SyntaxKind.ForStatement:
+        case ts.SyntaxKind.IfStatement:
+        case ts.SyntaxKind.DoStatement:
+        case ts.SyntaxKind.WhileStatement:
+        case ts.SyntaxKind.SwitchStatement:
+        case ts.SyntaxKind.WithStatement:
+        case ts.SyntaxKind.ThrowStatement:
+        case ts.SyntaxKind.CallExpression:
+        case ts.SyntaxKind.NewExpression:
+        case ts.SyntaxKind.TaggedTemplateExpression:
+        case ts.SyntaxKind.JsxExpression:
+        case ts.SyntaxKind.Decorator:
+        case ts.SyntaxKind.TemplateSpan:
+        case ts.SyntaxKind.JsxOpeningElement:
+        case ts.SyntaxKind.JsxSelfClosingElement:
+        case ts.SyntaxKind.JsxSpreadAttribute:
+        case ts.SyntaxKind.VoidExpression:
+        case ts.SyntaxKind.ReturnStatement:
+        case ts.SyntaxKind.AwaitExpression:
+        case ts.SyntaxKind.YieldExpression:
+        case ts.SyntaxKind.ConditionalExpression:
+        case ts.SyntaxKind.CaseClause:
+        case ts.SyntaxKind.JsxElement:
+            return 1 /* Read */;
+        case ts.SyntaxKind.ArrowFunction:
+            return parent.body === node
+                ? 1 /* Read */
+                : 2 /* Write */;
+        case ts.SyntaxKind.PropertyDeclaration:
+        case ts.SyntaxKind.VariableDeclaration:
+        case ts.SyntaxKind.Parameter:
+        case ts.SyntaxKind.EnumMember:
+        case ts.SyntaxKind.BindingElement:
+        case ts.SyntaxKind.JsxAttribute:
+            return parent.initializer === node
+                ? 1 /* Read */
+                : 0 /* None */;
+        case ts.SyntaxKind.PropertyAccessExpression:
+            return parent.expression === node
+                ? 1 /* Read */
+                : 0 /* None */;
+        case ts.SyntaxKind.ExportAssignment:
+            return parent.isExportEquals
+                ? 1 /* Read */
+                : 0 /* None */;
+    }
+    return 0 /* None */;
+}
+exports.getAccessKind = getAccessKind;
+function isReassignmentTarget(node) {
+    return (getAccessKind(node) & 2 /* Write */) !== 0;
+}
+exports.isReassignmentTarget = isReassignmentTarget;
+function canHaveJsDoc(node) {
+    const kind = node.kind;
+    switch (kind) {
+        case ts.SyntaxKind.Parameter:
+        case ts.SyntaxKind.CallSignature:
+        case ts.SyntaxKind.ConstructSignature:
+        case ts.SyntaxKind.MethodSignature:
+        case ts.SyntaxKind.PropertySignature:
+        case ts.SyntaxKind.ArrowFunction:
+        case ts.SyntaxKind.ParenthesizedExpression:
+        case ts.SyntaxKind.SpreadAssignment:
+        case ts.SyntaxKind.ShorthandPropertyAssignment:
+        case ts.SyntaxKind.PropertyAssignment:
+        case ts.SyntaxKind.FunctionExpression:
+        case ts.SyntaxKind.LabeledStatement:
+        case ts.SyntaxKind.ExpressionStatement:
+        case ts.SyntaxKind.VariableStatement:
+        case ts.SyntaxKind.FunctionDeclaration:
+        case ts.SyntaxKind.Constructor:
+        case ts.SyntaxKind.MethodDeclaration:
+        case ts.SyntaxKind.PropertyDeclaration:
+        case ts.SyntaxKind.GetAccessor:
+        case ts.SyntaxKind.SetAccessor:
+        case ts.SyntaxKind.ClassDeclaration:
+        case ts.SyntaxKind.ClassExpression:
+        case ts.SyntaxKind.InterfaceDeclaration:
+        case ts.SyntaxKind.TypeAliasDeclaration:
+        case ts.SyntaxKind.EnumMember:
+        case ts.SyntaxKind.EnumDeclaration:
+        case ts.SyntaxKind.ModuleDeclaration:
+        case ts.SyntaxKind.ImportEqualsDeclaration:
+        case ts.SyntaxKind.ImportDeclaration:
+        case ts.SyntaxKind.NamespaceExportDeclaration:
+        case ts.SyntaxKind.ExportAssignment:
+        case ts.SyntaxKind.IndexSignature:
+        case ts.SyntaxKind.FunctionType:
+        case ts.SyntaxKind.ConstructorType:
+        case ts.SyntaxKind.JSDocFunctionType:
+        case ts.SyntaxKind.ExportDeclaration:
+        case ts.SyntaxKind.NamedTupleMember:
+        case ts.SyntaxKind.EndOfFileToken:
+            return true;
+        default:
+            return false;
+    }
+}
+exports.canHaveJsDoc = canHaveJsDoc;
+/** Gets the JSDoc of a node. For performance reasons this function should only be called when `canHaveJsDoc` returns true. */
+function getJsDoc(node, sourceFile) {
+    const result = [];
+    for (const child of node.getChildren(sourceFile)) {
+        if (!node_1.isJsDoc(child))
+            break;
+        result.push(child);
+    }
+    return result;
+}
+exports.getJsDoc = getJsDoc;
+/**
+ * Parses the JsDoc of any node. This function is made for nodes that don't get their JsDoc parsed by the TypeScript parser.
+ *
+ * @param considerTrailingComments When set to `true` this function uses the trailing comments if the node starts on the same line
+ *                                 as the previous node ends.
+ */
+function parseJsDocOfNode(node, considerTrailingComments, sourceFile = node.getSourceFile()) {
+    if (canHaveJsDoc(node) && node.kind !== ts.SyntaxKind.EndOfFileToken) {
+        const result = getJsDoc(node, sourceFile);
+        if (result.length !== 0 || !considerTrailingComments)
+            return result;
+    }
+    return parseJsDocWorker(node, node.getStart(sourceFile), sourceFile, considerTrailingComments);
+}
+exports.parseJsDocOfNode = parseJsDocOfNode;
+function parseJsDocWorker(node, nodeStart, sourceFile, considerTrailingComments) {
+    const start = ts[considerTrailingComments && isSameLine(sourceFile, node.pos, nodeStart)
+        ? 'forEachTrailingCommentRange'
+        : 'forEachLeadingCommentRange'](sourceFile.text, node.pos, 
+    // return object to make `0` a truthy value
+    (pos, _end, kind) => kind === ts.SyntaxKind.MultiLineCommentTrivia && sourceFile.text[pos + 2] === '*' ? { pos } : undefined);
+    if (start === undefined)
+        return [];
+    const startPos = start.pos;
+    const text = sourceFile.text.slice(startPos, nodeStart);
+    const newSourceFile = ts.createSourceFile('jsdoc.ts', `${text}var a;`, sourceFile.languageVersion);
+    const result = getJsDoc(newSourceFile.statements[0], newSourceFile);
+    for (const doc of result)
+        updateNode(doc, node);
+    return result;
+    function updateNode(n, parent) {
+        n.pos += startPos;
+        n.end += startPos;
+        n.parent = parent;
+        return ts.forEachChild(n, (child) => updateNode(child, n), (children) => {
+            children.pos += startPos;
+            children.end += startPos;
+            for (const child of children)
+                updateNode(child, n);
+        });
+    }
+}
+var ImportKind;
+(function (ImportKind) {
+    ImportKind[ImportKind["ImportDeclaration"] = 1] = "ImportDeclaration";
+    ImportKind[ImportKind["ImportEquals"] = 2] = "ImportEquals";
+    ImportKind[ImportKind["ExportFrom"] = 4] = "ExportFrom";
+    ImportKind[ImportKind["DynamicImport"] = 8] = "DynamicImport";
+    ImportKind[ImportKind["Require"] = 16] = "Require";
+    ImportKind[ImportKind["ImportType"] = 32] = "ImportType";
+    ImportKind[ImportKind["All"] = 63] = "All";
+    ImportKind[ImportKind["AllImports"] = 59] = "AllImports";
+    ImportKind[ImportKind["AllStaticImports"] = 3] = "AllStaticImports";
+    ImportKind[ImportKind["AllImportExpressions"] = 24] = "AllImportExpressions";
+    ImportKind[ImportKind["AllRequireLike"] = 18] = "AllRequireLike";
+    // @internal
+    ImportKind[ImportKind["AllNestedImports"] = 56] = "AllNestedImports";
+    // @internal
+    ImportKind[ImportKind["AllTopLevelImports"] = 7] = "AllTopLevelImports";
+})(ImportKind = exports.ImportKind || (exports.ImportKind = {}));
+function findImports(sourceFile, kinds, ignoreFileName = true) {
+    const result = [];
+    for (const node of findImportLikeNodes(sourceFile, kinds, ignoreFileName)) {
+        switch (node.kind) {
+            case ts.SyntaxKind.ImportDeclaration:
+                addIfTextualLiteral(node.moduleSpecifier);
+                break;
+            case ts.SyntaxKind.ImportEqualsDeclaration:
+                addIfTextualLiteral(node.moduleReference.expression);
+                break;
+            case ts.SyntaxKind.ExportDeclaration:
+                addIfTextualLiteral(node.moduleSpecifier);
+                break;
+            case ts.SyntaxKind.CallExpression:
+                addIfTextualLiteral(node.arguments[0]);
+                break;
+            case ts.SyntaxKind.ImportType:
+                if (node_1.isLiteralTypeNode(node.argument))
+                    addIfTextualLiteral(node.argument.literal);
+                break;
+            default:
+                throw new Error('unexpected node');
+        }
+    }
+    return result;
+    function addIfTextualLiteral(node) {
+        if (node_1.isTextualLiteral(node))
+            result.push(node);
+    }
+}
+exports.findImports = findImports;
+function findImportLikeNodes(sourceFile, kinds, ignoreFileName = true) {
+    return new ImportFinder(sourceFile, kinds, ignoreFileName).find();
+}
+exports.findImportLikeNodes = findImportLikeNodes;
+class ImportFinder {
+    constructor(_sourceFile, _options, _ignoreFileName) {
+        this._sourceFile = _sourceFile;
+        this._options = _options;
+        this._ignoreFileName = _ignoreFileName;
+        this._result = [];
+    }
+    find() {
+        if (this._sourceFile.isDeclarationFile)
+            this._options &= ~24 /* AllImportExpressions */;
+        if (this._options & 7 /* AllTopLevelImports */)
+            this._findImports(this._sourceFile.statements);
+        if (this._options & 56 /* AllNestedImports */)
+            this._findNestedImports();
+        return this._result;
+    }
+    _findImports(statements) {
+        for (const statement of statements) {
+            if (node_1.isImportDeclaration(statement)) {
+                if (this._options & 1 /* ImportDeclaration */)
+                    this._result.push(statement);
+            }
+            else if (node_1.isImportEqualsDeclaration(statement)) {
+                if (this._options & 2 /* ImportEquals */ &&
+                    statement.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference)
+                    this._result.push(statement);
+            }
+            else if (node_1.isExportDeclaration(statement)) {
+                if (statement.moduleSpecifier !== undefined && this._options & 4 /* ExportFrom */)
+                    this._result.push(statement);
+            }
+            else if (node_1.isModuleDeclaration(statement)) {
+                this._findImportsInModule(statement);
+            }
+        }
+    }
+    _findImportsInModule(declaration) {
+        if (declaration.body === undefined)
+            return;
+        if (declaration.body.kind === ts.SyntaxKind.ModuleDeclaration)
+            return this._findImportsInModule(declaration.body);
+        this._findImports(declaration.body.statements);
+    }
+    _findNestedImports() {
+        const isJavaScriptFile = this._ignoreFileName || (this._sourceFile.flags & ts.NodeFlags.JavaScriptFile) !== 0;
+        let re;
+        let includeJsDoc;
+        if ((this._options & 56 /* AllNestedImports */) === 16 /* Require */) {
+            if (!isJavaScriptFile)
+                return; // don't look for 'require' in TS files
+            re = /\brequire\s*[</(]/g;
+            includeJsDoc = false;
+        }
+        else if (this._options & 16 /* Require */ && isJavaScriptFile) {
+            re = /\b(?:import|require)\s*[</(]/g;
+            includeJsDoc = (this._options & 32 /* ImportType */) !== 0;
+        }
+        else {
+            re = /\bimport\s*[</(]/g;
+            includeJsDoc = isJavaScriptFile && (this._options & 32 /* ImportType */) !== 0;
+        }
+        for (let match = re.exec(this._sourceFile.text); match !== null; match = re.exec(this._sourceFile.text)) {
+            const token = getTokenAtPositionWorker(this._sourceFile, match.index, this._sourceFile, 
+            // only look for ImportTypeNode within JSDoc in JS files
+            match[0][0] === 'i' && includeJsDoc);
+            if (token.kind === ts.SyntaxKind.ImportKeyword) {
+                if (token.end - 'import'.length !== match.index)
+                    continue;
+                switch (token.parent.kind) {
+                    case ts.SyntaxKind.ImportType:
+                        this._result.push(token.parent);
+                        break;
+                    case ts.SyntaxKind.CallExpression:
+                        if (token.parent.arguments.length > 1)
+                            this._result.push(token.parent);
+                }
+            }
+            else if (token.kind === ts.SyntaxKind.Identifier &&
+                token.end - 'require'.length === match.index &&
+                token.parent.kind === ts.SyntaxKind.CallExpression &&
+                token.parent.expression === token &&
+                token.parent.arguments.length === 1) {
+                this._result.push(token.parent);
+            }
+        }
+    }
+}
+/**
+ * Ambient context means the statement itself has the `declare` keyword
+ * or is inside a `declare namespace`,  `delcare module` or `declare global`.
+ */
+function isStatementInAmbientContext(node) {
+    while (node.flags & ts.NodeFlags.NestedNamespace)
+        node = node.parent;
+    return hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword) || isAmbientModuleBlock(node.parent);
+}
+exports.isStatementInAmbientContext = isStatementInAmbientContext;
+/** Includes `declare namespace`, `declare module` and `declare global` and namespace nested in one of the aforementioned. */
+function isAmbientModuleBlock(node) {
+    while (node.kind === ts.SyntaxKind.ModuleBlock) {
+        do
+            node = node.parent;
+        while (node.flags & ts.NodeFlags.NestedNamespace);
+        if (hasModifier(node.modifiers, ts.SyntaxKind.DeclareKeyword))
+            return true;
+        node = node.parent;
+    }
+    return false;
+}
+exports.isAmbientModuleBlock = isAmbientModuleBlock;
+function getIIFE(func) {
+    let node = func.parent;
+    while (node.kind === ts.SyntaxKind.ParenthesizedExpression)
+        node = node.parent;
+    return node_1.isCallExpression(node) && func.end <= node.expression.end ? node : undefined;
+}
+exports.getIIFE = getIIFE;
+function isStrictCompilerOptionEnabled(options, option) {
+    return (options.strict ? options[option] !== false : options[option] === true) &&
+        (option !== 'strictPropertyInitialization' || isStrictCompilerOptionEnabled(options, 'strictNullChecks'));
+}
+exports.isStrictCompilerOptionEnabled = isStrictCompilerOptionEnabled;
+// https://github.com/ajafff/tslint-consistent-codestyle/issues/85
+/**
+ * Checks if a given compiler option is enabled.
+ * It handles dependencies of options, e.g. `declaration` is implicitly enabled by `composite` or `strictNullChecks` is enabled by `strict`.
+ * However, it does not check dependencies that are already checked and reported as errors, e.g. `checkJs` without `allowJs`.
+ * This function only handles boolean flags.
+ */
+function isCompilerOptionEnabled(options, option) {
+    switch (option) {
+        case 'stripInternal':
+        case 'declarationMap':
+        case 'emitDeclarationOnly':
+            return options[option] === true && isCompilerOptionEnabled(options, 'declaration');
+        case 'declaration':
+            return options.declaration || isCompilerOptionEnabled(options, 'composite');
+        case 'incremental':
+            return options.incremental === undefined ? isCompilerOptionEnabled(options, 'composite') : options.incremental;
+        case 'skipDefaultLibCheck':
+            return options.skipDefaultLibCheck || isCompilerOptionEnabled(options, 'skipLibCheck');
+        case 'suppressImplicitAnyIndexErrors':
+            return options.suppressImplicitAnyIndexErrors === true && isCompilerOptionEnabled(options, 'noImplicitAny');
+        case 'allowSyntheticDefaultImports':
+            return options.allowSyntheticDefaultImports !== undefined
+                ? options.allowSyntheticDefaultImports
+                : isCompilerOptionEnabled(options, 'esModuleInterop') || options.module === ts.ModuleKind.System;
+        case 'noUncheckedIndexedAccess':
+            return options.noUncheckedIndexedAccess === true && isCompilerOptionEnabled(options, 'strictNullChecks');
+        case 'allowJs':
+            return options.allowJs === undefined ? isCompilerOptionEnabled(options, 'checkJs') : options.allowJs;
+        case 'noImplicitAny':
+        case 'noImplicitThis':
+        case 'strictNullChecks':
+        case 'strictFunctionTypes':
+        case 'strictPropertyInitialization':
+        case 'alwaysStrict':
+        case 'strictBindCallApply':
+            return isStrictCompilerOptionEnabled(options, option);
+    }
+    return options[option] === true;
+}
+exports.isCompilerOptionEnabled = isCompilerOptionEnabled;
+/**
+ * Has nothing to do with `isAmbientModuleBlock`.
+ *
+ * @returns `true` if it's a global augmentation or has a string name.
+ */
+function isAmbientModule(node) {
+    return node.name.kind === ts.SyntaxKind.StringLiteral || (node.flags & ts.NodeFlags.GlobalAugmentation) !== 0;
+}
+exports.isAmbientModule = isAmbientModule;
+/**
+ * @deprecated use `getTsCheckDirective` instead since `// @ts-nocheck` is no longer restricted to JS files.
+ * @returns the last `// @ts-check` or `// @ts-nocheck` directive in the given file.
+ */
+function getCheckJsDirective(source) {
+    return getTsCheckDirective(source);
+}
+exports.getCheckJsDirective = getCheckJsDirective;
+/** @returns the last `// @ts-check` or `// @ts-nocheck` directive in the given file. */
+function getTsCheckDirective(source) {
+    let directive;
+    // needs to work around a shebang issue until https://github.com/Microsoft/TypeScript/issues/28477 is resolved
+    ts.forEachLeadingCommentRange(source, (ts.getShebang(source) || '').length, (pos, end, kind) => {
+        if (kind === ts.SyntaxKind.SingleLineCommentTrivia) {
+            const text = source.slice(pos, end);
+            const match = /^\/{2,3}\s*@ts-(no)?check(?:\s|$)/i.exec(text);
+            if (match !== null)
+                directive = { pos, end, enabled: match[1] === undefined };
+        }
+    });
+    return directive;
+}
+exports.getTsCheckDirective = getTsCheckDirective;
+function isConstAssertion(node) {
+    return node_1.isTypeReferenceNode(node.type) &&
+        node.type.typeName.kind === ts.SyntaxKind.Identifier &&
+        node.type.typeName.escapedText === 'const';
+}
+exports.isConstAssertion = isConstAssertion;
+/** Detects whether an expression is affected by an enclosing 'as const' assertion and therefore treated literally. */
+function isInConstContext(node) {
+    let current = node;
+    while (true) {
+        const parent = current.parent;
+        outer: switch (parent.kind) {
+            case ts.SyntaxKind.TypeAssertionExpression:
+            case ts.SyntaxKind.AsExpression:
+                return isConstAssertion(parent);
+            case ts.SyntaxKind.PrefixUnaryExpression:
+                if (current.kind !== ts.SyntaxKind.NumericLiteral)
+                    return false;
+                switch (parent.operator) {
+                    case ts.SyntaxKind.PlusToken:
+                    case ts.SyntaxKind.MinusToken:
+                        current = parent;
+                        break outer;
+                    default:
+                        return false;
+                }
+            case ts.SyntaxKind.PropertyAssignment:
+                if (parent.initializer !== current)
+                    return false;
+                current = parent.parent;
+                break;
+            case ts.SyntaxKind.ShorthandPropertyAssignment:
+                current = parent.parent;
+                break;
+            case ts.SyntaxKind.ParenthesizedExpression:
+            case ts.SyntaxKind.ArrayLiteralExpression:
+            case ts.SyntaxKind.ObjectLiteralExpression:
+            case ts.SyntaxKind.TemplateExpression:
+                current = parent;
+                break;
+            default:
+                return false;
+        }
+    }
+}
+exports.isInConstContext = isInConstContext;
+/** Returns true for `Object.defineProperty(o, 'prop', {value, writable: false})` and  `Object.defineProperty(o, 'prop', {get: () => 1})`*/
+function isReadonlyAssignmentDeclaration(node, checker) {
+    if (!isBindableObjectDefinePropertyCall(node))
+        return false;
+    const descriptorType = checker.getTypeAtLocation(node.arguments[2]);
+    if (descriptorType.getProperty('value') === undefined)
+        return descriptorType.getProperty('set') === undefined;
+    const writableProp = descriptorType.getProperty('writable');
+    if (writableProp === undefined)
+        return false;
+    const writableType = writableProp.valueDeclaration !== undefined && node_1.isPropertyAssignment(writableProp.valueDeclaration)
+        ? checker.getTypeAtLocation(writableProp.valueDeclaration.initializer)
+        : checker.getTypeOfSymbolAtLocation(writableProp, node.arguments[2]);
+    return type_1.isBooleanLiteralType(writableType, false);
+}
+exports.isReadonlyAssignmentDeclaration = isReadonlyAssignmentDeclaration;
+/** Determines whether a call to `Object.defineProperty` is statically analyzable. */
+function isBindableObjectDefinePropertyCall(node) {
+    return node.arguments.length === 3 &&
+        node_1.isEntityNameExpression(node.arguments[0]) &&
+        node_1.isNumericOrStringLikeLiteral(node.arguments[1]) &&
+        node_1.isPropertyAccessExpression(node.expression) &&
+        node.expression.name.escapedText === 'defineProperty' &&
+        node_1.isIdentifier(node.expression.expression) &&
+        node.expression.expression.escapedText === 'Object';
+}
+exports.isBindableObjectDefinePropertyCall = isBindableObjectDefinePropertyCall;
+function isWellKnownSymbolLiterally(node) {
+    return ts.isPropertyAccessExpression(node) &&
+        ts.isIdentifier(node.expression) &&
+        node.expression.escapedText === 'Symbol';
+}
+exports.isWellKnownSymbolLiterally = isWellKnownSymbolLiterally;
+/** @deprecated typescript 4.3 removed the concept of literal well known symbols. Use `getPropertyNameFromType` instead. */
+function getPropertyNameOfWellKnownSymbol(node) {
+    return {
+        displayName: `[Symbol.${node.name.text}]`,
+        symbolName: ('__@' + node.name.text),
+    };
+}
+exports.getPropertyNameOfWellKnownSymbol = getPropertyNameOfWellKnownSymbol;
+const isTsBefore43 = (([major, minor]) => major < '4' || major === '4' && minor < '3')(ts.versionMajorMinor.split('.'));
+function getLateBoundPropertyNames(node, checker) {
+    const result = {
+        known: true,
+        names: [],
+    };
+    node = unwrapParentheses(node);
+    if (isTsBefore43 && isWellKnownSymbolLiterally(node)) {
+        result.names.push(getPropertyNameOfWellKnownSymbol(node)); // wotan-disable-line no-unstable-api-use
+    }
+    else {
+        const type = checker.getTypeAtLocation(node);
+        for (const key of type_1.unionTypeParts(checker.getBaseConstraintOfType(type) || type)) {
+            const propertyName = type_1.getPropertyNameFromType(key);
+            if (propertyName) {
+                result.names.push(propertyName);
+            }
+            else {
+                result.known = false;
+            }
+        }
+    }
+    return result;
+}
+exports.getLateBoundPropertyNames = getLateBoundPropertyNames;
+function getLateBoundPropertyNamesOfPropertyName(node, checker) {
+    const staticName = getPropertyName(node);
+    return staticName !== undefined
+        ? { known: true, names: [{ displayName: staticName, symbolName: ts.escapeLeadingUnderscores(staticName) }] }
+        : node.kind === ts.SyntaxKind.PrivateIdentifier
+            ? { known: true, names: [{ displayName: node.text, symbolName: checker.getSymbolAtLocation(node).escapedName }] }
+            : getLateBoundPropertyNames(node.expression, checker);
+}
+exports.getLateBoundPropertyNamesOfPropertyName = getLateBoundPropertyNamesOfPropertyName;
+/** Most declarations demand there to be only one statically known name, e.g. class members with computed name. */
+function getSingleLateBoundPropertyNameOfPropertyName(node, checker) {
+    const staticName = getPropertyName(node);
+    if (staticName !== undefined)
+        return { displayName: staticName, symbolName: ts.escapeLeadingUnderscores(staticName) };
+    if (node.kind === ts.SyntaxKind.PrivateIdentifier)
+        return { displayName: node.text, symbolName: checker.getSymbolAtLocation(node).escapedName };
+    const { expression } = node;
+    return isTsBefore43 && isWellKnownSymbolLiterally(expression)
+        ? getPropertyNameOfWellKnownSymbol(expression) // wotan-disable-line no-unstable-api-use
+        : type_1.getPropertyNameFromType(checker.getTypeAtLocation(expression));
+}
+exports.getSingleLateBoundPropertyNameOfPropertyName = getSingleLateBoundPropertyNameOfPropertyName;
+function unwrapParentheses(node) {
+    while (node.kind === ts.SyntaxKind.ParenthesizedExpression)
+        node = node.expression;
+    return node;
+}
+exports.unwrapParentheses = unwrapParentheses;
+function formatPseudoBigInt(v) {
+    return `${v.negative ? '-' : ''}${v.base10Value}n`;
+}
+exports.formatPseudoBigInt = formatPseudoBigInt;
+/**
+ * Determines whether the given `SwitchStatement`'s `case` clauses cover every possible value of the switched expression.
+ * The logic is the same as TypeScript's control flow analysis.
+ * This does **not** check whether all `case` clauses do a certain action like assign a variable or return a value.
+ * This function ignores the `default` clause if present.
+ */
+function hasExhaustiveCaseClauses(node, checker) {
+    const caseClauses = node.caseBlock.clauses.filter(node_1.isCaseClause);
+    if (caseClauses.length === 0)
+        return false;
+    const typeParts = type_1.unionTypeParts(checker.getTypeAtLocation(node.expression));
+    if (typeParts.length > caseClauses.length)
+        return false;
+    const types = new Set(typeParts.map(getPrimitiveLiteralFromType));
+    if (types.has(undefined))
+        return false;
+    const seen = new Set();
+    for (const clause of caseClauses) {
+        const expressionType = checker.getTypeAtLocation(clause.expression);
+        if (exports.isTypeFlagSet(expressionType, ts.TypeFlags.Never))
+            continue; // additional case clause with 'never' is always allowed
+        const type = getPrimitiveLiteralFromType(expressionType);
+        if (types.has(type)) {
+            seen.add(type);
+        }
+        else if (type !== 'null' && type !== 'undefined') { // additional case clauses with 'null' and 'undefined' are always allowed
+            return false;
+        }
+    }
+    return types.size === seen.size;
+}
+exports.hasExhaustiveCaseClauses = hasExhaustiveCaseClauses;
+function getPrimitiveLiteralFromType(t) {
+    if (exports.isTypeFlagSet(t, ts.TypeFlags.Null))
+        return 'null';
+    if (exports.isTypeFlagSet(t, ts.TypeFlags.Undefined))
+        return 'undefined';
+    if (exports.isTypeFlagSet(t, ts.TypeFlags.NumberLiteral))
+        return `${exports.isTypeFlagSet(t, ts.TypeFlags.EnumLiteral) ? 'enum:' : ''}${t.value}`;
+    if (exports.isTypeFlagSet(t, ts.TypeFlags.StringLiteral))
+        return `${exports.isTypeFlagSet(t, ts.TypeFlags.EnumLiteral) ? 'enum:' : ''}string:${t.value}`;
+    if (exports.isTypeFlagSet(t, ts.TypeFlags.BigIntLiteral))
+        return formatPseudoBigInt(t.value);
+    if (_3_2_1.isUniqueESSymbolType(t))
+        return t.escapedName;
+    if (type_1.isBooleanLiteralType(t, true))
+        return 'true';
+    if (type_1.isBooleanLiteralType(t, false))
+        return 'false';
+}
+function getBaseOfClassLikeExpression(node) {
+    var _a;
+    if (((_a = node.heritageClauses) === null || _a === void 0 ? void 0 : _a[0].token) === ts.SyntaxKind.ExtendsKeyword)
+        return node.heritageClauses[0].types[0];
+}
+exports.getBaseOfClassLikeExpression = getBaseOfClassLikeExpression;
+//# sourceMappingURL=util.js.map
Index: frontend/node_modules/tsutils/util/util.js.map
===================================================================
--- frontend/node_modules/tsutils/util/util.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsutils/util/util.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"util.js","sourceRoot":"","sources":["util.ts"],"names":[],"mappings":"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"}
