{
  "version": 3,
  "sources": ["../../../src/diagrams/ishikawa/parser/ishikawa.jison", "../../../src/diagrams/ishikawa/ishikawaDb.ts", "../../../src/diagrams/ishikawa/ishikawaRenderer.ts", "../../../src/diagrams/ishikawa/ishikawaStyles.ts", "../../../src/diagrams/ishikawa/ishikawaDiagram.ts"],
  "sourcesContent": ["/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,14],$V2=[1,12],$V3=[1,13],$V4=[6,7,8],$V5=[1,20],$V6=[1,18],$V7=[1,19],$V8=[6,7,11],$V9=[1,6,13,14],$Va=[1,23],$Vb=[1,24],$Vc=[1,6,7,11,13,14];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"ishikawa\":4,\"spaceLines\":5,\"SPACELINE\":6,\"NL\":7,\"ISHIKAWA\":8,\"document\":9,\"stop\":10,\"EOF\":11,\"statement\":12,\"SPACELIST\":13,\"TEXT\":14,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",6:\"SPACELINE\",7:\"NL\",8:\"ISHIKAWA\",11:\"EOF\",13:\"SPACELIST\",14:\"TEXT\"},\nproductions_: [0,[3,1],[3,2],[5,1],[5,2],[5,2],[4,2],[4,3],[10,1],[10,1],[10,1],[10,2],[10,2],[9,3],[9,2],[12,2],[12,1],[12,1],[12,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 6: case 7:\n return yy; \nbreak;\ncase 15:\n yy.addNode($$[$0-1].length, $$[$0].trim()); \nbreak;\ncase 16:\n yy.addNode(0, $$[$0].trim()); \nbreak;\n}\n},\ntable: [{3:1,4:2,5:3,6:[1,5],8:$V0},{1:[3]},{1:[2,1]},{4:6,6:[1,7],7:[1,8],8:$V0},{6:$V1,7:[1,10],9:9,12:11,13:$V2,14:$V3},o($V4,[2,3]),{1:[2,2]},o($V4,[2,4]),o($V4,[2,5]),{1:[2,6],6:$V1,12:15,13:$V2,14:$V3},{6:$V1,9:16,12:11,13:$V2,14:$V3},{6:$V5,7:$V6,10:17,11:$V7},o($V8,[2,18],{14:[1,21]}),o($V8,[2,16]),o($V8,[2,17]),{6:$V5,7:$V6,10:22,11:$V7},{1:[2,7],6:$V1,12:15,13:$V2,14:$V3},o($V9,[2,14],{7:$Va,11:$Vb}),o($Vc,[2,8]),o($Vc,[2,9]),o($Vc,[2,10]),o($V8,[2,15]),o($V9,[2,13],{7:$Va,11:$Vb}),o($Vc,[2,11]),o($Vc,[2,12])],\ndefaultActions: {2:[2,1],6:[2,2]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: return 6; \nbreak;\ncase 1: return 8; \nbreak;\ncase 2: return 8; \nbreak;\ncase 3: return 6; \nbreak;\ncase 4: return 7; \nbreak;\ncase 5: return 13; \nbreak;\ncase 6: return 14; \nbreak;\ncase 7:return 11;\nbreak;\n}\n},\nrules: [/^(?:\\s*%%.*)/i,/^(?:ishikawa-beta\\b)/i,/^(?:ishikawa\\b)/i,/^(?:[\\s]+[\\n])/i,/^(?:[\\n]+)/i,/^(?:[\\s]+)/i,/^(?:[^\\n]+)/i,/^(?:$)/i],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramDB } from '../../diagram-api/types.js';\nimport common from '../common/common.js';\nimport {\n  clear as commonClear,\n  getAccDescription,\n  getAccTitle,\n  getDiagramTitle,\n  setAccDescription,\n  setAccTitle,\n  setDiagramTitle,\n} from '../common/commonDb.js';\nimport type { IshikawaNode } from './ishikawaTypes.js';\n\ninterface StackEntry {\n  level: number;\n  node: IshikawaNode;\n}\n\nexport class IshikawaDB implements DiagramDB {\n  private root?: IshikawaNode;\n  private stack: StackEntry[] = [];\n  private baseLevel?: number;\n\n  constructor() {\n    this.clear = this.clear.bind(this);\n    this.addNode = this.addNode.bind(this);\n    this.getRoot = this.getRoot.bind(this);\n  }\n\n  clear(): void {\n    this.root = undefined;\n    this.stack = [];\n    this.baseLevel = undefined;\n    commonClear();\n  }\n\n  getRoot(): IshikawaNode | undefined {\n    return this.root;\n  }\n\n  addNode(rawLevel: number, text: string): void {\n    const label = common.sanitizeText(text, getConfig());\n\n    if (!this.root) {\n      this.root = { text: label, children: [] };\n      this.stack = [{ level: 0, node: this.root }];\n      setDiagramTitle(label);\n      return;\n    }\n\n    // Set baseLevel from the first cause (not the effect/root line),\n    // so that relative indentation between causes is preserved\n    // even when the effect line is indented more than the causes.\n    this.baseLevel ??= rawLevel;\n\n    let level = rawLevel - this.baseLevel + 1;\n    if (level <= 0) {\n      level = 1;\n    }\n\n    // Pop stack until the top has a strictly lower level (= parent)\n    while (this.stack.length > 1 && this.stack[this.stack.length - 1].level >= level) {\n      this.stack.pop();\n    }\n\n    const parent = this.stack[this.stack.length - 1].node;\n    const node: IshikawaNode = { text: label, children: [] };\n    parent.children.push(node);\n    this.stack.push({ level, node });\n  }\n\n  getAccTitle(): string {\n    return getAccTitle();\n  }\n\n  setAccTitle(title: string): void {\n    setAccTitle(title);\n  }\n\n  getAccDescription(): string {\n    return getAccDescription();\n  }\n\n  setAccDescription(description: string): void {\n    setAccDescription(description);\n  }\n\n  getDiagramTitle(): string {\n    return getDiagramTitle();\n  }\n\n  setDiagramTitle(title: string): void {\n    setDiagramTitle(title);\n  }\n}\n", "// cspell:ignore lerp\nimport type { Diagram } from '../../Diagram.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport type { DiagramRenderer, DrawDefinition, SVG, SVGGroup } from '../../diagram-api/types.js';\nimport { selectSvgElement } from '../../rendering-util/selectSvgElement.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport { parseFontSize } from '../../utils.js';\nimport type { IshikawaDB } from './ishikawaDb.js';\nimport type { IshikawaNode } from './ishikawaTypes.js';\nimport rough from 'roughjs';\n\ninterface RoughContext {\n  roughSvg: ReturnType<typeof rough.svg>;\n  seed: number;\n  lineColor: string;\n  fillColor: string;\n}\n\nconst FONT_SIZE_DEFAULT = 14;\nconst SPINE_BASE_LENGTH = 250;\nconst BONE_STUB = 30;\nconst BONE_BASE = 60;\nconst BONE_PER_CHILD = 5;\nconst ANGLE = (82 * Math.PI) / 180;\nconst COS_A = Math.cos(ANGLE);\nconst SIN_A = Math.sin(ANGLE);\n\nconst applyPaddedViewBox = (svgEl: SVG, pad: number, maxW: boolean) => {\n  const bbox = svgEl.node()!.getBBox();\n  const w = bbox.width + pad * 2;\n  const h = bbox.height + pad * 2;\n  configureSvgSize(svgEl, h, w, maxW);\n  svgEl.attr('viewBox', `${bbox.x - pad} ${bbox.y - pad} ${w} ${h}`);\n};\n\nconst draw: DrawDefinition = (_text, id, _version, diagram: Diagram) => {\n  const db = diagram.db as IshikawaDB;\n  const root = db.getRoot();\n  if (!root) {\n    return;\n  }\n\n  const drawConfig = getConfig();\n  const { look, handDrawnSeed, themeVariables } = drawConfig;\n  const fontSize = parseFontSize(drawConfig.fontSize)[0] ?? FONT_SIZE_DEFAULT;\n  const isHandDrawn = look === 'handDrawn';\n\n  const causes = root.children ?? [];\n  const padding = drawConfig.ishikawa?.diagramPadding ?? 20;\n  const useMaxWidth = drawConfig.ishikawa?.useMaxWidth ?? false;\n  const svg = selectSvgElement(id);\n  const g = svg.append('g').attr('class', 'ishikawa');\n\n  const roughSvg = isHandDrawn ? rough.svg(svg.node()!) : undefined;\n  const roughContext: RoughContext | undefined = roughSvg\n    ? {\n        roughSvg,\n        seed: handDrawnSeed ?? 0,\n        lineColor: themeVariables?.lineColor ?? '#333',\n        fillColor: themeVariables?.mainBkg ?? '#fff',\n      }\n    : undefined;\n\n  const markerId = `ishikawa-arrow-${id}`;\n  if (!isHandDrawn) {\n    g.append('defs')\n      .append('marker')\n      .attr('id', markerId)\n      .attr('viewBox', '0 0 10 10')\n      .attr('refX', 0)\n      .attr('refY', 5)\n      .attr('markerWidth', 6)\n      .attr('markerHeight', 6)\n      .attr('orient', 'auto')\n      .append('path')\n      .attr('d', 'M 10 0 L 0 5 L 10 10 Z')\n      .attr('class', 'ishikawa-arrow');\n  }\n\n  let spineX = 0;\n  let spineY = SPINE_BASE_LENGTH;\n\n  // For handDrawn, defer spine drawing until coordinates are final\n  const spineLine = isHandDrawn\n    ? undefined\n    : drawLine(g, spineX, spineY, spineX, spineY, 'ishikawa-spine');\n  drawHead(g, spineX, spineY, root.text, fontSize, roughContext);\n\n  if (!causes.length) {\n    if (isHandDrawn) {\n      drawLine(g, spineX, spineY, spineX, spineY, 'ishikawa-spine', roughContext);\n    }\n    applyPaddedViewBox(svg, padding, useMaxWidth);\n    return;\n  }\n\n  spineX -= 20;\n\n  const upperCauses = causes.filter((_, i) => i % 2 === 0);\n  const lowerCauses = causes.filter((_, i) => i % 2 === 1);\n\n  const upperStats = sideStats(upperCauses);\n  const lowerStats = sideStats(lowerCauses);\n  const descendantTotal = upperStats.total + lowerStats.total;\n\n  let upperLen = SPINE_BASE_LENGTH;\n  let lowerLen = SPINE_BASE_LENGTH;\n  if (descendantTotal > 0) {\n    const pool = SPINE_BASE_LENGTH * 2;\n    const minLen = SPINE_BASE_LENGTH * 0.3;\n    upperLen = Math.max(minLen, pool * (upperStats.total / descendantTotal));\n    lowerLen = Math.max(minLen, pool * (lowerStats.total / descendantTotal));\n  }\n\n  const minSpacing = fontSize * 2;\n  upperLen = Math.max(upperLen, upperStats.max * minSpacing);\n  lowerLen = Math.max(lowerLen, lowerStats.max * minSpacing);\n\n  spineY = Math.max(upperLen, SPINE_BASE_LENGTH);\n  if (spineLine) {\n    spineLine.attr('y1', spineY).attr('y2', spineY);\n  }\n  g.select('.ishikawa-head-group').attr('transform', `translate(0,${spineY})`);\n\n  const pairCount = Math.ceil(causes.length / 2);\n  for (let p = 0; p < pairCount; p++) {\n    const pg = g.append('g').attr('class', 'ishikawa-pair');\n    for (const [cause, dir, len] of [\n      [causes[p * 2], -1, upperLen] as const,\n      [causes[p * 2 + 1], 1, lowerLen] as const,\n    ]) {\n      if (cause) {\n        drawBranch(pg, cause, spineX, spineY, dir, len, fontSize, roughContext);\n      }\n    }\n    spineX = pg\n      .selectAll('text')\n      .nodes()\n      .reduce((left, n) => Math.min(left, (n as SVGGraphicsElement).getBBox().x), Infinity);\n  }\n\n  if (isHandDrawn) {\n    drawLine(g, spineX, spineY, 0, spineY, 'ishikawa-spine', roughContext);\n  } else {\n    spineLine!.attr('x1', spineX);\n    const markerUrl = `url(#${markerId})`;\n    g.selectAll('line.ishikawa-branch, line.ishikawa-sub-branch').attr('marker-start', markerUrl);\n  }\n  applyPaddedViewBox(svg, padding, useMaxWidth);\n};\n\nconst sideStats = (nodes: IshikawaNode[]) => {\n  const countDescendants = (node: IshikawaNode): number =>\n    node.children.reduce((sum, child) => sum + 1 + countDescendants(child), 0);\n\n  return nodes.reduce(\n    (stats, node) => {\n      const descendants = countDescendants(node);\n      stats.total += descendants;\n      stats.max = Math.max(stats.max, descendants);\n      return stats;\n    },\n    { total: 0, max: 0 }\n  );\n};\n\nconst drawHead = (\n  svg: SVGGroup,\n  x: number,\n  y: number,\n  label: string,\n  fontSize: number,\n  roughContext?: RoughContext\n): void => {\n  const maxChars = Math.max(6, Math.floor(110 / (fontSize * 0.6)));\n  const headGroup = svg\n    .append('g')\n    .attr('class', 'ishikawa-head-group')\n    .attr('transform', `translate(${x},${y})`);\n\n  const textEl = drawMultilineText(\n    headGroup,\n    wrapText(label, maxChars),\n    0,\n    0,\n    'ishikawa-head-label',\n    'start',\n    fontSize\n  );\n  const tb = textEl.node()!.getBBox();\n  const w = Math.max(60, tb.width + 6);\n  const h = Math.max(40, tb.height * 2 + 40);\n\n  const headPath = `M 0 ${-h / 2} L 0 ${h / 2} Q ${w * 2.4} 0 0 ${-h / 2} Z`;\n  if (roughContext) {\n    const roughNode = roughContext.roughSvg.path(headPath, {\n      roughness: 1.5,\n      seed: roughContext.seed,\n      fill: roughContext.fillColor,\n      fillStyle: 'hachure',\n      fillWeight: 2.5,\n      hachureGap: 5,\n      stroke: roughContext.lineColor,\n      strokeWidth: 2,\n    });\n    headGroup.insert(() => roughNode, ':first-child').attr('class', 'ishikawa-head');\n  } else {\n    headGroup.insert('path', ':first-child').attr('class', 'ishikawa-head').attr('d', headPath);\n  }\n  textEl.attr('transform', `translate(${(w - tb.width) / 2 - tb.x + 3},${-tb.y - tb.height / 2})`);\n};\n\ninterface LabelEntry {\n  text: string;\n  depth: number;\n  parentIndex: number;\n  childCount: number;\n}\n\ninterface BoneInfo {\n  x0: number;\n  y0: number;\n  x1: number;\n  y1: number;\n  childCount: number;\n  childrenDrawn: number;\n}\n\n// Flatten children so we can assign Y positions without recursion when drawing.\n// Even depths are placed in pre-order (close to the spine), odd depths in post-order\n// to keep diagonal bones within their parent wedge.\nconst flattenTree = (children: IshikawaNode[], direction: 1 | -1) => {\n  const entries: LabelEntry[] = [];\n  const yOrder: number[] = [];\n  const walk = (nodes: IshikawaNode[], pid: number, depth: number) => {\n    const ordered = direction === -1 ? [...nodes].reverse() : nodes;\n    for (const child of ordered) {\n      const idx = entries.length;\n      const gc = child.children ?? [];\n      entries.push({\n        depth,\n        text: wrapText(child.text, 15),\n        parentIndex: pid,\n        childCount: gc.length,\n      });\n      if (depth % 2 === 0) {\n        // Even-depth: pre-order (closer to spine)\n        yOrder.push(idx);\n        if (gc.length) {\n          walk(gc, idx, depth + 1);\n        }\n      } else {\n        // odd-depth: post-order (within parent diagonal)\n        if (gc.length) {\n          walk(gc, idx, depth + 1);\n        }\n        yOrder.push(idx);\n      }\n    }\n  };\n  walk(children, -1, 2);\n  return { entries, yOrder };\n};\n\nconst drawCauseLabel = (\n  svg: SVGGroup,\n  text: string,\n  x: number,\n  y: number,\n  direction: 1 | -1,\n  fontSize: number,\n  roughContext?: RoughContext\n) => {\n  const lg = svg.append('g').attr('class', 'ishikawa-label-group');\n  const lt = drawMultilineText(\n    lg,\n    text,\n    x,\n    y + 11 * direction,\n    'ishikawa-label cause',\n    'middle',\n    fontSize\n  );\n  const tb = lt.node()!.getBBox();\n  if (roughContext) {\n    const roughNode = roughContext.roughSvg.rectangle(\n      tb.x - 20,\n      tb.y - 2,\n      tb.width + 40,\n      tb.height + 4,\n      {\n        roughness: 1.5,\n        seed: roughContext.seed,\n        fill: roughContext.fillColor,\n        fillStyle: 'hachure',\n        fillWeight: 2.5,\n        hachureGap: 5,\n        stroke: roughContext.lineColor,\n        strokeWidth: 2,\n      }\n    );\n    lg.insert(() => roughNode, ':first-child').attr('class', 'ishikawa-label-box');\n  } else {\n    lg.insert('rect', ':first-child')\n      .attr('class', 'ishikawa-label-box')\n      .attr('x', tb.x - 20)\n      .attr('y', tb.y - 2)\n      .attr('width', tb.width + 40)\n      .attr('height', tb.height + 4);\n  }\n};\n\n// Emulate arrow marker since rough.js does not support marker on line\nconst drawArrowMarker = (\n  g: SVGGroup,\n  x: number,\n  y: number,\n  dx: number,\n  dy: number,\n  roughContext: RoughContext\n) => {\n  const len = Math.sqrt(dx * dx + dy * dy);\n  if (len === 0) {\n    return;\n  }\n  const ux = dx / len;\n  const uy = dy / len;\n  const s = 6;\n  const px = -uy * s;\n  const py = ux * s;\n  const tipX = x;\n  const tipY = y;\n  const d = `M ${tipX} ${tipY} L ${tipX - ux * s * 2 + px} ${tipY - uy * s * 2 + py} L ${tipX - ux * s * 2 - px} ${tipY - uy * s * 2 - py} Z`;\n  const roughNode = roughContext.roughSvg.path(d, {\n    roughness: 1,\n    seed: roughContext.seed,\n    fill: roughContext.lineColor,\n    fillStyle: 'solid',\n    stroke: roughContext.lineColor,\n    strokeWidth: 1,\n  });\n  g.append(() => roughNode);\n};\n\nconst drawBranch = (\n  svg: SVGGroup,\n  node: IshikawaNode,\n  startX: number,\n  startY: number,\n  direction: 1 | -1,\n  length: number,\n  fontSize: number,\n  roughContext?: RoughContext\n): void => {\n  const children = node.children ?? [];\n  const lineLen = length * (children.length ? 1 : 0.2);\n  const dx = -COS_A * lineLen;\n  const dy = SIN_A * lineLen * direction;\n  const endX = startX + dx;\n  const endY = startY + dy;\n\n  drawLine(svg, startX, startY, endX, endY, 'ishikawa-branch', roughContext);\n  if (roughContext) {\n    drawArrowMarker(svg, startX, startY, startX - endX, startY - endY, roughContext);\n  }\n  drawCauseLabel(svg, node.text, endX, endY, direction, fontSize, roughContext);\n\n  if (!children.length) {\n    return;\n  }\n\n  const { entries, yOrder } = flattenTree(children, direction);\n  const entryCount = entries.length;\n  const ys = new Array<number>(entryCount);\n  for (const [slot, entryIdx] of yOrder.entries()) {\n    ys[entryIdx] = startY + dy * ((slot + 1) / (entryCount + 1));\n  }\n\n  const bones = new Map<number, BoneInfo>();\n  bones.set(-1, {\n    x0: startX,\n    y0: startY,\n    x1: endX,\n    y1: endY,\n    childCount: children.length,\n    childrenDrawn: 0,\n  });\n\n  const diagonalX = -COS_A;\n  const diagonalY = SIN_A * direction;\n  const oddLabel = direction < 0 ? 'ishikawa-label up' : 'ishikawa-label down';\n\n  for (const [i, e] of entries.entries()) {\n    const y = ys[i];\n    const par = bones.get(e.parentIndex)!;\n    const grp = svg.append('g').attr('class', 'ishikawa-sub-group');\n\n    let bx0 = 0;\n    let by0 = 0;\n    let bx1 = 0;\n\n    if (e.depth % 2 === 0) {\n      // Horizontal bone: attach to parent's diagonal at the target Y, extend left\n      const dyP = par.y1 - par.y0;\n      bx0 = lerp(par.x0, par.x1, dyP ? (y - par.y0) / dyP : 0.5);\n      by0 = y;\n      bx1 = bx0 - (e.childCount > 0 ? BONE_BASE + e.childCount * BONE_PER_CHILD : BONE_STUB);\n      drawLine(grp, bx0, y, bx1, y, 'ishikawa-sub-branch', roughContext);\n      if (roughContext) {\n        drawArrowMarker(grp, bx0, y, 1, 0, roughContext);\n      }\n      drawMultilineText(grp, e.text, bx1, y, 'ishikawa-label align', 'end', fontSize);\n    } else {\n      // Diagonal bone: start from evenly-spaced point on parent's horizontal, angle toward target Y\n      const k = par.childrenDrawn++;\n      bx0 = lerp(par.x0, par.x1, (par.childCount - k) / (par.childCount + 1));\n      by0 = par.y0;\n      bx1 = bx0 + diagonalX * ((y - by0) / diagonalY);\n      drawLine(grp, bx0, by0, bx1, y, 'ishikawa-sub-branch', roughContext);\n      if (roughContext) {\n        drawArrowMarker(grp, bx0, by0, bx0 - bx1, by0 - y, roughContext);\n      }\n      drawMultilineText(grp, e.text, bx1, y, oddLabel, 'end', fontSize);\n    }\n\n    if (e.childCount > 0) {\n      bones.set(i, {\n        x0: bx0,\n        y0: by0,\n        x1: bx1,\n        y1: y,\n        childCount: e.childCount,\n        childrenDrawn: 0,\n      });\n    }\n  }\n};\n\nconst splitLines = (text: string): string[] => text.split(/<br\\s*\\/?>|\\n/);\n\nconst wrapText = (text: string, maxChars: number): string => {\n  if (text.length <= maxChars) {\n    return text;\n  }\n  const lines: string[] = [];\n  for (const word of text.split(/\\s+/)) {\n    const last = lines.length - 1;\n    if (last >= 0 && lines[last].length + 1 + word.length <= maxChars) {\n      lines[last] += ' ' + word;\n    } else {\n      lines.push(word);\n    }\n  }\n  return lines.join('\\n');\n};\n\nconst drawMultilineText = (\n  g: SVGGroup,\n  text: string,\n  x: number,\n  y: number,\n  cls: string,\n  anchor: 'middle' | 'start' | 'end',\n  fontSize: number\n) => {\n  const lines = splitLines(text);\n  const lh = fontSize * 1.05;\n  const el = g\n    .append('text')\n    .attr('class', cls)\n    .attr('text-anchor', anchor)\n    .attr('x', x)\n    .attr('y', y - ((lines.length - 1) * lh) / 2);\n  for (const [i, line] of lines.entries()) {\n    el.append('tspan')\n      .attr('x', x)\n      .attr('dy', i === 0 ? 0 : lh)\n      .text(line);\n  }\n  return el;\n};\n\nconst lerp = (a: number, b: number, t: number) => a + (b - a) * t;\n\nconst drawLine = (\n  g: SVGGroup,\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  cls: string,\n  roughContext?: RoughContext\n) => {\n  if (roughContext) {\n    const roughNode = roughContext.roughSvg.line(x1, y1, x2, y2, {\n      roughness: 1.5,\n      seed: roughContext.seed,\n      stroke: roughContext.lineColor,\n      strokeWidth: 2,\n    });\n    g.append(() => roughNode).attr('class', cls);\n    return undefined;\n  }\n  return g\n    .append('line')\n    .attr('class', cls)\n    .attr('x1', x1)\n    .attr('y1', y1)\n    .attr('x2', x2)\n    .attr('y2', y2);\n};\n\nexport const renderer: DiagramRenderer = { draw };\n", "import type { DiagramStylesProvider } from '../../diagram-api/types.js';\n\nconst getStyles: DiagramStylesProvider = (options) => `\n.ishikawa .ishikawa-spine,\n.ishikawa .ishikawa-branch,\n.ishikawa .ishikawa-sub-branch {\n  stroke: ${options.lineColor};\n  stroke-width: 2;\n  fill: none;\n}\n\n.ishikawa .ishikawa-sub-branch {\n  stroke-width: 1;\n}\n\n.ishikawa .ishikawa-arrow {\n  fill: ${options.lineColor};\n}\n\n.ishikawa .ishikawa-head {\n  fill: ${options.mainBkg};\n  stroke: ${options.lineColor};\n  stroke-width: 2;\n}\n\n.ishikawa .ishikawa-label-box {\n  fill: ${options.mainBkg};\n  stroke: ${options.lineColor};\n  stroke-width: 2;\n}\n\n.ishikawa text {\n  font-family: ${options.fontFamily};\n  font-size: ${options.fontSize};\n  fill: ${options.textColor};\n}\n\n.ishikawa .ishikawa-head-label {\n  font-weight: 600;\n  text-anchor: middle;\n  dominant-baseline: middle;\n  font-size: 14px;\n}\n\n.ishikawa .ishikawa-label {\n  text-anchor: end;\n}\n\n.ishikawa .ishikawa-label.cause {\n  text-anchor: middle;\n  dominant-baseline: middle;\n}\n\n.ishikawa .ishikawa-label.align {\n  text-anchor: end;\n  dominant-baseline: middle;\n}\n\n.ishikawa .ishikawa-label.up {\n  dominant-baseline: baseline;\n}\n\n.ishikawa .ishikawa-label.down {\n  dominant-baseline: hanging;\n}\n`;\n\nexport default getStyles;\n", "import type { DiagramDefinition } from '../../diagram-api/types.js';\n// @ts-ignore: JISON doesn't support types\nimport parser from './parser/ishikawa.jison';\nimport { IshikawaDB } from './ishikawaDb.js';\nimport { renderer } from './ishikawaRenderer.js';\nimport styles from './ishikawaStyles.js';\n\nexport const diagram: DiagramDefinition = {\n  parser,\n  get db() {\n    return new IshikawaDB();\n  },\n  renderer,\n  styles,\n};\n"],
  "mappings": "+WAyEA,IAAIA,IAAU,UAAU,CACxB,IAAIC,EAAEC,EAAA,SAASC,EAAEC,EAAEH,EAAEI,EAAE,CAAC,IAAIJ,EAAEA,GAAG,CAAC,EAAEI,EAAEF,EAAE,OAAOE,IAAIJ,EAAEE,EAAEE,CAAC,CAAC,EAAED,EAAE,CAAC,OAAOH,CAAC,EAAhE,KAAkEK,EAAI,CAAC,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,GAAG,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAEC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAClOlB,EAAS,CAAC,MAAOE,EAAA,UAAkB,CAAE,EAApB,SACrB,GAAI,CAAC,EACL,SAAU,CAAC,MAAQ,EAAE,MAAQ,EAAE,SAAW,EAAE,WAAa,EAAE,UAAY,EAAE,GAAK,EAAE,SAAW,EAAE,SAAW,EAAE,KAAO,GAAG,IAAM,GAAG,UAAY,GAAG,UAAY,GAAG,KAAO,GAAG,QAAU,EAAE,KAAO,CAAC,EACzL,WAAY,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,YAAY,GAAG,MAAM,EAC1F,aAAc,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EACrI,cAAeA,EAAA,SAAmBiB,EAAQC,EAAQC,EAAUC,EAAIC,EAAyBC,EAAiBC,EAAiB,CAG3H,IAAIC,EAAKF,EAAG,OAAS,EACrB,OAAQD,EAAS,CACjB,IAAK,GAAG,IAAK,GACZ,OAAOD,EAER,IAAK,IACJA,EAAG,QAAQE,EAAGE,EAAG,CAAC,EAAE,OAAQF,EAAGE,CAAE,EAAE,KAAK,CAAC,EAC1C,MACA,IAAK,IACJJ,EAAG,QAAQ,EAAGE,EAAGE,CAAE,EAAE,KAAK,CAAC,EAC5B,KACA,CACA,EAfe,aAgBf,MAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAEpB,CAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAEA,CAAG,EAAE,CAAC,EAAEC,EAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAGC,EAAI,GAAGC,CAAG,EAAER,EAAES,EAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAET,EAAES,EAAI,CAAC,EAAE,CAAC,CAAC,EAAET,EAAES,EAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAEH,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,EAAEF,EAAI,EAAE,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,CAAG,EAAE,CAAC,EAAEE,EAAI,EAAEC,EAAI,GAAG,GAAG,GAAGC,CAAG,EAAEZ,EAAEa,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAEb,EAAEa,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEb,EAAEa,EAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAEH,EAAI,EAAEC,EAAI,GAAG,GAAG,GAAGC,CAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAEN,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,CAAG,EAAER,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAEC,EAAI,GAAGC,CAAG,CAAC,EAAEhB,EAAEiB,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEjB,EAAEiB,EAAI,CAAC,EAAE,CAAC,CAAC,EAAEjB,EAAEiB,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEjB,EAAEa,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEb,EAAEc,EAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAEC,EAAI,GAAGC,CAAG,CAAC,EAAEhB,EAAEiB,EAAI,CAAC,EAAE,EAAE,CAAC,EAAEjB,EAAEiB,EAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAC5gB,eAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAChC,WAAYhB,EAAA,SAAqByB,EAAKC,EAAM,CACxC,GAAIA,EAAK,YACL,KAAK,MAAMD,CAAG,MACX,CACH,IAAIE,EAAQ,IAAI,MAAMF,CAAG,EACzB,MAAAE,EAAM,KAAOD,EACPC,CACV,CACJ,EARY,cASZ,MAAO3B,EAAA,SAAe4B,EAAO,CACzB,IAAIC,EAAO,KAAMC,EAAQ,CAAC,CAAC,EAAGC,EAAS,CAAC,EAAGC,EAAS,CAAC,IAAI,EAAGC,EAAS,CAAC,EAAGC,EAAQ,KAAK,MAAOjB,EAAS,GAAIE,EAAW,EAAGD,EAAS,EAAGiB,EAAa,EAAGC,EAAS,EAAGC,EAAM,EAClKC,EAAOL,EAAO,MAAM,KAAK,UAAW,CAAC,EACrCM,EAAQ,OAAO,OAAO,KAAK,KAAK,EAChCC,EAAc,CAAE,GAAI,CAAC,CAAE,EAC3B,QAASvC,KAAK,KAAK,GACX,OAAO,UAAU,eAAe,KAAK,KAAK,GAAIA,CAAC,IAC/CuC,EAAY,GAAGvC,CAAC,EAAI,KAAK,GAAGA,CAAC,GAGrCsC,EAAM,SAASX,EAAOY,EAAY,EAAE,EACpCA,EAAY,GAAG,MAAQD,EACvBC,EAAY,GAAG,OAAS,KACpB,OAAOD,EAAM,OAAU,MACvBA,EAAM,OAAS,CAAC,GAEpB,IAAIE,EAAQF,EAAM,OAClBN,EAAO,KAAKQ,CAAK,EACjB,IAAIC,EAASH,EAAM,SAAWA,EAAM,QAAQ,OACxC,OAAOC,EAAY,GAAG,YAAe,WACrC,KAAK,WAAaA,EAAY,GAAG,WAEjC,KAAK,WAAa,OAAO,eAAe,IAAI,EAAE,WAElD,SAASG,GAASC,EAAG,CACjBd,EAAM,OAASA,EAAM,OAAS,EAAIc,EAClCZ,EAAO,OAASA,EAAO,OAASY,EAChCX,EAAO,OAASA,EAAO,OAASW,CACpC,CAJS5C,EAAA2C,GAAA,YAKD,SAASE,IAAM,CACf,IAAIC,EACJ,OAAAA,EAAQf,EAAO,IAAI,GAAKQ,EAAM,IAAI,GAAKF,EACnC,OAAOS,GAAU,WACbA,aAAiB,QACjBf,EAASe,EACTA,EAAQf,EAAO,IAAI,GAEvBe,EAAQjB,EAAK,SAASiB,CAAK,GAAKA,GAE7BA,CACX,CAXa9C,EAAA6C,GAAA,OAajB,QADIE,EAAQC,EAAgBC,EAAOC,EAAQC,GAAGC,EAAGC,EAAQ,CAAC,EAAGC,EAAGC,EAAKC,GAAUC,IAClE,CAUT,GATAR,EAAQnB,EAAMA,EAAM,OAAS,CAAC,EAC1B,KAAK,eAAemB,CAAK,EACzBC,EAAS,KAAK,eAAeD,CAAK,IAE9BF,IAAW,MAAQ,OAAOA,EAAU,OACpCA,EAASF,GAAI,GAEjBK,EAAShB,EAAMe,CAAK,GAAKf,EAAMe,CAAK,EAAEF,CAAM,GAE5C,OAAOG,EAAW,KAAe,CAACA,EAAO,QAAU,CAACA,EAAO,CAAC,EAAG,CAC/D,IAAIQ,EAAS,GACbD,EAAW,CAAC,EACZ,IAAKH,KAAKpB,EAAMe,CAAK,EACb,KAAK,WAAWK,CAAC,GAAKA,EAAIlB,GAC1BqB,EAAS,KAAK,IAAO,KAAK,WAAWH,CAAC,EAAI,GAAI,EAGlDf,EAAM,aACNmB,EAAS,wBAA0BvC,EAAW,GAAK;AAAA,EAAQoB,EAAM,aAAa,EAAI;AAAA,YAAiBkB,EAAS,KAAK,IAAI,EAAI,WAAc,KAAK,WAAWV,CAAM,GAAKA,GAAU,IAE5KW,EAAS,wBAA0BvC,EAAW,GAAK,iBAAmB4B,GAAUV,EAAM,eAAiB,KAAQ,KAAK,WAAWU,CAAM,GAAKA,GAAU,KAExJ,KAAK,WAAWW,EAAQ,CACpB,KAAMnB,EAAM,MACZ,MAAO,KAAK,WAAWQ,CAAM,GAAKA,EAClC,KAAMR,EAAM,SACZ,IAAKE,EACL,SAAUgB,CACd,CAAC,CACL,CACA,GAAIP,EAAO,CAAC,YAAa,OAASA,EAAO,OAAS,EAC9C,MAAM,IAAI,MAAM,oDAAsDD,EAAQ,YAAcF,CAAM,EAEtG,OAAQG,EAAO,CAAC,EAAG,CACnB,IAAK,GACDpB,EAAM,KAAKiB,CAAM,EACjBf,EAAO,KAAKO,EAAM,MAAM,EACxBN,EAAO,KAAKM,EAAM,MAAM,EACxBT,EAAM,KAAKoB,EAAO,CAAC,CAAC,EACpBH,EAAS,KACJC,GASDD,EAASC,EACTA,EAAiB,OATjB9B,EAASqB,EAAM,OACftB,EAASsB,EAAM,OACfpB,EAAWoB,EAAM,SACjBE,EAAQF,EAAM,OACVJ,EAAa,GACbA,KAMR,MACJ,IAAK,GAwBD,GAvBAoB,EAAM,KAAK,aAAaL,EAAO,CAAC,CAAC,EAAE,CAAC,EACpCG,EAAM,EAAIrB,EAAOA,EAAO,OAASuB,CAAG,EACpCF,EAAM,GAAK,CACP,WAAYpB,EAAOA,EAAO,QAAUsB,GAAO,EAAE,EAAE,WAC/C,UAAWtB,EAAOA,EAAO,OAAS,CAAC,EAAE,UACrC,aAAcA,EAAOA,EAAO,QAAUsB,GAAO,EAAE,EAAE,aACjD,YAAatB,EAAOA,EAAO,OAAS,CAAC,EAAE,WAC3C,EACIS,IACAW,EAAM,GAAG,MAAQ,CACbpB,EAAOA,EAAO,QAAUsB,GAAO,EAAE,EAAE,MAAM,CAAC,EAC1CtB,EAAOA,EAAO,OAAS,CAAC,EAAE,MAAM,CAAC,CACrC,GAEJmB,EAAI,KAAK,cAAc,MAAMC,EAAO,CAChCpC,EACAC,EACAC,EACAqB,EAAY,GACZU,EAAO,CAAC,EACRlB,EACAC,CACJ,EAAE,OAAOK,CAAI,CAAC,EACV,OAAOc,EAAM,IACb,OAAOA,EAEPG,IACAzB,EAAQA,EAAM,MAAM,EAAG,GAAKyB,EAAM,CAAC,EACnCvB,EAASA,EAAO,MAAM,EAAG,GAAKuB,CAAG,EACjCtB,EAASA,EAAO,MAAM,EAAG,GAAKsB,CAAG,GAErCzB,EAAM,KAAK,KAAK,aAAaoB,EAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1ClB,EAAO,KAAKqB,EAAM,CAAC,EACnBpB,EAAO,KAAKoB,EAAM,EAAE,EACpBG,GAAWtB,EAAMJ,EAAMA,EAAM,OAAS,CAAC,CAAC,EAAEA,EAAMA,EAAM,OAAS,CAAC,CAAC,EACjEA,EAAM,KAAK0B,EAAQ,EACnB,MACJ,IAAK,GACD,MAAO,EACX,CACJ,CACA,MAAO,EACX,EA3IO,QA2IN,EAGGjB,GAAS,UAAU,CACvB,IAAIA,EAAS,CAEb,IAAI,EAEJ,WAAWvC,EAAA,SAAoByB,EAAKC,EAAM,CAClC,GAAI,KAAK,GAAG,OACR,KAAK,GAAG,OAAO,WAAWD,EAAKC,CAAI,MAEnC,OAAM,IAAI,MAAMD,CAAG,CAE3B,EANO,cASX,SAASzB,EAAA,SAAU4B,EAAOR,EAAI,CACtB,YAAK,GAAKA,GAAM,KAAK,IAAM,CAAC,EAC5B,KAAK,OAASQ,EACd,KAAK,MAAQ,KAAK,WAAa,KAAK,KAAO,GAC3C,KAAK,SAAW,KAAK,OAAS,EAC9B,KAAK,OAAS,KAAK,QAAU,KAAK,MAAQ,GAC1C,KAAK,eAAiB,CAAC,SAAS,EAChC,KAAK,OAAS,CACV,WAAY,EACZ,aAAc,EACd,UAAW,EACX,YAAa,CACjB,EACI,KAAK,QAAQ,SACb,KAAK,OAAO,MAAQ,CAAC,EAAE,CAAC,GAE5B,KAAK,OAAS,EACP,IACX,EAlBK,YAqBT,MAAM5B,EAAA,UAAY,CACV,IAAI2D,EAAK,KAAK,OAAO,CAAC,EACtB,KAAK,QAAUA,EACf,KAAK,SACL,KAAK,SACL,KAAK,OAASA,EACd,KAAK,SAAWA,EAChB,IAAIC,EAAQD,EAAG,MAAM,iBAAiB,EACtC,OAAIC,GACA,KAAK,WACL,KAAK,OAAO,aAEZ,KAAK,OAAO,cAEZ,KAAK,QAAQ,QACb,KAAK,OAAO,MAAM,CAAC,IAGvB,KAAK,OAAS,KAAK,OAAO,MAAM,CAAC,EAC1BD,CACX,EApBE,SAuBN,MAAM3D,EAAA,SAAU2D,EAAI,CACZ,IAAIJ,EAAMI,EAAG,OACTC,EAAQD,EAAG,MAAM,eAAe,EAEpC,KAAK,OAASA,EAAK,KAAK,OACxB,KAAK,OAAS,KAAK,OAAO,OAAO,EAAG,KAAK,OAAO,OAASJ,CAAG,EAE5D,KAAK,QAAUA,EACf,IAAIM,EAAW,KAAK,MAAM,MAAM,eAAe,EAC/C,KAAK,MAAQ,KAAK,MAAM,OAAO,EAAG,KAAK,MAAM,OAAS,CAAC,EACvD,KAAK,QAAU,KAAK,QAAQ,OAAO,EAAG,KAAK,QAAQ,OAAS,CAAC,EAEzDD,EAAM,OAAS,IACf,KAAK,UAAYA,EAAM,OAAS,GAEpC,IAAIR,EAAI,KAAK,OAAO,MAEpB,YAAK,OAAS,CACV,WAAY,KAAK,OAAO,WACxB,UAAW,KAAK,SAAW,EAC3B,aAAc,KAAK,OAAO,aAC1B,YAAaQ,GACRA,EAAM,SAAWC,EAAS,OAAS,KAAK,OAAO,aAAe,GAC5DA,EAASA,EAAS,OAASD,EAAM,MAAM,EAAE,OAASA,EAAM,CAAC,EAAE,OAChE,KAAK,OAAO,aAAeL,CACjC,EAEI,KAAK,QAAQ,SACb,KAAK,OAAO,MAAQ,CAACH,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAI,KAAK,OAASG,CAAG,GAEvD,KAAK,OAAS,KAAK,OAAO,OACnB,IACX,EAhCE,SAmCN,KAAKvD,EAAA,UAAY,CACT,YAAK,MAAQ,GACN,IACX,EAHC,QAML,OAAOA,EAAA,UAAY,CACX,GAAI,KAAK,QAAQ,gBACb,KAAK,WAAa,OAElB,QAAO,KAAK,WAAW,0BAA4B,KAAK,SAAW,GAAK;AAAA,EAAqI,KAAK,aAAa,EAAG,CAC9N,KAAM,GACN,MAAO,KACP,KAAM,KAAK,QACf,CAAC,EAGL,OAAO,IACX,EAZG,UAeP,KAAKA,EAAA,SAAU4C,EAAG,CACV,KAAK,MAAM,KAAK,MAAM,MAAMA,CAAC,CAAC,CAClC,EAFC,QAKL,UAAU5C,EAAA,UAAY,CACd,IAAI8D,EAAO,KAAK,QAAQ,OAAO,EAAG,KAAK,QAAQ,OAAS,KAAK,MAAM,MAAM,EACzE,OAAQA,EAAK,OAAS,GAAK,MAAM,IAAMA,EAAK,OAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,CAC7E,EAHM,aAMV,cAAc9D,EAAA,UAAY,CAClB,IAAI+D,EAAO,KAAK,MAChB,OAAIA,EAAK,OAAS,KACdA,GAAQ,KAAK,OAAO,OAAO,EAAG,GAAGA,EAAK,MAAM,IAExCA,EAAK,OAAO,EAAE,EAAE,GAAKA,EAAK,OAAS,GAAK,MAAQ,KAAK,QAAQ,MAAO,EAAE,CAClF,EANU,iBASd,aAAa/D,EAAA,UAAY,CACjB,IAAIgE,EAAM,KAAK,UAAU,EACrBC,EAAI,IAAI,MAAMD,EAAI,OAAS,CAAC,EAAE,KAAK,GAAG,EAC1C,OAAOA,EAAM,KAAK,cAAc,EAAI;AAAA,EAAOC,EAAI,GACnD,EAJS,gBAOb,WAAWjE,EAAA,SAASkE,EAAOC,EAAc,CACjC,IAAIrB,EACAc,EACAQ,EAwDJ,GAtDI,KAAK,QAAQ,kBAEbA,EAAS,CACL,SAAU,KAAK,SACf,OAAQ,CACJ,WAAY,KAAK,OAAO,WACxB,UAAW,KAAK,UAChB,aAAc,KAAK,OAAO,aAC1B,YAAa,KAAK,OAAO,WAC7B,EACA,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,QAAS,KAAK,QACd,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,GAAI,KAAK,GACT,eAAgB,KAAK,eAAe,MAAM,CAAC,EAC3C,KAAM,KAAK,IACf,EACI,KAAK,QAAQ,SACbA,EAAO,OAAO,MAAQ,KAAK,OAAO,MAAM,MAAM,CAAC,IAIvDR,EAAQM,EAAM,CAAC,EAAE,MAAM,iBAAiB,EACpCN,IACA,KAAK,UAAYA,EAAM,QAE3B,KAAK,OAAS,CACV,WAAY,KAAK,OAAO,UACxB,UAAW,KAAK,SAAW,EAC3B,aAAc,KAAK,OAAO,YAC1B,YAAaA,EACAA,EAAMA,EAAM,OAAS,CAAC,EAAE,OAASA,EAAMA,EAAM,OAAS,CAAC,EAAE,MAAM,QAAQ,EAAE,CAAC,EAAE,OAC5E,KAAK,OAAO,YAAcM,EAAM,CAAC,EAAE,MACpD,EACA,KAAK,QAAUA,EAAM,CAAC,EACtB,KAAK,OAASA,EAAM,CAAC,EACrB,KAAK,QAAUA,EACf,KAAK,OAAS,KAAK,OAAO,OACtB,KAAK,QAAQ,SACb,KAAK,OAAO,MAAQ,CAAC,KAAK,OAAQ,KAAK,QAAU,KAAK,MAAM,GAEhE,KAAK,MAAQ,GACb,KAAK,WAAa,GAClB,KAAK,OAAS,KAAK,OAAO,MAAMA,EAAM,CAAC,EAAE,MAAM,EAC/C,KAAK,SAAWA,EAAM,CAAC,EACvBpB,EAAQ,KAAK,cAAc,KAAK,KAAM,KAAK,GAAI,KAAMqB,EAAc,KAAK,eAAe,KAAK,eAAe,OAAS,CAAC,CAAC,EAClH,KAAK,MAAQ,KAAK,SAClB,KAAK,KAAO,IAEZrB,EACA,OAAOA,EACJ,GAAI,KAAK,WAAY,CAExB,QAAS7C,KAAKmE,EACV,KAAKnE,CAAC,EAAImE,EAAOnE,CAAC,EAEtB,MAAO,EACX,CACA,MAAO,EACX,EArEO,cAwEX,KAAKD,EAAA,UAAY,CACT,GAAI,KAAK,KACL,OAAO,KAAK,IAEX,KAAK,SACN,KAAK,KAAO,IAGhB,IAAI8C,EACAoB,EACAG,EACAC,EACC,KAAK,QACN,KAAK,OAAS,GACd,KAAK,MAAQ,IAGjB,QADIC,EAAQ,KAAK,cAAc,EACtBC,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAE9B,GADAH,EAAY,KAAK,OAAO,MAAM,KAAK,MAAME,EAAMC,CAAC,CAAC,CAAC,EAC9CH,IAAc,CAACH,GAASG,EAAU,CAAC,EAAE,OAASH,EAAM,CAAC,EAAE,SAGvD,GAFAA,EAAQG,EACRC,EAAQE,EACJ,KAAK,QAAQ,gBAAiB,CAE9B,GADA1B,EAAQ,KAAK,WAAWuB,EAAWE,EAAMC,CAAC,CAAC,EACvC1B,IAAU,GACV,OAAOA,EACJ,GAAI,KAAK,WAAY,CACxBoB,EAAQ,GACR,QACJ,KAEI,OAAO,EAEf,SAAW,CAAC,KAAK,QAAQ,KACrB,MAIZ,OAAIA,GACApB,EAAQ,KAAK,WAAWoB,EAAOK,EAAMD,CAAK,CAAC,EACvCxB,IAAU,GACHA,EAGJ,IAEP,KAAK,SAAW,GACT,KAAK,IAEL,KAAK,WAAW,0BAA4B,KAAK,SAAW,GAAK;AAAA,EAA2B,KAAK,aAAa,EAAG,CACpH,KAAM,GACN,MAAO,KACP,KAAM,KAAK,QACf,CAAC,CAET,EAvDC,QA0DL,IAAI9C,EAAA,UAAgB,CACZ,IAAIoD,EAAI,KAAK,KAAK,EAClB,OAAIA,GAGO,KAAK,IAAI,CAExB,EAPA,OAUJ,MAAMpD,EAAA,SAAgByE,EAAW,CACzB,KAAK,eAAe,KAAKA,CAAS,CACtC,EAFE,SAKN,SAASzE,EAAA,UAAqB,CACtB,IAAI,EAAI,KAAK,eAAe,OAAS,EACrC,OAAI,EAAI,EACG,KAAK,eAAe,IAAI,EAExB,KAAK,eAAe,CAAC,CAEpC,EAPK,YAUT,cAAcA,EAAA,UAA0B,CAChC,OAAI,KAAK,eAAe,QAAU,KAAK,eAAe,KAAK,eAAe,OAAS,CAAC,EACzE,KAAK,WAAW,KAAK,eAAe,KAAK,eAAe,OAAS,CAAC,CAAC,EAAE,MAErE,KAAK,WAAW,QAAW,KAE1C,EANU,iBASd,SAASA,EAAA,SAAmB,EAAG,CAEvB,OADA,EAAI,KAAK,eAAe,OAAS,EAAI,KAAK,IAAI,GAAK,CAAC,EAChD,GAAK,EACE,KAAK,eAAe,CAAC,EAErB,SAEf,EAPK,YAUT,UAAUA,EAAA,SAAoByE,EAAW,CACjC,KAAK,MAAMA,CAAS,CACxB,EAFM,aAKV,eAAezE,EAAA,UAA0B,CACjC,OAAO,KAAK,eAAe,MAC/B,EAFW,kBAGf,QAAS,CAAC,mBAAmB,EAAI,EACjC,cAAeA,EAAA,SAAmBoB,EAAGsD,EAAIC,EAA0BC,EAAU,CAC7E,IAAIC,EAAQD,EACZ,OAAOD,EAA2B,CAClC,IAAK,GAAG,MAAO,GAEf,IAAK,GAAG,MAAO,GAEf,IAAK,GAAG,MAAO,GAEf,IAAK,GAAG,MAAO,GAEf,IAAK,GAAG,MAAO,GAEf,IAAK,GAAG,MAAO,IAEf,IAAK,GAAG,MAAO,IAEf,IAAK,GAAE,MAAO,GAEd,CACA,EApBe,aAqBf,MAAO,CAAC,gBAAgB,wBAAwB,mBAAmB,kBAAkB,cAAc,cAAc,eAAe,SAAS,EACzI,WAAY,CAAC,QAAU,CAAC,MAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAY,EAAI,CAAC,CACnE,EACA,OAAOpC,CACP,GAAG,EACHzC,EAAO,MAAQyC,EACf,SAASuC,GAAU,CACjB,KAAK,GAAK,CAAC,CACb,CAFS,OAAA9E,EAAA8E,EAAA,UAGTA,EAAO,UAAYhF,EAAOA,EAAO,OAASgF,EACnC,IAAIA,CACX,GAAG,EACFhF,GAAO,OAASA,GAEhB,IAAOiF,GAAQC,GC7kBT,IAAMC,EAAN,KAAsC,CAK3C,aAAc,CAHd,KAAQ,MAAsB,CAAC,EAI7B,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,CACvC,CA5BF,MAmB6C,CAAAC,EAAA,mBAW3C,OAAc,CACZ,KAAK,KAAO,OACZ,KAAK,MAAQ,CAAC,EACd,KAAK,UAAY,OACjBC,GAAY,CACd,CAEA,SAAoC,CAClC,OAAO,KAAK,IACd,CAEA,QAAQC,EAAkBC,EAAoB,CAC5C,IAAMC,EAAQC,GAAO,aAAaF,EAAMG,EAAU,CAAC,EAEnD,GAAI,CAAC,KAAK,KAAM,CACd,KAAK,KAAO,CAAE,KAAMF,EAAO,SAAU,CAAC,CAAE,EACxC,KAAK,MAAQ,CAAC,CAAE,MAAO,EAAG,KAAM,KAAK,IAAK,CAAC,EAC3CG,GAAgBH,CAAK,EACrB,MACF,CAKA,KAAK,YAAcF,EAEnB,IAAIM,EAAQN,EAAW,KAAK,UAAY,EAMxC,IALIM,GAAS,IACXA,EAAQ,GAIH,KAAK,MAAM,OAAS,GAAK,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAAE,OAASA,GACzE,KAAK,MAAM,IAAI,EAGjB,IAAMC,EAAS,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,EAAE,KAC3CC,EAAqB,CAAE,KAAMN,EAAO,SAAU,CAAC,CAAE,EACvDK,EAAO,SAAS,KAAKC,CAAI,EACzB,KAAK,MAAM,KAAK,CAAE,MAAAF,EAAO,KAAAE,CAAK,CAAC,CACjC,CAEA,aAAsB,CACpB,OAAOC,GAAY,CACrB,CAEA,YAAYC,EAAqB,CAC/BC,GAAYD,CAAK,CACnB,CAEA,mBAA4B,CAC1B,OAAOE,GAAkB,CAC3B,CAEA,kBAAkBC,EAA2B,CAC3CC,GAAkBD,CAAW,CAC/B,CAEA,iBAA0B,CACxB,OAAOE,GAAgB,CACzB,CAEA,gBAAgBL,EAAqB,CACnCL,GAAgBK,CAAK,CACvB,CACF,EC7EA,IAAMM,GAAoB,GACpBC,EAAoB,IACpBC,GAAY,GACZC,GAAY,GACZC,GAAiB,EACjBC,GAAS,GAAK,KAAK,GAAM,IACzBC,GAAQ,KAAK,IAAID,EAAK,EACtBE,GAAQ,KAAK,IAAIF,EAAK,EAEtBG,GAAqBC,EAAA,CAACC,EAAYC,EAAaC,IAAkB,CACrE,IAAMC,EAAOH,EAAM,KAAK,EAAG,QAAQ,EAC7BI,EAAID,EAAK,MAAQF,EAAM,EACvBI,EAAIF,EAAK,OAASF,EAAM,EAC9BK,GAAiBN,EAAOK,EAAGD,EAAGF,CAAI,EAClCF,EAAM,KAAK,UAAW,GAAGG,EAAK,EAAIF,CAAG,IAAIE,EAAK,EAAIF,CAAG,IAAIG,CAAC,IAAIC,CAAC,EAAE,CACnE,EAN2B,sBAQrBE,GAAuBR,EAAA,CAACS,EAAOC,EAAIC,EAAUC,IAAqB,CAEtE,IAAMC,EADKD,EAAQ,GACH,QAAQ,EACxB,GAAI,CAACC,EACH,OAGF,IAAMC,EAAaC,EAAU,EACvB,CAAE,KAAAC,EAAM,cAAAC,EAAe,eAAAC,CAAe,EAAIJ,EAC1CK,EAAWC,GAAcN,EAAW,QAAQ,EAAE,CAAC,GAAKvB,GACpD8B,EAAcL,IAAS,YAEvBM,EAAST,EAAK,UAAY,CAAC,EAC3BU,EAAUT,EAAW,UAAU,gBAAkB,GACjDU,EAAcV,EAAW,UAAU,aAAe,GAClDW,EAAMC,GAAiBhB,CAAE,EACzBiB,EAAIF,EAAI,OAAO,GAAG,EAAE,KAAK,QAAS,UAAU,EAE5CG,EAAWP,EAAcQ,GAAM,IAAIJ,EAAI,KAAK,CAAE,EAAI,OAClDK,EAAyCF,EAC3C,CACE,SAAAA,EACA,KAAMX,GAAiB,EACvB,UAAWC,GAAgB,WAAa,OACxC,UAAWA,GAAgB,SAAW,MACxC,EACA,OAEEa,EAAW,kBAAkBrB,CAAE,GAChCW,GACHM,EAAE,OAAO,MAAM,EACZ,OAAO,QAAQ,EACf,KAAK,KAAMI,CAAQ,EACnB,KAAK,UAAW,WAAW,EAC3B,KAAK,OAAQ,CAAC,EACd,KAAK,OAAQ,CAAC,EACd,KAAK,cAAe,CAAC,EACrB,KAAK,eAAgB,CAAC,EACtB,KAAK,SAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,IAAK,wBAAwB,EAClC,KAAK,QAAS,gBAAgB,EAGnC,IAAIC,EAAS,EACTC,EAASzC,EAGP0C,EAAYb,EACd,OACAc,EAASR,EAAGK,EAAQC,EAAQD,EAAQC,EAAQ,gBAAgB,EAGhE,GAFAG,GAAST,EAAGK,EAAQC,EAAQpB,EAAK,KAAMM,EAAUW,CAAY,EAEzD,CAACR,EAAO,OAAQ,CACdD,GACFc,EAASR,EAAGK,EAAQC,EAAQD,EAAQC,EAAQ,iBAAkBH,CAAY,EAE5E/B,GAAmB0B,EAAKF,EAASC,CAAW,EAC5C,MACF,CAEAQ,GAAU,GAEV,IAAMK,EAAcf,EAAO,OAAO,CAACgB,EAAGC,IAAMA,EAAI,IAAM,CAAC,EACjDC,EAAclB,EAAO,OAAO,CAACgB,EAAGC,IAAMA,EAAI,IAAM,CAAC,EAEjDE,EAAaC,GAAUL,CAAW,EAClCM,EAAaD,GAAUF,CAAW,EAClCI,EAAkBH,EAAW,MAAQE,EAAW,MAElDE,EAAWrD,EACXsD,EAAWtD,EACf,GAAIoD,EAAkB,EAAG,CACvB,IAAMG,EAAOvD,EAAoB,EAC3BwD,EAASxD,EAAoB,GACnCqD,EAAW,KAAK,IAAIG,EAAQD,GAAQN,EAAW,MAAQG,EAAgB,EACvEE,EAAW,KAAK,IAAIE,EAAQD,GAAQJ,EAAW,MAAQC,EAAgB,CACzE,CAEA,IAAMK,EAAa9B,EAAW,EAC9B0B,EAAW,KAAK,IAAIA,EAAUJ,EAAW,IAAMQ,CAAU,EACzDH,EAAW,KAAK,IAAIA,EAAUH,EAAW,IAAMM,CAAU,EAEzDhB,EAAS,KAAK,IAAIY,EAAUrD,CAAiB,EACzC0C,GACFA,EAAU,KAAK,KAAMD,CAAM,EAAE,KAAK,KAAMA,CAAM,EAEhDN,EAAE,OAAO,sBAAsB,EAAE,KAAK,YAAa,eAAeM,CAAM,GAAG,EAE3E,IAAMiB,EAAY,KAAK,KAAK5B,EAAO,OAAS,CAAC,EAC7C,QAAS6B,EAAI,EAAGA,EAAID,EAAWC,IAAK,CAClC,IAAMC,EAAKzB,EAAE,OAAO,GAAG,EAAE,KAAK,QAAS,eAAe,EACtD,OAAW,CAAC0B,EAAOC,EAAKC,CAAG,GAAK,CAC9B,CAACjC,EAAO6B,EAAI,CAAC,EAAG,GAAIN,CAAQ,EAC5B,CAACvB,EAAO6B,EAAI,EAAI,CAAC,EAAG,EAAGL,CAAQ,CACjC,EACMO,GACFG,GAAWJ,EAAIC,EAAOrB,EAAQC,EAAQqB,EAAKC,EAAKpC,EAAUW,CAAY,EAG1EE,EAASoB,EACN,UAAU,MAAM,EAChB,MAAM,EACN,OAAO,CAACK,EAAMC,IAAM,KAAK,IAAID,EAAOC,EAAyB,QAAQ,EAAE,CAAC,EAAG,GAAQ,CACxF,CAEA,GAAIrC,EACFc,EAASR,EAAGK,EAAQC,EAAQ,EAAGA,EAAQ,iBAAkBH,CAAY,MAChE,CACLI,EAAW,KAAK,KAAMF,CAAM,EAC5B,IAAM2B,EAAY,QAAQ5B,CAAQ,IAClCJ,EAAE,UAAU,gDAAgD,EAAE,KAAK,eAAgBgC,CAAS,CAC9F,CACA5D,GAAmB0B,EAAKF,EAASC,CAAW,CAC9C,EAlH6B,QAoHvBkB,GAAY1C,EAAC4D,GAA0B,CAC3C,IAAMC,EAAmB7D,EAAC8D,GACxBA,EAAK,SAAS,OAAO,CAACC,EAAKC,IAAUD,EAAM,EAAIF,EAAiBG,CAAK,EAAG,CAAC,EADlD,oBAGzB,OAAOJ,EAAM,OACX,CAACK,EAAOH,IAAS,CACf,IAAMI,EAAcL,EAAiBC,CAAI,EACzC,OAAAG,EAAM,OAASC,EACfD,EAAM,IAAM,KAAK,IAAIA,EAAM,IAAKC,CAAW,EACpCD,CACT,EACA,CAAE,MAAO,EAAG,IAAK,CAAE,CACrB,CACF,EAbkB,aAeZ7B,GAAWpC,EAAA,CACfyB,EACA0C,EACAC,EACAC,EACAlD,EACAW,IACS,CACT,IAAMwC,EAAW,KAAK,IAAI,EAAG,KAAK,MAAM,KAAOnD,EAAW,GAAI,CAAC,EACzDoD,EAAY9C,EACf,OAAO,GAAG,EACV,KAAK,QAAS,qBAAqB,EACnC,KAAK,YAAa,aAAa0C,CAAC,IAAIC,CAAC,GAAG,EAErCI,EAASC,EACbF,EACAG,GAASL,EAAOC,CAAQ,EACxB,EACA,EACA,sBACA,QACAnD,CACF,EACMwD,EAAKH,EAAO,KAAK,EAAG,QAAQ,EAC5BnE,EAAI,KAAK,IAAI,GAAIsE,EAAG,MAAQ,CAAC,EAC7BrE,EAAI,KAAK,IAAI,GAAIqE,EAAG,OAAS,EAAI,EAAE,EAEnCC,EAAW,OAAO,CAACtE,EAAI,CAAC,QAAQA,EAAI,CAAC,MAAMD,EAAI,GAAG,QAAQ,CAACC,EAAI,CAAC,KACtE,GAAIwB,EAAc,CAChB,IAAM+C,EAAY/C,EAAa,SAAS,KAAK8C,EAAU,CACrD,UAAW,IACX,KAAM9C,EAAa,KACnB,KAAMA,EAAa,UACnB,UAAW,UACX,WAAY,IACZ,WAAY,EACZ,OAAQA,EAAa,UACrB,YAAa,CACf,CAAC,EACDyC,EAAU,OAAO,IAAMM,EAAW,cAAc,EAAE,KAAK,QAAS,eAAe,CACjF,MACEN,EAAU,OAAO,OAAQ,cAAc,EAAE,KAAK,QAAS,eAAe,EAAE,KAAK,IAAKK,CAAQ,EAE5FJ,EAAO,KAAK,YAAa,cAAcnE,EAAIsE,EAAG,OAAS,EAAIA,EAAG,EAAI,CAAC,IAAI,CAACA,EAAG,EAAIA,EAAG,OAAS,CAAC,GAAG,CACjG,EA5CiB,YAiEXG,GAAc9E,EAAA,CAAC+E,EAA0BC,IAAsB,CACnE,IAAMC,EAAwB,CAAC,EACzBC,EAAmB,CAAC,EACpBC,EAAOnF,EAAA,CAAC4D,EAAuBwB,EAAaC,IAAkB,CAClE,IAAMC,EAAUN,IAAc,GAAK,CAAC,GAAGpB,CAAK,EAAE,QAAQ,EAAIA,EAC1D,QAAWI,KAASsB,EAAS,CAC3B,IAAMC,EAAMN,EAAQ,OACdO,EAAKxB,EAAM,UAAY,CAAC,EAC9BiB,EAAQ,KAAK,CACX,MAAAI,EACA,KAAMX,GAASV,EAAM,KAAM,EAAE,EAC7B,YAAaoB,EACb,WAAYI,EAAG,MACjB,CAAC,EACGH,EAAQ,IAAM,GAEhBH,EAAO,KAAKK,CAAG,EACXC,EAAG,QACLL,EAAKK,EAAID,EAAKF,EAAQ,CAAC,IAIrBG,EAAG,QACLL,EAAKK,EAAID,EAAKF,EAAQ,CAAC,EAEzBH,EAAO,KAAKK,CAAG,EAEnB,CACF,EAzBa,QA0Bb,OAAAJ,EAAKJ,EAAU,GAAI,CAAC,EACb,CAAE,QAAAE,EAAS,OAAAC,CAAO,CAC3B,EA/BoB,eAiCdO,GAAiBzF,EAAA,CACrByB,EACAiE,EACAvB,EACAC,EACAY,EACA7D,EACAW,IACG,CACH,IAAM6D,EAAKlE,EAAI,OAAO,GAAG,EAAE,KAAK,QAAS,sBAAsB,EAUzDkD,EATKF,EACTkB,EACAD,EACAvB,EACAC,EAAI,GAAKY,EACT,uBACA,SACA7D,CACF,EACc,KAAK,EAAG,QAAQ,EAC9B,GAAIW,EAAc,CAChB,IAAM+C,EAAY/C,EAAa,SAAS,UACtC6C,EAAG,EAAI,GACPA,EAAG,EAAI,EACPA,EAAG,MAAQ,GACXA,EAAG,OAAS,EACZ,CACE,UAAW,IACX,KAAM7C,EAAa,KACnB,KAAMA,EAAa,UACnB,UAAW,UACX,WAAY,IACZ,WAAY,EACZ,OAAQA,EAAa,UACrB,YAAa,CACf,CACF,EACA6D,EAAG,OAAO,IAAMd,EAAW,cAAc,EAAE,KAAK,QAAS,oBAAoB,CAC/E,MACEc,EAAG,OAAO,OAAQ,cAAc,EAC7B,KAAK,QAAS,oBAAoB,EAClC,KAAK,IAAKhB,EAAG,EAAI,EAAE,EACnB,KAAK,IAAKA,EAAG,EAAI,CAAC,EAClB,KAAK,QAASA,EAAG,MAAQ,EAAE,EAC3B,KAAK,SAAUA,EAAG,OAAS,CAAC,CAEnC,EA9CuB,kBAiDjBiB,GAAkB5F,EAAA,CACtB2B,EACAwC,EACAC,EACAyB,EACAC,EACAhE,IACG,CACH,IAAMyB,EAAM,KAAK,KAAKsC,EAAKA,EAAKC,EAAKA,CAAE,EACvC,GAAIvC,IAAQ,EACV,OAEF,IAAMwC,EAAKF,EAAKtC,EACVyC,EAAKF,EAAKvC,EACV0C,EAAI,EACJC,EAAK,CAACF,EAAKC,EACXE,EAAKJ,EAAKE,EACVG,EAAOjC,EACPkC,EAAOjC,EACPkC,EAAI,KAAKF,CAAI,IAAIC,CAAI,MAAMD,EAAOL,EAAKE,EAAI,EAAIC,CAAE,IAAIG,EAAOL,EAAKC,EAAI,EAAIE,CAAE,MAAMC,EAAOL,EAAKE,EAAI,EAAIC,CAAE,IAAIG,EAAOL,EAAKC,EAAI,EAAIE,CAAE,KACjItB,EAAY/C,EAAa,SAAS,KAAKwE,EAAG,CAC9C,UAAW,EACX,KAAMxE,EAAa,KACnB,KAAMA,EAAa,UACnB,UAAW,QACX,OAAQA,EAAa,UACrB,YAAa,CACf,CAAC,EACDH,EAAE,OAAO,IAAMkD,CAAS,CAC1B,EA7BwB,mBA+BlBrB,GAAaxD,EAAA,CACjByB,EACAqC,EACAyC,EACAC,EACAxB,EACAyB,EACAtF,EACAW,IACS,CACT,IAAMiD,EAAWjB,EAAK,UAAY,CAAC,EAC7B4C,EAAUD,GAAU1B,EAAS,OAAS,EAAI,IAC1Cc,EAAK,CAAChG,GAAQ6G,EACdZ,EAAKhG,GAAQ4G,EAAU1B,EACvB2B,EAAOJ,EAASV,EAChBe,EAAOJ,EAASV,EAQtB,GANA3D,EAASV,EAAK8E,EAAQC,EAAQG,EAAMC,EAAM,kBAAmB9E,CAAY,EACrEA,GACF8D,GAAgBnE,EAAK8E,EAAQC,EAAQD,EAASI,EAAMH,EAASI,EAAM9E,CAAY,EAEjF2D,GAAehE,EAAKqC,EAAK,KAAM6C,EAAMC,EAAM5B,EAAW7D,EAAUW,CAAY,EAExE,CAACiD,EAAS,OACZ,OAGF,GAAM,CAAE,QAAAE,EAAS,OAAAC,CAAO,EAAIJ,GAAYC,EAAUC,CAAS,EACrD6B,EAAa5B,EAAQ,OACrB6B,EAAK,IAAI,MAAcD,CAAU,EACvC,OAAW,CAACE,EAAMC,CAAQ,IAAK9B,EAAO,QAAQ,EAC5C4B,EAAGE,CAAQ,EAAIR,EAASV,IAAOiB,EAAO,IAAMF,EAAa,IAG3D,IAAMI,EAAQ,IAAI,IAClBA,EAAM,IAAI,GAAI,CACZ,GAAIV,EACJ,GAAIC,EACJ,GAAIG,EACJ,GAAIC,EACJ,WAAY7B,EAAS,OACrB,cAAe,CACjB,CAAC,EAED,IAAMmC,EAAY,CAACrH,GACbsH,EAAYrH,GAAQkF,EACpBoC,EAAWpC,EAAY,EAAI,oBAAsB,sBAEvD,OAAW,CAACzC,EAAG8E,CAAC,IAAKpC,EAAQ,QAAQ,EAAG,CACtC,IAAMb,EAAI0C,EAAGvE,CAAC,EACR+E,EAAML,EAAM,IAAII,EAAE,WAAW,EAC7BE,EAAM9F,EAAI,OAAO,GAAG,EAAE,KAAK,QAAS,oBAAoB,EAE1D+F,EAAM,EACNC,EAAM,EACNC,EAAM,EAEV,GAAIL,EAAE,MAAQ,IAAM,EAAG,CAErB,IAAMM,EAAML,EAAI,GAAKA,EAAI,GACzBE,EAAMI,GAAKN,EAAI,GAAIA,EAAI,GAAIK,GAAOvD,EAAIkD,EAAI,IAAMK,EAAM,EAAG,EACzDF,EAAMrD,EACNsD,EAAMF,GAAOH,EAAE,WAAa,EAAI3H,GAAY2H,EAAE,WAAa1H,GAAiBF,IAC5E0C,EAASoF,EAAKC,EAAKpD,EAAGsD,EAAKtD,EAAG,sBAAuBtC,CAAY,EAC7DA,GACF8D,GAAgB2B,EAAKC,EAAKpD,EAAG,EAAG,EAAGtC,CAAY,EAEjD2C,EAAkB8C,EAAKF,EAAE,KAAMK,EAAKtD,EAAG,uBAAwB,MAAOjD,CAAQ,CAChF,KAAO,CAEL,IAAM0G,EAAIP,EAAI,gBACdE,EAAMI,GAAKN,EAAI,GAAIA,EAAI,IAAKA,EAAI,WAAaO,IAAMP,EAAI,WAAa,EAAE,EACtEG,EAAMH,EAAI,GACVI,EAAMF,EAAMN,IAAc9C,EAAIqD,GAAON,GACrChF,EAASoF,EAAKC,EAAKC,EAAKC,EAAKtD,EAAG,sBAAuBtC,CAAY,EAC/DA,GACF8D,GAAgB2B,EAAKC,EAAKC,EAAKD,EAAME,EAAKD,EAAMrD,EAAGtC,CAAY,EAEjE2C,EAAkB8C,EAAKF,EAAE,KAAMK,EAAKtD,EAAGgD,EAAU,MAAOjG,CAAQ,CAClE,CAEIkG,EAAE,WAAa,GACjBJ,EAAM,IAAI1E,EAAG,CACX,GAAIiF,EACJ,GAAIC,EACJ,GAAIC,EACJ,GAAItD,EACJ,WAAYiD,EAAE,WACd,cAAe,CACjB,CAAC,CAEL,CACF,EA5FmB,cA8FbS,GAAa9H,EAAC0F,GAA2BA,EAAK,MAAM,eAAe,EAAtD,cAEbhB,GAAW1E,EAAA,CAAC0F,EAAcpB,IAA6B,CAC3D,GAAIoB,EAAK,QAAUpB,EACjB,OAAOoB,EAET,IAAMqC,EAAkB,CAAC,EACzB,QAAWC,KAAQtC,EAAK,MAAM,KAAK,EAAG,CACpC,IAAMuC,EAAOF,EAAM,OAAS,EACxBE,GAAQ,GAAKF,EAAME,CAAI,EAAE,OAAS,EAAID,EAAK,QAAU1D,EACvDyD,EAAME,CAAI,GAAK,IAAMD,EAErBD,EAAM,KAAKC,CAAI,CAEnB,CACA,OAAOD,EAAM,KAAK;AAAA,CAAI,CACxB,EAdiB,YAgBXtD,EAAoBzE,EAAA,CACxB2B,EACA+D,EACAvB,EACAC,EACA8D,EACAC,EACAhH,IACG,CACH,IAAM4G,EAAQD,GAAWpC,CAAI,EACvB0C,EAAKjH,EAAW,KAChBkH,EAAK1G,EACR,OAAO,MAAM,EACb,KAAK,QAASuG,CAAG,EACjB,KAAK,cAAeC,CAAM,EAC1B,KAAK,IAAKhE,CAAC,EACX,KAAK,IAAKC,GAAM2D,EAAM,OAAS,GAAKK,EAAM,CAAC,EAC9C,OAAW,CAAC7F,EAAG+F,CAAI,IAAKP,EAAM,QAAQ,EACpCM,EAAG,OAAO,OAAO,EACd,KAAK,IAAKlE,CAAC,EACX,KAAK,KAAM5B,IAAM,EAAI,EAAI6F,CAAE,EAC3B,KAAKE,CAAI,EAEd,OAAOD,CACT,EAxB0B,qBA0BpBT,GAAO5H,EAAA,CAACuI,EAAWC,EAAWC,IAAcF,GAAKC,EAAID,GAAKE,EAAnD,QAEPtG,EAAWnC,EAAA,CACf2B,EACA+G,EACAC,EACAC,EACAC,EACAX,EACApG,IACG,CACH,GAAIA,EAAc,CAChB,IAAM+C,EAAY/C,EAAa,SAAS,KAAK4G,EAAIC,EAAIC,EAAIC,EAAI,CAC3D,UAAW,IACX,KAAM/G,EAAa,KACnB,OAAQA,EAAa,UACrB,YAAa,CACf,CAAC,EACDH,EAAE,OAAO,IAAMkD,CAAS,EAAE,KAAK,QAASqD,CAAG,EAC3C,MACF,CACA,OAAOvG,EACJ,OAAO,MAAM,EACb,KAAK,QAASuG,CAAG,EACjB,KAAK,KAAMQ,CAAE,EACb,KAAK,KAAMC,CAAE,EACb,KAAK,KAAMC,CAAE,EACb,KAAK,KAAMC,CAAE,CAClB,EA1BiB,YA4BJC,GAA4B,CAAE,KAAAtI,EAAK,EC9fhD,IAAMuI,GAAmCC,EAACC,GAAY;AAAA;AAAA;AAAA;AAAA,YAI1CA,EAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUnBA,EAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,UAIjBA,EAAQ,OAAO;AAAA,YACbA,EAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,UAKnBA,EAAQ,OAAO;AAAA,YACbA,EAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,iBAKZA,EAAQ,UAAU;AAAA,eACpBA,EAAQ,QAAQ;AAAA,UACrBA,EAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAhCc,aAiElCC,GAAQH,GC5DR,IAAMI,GAA6B,CACxC,OAAAC,GACA,IAAI,IAAK,CACP,OAAO,IAAIC,CACb,EACA,SAAAC,GACA,OAAAC,EACF",
  "names": ["parser", "o", "__name", "k", "v", "l", "$V0", "$V1", "$V2", "$V3", "$V4", "$V5", "$V6", "$V7", "$V8", "$V9", "$Va", "$Vb", "$Vc", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "str", "hash", "error", "input", "self", "stack", "tstack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "args", "lexer", "sharedState", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "indexed_rule", "backup", "tempMatch", "index", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "YYSTATE", "Parser", "ishikawa_default", "parser", "IshikawaDB", "__name", "clear", "rawLevel", "text", "label", "common_default", "getConfig", "setDiagramTitle", "level", "parent", "node", "getAccTitle", "title", "setAccTitle", "getAccDescription", "description", "setAccDescription", "getDiagramTitle", "FONT_SIZE_DEFAULT", "SPINE_BASE_LENGTH", "BONE_STUB", "BONE_BASE", "BONE_PER_CHILD", "ANGLE", "COS_A", "SIN_A", "applyPaddedViewBox", "__name", "svgEl", "pad", "maxW", "bbox", "w", "h", "configureSvgSize", "draw", "_text", "id", "_version", "diagram", "root", "drawConfig", "getConfig", "look", "handDrawnSeed", "themeVariables", "fontSize", "parseFontSize", "isHandDrawn", "causes", "padding", "useMaxWidth", "svg", "selectSvgElement", "g", "roughSvg", "at", "roughContext", "markerId", "spineX", "spineY", "spineLine", "drawLine", "drawHead", "upperCauses", "_", "i", "lowerCauses", "upperStats", "sideStats", "lowerStats", "descendantTotal", "upperLen", "lowerLen", "pool", "minLen", "minSpacing", "pairCount", "p", "pg", "cause", "dir", "len", "drawBranch", "left", "n", "markerUrl", "nodes", "countDescendants", "node", "sum", "child", "stats", "descendants", "x", "y", "label", "maxChars", "headGroup", "textEl", "drawMultilineText", "wrapText", "tb", "headPath", "roughNode", "flattenTree", "children", "direction", "entries", "yOrder", "walk", "pid", "depth", "ordered", "idx", "gc", "drawCauseLabel", "text", "lg", "drawArrowMarker", "dx", "dy", "ux", "uy", "s", "px", "py", "tipX", "tipY", "d", "startX", "startY", "length", "lineLen", "endX", "endY", "entryCount", "ys", "slot", "entryIdx", "bones", "diagonalX", "diagonalY", "oddLabel", "e", "par", "grp", "bx0", "by0", "bx1", "dyP", "lerp", "k", "splitLines", "lines", "word", "last", "cls", "anchor", "lh", "el", "line", "a", "b", "t", "x1", "y1", "x2", "y2", "renderer", "getStyles", "__name", "options", "ishikawaStyles_default", "diagram", "ishikawa_default", "IshikawaDB", "renderer", "ishikawaStyles_default"]
}
