diff --git a/.npmignore b/.npmignore index 3aa217c92..bd8792d5a 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,6 @@ /docs/ /test/ /gruntfile.js +/.coveralls.yml +/.istanbul.yml +/.travis.yml diff --git a/RELEASE.md b/RELEASE.md index fb9d9dcc2..74f299477 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,5 +1,20 @@ # Releases +## 2.0.0 (in progress) : + +- Update AST for operators, unify bin/bool/coalesce nodes +- Fix nested block usage on function bodies +- Avoid initial $ on variables +- Shell nodes are now exposed by encapsed nodes only +- Typescript definition file +- Avoid identifier nodes on namespaces & use statements +- Fix precedence on bin, unary, retif nodes +- Fix ending position on functions/methods/closures +- Fix lexer unput at the end of the file (infinite loops) +- Add encapsed node (type=offset) on dynamic offsets +- Implement annonymous class arguments +- Fix missing first char on encapsed T_STRING_VARNAME + ## 1.0.0 : (2017-01-03) - All nodes are now converted to objects diff --git a/dist/php-parser.js b/dist/php-parser.js index 31ec3c38d..e3f06fc35 100644 --- a/dist/php-parser.js +++ b/dist/php-parser.js @@ -1,4 +1,4 @@ -/*! php-parser - BSD3 License - 2017-01-18 */ +/*! php-parser - BSD3 License - 2017-03-04 */ require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o>'], ['+', '-', '.'], ['*', '/', '%'], - // TODO: unary ! + ['!'], ['instanceof'], - // TODO: unary ++, --, ~, @, typecasts + // TODO: typecasts // TODO: [ (array) // TODO: clone, new ]; -// define nodes shifting -var precedence = {}; -binOperatorsPrecedence.forEach(function (list, index) { - list.forEach(function (operator) { - precedence[operator] = index + 1; - }); -}); - /* x OP1 (y OP2 z) z OP1 (x OP2 y) @@ -569,28 +575,30 @@ z OP2 (x OP1 y) */ var Bin = Operation.extends(function Bin(type, left, right, location) { Operation.apply(this, [KIND, location]); - if (right && right.kind === 'bin') { - var lLevel = precedence[type]; - var rLevel = precedence[right.type]; - if (lLevel && rLevel && rLevel < lLevel) { - // shift precedence - var buffer = right.right; - right.right = right.left; - right.left = left; - left = buffer; - buffer = right.type; - right.type = type; - type = buffer; - buffer = left; - left = right; - right = buffer; - } - } this.type = type; this.left = left; this.right = right; }); +Bin.prototype.precedence = function(node) { + var lLevel = Bin.precedence[node.type]; + var rLevel = Bin.precedence[this.type]; + if (lLevel && rLevel && rLevel < lLevel) { + // shift precedence + node.right = this.left; + this.left = node; + return this; + } +}; + +// define nodes shifting +Bin.precedence = {}; +binOperatorsPrecedence.forEach(function (list, index) { + list.forEach(function (operator) { + Bin.precedence[operator] = index + 1; + }); +}); + module.exports = Bin; },{"./operation":57}],6:[function(require,module,exports){ @@ -616,7 +624,7 @@ var Block = Statement.extends(function Block(kind, children, location) { module.exports = Block; -},{"./statement":71}],7:[function(require,module,exports){ +},{"./statement":70}],7:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -686,7 +694,7 @@ var Call = Statement.extends(function Call(what, args, location) { module.exports = Call; -},{"./statement":71}],10:[function(require,module,exports){ +},{"./statement":70}],10:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -750,7 +758,7 @@ var KIND = 'catch'; /** * Defines a catch statement - * @constructor Try + * @constructor Catch * @extends {Statement} * @property {Identifier[]} what * @property {Variable} variable @@ -766,7 +774,7 @@ var Catch = Statement.extends(function Catch(body, what, variable, location) { module.exports = Catch; -},{"./statement":71}],13:[function(require,module,exports){ +},{"./statement":70}],13:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -847,7 +855,7 @@ var Clone = Statement.extends(function Clone(what, location) { module.exports = Clone; -},{"./statement":71}],16:[function(require,module,exports){ +},{"./statement":70}],16:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -862,13 +870,15 @@ var KIND = 'closure'; * @constructor Closure * @extends {Statement} * @property {Parameter[]} arguments + * @property {Variable[]} uses * @property {Identifier} type * @property {boolean} byref * @property {boolean} nullable * @property {Block|null} body */ -var Closure = Statement.extends(function Closure(args, byref, type, nullable, location) { +var Closure = Statement.extends(function Closure(args, byref, uses, type, nullable, location) { Statement.apply(this, [KIND, location]); + this.uses = uses; this.arguments = args; this.byref = byref; this.type = type; @@ -878,7 +888,7 @@ var Closure = Statement.extends(function Closure(args, byref, type, nullable, lo module.exports = Closure; -},{"./statement":71}],17:[function(require,module,exports){ +},{"./statement":70}],17:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -994,7 +1004,7 @@ Declaration.prototype.parseFlags = function(flags) { module.exports = Declaration; -},{"./statement":71}],21:[function(require,module,exports){ +},{"./statement":70}],21:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1086,7 +1096,7 @@ var Do = Statement.extends(function Do(test, body, location) { module.exports = Do; -},{"./statement":71}],23:[function(require,module,exports){ +},{"./statement":70}],23:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1132,7 +1142,7 @@ var Echo = Sys.extends(function Echo(args, location) { module.exports = Echo; -},{"./sys":76}],25:[function(require,module,exports){ +},{"./sys":75}],25:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1153,7 +1163,7 @@ var Empty = Sys.extends(function Empty(args, location) { module.exports = Empty; -},{"./sys":76}],26:[function(require,module,exports){ +},{"./sys":75}],26:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1209,6 +1219,17 @@ Encapsed.TYPE_SHELL = 'shell'; */ Encapsed.TYPE_HEREDOC = 'heredoc'; +/** + * The node contains a list of constref / variables / expr : + * ```php + * bar_$baz; + * ``` + * @constant {String} TYPE_OFFSET - `offset` + */ +Encapsed.TYPE_OFFSET = 'offset'; + + module.exports = Encapsed; },{"./literal":46}],27:[function(require,module,exports){ @@ -1289,7 +1310,7 @@ var Eval = Statement.extends(function Eval(source, location) { module.exports = Eval; -},{"./statement":71}],30:[function(require,module,exports){ +},{"./statement":70}],30:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1312,7 +1333,7 @@ var Exit = Statement.extends(function Exit(status, location) { module.exports = Exit; -},{"./statement":71}],31:[function(require,module,exports){ +},{"./statement":70}],31:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1367,7 +1388,7 @@ var For = Statement.extends(function For(init, test, increment, body, shortForm, module.exports = For; -},{"./statement":71}],33:[function(require,module,exports){ +},{"./statement":70}],33:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1400,7 +1421,7 @@ var Foreach = Statement.extends(function Foreach(source, key, value, body, short module.exports = Foreach; -},{"./statement":71}],34:[function(require,module,exports){ +},{"./statement":70}],34:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1453,7 +1474,7 @@ var Global = Statement.extends(function Global(items, location) { module.exports = Global; -},{"./statement":71}],36:[function(require,module,exports){ +},{"./statement":70}],36:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1478,7 +1499,7 @@ var Goto = Statement.extends(function Goto(label, location) { module.exports = Goto; -},{"./statement":71}],37:[function(require,module,exports){ +},{"./statement":70}],37:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1503,7 +1524,7 @@ var Halt = Statement.extends(function Halt(after, location) { module.exports = Halt; -},{"./statement":71}],38:[function(require,module,exports){ +},{"./statement":70}],38:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1590,7 +1611,7 @@ var If = Statement.extends(function If(test, body, alternate, shortForm, locatio module.exports = If; -},{"./statement":71}],40:[function(require,module,exports){ +},{"./statement":70}],40:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1617,7 +1638,7 @@ var Include = Statement.extends(function Include(once, require, target, location module.exports = Include; -},{"./statement":71}],41:[function(require,module,exports){ +},{"./statement":70}],41:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1685,7 +1706,7 @@ var Isset = Sys.extends(function Isset(args, location) { module.exports = Isset; -},{"./sys":76}],44:[function(require,module,exports){ +},{"./sys":75}],44:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1729,7 +1750,7 @@ var List = Sys.extends(function List(args, location) { module.exports = List; -},{"./sys":76}],46:[function(require,module,exports){ +},{"./sys":75}],46:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -1861,16 +1882,12 @@ var KIND = 'namespace'; * The main program node * @constructor Namespace * @extends {Block} - * @property {Identifier} name + * @property {String} name * @property {Boolean} withBrackets */ var Namespace = Block.extends(function Namespace(name, children, withBrackets, location) { Block.apply(this, [KIND, children, location]); - if (name instanceof Identifier) { - this.name = name; - } else { - this.name = new Identifier(name); - } + this.name = name; this.withBrackets = withBrackets || false; }); @@ -1902,7 +1919,7 @@ var New = Statement.extends(function New(what, args, location) { module.exports = New; -},{"./statement":71}],53:[function(require,module,exports){ +},{"./statement":70}],53:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2174,7 +2191,7 @@ var Print = Sys.extends(function Print(args, location) { module.exports = Print; -},{"./sys":76}],64:[function(require,module,exports){ +},{"./sys":75}],64:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2255,6 +2272,8 @@ module.exports = PropertyLookup; var Statement = require('./statement'); var KIND = 'retif'; +var Bin = require('./bin'); +var PRECEDENCE = Bin.precedence[KIND]; /** * Defines a short if statement that returns a value @@ -2271,9 +2290,26 @@ var RetIf = Statement.extends(function RetIf(test, trueExpr, falseExpr, location this.falseExpr = falseExpr; }); +/** + * Handles precedence over items + */ +RetIf.prototype.precedence = function(node) { + var what = node.kind === 'bin' ? node.type : node.kind; + var lLevel = Bin.precedence[what]; + if (lLevel && PRECEDENCE < lLevel) { + if (node.kind === 'bin') { + node.right = this.test; + this.test = node; + return this; + } else { + throw new Error('@todo ' + node.kind); + } + } +}; + module.exports = RetIf; -},{"./statement":71}],68:[function(require,module,exports){ +},{"./bin":5,"./statement":70}],68:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2297,28 +2333,6 @@ var Return = Node.extends(function Return(expr, location) { module.exports = Return; },{"./node":53}],69:[function(require,module,exports){ -/*! - * Copyright (C) 2017 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -var Literal = require('./literal'); -var KIND = 'shell'; - -/** - * Defines inline html output (treated as echo output) - * @constructor Shell - * @extends {Literal} - * @see http://php.net/manual/fr/language.operators.execution.php - */ -var Shell = Literal.extends(function Shell(value, location) { - Literal.apply(this, [KIND, value, location]); -}); - -module.exports = Shell; - -},{"./literal":46}],70:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2342,7 +2356,7 @@ var Silent = Statement.extends(function Silent(expr, location) { module.exports = Silent; -},{"./statement":71}],71:[function(require,module,exports){ +},{"./statement":70}],70:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2363,7 +2377,7 @@ var Statement = Node.extends(function Statement(kind, location) { module.exports = Statement; -},{"./node":53}],72:[function(require,module,exports){ +},{"./node":53}],71:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2386,7 +2400,7 @@ var Static = Statement.extends(function Static(items, location) { module.exports = Static; -},{"./statement":71}],73:[function(require,module,exports){ +},{"./statement":70}],72:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2407,7 +2421,7 @@ var StaticLookup = Lookup.extends(function StaticLookup(what, offset, location) module.exports = StaticLookup; -},{"./lookup":48}],74:[function(require,module,exports){ +},{"./lookup":48}],73:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2431,7 +2445,7 @@ var String = Literal.extends(function String(isDoubleQuote, value, location) { module.exports = String; -},{"./literal":46}],75:[function(require,module,exports){ +},{"./literal":46}],74:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2459,7 +2473,7 @@ var Switch = Statement.extends(function Switch(test, body, shortForm, location) module.exports = Switch; -},{"./statement":71}],76:[function(require,module,exports){ +},{"./statement":70}],75:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2482,7 +2496,7 @@ var Sys = Statement.extends(function Sys(kind, args, location) { module.exports = Sys; -},{"./statement":71}],77:[function(require,module,exports){ +},{"./statement":70}],76:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2506,7 +2520,7 @@ var Throw = Statement.extends(function Throw(what, location) { module.exports = Throw; -},{"./statement":71}],78:[function(require,module,exports){ +},{"./statement":70}],77:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2534,7 +2548,7 @@ var Trait = Declaration.extends(function Trait(name, ext, impl, body, location) module.exports = Trait; -},{"./declaration":20}],79:[function(require,module,exports){ +},{"./declaration":20}],78:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2577,7 +2591,7 @@ var TraitAlias = Node.extends(function TraitAlias(trait, method, as, flags, loca module.exports = TraitAlias; -},{"./node":53}],80:[function(require,module,exports){ +},{"./node":53}],79:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2604,7 +2618,7 @@ var TraitPrecedence = Node.extends(function TraitPrecedence(trait, method, inste module.exports = TraitPrecedence; -},{"./node":53}],81:[function(require,module,exports){ +},{"./node":53}],80:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2629,7 +2643,7 @@ var TraitUse = Node.extends(function TraitUse(traits, adaptations, location) { module.exports = TraitUse; -},{"./node":53}],82:[function(require,module,exports){ +},{"./node":53}],81:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2657,7 +2671,7 @@ var Try = Statement.extends(function Try(body, catches, always, location) { module.exports = Try; -},{"./statement":71}],83:[function(require,module,exports){ +},{"./statement":70}],82:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2681,9 +2695,21 @@ var Unary = Operation.extends(function Unary(type, what, location) { this.what = what; }); +Unary.prototype.precedence = function(node) { + if (node.kind === 'bin') { + this.what = node.left; + node.left = this; + return node; + } else if (node.kind === 'retif') { + this.what = node.test; + node.test = this; + return node; + } +}; + module.exports = Unary; -},{"./operation":57}],84:[function(require,module,exports){ +},{"./operation":57}],83:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2704,7 +2730,7 @@ var Unset = Sys.extends(function Unset(args, location) { module.exports = Unset; -},{"./sys":76}],85:[function(require,module,exports){ +},{"./sys":75}],84:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2718,7 +2744,7 @@ var KIND = 'usegroup'; * Defines a use statement (with a list of use items) * @constructor UseGroup * @extends {Statement} - * @property {Identifier|null} name + * @property {String|null} name * @property {String|null} type - Possible value : function, const * @property {UseItem[]} item * @see {Namespace} @@ -2733,7 +2759,7 @@ var UseGroup = Statement.extends(function UseGroup(name, type, items, location) module.exports = UseGroup; -},{"./statement":71}],86:[function(require,module,exports){ +},{"./statement":70}],85:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2747,7 +2773,7 @@ var KIND = 'useitem'; * Defines a use statement (from namespace) * @constructor UseItem * @extends {Statement} - * @property {Identifier} name + * @property {String} name * @property {String|null} type - Possible value : function, const * @property {String|null} alias * @see {Namespace} @@ -2775,7 +2801,7 @@ UseItem.TYPE_FUNCTION = 'function'; module.exports = UseItem; -},{"./statement":71}],87:[function(require,module,exports){ +},{"./statement":70}],86:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2801,7 +2827,7 @@ var Variable = Expr.extends(function Variable(name, byref, location) { module.exports = Variable; -},{"./expression":31}],88:[function(require,module,exports){ +},{"./expression":31}],87:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2825,7 +2851,7 @@ var Variadic = Expr.extends(function Variadic(what, location) { module.exports = Variadic; -},{"./expression":31}],89:[function(require,module,exports){ +},{"./expression":31}],88:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2853,7 +2879,7 @@ var While = Statement.extends(function While(test, body, shortForm, location) { module.exports = While; -},{"./statement":71}],90:[function(require,module,exports){ +},{"./statement":70}],89:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2880,7 +2906,7 @@ var Yield = Expression.extends(function Yield(value, key, location) { module.exports = Yield; -},{"./expression":31}],91:[function(require,module,exports){ +},{"./expression":31}],90:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -2905,7 +2931,7 @@ var YieldFrom = Expression.extends(function YieldFrom(value, location) { module.exports = YieldFrom; -},{"./expression":31}],92:[function(require,module,exports){ +},{"./expression":31}],91:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3254,6 +3280,9 @@ lexer.prototype.lex = function() { this.yylloc.prev_line = this.yylloc.first_line; this.yylloc.prev_column = this.yylloc.first_column; } + /*else if (this.yylloc.prev_offset === this.offset && this.offset !== this.size) { + throw new Error('Infinite loop @ ' + this.offset + ' / ' + this.size); + }*/ return token; }; @@ -3317,11 +3346,13 @@ lexer.prototype.next = function () { } else { tName = '"'+tName+'"'; } - console.log( - tName, - 'from ' + this.yylloc.first_line + ',' + this.yylloc.first_column, - ' - to ' + this.yylloc.last_line + ',' + this.yylloc.last_column + var e = new Error( + tName + + '\tfrom ' + this.yylloc.first_line + ',' + this.yylloc.first_column + + '\t - to ' + this.yylloc.last_line + ',' + this.yylloc.last_column + + '\t"'+this.yytext+'"' ); + console.log(e.stack); } return token; }; @@ -3345,7 +3376,7 @@ lexer.prototype.next = function () { module.exports = lexer; -},{"./lexer/comments.js":93,"./lexer/initial.js":94,"./lexer/numbers.js":95,"./lexer/property.js":96,"./lexer/scripting.js":97,"./lexer/strings.js":98,"./lexer/tokens.js":99,"./lexer/utils.js":100}],93:[function(require,module,exports){ +},{"./lexer/comments.js":92,"./lexer/initial.js":93,"./lexer/numbers.js":94,"./lexer/property.js":95,"./lexer/scripting.js":96,"./lexer/strings.js":97,"./lexer/tokens.js":98,"./lexer/utils.js":99}],92:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3402,7 +3433,7 @@ module.exports = { } }; -},{}],94:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3462,7 +3493,7 @@ module.exports = { } }; -},{}],95:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ (function (process){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) @@ -3522,14 +3553,14 @@ module.exports = { this.consume_LNUM(); return this.tok.T_DNUMBER; } else { - this.unput(3); + if (ch) this.unput(3); break; } } else if (this.is_NUM()) { this.consume_LNUM(); return this.tok.T_DNUMBER; } else { - this.unput(2); + if (ch) this.unput(2); break; } } else { @@ -3582,7 +3613,7 @@ module.exports = { while(this.offset < this.size) { ch = this.input(); if (ch !== '0' && ch !== '1') { - this.unput(1); + if (ch) this.unput(1); break; } } @@ -3591,7 +3622,7 @@ module.exports = { }; }).call(this,require('_process')) -},{"_process":1}],96:[function(require,module,exports){ +},{"_process":1}],95:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3606,7 +3637,7 @@ module.exports = { // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1296 return this.tok.T_OBJECT_OPERATOR; } - this.unput(1); + if (ch) this.unput(1); } else if (this.is_LABEL_START()) { // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1300 this.consume_LABEL(); @@ -3615,7 +3646,7 @@ module.exports = { } // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1306 this.popState(); - this.unput(1); + if (ch) this.unput(1); return false; }, matchST_LOOKING_FOR_VARNAME: function() { @@ -3633,7 +3664,7 @@ module.exports = { return false; } } else { - this.unput(1); + if (ch) this.unput(1); this.popState(); this.begin('ST_IN_SCRIPTING'); // console.log(this.yylineno, 'ST_LOOKING_FOR_VARNAME', this._input[this.offset - 1], this.conditionStack); @@ -3669,7 +3700,7 @@ module.exports = { } }; -},{}],97:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -3738,11 +3769,11 @@ module.exports = { return '}'; default: if (ch === '.') { - this.input(); + ch = this.input(); if (this.is_NUM()) { return this.consume_NUM(); } else { - this.unput(1); + if (ch) this.unput(1); } } if (this.is_NUM()) { @@ -3771,7 +3802,7 @@ module.exports = { } }; -},{}],98:[function(require,module,exports){ +},{}],97:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -4179,7 +4210,7 @@ module.exports = { return this.tok.T_CURLY_OPEN; } } - this.unput(1); + if (ch) this.unput(1); } ch = this.input(); } @@ -4187,7 +4218,7 @@ module.exports = { } }; -},{}],99:[function(require,module,exports){ +},{}],98:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -4213,7 +4244,7 @@ module.exports = { return this.ST_DOUBLE_QUOTES(); } else if (ch === '\'') { return this.T_CONSTANT_ENCAPSED_STRING(); - } else { + } else if (ch) { this.unput(1); } } @@ -4458,7 +4489,7 @@ module.exports = { } }; -},{}],100:[function(require,module,exports){ +},{}],99:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -4541,7 +4572,7 @@ module.exports = { } }; -},{}],101:[function(require,module,exports){ +},{}],100:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -4800,7 +4831,7 @@ parser.prototype.expectEndOfStatement = function() { }; /** outputs some debug information on current token **/ -var ignoreStack = ['parser.next', 'parser.nextWithComments']; +var ignoreStack = ['parser.next', 'parser.ignoreComments', 'parser.nextWithComments']; parser.prototype.showlog = function() { var stack = (new Error()).stack.split('\n'); var line; @@ -4934,7 +4965,7 @@ parser.prototype.is = function(type) { module.exports = parser; -},{"./parser/array.js":102,"./parser/class.js":103,"./parser/comment.js":104,"./parser/expr.js":105,"./parser/function.js":106,"./parser/if.js":107,"./parser/loops.js":108,"./parser/main.js":109,"./parser/namespace.js":110,"./parser/scalar.js":111,"./parser/statement.js":112,"./parser/switch.js":113,"./parser/try.js":114,"./parser/utils.js":115,"./parser/variable.js":116}],102:[function(require,module,exports){ +},{"./parser/array.js":101,"./parser/class.js":102,"./parser/comment.js":103,"./parser/expr.js":104,"./parser/function.js":105,"./parser/if.js":106,"./parser/loops.js":107,"./parser/main.js":108,"./parser/namespace.js":109,"./parser/scalar.js":110,"./parser/statement.js":111,"./parser/switch.js":112,"./parser/try.js":113,"./parser/utils.js":114,"./parser/variable.js":115}],101:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5025,7 +5056,7 @@ module.exports = { } }; -},{}],103:[function(require,module,exports){ +},{}],102:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5176,7 +5207,7 @@ module.exports = { function read_variable_declaration() { var result = this.node('property'); this.expect(this.tok.T_VARIABLE); - var name = this.text(); + var name = this.text().substring(1); // ignore $ this.next(); if (this.token === ';' || this.token === ',') { return result(name, null, flags); @@ -5470,7 +5501,7 @@ module.exports = { } }; -},{}],104:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5517,7 +5548,7 @@ module.exports = { } }; -},{}],105:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -5661,9 +5692,7 @@ module.exports = { if (this.token === '`') { // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1048 - return this.node('shell')( - this.next().read_encapsed_string('`') - ); + return this.next().read_encapsed_string('`'); } if (this.token === this.tok.T_LIST) { @@ -5958,8 +5987,11 @@ module.exports = { if (this.token === this.tok.T_CLASS) { var what = this.node('class'); // Annonymous class declaration - var propExtends = null, propImplements = null, body = null; - if (this.next().token == this.tok.T_EXTENDS) { + var propExtends = null, propImplements = null, body = null, args = []; + if (this.next().token === '(') { + args = this.read_function_argument_list(); + } + if (this.token == this.tok.T_EXTENDS) { propExtends = this.next().read_namespace_name(); } if (this.token == this.tok.T_IMPLEMENTS) { @@ -5975,7 +6007,7 @@ module.exports = { ,propImplements ,body ,[0, 0, 0] - ), [] + ), args ); } else { // Already existing class @@ -6040,7 +6072,7 @@ module.exports = { } }; -},{}],106:[function(require,module,exports){ +},{}],105:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6087,6 +6119,9 @@ module.exports = { } else { if (this.expect('{')) { result.body = this.read_code_block(false); + if (result.loc && result.body.loc) { + result.loc.end = result.body.loc.end; + } } if (flag) { result.parseFlags(flag); @@ -6146,18 +6181,16 @@ module.exports = { * ``` */ ,read_lexical_var: function() { - var result = [false, null]; + var result = this.node('variable'); + var isRef = false; if (this.token === '&') { - result[0] = true; + isRef = true; this.next(); } - if (this.token === this.tok.T_VARIABLE) { - result[1] = this.text(); - this.next(); - } else { - this.expect(['&', this.tok.T_VARIABLE]); - } - return result; + this.expect(this.tok.T_VARIABLE); + var name = this.text().substring(1); + this.next(); + return result(name, isRef); } /** * reads a list of parameters @@ -6205,7 +6238,7 @@ module.exports = { var isRef = this.is_reference(); var isVariadic = this.is_variadic(); if (this.expect(this.tok.T_VARIABLE)) { - name = this.text(); + name = this.text().substring(1); this.next(); } if (this.token == '=') { @@ -6276,7 +6309,7 @@ module.exports = { } }; -},{}],107:[function(require,module,exports){ +},{}],106:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6288,7 +6321,7 @@ module.exports = { * Reads an IF statement * * ```ebnf - * if ::= '(' expr ')' ':' ... + * if ::= T_IF '(' expr ')' ':' ... * ``` */ read_if: function() { @@ -6304,8 +6337,7 @@ module.exports = { this.next(); body = this.node('block'); var items = []; - while(this.token != this.EOF && this.token !== this.tok.T_ENDIF) { - this.ignoreComments(); + while(this.token !== this.EOF && this.token !== this.tok.T_ENDIF) { if (this.token === this.tok.T_ELSEIF) { alternate = this.next().read_elseif_short(); break; @@ -6316,10 +6348,13 @@ module.exports = { items.push(this.read_inner_statement()); } body = body(null, items); - if (this.ignoreComments().expect(this.tok.T_ENDIF)) this.next(); + this.expect(this.tok.T_ENDIF) && this.next(); this.expectEndOfStatement(); } else { body = this.read_statement(); + /** + * ignore : if (..) { } /* *./ else { } + */ this.ignoreComments(); if (this.token === this.tok.T_ELSEIF) { alternate = this.next().read_if(); @@ -6333,9 +6368,9 @@ module.exports = { * reads an if expression : '(' expr ')' */ read_if_expr: function() { - if (this.expect('(')) this.next(); + this.expect('(') && this.next(); var result = this.read_expr(); - if (this.expect(')')) this.next(); + this.expect(')') && this.next(); return result; }, /** @@ -6376,7 +6411,7 @@ module.exports = { } }; -},{}],108:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6423,7 +6458,7 @@ module.exports = { body = null ; body = this.read_statement(); - if (this.expect(this.tok.T_WHILE)) { + if (this.ignoreComments().expect(this.tok.T_WHILE)) { if (this.next().expect('(')) this.next(); test = this.read_expr(); if (this.expect(')')) this.next(); @@ -6492,7 +6527,7 @@ module.exports = { shortForm = false; if (this.expect('(')) this.next(); source = this.read_expr(); - if (this.expect(this.tok.T_AS)) { + if (this.ignoreComments().expect(this.tok.T_AS)) { this.next(); value = this.read_foreach_variable(); if (this.token === this.tok.T_DOUBLE_ARROW) { @@ -6536,7 +6571,7 @@ module.exports = { } }; -},{}],109:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6558,7 +6593,7 @@ module.exports = { } }; -},{}],110:[function(require,module,exports){ +},{}],109:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6583,17 +6618,21 @@ module.exports = { this.expect(this.tok.T_NAMESPACE) && this.next(); if (this.token == '{') { this.currentNamespace = ['']; - return result([''], this.read_code_block(true), true); + var body = this.nextWithComments().read_top_statements(); + this.expect('}') && this.nextWithComments(); + return result([''], body, true); } else { var name = this.read_namespace_name(); if (this.token == ';') { this.currentNamespace = name; var body = this.nextWithComments().read_top_statements(); this.expect(this.EOF); - return result(name, body); + return result(name.name, body, false); } else if (this.token == '{') { this.currentNamespace = name; - return result(name, this.read_code_block(true), true); + var body = this.nextWithComments().read_top_statements(); + this.expect('}') && this.nextWithComments(); + return result(name.name, body, true); } else if (this.token === '(') { // resolve ambuiguity between namespace & function call name.resolution = this.ast.identifier.RELATIVE_NAME; @@ -6607,7 +6646,7 @@ module.exports = { this.currentNamespace = name; var body = this.read_top_statements(); this.expect(this.EOF); - return result(name, body); + return result(name, body, false); } } } @@ -6654,7 +6693,7 @@ module.exports = { if (this.token === ',') { items = items.concat(this.next().read_use_declarations(false)); } else if (this.token === '{') { - name = items[0].name; + name = items[0].name.name; items = this.next().read_use_declarations(type === null); this.expect('}') && this.next(); } @@ -6674,7 +6713,7 @@ module.exports = { if (typed) type = this.read_use_type(); var name = this.read_namespace_name(); var alias = this.read_use_alias(); - return result(name, alias, type); + return result(name.name, alias, type); } /** * Reads a list of use declarations @@ -6728,7 +6767,7 @@ module.exports = { } }; -},{}],111:[function(require,module,exports){ +},{}],110:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -6898,7 +6937,7 @@ module.exports = { else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { var name = null; if (this.next().token === this.tok.T_STRING_VARNAME) { - var varName = this.text().substring(1); + var varName = this.text(); name = this.node('variable'); this.next(); name = name(varName, false); @@ -6996,7 +7035,7 @@ module.exports = { } }; -},{}],112:[function(require,module,exports){ +},{}],111:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -7254,9 +7293,9 @@ module.exports = { return result(args); case this.tok.T_INLINE_HTML: - var result = this.node('inline')(this.text()); + var result = this.node('inline'), value = this.text(); this.next(); - return result; + return result(value); case this.tok.T_UNSET: var result = this.node('unset'); @@ -7292,7 +7331,7 @@ module.exports = { this.expect('}') && this.next(); mode = this.ast.declare.MODE_BLOCK; } else { - this.expect(';') && this.next(); + this.expect(';') && this.nextWithComments(); while(this.token != this.EOF && this.token !== this.tok.T_DECLARE) { // @todo : check declare_statement from php / not valid body.push(this.read_top_statement()); @@ -7361,7 +7400,7 @@ module.exports = { } }; -},{}],113:[function(require,module,exports){ +},{}],112:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -7457,7 +7496,7 @@ module.exports = { } }; -},{}],114:[function(require,module,exports){ +},{}],113:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -7482,10 +7521,9 @@ module.exports = { body, catches = [] ; - body = this.nextWithComments().read_statement(); - this.ignoreComments(); + body = this.next().read_statement(); // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L455 - while(this.token === this.tok.T_CATCH) { + while(this.ignoreComments().token === this.tok.T_CATCH) { var item = this.node('catch'), what = [], variable = null; this.next().expect('(') && this.next(); what = this.read_list( @@ -7493,17 +7531,18 @@ module.exports = { ); variable = this.read_variable(true, false, false); this.expect(')'); - catches.push(item(this.next().read_statement(), what, variable)); - this.ignoreComments(); + catches.push( + item(this.next().read_statement(), what, variable) + ); } if (this.token === this.tok.T_FINALLY) { - always = this.nextWithComments().read_statement(); + always = this.next().read_statement(); } return result(body, catches, always); } }; -},{}],115:[function(require,module,exports){ +},{}],114:[function(require,module,exports){ /*! * Defines a list of helper functions for parsing * Copyright (C) 2017 Glayzzle (BSD3 License) @@ -7625,7 +7664,7 @@ module.exports = { }; -},{}],116:[function(require,module,exports){ +},{}],115:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -7764,15 +7803,26 @@ module.exports = { this.next(); what = what(name); if (this.token === this.tok.T_VARIABLE) { - // @fixme : create encapsed var node + var inner = this.node('variable'); name = this.text().substring(1); this.next(); - // fix $obj->var_$prop - what = ['bin', '.', what, ['var', name]]; + what = this.node('encapsed')( + [what, inner(name, false)], + 'offset' + ); + if (what.loc && what.value[0].loc) { + what.loc.start = what.value[0].loc.start; + } } else if (this.token === '{') { - // fix $obj->var_{$prop} - what = ['bin', '.', what, this.next().read_expr()]; + var expr = this.next().read_expr(); this.expect('}') && this.next(); + what = this.node('encapsed')( + [what, expr], + 'offset' + ); + if (what.loc && what.value[0].loc) { + what.loc.start = what.value[0].loc.start; + } } break; case this.tok.T_VARIABLE: @@ -7921,7 +7971,7 @@ module.exports = { } }; -},{}],117:[function(require,module,exports){ +},{}],116:[function(require,module,exports){ /*! * Copyright (C) 2017 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors @@ -8391,4 +8441,4 @@ engine.prototype.tokenGetAll = function(buffer) { // exports the function module.exports = engine; -},{"./ast":2,"./lexer":92,"./parser":101,"./tokens":117}]},{},[]); +},{"./ast":2,"./lexer":91,"./parser":100,"./tokens":116}]},{},[]); diff --git a/dist/php-parser.min.js b/dist/php-parser.min.js index 5f9529d03..c792da11f 100644 --- a/dist/php-parser.min.js +++ b/dist/php-parser.min.js @@ -2,112 +2,112 @@ require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"== if(cachedClearTimeout===clearTimeout)return clearTimeout(marker);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(marker);try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}function cleanUpNextTick(){draining&¤tQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var timeout=runTimeout(cleanUpNextTick);draining=!0;for(var len=queue.length;len;){for(currentQueue=queue,queue=[];++queueIndex1)for(var i=1;i"],["<","<=",">",">="],["<<",">>"],["+","-","."],["*","/","%"],["instanceof"]],precedence={};binOperatorsPrecedence.forEach(function(list,index){list.forEach(function(operator){precedence[operator]=index+1})});var Bin=Operation.extends(function Bin(type,left,right,location){if(Operation.apply(this,[KIND,location]),right&&"bin"===right.kind){var lLevel=precedence[type],rLevel=precedence[right.type];if(lLevel&&rLevel&&rLevel=this.size,!this.all_tokens&&this.mode_eval?this.begin("ST_IN_SCRIPTING"):this.begin("INITIAL"),this},lexer.prototype.input=function(size){var ch=this._input[this.offset];return ch?(this.yytext+=ch,this.offset++,"\r"===ch&&"\n"===this._input[this.offset]&&(this.yytext+="\n",this.offset++),"\n"===ch||"\r"===ch?(this.yylloc.last_line=++this.yylineno,this.yyprevcol=this.yylloc.last_column,this.yylloc.last_column=0):this.yylloc.last_column++, -ch):""},lexer.prototype.unput=function(size){if(1===size)this.offset--,"\n"===this._input[this.offset]&&"\r"===this._input[this.offset-1]&&(this.offset--,size++),"\r"===this._input[this.offset]||"\n"===this._input[this.offset]?(this.yylloc.last_line--,this.yylineno--,this.yylloc.last_column=this.yyprevcol):this.yylloc.last_column--,this.yytext=this.yytext.substring(0,this.yytext.length-size);else if(size>0)if(this.offset-=size,size0?this.conditionStack.pop():this.conditionStack[0];if(this.curCondition=this.conditionStack[this.conditionStack.length-1],this.stateCb=this["match"+this.curCondition],"function"!=typeof this.stateCb)throw new Error('Undefined condition state "'+this.curCondition+'"');return condition},lexer.prototype.next=function(){var token;if(this._input||(this.done=!0),this.yylloc.first_offset=this.offset,this.yylloc.first_line=this.yylloc.last_line,this.yylloc.first_column=this.yylloc.last_column,this.yytext="",this.done)return this.yylloc.prev_offset=this.yylloc.first_offset,this.yylloc.prev_line=this.yylloc.first_line, -this.yylloc.prev_column=this.yylloc.first_column,this.EOF;if(this.tokens.length>0?(token=this.tokens.shift(),"object"==typeof token[1]?this.setState(token[1]):this.consume(token[1]),token=token[0]):token=this.stateCb.apply(this,[]),this.offset>=this.size&&0===this.tokens.length&&(this.done=!0),this.debug){var tName=token;tName="number"==typeof tName?this.engine.tokens.values[tName]:'"'+tName+'"',console.log(tName,"from "+this.yylloc.first_line+","+this.yylloc.first_column," - to "+this.yylloc.last_line+","+this.yylloc.last_column)}return token},[require("./lexer/comments.js"),require("./lexer/initial.js"),require("./lexer/numbers.js"),require("./lexer/property.js"),require("./lexer/scripting.js"),require("./lexer/strings.js"),require("./lexer/tokens.js"),require("./lexer/utils.js")].forEach(function(ext){for(var k in ext)lexer.prototype[k]=ext[k]}),module.exports=lexer},{"./lexer/comments.js":93,"./lexer/initial.js":94,"./lexer/numbers.js":95,"./lexer/property.js":96,"./lexer/scripting.js":97,"./lexer/strings.js":98, -"./lexer/tokens.js":99,"./lexer/utils.js":100}],93:[function(require,module,exports){"use strict";module.exports={T_COMMENT:function(){for(;this.offset"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT;if("%"===ch&&this.aspTagMode&&">"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT}return this.tok.T_COMMENT},T_DOC_COMMENT:function(){var ch=this.input(),token=this.tok.T_COMMENT;if("*"===ch){if(ch=this.input(),this.is_WHITESPACE()&&(token=this.tok.T_DOC_COMMENT),"/"===ch)return token;this.unput(1)}for(;this.offset1&&"INITIAL"===this.conditionStack[this.conditionStack.length-1]?this.popState():this.begin("ST_IN_SCRIPTING"),this},matchINITIAL:function(){ -for(;this.offset0&&this.tok.T_INLINE_HTML}}},{}],95:[function(require,module,exports){(function(process){"use strict";if("x64"==process.arch)var MAX_LENGTH_OF_LONG=19,long_min_digits="9223372036854775808";else var MAX_LENGTH_OF_LONG=10,long_min_digits="2147483648";module.exports={consume_NUM:function(){var ch=this.yytext[0],hasPoint="."===this.yytext[0]; -if("0"===ch)if(ch=this.input(),"x"===ch||"X"===ch){if(this.input(),this.is_HEX())return this.consume_HNUM();this.unput(2)}else if("b"===ch||"B"===ch){if(ch=this.input(),"0"===ch||"1"===ch)return this.consume_BNUM();this.unput(2)}else this.is_NUM()||this.unput(1);for(;this.offset"===ch)return this.tok.T_OBJECT_OPERATOR;this.unput(1)}else if(this.is_LABEL_START())return this.consume_LABEL(),this.popState(),this.tok.T_STRING;return this.popState(),this.unput(1),!1},matchST_LOOKING_FOR_VARNAME:function(){var ch=this.input();return this.is_LABEL_START()?(this.consume_LABEL(),ch=this.input(),this.popState(),"["===ch||"}"===ch?(this.begin("ST_IN_SCRIPTING"),this.unput(1),this.tok.T_STRING_VARNAME):(this.unput(this.yytext.length),!1)):(this.unput(1),this.popState(),this.begin("ST_IN_SCRIPTING"),!1)},matchST_VAR_OFFSET:function(){var ch=this.input();if(this.is_NUM())return this.consume_NUM(),this.tok.T_NUM_STRING; -if("]"===ch)return this.popState(),"]";if("$"===ch){if(this.input(),this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_VARIABLE;throw new Error("Unexpected terminal")}if(this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_STRING;if(this.is_WHITESPACE()||"\\"===ch||"'"===ch||"#"===ch)return this.tok.T_ENCAPSED_AND_WHITESPACE;if("["===ch||"{"===ch||"}"===ch||'"'===ch||"`"===ch||this.is_TOKEN())return ch;throw new Error("Unexpected terminal")}}},{}],97:[function(require,module,exports){module.exports={matchST_IN_SCRIPTING:function(){var ch=this.input();switch(ch){case" ":case"\t":case"\n":case"\r":case"\r\n":return this.T_WHITESPACE();case"#":return this.T_COMMENT();case"/":return"/"===this._input[this.offset]?this.T_COMMENT():"*"===this._input[this.offset]?(this.input(),this.T_DOC_COMMENT()):this.consume_TOKEN();case"'":return this.T_CONSTANT_ENCAPSED_STRING();case'"':return this.ST_DOUBLE_QUOTES();case"`":return this.begin("ST_BACKQUOTE"),"`";case"?":if(!this.aspTagMode&&this.tryMatch(">")){this.input(); -var nextCH=this._input[this.offset];return"\n"!==nextCH&&"\r"!==nextCH||this.input(),this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG}return this.consume_TOKEN();case"%":return this.aspTagMode&&">"===this._input[this.offset]?(this.input(),ch=this._input[this.offset],"\n"!==ch&&"\r"!==ch||this.input(),this.aspTagMode=!1,this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG):this.consume_TOKEN();case"{":return this.begin("ST_IN_SCRIPTING"),"{";case"}":return this.conditionStack.length>2&&this.popState(),"}";default:if("."===ch){if(this.input(),this.is_NUM())return this.consume_NUM();this.unput(1)}if(this.is_NUM())return this.consume_NUM();if(this.is_LABEL_START())return this.consume_LABEL().T_STRING();if(this.is_TOKEN())return this.consume_TOKEN()}throw new Error('Bad terminal sequence "'+ch+'" at line '+this.yylineno+" (offset "+this.offset+")")},T_WHITESPACE:function(){for(;this.offset2&&this.appendToken(this.tok.T_ENCAPSED_AND_WHITESPACE,this.yytext.length-prefix),this.unput(this.yytext.length-prefix),this.begin("ST_DOUBLE_QUOTES"),this.yytext},isDOC_MATCH:function(){if(this._input.substring(this.offset-1,this.offset-1+this.heredoc_label.length)===this.heredoc_label){var ch=this._input[this.offset-1+this.heredoc_label.length];if("\n"===ch||"\r"===ch||";"===ch)return!0}return!1},matchST_NOWDOC:function(){if(this.isDOC_MATCH())return this.consume(this.heredoc_label.length), -this.popState(),this.tok.T_END_HEREDOC;for(var ch=this._input[this.offset-1];this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES; -if(this.is_LABEL_START()){var yyoffset=this.offset,next=this.consume_VARIABLE();return this.yytext.length>this.offset-yyoffset+2?(this.appendToken(next,this.offset-yyoffset+2),this.unput(this.offset-yyoffset+2),this.tok.T_ENCAPSED_AND_WHITESPACE):next}}else if("{"===ch){if(ch=this.input(),"$"===ch)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN)}else ch=this.input();return this.tok.T_ENCAPSED_AND_WHITESPACE},consume_VARIABLE:function(){if(this.consume_LABEL(),ch=this.input(),"["==ch)return this.unput(1),this.begin("ST_VAR_OFFSET"),this.tok.T_VARIABLE;if("-"===ch){if(">"===this.input())return this.input(),this.is_LABEL_START()&&this.begin("ST_LOOKING_FOR_PROPERTY"),this.unput(3),this.tok.T_VARIABLE;this.unput(2)}else this.unput(1);return this.tok.T_VARIABLE},matchST_BACKQUOTE:function(){var ch=this.input();if("$"===ch){if(ch=this.input(),"{"===ch)return this.begin("ST_LOOKING_FOR_VARNAME"), -this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var tok=this.consume_VARIABLE();return tok}}else if("{"===ch){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if("`"===ch)return this.popState(),"`";for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var yyoffset=this.offset,next=this.consume_VARIABLE();return this.yytext.length>this.offset-yyoffset+2?(this.appendToken(next,this.offset-yyoffset+2),this.unput(this.offset-yyoffset+2),this.tok.T_ENCAPSED_AND_WHITESPACE):next}this.unput(1)}else if("{"===ch){if(ch=this.input(),"$"===ch)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1), -this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);this.unput(1)}}ch=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE},matchST_DOUBLE_QUOTES:function(){var ch=this.input();if("$"===ch){if(ch=this.input(),"{"===ch)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var tok=this.consume_VARIABLE();return tok}}else if("{"===ch){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if('"'===ch)return this.popState(),'"';for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var yyoffset=this.offset,next=this.consume_VARIABLE();return this.yytext.length>this.offset-yyoffset+2?(this.appendToken(next,this.offset-yyoffset+2), -this.unput(this.offset-yyoffset+2),this.tok.T_ENCAPSED_AND_WHITESPACE):next}this.unput(1)}else if("{"===ch){if(ch=this.input(),"$"===ch)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);this.unput(1)}}ch=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE}}},{}],99:[function(require,module,exports){module.exports={T_STRING:function(){var token=this.yytext.toLowerCase(),id=this.keywords[token];if(!id)if("yield"===token)this.tryMatch(" from")?(this.consume(5),id=this.tok.T_YIELD_FROM):id=this.tok.T_YIELD;else if(id=this.tok.T_STRING,"b"===token||"B"===token){var ch=this.input(1);if('"'===ch)return this.ST_DOUBLE_QUOTES();if("'"===ch)return this.T_CONSTANT_ENCAPSED_STRING();this.unput(1)}return id},consume_TOKEN:function(){var ch=this._input[this.offset-1],fn=this.tokenTerminals[ch];return fn?fn.apply(this,[]):this.yytext},tokenTerminals:{$:function(){return this.offset++,this.is_LABEL_START()?(this.offset--, -this.consume_LABEL(),this.tok.T_VARIABLE):(this.offset--,"$")},"-":function(){var nchar=this._input[this.offset];return">"===nchar?(this.begin("ST_LOOKING_FOR_PROPERTY").input(),this.tok.T_OBJECT_OPERATOR):"-"===nchar?(this.input(),this.tok.T_DEC):"="===nchar?(this.input(),this.tok.T_MINUS_EQUAL):"-"},"\\":function(){return this.tok.T_NS_SEPARATOR},"/":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_DIV_EQUAL):"/"},":":function(){return":"===this._input[this.offset]?(this.input(),this.tok.T_DOUBLE_COLON):":"},"(":function(){var initial=this.offset;if(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),this.is_LABEL_START()){var yylen=this.yytext.length;this.consume_LABEL();var castToken=this.yytext.substring(yylen-1).toLowerCase(),castId=this.castKeywords[castToken];if(castId&&(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),")"===this._input[this.offset-1]))return castId}return this.unput(this.offset-initial),"("},"=":function(){var nchar=this._input[this.offset]; -return">"===nchar?(this.input(),this.tok.T_DOUBLE_ARROW):"="===nchar?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_IDENTICAL):(this.input(),this.tok.T_IS_EQUAL):"="},"+":function(){var nchar=this._input[this.offset];return"+"===nchar?(this.input(),this.tok.T_INC):"="===nchar?(this.input(),this.tok.T_PLUS_EQUAL):"+"},"!":function(){return"="===this._input[this.offset]?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_NOT_IDENTICAL):(this.input(),this.tok.T_IS_NOT_EQUAL):"!"},"?":function(){return"?"===this._input[this.offset]?(this.input(),this.tok.T_COALESCE):"?"},"<":function(){var nchar=this._input[this.offset];return"<"===nchar?(nchar=this._input[this.offset+1],"="===nchar?(this.consume(2),this.tok.T_SL_EQUAL):"<"===nchar&&this.is_HEREDOC()?this.tok.T_START_HEREDOC:(this.input(),this.tok.T_SL)):"="===nchar?(this.input(),">"===this._input[this.offset]?(this.input(),this.tok.T_SPACESHIP):this.tok.T_IS_SMALLER_OR_EQUAL):">"===nchar?(this.input(),this.tok.T_IS_NOT_EQUAL):"<"},">":function(){ -var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_IS_GREATER_OR_EQUAL):">"===nchar?(nchar=this._input[this.offset+1],"="===nchar?(this.consume(2),this.tok.T_SR_EQUAL):(this.input(),this.tok.T_SR)):">"},"*":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_MUL_EQUAL):"*"===nchar?(this.input(),"="===this._input[this.offset]?(this.input(),this.tok.T_POW_EQUAL):this.tok.T_POW):"*"},".":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_CONCAT_EQUAL):"."===nchar&&"."===this._input[this.offset+1]?(this.consume(2),this.tok.T_ELLIPSIS):"."},"%":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_MOD_EQUAL):"%"},"&":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_AND_EQUAL):"&"===nchar?(this.input(),this.tok.T_BOOLEAN_AND):"&"},"|":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_OR_EQUAL):"|"===nchar?(this.input(), -this.tok.T_BOOLEAN_OR):"|"},"^":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_XOR_EQUAL):"^"}}}},{}],100:[function(require,module,exports){var tokens=";:,.\\[]()|^&+-/*=%!~$<>?@";module.exports={is_NUM:function(){var ch=this._input.charCodeAt(this.offset-1);return ch>47&&ch<58},is_LABEL:function(){var ch=this._input.charCodeAt(this.offset-1);return ch>96&&ch<123||ch>64&&ch<91||95===ch||ch>47&&ch<58||ch>126},is_LABEL_START:function(){var ch=this._input.charCodeAt(this.offset-1);return ch>96&&ch<123||ch>64&&ch<91||95===ch||ch>126},consume_LABEL:function(){for(;this.offset47&&ch<58||ch>64&&ch<71||ch>96&&ch<103}}},{}],101:[function(require,module,exports){function isNumber(n){return"."!=n&&","!=n&&!isNaN(parseFloat(n))&&isFinite(n)}var parser=function(lexer,ast){this.lexer=lexer,this.ast=ast,this.tok=lexer.tok,this.EOF=lexer.EOF,this.token=null,this.prev=null,this.debug=!1,this.extractDoc=!1,this.suppressErrors=!1,this.entries={VARIABLE:[this.tok.T_VARIABLE,"$","&",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_NAMESPACE,this.tok.T_STATIC],SCALAR:[this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C,'"','b"','B"',"-",this.tok.T_NS_SEPARATOR],T_MAGIC_CONST:[this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C], -T_MEMBER_FLAGS:[this.tok.T_PUBLIC,this.tok.T_PRIVATE,this.tok.T_PROTECTED,this.tok.T_STATIC,this.tok.T_ABSTRACT,this.tok.T_FINAL],EOS:[";",this.tok.T_CLOSE_TAG,this.EOF,this.tok.T_INLINE_HTML],EXPR:["@","-","+","!","~","(","`",this.tok.T_LIST,this.tok.T_CLONE,this.tok.T_INC,this.tok.T_DEC,this.tok.T_NEW,this.tok.T_ISSET,this.tok.T_EMPTY,this.tok.T_INCLUDE,this.tok.T_INCLUDE_ONCE,this.tok.T_REQUIRE,this.tok.T_REQUIRE_ONCE,this.tok.T_EVAL,this.tok.T_INT_CAST,this.tok.T_DOUBLE_CAST,this.tok.T_STRING_CAST,this.tok.T_ARRAY_CAST,this.tok.T_OBJECT_CAST,this.tok.T_BOOL_CAST,this.tok.T_UNSET_CAST,this.tok.T_EXIT,this.tok.T_PRINT,this.tok.T_YIELD,this.tok.T_STATIC,this.tok.T_FUNCTION,this.tok.T_VARIABLE,"$",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_STRING,this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C] +"./ast/node":53,"./ast/nowdoc":54,"./ast/number":55,"./ast/offsetlookup":56,"./ast/operation":57,"./ast/parameter":58,"./ast/parenthesis":59,"./ast/position":60,"./ast/post":61,"./ast/pre":62,"./ast/print":63,"./ast/program":64,"./ast/property":65,"./ast/propertylookup":66,"./ast/retif":67,"./ast/return":68,"./ast/silent":69,"./ast/statement":70,"./ast/static":71,"./ast/staticlookup":72,"./ast/string":73,"./ast/switch":74,"./ast/sys":75,"./ast/throw":76,"./ast/trait":77,"./ast/traitalias":78,"./ast/traitprecedence":79,"./ast/traituse":80,"./ast/try":81,"./ast/unary":82,"./ast/unset":83,"./ast/usegroup":84,"./ast/useitem":85,"./ast/variable":86,"./ast/variadic":87,"./ast/while":88,"./ast/yield":89,"./ast/yieldfrom":90}],3:[function(require,module,exports){var Expr=require("./expression"),KIND="array",Array=Expr.extends(function Array(shortForm,items,location){Expr.apply(this,[KIND,location]),this.items=items,this.shortForm=shortForm});module.exports=Array},{"./expression":31}],4:[function(require,module,exports){ +var Statement=require("./statement"),KIND="assign",Assign=Statement.extends(function Assign(left,right,operator,location){Statement.apply(this,[KIND,location]),this.operator=operator,this.left=left,this.right=right});module.exports=Assign},{"./statement":70}],5:[function(require,module,exports){"use strict";var Operation=require("./operation"),KIND="bin",binOperatorsPrecedence=[["or"],["xor"],["and"],["retif"],["??"],["||"],["&&"],["|"],["^"],["&"],["==","!=","===","!==","<=>"],["<","<=",">",">="],["<<",">>"],["+","-","."],["*","/","%"],["!"],["instanceof"]],Bin=Operation.extends(function Bin(type,left,right,location){Operation.apply(this,[KIND,location]),this.type=type,this.left=left,this.right=right});Bin.prototype.precedence=function(node){var lLevel=Bin.precedence[node.type],rLevel=Bin.precedence[this.type];if(lLevel&&rLevel&&rLevel=this.size,!this.all_tokens&&this.mode_eval?this.begin("ST_IN_SCRIPTING"):this.begin("INITIAL"),this},lexer.prototype.input=function(size){var ch=this._input[this.offset];return ch?(this.yytext+=ch, +this.offset++,"\r"===ch&&"\n"===this._input[this.offset]&&(this.yytext+="\n",this.offset++),"\n"===ch||"\r"===ch?(this.yylloc.last_line=++this.yylineno,this.yyprevcol=this.yylloc.last_column,this.yylloc.last_column=0):this.yylloc.last_column++,ch):""},lexer.prototype.unput=function(size){if(1===size)this.offset--,"\n"===this._input[this.offset]&&"\r"===this._input[this.offset-1]&&(this.offset--,size++),"\r"===this._input[this.offset]||"\n"===this._input[this.offset]?(this.yylloc.last_line--,this.yylineno--,this.yylloc.last_column=this.yyprevcol):this.yylloc.last_column--,this.yytext=this.yytext.substring(0,this.yytext.length-size);else if(size>0)if(this.offset-=size,size0?this.conditionStack.pop():this.conditionStack[0];if(this.curCondition=this.conditionStack[this.conditionStack.length-1],this.stateCb=this["match"+this.curCondition],"function"!=typeof this.stateCb)throw new Error('Undefined condition state "'+this.curCondition+'"');return condition},lexer.prototype.next=function(){var token;if(this._input||(this.done=!0),this.yylloc.first_offset=this.offset,this.yylloc.first_line=this.yylloc.last_line, +this.yylloc.first_column=this.yylloc.last_column,this.yytext="",this.done)return this.yylloc.prev_offset=this.yylloc.first_offset,this.yylloc.prev_line=this.yylloc.first_line,this.yylloc.prev_column=this.yylloc.first_column,this.EOF;if(this.tokens.length>0?(token=this.tokens.shift(),"object"==typeof token[1]?this.setState(token[1]):this.consume(token[1]),token=token[0]):token=this.stateCb.apply(this,[]),this.offset>=this.size&&0===this.tokens.length&&(this.done=!0),this.debug){var tName=token;tName="number"==typeof tName?this.engine.tokens.values[tName]:'"'+tName+'"';var e=new Error(tName+"\tfrom "+this.yylloc.first_line+","+this.yylloc.first_column+"\t - to "+this.yylloc.last_line+","+this.yylloc.last_column+'\t"'+this.yytext+'"');console.log(e.stack)}return token},[require("./lexer/comments.js"),require("./lexer/initial.js"),require("./lexer/numbers.js"),require("./lexer/property.js"),require("./lexer/scripting.js"),require("./lexer/strings.js"),require("./lexer/tokens.js"),require("./lexer/utils.js")].forEach(function(ext){ +for(var k in ext)lexer.prototype[k]=ext[k]}),module.exports=lexer},{"./lexer/comments.js":92,"./lexer/initial.js":93,"./lexer/numbers.js":94,"./lexer/property.js":95,"./lexer/scripting.js":96,"./lexer/strings.js":97,"./lexer/tokens.js":98,"./lexer/utils.js":99}],92:[function(require,module,exports){"use strict";module.exports={T_COMMENT:function(){for(;this.offset"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT;if("%"===ch&&this.aspTagMode&&">"===this._input[this.offset])return this.unput(1),this.tok.T_COMMENT}return this.tok.T_COMMENT},T_DOC_COMMENT:function(){var ch=this.input(),token=this.tok.T_COMMENT;if("*"===ch){if(ch=this.input(),this.is_WHITESPACE()&&(token=this.tok.T_DOC_COMMENT),"/"===ch)return token;this.unput(1)}for(;this.offset1&&"INITIAL"===this.conditionStack[this.conditionStack.length-1]?this.popState():this.begin("ST_IN_SCRIPTING"),this},matchINITIAL:function(){for(;this.offset0&&this.tok.T_INLINE_HTML}}},{}],94:[function(require,module,exports){(function(process){ +"use strict";if("x64"==process.arch)var MAX_LENGTH_OF_LONG=19,long_min_digits="9223372036854775808";else var MAX_LENGTH_OF_LONG=10,long_min_digits="2147483648";module.exports={consume_NUM:function(){var ch=this.yytext[0],hasPoint="."===this.yytext[0];if("0"===ch)if(ch=this.input(),"x"===ch||"X"===ch){if(this.input(),this.is_HEX())return this.consume_HNUM();this.unput(2)}else if("b"===ch||"B"===ch){if(ch=this.input(),"0"===ch||"1"===ch)return this.consume_BNUM();this.unput(2)}else this.is_NUM()||this.unput(1);for(;this.offset"===ch)return this.tok.T_OBJECT_OPERATOR;ch&&this.unput(1)}else if(this.is_LABEL_START())return this.consume_LABEL(),this.popState(),this.tok.T_STRING;return this.popState(),ch&&this.unput(1),!1},matchST_LOOKING_FOR_VARNAME:function(){var ch=this.input();return this.is_LABEL_START()?(this.consume_LABEL(),ch=this.input(),this.popState(),"["===ch||"}"===ch?(this.begin("ST_IN_SCRIPTING"),this.unput(1),this.tok.T_STRING_VARNAME):(this.unput(this.yytext.length), +!1)):(ch&&this.unput(1),this.popState(),this.begin("ST_IN_SCRIPTING"),!1)},matchST_VAR_OFFSET:function(){var ch=this.input();if(this.is_NUM())return this.consume_NUM(),this.tok.T_NUM_STRING;if("]"===ch)return this.popState(),"]";if("$"===ch){if(this.input(),this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_VARIABLE;throw new Error("Unexpected terminal")}if(this.is_LABEL_START())return this.consume_LABEL(),this.tok.T_STRING;if(this.is_WHITESPACE()||"\\"===ch||"'"===ch||"#"===ch)return this.tok.T_ENCAPSED_AND_WHITESPACE;if("["===ch||"{"===ch||"}"===ch||'"'===ch||"`"===ch||this.is_TOKEN())return ch;throw new Error("Unexpected terminal")}}},{}],96:[function(require,module,exports){module.exports={matchST_IN_SCRIPTING:function(){var ch=this.input();switch(ch){case" ":case"\t":case"\n":case"\r":case"\r\n":return this.T_WHITESPACE();case"#":return this.T_COMMENT();case"/":return"/"===this._input[this.offset]?this.T_COMMENT():"*"===this._input[this.offset]?(this.input(),this.T_DOC_COMMENT()):this.consume_TOKEN(); +case"'":return this.T_CONSTANT_ENCAPSED_STRING();case'"':return this.ST_DOUBLE_QUOTES();case"`":return this.begin("ST_BACKQUOTE"),"`";case"?":if(!this.aspTagMode&&this.tryMatch(">")){this.input();var nextCH=this._input[this.offset];return"\n"!==nextCH&&"\r"!==nextCH||this.input(),this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG}return this.consume_TOKEN();case"%":return this.aspTagMode&&">"===this._input[this.offset]?(this.input(),ch=this._input[this.offset],"\n"!==ch&&"\r"!==ch||this.input(),this.aspTagMode=!1,this.conditionStack.length>1&&this.begin("INITIAL"),this.tok.T_CLOSE_TAG):this.consume_TOKEN();case"{":return this.begin("ST_IN_SCRIPTING"),"{";case"}":return this.conditionStack.length>2&&this.popState(),"}";default:if("."===ch){if(ch=this.input(),this.is_NUM())return this.consume_NUM();ch&&this.unput(1)}if(this.is_NUM())return this.consume_NUM();if(this.is_LABEL_START())return this.consume_LABEL().T_STRING();if(this.is_TOKEN())return this.consume_TOKEN()}throw new Error('Bad terminal sequence "'+ch+'" at line '+this.yylineno+" (offset "+this.offset+")"); +},T_WHITESPACE:function(){for(;this.offset2&&this.appendToken(this.tok.T_ENCAPSED_AND_WHITESPACE,this.yytext.length-prefix),this.unput(this.yytext.length-prefix),this.begin("ST_DOUBLE_QUOTES"),this.yytext},isDOC_MATCH:function(){if(this._input.substring(this.offset-1,this.offset-1+this.heredoc_label.length)===this.heredoc_label){var ch=this._input[this.offset-1+this.heredoc_label.length];if("\n"===ch||"\r"===ch||";"===ch)return!0; +}return!1},matchST_NOWDOC:function(){if(this.isDOC_MATCH())return this.consume(this.heredoc_label.length),this.popState(),this.tok.T_END_HEREDOC;for(var ch=this._input[this.offset-1];this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2), +this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var yyoffset=this.offset,next=this.consume_VARIABLE();return this.yytext.length>this.offset-yyoffset+2?(this.appendToken(next,this.offset-yyoffset+2),this.unput(this.offset-yyoffset+2),this.tok.T_ENCAPSED_AND_WHITESPACE):next}}else if("{"===ch){if(ch=this.input(),"$"===ch)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN)}else ch=this.input();return this.tok.T_ENCAPSED_AND_WHITESPACE},consume_VARIABLE:function(){if(this.consume_LABEL(),ch=this.input(),"["==ch)return this.unput(1),this.begin("ST_VAR_OFFSET"),this.tok.T_VARIABLE;if("-"===ch){if(">"===this.input())return this.input(),this.is_LABEL_START()&&this.begin("ST_LOOKING_FOR_PROPERTY"),this.unput(3),this.tok.T_VARIABLE;this.unput(2)}else this.unput(1);return this.tok.T_VARIABLE},matchST_BACKQUOTE:function(){var ch=this.input(); +if("$"===ch){if(ch=this.input(),"{"===ch)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var tok=this.consume_VARIABLE();return tok}}else if("{"===ch){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if("`"===ch)return this.popState(),"`";for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var yyoffset=this.offset,next=this.consume_VARIABLE();return this.yytext.length>this.offset-yyoffset+2?(this.appendToken(next,this.offset-yyoffset+2),this.unput(this.offset-yyoffset+2),this.tok.T_ENCAPSED_AND_WHITESPACE):next}this.unput(1)}else if("{"===ch){if(ch=this.input(), +"$"===ch)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);this.unput(1)}}ch=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE},matchST_DOUBLE_QUOTES:function(){var ch=this.input();if("$"===ch){if(ch=this.input(),"{"===ch)return this.begin("ST_LOOKING_FOR_VARNAME"),this.tok.T_DOLLAR_OPEN_CURLY_BRACES;if(this.is_LABEL_START()){var tok=this.consume_VARIABLE();return tok}}else if("{"===ch){if("$"===this._input[this.offset])return this.begin("ST_IN_SCRIPTING"),this.tok.T_CURLY_OPEN}else if('"'===ch)return this.popState(),'"';for(;this.offset2?(this.appendToken(this.tok.T_DOLLAR_OPEN_CURLY_BRACES,2),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):this.tok.T_DOLLAR_OPEN_CURLY_BRACES; +if(this.is_LABEL_START()){var yyoffset=this.offset,next=this.consume_VARIABLE();return this.yytext.length>this.offset-yyoffset+2?(this.appendToken(next,this.offset-yyoffset+2),this.unput(this.offset-yyoffset+2),this.tok.T_ENCAPSED_AND_WHITESPACE):next}this.unput(1)}else if("{"===ch){if(ch=this.input(),"$"===ch)return this.begin("ST_IN_SCRIPTING"),this.yytext.length>2?(this.appendToken(this.tok.T_CURLY_OPEN,1),this.unput(2),this.tok.T_ENCAPSED_AND_WHITESPACE):(this.unput(1),this.tok.T_CURLY_OPEN);ch&&this.unput(1)}}ch=this.input()}return this.tok.T_ENCAPSED_AND_WHITESPACE}}},{}],98:[function(require,module,exports){module.exports={T_STRING:function(){var token=this.yytext.toLowerCase(),id=this.keywords[token];if(!id)if("yield"===token)this.tryMatch(" from")?(this.consume(5),id=this.tok.T_YIELD_FROM):id=this.tok.T_YIELD;else if(id=this.tok.T_STRING,"b"===token||"B"===token){var ch=this.input(1);if('"'===ch)return this.ST_DOUBLE_QUOTES();if("'"===ch)return this.T_CONSTANT_ENCAPSED_STRING();ch&&this.unput(1)}return id; +},consume_TOKEN:function(){var ch=this._input[this.offset-1],fn=this.tokenTerminals[ch];return fn?fn.apply(this,[]):this.yytext},tokenTerminals:{$:function(){return this.offset++,this.is_LABEL_START()?(this.offset--,this.consume_LABEL(),this.tok.T_VARIABLE):(this.offset--,"$")},"-":function(){var nchar=this._input[this.offset];return">"===nchar?(this.begin("ST_LOOKING_FOR_PROPERTY").input(),this.tok.T_OBJECT_OPERATOR):"-"===nchar?(this.input(),this.tok.T_DEC):"="===nchar?(this.input(),this.tok.T_MINUS_EQUAL):"-"},"\\":function(){return this.tok.T_NS_SEPARATOR},"/":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_DIV_EQUAL):"/"},":":function(){return":"===this._input[this.offset]?(this.input(),this.tok.T_DOUBLE_COLON):":"},"(":function(){var initial=this.offset;if(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),this.is_LABEL_START()){var yylen=this.yytext.length;this.consume_LABEL();var castToken=this.yytext.substring(yylen-1).toLowerCase(),castId=this.castKeywords[castToken]; +if(castId&&(this.input(),this.is_TABSPACE()&&this.consume_TABSPACE().input(),")"===this._input[this.offset-1]))return castId}return this.unput(this.offset-initial),"("},"=":function(){var nchar=this._input[this.offset];return">"===nchar?(this.input(),this.tok.T_DOUBLE_ARROW):"="===nchar?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_IDENTICAL):(this.input(),this.tok.T_IS_EQUAL):"="},"+":function(){var nchar=this._input[this.offset];return"+"===nchar?(this.input(),this.tok.T_INC):"="===nchar?(this.input(),this.tok.T_PLUS_EQUAL):"+"},"!":function(){return"="===this._input[this.offset]?"="===this._input[this.offset+1]?(this.consume(2),this.tok.T_IS_NOT_IDENTICAL):(this.input(),this.tok.T_IS_NOT_EQUAL):"!"},"?":function(){return"?"===this._input[this.offset]?(this.input(),this.tok.T_COALESCE):"?"},"<":function(){var nchar=this._input[this.offset];return"<"===nchar?(nchar=this._input[this.offset+1],"="===nchar?(this.consume(2),this.tok.T_SL_EQUAL):"<"===nchar&&this.is_HEREDOC()?this.tok.T_START_HEREDOC:(this.input(), +this.tok.T_SL)):"="===nchar?(this.input(),">"===this._input[this.offset]?(this.input(),this.tok.T_SPACESHIP):this.tok.T_IS_SMALLER_OR_EQUAL):">"===nchar?(this.input(),this.tok.T_IS_NOT_EQUAL):"<"},">":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_IS_GREATER_OR_EQUAL):">"===nchar?(nchar=this._input[this.offset+1],"="===nchar?(this.consume(2),this.tok.T_SR_EQUAL):(this.input(),this.tok.T_SR)):">"},"*":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_MUL_EQUAL):"*"===nchar?(this.input(),"="===this._input[this.offset]?(this.input(),this.tok.T_POW_EQUAL):this.tok.T_POW):"*"},".":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_CONCAT_EQUAL):"."===nchar&&"."===this._input[this.offset+1]?(this.consume(2),this.tok.T_ELLIPSIS):"."},"%":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_MOD_EQUAL):"%"},"&":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(), +this.tok.T_AND_EQUAL):"&"===nchar?(this.input(),this.tok.T_BOOLEAN_AND):"&"},"|":function(){var nchar=this._input[this.offset];return"="===nchar?(this.input(),this.tok.T_OR_EQUAL):"|"===nchar?(this.input(),this.tok.T_BOOLEAN_OR):"|"},"^":function(){return"="===this._input[this.offset]?(this.input(),this.tok.T_XOR_EQUAL):"^"}}}},{}],99:[function(require,module,exports){var tokens=";:,.\\[]()|^&+-/*=%!~$<>?@";module.exports={is_NUM:function(){var ch=this._input.charCodeAt(this.offset-1);return ch>47&&ch<58},is_LABEL:function(){var ch=this._input.charCodeAt(this.offset-1);return ch>96&&ch<123||ch>64&&ch<91||95===ch||ch>47&&ch<58||ch>126},is_LABEL_START:function(){var ch=this._input.charCodeAt(this.offset-1);return ch>96&&ch<123||ch>64&&ch<91||95===ch||ch>126},consume_LABEL:function(){for(;this.offset47&&ch<58||ch>64&&ch<71||ch>96&&ch<103}}},{}],100:[function(require,module,exports){function isNumber(n){return"."!=n&&","!=n&&!isNaN(parseFloat(n))&&isFinite(n)}var parser=function(lexer,ast){this.lexer=lexer,this.ast=ast,this.tok=lexer.tok,this.EOF=lexer.EOF,this.token=null,this.prev=null,this.debug=!1,this.extractDoc=!1,this.suppressErrors=!1,this.entries={VARIABLE:[this.tok.T_VARIABLE,"$","&",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_NAMESPACE,this.tok.T_STATIC],SCALAR:[this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C,'"','b"','B"',"-",this.tok.T_NS_SEPARATOR], +T_MAGIC_CONST:[this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C],T_MEMBER_FLAGS:[this.tok.T_PUBLIC,this.tok.T_PRIVATE,this.tok.T_PROTECTED,this.tok.T_STATIC,this.tok.T_ABSTRACT,this.tok.T_FINAL],EOS:[";",this.tok.T_CLOSE_TAG,this.EOF,this.tok.T_INLINE_HTML],EXPR:["@","-","+","!","~","(","`",this.tok.T_LIST,this.tok.T_CLONE,this.tok.T_INC,this.tok.T_DEC,this.tok.T_NEW,this.tok.T_ISSET,this.tok.T_EMPTY,this.tok.T_INCLUDE,this.tok.T_INCLUDE_ONCE,this.tok.T_REQUIRE,this.tok.T_REQUIRE_ONCE,this.tok.T_EVAL,this.tok.T_INT_CAST,this.tok.T_DOUBLE_CAST,this.tok.T_STRING_CAST,this.tok.T_ARRAY_CAST,this.tok.T_OBJECT_CAST,this.tok.T_BOOL_CAST,this.tok.T_UNSET_CAST,this.tok.T_EXIT,this.tok.T_PRINT,this.tok.T_YIELD,this.tok.T_STATIC,this.tok.T_FUNCTION,this.tok.T_VARIABLE,"$",this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_STRING,this.tok.T_CONSTANT_ENCAPSED_STRING,this.tok.T_START_HEREDOC,this.tok.T_LNUMBER,this.tok.T_DNUMBER,this.tok.T_ARRAY,"[",this.tok.T_CLASS_C,this.tok.T_TRAIT_C,this.tok.T_FUNC_C,this.tok.T_METHOD_C,this.tok.T_LINE,this.tok.T_FILE,this.tok.T_DIR,this.tok.T_NS_C] }};parser.prototype.getTokenName=function(token){return isNumber(token)?token==this.EOF?"the end of file (EOF)":this.lexer.engine.tokens.values[token]:"'"+token+"'"},parser.prototype.parse=function(code,filename){this._errors=[],this.filename=filename||"eval",this.currentNamespace=[""],this.lexer.setInput(code),this.lexer.comment_tokens=this.extractDoc,this.length=this.lexer._input.length,this.innerList=!1;var program=this.ast.prepare("program",this),childs=[];for(this.nextWithComments();this.token!=this.EOF;){var node=this.read_start();null!==node&&void 0!==node&&(Array.isArray(node)?childs=childs.concat(node):childs.push(node))}return program(childs,this._errors)},parser.prototype.raiseError=function(message,msgExpect,expect,token){if(message+=" on line "+this.lexer.yylloc.first_line,!this.suppressErrors){var err=new SyntaxError(message,this.filename,this.lexer.yylloc.first_line);throw err.lineNumber=this.lexer.yylloc.first_line,err.fileName=this.filename,err.columnNumber=this.lexer.yylloc.first_column,err}var node=this.ast.prepare("error",this)(message,token,this.lexer.yylloc.first_line,expect); -return this._errors.push(node),node},parser.prototype.error=function(expect){var msg="Parse Error : syntax error";if(token=this.getTokenName(this.token),this.token!==this.EOF){if(isNumber(this.token)){var symbol=this.text();symbol.length>10&&(symbol=symbol.substring(0,7)+"..."),token="'"+symbol+"' ("+token+")"}msg+=", unexpected "+token}var msgExpect="";return expect&&!Array.isArray(expect)&&((isNumber(expect)||1===expect.length)&&(msgExpect=", expecting "+this.getTokenName(expect)),msg+=msgExpect),this.token!==this.EOF,this.raiseError(msg,msgExpect,expect,token)},parser.prototype.node=function(name){return this.ast.prepare(name,this)},parser.prototype.expectEndOfStatement=function(){if(";"===this.token)this.nextWithComments(),this.token===this.tok.T_CLOSE_TAG&&this.nextWithComments();else if(this.token===this.tok.T_CLOSE_TAG)this.nextWithComments();else if(this.token!==this.tok.T_INLINE_HTML&&this.token!==this.EOF)return this.error(";"),!1;return!0};var ignoreStack=["parser.next","parser.nextWithComments"];parser.prototype.showlog=function(){ -for(var line,stack=(new Error).stack.split("\n"),offset=2;offset"+this.lexer.yytext+"< @-->"+line),this},parser.prototype.expect=function(token){if(Array.isArray(token)){if(token.indexOf(this.token)===-1)return this.error(token),!1}else if(this.token!=token)return this.error(token),!1;return!0},parser.prototype.text=function(){return this.lexer.yytext},parser.prototype.next=function(){return this.debug?(this.showlog(),this.debug=!1,this.nextWithComments().ignoreComments(),this.debug=!0):this.nextWithComments().ignoreComments(),this},parser.prototype.ignoreComments=function(){for(this.debug&&this.showlog();this.token===this.tok.T_COMMENT||this.token===this.tok.T_DOC_COMMENT;)this.nextWithComments();return this},parser.prototype.nextWithComments=function(){ -return this.prev=[this.lexer.yylloc.first_line,this.lexer.yylloc.first_column,this.lexer.offset],this.token=this.lexer.lex()||this.EOF,this.debug&&this.showlog(),this},parser.prototype.is=function(type){return Array.isArray(type)?type.indexOf(this.token)!==-1:this.entries[type].indexOf(this.token)!=-1},[require("./parser/array.js"),require("./parser/class.js"),require("./parser/comment.js"),require("./parser/expr.js"),require("./parser/function.js"),require("./parser/if.js"),require("./parser/loops.js"),require("./parser/main.js"),require("./parser/namespace.js"),require("./parser/scalar.js"),require("./parser/statement.js"),require("./parser/switch.js"),require("./parser/try.js"),require("./parser/utils.js"),require("./parser/variable.js")].forEach(function(ext){for(var k in ext)parser.prototype[k]=ext[k]}),module.exports=parser},{"./parser/array.js":102,"./parser/class.js":103,"./parser/comment.js":104,"./parser/expr.js":105,"./parser/function.js":106,"./parser/if.js":107,"./parser/loops.js":108,"./parser/main.js":109, -"./parser/namespace.js":110,"./parser/scalar.js":111,"./parser/statement.js":112,"./parser/switch.js":113,"./parser/try.js":114,"./parser/utils.js":115,"./parser/variable.js":116}],102:[function(require,module,exports){var ArrayExpr="array",ArrayEntry="entry";module.exports={read_array:function(){var expect=null,shortForm=!1,items=[],result=this.node(ArrayExpr);if(this.token===this.tok.T_ARRAY?(this.next().expect("("),expect=")"):(shortForm=!0,expect="]"),this.next().token!=expect)for(;this.token!=this.EOF&&(items.push(this.read_array_pair_list()),","==this.token)&&(this.next(),this.token!==expect););return this.expect(expect),this.next(),result(shortForm,items)},read_array_pair_list:function(){var result=this.node(ArrayEntry),key=null,value=null;if("&"===this.token)value=this.next().read_variable(!0,!1,!0);else{var expr=this.read_expr();this.token===this.tok.T_DOUBLE_ARROW?(key=expr,value="&"===this.next().token?this.next().read_variable(!0,!1,!0):this.read_expr()):value=expr}return result(key,value)},read_dim_offset:function(){ -return"]"!=this.token&&this.read_expr()}}},{}],103:[function(require,module,exports){module.exports={read_class:function(flag){var result=this.node("class");this.expect(this.tok.T_CLASS),this.next().expect(this.tok.T_STRING);var body,propName=this.text(),propExtends=null,propImplements=null;return this.next().token==this.tok.T_EXTENDS&&(propExtends=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(propImplements=this.next().read_name_list()),this.expect("{"),body=this.nextWithComments().read_class_body(),result(propName,propExtends,propImplements,body,flag)},read_class_scope:function(){var result=this.token;return result==this.tok.T_FINAL?(this.next(),[0,0,2]):result==this.tok.T_ABSTRACT?(this.next(),[0,0,1]):[0,0,0]},read_class_body:function(){for(var result=[];this.token!==this.EOF&&"}"!==this.token;)if(this.token!==this.tok.T_COMMENT)if(this.token!==this.tok.T_DOC_COMMENT)if(this.token!==this.tok.T_USE){var flags=this.read_member_flags(!1);if(this.token!==this.tok.T_CONST)if(this.token===this.tok.T_VAR&&(this.next().expect(this.tok.T_VARIABLE), -flags[0]=flags[1]=0),this.token===this.tok.T_VARIABLE){var variables=this.read_variable_list(flags);this.expect(";"),this.nextWithComments(),result=result.concat(variables)}else this.token===this.tok.T_FUNCTION?result.push(this.read_function(!1,flags)):(this.error([this.tok.T_CONST,this.tok.T_VARIABLE,this.tok.T_FUNCTION]),this.next());else{var constants=this.read_constant_list(flags);this.expect(";"),this.nextWithComments(),result=result.concat(constants)}}else result=result.concat(this.next().read_trait_use_statement());else result.push(this.read_doc_comment());else result.push(this.read_comment());return this.expect("}"),this.nextWithComments(),result},read_variable_list:function(flags){return this.read_list(function read_variable_declaration(){var result=this.node("property");this.expect(this.tok.T_VARIABLE);var name=this.text();return this.next(),";"===this.token||","===this.token?result(name,null,flags):"="===this.token?result(name,this.next().read_expr(),flags):(this.expect([",",";","="]),result(name,null,flags)); -},",")},read_constant_list:function(flags){return this.expect(this.tok.T_CONST)&&this.next(),this.read_list(function read_constant_declaration(){var result=this.node("classconstant"),name=null,value=null;return this.expect(this.tok.T_STRING)&&(name=this.text(),this.next()),this.expect("=")&&(value=this.next().read_expr()),result(name,value,flags)},",")},read_member_flags:function(asInterface){var result=[-1,-1,-1];if(this.is("T_MEMBER_FLAGS")){var idx=0,val=0;do{switch(this.token){case this.tok.T_PUBLIC:idx=0,val=0;break;case this.tok.T_PROTECTED:idx=0,val=1;break;case this.tok.T_PRIVATE:idx=0,val=2;break;case this.tok.T_STATIC:idx=1,val=1;break;case this.tok.T_ABSTRACT:idx=2,val=1;break;case this.tok.T_FINAL:idx=2,val=2}asInterface&&(0==idx&&2==val?(this.expect([this.tok.T_PUBLIC,this.tok.T_PROTECTED]),val=-1):2==idx&&1==val&&(this.error(),val=-1)),result[idx]!==-1?this.error():val!==-1&&(result[idx]=val)}while(this.next().is("T_MEMBER_FLAGS"))}return result[0]==-1&&(result[0]=0),result[1]==-1&&(result[1]=0), +return this._errors.push(node),node},parser.prototype.error=function(expect){var msg="Parse Error : syntax error";if(token=this.getTokenName(this.token),this.token!==this.EOF){if(isNumber(this.token)){var symbol=this.text();symbol.length>10&&(symbol=symbol.substring(0,7)+"..."),token="'"+symbol+"' ("+token+")"}msg+=", unexpected "+token}var msgExpect="";return expect&&!Array.isArray(expect)&&((isNumber(expect)||1===expect.length)&&(msgExpect=", expecting "+this.getTokenName(expect)),msg+=msgExpect),this.token!==this.EOF,this.raiseError(msg,msgExpect,expect,token)},parser.prototype.node=function(name){return this.ast.prepare(name,this)},parser.prototype.expectEndOfStatement=function(){if(";"===this.token)this.nextWithComments(),this.token===this.tok.T_CLOSE_TAG&&this.nextWithComments();else if(this.token===this.tok.T_CLOSE_TAG)this.nextWithComments();else if(this.token!==this.tok.T_INLINE_HTML&&this.token!==this.EOF)return this.error(";"),!1;return!0};var ignoreStack=["parser.next","parser.ignoreComments","parser.nextWithComments"]; +parser.prototype.showlog=function(){for(var line,stack=(new Error).stack.split("\n"),offset=2;offset"+this.lexer.yytext+"< @-->"+line),this},parser.prototype.expect=function(token){if(Array.isArray(token)){if(token.indexOf(this.token)===-1)return this.error(token),!1}else if(this.token!=token)return this.error(token),!1;return!0},parser.prototype.text=function(){return this.lexer.yytext},parser.prototype.next=function(){return this.debug?(this.showlog(),this.debug=!1,this.nextWithComments().ignoreComments(),this.debug=!0):this.nextWithComments().ignoreComments(),this},parser.prototype.ignoreComments=function(){for(this.debug&&this.showlog();this.token===this.tok.T_COMMENT||this.token===this.tok.T_DOC_COMMENT;)this.nextWithComments(); +return this},parser.prototype.nextWithComments=function(){return this.prev=[this.lexer.yylloc.first_line,this.lexer.yylloc.first_column,this.lexer.offset],this.token=this.lexer.lex()||this.EOF,this.debug&&this.showlog(),this},parser.prototype.is=function(type){return Array.isArray(type)?type.indexOf(this.token)!==-1:this.entries[type].indexOf(this.token)!=-1},[require("./parser/array.js"),require("./parser/class.js"),require("./parser/comment.js"),require("./parser/expr.js"),require("./parser/function.js"),require("./parser/if.js"),require("./parser/loops.js"),require("./parser/main.js"),require("./parser/namespace.js"),require("./parser/scalar.js"),require("./parser/statement.js"),require("./parser/switch.js"),require("./parser/try.js"),require("./parser/utils.js"),require("./parser/variable.js")].forEach(function(ext){for(var k in ext)parser.prototype[k]=ext[k]}),module.exports=parser},{"./parser/array.js":101,"./parser/class.js":102,"./parser/comment.js":103,"./parser/expr.js":104,"./parser/function.js":105, +"./parser/if.js":106,"./parser/loops.js":107,"./parser/main.js":108,"./parser/namespace.js":109,"./parser/scalar.js":110,"./parser/statement.js":111,"./parser/switch.js":112,"./parser/try.js":113,"./parser/utils.js":114,"./parser/variable.js":115}],101:[function(require,module,exports){var ArrayExpr="array",ArrayEntry="entry";module.exports={read_array:function(){var expect=null,shortForm=!1,items=[],result=this.node(ArrayExpr);if(this.token===this.tok.T_ARRAY?(this.next().expect("("),expect=")"):(shortForm=!0,expect="]"),this.next().token!=expect)for(;this.token!=this.EOF&&(items.push(this.read_array_pair_list()),","==this.token)&&(this.next(),this.token!==expect););return this.expect(expect),this.next(),result(shortForm,items)},read_array_pair_list:function(){var result=this.node(ArrayEntry),key=null,value=null;if("&"===this.token)value=this.next().read_variable(!0,!1,!0);else{var expr=this.read_expr();this.token===this.tok.T_DOUBLE_ARROW?(key=expr,value="&"===this.next().token?this.next().read_variable(!0,!1,!0):this.read_expr()):value=expr; +}return result(key,value)},read_dim_offset:function(){return"]"!=this.token&&this.read_expr()}}},{}],102:[function(require,module,exports){module.exports={read_class:function(flag){var result=this.node("class");this.expect(this.tok.T_CLASS),this.next().expect(this.tok.T_STRING);var body,propName=this.text(),propExtends=null,propImplements=null;return this.next().token==this.tok.T_EXTENDS&&(propExtends=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(propImplements=this.next().read_name_list()),this.expect("{"),body=this.nextWithComments().read_class_body(),result(propName,propExtends,propImplements,body,flag)},read_class_scope:function(){var result=this.token;return result==this.tok.T_FINAL?(this.next(),[0,0,2]):result==this.tok.T_ABSTRACT?(this.next(),[0,0,1]):[0,0,0]},read_class_body:function(){for(var result=[];this.token!==this.EOF&&"}"!==this.token;)if(this.token!==this.tok.T_COMMENT)if(this.token!==this.tok.T_DOC_COMMENT)if(this.token!==this.tok.T_USE){var flags=this.read_member_flags(!1); +if(this.token!==this.tok.T_CONST)if(this.token===this.tok.T_VAR&&(this.next().expect(this.tok.T_VARIABLE),flags[0]=flags[1]=0),this.token===this.tok.T_VARIABLE){var variables=this.read_variable_list(flags);this.expect(";"),this.nextWithComments(),result=result.concat(variables)}else this.token===this.tok.T_FUNCTION?result.push(this.read_function(!1,flags)):(this.error([this.tok.T_CONST,this.tok.T_VARIABLE,this.tok.T_FUNCTION]),this.next());else{var constants=this.read_constant_list(flags);this.expect(";"),this.nextWithComments(),result=result.concat(constants)}}else result=result.concat(this.next().read_trait_use_statement());else result.push(this.read_doc_comment());else result.push(this.read_comment());return this.expect("}"),this.nextWithComments(),result},read_variable_list:function(flags){return this.read_list(function read_variable_declaration(){var result=this.node("property");this.expect(this.tok.T_VARIABLE);var name=this.text().substring(1);return this.next(),";"===this.token||","===this.token?result(name,null,flags):"="===this.token?result(name,this.next().read_expr(),flags):(this.expect([",",";","="]), +result(name,null,flags))},",")},read_constant_list:function(flags){return this.expect(this.tok.T_CONST)&&this.next(),this.read_list(function read_constant_declaration(){var result=this.node("classconstant"),name=null,value=null;return this.expect(this.tok.T_STRING)&&(name=this.text(),this.next()),this.expect("=")&&(value=this.next().read_expr()),result(name,value,flags)},",")},read_member_flags:function(asInterface){var result=[-1,-1,-1];if(this.is("T_MEMBER_FLAGS")){var idx=0,val=0;do{switch(this.token){case this.tok.T_PUBLIC:idx=0,val=0;break;case this.tok.T_PROTECTED:idx=0,val=1;break;case this.tok.T_PRIVATE:idx=0,val=2;break;case this.tok.T_STATIC:idx=1,val=1;break;case this.tok.T_ABSTRACT:idx=2,val=1;break;case this.tok.T_FINAL:idx=2,val=2}asInterface&&(0==idx&&2==val?(this.expect([this.tok.T_PUBLIC,this.tok.T_PROTECTED]),val=-1):2==idx&&1==val&&(this.error(),val=-1)),result[idx]!==-1?this.error():val!==-1&&(result[idx]=val)}while(this.next().is("T_MEMBER_FLAGS"))}return result[0]==-1&&(result[0]=0),result[1]==-1&&(result[1]=0), result[2]==-1&&(result[2]=0),result},read_interface:function(){var result=this.node("interface"),name=null,body=null,propExtends=null;return this.expect(this.tok.T_INTERFACE)&&this.next(),this.expect(this.tok.T_STRING)&&(name=this.text(),this.next()),this.token===this.tok.T_EXTENDS&&(propExtends=this.next().read_name_list()),this.expect("{")&&(body=this.next().read_interface_body()),result(name,propExtends,body)},read_interface_body:function(){for(var result=[];this.token!==this.EOF&&"}"!==this.token;)if(this.token!==this.tok.T_COMMENT)if(this.token!==this.tok.T_DOC_COMMENT){var flags=this.read_member_flags(!0);if(this.token==this.tok.T_CONST){var constants=this.read_constant_list(flags);this.expect(";")&&this.nextWithComments(),result=result.concat(constants)}else if(this.token===this.tok.T_FUNCTION){var method=this.read_function_declaration(2,flags);method.parseFlags(flags),result.push(method),this.expect(";")&&this.nextWithComments()}else this.error([this.tok.T_CONST,this.tok.T_FUNCTION]),this.next()}else result.push(this.read_doc_comment());else result.push(this.read_comment()); return this.expect("}")&&this.next(),result},read_trait:function(flag){var result=this.node("trait"),propName=null,propExtends=null,propImplements=null,body=null;return this.expect(this.tok.T_TRAIT)&&this.next(),this.expect(this.tok.T_STRING)&&(propName=this.text()),this.next().token==this.tok.T_EXTENDS&&(propExtends=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(propImplements=this.next().read_name_list()),this.expect("{")&&(body=this.next().read_class_body()),result(propName,propExtends,propImplements,body)},read_trait_use_statement:function(){for(var node=this.node("traituse"),traits=[this.read_namespace_name()],adaptations=null;","===this.token;)traits.push(this.next().read_namespace_name());if("{"===this.token){for(adaptations=[];this.next().token!==this.EOF&&"}"!==this.token;)adaptations.push(this.read_trait_use_alias()),this.expect(";");this.expect("}")&&this.nextWithComments()}else this.expect(";")&&this.nextWithComments();return node(traits,adaptations)},read_trait_use_alias:function(){ -var node=this.node(),trait=null,method=this.read_namespace_name();if(this.token===this.tok.T_DOUBLE_COLON?this.next().expect(this.tok.T_STRING)&&(trait=method,method=this.text(),this.next()):method=method.name,this.token===this.tok.T_INSTEADOF)return node("traitprecedence",trait,method,this.next().read_name_list());if(this.token===this.tok.T_AS){var flags=!1,alias=null;return this.next().is("T_MEMBER_FLAGS")&&(flags=this.read_member_flags()),this.token===this.tok.T_STRING?(alias=this.text(),this.next()):flags===!1&&this.expect(this.tok.T_STRING),node("traitalias",trait,method,alias,flags)}return this.expect([this.tok.T_AS,this.tok.T_INSTEADOF]),node("traitalias",trait,method,null,null)}}},{}],104:[function(require,module,exports){var docSplit=/^(\s*\*[ \t]*|[ \t]*)(.*)$/gm;module.exports={read_comment:function(){var result=this.node("doc"),lines=[];do{var line=this.text();"#"===line[0]?line=line.substring(1):(line=line.substring(2),"*/"===line.substring(line.length-2)&&(line=line.substring(0,line.length-2))),lines.push(line.trim()); -}while(this.nextWithComments().token===this.tok.T_COMMENT);return result(!1,lines)},read_doc_comment:function(){var result=this.node("doc"),text=this.text();text=text.substring(2,text.length-2);var lines=[];text=text.split(docSplit);for(var i=2;i>",expr,this.next().read_expr());if(this.token===this.tok.T_BOOLEAN_OR)return result("bin","||",expr,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_OR)return result("bin","or",expr,this.next().read_expr());if(this.token===this.tok.T_BOOLEAN_AND)return result("bin","&&",expr,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_AND)return result("bin","and",expr,this.next().read_expr());if(this.token===this.tok.T_LOGICAL_XOR)return result("bin","xor",expr,this.next().read_expr());if(this.token===this.tok.T_IS_IDENTICAL)return result("bin","===",expr,this.next().read_expr());if(this.token===this.tok.T_IS_NOT_IDENTICAL)return result("bin","!==",expr,this.next().read_expr());if(this.token===this.tok.T_IS_EQUAL)return result("bin","==",expr,this.next().read_expr()); if(this.token===this.tok.T_IS_NOT_EQUAL)return result("bin","!=",expr,this.next().read_expr());if("<"===this.token)return result("bin","<",expr,this.next().read_expr());if(">"===this.token)return result("bin",">",expr,this.next().read_expr());if(this.token===this.tok.T_IS_SMALLER_OR_EQUAL)return result("bin","<=",expr,this.next().read_expr());if(this.token===this.tok.T_IS_GREATER_OR_EQUAL)return result("bin",">=",expr,this.next().read_expr());if(this.token===this.tok.T_SPACESHIP)return result("bin","<=>",expr,this.next().read_expr());if(this.token===this.tok.T_INSTANCEOF)return result("bin","instanceof",expr,this.next().read_expr());if(this.token===this.tok.T_COALESCE)return result("bin","??",expr,this.next().read_expr());if("?"===this.token){var trueArg=null;return":"!==this.next().token&&(trueArg=this.read_expr()),this.expect(":")&&this.next(),result("retif",expr,trueArg,this.read_expr())}return expr},read_expr_item:function(){if("@"===this.token)return this.node("silent")(this.next().read_expr());if("+"===this.token)return this.node("unary")("+",this.next().read_expr()); -if("!"===this.token)return this.node("unary")("!",this.next().read_expr());if("~"===this.token)return this.node("unary")("~",this.next().read_expr());if("-"===this.token){var result=this.node();return this.next(),this.token===this.tok.T_LNUMBER||this.token===this.tok.T_DNUMBER?(result=result("number","-"+this.text()),this.next(),result):result("unary","-",this.read_expr())}if("("===this.token){var node=this.node("parenthesis"),expr=this.next().read_expr();return this.expect(")")&&this.next(),expr=node(expr),this.token===this.tok.T_OBJECT_OPERATOR?this.recursive_variable_chain_scan(expr,!1):this.token===this.tok.T_CURLY_OPEN||"["===this.token?this.read_dereferencable(expr):"("===this.token?this.node("call")(expr,this.read_function_argument_list()):expr}if("`"===this.token)return this.node("shell")(this.next().read_encapsed_string("`"));if(this.token===this.tok.T_LIST){var result=this.node("list"),assign=null,isInner=this.innerList;isInner||(assign=this.node("assign")),this.next().expect("(")&&this.next(),this.innerList||(this.innerList=!0); +if("!"===this.token)return this.node("unary")("!",this.next().read_expr());if("~"===this.token)return this.node("unary")("~",this.next().read_expr());if("-"===this.token){var result=this.node();return this.next(),this.token===this.tok.T_LNUMBER||this.token===this.tok.T_DNUMBER?(result=result("number","-"+this.text()),this.next(),result):result("unary","-",this.read_expr())}if("("===this.token){var node=this.node("parenthesis"),expr=this.next().read_expr();return this.expect(")")&&this.next(),expr=node(expr),this.token===this.tok.T_OBJECT_OPERATOR?this.recursive_variable_chain_scan(expr,!1):this.token===this.tok.T_CURLY_OPEN||"["===this.token?this.read_dereferencable(expr):"("===this.token?this.node("call")(expr,this.read_function_argument_list()):expr}if("`"===this.token)return this.next().read_encapsed_string("`");if(this.token===this.tok.T_LIST){var result=this.node("list"),assign=null,isInner=this.innerList;isInner||(assign=this.node("assign")),this.next().expect("(")&&this.next(),this.innerList||(this.innerList=!0); for(var assignList=this.read_assignment_list(),hasItem=!1,i=0;i>=");case this.tok.T_INC: -return this.next(),result("post","+",expr);case this.tok.T_DEC:return this.next(),result("post","-",expr)}}else if(this.is("SCALAR"))for(expr=this.read_scalar();this.token!==this.EOF;)if(this.token===this.tok.T_OBJECT_OPERATOR)expr=this.recursive_variable_chain_scan(expr,!1);else if(this.token===this.tok.T_CURLY_OPEN||"["===this.token)expr=this.read_dereferencable(expr);else{if("("!==this.token)return expr;expr=this.node("call")(expr,this.read_function_argument_list())}else this.error("EXPR"),this.next();return expr},read_new_expr:function(){var result=this.node("new");if(this.token===this.tok.T_CLASS){var what=this.node("class"),propExtends=null,propImplements=null,body=null;return this.next().token==this.tok.T_EXTENDS&&(propExtends=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(propImplements=this.next().read_name_list()),this.expect("{")&&(body=this.next().read_class_body()),result(what(null,propExtends,propImplements,body,[0,0,0]),[])}var name=this.read_class_name_reference(),args=[]; -return"("===this.token&&(args=this.read_function_argument_list()),result(name,args)},read_class_name_reference:function(){if(this.token===this.tok.T_NS_SEPARATOR||this.token===this.tok.T_STRING||this.token===this.tok.T_NAMESPACE){var result=this.read_namespace_name();return this.token===this.tok.T_DOUBLE_COLON&&(result=this.read_static_getter(result)),result}return this.is("VARIABLE")?this.read_variable(!0,!1,!1):void this.expect([this.tok.T_STRING,"VARIABLE"])},read_assignment_list:function(){return this.read_list(this.read_assignment_list_element,",")},read_assignment_list_element:function(){if(","===this.token||")"===this.token)return null;var result=this.read_expr_item();return this.token===this.tok.T_DOUBLE_ARROW&&(result=["key",result,this.next().read_expr_item()]),result}}},{}],106:[function(require,module,exports){module.exports={is_reference:function(){return"&"==this.token&&(this.next(),!0)},is_variadic:function(){return this.token===this.tok.T_ELLIPSIS&&(this.next(),!0)},read_function:function(closure,flag){ -var result=this.read_function_declaration(closure?1:flag?2:0);return flag&&1==flag[2]?(result.parseFlags(flag),this.expect(";")&&this.nextWithComments()):(this.expect("{")&&(result.body=this.read_code_block(!1)),flag&&result.parseFlags(flag)),result},read_function_declaration:function(type){var nodeName="function";1===type?nodeName="closure":2===type&&(nodeName="method");var result=this.node(nodeName);this.expect(this.tok.T_FUNCTION)&&this.next();var isRef=this.is_reference(),name=!1,use=[],returnType=null,nullable=!1;1!==type&&this.expect(this.tok.T_STRING)&&(name=this.text(),this.next()),this.expect("(")&&this.next();var params=this.read_parameter_list();return this.expect(")")&&this.next(),1===type&&this.token===this.tok.T_USE&&(this.next().expect("(")&&this.next(),use=this.read_list(this.read_lexical_var,","),this.expect(")")&&this.next()),":"===this.token&&("?"===this.next().token&&(nullable=!0,this.next()),returnType=this.read_type()),1===type?result(params,isRef,use,returnType,nullable):result(name,params,isRef,returnType,nullable); -},read_lexical_var:function(){var result=[!1,null];return"&"===this.token&&(result[0]=!0,this.next()),this.token===this.tok.T_VARIABLE?(result[1]=this.text(),this.next()):this.expect(["&",this.tok.T_VARIABLE]),result},read_parameter_list:function(){var result=[];if(")"!=this.token)for(;this.token!=this.EOF;){if(result.push(this.read_parameter()),","!=this.token){if(")"==this.token)break;this.error([",",")"]);break}this.next()}return result},read_parameter:function(){var node=this.node("parameter"),name=null,value=null,type=null,nullable=!1;"?"===this.token&&(this.next(),nullable=!0),type=this.read_type(),nullable&&!type&&this.raiseError("Expecting a type definition combined with nullable operator");var isRef=this.is_reference(),isVariadic=this.is_variadic();return this.expect(this.tok.T_VARIABLE)&&(name=this.text(),this.next()),"="==this.token&&(value=this.next().read_expr()),node(name,type,value,isRef,isVariadic,nullable)},read_function_argument_list:function(){var result=[],wasVariadic=!1;if(this.expect("(")&&this.next(), -")"!==this.token)for(;this.token!=this.EOF;){var argument=this.read_argument_list();if(result.push(argument),"variadic"===argument.kind?wasVariadic=!0:wasVariadic&&this.raiseError("Unexpected argument after a variadic argument"),","!==this.token)break;this.next()}return this.expect(")")&&this.next(),result},read_argument_list:function(){return this.token===this.tok.T_ELLIPSIS?this.node("variadic")(this.next().read_expr()):this.read_expr()},read_type:function(){var result=this.node("identifier");switch(this.token){case this.tok.T_ARRAY:return this.next(),result(["","array"],!1);case this.tok.T_NAMESPACE:case this.tok.T_NS_SEPARATOR:case this.tok.T_STRING:return this.read_namespace_name();case this.tok.T_CALLABLE:return this.next(),result(["","callable"],!1);default:return null}}}},{}],107:[function(require,module,exports){module.exports={read_if:function(){var result=this.node("if"),body=null,alternate=null,shortForm=!1,test=null;if(test=this.read_if_expr(),":"===this.token){shortForm=!0,this.next(),body=this.node("block"); -for(var items=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.ignoreComments(),this.token===this.tok.T_ELSEIF){alternate=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){alternate=this.next().read_else_short();break}items.push(this.read_inner_statement())}body=body(null,items),this.ignoreComments().expect(this.tok.T_ENDIF)&&this.next(),this.expectEndOfStatement()}else body=this.read_statement(),this.ignoreComments(),this.token===this.tok.T_ELSEIF?alternate=this.next().read_if():this.token===this.tok.T_ELSE&&(alternate=this.next().read_statement());return result(test,body,alternate,shortForm)},read_if_expr:function(){this.expect("(")&&this.next();var result=this.read_expr();return this.expect(")")&&this.next(),result},read_elseif_short:function(){var result=this.node("if"),alternate=null,test=null,body=null,items=[];for(test=this.read_if_expr(),this.expect(":")&&this.next(),body=this.node("block");this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.token===this.tok.T_ELSEIF){ -alternate=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){alternate=this.next().read_else_short();break}items.push(this.read_inner_statement())}return body=body(null,items),result(test,body,alternate,!0)},read_else_short:function(){this.expect(":")&&this.next();for(var body=this.node("block"),items=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;)items.push(this.read_inner_statement());return body(null,items)}}},{}],108:[function(require,module,exports){"use strict";module.exports={read_while:function(){var result=this.node("while"),test=null,body=null,shortForm=!1;return this.expect("(")&&this.next(),test=this.read_expr(),this.expect(")")&&this.next(),":"===this.token?(shortForm=!0,body=this.read_short_form(this.tok.T_ENDWHILE)):body=this.read_statement(),result(test,body,shortForm)},read_do:function(){var result=this.node("do"),test=null,body=null;return body=this.read_statement(),this.expect(this.tok.T_WHILE)&&(this.next().expect("(")&&this.next(),test=this.read_expr(),this.expect(")")&&this.next(), -this.expect(";")&&this.next()),result(test,body)},read_for:function(){var result=this.node("for"),init=[],test=[],increment=[],body=null,shortForm=!1;return this.expect("(")&&this.next(),";"!==this.token?(init=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),";"!==this.token?(test=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),")"!==this.token?(increment=this.read_list(this.read_expr,","),this.expect(")")&&this.next()):this.next(),":"===this.token?(shortForm=!0,body=this.read_short_form(this.tok.T_ENDFOR)):body=this.read_statement(),result(init,test,increment,body,shortForm)},read_foreach:function(){var result=this.node("foreach"),source=null,key=null,value=null,body=null,shortForm=!1;return this.expect("(")&&this.next(),source=this.read_expr(),this.expect(this.tok.T_AS)&&(this.next(),value=this.read_foreach_variable(),this.token===this.tok.T_DOUBLE_ARROW&&(key=value,value=this.next().read_foreach_variable())),this.expect(")")&&this.next(),":"===this.token?(shortForm=!0, -body=this.read_short_form(this.tok.T_ENDFOREACH)):body=this.read_statement(),result(source,key,value,body,shortForm)},read_foreach_variable:function(){if(this.token===this.tok.T_LIST){var result=this.node("list");this.next().expect("(")&&this.next();var assignList=this.read_assignment_list();return this.expect(")")&&this.next(),result(assignList)}return"["===this.token||this.token===this.tok.T_ARRAY?this.read_array():this.read_variable(!1,!1,!1)}}},{}],109:[function(require,module,exports){module.exports={read_start:function(){return this.token==this.tok.T_NAMESPACE?this.read_namespace():this.read_top_statement()}}},{}],110:[function(require,module,exports){"use strict";module.exports={read_namespace:function(){var result=this.node("namespace");if(this.expect(this.tok.T_NAMESPACE)&&this.next(),"{"==this.token)return this.currentNamespace=[""],result([""],this.read_code_block(!0),!0);var name=this.read_namespace_name();if(";"==this.token){this.currentNamespace=name;var body=this.nextWithComments().read_top_statements(); -return this.expect(this.EOF),result(name,body)}if("{"==this.token)return this.currentNamespace=name,result(name,this.read_code_block(!0),!0);if("("===this.token)return name.resolution=this.ast.identifier.RELATIVE_NAME,name.name=name.name.substring(1),this.node("call")(name,this.read_function_argument_list());this.error(["{",";"]),this.currentNamespace=name;var body=this.read_top_statements();return this.expect(this.EOF),result(name,body)},read_namespace_name:function(){var result=this.node("identifier"),relative=!1;return this.token===this.tok.T_NAMESPACE&&(this.next().expect(this.tok.T_NS_SEPARATOR)&&this.next(),relative=!0),result(this.read_list(this.tok.T_STRING,this.tok.T_NS_SEPARATOR,!0),relative)},read_use_statement:function(){var result=this.node("usegroup"),type=null,items=[],name=null;return this.expect(this.tok.T_USE)&&this.next(),type=this.read_use_type(),items.push(this.read_use_declaration(!1)),","===this.token?items=items.concat(this.next().read_use_declarations(!1)):"{"===this.token&&(name=items[0].name, -items=this.next().read_use_declarations(null===type),this.expect("}")&&this.next()),this.expect(";")&&this.nextWithComments(),result(name,type,items)},read_use_declaration:function(typed){var result=this.node("useitem"),type=null;typed&&(type=this.read_use_type());var name=this.read_namespace_name(),alias=this.read_use_alias();return result(name,alias,type)},read_use_declarations:function(typed){for(var result=[this.read_use_declaration(typed)];","===this.token;)result.push(this.next().read_use_declaration(typed));return result},read_use_alias:function(){var result=null;return this.token===this.tok.T_AS&&this.next().expect(this.tok.T_STRING)&&(result=this.text(),this.next()),result},read_use_type:function(){return this.token===this.tok.T_FUNCTION?(this.next(),this.ast.useitem.TYPE_FUNCTION):this.token===this.tok.T_CONST?(this.next(),this.ast.useitem.TYPE_CONST):null}}},{}],111:[function(require,module,exports){var specialChar={"\\r":"\r","\\n":"\n","\\t":"\t","\\v":String.fromCharCode(11),"\\e":String.fromCharCode(27), -"\\f":String.fromCharCode(12),"\\\\":"\\","\\$":"$",'\\"':'"',"\\'":"'"};module.exports={resolve_special_chars:function(text){return text.replace(/\\[rntvef"'\\\$]/g,function(seq){return specialChar[seq]})},read_scalar:function(){if(this.is("T_MAGIC_CONST"))return this.get_magic_constant();switch(this.token){case this.tok.T_CONSTANT_ENCAPSED_STRING:var value=this.node("string"),text=this.text(),isDoubleQuote='"'===text[0];return text=text.substring(1,text.length-1),this.next(),value=value(isDoubleQuote,this.resolve_special_chars(text)),this.token===this.tok.T_DOUBLE_COLON?this.read_static_getter(value):value;case this.tok.T_START_HEREDOC:if("ST_NOWDOC"===this.lexer.curCondition){var node=this.node("nowdoc"),value=this.next().text(),lastCh=value[value.length-1];return"\n"===lastCh?value="\r"===value[value.length-2]?value.substring(0,value.length-2):value.substring(0,value.length-1):"\r"===lastCh&&(value=value.substring(0,value.length-1)),this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE)&&this.next(),node=node(value,this.lexer.heredoc_label), -this.expect(this.tok.T_END_HEREDOC)&&this.next(),node}return this.next().read_encapsed_string(this.tok.T_END_HEREDOC);case'"':return this.next().read_encapsed_string('"');case'b"':case'B"':var node=this.node("cast"),what=this.next().read_encapsed_string('"');return node("binary",what);case this.tok.T_LNUMBER:case this.tok.T_DNUMBER:var result=this.node("number"),value=this.text();return this.next(),result=result(value);case this.tok.T_ARRAY:case"[":return this.read_array();default:var err=this.error("SCALAR");return this.next(),err}},read_dereferencable:function(expr){var result,node=this.node("offsetlookup");if("["===this.token){var offset=this.next().read_expr();this.expect("]")&&this.next(),result=node(expr,offset)}else if(this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES){var offset=this.read_encapsed_string_item();result=node(expr,offset)}return result},read_encapsed_string_item:function(){var result=this.node();if(this.token===this.tok.T_ENCAPSED_AND_WHITESPACE){var text=this.text();this.next(),result=result("string",!1,this.resolve_special_chars(text)); -}else if(this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES){var name=null;if(this.next().token===this.tok.T_STRING_VARNAME){var varName=this.text().substring(1);if(name=this.node("variable"),this.next(),name=name(varName,!1),"["===this.token){var node=this.node("offsetlookup"),offset=this.next().read_expr();this.expect("]")&&this.next(),name=node(name,offset)}}else name=this.read_expr();this.expect("}")&&this.next(),result=result("variable",name,!1)}else if(this.token===this.tok.T_CURLY_OPEN)result=this.next().read_variable(!1,!1,!1),this.expect("}")&&this.next();else if(this.token===this.tok.T_VARIABLE){if(result=this.read_simple_variable(!1),"["===this.token){var node=this.node("offsetlookup"),offset=this.next().read_encaps_var_offset();this.expect("]")&&this.next(),result=node(result,offset)}if(this.token===this.tok.T_OBJECT_OPERATOR){var node=this.node("propertylookup"),what=this.node("constref");this.next().expect(this.tok.T_STRING);var name=this.text();this.next(),result=node(result,what(name))}}else{this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE); -var value=this.text();this.next(),result=result("string",!1,value)}return result},read_encapsed_string:function(expect){var node=this.node("encapsed"),value=[],type=null;for(type="`"===expect?this.ast.encapsed.TYPE_SHELL:'"'===expect?this.ast.encapsed.TYPE_STRING:this.ast.encapsed.TYPE_HEREDOC;this.token!==expect&&this.token!==this.EOF;)value.push(this.read_encapsed_string_item());return this.expect(expect)&&this.next(),node=node(value,type),expect===this.tok.T_END_HEREDOC&&(node.label=this.lexer.heredoc_label),node},get_magic_constant:function(){var result=this.node("magic"),name=this.text();return this.next(),result(name)}}},{}],112:[function(require,module,exports){module.exports={read_top_statements:function(){for(var result=[];this.token!==this.EOF&&"}"!==this.token;){var statement=this.read_top_statement();statement&&(Array.isArray(statement)?result=result.concat(statement):result.push(statement))}return result},read_top_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1); -case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var flag=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(flag):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]);case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_USE:return this.read_use_statement();case this.tok.T_CONST:return this.next().read_const_list();case this.tok.T_NAMESPACE:return this.read_namespace();case this.tok.T_HALT_COMPILER:var result=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),this.expect(";"),this.lexer.done=!0,result(this.lexer._input.substring(this.lexer.offset));default:return this.read_statement()}},read_inner_statements:function(){for(var result=[];this.token!=this.EOF&&"}"!==this.token;){var statement=this.read_inner_statement();statement&&(Array.isArray(statement)?result=result.concat(statement):result.push(statement))}return result},read_const_list:function(){ -var result=this.read_list(function(){this.expect(this.tok.T_STRING);var result=this.node("constant"),name=this.text();return this.next().expect("=")?result(name,this.next().read_expr()):result(name,null)},",",!1);return this.expectEndOfStatement(),result},read_declare_list:function(){for(var result={};this.token!=this.EOF&&")"!==this.token;){this.expect(this.tok.T_STRING);var name=this.text().toLowerCase();if(this.next().expect("=")?result[name]=this.next().read_expr():result[name]=null,","!==this.token)break;this.next()}return result},read_inner_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var flag=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(flag):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]);case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_HALT_COMPILER:this.raiseError("__HALT_COMPILER() can only be used from the outermost scope"); -var node=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),node=node(this.lexer._input.substring(this.lexer.offset)),this.expect(";")&&this.next(),node;default:return this.read_statement()}},read_statement:function(){switch(this.token){case"{":return this.read_code_block(!1);case this.tok.T_IF:return this.next().read_if();case this.tok.T_SWITCH:return this.read_switch();case this.tok.T_FOR:return this.next().read_for();case this.tok.T_FOREACH:return this.next().read_foreach();case this.tok.T_WHILE:return this.next().read_while();case this.tok.T_DO:return this.next().read_do();case this.tok.T_COMMENT:return this.read_comment();case this.tok.T_DOC_COMMENT:return this.read_doc_comment();case this.tok.T_RETURN:var result=this.node("return"),expr=null;return this.next().is("EOS")||(expr=this.read_expr()),this.expectEndOfStatement(),result(expr);case this.tok.T_BREAK:case this.tok.T_CONTINUE:var result=this.node(this.token===this.tok.T_CONTINUE?"continue":"break"),level=null; -return this.next(),";"!==this.token&&this.token!==this.tok.T_CLOSE_TAG&&(level=this.read_expr()),this.expectEndOfStatement(),result(level);case this.tok.T_GLOBAL:var result=this.node("global"),items=this.next().read_list(this.read_simple_variable,",");return this.expectEndOfStatement(),result(items);case this.tok.T_STATIC:var current=[this.token,this.lexer.getState()],result=this.node("static");if(this.next().token===this.tok.T_DOUBLE_COLON){this.lexer.tokens.push(current);var expr=this.next().read_expr();return this.expect(";")&&this.nextWithComments(),expr}var items=this.read_variable_declarations();return this.expectEndOfStatement(),result(items);case this.tok.T_ECHO:var result=this.node("echo"),args=this.next().read_list(this.read_expr,",");return this.expectEndOfStatement(),result(args);case this.tok.T_INLINE_HTML:var result=this.node("inline")(this.text());return this.next(),result;case this.tok.T_UNSET:var result=this.node("unset");this.next().expect("(")&&this.next();var items=this.read_list(this.read_variable,","); -return this.expect(")")&&this.next(),this.expect(";")&&this.nextWithComments(),result(items);case this.tok.T_DECLARE:var what,mode,result=this.node("declare"),body=[];if(this.next().expect("(")&&this.next(),what=this.read_declare_list(),this.expect(")")&&this.next(),":"===this.token){for(this.nextWithComments();this.token!=this.EOF&&this.token!==this.tok.T_ENDDECLARE;)body.push(this.read_top_statement());this.expect(this.tok.T_ENDDECLARE)&&this.next(),this.expectEndOfStatement(),mode=this.ast.declare.MODE_SHORT}else if("{"===this.token){for(this.nextWithComments();this.token!=this.EOF&&"}"!==this.token;)body.push(this.read_top_statement());this.expect("}")&&this.next(),mode=this.ast.declare.MODE_BLOCK}else{for(this.expect(";")&&this.next();this.token!=this.EOF&&this.token!==this.tok.T_DECLARE;)body.push(this.read_top_statement());mode=this.ast.declare.MODE_NONE}return result(what,body,mode);case this.tok.T_TRY:return this.read_try();case this.tok.T_THROW:var result=this.node("throw"),expr=this.next().read_expr(); -return this.expectEndOfStatement(),result(expr);case";":case this.tok.T_CLOSE_TAG:return this.next(),null;case this.tok.T_STRING:var current=[this.token,this.lexer.getState()],label=this.text();if(":"===this.next().token){var result=this.node("label");return this.next(),result(label)}this.lexer.tokens.push(current);var expr=this.next().read_expr();return this.expect([";",this.tok.T_CLOSE_TAG])&&this.nextWithComments(),expr;case this.tok.T_GOTO:var result=this.node("goto"),label=null;return this.next().expect(this.tok.T_STRING)&&(label=this.text(),this.next().expectEndOfStatement()),result(label);default:var expr=this.read_expr();return this.expectEndOfStatement(),expr}},read_code_block:function(top){var result=this.node("block");this.expect("{")&&this.nextWithComments();var body=top?this.read_top_statements():this.read_inner_statements();return this.expect("}")&&this.nextWithComments(),result(null,body)}}},{}],113:[function(require,module,exports){"use strict";module.exports={read_switch:function(){this.expect(this.tok.T_SWITCH)&&this.next(); -var test,body,shortForm,result=this.node("switch");return this.expect("(")&&this.next(),test=this.read_expr(),this.expect(")")&&this.next(),shortForm=":"===this.token,body=this.read_switch_case_list(),result(test,body,shortForm)},read_switch_case_list:function(){var expect=null,result=this.node("block"),items=[];for("{"===this.token?expect="}":":"===this.token?expect=this.tok.T_ENDSWITCH:this.expect(["{",":"]),";"===this.next().token&&this.next(),this.token===this.tok.T_CLOSE_TAG&&this.next();this.token!==this.EOF&&this.token!==expect;)items.push(this.read_case_list(expect));return this.expect(expect)&&this.next(),expect===this.tok.T_ENDSWITCH&&this.expectEndOfStatement(),result(null,items)},read_case_list:function(stopToken){var result=this.node("case"),test=null,body=null,items=[];for(this.token===this.tok.T_CASE?test=this.next().read_expr():this.token===this.tok.T_DEFAULT?this.next():this.expect([this.tok.T_CASE,this.tok.T_DEFAULT]),this.expect([":",";"])&&this.next(),body=this.node("block");this.token!=this.EOF&&this.token!==stopToken&&this.token!==this.tok.T_CASE&&this.token!==this.tok.T_DEFAULT;)items.push(this.read_inner_statement()); -return result(test,items.length>0?body(null,items):null)}}},{}],114:[function(require,module,exports){module.exports={read_try:function(){this.expect(this.tok.T_TRY);var body,result=this.node("try"),always=null,catches=[];for(body=this.nextWithComments().read_statement(),this.ignoreComments();this.token===this.tok.T_CATCH;){var item=this.node("catch"),what=[],variable=null;this.next().expect("(")&&this.next(),what=this.read_list(this.read_namespace_name,"|",!1),variable=this.read_variable(!0,!1,!1),this.expect(")"),catches.push(item(this.next().read_statement(),what,variable)),this.ignoreComments()}return this.token===this.tok.T_FINALLY&&(always=this.nextWithComments().read_statement()),result(body,catches,always)}}},{}],115:[function(require,module,exports){"use strict";module.exports={read_short_form:function(token){var body=this.node("block"),items=[];for(this.expect(":")&&this.next();this.token!=this.EOF&&this.token!==token;)items.push(this.read_inner_statement());return this.expect(token)&&this.next(),this.expectEndOfStatement(), -body(null,items)},read_list:function(item,separator,preserveFirstSeparator){var result=[];if(this.token==separator&&(preserveFirstSeparator&&result.push(""),this.next()),"function"==typeof item){do if(result.push(item.apply(this,[])),this.token!=separator)break;while(this.next().token!=this.EOF)}else{if(!this.expect(item))return[];for(result.push(this.text());this.next().token!=this.EOF&&this.token==separator&&this.next().token==item;)result.push(this.text())}return result},read_name_list:function(){return this.read_list(this.read_namespace_name,",",!1)},read_variable_declarations:function(){return this.read_list(function(){var node=this.node("assign"),variable=this.node("variable");if(this.expect(this.tok.T_VARIABLE)){var name=this.text().substring(1);this.next(),variable=variable(name,!1)}else variable=variable("#ERR",!1);return"="===this.token?node(variable,this.next().read_expr()):variable},",")}}},{}],116:[function(require,module,exports){"use strict";module.exports={read_variable:function(read_only,encapsed,byref){ -var result;if(byref||"&"!==this.token||(byref=!0,this.next()),this.is([this.tok.T_VARIABLE,"$"]))result=this.read_reference_variable(encapsed,byref);else if(this.is([this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_NAMESPACE])){result=this.node();var name=this.read_namespace_name();if(this.token!=this.tok.T_DOUBLE_COLON&&"("!=this.token){var literal=name.name.toLowerCase();result="true"===literal?result("boolean",!0):"false"===literal?result("boolean",!1):result("constref",name)}else result=name}else this.token===this.tok.T_STATIC?(result=this.node("constref"),this.next(),result=result("static")):this.expect("VARIABLE");return this.token===this.tok.T_DOUBLE_COLON&&(result=this.read_static_getter(result,encapsed)),this.recursive_variable_chain_scan(result,read_only,encapsed)},read_static_getter:function(what,encapsed){var result=this.node("staticlookup"),offset=null;if(this.next().is([this.tok.T_VARIABLE,"$"]))offset=this.read_reference_variable(encapsed,!1);else if(this.token===this.tok.T_STRING||this.token===this.tok.T_CLASS){ -offset=this.node("constref");var name=this.text();this.next(),offset=offset(name)}else{this.error([this.tok.T_VARIABLE,this.tok.T_STRING]),offset=this.node("constref");var name=this.text();this.next(),offset=offset(name)}return result(what,offset)},recursive_variable_chain_scan:function(result,read_only,encapsed){recursive_scan_loop:for(;this.token!=this.EOF;)switch(this.token){case"(":if(read_only)return result;result=this.node("call")(result,this.read_function_argument_list());break;case"[":var node=this.node("offsetlookup");this.next();var offset=!1;encapsed?(offset=this.read_encaps_var_offset(),this.expect("]")&&this.next()):"]"!==this.token?(offset=this.read_expr(),this.expect("]")&&this.next()):this.next(),result=node(result,offset);break;case this.tok.T_OBJECT_OPERATOR:var node=this.node("propertylookup"),what=null;switch(this.next().token){case this.tok.T_STRING:what=this.node("constref");var name=this.text();this.next(),what=what(name),this.token===this.tok.T_VARIABLE?(name=this.text().substring(1),this.next(), -what=["bin",".",what,["var",name]]):"{"===this.token&&(what=["bin",".",what,this.next().read_expr()],this.expect("}")&&this.next());break;case this.tok.T_VARIABLE:what=this.node("variable");var name=this.text().substring(1);this.next(),what=what(name,!1);break;case"$":this.next().expect(["{",this.tok.T_VARIABLE]),"{"===this.token?(what=this.next().read_expr(),this.expect("}")&&this.next()):what=this.read_expr();break;case"{":what=this.next().read_expr(),this.expect("}")&&this.next();break;default:this.error([this.tok.T_STRING,this.tok.T_VARIABLE]),what=this.node("constref");var name=this.text();this.next(),what=what(name)}result=node(result,what);break;default:break recursive_scan_loop}return result},read_encaps_var_offset:function(){var offset=this.node();if(this.token===this.tok.T_STRING){var text=this.text(),isDblQuote='"'===text[0];text=text.substring(1,text.length-1),this.next(),offset=offset("string",isDblQuote,this.resolve_special_chars(text))}else if(this.token===this.tok.T_NUM_STRING){var num=this.text(); -this.next(),offset=offset("number",num)}else if(this.token===this.tok.T_VARIABLE){var name=this.text().substring(1);this.next(),offset=offset("variable",name,!1)}else{this.expect([this.tok.T_STRING,this.tok.T_NUM_STRING,this.tok.T_VARIABLE]);var text=this.text();this.next(),offset=offset("string",!1,text)}return offset},read_reference_variable:function(encapsed,byref){for(var result=this.read_simple_variable(byref);this.token!=this.EOF;){var node=this.node();if("["==this.token){var offset=null;offset=encapsed?this.next().read_encaps_var_offset():"]"===this.next().token?null:this.read_dim_offset(),this.expect("]")&&this.next(),result=node("offsetlookup",result,offset)}else{if("{"!=this.token||encapsed)break;var offset=this.next().read_expr();this.expect("}")&&this.next(),result=node("offsetlookup",result,offset)}}return result},read_simple_variable:function(byref){var result=this.node("variable");if(this.expect([this.tok.T_VARIABLE,"$"])&&this.token===this.tok.T_VARIABLE){var name=this.text().substring(1);this.next(), -result=result(name,byref)}else switch("$"===this.token&&this.next(),this.token){case"{":var expr=this.next().read_expr();this.expect("}")&&this.next(),result=result(expr,byref);break;case"$":result=result(this.read_simple_variable(!1),byref);break;case this.tok.T_VARIABLE:var name=this.text().substring(1),node=this.node("variable");this.next(),result=result(node(name,!1),byref);break;default:this.error(["{","$",this.tok.T_VARIABLE]);var name=this.text();this.next(),result=result(name,byref)}return result}}},{}],117:[function(require,module,exports){module.exports={values:{101:"T_HALT_COMPILER",102:"T_USE",103:"T_ENCAPSED_AND_WHITESPACE",104:"T_OBJECT_OPERATOR",105:"T_STRING",106:"T_DOLLAR_OPEN_CURLY_BRACES",107:"T_STRING_VARNAME",108:"T_CURLY_OPEN",109:"T_NUM_STRING",110:"T_ISSET",111:"T_EMPTY",112:"T_INCLUDE",113:"T_INCLUDE_ONCE",114:"T_EVAL",115:"T_REQUIRE",116:"T_REQUIRE_ONCE",117:"T_NAMESPACE",118:"T_NS_SEPARATOR",119:"T_AS",120:"T_IF",121:"T_ENDIF",122:"T_WHILE",123:"T_DO",124:"T_FOR",125:"T_SWITCH",126:"T_BREAK", -127:"T_CONTINUE",128:"T_RETURN",129:"T_GLOBAL",130:"T_STATIC",131:"T_ECHO",132:"T_INLINE_HTML",133:"T_UNSET",134:"T_FOREACH",135:"T_DECLARE",136:"T_TRY",137:"T_THROW",138:"T_GOTO",139:"T_FINALLY",140:"T_CATCH",141:"T_ENDDECLARE",142:"T_LIST",143:"T_CLONE",144:"T_PLUS_EQUAL",145:"T_MINUS_EQUAL",146:"T_MUL_EQUAL",147:"T_DIV_EQUAL",148:"T_CONCAT_EQUAL",149:"T_MOD_EQUAL",150:"T_AND_EQUAL",151:"T_OR_EQUAL",152:"T_XOR_EQUAL",153:"T_SL_EQUAL",154:"T_SR_EQUAL",155:"T_INC",156:"T_DEC",157:"T_BOOLEAN_OR",158:"T_BOOLEAN_AND",159:"T_LOGICAL_OR",160:"T_LOGICAL_AND",161:"T_LOGICAL_XOR",162:"T_SL",163:"T_SR",164:"T_IS_IDENTICAL",165:"T_IS_NOT_IDENTICAL",166:"T_IS_EQUAL",167:"T_IS_NOT_EQUAL",168:"T_IS_SMALLER_OR_EQUAL",169:"T_IS_GREATER_OR_EQUAL",170:"T_INSTANCEOF",171:"T_INT_CAST",172:"T_DOUBLE_CAST",173:"T_STRING_CAST",174:"T_ARRAY_CAST",175:"T_OBJECT_CAST",176:"T_BOOL_CAST",177:"T_UNSET_CAST",178:"T_EXIT",179:"T_PRINT",180:"T_YIELD",181:"T_YIELD_FROM",182:"T_FUNCTION",183:"T_DOUBLE_ARROW",184:"T_DOUBLE_COLON",185:"T_ARRAY", -186:"T_CALLABLE",187:"T_CLASS",188:"T_ABSTRACT",189:"T_TRAIT",190:"T_FINAL",191:"T_EXTENDS",192:"T_INTERFACE",193:"T_IMPLEMENTS",194:"T_VAR",195:"T_PUBLIC",196:"T_PROTECTED",197:"T_PRIVATE",198:"T_CONST",199:"T_NEW",200:"T_INSTEADOF",201:"T_ELSEIF",202:"T_ELSE",203:"T_ENDSWITCH",204:"T_CASE",205:"T_DEFAULT",206:"T_ENDFOR",207:"T_ENDFOREACH",208:"T_ENDWHILE",209:"T_CONSTANT_ENCAPSED_STRING",210:"T_LNUMBER",211:"T_DNUMBER",212:"T_LINE",213:"T_FILE",214:"T_DIR",215:"T_TRAIT_C",216:"T_METHOD_C",217:"T_FUNC_C",218:"T_NS_C",219:"T_START_HEREDOC",220:"T_END_HEREDOC",221:"T_CLASS_C",222:"T_VARIABLE",223:"T_OPEN_TAG",224:"T_OPEN_TAG_WITH_ECHO",225:"T_CLOSE_TAG",226:"T_WHITESPACE",227:"T_COMMENT",228:"T_DOC_COMMENT",229:"T_ELLIPSIS",230:"T_COALESCE",231:"T_POW",232:"T_POW_EQUAL",233:"T_SPACESHIP"},names:{T_HALT_COMPILER:101,T_USE:102,T_ENCAPSED_AND_WHITESPACE:103,T_OBJECT_OPERATOR:104,T_STRING:105,T_DOLLAR_OPEN_CURLY_BRACES:106,T_STRING_VARNAME:107,T_CURLY_OPEN:108,T_NUM_STRING:109,T_ISSET:110,T_EMPTY:111,T_INCLUDE:112, -T_INCLUDE_ONCE:113,T_EVAL:114,T_REQUIRE:115,T_REQUIRE_ONCE:116,T_NAMESPACE:117,T_NS_SEPARATOR:118,T_AS:119,T_IF:120,T_ENDIF:121,T_WHILE:122,T_DO:123,T_FOR:124,T_SWITCH:125,T_BREAK:126,T_CONTINUE:127,T_RETURN:128,T_GLOBAL:129,T_STATIC:130,T_ECHO:131,T_INLINE_HTML:132,T_UNSET:133,T_FOREACH:134,T_DECLARE:135,T_TRY:136,T_THROW:137,T_GOTO:138,T_FINALLY:139,T_CATCH:140,T_ENDDECLARE:141,T_LIST:142,T_CLONE:143,T_PLUS_EQUAL:144,T_MINUS_EQUAL:145,T_MUL_EQUAL:146,T_DIV_EQUAL:147,T_CONCAT_EQUAL:148,T_MOD_EQUAL:149,T_AND_EQUAL:150,T_OR_EQUAL:151,T_XOR_EQUAL:152,T_SL_EQUAL:153,T_SR_EQUAL:154,T_INC:155,T_DEC:156,T_BOOLEAN_OR:157,T_BOOLEAN_AND:158,T_LOGICAL_OR:159,T_LOGICAL_AND:160,T_LOGICAL_XOR:161,T_SL:162,T_SR:163,T_IS_IDENTICAL:164,T_IS_NOT_IDENTICAL:165,T_IS_EQUAL:166,T_IS_NOT_EQUAL:167,T_IS_SMALLER_OR_EQUAL:168,T_IS_GREATER_OR_EQUAL:169,T_INSTANCEOF:170,T_INT_CAST:171,T_DOUBLE_CAST:172,T_STRING_CAST:173,T_ARRAY_CAST:174,T_OBJECT_CAST:175,T_BOOL_CAST:176,T_UNSET_CAST:177,T_EXIT:178,T_PRINT:179,T_YIELD:180,T_YIELD_FROM:181, -T_FUNCTION:182,T_DOUBLE_ARROW:183,T_DOUBLE_COLON:184,T_ARRAY:185,T_CALLABLE:186,T_CLASS:187,T_ABSTRACT:188,T_TRAIT:189,T_FINAL:190,T_EXTENDS:191,T_INTERFACE:192,T_IMPLEMENTS:193,T_VAR:194,T_PUBLIC:195,T_PROTECTED:196,T_PRIVATE:197,T_CONST:198,T_NEW:199,T_INSTEADOF:200,T_ELSEIF:201,T_ELSE:202,T_ENDSWITCH:203,T_CASE:204,T_DEFAULT:205,T_ENDFOR:206,T_ENDFOREACH:207,T_ENDWHILE:208,T_CONSTANT_ENCAPSED_STRING:209,T_LNUMBER:210,T_DNUMBER:211,T_LINE:212,T_FILE:213,T_DIR:214,T_TRAIT_C:215,T_METHOD_C:216,T_FUNC_C:217,T_NS_C:218,T_START_HEREDOC:219,T_END_HEREDOC:220,T_CLASS_C:221,T_VARIABLE:222,T_OPEN_TAG:223,T_OPEN_TAG_WITH_ECHO:224,T_CLOSE_TAG:225,T_WHITESPACE:226,T_COMMENT:227,T_DOC_COMMENT:228,T_ELLIPSIS:229,T_COALESCE:230,T_POW:231,T_POW_EQUAL:232,T_SPACESHIP:233}}},{}],"php-parser":[function(require,module,exports){function combine(src,to){for(var keys=Object.keys(src),i=keys.length;i--;){var k=keys[i],val=src[k];null===val?delete to[k]:"function"==typeof val?to[k]=val.bind(to):Array.isArray(val)?to[k]=Array.isArray(to[k])?to[k].concat(val):val:"object"==typeof val?to[k]="object"==typeof to[k]?combine(val,to[k]):val:to[k]=val; -}return to}var lexer=require("./lexer"),parser=require("./parser"),tokens=require("./tokens"),AST=require("./ast"),engine=function(options){return"function"==typeof this?new this(options):(this.tokens=tokens,this.lexer=new lexer(this),this.ast=new AST,this.parser=new parser(this.lexer,this.ast),void(options&&"object"==typeof options&&combine(options,this)))};engine.create=function(options){return new engine(options)},engine.parseEval=function(buffer,options){var self=new engine(options);return self.parseEval(buffer)},engine.prototype.parseEval=function(buffer){return this.lexer.mode_eval=!0,this.lexer.all_tokens=!1,this.parser.parse(buffer,"eval")},engine.parseCode=function(buffer,filename,options){"object"==typeof filename&&(options=filename,filename="unknown");var self=new engine(options);return self.parseCode(buffer,filename)},engine.prototype.parseCode=function(buffer,filename){return this.lexer.mode_eval=!1,this.lexer.all_tokens=!1,this.parser.parse(buffer,filename)},engine.tokenGetAll=function(buffer,options){ -var self=new engine(options);return self.tokenGetAll(buffer)},engine.prototype.tokenGetAll=function(buffer){this.lexer.mode_eval=!1,this.lexer.all_tokens=!0;var EOF=this.lexer.EOF,names=this.tokens.values;this.lexer.setInput(buffer);for(var token=this.lexer.lex()||EOF,result=[];token!=EOF;){var entry=this.lexer.yytext;names.hasOwnProperty(token)&&(entry=[names[token],entry,this.lexer.yylloc.first_line]),result.push(entry),token=this.lexer.lex()||EOF}return result},module.exports=engine},{"./ast":2,"./lexer":92,"./parser":101,"./tokens":117}]},{},[]); +return this.next(),result("post","+",expr);case this.tok.T_DEC:return this.next(),result("post","-",expr)}}else if(this.is("SCALAR"))for(expr=this.read_scalar();this.token!==this.EOF;)if(this.token===this.tok.T_OBJECT_OPERATOR)expr=this.recursive_variable_chain_scan(expr,!1);else if(this.token===this.tok.T_CURLY_OPEN||"["===this.token)expr=this.read_dereferencable(expr);else{if("("!==this.token)return expr;expr=this.node("call")(expr,this.read_function_argument_list())}else this.error("EXPR"),this.next();return expr},read_new_expr:function(){var result=this.node("new");if(this.token===this.tok.T_CLASS){var what=this.node("class"),propExtends=null,propImplements=null,body=null,args=[];return"("===this.next().token&&(args=this.read_function_argument_list()),this.token==this.tok.T_EXTENDS&&(propExtends=this.next().read_namespace_name()),this.token==this.tok.T_IMPLEMENTS&&(propImplements=this.next().read_name_list()),this.expect("{")&&(body=this.next().read_class_body()),result(what(null,propExtends,propImplements,body,[0,0,0]),args); +}var name=this.read_class_name_reference(),args=[];return"("===this.token&&(args=this.read_function_argument_list()),result(name,args)},read_class_name_reference:function(){if(this.token===this.tok.T_NS_SEPARATOR||this.token===this.tok.T_STRING||this.token===this.tok.T_NAMESPACE){var result=this.read_namespace_name();return this.token===this.tok.T_DOUBLE_COLON&&(result=this.read_static_getter(result)),result}return this.is("VARIABLE")?this.read_variable(!0,!1,!1):void this.expect([this.tok.T_STRING,"VARIABLE"])},read_assignment_list:function(){return this.read_list(this.read_assignment_list_element,",")},read_assignment_list_element:function(){if(","===this.token||")"===this.token)return null;var result=this.read_expr_item();return this.token===this.tok.T_DOUBLE_ARROW&&(result=["key",result,this.next().read_expr_item()]),result}}},{}],105:[function(require,module,exports){module.exports={is_reference:function(){return"&"==this.token&&(this.next(),!0)},is_variadic:function(){return this.token===this.tok.T_ELLIPSIS&&(this.next(), +!0)},read_function:function(closure,flag){var result=this.read_function_declaration(closure?1:flag?2:0);return flag&&1==flag[2]?(result.parseFlags(flag),this.expect(";")&&this.nextWithComments()):(this.expect("{")&&(result.body=this.read_code_block(!1),result.loc&&result.body.loc&&(result.loc.end=result.body.loc.end)),flag&&result.parseFlags(flag)),result},read_function_declaration:function(type){var nodeName="function";1===type?nodeName="closure":2===type&&(nodeName="method");var result=this.node(nodeName);this.expect(this.tok.T_FUNCTION)&&this.next();var isRef=this.is_reference(),name=!1,use=[],returnType=null,nullable=!1;1!==type&&this.expect(this.tok.T_STRING)&&(name=this.text(),this.next()),this.expect("(")&&this.next();var params=this.read_parameter_list();return this.expect(")")&&this.next(),1===type&&this.token===this.tok.T_USE&&(this.next().expect("(")&&this.next(),use=this.read_list(this.read_lexical_var,","),this.expect(")")&&this.next()),":"===this.token&&("?"===this.next().token&&(nullable=!0,this.next()), +returnType=this.read_type()),1===type?result(params,isRef,use,returnType,nullable):result(name,params,isRef,returnType,nullable)},read_lexical_var:function(){var result=this.node("variable"),isRef=!1;"&"===this.token&&(isRef=!0,this.next()),this.expect(this.tok.T_VARIABLE);var name=this.text().substring(1);return this.next(),result(name,isRef)},read_parameter_list:function(){var result=[];if(")"!=this.token)for(;this.token!=this.EOF;){if(result.push(this.read_parameter()),","!=this.token){if(")"==this.token)break;this.error([",",")"]);break}this.next()}return result},read_parameter:function(){var node=this.node("parameter"),name=null,value=null,type=null,nullable=!1;"?"===this.token&&(this.next(),nullable=!0),type=this.read_type(),nullable&&!type&&this.raiseError("Expecting a type definition combined with nullable operator");var isRef=this.is_reference(),isVariadic=this.is_variadic();return this.expect(this.tok.T_VARIABLE)&&(name=this.text().substring(1),this.next()),"="==this.token&&(value=this.next().read_expr()), +node(name,type,value,isRef,isVariadic,nullable)},read_function_argument_list:function(){var result=[],wasVariadic=!1;if(this.expect("(")&&this.next(),")"!==this.token)for(;this.token!=this.EOF;){var argument=this.read_argument_list();if(result.push(argument),"variadic"===argument.kind?wasVariadic=!0:wasVariadic&&this.raiseError("Unexpected argument after a variadic argument"),","!==this.token)break;this.next()}return this.expect(")")&&this.next(),result},read_argument_list:function(){return this.token===this.tok.T_ELLIPSIS?this.node("variadic")(this.next().read_expr()):this.read_expr()},read_type:function(){var result=this.node("identifier");switch(this.token){case this.tok.T_ARRAY:return this.next(),result(["","array"],!1);case this.tok.T_NAMESPACE:case this.tok.T_NS_SEPARATOR:case this.tok.T_STRING:return this.read_namespace_name();case this.tok.T_CALLABLE:return this.next(),result(["","callable"],!1);default:return null}}}},{}],106:[function(require,module,exports){module.exports={read_if:function(){var result=this.node("if"),body=null,alternate=null,shortForm=!1,test=null; +if(test=this.read_if_expr(),":"===this.token){shortForm=!0,this.next(),body=this.node("block");for(var items=[];this.token!==this.EOF&&this.token!==this.tok.T_ENDIF;){if(this.token===this.tok.T_ELSEIF){alternate=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){alternate=this.next().read_else_short();break}items.push(this.read_inner_statement())}body=body(null,items),this.expect(this.tok.T_ENDIF)&&this.next(),this.expectEndOfStatement()}else body=this.read_statement(),this.ignoreComments(),this.token===this.tok.T_ELSEIF?alternate=this.next().read_if():this.token===this.tok.T_ELSE&&(alternate=this.next().read_statement());return result(test,body,alternate,shortForm)},read_if_expr:function(){this.expect("(")&&this.next();var result=this.read_expr();return this.expect(")")&&this.next(),result},read_elseif_short:function(){var result=this.node("if"),alternate=null,test=null,body=null,items=[];for(test=this.read_if_expr(),this.expect(":")&&this.next(),body=this.node("block");this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;){ +if(this.token===this.tok.T_ELSEIF){alternate=this.next().read_elseif_short();break}if(this.token===this.tok.T_ELSE){alternate=this.next().read_else_short();break}items.push(this.read_inner_statement())}return body=body(null,items),result(test,body,alternate,!0)},read_else_short:function(){this.expect(":")&&this.next();for(var body=this.node("block"),items=[];this.token!=this.EOF&&this.token!==this.tok.T_ENDIF;)items.push(this.read_inner_statement());return body(null,items)}}},{}],107:[function(require,module,exports){"use strict";module.exports={read_while:function(){var result=this.node("while"),test=null,body=null,shortForm=!1;return this.expect("(")&&this.next(),test=this.read_expr(),this.expect(")")&&this.next(),":"===this.token?(shortForm=!0,body=this.read_short_form(this.tok.T_ENDWHILE)):body=this.read_statement(),result(test,body,shortForm)},read_do:function(){var result=this.node("do"),test=null,body=null;return body=this.read_statement(),this.ignoreComments().expect(this.tok.T_WHILE)&&(this.next().expect("(")&&this.next(), +test=this.read_expr(),this.expect(")")&&this.next(),this.expect(";")&&this.next()),result(test,body)},read_for:function(){var result=this.node("for"),init=[],test=[],increment=[],body=null,shortForm=!1;return this.expect("(")&&this.next(),";"!==this.token?(init=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),";"!==this.token?(test=this.read_list(this.read_expr,","),this.expect(";")&&this.next()):this.next(),")"!==this.token?(increment=this.read_list(this.read_expr,","),this.expect(")")&&this.next()):this.next(),":"===this.token?(shortForm=!0,body=this.read_short_form(this.tok.T_ENDFOR)):body=this.read_statement(),result(init,test,increment,body,shortForm)},read_foreach:function(){var result=this.node("foreach"),source=null,key=null,value=null,body=null,shortForm=!1;return this.expect("(")&&this.next(),source=this.read_expr(),this.ignoreComments().expect(this.tok.T_AS)&&(this.next(),value=this.read_foreach_variable(),this.token===this.tok.T_DOUBLE_ARROW&&(key=value,value=this.next().read_foreach_variable())), +this.expect(")")&&this.next(),":"===this.token?(shortForm=!0,body=this.read_short_form(this.tok.T_ENDFOREACH)):body=this.read_statement(),result(source,key,value,body,shortForm)},read_foreach_variable:function(){if(this.token===this.tok.T_LIST){var result=this.node("list");this.next().expect("(")&&this.next();var assignList=this.read_assignment_list();return this.expect(")")&&this.next(),result(assignList)}return"["===this.token||this.token===this.tok.T_ARRAY?this.read_array():this.read_variable(!1,!1,!1)}}},{}],108:[function(require,module,exports){module.exports={read_start:function(){return this.token==this.tok.T_NAMESPACE?this.read_namespace():this.read_top_statement()}}},{}],109:[function(require,module,exports){"use strict";module.exports={read_namespace:function(){var result=this.node("namespace");if(this.expect(this.tok.T_NAMESPACE)&&this.next(),"{"==this.token){this.currentNamespace=[""];var body=this.nextWithComments().read_top_statements();return this.expect("}")&&this.nextWithComments(),result([""],body,!0); +}var name=this.read_namespace_name();if(";"==this.token){this.currentNamespace=name;var body=this.nextWithComments().read_top_statements();return this.expect(this.EOF),result(name.name,body,!1)}if("{"==this.token){this.currentNamespace=name;var body=this.nextWithComments().read_top_statements();return this.expect("}")&&this.nextWithComments(),result(name.name,body,!0)}if("("===this.token)return name.resolution=this.ast.identifier.RELATIVE_NAME,name.name=name.name.substring(1),this.node("call")(name,this.read_function_argument_list());this.error(["{",";"]),this.currentNamespace=name;var body=this.read_top_statements();return this.expect(this.EOF),result(name,body,!1)},read_namespace_name:function(){var result=this.node("identifier"),relative=!1;return this.token===this.tok.T_NAMESPACE&&(this.next().expect(this.tok.T_NS_SEPARATOR)&&this.next(),relative=!0),result(this.read_list(this.tok.T_STRING,this.tok.T_NS_SEPARATOR,!0),relative)},read_use_statement:function(){var result=this.node("usegroup"),type=null,items=[],name=null; +return this.expect(this.tok.T_USE)&&this.next(),type=this.read_use_type(),items.push(this.read_use_declaration(!1)),","===this.token?items=items.concat(this.next().read_use_declarations(!1)):"{"===this.token&&(name=items[0].name.name,items=this.next().read_use_declarations(null===type),this.expect("}")&&this.next()),this.expect(";")&&this.nextWithComments(),result(name,type,items)},read_use_declaration:function(typed){var result=this.node("useitem"),type=null;typed&&(type=this.read_use_type());var name=this.read_namespace_name(),alias=this.read_use_alias();return result(name.name,alias,type)},read_use_declarations:function(typed){for(var result=[this.read_use_declaration(typed)];","===this.token;)result.push(this.next().read_use_declaration(typed));return result},read_use_alias:function(){var result=null;return this.token===this.tok.T_AS&&this.next().expect(this.tok.T_STRING)&&(result=this.text(),this.next()),result},read_use_type:function(){return this.token===this.tok.T_FUNCTION?(this.next(),this.ast.useitem.TYPE_FUNCTION):this.token===this.tok.T_CONST?(this.next(), +this.ast.useitem.TYPE_CONST):null}}},{}],110:[function(require,module,exports){var specialChar={"\\r":"\r","\\n":"\n","\\t":"\t","\\v":String.fromCharCode(11),"\\e":String.fromCharCode(27),"\\f":String.fromCharCode(12),"\\\\":"\\","\\$":"$",'\\"':'"',"\\'":"'"};module.exports={resolve_special_chars:function(text){return text.replace(/\\[rntvef"'\\\$]/g,function(seq){return specialChar[seq]})},read_scalar:function(){if(this.is("T_MAGIC_CONST"))return this.get_magic_constant();switch(this.token){case this.tok.T_CONSTANT_ENCAPSED_STRING:var value=this.node("string"),text=this.text(),isDoubleQuote='"'===text[0];return text=text.substring(1,text.length-1),this.next(),value=value(isDoubleQuote,this.resolve_special_chars(text)),this.token===this.tok.T_DOUBLE_COLON?this.read_static_getter(value):value;case this.tok.T_START_HEREDOC:if("ST_NOWDOC"===this.lexer.curCondition){var node=this.node("nowdoc"),value=this.next().text(),lastCh=value[value.length-1];return"\n"===lastCh?value="\r"===value[value.length-2]?value.substring(0,value.length-2):value.substring(0,value.length-1):"\r"===lastCh&&(value=value.substring(0,value.length-1)), +this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE)&&this.next(),node=node(value,this.lexer.heredoc_label),this.expect(this.tok.T_END_HEREDOC)&&this.next(),node}return this.next().read_encapsed_string(this.tok.T_END_HEREDOC);case'"':return this.next().read_encapsed_string('"');case'b"':case'B"':var node=this.node("cast"),what=this.next().read_encapsed_string('"');return node("binary",what);case this.tok.T_LNUMBER:case this.tok.T_DNUMBER:var result=this.node("number"),value=this.text();return this.next(),result=result(value);case this.tok.T_ARRAY:case"[":return this.read_array();default:var err=this.error("SCALAR");return this.next(),err}},read_dereferencable:function(expr){var result,node=this.node("offsetlookup");if("["===this.token){var offset=this.next().read_expr();this.expect("]")&&this.next(),result=node(expr,offset)}else if(this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES){var offset=this.read_encapsed_string_item();result=node(expr,offset)}return result},read_encapsed_string_item:function(){var result=this.node(); +if(this.token===this.tok.T_ENCAPSED_AND_WHITESPACE){var text=this.text();this.next(),result=result("string",!1,this.resolve_special_chars(text))}else if(this.token===this.tok.T_DOLLAR_OPEN_CURLY_BRACES){var name=null;if(this.next().token===this.tok.T_STRING_VARNAME){var varName=this.text();if(name=this.node("variable"),this.next(),name=name(varName,!1),"["===this.token){var node=this.node("offsetlookup"),offset=this.next().read_expr();this.expect("]")&&this.next(),name=node(name,offset)}}else name=this.read_expr();this.expect("}")&&this.next(),result=result("variable",name,!1)}else if(this.token===this.tok.T_CURLY_OPEN)result=this.next().read_variable(!1,!1,!1),this.expect("}")&&this.next();else if(this.token===this.tok.T_VARIABLE){if(result=this.read_simple_variable(!1),"["===this.token){var node=this.node("offsetlookup"),offset=this.next().read_encaps_var_offset();this.expect("]")&&this.next(),result=node(result,offset)}if(this.token===this.tok.T_OBJECT_OPERATOR){var node=this.node("propertylookup"),what=this.node("constref"); +this.next().expect(this.tok.T_STRING);var name=this.text();this.next(),result=node(result,what(name))}}else{this.expect(this.tok.T_ENCAPSED_AND_WHITESPACE);var value=this.text();this.next(),result=result("string",!1,value)}return result},read_encapsed_string:function(expect){var node=this.node("encapsed"),value=[],type=null;for(type="`"===expect?this.ast.encapsed.TYPE_SHELL:'"'===expect?this.ast.encapsed.TYPE_STRING:this.ast.encapsed.TYPE_HEREDOC;this.token!==expect&&this.token!==this.EOF;)value.push(this.read_encapsed_string_item());return this.expect(expect)&&this.next(),node=node(value,type),expect===this.tok.T_END_HEREDOC&&(node.label=this.lexer.heredoc_label),node},get_magic_constant:function(){var result=this.node("magic"),name=this.text();return this.next(),result(name)}}},{}],111:[function(require,module,exports){module.exports={read_top_statements:function(){for(var result=[];this.token!==this.EOF&&"}"!==this.token;){var statement=this.read_top_statement();statement&&(Array.isArray(statement)?result=result.concat(statement):result.push(statement)); +}return result},read_top_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var flag=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(flag):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]);case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_USE:return this.read_use_statement();case this.tok.T_CONST:return this.next().read_const_list();case this.tok.T_NAMESPACE:return this.read_namespace();case this.tok.T_HALT_COMPILER:var result=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),this.expect(";"),this.lexer.done=!0,result(this.lexer._input.substring(this.lexer.offset));default:return this.read_statement()}},read_inner_statements:function(){for(var result=[];this.token!=this.EOF&&"}"!==this.token;){var statement=this.read_inner_statement(); +statement&&(Array.isArray(statement)?result=result.concat(statement):result.push(statement))}return result},read_const_list:function(){var result=this.read_list(function(){this.expect(this.tok.T_STRING);var result=this.node("constant"),name=this.text();return this.next().expect("=")?result(name,this.next().read_expr()):result(name,null)},",",!1);return this.expectEndOfStatement(),result},read_declare_list:function(){for(var result={};this.token!=this.EOF&&")"!==this.token;){this.expect(this.tok.T_STRING);var name=this.text().toLowerCase();if(this.next().expect("=")?result[name]=this.next().read_expr():result[name]=null,","!==this.token)break;this.next()}return result},read_inner_statement:function(){switch(this.token){case this.tok.T_FUNCTION:return this.read_function(!1,!1);case this.tok.T_ABSTRACT:case this.tok.T_FINAL:var flag=this.read_class_scope();return this.token===this.tok.T_CLASS?this.read_class(flag):(this.error(this.tok.T_CLASS),this.next(),null);case this.tok.T_CLASS:return this.read_class([0,0,0]); +case this.tok.T_INTERFACE:return this.read_interface();case this.tok.T_TRAIT:return this.read_trait();case this.tok.T_HALT_COMPILER:this.raiseError("__HALT_COMPILER() can only be used from the outermost scope");var node=this.node("halt");return this.next().expect("(")&&this.next(),this.expect(")")&&this.next(),node=node(this.lexer._input.substring(this.lexer.offset)),this.expect(";")&&this.next(),node;default:return this.read_statement()}},read_statement:function(){switch(this.token){case"{":return this.read_code_block(!1);case this.tok.T_IF:return this.next().read_if();case this.tok.T_SWITCH:return this.read_switch();case this.tok.T_FOR:return this.next().read_for();case this.tok.T_FOREACH:return this.next().read_foreach();case this.tok.T_WHILE:return this.next().read_while();case this.tok.T_DO:return this.next().read_do();case this.tok.T_COMMENT:return this.read_comment();case this.tok.T_DOC_COMMENT:return this.read_doc_comment();case this.tok.T_RETURN:var result=this.node("return"),expr=null;return this.next().is("EOS")||(expr=this.read_expr()), +this.expectEndOfStatement(),result(expr);case this.tok.T_BREAK:case this.tok.T_CONTINUE:var result=this.node(this.token===this.tok.T_CONTINUE?"continue":"break"),level=null;return this.next(),";"!==this.token&&this.token!==this.tok.T_CLOSE_TAG&&(level=this.read_expr()),this.expectEndOfStatement(),result(level);case this.tok.T_GLOBAL:var result=this.node("global"),items=this.next().read_list(this.read_simple_variable,",");return this.expectEndOfStatement(),result(items);case this.tok.T_STATIC:var current=[this.token,this.lexer.getState()],result=this.node("static");if(this.next().token===this.tok.T_DOUBLE_COLON){this.lexer.tokens.push(current);var expr=this.next().read_expr();return this.expect(";")&&this.nextWithComments(),expr}var items=this.read_variable_declarations();return this.expectEndOfStatement(),result(items);case this.tok.T_ECHO:var result=this.node("echo"),args=this.next().read_list(this.read_expr,",");return this.expectEndOfStatement(),result(args);case this.tok.T_INLINE_HTML:var result=this.node("inline"),value=this.text(); +return this.next(),result(value);case this.tok.T_UNSET:var result=this.node("unset");this.next().expect("(")&&this.next();var items=this.read_list(this.read_variable,",");return this.expect(")")&&this.next(),this.expect(";")&&this.nextWithComments(),result(items);case this.tok.T_DECLARE:var what,mode,result=this.node("declare"),body=[];if(this.next().expect("(")&&this.next(),what=this.read_declare_list(),this.expect(")")&&this.next(),":"===this.token){for(this.nextWithComments();this.token!=this.EOF&&this.token!==this.tok.T_ENDDECLARE;)body.push(this.read_top_statement());this.expect(this.tok.T_ENDDECLARE)&&this.next(),this.expectEndOfStatement(),mode=this.ast.declare.MODE_SHORT}else if("{"===this.token){for(this.nextWithComments();this.token!=this.EOF&&"}"!==this.token;)body.push(this.read_top_statement());this.expect("}")&&this.next(),mode=this.ast.declare.MODE_BLOCK}else{for(this.expect(";")&&this.nextWithComments();this.token!=this.EOF&&this.token!==this.tok.T_DECLARE;)body.push(this.read_top_statement());mode=this.ast.declare.MODE_NONE; +}return result(what,body,mode);case this.tok.T_TRY:return this.read_try();case this.tok.T_THROW:var result=this.node("throw"),expr=this.next().read_expr();return this.expectEndOfStatement(),result(expr);case";":case this.tok.T_CLOSE_TAG:return this.next(),null;case this.tok.T_STRING:var current=[this.token,this.lexer.getState()],label=this.text();if(":"===this.next().token){var result=this.node("label");return this.next(),result(label)}this.lexer.tokens.push(current);var expr=this.next().read_expr();return this.expect([";",this.tok.T_CLOSE_TAG])&&this.nextWithComments(),expr;case this.tok.T_GOTO:var result=this.node("goto"),label=null;return this.next().expect(this.tok.T_STRING)&&(label=this.text(),this.next().expectEndOfStatement()),result(label);default:var expr=this.read_expr();return this.expectEndOfStatement(),expr}},read_code_block:function(top){var result=this.node("block");this.expect("{")&&this.nextWithComments();var body=top?this.read_top_statements():this.read_inner_statements();return this.expect("}")&&this.nextWithComments(), +result(null,body)}}},{}],112:[function(require,module,exports){"use strict";module.exports={read_switch:function(){this.expect(this.tok.T_SWITCH)&&this.next();var test,body,shortForm,result=this.node("switch");return this.expect("(")&&this.next(),test=this.read_expr(),this.expect(")")&&this.next(),shortForm=":"===this.token,body=this.read_switch_case_list(),result(test,body,shortForm)},read_switch_case_list:function(){var expect=null,result=this.node("block"),items=[];for("{"===this.token?expect="}":":"===this.token?expect=this.tok.T_ENDSWITCH:this.expect(["{",":"]),";"===this.next().token&&this.next(),this.token===this.tok.T_CLOSE_TAG&&this.next();this.token!==this.EOF&&this.token!==expect;)items.push(this.read_case_list(expect));return this.expect(expect)&&this.next(),expect===this.tok.T_ENDSWITCH&&this.expectEndOfStatement(),result(null,items)},read_case_list:function(stopToken){var result=this.node("case"),test=null,body=null,items=[];for(this.token===this.tok.T_CASE?test=this.next().read_expr():this.token===this.tok.T_DEFAULT?this.next():this.expect([this.tok.T_CASE,this.tok.T_DEFAULT]), +this.expect([":",";"])&&this.next(),body=this.node("block");this.token!=this.EOF&&this.token!==stopToken&&this.token!==this.tok.T_CASE&&this.token!==this.tok.T_DEFAULT;)items.push(this.read_inner_statement());return result(test,items.length>0?body(null,items):null)}}},{}],113:[function(require,module,exports){module.exports={read_try:function(){this.expect(this.tok.T_TRY);var body,result=this.node("try"),always=null,catches=[];for(body=this.next().read_statement();this.ignoreComments().token===this.tok.T_CATCH;){var item=this.node("catch"),what=[],variable=null;this.next().expect("(")&&this.next(),what=this.read_list(this.read_namespace_name,"|",!1),variable=this.read_variable(!0,!1,!1),this.expect(")"),catches.push(item(this.next().read_statement(),what,variable))}return this.token===this.tok.T_FINALLY&&(always=this.next().read_statement()),result(body,catches,always)}}},{}],114:[function(require,module,exports){"use strict";module.exports={read_short_form:function(token){var body=this.node("block"),items=[];for(this.expect(":")&&this.next();this.token!=this.EOF&&this.token!==token;)items.push(this.read_inner_statement()); +return this.expect(token)&&this.next(),this.expectEndOfStatement(),body(null,items)},read_list:function(item,separator,preserveFirstSeparator){var result=[];if(this.token==separator&&(preserveFirstSeparator&&result.push(""),this.next()),"function"==typeof item){do if(result.push(item.apply(this,[])),this.token!=separator)break;while(this.next().token!=this.EOF)}else{if(!this.expect(item))return[];for(result.push(this.text());this.next().token!=this.EOF&&this.token==separator&&this.next().token==item;)result.push(this.text())}return result},read_name_list:function(){return this.read_list(this.read_namespace_name,",",!1)},read_variable_declarations:function(){return this.read_list(function(){var node=this.node("assign"),variable=this.node("variable");if(this.expect(this.tok.T_VARIABLE)){var name=this.text().substring(1);this.next(),variable=variable(name,!1)}else variable=variable("#ERR",!1);return"="===this.token?node(variable,this.next().read_expr()):variable},",")}}},{}],115:[function(require,module,exports){ +"use strict";module.exports={read_variable:function(read_only,encapsed,byref){var result;if(byref||"&"!==this.token||(byref=!0,this.next()),this.is([this.tok.T_VARIABLE,"$"]))result=this.read_reference_variable(encapsed,byref);else if(this.is([this.tok.T_NS_SEPARATOR,this.tok.T_STRING,this.tok.T_NAMESPACE])){result=this.node();var name=this.read_namespace_name();if(this.token!=this.tok.T_DOUBLE_COLON&&"("!=this.token){var literal=name.name.toLowerCase();result="true"===literal?result("boolean",!0):"false"===literal?result("boolean",!1):result("constref",name)}else result=name}else this.token===this.tok.T_STATIC?(result=this.node("constref"),this.next(),result=result("static")):this.expect("VARIABLE");return this.token===this.tok.T_DOUBLE_COLON&&(result=this.read_static_getter(result,encapsed)),this.recursive_variable_chain_scan(result,read_only,encapsed)},read_static_getter:function(what,encapsed){var result=this.node("staticlookup"),offset=null;if(this.next().is([this.tok.T_VARIABLE,"$"]))offset=this.read_reference_variable(encapsed,!1);else if(this.token===this.tok.T_STRING||this.token===this.tok.T_CLASS){ +offset=this.node("constref");var name=this.text();this.next(),offset=offset(name)}else{this.error([this.tok.T_VARIABLE,this.tok.T_STRING]),offset=this.node("constref");var name=this.text();this.next(),offset=offset(name)}return result(what,offset)},recursive_variable_chain_scan:function(result,read_only,encapsed){recursive_scan_loop:for(;this.token!=this.EOF;)switch(this.token){case"(":if(read_only)return result;result=this.node("call")(result,this.read_function_argument_list());break;case"[":var node=this.node("offsetlookup");this.next();var offset=!1;encapsed?(offset=this.read_encaps_var_offset(),this.expect("]")&&this.next()):"]"!==this.token?(offset=this.read_expr(),this.expect("]")&&this.next()):this.next(),result=node(result,offset);break;case this.tok.T_OBJECT_OPERATOR:var node=this.node("propertylookup"),what=null;switch(this.next().token){case this.tok.T_STRING:what=this.node("constref");var name=this.text();if(this.next(),what=what(name),this.token===this.tok.T_VARIABLE){var inner=this.node("variable"); +name=this.text().substring(1),this.next(),what=this.node("encapsed")([what,inner(name,!1)],"offset"),what.loc&&what.value[0].loc&&(what.loc.start=what.value[0].loc.start)}else if("{"===this.token){var expr=this.next().read_expr();this.expect("}")&&this.next(),what=this.node("encapsed")([what,expr],"offset"),what.loc&&what.value[0].loc&&(what.loc.start=what.value[0].loc.start)}break;case this.tok.T_VARIABLE:what=this.node("variable");var name=this.text().substring(1);this.next(),what=what(name,!1);break;case"$":this.next().expect(["{",this.tok.T_VARIABLE]),"{"===this.token?(what=this.next().read_expr(),this.expect("}")&&this.next()):what=this.read_expr();break;case"{":what=this.next().read_expr(),this.expect("}")&&this.next();break;default:this.error([this.tok.T_STRING,this.tok.T_VARIABLE]),what=this.node("constref");var name=this.text();this.next(),what=what(name)}result=node(result,what);break;default:break recursive_scan_loop}return result},read_encaps_var_offset:function(){var offset=this.node();if(this.token===this.tok.T_STRING){ +var text=this.text(),isDblQuote='"'===text[0];text=text.substring(1,text.length-1),this.next(),offset=offset("string",isDblQuote,this.resolve_special_chars(text))}else if(this.token===this.tok.T_NUM_STRING){var num=this.text();this.next(),offset=offset("number",num)}else if(this.token===this.tok.T_VARIABLE){var name=this.text().substring(1);this.next(),offset=offset("variable",name,!1)}else{this.expect([this.tok.T_STRING,this.tok.T_NUM_STRING,this.tok.T_VARIABLE]);var text=this.text();this.next(),offset=offset("string",!1,text)}return offset},read_reference_variable:function(encapsed,byref){for(var result=this.read_simple_variable(byref);this.token!=this.EOF;){var node=this.node();if("["==this.token){var offset=null;offset=encapsed?this.next().read_encaps_var_offset():"]"===this.next().token?null:this.read_dim_offset(),this.expect("]")&&this.next(),result=node("offsetlookup",result,offset)}else{if("{"!=this.token||encapsed)break;var offset=this.next().read_expr();this.expect("}")&&this.next(),result=node("offsetlookup",result,offset); +}}return result},read_simple_variable:function(byref){var result=this.node("variable");if(this.expect([this.tok.T_VARIABLE,"$"])&&this.token===this.tok.T_VARIABLE){var name=this.text().substring(1);this.next(),result=result(name,byref)}else switch("$"===this.token&&this.next(),this.token){case"{":var expr=this.next().read_expr();this.expect("}")&&this.next(),result=result(expr,byref);break;case"$":result=result(this.read_simple_variable(!1),byref);break;case this.tok.T_VARIABLE:var name=this.text().substring(1),node=this.node("variable");this.next(),result=result(node(name,!1),byref);break;default:this.error(["{","$",this.tok.T_VARIABLE]);var name=this.text();this.next(),result=result(name,byref)}return result}}},{}],116:[function(require,module,exports){module.exports={values:{101:"T_HALT_COMPILER",102:"T_USE",103:"T_ENCAPSED_AND_WHITESPACE",104:"T_OBJECT_OPERATOR",105:"T_STRING",106:"T_DOLLAR_OPEN_CURLY_BRACES",107:"T_STRING_VARNAME",108:"T_CURLY_OPEN",109:"T_NUM_STRING",110:"T_ISSET",111:"T_EMPTY",112:"T_INCLUDE", +113:"T_INCLUDE_ONCE",114:"T_EVAL",115:"T_REQUIRE",116:"T_REQUIRE_ONCE",117:"T_NAMESPACE",118:"T_NS_SEPARATOR",119:"T_AS",120:"T_IF",121:"T_ENDIF",122:"T_WHILE",123:"T_DO",124:"T_FOR",125:"T_SWITCH",126:"T_BREAK",127:"T_CONTINUE",128:"T_RETURN",129:"T_GLOBAL",130:"T_STATIC",131:"T_ECHO",132:"T_INLINE_HTML",133:"T_UNSET",134:"T_FOREACH",135:"T_DECLARE",136:"T_TRY",137:"T_THROW",138:"T_GOTO",139:"T_FINALLY",140:"T_CATCH",141:"T_ENDDECLARE",142:"T_LIST",143:"T_CLONE",144:"T_PLUS_EQUAL",145:"T_MINUS_EQUAL",146:"T_MUL_EQUAL",147:"T_DIV_EQUAL",148:"T_CONCAT_EQUAL",149:"T_MOD_EQUAL",150:"T_AND_EQUAL",151:"T_OR_EQUAL",152:"T_XOR_EQUAL",153:"T_SL_EQUAL",154:"T_SR_EQUAL",155:"T_INC",156:"T_DEC",157:"T_BOOLEAN_OR",158:"T_BOOLEAN_AND",159:"T_LOGICAL_OR",160:"T_LOGICAL_AND",161:"T_LOGICAL_XOR",162:"T_SL",163:"T_SR",164:"T_IS_IDENTICAL",165:"T_IS_NOT_IDENTICAL",166:"T_IS_EQUAL",167:"T_IS_NOT_EQUAL",168:"T_IS_SMALLER_OR_EQUAL",169:"T_IS_GREATER_OR_EQUAL",170:"T_INSTANCEOF",171:"T_INT_CAST",172:"T_DOUBLE_CAST",173:"T_STRING_CAST", +174:"T_ARRAY_CAST",175:"T_OBJECT_CAST",176:"T_BOOL_CAST",177:"T_UNSET_CAST",178:"T_EXIT",179:"T_PRINT",180:"T_YIELD",181:"T_YIELD_FROM",182:"T_FUNCTION",183:"T_DOUBLE_ARROW",184:"T_DOUBLE_COLON",185:"T_ARRAY",186:"T_CALLABLE",187:"T_CLASS",188:"T_ABSTRACT",189:"T_TRAIT",190:"T_FINAL",191:"T_EXTENDS",192:"T_INTERFACE",193:"T_IMPLEMENTS",194:"T_VAR",195:"T_PUBLIC",196:"T_PROTECTED",197:"T_PRIVATE",198:"T_CONST",199:"T_NEW",200:"T_INSTEADOF",201:"T_ELSEIF",202:"T_ELSE",203:"T_ENDSWITCH",204:"T_CASE",205:"T_DEFAULT",206:"T_ENDFOR",207:"T_ENDFOREACH",208:"T_ENDWHILE",209:"T_CONSTANT_ENCAPSED_STRING",210:"T_LNUMBER",211:"T_DNUMBER",212:"T_LINE",213:"T_FILE",214:"T_DIR",215:"T_TRAIT_C",216:"T_METHOD_C",217:"T_FUNC_C",218:"T_NS_C",219:"T_START_HEREDOC",220:"T_END_HEREDOC",221:"T_CLASS_C",222:"T_VARIABLE",223:"T_OPEN_TAG",224:"T_OPEN_TAG_WITH_ECHO",225:"T_CLOSE_TAG",226:"T_WHITESPACE",227:"T_COMMENT",228:"T_DOC_COMMENT",229:"T_ELLIPSIS",230:"T_COALESCE",231:"T_POW",232:"T_POW_EQUAL",233:"T_SPACESHIP"},names:{T_HALT_COMPILER:101, +T_USE:102,T_ENCAPSED_AND_WHITESPACE:103,T_OBJECT_OPERATOR:104,T_STRING:105,T_DOLLAR_OPEN_CURLY_BRACES:106,T_STRING_VARNAME:107,T_CURLY_OPEN:108,T_NUM_STRING:109,T_ISSET:110,T_EMPTY:111,T_INCLUDE:112,T_INCLUDE_ONCE:113,T_EVAL:114,T_REQUIRE:115,T_REQUIRE_ONCE:116,T_NAMESPACE:117,T_NS_SEPARATOR:118,T_AS:119,T_IF:120,T_ENDIF:121,T_WHILE:122,T_DO:123,T_FOR:124,T_SWITCH:125,T_BREAK:126,T_CONTINUE:127,T_RETURN:128,T_GLOBAL:129,T_STATIC:130,T_ECHO:131,T_INLINE_HTML:132,T_UNSET:133,T_FOREACH:134,T_DECLARE:135,T_TRY:136,T_THROW:137,T_GOTO:138,T_FINALLY:139,T_CATCH:140,T_ENDDECLARE:141,T_LIST:142,T_CLONE:143,T_PLUS_EQUAL:144,T_MINUS_EQUAL:145,T_MUL_EQUAL:146,T_DIV_EQUAL:147,T_CONCAT_EQUAL:148,T_MOD_EQUAL:149,T_AND_EQUAL:150,T_OR_EQUAL:151,T_XOR_EQUAL:152,T_SL_EQUAL:153,T_SR_EQUAL:154,T_INC:155,T_DEC:156,T_BOOLEAN_OR:157,T_BOOLEAN_AND:158,T_LOGICAL_OR:159,T_LOGICAL_AND:160,T_LOGICAL_XOR:161,T_SL:162,T_SR:163,T_IS_IDENTICAL:164,T_IS_NOT_IDENTICAL:165,T_IS_EQUAL:166,T_IS_NOT_EQUAL:167,T_IS_SMALLER_OR_EQUAL:168,T_IS_GREATER_OR_EQUAL:169, +T_INSTANCEOF:170,T_INT_CAST:171,T_DOUBLE_CAST:172,T_STRING_CAST:173,T_ARRAY_CAST:174,T_OBJECT_CAST:175,T_BOOL_CAST:176,T_UNSET_CAST:177,T_EXIT:178,T_PRINT:179,T_YIELD:180,T_YIELD_FROM:181,T_FUNCTION:182,T_DOUBLE_ARROW:183,T_DOUBLE_COLON:184,T_ARRAY:185,T_CALLABLE:186,T_CLASS:187,T_ABSTRACT:188,T_TRAIT:189,T_FINAL:190,T_EXTENDS:191,T_INTERFACE:192,T_IMPLEMENTS:193,T_VAR:194,T_PUBLIC:195,T_PROTECTED:196,T_PRIVATE:197,T_CONST:198,T_NEW:199,T_INSTEADOF:200,T_ELSEIF:201,T_ELSE:202,T_ENDSWITCH:203,T_CASE:204,T_DEFAULT:205,T_ENDFOR:206,T_ENDFOREACH:207,T_ENDWHILE:208,T_CONSTANT_ENCAPSED_STRING:209,T_LNUMBER:210,T_DNUMBER:211,T_LINE:212,T_FILE:213,T_DIR:214,T_TRAIT_C:215,T_METHOD_C:216,T_FUNC_C:217,T_NS_C:218,T_START_HEREDOC:219,T_END_HEREDOC:220,T_CLASS_C:221,T_VARIABLE:222,T_OPEN_TAG:223,T_OPEN_TAG_WITH_ECHO:224,T_CLOSE_TAG:225,T_WHITESPACE:226,T_COMMENT:227,T_DOC_COMMENT:228,T_ELLIPSIS:229,T_COALESCE:230,T_POW:231,T_POW_EQUAL:232,T_SPACESHIP:233}}},{}],"php-parser":[function(require,module,exports){function combine(src,to){ +for(var keys=Object.keys(src),i=keys.length;i--;){var k=keys[i],val=src[k];null===val?delete to[k]:"function"==typeof val?to[k]=val.bind(to):Array.isArray(val)?to[k]=Array.isArray(to[k])?to[k].concat(val):val:"object"==typeof val?to[k]="object"==typeof to[k]?combine(val,to[k]):val:to[k]=val}return to}var lexer=require("./lexer"),parser=require("./parser"),tokens=require("./tokens"),AST=require("./ast"),engine=function(options){return"function"==typeof this?new this(options):(this.tokens=tokens,this.lexer=new lexer(this),this.ast=new AST,this.parser=new parser(this.lexer,this.ast),void(options&&"object"==typeof options&&combine(options,this)))};engine.create=function(options){return new engine(options)},engine.parseEval=function(buffer,options){var self=new engine(options);return self.parseEval(buffer)},engine.prototype.parseEval=function(buffer){return this.lexer.mode_eval=!0,this.lexer.all_tokens=!1,this.parser.parse(buffer,"eval")},engine.parseCode=function(buffer,filename,options){"object"==typeof filename&&(options=filename, +filename="unknown");var self=new engine(options);return self.parseCode(buffer,filename)},engine.prototype.parseCode=function(buffer,filename){return this.lexer.mode_eval=!1,this.lexer.all_tokens=!1,this.parser.parse(buffer,filename)},engine.tokenGetAll=function(buffer,options){var self=new engine(options);return self.tokenGetAll(buffer)},engine.prototype.tokenGetAll=function(buffer){this.lexer.mode_eval=!1,this.lexer.all_tokens=!0;var EOF=this.lexer.EOF,names=this.tokens.values;this.lexer.setInput(buffer);for(var token=this.lexer.lex()||EOF,result=[];token!=EOF;){var entry=this.lexer.yytext;names.hasOwnProperty(token)&&(entry=[names[token],entry,this.lexer.yylloc.first_line]),result.push(entry),token=this.lexer.lex()||EOF}return result},module.exports=engine},{"./ast":2,"./lexer":91,"./parser":100,"./tokens":116}]},{},[]); //# sourceMappingURL=php-parser.min.js.map \ No newline at end of file diff --git a/dist/php-parser.min.js.map b/dist/php-parser.min.js.map index 9c6a3b5ff..61914e7f3 100644 --- a/dist/php-parser.min.js.map +++ b/dist/php-parser.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["php-parser.js"],"names":["require","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","1","module","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","this","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","2","Location","Position","AST","withPositions","withSource","position","parser","lexer","yylloc","first_line","first_column","first_offset","prepare","kind","start","self","location","slice","src","_input","substring","offset","prev_offset","prev_line","prev_column","shift","node","result","Object","create","forEach","ctor","constructor","toLowerCase","./ast/array","./ast/assign","./ast/bin","./ast/block","./ast/boolean","./ast/break","./ast/call","./ast/case","./ast/cast","./ast/catch","./ast/class","./ast/classconstant","./ast/clone","./ast/closure","./ast/constant","./ast/constref","./ast/continue","./ast/declaration","./ast/declare","./ast/do","./ast/doc","./ast/echo","./ast/empty","./ast/encapsed","./ast/entry","./ast/error","./ast/eval","./ast/exit","./ast/expression","./ast/for","./ast/foreach","./ast/function","./ast/global","./ast/goto","./ast/halt","./ast/identifier","./ast/if","./ast/include","./ast/inline","./ast/interface","./ast/isset","./ast/label","./ast/list","./ast/literal","./ast/location","./ast/lookup","./ast/magic","./ast/method","./ast/namespace","./ast/new","./ast/node","./ast/nowdoc","./ast/number","./ast/offsetlookup","./ast/operation","./ast/parameter","./ast/parenthesis","./ast/position","./ast/post","./ast/pre","./ast/print","./ast/program","./ast/property","./ast/propertylookup","./ast/retif","./ast/return","./ast/shell","./ast/silent","./ast/statement","./ast/static","./ast/staticlookup","./ast/string","./ast/switch","./ast/sys","./ast/throw","./ast/trait","./ast/traitalias","./ast/traitprecedence","./ast/traituse","./ast/try","./ast/unary","./ast/unset","./ast/usegroup","./ast/useitem","./ast/variable","./ast/variadic","./ast/while","./ast/yield","./ast/yieldfrom","3","Expr","KIND","extends","shortForm","items","./expression","4","Statement","Assign","left","right","operator","./statement","5","Operation","binOperatorsPrecedence","precedence","list","index","Bin","type","lLevel","rLevel","buffer","./operation","6","Block","children","7","Literal","Boolean","value","./literal","8","Node","Break","level","./node","9","Call","what","10","Case","test","body","11","Cast","12","Catch","variable","13","Declaration","Class","ext","impl","flags","isAnonymous","implements","parseFlags","./declaration","14","Constant","ClassConstant","./constant","15","Clone","16","Closure","byref","nullable","17","18","ConstRef","identifier","19","Continue","20","IS_PUBLIC","IS_PROTECTED","IS_PRIVATE","isAbstract","isFinal","visibility","isStatic","21","Declare","mode","MODE_SHORT","MODE_BLOCK","MODE_NONE","./block","22","Do","23","Doc","isDoc","lines","24","Sys","Echo","./sys","25","Empty","26","Encapsed","TYPE_STRING","TYPE_SHELL","TYPE_HEREDOC","27","Entry","key","28","message","token","line","expected","29","Eval","source","30","Exit","status","31","Expression","32","For","init","increment","33","Foreach","34","fn","_Function","35","Global","36","Goto","label","37","Halt","after","38","Identifier","isRelative","resolution","RELATIVE_NAME","UNQUALIFIED_NAME","FULL_QUALIFIED_NAME","QUALIFIED_NAME","join","39","If","alternate","40","Include","target","41","Inline","42","Interface","43","Isset","44","Label","45","List","46","47","end","48","Lookup","49","Magic","50","Method","./function","51","Namespace","withBrackets","./identifier","52","New","53","loc","54","Nowdoc","55","_Number","Number","56","OffsetLookup","./lookup","57","58","Parameter","isRef","isVariadic","variadic","59","Parenthesis","inner","60","column","61","Post","62","Pre","63","Print","64","Program","errors","65","Property","66","PropertyLookup","67","RetIf","trueExpr","falseExpr","68","Return","expr","69","Shell","70","Silent","71","72","Static","73","StaticLookup","74","String","isDoubleQuote","75","Switch","76","77","Throw","78","Trait","79","TraitAlias","trait","method","as","80","TraitPrecedence","instead","81","TraitUse","traits","adaptations","82","Try","catches","always","83","Unary","84","Unset","85","UseGroup","86","UseItem","alias","TYPE_CONST","TYPE_FUNCTION","87","Variable","88","Variadic","89","While","90","Yield","91","YieldFrom","92","engine","tok","tokens","names","EOF","debug","all_tokens","comment_tokens","mode_eval","asp_tags","short_tags","yyprevcol","keywords","__class__","T_CLASS_C","__trait__","T_TRAIT_C","__function__","T_FUNC_C","__method__","T_METHOD_C","__line__","T_LINE","__file__","T_FILE","__dir__","T_DIR","__namespace__","T_NS_C","exit","T_EXIT","die","function","T_FUNCTION","const","T_CONST","return","T_RETURN","try","T_TRY","catch","T_CATCH","finally","T_FINALLY","throw","T_THROW","if","T_IF","elseif","T_ELSEIF","endif","T_ENDIF","else","T_ELSE","while","T_WHILE","endwhile","T_ENDWHILE","do","T_DO","for","T_FOR","endfor","T_ENDFOR","foreach","T_FOREACH","endforeach","T_ENDFOREACH","declare","T_DECLARE","enddeclare","T_ENDDECLARE","instanceof","T_INSTANCEOF","T_AS","switch","T_SWITCH","endswitch","T_ENDSWITCH","case","T_CASE","default","T_DEFAULT","break","T_BREAK","continue","T_CONTINUE","goto","T_GOTO","echo","T_ECHO","print","T_PRINT","class","T_CLASS","interface","T_INTERFACE","T_TRAIT","T_EXTENDS","T_IMPLEMENTS","new","T_NEW","clone","T_CLONE","var","T_VAR","eval","T_EVAL","include","T_INCLUDE","include_once","T_INCLUDE_ONCE","T_REQUIRE","require_once","T_REQUIRE_ONCE","namespace","T_NAMESPACE","use","T_USE","insteadof","T_INSTEADOF","global","T_GLOBAL","isset","T_ISSET","empty","T_EMPTY","__halt_compiler","T_HALT_COMPILER","static","T_STATIC","abstract","T_ABSTRACT","final","T_FINAL","private","T_PRIVATE","protected","T_PROTECTED","public","T_PUBLIC","unset","T_UNSET","T_LIST","T_ARRAY","callable","T_CALLABLE","or","T_LOGICAL_OR","and","T_LOGICAL_AND","xor","T_LOGICAL_XOR","castKeywords","int","T_INT_CAST","integer","real","T_DOUBLE_CAST","double","float","string","T_STRING_CAST","binary","T_ARRAY_CAST","object","T_OBJECT_CAST","bool","T_BOOL_CAST","boolean","T_UNSET_CAST","setInput","input","size","yylineno","yytext","last_line","last_column","conditionStack","done","begin","ch","unput","c","tryMatch","text","ahead","tryMatchCaseless","consume","getState","setState","state","appendToken","lex","next","T_WHITESPACE","T_COMMENT","T_DOC_COMMENT","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","condition","curCondition","stateCb","popState","pop","tName","values","console","log","k","./lexer/comments.js","./lexer/initial.js","./lexer/numbers.js","./lexer/property.js","./lexer/scripting.js","./lexer/strings.js","./lexer/tokens.js","./lexer/utils.js","93","aspTagMode","is_WHITESPACE","94","nextINITIAL","matchINITIAL","T_INLINE_HTML","95","arch","MAX_LENGTH_OF_LONG","long_min_digits","consume_NUM","hasPoint","is_HEX","consume_HNUM","consume_BNUM","is_NUM","consume_LNUM","T_DNUMBER","T_LNUMBER","_process","96","matchST_LOOKING_FOR_PROPERTY","T_OBJECT_OPERATOR","is_LABEL_START","consume_LABEL","T_STRING","matchST_LOOKING_FOR_VARNAME","T_STRING_VARNAME","matchST_VAR_OFFSET","T_NUM_STRING","T_VARIABLE","T_ENCAPSED_AND_WHITESPACE","is_TOKEN","97","matchST_IN_SCRIPTING","consume_TOKEN","T_CONSTANT_ENCAPSED_STRING","ST_DOUBLE_QUOTES","nextCH","T_CLOSE_TAG","98","is_HEREDOC","revert","is_TABSPACE","tChar","yyoffset","is_LABEL","yylabel","heredoc_label","T_START_HEREDOC","prefix","isDOC_MATCH","matchST_NOWDOC","T_END_HEREDOC","matchST_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","consume_VARIABLE","T_CURLY_OPEN","matchST_BACKQUOTE","matchST_DOUBLE_QUOTES","99","id","T_YIELD_FROM","T_YIELD","tokenTerminals","$","-","nchar","T_DEC","T_MINUS_EQUAL","\\","T_NS_SEPARATOR","/","T_DIV_EQUAL",":","T_DOUBLE_COLON","(","initial","consume_TABSPACE","yylen","castToken","castId","=","T_DOUBLE_ARROW","T_IS_IDENTICAL","T_IS_EQUAL","+","T_INC","T_PLUS_EQUAL","!","T_IS_NOT_IDENTICAL","T_IS_NOT_EQUAL","?","T_COALESCE","<","T_SL_EQUAL","T_SL","T_SPACESHIP","T_IS_SMALLER_OR_EQUAL",">","T_IS_GREATER_OR_EQUAL","T_SR_EQUAL","T_SR","*","T_MUL_EQUAL","T_POW_EQUAL","T_POW",".","T_CONCAT_EQUAL","T_ELLIPSIS","%","T_MOD_EQUAL","&","T_AND_EQUAL","T_BOOLEAN_AND","|","T_OR_EQUAL","T_BOOLEAN_OR","^","T_XOR_EQUAL","100","charCodeAt","indexOf","101","isNumber","isNaN","parseFloat","isFinite","ast","prev","extractDoc","suppressErrors","entries","VARIABLE","SCALAR","T_MAGIC_CONST","T_MEMBER_FLAGS","EOS","EXPR","getTokenName","parse","filename","_errors","currentNamespace","innerList","program","childs","nextWithComments","read_start","undefined","isArray","raiseError","msgExpect","expect","err","SyntaxError","lineNumber","fileName","columnNumber","error","msg","symbol","expectEndOfStatement","ignoreStack","showlog","stack","split","trim","found","ignoreComments","is","./parser/array.js","./parser/class.js","./parser/comment.js","./parser/expr.js","./parser/function.js","./parser/if.js","./parser/loops.js","./parser/main.js","./parser/namespace.js","./parser/scalar.js","./parser/statement.js","./parser/switch.js","./parser/try.js","./parser/utils.js","./parser/variable.js","102","ArrayExpr","ArrayEntry","read_array","read_array_pair_list","read_variable","read_expr","read_dim_offset","103","read_class","flag","propName","propExtends","propImplements","read_namespace_name","read_name_list","read_class_body","read_class_scope","read_member_flags","variables","read_variable_list","read_function","constants","read_constant_list","read_trait_use_statement","read_doc_comment","read_comment","read_list","read_variable_declaration","read_constant_declaration","asInterface","idx","val","read_interface","read_interface_body","read_function_declaration","read_trait","read_trait_use_alias","104","docSplit","105","read_expr_item","trueArg","recursive_variable_chain_scan","read_dereferencable","read_function_argument_list","read_encapsed_string","assign","isInner","assignList","read_assignment_list","hasItem","read_new_expr","arg","read_scalar","read_class_name_reference","read_static_getter","read_assignment_list_element","106","is_reference","is_variadic","closure","read_code_block","nodeName","returnType","params","read_parameter_list","read_lexical_var","read_type","read_parameter","wasVariadic","argument","read_argument_list","107","read_if","read_if_expr","read_elseif_short","read_else_short","read_inner_statement","read_statement","108","read_while","read_short_form","read_do","read_for","read_foreach","read_foreach_variable","109","read_namespace","read_top_statement","110","read_top_statements","relative","read_use_statement","read_use_type","read_use_declaration","read_use_declarations","typed","read_use_alias","useitem","111","specialChar","\\r","\\n","\\t","\\v","fromCharCode","\\e","\\f","\\\\","\\$","\\\"","\\'","resolve_special_chars","replace","seq","get_magic_constant","lastCh","read_encapsed_string_item","varName","read_simple_variable","read_encaps_var_offset","encapsed","112","statement","read_const_list","read_inner_statements","read_declare_list","read_switch","current","read_variable_declarations","read_try","top","113","read_switch_case_list","read_case_list","stopToken","114","item","115","separator","preserveFirstSeparator","116","read_only","read_reference_variable","literal","recursive_scan_loop","isDblQuote","num","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","php-parser","combine","to","keys","bind","options","parseEval","parseCode","tokenGetAll","entry","hasOwnProperty","./ast","./lexer","./parser","./tokens"],"mappings":"AAEAA,QAAQ,QAAUC,GAAEC,EAAEC,EAAEC,GAAG,QAASC,GAAEC,EAAEC,GAAG,IAAIJ,EAAEG,GAAG,CAAC,IAAIJ,EAAEI,GAAG,CAAC,GAAIE,GAAkB,kBAATR,UAAqBA,OAAQ,KAAIO,GAAGC,EAAE,MAAOA,GAAEF,GAAE,EAAI,IAAGG,EAAE,MAAOA,GAAEH,GAAE,EAAI,IAAII,GAAE,GAAIC,OAAM,uBAAuBL,EAAE,IAAK,MAAMI,GAAEE,KAAK,mBAAmBF,EAAE,GAAIG,GAAEV,EAAEG,IAAIQ,WAAYZ,GAAEI,GAAG,GAAGS,KAAKF,EAAEC,QAAQ,SAASb,GAAG,GAAIE,GAAED,EAAEI,GAAG,GAAGL,EAAG,OAAOI,GAAEF,EAAEA,EAAEF,IAAIY,EAAEA,EAAEC,QAAQb,EAAEC,EAAEC,EAAEC,GAAG,MAAOD,GAAEG,GAAGQ,QAAkD,IAAI,GAA1CL,GAAkB,kBAATT,UAAqBA,QAAgBM,EAAE,EAAEA,EAAEF,EAAEY,OAAOV,IAAID,EAAED,EAAEE,GAAI,OAAOD,KAAKY,GAAG,SAASjB,QAAQkB,OAAOJ,SAY/d,QAASK,oBACL,KAAM,IAAIR,OAAM,mCAEpB,QAASS,uBACL,KAAM,IAAIT,OAAM,qCAsBpB,QAASU,YAAWC,KAChB,GAAIC,mBAAqBC,WAErB,MAAOA,YAAWF,IAAK,EAG3B,KAAKC,mBAAqBJ,mBAAqBI,mBAAqBC,WAEhE,MADAD,kBAAmBC,WACZA,WAAWF,IAAK,EAE3B,KAEI,MAAOC,kBAAiBD,IAAK,GAC/B,MAAMrB,GACJ,IAEI,MAAOsB,kBAAiBR,KAAK,KAAMO,IAAK,GAC1C,MAAMrB,GAEJ,MAAOsB,kBAAiBR,KAAKU,KAAMH,IAAK,KAMpD,QAASI,iBAAgBC;AACrB,GAAIC,qBAAuBC,aAEvB,MAAOA,cAAaF,OAGxB,KAAKC,qBAAuBR,sBAAwBQ,qBAAuBC,aAEvE,MADAD,oBAAqBC,aACdA,aAAaF,OAExB,KAEI,MAAOC,oBAAmBD,QAC5B,MAAO1B,GACL,IAEI,MAAO2B,oBAAmBb,KAAK,KAAMY,QACvC,MAAO1B,GAGL,MAAO2B,oBAAmBb,KAAKU,KAAME,UAYjD,QAASG,mBACAC,UAAaC,eAGlBD,UAAW,EACPC,aAAahB,OACbiB,MAAQD,aAAaE,OAAOD,OAE5BE,YAAa,EAEbF,MAAMjB,QACNoB,cAIR,QAASA,cACL,IAAIL,SAAJ,CAGA,GAAIM,SAAUhB,WAAWS,gBACzBC,WAAW,CAGX,KADA,GAAIO,KAAML,MAAMjB,OACVsB,KAAK,CAGP,IAFAN,aAAeC,MACfA,WACSE,WAAaG,KACdN,cACAA,aAAaG,YAAYI,KAGjCJ,aAAa,EACbG,IAAML,MAAMjB,OAEhBgB,aAAe,KACfD,UAAW,EACXL,gBAAgBW,UAiBpB,QAASG,MAAKlB,IAAKmB,OACfhB,KAAKH,IAAMA,IACXG,KAAKgB,MAAQA,MAYjB,QAASC,SAhKT,GAOInB,kBACAK,mBARAe,QAAUzB,OAAOJ,YAgBpB,WACG,IAEQS,iBADsB,kBAAfC,YACYA,WAEAL;CAEzB,MAAOlB,GACLsB,iBAAmBJ,iBAEvB,IAEQS,mBADwB,kBAAjBC,cACcA,aAEAT,oBAE3B,MAAOnB,GACL2B,mBAAqBR,uBAuD7B,IAEIY,cAFAC,SACAF,UAAW,EAEXI,YAAa,CAyCjBQ,SAAQC,SAAW,SAAUtB,KACzB,GAAIuB,MAAO,GAAIC,OAAMC,UAAU/B,OAAS,EACxC,IAAI+B,UAAU/B,OAAS,EACnB,IAAK,GAAIP,GAAI,EAAGA,EAAIsC,UAAU/B,OAAQP,IAClCoC,KAAKpC,EAAI,GAAKsC,UAAUtC,EAGhCwB,OAAMe,KAAK,GAAIR,MAAKlB,IAAKuB,OACJ,IAAjBZ,MAAMjB,QAAiBe,UACvBV,WAAWe,aASnBI,KAAKS,UAAUV,IAAM,WACjBd,KAAKH,IAAI4B,MAAM,KAAMzB,KAAKgB,QAE9BE,QAAQQ,MAAQ,UAChBR,QAAQS,SAAU,EAClBT,QAAQU,OACRV,QAAQW,QACRX,QAAQY,QAAU,GAClBZ,QAAQa,YAIRb,QAAQc,GAAKf,KACbC,QAAQe,YAAchB,KACtBC,QAAQgB,KAAOjB,KACfC,QAAQiB,IAAMlB,KACdC,QAAQkB,eAAiBnB,KACzBC,QAAQmB,mBAAqBpB,KAC7BC,QAAQoB,KAAOrB,KAEfC,QAAQqB,QAAU,SAAUC,MACxB,KAAM,IAAItD,OAAM,qCAGpBgC,QAAQuB,IAAM,WAAc,MAAO,KACnCvB,QAAQwB,MAAQ,SAAUC,KACtB,KAAM,IAAIzD,OAAM,mCAEpBgC,QAAQ0B,MAAQ,WAAa,MAAO;OAE9BC,GAAG,SAAStE,QAAQkB,OAAOJ,SAOjC,GAAIyD,UAAWvE,QAAQ,kBACnBwE,SAAWxE,QAAQ,kBAoGnByE,IAAM,SAASC,cAAeC,YAChClD,KAAKiD,cAAgBA,cACrBjD,KAAKkD,WAAaA,WASpBF,KAAIxB,UAAU2B,SAAW,SAASC,QAChC,MAAO,IAAIL,UACTK,OAAOC,MAAMC,OAAOC,WACpBH,OAAOC,MAAMC,OAAOE,aACpBJ,OAAOC,MAAMC,OAAOG,eAWxBT,IAAIxB,UAAUkC,QAAU,SAASC,KAAMP,QACrC,GAAIQ,OAAQ,MACR5D,KAAKiD,eAAiBjD,KAAKkD,cAC7BU,MAAQ5D,KAAKmD,SAASC,QAExB,IAAIS,MAAO7D,IAEX,OAAO,YACL,GAAI8D,UAAW,KACX1C,KAAOC,MAAMG,UAAUuC,MAAMzE,KAAKgC,UACtC,IAAIuC,KAAKZ,eAAiBY,KAAKX,WAAY,CACzC,GAAIc,KAAM,IACNH,MAAKX,aACPc,IAAMZ,OAAOC,MAAMY,OAAOC,UACxBN,MAAMO,OACNf,OAAOC,MAAMC,OAAOc,cAItBN,SADED,KAAKZ,cACI,GAAIH,UAASkB,IAAKJ,MAAO,GAAIb,UACtCK,OAAOC,MAAMC,OAAOe,UACpBjB,OAAOC,MAAMC,OAAOgB,YACpBlB,OAAOC,MAAMC,OAAOc,cAGX,GAAItB,UAASkB,IAAK,KAAM,MAGrC5C,KAAKG,KAAKuC,UAGPH,OACHA,KAAOvC,KAAKmD,QAGd,IAAIC,MAAOX,KAAKF,KAChB,IAAoB,kBAATa,MACT,KAAM,IAAItF,OAAM,mBAAmByE,KAAK;AAE1C,GAAIc,QAASC,OAAOC,OAAOH,KAAKhD,UAEhC,OADAgD,MAAK/C,MAAMgD,OAAQrD,MACZqD,UAMTlG,QAAQ,eACRA,QAAQ,gBACRA,QAAQ,aACRA,QAAQ,eACRA,QAAQ,iBACRA,QAAQ,eACRA,QAAQ,cACRA,QAAQ,cACRA,QAAQ,cACRA,QAAQ,eACRA,QAAQ,eACRA,QAAQ,uBACRA,QAAQ,eACRA,QAAQ,iBACRA,QAAQ,kBACRA,QAAQ,kBACRA,QAAQ,kBACRA,QAAQ,qBACRA,QAAQ,iBACRA,QAAQ,YACRA,QAAQ,aACRA,QAAQ,cACRA,QAAQ,eACRA,QAAQ,kBACRA,QAAQ,eACRA,QAAQ,eACRA,QAAQ,cACRA,QAAQ,cACRA,QAAQ,oBACRA,QAAQ,aACRA,QAAQ,iBACRA,QAAQ,kBACRA,QAAQ,gBACRA,QAAQ,cACRA,QAAQ,cACRA,QAAQ,oBACRA,QAAQ,YACRA,QAAQ,iBACRA,QAAQ,gBACRA,QAAQ,mBACRA,QAAQ,eACRA,QAAQ,eACRA,QAAQ,cACRA,QAAQ,iBACRA,QAAQ,gBACRA,QAAQ,eACRA,QAAQ,gBACRA,QAAQ,mBACRA,QAAQ,aACRA,QAAQ,cACRA,QAAQ,gBACRA,QAAQ,gBACRA,QAAQ,sBACRA,QAAQ,mBACRA,QAAQ,mBACRA,QAAQ,qBACRA,QAAQ,cACRA,QAAQ,aACRA,QAAQ,eACRA,QAAQ,iBACRA,QAAQ,kBACRA,QAAQ,wBACRA,QAAQ,eACRA,QAAQ,gBACRA,QAAQ,eACRA,QAAQ,gBACRA,QAAQ,mBACRA,QAAQ,gBACRA,QAAQ,sBACRA,QAAQ,gBACRA,QAAQ,gBACRA,QAAQ,aACRA,QAAQ,eACRA,QAAQ,eACRA,QAAQ,oBACRA,QAAQ,yBACRA,QAAQ,kBACRA,QAAQ,aACRA,QAAQ,eACRA,QAAQ,eACRA,QAAQ,kBACRA,QAAQ,iBACRA,QAAQ,kBACRA,QAAQ,kBACRA,QAAQ,eACRA,QAAQ,eACRA,QAAQ,oBACRqG,QAAQ,SAAUC;AAClB,GAAIlB,MAAOkB,KAAKrD,UAAUsD,YAAYtC,KAAKuC,aAC3B,OAAZpB,KAAK,KAAYA,KAAOA,KAAKO,UAAU,IAC3ClB,IAAIxB,UAAUmC,MAAQkB,OAGxBpF,OAAOJ,QAAU2D,MAEdgC,cAAc,EAAEC,eAAe,EAAEC,YAAY,EAAEC,cAAc,EAAEC,gBAAgB,EAAEC,cAAc,EAAEC,aAAa,EAAEC,aAAa,GAAGC,aAAa,GAAGC,cAAc,GAAGC,cAAc,GAAGC,sBAAsB,GAAGC,cAAc,GAAGC,gBAAgB,GAAGC,iBAAiB,GAAGC,iBAAiB,GAAGC,iBAAiB,GAAGC,oBAAoB,GAAGC,gBAAgB,GAAGC,WAAW,GAAGC,YAAY,GAAGC,aAAa,GAAGC,cAAc,GAAGC,iBAAiB,GAAGC,cAAc,GAAGC,cAAc,GAAGC,aAAa,GAAGC,aAAa,GAAGC,mBAAmB,GAAGC,YAAY,GAAGC,gBAAgB,GAAGC,iBAAiB,GAAGC,eAAe,GAAGC,aAAa,GAAGC,aAAa,GAAGC,mBAAmB,GAAGC,WAAW,GAAGC,gBAAgB,GAAGC,eAAe,GAAGC,kBAAkB,GAAGC,cAAc,GAAGC,cAAc,GAAGC,aAAa,GAAGC,gBAAgB,GAAGC,iBAAiB,GAAGC,eAAe,GAAGC,cAAc,GAAGC,eAAe,GAAGC,kBAAkB,GAAGC,YAAY;AAAGC,aAAa,GAAGC,eAAe,GAAGC,eAAe,GAAGC,qBAAqB,GAAGC,kBAAkB,GAAGC,kBAAkB,GAAGC,oBAAoB,GAAGC,iBAAiB,GAAGC,aAAa,GAAGC,YAAY,GAAGC,cAAc,GAAGC,gBAAgB,GAAGC,iBAAiB,GAAGC,uBAAuB,GAAGC,cAAc,GAAGC,eAAe,GAAGC,cAAc,GAAGC,eAAe,GAAGC,kBAAkB,GAAGC,eAAe,GAAGC,qBAAqB,GAAGC,eAAe,GAAGC,eAAe,GAAGC,YAAY,GAAGC,cAAc,GAAGC,cAAc,GAAGC,mBAAmB,GAAGC,wBAAwB,GAAGC,iBAAiB,GAAGC,YAAY,GAAGC,cAAc,GAAGC,cAAc,GAAGC,iBAAiB,GAAGC,gBAAgB,GAAGC,iBAAiB,GAAGC,iBAAiB,GAAGC,cAAc,GAAGC,cAAc,GAAGC,kBAAkB,KAAKC,GAAG,SAASlM,QAAQkB,OAAOJ,SAO/nD,GAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,QASPtJ,MAAQqJ,KAAKE,QAAQ,QAASvJ,OAAMwJ,UAAWC,MAAOhH,UACxD4G,KAAKjJ,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAK8K,MAAQA,MACb9K,KAAK6K,UAAYA,WAGnBpL,QAAOJ,QAAUgC,QAEd0J,eAAe,KAAKC,GAAG,SAASzM,QAAQkB,OAAOJ;AAOlD,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,SAUPO,OAASD,UAAUL,QAAQ,QAASM,QAAOC,KAAMC,MAAOC,SAAUvH,UACpEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKqL,SAAWA,SAChBrL,KAAKmL,KAAOA,KACZnL,KAAKoL,MAAQA,OAGf3L,QAAOJ,QAAU6L,SAEdI,cAAc,KAAKC,GAAG,SAAShN,QAAQkB,OAAOJ,SAMjD,YAEA,IAAImM,WAAYjN,QAAQ,eACpBoM,KAAO,MAGPc,yBACD,OACA,QACA,QAGA,OACA,OACA,OACA,MACA,MACA,MACA,KAAM,KAAM,MAAO,MAAmB,QACtC,IAAK,KAAM,IAAK,OAChB,KAAM,OACN,IAAK,IAAK,MACV,IAAK,IAAK,MAEV,eAOCC,aACJD,wBAAuB7G,QAAQ,SAAU+G,KAAMC,OAC7CD,KAAK/G,QAAQ,SAAUyG,UACrBK,WAAWL,UAAYO,MAAQ,KAiBnC,IAAIC,KAAML,UAAUZ,QAAQ,QAASiB,KAAIC,KAAMX,KAAMC,MAAOtH,UAE1D,GADA0H,UAAU/J,MAAMzB,MAAO2K,KAAM7G,WACzBsH,OAAwB,QAAfA,MAAMzH,KAAgB,CACjC,GAAIoI,QAASL,WAAWI,MACpBE,OAASN,WAAWN,MAAMU,KAC9B,IAAIC,QAAUC,QAAUA,OAASD,OAAQ,CAEvC,GAAIE,QAASb,MAAMA,KACnBA,OAAMA,MAAQA,MAAMD,KACpBC,MAAMD,KAAOA,KACbA,KAAOc,OACPA,OAASb,MAAMU,KACfV,MAAMU,KAAOA,KACbA,KAAOG;AACPA,OAASd,KACTA,KAAOC,MACPA,MAAQa,QAGZjM,KAAK8L,KAAOA,KACZ9L,KAAKmL,KAAOA,KACZnL,KAAKoL,MAAQA,OAGf3L,QAAOJ,QAAUwM,MAEdK,cAAc,KAAKC,GAAG,SAAS5N,QAAQkB,OAAOJ,SAOjD,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,QAQPyB,MAAQnB,UAAUL,QAAQ,QAASwB,OAAMzI,KAAM0I,SAAUvI,UAC3DmH,UAAUxJ,MAAMzB,MAAO2D,MAAQgH,KAAM7G,WACrC9D,KAAKqM,SAAWA,UAGlB5M,QAAOJ,QAAU+M,QAEdd,cAAc,KAAKgB,GAAG,SAAS/N,QAAQkB,OAAOJ,SAOjD,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,UAOP6B,QAAUD,QAAQ3B,QAAQ,QAAS4B,SAAQC,MAAO3I,UACpDyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,YAGpCrE,QAAOJ,QAAUmN,UAEdE,YAAY,KAAKC,GAAG,SAASpO,QAAQkB,OAAOJ,SAM/C,YACA,IAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,QAQPkC,MAAQD,KAAKhC,QAAQ,QAASiC,OAAMC,MAAOhJ,UAC7C8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAK8M,MAAQA,OAGfrN,QAAOJ,QAAUwN,QAEdE,SAAS,KAAKC,GAAG,SAASzO,QAAQkB,OAAOJ,SAM5C,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,OASPsC,KAAOhC,UAAUL,QAAQ,QAASqC,MAAKC,KAAM9L,KAAM0C,UACrDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G;AAC7B9D,KAAKkN,KAAOA,KACZlN,KAAKsB,UAAYF,MAGnB3B,QAAOJ,QAAU4N,OAEd3B,cAAc,KAAK6B,IAAI,SAAS5O,QAAQkB,OAAOJ,SAMlD,YACA,IAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,OASPyC,KAAOR,KAAKhC,QAAQ,QAASwC,MAAKC,KAAMC,KAAMxJ,UAChD8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKqN,KAAOA,KACZrN,KAAKsN,KAAOA,MAGd7N,QAAOJ,QAAU+N,OAEdL,SAAS,KAAKQ,IAAI,SAAShP,QAAQkB,OAAOJ,SAM7C,YAEA,IAAImM,WAAYjN,QAAQ,eACpBoM,KAAO,OASP6C,KAAOhC,UAAUZ,QAAQ,QAAS4C,MAAK1B,KAAMoB,KAAMpJ,UACrD0H,UAAU/J,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAK8L,KAAOA,KACZ9L,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUmO,OAEdtB,cAAc,KAAKuB,IAAI,SAASlP,QAAQkB,OAAOJ,SAMlD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,QAWP+C,MAAQzC,UAAUL,QAAQ,QAAS8C,OAAMJ,KAAMJ,KAAMS,SAAU7J,UACjEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKsN,KAAOA,KACZtN,KAAKkN,KAAOA,KACZlN,KAAK2N,SAAWA,UAGlBlO,QAAOJ,QAAUqO,QAEdpC,cAAc,KAAKsC,IAAI,SAASrP,QAAQkB,OAAOJ,SAOlD,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAO,QAcPmD,MAAQD,YAAYjD,QAAQ,QAASkD,OAAMtL,KAAMuL,IAAKC,KAAMV,KAAMW,MAAOnK;AAC3E+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB,WACrC9D,KAAKkO,aAAc1L,KACnBxC,KAAK4K,QAAUmD,IACf/N,KAAKmO,WAAaH,KAClBhO,KAAKsN,KAAOA,KACZtN,KAAKoO,WAAWH,QAGlBxO,QAAOJ,QAAUyO,QAEdO,gBAAgB,KAAKC,IAAI,SAAS/P,QAAQkB,OAAOJ,SAOpD,GAAIkP,UAAWhQ,QAAQ,cACnBoM,KAAO,gBASP6D,cAAgBD,SAAS3D,QAAQ,QAAS4D,eAAchM,KAAMiK,MAAOwB,MAAOnK,UAC9EyK,SAAS9M,MAAMzB,MAAOwC,KAAMiK,MAAO3I,WACnC9D,KAAK2D,KAAOgH,KACZ3K,KAAKoO,WAAWH,QAGlBxO,QAAOJ,QAAUmP,gBAEdC,aAAa,KAAKC,IAAI,SAASnQ,QAAQkB,OAAOJ,SAOjD,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,QAQPgE,MAAQ1D,UAAUL,QAAQ,QAAS+D,OAAMzB,KAAMpJ,UACjDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUsP,QAEdrD,cAAc,KAAKsD,IAAI,SAASrQ,QAAQkB,OAAOJ,SAMlD,YACA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,UAYPkE,QAAU5D,UAAUL,QAAQ,QAASiE,SAAQzN,KAAM0N,MAAOhD,KAAMiD,SAAUjL,UAC5EmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKsB,UAAYF,KACjBpB,KAAK8O,MAAQA,MACb9O,KAAK8L,KAAOA,KACZ9L,KAAK+O,SAAWA;AAChB/O,KAAKsN,KAAO,MAGd7N,QAAOJ,QAAUwP,UAEdvD,cAAc,KAAK0D,IAAI,SAASzQ,QAAQkB,OAAOJ,SAOlD,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAO,WAQP4D,SAAWV,YAAYjD,QAAQ,QAAS2D,UAAS/L,KAAMiK,MAAO3I,UAChE+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB,WACrC9D,KAAKyM,MAAQA,OAGfhN,QAAOJ,QAAUkP,WAEdF,gBAAgB,KAAKY,IAAI,SAAS1Q,QAAQkB,OAAOJ,SAOpD,GAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,WAQPuE,SAAWxE,KAAKE,QAAQ,QAASsE,UAASC,WAAYrL,UACxD4G,KAAKjJ,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKwC,KAAO2M,YAGd1P,QAAOJ,QAAU6P,WAEdnE,eAAe,KAAKqE,IAAI,SAAS7Q,QAAQkB,OAAOJ,SAMnD,YACA,IAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,WAQP0E,SAAWzC,KAAKhC,QAAQ,QAASyE,UAASvC,MAAOhJ,UACnD8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAK8M,MAAQA,OAGfrN,QAAOJ,QAAUgQ,WAEdtC,SAAS,KAAKuC,IAAI,SAAS/Q,QAAQkB,OAAOJ,SAO7C,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,cAEP4E,UAAgB,SAChBC,aAAgB,YAChBC,WAAgB,UAQhB5B,YAAc5C,UAAUL,QAAQ,QAASiD,aAAYlK,KAAMnB,KAAMsB;AACnEmH,UAAUxJ,MAAMzB,MAAO2D,MAAQgH,KAAM7G,WACrC9D,KAAKwC,KAAOA,MAQdqL,aAAYrM,UAAU4M,WAAa,SAASH,OAC1CjO,KAAK0P,WAA0B,IAAbzB,MAAM,GACxBjO,KAAK2P,QAAuB,IAAb1B,MAAM,GACH,UAAdjO,KAAK2D,OACU,IAAbsK,MAAM,GACRjO,KAAK4P,WAAaL,UACI,IAAbtB,MAAM,GACfjO,KAAK4P,WAAaJ,aACI,IAAbvB,MAAM,KACfjO,KAAK4P,WAAaH,YAEpBzP,KAAK6P,SAAwB,IAAb5B,MAAM,KAI1BxO,OAAOJ,QAAUwO,cAEdvC,cAAc,KAAKwE,IAAI,SAASvR,QAAQkB,OAAOJ,SAOlD,GAAI+M,OAAQ7N,QAAQ,WAChBoM,KAAO,UAUPoF,QAAU3D,MAAMxB,QAAQ,QAASmF,SAAQ7C,KAAMI,KAAM0C,KAAMlM,UAC7DsI,MAAM3K,MAAMzB,MAAO2K,KAAM2C,KAAMxJ,WAC/B9D,KAAKkN,KAAOA,KACZlN,KAAKgQ,KAAOA,MAcdD,SAAQE,WAAa,QAYrBF,QAAQG,WAAa,QAerBH,QAAQI,UAAY,OAEpB1Q,OAAOJ,QAAU0Q,UAEdK,UAAU,IAAIC,IAAI,SAAS9R,QAAQkB,OAAOJ,SAM7C,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,KASP2F,GAAKrF,UAAUL,QAAQ,QAAS0F,IAAGjD,KAAMC,KAAMxJ,UACjDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKqN,KAAOA,KACZrN,KAAKsN,KAAOA,MAGd7N,QAAOJ,QAAUiR,KAEdhF,cAAc,KAAKiF,IAAI,SAAShS,QAAQkB,OAAOJ,SAOlD,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,MASP6F,IAAM5D,KAAKhC,QAAQ,QAAS4F,KAAIC,MAAOC,MAAO5M;AAChD8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKyQ,MAAQA,MACbzQ,KAAK0Q,MAAQA,OAGfjR,QAAOJ,QAAUmR,MAEdzD,SAAS,KAAK4D,IAAI,SAASpS,QAAQkB,OAAOJ,SAO7C,GAAIuR,KAAMrS,QAAQ,SACdoM,KAAO,OAOPkG,KAAOD,IAAIhG,QAAQ,QAASiG,MAAKzP,KAAM0C,UACzC8M,IAAInP,MAAMzB,MAAO2K,KAAMvJ,KAAM0C,YAG/BrE,QAAOJ,QAAUwR,OAEdC,QAAQ,KAAKC,IAAI,SAASxS,QAAQkB,OAAOJ,SAO5C,GAAIuR,KAAMrS,QAAQ,SACdoM,KAAO,QAOPqG,MAAQJ,IAAIhG,QAAQ,QAASoG,OAAM5P,KAAM0C,UAC3C8M,IAAInP,MAAMzB,MAAO2K,KAAMvJ,KAAM0C,YAG/BrE,QAAOJ,QAAU2R,QAEdF,QAAQ,KAAKG,IAAI,SAAS1S,QAAQkB,OAAOJ,SAO5C,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,WASPuG,SAAW3E,QAAQ3B,QAAQ,QAASsG,UAASzE,MAAOX,KAAMhI,UAC5DyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,WAClC9D,KAAK8L,KAAOA,MAYdoF,UAASC,YAAc,SAUvBD,SAASE,WAAa,QAatBF,SAASG,aAAe,UAExB5R,OAAOJ,QAAU6R,WAEdxE,YAAY,KAAK4E,IAAI,SAAS/S,QAAQkB,OAAOJ,SAOhD,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,QASP4G,MAAQ3E,KAAKhC,QAAQ,QAAS2G,OAAMC,IAAK/E,MAAO3I,UAClD8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKwR,IAAMA,IACXxR,KAAKyM,MAAQA;EAGfhN,QAAOJ,QAAUkS,QAEdxE,SAAS,KAAK0E,IAAI,SAASlT,QAAQkB,OAAOJ,SAO7C,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,QAYPzL,MAAQ0N,KAAKhC,QAAQ,QAAS1L,OAAMwS,QAASC,MAAOC,KAAMC,SAAU/N,UACtE8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAK0R,QAAUA,QACf1R,KAAK2R,MAAQA,MACb3R,KAAK4R,KAAOA,KACZ5R,KAAK6R,SAAWA,UAGlBpS,QAAOJ,QAAUH,QAEd6N,SAAS,KAAK+E,IAAI,SAASvT,QAAQkB,OAAOJ,SAO7C,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,OAQPoH,KAAO9G,UAAUL,QAAQ,QAASmH,MAAKC,OAAQlO,UACjDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKgS,OAASA,QAGhBvS,QAAOJ,QAAU0S,OAEdzG,cAAc,KAAK2G,IAAI,SAAS1T,QAAQkB,OAAOJ,SAOlD,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,OAQPuH,KAAOjH,UAAUL,QAAQ,QAASsH,MAAKC,OAAQrO,UACjDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKmS,OAASA,QAGhB1S,QAAOJ,QAAU6S,OAEd5G,cAAc,KAAK8G,IAAI,SAAS7T,QAAQkB,OAAOJ,SAOlD,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,aAQP0H,WAAazF,KAAKhC,QAAQ,QAASyH,YAAW1O,KAAMG,UACtD8I,KAAKnL,MAAMzB,MAAO2D,MAAQgH,KAAM7G,YAGlCrE,QAAOJ,QAAUgT;AAEdtF,SAAS,KAAKuF,IAAI,SAAS/T,QAAQkB,OAAOJ,SAM7C,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,MAaP4H,IAAMtH,UAAUL,QAAQ,QAAS2H,KAAIC,KAAMnF,KAAMoF,UAAWnF,KAAMzC,UAAW/G,UAC/EmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKwS,KAAOA,KACZxS,KAAKqN,KAAOA,KACZrN,KAAKyS,UAAYA,UACjBzS,KAAK6K,UAAYA,UACjB7K,KAAKsN,KAAOA,MAGd7N,QAAOJ,QAAUkT,MAEdjH,cAAc,KAAKoH,IAAI,SAASnU,QAAQkB,OAAOJ,SAMlD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,UAaPgI,QAAU1H,UAAUL,QAAQ,QAAS+H,SAAQX,OAAQR,IAAK/E,MAAOa,KAAMzC,UAAW/G,UACpFmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKgS,OAASA,OACdhS,KAAKwR,IAAMA,IACXxR,KAAKyM,MAAQA,MACbzM,KAAK6K,UAAYA,UACjB7K,KAAKsN,KAAOA,MAGd7N,QAAOJ,QAAUsT,UAEdrH,cAAc,KAAKsH,IAAI,SAASrU,QAAQkB,OAAOJ,SAOlD,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAgB,WAYhBkI,GAAKhF,YAAYjD,QAAQ,QAASkI,WAAUtQ,KAAMpB,KAAM0N,MAAOhD,KAAMiD,SAAUjL,UACjF+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB,WACrC9D,KAAKsB,UAAYF,KACjBpB,KAAK8O,MAAQA,MACb9O,KAAK8L,KAAOA,KACZ9L,KAAK+O,SAAWA,SAChB/O,KAAKsN,KAAO;EAEd7N,QAAOJ,QAAUwT,KAEdxE,gBAAgB,KAAK0E,IAAI,SAASxU,QAAQkB,OAAOJ,SAMpD,YACA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,SAQPqI,OAAS/H,UAAUL,QAAQ,QAASoI,QAAOlI,MAAOhH,UACpDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAK8K,MAAQA,OAGfrL,QAAOJ,QAAU2T,SAEd1H,cAAc,KAAK2H,IAAI,SAAS1U,QAAQkB,OAAOJ,SAMlD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,OASPuI,KAAOjI,UAAUL,QAAQ,QAASsI,MAAKC,MAAOrP,UAChDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKmT,MAAQA,OAGf1T,QAAOJ,QAAU6T,OAEd5H,cAAc,KAAK8H,IAAI,SAAS7U,QAAQkB,OAAOJ,SAMlD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,OASP0I,KAAOpI,UAAUL,QAAQ,QAASyI,MAAKC,MAAOxP,UAChDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKsT,MAAQA,OAGf7T,QAAOJ,QAAUgU,OAEd/H,cAAc,KAAKiI,IAAI,SAAShV,QAAQkB,OAAOJ,SAOlD,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,aASP6I,WAAa5G,KAAKhC,QAAQ,QAAS4I,YAAWhR,KAAMiR,WAAY3P,UAClE8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACpB2P,WACFzT,KAAK0T,WAAaF,WAAWG,cACJ,IAAhBnR,KAAKjD,OACdS,KAAK0T,WAAaF,WAAWI,iBACR,KAAZpR,KAAK,GACdxC,KAAK0T,WAAaF,WAAWK,oBAE7B7T,KAAK0T,WAAaF,WAAWM;AAE/B9T,KAAKwC,KAAOA,KAAKuR,KAAK,OAOxBP,YAAWI,iBAAmB,MAK9BJ,WAAWM,eAAiB,KAO5BN,WAAWK,oBAAsB,MAKjCL,WAAWG,cAAgB,KAG3BlU,OAAOJ,QAAUmU,aAEdzG,SAAS,KAAKiH,IAAI,SAASzV,QAAQkB,OAAOJ,SAM7C,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,KAWPsJ,GAAKhJ,UAAUL,QAAQ,QAASqJ,IAAG5G,KAAMC,KAAM4G,UAAWrJ,UAAW/G,UACvEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKqN,KAAOA,KACZrN,KAAKsN,KAAOA,KACZtN,KAAKkU,UAAYA,UACjBlU,KAAK6K,UAAYA,WAGnBpL,QAAOJ,QAAU4U,KAEd3I,cAAc,KAAK6I,IAAI,SAAS5V,QAAQkB,OAAOJ,SAOlD,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,UAUPyJ,QAAUnJ,UAAUL,QAAQ,QAASwJ,SAAQlS,KAAM3D,QAAS8V,OAAQvQ,UACtEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKkC,KAAOA,KACZlC,KAAKzB,QAAUA,QACfyB,KAAKqU,OAASA,QAGhB5U,QAAOJ,QAAU+U,UAEd9I,cAAc,KAAKgJ,IAAI,SAAS/V,QAAQkB,OAAOJ,SAOlD,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,SAOP4J,OAAShI,QAAQ3B,QAAQ,QAAS2J,QAAO9H,MAAO3I,UAClDyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,YAGpCrE,QAAOJ,QAAUkV;GAEd7H,YAAY,KAAK8H,IAAI,SAASjW,QAAQkB,OAAOJ,SAOhD,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAO,YAUP8J,UAAY5G,YAAYjD,QAAQ,QAAS6J,WAAUjS,KAAMuL,IAAKT,KAAMxJ,UACtE+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB,WACrC9D,KAAK4K,QAAUmD,IACf/N,KAAKsN,KAAOA,MAGd7N,QAAOJ,QAAUoV,YAEdpG,gBAAgB,KAAKqG,IAAI,SAASnW,QAAQkB,OAAOJ,SAOpD,GAAIuR,KAAMrS,QAAQ,SACdoM,KAAO,QAOPgK,MAAQ/D,IAAIhG,QAAQ,QAAS+J,OAAMvT,KAAM0C,UAC3C8M,IAAInP,MAAMzB,MAAO2K,KAAMvJ,KAAM0C,YAG/BrE,QAAOJ,QAAUsV,QAEd7D,QAAQ,KAAK8D,IAAI,SAASrW,QAAQkB,OAAOJ,SAM5C,YACA,IAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,QAQPkK,MAAQjI,KAAKhC,QAAQ,QAASiK,OAAMrS,KAAMsB,UAC5C8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKwC,KAAOA,MAGd/C,QAAOJ,QAAUwV,QAEd9H,SAAS,KAAK+H,IAAI,SAASvW,QAAQkB,OAAOJ,SAO7C,GAAIuR,KAAMrS,QAAQ,SACdoM,KAAO,OAOPoK,KAAOnE,IAAIhG,QAAQ,QAASmK,MAAK3T,KAAM0C,UACzC8M,IAAInP,MAAMzB,MAAO2K,KAAMvJ,KAAM0C,YAG/BrE,QAAOJ,QAAU0V,OAEdjE,QAAQ,KAAKkE,IAAI,SAASzW,QAAQkB,OAAOJ,SAO5C,GAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,UAQP4B,QAAU7B,KAAKE,QAAQ,QAAS2B,SAAQ5I,KAAM8I,MAAO3I;AACvD4G,KAAKjJ,MAAMzB,MAAO2D,MAAQgH,KAAM7G,WAChC9D,KAAKyM,MAAQA,OAGfhN,QAAOJ,QAAUkN,UAEdxB,eAAe,KAAKkK,IAAI,SAAS1W,QAAQkB,OAAOJ,SAcnD,GAAIyD,UAAW,SAASkP,OAAQpO,MAAOsR,KACrClV,KAAKgS,OAASA,OACdhS,KAAK4D,MAAQA,MACb5D,KAAKkV,IAAMA,IAGbzV,QAAOJ,QAAUyD,cAEXqS,IAAI,SAAS5W,QAAQkB,OAAOJ,SAOlC,GAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,SASPyK,OAAS1K,KAAKE,QAAQ,QAASwK,QAAOzR,KAAMuJ,KAAM/I,OAAQL,UAC5D4G,KAAKjJ,MAAMzB,MAAO2D,MAAQgH,KAAM7G,WAChC9D,KAAKkN,KAAOA,KACZlN,KAAKmE,OAASA,QAGhB1E,QAAOJ,QAAU+V,SAEdrK,eAAe,KAAKsK,IAAI,SAAS9W,QAAQkB,OAAOJ,SAOnD,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,QAOP2K,MAAQ/I,QAAQ3B,QAAQ,QAAS0K,OAAM7I,MAAO3I,UAChDyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,YAGpCrE,QAAOJ,QAAUiW,QAEd5I,YAAY,KAAK6I,IAAI,SAAShX,QAAQkB,OAAOJ,SAOhD,GAAIwT,IAAKtU,QAAQ,cACboM,KAAO,SAWP6K,OAAS3C,GAAGjI,QAAQ,QAAS4K,UAC/B3C,GAAGpR,MAAMzB,KAAMsB,WACftB,KAAK2D,KAAOgH,MAGdlL,QAAOJ,QAAUmW,SAEdC,aAAa,KAAKC,IAAI,SAASnX,QAAQkB,OAAOJ,SAOjD,GAAI+M,OAAQ7N,QAAQ,WAChBiV,WAAajV,QAAQ,gBACrBoM,KAAO,YASPgL,UAAYvJ,MAAMxB,QAAQ,QAAS+K,WAAUnT,KAAM6J,SAAUuJ,aAAc9R;AAC7EsI,MAAM3K,MAAMzB,MAAO2K,KAAM0B,SAAUvI,WAC/BtB,eAAgBgR,YAClBxT,KAAKwC,KAAOA,KAEZxC,KAAKwC,KAAO,GAAIgR,YAAWhR,MAE7BxC,KAAK4V,aAAeA,eAAgB,GAGtCnW,QAAOJ,QAAUsW,YAEdvF,UAAU,EAAEyF,eAAe,KAAKC,IAAI,SAASvX,QAAQkB,OAAOJ,SAM/D,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,MASPoL,IAAM9K,UAAUL,QAAQ,QAASmL,KAAI7I,KAAM9L,KAAM0C,UACnDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKkN,KAAOA,KACZlN,KAAKsB,UAAYF,MAGnB3B,QAAOJ,QAAU0W,MAEdzK,cAAc,KAAK0K,IAAI,SAASzX,QAAQkB,OAAOJ,SAalD,GAAIuN,MAAO,QAASA,MAAKjJ,KAAMG,UAC7B9D,KAAK2D,KAAOA,KACTG,WACD9D,KAAKiW,IAAMnS,UASf8I,MAAKhC,QAAU,SAAS9F,aAItB,MAHAA,aAAYtD,UAAYkD,OAAOC,OAAO3E,KAAKwB,WAC3CsD,YAAY8F,QAAU5K,KAAK4K,QAC3B9F,YAAYtD,UAAUsD,YAAcA,YAC7BA,aAGTrF,OAAOJ,QAAUuN,UAEXsJ,IAAI,SAAS3X,QAAQkB,OAAOJ,SAOlC,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,SASPwL,OAAS5J,QAAQ3B,QAAQ,QAASuL,QAAO1J,MAAO0G,MAAOrP,UACzDyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,WAClC9D,KAAKmT,MAAQA,OAGf1T,QAAOJ,QAAU8W;GAEdzJ,YAAY,KAAK0J,IAAI,SAAS7X,QAAQkB,OAAOJ,SAOhD,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,SAOP0L,QAAU9J,QAAQ3B,QAAQ,QAAS0L,QAAO7J,MAAO3I,UACnDyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,YAGpCrE,QAAOJ,QAAUgX,UAEd3J,YAAY,KAAK6J,IAAI,SAAShY,QAAQkB,OAAOJ,SAMhD,YACA,IAAI+V,QAAS7W,QAAQ,YACjBoM,KAAO,eAOP6L,aAAepB,OAAOxK,QAAQ,QAAS4L,cAAatJ,KAAM/I,OAAQL,UACpEsR,OAAO3T,MAAMzB,MAAO2K,KAAMuC,KAAM/I,OAAQL,YAG1CrE,QAAOJ,QAAUmX,eAEdC,WAAW,KAAKC,IAAI,SAASnY,QAAQkB,OAAOJ,SAM/C,YAEA,IAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,YAOPa,UAAYd,KAAKE,QAAQ,QAASY,WAAU7H,KAAMG,UACpD4G,KAAKjJ,MAAMzB,MAAO2D,MAAQgH,KAAM7G,YAGlCrE,QAAOJ,QAAUmM,YAEdT,eAAe,KAAK4L,IAAI,SAASpY,QAAQkB,OAAOJ,SAOnD,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAO,YAYPiM,UAAY/I,YAAYjD,QAAQ,QAASgM,WAAUpU,KAAMsJ,KAAMW,MAAOoK,MAAOC,WAAY/H,SAAUjL,UACrG+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB,WACrC9D,KAAKyM,MAAQA,MACbzM,KAAK8L,KAAOA;AACZ9L,KAAK8O,MAAQ+H,MACb7W,KAAK+W,SAAWD,WAChB9W,KAAK+O,SAAWA,UAGlBtP,QAAOJ,QAAUuX,YAEdvI,gBAAgB,KAAK2I,IAAI,SAASzY,QAAQkB,OAAOJ,SAMpD,YAEA,IAAImM,WAAYjN,QAAQ,eACpBoM,KAAO,cAQPsM,YAAczL,UAAUZ,QAAQ,QAASqM,aAAYC,MAAOpT,UAC9D0H,UAAU/J,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKkX,MAAQA,OAGfzX,QAAOJ,QAAU4X,cAEd/K,cAAc,KAAKiL,IAAI,SAAS5Y,QAAQkB,OAAOJ,SAclD,GAAI0D,UAAW,SAAS6O,KAAMwF,OAAQjT,QACpCnE,KAAK4R,KAAOA,KACZ5R,KAAKoX,OAASA,OACdpX,KAAKmE,OAASA,OAGhB1E,QAAOJ,QAAU0D,cAEXsU,IAAI,SAAS9Y,QAAQkB,OAAOJ,SAMlC,YAEA,IAAImM,WAAYjN,QAAQ,eACpBoM,KAAO,OASP2M,KAAO9L,UAAUZ,QAAQ,QAAS0M,MAAKxL,KAAMoB,KAAMpJ,UACrD0H,UAAU/J,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAK8L,KAAOA,KACZ9L,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUiY,OAEdpL,cAAc,KAAKqL,IAAI,SAAShZ,QAAQkB,OAAOJ,SAMlD,YAEA,IAAImM,WAAYjN,QAAQ,eACpBoM,KAAO,MASP6M,IAAMhM,UAAUZ,QAAQ,QAAS4M,KAAI1L,KAAMoB,KAAMpJ,UACnD0H,UAAU/J,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAK8L,KAAOA;AACZ9L,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUmY,MAEdtL,cAAc,KAAKuL,IAAI,SAASlZ,QAAQkB,OAAOJ,SAOlD,GAAIuR,KAAMrS,QAAQ,SACdoM,KAAO,QAOP+M,MAAQ9G,IAAIhG,QAAQ,QAAS8M,OAAMtW,KAAM0C,UAC3C8M,IAAInP,MAAMzB,MAAO2K,KAAMvJ,KAAM0C,YAG/BrE,QAAOJ,QAAUqY,QAEd5G,QAAQ,KAAK6G,IAAI,SAASpZ,QAAQkB,OAAOJ,SAO5C,GAAI+M,OAAQ7N,QAAQ,WAChBoM,KAAO,UAQPiN,QAAUxL,MAAMxB,QAAQ,QAASgN,SAAQvL,SAAUwL,OAAQ/T,UAC7DsI,MAAM3K,MAAMzB,MAAO2K,KAAM0B,SAAUvI,WACnC9D,KAAK6X,OAASA,QAGhBpY,QAAOJ,QAAUuY,UAEdxH,UAAU,IAAI0H,IAAI,SAASvZ,QAAQkB,OAAOJ,SAO7C,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAO,WAWPoN,SAAWlK,YAAYjD,QAAQ,QAASmN,UAASvV,KAAMiK,MAAOwB,MAAOnK,UACvE+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB,WACrC9D,KAAKyM,MAAQA,MACbzM,KAAKoO,WAAWH,QAGlBxO,QAAOJ,QAAU0Y,WAEd1J,gBAAgB,KAAK2J,IAAI,SAASzZ,QAAQkB,OAAOJ,SAMpD,YACA,IAAI+V,QAAS7W,QAAQ,YACjBoM,KAAO,iBAOPsN,eAAiB7C,OAAOxK,QAAQ,QAASqN,gBAAe/K,KAAM/I,OAAQL,UACxEsR,OAAO3T,MAAMzB,MAAO2K,KAAMuC,KAAM/I,OAAQL;EAG1CrE,QAAOJ,QAAU4Y,iBAEdxB,WAAW,KAAKyB,IAAI,SAAS3Z,QAAQkB,OAAOJ,SAM/C,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,QAUPwN,MAAQlN,UAAUL,QAAQ,QAASuN,OAAM9K,KAAM+K,SAAUC,UAAWvU,UACtEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKqN,KAAOA,KACZrN,KAAKoY,SAAWA,SAChBpY,KAAKqY,UAAYA,WAGnB5Y,QAAOJ,QAAU8Y,QAEd7M,cAAc,KAAKgN,IAAI,SAAS/Z,QAAQkB,OAAOJ,SAMlD,YACA,IAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,SAQP4N,OAAS3L,KAAKhC,QAAQ,QAAS2N,QAAOC,KAAM1U,UAC9C8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKwY,KAAOA,MAGd/Y,QAAOJ,QAAUkZ,SAEdxL,SAAS,KAAK0L,IAAI,SAASla,QAAQkB,OAAOJ,SAO7C,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,QAQP+N,MAAQnM,QAAQ3B,QAAQ,QAAS8N,OAAMjM,MAAO3I,UAChDyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,YAGpCrE,QAAOJ,QAAUqZ,QAEdhM,YAAY,KAAKiM,IAAI,SAASpa,QAAQkB,OAAOJ,SAMhD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,SAQPiO,OAAS3N,UAAUL,QAAQ,QAASgO,QAAOJ,KAAM1U,UACnDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKwY,KAAOA;EAGd/Y,QAAOJ,QAAUuZ,SAEdtN,cAAc,KAAKuN,IAAI,SAASta,QAAQkB,OAAOJ,SAOlD,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,YAOPM,UAAY2B,KAAKhC,QAAQ,QAASK,WAAUtH,KAAMG,UACpD8I,KAAKnL,MAAMzB,MAAO2D,MAAQgH,KAAM7G,YAGlCrE,QAAOJ,QAAU4L,YAEd8B,SAAS,KAAK+L,IAAI,SAASva,QAAQkB,OAAOJ,SAM7C,YACA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,SAQPoO,OAAS9N,UAAUL,QAAQ,QAASmO,QAAOjO,MAAOhH,UACpDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAK8K,MAAQA,OAGfrL,QAAOJ,QAAU0Z,SAEdzN,cAAc,KAAK0N,IAAI,SAASza,QAAQkB,OAAOJ,SAMlD,YACA,IAAI+V,QAAS7W,QAAQ,YACjBoM,KAAO,eAOPsO,aAAe7D,OAAOxK,QAAQ,QAASqO,cAAa/L,KAAM/I,OAAQL,UACpEsR,OAAO3T,MAAMzB,MAAO2K,KAAMuC,KAAM/I,OAAQL,YAG1CrE,QAAOJ,QAAU4Z,eAEdxC,WAAW,KAAKyC,IAAI,SAAS3a,QAAQkB,OAAOJ,SAO/C,GAAIkN,SAAUhO,QAAQ,aAClBoM,KAAO,SASPwO,OAAS5M,QAAQ3B,QAAQ,QAASuO,QAAOC,cAAe3M,MAAO3I,UACjEyI,QAAQ9K,MAAMzB,MAAO2K,KAAM8B,MAAO3I,WAClC9D,KAAKoZ,cAAgBA,eAGvB3Z,QAAOJ,QAAU8Z;GAEdzM,YAAY,KAAK2M,IAAI,SAAS9a,QAAQkB,OAAOJ,SAMhD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,SAUP2O,OAASrO,UAAUL,QAAQ,QAAS0O,QAAOjM,KAAMC,KAAMzC,UAAW/G,UACpEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKqN,KAAOA,KACZrN,KAAKsN,KAAOA,KACZtN,KAAK6K,UAAYA,WAGnBpL,QAAOJ,QAAUia,SAEdhO,cAAc,KAAKiO,IAAI,SAAShb,QAAQkB,OAAOJ,SAOlD,GAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,MAQPiG,IAAM3F,UAAUL,QAAQ,QAASgG,KAAIjN,KAAMvC,KAAM0C,UACnDmH,UAAUxJ,MAAMzB,MAAO2D,MAAQgH,KAAM7G,WACrC9D,KAAKsB,UAAYF,MAGnB3B,QAAOJ,QAAUuR,MAEdtF,cAAc,KAAKkO,IAAI,SAASjb,QAAQkB,OAAOJ,SAMlD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,QAQP8O,MAAQxO,UAAUL,QAAQ,QAAS6O,OAAMvM,KAAMpJ,UACjDmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUoa,QAEdnO,cAAc,KAAKoO,IAAI,SAASnb,QAAQkB,OAAOJ,SAOlD,GAAIwO,aAActP,QAAQ,iBACtBoM,KAAO,QAWPgP,MAAQ9L,YAAYjD,QAAQ,QAAS+O,OAAMnX,KAAMuL,IAAKC,KAAMV,KAAMxJ,UACpE+J,YAAYpM,MAAMzB,MAAO2K,KAAMnI,KAAMsB;AACrC9D,KAAK4K,QAAUmD,IACf/N,KAAKmO,WAAaH,KAClBhO,KAAKsN,KAAOA,MAGd7N,QAAOJ,QAAUsa,QAEdtL,gBAAgB,KAAKuL,IAAI,SAASrb,QAAQkB,OAAOJ,SAOpD,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,aAEP4E,UAAgB,SAChBC,aAAgB,YAChBC,WAAgB,UAWhBoK,WAAajN,KAAKhC,QAAQ,QAASiP,YAAWC,MAAOC,OAAQC,GAAI/L,MAAOnK,UAC1E8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAK8Z,MAAQA,MACb9Z,KAAK+Z,OAASA,OACd/Z,KAAKga,GAAKA,GACN/L,MACe,IAAbA,MAAM,GACRjO,KAAK4P,WAAaL,UACI,IAAbtB,MAAM,GACfjO,KAAK4P,WAAaJ,aAElBxP,KAAK4P,WAAaH,WAGpBzP,KAAK4P,WAAa,MAItBnQ,QAAOJ,QAAUwa,aAEd9M,SAAS,KAAKkN,IAAI,SAAS1b,QAAQkB,OAAOJ,SAO7C,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,kBAUPuP,gBAAkBtN,KAAKhC,QAAQ,QAASsP,iBAAgBJ,MAAOC,OAAQI,QAASrW,UAClF8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAK8Z,MAAQA,MACb9Z,KAAK+Z,OAASA,OACd/Z,KAAKma,QAAUA,SAGjB1a,QAAOJ,QAAU6a,kBAEdnN,SAAS,KAAKqN,IAAI,SAAS7b,QAAQkB,OAAOJ,SAO7C,GAAIuN,MAAOrO,QAAQ,UACfoM,KAAO,WASP0P,SAAWzN,KAAKhC,QAAQ,QAASyP,UAASC,OAAQC,YAAazW;AACjE8I,KAAKnL,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKsa,OAASA,OACdta,KAAKua,YAAcA,aAGrB9a,QAAOJ,QAAUgb,WAEdtN,SAAS,KAAKyN,IAAI,SAASjc,QAAQkB,OAAOJ,SAM7C,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,MAUP8P,IAAMxP,UAAUL,QAAQ,QAAS6P,KAAInN,KAAMoN,QAASC,OAAQ7W,UAC9DmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKsN,KAAOA,KACZtN,KAAK0a,QAAUA,QACf1a,KAAK2a,OAASA,QAGhBlb,QAAOJ,QAAUob,MAEdnP,cAAc,KAAKsP,IAAI,SAASrc,QAAQkB,OAAOJ,SAMlD,YAEA,IAAImM,WAAYjN,QAAQ,eACpBoM,KAAO,QASPkQ,MAAQrP,UAAUZ,QAAQ,QAASiQ,OAAM/O,KAAMoB,KAAMpJ,UACvD0H,UAAU/J,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAK8L,KAAOA,KACZ9L,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUwb,QAEd3O,cAAc,KAAK4O,IAAI,SAASvc,QAAQkB,OAAOJ,SAOlD,GAAIuR,KAAMrS,QAAQ,SACdoM,KAAO,QAOPoQ,MAAQnK,IAAIhG,QAAQ,QAASmQ,OAAM3Z,KAAM0C,UAC3C8M,IAAInP,MAAMzB,MAAO2K,KAAMvJ,KAAM0C,YAG/BrE,QAAOJ,QAAU0b,QAEdjK,QAAQ,KAAKkK,IAAI,SAASzc,QAAQkB,OAAOJ,SAM5C,YACA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,WAYPsQ,SAAWhQ,UAAUL,QAAQ,QAASqQ,UAASzY,KAAMsJ,KAAMhB,MAAOhH;AACpEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKwC,KAAOA,KACZxC,KAAK8L,KAAOA,KACZ9L,KAAK8K,MAAQA,OAGfrL,QAAOJ,QAAU4b,WAEd3P,cAAc,KAAK4P,IAAI,SAAS3c,QAAQkB,OAAOJ,SAMlD,YACA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,UAYPwQ,QAAUlQ,UAAUL,QAAQ,QAASuQ,SAAQ3Y,KAAM4Y,MAAOtP,KAAMhI,UAClEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKwC,KAAOA,KACZxC,KAAKob,MAAQA,MACbpb,KAAK8L,KAAOA,MAQdqP,SAAQE,WAAa,QAKrBF,QAAQG,cAAgB,WAGxB7b,OAAOJ,QAAU8b,UAEd7P,cAAc,KAAKiQ,IAAI,SAAShd,QAAQkB,OAAOJ,SAMlD,YACA,IAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,WAUP6Q,SAAW9Q,KAAKE,QAAQ,QAAS4Q,UAAShZ,KAAMsM,MAAOhL,UACzD4G,KAAKjJ,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKwC,KAAOA,KACZxC,KAAK8O,MAAQA,QAAS,GAGxBrP,QAAOJ,QAAUmc,WAEdzQ,eAAe,KAAK0Q,IAAI,SAASld,QAAQkB,OAAOJ,SAMnD,YACA,IAAIqL,MAAOnM,QAAQ,gBACfoM,KAAO,WASP+Q,SAAWhR,KAAKE,QAAQ,QAAS8Q,UAASxO,KAAMpJ,UAClD4G,KAAKjJ,MAAMzB,MAAO2K,KAAM7G,WACxB9D,KAAKkN,KAAOA,MAGdzN,QAAOJ,QAAUqc,WAEd3Q,eAAe,KAAK4Q,IAAI,SAASpd,QAAQkB,OAAOJ;AAMnD,YAEA,IAAI4L,WAAY1M,QAAQ,eACpBoM,KAAO,QAUPiR,MAAQ3Q,UAAUL,QAAQ,QAASgR,OAAMvO,KAAMC,KAAMzC,UAAW/G,UAClEmH,UAAUxJ,MAAMzB,MAAO2K,KAAM7G,WAC7B9D,KAAKqN,KAAOA,KACZrN,KAAKsN,KAAOA,KACZtN,KAAK6K,UAAYA,WAGnBpL,QAAOJ,QAAUuc,QAEdtQ,cAAc,KAAKuQ,IAAI,SAAStd,QAAQkB,OAAOJ,SAMlD,YAEA,IAAIgT,YAAa9T,QAAQ,gBACrBoM,KAAO,QAUPmR,MAAQzJ,WAAWzH,QAAQ,QAASkR,OAAMrP,MAAO+E,IAAK1N,UACxDuO,WAAW5Q,MAAMzB,MAAO2K,KAAM7G,WAC9B9D,KAAKyM,MAAQA,MACbzM,KAAKwR,IAAMA,KAGb/R,QAAOJ,QAAUyc,QAEd/Q,eAAe,KAAKgR,IAAI,SAASxd,QAAQkB,OAAOJ,SAMnD,YAEA,IAAIgT,YAAa9T,QAAQ,gBACrBoM,KAAO,YASPqR,UAAY3J,WAAWzH,QAAQ,QAASoR,WAAUvP,MAAO3I,UAC3DuO,WAAW5Q,MAAMzB,MAAO2K,KAAM7G,WAC9B9D,KAAKyM,MAAQA,OAGfhN,QAAOJ,QAAU2c,YAEdjR,eAAe,KAAKkR,IAAI,SAAS1d,QAAQkB,OAAOJ,SAMnD,YAeA,IAAIgE,OAAQ,SAAS6Y,QACnBlc,KAAKkc,OAASA,OACdlc,KAAKmc,IAAMnc,KAAKkc,OAAOE,OAAOC,MAC9Brc,KAAKsc,IAAM,EACXtc,KAAKuc,OAAQ,EACbvc,KAAKwc,YAAa,EAClBxc,KAAKyc,gBAAiB,EACtBzc,KAAK0c,WAAY;AACjB1c,KAAK2c,UAAW,EAChB3c,KAAK4c,YAAa,EAClB5c,KAAK6c,UAAY,EACjB7c,KAAK8c,UACHC,UAAa/c,KAAKmc,IAAIa,UACtBC,UAAajd,KAAKmc,IAAIe,UACtBC,aAAgBnd,KAAKmc,IAAIiB,SACzBC,WAAcrd,KAAKmc,IAAImB,WACvBC,SAAYvd,KAAKmc,IAAIqB,OACrBC,SAAYzd,KAAKmc,IAAIuB,OACrBC,QAAW3d,KAAKmc,IAAIyB,MACpBC,cAAiB7d,KAAKmc,IAAI2B,OAC1BC,KAAQ/d,KAAKmc,IAAI6B,OACjBC,IAAOje,KAAKmc,IAAI6B,OAChBE,SAAYle,KAAKmc,IAAIgC,WACrBC,MAASpe,KAAKmc,IAAIkC,QAClBC,OAAUte,KAAKmc,IAAIoC,SACnBC,IAAOxe,KAAKmc,IAAIsC,MAChBC,MAAS1e,KAAKmc,IAAIwC,QAClBC,QAAW5e,KAAKmc,IAAI0C,UACpBC,MAAS9e,KAAKmc,IAAI4C,QAClBC,GAAMhf,KAAKmc,IAAI8C,KACfC,OAAUlf,KAAKmc,IAAIgD,SACnBC,MAASpf,KAAKmc,IAAIkD,QAClBC,KAAQtf,KAAKmc,IAAIoD,OACjBC,MAASxf,KAAKmc,IAAIsD,QAClBC,SAAY1f,KAAKmc,IAAIwD,WACrBC,GAAM5f,KAAKmc,IAAI0D,KACfC,IAAO9f,KAAKmc,IAAI4D,MAChBC,OAAUhgB,KAAKmc,IAAI8D,SACnBC,QAAWlgB,KAAKmc,IAAIgE,UACpBC,WAAcpgB,KAAKmc,IAAIkE,aACvBC,QAAWtgB,KAAKmc,IAAIoE,UACpBC,WAAcxgB,KAAKmc,IAAIsE,aACvBC,WAAc1gB,KAAKmc,IAAIwE,aACvB3G,GAAMha,KAAKmc,IAAIyE,KACfC,OAAU7gB,KAAKmc,IAAI2E,SACnBC,UAAa/gB,KAAKmc,IAAI6E,YACtBC,KAAQjhB,KAAKmc,IAAI+E,OACjBC,QAAWnhB,KAAKmc,IAAIiF,UACpBC,MAASrhB,KAAKmc,IAAImF,QAClBC,SAAYvhB,KAAKmc,IAAIqF;AACrBC,KAAQzhB,KAAKmc,IAAIuF,OACjBC,KAAQ3hB,KAAKmc,IAAIyF,OACjBC,MAAS7hB,KAAKmc,IAAI2F,QAClBC,MAAS/hB,KAAKmc,IAAI6F,QAClBC,UAAajiB,KAAKmc,IAAI+F,YACtBpI,MAAS9Z,KAAKmc,IAAIgG,QAClBvX,QAAW5K,KAAKmc,IAAIiG,UACpBjU,WAAcnO,KAAKmc,IAAIkG,aACvBC,IAAOtiB,KAAKmc,IAAIoG,MAChBC,MAASxiB,KAAKmc,IAAIsG,QAClBC,IAAO1iB,KAAKmc,IAAIwG,MAChBC,KAAQ5iB,KAAKmc,IAAI0G,OACjBC,QAAW9iB,KAAKmc,IAAI4G,UACpBC,aAAgBhjB,KAAKmc,IAAI8G,eACzB1kB,QAAWyB,KAAKmc,IAAI+G,UACpBC,aAAgBnjB,KAAKmc,IAAIiH,eACzBC,UAAarjB,KAAKmc,IAAImH,YACtBC,IAAOvjB,KAAKmc,IAAIqH,MAChBC,UAAazjB,KAAKmc,IAAIuH,YACtBC,OAAU3jB,KAAKmc,IAAIyH,SACnBC,MAAS7jB,KAAKmc,IAAI2H,QAClBC,MAAS/jB,KAAKmc,IAAI6H,QAClBC,gBAAmBjkB,KAAKmc,IAAI+H,gBAC5BC,OAAUnkB,KAAKmc,IAAIiI,SACnBC,SAAYrkB,KAAKmc,IAAImI,WACrBC,MAASvkB,KAAKmc,IAAIqI,QAClBC,QAAWzkB,KAAKmc,IAAIuI,UACpBC,UAAa3kB,KAAKmc,IAAIyI,YACtBC,OAAU7kB,KAAKmc,IAAI2I,SACnBC,MAAS/kB,KAAKmc,IAAI6I,QAClBrZ,KAAQ3L,KAAKmc,IAAI8I,OACjBjkB,MAAShB,KAAKmc,IAAI+I,QAClBC,SAAYnlB,KAAKmc,IAAIiJ,WACrBC,GAAMrlB,KAAKmc,IAAImJ,aACfC,IAAOvlB,KAAKmc,IAAIqJ,cAChBC,IAAOzlB,KAAKmc,IAAIuJ,eAElB1lB,KAAK2lB,cACHC,IAAO5lB,KAAKmc,IAAI0J,WAChBC,QAAW9lB,KAAKmc,IAAI0J,WACpBE,KAAQ/lB,KAAKmc,IAAI6J;AACjBC,OAAUjmB,KAAKmc,IAAI6J,cACnBE,MAASlmB,KAAKmc,IAAI6J,cAClBG,OAAUnmB,KAAKmc,IAAIiK,cACnBC,OAAUrmB,KAAKmc,IAAIiK,cACnBplB,MAAShB,KAAKmc,IAAImK,aAClBC,OAAUvmB,KAAKmc,IAAIqK,cACnBC,KAAQzmB,KAAKmc,IAAIuK,YACjBC,QAAW3mB,KAAKmc,IAAIuK,YACpB3B,MAAS/kB,KAAKmc,IAAIyK,cAOtBvjB,OAAM7B,UAAUqlB,SAAW,SAASC,OAyBlC,MAxBA9mB,MAAKiE,OAAS6iB,MACd9mB,KAAK+mB,KAAOD,MAAMvnB,OAClBS,KAAKgnB,SAAW,EAChBhnB,KAAKmE,OAAS,EACdnE,KAAK6c,UAAY,EACjB7c,KAAKinB,OAAS,GACdjnB,KAAKsD,QACHG,aAAc,EACdF,WAAY,EACZC,aAAc,EACdY,YAAa,EACbC,UAAW,EACXC,YAAa,EACb4iB,UAAW,EACXC,YAAa,GAEfnnB,KAAKoc,UACLpc,KAAKonB,kBACLpnB,KAAKqnB,KAAOrnB,KAAKmE,QAAUnE,KAAK+mB,MAC3B/mB,KAAKwc,YAAcxc,KAAK0c,UAC3B1c,KAAKsnB,MAAM,mBAEXtnB,KAAKsnB,MAAM,WAENtnB,MAOTqD,MAAM7B,UAAUslB,MAAQ,SAASC,MAC/B,GAAIQ,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAC1B,OAAKojB,KACLvnB,KAAKinB,QAAUM,GACfvnB,KAAKmE,SACO,OAAPojB,IAA4C,OAA7BvnB,KAAKiE,OAAOjE,KAAKmE,UACnCnE,KAAKinB,QAAU,KACfjnB,KAAKmE,UAEI,OAAPojB,IAAsB,OAAPA,IACjBvnB,KAAKsD,OAAO4jB,YAAclnB,KAAKgnB,SAC/BhnB,KAAK6c,UAAY7c,KAAKsD,OAAO6jB,YAC7BnnB,KAAKsD,OAAO6jB,YAAc,GAE1BnnB,KAAKsD,OAAO6jB;AAEPI,IAdS,IAoBlBlkB,MAAM7B,UAAUgmB,MAAQ,SAAST,MAC/B,GAAa,IAATA,KAEF/mB,KAAKmE,SAC4B,OAA7BnE,KAAKiE,OAAOjE,KAAKmE,SAAqD,OAAjCnE,KAAKiE,OAAOjE,KAAKmE,OAAS,KACjEnE,KAAKmE,SACL4iB,QAE+B,OAA7B/mB,KAAKiE,OAAOjE,KAAKmE,SAAiD,OAA7BnE,KAAKiE,OAAOjE,KAAKmE,SACxDnE,KAAKsD,OAAO4jB,YACZlnB,KAAKgnB,WACLhnB,KAAKsD,OAAO6jB,YAAcnnB,KAAK6c,WAE/B7c,KAAKsD,OAAO6jB,cAEdnnB,KAAKinB,OAASjnB,KAAKinB,OAAO/iB,UAAU,EAAGlE,KAAKinB,OAAO1nB,OAASwnB,UACvD,IAAIA,KAAO,EAEhB,GADA/mB,KAAKmE,QAAU4iB,KACXA,KAAO/mB,KAAKinB,OAAO1nB,OAAQ,CAC7BS,KAAKinB,OAASjnB,KAAKinB,OAAO/iB,UAAU,EAAGlE,KAAKinB,OAAO1nB,OAASwnB,MAE5D/mB,KAAKsD,OAAO4jB,UAAYlnB,KAAKsD,OAAOC,WACpCvD,KAAKsD,OAAO6jB,YAAcnnB,KAAK6c,UAAY7c,KAAKsD,OAAOE,YACvD,KAAI,GAAIxE,GAAI,EAAGA,EAAIgB,KAAKinB,OAAO1nB,OAAQP,IAAK,CAC1C,GAAIyoB,GAAIznB,KAAKinB,OAAOjoB,EACV,QAANyoB,GACFA,EAAIznB,KAAKinB,SAASjoB,GAClBgB,KAAK6c,UAAY7c,KAAKsD,OAAO6jB,YAC7BnnB,KAAKsD,OAAO4jB,YACZlnB,KAAKsD,OAAO6jB,YAAc,EAChB,OAANM,IACQ,OAANA,EACFznB,KAAKsD,OAAO4jB,YAEZlnB,KAAKsD,OAAO6jB,gBAGD,OAANM,GACTznB,KAAK6c,UAAY7c,KAAKsD,OAAO6jB,YAC7BnnB,KAAKsD,OAAO4jB,YACZlnB,KAAKsD,OAAO6jB,YAAc,GAE1BnnB,KAAKsD,OAAO6jB,cAGhBnnB,KAAKgnB,SAAWhnB,KAAKsD,OAAO4jB;KAG5BlnB,MAAKinB,OAAS,GACdjnB,KAAKsD,OAAO4jB,UAAYlnB,KAAKgnB,SAAWhnB,KAAKsD,OAAOC,WACpDvD,KAAKsD,OAAO6jB,YAAcnnB,KAAKsD,OAAOE,YAI1C,OAAOxD,OAITqD,MAAM7B,UAAUkmB,SAAW,SAASC,MAClC,MAAOA,QAAS3nB,KAAK4nB,MAAMD,KAAKpoB,SAIlC8D,MAAM7B,UAAUqmB,iBAAmB,SAASF,MAC1C,MAAOA,QAAS3nB,KAAK4nB,MAAMD,KAAKpoB,QAAQwF,eAI1C1B,MAAM7B,UAAUomB,MAAQ,SAASb,MAC/B,GAAIY,MAAO3nB,KAAKiE,OAAOC,UAAUlE,KAAKmE,OAAQnE,KAAKmE,OAAS4iB,KAI5D,OAH8B,OAA1BY,KAAKA,KAAKpoB,OAAS,IAAuD,OAAxCS,KAAKiE,OAAOjE,KAAKmE,OAAS4iB,KAAO,KACrEY,MAAQ,MAEHA,MAITtkB,MAAM7B,UAAUsmB,QAAU,SAASf,MACjC,IAAI,GAAI/nB,GAAI,EAAGA,EAAI+nB,KAAM/nB,IAAK,CAC5B,GAAIuoB,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAC1B,KAAKojB,GAAI,KACTvnB,MAAKinB,QAAUM,GACfvnB,KAAKmE,SACO,OAAPojB,IAA4C,OAA7BvnB,KAAKiE,OAAOjE,KAAKmE,UACnCnE,KAAKinB,QAAU,KACfjnB,KAAKmE,SACLnF,KAES,OAAPuoB,IAAsB,OAAPA,IACjBvnB,KAAKsD,OAAO4jB,YAAclnB,KAAKgnB,SAC/BhnB,KAAK6c,UAAY7c,KAAKsD,OAAO6jB,YAC7BnnB,KAAKsD,OAAO6jB,YAAc,GAE1BnnB,KAAKsD,OAAO6jB,cAGhB,MAAOnnB,OAMTqD,MAAM7B,UAAUumB,SAAW,WACzB,OACEd,OAAQjnB,KAAKinB,OACb9iB,OAAQnE,KAAKmE,OACb6iB,SAAUhnB,KAAKgnB,SACfnK,UAAW7c,KAAK6c;AAChBvZ,QACEG,aAAczD,KAAKsD,OAAOG,aAC1BF,WAAYvD,KAAKsD,OAAOC,WACxBC,aAAcxD,KAAKsD,OAAOE,aAC1B0jB,UAAWlnB,KAAKsD,OAAO4jB,UACvBC,YAAannB,KAAKsD,OAAO6jB,eAQ/B9jB,MAAM7B,UAAUwmB,SAAW,SAASC,OAMlC,MALAjoB,MAAKinB,OAASgB,MAAMhB,OACpBjnB,KAAKmE,OAAS8jB,MAAM9jB,OACpBnE,KAAKgnB,SAAWiB,MAAMjB,SACtBhnB,KAAK6c,UAAYoL,MAAMpL,UACvB7c,KAAKsD,OAAS2kB,MAAM3kB,OACbtD,MAITqD,MAAM7B,UAAU0mB,YAAc,SAASzb,MAAOmb,OAE5C,MADA5nB,MAAKoc,OAAO7a,MAAMkL,MAAOmb,QAClB5nB,MAITqD,MAAM7B,UAAU2mB,IAAM,WACpBnoB,KAAKsD,OAAOc,YAAcpE,KAAKmE,OAC/BnE,KAAKsD,OAAOe,UAAYrE,KAAKsD,OAAO4jB,UACpClnB,KAAKsD,OAAOgB,YAActE,KAAKsD,OAAO6jB,WACtC,IAAIxV,OAAQ3R,KAAKooB,QAAUpoB,KAAKmoB,KAChC,KAAKnoB,KAAKwc,WAAY,CACpB,KACE7K,QAAU3R,KAAKmc,IAAIkM,eAEhBroB,KAAKyc,iBACJ9K,QAAU3R,KAAKmc,IAAImM,WAChB3W,QAAU3R,KAAKmc,IAAIoM,gBAKxB5W,QAAU3R,KAAKmc,IAAIqM,YAGrB7W,MAAQ3R,KAAKooB,QAAUpoB,KAAKmoB,KAE9B,KAAKnoB,KAAK0c,WAAa/K,OAAS3R,KAAKmc,IAAIsM,qBAEvC,MAAOzoB,MAAKmc,IAAIyF,OAQpB,MALK5hB,MAAKsD,OAAOc,cACfpE,KAAKsD,OAAOc,YAAcpE,KAAKsD,OAAOG;AACtCzD,KAAKsD,OAAOe,UAAYrE,KAAKsD,OAAOC,WACpCvD,KAAKsD,OAAOgB,YAActE,KAAKsD,OAAOE,cAEjCmO,OAITtO,MAAM7B,UAAU8lB,MAAQ,SAASoB,WAI/B,GAHA1oB,KAAKonB,eAAe7lB,KAAKmnB,WACzB1oB,KAAK2oB,aAAeD,UACpB1oB,KAAK4oB,QAAU5oB,KAAK,QAAU0oB,WACF,kBAAjB1oB,MAAK4oB,QACd,KAAM,IAAI1pB,OAAM,8BAA8BwpB,UAAU,IAE1D,OAAO1oB,OAITqD,MAAM7B,UAAUqnB,SAAW,WACzB,GAAInqB,GAAIsB,KAAKonB,eAAe7nB,OAAS,EACjCmpB,UAAahqB,EAAI,EAAKsB,KAAKonB,eAAe0B,MAAQ9oB,KAAKonB,eAAe,EAG1E,IAFApnB,KAAK2oB,aAAe3oB,KAAKonB,eAAepnB,KAAKonB,eAAe7nB,OAAS,GACrES,KAAK4oB,QAAU5oB,KAAK,QAAUA,KAAK2oB,cACP,kBAAjB3oB,MAAK4oB,QACd,KAAM,IAAI1pB,OAAM,8BAA8Bc,KAAK2oB,aAAa,IAElE,OAAOD,YAITrlB,MAAM7B,UAAU4mB,KAAO,WACrB,GAAIzW,MAQJ,IAPK3R,KAAKiE,SACRjE,KAAKqnB,MAAO,GAEdrnB,KAAKsD,OAAOG,aAAezD,KAAKmE,OAChCnE,KAAKsD,OAAOC,WAAavD,KAAKsD,OAAO4jB,UACrClnB,KAAKsD,OAAOE,aAAexD,KAAKsD,OAAO6jB,YACvCnnB,KAAKinB,OAAS,GACVjnB,KAAKqnB,KAIP,MAHArnB,MAAKsD,OAAOc,YAAcpE,KAAKsD,OAAOG,aACtCzD,KAAKsD,OAAOe,UAAYrE,KAAKsD,OAAOC;AACpCvD,KAAKsD,OAAOgB,YAActE,KAAKsD,OAAOE,aAC/BxD,KAAKsc,GAgBd,IAdItc,KAAKoc,OAAO7c,OAAS,GACvBoS,MAAQ3R,KAAKoc,OAAO7X,QACI,gBAAboN,OAAM,GACf3R,KAAKgoB,SAASrW,MAAM,IAEpB3R,KAAK8nB,QAAQnW,MAAM,IAErBA,MAAQA,MAAM,IAEdA,MAAQ3R,KAAK4oB,QAAQnnB,MAAMzB,SAEzBA,KAAKmE,QAAUnE,KAAK+mB,MAA+B,IAAvB/mB,KAAKoc,OAAO7c,SAC1CS,KAAKqnB,MAAO,GAEVrnB,KAAKuc,MAAO,CACd,GAAIwM,OAAQpX,KAEVoX,OADmB,gBAAVA,OACD/oB,KAAKkc,OAAOE,OAAO4M,OAAOD,OAE1B,IAAIA,MAAM,IAEpBE,QAAQC,IACNH,MACA,QAAU/oB,KAAKsD,OAAOC,WAAa,IAAMvD,KAAKsD,OAAOE,aACrD,SAAWxD,KAAKsD,OAAO4jB,UAAY,IAAMlnB,KAAKsD,OAAO6jB,aAGzD,MAAOxV,SAMPpT,QAAQ,uBACRA,QAAQ,sBACRA,QAAQ,sBACRA,QAAQ,uBACRA,QAAQ,wBACRA,QAAQ,sBACRA,QAAQ,qBACRA,QAAQ,qBACRqG,QAAQ,SAAUmJ,KAClB,IAAI,GAAIob,KAAKpb,KACX1K,MAAM7B,UAAU2nB,GAAKpb,IAAIob,KAI7B1pB,OAAOJ,QAAUgE,QAEd+lB,sBAAsB,GAAGC,qBAAqB,GAAGC,qBAAqB,GAAGC,sBAAsB,GAAGC,uBAAuB,GAAGC,qBAAqB;AAAGC,oBAAoB,GAAGC,mBAAmB,MAAMC,IAAI,SAASrrB,QAAQkB,OAAOJ,SAOnO,YAEAI,QAAOJ,SAKLipB,UAAW,WACT,KAAMtoB,KAAKmE,OAASnE,KAAK+mB,MAAM,CAC7B,GAAIQ,IAAKvnB,KAAK8mB,OACd,IAAW,OAAPS,IAAsB,OAAPA,GACjB,MAAOvnB,MAAKmc,IAAImM,SACX,IAAW,MAAPf,KAAevnB,KAAK6pB,YAA2C,MAA7B7pB,KAAKiE,OAAOjE,KAAKmE,QAE5D,MADAnE,MAAKwnB,MAAM,GACJxnB,KAAKmc,IAAImM,SACX,IAAW,MAAPf,IAAcvnB,KAAK6pB,YAA2C,MAA7B7pB,KAAKiE,OAAOjE,KAAKmE,QAE3D,MADAnE,MAAKwnB,MAAM,GACJxnB,KAAKmc,IAAImM,UAGpB,MAAOtoB,MAAKmc,IAAImM,WAKlBC,cAAe,WACb,GAAIhB,IAAKvnB,KAAK8mB,QACVnV,MAAQ3R,KAAKmc,IAAImM,SACrB,IAAW,MAAPf,GAAY,CAKd,GAJAA,GAAKvnB,KAAK8mB,QACN9mB,KAAK8pB,kBACPnY,MAAQ3R,KAAKmc,IAAIoM,eAER,MAAPhB,GACF,MAAO5V,MAEP3R,MAAKwnB,MAAM,GAGf,KAAMxnB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADAQ,GAAKvnB,KAAK8mB,QACC,MAAPS,IAA2C,MAA7BvnB,KAAKiE,OAAOjE,KAAKmE,QAAiB,CAClDnE,KAAK8mB,OACL,OAGJ,MAAOnV,cAILoY,IAAI,SAASxrB,QAAQkB,OAAOJ,SAMlCI,OAAOJ,SACL2qB,YAAa,WAUX,MAREhqB,MAAKonB,eAAe7nB,OAAS,GAC+B,YAAzDS,KAAKonB,eAAepnB,KAAKonB,eAAe7nB,OAAS,GAGpDS,KAAK6oB,WAEL7oB,KAAKsnB,MAAM,mBAENtnB,MAETiqB,aAAc;AACZ,KAAMjqB,KAAKmE,OAASnE,KAAK+mB,MAAM,CAC7B,GAAIQ,IAAKvnB,KAAK8mB,OACd,IAAU,KAANS,GAEF,GADAA,GAAKvnB,KAAK4nB,MAAM,GACN,KAANL,GAAW,CACb,GAAIvnB,KAAK0nB,SAAS,MAAO,CACvB1nB,KAAKwnB,MAAM,GAAGU,YAAYloB,KAAKmc,IAAIsM,qBAAsB,GAAGuB,aAC5D,OACK,GAAIhqB,KAAK6nB,iBAAiB,UAC/BN,GAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,GACpB,MAAPojB,IAAqB,OAAPA,IAAsB,OAAPA,IAAsB,OAAPA,IAAa,CAC3DvnB,KAAKwnB,MAAM,GAAGU,YAAYloB,KAAKmc,IAAIqM,WAAY,GAAGwB,aAClD,OAGJ,GAAIhqB,KAAK4c,WAAY,CACnB5c,KAAKwnB,MAAM,GAAGU,YAAYloB,KAAKmc,IAAIqM,WAAY,GAAGwB,aAClD,YAEG,IAAGhqB,KAAK2c,UAAkB,KAAN4K,GAAW,CACpC,GAAIvnB,KAAK0nB,SAAS,MAAO,CACvB1nB,KAAK6pB,YAAa,EAClB7pB,KAAKwnB,MAAM,GAAGU,YAAYloB,KAAKmc,IAAIsM,qBAAsB,GAAGuB,aAC5D,OAEAhqB,KAAK6pB,YAAa,EAClB7pB,KAAKwnB,MAAM,GAAGU,YAAYloB,KAAKmc,IAAIqM,WAAY,GAAGwB,aAClD,QAKR,MAAIhqB,MAAKinB,OAAO1nB,OAAS,GAChBS,KAAKmc,IAAI+N,qBAOhBC,IAAI,SAAS5rB,QAAQkB,OAAOJ,UAClC,SAAW6B,SAOX,YAGA,IAAoB,OAAhBA,QAAQkpB,KACV,GACIC,oBAAqB,GACrBC,gBAAkB,0BAEtB,IACID,oBAAqB,GACrBC,gBAAkB,YAGxB7qB,QAAOJ,SACLkrB,YAAa,WACX,GAAIhD,IAAKvnB,KAAKinB,OAAO,GACjBuD,SAA8B,MAAnBxqB,KAAKinB,OAAO;AAC3B,GAAW,MAAPM,GAGF,GAFAA,GAAKvnB,KAAK8mB,QAEC,MAAPS,IAAqB,MAAPA,GAAY,CAE5B,GADAvnB,KAAK8mB,QACD9mB,KAAKyqB,SACP,MAAOzqB,MAAK0qB,cAEZ1qB,MAAKwnB,MAAM,OAER,IAAW,MAAPD,IAAqB,MAAPA,GAAY,CAEnC,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,IAAqB,MAAPA,GAChB,MAAOvnB,MAAK2qB,cAEZ3qB,MAAKwnB,MAAM,OAEHxnB,MAAK4qB,UACf5qB,KAAKwnB,MAAM,EAIf,MAAMxnB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADAQ,GAAKvnB,KAAK8mB,SACL9mB,KAAK4qB,SAAU,CAClB,GAAW,MAAPrD,IAAeiD,SAEZ,CAAA,GAAW,MAAPjD,IAAqB,MAAPA,GAAY,CAEnC,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,IAAqB,MAAPA,GAAY,CAE5B,GADAA,GAAKvnB,KAAK8mB,QACN9mB,KAAK4qB,SAEP,MADA5qB,MAAK6qB,eACE7qB,KAAKmc,IAAI2O,SAEhB9qB,MAAKwnB,MAAM,EACX,OAEG,GAAIxnB,KAAK4qB,SAEd,MADA5qB,MAAK6qB,eACE7qB,KAAKmc,IAAI2O,SAEhB9qB,MAAKwnB,MAAM,EACX,OAGFxnB,KAAKwnB,MAAM,EACX,OArBAgD,UAAW,EAyBjB,MAAIA,UACKxqB,KAAKmc,IAAI2O,UACP9qB,KAAKinB,OAAO1nB,OAAS8qB,mBAAqB,EAC5CrqB,KAAKmc,IAAI4O,UAGd/qB,KAAKinB,OAAO1nB,OAAS8qB,oBACnBrqB,KAAKinB,OAAO1nB,QAAU8qB,oBACnBrqB,KAAKinB,OAASqD,gBAGZtqB,KAAKmc,IAAI4O,UAEX/qB,KAAKmc,IAAI2O,WAIpBJ,aAAc,WACZ,KAAM1qB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADA/mB,KAAK8mB,SACA9mB,KAAKyqB,SAAU,CAClBzqB,KAAKwnB,MAAM,EACX,OAGJ,MAAOxnB,MAAKmc,IAAI4O,WAGlBF,aAAc,WACZ,KAAM7qB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADA/mB,KAAK8mB;CACA9mB,KAAK4qB,SAAU,CAClB5qB,KAAKwnB,MAAM,EACX,OAGJ,MAAOxnB,MAAKmc,IAAI4O,WAGlBJ,aAAc,WAEZ,IADA,GAAIpD,IACEvnB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADAQ,GAAKvnB,KAAK8mB,QACC,MAAPS,IAAqB,MAAPA,GAAY,CAC5BvnB,KAAKwnB,MAAM,EACX,OAGJ,MAAOxnB,MAAKmc,IAAI4O,cAIjBzrB,KAAKU,KAAKzB,QAAQ,eAClBysB,SAAW,IAAIC,IAAI,SAAS1sB,QAAQkB,OAAOJ,SAM9CI,OAAOJ,SACL6rB,6BAA8B,WAC5B,GAAI3D,IAAKvnB,KAAK8mB,OACd,IAAW,MAAPS,GAAY,CAEd,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAEF,MAAOvnB,MAAKmc,IAAIgP,iBAElBnrB,MAAKwnB,MAAM,OACN,IAAIxnB,KAAKorB,iBAId,MAFAprB,MAAKqrB,gBACLrrB,KAAK6oB,WACE7oB,KAAKmc,IAAImP,QAKlB,OAFAtrB,MAAK6oB,WACL7oB,KAAKwnB,MAAM,IACJ,GAET+D,4BAA6B,WAC3B,GAAIhE,IAAKvnB,KAAK8mB,OACd,OAAI9mB,MAAKorB,kBACPprB,KAAKqrB,gBACL9D,GAAKvnB,KAAK8mB,QACV9mB,KAAK6oB,WACM,MAAPtB,IAAqB,MAAPA,IAChBvnB,KAAKsnB,MAAM,mBACXtnB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIqP,mBAEhBxrB,KAAKwnB,MAAMxnB,KAAKinB,OAAO1nB,SAChB,KAGTS,KAAKwnB,MAAM,GACXxnB,KAAK6oB,WACL7oB,KAAKsnB,MAAM,oBAEJ,IAGXmE,mBAAoB,WAClB,GAAIlE,IAAKvnB,KAAK8mB,OACd,IAAI9mB,KAAK4qB,SAEP,MADA5qB,MAAKuqB,cACEvqB,KAAKmc,IAAIuP;AACX,GAAW,MAAPnE,GAET,MADAvnB,MAAK6oB,WACE,GACF,IAAW,MAAPtB,GAAY,CAErB,GADAvnB,KAAK8mB,QACD9mB,KAAKorB,iBAEP,MADAprB,MAAKqrB,gBACErrB,KAAKmc,IAAIwP,UAEhB,MAAM,IAAIzsB,OAAM,uBAEb,GAAIc,KAAKorB,iBAEd,MADAprB,MAAKqrB,gBACErrB,KAAKmc,IAAImP,QACX,IAAItrB,KAAK8pB,iBAA0B,OAAPvC,IAAsB,MAAPA,IAAsB,MAAPA,GAC/D,MAAOvnB,MAAKmc,IAAIyP,yBACX,IAAW,MAAPrE,IAAqB,MAAPA,IAAqB,MAAPA,IAAqB,MAAPA,IAAqB,MAAPA,IAAcvnB,KAAK6rB,WACpF,MAAOtE,GAEP,MAAM,IAAIroB,OAAM,8BAKhB4sB,IAAI,SAASvtB,QAAQkB,OAAOJ,SAMlCI,OAAOJ,SACL0sB,qBAAsB,WACpB,GAAIxE,IAAKvnB,KAAK8mB,OACd,QAAOS,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,OACH,MAAOvnB,MAAKqoB,cACd,KAAK,IACH,MAAOroB,MAAKsoB,WACd,KAAK,IACH,MAAiC,MAA7BtoB,KAAKiE,OAAOjE,KAAKmE,QACZnE,KAAKsoB,YAC0B,MAA7BtoB,KAAKiE,OAAOjE,KAAKmE,SAC1BnE,KAAK8mB,QACE9mB,KAAKuoB,iBAEPvoB,KAAKgsB,eACd,KAAK,IACH,MAAOhsB,MAAKisB,4BACd,KAAK,IACH,MAAOjsB,MAAKksB,kBACd,KAAK,IAEH,MADAlsB,MAAKsnB,MAAM,gBACJ,GACT,KAAK,IACH,IAAKtnB,KAAK6pB,YAAc7pB,KAAK0nB,SAAS,KAAM,CAC1C1nB,KAAK8mB;AACL,GAAIqF,QAASnsB,KAAKiE,OAAOjE,KAAKmE,OAK9B,OAJe,OAAXgoB,QAA8B,OAAXA,QAAiBnsB,KAAK8mB,QACzC9mB,KAAKonB,eAAe7nB,OAAS,GAC/BS,KAAKsnB,MAAM,WAENtnB,KAAKmc,IAAIiQ,YAElB,MAAOpsB,MAAKgsB,eACd,KAAK,IACH,MAAIhsB,MAAK6pB,YAA2C,MAA7B7pB,KAAKiE,OAAOjE,KAAKmE,SACtCnE,KAAK8mB,QACLS,GAAKvnB,KAAKiE,OAAOjE,KAAKmE,QACX,OAAPojB,IAAsB,OAAPA,IACjBvnB,KAAK8mB,QAEP9mB,KAAK6pB,YAAa,EACd7pB,KAAKonB,eAAe7nB,OAAS,GAC/BS,KAAKsnB,MAAM,WAENtnB,KAAKmc,IAAIiQ,aAEXpsB,KAAKgsB,eACd,KAAK,IAEH,MADAhsB,MAAKsnB,MAAM,mBACJ,GACT,KAAK,IAKH,MAJItnB,MAAKonB,eAAe7nB,OAAS,GAE/BS,KAAK6oB,WAEA,GACT,SACE,GAAW,MAAPtB,GAAY,CAEd,GADAvnB,KAAK8mB,QACD9mB,KAAK4qB,SACP,MAAO5qB,MAAKuqB,aAEZvqB,MAAKwnB,MAAM,GAGf,GAAIxnB,KAAK4qB,SACP,MAAO5qB,MAAKuqB,aACP,IAAIvqB,KAAKorB,iBACd,MAAOprB,MAAKqrB,gBAAgBC,UACvB,IAAGtrB,KAAK6rB,WACb,MAAO7rB,MAAKgsB,gBAGlB,KAAM,IAAI9sB,OACR,0BAA4BqoB,GAAK,aAAevnB,KAAKgnB,SAAW,YAAchnB,KAAKmE,OAAS,MAIhGkkB,aAAc,WACZ,KAAMroB,KAAKmE,OAASnE,KAAK+mB,MAAM,CAC7B,GAAIQ,IAAKvnB,KAAK8mB,OACd,IAAW,MAAPS,IAAqB,OAAPA,IAAsB,OAAPA,IAAsB,OAAPA,GAAhD,CAGAvnB,KAAKwnB,MAAM;AACX,OAEF,MAAOxnB,MAAKmc,IAAIkM,oBAIdgE,IAAI,SAAS9tB,QAAQkB,OAAOJ,SAMlCI,OAAOJ,SACL4sB,2BAA4B,WAE1B,IADA,GAAI1E,IACEvnB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADAQ,GAAKvnB,KAAK8mB,QACA,MAANS,GACFvnB,KAAK8mB,YACA,IAAU,KAANS,GACT,KAGJ,OAAOvnB,MAAKmc,IAAI8P,4BAGlBK,WAAY,WACV,GAAIC,QAASvsB,KAAKmE,MAClB,IACmC,MAAjCnE,KAAKiE,OAAOjE,KAAKmE,OAAS,IACM,MAA7BnE,KAAKiE,OAAOjE,KAAKmE,SACgB,MAAjCnE,KAAKiE,OAAOjE,KAAKmE,OAAS,GAC7B,CAIA,GAHAnE,KAAKmE,QAAU,EAGXnE,KAAKwsB,cACP,KAAMxsB,KAAKmE,OAASnE,KAAK+mB,OACvB/mB,KAAKmE,SACAnE,KAAKwsB,iBAOd,GAAIC,OAAQzsB,KAAKiE,OAAOjE,KAAKmE,OAAS,EAQtC,IAPc,MAAVsoB,OAA4B,MAAVA,MACpBzsB,KAAKmE,SAELsoB,MAAQ,KAINzsB,KAAKorB,iBAAkB,CAEzB,IADA,GAAIsB,UAAW1sB,KAAKmE,OAAS,EACvBnE,KAAKmE,OAASnE,KAAK+mB,OACvB/mB,KAAKmE,SACAnE,KAAK2sB,cAIZ,GAAIC,SAAU5sB,KAAKiE,OAAOC,UAAUwoB,SAAU1sB,KAAKmE,OAAS,EAC5D,MAAKsoB,OAASA,QAAUzsB,KAAKiE,OAAOjE,KAAKmE,OAAS,MAC5CsoB,OAAOzsB,KAAKmE,SAEqB,OAAjCnE,KAAKiE,OAAOjE,KAAKmE,OAAS,IAAgD,OAAjCnE,KAAKiE,OAAOjE,KAAKmE,OAAS,IAWrE,MATAnE,MAAK6sB,cAAgBD,QACrBF,SAAW1sB,KAAKmE,OAASooB,OACzBvsB,KAAKmE,OAASooB,OACdvsB,KAAK8nB,QAAQ4E;AACC,MAAVD,MACFzsB,KAAKsnB,MAAM,aAEXtnB,KAAKsnB,MAAM,cAENtnB,KAAKmc,IAAI2Q,iBAMxB,MADA9sB,MAAKmE,OAASooB,QACP,GAETL,iBAAkB,WAEhB,IADA,GAAI3E,IACEvnB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADAQ,GAAKvnB,KAAK8mB,QACA,MAANS,GACFvnB,KAAK8mB,YACA,CAAA,GAAU,KAANS,GACT,KACK,IAAU,KAANA,GAAW,CAEpB,GADAA,GAAKvnB,KAAK8mB,QACC,KAANS,IAAavnB,KAAKorB,iBAAkB,CACvCprB,KAAKwnB,MAAM,EACX,OAEFxnB,KAAKwnB,MAAM,OACN,IAAU,KAAND,GAAW,CAEpB,GADAA,GAAKvnB,KAAK8mB,QACA,KAANS,GAAW,CACbvnB,KAAKwnB,MAAM,EACX,OAEFxnB,KAAKwnB,MAAM,IAGf,GAAU,KAAND,GACF,MAAOvnB,MAAKmc,IAAI8P,0BAEhB,IAAIc,QAAS,CAYb,OAXuB,MAAnB/sB,KAAKinB,OAAO,IAAiC,MAAnBjnB,KAAKinB,OAAO,KACxC8F,OAAS,GAEP/sB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YACHloB,KAAKmc,IAAIyP,0BACT5rB,KAAKinB,OAAO1nB,OAASwtB,QAGzB/sB,KAAKwnB,MAAMxnB,KAAKinB,OAAO1nB,OAASwtB,QAChC/sB,KAAKsnB,MAAM,oBACJtnB,KAAKinB,QAKhB+F,YAAa,WAEX,GAAIhtB,KAAKiE,OAAOC,UAAUlE,KAAKmE,OAAS,EAAGnE,KAAKmE,OAAS,EAAInE,KAAK6sB,cAActtB,UAAYS,KAAK6sB,cAAe,CAC9G,GAAItF,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,EAAInE,KAAK6sB,cAActtB,OAC1D,IAAW,OAAPgoB,IAAsB,OAAPA,IAAsB,MAAPA,GAChC,OAAO,EAGX,OAAO,GAGT0F,eAAgB,WAEd,GAAIjtB,KAAKgtB,cAIP,MAFAhtB,MAAK8nB,QAAQ9nB,KAAK6sB,cAActtB;AAChCS,KAAK6oB,WACE7oB,KAAKmc,IAAI+Q,aAIlB,KADA,GAAI3F,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,GAC7BnE,KAAKmE,OAASnE,KAAK+mB,MACvB,GAAW,OAAPQ,IAAsB,OAAPA,IAEjB,GADAA,GAAKvnB,KAAK8mB,QACN9mB,KAAKgtB,cAKP,MAJAhtB,MAAKwnB,MAAM,GAAGqB,WACd7oB,KAAKkoB,YACHloB,KAAKmc,IAAI+Q,cAAeltB,KAAK6sB,cAActtB,QAEtCS,KAAKmc,IAAIyP,8BAGlBrE,IAAKvnB,KAAK8mB,OAId,OAAO9mB,MAAKmc,IAAIyP,2BAGlBuB,gBAAiB,WAEf,GAAI5F,IAAKvnB,KAAK8mB,OACd,IAAI9mB,KAAKgtB,cAGP,MAFAhtB,MAAK8nB,QAAQ9nB,KAAK6sB,cAActtB,OAAS,GACzCS,KAAK6oB,WACE7oB,KAAKmc,IAAI+Q,aAGlB,MAAMltB,KAAKmE,OAASnE,KAAK+mB,MASvB,GAPW,OAAPQ,KACFA,GAAKvnB,KAAK8mB,QACC,OAAPS,IAAsB,OAAPA,KACjBA,GAAKvnB,KAAK8mB,UAIH,OAAPS,IAAsB,OAAPA,IAEjB,GADAA,GAAKvnB,KAAK8mB,QACN9mB,KAAKgtB,cAKP,MAJAhtB,MAAKwnB,MAAM,GAAGqB,WACd7oB,KAAKkoB,YACHloB,KAAKmc,IAAI+Q,cAAeltB,KAAK6sB,cAActtB,QAEtCS,KAAKmc,IAAIyP,8BAEb,IAAW,MAAPrE,GAAY,CAErB,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAGF,MADAvnB,MAAKsnB,MAAM,0BACPtnB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YAAYloB,KAAKmc,IAAIiR,2BAA4B,GACtDptB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIyP,2BAET5rB,KAAKmc,IAAIiR;AAEb,GAAIptB,KAAKorB,iBAAkB,CAEhC,GAAIsB,UAAW1sB,KAAKmE,OAChBikB,KAAOpoB,KAAKqtB,kBAChB,OAAIrtB,MAAKinB,OAAO1nB,OAASS,KAAKmE,OAASuoB,SAAW,GAChD1sB,KAAKkoB,YAAYE,KAAMpoB,KAAKmE,OAASuoB,SAAW,GAChD1sB,KAAKwnB,MAAMxnB,KAAKmE,OAASuoB,SAAW,GAC7B1sB,KAAKmc,IAAIyP,2BAETxD,UAIN,IAAW,MAAPb,IAET,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAGF,MADAvnB,MAAKsnB,MAAM,mBACPtnB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YAAYloB,KAAKmc,IAAImR,aAAc,GACxCttB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIyP,4BAEhB5rB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAImR,kBAIpB/F,IAAKvnB,KAAK8mB,OAKd,OAAO9mB,MAAKmc,IAAIyP,2BAGlByB,iBAAkB,WAGhB,GAFArtB,KAAKqrB,gBACL9D,GAAKvnB,KAAK8mB,QACA,KAANS,GAGF,MAFAvnB,MAAKwnB,MAAM,GACXxnB,KAAKsnB,MAAM,iBACJtnB,KAAKmc,IAAIwP,UACX,IAAW,MAAPpE,GAAY,CACrB,GAAqB,MAAjBvnB,KAAK8mB,QAMP,MALA9mB,MAAK8mB,QACD9mB,KAAKorB,kBACPprB,KAAKsnB,MAAM,2BAEbtnB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIwP,UAEhB3rB,MAAKwnB,MAAM,OAGbxnB,MAAKwnB,MAAM,EAEZ,OAAOxnB,MAAKmc,IAAIwP,YAGnB4B,kBAAmB,WAEjB,GAAIhG,IAAKvnB,KAAK8mB,OACd,IAAW,MAAPS,GAAY,CAEd,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAEF,MADAvnB,MAAKsnB,MAAM;AACJtnB,KAAKmc,IAAIiR,0BACX,IAAIptB,KAAKorB,iBAAkB,CAChC,GAAIjP,KAAMnc,KAAKqtB,kBACf,OAAOlR,UAEJ,IAAW,MAAPoL,IACT,GAAiC,MAA7BvnB,KAAKiE,OAAOjE,KAAKmE,QAEnB,MADAnE,MAAKsnB,MAAM,mBACJtnB,KAAKmc,IAAImR,iBAEb,IAAW,MAAP/F,GAET,MADAvnB,MAAK6oB,WACE,GAIT,MAAM7oB,KAAKmE,OAASnE,KAAK+mB,MAAM,CAC7B,GAAW,OAAPQ,GACFvnB,KAAK8mB,YACA,CAAA,GAAW,MAAPS,GAAY,CACrBvnB,KAAKwnB,MAAM,GACXxnB,KAAK6oB,WACL7oB,KAAKkoB,YAAY,IAAK,EACtB,OACK,GAAW,MAAPX,GAAY,CAErB,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAEF,MADAvnB,MAAKsnB,MAAM,0BACPtnB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YAAYloB,KAAKmc,IAAIiR,2BAA4B,GACtDptB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIyP,2BAET5rB,KAAKmc,IAAIiR,0BAEb,IAAIptB,KAAKorB,iBAAkB,CAEhC,GAAIsB,UAAW1sB,KAAKmE,OAChBikB,KAAOpoB,KAAKqtB,kBAChB,OAAIrtB,MAAKinB,OAAO1nB,OAASS,KAAKmE,OAASuoB,SAAW,GAChD1sB,KAAKkoB,YAAYE,KAAMpoB,KAAKmE,OAASuoB,SAAW,GAChD1sB,KAAKwnB,MAAMxnB,KAAKmE,OAASuoB,SAAW,GAC7B1sB,KAAKmc,IAAIyP,2BAETxD,KAGXpoB,KAAKwnB,MAAM,OACN,IAAW,MAAPD,GAAY,CAErB,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAGF,MADAvnB,MAAKsnB,MAAM,mBACPtnB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YAAYloB,KAAKmc,IAAImR,aAAc;AACxCttB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIyP,4BAEhB5rB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAImR,aAGpBttB,MAAKwnB,MAAM,IAEbD,GAAKvnB,KAAK8mB,QAEZ,MAAO9mB,MAAKmc,IAAIyP,2BAIlB4B,sBAAuB,WAErB,GAAIjG,IAAKvnB,KAAK8mB,OACd,IAAW,MAAPS,GAAY,CAEd,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAEF,MADAvnB,MAAKsnB,MAAM,0BACJtnB,KAAKmc,IAAIiR,0BACX,IAAIptB,KAAKorB,iBAAkB,CAChC,GAAIjP,KAAMnc,KAAKqtB,kBACf,OAAOlR,UAEJ,IAAW,MAAPoL,IACT,GAAiC,MAA7BvnB,KAAKiE,OAAOjE,KAAKmE,QAEnB,MADAnE,MAAKsnB,MAAM,mBACJtnB,KAAKmc,IAAImR,iBAEb,IAAW,MAAP/F,GAET,MADAvnB,MAAK6oB,WACE,GAIT,MAAM7oB,KAAKmE,OAASnE,KAAK+mB,MAAM,CAC7B,GAAW,OAAPQ,GACFvnB,KAAK8mB,YACA,CAAA,GAAW,MAAPS,GAAY,CACrBvnB,KAAKwnB,MAAM,GACXxnB,KAAK6oB,WACL7oB,KAAKkoB,YAAY,IAAK,EACtB,OACK,GAAW,MAAPX,GAAY,CAErB,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAEF,MADAvnB,MAAKsnB,MAAM,0BACPtnB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YAAYloB,KAAKmc,IAAIiR,2BAA4B,GACtDptB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIyP,2BAET5rB,KAAKmc,IAAIiR,0BAEb,IAAIptB,KAAKorB,iBAAkB,CAEhC,GAAIsB,UAAW1sB,KAAKmE,OAChBikB,KAAOpoB,KAAKqtB,kBAChB,OAAIrtB,MAAKinB,OAAO1nB,OAASS,KAAKmE,OAASuoB,SAAW,GAChD1sB,KAAKkoB,YAAYE,KAAMpoB,KAAKmE,OAASuoB,SAAW;AAChD1sB,KAAKwnB,MAAMxnB,KAAKmE,OAASuoB,SAAW,GAC7B1sB,KAAKmc,IAAIyP,2BAETxD,KAGXpoB,KAAKwnB,MAAM,OACN,IAAW,MAAPD,GAAY,CAErB,GADAA,GAAKvnB,KAAK8mB,QACC,MAAPS,GAGF,MADAvnB,MAAKsnB,MAAM,mBACPtnB,KAAKinB,OAAO1nB,OAAS,GACvBS,KAAKkoB,YAAYloB,KAAKmc,IAAImR,aAAc,GACxCttB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAIyP,4BAGhB5rB,KAAKwnB,MAAM,GACJxnB,KAAKmc,IAAImR,aAGpBttB,MAAKwnB,MAAM,IAEbD,GAAKvnB,KAAK8mB,QAEZ,MAAO9mB,MAAKmc,IAAIyP,iCAId6B,IAAI,SAASlvB,QAAQkB,OAAOJ,SAMlCI,OAAOJ,SACLisB,SAAU,WACR,GAAI3Z,OAAQ3R,KAAKinB,OAAOliB,cACpB2oB,GAAK1tB,KAAK8c,SAASnL,MACvB,KAAK+b,GACH,GAAc,UAAV/b,MACE3R,KAAK0nB,SAAS,UAChB1nB,KAAK8nB,QAAQ,GACb4F,GAAK1tB,KAAKmc,IAAIwR,cAEdD,GAAK1tB,KAAKmc,IAAIyR,YAIhB,IADAF,GAAK1tB,KAAKmc,IAAImP,SACA,MAAV3Z,OAA2B,MAAVA,MAAe,CAClC,GAAI4V,IAAKvnB,KAAK8mB,MAAM,EACpB,IAAW,MAAPS,GACF,MAAOvnB,MAAKksB,kBACP,IAAW,MAAP3E,GACT,MAAOvnB,MAAKisB,4BAEZjsB,MAAKwnB,MAAM,GAKnB,MAAOkG,KAGT1B,cAAe,WACb,GAAIzE,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,GAC/B0O,GAAK7S,KAAK6tB,eAAetG,GAC7B,OAAI1U,IACKA,GAAGpR,MAAMzB,SAETA,KAAKinB,QAIhB4G,gBACEC,EAAK,WAEH,MADA9tB,MAAKmE,SACDnE,KAAKorB,kBACPprB,KAAKmE;AACLnE,KAAKqrB,gBACErrB,KAAKmc,IAAIwP,aAEhB3rB,KAAKmE,SACE,MAGX4pB,IAAK,WACH,GAAIC,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAKsnB,MAAM,2BAA2BR,QAC/B9mB,KAAKmc,IAAIgP,mBACG,MAAV6C,OACThuB,KAAK8mB,QACE9mB,KAAKmc,IAAI8R,OACG,MAAVD,OACThuB,KAAK8mB,QACE9mB,KAAKmc,IAAI+R,eAEX,KAETC,KAAM,WACJ,MAAOnuB,MAAKmc,IAAIiS,gBAElBC,IAAK,WACH,MAAiC,MAA7BruB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAImS,aAEX,KAETC,IAAK,WACH,MAAiC,MAA7BvuB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAIqS,gBAET,KAGXC,IAAK,WACH,GAAIC,SAAU1uB,KAAKmE,MAKnB,IAJAnE,KAAK8mB,QACD9mB,KAAKwsB,eACPxsB,KAAK2uB,mBAAmB7H,QAEtB9mB,KAAKorB,iBAAkB,CACzB,GAAIwD,OAAQ5uB,KAAKinB,OAAO1nB,MACxBS,MAAKqrB,eACL,IAAIwD,WAAY7uB,KAAKinB,OAAO/iB,UAAU0qB,MAAQ,GAAG7pB,cAC7C+pB,OAAS9uB,KAAK2lB,aAAakJ,UAC/B,IAAIC,SACF9uB,KAAK8mB,QACD9mB,KAAKwsB,eACPxsB,KAAK2uB,mBAAmB7H,QAEW,MAAjC9mB,KAAKiE,OAAOjE,KAAKmE,OAAS,IAC5B,MAAO2qB,QAMb,MADA9uB,MAAKwnB,MAAMxnB,KAAKmE,OAASuqB,SAClB,KAETK,IAAK,WACH,GAAIf,OAAQhuB,KAAKiE,OAAOjE,KAAKmE;AAC7B,MAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAI6S,gBACG,MAAVhB,MAC4B,MAAjChuB,KAAKiE,OAAOjE,KAAKmE,OAAS,IAC5BnE,KAAK8nB,QAAQ,GACN9nB,KAAKmc,IAAI8S,iBAEhBjvB,KAAK8mB,QACE9mB,KAAKmc,IAAI+S,YAGb,KAETC,IAAK,WACH,GAAInB,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAIiT,OACG,MAAVpB,OACThuB,KAAK8mB,QACE9mB,KAAKmc,IAAIkT,cAEX,KAETC,IAAK,WACH,MAAiC,MAA7BtvB,KAAKiE,OAAOjE,KAAKmE,QACkB,MAAjCnE,KAAKiE,OAAOjE,KAAKmE,OAAS,IAC5BnE,KAAK8nB,QAAQ,GACN9nB,KAAKmc,IAAIoT,qBAEhBvvB,KAAK8mB,QACE9mB,KAAKmc,IAAIqT,gBAGb,KAETC,IAAK,WACH,MAAiC,MAA7BzvB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAIuT,YAEX,KAETC,IAAK,WACH,GAAI3B,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFA,MAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAAS,GACpB,MAAV6pB,OACFhuB,KAAK8nB,QAAQ,GACN9nB,KAAKmc,IAAIyT,YACG,MAAV5B,OACLhuB,KAAKssB,aACAtsB,KAAKmc,IAAI2Q,iBAGpB9sB,KAAK8mB,QACE9mB,KAAKmc,IAAI0T,OACG,MAAV7B,OACThuB,KAAK8mB,QAC4B,MAA7B9mB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAI2T,aAET9vB,KAAKmc,IAAI4T,uBAEC,MAAV/B,OACThuB,KAAK8mB,QACE9mB,KAAKmc,IAAIqT,gBAEX,KAETQ,IAAK;AACH,GAAIhC,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAI8T,uBACG,MAAVjC,OACTA,MAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAAS,GACpB,MAAV6pB,OACFhuB,KAAK8nB,QAAQ,GACN9nB,KAAKmc,IAAI+T,aAEhBlwB,KAAK8mB,QACE9mB,KAAKmc,IAAIgU,OAGb,KAETC,IAAK,WACH,GAAIpC,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAIkU,aACE,MAAVrC,OACRhuB,KAAK8mB,QAC4B,MAA7B9mB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAImU,aAETtwB,KAAKmc,IAAIoU,OAGb,KAETC,IAAK,WACH,GAAIxC,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAIsU,gBACG,MAAVzC,OAAkD,MAAjChuB,KAAKiE,OAAOjE,KAAKmE,OAAS,IACpDnE,KAAK8nB,QAAQ,GACN9nB,KAAKmc,IAAIuU,YAEX,KAETC,IAAK,WACH,MAAiC,MAA7B3wB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAIyU,aAEX,KAETC,IAAK,WACH,GAAI7C,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAI2U,aACG,MAAV9C,OACThuB,KAAK8mB,QACE9mB,KAAKmc,IAAI4U,eAEX,KAETC,IAAK,WACH,GAAIhD,OAAQhuB,KAAKiE,OAAOjE,KAAKmE,OAC7B,OAAc,MAAV6pB,OACFhuB,KAAK8mB,QACE9mB,KAAKmc,IAAI8U,YACG,MAAVjD,OACThuB,KAAK8mB;AACE9mB,KAAKmc,IAAI+U,cAEX,KAETC,IAAK,WACH,MAAiC,MAA7BnxB,KAAKiE,OAAOjE,KAAKmE,SACnBnE,KAAK8mB,QACE9mB,KAAKmc,IAAIiV,aAEX,YAKPC,KAAK,SAAS9yB,QAAQkB,OAAOJ,SAMlC,GAAI+c,QAAS,4BAEd3c,QAAOJ,SAGLurB,OAAQ,WACN,GAAIrD,IAAKvnB,KAAKiE,OAAOqtB,WAAWtxB,KAAKmE,OAAS,EAC9C,OAAOojB,IAAK,IAAMA,GAAK,IAIzBoF,SAAU,WACR,GAAIpF,IAAKvnB,KAAKiE,OAAOqtB,WAAWtxB,KAAKmE,OAAS,EAC9C,OAAQojB,IAAK,IAAMA,GAAK,KAClBA,GAAK,IAAMA,GAAK,IACV,KAAPA,IACCA,GAAK,IAAMA,GAAK,IACjBA,GAAK,KAKZ6D,eAAgB,WACd,GAAI7D,IAAKvnB,KAAKiE,OAAOqtB,WAAWtxB,KAAKmE,OAAS,EAC9C,OAAQojB,IAAK,IAAMA,GAAK,KAClBA,GAAK,IAAMA,GAAK,IACV,KAAPA,IACCA,GAAK,KAMb8D,cAAe,WACb,KAAMrrB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADA/mB,KAAK8mB,SACA9mB,KAAK2sB,WAAY,CACpB3sB,KAAKwnB,MAAM,EACX,OAGJ,MAAOxnB,OAIT6rB,SAAU,WACR,GAAItE,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,EACnC,OAAOiY,QAAOmV,QAAQhK,OAAQ,GAGhCuC,cAAe,WACb,GAAIvC,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,EACnC,OAAc,MAAPojB,IAAqB,OAAPA,IAAsB,OAAPA,IAAsB,OAAPA,IAGrDiF,YAAa,WACX,GAAIjF,IAAKvnB,KAAKiE,OAAOjE,KAAKmE,OAAS,EACnC,OAAc,MAAPojB,IAAqB,OAAPA,IAGvBoH,iBAAkB,WAChB,KAAM3uB,KAAKmE,OAASnE,KAAK+mB,MAEvB,GADA/mB,KAAK8mB;CACA9mB,KAAKwsB,cAAe,CACvBxsB,KAAKwnB,MAAM,EACX,OAGJ,MAAOxnB,OAGTyqB,OAAQ,WACN,GAAIlD,IAAKvnB,KAAKiE,OAAOqtB,WAAWtxB,KAAKmE,OAAS,EAC9C,OAAQojB,IAAK,IAAMA,GAAK,IAAQA,GAAK,IAAMA,GAAK,IAAQA,GAAK,IAAMA,GAAK,WAItEiK,KAAK,SAASjzB,QAAQkB,OAAOJ,SAUnC,QAASoyB,UAAS/yB,GAChB,MAAY,KAALA,GAAiB,KAALA,IAAagzB,MAAMC,WAAWjzB,KAAOkzB,SAASlzB,GAcnE,GAAI0E,QAAS,SAASC,MAAOwuB,KAC3B7xB,KAAKqD,MAAQA,MACbrD,KAAK6xB,IAAMA,IACX7xB,KAAKmc,IAAM9Y,MAAM8Y,IACjBnc,KAAKsc,IAAMjZ,MAAMiZ,IACjBtc,KAAK2R,MAAQ,KACb3R,KAAK8xB,KAAO,KACZ9xB,KAAKuc,OAAQ,EACbvc,KAAK+xB,YAAa,EAClB/xB,KAAKgyB,gBAAiB,EACtBhyB,KAAKiyB,SACHC,UACElyB,KAAKmc,IAAIwP,WACT,IAAK,IACL3rB,KAAKmc,IAAIiS,eACTpuB,KAAKmc,IAAImP,SACTtrB,KAAKmc,IAAImH,YACTtjB,KAAKmc,IAAIiI,UAEX+N,QACEnyB,KAAKmc,IAAI8P,2BACTjsB,KAAKmc,IAAI2Q,gBACT9sB,KAAKmc,IAAI4O,UACT/qB,KAAKmc,IAAI2O,UACT9qB,KAAKmc,IAAI+I,QAAQ,IACjBllB,KAAKmc,IAAIa,UACThd,KAAKmc,IAAIe,UACTld,KAAKmc,IAAIiB,SACTpd,KAAKmc,IAAImB,WACTtd,KAAKmc,IAAIqB,OACTxd,KAAKmc,IAAIuB,OACT1d,KAAKmc,IAAIyB,MACT5d,KAAKmc,IAAI2B,OACT,IACA,KACA,KACA,IACA9d,KAAKmc,IAAIiS,gBAEXgE,eACIpyB,KAAKmc,IAAIa,UACThd,KAAKmc,IAAIe,UACTld,KAAKmc,IAAIiB,SACTpd,KAAKmc,IAAImB,WACTtd,KAAKmc,IAAIqB,OACTxd,KAAKmc,IAAIuB,OACT1d,KAAKmc,IAAIyB,MACT5d,KAAKmc,IAAI2B;AAEbuU,gBACEryB,KAAKmc,IAAI2I,SACT9kB,KAAKmc,IAAIuI,UACT1kB,KAAKmc,IAAIyI,YACT5kB,KAAKmc,IAAIiI,SACTpkB,KAAKmc,IAAImI,WACTtkB,KAAKmc,IAAIqI,SAEX8N,KACE,IACAtyB,KAAKmc,IAAIiQ,YACTpsB,KAAKsc,IACLtc,KAAKmc,IAAI+N,eAEXqI,MACE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IACxBvyB,KAAKmc,IAAI8I,OACTjlB,KAAKmc,IAAIsG,QACTziB,KAAKmc,IAAIiT,MACTpvB,KAAKmc,IAAI8R,MACTjuB,KAAKmc,IAAIoG,MACTviB,KAAKmc,IAAI2H,QACT9jB,KAAKmc,IAAI6H,QACThkB,KAAKmc,IAAI4G,UACT/iB,KAAKmc,IAAI8G,eACTjjB,KAAKmc,IAAI+G,UACTljB,KAAKmc,IAAIiH,eACTpjB,KAAKmc,IAAI0G,OACT7iB,KAAKmc,IAAI0J,WACT7lB,KAAKmc,IAAI6J,cACThmB,KAAKmc,IAAIiK,cACTpmB,KAAKmc,IAAImK,aACTtmB,KAAKmc,IAAIqK,cACTxmB,KAAKmc,IAAIuK,YACT1mB,KAAKmc,IAAIyK,aACT5mB,KAAKmc,IAAI6B,OACThe,KAAKmc,IAAI2F,QACT9hB,KAAKmc,IAAIyR,QACT5tB,KAAKmc,IAAIiI,SACTpkB,KAAKmc,IAAIgC,WAETne,KAAKmc,IAAIwP,WACT,IACA3rB,KAAKmc,IAAIiS,eACTpuB,KAAKmc,IAAImP,SAETtrB,KAAKmc,IAAImP,SACTtrB,KAAKmc,IAAI8P,2BACTjsB,KAAKmc,IAAI2Q,gBACT9sB,KAAKmc,IAAI4O,UACT/qB,KAAKmc,IAAI2O,UACT9qB,KAAKmc,IAAI+I,QAAQ,IACjBllB,KAAKmc,IAAIa,UACThd,KAAKmc,IAAIe,UACTld,KAAKmc,IAAIiB,SACTpd,KAAKmc,IAAImB,WACTtd,KAAKmc,IAAIqB,OACTxd,KAAKmc,IAAIuB,OACT1d,KAAKmc,IAAIyB,MACT5d,KAAKmc,IAAI2B;EAQf1a,QAAO5B,UAAUgxB,aAAe,SAAS7gB,OACvC,MAAK8f,UAAS9f,OAGRA,OAAS3R,KAAKsc,IAAY,wBACvBtc,KAAKqD,MAAM6Y,OAAOE,OAAO4M,OAAOrX,OAHhC,IAAMA,MAAQ,KAUzBvO,OAAO5B,UAAUixB,MAAQ,SAAStzB,KAAMuzB,UACtC1yB,KAAK2yB,WACL3yB,KAAK0yB,SAAWA,UAAY,OAC5B1yB,KAAK4yB,kBAAoB,IACzB5yB,KAAKqD,MAAMwjB,SAAS1nB,MACpBa,KAAKqD,MAAMoZ,eAAiBzc,KAAK+xB,WACjC/xB,KAAKT,OAASS,KAAKqD,MAAMY,OAAO1E,OAChCS,KAAK6yB,WAAY,CACjB,IAAIC,SAAU9yB,KAAK6xB,IAAInuB,QAAQ,UAAW1D,MACtC+yB,SAEJ,KADA/yB,KAAKgzB,mBACChzB,KAAK2R,OAAS3R,KAAKsc,KAAK,CAC5B,GAAI9X,MAAOxE,KAAKizB,YACH,QAATzuB,MAA0B0uB,SAAT1uB,OACfnD,MAAM8xB,QAAQ3uB,MAChBuuB,OAASA,OAAOtyB,OAAO+D,MAEvBuuB,OAAOxxB,KAAKiD,OAIlB,MAAOsuB,SAAQC,OAAQ/yB,KAAK2yB,UAM9BvvB,OAAO5B,UAAU4xB,WAAa,SAAS1hB,QAAS2hB,UAAWC,OAAQ3hB,OAEjE,GADAD,SAAW,YAAc1R,KAAKqD,MAAMC,OAAOC,YACtCvD,KAAKgyB,eAAgB,CACxB,GAAIuB,KAAM,GAAIC,aACZ9hB,QAAS1R,KAAK0yB,SAAU1yB,KAAKqD,MAAMC,OAAOC,WAK5C,MAHAgwB,KAAIE,WAAazzB,KAAKqD,MAAMC,OAAOC,WACnCgwB,IAAIG,SAAW1zB,KAAK0yB,SACpBa,IAAII,aAAe3zB,KAAKqD,MAAMC,OAAOE,aAC/B+vB,IAGR,GAAI/uB,MAAOxE,KAAK6xB,IAAInuB,QAAQ,QAAS1D,MACnC0R,QAASC,MAAO3R,KAAKqD,MAAMC,OAAOC,WAAY+vB;AAGhD,MADAtzB,MAAK2yB,QAAQpxB,KAAKiD,MACXA,MAMTpB,OAAO5B,UAAUoyB,MAAQ,SAASN,QAChC,GAAIO,KAAM,4BAEV,IADAliB,MAAQ3R,KAAKwyB,aAAaxyB,KAAK2R,OAC3B3R,KAAK2R,QAAU3R,KAAKsc,IAAK,CAC3B,GAAImV,SAASzxB,KAAK2R,OAAQ,CACxB,GAAImiB,QAAS9zB,KAAK2nB,MACdmM,QAAOv0B,OAAS,KAClBu0B,OAASA,OAAO5vB,UAAU,EAAG,GAAK,OAEpCyN,MAAQ,IAAKmiB,OAAO,MAAOniB,MAAM,IAEnCkiB,KAAO,gBAAkBliB,MAE3B,GAAI0hB,WAAY,EAQhB,OAPIC,UAAWjyB,MAAM8xB,QAAQG,WACvB7B,SAAS6B,SAA6B,IAAlBA,OAAO/zB,UAC7B8zB,UAAY,eAAiBrzB,KAAKwyB,aAAac,SAEjDO,KAAOR,WAETrzB,KAAK2R,QAAU3R,KAAKsc,IACbtc,KAAKozB,WACVS,IACAR,UACAC,OACA3hB,QAOJvO,OAAO5B,UAAUgD,KAAO,SAAShC,MAC/B,MAAOxC,MAAK6xB,IAAInuB,QAAQlB,KAAMxC,OAOhCoD,OAAO5B,UAAUuyB,qBAAuB,WACtC,GAAmB,MAAf/zB,KAAK2R,MACP3R,KAAKgzB,mBACDhzB,KAAK2R,QAAU3R,KAAKmc,IAAIiQ,aAE1BpsB,KAAKgzB,uBAEF,IAAIhzB,KAAK2R,QAAU3R,KAAKmc,IAAIiQ,YACjCpsB,KAAKgzB,uBACA,IAAIhzB,KAAK2R,QAAU3R,KAAKmc,IAAI+N,eAAiBlqB,KAAK2R,QAAU3R,KAAKsc,IAEtE,MADAtc,MAAK4zB,MAAM,MACJ,CAET,QAAO,EAIT,IAAII,cAAe,cAAe,0BAClC5wB,QAAO5B,UAAUyyB,QAAU;AAGzB,IAAK,GADDriB,MADAsiB,OAAQ,GAAKh1B,QAASg1B,MAAMC,MAAM,MAE7BhwB,OAAS,EAAGA,OAAS+vB,MAAM30B,OAAQ4E,SAAW,CACrDyN,KAAOsiB,MAAM/vB,QAAQiwB,MAErB,KAAI,GADAC,QAAQ,EACJr1B,EAAI,EAAGA,EAAIg1B,YAAYz0B,OAAQP,IACrC,GAAI4S,KAAK1N,UAAU,EAAG,EAAI8vB,YAAYh1B,GAAGO,UAAYy0B,YAAYh1B,GAAI,CACnEq1B,OAAQ,CACR,OAGJ,IAAKA,MACH,MAYJ,MARApL,SAAQC,IACN,QACElpB,KAAKqD,MAAMC,OAAOC,WAClB,MACAvD,KAAKwyB,aAAaxyB,KAAK2R,OACvB,IAAM3R,KAAKqD,MAAM4jB,OAAS,SAChBrV,MAEP5R,MAgBToD,OAAO5B,UAAU8xB,OAAS,SAAS3hB,OACjC,GAAItQ,MAAM8xB,QAAQxhB,QAChB,GAAIA,MAAM4f,QAAQvxB,KAAK2R,UAAW,EAEhC,MADA3R,MAAK4zB,MAAMjiB,QACJ,MAEJ,IAAI3R,KAAK2R,OAASA,MAEvB,MADA3R,MAAK4zB,MAAMjiB,QACJ,CAET,QAAO,GAOTvO,OAAO5B,UAAUmmB,KAAO,WACtB,MAAO3nB,MAAKqD,MAAM4jB,QAIpB7jB,OAAO5B,UAAU4mB,KAAO,WAStB,MARIpoB,MAAKuc,OACPvc,KAAKi0B,UACLj0B,KAAKuc,OAAQ,EACbvc,KAAKgzB,mBAAmBsB,iBACxBt0B,KAAKuc,OAAQ,GAEbvc,KAAKgzB,mBAAmBsB,iBAEnBt0B,MAIToD,OAAO5B,UAAU8yB,eAAiB,WAEhC,IADIt0B,KAAKuc,OAAOvc,KAAKi0B,UACfj0B,KAAK2R,QAAU3R,KAAKmc,IAAImM,WAAatoB,KAAK2R,QAAU3R,KAAKmc,IAAIoM,eAEjEvoB,KAAKgzB,kBAEP,OAAOhzB,OAIToD,OAAO5B,UAAUwxB,iBAAmB;AAQlC,MAPAhzB,MAAK8xB,MACH9xB,KAAKqD,MAAMC,OAAOC,WAClBvD,KAAKqD,MAAMC,OAAOE,aAClBxD,KAAKqD,MAAMc,QAEbnE,KAAK2R,MAAQ3R,KAAKqD,MAAM8kB,OAASnoB,KAAKsc,IAClCtc,KAAKuc,OAAOvc,KAAKi0B,UACdj0B,MAMToD,OAAO5B,UAAU+yB,GAAK,SAASzoB,MAC7B,MAAIzK,OAAM8xB,QAAQrnB,MACTA,KAAKylB,QAAQvxB,KAAK2R,UAAW,EAE7B3R,KAAKiyB,QAAQnmB,MAAMylB,QAAQvxB,KAAK2R,SAAU,IAMnDpT,QAAQ,qBACRA,QAAQ,qBACRA,QAAQ,uBACRA,QAAQ,oBACRA,QAAQ,wBACRA,QAAQ,kBACRA,QAAQ,qBACRA,QAAQ,oBACRA,QAAQ,yBACRA,QAAQ,sBACRA,QAAQ,yBACRA,QAAQ,sBACRA,QAAQ,mBACRA,QAAQ,qBACRA,QAAQ,yBACRqG,QAAQ,SAAUmJ,KAClB,IAAI,GAAIob,KAAKpb,KACX3K,OAAO5B,UAAU2nB,GAAKpb,IAAIob,KAI9B1pB,OAAOJ,QAAU+D,SAEdoxB,oBAAoB,IAAIC,oBAAoB,IAAIC,sBAAsB,IAAIC,mBAAmB,IAAIC,uBAAuB,IAAIC,iBAAiB,IAAIC,oBAAoB,IAAIC,mBAAmB;AAAIC,wBAAwB,IAAIC,qBAAqB,IAAIC,wBAAwB,IAAIC,qBAAqB,IAAIC,kBAAkB,IAAIC,oBAAoB,IAAIC,uBAAuB,MAAMC,KAAK,SAASh3B,QAAQkB,OAAOJ,SAMrZ,GAAIm2B,WAAY,QACZC,WAAa,OAEjBh2B,QAAOJ,SAQLq2B,WAAY,WACV,GAAIpC,QAAS,KACTzoB,WAAY,EACZC,SACArG,OAASzE,KAAKwE,KAAKgxB,UAUvB,IARIx1B,KAAK2R,QAAU3R,KAAKmc,IAAI+I,SAC1BllB,KAAKooB,OAAOkL,OAAO,KACnBA,OAAS,MAETzoB,WAAY,EACZyoB,OAAS,KAGPtzB,KAAKooB,OAAOzW,OAAS2hB,OACvB,KAAMtzB,KAAK2R,OAAS3R,KAAKsc,MACvBxR,MAAMvJ,KAAKvB,KAAK21B,wBACE,KAAd31B,KAAK2R,SACP3R,KAAKooB,OACDpoB,KAAK2R,QAAU2hB,UAQzB,MAFAtzB,MAAKszB,OAAOA,QACZtzB,KAAKooB,OACE3jB,OAAOoG,UAAWC,QAe3B6qB,qBAAsB,WACpB,GAAIlxB,QAASzE,KAAKwE,KAAKixB,YACnBjkB,IAAM,KACN/E,MAAQ,IACZ,IAAmB,MAAfzM,KAAK2R,MACPlF,MAAQzM,KAAKooB,OAAOwN,eAAc,GAAM,GAAO,OAC1C,CACL,GAAIpd,MAAOxY,KAAK61B,WACZ71B,MAAK2R,QAAU3R,KAAKmc,IAAI6S,gBAC1Bxd,IAAMgH,KAEJ/L,MADwB,MAAtBzM,KAAKooB,OAAOzW,MACN3R,KAAKooB,OAAOwN,eAAc,GAAM,GAAO,GAEvC51B,KAAK61B,aAGfppB,MAAQ+L,KAGZ,MAAO/T,QAAO+M,IAAK/E,QAOrBqpB,gBAAiB;AACf,MAAkB,KAAd91B,KAAK2R,OACF3R,KAAK61B,mBAIVE,KAAK,SAASx3B,QAAQkB,OAAOJ,SAOnCI,OAAOJ,SAOL22B,WAAY,SAASC,MACnB,GAAIxxB,QAASzE,KAAKwE,KAAK,QACvBxE,MAAKszB,OAAOtzB,KAAKmc,IAAI6F,SACrBhiB,KAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAImP,SAC5B,IAGIhe,MAHA4oB,SAAWl2B,KAAK2nB,OAChBwO,YAAc,KACdC,eAAiB,IAWrB,OARIp2B,MAAKooB,OAAOzW,OAAS3R,KAAKmc,IAAIiG,YAChC+T,YAAcn2B,KAAKooB,OAAOiO,uBAExBr2B,KAAK2R,OAAS3R,KAAKmc,IAAIkG,eACzB+T,eAAiBp2B,KAAKooB,OAAOkO,kBAE/Bt2B,KAAKszB,OAAO,KACZhmB,KAAOtN,KAAKgzB,mBAAmBuD,kBACxB9xB,OACLyxB,SACCC,YACAC,eACA9oB,KACA2oB,OASJO,iBAAkB,WACjB,GAAI/xB,QAASzE,KAAK2R,KAClB,OAAIlN,SAAUzE,KAAKmc,IAAIqI,SACrBxkB,KAAKooB,QACG,EAAG,EAAG,IACL3jB,QAAUzE,KAAKmc,IAAImI,YAC5BtkB,KAAKooB,QACG,EAAG,EAAG,KAER,EAAG,EAAG,IAQfmO,gBAAiB,WAGhB,IAFA,GAAI9xB,WAEEzE,KAAK2R,QAAU3R,KAAKsc,KAAsB,MAAftc,KAAK2R,OAEpC,GAAI3R,KAAK2R,QAAU3R,KAAKmc,IAAImM,UAK5B,GAAItoB,KAAK2R,QAAU3R,KAAKmc,IAAIoM,cAM5B,GAAIvoB,KAAK2R,QAAU3R,KAAKmc,IAAIqH,MAA5B,CAQA,GAAIvV,OAAQjO,KAAKy2B,mBAAkB,EAGnC,IAAIz2B,KAAK2R,QAAU3R,KAAKmc,IAAIkC,QAc5B,GALIre,KAAK2R,QAAU3R,KAAKmc,IAAIwG,QAC1B3iB,KAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAIwP;AAC5B1d,MAAM,GAAKA,MAAM,GAAK,GAGpBjO,KAAK2R,QAAU3R,KAAKmc,IAAIwP,WAAY,CAGtC,GAAI+K,WAAY12B,KAAK22B,mBAAmB1oB,MACxCjO,MAAKszB,OAAO,KACZtzB,KAAKgzB,mBACLvuB,OAASA,OAAOhE,OAAOi2B,eAEd12B,MAAK2R,QAAU3R,KAAKmc,IAAIgC,WAGjC1Z,OAAOlD,KAAKvB,KAAK42B,eAAc,EAAO3oB,SAKtCjO,KAAK4zB,OACH5zB,KAAKmc,IAAIkC,QACTre,KAAKmc,IAAIwP,WACT3rB,KAAKmc,IAAIgC,aAGXne,KAAKooB,YApCP,CACE,GAAIyO,WAAY72B,KAAK82B,mBAAmB7oB,MACxCjO,MAAKszB,OAAO,KACZtzB,KAAKgzB,mBACLvuB,OAASA,OAAOhE,OAAOo2B,gBAdvBpyB,QAASA,OAAOhE,OACdT,KAAKooB,OAAO2O,gCAPdtyB,QAAOlD,KAAKvB,KAAKg3B,wBALjBvyB,QAAOlD,KAAKvB,KAAKi3B,eA+DrB,OAFAj3B,MAAKszB,OAAO,KACZtzB,KAAKgzB,mBACEvuB,QAQRkyB,mBAAoB,SAAS1oB,OAC5B,MAAOjO,MAAKk3B,UAQV,QAASC,6BACP,GAAI1yB,QAASzE,KAAKwE,KAAK,WACvBxE,MAAKszB,OAAOtzB,KAAKmc,IAAIwP,WACrB,IAAInpB,MAAOxC,KAAK2nB,MAEhB,OADA3nB,MAAKooB,OACc,MAAfpoB,KAAK2R,OAAgC,MAAf3R,KAAK2R,MACtBlN,OAAOjC,KAAM,KAAMyL,OACH,MAAfjO,KAAK2R,MAENlN,OAAOjC,KAAMxC,KAAKooB,OAAOyN,YAAa5nB,QAE7CjO,KAAKszB,QAAQ,IAAK,IAAK,MAChB7uB,OAAOjC,KAAM,KAAMyL;EAE3B,MASN6oB,mBAAoB,SAAS7oB,OAI5B,MAHIjO,MAAKszB,OAAOtzB,KAAKmc,IAAIkC,UACvBre,KAAKooB,OAEApoB,KAAKk3B,UASR,QAASE,6BACP,GAAI3yB,QAASzE,KAAKwE,KAAK,iBAAkBhC,KAAO,KAAMiK,MAAQ,IAQ9D,OAPIzM,MAAKszB,OAAOtzB,KAAKmc,IAAImP,YACvB9oB,KAAOxC,KAAK2nB,OACZ3nB,KAAKooB,QAEHpoB,KAAKszB,OAAO,OACd7mB,MAASzM,KAAKooB,OAAOyN,aAEhBpxB,OAAOjC,KAAMiK,MAAOwB,QAC1B,MAWRwoB,kBAAmB,SAASY,aAC3B,GAAI5yB,UAAU,GAAI,GAAI,EACtB,IAAIzE,KAAKu0B,GAAG,kBAAmB,CAC7B,GAAI+C,KAAM,EAAGC,IAAM,CACnB,GAAG,CACD,OAAOv3B,KAAK2R,OACV,IAAK3R,MAAKmc,IAAI2I,SAAcwS,IAAM,EAAGC,IAAM,CAAG,MAC9C,KAAKv3B,MAAKmc,IAAIyI,YAAc0S,IAAM,EAAGC,IAAM,CAAG,MAC9C,KAAKv3B,MAAKmc,IAAIuI,UAAc4S,IAAM,EAAGC,IAAM,CAAG,MAC9C,KAAKv3B,MAAKmc,IAAIiI,SAAckT,IAAM,EAAGC,IAAM,CAAG,MAC9C,KAAKv3B,MAAKmc,IAAImI,WAAcgT,IAAM,EAAGC,IAAM,CAAG,MAC9C,KAAKv3B,MAAKmc,IAAIqI,QAAc8S,IAAM,EAAGC,IAAM,EAEzCF,cACS,GAAPC,KAAmB,GAAPC,KAEdv3B,KAAKszB,QAAQtzB,KAAKmc,IAAI2I,SAAU9kB,KAAKmc,IAAIyI,cACzC2S,KAAM,GACU,GAAPD,KAAmB,GAAPC,MAErBv3B,KAAK4zB,QACL2D,KAAM,IAGN9yB,OAAO6yB,QAAS,EAElBt3B,KAAK4zB,QACI2D,OAAQ,IACjB9yB,OAAO6yB,KAAOC,WAEVv3B,KAAKooB,OAAOmM,GAAG,mBAMzB,MAHI9vB,QAAO,KAAM,IAAIA,OAAO,GAAK,GAC7BA,OAAO,KAAM,IAAIA,OAAO,GAAK;AAC7BA,OAAO,KAAM,IAAIA,OAAO,GAAK,GAC1BA,QAQR+yB,eAAgB,WACf,GAAI/yB,QAASzE,KAAKwE,KAAK,aAAchC,KAAO,KAAM8K,KAAO,KAAM6oB,YAAc,IAc7E,OAbIn2B,MAAKszB,OAAOtzB,KAAKmc,IAAI+F,cACvBliB,KAAKooB,OAEHpoB,KAAKszB,OAAOtzB,KAAKmc,IAAImP,YACvB9oB,KAAOxC,KAAK2nB,OACZ3nB,KAAKooB,QAEHpoB,KAAK2R,QAAU3R,KAAKmc,IAAIiG,YAC1B+T,YAAcn2B,KAAKooB,OAAOkO,kBAExBt2B,KAAKszB,OAAO,OACdhmB,KAAOtN,KAAKooB,OAAOqP,uBAEdhzB,OAAOjC,KAAM2zB,YAAa7oB,OAQlCmqB,oBAAqB,WAGpB,IAFA,GAAIhzB,WAEEzE,KAAK2R,QAAU3R,KAAKsc,KAAsB,MAAftc,KAAK2R,OAEpC,GAAI3R,KAAK2R,QAAU3R,KAAKmc,IAAImM,UAK5B,GAAItoB,KAAK2R,QAAU3R,KAAKmc,IAAIoM,cAA5B,CAMA,GAAIta,OAAQjO,KAAKy2B,mBAAkB,EAGnC,IAAIz2B,KAAK2R,OAAS3R,KAAKmc,IAAIkC,QAAS,CAClC,GAAIwY,WAAY72B,KAAK82B,mBAAmB7oB,MACpCjO,MAAKszB,OAAO,MACdtzB,KAAKgzB,mBAEPvuB,OAASA,OAAOhE,OAAOo2B,eAIpB,IAAI72B,KAAK2R,QAAU3R,KAAKmc,IAAIgC,WAAY,CAC3C,GAAIpE,QAAS/Z,KAAK03B,0BAA0B,EAAGzpB,MAC/C8L,QAAO3L,WAAWH,OAClBxJ,OAAOlD,KAAKwY,QACR/Z,KAAKszB,OAAO,MACdtzB,KAAKgzB,uBAIPhzB,MAAK4zB,OACH5zB,KAAKmc,IAAIkC,QACTre,KAAKmc,IAAIgC,aAEXne,KAAKooB,WA9BL3jB,QAAOlD,KAAKvB,KAAKg3B,wBALjBvyB,QAAOlD,KAAKvB,KAAKi3B;AAyCrB,MAHIj3B,MAAKszB,OAAO,MACdtzB,KAAKooB,OAEA3jB,QAQRkzB,WAAY,SAAS1B,MACpB,GAAIxxB,QAASzE,KAAKwE,KAAK,SACrB0xB,SAAW,KACXC,YAAc,KACdC,eAAiB,KACjB9oB,KAAO,IAgBT,OAfItN,MAAKszB,OAAOtzB,KAAKmc,IAAIgG,UACvBniB,KAAKooB,OAEHpoB,KAAKszB,OAAOtzB,KAAKmc,IAAImP,YACvB4K,SAAWl2B,KAAK2nB,QAEd3nB,KAAKooB,OAAOzW,OAAS3R,KAAKmc,IAAIiG,YAChC+T,YAAcn2B,KAAKooB,OAAOiO,uBAExBr2B,KAAK2R,OAAS3R,KAAKmc,IAAIkG,eACzB+T,eAAiBp2B,KAAKooB,OAAOkO,kBAE3Bt2B,KAAKszB,OAAO,OACdhmB,KAAOtN,KAAKooB,OAAOmO,mBAEd9xB,OACLyxB,SACAC,YACAC,eACA9oB,OASHypB,yBAA0B,WAKzB,IAHA,GAAIvyB,MAAOxE,KAAKwE,KAAK,YACjB8V,QAAUta,KAAKq2B,uBACf9b,YAAc,KACG,MAAfva,KAAK2R,OACT2I,OAAO/Y,KACLvB,KAAKooB,OAAOiO,sBAGhB,IAAmB,MAAfr2B,KAAK2R,MAAe,CAGtB,IAFA4I,eAEMva,KAAKooB,OAAOzW,QAAU3R,KAAKsc,KACZ,MAAftc,KAAK2R,OACT4I,YAAYhZ,KAAKvB,KAAK43B,wBACtB53B,KAAKszB,OAAO,IAEVtzB,MAAKszB,OAAO,MACdtzB,KAAKgzB,uBAGHhzB,MAAKszB,OAAO,MACdtzB,KAAKgzB,kBAGT,OAAOxuB,MAAK8V,OAAQC,cAQrBqd,qBAAsB;AACrB,GAAIpzB,MAAOxE,KAAKwE,OACZsV,MAAQ,KACRC,OAAS/Z,KAAKq2B,qBAclB,IAZIr2B,KAAK2R,QAAU3R,KAAKmc,IAAIqS,eACtBxuB,KAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAImP,YAC9BxR,MAAQC,OACRA,OAAS/Z,KAAK2nB,OACd3nB,KAAKooB,QAIPrO,OAASA,OAAOvX,KAIdxC,KAAK2R,QAAU3R,KAAKmc,IAAIuH,YAC1B,MAAOlf,MACL,kBACAsV,MAAOC,OACP/Z,KAAKooB,OAAOkO,iBAKX,IAAIt2B,KAAK2R,QAAU3R,KAAKmc,IAAIyE,KAAM,CACrC,GAAI3S,QAAQ,EACRmN,MAAQ,IAaZ,OAZIpb,MAAKooB,OAAOmM,GAAG,oBACjBtmB,MAAQjO,KAAKy2B,qBAGXz2B,KAAK2R,QAAU3R,KAAKmc,IAAImP,UAC1BlQ,MAAQpb,KAAK2nB,OACb3nB,KAAKooB,QACIna,SAAU,GAEnBjO,KAAKszB,OAAOtzB,KAAKmc,IAAImP,UAGhB9mB,KAAK,aAAcsV,MAAOC,OAAQqB,MAAOnN,OAKlD,MADAjO,MAAKszB,QAAQtzB,KAAKmc,IAAIyE,KAAM5gB,KAAKmc,IAAIuH,cAC9Blf,KAAK,aAAcsV,MAAOC,OAAQ,KAAM,aAI7C8d,KAAK,SAASt5B,QAAQkB,OAAOJ,SAOnC,GAAIy4B,UAAW,8BAEfr4B,QAAOJ,SAIL43B,aAAc,WACZ,GAAIxyB,QAASzE,KAAKwE,KAAK,OACnBkM,QACJ,GAAG,CACD,GAAIkB,MAAO5R,KAAK2nB,MACA,OAAZ/V,KAAK,GACPA,KAAOA,KAAK1N,UAAU,IAEtB0N,KAAOA,KAAK1N,UAAU,GACkB,OAApC0N,KAAK1N,UAAU0N,KAAKrS,OAAS,KAC/BqS,KAAOA,KAAK1N,UAAU,EAAG0N,KAAKrS,OAAS,KAG3CmR,MAAMnP,KAAKqQ,KAAKwiB;OACVp0B,KAAKgzB,mBAAmBrhB,QAAU3R,KAAKmc,IAAImM,UACnD,OAAO7jB,SAAO,EAAOiM,QAKvBsmB,iBAAkB,WAChB,GAAIvyB,QAASzE,KAAKwE,KAAK,OACnBmjB,KAAO3nB,KAAK2nB,MAChBA,MAAOA,KAAKzjB,UAAU,EAAGyjB,KAAKpoB,OAAS,EACvC,IAAImR,SACJiX,MAAOA,KAAKwM,MAAM2D,SAClB,KAAI,GAAI94B,GAAI,EAAGA,EAAI2oB,KAAKpoB,OAAQP,GAAK,EACnC0R,MAAMnP,KAAKomB,KAAK3oB,GAAGo1B,OAGrB,OADAp0B,MAAKgzB,mBACEvuB,QAAO,EAAMiM,cAIlBqnB,KAAK,SAASx5B,QAAQkB,OAAOJ,SAMnC,YAEAI,QAAOJ,SAELw2B,UAAW,WACT,GAAIpxB,QAASzE,KAAKwE,OACdgU,KAAOxY,KAAKg4B,gBAEhB,IAAmB,MAAfh4B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN;AAC9C,GAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIoU,MAC1B,MAAO9rB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI0T,KAC1B,MAAOprB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIgU,KAC1B,MAAO1rB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAE/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI+U,aAC1B,MAAOzsB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAImJ,aAC1B,MAAO7gB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI4U,cAC1B,MAAOtsB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIqJ,cAC1B,MAAO/gB,QAAO,MAAO,MAAO+T,KAAMxY,KAAKooB,OAAOyN,YAChD,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIuJ,cAC1B,MAAOjhB,QAAO,MAAO,MAAO+T,KAAMxY,KAAKooB,OAAOyN,YAChD,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI8S,eAC1B,MAAOxqB,QAAO,MAAO,MAAO+T,KAAMxY,KAAKooB,OAAOyN,YAChD,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIoT,mBAC1B,MAAO9qB,QAAO,MAAO,MAAO+T,KAAMxY,KAAKooB,OAAOyN,YAChD,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI+S,WAC1B,MAAOzqB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN;AAC/C,GAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIqT,eAC1B,MAAO/qB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAmB,MAAf71B,KAAK2R,MACP,MAAOlN,QAAO,MAAO,IAAK+T,KAAMxY,KAAKooB,OAAOyN,YAC9C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI4T,sBAC1B,MAAOtrB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI8T,sBAC1B,MAAOxrB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAC/C,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAI2T,YAC1B,MAAOrrB,QAAO,MAAO,MAAO+T,KAAMxY,KAAKooB,OAAOyN,YAChD,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIwE,aAC1B,MAAOlc,QAAO,MAAO,aAAc+T,KAAMxY,KAAKooB,OAAOyN,YAIvD,IAAI71B,KAAK2R,QAAU3R,KAAKmc,IAAIuT,WAC1B,MAAOjrB,QAAO,MAAO,KAAM+T,KAAMxY,KAAKooB,OAAOyN,YAI/C,IAAmB,MAAf71B,KAAK2R,MAAe,CACtB,GAAIsmB,SAAU,IAKd,OAJ0B,MAAtBj4B,KAAKooB,OAAOzW,QACdsmB,QAAUj4B,KAAK61B,aAEjB71B,KAAKszB,OAAO,MAAQtzB,KAAKooB,OAClB3jB,OAAO,QAAS+T,KAAMyf,QAASj4B,KAAK61B,aAG7C,MAAOrd,OASRwf,eAAgB,WAEf,GAAmB,MAAfh4B,KAAK2R,MACP,MAAO3R,MAAKwE,KAAK,UAAUxE,KAAKooB,OAAOyN,YACzC,IAAmB,MAAf71B,KAAK2R,MACP,MAAO3R,MAAKwE,KAAK,SAAS,IAAKxE,KAAKooB,OAAOyN;AAC7C,GAAmB,MAAf71B,KAAK2R,MACP,MAAO3R,MAAKwE,KAAK,SAAS,IAAKxE,KAAKooB,OAAOyN,YAC7C,IAAmB,MAAf71B,KAAK2R,MACP,MAAO3R,MAAKwE,KAAK,SAAS,IAAKxE,KAAKooB,OAAOyN,YAE7C,IAAmB,MAAf71B,KAAK2R,MAAe,CACtB,GAAIlN,QAASzE,KAAKwE,MAElB,OADAxE,MAAKooB,OAEHpoB,KAAK2R,QAAU3R,KAAKmc,IAAI4O,WACxB/qB,KAAK2R,QAAU3R,KAAKmc,IAAI2O,WAGxBrmB,OAASA,OAAO,SAAU,IAAMzE,KAAK2nB,QACrC3nB,KAAKooB,OACE3jB,QAEAA,OAAO,QAAS,IAAKzE,KAAK61B,aAIrC,GAAmB,MAAf71B,KAAK2R,MAAe,CACtB,GAAInN,MAAOxE,KAAKwE,KAAK,eACjBgU,KAAOxY,KAAKooB,OAAOyN,WAIvB,OAHA71B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB5P,KAAOhU,KAAKgU,MAERxY,KAAK2R,QAAU3R,KAAKmc,IAAIgP,kBACnBnrB,KAAKk4B,8BAA8B1f,MAAM,GACvCxY,KAAK2R,QAAU3R,KAAKmc,IAAImR,cAA+B,MAAfttB,KAAK2R,MAC/C3R,KAAKm4B,oBAAoB3f,MACR,MAAfxY,KAAK2R,MAEP3R,KAAKwE,KAAK,QACfgU,KAAMxY,KAAKo4B,+BAGN5f,KAIX,GAAmB,MAAfxY,KAAK2R,MAEP,MAAO3R,MAAKwE,KAAK,SACfxE,KAAKooB,OAAOiQ,qBAAqB,KAIrC,IAAIr4B,KAAK2R,QAAU3R,KAAKmc,IAAI8I,OAAQ,CAClC,GAAIxgB,QAASzE,KAAKwE,KAAK,QAAS8zB,OAAS,KACrCC,QAAUv4B,KAAK6yB,SACd0F,WACHD,OAASt4B,KAAKwE,KAAK,WAEjBxE,KAAKooB,OAAOkL,OAAO,MACrBtzB,KAAKooB,OAGFpoB,KAAK6yB,YAAW7yB,KAAK6yB,WAAY;AAKtC,IAAI,GAJA2F,YAAax4B,KAAKy4B,uBAGlBC,SAAU,EACN15B,EAAI,EAAGA,EAAIw5B,WAAWj5B,OAAQP,IACpC,GAAsB,OAAlBw5B,WAAWx5B,GAAa,CAC1B05B,SAAU,CACV,OAYJ,MATKA,UACH14B,KAAKozB,WACH,gDAAkDpzB,KAAKqD,MAAMC,OAAOC,YAGpEvD,KAAKszB,OAAO,MACdtzB,KAAKooB,OAGFmQ,QAaI9zB,OAAO+zB,aAZdx4B,KAAK6yB,WAAY,EACb7yB,KAAKszB,OAAO,KACPgF,OACL7zB,OAAO+zB,YACPx4B,KAAKooB,OAAOyN,YACZ,KAIKpxB,OAAO+zB,aAOpB,GAAIx4B,KAAK2R,QAAU3R,KAAKmc,IAAIsG,QAC1B,MAAOziB,MAAKwE,KAAK,SACfxE,KAAKooB,OAAOyN,YAGhB,QAAO71B,KAAK2R,OAEV,IAAK3R,MAAKmc,IAAIiT,MACZ,MAAOpvB,MAAKwE,KAAK,OACf,IAAKxE,KAAKooB,OAAOwN,eAAc,GAAO,GAAO,GAGjD,KAAK51B,MAAKmc,IAAI8R,MACZ,MAAOjuB,MAAKwE,KAAK,OACf,IAAKxE,KAAKooB,OAAOwN,eAAc,GAAO,GAAO,GAGjD,KAAK51B,MAAKmc,IAAIoG,MACZ,MAAOviB,MAAKooB,OAAOuQ,eAErB,KAAK34B,MAAKmc,IAAI2H,QACZ,GAAIrf,QAASzE,KAAKwE,KAAK,QACnBxE,MAAKooB,OAAOkL,OAAO,MACrBtzB,KAAKooB,MAEP,IAAIhnB,MAAOpB,KAAKk3B,UAAUl3B,KAAK61B,UAAW,IAI1C,OAHI71B,MAAKszB,OAAO,MACdtzB,KAAKooB,OAEA3jB,OAAOrD,KAEhB,KAAKpB,MAAKmc,IAAI6H,QACZ,GAAIvf,QAASzE,KAAKwE,KAAK,QACnBxE,MAAKooB,OAAOkL,OAAO,MACrBtzB,KAAKooB,MAEP,IAAIwQ,KAAM54B,KAAK61B;AAIf,MAHI71B,MAAKszB,OAAO,MACdtzB,KAAKooB,OAEA3jB,QAAQm0B,KAEjB,KAAK54B,MAAKmc,IAAI4G,UACZ,MAAO/iB,MAAKwE,KAAK,YACf,GAAO,EACPxE,KAAKooB,OAAOyN,YAGhB,KAAK71B,MAAKmc,IAAI8G,eACZ,MAAOjjB,MAAKwE,KAAK,YACf,GAAM,EACNxE,KAAKooB,OAAOyN,YAGhB,KAAK71B,MAAKmc,IAAI+G,UACZ,MAAOljB,MAAKwE,KAAK,YACf,GAAO,EACPxE,KAAKooB,OAAOyN,YAGhB,KAAK71B,MAAKmc,IAAIiH,eACZ,MAAOpjB,MAAKwE,KAAK,YACf,GAAM,EACNxE,KAAKooB,OAAOyN,YAGhB,KAAK71B,MAAKmc,IAAI0G,OACZ,GAAIpe,QAASzE,KAAKwE,KAAK,OACnBxE,MAAKooB,OAAOkL,OAAO,MACrBtzB,KAAKooB,MAEP,IAAI5P,MAAOxY,KAAK61B,WAIhB,OAHI71B,MAAKszB,OAAO,MACdtzB,KAAKooB,OAEA3jB,OAAO+T,KAEhB,KAAKxY,MAAKmc,IAAI0J,WACZ,MAAO7lB,MAAKwE,KAAK,QAAQ,MAAOxE,KAAKooB,OAAOyN,YAE9C,KAAK71B,MAAKmc,IAAI6J,cACZ,MAAOhmB,MAAKwE,KAAK,QAAQ,SAAUxE,KAAKooB,OAAOyN,YAEjD,KAAK71B,MAAKmc,IAAIiK,cACZ,MAAOpmB,MAAKwE,KAAK,QAAQ,SAAUxE,KAAKooB,OAAOyN,YAEjD,KAAK71B,MAAKmc,IAAImK,aACZ,MAAOtmB,MAAKwE,KAAK,QAAQ,QAASxE,KAAKooB,OAAOyN,YAEhD,KAAK71B,MAAKmc,IAAIqK,cACZ,MAAOxmB,MAAKwE,KAAK,QAAQ,SAAUxE,KAAKooB,OAAOyN,YAEjD,KAAK71B,MAAKmc,IAAIuK,YACZ,MAAO1mB,MAAKwE,KAAK,QAAQ,UAAWxE,KAAKooB,OAAOyN;AAElD,IAAK71B,MAAKmc,IAAIyK,aACZ,MAAO5mB,MAAKwE,KAAK,SACfxE,KAAKooB,OAAOyN,YAGhB,KAAK71B,MAAKmc,IAAI6B,OACZ,GAAIvZ,QAASzE,KAAKwE,KAAK,QACnB2N,OAAS,IAWb,OAV2B,MAAtBnS,KAAKooB,OAAOzW,QACW,MAAtB3R,KAAKooB,OAAOzW,OACdQ,OAASnS,KAAK61B,YACV71B,KAAKszB,OAAO,MACdtzB,KAAKooB,QAGPpoB,KAAKooB,QAGF3jB,OAAO0N,OAEhB,KAAKnS,MAAKmc,IAAI2F,QACZ,MAAO9hB,MAAKwE,KAAK,SACfxE,KAAKooB,OAAOyN,YAIhB,KAAK71B,MAAKmc,IAAIyR,QACZ,GAAInpB,QAASzE,KAAKwE,KAAK,SAAUiI,MAAQ,KAAM+E,IAAM,IAUrD,OATIxR,MAAKooB,OAAOmM,GAAG,UAEjB9nB,MAAQzM,KAAK61B,YACT71B,KAAK2R,QAAU3R,KAAKmc,IAAI6S,iBAE1Bxd,IAAM/E,MACNA,MAAQzM,KAAKooB,OAAOyN,cAGjBpxB,OAAOgI,MAAO+E,IAGvB,KAAKxR,MAAKmc,IAAIwR,aACZ,GAAIlpB,QAASzE,KAAKwE,KAAK,aACnBgU,KAAOxY,KAAKooB,OAAOyN,WACvB,OAAOpxB,QAAO+T,KAEhB,KAAKxY,MAAKmc,IAAIgC,WAEZ,MAAOne,MAAK42B,eAAc,GAK9B,GAAIpe,KACJ,IAAIxY,KAAKu0B,GAAG,YAAa,CACvB,GAAI9vB,QAASzE,KAAKwE,MAGlB,QAFAgU,KAAOxY,KAAK41B,eAAc,GAAO,GAAO,GAEjC51B,KAAK2R,OACV,IAAK,IACH,GAAIvG,MAUJ,OAPIA,OAFqB,KAArBpL,KAAKooB,OAAOzW,MACV3R,KAAKooB,OAAOzW,QAAU3R,KAAKmc,IAAIoG,MACzBviB,KAAKooB,OAAOuQ,gBAEZ34B,KAAK41B,eAAc,GAAO,GAAO,GAGnC51B,KAAK61B,YAERpxB,OAAO,SAAU+T,KAAMpN,MAAO;AAGvC,IAAKpL,MAAKmc,IAAIkT,aACZ,MAAO5qB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAI+R,cACZ,MAAOzpB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAIkU,YACZ,MAAO5rB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAImU,YACZ,MAAO7rB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,MAEzD,KAAK71B,MAAKmc,IAAImS,YACZ,MAAO7pB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAIsU,eACZ,MAAOhsB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAIyU,YACZ,MAAOnsB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAI2U,YACZ,MAAOrsB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAI8U,WACZ,MAAOxsB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAIiV,YACZ,MAAO3sB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,KAEzD,KAAK71B,MAAKmc,IAAIyT,WACZ,MAAOnrB,QAAO,SAAU+T,KAAMxY,KAAKooB,OAAOyN,YAAa,MAEzD,KAAK71B,MAAKmc,IAAI+T,WACZ,MAAOzrB,QAAO,SAAS+T,KAAMxY,KAAKooB,OAAOyN,YAAa,MAExD,KAAK71B,MAAKmc,IAAIiT;AAEZ,MADApvB,MAAKooB,OACE3jB,OAAO,OAAQ,IAAK+T,KAC7B,KAAKxY,MAAKmc,IAAI8R,MAEZ,MADAjuB,MAAKooB,OACE3jB,OAAO,OAAQ,IAAK+T,WAE1B,IAAIxY,KAAKu0B,GAAG,UAGjB,IAFA/b,KAAOxY,KAAK64B,cAEN74B,KAAK2R,QAAU3R,KAAKsc,KACxB,GAAItc,KAAK2R,QAAU3R,KAAKmc,IAAIgP,kBAC1B3S,KAAOxY,KAAKk4B,8BAA8B1f,MAAM,OAC3C,IAAIxY,KAAK2R,QAAU3R,KAAKmc,IAAImR,cAA+B,MAAfttB,KAAK2R,MACtD6G,KAAOxY,KAAKm4B,oBAAoB3f,UAC3B,CAAA,GAAmB,MAAfxY,KAAK2R,MAId,MAAO6G,KAFPA,MAAOxY,KAAKwE,KAAK,QAAQgU,KAAMxY,KAAKo4B,mCAMxCp4B,MAAK4zB,MAAM,QACX5zB,KAAKooB,MAIP,OAAO5P,OASRmgB,cAAe,WACd,GAAIl0B,QAASzE,KAAKwE,KAAK,MACvB,IAAIxE,KAAK2R,QAAU3R,KAAKmc,IAAI6F,QAAS,CACnC,GAAI9U,MAAOlN,KAAKwE,KAAK,SAEjB2xB,YAAc,KAAMC,eAAiB,KAAM9oB,KAAO,IAUtD,OATItN,MAAKooB,OAAOzW,OAAS3R,KAAKmc,IAAIiG,YAChC+T,YAAcn2B,KAAKooB,OAAOiO,uBAExBr2B,KAAK2R,OAAS3R,KAAKmc,IAAIkG,eACzB+T,eAAiBp2B,KAAKooB,OAAOkO,kBAE3Bt2B,KAAKszB,OAAO,OACdhmB,KAAOtN,KAAKooB,OAAOmO,mBAEd9xB,OACLyI,KACE,KACCipB,YACAC,eACA9oB,MACC,EAAG,EAAG,QAKZ,GAAI9K,MAAOxC,KAAK84B,4BACZ13B;AAIJ,MAHmB,MAAfpB,KAAK2R,QACPvQ,KAAOpB,KAAKo4B,+BAEP3zB,OAAOjC,KAAMpB,OASvB03B,0BAA2B,WAC1B,GACE94B,KAAK2R,QAAU3R,KAAKmc,IAAIiS,gBACxBpuB,KAAK2R,QAAU3R,KAAKmc,IAAImP,UACxBtrB,KAAK2R,QAAU3R,KAAKmc,IAAImH,YACxB,CACA,GAAI7e,QAASzE,KAAKq2B,qBAIlB,OAHIr2B,MAAK2R,QAAU3R,KAAKmc,IAAIqS,iBAC1B/pB,OAASzE,KAAK+4B,mBAAmBt0B,SAE5BA,OACF,MAAIzE,MAAKu0B,GAAG,YACVv0B,KAAK41B,eAAc,GAAM,GAAO,OAEvC51B,MAAKszB,QAAQtzB,KAAKmc,IAAImP,SAAU,cAQnCmN,qBAAsB,WACrB,MAAOz4B,MAAKk3B,UACVl3B,KAAKg5B,6BAA8B,MAStCA,6BAA8B,WAC7B,GAAmB,MAAfh5B,KAAK2R,OAAgC,MAAf3R,KAAK2R,MAAe,MAAO,KACrD,IAAIlN,QAASzE,KAAKg4B,gBAQlB,OAPIh4B,MAAK2R,QAAU3R,KAAKmc,IAAI6S,iBAC1BvqB,QACE,MACAA,OACAzE,KAAKooB,OAAO4P,mBAGTvzB,cAILw0B,KAAK,SAAS16B,QAAQkB,OAAOJ,SAOnCI,OAAOJ,SAIL65B,aAAc,WACZ,MAAkB,KAAdl5B,KAAK2R,QACP3R,KAAKooB,QACE,IAOV+Q,YAAa,WACZ,MAAIn5B,MAAK2R,QAAU3R,KAAKmc,IAAIuU,aAC1B1wB,KAAKooB,QACE,IAUVwO,cAAe,SAASwC,QAASnD;AAChC,GAAIxxB,QAASzE,KAAK03B,0BAChB0B,QAAU,EAAKnD,KAAO,EAAI,EAgB5B,OAdIA,OAAmB,GAAXA,KAAK,IAEfxxB,OAAO2J,WAAW6nB,MACdj2B,KAAKszB,OAAO,MACdtzB,KAAKgzB,qBAGHhzB,KAAKszB,OAAO,OACd7uB,OAAO6I,KAAOtN,KAAKq5B,iBAAgB,IAEjCpD,MACFxxB,OAAO2J,WAAW6nB,OAGfxxB,QAQRizB,0BAA2B,SAAS5rB,MACnC,GAAIwtB,UAAW,UACF,KAATxtB,KACFwtB,SAAW,UACO,IAATxtB,OACTwtB,SAAW,SAEb,IAAI70B,QAASzE,KAAKwE,KAAK80B,SACnBt5B,MAAKszB,OAAOtzB,KAAKmc,IAAIgC,aACvBne,KAAKooB,MAEP,IAAIvR,OAAQ7W,KAAKk5B,eACb12B,MAAO,EAAO+gB,OAAUgW,WAAa,KAAMxqB,UAAW,CAC7C,KAATjD,MACE9L,KAAKszB,OAAOtzB,KAAKmc,IAAImP,YACvB9oB,KAAOxC,KAAK2nB,OACZ3nB,KAAKooB,QAGLpoB,KAAKszB,OAAO,MAAMtzB,KAAKooB,MAC3B,IAAIoR,QAASx5B,KAAKy5B,qBAclB,OAbIz5B,MAAKszB,OAAO,MAAMtzB,KAAKooB,OACd,IAATtc,MAAc9L,KAAK2R,QAAU3R,KAAKmc,IAAIqH,QACpCxjB,KAAKooB,OAAOkL,OAAO,MAAMtzB,KAAKooB,OAClC7E,IAAMvjB,KAAKk3B,UAAUl3B,KAAK05B,iBAAkB,KACxC15B,KAAKszB,OAAO,MAAMtzB,KAAKooB,QAEV,MAAfpoB,KAAK2R,QACmB,MAAtB3R,KAAKooB,OAAOzW,QACd5C,UAAW,EACX/O,KAAKooB,QAEPmR,WAAav5B,KAAK25B,aAEP,IAAT7tB,KAEKrH,OAAO+0B,OAAQ3iB,MAAO0M,IAAKgW,WAAYxqB,UAEzCtK,OAAOjC,KAAMg3B,OAAQ3iB,MAAO0iB,WAAYxqB;EAOhD2qB,iBAAkB,WACjB,GAAIj1B,UAAU,EAAO,KAWrB,OAVmB,MAAfzE,KAAK2R,QACPlN,OAAO,IAAK,EACZzE,KAAKooB,QAEHpoB,KAAK2R,QAAU3R,KAAKmc,IAAIwP,YAC1BlnB,OAAO,GAAKzE,KAAK2nB,OACjB3nB,KAAKooB,QAELpoB,KAAKszB,QAAQ,IAAKtzB,KAAKmc,IAAIwP,aAEtBlnB,QAQRg1B,oBAAqB,WACpB,GAAIh1B,UACJ,IAAkB,KAAdzE,KAAK2R,MACP,KAAM3R,KAAK2R,OAAS3R,KAAKsc,KAAK,CAE5B,GADA7X,OAAOlD,KAAKvB,KAAK45B,kBACC,KAAd55B,KAAK2R,MAEF,CAAA,GAAkB,KAAd3R,KAAK2R,MACd,KAEA3R,MAAK4zB,OAAO,IAAK,KACjB,OALA5zB,KAAKooB,OASX,MAAO3jB,SAQRm1B,eAAgB,WACf,GAAIp1B,MAAOxE,KAAKwE,KAAK,aACnBhC,KAAO,KACPiK,MAAQ,KACRX,KAAO,KACPiD,UAAW,CACM,OAAf/O,KAAK2R,QACP3R,KAAKooB,OACLrZ,UAAW,GAEbjD,KAAO9L,KAAK25B,YACR5qB,WAAajD,MACf9L,KAAKozB,WAAW,8DAElB,IAAIvc,OAAQ7W,KAAKk5B,eACbpiB,WAAa9W,KAAKm5B,aAQtB,OAPIn5B,MAAKszB,OAAOtzB,KAAKmc,IAAIwP,cACvBnpB,KAAOxC,KAAK2nB,OACZ3nB,KAAKooB,QAEW,KAAdpoB,KAAK2R,QACPlF,MAAQzM,KAAKooB,OAAOyN,aAEfrxB,KAAKhC,KAAMsJ,KAAMW,MAAOoK,MAAOC,WAAY/H,WAQnDqpB,4BAA6B,WAC5B,GAAI3zB,WACAo1B,aAAc,CAElB,IADA75B,KAAKszB,OAAO,MAAQtzB,KAAKooB;AACN,MAAfpoB,KAAK2R,MACP,KAAM3R,KAAK2R,OAAS3R,KAAKsc,KAAK,CAC5B,GAAIwd,UAAW95B,KAAK+5B,oBAOpB,IANAt1B,OAAOlD,KAAKu4B,UACU,aAAlBA,SAASn2B,KACXk2B,aAAc,EACLA,aACT75B,KAAKozB,WAAW,iDAEC,MAAfpzB,KAAK2R,MAEF,KADL3R,MAAKooB,OAKX,MADApoB,MAAKszB,OAAO,MAAQtzB,KAAKooB,OAClB3jB,QAORs1B,mBAAoB,WACnB,MAAI/5B,MAAK2R,QAAU3R,KAAKmc,IAAIuU,WACnB1wB,KAAKwE,KAAK,YAAYxE,KAAKooB,OAAOyN,aAEpC71B,KAAK61B,aAQb8D,UAAW,WACV,GAAIl1B,QAASzE,KAAKwE,KAAK,aACvB,QAAOxE,KAAK2R,OACV,IAAK3R,MAAKmc,IAAI+I,QAEZ,MADAllB,MAAKooB,OACE3jB,QAAQ,GAAI,UAAU,EAC/B,KAAKzE,MAAKmc,IAAImH,YACd,IAAKtjB,MAAKmc,IAAIiS,eACd,IAAKpuB,MAAKmc,IAAImP,SACZ,MAAOtrB,MAAKq2B,qBACd,KAAKr2B,MAAKmc,IAAIiJ,WAEZ,MADAplB,MAAKooB,OACE3jB,QAAQ,GAAI,aAAa,EAClC,SACE,MAAO,cAKTu1B,KAAK,SAASz7B,QAAQkB,OAAOJ,SAOnCI,OAAOJ,SAQL46B,QAAS,WACP,GAAIx1B,QAASzE,KAAKwE,KAAK,MACrB8I,KAAO,KACP4G,UAAY,KACZrJ,WAAY,EACZwC,KAAO,IAGT,IAFAA,KAAOrN,KAAKk6B,eAEO,MAAfl6B,KAAK2R,MAAe,CACtB9G,WAAY,EACZ7K,KAAKooB,OACL9a,KAAOtN,KAAKwE,KAAK;AAEjB,IADA,GAAIsG,UACE9K,KAAK2R,OAAS3R,KAAKsc,KAAOtc,KAAK2R,QAAU3R,KAAKmc,IAAIkD,SAAS,CAE/D,GADArf,KAAKs0B,iBACDt0B,KAAK2R,QAAU3R,KAAKmc,IAAIgD,SAAU,CACpCjL,UAAYlU,KAAKooB,OAAO+R,mBACxB,OACK,GAAIn6B,KAAK2R,QAAU3R,KAAKmc,IAAIoD,OAAQ,CACzCrL,UAAYlU,KAAKooB,OAAOgS,iBACxB,OAEFtvB,MAAMvJ,KAAKvB,KAAKq6B,wBAElB/sB,KAAOA,KAAK,KAAMxC,OACd9K,KAAKs0B,iBAAiBhB,OAAOtzB,KAAKmc,IAAIkD,UAAUrf,KAAKooB,OACzDpoB,KAAK+zB,2BAELzmB,MAAOtN,KAAKs6B,iBACZt6B,KAAKs0B,iBACDt0B,KAAK2R,QAAU3R,KAAKmc,IAAIgD,SAC1BjL,UAAYlU,KAAKooB,OAAO6R,UACfj6B,KAAK2R,QAAU3R,KAAKmc,IAAIoD,SACjCrL,UAAYlU,KAAKooB,OAAOkS,iBAG5B,OAAO71B,QAAO4I,KAAMC,KAAM4G,UAAWrJ,YAKvCqvB,aAAc,WACRl6B,KAAKszB,OAAO,MAAMtzB,KAAKooB,MAC3B,IAAI3jB,QAASzE,KAAK61B,WAElB,OADI71B,MAAKszB,OAAO,MAAMtzB,KAAKooB,OACpB3jB,QAKT01B,kBAAmB,WACjB,GAAI11B,QAASzE,KAAKwE,KAAK,MACrB0P,UAAY,KACZ7G,KAAO,KACPC,KAAO,KACPxC,QAIF,KAHAuC,KAAOrN,KAAKk6B,eACRl6B,KAAKszB,OAAO,MAAMtzB,KAAKooB,OAC3B9a,KAAOtN,KAAKwE,KAAK,SACXxE,KAAK2R,OAAS3R,KAAKsc,KAAOtc,KAAK2R,QAAU3R,KAAKmc,IAAIkD,SAAS,CAC/D,GAAIrf,KAAK2R,QAAU3R,KAAKmc,IAAIgD,SAAU;AACpCjL,UAAYlU,KAAKooB,OAAO+R,mBACxB,OACK,GAAIn6B,KAAK2R,QAAU3R,KAAKmc,IAAIoD,OAAQ,CACzCrL,UAAYlU,KAAKooB,OAAOgS,iBACxB,OAEFtvB,MAAMvJ,KAAKvB,KAAKq6B,wBAGlB,MADA/sB,MAAOA,KAAK,KAAMxC,OACXrG,OAAO4I,KAAMC,KAAM4G,WAAW,IAKvCkmB,gBAAiB,WACXp6B,KAAKszB,OAAO,MAAMtzB,KAAKooB,MAE3B,KADA,GAAI9a,MAAOtN,KAAKwE,KAAK,SAAUsG,SACzB9K,KAAK2R,OAAS3R,KAAKsc,KAAOtc,KAAK2R,QAAU3R,KAAKmc,IAAIkD,SACtDvU,MAAMvJ,KAAKvB,KAAKq6B,uBAElB,OAAO/sB,MAAK,KAAMxC,cAIhByvB,KAAK,SAASh8B,QAAQkB,OAAOJ,SAMnC,YACAI,QAAOJ,SASLm7B,WAAY,WACV,GAAI/1B,QAASzE,KAAKwE,KAAK,SACrB6I,KAAO,KACPC,KAAO,KACPzC,WAAY,CAWd,OATI7K,MAAKszB,OAAO,MAAMtzB,KAAKooB,OAC3B/a,KAAOrN,KAAK61B,YACR71B,KAAKszB,OAAO,MAAMtzB,KAAKooB,OACR,MAAfpoB,KAAK2R,OACP9G,WAAY,EACZyC,KAAOtN,KAAKy6B,gBAAgBz6B,KAAKmc,IAAIwD,aAErCrS,KAAOtN,KAAKs6B,iBAEP71B,OAAO4I,KAAMC,KAAMzC,YAU3B6vB,QAAS,WACR,GAAIj2B,QAASzE,KAAKwE,KAAK,MACrB6I,KAAO,KACPC,KAAO,IAST,OAPAA,MAAOtN,KAAKs6B,iBACRt6B,KAAKszB,OAAOtzB,KAAKmc,IAAIsD,WACnBzf,KAAKooB,OAAOkL,OAAO,MAAMtzB,KAAKooB,OAClC/a,KAAQrN,KAAK61B,YACT71B,KAAKszB,OAAO,MAAMtzB,KAAKooB;AACvBpoB,KAAKszB,OAAO,MAAMtzB,KAAKooB,QAEtB3jB,OAAO4I,KAAMC,OAYrBqtB,SAAU,WACT,GAAIl2B,QAASzE,KAAKwE,KAAK,OACrBgO,QACAnF,QACAoF,aACAnF,KAAO,KACPzC,WAAY,CA0Bd,OAzBI7K,MAAKszB,OAAO,MAAMtzB,KAAKooB,OACR,MAAfpoB,KAAK2R,OACPa,KAAOxS,KAAKk3B,UAAUl3B,KAAK61B,UAAW,KAClC71B,KAAKszB,OAAO,MAAMtzB,KAAKooB,QAE3BpoB,KAAKooB,OAEY,MAAfpoB,KAAK2R,OACPtE,KAAOrN,KAAKk3B,UAAUl3B,KAAK61B,UAAW,KAClC71B,KAAKszB,OAAO,MAAMtzB,KAAKooB,QAE3BpoB,KAAKooB,OAEY,MAAfpoB,KAAK2R,OACPc,UAAYzS,KAAKk3B,UAAUl3B,KAAK61B,UAAW,KACvC71B,KAAKszB,OAAO,MAAMtzB,KAAKooB,QAE3BpoB,KAAKooB,OAEY,MAAfpoB,KAAK2R,OACP9G,WAAY,EACZyC,KAAOtN,KAAKy6B,gBAAgBz6B,KAAKmc,IAAI8D,WAErC3S,KAAOtN,KAAKs6B,iBAEP71B,OAAO+N,KAAMnF,KAAMoF,UAAWnF,KAAMzC,YAU5C+vB,aAAc,WACb,GAAIn2B,QAASzE,KAAKwE,KAAK,WACrBwN,OAAS,KACTR,IAAM,KACN/E,MAAQ,KACRa,KAAO,KACPzC,WAAY,CAoBd,OAnBI7K,MAAKszB,OAAO,MAAMtzB,KAAKooB,OAC3BpW,OAAShS,KAAK61B,YACV71B,KAAKszB,OAAOtzB,KAAKmc,IAAIyE,QACvB5gB,KAAKooB,OACL3b,MAAQzM,KAAK66B,wBACT76B,KAAK2R,QAAU3R,KAAKmc,IAAI6S,iBAC1Bxd,IAAM/E,MACNA,MAAQzM,KAAKooB,OAAOyS,0BAIpB76B,KAAKszB,OAAO,MAAMtzB,KAAKooB,OAER,MAAfpoB,KAAK2R,OACP9G,WAAY;AACZyC,KAAOtN,KAAKy6B,gBAAgBz6B,KAAKmc,IAAIkE,eAErC/S,KAAOtN,KAAKs6B,iBAEP71B,OAAOuN,OAAQR,IAAK/E,MAAOa,KAAMzC,YAYzCgwB,sBAAuB,WACpB,GAAI76B,KAAK2R,QAAU3R,KAAKmc,IAAI8I,OAAQ,CAClC,GAAIxgB,QAASzE,KAAKwE,KAAK,OACnBxE,MAAKooB,OAAOkL,OAAO,MAAMtzB,KAAKooB,MAClC,IAAIoQ,YAAax4B,KAAKy4B,sBAEtB,OADIz4B,MAAKszB,OAAO,MAAMtzB,KAAKooB,OACpB3jB,OAAO+zB,YACT,MAAmB,MAAfx4B,KAAK2R,OAAiB3R,KAAK2R,QAAU3R,KAAKmc,IAAI+I,QAChDllB,KAAK01B,aAEL11B,KAAK41B,eAAc,GAAO,GAAO,UAK1CkF,KAAK,SAASv8B,QAAQkB,OAAOJ,SAOnCI,OAAOJ,SAML4zB,WAAY,WACV,MAAIjzB,MAAK2R,OAAS3R,KAAKmc,IAAImH,YAClBtjB,KAAK+6B,iBAEL/6B,KAAKg7B,4BAKZC,KAAK,SAAS18B,QAAQkB,OAAOJ,SAMnC,YAEAI,QAAOJ,SAYL07B,eAAgB,WACd,GAAIt2B,QAASzE,KAAKwE,KAAK,YAEvB,IADAxE,KAAKszB,OAAOtzB,KAAKmc,IAAImH,cAAgBtjB,KAAKooB,OACxB,KAAdpoB,KAAK2R,MAEP,MADA3R,MAAK4yB,kBAAoB,IAClBnuB,QAAQ,IAAKzE,KAAKq5B,iBAAgB,IAAO,EAEhD,IAAI72B,MAAOxC,KAAKq2B,qBAChB,IAAkB,KAAdr2B,KAAK2R,MAAc,CACrB3R,KAAK4yB,iBAAmBpwB,IACxB,IAAI8K,MAAOtN,KAAKgzB,mBAAmBkI;AAEnC,MADAl7B,MAAKszB,OAAOtzB,KAAKsc,KACV7X,OAAOjC,KAAM8K,MACf,GAAkB,KAAdtN,KAAK2R,MAEd,MADA3R,MAAK4yB,iBAAmBpwB,KACjBiC,OAAOjC,KAAMxC,KAAKq5B,iBAAgB,IAAO,EAC3C,IAAmB,MAAfr5B,KAAK2R,MAId,MAFAnP,MAAKkR,WAAa1T,KAAK6xB,IAAI1iB,WAAWwE,cACtCnR,KAAKA,KAAOA,KAAKA,KAAK0B,UAAU,GACzBlE,KAAKwE,KAAK,QACfhC,KAAMxC,KAAKo4B,8BAGbp4B,MAAK4zB,OAAO,IAAK,MAEjB5zB,KAAK4yB,iBAAmBpwB,IACxB,IAAI8K,MAAOtN,KAAKk7B,qBAEhB,OADAl7B,MAAKszB,OAAOtzB,KAAKsc,KACV7X,OAAOjC,KAAM8K,OAYzB+oB,oBAAqB,WACpB,GAAI5xB,QAASzE,KAAKwE,KAAK,cAAe22B,UAAW,CAKjD,OAJIn7B,MAAK2R,QAAU3R,KAAKmc,IAAImH,cAC1BtjB,KAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAIiS,iBAAmBpuB,KAAKooB,OACpD+S,UAAW,GAEN12B,OACLzE,KAAKk3B,UAAUl3B,KAAKmc,IAAImP,SAAUtrB,KAAKmc,IAAIiS,gBAAgB,GAC3D+M,WAeHC,mBAAoB,WACnB,GAAI32B,QAASzE,KAAKwE,KAAK,YACrBsH,KAAO,KACPhB,SACAtI,KAAO,IAaT,OAXAxC,MAAKszB,OAAOtzB,KAAKmc,IAAIqH,QAAUxjB,KAAKooB,OACpCtc,KAAO9L,KAAKq7B,gBACZvwB,MAAMvJ,KAAKvB,KAAKs7B,sBAAqB,IAClB,MAAft7B,KAAK2R,MACP7G,MAAQA,MAAMrK,OAAOT,KAAKooB,OAAOmT,uBAAsB,IAC/B,MAAfv7B,KAAK2R,QACdnP,KAAOsI,MAAM,GAAGtI;AAChBsI,MAAQ9K,KAAKooB,OAAOmT,sBAA+B,OAATzvB,MAC1C9L,KAAKszB,OAAO,MAAQtzB,KAAKooB,QAE3BpoB,KAAKszB,OAAO,MAAQtzB,KAAKgzB,mBAClBvuB,OAAOjC,KAAMsJ,KAAMhB,QAU3BwwB,qBAAsB,SAASE,OAC9B,GAAI/2B,QAASzE,KAAKwE,KAAK,WAAYsH,KAAO,IACtC0vB,SAAO1vB,KAAO9L,KAAKq7B,gBACvB,IAAI74B,MAAOxC,KAAKq2B,sBACZjb,MAAQpb,KAAKy7B,gBACjB,OAAOh3B,QAAOjC,KAAM4Y,MAAOtP,OAU5ByvB,sBAAuB,SAASC,OAE/B,IADA,GAAI/2B,SAAUzE,KAAKs7B,qBAAqBE,QACnB,MAAfx7B,KAAK2R,OACTlN,OAAOlD,KAAKvB,KAAKooB,OAAOkT,qBAAqBE,OAE/C,OAAO/2B,SASRg3B,eAAgB,WACf,GAAIh3B,QAAS,IAOb,OANIzE,MAAK2R,QAAU3R,KAAKmc,IAAIyE,MACtB5gB,KAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAImP,YAC9B7mB,OAASzE,KAAK2nB,OACd3nB,KAAKooB,QAGF3jB,QAUR42B,cAAe,WACd,MAAIr7B,MAAK2R,QAAU3R,KAAKmc,IAAIgC,YAC1Bne,KAAKooB,OACEpoB,KAAK6xB,IAAI6J,QAAQpgB,eACftb,KAAK2R,QAAU3R,KAAKmc,IAAIkC,SACjCre,KAAKooB,OACEpoB,KAAK6xB,IAAI6J,QAAQrgB,YAEnB,YAILsgB,KAAK,SAASp9B,QAAQkB,OAAOJ,SAOnC,GAAIu8B,cACFC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO7iB,OAAO8iB,aAAa,IAC3BC,MAAO/iB,OAAO8iB,aAAa;AAC3BE,MAAOhjB,OAAO8iB,aAAa,IAC3BG,OAAQ,KACRC,MAAO,IACPC,MAAO,IACPC,MAAQ,IAGV98B,QAAOJ,SAILm9B,sBAAuB,SAAS7U,MAC9B,MAAOA,MAAK8U,QACV,oBACA,SAASC,KACP,MAAOd,aAAYc,QAczB7D,YAAa,WACX,GAAI74B,KAAKu0B,GAAG,iBACV,MAAOv0B,MAAK28B,oBAEZ,QAAO38B,KAAK2R,OAGV,IAAK3R,MAAKmc,IAAI8P,2BACZ,GAAIxf,OAAQzM,KAAKwE,KAAK,UAClBmjB,KAAO3nB,KAAK2nB,OACZvO,cAA4B,MAAZuO,KAAK,EAIzB,OAHAA,MAAOA,KAAKzjB,UAAU,EAAGyjB,KAAKpoB,OAAS,GACvCS,KAAKooB,OACL3b,MAAQA,MAAM2M,cAAepZ,KAAKw8B,sBAAsB7U,OACpD3nB,KAAK2R,QAAU3R,KAAKmc,IAAIqS,eAEnBxuB,KAAK+4B,mBAAmBtsB,OAGxBA,KAEX,KAAKzM,MAAKmc,IAAI2Q,gBACZ,GAAgC,cAA5B9sB,KAAKqD,MAAMslB,aAA8B,CAC3C,GAAInkB,MAAOxE,KAAKwE,KAAK,UACjBiI,MAAQzM,KAAKooB,OAAOT,OAEpBiV,OAASnwB,MAAMA,MAAMlN,OAAO,EAgBhC,OAfe,OAAXq9B,OAGAnwB,MAF4B,OAA1BA,MAAMA,MAAMlN,OAAO,GAEbkN,MAAMvI,UAAU,EAAGuI,MAAMlN,OAAS,GAGlCkN,MAAMvI,UAAU,EAAGuI,MAAMlN,OAAS,GAExB,OAAXq9B,SAETnwB,MAAQA,MAAMvI,UAAU,EAAGuI,MAAMlN,OAAS,IAE5CS,KAAKszB,OAAOtzB,KAAKmc,IAAIyP,4BAA8B5rB,KAAKooB,OACxD5jB,KAAOA,KAAKiI,MAAOzM,KAAKqD,MAAMwpB;AAC9B7sB,KAAKszB,OAAOtzB,KAAKmc,IAAI+Q,gBAAkBltB,KAAKooB,OACrC5jB,KAEP,MAAOxE,MAAKooB,OAAOiQ,qBACjBr4B,KAAKmc,IAAI+Q,cAIf,KAAK,IACH,MAAOltB,MAAKooB,OAAOiQ,qBAAqB,IAE1C,KAAK,KACL,IAAK,KACH,GAAI7zB,MAAOxE,KAAKwE,KAAK,QACjB0I,KAAOlN,KAAKooB,OAAOiQ,qBAAqB,IAC5C,OAAO7zB,MAAK,SAAU0I,KAGxB,KAAKlN,MAAKmc,IAAI4O,UACd,IAAK/qB,MAAKmc,IAAI2O,UACZ,GAAIrmB,QAASzE,KAAKwE,KAAK,UACnBiI,MAAQzM,KAAK2nB,MAGjB,OAFA3nB,MAAKooB,OACL3jB,OAASA,OAAOgI,MAIlB,KAAKzM,MAAKmc,IAAI+I,QACd,IAAK,IACH,MAAOllB,MAAK01B,YACd,SACE,GAAInC,KAAMvzB,KAAK4zB,MAAM,SAGrB,OADA5zB,MAAKooB,OACEmL,MAOd4E,oBAAqB,SAAS3f,MAC7B,GAAI/T,QACAD,KAAOxE,KAAKwE,KAAK,eACrB,IAAmB,MAAfxE,KAAK2R,MAAe,CACtB,GAAIxN,QAASnE,KAAKooB,OAAOyN,WACrB71B,MAAKszB,OAAO,MAAMtzB,KAAKooB,OAC3B3jB,OAASD,KAAKgU,KAAMrU,YACf,IAAInE,KAAK2R,QAAU3R,KAAKmc,IAAIiR,2BAA4B,CAC7D,GAAIjpB,QAASnE,KAAK68B,2BAClBp4B,QAASD,KAAKgU,KAAMrU,QAEtB,MAAOM,SAiBRo4B,0BAA2B,WAC1B,GAAIp4B,QAASzE,KAAKwE,MAIlB,IAAIxE,KAAK2R,QAAU3R,KAAKmc,IAAIyP,0BAA2B,CACrD,GAAIjE,MAAO3nB,KAAK2nB,MAChB3nB,MAAKooB,OACL3jB,OAASA,OACP,UAAU,EAAOzE,KAAKw8B,sBAAsB7U;KAM3C,IAAI3nB,KAAK2R,QAAU3R,KAAKmc,IAAIiR,2BAA4B,CAC3D,GAAI5qB,MAAO,IACX,IAAIxC,KAAKooB,OAAOzW,QAAU3R,KAAKmc,IAAIqP,iBAAkB,CACnD,GAAIsR,SAAU98B,KAAK2nB,OAAOzjB,UAAU,EAMpC,IALA1B,KAAOxC,KAAKwE,KAAK,YACjBxE,KAAKooB,OACL5lB,KAAOA,KAAKs6B,SAAS,GAGF,MAAf98B,KAAK2R,MAAe,CACtB,GAAInN,MAAOxE,KAAKwE,KAAK,gBACjBL,OAASnE,KAAKooB,OAAOyN,WACzB71B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB5lB,KAAOgC,KAAKhC,KAAM2B,aAGpB3B,MAAOxC,KAAK61B,WAEd71B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB3jB,OAASA,OAAO,WAAYjC,MAAM,OAK/B,IAAIxC,KAAK2R,QAAU3R,KAAKmc,IAAImR,aAC/B7oB,OAASzE,KAAKooB,OAAOwN,eAAc,GAAO,GAAO,GACjD51B,KAAKszB,OAAO,MAAQtzB,KAAKooB,WAKtB,IAAIpoB,KAAK2R,QAAU3R,KAAKmc,IAAIwP,WAAY,CAI3C,GAHAlnB,OAASzE,KAAK+8B,sBAAqB,GAGhB,MAAf/8B,KAAK2R,MAAe,CACtB,GAAInN,MAAOxE,KAAKwE,KAAK,gBACjBL,OAASnE,KAAKooB,OAAO4U,wBACzBh9B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB3jB,OAASD,KAAKC,OAAQN,QAIxB,GAAInE,KAAK2R,QAAU3R,KAAKmc,IAAIgP,kBAAmB,CAC7C,GAAI3mB,MAAOxE,KAAKwE,KAAK,kBACjB0I,KAAOlN,KAAKwE,KAAK,WACrBxE,MAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAImP,SAC5B,IAAI9oB,MAAOxC,KAAK2nB,MAChB3nB,MAAKooB,OACL3jB,OAASD,KAAKC,OAAQyI,KAAK1K,YAIxB,CACLxC,KAAKszB,OAAOtzB,KAAKmc,IAAIyP;AACrB,GAAInf,OAAQzM,KAAK2nB,MACjB3nB,MAAKooB,OAEL3jB,OAASA,OAAO,UAAU,EAAOgI,OAGnC,MAAOhI,SAKR4zB,qBAAsB,SAAS/E,QAC9B,GAAI9uB,MAAOxE,KAAKwE,KAAK,YAAaiI,SAAYX,KAAO,IAWrD,KAREA,KADa,MAAXwnB,OACKtzB,KAAK6xB,IAAIoL,SAAS7rB,WACL,MAAXkiB,OACFtzB,KAAK6xB,IAAIoL,SAAS9rB,YAElBnR,KAAK6xB,IAAIoL,SAAS5rB,aAIrBrR,KAAK2R,QAAU2hB,QAAUtzB,KAAK2R,QAAU3R,KAAKsc,KACjD7P,MAAMlL,KAAKvB,KAAK68B,4BASlB,OANA78B,MAAKszB,OAAOA,SAAWtzB,KAAKooB,OAC5B5jB,KAAOA,KAAKiI,MAAOX,MAEfwnB,SAAWtzB,KAAKmc,IAAI+Q,gBACtB1oB,KAAK2O,MAAQnT,KAAKqD,MAAMwpB,eAEnBroB,MAKRm4B,mBAAoB,WACnB,GAAIl4B,QAASzE,KAAKwE,KAAK,SACnBhC,KAAOxC,KAAK2nB,MAEhB,OADA3nB,MAAKooB,OACE3jB,OAAOjC,aAIZ06B,KAAK,SAAS3+B,QAAQkB,OAAOJ,SAMnCI,OAAOJ,SAOL67B,oBAAqB,WAEnB,IADA,GAAIz2B,WACEzE,KAAK2R,QAAU3R,KAAKsc,KAAsB,MAAftc,KAAK2R,OAAe,CACnD,GAAIwrB,WAAYn9B,KAAKg7B,oBACjBmC,aACE97B,MAAM8xB,QAAQgK,WAChB14B,OAASA,OAAOhE,OAAO08B,WAEvB14B,OAAOlD,KAAK47B,YAIlB,MAAO14B,SAYRu2B,mBAAoB,WACnB,OAAOh7B,KAAK2R,OACV,IAAK3R,MAAKmc,IAAIgC,WACZ,MAAOne,MAAK42B,eAAc,GAAO;AAEnC,IAAK52B,MAAKmc,IAAImI,WACd,IAAKtkB,MAAKmc,IAAIqI,QACZ,GAAIyR,MAAOj2B,KAAKw2B,kBAChB,OAAIx2B,MAAK2R,QAAU3R,KAAKmc,IAAI6F,QACnBhiB,KAAKg2B,WAAWC,OAEvBj2B,KAAK4zB,MAAM5zB,KAAKmc,IAAI6F,SACpBhiB,KAAKooB,OACE,KAEX,KAAKpoB,MAAKmc,IAAI6F,QACZ,MAAOhiB,MAAKg2B,YAAY,EAAG,EAAG,GAChC,KAAKh2B,MAAKmc,IAAI+F,YACZ,MAAOliB,MAAKw3B,gBACd,KAAKx3B,MAAKmc,IAAIgG,QACZ,MAAOniB,MAAK23B,YACd,KAAK33B,MAAKmc,IAAIqH,MACZ,MAAOxjB,MAAKo7B,oBACd,KAAKp7B,MAAKmc,IAAIkC,QACZ,MAAOre,MAAKooB,OAAOgV,iBACrB,KAAKp9B,MAAKmc,IAAImH,YACZ,MAAOtjB,MAAK+6B,gBACd,KAAK/6B,MAAKmc,IAAI+H,gBACZ,GAAIzf,QAASzE,KAAKwE,KAAK,OAKvB,OAJIxE,MAAKooB,OAAOkL,OAAO,MAAMtzB,KAAKooB,OAC9BpoB,KAAKszB,OAAO,MAAMtzB,KAAKooB,OAC3BpoB,KAAKszB,OAAO,KACZtzB,KAAKqD,MAAMgkB,MAAO,EACX5iB,OAAOzE,KAAKqD,MAAMY,OAAOC,UAC9BlE,KAAKqD,MAAMc,QAEf,SACE,MAAOnE,MAAKs6B,mBASjB+C,sBAAuB,WAEtB,IADA,GAAI54B,WACEzE,KAAK2R,OAAS3R,KAAKsc,KAAsB,MAAftc,KAAK2R,OAAe,CAClD,GAAIwrB,WAAYn9B,KAAKq6B,sBACjB8C,aACE97B,MAAM8xB,QAAQgK,WAChB14B,OAASA,OAAOhE,OAAO08B,WAEvB14B,OAAOlD,KAAK47B,YAIlB,MAAO14B,SAQR24B,gBAAiB;AAChB,GAAI34B,QAASzE,KAAKk3B,UAAU,WAC1Bl3B,KAAKszB,OAAOtzB,KAAKmc,IAAImP,SACrB,IAAI7mB,QAASzE,KAAKwE,KAAK,YACnBhC,KAAOxC,KAAK2nB,MAChB,OAAI3nB,MAAKooB,OAAOkL,OAAO,KACd7uB,OAAOjC,KAAMxC,KAAKooB,OAAOyN,aAGzBpxB,OAAOjC,KAAM,OAErB,KAAK,EAER,OADAxC,MAAK+zB,uBACEtvB,QASR64B,kBAAmB,WAElB,IADA,GAAI74B,WACEzE,KAAK2R,OAAS3R,KAAKsc,KAAsB,MAAftc,KAAK2R,OAAe,CAClD3R,KAAKszB,OAAOtzB,KAAKmc,IAAImP,SACrB,IAAI9oB,MAAOxC,KAAK2nB,OAAO5iB,aAMvB,IALI/E,KAAKooB,OAAOkL,OAAO,KACrB7uB,OAAOjC,MAAQxC,KAAKooB,OAAOyN,YAE3BpxB,OAAOjC,MAAQ,KAEE,MAAfxC,KAAK2R,MAAe,KACxB3R,MAAKooB,OAEP,MAAO3jB,SAQR41B,qBAAsB,WACrB,OAAOr6B,KAAK2R,OACV,IAAK3R,MAAKmc,IAAIgC,WACZ,MAAOne,MAAK42B,eAAc,GAAO,EAEnC,KAAK52B,MAAKmc,IAAImI,WACd,IAAKtkB,MAAKmc,IAAIqI,QACZ,GAAIyR,MAAOj2B,KAAKw2B,kBAChB,OAAIx2B,MAAK2R,QAAU3R,KAAKmc,IAAI6F,QACnBhiB,KAAKg2B,WAAWC,OAEvBj2B,KAAK4zB,MAAM5zB,KAAKmc,IAAI6F,SAEpBhiB,KAAKooB,OACE,KAEX,KAAKpoB,MAAKmc,IAAI6F,QACZ,MAAOhiB,MAAKg2B,YAAY,EAAG,EAAG,GAChC,KAAKh2B,MAAKmc,IAAI+F,YACZ,MAAOliB,MAAKw3B,gBACd,KAAKx3B,MAAKmc,IAAIgG,QACZ,MAAOniB,MAAK23B,YACd,KAAK33B,MAAKmc,IAAI+H,gBACZlkB,KAAKozB,WACH;AAGF,GAAI5uB,MAAOxE,KAAKwE,KAAK,OAOrB,OANAxE,MAAKooB,OAAOkL,OAAO,MAAQtzB,KAAKooB,OAChCpoB,KAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB5jB,KAAOA,KAAKxE,KAAKqD,MAAMY,OAAOC,UAC5BlE,KAAKqD,MAAMc,SAEbnE,KAAKszB,OAAO,MAAQtzB,KAAKooB,OAClB5jB,IACT,SACE,MAAOxE,MAAKs6B,mBAMjBA,eAAgB,WAEf,OAAOt6B,KAAK2R,OAEV,IAAK,IAAK,MAAO3R,MAAKq5B,iBAAgB,EAEtC,KAAKr5B,MAAKmc,IAAI8C,KAAM,MAAOjf,MAAKooB,OAAO6R,SAEvC,KAAKj6B,MAAKmc,IAAI2E,SAAU,MAAO9gB,MAAKu9B,aAEpC,KAAKv9B,MAAKmc,IAAI4D,MAAO,MAAO/f,MAAKooB,OAAOuS,UAExC,KAAK36B,MAAKmc,IAAIgE,UAAW,MAAOngB,MAAKooB,OAAOwS,cAE5C,KAAK56B,MAAKmc,IAAIsD,QAAS,MAAOzf,MAAKooB,OAAOoS,YAE1C,KAAKx6B,MAAKmc,IAAI0D,KAAM,MAAO7f,MAAKooB,OAAOsS,SAEvC,KAAK16B,MAAKmc,IAAImM,UAAW,MAAOtoB,MAAKi3B,cAErC,KAAKj3B,MAAKmc,IAAIoM,cAAe,MAAOvoB,MAAKg3B,kBAEzC,KAAKh3B,MAAKmc,IAAIoC,SACZ,GAAI9Z,QAASzE,KAAKwE,KAAK,UAAWgU,KAAO,IAKzC,OAJKxY,MAAKooB,OAAOmM,GAAG,SAClB/b,KAAOxY,KAAK61B,aAEd71B,KAAK+zB,uBACEtvB,OAAO+T,KAGhB,KAAKxY,MAAKmc,IAAImF,QACd,IAAKthB,MAAKmc,IAAIqF,WACZ,GAAI/c,QAASzE,KAAKwE,KAChBxE,KAAK2R,QAAU3R,KAAKmc,IAAIqF,WAAa,WAAa,SACjD1U,MAAQ;AAMX,MALA9M,MAAKooB,OACc,MAAfpoB,KAAK2R,OAAiB3R,KAAK2R,QAAU3R,KAAKmc,IAAIiQ,cAChDtf,MAAQ9M,KAAK61B,aAEf71B,KAAK+zB,uBACEtvB,OAAOqI,MAEhB,KAAK9M,MAAKmc,IAAIyH,SACZ,GAAInf,QAASzE,KAAKwE,KAAK,UACnBsG,MAAQ9K,KAAKooB,OAAO8O,UAAUl3B,KAAK+8B,qBAAsB,IAE7D,OADA/8B,MAAK+zB,uBACEtvB,OAAOqG,MAEhB,KAAK9K,MAAKmc,IAAIiI,SACZ,GAAIoZ,UAAWx9B,KAAK2R,MAAO3R,KAAKqD,MAAM0kB,YAClCtjB,OAASzE,KAAKwE,KAAK,SACvB,IAAIxE,KAAKooB,OAAOzW,QAAU3R,KAAKmc,IAAIqS,eAAgB,CAEjDxuB,KAAKqD,MAAM+Y,OAAO7a,KAAKi8B,QACvB,IAAIhlB,MAAOxY,KAAKooB,OAAOyN,WAEvB,OADA71B,MAAKszB,OAAO,MAAQtzB,KAAKgzB,mBAClBxa,KAET,GAAI1N,OAAQ9K,KAAKy9B,4BAEjB,OADAz9B,MAAK+zB,uBACEtvB,OAAOqG,MAEhB,KAAK9K,MAAKmc,IAAIyF,OACZ,GAAInd,QAASzE,KAAKwE,KAAK,QACnBpD,KAAOpB,KAAKooB,OAAO8O,UAAUl3B,KAAK61B,UAAW,IAEjD,OADA71B,MAAK+zB,uBACEtvB,OAAOrD,KAEhB,KAAKpB,MAAKmc,IAAI+N,cACZ,GAAIzlB,QAASzE,KAAKwE,KAAK,UAAUxE,KAAK2nB,OAEtC,OADA3nB,MAAKooB,OACE3jB,MAET,KAAKzE,MAAKmc,IAAI6I,QACZ,GAAIvgB,QAASzE,KAAKwE,KAAK,QACvBxE,MAAKooB,OAAOkL,OAAO,MAAQtzB,KAAKooB,MAChC,IAAItd,OAAQ9K,KAAKk3B,UAAUl3B,KAAK41B,cAAe;AAG/C,MAFA51B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzBpoB,KAAKszB,OAAO,MAAQtzB,KAAKgzB,mBAClBvuB,OAAOqG,MAEhB,KAAK9K,MAAKmc,IAAIoE,UACZ,GACErT,MAEA8C,KAHEvL,OAASzE,KAAKwE,KAAK,WAErB8I,OAKF,IAHAtN,KAAKooB,OAAOkL,OAAO,MAAQtzB,KAAKooB,OAChClb,KAAOlN,KAAKs9B,oBACZt9B,KAAKszB,OAAO,MAAQtzB,KAAKooB,OACN,MAAfpoB,KAAK2R,MAAe,CAEtB,IADA3R,KAAKgzB,mBACChzB,KAAK2R,OAAS3R,KAAKsc,KAAOtc,KAAK2R,QAAU3R,KAAKmc,IAAIsE,cAEtDnT,KAAK/L,KAAKvB,KAAKg7B,qBAEjBh7B,MAAKszB,OAAOtzB,KAAKmc,IAAIsE,eAAiBzgB,KAAKooB,OAC3CpoB,KAAK+zB,uBACL/jB,KAAOhQ,KAAK6xB,IAAIvR,QAAQrQ,eACnB,IAAmB,MAAfjQ,KAAK2R,MAAe,CAE7B,IADA3R,KAAKgzB,mBACChzB,KAAK2R,OAAS3R,KAAKsc,KAAsB,MAAftc,KAAK2R,OAEnCrE,KAAK/L,KAAKvB,KAAKg7B,qBAEjBh7B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzBpY,KAAOhQ,KAAK6xB,IAAIvR,QAAQpQ,eACnB,CAEL,IADAlQ,KAAKszB,OAAO,MAAQtzB,KAAKooB,OACnBpoB,KAAK2R,OAAS3R,KAAKsc,KAAOtc,KAAK2R,QAAU3R,KAAKmc,IAAIoE,WAEtDjT,KAAK/L,KAAKvB,KAAKg7B,qBAEjBhrB,MAAOhQ,KAAK6xB,IAAIvR,QAAQnQ,UAE1B,MAAO1L,QAAOyI,KAAMI,KAAM0C,KAE5B,KAAKhQ,MAAKmc,IAAIsC,MACZ,MAAOze,MAAK09B,UAEd,KAAK19B,MAAKmc,IAAI4C,QACZ,GAAIta,QAASzE,KAAKwE,KAAK,SACnBgU,KAAOxY,KAAKooB,OAAOyN;AAEvB,MADA71B,MAAK+zB,uBACEtvB,OAAO+T,KAEhB,KAAK,IACL,IAAKxY,MAAKmc,IAAIiQ,YAEZ,MADApsB,MAAKooB,OACE,IAET,KAAKpoB,MAAKmc,IAAImP,SACZ,GAAIkS,UAAWx9B,KAAK2R,MAAO3R,KAAKqD,MAAM0kB,YAClC5U,MAAQnT,KAAK2nB,MACjB,IAA0B,MAAtB3nB,KAAKooB,OAAOzW,MAAe,CAC7B,GAAIlN,QAASzE,KAAKwE,KAAK,QAEvB,OADAxE,MAAKooB,OACE3jB,OAAO0O,OAGdnT,KAAKqD,MAAM+Y,OAAO7a,KAAKi8B,QACvB,IAAIhlB,MAAOxY,KAAKooB,OAAOyN,WAEvB,OADA71B,MAAKszB,QAAQ,IAAKtzB,KAAKmc,IAAIiQ,eAAiBpsB,KAAKgzB,mBAC1Cxa,IAGX,KAAKxY,MAAKmc,IAAIuF,OACZ,GAAIjd,QAASzE,KAAKwE,KAAK,QAAS2O,MAAQ,IAKxC,OAJInT,MAAKooB,OAAOkL,OAAOtzB,KAAKmc,IAAImP,YAC9BnY,MAAQnT,KAAK2nB,OACb3nB,KAAKooB,OAAO2L,wBAEPtvB,OAAO0O,MAEhB,SACE,GAAIqF,MAAOxY,KAAK61B,WAEhB,OADA71B,MAAK+zB,uBACEvb,OAQZ6gB,gBAAiB,SAASsE,KACzB,GAAIl5B,QAASzE,KAAKwE,KAAK,QACvBxE,MAAKszB,OAAO,MAAQtzB,KAAKgzB,kBACzB,IAAI1lB,MAAOqwB,IACT39B,KAAKk7B,sBACHl7B,KAAKq9B,uBAGT,OADAr9B,MAAKszB,OAAO,MAAQtzB,KAAKgzB,mBAClBvuB,OAAO,KAAM6I,aAIlBswB,KAAK,SAASr/B,QAAQkB,OAAOJ,SAMnC,YAEAI,QAAOJ,SASLk+B,YAAa,WACXv9B,KAAKszB,OAAOtzB,KAAKmc,IAAI2E,WAAa9gB,KAAKooB;AACvC,GAAkC/a,MAAMC,KAAMzC,UAA1CpG,OAASzE,KAAKwE,KAAK,SAMvB,OALAxE,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB/a,KAAOrN,KAAK61B,YACZ71B,KAAKszB,OAAO,MAAQtzB,KAAKooB,OACzBvd,UAA4B,MAAf7K,KAAK2R,MAClBrE,KAAOtN,KAAK69B,wBACLp5B,OAAO4I,KAAMC,KAAMzC,YAQ3BgzB,sBAAuB,WAEtB,GAAIvK,QAAS,KACX7uB,OAASzE,KAAKwE,KAAK,SACnBsG,QAkBF,KAjBmB,MAAf9K,KAAK2R,MACP2hB,OAAS,IACe,MAAftzB,KAAK2R,MACd2hB,OAAStzB,KAAKmc,IAAI6E,YAElBhhB,KAAKszB,QAAQ,IAAK,MAIM,MAAtBtzB,KAAKooB,OAAOzW,OACd3R,KAAKooB,OAGHpoB,KAAK2R,QAAU3R,KAAKmc,IAAIiQ,aAC1BpsB,KAAKooB,OAGDpoB,KAAK2R,QAAU3R,KAAKsc,KAAOtc,KAAK2R,QAAU2hB,QAC9CxoB,MAAMvJ,KAAMvB,KAAK89B,eAAexK,QAOlC,OAJAtzB,MAAKszB,OAAOA,SAAWtzB,KAAKooB,OACxBkL,SAAWtzB,KAAKmc,IAAI6E,aACtBhhB,KAAK+zB,uBAEAtvB,OAAO,KAAMqG,QAOrBgzB,eAAgB,SAASC,WACxB,GAAIt5B,QAASzE,KAAKwE,KAAK,QAAS6I,KAAO,KAAMC,KAAO,KAAMxC,QAW1D,KAVI9K,KAAK2R,QAAU3R,KAAKmc,IAAI+E,OAC1B7T,KAAOrN,KAAKooB,OAAOyN,YACV71B,KAAK2R,QAAU3R,KAAKmc,IAAIiF,UAEjCphB,KAAKooB,OAELpoB,KAAKszB,QAAQtzB,KAAKmc,IAAI+E,OAAQlhB,KAAKmc,IAAIiF,YAEzCphB,KAAKszB,QAAQ,IAAK,OAAStzB,KAAKooB,OAChC9a,KAAOtN,KAAKwE,KAAK,SAEfxE,KAAK2R,OAAS3R,KAAKsc,KAChBtc,KAAK2R,QAAUosB,WACf/9B,KAAK2R,QAAU3R,KAAKmc,IAAI+E,QACxBlhB,KAAK2R,QAAU3R,KAAKmc,IAAIiF,WAE3BtW,MAAMvJ,KAAKvB,KAAKq6B;AAElB,MAAO51B,QACL4I,KAAMvC,MAAMvL,OAAS,EAAI+N,KAAK,KAAMxC,OAAS,aAK7CkzB,KAAK,SAASz/B,QAAQkB,OAAOJ,SAMnCI,OAAOJ,SAYLq+B,SAAU,WACR19B,KAAKszB,OAAOtzB,KAAKmc,IAAIsC,MACrB,IAEEnR,MAFE7I,OAASzE,KAAKwE,KAAK,OACrBmW,OAAS,KAETD,UAKF,KAHApN,KAAOtN,KAAKgzB,mBAAmBsH,iBAC/Bt6B,KAAKs0B,iBAECt0B,KAAK2R,QAAU3R,KAAKmc,IAAIwC,SAAS,CACrC,GAAIsf,MAAOj+B,KAAKwE,KAAK,SAAU0I,QAAWS,SAAW,IACrD3N,MAAKooB,OAAOkL,OAAO,MAAQtzB,KAAKooB,OAChClb,KAAOlN,KAAKk3B,UACVl3B,KAAKq2B,oBAAqB,KAAK,GAEjC1oB,SAAW3N,KAAK41B,eAAc,GAAM,GAAO,GAC3C51B,KAAKszB,OAAO,KACZ5Y,QAAQnZ,KAAK08B,KAAKj+B,KAAKooB,OAAOkS,iBAAkBptB,KAAMS,WACtD3N,KAAKs0B,iBAKP,MAHIt0B,MAAK2R,QAAU3R,KAAKmc,IAAI0C,YAC1BlE,OAAS3a,KAAKgzB,mBAAmBsH,kBAE5B71B,OAAO6I,KAAMoN,QAASC,eAI3BujB,KAAK,SAAS3/B,QAAQkB,OAAOJ,SAOnC,YAEAI,QAAOJ,SAMLo7B,gBAAiB,SAAS9oB,OACxB,GAAIrE,MAAOtN,KAAKwE,KAAK,SAAUsG,QAE/B,KADI9K,KAAKszB,OAAO,MAAMtzB,KAAKooB,OACrBpoB,KAAK2R,OAAS3R,KAAKsc,KAAOtc,KAAK2R,QAAUA,OAC7C7G,MAAMvJ,KAAKvB,KAAKq6B,uBAIlB,OAFIr6B,MAAKszB,OAAO3hB,QAAQ3R,KAAKooB,OAC7BpoB,KAAK+zB;AACEzmB,KAAK,KAAMxC,QASnBosB,UAAW,SAAS+G,KAAME,UAAWC,wBACpC,GAAI35B,UAOJ,IALIzE,KAAK2R,OAASwsB,YACZC,wBAAwB35B,OAAOlD,KAAK,IACxCvB,KAAKooB,QAGe,kBAAX,OACT,EAEE,IADA3jB,OAAOlD,KAAK08B,KAAKx8B,MAAMzB,UACnBA,KAAK2R,OAASwsB,UAChB,YAEIn+B,KAAKooB,OAAOzW,OAAS3R,KAAKsc,SAC7B,CACL,IAAItc,KAAKszB,OAAO2K,MAGd,QAEF,KAJEx5B,OAAOlD,KAAKvB,KAAK2nB,QAIZ3nB,KAAKooB,OAAOzW,OAAS3R,KAAKsc,KAC3Btc,KAAK2R,OAASwsB,WAEdn+B,KAAKooB,OAAOzW,OAASssB,MACzBx5B,OAAOlD,KAAKvB,KAAK2nB,QAGrB,MAAOljB,SAkBR6xB,eAAgB,WACf,MAAOt2B,MAAKk3B,UACVl3B,KAAKq2B,oBAAqB,KAAK,IAmBlCoH,2BAA4B,WAC3B,MAAOz9B,MAAKk3B,UAAU,WACpB,GAAI1yB,MAAOxE,KAAKwE,KAAK,UAEnBmJ,SAAW3N,KAAKwE,KAAK,WAEvB,IAAIxE,KAAKszB,OAAOtzB,KAAKmc,IAAIwP,YAAa,CACpC,GAAInpB,MAAOxC,KAAK2nB,OAAOzjB,UAAU,EACjClE,MAAKooB,OACLza,SAAWA,SAASnL,MAAM,OAE1BmL,UAAWA,SAAS,QAAQ,EAE9B,OAAmB,MAAf3N,KAAK2R,MACAnN,KAAKmJ,SAAU3N,KAAKooB,OAAOyN,aAE3BloB,UAER,YAKD0wB,KAAK,SAAS9/B,QAAQkB,OAAOJ,SAMnC,YACAI,QAAOJ,SAiBLu2B,cAAe,SAAS0I,UAAWrB,SAAUnuB;AAC3C,GAAIrK,OASJ,IANKqK,OAAwB,MAAf9O,KAAK2R,QACjB7C,OAAQ,EACR9O,KAAKooB,QAIHpoB,KAAKu0B,IAAIv0B,KAAKmc,IAAIwP,WAAY,MAChClnB,OAASzE,KAAKu+B,wBAAwBtB,SAAUnuB,WAC3C,IAAI9O,KAAKu0B,IAAIv0B,KAAKmc,IAAIiS,eAAgBpuB,KAAKmc,IAAImP,SAAUtrB,KAAKmc,IAAImH,cAAe,CACtF7e,OAASzE,KAAKwE,MACd,IAAIhC,MAAOxC,KAAKq2B,qBAChB,IACEr2B,KAAK2R,OAAS3R,KAAKmc,IAAIqS,gBACN,KAAdxuB,KAAK2R,MACR,CAEA,GAAI6sB,SAAUh8B,KAAKA,KAAKuC,aAEtBN,QADc,SAAZ+5B,QACO/5B,OAAO,WAAW,GACN,UAAZ+5B,QACA/5B,OAAO,WAAW,GAGlBA,OAAO,WAAYjC,UAG9BiC,QAASjC,SAEFxC,MAAK2R,QAAU3R,KAAKmc,IAAIiI,UACjC3f,OAASzE,KAAKwE,KAAK,YACnBxE,KAAKooB,OACL3jB,OAASA,OAAO,WAEhBzE,KAAKszB,OAAO,WAQd,OAJItzB,MAAK2R,QAAU3R,KAAKmc,IAAIqS,iBAC1B/pB,OAASzE,KAAK+4B,mBAAmBt0B,OAAQw4B,WAGpCj9B,KAAKk4B,8BAA8BzzB,OAAQ65B,UAAWrB,WAI9DlE,mBAAoB,SAAS7rB,KAAM+vB,UAClC,GAAIx4B,QAASzE,KAAKwE,KAAK,gBACnBL,OAAS,IACb,IAAInE,KAAKooB,OAAOmM,IAAIv0B,KAAKmc,IAAIwP,WAAY,MACvCxnB,OAASnE,KAAKu+B,wBAAwBtB,UAAU,OAC3C,IACLj9B,KAAK2R,QAAU3R,KAAKmc,IAAImP,UACrBtrB,KAAK2R,QAAU3R,KAAKmc,IAAI6F,QAC3B;AACA7d,OAASnE,KAAKwE,KAAK,WACnB,IAAIhC,MAAOxC,KAAK2nB,MAChB3nB,MAAKooB,OACLjkB,OAASA,OAAO3B,UACX,CACLxC,KAAK4zB,OAAO5zB,KAAKmc,IAAIwP,WAAY3rB,KAAKmc,IAAImP,WAE1CnnB,OAASnE,KAAKwE,KAAK,WACnB,IAAIhC,MAAOxC,KAAK2nB,MAChB3nB,MAAKooB,OACLjkB,OAASA,OAAO3B,MAElB,MAAOiC,QAAOyI,KAAM/I,SAGrB+zB,8BAA+B,SAASzzB,OAAQ65B,UAAWrB,UAC1DwB,oBACA,KAAMz+B,KAAK2R,OAAS3R,KAAKsc,KACvB,OAAOtc,KAAK2R,OACV,IAAK,IACH,GAAI2sB,UAEF,MAAO75B,OAEPA,QAASzE,KAAKwE,KAAK,QACjBC,OAASzE,KAAKo4B,8BAGlB,MACF,KAAK,IACH,GAAI5zB,MAAOxE,KAAKwE,KAAK,eACrBxE,MAAKooB,MACL,IAAIjkB,SAAS,CACT84B,WACF94B,OAASnE,KAAKg9B,yBACdh9B,KAAKszB,OAAO,MAAQtzB,KAAKooB,QAGN,MAAfpoB,KAAK2R,OACPxN,OAASnE,KAAK61B,YACd71B,KAAKszB,OAAO,MAAQtzB,KAAKooB,QAEzBpoB,KAAKooB,OAGT3jB,OAASD,KAAKC,OAAQN,OACtB,MACF,KAAKnE,MAAKmc,IAAIgP,kBACZ,GAAI3mB,MAAOxE,KAAKwE,KAAK,kBACjB0I,KAAO,IACX,QAAOlN,KAAKooB,OAAOzW,OACjB,IAAK3R,MAAKmc,IAAImP,SACZpe,KAAOlN,KAAKwE,KAAK,WACjB,IAAIhC,MAAOxC,KAAK2nB,MAChB3nB,MAAKooB,OACLlb,KAAOA,KAAK1K,MACRxC,KAAK2R,QAAU3R,KAAKmc,IAAIwP,YAE1BnpB,KAAOxC,KAAK2nB,OAAOzjB,UAAU,GAC7BlE,KAAKooB;AAELlb,MAAQ,MAAO,IAAKA,MAAO,MAAO1K,QACV,MAAfxC,KAAK2R,QAEdzE,MAAQ,MAAO,IAAKA,KAAMlN,KAAKooB,OAAOyN,aACtC71B,KAAKszB,OAAO,MAAQtzB,KAAKooB,OAE3B,MACF,KAAKpoB,MAAKmc,IAAIwP,WACZze,KAAOlN,KAAKwE,KAAK,WACjB,IAAIhC,MAAOxC,KAAK2nB,OAAOzjB,UAAU,EACjClE,MAAKooB,OACLlb,KAAOA,KAAK1K,MAAM,EAClB,MACF,KAAK,IACHxC,KAAKooB,OAAOkL,QAAQ,IAAKtzB,KAAKmc,IAAIwP,aACf,MAAf3rB,KAAK2R,OAEPzE,KAAOlN,KAAKooB,OAAOyN,YACnB71B,KAAKszB,OAAO,MAAQtzB,KAAKooB,QAGzBlb,KAAOlN,KAAK61B,WAEd,MACF,KAAK,IACH3oB,KAAOlN,KAAKooB,OAAOyN,YACnB71B,KAAKszB,OAAO,MAAQtzB,KAAKooB,MACzB,MACF,SACEpoB,KAAK4zB,OAAO5zB,KAAKmc,IAAImP,SAAUtrB,KAAKmc,IAAIwP,aAExCze,KAAOlN,KAAKwE,KAAK,WACjB,IAAIhC,MAAOxC,KAAK2nB,MAChB3nB,MAAKooB,OACLlb,KAAOA,KAAK1K,MAGhBiC,OAASD,KAAKC,OAAQyI,KACtB,MACF,SACE,KAAMuxB,qBAGZ,MAAOh6B,SAKRu4B,uBAAwB,WACvB,GAAI74B,QAASnE,KAAKwE,MAClB,IAAIxE,KAAK2R,QAAU3R,KAAKmc,IAAImP,SAAU,CACpC,GAAI3D,MAAO3nB,KAAK2nB,OACZ+W,WAAyB,MAAZ/W,KAAK,EACtBA,MAAOA,KAAKzjB,UAAU,EAAGyjB,KAAKpoB,OAAS,GACvCS,KAAKooB,OACLjkB,OAASA,OACP,SAAUu6B,WAAY1+B,KAAKw8B,sBAAsB7U,WAE9C,IAAI3nB,KAAK2R,QAAU3R,KAAKmc,IAAIuP,aAAc,CAC/C,GAAIiT,KAAM3+B,KAAK2nB;AACf3nB,KAAKooB,OACLjkB,OAASA,OAAO,SAAUw6B,SACrB,IAAI3+B,KAAK2R,QAAU3R,KAAKmc,IAAIwP,WAAY,CAC7C,GAAInpB,MAAOxC,KAAK2nB,OAAOzjB,UAAU,EACjClE,MAAKooB,OACLjkB,OAASA,OAAO,WAAY3B,MAAM,OAC7B,CACLxC,KAAKszB,QACHtzB,KAAKmc,IAAImP,SACTtrB,KAAKmc,IAAIuP,aACT1rB,KAAKmc,IAAIwP,YAGX,IAAIhE,MAAO3nB,KAAK2nB,MAChB3nB,MAAKooB,OACLjkB,OAASA,OAAO,UAAU,EAAOwjB,MAEnC,MAAOxjB,SAaRo6B,wBAAyB,SAAStB,SAAUnuB,OAE3C,IADA,GAAIrK,QAASzE,KAAK+8B,qBAAqBjuB,OACjC9O,KAAK2R,OAAS3R,KAAKsc,KAAK,CAC5B,GAAI9X,MAAOxE,KAAKwE,MAChB,IAAkB,KAAdxE,KAAK2R,MAAc,CACrB,GAAIxN,QAAS,IAEXA,QADE84B,SACOj9B,KAAKooB,OAAO4U,yBAEU,MAAtBh9B,KAAKooB,OAAOzW,MAAgB,KAAO3R,KAAK81B,kBAEnD91B,KAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB3jB,OAASD,KAAK,eAAgBC,OAAQN,YACjC,CAAA,GAAkB,KAAdnE,KAAK2R,OAAiBsrB,SAI1B,KAHL,IAAI94B,QAASnE,KAAKooB,OAAOyN,WACzB71B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB3jB,OAASD,KAAK,eAAgBC,OAAQN,SAG1C,MAAOM,SAORs4B,qBAAsB,SAASjuB,OAC9B,GAAIrK,QAASzE,KAAKwE,KAAK,WACvB,IAAIxE,KAAKszB,QAAQtzB,KAAKmc,IAAIwP,WAAY,OAAS3rB,KAAK2R,QAAU3R,KAAKmc,IAAIwP,WAAY,CAEjF,GAAInpB,MAAOxC,KAAK2nB,OAAOzjB,UAAU,EACjClE,MAAKooB;AACL3jB,OAASA,OAAOjC,KAAMsM,WAItB,QAFmB,MAAf9O,KAAK2R,OAAe3R,KAAKooB,OAEtBpoB,KAAK2R,OACV,IAAK,IACH,GAAI6G,MAAOxY,KAAKooB,OAAOyN,WACvB71B,MAAKszB,OAAO,MAAQtzB,KAAKooB,OACzB3jB,OAASA,OAAO+T,KAAM1J,MACtB,MACF,KAAK,IACHrK,OAASA,OAAOzE,KAAK+8B,sBAAqB,GAAQjuB,MAClD,MACF,KAAK9O,MAAKmc,IAAIwP,WACZ,GAAInpB,MAAOxC,KAAK2nB,OAAOzjB,UAAU,GAC7BM,KAAOxE,KAAKwE,KAAK,WACrBxE,MAAKooB,OACL3jB,OAASA,OAAOD,KAAKhC,MAAM,GAAQsM,MACnC,MACF,SACE9O,KAAK4zB,OAAO,IAAK,IAAK5zB,KAAKmc,IAAIwP,YAE/B,IAAInpB,MAAOxC,KAAK2nB,MAChB3nB,MAAKooB,OACL3jB,OAASA,OAAOjC,KAAMsM,OAG5B,MAAOrK,eAILm6B,KAAK,SAASrgC,QAAQkB,OAAOJ,SAQnCI,OAAOJ,SACL2pB,QACEwI,IAAK,kBACL+D,IAAK,QACLQ,IAAK,4BACL8B,IAAK,oBACLE,IAAK,WACLkB,IAAK,6BACLe,IAAK,mBACLO,IAAK,eACLO,IAAK,eACLG,IAAK,UACLU,IAAK,UACLuB,IAAK,YACLU,IAAK,iBACLI,IAAK,SACLE,IAAK,YACLG,IAAK,iBACLO,IAAK,cACLC,IAAK,iBACLC,IAAK,OACLC,IAAK,OACLC,IAAK,UACLC,IAAK,UACLC,IAAK,OACLC,IAAK,QACLC,IAAK,WACLC,IAAK;AACLC,IAAK,aACLC,IAAK,WACLC,IAAK,WACLC,IAAK,WACLC,IAAK,SACLC,IAAK,gBACLC,IAAK,UACLC,IAAK,YACLC,IAAK,YACLC,IAAK,QACLC,IAAK,UACLC,IAAK,SACLC,IAAK,YACLC,IAAK,UACLC,IAAK,eACLC,IAAK,SACLC,IAAK,UACLC,IAAK,eACLC,IAAK,gBACLC,IAAK,cACLC,IAAK,cACLC,IAAK,iBACLC,IAAK,cACLC,IAAK,cACLC,IAAK,aACLC,IAAK,cACLC,IAAK,aACLC,IAAK,aACLC,IAAK,QACLC,IAAK,QACLC,IAAK,eACLC,IAAK,gBACLC,IAAK,eACLC,IAAK,gBACLC,IAAK,gBACLC,IAAK,OACLC,IAAK,OACLC,IAAK,iBACLC,IAAK,qBACLC,IAAK,aACLC,IAAK,iBACLC,IAAK,wBACLC,IAAK,wBACLC,IAAK,eACLC,IAAK,aACLC,IAAK,gBACLC,IAAK,gBACLC,IAAK,eACLC,IAAK,gBACLC,IAAK,cACLC,IAAK,eACLC,IAAK,SACLC,IAAK,UACLC,IAAK,UACLC,IAAK,eACLC,IAAK,aACLC,IAAK,iBACLC,IAAK,iBACLC,IAAK;AACLC,IAAK,aACLC,IAAK,UACLC,IAAK,aACLC,IAAK,UACLC,IAAK,UACLC,IAAK,YACLC,IAAK,cACLC,IAAK,eACLC,IAAK,QACLC,IAAK,WACLC,IAAK,cACLC,IAAK,YACLC,IAAK,UACLC,IAAK,QACLC,IAAK,cACLC,IAAK,WACLC,IAAK,SACLC,IAAK,cACLC,IAAK,SACLC,IAAK,YACLC,IAAK,WACLC,IAAK,eACLC,IAAK,aACLC,IAAK,6BACLC,IAAK,YACLC,IAAK,YACLC,IAAK,SACLC,IAAK,SACLC,IAAK,QACLC,IAAK,YACLC,IAAK,aACLC,IAAK,WACLC,IAAK,SACLC,IAAK,kBACLC,IAAK,gBACLC,IAAK,YACLC,IAAK,aACLC,IAAK,aACLC,IAAK,uBACLC,IAAK,cACLC,IAAK,eACLC,IAAK,YACLC,IAAK,gBACLC,IAAK,aACLC,IAAK,aACLC,IAAK,QACLC,IAAK,cACLC,IAAK,eAEP3pB,OACE6H,gBAAiB,IACjBV,MAAO,IACPoI,0BAA2B,IAC3BT,kBAAmB,IACnBG,SAAU,IACV8B,2BAA4B,IAC5B5B,iBAAkB,IAClB8B,aAAc,IACd5B,aAAc,IACd5H,QAAS,IACTE,QAAS,IACTjB,UAAW;AACXE,eAAgB,IAChBJ,OAAQ,IACRK,UAAW,IACXE,eAAgB,IAChBE,YAAa,IACb8K,eAAgB,IAChBxN,KAAM,IACN3B,KAAM,IACNI,QAAS,IACTI,QAAS,IACTI,KAAM,IACNE,MAAO,IACPe,SAAU,IACVQ,QAAS,IACTE,WAAY,IACZjD,SAAU,IACVqF,SAAU,IACVQ,SAAU,IACVxC,OAAQ,IACRsI,cAAe,IACflF,QAAS,IACT7E,UAAW,IACXI,UAAW,IACX9B,MAAO,IACPM,QAAS,IACT2C,OAAQ,IACR7C,UAAW,IACXF,QAAS,IACT8B,aAAc,IACdwE,OAAQ,IACRxC,QAAS,IACT4M,aAAc,IACdnB,cAAe,IACfmC,YAAa,IACb/B,YAAa,IACbmC,eAAgB,IAChBG,YAAa,IACbE,YAAa,IACbG,WAAY,IACZG,YAAa,IACbxB,WAAY,IACZM,WAAY,IACZd,MAAO,IACPnB,MAAO,IACPiD,aAAc,IACdH,cAAe,IACfzL,aAAc,IACdE,cAAe,IACfE,cAAe,IACfmK,KAAM,IACNM,KAAM,IACNlB,eAAgB,IAChBM,mBAAoB,IACpBL,WAAY,IACZM,eAAgB,IAChBO,sBAAuB,IACvBE,sBAAuB,IACvBtP,aAAc,IACdkF,WAAY,IACZG,cAAe,IACfI,cAAe,IACfE,aAAc,IACdE,cAAe,IACfE,YAAa,IACbE,aAAc,IACd5I,OAAQ,IACR8D,QAAS,IACT8L,QAAS,IACTD,aAAc;AACdxP,WAAY,IACZ6Q,eAAgB,IAChBR,eAAgB,IAChBtJ,QAAS,IACTE,WAAY,IACZpD,QAAS,IACTsC,WAAY,IACZnC,QAAS,IACTqC,QAAS,IACTpC,UAAW,IACXF,YAAa,IACbG,aAAc,IACdM,MAAO,IACPmC,SAAU,IACVF,YAAa,IACbF,UAAW,IACXrG,QAAS,IACTkE,MAAO,IACPmB,YAAa,IACbvE,SAAU,IACVI,OAAQ,IACRyB,YAAa,IACbE,OAAQ,IACRE,UAAW,IACXnB,SAAU,IACVI,aAAc,IACdV,WAAY,IACZsM,2BAA4B,IAC5BlB,UAAW,IACXD,UAAW,IACXtN,OAAQ,IACRE,OAAQ,IACRE,MAAO,IACPV,UAAW,IACXI,WAAY,IACZF,SAAU,IACVU,OAAQ,IACRgP,gBAAiB,IACjBI,cAAe,IACflQ,UAAW,IACX2O,WAAY,IACZnD,WAAY,IACZC,qBAAsB,IACtB2D,YAAa,IACb/D,aAAc,IACdC,UAAW,IACXC,cAAe,IACfmI,WAAY,IACZhB,WAAY,IACZa,MAAO,IACPD,YAAa,IACbR,YAAa,WAIXmW,cAAc,SAAS1nC,QAAQkB,OAAOJ,SAe5C,QAAS6mC,SAAQliC,IAAKmiC,IAGpB,IAFA,GAAIC,MAAO1hC,OAAO0hC,KAAKpiC,KACnBhF,EAAIonC,KAAK7mC,OACNP,KAAK,CACV,GAAImqB,GAAIid,KAAKpnC,GACTu4B,IAAMvzB,IAAImlB,EACF,QAARoO,UACK4O,IAAGhd,GACc,kBAARoO,KAChB4O,GAAGhd,GAAKoO,IAAI8O,KAAKF,IACR9kC,MAAM8xB,QAAQoE,KACvB4O,GAAGhd,GAAK9nB,MAAM8xB,QAAQgT,GAAGhd,IAAMgd,GAAGhd,GAAG1oB,OAAO82B,KAAOA,IAC3B,gBAARA,KAChB4O,GAAGhd,GAAsB,gBAAVgd,IAAGhd,GAAkB+c,QAAQ3O,IAAK4O,GAAGhd,IAAMoO,IAE1D4O,GAAGhd,GAAKoO;CAGZ,MAAO4O,IA1BT,GAAI9iC,OAAQ9E,QAAQ,WAChB6E,OAAS7E,QAAQ,YACjB6d,OAAS7d,QAAQ,YACjByE,IAAMzE,QAAQ,SA2Dd2d,OAAS,SAASoqB,SACpB,MAAoB,kBAATtmC,MACF,GAAIA,MAAKsmC,UAElBtmC,KAAKoc,OAASA,OACdpc,KAAKqD,MAAQ,GAAIA,OAAMrD,MACvBA,KAAK6xB,IAAM,GAAI7uB,KACfhD,KAAKoD,OAAS,GAAIA,QAAOpD,KAAKqD,MAAOrD,KAAK6xB,UACtCyU,SAA8B,gBAAZA,UACpBJ,QAAQI,QAAStmC,QAUrBkc,QAAOvX,OAAS,SAAS2hC,SACvB,MAAO,IAAIpqB,QAAOoqB,UAOpBpqB,OAAOqqB,UAAY,SAASt6B,OAAQq6B,SAClC,GAAIziC,MAAO,GAAIqY,QAAOoqB,QACtB,OAAOziC,MAAK0iC,UAAUt6B,SAQxBiQ,OAAO1a,UAAU+kC,UAAY,SAASt6B,QAGpC,MAFAjM,MAAKqD,MAAMqZ,WAAY,EACvB1c,KAAKqD,MAAMmZ,YAAa,EACjBxc,KAAKoD,OAAOqvB,MAAMxmB,OAAQ,SAOnCiQ,OAAOsqB,UAAY,SAASv6B,OAAQymB,SAAU4T,SACpB,gBAAb5T,YAET4T,QAAU5T,SACVA,SAAW,UAEb,IAAI7uB,MAAO,GAAIqY,QAAOoqB,QACtB,OAAOziC,MAAK2iC,UAAUv6B,OAAQymB,WAuBhCxW,OAAO1a,UAAUglC,UAAY,SAASv6B,OAAQymB,UAG5C,MAFA1yB,MAAKqD,MAAMqZ,WAAY,EACvB1c,KAAKqD,MAAMmZ,YAAa,EACjBxc,KAAKoD,OAAOqvB,MAAMxmB,OAAQymB,WAOnCxW,OAAOuqB,YAAc,SAASx6B,OAAQq6B;AACpC,GAAIziC,MAAO,GAAIqY,QAAOoqB,QACtB,OAAOziC,MAAK4iC,YAAYx6B,SAS1BiQ,OAAO1a,UAAUilC,YAAc,SAASx6B,QACtCjM,KAAKqD,MAAMqZ,WAAY,EACvB1c,KAAKqD,MAAMmZ,YAAa,CACxB,IAAIF,KAAMtc,KAAKqD,MAAMiZ,IACjBD,MAAQrc,KAAKoc,OAAO4M,MACxBhpB,MAAKqD,MAAMwjB,SAAS5a,OAGpB,KAFA,GAAI0F,OAAQ3R,KAAKqD,MAAM8kB,OAAS7L,IAC5B7X,UACEkN,OAAS2K,KAAK,CAClB,GAAIoqB,OAAQ1mC,KAAKqD,MAAM4jB,MACnB5K,OAAMsqB,eAAeh1B,SACvB+0B,OAASrqB,MAAM1K,OAAQ+0B,MAAO1mC,KAAKqD,MAAMC,OAAOC,aAElDkB,OAAOlD,KAAKmlC,OACZ/0B,MAAQ3R,KAAKqD,MAAM8kB,OAAS7L,IAE9B,MAAO7X,SAIThF,OAAOJ,QAAU6c,SAEd0qB,QAAQ,EAAEC,UAAU,GAAGC,WAAW,IAAIC,WAAW","file":"php-parser.min.js"} \ No newline at end of file +{"version":3,"sources":["php-parser.js"],"names":["require","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","1","module","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","setTimeout","this","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","2","Location","Position","AST","withPositions","withSource","position","parser","lexer","yylloc","first_line","first_column","first_offset","prepare","kind","start","self","location","slice","src","_input","substring","offset","prev_offset","prev_line","prev_column","shift","node","result","Object","create","right","precedence","out","what","forEach","ctor","constructor","toLowerCase","./ast/array","./ast/assign","./ast/bin","./ast/block","./ast/boolean","./ast/break","./ast/call","./ast/case","./ast/cast","./ast/catch","./ast/class","./ast/classconstant","./ast/clone","./ast/closure","./ast/constant","./ast/constref","./ast/continue","./ast/declaration","./ast/declare","./ast/do","./ast/doc","./ast/echo","./ast/empty","./ast/encapsed","./ast/entry","./ast/error","./ast/eval","./ast/exit","./ast/expression","./ast/for","./ast/foreach","./ast/function","./ast/global","./ast/goto","./ast/halt","./ast/identifier","./ast/if","./ast/include","./ast/inline","./ast/interface","./ast/isset","./ast/label","./ast/list","./ast/literal","./ast/location","./ast/lookup","./ast/magic","./ast/method","./ast/namespace","./ast/new","./ast/node","./ast/nowdoc","./ast/number","./ast/offsetlookup","./ast/operation","./ast/parameter","./ast/parenthesis","./ast/position","./ast/post","./ast/pre","./ast/print","./ast/program","./ast/property","./ast/propertylookup","./ast/retif","./ast/return","./ast/silent","./ast/statement","./ast/static","./ast/staticlookup","./ast/string","./ast/switch","./ast/sys","./ast/throw","./ast/trait","./ast/traitalias","./ast/traitprecedence","./ast/traituse","./ast/try","./ast/unary","./ast/unset","./ast/usegroup","./ast/useitem","./ast/variable","./ast/variadic","./ast/while","./ast/yield","./ast/yieldfrom","3","Expr","KIND","extends","shortForm","items","./expression","4","Statement","Assign","left","operator","./statement","5","Operation","binOperatorsPrecedence","Bin","type","lLevel","rLevel","list","index","./operation","6","Block","children","7","Literal","Boolean","value","./literal","8","Node","Break","level","./node","9","Call","10","Case","test","body","11","Cast","12","Catch","variable","13","Declaration","Class","ext","impl","flags","isAnonymous","implements","parseFlags","./declaration","14","Constant","ClassConstant","./constant","15","Clone","16","Closure","byref","uses","nullable","17","18","ConstRef","identifier","19","Continue","20","IS_PUBLIC","IS_PROTECTED","IS_PRIVATE","isAbstract","isFinal","visibility","isStatic","21","Declare","mode","MODE_SHORT","MODE_BLOCK","MODE_NONE","./block","22","Do","23","Doc","isDoc","lines","24","Sys","Echo","./sys","25","Empty","26","Encapsed","TYPE_STRING","TYPE_SHELL","TYPE_HEREDOC","TYPE_OFFSET","27","Entry","key","28","message","token","line","expected","29","Eval","source","30","Exit","status","31","Expression","32","For","init","increment","33","Foreach","34","fn","_Function","35","Global","36","Goto","label","37","Halt","after","38","Identifier","isRelative","resolution","RELATIVE_NAME","UNQUALIFIED_NAME","FULL_QUALIFIED_NAME","QUALIFIED_NAME","join","39","If","alternate","40","Include","target","41","Inline","42","Interface","43","Isset","44","Label","45","List","46","47","end","48","Lookup","49","Magic","50","Method","./function","51","Namespace","withBrackets","./identifier","52","New","53","loc","54","Nowdoc","55","_Number","Number","56","OffsetLookup","./lookup","57","58","Parameter","isRef","isVariadic","variadic","59","Parenthesis","inner","60","column","61","Post","62","Pre","63","Print","64","Program","errors","65","Property","66","PropertyLookup","67","PRECEDENCE","RetIf","trueExpr","falseExpr","./bin","68","Return","expr","69","Silent","70","71","Static","72","StaticLookup","73","String","isDoubleQuote","74","Switch","75","76","Throw","77","Trait","78","TraitAlias","trait","method","as","79","TraitPrecedence","instead","80","TraitUse","traits","adaptations","81","Try","catches","always","82","Unary","83","Unset","84","UseGroup","85","UseItem","alias","TYPE_CONST","TYPE_FUNCTION","86","Variable","87","Variadic","88","While","89","Yield","90","YieldFrom","91","engine","tok","tokens","names","EOF","debug","all_tokens","comment_tokens","mode_eval","asp_tags","short_tags","yyprevcol","keywords","__class__","T_CLASS_C","__trait__","T_TRAIT_C","__function__","T_FUNC_C","__method__","T_METHOD_C","__line__","T_LINE","__file__","T_FILE","__dir__","T_DIR","__namespace__","T_NS_C","exit","T_EXIT","die","function","T_FUNCTION","const","T_CONST","return","T_RETURN","try","T_TRY","catch","T_CATCH","finally","T_FINALLY","throw","T_THROW","if","T_IF","elseif","T_ELSEIF","endif","T_ENDIF","else","T_ELSE","while","T_WHILE","endwhile","T_ENDWHILE","do","T_DO","for","T_FOR","endfor","T_ENDFOR","foreach","T_FOREACH","endforeach","T_ENDFOREACH","declare","T_DECLARE","enddeclare","T_ENDDECLARE","instanceof","T_INSTANCEOF","T_AS","switch","T_SWITCH","endswitch","T_ENDSWITCH","case","T_CASE","default","T_DEFAULT","break","T_BREAK","continue","T_CONTINUE","goto","T_GOTO","echo","T_ECHO","print","T_PRINT","class","T_CLASS","interface","T_INTERFACE","T_TRAIT","T_EXTENDS","T_IMPLEMENTS","new","T_NEW","clone","T_CLONE","var","T_VAR","eval","T_EVAL","include","T_INCLUDE","include_once","T_INCLUDE_ONCE","T_REQUIRE","require_once","T_REQUIRE_ONCE","namespace","T_NAMESPACE","use","T_USE","insteadof","T_INSTEADOF","global","T_GLOBAL","isset","T_ISSET","empty","T_EMPTY","__halt_compiler","T_HALT_COMPILER","static","T_STATIC","abstract","T_ABSTRACT","final","T_FINAL","private","T_PRIVATE","protected","T_PROTECTED","public","T_PUBLIC","unset","T_UNSET","T_LIST","T_ARRAY","callable","T_CALLABLE","or","T_LOGICAL_OR","and","T_LOGICAL_AND","xor","T_LOGICAL_XOR","castKeywords","int","T_INT_CAST","integer","real","T_DOUBLE_CAST","double","float","string","T_STRING_CAST","binary","T_ARRAY_CAST","object","T_OBJECT_CAST","bool","T_BOOL_CAST","boolean","T_UNSET_CAST","setInput","input","size","yylineno","yytext","last_line","last_column","conditionStack","done","begin","ch","unput","c","tryMatch","text","ahead","tryMatchCaseless","consume","getState","setState","state","appendToken","lex","next","T_WHITESPACE","T_COMMENT","T_DOC_COMMENT","T_OPEN_TAG","T_OPEN_TAG_WITH_ECHO","condition","curCondition","stateCb","popState","pop","tName","values","console","log","stack","k","./lexer/comments.js","./lexer/initial.js","./lexer/numbers.js","./lexer/property.js","./lexer/scripting.js","./lexer/strings.js","./lexer/tokens.js","./lexer/utils.js","92","aspTagMode","is_WHITESPACE","93","nextINITIAL","matchINITIAL","T_INLINE_HTML","94","arch","MAX_LENGTH_OF_LONG","long_min_digits","consume_NUM","hasPoint","is_HEX","consume_HNUM","consume_BNUM","is_NUM","consume_LNUM","T_DNUMBER","T_LNUMBER","_process","95","matchST_LOOKING_FOR_PROPERTY","T_OBJECT_OPERATOR","is_LABEL_START","consume_LABEL","T_STRING","matchST_LOOKING_FOR_VARNAME","T_STRING_VARNAME","matchST_VAR_OFFSET","T_NUM_STRING","T_VARIABLE","T_ENCAPSED_AND_WHITESPACE","is_TOKEN","96","matchST_IN_SCRIPTING","consume_TOKEN","T_CONSTANT_ENCAPSED_STRING","ST_DOUBLE_QUOTES","nextCH","T_CLOSE_TAG","97","is_HEREDOC","revert","is_TABSPACE","tChar","yyoffset","is_LABEL","yylabel","heredoc_label","T_START_HEREDOC","prefix","isDOC_MATCH","matchST_NOWDOC","T_END_HEREDOC","matchST_HEREDOC","T_DOLLAR_OPEN_CURLY_BRACES","consume_VARIABLE","T_CURLY_OPEN","matchST_BACKQUOTE","matchST_DOUBLE_QUOTES","98","id","T_YIELD_FROM","T_YIELD","tokenTerminals","$","-","nchar","T_DEC","T_MINUS_EQUAL","\\","T_NS_SEPARATOR","/","T_DIV_EQUAL",":","T_DOUBLE_COLON","(","initial","consume_TABSPACE","yylen","castToken","castId","=","T_DOUBLE_ARROW","T_IS_IDENTICAL","T_IS_EQUAL","+","T_INC","T_PLUS_EQUAL","!","T_IS_NOT_IDENTICAL","T_IS_NOT_EQUAL","?","T_COALESCE","<","T_SL_EQUAL","T_SL","T_SPACESHIP","T_IS_SMALLER_OR_EQUAL",">","T_IS_GREATER_OR_EQUAL","T_SR_EQUAL","T_SR","*","T_MUL_EQUAL","T_POW_EQUAL","T_POW",".","T_CONCAT_EQUAL","T_ELLIPSIS","%","T_MOD_EQUAL","&","T_AND_EQUAL","T_BOOLEAN_AND","|","T_OR_EQUAL","T_BOOLEAN_OR","^","T_XOR_EQUAL","99","charCodeAt","indexOf","100","isNumber","isNaN","parseFloat","isFinite","ast","prev","extractDoc","suppressErrors","entries","VARIABLE","SCALAR","T_MAGIC_CONST","T_MEMBER_FLAGS","EOS","EXPR","getTokenName","parse","filename","_errors","currentNamespace","innerList","program","childs","nextWithComments","read_start","undefined","isArray","raiseError","msgExpect","expect","err","SyntaxError","lineNumber","fileName","columnNumber","error","msg","symbol","expectEndOfStatement","ignoreStack","showlog","split","trim","found","ignoreComments","is","./parser/array.js","./parser/class.js","./parser/comment.js","./parser/expr.js","./parser/function.js","./parser/if.js","./parser/loops.js","./parser/main.js","./parser/namespace.js","./parser/scalar.js","./parser/statement.js","./parser/switch.js","./parser/try.js","./parser/utils.js","./parser/variable.js","101","ArrayExpr","ArrayEntry","read_array","read_array_pair_list","read_variable","read_expr","read_dim_offset","102","read_class","flag","propName","propExtends","propImplements","read_namespace_name","read_name_list","read_class_body","read_class_scope","read_member_flags","variables","read_variable_list","read_function","constants","read_constant_list","read_trait_use_statement","read_doc_comment","read_comment","read_list","read_variable_declaration","read_constant_declaration","asInterface","idx","val","read_interface","read_interface_body","read_function_declaration","read_trait","read_trait_use_alias","103","docSplit","104","read_expr_item","trueArg","recursive_variable_chain_scan","read_dereferencable","read_function_argument_list","read_encapsed_string","assign","isInner","assignList","read_assignment_list","hasItem","read_new_expr","arg","read_scalar","read_class_name_reference","read_static_getter","read_assignment_list_element","105","is_reference","is_variadic","closure","read_code_block","nodeName","returnType","params","read_parameter_list","read_lexical_var","read_type","read_parameter","wasVariadic","argument","read_argument_list","106","read_if","read_if_expr","read_elseif_short","read_else_short","read_inner_statement","read_statement","107","read_while","read_short_form","read_do","read_for","read_foreach","read_foreach_variable","108","read_namespace","read_top_statement","109","read_top_statements","relative","read_use_statement","read_use_type","read_use_declaration","read_use_declarations","typed","read_use_alias","useitem","110","specialChar","\\r","\\n","\\t","\\v","fromCharCode","\\e","\\f","\\\\","\\$","\\\"","\\'","resolve_special_chars","replace","seq","get_magic_constant","lastCh","read_encapsed_string_item","varName","read_simple_variable","read_encaps_var_offset","encapsed","111","statement","read_const_list","read_inner_statements","read_declare_list","read_switch","current","read_variable_declarations","read_try","top","112","read_switch_case_list","read_case_list","stopToken","113","item","114","separator","preserveFirstSeparator","115","read_only","read_reference_variable","literal","recursive_scan_loop","isDblQuote","num","116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","php-parser","combine","to","keys","bind","options","parseEval","buffer","parseCode","tokenGetAll","entry","hasOwnProperty","./ast","./lexer","./parser","./tokens"],"mappings":"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","file":"php-parser.min.js"} \ No newline at end of file diff --git a/docs/AST.md b/docs/AST.md index 8185ea1f7..d9e2fa8c3 100644 --- a/docs/AST.md +++ b/docs/AST.md @@ -1,12 +1,38 @@ -# AST +## AST + +The AST builder class + +**Parameters** + +- `withPositions` +- `withSource` + +**Properties** + +- `withPositions` **[Boolean](#boolean)** Should locate any node (by default false) +- `withSource` **[Boolean](#boolean)** Should extract the node original code (by default false) + +### prepare + +Prepares an AST node + +**Parameters** + +- `kind` **([String](#string) | null)** Defines the node type + (if null, the kind must be passed at the function call) +- `parser` **Parser** The parser instance (use for extracting locations) + +Returns **[Function](#function)** + +## AST ## Class hierarchy - [Location](#location) - [Position](#position) -- [Node](#Node) +- [Node](#node) - [Identifier](#identifier) - [TraitUse](#traituse) - [TraitAlias](#traitalias) @@ -40,7 +66,6 @@ - [Number](#number) - [Inline](#inline) - [Magic](#magic) - - [Shell](#shell) - [Nowdoc](#nowdoc) - [Encapsed](#encapsed) - [Statement](#statement) @@ -98,57 +123,7 @@ - `withPositions` - `withSource` -## position - -Create a position node from specified parser -including it's lexer current state - -**Parameters** - -- `Parser` -- `parser` - -Returns **[Position](#position)** - -## prepare - -Prepares an AST node - -**Parameters** - -- `kind` **([String](#string) | null)** Defines the node type - (if null, the kind must be passed at the function call) -- `parser` **Parser** The parser instance (use for extracting locations) - -Returns **[Function](#function)** - -# AST - -The AST builder class - -**Parameters** - -- `withPositions` -- `withSource` - -**Properties** - -- `withPositions` **[Boolean](#boolean)** Should locate any node (by default false) -- `withSource` **[Boolean](#boolean)** Should extract the node original code (by default false) - -## position - -Create a position node from specified parser -including it's lexer current state - -**Parameters** - -- `Parser` -- `parser` - -Returns **[Position](#position)** - -## prepare +### prepare Prepares an AST node @@ -160,7 +135,7 @@ Prepares an AST node Returns **[Function](#function)** -# Array +## Array **Extends Expression** @@ -171,7 +146,7 @@ Defines an array structure - `items` **[Array](#array)<[Entry](#entry)>** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Assign +## Assign **Extends Statement** @@ -183,7 +158,7 @@ Assigns a value to the specified target - `right` **[Expression](#expression)** - `operator` **[String](#string)** -# Bin +## Bin **Extends Operation** @@ -195,7 +170,7 @@ Binary operations - `left` **[Expression](#expression)** - `right` **[Expression](#expression)** -# Block +## Block **Extends Statement** @@ -205,13 +180,13 @@ A block statement, i.e., a sequence of statements surrounded by braces. - `children` **[Array](#array)<[Node](#node)>** -# Boolean +## Boolean **Extends Literal** Defines a boolean value (true/false) -# Break +## Break **Extends Node** @@ -221,7 +196,7 @@ A break statement - `level` **([Number](#number) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** -# Call +## Call **Extends Statement** @@ -231,7 +206,7 @@ Executes a call statement - `arguments` **[Array](#array)<Arguments>** -# Case +## Case **Extends Node** @@ -242,7 +217,7 @@ A switch case statement - `test` **([Expression](#expression) | null)** if null, means that the default case - `body` **([Block](#block) | null)** -# Cast +## Cast **Extends Operation** @@ -253,7 +228,7 @@ Binary operations - `type` **[String](#string)** - `what` **[Expression](#expression)** -# Try +## Catch **Extends Statement** @@ -265,19 +240,7 @@ Defines a catch statement - `variable` **[Variable](#variable)** - `body` **[Statement](#statement)** -# Try - -**Extends Statement** - -Defines a try statement - -**Properties** - -- `body` **[Block](#block)** -- `catches` **[Array](#array)<Catch>** -- `allways` **[Block](#block)** - -# Class +## Class **Extends Declaration** @@ -292,7 +255,7 @@ A class definition - `isAbstract` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `isFinal` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# ClassConstant +## ClassConstant **Extends Constant** @@ -303,7 +266,7 @@ Defines a class/interface/trait constant - `isStatic` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `visibility` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** -# Clone +## Clone **Extends Statement** @@ -313,7 +276,7 @@ Defines a clone call - `what` **[Expression](#expression)** -# Closure +## Closure **Extends Statement** @@ -322,12 +285,13 @@ Defines a closure **Properties** - `arguments` **[Array](#array)<[Parameter](#parameter)>** +- `uses` **[Array](#array)<[Variable](#variable)>** - `type` **[Identifier](#identifier)** - `byref` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `nullable` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `body` **([Block](#block) | null)** -# Constant +## Constant **Extends Declaration** @@ -337,7 +301,7 @@ Defines a namespace constant - `value` **([Node](#node) | null)** -# ConstRef +## ConstRef **Extends Expression** @@ -347,7 +311,7 @@ A constant reference - `name` **([String](#string) \| [Node](#node))** -# Continue +## Continue **Extends Node** @@ -357,7 +321,7 @@ A continue statement - `level` **([Number](#number) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** -# Declaration +## Declaration **Extends Statement** @@ -367,7 +331,7 @@ A declaration statement (function, class, interface...) - `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** -## parseFlags +### parseFlags Generic flags parser @@ -377,7 +341,7 @@ Generic flags parser Returns **void** -# Declare +## Declare **Extends Block** @@ -388,7 +352,7 @@ The declare construct is used to set execution directives for a block of code - `what` **[Array](#array)<[Expression](#expression)>** - `mode` **[String](#string)** -## MODE_SHORT +### MODE_SHORT The node is declared as a short tag syntax : @@ -401,7 +365,7 @@ enddeclare; Type: [String](#string) -## MODE_BLOCK +### MODE_BLOCK The node is declared bracket enclosed code : @@ -414,7 +378,7 @@ declare(ticks=1) { Type: [String](#string) -## MODE_NONE +### MODE_NONE The node is declared as a simple statement. In order to make things simpler children of the node are automatically collected until the next @@ -430,7 +394,7 @@ declare(ticks=2); Type: [String](#string) -# Do +## Do **Extends Statement** @@ -441,7 +405,7 @@ Defines a do/while statement - `test` **[Expression](#expression)** - `body` **[Statement](#statement)** -# Documentation +## Documentation **Extends Node** @@ -452,19 +416,19 @@ A comment or documentation - `isDoc` **[Boolean](#boolean)** - `lines` **[Array](#array)<[String](#string)>** -# Echo +## Echo **Extends Sys** Defines system based call -# Empty +## Empty **Extends Sys** Defines an empty check call -# Encapsed +## Encapsed **Extends Literal** @@ -475,7 +439,7 @@ Defines an encapsed string (contains expressions) - `type` **[String](#string)** Defines the type of encapsed string (shell, heredoc, string) - `label` **([String](#string) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** The heredoc label, defined only when the type is heredoc -## TYPE_STRING +### TYPE_STRING The node is a double quote string : @@ -486,7 +450,7 @@ echo "hello $world"; Type: [String](#string) -## TYPE_SHELL +### TYPE_SHELL The node is a shell execute string : @@ -497,7 +461,7 @@ echo `ls -larth $path`; Type: [String](#string) -## TYPE_HEREDOC +### TYPE_HEREDOC The node is a shell execute string : @@ -511,7 +475,18 @@ STR Type: [String](#string) -# Entry +### TYPE_OFFSET + +The node contains a list of constref / variables / expr : + +```php +bar_$baz; +``` + +Type: [String](#string) + +## Entry **Extends Node** @@ -522,7 +497,7 @@ An array entry - `key` **([Node](#node) | null)** - `value` **[Node](#node)** -# Error +## Error **Extends Node** @@ -535,7 +510,7 @@ Defines an error node (used only on silentMode) - `token` **([number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** - `expected` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array))** -# Eval +## Eval **Extends Statement** @@ -545,7 +520,7 @@ Defines an eval statement - `source` **[Node](#node)** -# Exit +## Exit **Extends Statement** @@ -555,14 +530,14 @@ Defines an exit / die call - `status` **([Node](#node) | null)** -# Expression +## Expression **Extends Node** Any expression node. Since the left-hand side of an assignment may be any expression in general, an expression can also be a pattern. -# For +## For **Extends Statement** @@ -576,7 +551,7 @@ Defines a for iterator - `body` **[Statement](#statement)** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Foreach +## Foreach **Extends Statement** @@ -590,7 +565,7 @@ Defines a foreach iterator - `body` **[Statement](#statement)** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Function +## Function **Extends Declaration** @@ -604,7 +579,7 @@ Defines a classic function - `nullable` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `body` **([Block](#block) | null)** -# Global +## Global **Extends Statement** @@ -614,7 +589,7 @@ Imports a variable from the global scope - `items` **[Array](#array)<[Variable](#variable)>** -# Goto +## Goto **Extends Statement** @@ -624,7 +599,7 @@ Defines goto statement - `label` **[String](#string)** -# Halt +## Halt **Extends Statement** @@ -634,7 +609,7 @@ Halts the compiler execution - `after` **[String](#string)** String after the halt statement -# Identifier +## Identifier **Extends Node** @@ -645,19 +620,19 @@ Defines an identifier node - `name` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** - `resolution` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** -## UNQUALIFIED_NAME +### UNQUALIFIED_NAME This is an identifier without a namespace separator, such as Foo Type: [String](#string) -## QUALIFIED_NAME +### QUALIFIED_NAME This is an identifier with a namespace separator, such as Foo\\Bar Type: [String](#string) -## FULL_QUALIFIED_NAME +### FULL_QUALIFIED_NAME This is an identifier with a namespace separator that begins with a namespace separator, such as \\Foo\\Bar. The namespace \\Foo is also @@ -665,13 +640,13 @@ a fully qualified name. Type: [String](#string) -## RELATIVE_NAME +### RELATIVE_NAME This is an identifier starting with namespace, such as namespace\\Foo\\Bar. Type: [String](#string) -# If +## If **Extends Statement** @@ -684,7 +659,7 @@ Defines a if statement - `alternate` **([Block](#block) \| [If](#if) | null)** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Include +## Include **Extends Statement** @@ -696,13 +671,13 @@ Defines system include call - `once` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `require` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Inline +## Inline **Extends Literal** Defines inline html output (treated as echo output) -# Interface +## Interface **Extends Declaration** @@ -713,13 +688,13 @@ An interface definition - `extends` **[Array](#array)<[Identifier](#identifier)>** - `body` **[Array](#array)<[Declaration](#declaration)>** -# Isset +## Isset **Extends Sys** Defines an isset call -# Label +## Label **Extends Node** @@ -729,13 +704,13 @@ A label statement (referenced by goto) - `name` **[String](#string)** -# List +## List **Extends Sys** Defines list assignment -# Literal +## Literal **Extends Expression** @@ -745,7 +720,7 @@ Defines an array structure - `value` **([Node](#node) \| [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) \| [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) \| [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean) | null)** -# Location +## Location Defines the location of the node (with it's source contents as string) @@ -761,7 +736,7 @@ Defines the location of the node (with it's source contents as string) - `start` **[Position](#position)** - `end` **[Position](#position)** -# Lookup +## Lookup **Extends Expression** @@ -772,13 +747,13 @@ Lookup on an offset in the specified object - `what` **[Expression](#expression)** - `offset` **[Expression](#expression)** -# Magic +## Magic **Extends Literal** Defines magic constant -# Method +## Method **Extends Function** @@ -791,7 +766,7 @@ Defines a class/interface/trait method - `isStatic` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `visibility` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** -# Namespace +## Namespace **Extends Block** @@ -799,10 +774,10 @@ The main program node **Properties** -- `name` **[Identifier](#identifier)** +- `name` **[String](#string)** - `withBrackets` **[Boolean](#boolean)** -# New +## New **Extends Statement** @@ -813,7 +788,7 @@ Creates a new instance of the specified class - `what` **([Identifier](#identifier) \| [Variable](#variable) \| [Class](#class))** - `arguments` **[Array](#array)<Arguments>** -# Node +## Node A generic AST node @@ -827,7 +802,7 @@ A generic AST node - `loc` **([Location](#location) | null)** - `kind` **[String](#string)** -## extends +### extends Helper for extending the Node class @@ -837,7 +812,7 @@ Helper for extending the Node class Returns **[Function](#function)** -# String +## String **Extends Literal** @@ -847,7 +822,7 @@ Defines a nowdoc string - `label` **[String](#string)** -# String +## String **Extends Literal** @@ -857,25 +832,25 @@ Defines a string (simple ou double quoted) - chars are already escaped - `isDoubleQuote` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Number +## Number **Extends Literal** Defines a numeric value -# OffsetLookup +## OffsetLookup **Extends Lookup** Lookup on an offset in an array -# Operation +## Operation **Extends Expression** Defines binary operations -# Parameter +## Parameter **Extends Declaration** @@ -889,7 +864,7 @@ Defines a function parameter - `variadic` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** - `nullable` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Parenthesis +## Parenthesis **Extends Operation** @@ -899,7 +874,7 @@ Parenthesis encapsulation `(... expr ...)` - `inner` **[Expression](#expression)** -# Position +## Position Each Position object consists of a line number (1-indexed) and a column number (0-indexed): @@ -915,7 +890,7 @@ Each Position object consists of a line number (1-indexed) and a column number ( - `column` **[Number](#number)** - `offset` **[Number](#number)** -# Post +## Post **Extends Operation** @@ -926,7 +901,7 @@ Defines a post operation `$i++` or `$i--` - `type` **[String](#string)** - `what` **[Variable](#variable)** -# Pre +## Pre **Extends Operation** @@ -937,13 +912,13 @@ Defines a pre operation `++$i` or `--$i` - `type` **[String](#string)** - `what` **[Variable](#variable)** -# Print +## Print **Extends Sys** Outputs -# Program +## Program **Extends Block** @@ -953,7 +928,7 @@ The main program node - `errors` **[Array](#array)<[Error](#error)>** -# Property +## Property **Extends Declaration** @@ -966,13 +941,13 @@ Defines a class property - `visibility` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** - `value` **([Node](#node) | null)** -# PropertyLookup +## PropertyLookup **Extends Lookup** Lookup to an object property -# RetIf +## RetIf **Extends Statement** @@ -984,7 +959,15 @@ Defines a short if statement that returns a value - `trueExpr` **[Expression](#expression)** - `falseExpr` **[Expression](#expression)** -# Return +### precedence + +Handles precedence over items + +**Parameters** + +- `node` + +## Return **Extends Node** @@ -994,13 +977,7 @@ A continue statement - `expr` **([Expression](#expression) | null)** -# Shell - -**Extends Literal** - -Defines inline html output (treated as echo output) - -# Silent +## Silent **Extends Statement** @@ -1010,13 +987,13 @@ Avoids to show/log warnings & notices from the inner expression - `expr` **[Expression](#expression)** -# Statement +## Statement **Extends Node** Any statement. -# Static +## Static **Extends Statement** @@ -1026,13 +1003,13 @@ Declares a static variable into the current scope - `items` **([Array](#array)<[Variable](#variable)> | [Array](#array)<[Assign](#assign)>)** -# StaticLookup +## StaticLookup **Extends Lookup** Lookup to a static property -# Switch +## Switch **Extends Statement** @@ -1044,7 +1021,7 @@ Defines a switch statement - `body` **[Block](#block)** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Sys +## Sys **Extends Statement** @@ -1054,7 +1031,7 @@ Defines system based call - `arguments` **[Array](#array)<[Node](#node)>** -# Throw +## Throw **Extends Statement** @@ -1064,7 +1041,7 @@ Defines a throw statement - `what` **[Expression](#expression)** -# Trait +## Trait **Extends Declaration** @@ -1076,7 +1053,7 @@ A trait definition - `implements` **[Array](#array)<[Identifier](#identifier)>** - `body` **[Array](#array)<[Declaration](#declaration)>** -# TraitAlias +## TraitAlias **Extends Node** @@ -1089,7 +1066,7 @@ Defines a trait alias - `as` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | null)** - `visibility` **([string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | null)** -# TraitPrecedence +## TraitPrecedence **Extends Node** @@ -1101,7 +1078,7 @@ Defines a trait alias - `method` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** - `instead` **[Array](#array)<[Identifier](#identifier)>** -# TraitUse +## TraitUse **Extends Node** @@ -1112,7 +1089,19 @@ Defines a trait usage - `traits` **[Array](#array)<[Identifier](#identifier)>** - `adaptations` **([Array](#array)<[Node](#node)> | null)** -# Unary +## Try + +**Extends Statement** + +Defines a try statement + +**Properties** + +- `body` **[Block](#block)** +- `catches` **[Array](#array)<[Catch](#catch)>** +- `allways` **[Block](#block)** + +## Unary **Extends Operation** @@ -1123,13 +1112,13 @@ Unary operations - `type` **[String](#string)** - `what` **[Expression](#expression)** -# Unset +## Unset **Extends Sys** Deletes references to a list of variables -# UseGroup +## UseGroup **Extends Statement** @@ -1137,11 +1126,11 @@ Defines a use statement (with a list of use items) **Properties** -- `name` **([Identifier](#identifier) | null)** +- `name` **([String](#string) | null)** - `type` **([String](#string) | null)** Possible value : function, const - `item` **[Array](#array)<[UseItem](#useitem)>** -# UseItem +## UseItem **Extends Statement** @@ -1149,23 +1138,23 @@ Defines a use statement (from namespace) **Properties** -- `name` **[Identifier](#identifier)** +- `name` **[String](#string)** - `type` **([String](#string) | null)** Possible value : function, const - `alias` **([String](#string) | null)** -## TYPE_CONST +### TYPE_CONST Importing a constant Type: [String](#string) -## TYPE_FUNC +### TYPE_FUNC Importing a function Type: [String](#string) -# Variable +## Variable **Extends Expression** @@ -1177,7 +1166,7 @@ be any expression in general, an expression can also be a pattern. - `name` **([String](#string) \| [Node](#node))** - `byref` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Variadic +## Variadic **Extends Expression** @@ -1187,7 +1176,7 @@ Introduce a list of items into the arguments of the call - `what` **([Array](#array) \| [Expression](#expression))** -# While +## While **Extends Statement** @@ -1199,7 +1188,7 @@ Defines a while statement - `body` **[Statement](#statement)** - `shortForm` **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -# Yield +## Yield **Extends Expression** @@ -1210,7 +1199,7 @@ Defines a yield generator statement - `value` **([Expression](#expression) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** - `key` **([Expression](#expression) \| [Null](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null))** -# YieldFrom +## YieldFrom **Extends Expression** diff --git a/docs/README.md b/docs/README.md index f63f080cf..5e0f3e29e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ -# engine +## engine Initialise a new parser instance with the specified options @@ -40,7 +40,7 @@ Type: Engine - `ast` **AST** - `tokens` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** -## parseEval +### parseEval Parse an evaluating mode string (no need to open php tags) @@ -50,7 +50,7 @@ Parse an evaluating mode string (no need to open php tags) Returns **Program** -## parseCode +### parseCode Function that parse a php code with open/close tags @@ -77,7 +77,7 @@ var ast = phpParser.parseCode('...php code...', 'foo.php'); Returns **Program** -## tokenGetAll +### tokenGetAll Extract tokens from the specified buffer. diff --git a/docs/lexer.md b/docs/lexer.md index 6b6ef50f8..8f3cbc4bb 100644 --- a/docs/lexer.md +++ b/docs/lexer.md @@ -1,6 +1,6 @@ -# lexer +## lexer This is the php lexer. It will tokenize the string for helping the parser to build the AST from its grammar. @@ -20,7 +20,7 @@ parser to build the AST from its grammar. - `keywords` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** List of php keyword - `castKeywords` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** List of php keywords for type casting -## setInput +### setInput Initialize the lexer with the specified input @@ -28,7 +28,7 @@ Initialize the lexer with the specified input - `input` -## input +### input consumes and returns one char from the input @@ -36,7 +36,7 @@ consumes and returns one char from the input - `size` -## unput +### unput revert eating specified size @@ -44,11 +44,11 @@ revert eating specified size - `size` -## getState +### getState Gets the current state -## setState +### setState Sets the current lexer state @@ -56,26 +56,26 @@ Sets the current lexer state - `state` -# T_COMMENT +## T_COMMENT Reads a single line comment -# T_DOC_COMMENT +## T_DOC_COMMENT Behaviour : -# T_END_HEREDOC +## T_END_HEREDOC edge case : empty now doc \* -# ch +## ch SCANNING CONTENTS \* -# ch +## ch edge case : empty here doc \* -# ch +## ch SCANNING CONTENTS \* diff --git a/docs/parser.md b/docs/parser.md index e1edbd75a..95c2dc98c 100644 --- a/docs/parser.md +++ b/docs/parser.md @@ -1,6 +1,6 @@ -# parser +## parser The PHP Parser class that build the AST tree from the lexer @@ -20,7 +20,7 @@ Type: Parser - `suppressErrors` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** should ignore parsing errors and continue - `debug` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** should output debug informations -## getTokenName +### getTokenName helper : gets a token name @@ -28,7 +28,7 @@ helper : gets a token name - `token` -## parse +### parse main entry point : converts a source code to AST @@ -37,7 +37,7 @@ main entry point : converts a source code to AST - `code` - `filename` -## raiseError +### raiseError Raise an error @@ -48,7 +48,7 @@ Raise an error - `expect` - `token` -## error +### error handling errors @@ -56,7 +56,7 @@ handling errors - `expect` -## node +### node Creates a new AST node @@ -64,13 +64,13 @@ Creates a new AST node - `name` -## expectEndOfStatement +### expectEndOfStatement expects an end of statement or end of file Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -## expect +### expect Force the parser to check the current token. @@ -89,25 +89,25 @@ be added to the program error stack and this function will return `false`. Returns **[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** -## text +### text Returns the current token contents Returns **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** -## next +### next consume the next token \* -## ignoreComments +### ignoreComments consume comments (if found) \* -## nextWithComments +### nextWithComments consume the next token (including doc) \* -## is +### is Check if token is of specified type @@ -115,11 +115,11 @@ Check if token is of specified type - `type` -# ignoreStack +## ignoreStack outputs some debug information on current token \* -# read_array +## read_array Parse an array @@ -128,7 +128,7 @@ array ::= T_ARRAY '(' array_pair_list ')' | '[' array_pair_list ']' ``` -# read_array_pair_list +## read_array_pair_list Reads an array entry item @@ -143,13 +143,13 @@ array_pair_list ::= '&' w_variable | ) ``` -# read_dim_offset +## read_dim_offset ```ebnf dim_offset ::= expr? ``` -# read_class +## read_class reading a class @@ -157,7 +157,7 @@ reading a class class ::= class_scope? T_CLASS T_STRING (T_EXTENDS NAMESPACE_NAME)? (T_IMPLEMENTS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' CLASS_BODY '}' ``` -# read_class_scope +## read_class_scope Read the class visibility @@ -165,7 +165,7 @@ Read the class visibility class_scope ::= (T_FINAL | T_ABSTRACT)? ``` -# read_class_body +## read_class_body Reads a class body @@ -173,7 +173,7 @@ Reads a class body class_body ::= (member_flags? (T_VAR | T_STRING | T_FUNCTION))* ``` -# read_variable_list +## read_variable_list Reads variable list @@ -181,7 +181,7 @@ Reads variable list variable_list ::= (variable_declaration ',')* variable_declaration ``` -# read_constant_list +## read_constant_list Reads constant list @@ -189,7 +189,7 @@ Reads constant list constant_list ::= T_CONST (constant_declaration ',')* constant_declaration ``` -# read_member_flags +## read_member_flags Read member flags @@ -198,7 +198,7 @@ Returns **any** array 2nd index : 0 => instance member, 1 => static member 3rd index : 0 => normal, 1 => abstract member, 2 => final member -# read_interface +## read_interface reading an interface @@ -206,7 +206,7 @@ reading an interface interface ::= T_INTERFACE T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' INTERFACE_BODY '}' ``` -# read_interface_body +## read_interface_body Reads an interface body @@ -214,7 +214,7 @@ Reads an interface body interface_body ::= (member_flags? (T_CONST | T_FUNCTION))* ``` -# read_trait +## read_trait reading a trait @@ -222,7 +222,7 @@ reading a trait trait ::= T_TRAIT T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' FUNCTION* '}' ``` -# read_trait_use_statement +## read_trait_use_statement reading a use statement @@ -230,7 +230,7 @@ reading a use statement trait_use_statement ::= namespace_name (',' namespace_name)* ('{' trait_use_alias '}')? ``` -# read_trait_use_alias +## read_trait_use_alias Reading trait alias @@ -238,7 +238,7 @@ Reading trait alias trait_use_alias ::= namespace_name ( T_DOUBLE_COLON T_STRING )? (T_INSTEADOF namespace_name) | (T_AS member_flags? T_STRING) ``` -# read_variable_declaration +## read_variable_declaration Reads a variable declaration @@ -246,7 +246,7 @@ Reads a variable declaration variable_declaration ::= T_VARIABLE '=' scalar ``` -# read_constant_declaration +## read_constant_declaration Reads a constant declaration @@ -256,22 +256,22 @@ Reads a constant declaration Returns **Constant** [:link:](AST.md#constant) -# read_comment +## read_comment Comments with // or # or / _ ... _ / -# read_doc_comment +## read_doc_comment Comments with / \*_ ... _ / -# read_expr_item +## read_expr_item ```ebnf Reads an expression expr ::= @todo ``` -# read_new_expr +## read_new_expr ```ebnf new_expr ::= T_NEW (namespace_name function_argument_list) | (T_CLASS ... class declaration) @@ -279,7 +279,7 @@ Reads an expression -# read_class_name_reference +## read_class_name_reference Reads a class name @@ -287,27 +287,27 @@ Reads a class name class_name_reference ::= namespace_name | variable ``` -# read_assignment_list +## read_assignment_list ```ebnf assignment_list ::= assignment_list_element (',' assignment_list_element?)* ``` -# read_assignment_list_element +## read_assignment_list_element ```ebnf assignment_list_element ::= expr | expr T_DOUBLE_ARROW expr ``` -# is_reference +## is_reference checks if current token is a reference keyword -# is_variadic +## is_variadic checks if current token is a variadic keyword -# read_function +## read_function reading a function @@ -315,7 +315,7 @@ reading a function function ::= function_declaration code_block ``` -# read_function_declaration +## read_function_declaration reads a function declaration (without his body) @@ -323,13 +323,13 @@ reads a function declaration (without his body) function_declaration ::= T_FUNCTION '&'? T_STRING '(' parameter_list ')' ``` -# read_lexical_var +## read_lexical_var ```ebnf lexical_var ::= '&'? T_VARIABLE ``` -# read_parameter_list +## read_parameter_list reads a list of parameters @@ -337,13 +337,13 @@ reads a list of parameters parameter_list ::= (parameter ',')* parameter? ``` -# read_parameter +## read_parameter ```ebnf parameter ::= type? '&'? T_ELLIPSIS? T_VARIABLE ('=' expr)? ``` -# read_function_argument_list +## read_function_argument_list Reads a list of arguments @@ -351,13 +351,13 @@ Reads a list of arguments function_argument_list ::= '(' (argument_list (',' argument_list)*)? ')' ``` -# read_argument_list +## read_argument_list ```ebnf argument_list ::= T_ELLIPSIS? expr ``` -# read_type +## read_type read type hinting @@ -365,25 +365,29 @@ read type hinting type ::= T_ARRAY | T_CALLABLE | namespace_name ``` -# read_if +## read_if Reads an IF statement ```ebnf - if ::= '(' expr ')' ':' ... + if ::= T_IF '(' expr ')' ':' ... ``` -# read_if_expr +## read_if_expr reads an if expression : '(' expr ')' -# read_elseif_short +## read_elseif_short reads an elseif (expr): statements -# read_else_short +## read_else_short + +## ignoreComments + +ignore : if (..) { } /\* \*./ else { } -# read_while +## read_while Reads a while statement @@ -393,7 +397,7 @@ while ::= T_WHILE (statement | ':' inner_statement_list T_ENDWHILE ';') Returns **While** -# read_do +## read_do Reads a do / while loop @@ -403,7 +407,7 @@ do ::= T_DO statement T_WHILE '(' expr ')' ';' Returns **Do** -# read_for +## read_for Read a for incremental loop @@ -415,7 +419,7 @@ for_exprs ::= expr? (',' expr)* Returns **For** -# read_foreach +## read_foreach Reads a foreach loop @@ -425,7 +429,7 @@ foreach ::= '(' expr T_AS foreach_variable (T_DOUBLE_ARROW foreach_variable)? ') Returns **Foreach** -# read_foreach_variable +## read_foreach_variable Reads a foreach variable statement @@ -437,13 +441,13 @@ foreach_variable = variable | Returns **Expression** -# read_start +## read_start ```ebnf start ::= (namespace | top_statement)* ``` -# read_namespace +## read_namespace Reads a namespace declaration block @@ -456,7 +460,7 @@ namespace ::= T_NAMESPACE namespace_name? '{' Returns **Namespace** -# read_namespace_name +## read_namespace_name Reads a namespace name @@ -466,7 +470,7 @@ Reads a namespace name Returns **Identifier** -# read_use_statement +## read_use_statement Reads a use statement @@ -480,7 +484,7 @@ use_statement ::= T_USE Returns **UseGroup** -# read_use_declaration +## read_use_declaration Reads a use declaration @@ -490,7 +494,7 @@ use_declaration ::= use_type? namespace_name use_alias Returns **UseItem** -# read_use_declarations +## read_use_declarations Reads a list of use declarations @@ -500,7 +504,7 @@ use_declarations ::= use_declaration (',' use_declaration)* Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<UseItem>** -# read_use_alias +## read_use_alias Reads a use statement @@ -510,7 +514,7 @@ use_alias ::= (T_AS T_STRING)? Returns **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | null)** -# read_use_type +## read_use_type Reads the namespace type declaration @@ -520,11 +524,11 @@ use_type ::= (T_FUNCTION | T_CONST)? Returns **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | null)** Possible values : function, const -# resolve_special_chars +## resolve_special_chars Unescape special chars -# read_scalar +## read_scalar ```ebnf scalar ::= T_MAGIC_CONST @@ -535,11 +539,11 @@ Unescape special chars | namespace_name (T_DOUBLE_COLON T_STRING)? ``` -# read_dereferencable +## read_dereferencable Handles the dereferencing -# read_encapsed_string_item +## read_encapsed_string_item Reads and extracts an encapsed item @@ -556,15 +560,15 @@ encapsed_string_item ::= T_ENCAPSED_AND_WHITESPACE Returns **([String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) | Variable | Expr | Lookup)** -# read_encapsed_string +## read_encapsed_string Reads an encapsed string -# get_magic_constant +## get_magic_constant Constant token -# read_top_statements +## read_top_statements reading a list of top statements (helper for top_statement\*) @@ -572,7 +576,7 @@ reading a list of top statements (helper for top_statement\*) top_statements ::= top_statement* ``` -# read_top_statement +## read_top_statement reading a top statement @@ -584,7 +588,7 @@ reading a top statement | statement ``` -# read_inner_statements +## read_inner_statements reads a list of simple inner statements (helper for inner_statement\*) @@ -592,7 +596,7 @@ reads a list of simple inner statements (helper for inner_statement\*) inner_statements ::= inner_statement* ``` -# read_const_list +## read_const_list Reads a list of constants declaration @@ -600,7 +604,7 @@ Reads a list of constants declaration const_list ::= T_CONST T_STRING '=' expr (',' T_STRING '=' expr)* ';' ``` -# read_declare_list +## read_declare_list Reads a list of constants declaration @@ -608,7 +612,7 @@ Reads a list of constants declaration declare_list ::= T_STRING '=' expr (',' T_STRING '=' expr)* ``` -# read_inner_statement +## read_inner_statement reads a simple inner statement @@ -616,17 +620,17 @@ reads a simple inner statement inner_statement ::= '{' inner_statements '}' | token ``` -# read_statement +## read_statement Reads statements -# read_code_block +## read_code_block ```ebnf code_block ::= '{' (inner_statements | top_statements) '}' ``` -# read_switch +## read_switch Reads a switch statement @@ -636,19 +640,19 @@ Reads a switch statement Returns **Switch** -# read_switch_case_list +## read_switch_case_list ```ebnf switch_case_list ::= '{' ';'? case_list* '}' | ':' ';'? case_list* T_ENDSWITCH ';' ``` -# read_case_list +## read_case_list ```ebnf case_list ::= ((T_CASE expr) | T_DEFAULT) (':' | ';') inner_statement* ``` -# read_try +## read_try ```ebnf try ::= T_TRY '{' inner_statement* '}' @@ -660,7 +664,7 @@ Returns **Switch** Returns **Try** -# read_short_form +## read_short_form Reads a short form of tokens @@ -670,7 +674,7 @@ Reads a short form of tokens Returns **Block** -# read_list +## read_list Helper : reads a list of tokens / sample : T_STRING ',' T_STRING ... @@ -678,7 +682,7 @@ Helper : reads a list of tokens / sample : T_STRING ',' T_STRING ... list ::= separator? ( item separator )* item ``` -# read_name_list +## read_name_list Reads a list of names separated by a comma @@ -694,7 +698,7 @@ Sample code : Returns **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<Identifier>** -# read_variable_declarations +## read_variable_declarations Reads a list of variables declarations @@ -712,7 +716,7 @@ Sample code : Returns **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<Variable> | [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<Assign>)** Returns an array composed by a list of variables, or assign values -# read_variable +## read_variable Reads a variable @@ -730,11 +734,11 @@ Some samples of parsed code : $var->func()->property // chained calls ``` -# read_encaps_var_offset +## read_encaps_var_offset -# read_reference_variable +## read_reference_variable ```ebnf reference_variable ::= simple_variable ('[' OFFSET ']')* | '{' EXPR '}' @@ -747,7 +751,7 @@ Some samples of parsed code : $foo[123]{1}; // gets the 2nd char from the 123 array entry -# read_simple_variable +## read_simple_variable ```ebnf simple_variable ::= T_VARIABLE | '$' '{' expr '}' | '$' simple_variable diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 000000000..6d72fb1b6 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,364 @@ +/*! + * Copyright (C) 2017 Glayzzle (BSD3 License) + * @authors https://github.com/glayzzle/php-parser/graphs/contributors + * @url http://glayzzle.com + */ + +declare module "php-parser" { + /** + * Token items + */ + const enum TokenEnum { + T_HALT_COMPILER = 101, + T_USE = 102, + T_ENCAPSED_AND_WHITESPACE = 103, + T_OBJECT_OPERATOR = 104, + T_STRING = 105, + T_DOLLAR_OPEN_CURLY_BRACES = 106, + T_STRING_VARNAME = 107, + T_CURLY_OPEN = 108, + T_NUM_STRING = 109, + T_ISSET = 110, + T_EMPTY = 111, + T_INCLUDE = 112, + T_INCLUDE_ONCE = 113, + T_EVAL = 114, + T_REQUIRE = 115, + T_REQUIRE_ONCE = 116, + T_NAMESPACE = 117, + T_NS_SEPARATOR = 118, + T_AS = 119, + T_IF = 120, + T_ENDIF = 121, + T_WHILE = 122, + T_DO = 123, + T_FOR = 124, + T_SWITCH = 125, + T_BREAK = 126, + T_CONTINUE = 127, + T_RETURN = 128, + T_GLOBAL = 129, + T_STATIC = 130, + T_ECHO = 131, + T_INLINE_HTML = 132, + T_UNSET = 133, + T_FOREACH = 134, + T_DECLARE = 135, + T_TRY = 136, + T_THROW = 137, + T_GOTO = 138, + T_FINALLY = 139, + T_CATCH = 140, + T_ENDDECLARE = 141, + T_LIST = 142, + T_CLONE = 143, + T_PLUS_EQUAL = 144, + T_MINUS_EQUAL = 145, + T_MUL_EQUAL = 146, + T_DIV_EQUAL = 147, + T_CONCAT_EQUAL = 148, + T_MOD_EQUAL = 149, + T_AND_EQUAL = 150, + T_OR_EQUAL = 151, + T_XOR_EQUAL = 152, + T_SL_EQUAL = 153, + T_SR_EQUAL = 154, + T_INC = 155, + T_DEC = 156, + T_BOOLEAN_OR = 157, + T_BOOLEAN_AND = 158, + T_LOGICAL_OR = 159, + T_LOGICAL_AND = 160, + T_LOGICAL_XOR = 161, + T_SL = 162, + T_SR = 163, + T_IS_IDENTICAL = 164, + T_IS_NOT_IDENTICAL = 165, + T_IS_EQUAL = 166, + T_IS_NOT_EQUAL = 167, + T_IS_SMALLER_OR_EQUAL = 168, + T_IS_GREATER_OR_EQUAL = 169, + T_INSTANCEOF = 170, + T_INT_CAST = 171, + T_DOUBLE_CAST = 172, + T_STRING_CAST = 173, + T_ARRAY_CAST = 174, + T_OBJECT_CAST = 175, + T_BOOL_CAST = 176, + T_UNSET_CAST = 177, + T_EXIT = 178, + T_PRINT = 179, + T_YIELD = 180, + T_YIELD_FROM = 181, + T_FUNCTION = 182, + T_DOUBLE_ARROW = 183, + T_DOUBLE_COLON = 184, + T_ARRAY = 185, + T_CALLABLE = 186, + T_CLASS = 187, + T_ABSTRACT = 188, + T_TRAIT = 189, + T_FINAL = 190, + T_EXTENDS = 191, + T_INTERFACE = 192, + T_IMPLEMENTS = 193, + T_VAR = 194, + T_PUBLIC = 195, + T_PROTECTED = 196, + T_PRIVATE = 197, + T_CONST = 198, + T_NEW = 199, + T_INSTEADOF = 200, + T_ELSEIF = 201, + T_ELSE = 202, + T_ENDSWITCH = 203, + T_CASE = 204, + T_DEFAULT = 205, + T_ENDFOR = 206, + T_ENDFOREACH = 207, + T_ENDWHILE = 208, + T_CONSTANT_ENCAPSED_STRING = 209, + T_LNUMBER = 210, + T_DNUMBER = 211, + T_LINE = 212, + T_FILE = 213, + T_DIR = 214, + T_TRAIT_C = 215, + T_METHOD_C = 216, + T_FUNC_C = 217, + T_NS_C = 218, + T_START_HEREDOC = 219, + T_END_HEREDOC = 220, + T_CLASS_C = 221, + T_VARIABLE = 222, + T_OPEN_TAG = 223, + T_OPEN_TAG_WITH_ECHO = 224, + T_CLOSE_TAG = 225, + T_WHITESPACE = 226, + T_COMMENT = 227, + T_DOC_COMMENT = 228, + T_ELLIPSIS = 229, + T_COALESCE = 230, + T_POW = 231, + T_POW_EQUAL = 232, + T_SPACESHIP = 233 + } + + /** + * The tokens dictionnary + */ + interface TokenDefinition { + /** List of token names as texts */ + values: String[], + /** Define tokens */ + names: TokenEnum[] + } + + /** + * The token structure + */ + interface Token extends Array { + // token name + 0: String; + // the token value + 1: TokenEnum; + // the current line + 2: Number + } + + /** + * Each Position object consists of a line number (1-indexed) and a column number (0-indexed): + */ + interface Position { + line: Number; + column: Number; + offset: Number; + } + + /** + * Defines the location of the node (with it's source contents as string) + */ + interface Location { + source: string; + start: Position; + end: Position; + } + + /** + * + */ + interface Node { + kind: String; + loc: Location; + } + + /** + * Error node + */ + interface ParserError extends Node { + message: String; + token: Token; + line: Number; + expected: any; + } + + /** + * A block statement, i.e., a sequence of statements surrounded by braces. + */ + interface Block extends Node { + children: Node[]; + } + + /** + * The main root node + */ + interface Program extends Block { + errors: ParserError[]; + } + + interface Parser { + lexer: Lexer; + ast: AST; + token: TokenEnum; + prev: TokenEnum; + debug: Boolean; + extractDoc: Boolean; + suppressErrors: Boolean; + getTokenName(token:TokenEnum): String; + parse(code: String, filename: String): Program; + raiseError(message: String, msgExpect: String, expect: any, token: TokenEnum): ParserError; + error(expect: String): ParserError; + node(kind:String): Node; + expectEndOfStatement(): Boolean; + showlog(): Parser; + expect(token:TokenEnum): Boolean; + expect(tokens:TokenEnum[]): Boolean; + text(): String; + next(): Parser; + ignoreComments(): Parser; + nextWithComments(): Parser; + is(type: String): Boolean; + // @todo other parsing functions ... + } + + interface KeywordsDictionnary { + [index: string]: TokenEnum + } + + interface yylloc { + first_offset: Number; + first_line: Number; + first_column: Number; + last_line: Number; + last_column: Number; + } + + interface LexerState { + yytext: String; + offset: Number; + yylineno: Number; + yyprevcol: Number; + yylloc: yylloc; + } + + interface Lexer { + debug: Boolean; + all_tokens: Boolean; + comment_tokens: Boolean; + mode_eval: Boolean; + asp_tags: Boolean; + short_tags: Boolean; + keywords: KeywordsDictionnary; + castKeywords: KeywordsDictionnary; + setInput(input:String): Lexer; + input(size:Number): String; + unput(size:Number): Lexer; + tryMatch(match:String): Boolean; + tryMatchCaseless(match:String): Boolean; + ahead(size:Number): String; + consume(size:Number): Lexer; + getState(): LexerState; + setState(state:LexerState): Lexer; + appendToken(value:TokenEnum, ahead:Number): Lexer; + lex(): TokenEnum; + begin(state:String): Lexer; + popState(): String; + next(): TokenEnum; + // @todo other lexer functions ... + } + + + interface AST { + /** + * + */ + withPositions: Boolean; + /** + * Option, if true extracts original source code attached to the node (by default false) + */ + withSource: Boolean; + /** + * Constructor + */ + constructor(withPositions:Boolean, withSource:Boolean): AST; + constructor(withPositions:Boolean): AST; + constructor(): AST; + /** + * Create a position node from specified parser + * including it's lexer current state + */ + position(parser:Parser): Position; + /** + * Prepares an AST node + */ + prepare(kind:String, parser:Parser): Function; + } + + /** + * List of options / extensions + */ + interface Options { + ast?: { + withPositions?: Boolean; + withSource?: Boolean; + }; + lexer?: { + debug?: Boolean; + all_tokens?: Boolean; + comment_tokens?: Boolean; + mode_eval?: Boolean; + asp_tags?: Boolean; + short_tags?: Boolean; + }; + parser?: { + debug?: Boolean; + extractDoc?: Boolean; + suppressErrors?: Boolean; + }; + } + + /** + * Initialise a new parser instance with the specified options + */ + export default class Engine { + // ----- STATIC HELPERS + static create(options?: Options) : Engine; + static parseEval(buffer: String, options: Options) : Program; + static parseEval(buffer: String) : Program; + static parseCode(buffer: String, filename: String, options: Options) : Program; + static parseCode(buffer: String, options: Options) : Program; + static parseCode(buffer: String) : Program; + static tokenGetAll(buffer: String, options: Options) : Token[]; + static tokenGetAll(buffer: String) : Token[]; + // ----- INSTANCE FUNCTIONS + ast: AST; + lexer: Lexer; + parser: Parser; + tokens: TokenDefinition; + constructor(options?: Options); + parseEval(buffer: String) : Program; + parseCode(buffer: String, filename: String) : Program; + parseCode(buffer: String) : Program; + tokenGetAll(buffer: String) : Token[]; + } +} diff --git a/package.json b/package.json index 39741b26b..eacc53478 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "php-parser", - "version": "1.0.2", - "description": "Parse PHP 5/7 code and returns its AST", + "version": "2.0.0", + "description": "Parse PHP code and returns its AST", "main": "src/index.js", "scripts": { "test": "node node_modules/mocha/bin/mocha test --stack-size=5000", @@ -21,6 +21,10 @@ ], "author": "Ioan CHIRIAC", "license": "BSD-3-Clause", + "xo": { + "space": 2, + "envs": ["node", "mocha"] + }, "devDependencies": { "coveralls": "^2.11.15", "grunt": "^1.0.1", @@ -28,7 +32,7 @@ "grunt-contrib-uglify": "^2.0.0", "grunt-documentation": "^1.2.1", "istanbul": "0.3.x", - "mocha": "^2.0.1", - "should": "^8.3.0" + "mocha": "^3.2.0", + "should": "^11.2.0" } } diff --git a/src/ast.js b/src/ast.js index 506fd3eaf..5db8bc72b 100644 --- a/src/ast.js +++ b/src/ast.js @@ -12,7 +12,7 @@ var Position = require('./ast/position'); * * - [Location](#location) * - [Position](#position) - * - [Node](#Node) + * - [Node](#node) * - [Identifier](#identifier) * - [TraitUse](#traituse) * - [TraitAlias](#traitalias) @@ -46,7 +46,6 @@ var Position = require('./ast/position'); * - [Number](#number) * - [Inline](#inline) * - [Magic](#magic) - * - [Shell](#shell) * - [Nowdoc](#nowdoc) * - [Encapsed](#encapsed) * - [Statement](#statement) @@ -115,6 +114,7 @@ var AST = function(withPositions, withSource) { * including it's lexer current state * @param {Parser} * @return {Position} + * @private */ AST.prototype.position = function(parser) { return new Position( @@ -172,6 +172,21 @@ AST.prototype.prepare = function(kind, parser) { } var result = Object.create(node.prototype); node.apply(result, args); + if ( + result.kind === 'bin' && + result.right && + typeof result.right.precedence === 'function' + ) { + var out = result.right.precedence(result); + if (out) { // shift with precedence + result = out; + } + } else if (result.kind === 'unary') { + var out = result.precedence(result.what); + if (out) { // shift with precedence + result = out; + } + } return result; }; }; @@ -242,7 +257,6 @@ AST.prototype.prepare = function(kind, parser) { require('./ast/propertylookup'), require('./ast/retif'), require('./ast/return'), - require('./ast/shell'), require('./ast/silent'), require('./ast/statement'), require('./ast/static'), diff --git a/src/ast/bin.js b/src/ast/bin.js index dfdc7af48..e224131fa 100644 --- a/src/ast/bin.js +++ b/src/ast/bin.js @@ -13,8 +13,8 @@ var binOperatorsPrecedence = [ ['or'], ['xor'], ['and'], - // TODO: assignment - // TODO: ternary ? : + // TODO: assignment / not sure that PHP allows this with expressions + ['retif'], ['??'], ['||'], ['&&'], @@ -26,21 +26,13 @@ var binOperatorsPrecedence = [ ['<<', '>>'], ['+', '-', '.'], ['*', '/', '%'], - // TODO: unary ! + ['!'], ['instanceof'], - // TODO: unary ++, --, ~, @, typecasts + // TODO: typecasts // TODO: [ (array) // TODO: clone, new ]; -// define nodes shifting -var precedence = {}; -binOperatorsPrecedence.forEach(function (list, index) { - list.forEach(function (operator) { - precedence[operator] = index + 1; - }); -}); - /* x OP1 (y OP2 z) z OP1 (x OP2 y) @@ -56,26 +48,28 @@ z OP2 (x OP1 y) */ var Bin = Operation.extends(function Bin(type, left, right, location) { Operation.apply(this, [KIND, location]); - if (right && right.kind === 'bin') { - var lLevel = precedence[type]; - var rLevel = precedence[right.type]; - if (lLevel && rLevel && rLevel < lLevel) { - // shift precedence - var buffer = right.right; - right.right = right.left; - right.left = left; - left = buffer; - buffer = right.type; - right.type = type; - type = buffer; - buffer = left; - left = right; - right = buffer; - } - } this.type = type; this.left = left; this.right = right; }); +Bin.prototype.precedence = function(node) { + var lLevel = Bin.precedence[node.type]; + var rLevel = Bin.precedence[this.type]; + if (lLevel && rLevel && rLevel < lLevel) { + // shift precedence + node.right = this.left; + this.left = node; + return this; + } +}; + +// define nodes shifting +Bin.precedence = {}; +binOperatorsPrecedence.forEach(function (list, index) { + list.forEach(function (operator) { + Bin.precedence[operator] = index + 1; + }); +}); + module.exports = Bin; diff --git a/src/ast/catch.js b/src/ast/catch.js index a6e1cda1c..fe8f48253 100644 --- a/src/ast/catch.js +++ b/src/ast/catch.js @@ -10,7 +10,7 @@ var KIND = 'catch'; /** * Defines a catch statement - * @constructor Try + * @constructor Catch * @extends {Statement} * @property {Identifier[]} what * @property {Variable} variable diff --git a/src/ast/closure.js b/src/ast/closure.js index 2e5ea9364..05ebcf34f 100644 --- a/src/ast/closure.js +++ b/src/ast/closure.js @@ -12,13 +12,15 @@ var KIND = 'closure'; * @constructor Closure * @extends {Statement} * @property {Parameter[]} arguments + * @property {Variable[]} uses * @property {Identifier} type * @property {boolean} byref * @property {boolean} nullable * @property {Block|null} body */ -var Closure = Statement.extends(function Closure(args, byref, type, nullable, location) { +var Closure = Statement.extends(function Closure(args, byref, uses, type, nullable, location) { Statement.apply(this, [KIND, location]); + this.uses = uses; this.arguments = args; this.byref = byref; this.type = type; diff --git a/src/ast/encapsed.js b/src/ast/encapsed.js index 85eb25505..1ca532525 100644 --- a/src/ast/encapsed.js +++ b/src/ast/encapsed.js @@ -53,4 +53,15 @@ Encapsed.TYPE_SHELL = 'shell'; */ Encapsed.TYPE_HEREDOC = 'heredoc'; +/** + * The node contains a list of constref / variables / expr : + * ```php + * bar_$baz; + * ``` + * @constant {String} TYPE_OFFSET - `offset` + */ +Encapsed.TYPE_OFFSET = 'offset'; + + module.exports = Encapsed; diff --git a/src/ast/namespace.js b/src/ast/namespace.js index c606561ef..3ca6bf6da 100644 --- a/src/ast/namespace.js +++ b/src/ast/namespace.js @@ -12,16 +12,12 @@ var KIND = 'namespace'; * The main program node * @constructor Namespace * @extends {Block} - * @property {Identifier} name + * @property {String} name * @property {Boolean} withBrackets */ var Namespace = Block.extends(function Namespace(name, children, withBrackets, location) { Block.apply(this, [KIND, children, location]); - if (name instanceof Identifier) { - this.name = name; - } else { - this.name = new Identifier(name); - } + this.name = name; this.withBrackets = withBrackets || false; }); diff --git a/src/ast/retif.js b/src/ast/retif.js index dafcf4052..77470424c 100644 --- a/src/ast/retif.js +++ b/src/ast/retif.js @@ -7,6 +7,8 @@ var Statement = require('./statement'); var KIND = 'retif'; +var Bin = require('./bin'); +var PRECEDENCE = Bin.precedence[KIND]; /** * Defines a short if statement that returns a value @@ -23,4 +25,21 @@ var RetIf = Statement.extends(function RetIf(test, trueExpr, falseExpr, location this.falseExpr = falseExpr; }); +/** + * Handles precedence over items + */ +RetIf.prototype.precedence = function(node) { + var what = node.kind === 'bin' ? node.type : node.kind; + var lLevel = Bin.precedence[what]; + if (lLevel && PRECEDENCE < lLevel) { + if (node.kind === 'bin') { + node.right = this.test; + this.test = node; + return this; + } else { + throw new Error('@todo ' + node.kind); + } + } +}; + module.exports = RetIf; diff --git a/src/ast/shell.js b/src/ast/shell.js deleted file mode 100644 index f091b54a5..000000000 --- a/src/ast/shell.js +++ /dev/null @@ -1,20 +0,0 @@ -/*! - * Copyright (C) 2017 Glayzzle (BSD3 License) - * @authors https://github.com/glayzzle/php-parser/graphs/contributors - * @url http://glayzzle.com - */ - -var Literal = require('./literal'); -var KIND = 'shell'; - -/** - * Defines inline html output (treated as echo output) - * @constructor Shell - * @extends {Literal} - * @see http://php.net/manual/fr/language.operators.execution.php - */ -var Shell = Literal.extends(function Shell(value, location) { - Literal.apply(this, [KIND, value, location]); -}); - -module.exports = Shell; diff --git a/src/ast/unary.js b/src/ast/unary.js index bfd8e3422..e83827e54 100644 --- a/src/ast/unary.js +++ b/src/ast/unary.js @@ -21,4 +21,16 @@ var Unary = Operation.extends(function Unary(type, what, location) { this.what = what; }); +Unary.prototype.precedence = function(node) { + if (node.kind === 'bin') { + this.what = node.left; + node.left = this; + return node; + } else if (node.kind === 'retif') { + this.what = node.test; + node.test = this; + return node; + } +}; + module.exports = Unary; diff --git a/src/ast/usegroup.js b/src/ast/usegroup.js index 0d35e3222..20c8406da 100644 --- a/src/ast/usegroup.js +++ b/src/ast/usegroup.js @@ -11,7 +11,7 @@ var KIND = 'usegroup'; * Defines a use statement (with a list of use items) * @constructor UseGroup * @extends {Statement} - * @property {Identifier|null} name + * @property {String|null} name * @property {String|null} type - Possible value : function, const * @property {UseItem[]} item * @see {Namespace} diff --git a/src/ast/useitem.js b/src/ast/useitem.js index aee62a2e8..50d514c9f 100644 --- a/src/ast/useitem.js +++ b/src/ast/useitem.js @@ -11,7 +11,7 @@ var KIND = 'useitem'; * Defines a use statement (from namespace) * @constructor UseItem * @extends {Statement} - * @property {Identifier} name + * @property {String} name * @property {String|null} type - Possible value : function, const * @property {String|null} alias * @see {Namespace} diff --git a/src/lexer.js b/src/lexer.js index ec880dfe2..7cb31f57c 100644 --- a/src/lexer.js +++ b/src/lexer.js @@ -346,6 +346,9 @@ lexer.prototype.lex = function() { this.yylloc.prev_line = this.yylloc.first_line; this.yylloc.prev_column = this.yylloc.first_column; } + /*else if (this.yylloc.prev_offset === this.offset && this.offset !== this.size) { + throw new Error('Infinite loop @ ' + this.offset + ' / ' + this.size); + }*/ return token; }; @@ -409,11 +412,13 @@ lexer.prototype.next = function () { } else { tName = '"'+tName+'"'; } - console.log( - tName, - 'from ' + this.yylloc.first_line + ',' + this.yylloc.first_column, - ' - to ' + this.yylloc.last_line + ',' + this.yylloc.last_column + var e = new Error( + tName + + '\tfrom ' + this.yylloc.first_line + ',' + this.yylloc.first_column + + '\t - to ' + this.yylloc.last_line + ',' + this.yylloc.last_column + + '\t"'+this.yytext+'"' ); + console.log(e.stack); } return token; }; diff --git a/src/lexer/numbers.js b/src/lexer/numbers.js index 4b40432b2..5a649e29d 100644 --- a/src/lexer/numbers.js +++ b/src/lexer/numbers.js @@ -56,14 +56,14 @@ module.exports = { this.consume_LNUM(); return this.tok.T_DNUMBER; } else { - this.unput(3); + if (ch) this.unput(3); break; } } else if (this.is_NUM()) { this.consume_LNUM(); return this.tok.T_DNUMBER; } else { - this.unput(2); + if (ch) this.unput(2); break; } } else { @@ -116,7 +116,7 @@ module.exports = { while(this.offset < this.size) { ch = this.input(); if (ch !== '0' && ch !== '1') { - this.unput(1); + if (ch) this.unput(1); break; } } diff --git a/src/lexer/property.js b/src/lexer/property.js index 55b75c8b6..7b94fa49c 100644 --- a/src/lexer/property.js +++ b/src/lexer/property.js @@ -12,7 +12,7 @@ module.exports = { // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1296 return this.tok.T_OBJECT_OPERATOR; } - this.unput(1); + if (ch) this.unput(1); } else if (this.is_LABEL_START()) { // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1300 this.consume_LABEL(); @@ -21,7 +21,7 @@ module.exports = { } // https://github.com/php/php-src/blob/master/Zend/zend_language_scanner.l#L1306 this.popState(); - this.unput(1); + if (ch) this.unput(1); return false; }, matchST_LOOKING_FOR_VARNAME: function() { @@ -39,7 +39,7 @@ module.exports = { return false; } } else { - this.unput(1); + if (ch) this.unput(1); this.popState(); this.begin('ST_IN_SCRIPTING'); // console.log(this.yylineno, 'ST_LOOKING_FOR_VARNAME', this._input[this.offset - 1], this.conditionStack); diff --git a/src/lexer/scripting.js b/src/lexer/scripting.js index a471596e3..943f6d0c5 100644 --- a/src/lexer/scripting.js +++ b/src/lexer/scripting.js @@ -66,11 +66,11 @@ module.exports = { return '}'; default: if (ch === '.') { - this.input(); + ch = this.input(); if (this.is_NUM()) { return this.consume_NUM(); } else { - this.unput(1); + if (ch) this.unput(1); } } if (this.is_NUM()) { diff --git a/src/lexer/strings.js b/src/lexer/strings.js index 9f9b29d91..14cad6ed0 100644 --- a/src/lexer/strings.js +++ b/src/lexer/strings.js @@ -405,7 +405,7 @@ module.exports = { return this.tok.T_CURLY_OPEN; } } - this.unput(1); + if (ch) this.unput(1); } ch = this.input(); } diff --git a/src/lexer/tokens.js b/src/lexer/tokens.js index d4c388609..07da431a4 100644 --- a/src/lexer/tokens.js +++ b/src/lexer/tokens.js @@ -23,7 +23,7 @@ module.exports = { return this.ST_DOUBLE_QUOTES(); } else if (ch === '\'') { return this.T_CONSTANT_ENCAPSED_STRING(); - } else { + } else if (ch) { this.unput(1); } } diff --git a/src/parser.js b/src/parser.js index a4af965c9..02f5554a6 100644 --- a/src/parser.js +++ b/src/parser.js @@ -256,7 +256,7 @@ parser.prototype.expectEndOfStatement = function() { }; /** outputs some debug information on current token **/ -var ignoreStack = ['parser.next', 'parser.nextWithComments']; +var ignoreStack = ['parser.next', 'parser.ignoreComments', 'parser.nextWithComments']; parser.prototype.showlog = function() { var stack = (new Error()).stack.split('\n'); var line; diff --git a/src/parser/class.js b/src/parser/class.js index fa2e6cf14..a294d65c4 100644 --- a/src/parser/class.js +++ b/src/parser/class.js @@ -148,7 +148,7 @@ module.exports = { function read_variable_declaration() { var result = this.node('property'); this.expect(this.tok.T_VARIABLE); - var name = this.text(); + var name = this.text().substring(1); // ignore $ this.next(); if (this.token === ';' || this.token === ',') { return result(name, null, flags); diff --git a/src/parser/expr.js b/src/parser/expr.js index fc9e26e48..ef85fe208 100644 --- a/src/parser/expr.js +++ b/src/parser/expr.js @@ -141,9 +141,7 @@ module.exports = { if (this.token === '`') { // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L1048 - return this.node('shell')( - this.next().read_encapsed_string('`') - ); + return this.next().read_encapsed_string('`'); } if (this.token === this.tok.T_LIST) { @@ -438,8 +436,11 @@ module.exports = { if (this.token === this.tok.T_CLASS) { var what = this.node('class'); // Annonymous class declaration - var propExtends = null, propImplements = null, body = null; - if (this.next().token == this.tok.T_EXTENDS) { + var propExtends = null, propImplements = null, body = null, args = []; + if (this.next().token === '(') { + args = this.read_function_argument_list(); + } + if (this.token == this.tok.T_EXTENDS) { propExtends = this.next().read_namespace_name(); } if (this.token == this.tok.T_IMPLEMENTS) { @@ -455,7 +456,7 @@ module.exports = { ,propImplements ,body ,[0, 0, 0] - ), [] + ), args ); } else { // Already existing class diff --git a/src/parser/function.js b/src/parser/function.js index 113b83c61..be1d410cc 100644 --- a/src/parser/function.js +++ b/src/parser/function.js @@ -44,6 +44,9 @@ module.exports = { } else { if (this.expect('{')) { result.body = this.read_code_block(false); + if (result.loc && result.body.loc) { + result.loc.end = result.body.loc.end; + } } if (flag) { result.parseFlags(flag); @@ -103,18 +106,16 @@ module.exports = { * ``` */ ,read_lexical_var: function() { - var result = [false, null]; + var result = this.node('variable'); + var isRef = false; if (this.token === '&') { - result[0] = true; + isRef = true; this.next(); } - if (this.token === this.tok.T_VARIABLE) { - result[1] = this.text(); - this.next(); - } else { - this.expect(['&', this.tok.T_VARIABLE]); - } - return result; + this.expect(this.tok.T_VARIABLE); + var name = this.text().substring(1); + this.next(); + return result(name, isRef); } /** * reads a list of parameters @@ -162,7 +163,7 @@ module.exports = { var isRef = this.is_reference(); var isVariadic = this.is_variadic(); if (this.expect(this.tok.T_VARIABLE)) { - name = this.text(); + name = this.text().substring(1); this.next(); } if (this.token == '=') { diff --git a/src/parser/if.js b/src/parser/if.js index e37edee95..3731addb5 100644 --- a/src/parser/if.js +++ b/src/parser/if.js @@ -9,7 +9,7 @@ module.exports = { * Reads an IF statement * * ```ebnf - * if ::= '(' expr ')' ':' ... + * if ::= T_IF '(' expr ')' ':' ... * ``` */ read_if: function() { @@ -25,8 +25,7 @@ module.exports = { this.next(); body = this.node('block'); var items = []; - while(this.token != this.EOF && this.token !== this.tok.T_ENDIF) { - this.ignoreComments(); + while(this.token !== this.EOF && this.token !== this.tok.T_ENDIF) { if (this.token === this.tok.T_ELSEIF) { alternate = this.next().read_elseif_short(); break; @@ -37,10 +36,13 @@ module.exports = { items.push(this.read_inner_statement()); } body = body(null, items); - if (this.ignoreComments().expect(this.tok.T_ENDIF)) this.next(); + this.expect(this.tok.T_ENDIF) && this.next(); this.expectEndOfStatement(); } else { body = this.read_statement(); + /** + * ignore : if (..) { } /* *./ else { } + */ this.ignoreComments(); if (this.token === this.tok.T_ELSEIF) { alternate = this.next().read_if(); @@ -54,9 +56,9 @@ module.exports = { * reads an if expression : '(' expr ')' */ read_if_expr: function() { - if (this.expect('(')) this.next(); + this.expect('(') && this.next(); var result = this.read_expr(); - if (this.expect(')')) this.next(); + this.expect(')') && this.next(); return result; }, /** diff --git a/src/parser/loops.js b/src/parser/loops.js index 6e9662db9..325005a56 100644 --- a/src/parser/loops.js +++ b/src/parser/loops.js @@ -44,7 +44,7 @@ module.exports = { body = null ; body = this.read_statement(); - if (this.expect(this.tok.T_WHILE)) { + if (this.ignoreComments().expect(this.tok.T_WHILE)) { if (this.next().expect('(')) this.next(); test = this.read_expr(); if (this.expect(')')) this.next(); @@ -113,7 +113,7 @@ module.exports = { shortForm = false; if (this.expect('(')) this.next(); source = this.read_expr(); - if (this.expect(this.tok.T_AS)) { + if (this.ignoreComments().expect(this.tok.T_AS)) { this.next(); value = this.read_foreach_variable(); if (this.token === this.tok.T_DOUBLE_ARROW) { diff --git a/src/parser/namespace.js b/src/parser/namespace.js index c8ae8f4af..c9c13b65b 100644 --- a/src/parser/namespace.js +++ b/src/parser/namespace.js @@ -22,17 +22,21 @@ module.exports = { this.expect(this.tok.T_NAMESPACE) && this.next(); if (this.token == '{') { this.currentNamespace = ['']; - return result([''], this.read_code_block(true), true); + var body = this.nextWithComments().read_top_statements(); + this.expect('}') && this.nextWithComments(); + return result([''], body, true); } else { var name = this.read_namespace_name(); if (this.token == ';') { this.currentNamespace = name; var body = this.nextWithComments().read_top_statements(); this.expect(this.EOF); - return result(name, body); + return result(name.name, body, false); } else if (this.token == '{') { this.currentNamespace = name; - return result(name, this.read_code_block(true), true); + var body = this.nextWithComments().read_top_statements(); + this.expect('}') && this.nextWithComments(); + return result(name.name, body, true); } else if (this.token === '(') { // resolve ambuiguity between namespace & function call name.resolution = this.ast.identifier.RELATIVE_NAME; @@ -46,7 +50,7 @@ module.exports = { this.currentNamespace = name; var body = this.read_top_statements(); this.expect(this.EOF); - return result(name, body); + return result(name, body, false); } } } @@ -93,7 +97,7 @@ module.exports = { if (this.token === ',') { items = items.concat(this.next().read_use_declarations(false)); } else if (this.token === '{') { - name = items[0].name; + name = items[0].name.name; items = this.next().read_use_declarations(type === null); this.expect('}') && this.next(); } @@ -113,7 +117,7 @@ module.exports = { if (typed) type = this.read_use_type(); var name = this.read_namespace_name(); var alias = this.read_use_alias(); - return result(name, alias, type); + return result(name.name, alias, type); } /** * Reads a list of use declarations diff --git a/src/parser/scalar.js b/src/parser/scalar.js index d3f729132..27217604d 100644 --- a/src/parser/scalar.js +++ b/src/parser/scalar.js @@ -167,7 +167,7 @@ module.exports = { else if (this.token === this.tok.T_DOLLAR_OPEN_CURLY_BRACES) { var name = null; if (this.next().token === this.tok.T_STRING_VARNAME) { - var varName = this.text().substring(1); + var varName = this.text(); name = this.node('variable'); this.next(); name = name(varName, false); diff --git a/src/parser/statement.js b/src/parser/statement.js index 51702098b..eeb0ee35d 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -255,9 +255,9 @@ module.exports = { return result(args); case this.tok.T_INLINE_HTML: - var result = this.node('inline')(this.text()); + var result = this.node('inline'), value = this.text(); this.next(); - return result; + return result(value); case this.tok.T_UNSET: var result = this.node('unset'); @@ -293,7 +293,7 @@ module.exports = { this.expect('}') && this.next(); mode = this.ast.declare.MODE_BLOCK; } else { - this.expect(';') && this.next(); + this.expect(';') && this.nextWithComments(); while(this.token != this.EOF && this.token !== this.tok.T_DECLARE) { // @todo : check declare_statement from php / not valid body.push(this.read_top_statement()); diff --git a/src/parser/try.js b/src/parser/try.js index 2dc238ffb..02dcb164a 100644 --- a/src/parser/try.js +++ b/src/parser/try.js @@ -22,10 +22,9 @@ module.exports = { body, catches = [] ; - body = this.nextWithComments().read_statement(); - this.ignoreComments(); + body = this.next().read_statement(); // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L455 - while(this.token === this.tok.T_CATCH) { + while(this.ignoreComments().token === this.tok.T_CATCH) { var item = this.node('catch'), what = [], variable = null; this.next().expect('(') && this.next(); what = this.read_list( @@ -33,11 +32,12 @@ module.exports = { ); variable = this.read_variable(true, false, false); this.expect(')'); - catches.push(item(this.next().read_statement(), what, variable)); - this.ignoreComments(); + catches.push( + item(this.next().read_statement(), what, variable) + ); } if (this.token === this.tok.T_FINALLY) { - always = this.nextWithComments().read_statement(); + always = this.next().read_statement(); } return result(body, catches, always); } diff --git a/src/parser/variable.js b/src/parser/variable.js index 43029e4dc..d35e07b95 100644 --- a/src/parser/variable.js +++ b/src/parser/variable.js @@ -136,15 +136,26 @@ module.exports = { this.next(); what = what(name); if (this.token === this.tok.T_VARIABLE) { - // @fixme : create encapsed var node + var inner = this.node('variable'); name = this.text().substring(1); this.next(); - // fix $obj->var_$prop - what = ['bin', '.', what, ['var', name]]; + what = this.node('encapsed')( + [what, inner(name, false)], + 'offset' + ); + if (what.loc && what.value[0].loc) { + what.loc.start = what.value[0].loc.start; + } } else if (this.token === '{') { - // fix $obj->var_{$prop} - what = ['bin', '.', what, this.next().read_expr()]; + var expr = this.next().read_expr(); this.expect('}') && this.next(); + what = this.node('encapsed')( + [what, expr], + 'offset' + ); + if (what.loc && what.value[0].loc) { + what.loc.start = what.value[0].loc.start; + } } break; case this.tok.T_VARIABLE: diff --git a/test/arrayTests.js b/test/arrayTests.js index 565626488..42ccc052c 100644 --- a/test/arrayTests.js +++ b/test/arrayTests.js @@ -10,10 +10,10 @@ describe('Array without keys', function() { ']($foo)[$foo->bar()[1]]->foo()' ].join('\r'), { parser: { - debug: true + // debug: true } }); - console.log(ast); + // @todo console.log(ast); }); describe('of strings', function () { diff --git a/test/astTests.js b/test/astTests.js index 256837d8a..6f4330d74 100644 --- a/test/astTests.js +++ b/test/astTests.js @@ -47,7 +47,8 @@ describe('Test AST structure', function() { }); it('test shell', function() { var ast = parser.parseEval('echo `ls -larth`;'); - ast.children[0].arguments[0].kind.should.be.exactly('shell'); + ast.children[0].arguments[0].kind.should.be.exactly('encapsed'); + ast.children[0].arguments[0].type.should.be.exactly('shell'); }); it('test clone', function() { var ast = parser.parseEval('$a = clone $var;'); diff --git a/test/commentTests.js b/test/commentTests.js index e27ea355d..25b8d6e2c 100644 --- a/test/commentTests.js +++ b/test/commentTests.js @@ -2,6 +2,32 @@ var should = require("should"); var parser = require('../src/index'); describe('Test comments', function() { + + describe('issues', function () { + it('fix #55', function () { + var ast = parser.parseEval([ + 'if (true):', + ' if (true):', + ' // inner statements', + ' endif; // another comment', + 'endif; // 2nd comment' + ].join('\n'), { + parser: { + extractDoc: true, + // debug: true + } + }); + ast.children.length.should.be.exactly(2); + ast.children[0].kind.should.be.exactly('if'); + ast.children[0].body.children.length.should.be.exactly(2); + ast.children[0].body.children[0].kind.should.be.exactly('if'); + ast.children[0].body.children[1].kind.should.be.exactly('doc'); + ast.children[0].body.children[1].lines[0].should.be.exactly('another comment'); + ast.children[1].kind.should.be.exactly('doc'); + ast.children[1].lines[0].should.be.exactly('2nd comment'); + }); + }); + describe('single line comments', function () { var ast = parser.parseEval([ '# some information', @@ -63,7 +89,59 @@ describe('Test comments', function() { body[0].kind.should.be.exactly('doc'); // @todo body[1].kind.should.be.exactly('return'); }); - + it('test if statements', function () { + var ast = parser.parseEval([ + 'if /* ignore */ (/* */ true) /* ignore */ {', + '# inner statement', + '} /* ignore */ else /* ignore */ ', + // else with a inner if single statement : + ' if (true /* ignore */) /* ignore */ {', + ' } /* ignore */ elseif /* ignore */ (/* ignore */ false /* ignore */ /* ignore */) /* ignore */ /* ignore */ {', + ' } /* ignore */ else /* ignore */ {', + ' }', + 'if (false) /* ignore */ : /* ignore */', + '/* ignore */ endif /* ignore */;/* ignore */' + ].join('\n'), { + lexer: { + //debug: true + }, + parser: { + extractDoc: true, + // debug: true + } + }); + ast.children.length.should.be.exactly(3); + ast.children[0].kind.should.be.exactly('if'); + ast.children[1].kind.should.be.exactly('if'); + ast.children[2].kind.should.be.exactly('doc'); + }); + it('test try statements', function () { + var ast = parser.parseEval([ + 'try /* ignore */ {', + '# inner statement', + '} /* dd */ catch(/* zz */ \\Exception /* 1 */ | /* 2 */ \\Foo /* aa */ $e /* bb */) /* dd */ {', + '/* ee */', + '} /* zz */ finally /* yy */ {', + '/* ignore */', + '} // end' + ].join('\n'), { + lexer: { + //debug: true + }, + parser: { + extractDoc: true, + // debug: true + } + }); + ast.children.length.should.be.exactly(2); + ast.children[0].kind.should.be.exactly('try'); + ast.children[0].body.kind.should.be.exactly('block'); + ast.children[0].catches[0].kind.should.be.exactly('catch'); + ast.children[0].catches[0].what[0].name.should.be.exactly('\\Exception'); + ast.children[0].catches[0].what[1].name.should.be.exactly('\\Foo'); + ast.children[0].catches[0].variable.name.should.be.exactly('e'); + ast.children[1].kind.should.be.exactly('doc'); + }); }); describe('test classes', function () { @@ -99,10 +177,10 @@ describe('Test comments', function() { body[0].lines[0].should.be.exactly("@var test"); body[1].kind.should.be.exactly("property"); - body[1].name.should.be.exactly("$test"); + body[1].name.should.be.exactly("test"); body[2].kind.should.be.exactly("property"); - body[2].name.should.be.exactly("$toto"); + body[2].name.should.be.exactly("toto"); body[3].kind.should.be.exactly("doc"); body[3].lines[0].should.be.exactly("ignored comment"); @@ -111,7 +189,7 @@ describe('Test comments', function() { body[4].lines[0].should.be.exactly("@var Class"); body[5].kind.should.be.exactly("property"); - body[5].name.should.be.exactly("$foo"); + body[5].name.should.be.exactly("foo"); body[8].kind.should.be.exactly("method"); body[8].name.should.be.exactly("void"); diff --git a/test/exprTests.js b/test/exprTests.js index 2e0a0fc44..c9239f36a 100644 --- a/test/exprTests.js +++ b/test/exprTests.js @@ -84,10 +84,12 @@ describe('Test expressions', function() { it('test if based returns', function() { var ast = parser.parseEval([ '$a ?? false;', - '$a ? true : false;', + '$a > 5 ? true : false;', '$a ?: false;' ].join('\n')); - // @todo + console.log(ast.children[1]); + ast.children[1].kind.should.be.exactly('retif'); + }); it('test silent', function() { @@ -270,7 +272,7 @@ describe('Test expressions', function() { var dExpr = ast.children[3].right; dExpr.should.have.property('kind', 'bin'); - dExpr.should.deepEqual({ + JSON.parse(JSON.stringify(dExpr)).should.deepEqual({ kind: "bin", left: { kind: "bin", diff --git a/test/functionTests.js b/test/functionTests.js index 3555b1e43..fb7b05f4e 100644 --- a/test/functionTests.js +++ b/test/functionTests.js @@ -4,7 +4,7 @@ var parser = require('../src/index'); describe('Function tests', function() { var ast = parser.parseEval([ 'function &foo($a = 1, callable $b, ?array &...$params) : ?boolean {}', - '$a = function &($b) use($c) : array {', + '$a = function &($b) use(&$c, $d) : array {', ' return true;', '};', '$b = foo(...[1, null, 1, 2, 3]);' @@ -58,10 +58,24 @@ describe('Function tests', function() { }); it('test closure', function () { - // @todo - ast.children[1].right.kind.should.be.exactly('closure'); var fn = ast.children[1].right; + fn.kind.should.be.exactly('closure'); fn.byref.should.be.exactly(true); + fn.uses.length.should.be.exactly(2); + fn.uses[0].kind.should.be.exactly('variable'); + fn.uses[0].name.should.be.exactly('c'); + fn.uses[0].byref.should.be.exactly(true); + fn.uses[1].kind.should.be.exactly('variable'); + fn.uses[1].name.should.be.exactly('d'); + fn.uses[1].byref.should.be.exactly(false); + fn.arguments.length.should.be.exactly(1); + fn.arguments[0].kind.should.be.exactly('parameter'); + fn.arguments[0].name.should.be.exactly('b'); + fn.arguments[0].byref.should.be.exactly(false); + fn.type.kind.should.be.exactly('identifier'); + fn.type.name.should.be.exactly('\\array'); + fn.nullable.should.be.exactly(false); + fn.body.kind.should.be.exactly('block'); }); diff --git a/test/locationTests.js b/test/locationTests.js index 068c389c0..f1c471098 100644 --- a/test/locationTests.js +++ b/test/locationTests.js @@ -11,10 +11,10 @@ describe('Test offsets', function() { }, parser: { extractDoc: true, - debug: true + // debug: true }, lexer: { - debug: true + // debug: true } }); diff --git a/test/precedence.js b/test/precedence.js new file mode 100644 index 000000000..8fa58a2f1 --- /dev/null +++ b/test/precedence.js @@ -0,0 +1,110 @@ +var should = require("should"); +var parser = require('../src/index'); + +/** + * Check precedence by using parenthesis on node B + */ +var checkPrecedence = function(a, b) { + if (!a || !b) return false; + if (b.kind === 'parenthesis') { + b = b.inner; + } + for(var k in b) { + if (b.hasOwnProperty(k)) { + if (!a.hasOwnProperty(k)) return false; + if (typeof b[k] === 'object') { + checkPrecedence(a[k], b[k]); + } else { + a[k].should.be.equal(b[k]); + } + } + } + return true; +}; + +var shouldBeSame = function(a, b) { + var ast = parser.parseEval([ + a + ';', + b + ';' + ].join('\n')); + checkPrecedence(ast.children[0], ast.children[1]).should.be.true(); +}; + +// START TESTS HERE +describe('Test precedence', function() { + it('test *', function() { + shouldBeSame('5 * 3 - 2', '(5 * 3) - 2'); + shouldBeSame('2 - 5 * 3', '2 - (5 * 3)'); + }); + it('test /', function() { + shouldBeSame('5 / 3 + 2', '(5 / 3) + 2'); + shouldBeSame('5 + 3 / 2', '5 + (3 / 2)'); + }); + it('test %', function() { + shouldBeSame('5 % 3 . 2', '(5 % 3) . 2'); + }); + it('test instanceof', function() { + shouldBeSame('3 instanceof 2 * 5', '(3 instanceof 2) * 5'); + }); + it('test <<', function() { + shouldBeSame('1 + 3 << 5', '(1 + 3) << 5'); + }); + it('test ==', function() { + shouldBeSame('1 + 5 == 3', '(1 + 5 ) == 3'); + }); + it('test &', function() { + shouldBeSame('1 == 2 & 3', '(1 == 2) & 3'); + }); + it('test ^', function() { + shouldBeSame('1 & 2 ^ 3', '(1 & 2) ^ 3'); + }); + it('test |', function() { + shouldBeSame('1 ^ 2 | 3', '(1 ^ 2) | 3;'); + }); + it('test &&', function() { + var ast = parser.parseEval([ + '1 | 2 && 3;', + '(1 | 2) && 3;' + ].join('\n')); + checkPrecedence(ast.children[0],ast.children[1]).should.be.true(); + }); + it('test ||', function() { + var ast = parser.parseEval([ + '1 && 2 || 3;', + '(1 && 2) || 3;' + ].join('\n')); + checkPrecedence(ast.children[0], ast.children[1]).should.be.true(); + }); + it('test ??', function() { + var ast = parser.parseEval([ + '1 || 2 ?? 3;', + '(1 || 2) ?? 3;' + ].join('\n')); + checkPrecedence(ast.children[0], ast.children[1]).should.be.true(); + }); + it('test ?:', function() { + shouldBeSame('1 ?? 2 ? 3 : 5', '(1 ?? 2) ? 3 : 5'); + shouldBeSame('1 and 2 ? 3 : 5', '1 and (2 ? 3 : 5)'); + }); + it('test =', function() { + shouldBeSame('5 + $a = 1', '5 + ($a = 1)'); + shouldBeSame('5 XOR $a += 1', '5 XOR ($a += 1)'); + }); + it('test OR', function() { + shouldBeSame('5 XOR 4 OR 3', '(5 XOR 4) OR 3'); + shouldBeSame('5 OR 4 XOR 3', '5 OR (4 XOR 3)'); + }); + it('test XOR', function() { + shouldBeSame('5 AND 4 XOR 3', '(5 AND 4) XOR 3'); + shouldBeSame('5 XOR 4 AND 3', '5 XOR (4 AND 3)'); + }); + it('test AND', function() { + shouldBeSame('5 + 4 AND 3', '(5 + 4) AND 3'); + shouldBeSame('5 AND 4 + 3', '5 AND (4 + 3)'); + }); + it('test unary : !', function() { + shouldBeSame('!4 instanceof 3', '(!4) instanceof 3'); + shouldBeSame('!4 + 5 instanceof 3', '(!4) + (5 instanceof 3)'); + shouldBeSame('6 + !4 + 5', '6 + (!4) + 5'); + }); +}); diff --git a/test/scalarTests.js b/test/scalarTests.js index 5bdc6eee8..27e6d2ded 100644 --- a/test/scalarTests.js +++ b/test/scalarTests.js @@ -7,11 +7,10 @@ describe('Test scalar statements', function() { '$a = foo::ref[-5];' ].join('\n'), { parser: { - debug: true + //debug: true } }); // @todo assert console.log(ast); - }); it('dereferencable', function() { var ast = parser.parseEval([ @@ -21,9 +20,9 @@ describe('Test scalar statements', function() { '$d = (function($a) { return $a * 2; })(5);', ].join('\n'), { parser: { - debug: true + // debug: true } }); - + // @todo }); }); diff --git a/test/stringTests.js b/test/stringTests.js index dfde29305..296ef278b 100644 --- a/test/stringTests.js +++ b/test/stringTests.js @@ -14,7 +14,7 @@ describe('Test strings', function() { }); it('binary cast', function() { var ast = parser.parseEval('echo (binary)"\\colors[1] contains >$colors[1]<\\n";'); - console.log(ast.children[0].arguments[0]); + // @todo console.log(ast.children[0].arguments[0]); }); it('...', function() { var ast = parser.parseEval('echo "\\colors[1] contains >$colors [1]<\\n";'); @@ -208,14 +208,13 @@ describe('Test strings', function() { '$a = `-$`;', '$a = `$`;', ].join('\r')); - ast.children[0].right.kind.should.be.exactly('shell'); - ast.children[0].right.value.kind.should.be.exactly('encapsed'); - ast.children[0].right.value.type.should.be.exactly('shell'); - ast.children[0].right.value.value.length.should.be.exactly(2); - ast.children[0].right.value.value[0].kind.should.be.exactly('string'); - ast.children[0].right.value.value[0].value.should.be.exactly('ls '); - ast.children[0].right.value.value[1].kind.should.be.exactly('variable'); - ast.children[0].right.value.value[1].name.should.be.exactly('cwd'); + ast.children[0].right.kind.should.be.exactly('encapsed'); + ast.children[0].right.type.should.be.exactly('shell'); + ast.children[0].right.value.length.should.be.exactly(2); + ast.children[0].right.value[0].kind.should.be.exactly('string'); + ast.children[0].right.value[0].value.should.be.exactly('ls '); + ast.children[0].right.value[1].kind.should.be.exactly('variable'); + ast.children[0].right.value[1].name.should.be.exactly('cwd'); // @todo test the rest of childs }); diff --git a/test/variableTests.js b/test/variableTests.js index 17a6b1a52..48a009eb6 100644 --- a/test/variableTests.js +++ b/test/variableTests.js @@ -51,7 +51,7 @@ describe('Test variables', function() { 'foo::$bar;' ].join('\n'), { parser: { - debug: true + // debug: true } }); it('should be static::foo', function() {