{"version":3,"sources":["webpack:///./node_modules/buble/dist/buble-browser.es.js"],"names":["reservedWords","3","5","6","strict","strictBind","ecma5AndLessKeywords","keywords","keywordRelationalOperator","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","code","set","pos","i","length","isIdentifierStart","astral","test","String","fromCharCode","isIdentifierChar","TokenType","label","conf","this","keyword","beforeExpr","startsExpr","isLoop","isAssign","prefix","postfix","binop","updateContext","name","prec","keywords$1","kw","options","types","num","regexp","string","eof","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","dot","question","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","eq","assign","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","modulo","star","slash","starstar","_break","_case","_catch","_continue","_debugger","_default","_do","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_const","_while","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_in","_instanceof","_typeof","_void","_delete","lineBreak","lineBreakG","source","isNewLine","ecma2019String","nonASCIIwhitespace","skipWhiteSpace","ref","Object","prototype","hasOwnProperty","toString","has","obj","propName","call","isArray","Array","Position","line","col","column","offset","n","SourceLocation","p","start","end","sourceFile","getLineInfo","input","cur","lastIndex","match","exec","index","defaultOptions","ecmaVersion","sourceType","onInsertedSemicolon","onTrailingComma","allowReserved","allowReturnOutsideFunction","allowImportExportEverywhere","allowAwaitOutsideFunction","allowHashBang","locations","onToken","onComment","ranges","program","directSourceFile","preserveParens","getOptions","opts","opt","tokens","token","push","array","block","text","startLoc","endLoc","comment","type","value","loc","range","pushComment","functionFlags","async","generator","keywordRegexp","words","replace","Parser","startPos","reserved","v","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","containsEsc","lineStart","lastIndexOf","curLine","slice","split","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","context","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","yieldPos","awaitPos","labels","skipLineComment","scopeStack","enterScope","regexpState","prototypeAccessors","inFunction","configurable","inGenerator","inAsync","parse","node","startNode","nextToken","parseTopLevel","get","currentVarScope","flags","extend","plugins","len","arguments","cls","parseExpressionAt","parser","parseExpression","tokenizer","defineProperties","pp","literal","DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","eat","next","isContextual","eatContextual","expectContextual","unexpected","canInsertSemicolon","insertSemicolon","semicolon","afterTrailingComma","tokType","notNext","expect","raise","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","expr","expression","pp$1","exports","body","stmt","parseStatement","adaptDirectivePrologue","finishNode","loopLabel","kind","switchLabel","isLet","skip","nextCh","charCodeAt","ident","isAsyncFunction","charAt","topLevel","starttype","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseBlock","parseEmptyStatement","parseImport","parseExport","maybeName","parseLabeledStatement","parseExpressionStatement","isBreak","parseIdent","lab","pop","parseParenExpression","awaitAt","parseFor","init$1","parseVar","declarations","init","await","parseForIn","toAssignable","checkLVal","isAsync","declarationPosition","parseFunction","FUNC_STATEMENT","FUNC_HANGING_STATEMENT","consequent","alternate","argument","discriminant","cases","sawDefault","isCase","exitScope","empty","handler","clause","param","parseBindingAtom","simple","finalizer","object","i$1","list","label$1","statementStart","createNewLexicalScope","update","id","left","right","parseMaybeAssign","isFor","decl","parseVarId","statement","allowExpressionBody","initFunction","oldYieldPos","oldAwaitPos","parseFunctionParams","parseFunctionBody","params","parseBindingList","isStatement","parseClassId","parseClassSuper","classBody","hadConstructor","element","parseClassElement","this$1","method","tryContextual","k","noLineBreak","key","computed","startNodeAt","static","isGenerator","parsePropertyName","parseClassMethod","parseMethod","superClass","parseExprSubscripts","parseExprAtom","checkExport","fNode","declaration","cNode","shouldParseExportStatement","checkVariableExport","specifiers","parseExportSpecifiers","spec","checkUnreserved","local","checkPatternExport","pat","properties","prop","list$1","elements","elt","decls","nodes","first","exported","parseImportSpecifiers","node$1","node$2","imported","statements","isDirectiveCandidate","directive","raw","pp$2","isBinding","toAssignableList","operator","exprList","last","parseSpread","parseRestBinding","parseObj","close","allowEmpty","allowTrailingComma","elts","rest","parseBindingListItem","elem","parseMaybeDefault","bindingType","checkClashes","declareName","pp$3","checkPropClash","propHash","shorthand","proto","other","noIn","expressions","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldShorthandAssign","parseMaybeConditional","parseExprOps","parseMaybeUnary","parseExprOp","leftStartPos","leftStartLoc","minPrec","logical","op","buildBinary","sawUnary","parseAwait","skipArrowSubscripts","result","parseSubscripts","base","noCalls","maybeAsyncArrow","property","parseExprList","parseArrowExpression","callee","tag","quasi","parseTemplate","isTagged","canBeArrow","parseLiteral","regex","pattern","parseParenAndDistinguishExpression","parseNew","val","spreadStart","innerStartPos","innerStartLoc","lastIsComma","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","item","empty$1","meta","inNonArrowFunction","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","paramCount","isArrowFunction","isExpression","oldStrict","useStrict","checkParams","nonSimple","isSimpleParamList","oldLabels","allowDuplicates","nameHash","indexOf","liberal","delegate","pp$4","message","err","SyntaxError","raisedAt","pp$5","Scope","var","lexical","redeclared","scope","currentScope","scope$2","scope$3","SCOPE_TOP","Node","pp$6","TokContext","isExpr","preserveSpace","override","types$1","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","pp$7","braceIsBlock","prevType","parent","curContext","inGeneratorContext","out","statementParens","allowed","data","apply","$LONE","General_Category","gc","sc","Script_Extensions","scx","Script","pp$9","RegExpValidationState","validFlags","switchU","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","codePointToString$1","ch","isSyntaxCharacter","isControlLetter","isUnicodePropertyNameCharacter","isUnicodePropertyValueCharacter","isDecimalDigit","isHexDigit","hexToInt","isOctalDigit","reset","unicode","at","s","l","c","nextIndex","current","lookahead","advance","validateRegExpFlags","state","flag","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","min","max","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","isRegExpIdentifierStart","isRegExpIdentifierPart","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","isCharacterClassEscape","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","regexp_classRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","regexp_eatClassControlLetter","regexp_eatOctalDigit","n1","n2","Token","pp$8","codePointToString","getToken","Symbol","iterator","done","skipSpace","finishToken","readToken","fullCharCodeAtPos","readWord","getTokenFromCode","skipBlockComment","startSkip","loop","readToken_dot","readNumber","next2","readToken_slash","readRegexp","finishOp","readToken_mult_modulo_exp","size","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readRadixNumber","readString","str","escaped","inClass","flagsStart","readWord1","e","readInt","radix","total","Infinity","startsWithDot","octal","parseInt","parseFloat","readCodePoint","codePos","readHexChar","invalidStringToken","quote","chunkStart","readEscapedChar","INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","position","inTemplate","octalStr","substr","word","escStart","esc","acorn","freeze","version","tokTypes","keywordTypes","tokContexts","xhtml","quot","amp","apos","lt","gt","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","tilde","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","hexNumber","decimalNumber","tt","TokContext$1","TokenType$1","isNewLine$1","isIdentifierStart$1","isIdentifierChar$1","tc_oTag","tc_cTag","tc_expr","tok","jsxName","jsxText","jsxTagStart","jsxTagEnd","getQualifiedJSXName","namespace","acornJsx","anonymous","__proto__","create","constructor","jsx_readToken","jsx_readEntity","jsx_readNewLine","normalizeCRLF","jsx_readString","entity","count","jsx_readWord","jsx_parseIdentifier","jsx_parseNamespacedName","allowNamespaces","jsx_parseElementName","allowNamespacedObjects","newNode","jsx_parseAttributeValue","jsx_parseExpressionContainer","jsx_parseEmptyExpression","jsx_parseAttribute","jsx_parseOpeningElementAt","attributes","nodeName","selfClosing","jsx_parseClosingElementAt","jsx_parseElementAt","children","openingElement","closingElement","contents","fragmentOrElement","jsx_parseText","jsx_parseElement","refShortHandDefaultPos","plugin","x","lib","fn","module","createCommonjsModule","defineProperty","DynamicImportKey","undefined","_createClass","target","props","descriptor","enumerable","writable","Constructor","protoProps","staticProps","_get","receiver","Function","desc","getOwnPropertyDescriptor","getPrototypeOf","getter","_classCallCheck","instance","TypeError","_possibleConstructorReturn","self","ReferenceError","_Parser","subClass","setPrototypeOf","_inherits","parenAfter","parseDynamicImport","acornDynamicImport","__esModule","toJSON","keys","forEach","map","Node$1","extractNames","names","extractors","ancestor","level","contains","findLexicalBoundary","findNearest","unparenthesizedParent","unparenthesize","findScope","functionScope","getIndentation","initialise","transforms","magicString","original","transpile","Identifier","ObjectPattern","Property","ArrayPattern","RestElement","AssignmentPattern","Scope$1","isBlockScope","createDeclarationCallback","declare","identifiers","references","blockScopedDeclarations","aliases","locate","lines","lineEnd","char","Error","repeat","getSnippet","Math","numDigits","snippet","join","addDeclaration","identifier","instances","addReference","consolidated","consolidateReference","consolidate","createIdentifier","counter","createDeclaration","findDeclaration","resolveName","CompileError","stack","findIndex","handlers","destructureIdentifier","inline","statementGenerators","isIdentifier","suffix","prependRight","move","appendLeft","destructure","handleProperty","remove","destructureObjectPattern","overwrite","nonRestKeys","content","isComputedKey","helper","getObjectWithoutPropertiesHelper","destructureMemberExpression","filter","Boolean","ref$1","contentOnly","BlockStatement","createScope","parentIsFunction","isFunctionBlock","createdDeclarations","thisAlias","argumentsAlias","defaultParameters","getArgumentsAlias","getArgumentsArrayAlias","argumentsArrayAlias","getThisAlias","indentation","useOuter","synthetic","indentString","getIndentString","introStatementGenerators","assignment","transpileParameters","letConst","transpileBlockScopedIdentifiers","defaultParameter","lhs","spreadRest","penultimateParam","start$1","parameterDestructuring","i$2","list$2","cont","forStatement","shouldRewriteAsFunction","outerAlias","innerAlias","reassigned","storeName","outer","inner","alias","alias$1","identifier$1","rewritten","isArguments","spread","isNew","firstSpreadIndex","element$1","element$2","previousElement","ArrayExpression","lexicalBoundary","lastElement","removeTrailingComma","ArrowFunctionExpression","naked","needsArguments","charIndex","trailingFunctionCommas","checkConst","AssignmentExpression","exponentiation","transpileExponentiation","destructuring","transpileDestructuring","writeScope","lookupScope","appendRight","j","needsObjectVar","needsPropertyVar","i0","BinaryExpression","loopStatement","BreakStatement","switchCase","depth","canBreak","CallExpression","arg","hasSpreadElements","firstArgument","callExpression","noCall","ClassBody","inFunctionExpression","superName","classes","indentStr","i1","constructorIndex","introBlock","outroBlock","isConstructorBody","previousMethod","nextMethod","namedFunctions","namedFunctionExpressions","namedConstructor","inheritanceBlock","fn$1","staticAccessors","prototypeGettersAndSetters","staticGettersAndSetters","getterSetter","isAccessor","methodName","fake_computed","funcName","rhs","constructorName","intro","outro","ClassDeclaration","indentStrLen","indentStart","indentExclusions","removeStart","deindent","isExportDefaultDeclaration","prependLeft","syntheticDefaultExport","ClassExpression","ContinueStatement","ExportDefaultDeclaration","moduleExport","ExportNamedDeclaration","LoopStatement","createdScope","thisRefs","nearestFunctionExpression","needsBlock","argString","args","paramString","before","after","canReturn","returned","insert","ForStatement","LoopStatement$$1","declarator","updates","lastStatement","ForInStatement","hasDeclaration","maybePattern","destructurePattern","isDeclaration","bodyStart","ForOfStatement","forOf","dangerousForOf","maybeDestructuring","FunctionDeclaration","FunctionExpression","conciseMethodProperty","isReference","arrowFunction","IfStatement","ImportDeclaration","moduleImport","ImportDefaultSpecifier","ImportSpecifier","JSXAttribute","JSXClosingElement","spaceBeforeParen","lastChild","JSXClosingFragment","normalise","removeTrailingWhitespace","JSON","stringify","JSXElement","child","openingFragment","JSXExpressionContainer","JSXFragment","JSXElement$$1","JSXOpeningElement","jsx","html","toLowerCase","hasSpread","attr","lastAttr","nextAttr","objectAssign","JSXOpeningFragment","JSXSpreadAttribute","nonAsciiLsOrPs","types$2","DoWhileStatement","Literal","indentExclusionElements","numericLiteral","stickyRegExp","unicodeRegExp","m","MemberExpression","reservedProperties","NewExpression","ObjectExpression","firstPropertyStart","spreadPropertyCount","computedPropertyCount","firstSpreadProperty","firstComputedProperty","computedProperty","objectRestSpread","prop$1","lastProp","nextProp","isSimpleAssignment","lastComputedProp","sawNonComputedProperty","isFirst","prop$2","moveStart","propId$1","propId","beginEnd","closing","c$1","ReturnStatement","nearestFunction","shouldWrap","Super","parentClass","superClassName","isCalled","isMember","TaggedTemplateExpression","templateString","dangerousTaggedTemplateString","ordered","concat","sort","a","b","rootScope","templateStrings","templateObject","templateLiteralQuasis","prependAt","TemplateElement","TemplateLiteral","third","shift","parenthesise","parenthesise$1","ThisExpression","UpdateExpression","VariableDeclaration","lastDeclaratorIsPattern","VariableDeclarator","inLoop","isLeftDeclaratorOfLoop","WhileStatement","Program","statementsWithBlocks","ast","wrap","__wrapped","bodyType","addSourcemapLocation","objectWithoutPropertiesHelper","export","generateMap","file","includeContent","matrix","chrome","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","firefox","43","44","45","46","47","safari","8","9","10","11","12","ie","edge","13","14","15","16","17","18","19","4","features","dangerousTransforms","transform","bitmask","environment","versions","targetVersion","support","modules"],"mappings":"4FAAA,wEAGIA,EAAgB,CAClBC,EAAG,sNACHC,EAAG,+CACHC,EAAG,OACHC,OAAQ,yEACRC,WAAY,kBAGVC,EAAuB,8KACvBC,EAAW,CACbL,EAAGI,EACHH,EAAGG,EAAuB,4CAExBE,EAA4B,kBAO5BC,EAA+B,86BAC/BC,EAA0B,ijBAC1BC,EAA0B,IAAIC,OAAO,IAAMH,EAA+B,KAC1EI,EAAqB,IAAID,OAAO,IAAMH,EAA+BC,EAA0B,KACnGD,EAA+BC,EAA0B,KAOzD,IAAII,EAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,KAAM,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,KAAM,GAAI,IAAK,KAAM,IAAK,GAAI,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,KAAM,IAAK,GAAI,GAAI,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG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","file":"f0e45107-02a22ac72de90821f3f0.js","sourcesContent":["import rewritePattern from 'regexpu-core';\nimport MagicString from 'magic-string'; // Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n  3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n  5: \"class enum extends super const export import\",\n  6: \"enum\",\n  strict: \"implements interface let package private protected public static yield\",\n  strictBind: \"eval arguments\"\n}; // And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\nvar keywords = {\n  5: ecma5AndLessKeywords,\n  6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\nvar keywordRelationalOperator = /^in(stanceof)?$/; // ## Character categories\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\n// Generated by `bin/generate-identifier-regex.js`.\n\nvar nonASCIIidentifierStartChars = \"\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEF\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7B9\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\nvar nonASCIIidentifierChars = \"\\u200C\\u200D\\xB7\\u0300-\\u036F\\u0387\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u0669\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u06F0-\\u06F9\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07C0-\\u07C9\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D3-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09E6-\\u09EF\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AE6-\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C04\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CE6-\\u0CEF\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D66-\\u0D6F\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0E50-\\u0E59\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1040-\\u1049\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u194F\\u19D0-\\u19DA\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AB0-\\u1ABD\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1C40-\\u1C49\\u1C50-\\u1C59\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DF9\\u1DFB-\\u1DFF\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA620-\\uA629\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F1\\uA8FF-\\uA909\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9D0-\\uA9D9\\uA9E5\\uA9F0-\\uA9F9\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA50-\\uAA59\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null; // These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by bin/generate-identifier-regex.js\n// eslint-disable-next-line comma-spacing\n\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 477, 28, 11, 0, 9, 21, 190, 52, 76, 44, 33, 24, 27, 35, 30, 0, 12, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 54, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 86, 26, 230, 43, 117, 63, 32, 0, 257, 0, 11, 39, 8, 0, 22, 0, 12, 39, 3, 3, 20, 0, 35, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 270, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 68, 12, 0, 67, 12, 65, 1, 31, 6129, 15, 754, 9486, 286, 82, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 4149, 196, 60, 67, 1213, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42710, 42, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541]; // eslint-disable-next-line comma-spacing\n\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 525, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 4, 9, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 280, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 135, 4, 60, 6, 26, 9, 1016, 45, 17, 3, 19723, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 2214, 6, 110, 6, 6, 9, 792487, 239]; // This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\n\nfunction isInAstralSet(code, set) {\n  var pos = 0x10000;\n\n  for (var i = 0; i < set.length; i += 2) {\n    pos += set[i];\n\n    if (pos > code) {\n      return false;\n    }\n\n    pos += set[i + 1];\n\n    if (pos >= code) {\n      return true;\n    }\n  }\n} // Test whether a given character code starts an identifier.\n\n\nfunction isIdentifierStart(code, astral) {\n  if (code < 65) {\n    return code === 36;\n  }\n\n  if (code < 91) {\n    return true;\n  }\n\n  if (code < 97) {\n    return code === 95;\n  }\n\n  if (code < 123) {\n    return true;\n  }\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n  }\n\n  if (astral === false) {\n    return false;\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes);\n} // Test whether a given character is part of an identifier.\n\n\nfunction isIdentifierChar(code, astral) {\n  if (code < 48) {\n    return code === 36;\n  }\n\n  if (code < 58) {\n    return true;\n  }\n\n  if (code < 65) {\n    return false;\n  }\n\n  if (code < 91) {\n    return true;\n  }\n\n  if (code < 97) {\n    return code === 95;\n  }\n\n  if (code < 123) {\n    return true;\n  }\n\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n\n  if (astral === false) {\n    return false;\n  }\n\n  return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);\n} // ## Token types\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\n\nvar TokenType = function TokenType(label, conf) {\n  if (conf === void 0) conf = {};\n  this.label = label;\n  this.keyword = conf.keyword;\n  this.beforeExpr = !!conf.beforeExpr;\n  this.startsExpr = !!conf.startsExpr;\n  this.isLoop = !!conf.isLoop;\n  this.isAssign = !!conf.isAssign;\n  this.prefix = !!conf.prefix;\n  this.postfix = !!conf.postfix;\n  this.binop = conf.binop || null;\n  this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n  return new TokenType(name, {\n    beforeExpr: true,\n    binop: prec\n  });\n}\n\nvar beforeExpr = {\n  beforeExpr: true\n};\nvar startsExpr = {\n  startsExpr: true\n}; // Map keyword names to token types.\n\nvar keywords$1 = {}; // Succinct definitions of keyword token types\n\nfunction kw(name, options) {\n  if (options === void 0) options = {};\n  options.keyword = name;\n  return keywords$1[name] = new TokenType(name, options);\n}\n\nvar types = {\n  num: new TokenType(\"num\", startsExpr),\n  regexp: new TokenType(\"regexp\", startsExpr),\n  string: new TokenType(\"string\", startsExpr),\n  name: new TokenType(\"name\", startsExpr),\n  eof: new TokenType(\"eof\"),\n  // Punctuation token types.\n  bracketL: new TokenType(\"[\", {\n    beforeExpr: true,\n    startsExpr: true\n  }),\n  bracketR: new TokenType(\"]\"),\n  braceL: new TokenType(\"{\", {\n    beforeExpr: true,\n    startsExpr: true\n  }),\n  braceR: new TokenType(\"}\"),\n  parenL: new TokenType(\"(\", {\n    beforeExpr: true,\n    startsExpr: true\n  }),\n  parenR: new TokenType(\")\"),\n  comma: new TokenType(\",\", beforeExpr),\n  semi: new TokenType(\";\", beforeExpr),\n  colon: new TokenType(\":\", beforeExpr),\n  dot: new TokenType(\".\"),\n  question: new TokenType(\"?\", beforeExpr),\n  arrow: new TokenType(\"=>\", beforeExpr),\n  template: new TokenType(\"template\"),\n  invalidTemplate: new TokenType(\"invalidTemplate\"),\n  ellipsis: new TokenType(\"...\", beforeExpr),\n  backQuote: new TokenType(\"`\", startsExpr),\n  dollarBraceL: new TokenType(\"${\", {\n    beforeExpr: true,\n    startsExpr: true\n  }),\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n  eq: new TokenType(\"=\", {\n    beforeExpr: true,\n    isAssign: true\n  }),\n  assign: new TokenType(\"_=\", {\n    beforeExpr: true,\n    isAssign: true\n  }),\n  incDec: new TokenType(\"++/--\", {\n    prefix: true,\n    postfix: true,\n    startsExpr: true\n  }),\n  prefix: new TokenType(\"!/~\", {\n    beforeExpr: true,\n    prefix: true,\n    startsExpr: true\n  }),\n  logicalOR: binop(\"||\", 1),\n  logicalAND: binop(\"&&\", 2),\n  bitwiseOR: binop(\"|\", 3),\n  bitwiseXOR: binop(\"^\", 4),\n  bitwiseAND: binop(\"&\", 5),\n  equality: binop(\"==/!=/===/!==\", 6),\n  relational: binop(\"</>/<=/>=\", 7),\n  bitShift: binop(\"<</>>/>>>\", 8),\n  plusMin: new TokenType(\"+/-\", {\n    beforeExpr: true,\n    binop: 9,\n    prefix: true,\n    startsExpr: true\n  }),\n  modulo: binop(\"%\", 10),\n  star: binop(\"*\", 10),\n  slash: binop(\"/\", 10),\n  starstar: new TokenType(\"**\", {\n    beforeExpr: true\n  }),\n  // Keyword token types.\n  _break: kw(\"break\"),\n  _case: kw(\"case\", beforeExpr),\n  _catch: kw(\"catch\"),\n  _continue: kw(\"continue\"),\n  _debugger: kw(\"debugger\"),\n  _default: kw(\"default\", beforeExpr),\n  _do: kw(\"do\", {\n    isLoop: true,\n    beforeExpr: true\n  }),\n  _else: kw(\"else\", beforeExpr),\n  _finally: kw(\"finally\"),\n  _for: kw(\"for\", {\n    isLoop: true\n  }),\n  _function: kw(\"function\", startsExpr),\n  _if: kw(\"if\"),\n  _return: kw(\"return\", beforeExpr),\n  _switch: kw(\"switch\"),\n  _throw: kw(\"throw\", beforeExpr),\n  _try: kw(\"try\"),\n  _var: kw(\"var\"),\n  _const: kw(\"const\"),\n  _while: kw(\"while\", {\n    isLoop: true\n  }),\n  _with: kw(\"with\"),\n  _new: kw(\"new\", {\n    beforeExpr: true,\n    startsExpr: true\n  }),\n  _this: kw(\"this\", startsExpr),\n  _super: kw(\"super\", startsExpr),\n  _class: kw(\"class\", startsExpr),\n  _extends: kw(\"extends\", beforeExpr),\n  _export: kw(\"export\"),\n  _import: kw(\"import\"),\n  _null: kw(\"null\", startsExpr),\n  _true: kw(\"true\", startsExpr),\n  _false: kw(\"false\", startsExpr),\n  _in: kw(\"in\", {\n    beforeExpr: true,\n    binop: 7\n  }),\n  _instanceof: kw(\"instanceof\", {\n    beforeExpr: true,\n    binop: 7\n  }),\n  _typeof: kw(\"typeof\", {\n    beforeExpr: true,\n    prefix: true,\n    startsExpr: true\n  }),\n  _void: kw(\"void\", {\n    beforeExpr: true,\n    prefix: true,\n    startsExpr: true\n  }),\n  _delete: kw(\"delete\", {\n    beforeExpr: true,\n    prefix: true,\n    startsExpr: true\n  })\n}; // Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code, ecma2019String) {\n  return code === 10 || code === 13 || !ecma2019String && (code === 0x2028 || code === 0x2029);\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString; // Checks if an object has a property.\n\nfunction has(obj, propName) {\n  return hasOwnProperty.call(obj, propName);\n}\n\nvar isArray = Array.isArray || function (obj) {\n  return toString.call(obj) === \"[object Array]\";\n}; // These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\n\nvar Position = function Position(line, col) {\n  this.line = line;\n  this.column = col;\n};\n\nPosition.prototype.offset = function offset(n) {\n  return new Position(this.line, this.column + n);\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n  this.start = start;\n  this.end = end;\n\n  if (p.sourceFile !== null) {\n    this.source = p.sourceFile;\n  }\n}; // The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\n\nfunction getLineInfo(input, offset) {\n  for (var line = 1, cur = 0;;) {\n    lineBreakG.lastIndex = cur;\n    var match = lineBreakG.exec(input);\n\n    if (match && match.index < offset) {\n      ++line;\n      cur = match.index + match[0].length;\n    } else {\n      return new Position(line, offset - cur);\n    }\n  }\n} // A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\n\nvar defaultOptions = {\n  // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n  // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10\n  // (2019). This influences support for strict mode, the set of\n  // reserved words, and support for new syntax features. The default\n  // is 9.\n  ecmaVersion: 9,\n  // `sourceType` indicates the mode the code should be parsed in.\n  // Can be either `\"script\"` or `\"module\"`. This influences global\n  // strict mode and parsing of `import` and `export` declarations.\n  sourceType: \"script\",\n  // `onInsertedSemicolon` can be a callback that will be called\n  // when a semicolon is automatically inserted. It will be passed\n  // th position of the comma as an offset, and if `locations` is\n  // enabled, it is given the location as a `{line, column}` object\n  // as second argument.\n  onInsertedSemicolon: null,\n  // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n  // trailing commas.\n  onTrailingComma: null,\n  // By default, reserved words are only enforced if ecmaVersion >= 5.\n  // Set `allowReserved` to a boolean value to explicitly turn this on\n  // an off. When this option has the value \"never\", reserved words\n  // and keywords can also not be used as property names.\n  allowReserved: null,\n  // When enabled, a return at the top level is not considered an\n  // error.\n  allowReturnOutsideFunction: false,\n  // When enabled, import/export statements are not constrained to\n  // appearing at the top of the program.\n  allowImportExportEverywhere: false,\n  // When enabled, await identifiers are allowed to appear at the top-level scope,\n  // but they are still not allowed in non-async functions.\n  allowAwaitOutsideFunction: false,\n  // When enabled, hashbang directive in the beginning of file\n  // is allowed and treated as a line comment.\n  allowHashBang: false,\n  // When `locations` is on, `loc` properties holding objects with\n  // `start` and `end` properties in `{line, column}` form (with\n  // line being 1-based and column 0-based) will be attached to the\n  // nodes.\n  locations: false,\n  // A function can be passed as `onToken` option, which will\n  // cause Acorn to call that function with object in the same\n  // format as tokens returned from `tokenizer().getToken()`. Note\n  // that you are not allowed to call the parser from the\n  // callback—that will corrupt its internal state.\n  onToken: null,\n  // A function can be passed as `onComment` option, which will\n  // cause Acorn to call that function with `(block, text, start,\n  // end)` parameters whenever a comment is skipped. `block` is a\n  // boolean indicating whether this is a block (`/* */`) comment,\n  // `text` is the content of the comment, and `start` and `end` are\n  // character offsets that denote the start and end of the comment.\n  // When the `locations` option is on, two more parameters are\n  // passed, the full `{line, column}` locations of the start and\n  // end of the comments. Note that you are not allowed to call the\n  // parser from the callback—that will corrupt its internal state.\n  onComment: null,\n  // Nodes have their start and end characters offsets recorded in\n  // `start` and `end` properties (directly on the node, rather than\n  // the `loc` object, which holds line/column data. To also add a\n  // [semi-standardized][range] `range` property holding a `[start,\n  // end]` array with the same numbers, set the `ranges` option to\n  // `true`.\n  //\n  // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n  ranges: false,\n  // It is possible to parse multiple files into a single AST by\n  // passing the tree produced by parsing the first file as\n  // `program` option in subsequent parses. This will add the\n  // toplevel forms of the parsed file to the `Program` (top) node\n  // of an existing parse tree.\n  program: null,\n  // When `locations` is on, you can pass this to record the source\n  // file in every node's `loc` object.\n  sourceFile: null,\n  // This value, if given, is stored in every node, whether\n  // `locations` is on or off.\n  directSourceFile: null,\n  // When enabled, parenthesized expressions are represented by\n  // (non-standard) ParenthesizedExpression nodes\n  preserveParens: false\n}; // Interpret and default an options object\n\nfunction getOptions(opts) {\n  var options = {};\n\n  for (var opt in defaultOptions) {\n    options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt];\n  }\n\n  if (options.ecmaVersion >= 2015) {\n    options.ecmaVersion -= 2009;\n  }\n\n  if (options.allowReserved == null) {\n    options.allowReserved = options.ecmaVersion < 5;\n  }\n\n  if (isArray(options.onToken)) {\n    var tokens = options.onToken;\n\n    options.onToken = function (token) {\n      return tokens.push(token);\n    };\n  }\n\n  if (isArray(options.onComment)) {\n    options.onComment = pushComment(options, options.onComment);\n  }\n\n  return options;\n}\n\nfunction pushComment(options, array) {\n  return function (block, text, start, end, startLoc, endLoc) {\n    var comment = {\n      type: block ? \"Block\" : \"Line\",\n      value: text,\n      start: start,\n      end: end\n    };\n\n    if (options.locations) {\n      comment.loc = new SourceLocation(this, startLoc, endLoc);\n    }\n\n    if (options.ranges) {\n      comment.range = [start, end];\n    }\n\n    array.push(comment);\n  };\n} // Each scope gets a bitset that may contain these flags\n\n\nvar SCOPE_TOP = 1;\nvar SCOPE_FUNCTION = 2;\nvar SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION;\nvar SCOPE_ASYNC = 4;\nvar SCOPE_GENERATOR = 8;\nvar SCOPE_ARROW = 16;\nvar SCOPE_SIMPLE_CATCH = 32;\n\nfunction functionFlags(async, generator) {\n  return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0);\n} // Used in checkLVal and declareName to determine the type of a binding\n\n\nvar BIND_NONE = 0;\nvar BIND_VAR = 1;\nvar BIND_LEXICAL = 2;\nvar BIND_FUNCTION = 3;\nvar BIND_SIMPLE_CATCH = 4;\nvar BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nfunction keywordRegexp(words) {\n  return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\");\n}\n\nvar Parser = function Parser(options, input, startPos) {\n  this.options = options = getOptions(options);\n  this.sourceFile = options.sourceFile;\n  this.keywords = keywordRegexp(keywords[options.ecmaVersion >= 6 ? 6 : 5]);\n  var reserved = \"\";\n\n  if (!options.allowReserved) {\n    for (var v = options.ecmaVersion;; v--) {\n      if (reserved = reservedWords[v]) {\n        break;\n      }\n    }\n\n    if (options.sourceType === \"module\") {\n      reserved += \" await\";\n    }\n  }\n\n  this.reservedWords = keywordRegexp(reserved);\n  var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n  this.reservedWordsStrict = keywordRegexp(reservedStrict);\n  this.reservedWordsStrictBind = keywordRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n  this.input = String(input); // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n\n  this.containsEsc = false; // Set up token state\n  // The current position of the tokenizer in the input.\n\n  if (startPos) {\n    this.pos = startPos;\n    this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n    this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n  } else {\n    this.pos = this.lineStart = 0;\n    this.curLine = 1;\n  } // Properties of the current token:\n  // Its type\n\n\n  this.type = types.eof; // For tokens that include more information than their type, the value\n\n  this.value = null; // Its start and end offset\n\n  this.start = this.end = this.pos; // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n\n  this.startLoc = this.endLoc = this.curPosition(); // Position information for the previous token\n\n  this.lastTokEndLoc = this.lastTokStartLoc = null;\n  this.lastTokStart = this.lastTokEnd = this.pos; // The context stack is used to superficially track syntactic\n  // context to predict whether a regular expression is allowed in a\n  // given position.\n\n  this.context = this.initialContext();\n  this.exprAllowed = true; // Figure out if it's a module code.\n\n  this.inModule = options.sourceType === \"module\";\n  this.strict = this.inModule || this.strictDirective(this.pos); // Used to signify the start of a potential arrow function\n\n  this.potentialArrowAt = -1; // Positions to delayed-check that yield/await does not exist in default parameters.\n\n  this.yieldPos = this.awaitPos = 0; // Labels in scope.\n\n  this.labels = []; // If enabled, skip leading hashbang line.\n\n  if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\") {\n    this.skipLineComment(2);\n  } // Scope tracking for duplicate variable names (see scope.js)\n\n\n  this.scopeStack = [];\n  this.enterScope(SCOPE_TOP); // For RegExp validation\n\n  this.regexpState = null;\n};\n\nvar prototypeAccessors = {\n  inFunction: {\n    configurable: true\n  },\n  inGenerator: {\n    configurable: true\n  },\n  inAsync: {\n    configurable: true\n  }\n};\n\nParser.prototype.parse = function parse() {\n  var node = this.options.program || this.startNode();\n  this.nextToken();\n  return this.parseTopLevel(node);\n};\n\nprototypeAccessors.inFunction.get = function () {\n  return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0;\n};\n\nprototypeAccessors.inGenerator.get = function () {\n  return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0;\n};\n\nprototypeAccessors.inAsync.get = function () {\n  return (this.currentVarScope().flags & SCOPE_ASYNC) > 0;\n};\n\nParser.extend = function extend() {\n  var plugins = [],\n      len = arguments.length;\n\n  while (len--) {\n    plugins[len] = arguments[len];\n  }\n\n  var cls = this;\n\n  for (var i = 0; i < plugins.length; i++) {\n    cls = plugins[i](cls);\n  }\n\n  return cls;\n};\n\nParser.parse = function parse(input, options) {\n  return new this(options, input).parse();\n};\n\nParser.parseExpressionAt = function parseExpressionAt(input, pos, options) {\n  var parser = new this(options, input, pos);\n  parser.nextToken();\n  return parser.parseExpression();\n};\n\nParser.tokenizer = function tokenizer(input, options) {\n  return new this(options, input);\n};\n\nObject.defineProperties(Parser.prototype, prototypeAccessors);\nvar pp = Parser.prototype; // ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'])*?)'|\"((?:\\\\.|[^\"])*?)\"|;)/;\n\npp.strictDirective = function (start) {\n  var this$1 = this;\n\n  for (;;) {\n    skipWhiteSpace.lastIndex = start;\n    start += skipWhiteSpace.exec(this$1.input)[0].length;\n    var match = literal.exec(this$1.input.slice(start));\n\n    if (!match) {\n      return false;\n    }\n\n    if ((match[1] || match[2]) === \"use strict\") {\n      return true;\n    }\n\n    start += match[0].length;\n  }\n}; // Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\n\npp.eat = function (type) {\n  if (this.type === type) {\n    this.next();\n    return true;\n  } else {\n    return false;\n  }\n}; // Tests whether parsed token is a contextual keyword.\n\n\npp.isContextual = function (name) {\n  return this.type === types.name && this.value === name && !this.containsEsc;\n}; // Consumes contextual keyword if possible.\n\n\npp.eatContextual = function (name) {\n  if (!this.isContextual(name)) {\n    return false;\n  }\n\n  this.next();\n  return true;\n}; // Asserts that following token is given contextual keyword.\n\n\npp.expectContextual = function (name) {\n  if (!this.eatContextual(name)) {\n    this.unexpected();\n  }\n}; // Test whether a semicolon can be inserted at the current position.\n\n\npp.canInsertSemicolon = function () {\n  return this.type === types.eof || this.type === types.braceR || lineBreak.test(this.input.slice(this.lastTokEnd, this.start));\n};\n\npp.insertSemicolon = function () {\n  if (this.canInsertSemicolon()) {\n    if (this.options.onInsertedSemicolon) {\n      this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc);\n    }\n\n    return true;\n  }\n}; // Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\n\npp.semicolon = function () {\n  if (!this.eat(types.semi) && !this.insertSemicolon()) {\n    this.unexpected();\n  }\n};\n\npp.afterTrailingComma = function (tokType, notNext) {\n  if (this.type === tokType) {\n    if (this.options.onTrailingComma) {\n      this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc);\n    }\n\n    if (!notNext) {\n      this.next();\n    }\n\n    return true;\n  }\n}; // Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\n\npp.expect = function (type) {\n  this.eat(type) || this.unexpected();\n}; // Raise an unexpected token error.\n\n\npp.unexpected = function (pos) {\n  this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nfunction DestructuringErrors() {\n  this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1;\n}\n\npp.checkPatternErrors = function (refDestructuringErrors, isAssign) {\n  if (!refDestructuringErrors) {\n    return;\n  }\n\n  if (refDestructuringErrors.trailingComma > -1) {\n    this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\");\n  }\n\n  var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n\n  if (parens > -1) {\n    this.raiseRecoverable(parens, \"Parenthesized pattern\");\n  }\n};\n\npp.checkExpressionErrors = function (refDestructuringErrors, andThrow) {\n  if (!refDestructuringErrors) {\n    return false;\n  }\n\n  var shorthandAssign = refDestructuringErrors.shorthandAssign;\n  var doubleProto = refDestructuringErrors.doubleProto;\n\n  if (!andThrow) {\n    return shorthandAssign >= 0 || doubleProto >= 0;\n  }\n\n  if (shorthandAssign >= 0) {\n    this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\");\n  }\n\n  if (doubleProto >= 0) {\n    this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\");\n  }\n};\n\npp.checkYieldAwaitInDefaultParams = function () {\n  if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) {\n    this.raise(this.yieldPos, \"Yield expression cannot be a default value\");\n  }\n\n  if (this.awaitPos) {\n    this.raise(this.awaitPos, \"Await expression cannot be a default value\");\n  }\n};\n\npp.isSimpleAssignTarget = function (expr) {\n  if (expr.type === \"ParenthesizedExpression\") {\n    return this.isSimpleAssignTarget(expr.expression);\n  }\n\n  return expr.type === \"Identifier\" || expr.type === \"MemberExpression\";\n};\n\nvar pp$1 = Parser.prototype; // ### Statement parsing\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node.  Optionally takes a\n// `program` argument.  If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$1.parseTopLevel = function (node) {\n  var this$1 = this;\n  var exports = {};\n\n  if (!node.body) {\n    node.body = [];\n  }\n\n  while (this.type !== types.eof) {\n    var stmt = this$1.parseStatement(null, true, exports);\n    node.body.push(stmt);\n  }\n\n  this.adaptDirectivePrologue(node.body);\n  this.next();\n\n  if (this.options.ecmaVersion >= 6) {\n    node.sourceType = this.options.sourceType;\n  }\n\n  return this.finishNode(node, \"Program\");\n};\n\nvar loopLabel = {\n  kind: \"loop\"\n};\nvar switchLabel = {\n  kind: \"switch\"\n};\n\npp$1.isLet = function () {\n  if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) {\n    return false;\n  }\n\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length,\n      nextCh = this.input.charCodeAt(next);\n\n  if (nextCh === 91 || nextCh === 123) {\n    return true;\n  } // '{' and '['\n\n\n  if (isIdentifierStart(nextCh, true)) {\n    var pos = next + 1;\n\n    while (isIdentifierChar(this.input.charCodeAt(pos), true)) {\n      ++pos;\n    }\n\n    var ident = this.input.slice(next, pos);\n\n    if (!keywordRelationalOperator.test(ident)) {\n      return true;\n    }\n  }\n\n  return false;\n}; // check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\n\n\npp$1.isAsyncFunction = function () {\n  if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\")) {\n    return false;\n  }\n\n  skipWhiteSpace.lastIndex = this.pos;\n  var skip = skipWhiteSpace.exec(this.input);\n  var next = this.pos + skip[0].length;\n  return !lineBreak.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === \"function\" && (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8)));\n}; // Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\n\npp$1.parseStatement = function (context, topLevel, exports) {\n  var starttype = this.type,\n      node = this.startNode(),\n      kind;\n\n  if (this.isLet()) {\n    starttype = types._var;\n    kind = \"let\";\n  } // Most types of statements are recognized by the keyword they\n  // start with. Many are trivial to parse, some require a bit of\n  // complexity.\n\n\n  switch (starttype) {\n    case types._break:\n    case types._continue:\n      return this.parseBreakContinueStatement(node, starttype.keyword);\n\n    case types._debugger:\n      return this.parseDebuggerStatement(node);\n\n    case types._do:\n      return this.parseDoStatement(node);\n\n    case types._for:\n      return this.parseForStatement(node);\n\n    case types._function:\n      if (context && (this.strict || context !== \"if\") && this.options.ecmaVersion >= 6) {\n        this.unexpected();\n      }\n\n      return this.parseFunctionStatement(node, false, !context);\n\n    case types._class:\n      if (context) {\n        this.unexpected();\n      }\n\n      return this.parseClass(node, true);\n\n    case types._if:\n      return this.parseIfStatement(node);\n\n    case types._return:\n      return this.parseReturnStatement(node);\n\n    case types._switch:\n      return this.parseSwitchStatement(node);\n\n    case types._throw:\n      return this.parseThrowStatement(node);\n\n    case types._try:\n      return this.parseTryStatement(node);\n\n    case types._const:\n    case types._var:\n      kind = kind || this.value;\n\n      if (context && kind !== \"var\") {\n        this.unexpected();\n      }\n\n      return this.parseVarStatement(node, kind);\n\n    case types._while:\n      return this.parseWhileStatement(node);\n\n    case types._with:\n      return this.parseWithStatement(node);\n\n    case types.braceL:\n      return this.parseBlock(true, node);\n\n    case types.semi:\n      return this.parseEmptyStatement(node);\n\n    case types._export:\n    case types._import:\n      if (!this.options.allowImportExportEverywhere) {\n        if (!topLevel) {\n          this.raise(this.start, \"'import' and 'export' may only appear at the top level\");\n        }\n\n        if (!this.inModule) {\n          this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\");\n        }\n      }\n\n      return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports);\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n\n    default:\n      if (this.isAsyncFunction()) {\n        if (context) {\n          this.unexpected();\n        }\n\n        this.next();\n        return this.parseFunctionStatement(node, true, !context);\n      }\n\n      var maybeName = this.value,\n          expr = this.parseExpression();\n\n      if (starttype === types.name && expr.type === \"Identifier\" && this.eat(types.colon)) {\n        return this.parseLabeledStatement(node, maybeName, expr, context);\n      } else {\n        return this.parseExpressionStatement(node, expr);\n      }\n\n  }\n};\n\npp$1.parseBreakContinueStatement = function (node, keyword) {\n  var this$1 = this;\n  var isBreak = keyword === \"break\";\n  this.next();\n\n  if (this.eat(types.semi) || this.insertSemicolon()) {\n    node.label = null;\n  } else if (this.type !== types.name) {\n    this.unexpected();\n  } else {\n    node.label = this.parseIdent();\n    this.semicolon();\n  } // Verify that there is an actual destination to break or\n  // continue to.\n\n\n  var i = 0;\n\n  for (; i < this.labels.length; ++i) {\n    var lab = this$1.labels[i];\n\n    if (node.label == null || lab.name === node.label.name) {\n      if (lab.kind != null && (isBreak || lab.kind === \"loop\")) {\n        break;\n      }\n\n      if (node.label && isBreak) {\n        break;\n      }\n    }\n  }\n\n  if (i === this.labels.length) {\n    this.raise(node.start, \"Unsyntactic \" + keyword);\n  }\n\n  return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n};\n\npp$1.parseDebuggerStatement = function (node) {\n  this.next();\n  this.semicolon();\n  return this.finishNode(node, \"DebuggerStatement\");\n};\n\npp$1.parseDoStatement = function (node) {\n  this.next();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"do\");\n  this.labels.pop();\n  this.expect(types._while);\n  node.test = this.parseParenExpression();\n\n  if (this.options.ecmaVersion >= 6) {\n    this.eat(types.semi);\n  } else {\n    this.semicolon();\n  }\n\n  return this.finishNode(node, \"DoWhileStatement\");\n}; // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\n\npp$1.parseForStatement = function (node) {\n  this.next();\n  var awaitAt = this.options.ecmaVersion >= 9 && (this.inAsync || !this.inFunction && this.options.allowAwaitOutsideFunction) && this.eatContextual(\"await\") ? this.lastTokStart : -1;\n  this.labels.push(loopLabel);\n  this.enterScope(0);\n  this.expect(types.parenL);\n\n  if (this.type === types.semi) {\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n\n    return this.parseFor(node, null);\n  }\n\n  var isLet = this.isLet();\n\n  if (this.type === types._var || this.type === types._const || isLet) {\n    var init$1 = this.startNode(),\n        kind = isLet ? \"let\" : this.value;\n    this.next();\n    this.parseVar(init$1, true, kind);\n    this.finishNode(init$1, \"VariableDeclaration\");\n\n    if ((this.type === types._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\")) && init$1.declarations.length === 1 && !(kind !== \"var\" && init$1.declarations[0].init)) {\n      if (this.options.ecmaVersion >= 9) {\n        if (this.type === types._in) {\n          if (awaitAt > -1) {\n            this.unexpected(awaitAt);\n          }\n        } else {\n          node.await = awaitAt > -1;\n        }\n      }\n\n      return this.parseForIn(node, init$1);\n    }\n\n    if (awaitAt > -1) {\n      this.unexpected(awaitAt);\n    }\n\n    return this.parseFor(node, init$1);\n  }\n\n  var refDestructuringErrors = new DestructuringErrors();\n  var init = this.parseExpression(true, refDestructuringErrors);\n\n  if (this.type === types._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\")) {\n    if (this.options.ecmaVersion >= 9) {\n      if (this.type === types._in) {\n        if (awaitAt > -1) {\n          this.unexpected(awaitAt);\n        }\n      } else {\n        node.await = awaitAt > -1;\n      }\n    }\n\n    this.toAssignable(init, false, refDestructuringErrors);\n    this.checkLVal(init);\n    return this.parseForIn(node, init);\n  } else {\n    this.checkExpressionErrors(refDestructuringErrors, true);\n  }\n\n  if (awaitAt > -1) {\n    this.unexpected(awaitAt);\n  }\n\n  return this.parseFor(node, init);\n};\n\npp$1.parseFunctionStatement = function (node, isAsync, declarationPosition) {\n  this.next();\n  return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync);\n};\n\npp$1.parseIfStatement = function (node) {\n  this.next();\n  node.test = this.parseParenExpression(); // allow function declarations in branches, but only in non-strict mode\n\n  node.consequent = this.parseStatement(\"if\");\n  node.alternate = this.eat(types._else) ? this.parseStatement(\"if\") : null;\n  return this.finishNode(node, \"IfStatement\");\n};\n\npp$1.parseReturnStatement = function (node) {\n  if (!this.inFunction && !this.options.allowReturnOutsideFunction) {\n    this.raise(this.start, \"'return' outside of function\");\n  }\n\n  this.next(); // In `return` (and `break`/`continue`), the keywords with\n  // optional arguments, we eagerly look for a semicolon or the\n  // possibility to insert one.\n\n  if (this.eat(types.semi) || this.insertSemicolon()) {\n    node.argument = null;\n  } else {\n    node.argument = this.parseExpression();\n    this.semicolon();\n  }\n\n  return this.finishNode(node, \"ReturnStatement\");\n};\n\npp$1.parseSwitchStatement = function (node) {\n  var this$1 = this;\n  this.next();\n  node.discriminant = this.parseParenExpression();\n  node.cases = [];\n  this.expect(types.braceL);\n  this.labels.push(switchLabel);\n  this.enterScope(0); // Statements under must be grouped (by label) in SwitchCase\n  // nodes. `cur` is used to keep the node that we are currently\n  // adding statements to.\n\n  var cur;\n\n  for (var sawDefault = false; this.type !== types.braceR;) {\n    if (this$1.type === types._case || this$1.type === types._default) {\n      var isCase = this$1.type === types._case;\n\n      if (cur) {\n        this$1.finishNode(cur, \"SwitchCase\");\n      }\n\n      node.cases.push(cur = this$1.startNode());\n      cur.consequent = [];\n      this$1.next();\n\n      if (isCase) {\n        cur.test = this$1.parseExpression();\n      } else {\n        if (sawDefault) {\n          this$1.raiseRecoverable(this$1.lastTokStart, \"Multiple default clauses\");\n        }\n\n        sawDefault = true;\n        cur.test = null;\n      }\n\n      this$1.expect(types.colon);\n    } else {\n      if (!cur) {\n        this$1.unexpected();\n      }\n\n      cur.consequent.push(this$1.parseStatement(null));\n    }\n  }\n\n  this.exitScope();\n\n  if (cur) {\n    this.finishNode(cur, \"SwitchCase\");\n  }\n\n  this.next(); // Closing brace\n\n  this.labels.pop();\n  return this.finishNode(node, \"SwitchStatement\");\n};\n\npp$1.parseThrowStatement = function (node) {\n  this.next();\n\n  if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) {\n    this.raise(this.lastTokEnd, \"Illegal newline after throw\");\n  }\n\n  node.argument = this.parseExpression();\n  this.semicolon();\n  return this.finishNode(node, \"ThrowStatement\");\n}; // Reused empty array added for node fields that are always empty.\n\n\nvar empty = [];\n\npp$1.parseTryStatement = function (node) {\n  this.next();\n  node.block = this.parseBlock();\n  node.handler = null;\n\n  if (this.type === types._catch) {\n    var clause = this.startNode();\n    this.next();\n\n    if (this.eat(types.parenL)) {\n      clause.param = this.parseBindingAtom();\n      var simple = clause.param.type === \"Identifier\";\n      this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n      this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n      this.expect(types.parenR);\n    } else {\n      if (this.options.ecmaVersion < 10) {\n        this.unexpected();\n      }\n\n      clause.param = null;\n      this.enterScope(0);\n    }\n\n    clause.body = this.parseBlock(false);\n    this.exitScope();\n    node.handler = this.finishNode(clause, \"CatchClause\");\n  }\n\n  node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;\n\n  if (!node.handler && !node.finalizer) {\n    this.raise(node.start, \"Missing catch or finally clause\");\n  }\n\n  return this.finishNode(node, \"TryStatement\");\n};\n\npp$1.parseVarStatement = function (node, kind) {\n  this.next();\n  this.parseVar(node, false, kind);\n  this.semicolon();\n  return this.finishNode(node, \"VariableDeclaration\");\n};\n\npp$1.parseWhileStatement = function (node) {\n  this.next();\n  node.test = this.parseParenExpression();\n  this.labels.push(loopLabel);\n  node.body = this.parseStatement(\"while\");\n  this.labels.pop();\n  return this.finishNode(node, \"WhileStatement\");\n};\n\npp$1.parseWithStatement = function (node) {\n  if (this.strict) {\n    this.raise(this.start, \"'with' in strict mode\");\n  }\n\n  this.next();\n  node.object = this.parseParenExpression();\n  node.body = this.parseStatement(\"with\");\n  return this.finishNode(node, \"WithStatement\");\n};\n\npp$1.parseEmptyStatement = function (node) {\n  this.next();\n  return this.finishNode(node, \"EmptyStatement\");\n};\n\npp$1.parseLabeledStatement = function (node, maybeName, expr, context) {\n  var this$1 = this;\n\n  for (var i$1 = 0, list = this$1.labels; i$1 < list.length; i$1 += 1) {\n    var label = list[i$1];\n\n    if (label.name === maybeName) {\n      this$1.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n    }\n  }\n\n  var kind = this.type.isLoop ? \"loop\" : this.type === types._switch ? \"switch\" : null;\n\n  for (var i = this.labels.length - 1; i >= 0; i--) {\n    var label$1 = this$1.labels[i];\n\n    if (label$1.statementStart === node.start) {\n      // Update information about previous labels on this node\n      label$1.statementStart = this$1.start;\n      label$1.kind = kind;\n    } else {\n      break;\n    }\n  }\n\n  this.labels.push({\n    name: maybeName,\n    kind: kind,\n    statementStart: this.start\n  });\n  node.body = this.parseStatement(context);\n\n  if (node.body.type === \"ClassDeclaration\" || node.body.type === \"VariableDeclaration\" && node.body.kind !== \"var\" || node.body.type === \"FunctionDeclaration\" && (this.strict || node.body.generator || node.body.async)) {\n    this.raiseRecoverable(node.body.start, \"Invalid labeled declaration\");\n  }\n\n  this.labels.pop();\n  node.label = expr;\n  return this.finishNode(node, \"LabeledStatement\");\n};\n\npp$1.parseExpressionStatement = function (node, expr) {\n  node.expression = expr;\n  this.semicolon();\n  return this.finishNode(node, \"ExpressionStatement\");\n}; // Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\n\npp$1.parseBlock = function (createNewLexicalScope, node) {\n  var this$1 = this;\n  if (createNewLexicalScope === void 0) createNewLexicalScope = true;\n  if (node === void 0) node = this.startNode();\n  node.body = [];\n  this.expect(types.braceL);\n\n  if (createNewLexicalScope) {\n    this.enterScope(0);\n  }\n\n  while (!this.eat(types.braceR)) {\n    var stmt = this$1.parseStatement(null);\n    node.body.push(stmt);\n  }\n\n  if (createNewLexicalScope) {\n    this.exitScope();\n  }\n\n  return this.finishNode(node, \"BlockStatement\");\n}; // Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\n\npp$1.parseFor = function (node, init) {\n  node.init = init;\n  this.expect(types.semi);\n  node.test = this.type === types.semi ? null : this.parseExpression();\n  this.expect(types.semi);\n  node.update = this.type === types.parenR ? null : this.parseExpression();\n  this.expect(types.parenR);\n  this.exitScope();\n  node.body = this.parseStatement(\"for\");\n  this.labels.pop();\n  return this.finishNode(node, \"ForStatement\");\n}; // Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\n\npp$1.parseForIn = function (node, init) {\n  var type = this.type === types._in ? \"ForInStatement\" : \"ForOfStatement\";\n  this.next();\n\n  if (type === \"ForInStatement\") {\n    if (init.type === \"AssignmentPattern\" || init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (this.strict || init.declarations[0].id.type !== \"Identifier\")) {\n      this.raise(init.start, \"Invalid assignment in for-in loop head\");\n    }\n  }\n\n  node.left = init;\n  node.right = type === \"ForInStatement\" ? this.parseExpression() : this.parseMaybeAssign();\n  this.expect(types.parenR);\n  this.exitScope();\n  node.body = this.parseStatement(\"for\");\n  this.labels.pop();\n  return this.finishNode(node, type);\n}; // Parse a list of variable declarations.\n\n\npp$1.parseVar = function (node, isFor, kind) {\n  var this$1 = this;\n  node.declarations = [];\n  node.kind = kind;\n\n  for (;;) {\n    var decl = this$1.startNode();\n    this$1.parseVarId(decl, kind);\n\n    if (this$1.eat(types.eq)) {\n      decl.init = this$1.parseMaybeAssign(isFor);\n    } else if (kind === \"const\" && !(this$1.type === types._in || this$1.options.ecmaVersion >= 6 && this$1.isContextual(\"of\"))) {\n      this$1.unexpected();\n    } else if (decl.id.type !== \"Identifier\" && !(isFor && (this$1.type === types._in || this$1.isContextual(\"of\")))) {\n      this$1.raise(this$1.lastTokEnd, \"Complex binding patterns require an initialization value\");\n    } else {\n      decl.init = null;\n    }\n\n    node.declarations.push(this$1.finishNode(decl, \"VariableDeclarator\"));\n\n    if (!this$1.eat(types.comma)) {\n      break;\n    }\n  }\n\n  return node;\n};\n\npp$1.parseVarId = function (decl, kind) {\n  decl.id = this.parseBindingAtom(kind);\n  this.checkLVal(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1;\nvar FUNC_HANGING_STATEMENT = 2;\nvar FUNC_NULLABLE_ID = 4; // Parse a function declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$1.parseFunction = function (node, statement, allowExpressionBody, isAsync) {\n  this.initFunction(node);\n\n  if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n    node.generator = this.eat(types.star);\n  }\n\n  if (this.options.ecmaVersion >= 8) {\n    node.async = !!isAsync;\n  }\n\n  if (statement & FUNC_STATEMENT) {\n    node.id = statement & FUNC_NULLABLE_ID && this.type !== types.name ? null : this.parseIdent();\n\n    if (node.id && !(statement & FUNC_HANGING_STATEMENT)) {\n      this.checkLVal(node.id, this.inModule && !this.inFunction ? BIND_LEXICAL : BIND_FUNCTION);\n    }\n  }\n\n  var oldYieldPos = this.yieldPos,\n      oldAwaitPos = this.awaitPos;\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.enterScope(functionFlags(node.async, node.generator));\n\n  if (!(statement & FUNC_STATEMENT)) {\n    node.id = this.type === types.name ? this.parseIdent() : null;\n  }\n\n  this.parseFunctionParams(node);\n  this.parseFunctionBody(node, allowExpressionBody);\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  return this.finishNode(node, statement & FUNC_STATEMENT ? \"FunctionDeclaration\" : \"FunctionExpression\");\n};\n\npp$1.parseFunctionParams = function (node) {\n  this.expect(types.parenL);\n  node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n}; // Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\n\npp$1.parseClass = function (node, isStatement) {\n  var this$1 = this;\n  this.next();\n  this.parseClassId(node, isStatement);\n  this.parseClassSuper(node);\n  var classBody = this.startNode();\n  var hadConstructor = false;\n  classBody.body = [];\n  this.expect(types.braceL);\n\n  while (!this.eat(types.braceR)) {\n    var element = this$1.parseClassElement();\n\n    if (element) {\n      classBody.body.push(element);\n\n      if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n        if (hadConstructor) {\n          this$1.raise(element.start, \"Duplicate constructor in the same class\");\n        }\n\n        hadConstructor = true;\n      }\n    }\n  }\n\n  node.body = this.finishNode(classBody, \"ClassBody\");\n  return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n};\n\npp$1.parseClassElement = function () {\n  var this$1 = this;\n\n  if (this.eat(types.semi)) {\n    return null;\n  }\n\n  var method = this.startNode();\n\n  var tryContextual = function tryContextual(k, noLineBreak) {\n    if (noLineBreak === void 0) noLineBreak = false;\n    var start = this$1.start,\n        startLoc = this$1.startLoc;\n\n    if (!this$1.eatContextual(k)) {\n      return false;\n    }\n\n    if (this$1.type !== types.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) {\n      return true;\n    }\n\n    if (method.key) {\n      this$1.unexpected();\n    }\n\n    method.computed = false;\n    method.key = this$1.startNodeAt(start, startLoc);\n    method.key.name = k;\n    this$1.finishNode(method.key, \"Identifier\");\n    return false;\n  };\n\n  method.kind = \"method\";\n  method.static = tryContextual(\"static\");\n  var isGenerator = this.eat(types.star);\n  var isAsync = false;\n\n  if (!isGenerator) {\n    if (this.options.ecmaVersion >= 8 && tryContextual(\"async\", true)) {\n      isAsync = true;\n      isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);\n    } else if (tryContextual(\"get\")) {\n      method.kind = \"get\";\n    } else if (tryContextual(\"set\")) {\n      method.kind = \"set\";\n    }\n  }\n\n  if (!method.key) {\n    this.parsePropertyName(method);\n  }\n\n  var key = method.key;\n\n  if (!method.computed && !method.static && (key.type === \"Identifier\" && key.name === \"constructor\" || key.type === \"Literal\" && key.value === \"constructor\")) {\n    if (method.kind !== \"method\") {\n      this.raise(key.start, \"Constructor can't have get/set modifier\");\n    }\n\n    if (isGenerator) {\n      this.raise(key.start, \"Constructor can't be a generator\");\n    }\n\n    if (isAsync) {\n      this.raise(key.start, \"Constructor can't be an async method\");\n    }\n\n    method.kind = \"constructor\";\n  } else if (method.static && key.type === \"Identifier\" && key.name === \"prototype\") {\n    this.raise(key.start, \"Classes may not have a static property named prototype\");\n  }\n\n  this.parseClassMethod(method, isGenerator, isAsync);\n\n  if (method.kind === \"get\" && method.value.params.length !== 0) {\n    this.raiseRecoverable(method.value.start, \"getter should have no params\");\n  }\n\n  if (method.kind === \"set\" && method.value.params.length !== 1) {\n    this.raiseRecoverable(method.value.start, \"setter should have exactly one param\");\n  }\n\n  if (method.kind === \"set\" && method.value.params[0].type === \"RestElement\") {\n    this.raiseRecoverable(method.value.params[0].start, \"Setter cannot use rest params\");\n  }\n\n  return method;\n};\n\npp$1.parseClassMethod = function (method, isGenerator, isAsync) {\n  method.value = this.parseMethod(isGenerator, isAsync);\n  return this.finishNode(method, \"MethodDefinition\");\n};\n\npp$1.parseClassId = function (node, isStatement) {\n  node.id = this.type === types.name ? this.parseIdent() : isStatement === true ? this.unexpected() : null;\n};\n\npp$1.parseClassSuper = function (node) {\n  node.superClass = this.eat(types._extends) ? this.parseExprSubscripts() : null;\n}; // Parses module export declaration.\n\n\npp$1.parseExport = function (node, exports) {\n  var this$1 = this;\n  this.next(); // export * from '...'\n\n  if (this.eat(types.star)) {\n    this.expectContextual(\"from\");\n\n    if (this.type !== types.string) {\n      this.unexpected();\n    }\n\n    node.source = this.parseExprAtom();\n    this.semicolon();\n    return this.finishNode(node, \"ExportAllDeclaration\");\n  }\n\n  if (this.eat(types._default)) {\n    // export default ...\n    this.checkExport(exports, \"default\", this.lastTokStart);\n    var isAsync;\n\n    if (this.type === types._function || (isAsync = this.isAsyncFunction())) {\n      var fNode = this.startNode();\n      this.next();\n\n      if (isAsync) {\n        this.next();\n      }\n\n      node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync, true);\n    } else if (this.type === types._class) {\n      var cNode = this.startNode();\n      node.declaration = this.parseClass(cNode, \"nullableID\");\n    } else {\n      node.declaration = this.parseMaybeAssign();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ExportDefaultDeclaration\");\n  } // export var|const|let|function|class ...\n\n\n  if (this.shouldParseExportStatement()) {\n    node.declaration = this.parseStatement(null);\n\n    if (node.declaration.type === \"VariableDeclaration\") {\n      this.checkVariableExport(exports, node.declaration.declarations);\n    } else {\n      this.checkExport(exports, node.declaration.id.name, node.declaration.id.start);\n    }\n\n    node.specifiers = [];\n    node.source = null;\n  } else {\n    // export { x, y as z } [from '...']\n    node.declaration = null;\n    node.specifiers = this.parseExportSpecifiers(exports);\n\n    if (this.eatContextual(\"from\")) {\n      if (this.type !== types.string) {\n        this.unexpected();\n      }\n\n      node.source = this.parseExprAtom();\n    } else {\n      // check for keywords used as local names\n      for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n        var spec = list[i];\n        this$1.checkUnreserved(spec.local);\n      }\n\n      node.source = null;\n    }\n\n    this.semicolon();\n  }\n\n  return this.finishNode(node, \"ExportNamedDeclaration\");\n};\n\npp$1.checkExport = function (exports, name, pos) {\n  if (!exports) {\n    return;\n  }\n\n  if (has(exports, name)) {\n    this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\");\n  }\n\n  exports[name] = true;\n};\n\npp$1.checkPatternExport = function (exports, pat) {\n  var this$1 = this;\n  var type = pat.type;\n\n  if (type === \"Identifier\") {\n    this.checkExport(exports, pat.name, pat.start);\n  } else if (type === \"ObjectPattern\") {\n    for (var i = 0, list = pat.properties; i < list.length; i += 1) {\n      var prop = list[i];\n      this$1.checkPatternExport(exports, prop);\n    }\n  } else if (type === \"ArrayPattern\") {\n    for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n      var elt = list$1[i$1];\n\n      if (elt) {\n        this$1.checkPatternExport(exports, elt);\n      }\n    }\n  } else if (type === \"Property\") {\n    this.checkPatternExport(exports, pat.value);\n  } else if (type === \"AssignmentPattern\") {\n    this.checkPatternExport(exports, pat.left);\n  } else if (type === \"RestElement\") {\n    this.checkPatternExport(exports, pat.argument);\n  } else if (type === \"ParenthesizedExpression\") {\n    this.checkPatternExport(exports, pat.expression);\n  }\n};\n\npp$1.checkVariableExport = function (exports, decls) {\n  var this$1 = this;\n\n  if (!exports) {\n    return;\n  }\n\n  for (var i = 0, list = decls; i < list.length; i += 1) {\n    var decl = list[i];\n    this$1.checkPatternExport(exports, decl.id);\n  }\n};\n\npp$1.shouldParseExportStatement = function () {\n  return this.type.keyword === \"var\" || this.type.keyword === \"const\" || this.type.keyword === \"class\" || this.type.keyword === \"function\" || this.isLet() || this.isAsyncFunction();\n}; // Parses a comma-separated list of module exports.\n\n\npp$1.parseExportSpecifiers = function (exports) {\n  var this$1 = this;\n  var nodes = [],\n      first = true; // export { x, y as z } [from '...']\n\n  this.expect(types.braceL);\n\n  while (!this.eat(types.braceR)) {\n    if (!first) {\n      this$1.expect(types.comma);\n\n      if (this$1.afterTrailingComma(types.braceR)) {\n        break;\n      }\n    } else {\n      first = false;\n    }\n\n    var node = this$1.startNode();\n    node.local = this$1.parseIdent(true);\n    node.exported = this$1.eatContextual(\"as\") ? this$1.parseIdent(true) : node.local;\n    this$1.checkExport(exports, node.exported.name, node.exported.start);\n    nodes.push(this$1.finishNode(node, \"ExportSpecifier\"));\n  }\n\n  return nodes;\n}; // Parses import declaration.\n\n\npp$1.parseImport = function (node) {\n  this.next(); // import '...'\n\n  if (this.type === types.string) {\n    node.specifiers = empty;\n    node.source = this.parseExprAtom();\n  } else {\n    node.specifiers = this.parseImportSpecifiers();\n    this.expectContextual(\"from\");\n    node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();\n  }\n\n  this.semicolon();\n  return this.finishNode(node, \"ImportDeclaration\");\n}; // Parses a comma-separated list of module imports.\n\n\npp$1.parseImportSpecifiers = function () {\n  var this$1 = this;\n  var nodes = [],\n      first = true;\n\n  if (this.type === types.name) {\n    // import defaultObj, { x, y as z } from '...'\n    var node = this.startNode();\n    node.local = this.parseIdent();\n    this.checkLVal(node.local, BIND_LEXICAL);\n    nodes.push(this.finishNode(node, \"ImportDefaultSpecifier\"));\n\n    if (!this.eat(types.comma)) {\n      return nodes;\n    }\n  }\n\n  if (this.type === types.star) {\n    var node$1 = this.startNode();\n    this.next();\n    this.expectContextual(\"as\");\n    node$1.local = this.parseIdent();\n    this.checkLVal(node$1.local, BIND_LEXICAL);\n    nodes.push(this.finishNode(node$1, \"ImportNamespaceSpecifier\"));\n    return nodes;\n  }\n\n  this.expect(types.braceL);\n\n  while (!this.eat(types.braceR)) {\n    if (!first) {\n      this$1.expect(types.comma);\n\n      if (this$1.afterTrailingComma(types.braceR)) {\n        break;\n      }\n    } else {\n      first = false;\n    }\n\n    var node$2 = this$1.startNode();\n    node$2.imported = this$1.parseIdent(true);\n\n    if (this$1.eatContextual(\"as\")) {\n      node$2.local = this$1.parseIdent();\n    } else {\n      this$1.checkUnreserved(node$2.imported);\n      node$2.local = node$2.imported;\n    }\n\n    this$1.checkLVal(node$2.local, BIND_LEXICAL);\n    nodes.push(this$1.finishNode(node$2, \"ImportSpecifier\"));\n  }\n\n  return nodes;\n}; // Set `ExpressionStatement#directive` property for directive prologues.\n\n\npp$1.adaptDirectivePrologue = function (statements) {\n  for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n    statements[i].directive = statements[i].expression.raw.slice(1, -1);\n  }\n};\n\npp$1.isDirectiveCandidate = function (statement) {\n  return statement.type === \"ExpressionStatement\" && statement.expression.type === \"Literal\" && typeof statement.expression.value === \"string\" && ( // Reject parenthesized strings.\n  this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\");\n};\n\nvar pp$2 = Parser.prototype; // Convert existing expression atom to assignable pattern\n// if possible.\n\npp$2.toAssignable = function (node, isBinding, refDestructuringErrors) {\n  var this$1 = this;\n\n  if (this.options.ecmaVersion >= 6 && node) {\n    switch (node.type) {\n      case \"Identifier\":\n        if (this.inAsync && node.name === \"await\") {\n          this.raise(node.start, \"Can not use 'await' as identifier inside an async function\");\n        }\n\n        break;\n\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"RestElement\":\n        break;\n\n      case \"ObjectExpression\":\n        node.type = \"ObjectPattern\";\n\n        if (refDestructuringErrors) {\n          this.checkPatternErrors(refDestructuringErrors, true);\n        }\n\n        for (var i = 0, list = node.properties; i < list.length; i += 1) {\n          var prop = list[i];\n          this$1.toAssignable(prop, isBinding); // Early error:\n          //   AssignmentRestProperty[Yield, Await] :\n          //     `...` DestructuringAssignmentTarget[Yield, Await]\n          //\n          //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n\n          if (prop.type === \"RestElement\" && (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")) {\n            this$1.raise(prop.argument.start, \"Unexpected token\");\n          }\n        }\n\n        break;\n\n      case \"Property\":\n        // AssignmentProperty has type === \"Property\"\n        if (node.kind !== \"init\") {\n          this.raise(node.key.start, \"Object pattern can't contain getter or setter\");\n        }\n\n        this.toAssignable(node.value, isBinding);\n        break;\n\n      case \"ArrayExpression\":\n        node.type = \"ArrayPattern\";\n\n        if (refDestructuringErrors) {\n          this.checkPatternErrors(refDestructuringErrors, true);\n        }\n\n        this.toAssignableList(node.elements, isBinding);\n        break;\n\n      case \"SpreadElement\":\n        node.type = \"RestElement\";\n        this.toAssignable(node.argument, isBinding);\n\n        if (node.argument.type === \"AssignmentPattern\") {\n          this.raise(node.argument.start, \"Rest elements cannot have a default value\");\n        }\n\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\");\n        }\n\n        node.type = \"AssignmentPattern\";\n        delete node.operator;\n        this.toAssignable(node.left, isBinding);\n      // falls through to AssignmentPattern\n\n      case \"AssignmentPattern\":\n        break;\n\n      case \"ParenthesizedExpression\":\n        this.toAssignable(node.expression, isBinding);\n        break;\n\n      case \"MemberExpression\":\n        if (!isBinding) {\n          break;\n        }\n\n      default:\n        this.raise(node.start, \"Assigning to rvalue\");\n    }\n  } else if (refDestructuringErrors) {\n    this.checkPatternErrors(refDestructuringErrors, true);\n  }\n\n  return node;\n}; // Convert list of expression atoms to binding list.\n\n\npp$2.toAssignableList = function (exprList, isBinding) {\n  var this$1 = this;\n  var end = exprList.length;\n\n  for (var i = 0; i < end; i++) {\n    var elt = exprList[i];\n\n    if (elt) {\n      this$1.toAssignable(elt, isBinding);\n    }\n  }\n\n  if (end) {\n    var last = exprList[end - 1];\n\n    if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\") {\n      this.unexpected(last.argument.start);\n    }\n  }\n\n  return exprList;\n}; // Parses spread element.\n\n\npp$2.parseSpread = function (refDestructuringErrors) {\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n  return this.finishNode(node, \"SpreadElement\");\n};\n\npp$2.parseRestBinding = function () {\n  var node = this.startNode();\n  this.next(); // RestElement inside of a function parameter must be an identifier\n\n  if (this.options.ecmaVersion === 6 && this.type !== types.name) {\n    this.unexpected();\n  }\n\n  node.argument = this.parseBindingAtom();\n  return this.finishNode(node, \"RestElement\");\n}; // Parses lvalue (assignable) atom.\n\n\npp$2.parseBindingAtom = function () {\n  if (this.options.ecmaVersion >= 6) {\n    switch (this.type) {\n      case types.bracketL:\n        var node = this.startNode();\n        this.next();\n        node.elements = this.parseBindingList(types.bracketR, true, true);\n        return this.finishNode(node, \"ArrayPattern\");\n\n      case types.braceL:\n        return this.parseObj(true);\n    }\n  }\n\n  return this.parseIdent();\n};\n\npp$2.parseBindingList = function (close, allowEmpty, allowTrailingComma) {\n  var this$1 = this;\n  var elts = [],\n      first = true;\n\n  while (!this.eat(close)) {\n    if (first) {\n      first = false;\n    } else {\n      this$1.expect(types.comma);\n    }\n\n    if (allowEmpty && this$1.type === types.comma) {\n      elts.push(null);\n    } else if (allowTrailingComma && this$1.afterTrailingComma(close)) {\n      break;\n    } else if (this$1.type === types.ellipsis) {\n      var rest = this$1.parseRestBinding();\n      this$1.parseBindingListItem(rest);\n      elts.push(rest);\n\n      if (this$1.type === types.comma) {\n        this$1.raise(this$1.start, \"Comma is not permitted after the rest element\");\n      }\n\n      this$1.expect(close);\n      break;\n    } else {\n      var elem = this$1.parseMaybeDefault(this$1.start, this$1.startLoc);\n      this$1.parseBindingListItem(elem);\n      elts.push(elem);\n    }\n  }\n\n  return elts;\n};\n\npp$2.parseBindingListItem = function (param) {\n  return param;\n}; // Parses assignment pattern around given atom if possible.\n\n\npp$2.parseMaybeDefault = function (startPos, startLoc, left) {\n  left = left || this.parseBindingAtom();\n\n  if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) {\n    return left;\n  }\n\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.right = this.parseMaybeAssign();\n  return this.finishNode(node, \"AssignmentPattern\");\n}; // Verify that a node is an lval — something that can be assigned\n// to.\n// bindingType can be either:\n// 'var' indicating that the lval creates a 'var' binding\n// 'let' indicating that the lval creates a lexical ('let' or 'const') binding\n// 'none' indicating that the binding should be checked for illegal identifiers, but not for duplicate references\n\n\npp$2.checkLVal = function (expr, bindingType, checkClashes) {\n  var this$1 = this;\n  if (bindingType === void 0) bindingType = BIND_NONE;\n\n  switch (expr.type) {\n    case \"Identifier\":\n      if (this.strict && this.reservedWordsStrictBind.test(expr.name)) {\n        this.raiseRecoverable(expr.start, (bindingType ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\");\n      }\n\n      if (checkClashes) {\n        if (has(checkClashes, expr.name)) {\n          this.raiseRecoverable(expr.start, \"Argument name clash\");\n        }\n\n        checkClashes[expr.name] = true;\n      }\n\n      if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) {\n        this.declareName(expr.name, bindingType, expr.start);\n      }\n\n      break;\n\n    case \"MemberExpression\":\n      if (bindingType) {\n        this.raiseRecoverable(expr.start, \"Binding member expression\");\n      }\n\n      break;\n\n    case \"ObjectPattern\":\n      for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n        var prop = list[i];\n        this$1.checkLVal(prop, bindingType, checkClashes);\n      }\n\n      break;\n\n    case \"Property\":\n      // AssignmentProperty has type === \"Property\"\n      this.checkLVal(expr.value, bindingType, checkClashes);\n      break;\n\n    case \"ArrayPattern\":\n      for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n        var elem = list$1[i$1];\n\n        if (elem) {\n          this$1.checkLVal(elem, bindingType, checkClashes);\n        }\n      }\n\n      break;\n\n    case \"AssignmentPattern\":\n      this.checkLVal(expr.left, bindingType, checkClashes);\n      break;\n\n    case \"RestElement\":\n      this.checkLVal(expr.argument, bindingType, checkClashes);\n      break;\n\n    case \"ParenthesizedExpression\":\n      this.checkLVal(expr.expression, bindingType, checkClashes);\n      break;\n\n    default:\n      this.raise(expr.start, (bindingType ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n  }\n}; // A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$3 = Parser.prototype; // Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$3.checkPropClash = function (prop, propHash, refDestructuringErrors) {\n  if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\") {\n    return;\n  }\n\n  if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) {\n    return;\n  }\n\n  var key = prop.key;\n  var name;\n\n  switch (key.type) {\n    case \"Identifier\":\n      name = key.name;\n      break;\n\n    case \"Literal\":\n      name = String(key.value);\n      break;\n\n    default:\n      return;\n  }\n\n  var kind = prop.kind;\n\n  if (this.options.ecmaVersion >= 6) {\n    if (name === \"__proto__\" && kind === \"init\") {\n      if (propHash.proto) {\n        if (refDestructuringErrors && refDestructuringErrors.doubleProto < 0) {\n          refDestructuringErrors.doubleProto = key.start;\n        } // Backwards-compat kludge. Can be removed in version 6.0\n        else {\n            this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n          }\n      }\n\n      propHash.proto = true;\n    }\n\n    return;\n  }\n\n  name = \"$\" + name;\n  var other = propHash[name];\n\n  if (other) {\n    var redefinition;\n\n    if (kind === \"init\") {\n      redefinition = this.strict && other.init || other.get || other.set;\n    } else {\n      redefinition = other.init || other[kind];\n    }\n\n    if (redefinition) {\n      this.raiseRecoverable(key.start, \"Redefinition of property\");\n    }\n  } else {\n    other = propHash[name] = {\n      init: false,\n      get: false,\n      set: false\n    };\n  }\n\n  other[kind] = true;\n}; // ### Expression parsing\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\n\npp$3.parseExpression = function (noIn, refDestructuringErrors) {\n  var this$1 = this;\n  var startPos = this.start,\n      startLoc = this.startLoc;\n  var expr = this.parseMaybeAssign(noIn, refDestructuringErrors);\n\n  if (this.type === types.comma) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.expressions = [expr];\n\n    while (this.eat(types.comma)) {\n      node.expressions.push(this$1.parseMaybeAssign(noIn, refDestructuringErrors));\n    }\n\n    return this.finishNode(node, \"SequenceExpression\");\n  }\n\n  return expr;\n}; // Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\n\npp$3.parseMaybeAssign = function (noIn, refDestructuringErrors, afterLeftParse) {\n  if (this.isContextual(\"yield\")) {\n    if (this.inGenerator) {\n      return this.parseYield();\n    } // The tokenizer will assume an expression is allowed after\n    // `yield`, but this isn't that kind of yield\n    else {\n        this.exprAllowed = false;\n      }\n  }\n\n  var ownDestructuringErrors = false,\n      oldParenAssign = -1,\n      oldTrailingComma = -1,\n      oldShorthandAssign = -1;\n\n  if (refDestructuringErrors) {\n    oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n    oldTrailingComma = refDestructuringErrors.trailingComma;\n    oldShorthandAssign = refDestructuringErrors.shorthandAssign;\n    refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.shorthandAssign = -1;\n  } else {\n    refDestructuringErrors = new DestructuringErrors();\n    ownDestructuringErrors = true;\n  }\n\n  var startPos = this.start,\n      startLoc = this.startLoc;\n\n  if (this.type === types.parenL || this.type === types.name) {\n    this.potentialArrowAt = this.start;\n  }\n\n  var left = this.parseMaybeConditional(noIn, refDestructuringErrors);\n\n  if (afterLeftParse) {\n    left = afterLeftParse.call(this, left, startPos, startLoc);\n  }\n\n  if (this.type.isAssign) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.operator = this.value;\n    node.left = this.type === types.eq ? this.toAssignable(left, false, refDestructuringErrors) : left;\n\n    if (!ownDestructuringErrors) {\n      DestructuringErrors.call(refDestructuringErrors);\n    }\n\n    refDestructuringErrors.shorthandAssign = -1; // reset because shorthand default was used correctly\n\n    this.checkLVal(left);\n    this.next();\n    node.right = this.parseMaybeAssign(noIn);\n    return this.finishNode(node, \"AssignmentExpression\");\n  } else {\n    if (ownDestructuringErrors) {\n      this.checkExpressionErrors(refDestructuringErrors, true);\n    }\n  }\n\n  if (oldParenAssign > -1) {\n    refDestructuringErrors.parenthesizedAssign = oldParenAssign;\n  }\n\n  if (oldTrailingComma > -1) {\n    refDestructuringErrors.trailingComma = oldTrailingComma;\n  }\n\n  if (oldShorthandAssign > -1) {\n    refDestructuringErrors.shorthandAssign = oldShorthandAssign;\n  }\n\n  return left;\n}; // Parse a ternary conditional (`?:`) operator.\n\n\npp$3.parseMaybeConditional = function (noIn, refDestructuringErrors) {\n  var startPos = this.start,\n      startLoc = this.startLoc;\n  var expr = this.parseExprOps(noIn, refDestructuringErrors);\n\n  if (this.checkExpressionErrors(refDestructuringErrors)) {\n    return expr;\n  }\n\n  if (this.eat(types.question)) {\n    var node = this.startNodeAt(startPos, startLoc);\n    node.test = expr;\n    node.consequent = this.parseMaybeAssign();\n    this.expect(types.colon);\n    node.alternate = this.parseMaybeAssign(noIn);\n    return this.finishNode(node, \"ConditionalExpression\");\n  }\n\n  return expr;\n}; // Start the precedence parser.\n\n\npp$3.parseExprOps = function (noIn, refDestructuringErrors) {\n  var startPos = this.start,\n      startLoc = this.startLoc;\n  var expr = this.parseMaybeUnary(refDestructuringErrors, false);\n\n  if (this.checkExpressionErrors(refDestructuringErrors)) {\n    return expr;\n  }\n\n  return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn);\n}; // Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\n\npp$3.parseExprOp = function (left, leftStartPos, leftStartLoc, minPrec, noIn) {\n  var prec = this.type.binop;\n\n  if (prec != null && (!noIn || this.type !== types._in)) {\n    if (prec > minPrec) {\n      var logical = this.type === types.logicalOR || this.type === types.logicalAND;\n      var op = this.value;\n      this.next();\n      var startPos = this.start,\n          startLoc = this.startLoc;\n      var right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn);\n      var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical);\n      return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn);\n    }\n  }\n\n  return left;\n};\n\npp$3.buildBinary = function (startPos, startLoc, left, right, op, logical) {\n  var node = this.startNodeAt(startPos, startLoc);\n  node.left = left;\n  node.operator = op;\n  node.right = right;\n  return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\");\n}; // Parse unary operators, both prefix and postfix.\n\n\npp$3.parseMaybeUnary = function (refDestructuringErrors, sawUnary) {\n  var this$1 = this;\n  var startPos = this.start,\n      startLoc = this.startLoc,\n      expr;\n\n  if (this.isContextual(\"await\") && (this.inAsync || !this.inFunction && this.options.allowAwaitOutsideFunction)) {\n    expr = this.parseAwait();\n    sawUnary = true;\n  } else if (this.type.prefix) {\n    var node = this.startNode(),\n        update = this.type === types.incDec;\n    node.operator = this.value;\n    node.prefix = true;\n    this.next();\n    node.argument = this.parseMaybeUnary(null, true);\n    this.checkExpressionErrors(refDestructuringErrors, true);\n\n    if (update) {\n      this.checkLVal(node.argument);\n    } else if (this.strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") {\n      this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\");\n    } else {\n      sawUnary = true;\n    }\n\n    expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n  } else {\n    expr = this.parseExprSubscripts(refDestructuringErrors);\n\n    if (this.checkExpressionErrors(refDestructuringErrors)) {\n      return expr;\n    }\n\n    while (this.type.postfix && !this.canInsertSemicolon()) {\n      var node$1 = this$1.startNodeAt(startPos, startLoc);\n      node$1.operator = this$1.value;\n      node$1.prefix = false;\n      node$1.argument = expr;\n      this$1.checkLVal(expr);\n      this$1.next();\n      expr = this$1.finishNode(node$1, \"UpdateExpression\");\n    }\n  }\n\n  if (!sawUnary && this.eat(types.starstar)) {\n    return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), \"**\", false);\n  } else {\n    return expr;\n  }\n}; // Parse call, dot, and `[]`-subscript expressions.\n\n\npp$3.parseExprSubscripts = function (refDestructuringErrors) {\n  var startPos = this.start,\n      startLoc = this.startLoc;\n  var expr = this.parseExprAtom(refDestructuringErrors);\n  var skipArrowSubscripts = expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\";\n\n  if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) {\n    return expr;\n  }\n\n  var result = this.parseSubscripts(expr, startPos, startLoc);\n\n  if (refDestructuringErrors && result.type === \"MemberExpression\") {\n    if (refDestructuringErrors.parenthesizedAssign >= result.start) {\n      refDestructuringErrors.parenthesizedAssign = -1;\n    }\n\n    if (refDestructuringErrors.parenthesizedBind >= result.start) {\n      refDestructuringErrors.parenthesizedBind = -1;\n    }\n  }\n\n  return result;\n};\n\npp$3.parseSubscripts = function (base, startPos, startLoc, noCalls) {\n  var this$1 = this;\n  var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && this.input.slice(base.start, base.end) === \"async\";\n\n  for (var computed = void 0;;) {\n    if ((computed = this$1.eat(types.bracketL)) || this$1.eat(types.dot)) {\n      var node = this$1.startNodeAt(startPos, startLoc);\n      node.object = base;\n      node.property = computed ? this$1.parseExpression() : this$1.parseIdent(true);\n      node.computed = !!computed;\n\n      if (computed) {\n        this$1.expect(types.bracketR);\n      }\n\n      base = this$1.finishNode(node, \"MemberExpression\");\n    } else if (!noCalls && this$1.eat(types.parenL)) {\n      var refDestructuringErrors = new DestructuringErrors(),\n          oldYieldPos = this$1.yieldPos,\n          oldAwaitPos = this$1.awaitPos;\n      this$1.yieldPos = 0;\n      this$1.awaitPos = 0;\n      var exprList = this$1.parseExprList(types.parenR, this$1.options.ecmaVersion >= 8, false, refDestructuringErrors);\n\n      if (maybeAsyncArrow && !this$1.canInsertSemicolon() && this$1.eat(types.arrow)) {\n        this$1.checkPatternErrors(refDestructuringErrors, false);\n        this$1.checkYieldAwaitInDefaultParams();\n        this$1.yieldPos = oldYieldPos;\n        this$1.awaitPos = oldAwaitPos;\n        return this$1.parseArrowExpression(this$1.startNodeAt(startPos, startLoc), exprList, true);\n      }\n\n      this$1.checkExpressionErrors(refDestructuringErrors, true);\n      this$1.yieldPos = oldYieldPos || this$1.yieldPos;\n      this$1.awaitPos = oldAwaitPos || this$1.awaitPos;\n      var node$1 = this$1.startNodeAt(startPos, startLoc);\n      node$1.callee = base;\n      node$1.arguments = exprList;\n      base = this$1.finishNode(node$1, \"CallExpression\");\n    } else if (this$1.type === types.backQuote) {\n      var node$2 = this$1.startNodeAt(startPos, startLoc);\n      node$2.tag = base;\n      node$2.quasi = this$1.parseTemplate({\n        isTagged: true\n      });\n      base = this$1.finishNode(node$2, \"TaggedTemplateExpression\");\n    } else {\n      return base;\n    }\n  }\n}; // Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\n\npp$3.parseExprAtom = function (refDestructuringErrors) {\n  var node,\n      canBeArrow = this.potentialArrowAt === this.start;\n\n  switch (this.type) {\n    case types._super:\n      if (!this.inFunction) {\n        this.raise(this.start, \"'super' outside of function or class\");\n      }\n\n      node = this.startNode();\n      this.next(); // The `super` keyword can appear at below:\n      // SuperProperty:\n      //     super [ Expression ]\n      //     super . IdentifierName\n      // SuperCall:\n      //     super Arguments\n\n      if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL) {\n        this.unexpected();\n      }\n\n      return this.finishNode(node, \"Super\");\n\n    case types._this:\n      node = this.startNode();\n      this.next();\n      return this.finishNode(node, \"ThisExpression\");\n\n    case types.name:\n      var startPos = this.start,\n          startLoc = this.startLoc,\n          containsEsc = this.containsEsc;\n      var id = this.parseIdent(this.type !== types.name);\n\n      if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types._function)) {\n        return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true);\n      }\n\n      if (canBeArrow && !this.canInsertSemicolon()) {\n        if (this.eat(types.arrow)) {\n          return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false);\n        }\n\n        if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types.name && !containsEsc) {\n          id = this.parseIdent();\n\n          if (this.canInsertSemicolon() || !this.eat(types.arrow)) {\n            this.unexpected();\n          }\n\n          return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true);\n        }\n      }\n\n      return id;\n\n    case types.regexp:\n      var value = this.value;\n      node = this.parseLiteral(value.value);\n      node.regex = {\n        pattern: value.pattern,\n        flags: value.flags\n      };\n      return node;\n\n    case types.num:\n    case types.string:\n      return this.parseLiteral(this.value);\n\n    case types._null:\n    case types._true:\n    case types._false:\n      node = this.startNode();\n      node.value = this.type === types._null ? null : this.type === types._true;\n      node.raw = this.type.keyword;\n      this.next();\n      return this.finishNode(node, \"Literal\");\n\n    case types.parenL:\n      var start = this.start,\n          expr = this.parseParenAndDistinguishExpression(canBeArrow);\n\n      if (refDestructuringErrors) {\n        if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) {\n          refDestructuringErrors.parenthesizedAssign = start;\n        }\n\n        if (refDestructuringErrors.parenthesizedBind < 0) {\n          refDestructuringErrors.parenthesizedBind = start;\n        }\n      }\n\n      return expr;\n\n    case types.bracketL:\n      node = this.startNode();\n      this.next();\n      node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);\n      return this.finishNode(node, \"ArrayExpression\");\n\n    case types.braceL:\n      return this.parseObj(false, refDestructuringErrors);\n\n    case types._function:\n      node = this.startNode();\n      this.next();\n      return this.parseFunction(node, 0);\n\n    case types._class:\n      return this.parseClass(this.startNode(), false);\n\n    case types._new:\n      return this.parseNew();\n\n    case types.backQuote:\n      return this.parseTemplate();\n\n    default:\n      this.unexpected();\n  }\n};\n\npp$3.parseLiteral = function (value) {\n  var node = this.startNode();\n  node.value = value;\n  node.raw = this.input.slice(this.start, this.end);\n  this.next();\n  return this.finishNode(node, \"Literal\");\n};\n\npp$3.parseParenExpression = function () {\n  this.expect(types.parenL);\n  var val = this.parseExpression();\n  this.expect(types.parenR);\n  return val;\n};\n\npp$3.parseParenAndDistinguishExpression = function (canBeArrow) {\n  var this$1 = this;\n  var startPos = this.start,\n      startLoc = this.startLoc,\n      val,\n      allowTrailingComma = this.options.ecmaVersion >= 8;\n\n  if (this.options.ecmaVersion >= 6) {\n    this.next();\n    var innerStartPos = this.start,\n        innerStartLoc = this.startLoc;\n    var exprList = [],\n        first = true,\n        lastIsComma = false;\n    var refDestructuringErrors = new DestructuringErrors(),\n        oldYieldPos = this.yieldPos,\n        oldAwaitPos = this.awaitPos,\n        spreadStart;\n    this.yieldPos = 0;\n    this.awaitPos = 0;\n\n    while (this.type !== types.parenR) {\n      first ? first = false : this$1.expect(types.comma);\n\n      if (allowTrailingComma && this$1.afterTrailingComma(types.parenR, true)) {\n        lastIsComma = true;\n        break;\n      } else if (this$1.type === types.ellipsis) {\n        spreadStart = this$1.start;\n        exprList.push(this$1.parseParenItem(this$1.parseRestBinding()));\n\n        if (this$1.type === types.comma) {\n          this$1.raise(this$1.start, \"Comma is not permitted after the rest element\");\n        }\n\n        break;\n      } else {\n        exprList.push(this$1.parseMaybeAssign(false, refDestructuringErrors, this$1.parseParenItem));\n      }\n    }\n\n    var innerEndPos = this.start,\n        innerEndLoc = this.startLoc;\n    this.expect(types.parenR);\n\n    if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n      this.checkPatternErrors(refDestructuringErrors, false);\n      this.checkYieldAwaitInDefaultParams();\n      this.yieldPos = oldYieldPos;\n      this.awaitPos = oldAwaitPos;\n      return this.parseParenArrowList(startPos, startLoc, exprList);\n    }\n\n    if (!exprList.length || lastIsComma) {\n      this.unexpected(this.lastTokStart);\n    }\n\n    if (spreadStart) {\n      this.unexpected(spreadStart);\n    }\n\n    this.checkExpressionErrors(refDestructuringErrors, true);\n    this.yieldPos = oldYieldPos || this.yieldPos;\n    this.awaitPos = oldAwaitPos || this.awaitPos;\n\n    if (exprList.length > 1) {\n      val = this.startNodeAt(innerStartPos, innerStartLoc);\n      val.expressions = exprList;\n      this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n  } else {\n    val = this.parseParenExpression();\n  }\n\n  if (this.options.preserveParens) {\n    var par = this.startNodeAt(startPos, startLoc);\n    par.expression = val;\n    return this.finishNode(par, \"ParenthesizedExpression\");\n  } else {\n    return val;\n  }\n};\n\npp$3.parseParenItem = function (item) {\n  return item;\n};\n\npp$3.parseParenArrowList = function (startPos, startLoc, exprList) {\n  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList);\n}; // New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\n\nvar empty$1 = [];\n\npp$3.parseNew = function () {\n  var node = this.startNode();\n  var meta = this.parseIdent(true);\n\n  if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {\n    node.meta = meta;\n    var containsEsc = this.containsEsc;\n    node.property = this.parseIdent(true);\n\n    if (node.property.name !== \"target\" || containsEsc) {\n      this.raiseRecoverable(node.property.start, \"The only valid meta property for new is new.target\");\n    }\n\n    if (!this.inNonArrowFunction()) {\n      this.raiseRecoverable(node.start, \"new.target can only be used in functions\");\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  var startPos = this.start,\n      startLoc = this.startLoc;\n  node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n\n  if (this.eat(types.parenL)) {\n    node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false);\n  } else {\n    node.arguments = empty$1;\n  }\n\n  return this.finishNode(node, \"NewExpression\");\n}; // Parse template expression.\n\n\npp$3.parseTemplateElement = function (ref) {\n  var isTagged = ref.isTagged;\n  var elem = this.startNode();\n\n  if (this.type === types.invalidTemplate) {\n    if (!isTagged) {\n      this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n    }\n\n    elem.value = {\n      raw: this.value,\n      cooked: null\n    };\n  } else {\n    elem.value = {\n      raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: this.value\n    };\n  }\n\n  this.next();\n  elem.tail = this.type === types.backQuote;\n  return this.finishNode(elem, \"TemplateElement\");\n};\n\npp$3.parseTemplate = function (ref) {\n  var this$1 = this;\n  if (ref === void 0) ref = {};\n  var isTagged = ref.isTagged;\n  if (isTagged === void 0) isTagged = false;\n  var node = this.startNode();\n  this.next();\n  node.expressions = [];\n  var curElt = this.parseTemplateElement({\n    isTagged: isTagged\n  });\n  node.quasis = [curElt];\n\n  while (!curElt.tail) {\n    if (this$1.type === types.eof) {\n      this$1.raise(this$1.pos, \"Unterminated template literal\");\n    }\n\n    this$1.expect(types.dollarBraceL);\n    node.expressions.push(this$1.parseExpression());\n    this$1.expect(types.braceR);\n    node.quasis.push(curElt = this$1.parseTemplateElement({\n      isTagged: isTagged\n    }));\n  }\n\n  this.next();\n  return this.finishNode(node, \"TemplateLiteral\");\n};\n\npp$3.isAsyncProp = function (prop) {\n  return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" && (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || this.options.ecmaVersion >= 9 && this.type === types.star) && !lineBreak.test(this.input.slice(this.lastTokEnd, this.start));\n}; // Parse an object literal or binding pattern.\n\n\npp$3.parseObj = function (isPattern, refDestructuringErrors) {\n  var this$1 = this;\n  var node = this.startNode(),\n      first = true,\n      propHash = {};\n  node.properties = [];\n  this.next();\n\n  while (!this.eat(types.braceR)) {\n    if (!first) {\n      this$1.expect(types.comma);\n\n      if (this$1.afterTrailingComma(types.braceR)) {\n        break;\n      }\n    } else {\n      first = false;\n    }\n\n    var prop = this$1.parseProperty(isPattern, refDestructuringErrors);\n\n    if (!isPattern) {\n      this$1.checkPropClash(prop, propHash, refDestructuringErrors);\n    }\n\n    node.properties.push(prop);\n  }\n\n  return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\");\n};\n\npp$3.parseProperty = function (isPattern, refDestructuringErrors) {\n  var prop = this.startNode(),\n      isGenerator,\n      isAsync,\n      startPos,\n      startLoc;\n\n  if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {\n    if (isPattern) {\n      prop.argument = this.parseIdent(false);\n\n      if (this.type === types.comma) {\n        this.raise(this.start, \"Comma is not permitted after the rest element\");\n      }\n\n      return this.finishNode(prop, \"RestElement\");\n    } // To disallow parenthesized identifier via `this.toAssignable()`.\n\n\n    if (this.type === types.parenL && refDestructuringErrors) {\n      if (refDestructuringErrors.parenthesizedAssign < 0) {\n        refDestructuringErrors.parenthesizedAssign = this.start;\n      }\n\n      if (refDestructuringErrors.parenthesizedBind < 0) {\n        refDestructuringErrors.parenthesizedBind = this.start;\n      }\n    } // Parse argument.\n\n\n    prop.argument = this.parseMaybeAssign(false, refDestructuringErrors); // To disallow trailing comma via `this.toAssignable()`.\n\n    if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n      refDestructuringErrors.trailingComma = this.start;\n    } // Finish\n\n\n    return this.finishNode(prop, \"SpreadElement\");\n  }\n\n  if (this.options.ecmaVersion >= 6) {\n    prop.method = false;\n    prop.shorthand = false;\n\n    if (isPattern || refDestructuringErrors) {\n      startPos = this.start;\n      startLoc = this.startLoc;\n    }\n\n    if (!isPattern) {\n      isGenerator = this.eat(types.star);\n    }\n  }\n\n  var containsEsc = this.containsEsc;\n  this.parsePropertyName(prop);\n\n  if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n    isAsync = true;\n    isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);\n    this.parsePropertyName(prop, refDestructuringErrors);\n  } else {\n    isAsync = false;\n  }\n\n  this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n  return this.finishNode(prop, \"Property\");\n};\n\npp$3.parsePropertyValue = function (prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n  if ((isGenerator || isAsync) && this.type === types.colon) {\n    this.unexpected();\n  }\n\n  if (this.eat(types.colon)) {\n    prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n    prop.kind = \"init\";\n  } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {\n    if (isPattern) {\n      this.unexpected();\n    }\n\n    prop.kind = \"init\";\n    prop.method = true;\n    prop.value = this.parseMethod(isGenerator, isAsync);\n  } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\") && this.type !== types.comma && this.type !== types.braceR) {\n    if (isGenerator || isAsync) {\n      this.unexpected();\n    }\n\n    prop.kind = prop.key.name;\n    this.parsePropertyName(prop);\n    prop.value = this.parseMethod(false);\n    var paramCount = prop.kind === \"get\" ? 0 : 1;\n\n    if (prop.value.params.length !== paramCount) {\n      var start = prop.value.start;\n\n      if (prop.kind === \"get\") {\n        this.raiseRecoverable(start, \"getter should have no params\");\n      } else {\n        this.raiseRecoverable(start, \"setter should have exactly one param\");\n      }\n    } else {\n      if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\") {\n        this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\");\n      }\n    }\n  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n    this.checkUnreserved(prop.key);\n    prop.kind = \"init\";\n\n    if (isPattern) {\n      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);\n    } else if (this.type === types.eq && refDestructuringErrors) {\n      if (refDestructuringErrors.shorthandAssign < 0) {\n        refDestructuringErrors.shorthandAssign = this.start;\n      }\n\n      prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);\n    } else {\n      prop.value = prop.key;\n    }\n\n    prop.shorthand = true;\n  } else {\n    this.unexpected();\n  }\n};\n\npp$3.parsePropertyName = function (prop) {\n  if (this.options.ecmaVersion >= 6) {\n    if (this.eat(types.bracketL)) {\n      prop.computed = true;\n      prop.key = this.parseMaybeAssign();\n      this.expect(types.bracketR);\n      return prop.key;\n    } else {\n      prop.computed = false;\n    }\n  }\n\n  return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(true);\n}; // Initialize empty function node.\n\n\npp$3.initFunction = function (node) {\n  node.id = null;\n\n  if (this.options.ecmaVersion >= 6) {\n    node.generator = node.expression = false;\n  }\n\n  if (this.options.ecmaVersion >= 8) {\n    node.async = false;\n  }\n}; // Parse object or class method.\n\n\npp$3.parseMethod = function (isGenerator, isAsync) {\n  var node = this.startNode(),\n      oldYieldPos = this.yieldPos,\n      oldAwaitPos = this.awaitPos;\n  this.initFunction(node);\n\n  if (this.options.ecmaVersion >= 6) {\n    node.generator = isGenerator;\n  }\n\n  if (this.options.ecmaVersion >= 8) {\n    node.async = !!isAsync;\n  }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  this.enterScope(functionFlags(isAsync, node.generator));\n  this.expect(types.parenL);\n  node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n  this.checkYieldAwaitInDefaultParams();\n  this.parseFunctionBody(node, false);\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  return this.finishNode(node, \"FunctionExpression\");\n}; // Parse arrow function expression with given parameters.\n\n\npp$3.parseArrowExpression = function (node, params, isAsync) {\n  var oldYieldPos = this.yieldPos,\n      oldAwaitPos = this.awaitPos;\n  this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n  this.initFunction(node);\n\n  if (this.options.ecmaVersion >= 8) {\n    node.async = !!isAsync;\n  }\n\n  this.yieldPos = 0;\n  this.awaitPos = 0;\n  node.params = this.toAssignableList(params, true);\n  this.parseFunctionBody(node, true);\n  this.yieldPos = oldYieldPos;\n  this.awaitPos = oldAwaitPos;\n  return this.finishNode(node, \"ArrowFunctionExpression\");\n}; // Parse function body and check parameters.\n\n\npp$3.parseFunctionBody = function (node, isArrowFunction) {\n  var isExpression = isArrowFunction && this.type !== types.braceL;\n  var oldStrict = this.strict,\n      useStrict = false;\n\n  if (isExpression) {\n    node.body = this.parseMaybeAssign();\n    node.expression = true;\n    this.checkParams(node, false);\n  } else {\n    var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n\n    if (!oldStrict || nonSimple) {\n      useStrict = this.strictDirective(this.end); // If this is a strict mode function, verify that argument names\n      // are not repeated, and it does not try to bind the words `eval`\n      // or `arguments`.\n\n      if (useStrict && nonSimple) {\n        this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\");\n      }\n    } // Start a new scope with regard to labels and the `inFunction`\n    // flag (restore them to their old value afterwards).\n\n\n    var oldLabels = this.labels;\n    this.labels = [];\n\n    if (useStrict) {\n      this.strict = true;\n    } // Add the params to varDeclaredNames to ensure that an error is thrown\n    // if a let/const declaration in the function clashes with one of the params.\n\n\n    this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && this.isSimpleParamList(node.params));\n    node.body = this.parseBlock(false);\n    node.expression = false;\n    this.adaptDirectivePrologue(node.body.body);\n    this.labels = oldLabels;\n  }\n\n  this.exitScope(); // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n\n  if (this.strict && node.id) {\n    this.checkLVal(node.id, BIND_OUTSIDE);\n  }\n\n  this.strict = oldStrict;\n};\n\npp$3.isSimpleParamList = function (params) {\n  for (var i = 0, list = params; i < list.length; i += 1) {\n    var param = list[i];\n\n    if (param.type !== \"Identifier\") {\n      return false;\n    }\n  }\n\n  return true;\n}; // Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\n\npp$3.checkParams = function (node, allowDuplicates) {\n  var this$1 = this;\n  var nameHash = {};\n\n  for (var i = 0, list = node.params; i < list.length; i += 1) {\n    var param = list[i];\n    this$1.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash);\n  }\n}; // Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\n\npp$3.parseExprList = function (close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n  var this$1 = this;\n  var elts = [],\n      first = true;\n\n  while (!this.eat(close)) {\n    if (!first) {\n      this$1.expect(types.comma);\n\n      if (allowTrailingComma && this$1.afterTrailingComma(close)) {\n        break;\n      }\n    } else {\n      first = false;\n    }\n\n    var elt = void 0;\n\n    if (allowEmpty && this$1.type === types.comma) {\n      elt = null;\n    } else if (this$1.type === types.ellipsis) {\n      elt = this$1.parseSpread(refDestructuringErrors);\n\n      if (refDestructuringErrors && this$1.type === types.comma && refDestructuringErrors.trailingComma < 0) {\n        refDestructuringErrors.trailingComma = this$1.start;\n      }\n    } else {\n      elt = this$1.parseMaybeAssign(false, refDestructuringErrors);\n    }\n\n    elts.push(elt);\n  }\n\n  return elts;\n};\n\npp$3.checkUnreserved = function (ref) {\n  var start = ref.start;\n  var end = ref.end;\n  var name = ref.name;\n\n  if (this.inGenerator && name === \"yield\") {\n    this.raiseRecoverable(start, \"Can not use 'yield' as identifier inside a generator\");\n  }\n\n  if (this.inAsync && name === \"await\") {\n    this.raiseRecoverable(start, \"Can not use 'await' as identifier inside an async function\");\n  }\n\n  if (this.keywords.test(name)) {\n    this.raise(start, \"Unexpected keyword '\" + name + \"'\");\n  }\n\n  if (this.options.ecmaVersion < 6 && this.input.slice(start, end).indexOf(\"\\\\\") !== -1) {\n    return;\n  }\n\n  var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n\n  if (re.test(name)) {\n    if (!this.inAsync && name === \"await\") {\n      this.raiseRecoverable(start, \"Can not use keyword 'await' outside an async function\");\n    }\n\n    this.raiseRecoverable(start, \"The keyword '\" + name + \"' is reserved\");\n  }\n}; // Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\n\npp$3.parseIdent = function (liberal, isBinding) {\n  var node = this.startNode();\n\n  if (liberal && this.options.allowReserved === \"never\") {\n    liberal = false;\n  }\n\n  if (this.type === types.name) {\n    node.name = this.value;\n  } else if (this.type.keyword) {\n    node.name = this.type.keyword; // To fix https://github.com/acornjs/acorn/issues/575\n    // `class` and `function` keywords push new context into this.context.\n    // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n    // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n\n    if ((node.name === \"class\" || node.name === \"function\") && (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n      this.context.pop();\n    }\n  } else {\n    this.unexpected();\n  }\n\n  this.next();\n  this.finishNode(node, \"Identifier\");\n\n  if (!liberal) {\n    this.checkUnreserved(node);\n  }\n\n  return node;\n}; // Parses yield expression inside generator.\n\n\npp$3.parseYield = function () {\n  if (!this.yieldPos) {\n    this.yieldPos = this.start;\n  }\n\n  var node = this.startNode();\n  this.next();\n\n  if (this.type === types.semi || this.canInsertSemicolon() || this.type !== types.star && !this.type.startsExpr) {\n    node.delegate = false;\n    node.argument = null;\n  } else {\n    node.delegate = this.eat(types.star);\n    node.argument = this.parseMaybeAssign();\n  }\n\n  return this.finishNode(node, \"YieldExpression\");\n};\n\npp$3.parseAwait = function () {\n  if (!this.awaitPos) {\n    this.awaitPos = this.start;\n  }\n\n  var node = this.startNode();\n  this.next();\n  node.argument = this.parseMaybeUnary(null, true);\n  return this.finishNode(node, \"AwaitExpression\");\n};\n\nvar pp$4 = Parser.prototype; // This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function (pos, message) {\n  var loc = getLineInfo(this.input, pos);\n  message += \" (\" + loc.line + \":\" + loc.column + \")\";\n  var err = new SyntaxError(message);\n  err.pos = pos;\n  err.loc = loc;\n  err.raisedAt = this.pos;\n  throw err;\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function () {\n  if (this.options.locations) {\n    return new Position(this.curLine, this.pos - this.lineStart);\n  }\n};\n\nvar pp$5 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n  this.flags = flags; // A list of var-declared names in the current lexical scope\n\n  this.var = []; // A list of lexically-declared names in the current lexical scope\n\n  this.lexical = [];\n}; // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n\npp$5.enterScope = function (flags) {\n  this.scopeStack.push(new Scope(flags));\n};\n\npp$5.exitScope = function () {\n  this.scopeStack.pop();\n};\n\npp$5.declareName = function (name, bindingType, pos) {\n  var this$1 = this;\n  var redeclared = false;\n\n  if (bindingType === BIND_LEXICAL) {\n    var scope = this.currentScope();\n    redeclared = scope.lexical.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n    scope.lexical.push(name);\n  } else if (bindingType === BIND_SIMPLE_CATCH) {\n    var scope$1 = this.currentScope();\n    scope$1.lexical.push(name);\n  } else if (bindingType === BIND_FUNCTION) {\n    var scope$2 = this.currentScope();\n    redeclared = scope$2.lexical.indexOf(name) > -1;\n    scope$2.var.push(name);\n  } else {\n    for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n      var scope$3 = this$1.scopeStack[i];\n\n      if (scope$3.lexical.indexOf(name) > -1 && !(scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) {\n        redeclared = true;\n      }\n\n      scope$3.var.push(name);\n\n      if (scope$3.flags & SCOPE_VAR) {\n        break;\n      }\n    }\n  }\n\n  if (redeclared) {\n    this.raiseRecoverable(pos, \"Identifier '\" + name + \"' has already been declared\");\n  }\n};\n\npp$5.currentScope = function () {\n  return this.scopeStack[this.scopeStack.length - 1];\n};\n\npp$5.currentVarScope = function () {\n  var this$1 = this;\n\n  for (var i = this.scopeStack.length - 1;; i--) {\n    var scope = this$1.scopeStack[i];\n\n    if (scope.flags & SCOPE_VAR) {\n      return scope;\n    }\n  }\n};\n\npp$5.inNonArrowFunction = function () {\n  var this$1 = this;\n\n  for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n    if (this$1.scopeStack[i].flags & SCOPE_FUNCTION && !(this$1.scopeStack[i].flags & SCOPE_ARROW)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nvar Node = function Node(parser, pos, loc) {\n  this.type = \"\";\n  this.start = pos;\n  this.end = 0;\n\n  if (parser.options.locations) {\n    this.loc = new SourceLocation(parser, loc);\n  }\n\n  if (parser.options.directSourceFile) {\n    this.sourceFile = parser.options.directSourceFile;\n  }\n\n  if (parser.options.ranges) {\n    this.range = [pos, 0];\n  }\n}; // Start an AST node, attaching a start offset.\n\n\nvar pp$6 = Parser.prototype;\n\npp$6.startNode = function () {\n  return new Node(this, this.start, this.startLoc);\n};\n\npp$6.startNodeAt = function (pos, loc) {\n  return new Node(this, pos, loc);\n}; // Finish an AST node, adding `type` and `end` properties.\n\n\nfunction finishNodeAt(node, type, pos, loc) {\n  node.type = type;\n  node.end = pos;\n\n  if (this.options.locations) {\n    node.loc.end = loc;\n  }\n\n  if (this.options.ranges) {\n    node.range[1] = pos;\n  }\n\n  return node;\n}\n\npp$6.finishNode = function (node, type) {\n  return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc);\n}; // Finish node at given position\n\n\npp$6.finishNodeAt = function (node, type, pos, loc) {\n  return finishNodeAt.call(this, node, type, pos, loc);\n}; // The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n  this.token = token;\n  this.isExpr = !!isExpr;\n  this.preserveSpace = !!preserveSpace;\n  this.override = override;\n  this.generator = !!generator;\n};\n\nvar types$1 = {\n  b_stat: new TokContext(\"{\", false),\n  b_expr: new TokContext(\"{\", true),\n  b_tmpl: new TokContext(\"${\", false),\n  p_stat: new TokContext(\"(\", false),\n  p_expr: new TokContext(\"(\", true),\n  q_tmpl: new TokContext(\"`\", true, true, function (p) {\n    return p.tryReadTemplateToken();\n  }),\n  f_stat: new TokContext(\"function\", false),\n  f_expr: new TokContext(\"function\", true),\n  f_expr_gen: new TokContext(\"function\", true, false, null, true),\n  f_gen: new TokContext(\"function\", false, false, null, true)\n};\nvar pp$7 = Parser.prototype;\n\npp$7.initialContext = function () {\n  return [types$1.b_stat];\n};\n\npp$7.braceIsBlock = function (prevType) {\n  var parent = this.curContext();\n\n  if (parent === types$1.f_expr || parent === types$1.f_stat) {\n    return true;\n  }\n\n  if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr)) {\n    return !parent.isExpr;\n  } // The check for `tt.name && exprAllowed` detects whether we are\n  // after a `yield` or `of` construct. See the `updateContext` for\n  // `tt.name`.\n\n\n  if (prevType === types._return || prevType === types.name && this.exprAllowed) {\n    return lineBreak.test(this.input.slice(this.lastTokEnd, this.start));\n  }\n\n  if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow) {\n    return true;\n  }\n\n  if (prevType === types.braceL) {\n    return parent === types$1.b_stat;\n  }\n\n  if (prevType === types._var || prevType === types.name) {\n    return false;\n  }\n\n  return !this.exprAllowed;\n};\n\npp$7.inGeneratorContext = function () {\n  var this$1 = this;\n\n  for (var i = this.context.length - 1; i >= 1; i--) {\n    var context = this$1.context[i];\n\n    if (context.token === \"function\") {\n      return context.generator;\n    }\n  }\n\n  return false;\n};\n\npp$7.updateContext = function (prevType) {\n  var update,\n      type = this.type;\n\n  if (type.keyword && prevType === types.dot) {\n    this.exprAllowed = false;\n  } else if (update = type.updateContext) {\n    update.call(this, prevType);\n  } else {\n    this.exprAllowed = type.beforeExpr;\n  }\n}; // Token-specific context update code\n\n\ntypes.parenR.updateContext = types.braceR.updateContext = function () {\n  if (this.context.length === 1) {\n    this.exprAllowed = true;\n    return;\n  }\n\n  var out = this.context.pop();\n\n  if (out === types$1.b_stat && this.curContext().token === \"function\") {\n    out = this.context.pop();\n  }\n\n  this.exprAllowed = !out.isExpr;\n};\n\ntypes.braceL.updateContext = function (prevType) {\n  this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);\n  this.exprAllowed = true;\n};\n\ntypes.dollarBraceL.updateContext = function () {\n  this.context.push(types$1.b_tmpl);\n  this.exprAllowed = true;\n};\n\ntypes.parenL.updateContext = function (prevType) {\n  var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;\n  this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);\n  this.exprAllowed = true;\n};\n\ntypes.incDec.updateContext = function () {// tokExprAllowed stays unchanged\n};\n\ntypes._function.updateContext = types._class.updateContext = function (prevType) {\n  if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else && !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat)) {\n    this.context.push(types$1.f_expr);\n  } else {\n    this.context.push(types$1.f_stat);\n  }\n\n  this.exprAllowed = false;\n};\n\ntypes.backQuote.updateContext = function () {\n  if (this.curContext() === types$1.q_tmpl) {\n    this.context.pop();\n  } else {\n    this.context.push(types$1.q_tmpl);\n  }\n\n  this.exprAllowed = false;\n};\n\ntypes.star.updateContext = function (prevType) {\n  if (prevType === types._function) {\n    var index = this.context.length - 1;\n\n    if (this.context[index] === types$1.f_expr) {\n      this.context[index] = types$1.f_expr_gen;\n    } else {\n      this.context[index] = types$1.f_gen;\n    }\n  }\n\n  this.exprAllowed = true;\n};\n\ntypes.name.updateContext = function (prevType) {\n  var allowed = false;\n\n  if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {\n    if (this.value === \"of\" && !this.exprAllowed || this.value === \"yield\" && this.inGeneratorContext()) {\n      allowed = true;\n    }\n  }\n\n  this.exprAllowed = allowed;\n};\n\nvar data = {\n  \"$LONE\": [\"ASCII\", \"ASCII_Hex_Digit\", \"AHex\", \"Alphabetic\", \"Alpha\", \"Any\", \"Assigned\", \"Bidi_Control\", \"Bidi_C\", \"Bidi_Mirrored\", \"Bidi_M\", \"Case_Ignorable\", \"CI\", \"Cased\", \"Changes_When_Casefolded\", \"CWCF\", \"Changes_When_Casemapped\", \"CWCM\", \"Changes_When_Lowercased\", \"CWL\", \"Changes_When_NFKC_Casefolded\", \"CWKCF\", \"Changes_When_Titlecased\", \"CWT\", \"Changes_When_Uppercased\", \"CWU\", \"Dash\", \"Default_Ignorable_Code_Point\", \"DI\", \"Deprecated\", \"Dep\", \"Diacritic\", \"Dia\", \"Emoji\", \"Emoji_Component\", \"Emoji_Modifier\", \"Emoji_Modifier_Base\", \"Emoji_Presentation\", \"Extender\", \"Ext\", \"Grapheme_Base\", \"Gr_Base\", \"Grapheme_Extend\", \"Gr_Ext\", \"Hex_Digit\", \"Hex\", \"IDS_Binary_Operator\", \"IDSB\", \"IDS_Trinary_Operator\", \"IDST\", \"ID_Continue\", \"IDC\", \"ID_Start\", \"IDS\", \"Ideographic\", \"Ideo\", \"Join_Control\", \"Join_C\", \"Logical_Order_Exception\", \"LOE\", \"Lowercase\", \"Lower\", \"Math\", \"Noncharacter_Code_Point\", \"NChar\", \"Pattern_Syntax\", \"Pat_Syn\", \"Pattern_White_Space\", \"Pat_WS\", \"Quotation_Mark\", \"QMark\", \"Radical\", \"Regional_Indicator\", \"RI\", \"Sentence_Terminal\", \"STerm\", \"Soft_Dotted\", \"SD\", \"Terminal_Punctuation\", \"Term\", \"Unified_Ideograph\", \"UIdeo\", \"Uppercase\", \"Upper\", \"Variation_Selector\", \"VS\", \"White_Space\", \"space\", \"XID_Continue\", \"XIDC\", \"XID_Start\", \"XIDS\"],\n  \"General_Category\": [\"Cased_Letter\", \"LC\", \"Close_Punctuation\", \"Pe\", \"Connector_Punctuation\", \"Pc\", \"Control\", \"Cc\", \"cntrl\", \"Currency_Symbol\", \"Sc\", \"Dash_Punctuation\", \"Pd\", \"Decimal_Number\", \"Nd\", \"digit\", \"Enclosing_Mark\", \"Me\", \"Final_Punctuation\", \"Pf\", \"Format\", \"Cf\", \"Initial_Punctuation\", \"Pi\", \"Letter\", \"L\", \"Letter_Number\", \"Nl\", \"Line_Separator\", \"Zl\", \"Lowercase_Letter\", \"Ll\", \"Mark\", \"M\", \"Combining_Mark\", \"Math_Symbol\", \"Sm\", \"Modifier_Letter\", \"Lm\", \"Modifier_Symbol\", \"Sk\", \"Nonspacing_Mark\", \"Mn\", \"Number\", \"N\", \"Open_Punctuation\", \"Ps\", \"Other\", \"C\", \"Other_Letter\", \"Lo\", \"Other_Number\", \"No\", \"Other_Punctuation\", \"Po\", \"Other_Symbol\", \"So\", \"Paragraph_Separator\", \"Zp\", \"Private_Use\", \"Co\", \"Punctuation\", \"P\", \"punct\", \"Separator\", \"Z\", \"Space_Separator\", \"Zs\", \"Spacing_Mark\", \"Mc\", \"Surrogate\", \"Cs\", \"Symbol\", \"S\", \"Titlecase_Letter\", \"Lt\", \"Unassigned\", \"Cn\", \"Uppercase_Letter\", \"Lu\"],\n  \"Script\": [\"Adlam\", \"Adlm\", \"Ahom\", \"Anatolian_Hieroglyphs\", \"Hluw\", \"Arabic\", \"Arab\", \"Armenian\", \"Armn\", \"Avestan\", \"Avst\", \"Balinese\", \"Bali\", \"Bamum\", \"Bamu\", \"Bassa_Vah\", \"Bass\", \"Batak\", \"Batk\", \"Bengali\", \"Beng\", \"Bhaiksuki\", \"Bhks\", \"Bopomofo\", \"Bopo\", \"Brahmi\", \"Brah\", \"Braille\", \"Brai\", \"Buginese\", \"Bugi\", \"Buhid\", \"Buhd\", \"Canadian_Aboriginal\", \"Cans\", \"Carian\", \"Cari\", \"Caucasian_Albanian\", \"Aghb\", \"Chakma\", \"Cakm\", \"Cham\", \"Cherokee\", \"Cher\", \"Common\", \"Zyyy\", \"Coptic\", \"Copt\", \"Qaac\", \"Cuneiform\", \"Xsux\", \"Cypriot\", \"Cprt\", \"Cyrillic\", \"Cyrl\", \"Deseret\", \"Dsrt\", \"Devanagari\", \"Deva\", \"Duployan\", \"Dupl\", \"Egyptian_Hieroglyphs\", \"Egyp\", \"Elbasan\", \"Elba\", \"Ethiopic\", \"Ethi\", \"Georgian\", \"Geor\", \"Glagolitic\", \"Glag\", \"Gothic\", \"Goth\", \"Grantha\", \"Gran\", \"Greek\", \"Grek\", \"Gujarati\", \"Gujr\", \"Gurmukhi\", \"Guru\", \"Han\", \"Hani\", \"Hangul\", \"Hang\", \"Hanunoo\", \"Hano\", \"Hatran\", \"Hatr\", \"Hebrew\", \"Hebr\", \"Hiragana\", \"Hira\", \"Imperial_Aramaic\", \"Armi\", \"Inherited\", \"Zinh\", \"Qaai\", \"Inscriptional_Pahlavi\", \"Phli\", \"Inscriptional_Parthian\", \"Prti\", \"Javanese\", \"Java\", \"Kaithi\", \"Kthi\", \"Kannada\", \"Knda\", \"Katakana\", \"Kana\", \"Kayah_Li\", \"Kali\", \"Kharoshthi\", \"Khar\", \"Khmer\", \"Khmr\", \"Khojki\", \"Khoj\", \"Khudawadi\", \"Sind\", \"Lao\", \"Laoo\", \"Latin\", \"Latn\", \"Lepcha\", \"Lepc\", \"Limbu\", \"Limb\", \"Linear_A\", \"Lina\", \"Linear_B\", \"Linb\", \"Lisu\", \"Lycian\", \"Lyci\", \"Lydian\", \"Lydi\", \"Mahajani\", \"Mahj\", \"Malayalam\", \"Mlym\", \"Mandaic\", \"Mand\", \"Manichaean\", \"Mani\", \"Marchen\", \"Marc\", \"Masaram_Gondi\", \"Gonm\", \"Meetei_Mayek\", \"Mtei\", \"Mende_Kikakui\", \"Mend\", \"Meroitic_Cursive\", \"Merc\", \"Meroitic_Hieroglyphs\", \"Mero\", \"Miao\", \"Plrd\", \"Modi\", \"Mongolian\", \"Mong\", \"Mro\", \"Mroo\", \"Multani\", \"Mult\", \"Myanmar\", \"Mymr\", \"Nabataean\", \"Nbat\", \"New_Tai_Lue\", \"Talu\", \"Newa\", \"Nko\", \"Nkoo\", \"Nushu\", \"Nshu\", \"Ogham\", \"Ogam\", \"Ol_Chiki\", \"Olck\", \"Old_Hungarian\", \"Hung\", \"Old_Italic\", \"Ital\", \"Old_North_Arabian\", \"Narb\", \"Old_Permic\", \"Perm\", \"Old_Persian\", \"Xpeo\", \"Old_South_Arabian\", \"Sarb\", \"Old_Turkic\", \"Orkh\", \"Oriya\", \"Orya\", \"Osage\", \"Osge\", \"Osmanya\", \"Osma\", \"Pahawh_Hmong\", \"Hmng\", \"Palmyrene\", \"Palm\", \"Pau_Cin_Hau\", \"Pauc\", \"Phags_Pa\", \"Phag\", \"Phoenician\", \"Phnx\", \"Psalter_Pahlavi\", \"Phlp\", \"Rejang\", \"Rjng\", \"Runic\", \"Runr\", \"Samaritan\", \"Samr\", \"Saurashtra\", \"Saur\", \"Sharada\", \"Shrd\", \"Shavian\", \"Shaw\", \"Siddham\", \"Sidd\", \"SignWriting\", \"Sgnw\", \"Sinhala\", \"Sinh\", \"Sora_Sompeng\", \"Sora\", \"Soyombo\", \"Soyo\", \"Sundanese\", \"Sund\", \"Syloti_Nagri\", \"Sylo\", \"Syriac\", \"Syrc\", \"Tagalog\", \"Tglg\", \"Tagbanwa\", \"Tagb\", \"Tai_Le\", \"Tale\", \"Tai_Tham\", \"Lana\", \"Tai_Viet\", \"Tavt\", \"Takri\", \"Takr\", \"Tamil\", \"Taml\", \"Tangut\", \"Tang\", \"Telugu\", \"Telu\", \"Thaana\", \"Thaa\", \"Thai\", \"Tibetan\", \"Tibt\", \"Tifinagh\", \"Tfng\", \"Tirhuta\", \"Tirh\", \"Ugaritic\", \"Ugar\", \"Vai\", \"Vaii\", \"Warang_Citi\", \"Wara\", \"Yi\", \"Yiii\", \"Zanabazar_Square\", \"Zanb\"]\n};\nArray.prototype.push.apply(data.$LONE, data.General_Category);\ndata.gc = data.General_Category;\ndata.sc = data.Script_Extensions = data.scx = data.Script;\nvar pp$9 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n  this.parser = parser;\n  this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\");\n  this.source = \"\";\n  this.flags = \"\";\n  this.start = 0;\n  this.switchU = false;\n  this.switchN = false;\n  this.pos = 0;\n  this.lastIntValue = 0;\n  this.lastStringValue = \"\";\n  this.lastAssertionIsQuantifiable = false;\n  this.numCapturingParens = 0;\n  this.maxBackReference = 0;\n  this.groupNames = [];\n  this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset(start, pattern, flags) {\n  var unicode = flags.indexOf(\"u\") !== -1;\n  this.start = start | 0;\n  this.source = pattern + \"\";\n  this.flags = flags;\n  this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n  this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n};\n\nRegExpValidationState.prototype.raise = function raise(message) {\n  this.parser.raiseRecoverable(this.start, \"Invalid regular expression: /\" + this.source + \"/: \" + message);\n}; // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n\n\nRegExpValidationState.prototype.at = function at(i) {\n  var s = this.source;\n  var l = s.length;\n\n  if (i >= l) {\n    return -1;\n  }\n\n  var c = s.charCodeAt(i);\n\n  if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n    return c;\n  }\n\n  return (c << 10) + s.charCodeAt(i + 1) - 0x35FDC00;\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex(i) {\n  var s = this.source;\n  var l = s.length;\n\n  if (i >= l) {\n    return l;\n  }\n\n  var c = s.charCodeAt(i);\n\n  if (!this.switchU || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n    return i + 1;\n  }\n\n  return i + 2;\n};\n\nRegExpValidationState.prototype.current = function current() {\n  return this.at(this.pos);\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead() {\n  return this.at(this.nextIndex(this.pos));\n};\n\nRegExpValidationState.prototype.advance = function advance() {\n  this.pos = this.nextIndex(this.pos);\n};\n\nRegExpValidationState.prototype.eat = function eat(ch) {\n  if (this.current() === ch) {\n    this.advance();\n    return true;\n  }\n\n  return false;\n};\n\nfunction codePointToString$1(ch) {\n  if (ch <= 0xFFFF) {\n    return String.fromCharCode(ch);\n  }\n\n  ch -= 0x10000;\n  return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00);\n}\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n\n\npp$9.validateRegExpFlags = function (state) {\n  var this$1 = this;\n  var validFlags = state.validFlags;\n  var flags = state.flags;\n\n  for (var i = 0; i < flags.length; i++) {\n    var flag = flags.charAt(i);\n\n    if (validFlags.indexOf(flag) === -1) {\n      this$1.raise(state.start, \"Invalid regular expression flag\");\n    }\n\n    if (flags.indexOf(flag, i + 1) > -1) {\n      this$1.raise(state.start, \"Duplicate regular expression flag\");\n    }\n  }\n};\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n\n\npp$9.validateRegExpPattern = function (state) {\n  this.regexp_pattern(state); // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n  // parsing contains a |GroupName|, reparse with the goal symbol\n  // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n  // exception if _P_ did not conform to the grammar, if any elements of _P_\n  // were not matched by the parse, or if any Early Error conditions exist.\n\n  if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n    state.switchN = true;\n    this.regexp_pattern(state);\n  }\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n\n\npp$9.regexp_pattern = function (state) {\n  state.pos = 0;\n  state.lastIntValue = 0;\n  state.lastStringValue = \"\";\n  state.lastAssertionIsQuantifiable = false;\n  state.numCapturingParens = 0;\n  state.maxBackReference = 0;\n  state.groupNames.length = 0;\n  state.backReferenceNames.length = 0;\n  this.regexp_disjunction(state);\n\n  if (state.pos !== state.source.length) {\n    // Make the same messages as V8.\n    if (state.eat(0x29\n    /* ) */\n    )) {\n      state.raise(\"Unmatched ')'\");\n    }\n\n    if (state.eat(0x5D\n    /* [ */\n    ) || state.eat(0x7D\n    /* } */\n    )) {\n      state.raise(\"Lone quantifier brackets\");\n    }\n  }\n\n  if (state.maxBackReference > state.numCapturingParens) {\n    state.raise(\"Invalid escape\");\n  }\n\n  for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n    var name = list[i];\n\n    if (state.groupNames.indexOf(name) === -1) {\n      state.raise(\"Invalid named capture referenced\");\n    }\n  }\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n\n\npp$9.regexp_disjunction = function (state) {\n  var this$1 = this;\n  this.regexp_alternative(state);\n\n  while (state.eat(0x7C\n  /* | */\n  )) {\n    this$1.regexp_alternative(state);\n  } // Make the same message as V8.\n\n\n  if (this.regexp_eatQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n\n  if (state.eat(0x7B\n  /* { */\n  )) {\n    state.raise(\"Lone quantifier brackets\");\n  }\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n\n\npp$9.regexp_alternative = function (state) {\n  while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n\n\npp$9.regexp_eatTerm = function (state) {\n  if (this.regexp_eatAssertion(state)) {\n    // Handle `QuantifiableAssertion Quantifier` alternative.\n    // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n    // is a QuantifiableAssertion.\n    if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n      // Make the same message as V8.\n      if (state.switchU) {\n        state.raise(\"Invalid quantifier\");\n      }\n    }\n\n    return true;\n  }\n\n  if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n    this.regexp_eatQuantifier(state);\n    return true;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n\n\npp$9.regexp_eatAssertion = function (state) {\n  var start = state.pos;\n  state.lastAssertionIsQuantifiable = false; // ^, $\n\n  if (state.eat(0x5E\n  /* ^ */\n  ) || state.eat(0x24\n  /* $ */\n  )) {\n    return true;\n  } // \\b \\B\n\n\n  if (state.eat(0x5C\n  /* \\ */\n  )) {\n    if (state.eat(0x42\n    /* B */\n    ) || state.eat(0x62\n    /* b */\n    )) {\n      return true;\n    }\n\n    state.pos = start;\n  } // Lookahead / Lookbehind\n\n\n  if (state.eat(0x28\n  /* ( */\n  ) && state.eat(0x3F\n  /* ? */\n  )) {\n    var lookbehind = false;\n\n    if (this.options.ecmaVersion >= 9) {\n      lookbehind = state.eat(0x3C\n      /* < */\n      );\n    }\n\n    if (state.eat(0x3D\n    /* = */\n    ) || state.eat(0x21\n    /* ! */\n    )) {\n      this.regexp_disjunction(state);\n\n      if (!state.eat(0x29\n      /* ) */\n      )) {\n        state.raise(\"Unterminated group\");\n      }\n\n      state.lastAssertionIsQuantifiable = !lookbehind;\n      return true;\n    }\n  }\n\n  state.pos = start;\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n\n\npp$9.regexp_eatQuantifier = function (state, noError) {\n  if (noError === void 0) noError = false;\n\n  if (this.regexp_eatQuantifierPrefix(state, noError)) {\n    state.eat(0x3F\n    /* ? */\n    );\n    return true;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n\n\npp$9.regexp_eatQuantifierPrefix = function (state, noError) {\n  return state.eat(0x2A\n  /* * */\n  ) || state.eat(0x2B\n  /* + */\n  ) || state.eat(0x3F\n  /* ? */\n  ) || this.regexp_eatBracedQuantifier(state, noError);\n};\n\npp$9.regexp_eatBracedQuantifier = function (state, noError) {\n  var start = state.pos;\n\n  if (state.eat(0x7B\n  /* { */\n  )) {\n    var min = 0,\n        max = -1;\n\n    if (this.regexp_eatDecimalDigits(state)) {\n      min = state.lastIntValue;\n\n      if (state.eat(0x2C\n      /* , */\n      ) && this.regexp_eatDecimalDigits(state)) {\n        max = state.lastIntValue;\n      }\n\n      if (state.eat(0x7D\n      /* } */\n      )) {\n        // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n        if (max !== -1 && max < min && !noError) {\n          state.raise(\"numbers out of order in {} quantifier\");\n        }\n\n        return true;\n      }\n    }\n\n    if (state.switchU && !noError) {\n      state.raise(\"Incomplete quantifier\");\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n\n\npp$9.regexp_eatAtom = function (state) {\n  return this.regexp_eatPatternCharacters(state) || state.eat(0x2E\n  /* . */\n  ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state);\n};\n\npp$9.regexp_eatReverseSolidusAtomEscape = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x5C\n  /* \\ */\n  )) {\n    if (this.regexp_eatAtomEscape(state)) {\n      return true;\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n};\n\npp$9.regexp_eatUncapturingGroup = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x28\n  /* ( */\n  )) {\n    if (state.eat(0x3F\n    /* ? */\n    ) && state.eat(0x3A\n    /* : */\n    )) {\n      this.regexp_disjunction(state);\n\n      if (state.eat(0x29\n      /* ) */\n      )) {\n        return true;\n      }\n\n      state.raise(\"Unterminated group\");\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n};\n\npp$9.regexp_eatCapturingGroup = function (state) {\n  if (state.eat(0x28\n  /* ( */\n  )) {\n    if (this.options.ecmaVersion >= 9) {\n      this.regexp_groupSpecifier(state);\n    } else if (state.current() === 0x3F\n    /* ? */\n    ) {\n        state.raise(\"Invalid group\");\n      }\n\n    this.regexp_disjunction(state);\n\n    if (state.eat(0x29\n    /* ) */\n    )) {\n      state.numCapturingParens += 1;\n      return true;\n    }\n\n    state.raise(\"Unterminated group\");\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n\n\npp$9.regexp_eatExtendedAtom = function (state) {\n  return state.eat(0x2E\n  /* . */\n  ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state) || this.regexp_eatInvalidBracedQuantifier(state) || this.regexp_eatExtendedPatternCharacter(state);\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n\n\npp$9.regexp_eatInvalidBracedQuantifier = function (state) {\n  if (this.regexp_eatBracedQuantifier(state, true)) {\n    state.raise(\"Nothing to repeat\");\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n\n\npp$9.regexp_eatSyntaxCharacter = function (state) {\n  var ch = state.current();\n\n  if (isSyntaxCharacter(ch)) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true;\n  }\n\n  return false;\n};\n\nfunction isSyntaxCharacter(ch) {\n  return ch === 0x24\n  /* $ */\n  || ch >= 0x28\n  /* ( */\n  && ch <= 0x2B\n  /* + */\n  || ch === 0x2E\n  /* . */\n  || ch === 0x3F\n  /* ? */\n  || ch >= 0x5B\n  /* [ */\n  && ch <= 0x5E\n  /* ^ */\n  || ch >= 0x7B\n  /* { */\n  && ch <= 0x7D\n  /* } */\n  ;\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\n\n\npp$9.regexp_eatPatternCharacters = function (state) {\n  var start = state.pos;\n  var ch = 0;\n\n  while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n    state.advance();\n  }\n\n  return state.pos !== start;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n\n\npp$9.regexp_eatExtendedPatternCharacter = function (state) {\n  var ch = state.current();\n\n  if (ch !== -1 && ch !== 0x24\n  /* $ */\n  && !(ch >= 0x28\n  /* ( */\n  && ch <= 0x2B\n  /* + */\n  ) && ch !== 0x2E\n  /* . */\n  && ch !== 0x3F\n  /* ? */\n  && ch !== 0x5B\n  /* [ */\n  && ch !== 0x5E\n  /* ^ */\n  && ch !== 0x7C\n  /* | */\n  ) {\n      state.advance();\n      return true;\n    }\n\n  return false;\n}; // GroupSpecifier[U] ::\n//   [empty]\n//   `?` GroupName[?U]\n\n\npp$9.regexp_groupSpecifier = function (state) {\n  if (state.eat(0x3F\n  /* ? */\n  )) {\n    if (this.regexp_eatGroupName(state)) {\n      if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n        state.raise(\"Duplicate capture group name\");\n      }\n\n      state.groupNames.push(state.lastStringValue);\n      return;\n    }\n\n    state.raise(\"Invalid group\");\n  }\n}; // GroupName[U] ::\n//   `<` RegExpIdentifierName[?U] `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\n\n\npp$9.regexp_eatGroupName = function (state) {\n  state.lastStringValue = \"\";\n\n  if (state.eat(0x3C\n  /* < */\n  )) {\n    if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E\n    /* > */\n    )) {\n      return true;\n    }\n\n    state.raise(\"Invalid capture group name\");\n  }\n\n  return false;\n}; // RegExpIdentifierName[U] ::\n//   RegExpIdentifierStart[?U]\n//   RegExpIdentifierName[?U] RegExpIdentifierPart[?U]\n// Note: this updates `state.lastStringValue` property with the eaten name.\n\n\npp$9.regexp_eatRegExpIdentifierName = function (state) {\n  state.lastStringValue = \"\";\n\n  if (this.regexp_eatRegExpIdentifierStart(state)) {\n    state.lastStringValue += codePointToString$1(state.lastIntValue);\n\n    while (this.regexp_eatRegExpIdentifierPart(state)) {\n      state.lastStringValue += codePointToString$1(state.lastIntValue);\n    }\n\n    return true;\n  }\n\n  return false;\n}; // RegExpIdentifierStart[U] ::\n//   UnicodeIDStart\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[?U]\n\n\npp$9.regexp_eatRegExpIdentifierStart = function (state) {\n  var start = state.pos;\n  var ch = state.current();\n  state.advance();\n\n  if (ch === 0x5C\n  /* \\ */\n  && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {\n    ch = state.lastIntValue;\n  }\n\n  if (isRegExpIdentifierStart(ch)) {\n    state.lastIntValue = ch;\n    return true;\n  }\n\n  state.pos = start;\n  return false;\n};\n\nfunction isRegExpIdentifierStart(ch) {\n  return isIdentifierStart(ch, true) || ch === 0x24\n  /* $ */\n  || ch === 0x5F;\n  /* _ */\n} // RegExpIdentifierPart[U] ::\n//   UnicodeIDContinue\n//   `$`\n//   `_`\n//   `\\` RegExpUnicodeEscapeSequence[?U]\n//   <ZWNJ>\n//   <ZWJ>\n\n\npp$9.regexp_eatRegExpIdentifierPart = function (state) {\n  var start = state.pos;\n  var ch = state.current();\n  state.advance();\n\n  if (ch === 0x5C\n  /* \\ */\n  && this.regexp_eatRegExpUnicodeEscapeSequence(state)) {\n    ch = state.lastIntValue;\n  }\n\n  if (isRegExpIdentifierPart(ch)) {\n    state.lastIntValue = ch;\n    return true;\n  }\n\n  state.pos = start;\n  return false;\n};\n\nfunction isRegExpIdentifierPart(ch) {\n  return isIdentifierChar(ch, true) || ch === 0x24\n  /* $ */\n  || ch === 0x5F\n  /* _ */\n  || ch === 0x200C\n  /* <ZWNJ> */\n  || ch === 0x200D;\n  /* <ZWJ> */\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n\n\npp$9.regexp_eatAtomEscape = function (state) {\n  if (this.regexp_eatBackReference(state) || this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state) || state.switchN && this.regexp_eatKGroupName(state)) {\n    return true;\n  }\n\n  if (state.switchU) {\n    // Make the same message as V8.\n    if (state.current() === 0x63\n    /* c */\n    ) {\n        state.raise(\"Invalid unicode escape\");\n      }\n\n    state.raise(\"Invalid escape\");\n  }\n\n  return false;\n};\n\npp$9.regexp_eatBackReference = function (state) {\n  var start = state.pos;\n\n  if (this.regexp_eatDecimalEscape(state)) {\n    var n = state.lastIntValue;\n\n    if (state.switchU) {\n      // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n      if (n > state.maxBackReference) {\n        state.maxBackReference = n;\n      }\n\n      return true;\n    }\n\n    if (n <= state.numCapturingParens) {\n      return true;\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n};\n\npp$9.regexp_eatKGroupName = function (state) {\n  if (state.eat(0x6B\n  /* k */\n  )) {\n    if (this.regexp_eatGroupName(state)) {\n      state.backReferenceNames.push(state.lastStringValue);\n      return true;\n    }\n\n    state.raise(\"Invalid named reference\");\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n\n\npp$9.regexp_eatCharacterEscape = function (state) {\n  return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state);\n};\n\npp$9.regexp_eatCControlLetter = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x63\n  /* c */\n  )) {\n    if (this.regexp_eatControlLetter(state)) {\n      return true;\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n};\n\npp$9.regexp_eatZero = function (state) {\n  if (state.current() === 0x30\n  /* 0 */\n  && !isDecimalDigit(state.lookahead())) {\n    state.lastIntValue = 0;\n    state.advance();\n    return true;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n\n\npp$9.regexp_eatControlEscape = function (state) {\n  var ch = state.current();\n\n  if (ch === 0x74\n  /* t */\n  ) {\n      state.lastIntValue = 0x09;\n      /* \\t */\n\n      state.advance();\n      return true;\n    }\n\n  if (ch === 0x6E\n  /* n */\n  ) {\n      state.lastIntValue = 0x0A;\n      /* \\n */\n\n      state.advance();\n      return true;\n    }\n\n  if (ch === 0x76\n  /* v */\n  ) {\n      state.lastIntValue = 0x0B;\n      /* \\v */\n\n      state.advance();\n      return true;\n    }\n\n  if (ch === 0x66\n  /* f */\n  ) {\n      state.lastIntValue = 0x0C;\n      /* \\f */\n\n      state.advance();\n      return true;\n    }\n\n  if (ch === 0x72\n  /* r */\n  ) {\n      state.lastIntValue = 0x0D;\n      /* \\r */\n\n      state.advance();\n      return true;\n    }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n\n\npp$9.regexp_eatControlLetter = function (state) {\n  var ch = state.current();\n\n  if (isControlLetter(ch)) {\n    state.lastIntValue = ch % 0x20;\n    state.advance();\n    return true;\n  }\n\n  return false;\n};\n\nfunction isControlLetter(ch) {\n  return ch >= 0x41\n  /* A */\n  && ch <= 0x5A\n  /* Z */\n  || ch >= 0x61\n  /* a */\n  && ch <= 0x7A\n  /* z */\n  ;\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n\n\npp$9.regexp_eatRegExpUnicodeEscapeSequence = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x75\n  /* u */\n  )) {\n    if (this.regexp_eatFixedHexDigits(state, 4)) {\n      var lead = state.lastIntValue;\n\n      if (state.switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n        var leadSurrogateEnd = state.pos;\n\n        if (state.eat(0x5C\n        /* \\ */\n        ) && state.eat(0x75\n        /* u */\n        ) && this.regexp_eatFixedHexDigits(state, 4)) {\n          var trail = state.lastIntValue;\n\n          if (trail >= 0xDC00 && trail <= 0xDFFF) {\n            state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n            return true;\n          }\n        }\n\n        state.pos = leadSurrogateEnd;\n        state.lastIntValue = lead;\n      }\n\n      return true;\n    }\n\n    if (state.switchU && state.eat(0x7B\n    /* { */\n    ) && this.regexp_eatHexDigits(state) && state.eat(0x7D\n    /* } */\n    ) && isValidUnicode(state.lastIntValue)) {\n      return true;\n    }\n\n    if (state.switchU) {\n      state.raise(\"Invalid unicode escape\");\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n};\n\nfunction isValidUnicode(ch) {\n  return ch >= 0 && ch <= 0x10FFFF;\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n\n\npp$9.regexp_eatIdentityEscape = function (state) {\n  if (state.switchU) {\n    if (this.regexp_eatSyntaxCharacter(state)) {\n      return true;\n    }\n\n    if (state.eat(0x2F\n    /* / */\n    )) {\n      state.lastIntValue = 0x2F;\n      /* / */\n\n      return true;\n    }\n\n    return false;\n  }\n\n  var ch = state.current();\n\n  if (ch !== 0x63\n  /* c */\n  && (!state.switchN || ch !== 0x6B\n  /* k */\n  )) {\n    state.lastIntValue = ch;\n    state.advance();\n    return true;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n\n\npp$9.regexp_eatDecimalEscape = function (state) {\n  state.lastIntValue = 0;\n  var ch = state.current();\n\n  if (ch >= 0x31\n  /* 1 */\n  && ch <= 0x39\n  /* 9 */\n  ) {\n      do {\n        state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30\n        /* 0 */\n        );\n        state.advance();\n      } while ((ch = state.current()) >= 0x30\n      /* 0 */\n      && ch <= 0x39\n      /* 9 */\n      );\n\n      return true;\n    }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n\n\npp$9.regexp_eatCharacterClassEscape = function (state) {\n  var ch = state.current();\n\n  if (isCharacterClassEscape(ch)) {\n    state.lastIntValue = -1;\n    state.advance();\n    return true;\n  }\n\n  if (state.switchU && this.options.ecmaVersion >= 9 && (ch === 0x50\n  /* P */\n  || ch === 0x70\n  /* p */\n  )) {\n    state.lastIntValue = -1;\n    state.advance();\n\n    if (state.eat(0x7B\n    /* { */\n    ) && this.regexp_eatUnicodePropertyValueExpression(state) && state.eat(0x7D\n    /* } */\n    )) {\n      return true;\n    }\n\n    state.raise(\"Invalid property name\");\n  }\n\n  return false;\n};\n\nfunction isCharacterClassEscape(ch) {\n  return ch === 0x64\n  /* d */\n  || ch === 0x44\n  /* D */\n  || ch === 0x73\n  /* s */\n  || ch === 0x53\n  /* S */\n  || ch === 0x77\n  /* w */\n  || ch === 0x57\n  /* W */\n  ;\n} // UnicodePropertyValueExpression ::\n//   UnicodePropertyName `=` UnicodePropertyValue\n//   LoneUnicodePropertyNameOrValue\n\n\npp$9.regexp_eatUnicodePropertyValueExpression = function (state) {\n  var start = state.pos; // UnicodePropertyName `=` UnicodePropertyValue\n\n  if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D\n  /* = */\n  )) {\n    var name = state.lastStringValue;\n\n    if (this.regexp_eatUnicodePropertyValue(state)) {\n      var value = state.lastStringValue;\n      this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n      return true;\n    }\n  }\n\n  state.pos = start; // LoneUnicodePropertyNameOrValue\n\n  if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n    var nameOrValue = state.lastStringValue;\n    this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n    return true;\n  }\n\n  return false;\n};\n\npp$9.regexp_validateUnicodePropertyNameAndValue = function (state, name, value) {\n  if (!data.hasOwnProperty(name) || data[name].indexOf(value) === -1) {\n    state.raise(\"Invalid property name\");\n  }\n};\n\npp$9.regexp_validateUnicodePropertyNameOrValue = function (state, nameOrValue) {\n  if (data.$LONE.indexOf(nameOrValue) === -1) {\n    state.raise(\"Invalid property name\");\n  }\n}; // UnicodePropertyName ::\n//   UnicodePropertyNameCharacters\n\n\npp$9.regexp_eatUnicodePropertyName = function (state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n\n  while (isUnicodePropertyNameCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString$1(ch);\n    state.advance();\n  }\n\n  return state.lastStringValue !== \"\";\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n  return isControlLetter(ch) || ch === 0x5F;\n  /* _ */\n} // UnicodePropertyValue ::\n//   UnicodePropertyValueCharacters\n\n\npp$9.regexp_eatUnicodePropertyValue = function (state) {\n  var ch = 0;\n  state.lastStringValue = \"\";\n\n  while (isUnicodePropertyValueCharacter(ch = state.current())) {\n    state.lastStringValue += codePointToString$1(ch);\n    state.advance();\n  }\n\n  return state.lastStringValue !== \"\";\n};\n\nfunction isUnicodePropertyValueCharacter(ch) {\n  return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch);\n} // LoneUnicodePropertyNameOrValue ::\n//   UnicodePropertyValueCharacters\n\n\npp$9.regexp_eatLoneUnicodePropertyNameOrValue = function (state) {\n  return this.regexp_eatUnicodePropertyValue(state);\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n\n\npp$9.regexp_eatCharacterClass = function (state) {\n  if (state.eat(0x5B\n  /* [ */\n  )) {\n    state.eat(0x5E\n    /* ^ */\n    );\n    this.regexp_classRanges(state);\n\n    if (state.eat(0x5D\n    /* [ */\n    )) {\n      return true;\n    } // Unreachable since it threw \"unterminated regular expression\" error before.\n\n\n    state.raise(\"Unterminated character class\");\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n\n\npp$9.regexp_classRanges = function (state) {\n  var this$1 = this;\n\n  while (this.regexp_eatClassAtom(state)) {\n    var left = state.lastIntValue;\n\n    if (state.eat(0x2D\n    /* - */\n    ) && this$1.regexp_eatClassAtom(state)) {\n      var right = state.lastIntValue;\n\n      if (state.switchU && (left === -1 || right === -1)) {\n        state.raise(\"Invalid character class\");\n      }\n\n      if (left !== -1 && right !== -1 && left > right) {\n        state.raise(\"Range out of order in character class\");\n      }\n    }\n  }\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n\n\npp$9.regexp_eatClassAtom = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x5C\n  /* \\ */\n  )) {\n    if (this.regexp_eatClassEscape(state)) {\n      return true;\n    }\n\n    if (state.switchU) {\n      // Make the same message as V8.\n      var ch$1 = state.current();\n\n      if (ch$1 === 0x63\n      /* c */\n      || isOctalDigit(ch$1)) {\n        state.raise(\"Invalid class escape\");\n      }\n\n      state.raise(\"Invalid escape\");\n    }\n\n    state.pos = start;\n  }\n\n  var ch = state.current();\n\n  if (ch !== 0x5D\n  /* [ */\n  ) {\n      state.lastIntValue = ch;\n      state.advance();\n      return true;\n    }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n\n\npp$9.regexp_eatClassEscape = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x62\n  /* b */\n  )) {\n    state.lastIntValue = 0x08;\n    /* <BS> */\n\n    return true;\n  }\n\n  if (state.switchU && state.eat(0x2D\n  /* - */\n  )) {\n    state.lastIntValue = 0x2D;\n    /* - */\n\n    return true;\n  }\n\n  if (!state.switchU && state.eat(0x63\n  /* c */\n  )) {\n    if (this.regexp_eatClassControlLetter(state)) {\n      return true;\n    }\n\n    state.pos = start;\n  }\n\n  return this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state);\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n\n\npp$9.regexp_eatClassControlLetter = function (state) {\n  var ch = state.current();\n\n  if (isDecimalDigit(ch) || ch === 0x5F\n  /* _ */\n  ) {\n      state.lastIntValue = ch % 0x20;\n      state.advance();\n      return true;\n    }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n\n\npp$9.regexp_eatHexEscapeSequence = function (state) {\n  var start = state.pos;\n\n  if (state.eat(0x78\n  /* x */\n  )) {\n    if (this.regexp_eatFixedHexDigits(state, 2)) {\n      return true;\n    }\n\n    if (state.switchU) {\n      state.raise(\"Invalid escape\");\n    }\n\n    state.pos = start;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n\n\npp$9.regexp_eatDecimalDigits = function (state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n\n  while (isDecimalDigit(ch = state.current())) {\n    state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30\n    /* 0 */\n    );\n    state.advance();\n  }\n\n  return state.pos !== start;\n};\n\nfunction isDecimalDigit(ch) {\n  return ch >= 0x30\n  /* 0 */\n  && ch <= 0x39;\n  /* 9 */\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n\n\npp$9.regexp_eatHexDigits = function (state) {\n  var start = state.pos;\n  var ch = 0;\n  state.lastIntValue = 0;\n\n  while (isHexDigit(ch = state.current())) {\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n\n  return state.pos !== start;\n};\n\nfunction isHexDigit(ch) {\n  return ch >= 0x30\n  /* 0 */\n  && ch <= 0x39\n  /* 9 */\n  || ch >= 0x41\n  /* A */\n  && ch <= 0x46\n  /* F */\n  || ch >= 0x61\n  /* a */\n  && ch <= 0x66\n  /* f */\n  ;\n}\n\nfunction hexToInt(ch) {\n  if (ch >= 0x41\n  /* A */\n  && ch <= 0x46\n  /* F */\n  ) {\n      return 10 + (ch - 0x41\n      /* A */\n      );\n    }\n\n  if (ch >= 0x61\n  /* a */\n  && ch <= 0x66\n  /* f */\n  ) {\n      return 10 + (ch - 0x61\n      /* a */\n      );\n    }\n\n  return ch - 0x30;\n  /* 0 */\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\n\n\npp$9.regexp_eatLegacyOctalEscapeSequence = function (state) {\n  if (this.regexp_eatOctalDigit(state)) {\n    var n1 = state.lastIntValue;\n\n    if (this.regexp_eatOctalDigit(state)) {\n      var n2 = state.lastIntValue;\n\n      if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n        state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n      } else {\n        state.lastIntValue = n1 * 8 + n2;\n      }\n    } else {\n      state.lastIntValue = n1;\n    }\n\n    return true;\n  }\n\n  return false;\n}; // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n\n\npp$9.regexp_eatOctalDigit = function (state) {\n  var ch = state.current();\n\n  if (isOctalDigit(ch)) {\n    state.lastIntValue = ch - 0x30;\n    /* 0 */\n\n    state.advance();\n    return true;\n  }\n\n  state.lastIntValue = 0;\n  return false;\n};\n\nfunction isOctalDigit(ch) {\n  return ch >= 0x30\n  /* 0 */\n  && ch <= 0x37;\n  /* 7 */\n} // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n\n\npp$9.regexp_eatFixedHexDigits = function (state, length) {\n  var start = state.pos;\n  state.lastIntValue = 0;\n\n  for (var i = 0; i < length; ++i) {\n    var ch = state.current();\n\n    if (!isHexDigit(ch)) {\n      state.pos = start;\n      return false;\n    }\n\n    state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n    state.advance();\n  }\n\n  return true;\n}; // Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\n\nvar Token = function Token(p) {\n  this.type = p.type;\n  this.value = p.value;\n  this.start = p.start;\n  this.end = p.end;\n\n  if (p.options.locations) {\n    this.loc = new SourceLocation(p, p.startLoc, p.endLoc);\n  }\n\n  if (p.options.ranges) {\n    this.range = [p.start, p.end];\n  }\n}; // ## Tokenizer\n\n\nvar pp$8 = Parser.prototype; // Move to the next token\n\npp$8.next = function () {\n  if (this.options.onToken) {\n    this.options.onToken(new Token(this));\n  }\n\n  this.lastTokEnd = this.end;\n  this.lastTokStart = this.start;\n  this.lastTokEndLoc = this.endLoc;\n  this.lastTokStartLoc = this.startLoc;\n  this.nextToken();\n};\n\npp$8.getToken = function () {\n  this.next();\n  return new Token(this);\n}; // If we're in an ES6 environment, make parsers iterable\n\n\nif (typeof Symbol !== \"undefined\") {\n  pp$8[Symbol.iterator] = function () {\n    var this$1 = this;\n    return {\n      next: function next() {\n        var token = this$1.getToken();\n        return {\n          done: token.type === types.eof,\n          value: token\n        };\n      }\n    };\n  };\n} // Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n\npp$8.curContext = function () {\n  return this.context[this.context.length - 1];\n}; // Read a single token, updating the parser object's token-related\n// properties.\n\n\npp$8.nextToken = function () {\n  var curContext = this.curContext();\n\n  if (!curContext || !curContext.preserveSpace) {\n    this.skipSpace();\n  }\n\n  this.start = this.pos;\n\n  if (this.options.locations) {\n    this.startLoc = this.curPosition();\n  }\n\n  if (this.pos >= this.input.length) {\n    return this.finishToken(types.eof);\n  }\n\n  if (curContext.override) {\n    return curContext.override(this);\n  } else {\n    this.readToken(this.fullCharCodeAtPos());\n  }\n};\n\npp$8.readToken = function (code) {\n  // Identifier or keyword. '\\uXXXX' sequences are allowed in\n  // identifiers, so '\\' also dispatches to that.\n  if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92\n  /* '\\' */\n  ) {\n      return this.readWord();\n    }\n\n  return this.getTokenFromCode(code);\n};\n\npp$8.fullCharCodeAtPos = function () {\n  var code = this.input.charCodeAt(this.pos);\n\n  if (code <= 0xd7ff || code >= 0xe000) {\n    return code;\n  }\n\n  var next = this.input.charCodeAt(this.pos + 1);\n  return (code << 10) + next - 0x35fdc00;\n};\n\npp$8.skipBlockComment = function () {\n  var this$1 = this;\n  var startLoc = this.options.onComment && this.curPosition();\n  var start = this.pos,\n      end = this.input.indexOf(\"*/\", this.pos += 2);\n\n  if (end === -1) {\n    this.raise(this.pos - 2, \"Unterminated comment\");\n  }\n\n  this.pos = end + 2;\n\n  if (this.options.locations) {\n    lineBreakG.lastIndex = start;\n    var match;\n\n    while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {\n      ++this$1.curLine;\n      this$1.lineStart = match.index + match[0].length;\n    }\n  }\n\n  if (this.options.onComment) {\n    this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition());\n  }\n};\n\npp$8.skipLineComment = function (startSkip) {\n  var this$1 = this;\n  var start = this.pos;\n  var startLoc = this.options.onComment && this.curPosition();\n  var ch = this.input.charCodeAt(this.pos += startSkip);\n\n  while (this.pos < this.input.length && !isNewLine(ch)) {\n    ch = this$1.input.charCodeAt(++this$1.pos);\n  }\n\n  if (this.options.onComment) {\n    this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition());\n  }\n}; // Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\n\npp$8.skipSpace = function () {\n  var this$1 = this;\n\n  loop: while (this.pos < this.input.length) {\n    var ch = this$1.input.charCodeAt(this$1.pos);\n\n    switch (ch) {\n      case 32:\n      case 160:\n        // ' '\n        ++this$1.pos;\n        break;\n\n      case 13:\n        if (this$1.input.charCodeAt(this$1.pos + 1) === 10) {\n          ++this$1.pos;\n        }\n\n      case 10:\n      case 8232:\n      case 8233:\n        ++this$1.pos;\n\n        if (this$1.options.locations) {\n          ++this$1.curLine;\n          this$1.lineStart = this$1.pos;\n        }\n\n        break;\n\n      case 47:\n        // '/'\n        switch (this$1.input.charCodeAt(this$1.pos + 1)) {\n          case 42:\n            // '*'\n            this$1.skipBlockComment();\n            break;\n\n          case 47:\n            this$1.skipLineComment(2);\n            break;\n\n          default:\n            break loop;\n        }\n\n        break;\n\n      default:\n        if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n          ++this$1.pos;\n        } else {\n          break loop;\n        }\n\n    }\n  }\n}; // Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\n\npp$8.finishToken = function (type, val) {\n  this.end = this.pos;\n\n  if (this.options.locations) {\n    this.endLoc = this.curPosition();\n  }\n\n  var prevType = this.type;\n  this.type = type;\n  this.value = val;\n  this.updateContext(prevType);\n}; // ### Token reading\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\n\n\npp$8.readToken_dot = function () {\n  var next = this.input.charCodeAt(this.pos + 1);\n\n  if (next >= 48 && next <= 57) {\n    return this.readNumber(true);\n  }\n\n  var next2 = this.input.charCodeAt(this.pos + 2);\n\n  if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) {\n    // 46 = dot '.'\n    this.pos += 3;\n    return this.finishToken(types.ellipsis);\n  } else {\n    ++this.pos;\n    return this.finishToken(types.dot);\n  }\n};\n\npp$8.readToken_slash = function () {\n  // '/'\n  var next = this.input.charCodeAt(this.pos + 1);\n\n  if (this.exprAllowed) {\n    ++this.pos;\n    return this.readRegexp();\n  }\n\n  if (next === 61) {\n    return this.finishOp(types.assign, 2);\n  }\n\n  return this.finishOp(types.slash, 1);\n};\n\npp$8.readToken_mult_modulo_exp = function (code) {\n  // '%*'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n  var tokentype = code === 42 ? types.star : types.modulo; // exponentiation operator ** and **=\n\n  if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n    ++size;\n    tokentype = types.starstar;\n    next = this.input.charCodeAt(this.pos + 2);\n  }\n\n  if (next === 61) {\n    return this.finishOp(types.assign, size + 1);\n  }\n\n  return this.finishOp(tokentype, size);\n};\n\npp$8.readToken_pipe_amp = function (code) {\n  // '|&'\n  var next = this.input.charCodeAt(this.pos + 1);\n\n  if (next === code) {\n    return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2);\n  }\n\n  if (next === 61) {\n    return this.finishOp(types.assign, 2);\n  }\n\n  return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1);\n};\n\npp$8.readToken_caret = function () {\n  // '^'\n  var next = this.input.charCodeAt(this.pos + 1);\n\n  if (next === 61) {\n    return this.finishOp(types.assign, 2);\n  }\n\n  return this.finishOp(types.bitwiseXOR, 1);\n};\n\npp$8.readToken_plus_min = function (code) {\n  // '+-'\n  var next = this.input.charCodeAt(this.pos + 1);\n\n  if (next === code) {\n    if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n      // A `-->` line comment\n      this.skipLineComment(3);\n      this.skipSpace();\n      return this.nextToken();\n    }\n\n    return this.finishOp(types.incDec, 2);\n  }\n\n  if (next === 61) {\n    return this.finishOp(types.assign, 2);\n  }\n\n  return this.finishOp(types.plusMin, 1);\n};\n\npp$8.readToken_lt_gt = function (code) {\n  // '<>'\n  var next = this.input.charCodeAt(this.pos + 1);\n  var size = 1;\n\n  if (next === code) {\n    size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n\n    if (this.input.charCodeAt(this.pos + size) === 61) {\n      return this.finishOp(types.assign, size + 1);\n    }\n\n    return this.finishOp(types.bitShift, size);\n  }\n\n  if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) {\n    // `<!--`, an XML-style comment that should be interpreted as a line comment\n    this.skipLineComment(4);\n    this.skipSpace();\n    return this.nextToken();\n  }\n\n  if (next === 61) {\n    size = 2;\n  }\n\n  return this.finishOp(types.relational, size);\n};\n\npp$8.readToken_eq_excl = function (code) {\n  // '=!'\n  var next = this.input.charCodeAt(this.pos + 1);\n\n  if (next === 61) {\n    return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2);\n  }\n\n  if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) {\n    // '=>'\n    this.pos += 2;\n    return this.finishToken(types.arrow);\n  }\n\n  return this.finishOp(code === 61 ? types.eq : types.prefix, 1);\n};\n\npp$8.getTokenFromCode = function (code) {\n  switch (code) {\n    // The interpretation of a dot depends on whether it is followed\n    // by a digit or another two dots.\n    case 46:\n      // '.'\n      return this.readToken_dot();\n    // Punctuation tokens.\n\n    case 40:\n      ++this.pos;\n      return this.finishToken(types.parenL);\n\n    case 41:\n      ++this.pos;\n      return this.finishToken(types.parenR);\n\n    case 59:\n      ++this.pos;\n      return this.finishToken(types.semi);\n\n    case 44:\n      ++this.pos;\n      return this.finishToken(types.comma);\n\n    case 91:\n      ++this.pos;\n      return this.finishToken(types.bracketL);\n\n    case 93:\n      ++this.pos;\n      return this.finishToken(types.bracketR);\n\n    case 123:\n      ++this.pos;\n      return this.finishToken(types.braceL);\n\n    case 125:\n      ++this.pos;\n      return this.finishToken(types.braceR);\n\n    case 58:\n      ++this.pos;\n      return this.finishToken(types.colon);\n\n    case 63:\n      ++this.pos;\n      return this.finishToken(types.question);\n\n    case 96:\n      // '`'\n      if (this.options.ecmaVersion < 6) {\n        break;\n      }\n\n      ++this.pos;\n      return this.finishToken(types.backQuote);\n\n    case 48:\n      // '0'\n      var next = this.input.charCodeAt(this.pos + 1);\n\n      if (next === 120 || next === 88) {\n        return this.readRadixNumber(16);\n      } // '0x', '0X' - hex number\n\n\n      if (this.options.ecmaVersion >= 6) {\n        if (next === 111 || next === 79) {\n          return this.readRadixNumber(8);\n        } // '0o', '0O' - octal number\n\n\n        if (next === 98 || next === 66) {\n          return this.readRadixNumber(2);\n        } // '0b', '0B' - binary number\n\n      }\n\n    // Anything else beginning with a digit is an integer, octal\n    // number, or float.\n\n    case 49:\n    case 50:\n    case 51:\n    case 52:\n    case 53:\n    case 54:\n    case 55:\n    case 56:\n    case 57:\n      // 1-9\n      return this.readNumber(false);\n    // Quotes produce strings.\n\n    case 34:\n    case 39:\n      // '\"', \"'\"\n      return this.readString(code);\n    // Operators are parsed inline in tiny state machines. '=' (61) is\n    // often referred to. `finishOp` simply skips the amount of\n    // characters it is given as second argument, and returns a token\n    // of the type given by its first argument.\n\n    case 47:\n      // '/'\n      return this.readToken_slash();\n\n    case 37:\n    case 42:\n      // '%*'\n      return this.readToken_mult_modulo_exp(code);\n\n    case 124:\n    case 38:\n      // '|&'\n      return this.readToken_pipe_amp(code);\n\n    case 94:\n      // '^'\n      return this.readToken_caret();\n\n    case 43:\n    case 45:\n      // '+-'\n      return this.readToken_plus_min(code);\n\n    case 60:\n    case 62:\n      // '<>'\n      return this.readToken_lt_gt(code);\n\n    case 61:\n    case 33:\n      // '=!'\n      return this.readToken_eq_excl(code);\n\n    case 126:\n      // '~'\n      return this.finishOp(types.prefix, 1);\n  }\n\n  this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp$8.finishOp = function (type, size) {\n  var str = this.input.slice(this.pos, this.pos + size);\n  this.pos += size;\n  return this.finishToken(type, str);\n};\n\npp$8.readRegexp = function () {\n  var this$1 = this;\n  var escaped,\n      inClass,\n      start = this.pos;\n\n  for (;;) {\n    if (this$1.pos >= this$1.input.length) {\n      this$1.raise(start, \"Unterminated regular expression\");\n    }\n\n    var ch = this$1.input.charAt(this$1.pos);\n\n    if (lineBreak.test(ch)) {\n      this$1.raise(start, \"Unterminated regular expression\");\n    }\n\n    if (!escaped) {\n      if (ch === \"[\") {\n        inClass = true;\n      } else if (ch === \"]\" && inClass) {\n        inClass = false;\n      } else if (ch === \"/\" && !inClass) {\n        break;\n      }\n\n      escaped = ch === \"\\\\\";\n    } else {\n      escaped = false;\n    }\n\n    ++this$1.pos;\n  }\n\n  var pattern = this.input.slice(start, this.pos);\n  ++this.pos;\n  var flagsStart = this.pos;\n  var flags = this.readWord1();\n\n  if (this.containsEsc) {\n    this.unexpected(flagsStart);\n  } // Validate pattern\n\n\n  var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n  state.reset(start, pattern, flags);\n  this.validateRegExpFlags(state);\n  this.validateRegExpPattern(state); // Create Literal#value property value.\n\n  var value = null;\n\n  try {\n    value = new RegExp(pattern, flags);\n  } catch (e) {// ESTree requires null if it failed to instantiate RegExp object.\n    // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n  }\n\n  return this.finishToken(types.regexp, {\n    pattern: pattern,\n    flags: flags,\n    value: value\n  });\n}; // Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\n\npp$8.readInt = function (radix, len) {\n  var this$1 = this;\n  var start = this.pos,\n      total = 0;\n\n  for (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    var code = this$1.input.charCodeAt(this$1.pos),\n        val = void 0;\n\n    if (code >= 97) {\n      val = code - 97 + 10;\n    } // a\n    else if (code >= 65) {\n        val = code - 65 + 10;\n      } // A\n      else if (code >= 48 && code <= 57) {\n          val = code - 48;\n        } // 0-9\n        else {\n            val = Infinity;\n          }\n\n    if (val >= radix) {\n      break;\n    }\n\n    ++this$1.pos;\n    total = total * radix + val;\n  }\n\n  if (this.pos === start || len != null && this.pos - start !== len) {\n    return null;\n  }\n\n  return total;\n};\n\npp$8.readRadixNumber = function (radix) {\n  this.pos += 2; // 0x\n\n  var val = this.readInt(radix);\n\n  if (val == null) {\n    this.raise(this.start + 2, \"Expected number in radix \" + radix);\n  }\n\n  if (isIdentifierStart(this.fullCharCodeAtPos())) {\n    this.raise(this.pos, \"Identifier directly after number\");\n  }\n\n  return this.finishToken(types.num, val);\n}; // Read an integer, octal integer, or floating-point number.\n\n\npp$8.readNumber = function (startsWithDot) {\n  var start = this.pos;\n\n  if (!startsWithDot && this.readInt(10) === null) {\n    this.raise(start, \"Invalid number\");\n  }\n\n  var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n\n  if (octal && this.strict) {\n    this.raise(start, \"Invalid number\");\n  }\n\n  if (octal && /[89]/.test(this.input.slice(start, this.pos))) {\n    octal = false;\n  }\n\n  var next = this.input.charCodeAt(this.pos);\n\n  if (next === 46 && !octal) {\n    // '.'\n    ++this.pos;\n    this.readInt(10);\n    next = this.input.charCodeAt(this.pos);\n  }\n\n  if ((next === 69 || next === 101) && !octal) {\n    // 'eE'\n    next = this.input.charCodeAt(++this.pos);\n\n    if (next === 43 || next === 45) {\n      ++this.pos;\n    } // '+-'\n\n\n    if (this.readInt(10) === null) {\n      this.raise(start, \"Invalid number\");\n    }\n  }\n\n  if (isIdentifierStart(this.fullCharCodeAtPos())) {\n    this.raise(this.pos, \"Identifier directly after number\");\n  }\n\n  var str = this.input.slice(start, this.pos);\n  var val = octal ? parseInt(str, 8) : parseFloat(str);\n  return this.finishToken(types.num, val);\n}; // Read a string value, interpreting backslash-escapes.\n\n\npp$8.readCodePoint = function () {\n  var ch = this.input.charCodeAt(this.pos),\n      code;\n\n  if (ch === 123) {\n    // '{'\n    if (this.options.ecmaVersion < 6) {\n      this.unexpected();\n    }\n\n    var codePos = ++this.pos;\n    code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n    ++this.pos;\n\n    if (code > 0x10FFFF) {\n      this.invalidStringToken(codePos, \"Code point out of bounds\");\n    }\n  } else {\n    code = this.readHexChar(4);\n  }\n\n  return code;\n};\n\nfunction codePointToString(code) {\n  // UTF-16 Decoding\n  if (code <= 0xFFFF) {\n    return String.fromCharCode(code);\n  }\n\n  code -= 0x10000;\n  return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00);\n}\n\npp$8.readString = function (quote) {\n  var this$1 = this;\n  var out = \"\",\n      chunkStart = ++this.pos;\n\n  for (;;) {\n    if (this$1.pos >= this$1.input.length) {\n      this$1.raise(this$1.start, \"Unterminated string constant\");\n    }\n\n    var ch = this$1.input.charCodeAt(this$1.pos);\n\n    if (ch === quote) {\n      break;\n    }\n\n    if (ch === 92) {\n      // '\\'\n      out += this$1.input.slice(chunkStart, this$1.pos);\n      out += this$1.readEscapedChar(false);\n      chunkStart = this$1.pos;\n    } else {\n      if (isNewLine(ch, this$1.options.ecmaVersion >= 10)) {\n        this$1.raise(this$1.start, \"Unterminated string constant\");\n      }\n\n      ++this$1.pos;\n    }\n  }\n\n  out += this.input.slice(chunkStart, this.pos++);\n  return this.finishToken(types.string, out);\n}; // Reads template string tokens.\n\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp$8.tryReadTemplateToken = function () {\n  this.inTemplateElement = true;\n\n  try {\n    this.readTmplToken();\n  } catch (err) {\n    if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n      this.readInvalidTemplateToken();\n    } else {\n      throw err;\n    }\n  }\n\n  this.inTemplateElement = false;\n};\n\npp$8.invalidStringToken = function (position, message) {\n  if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n    throw INVALID_TEMPLATE_ESCAPE_ERROR;\n  } else {\n    this.raise(position, message);\n  }\n};\n\npp$8.readTmplToken = function () {\n  var this$1 = this;\n  var out = \"\",\n      chunkStart = this.pos;\n\n  for (;;) {\n    if (this$1.pos >= this$1.input.length) {\n      this$1.raise(this$1.start, \"Unterminated template\");\n    }\n\n    var ch = this$1.input.charCodeAt(this$1.pos);\n\n    if (ch === 96 || ch === 36 && this$1.input.charCodeAt(this$1.pos + 1) === 123) {\n      // '`', '${'\n      if (this$1.pos === this$1.start && (this$1.type === types.template || this$1.type === types.invalidTemplate)) {\n        if (ch === 36) {\n          this$1.pos += 2;\n          return this$1.finishToken(types.dollarBraceL);\n        } else {\n          ++this$1.pos;\n          return this$1.finishToken(types.backQuote);\n        }\n      }\n\n      out += this$1.input.slice(chunkStart, this$1.pos);\n      return this$1.finishToken(types.template, out);\n    }\n\n    if (ch === 92) {\n      // '\\'\n      out += this$1.input.slice(chunkStart, this$1.pos);\n      out += this$1.readEscapedChar(true);\n      chunkStart = this$1.pos;\n    } else if (isNewLine(ch)) {\n      out += this$1.input.slice(chunkStart, this$1.pos);\n      ++this$1.pos;\n\n      switch (ch) {\n        case 13:\n          if (this$1.input.charCodeAt(this$1.pos) === 10) {\n            ++this$1.pos;\n          }\n\n        case 10:\n          out += \"\\n\";\n          break;\n\n        default:\n          out += String.fromCharCode(ch);\n          break;\n      }\n\n      if (this$1.options.locations) {\n        ++this$1.curLine;\n        this$1.lineStart = this$1.pos;\n      }\n\n      chunkStart = this$1.pos;\n    } else {\n      ++this$1.pos;\n    }\n  }\n}; // Reads a template token to search for the end, without validating any escape sequences\n\n\npp$8.readInvalidTemplateToken = function () {\n  var this$1 = this;\n\n  for (; this.pos < this.input.length; this.pos++) {\n    switch (this$1.input[this$1.pos]) {\n      case \"\\\\\":\n        ++this$1.pos;\n        break;\n\n      case \"$\":\n        if (this$1.input[this$1.pos + 1] !== \"{\") {\n          break;\n        }\n\n      // falls through\n\n      case \"`\":\n        return this$1.finishToken(types.invalidTemplate, this$1.input.slice(this$1.start, this$1.pos));\n      // no default\n    }\n  }\n\n  this.raise(this.start, \"Unterminated template\");\n}; // Used to read escaped characters\n\n\npp$8.readEscapedChar = function (inTemplate) {\n  var ch = this.input.charCodeAt(++this.pos);\n  ++this.pos;\n\n  switch (ch) {\n    case 110:\n      return \"\\n\";\n    // 'n' -> '\\n'\n\n    case 114:\n      return \"\\r\";\n    // 'r' -> '\\r'\n\n    case 120:\n      return String.fromCharCode(this.readHexChar(2));\n    // 'x'\n\n    case 117:\n      return codePointToString(this.readCodePoint());\n    // 'u'\n\n    case 116:\n      return \"\\t\";\n    // 't' -> '\\t'\n\n    case 98:\n      return \"\\b\";\n    // 'b' -> '\\b'\n\n    case 118:\n      return \"\\x0B\";\n    // 'v' -> '\\u000b'\n\n    case 102:\n      return \"\\f\";\n    // 'f' -> '\\f'\n\n    case 13:\n      if (this.input.charCodeAt(this.pos) === 10) {\n        ++this.pos;\n      }\n\n    // '\\r\\n'\n\n    case 10:\n      // ' \\n'\n      if (this.options.locations) {\n        this.lineStart = this.pos;\n        ++this.curLine;\n      }\n\n      return \"\";\n\n    default:\n      if (ch >= 48 && ch <= 55) {\n        var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n        var octal = parseInt(octalStr, 8);\n\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n\n        this.pos += octalStr.length - 1;\n        ch = this.input.charCodeAt(this.pos);\n\n        if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n          this.invalidStringToken(this.pos - 1 - octalStr.length, inTemplate ? \"Octal literal in template string\" : \"Octal literal in strict mode\");\n        }\n\n        return String.fromCharCode(octal);\n      }\n\n      return String.fromCharCode(ch);\n  }\n}; // Used to read character escape sequences ('\\x', '\\u', '\\U').\n\n\npp$8.readHexChar = function (len) {\n  var codePos = this.pos;\n  var n = this.readInt(16, len);\n\n  if (n === null) {\n    this.invalidStringToken(codePos, \"Bad character escape sequence\");\n  }\n\n  return n;\n}; // Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\n\npp$8.readWord1 = function () {\n  var this$1 = this;\n  this.containsEsc = false;\n  var word = \"\",\n      first = true,\n      chunkStart = this.pos;\n  var astral = this.options.ecmaVersion >= 6;\n\n  while (this.pos < this.input.length) {\n    var ch = this$1.fullCharCodeAtPos();\n\n    if (isIdentifierChar(ch, astral)) {\n      this$1.pos += ch <= 0xffff ? 1 : 2;\n    } else if (ch === 92) {\n      // \"\\\"\n      this$1.containsEsc = true;\n      word += this$1.input.slice(chunkStart, this$1.pos);\n      var escStart = this$1.pos;\n\n      if (this$1.input.charCodeAt(++this$1.pos) !== 117) // \"u\"\n        {\n          this$1.invalidStringToken(this$1.pos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n        }\n\n      ++this$1.pos;\n      var esc = this$1.readCodePoint();\n\n      if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral)) {\n        this$1.invalidStringToken(escStart, \"Invalid Unicode escape\");\n      }\n\n      word += codePointToString(esc);\n      chunkStart = this$1.pos;\n    } else {\n      break;\n    }\n\n    first = false;\n  }\n\n  return word + this.input.slice(chunkStart, this.pos);\n}; // Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\n\npp$8.readWord = function () {\n  var word = this.readWord1();\n  var type = types.name;\n\n  if (this.keywords.test(word)) {\n    if (this.containsEsc) {\n      this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + word);\n    }\n\n    type = keywords$1[word];\n  }\n\n  return this.finishToken(type, word);\n}; // Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n//     http://marijnhaverbeke.nl/git/acorn\n//     https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n//\n// [walk]: util/walk.js\n\n\nvar version = \"6.0.2\"; // The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and\n// returns an abstract syntax tree as specified by [Mozilla parser\n// API][api].\n//\n// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nfunction parse(input, options) {\n  return Parser.parse(input, options);\n} // This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\n\nfunction parseExpressionAt(input, pos, options) {\n  return Parser.parseExpressionAt(input, pos, options);\n} // Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\n\nfunction tokenizer(input, options) {\n  return Parser.tokenizer(input, options);\n}\n\nvar acorn = /*#__PURE__*/Object.freeze({\n  version: version,\n  parse: parse,\n  parseExpressionAt: parseExpressionAt,\n  tokenizer: tokenizer,\n  Parser: Parser,\n  defaultOptions: defaultOptions,\n  Position: Position,\n  SourceLocation: SourceLocation,\n  getLineInfo: getLineInfo,\n  Node: Node,\n  TokenType: TokenType,\n  tokTypes: types,\n  keywordTypes: keywords$1,\n  TokContext: TokContext,\n  tokContexts: types$1,\n  isIdentifierChar: isIdentifierChar,\n  isIdentifierStart: isIdentifierStart,\n  Token: Token,\n  isNewLine: isNewLine,\n  lineBreak: lineBreak,\n  lineBreakG: lineBreakG,\n  nonASCIIwhitespace: nonASCIIwhitespace\n});\nvar xhtml = {\n  quot: \"\\\"\",\n  amp: '&',\n  apos: \"'\",\n  lt: '<',\n  gt: '>',\n  nbsp: \"\\xA0\",\n  iexcl: \"\\xA1\",\n  cent: \"\\xA2\",\n  pound: \"\\xA3\",\n  curren: \"\\xA4\",\n  yen: \"\\xA5\",\n  brvbar: \"\\xA6\",\n  sect: \"\\xA7\",\n  uml: \"\\xA8\",\n  copy: \"\\xA9\",\n  ordf: \"\\xAA\",\n  laquo: \"\\xAB\",\n  not: \"\\xAC\",\n  shy: \"\\xAD\",\n  reg: \"\\xAE\",\n  macr: \"\\xAF\",\n  deg: \"\\xB0\",\n  plusmn: \"\\xB1\",\n  sup2: \"\\xB2\",\n  sup3: \"\\xB3\",\n  acute: \"\\xB4\",\n  micro: \"\\xB5\",\n  para: \"\\xB6\",\n  middot: \"\\xB7\",\n  cedil: \"\\xB8\",\n  sup1: \"\\xB9\",\n  ordm: \"\\xBA\",\n  raquo: \"\\xBB\",\n  frac14: \"\\xBC\",\n  frac12: \"\\xBD\",\n  frac34: \"\\xBE\",\n  iquest: \"\\xBF\",\n  Agrave: \"\\xC0\",\n  Aacute: \"\\xC1\",\n  Acirc: \"\\xC2\",\n  Atilde: \"\\xC3\",\n  Auml: \"\\xC4\",\n  Aring: \"\\xC5\",\n  AElig: \"\\xC6\",\n  Ccedil: \"\\xC7\",\n  Egrave: \"\\xC8\",\n  Eacute: \"\\xC9\",\n  Ecirc: \"\\xCA\",\n  Euml: \"\\xCB\",\n  Igrave: \"\\xCC\",\n  Iacute: \"\\xCD\",\n  Icirc: \"\\xCE\",\n  Iuml: \"\\xCF\",\n  ETH: \"\\xD0\",\n  Ntilde: \"\\xD1\",\n  Ograve: \"\\xD2\",\n  Oacute: \"\\xD3\",\n  Ocirc: \"\\xD4\",\n  Otilde: \"\\xD5\",\n  Ouml: \"\\xD6\",\n  times: \"\\xD7\",\n  Oslash: \"\\xD8\",\n  Ugrave: \"\\xD9\",\n  Uacute: \"\\xDA\",\n  Ucirc: \"\\xDB\",\n  Uuml: \"\\xDC\",\n  Yacute: \"\\xDD\",\n  THORN: \"\\xDE\",\n  szlig: \"\\xDF\",\n  agrave: \"\\xE0\",\n  aacute: \"\\xE1\",\n  acirc: \"\\xE2\",\n  atilde: \"\\xE3\",\n  auml: \"\\xE4\",\n  aring: \"\\xE5\",\n  aelig: \"\\xE6\",\n  ccedil: \"\\xE7\",\n  egrave: \"\\xE8\",\n  eacute: \"\\xE9\",\n  ecirc: \"\\xEA\",\n  euml: \"\\xEB\",\n  igrave: \"\\xEC\",\n  iacute: \"\\xED\",\n  icirc: \"\\xEE\",\n  iuml: \"\\xEF\",\n  eth: \"\\xF0\",\n  ntilde: \"\\xF1\",\n  ograve: \"\\xF2\",\n  oacute: \"\\xF3\",\n  ocirc: \"\\xF4\",\n  otilde: \"\\xF5\",\n  ouml: \"\\xF6\",\n  divide: \"\\xF7\",\n  oslash: \"\\xF8\",\n  ugrave: \"\\xF9\",\n  uacute: \"\\xFA\",\n  ucirc: \"\\xFB\",\n  uuml: \"\\xFC\",\n  yacute: \"\\xFD\",\n  thorn: \"\\xFE\",\n  yuml: \"\\xFF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  'int': \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\"\n};\nvar hexNumber = /^[\\da-fA-F]+$/;\nvar decimalNumber = /^\\d+$/;\nvar tt = acorn.tokTypes;\nvar TokContext$1 = acorn.TokContext;\nvar tokContexts = acorn.tokContexts;\nvar TokenType$1 = acorn.TokenType;\nvar isNewLine$1 = acorn.isNewLine;\nvar isIdentifierStart$1 = acorn.isIdentifierStart;\nvar isIdentifierChar$1 = acorn.isIdentifierChar;\nvar tc_oTag = new TokContext$1('<tag', false);\nvar tc_cTag = new TokContext$1('</tag', false);\nvar tc_expr = new TokContext$1('<tag>...</tag>', true, true);\nvar tok = {\n  jsxName: new TokenType$1('jsxName'),\n  jsxText: new TokenType$1('jsxText', {\n    beforeExpr: true\n  }),\n  jsxTagStart: new TokenType$1('jsxTagStart'),\n  jsxTagEnd: new TokenType$1('jsxTagEnd')\n};\n\ntok.jsxTagStart.updateContext = function () {\n  this.context.push(tc_expr); // treat as beginning of JSX expression\n\n  this.context.push(tc_oTag); // start opening tag context\n\n  this.exprAllowed = false;\n};\n\ntok.jsxTagEnd.updateContext = function (prevType) {\n  var out = this.context.pop();\n\n  if (out === tc_oTag && prevType === tt.slash || out === tc_cTag) {\n    this.context.pop();\n    this.exprAllowed = this.curContext() === tc_expr;\n  } else {\n    this.exprAllowed = true;\n  }\n}; // Transforms JSX element name to string.\n\n\nfunction getQualifiedJSXName(object) {\n  if (!object) {\n    return object;\n  }\n\n  if (object.type === 'JSXIdentifier') {\n    return object.name;\n  }\n\n  if (object.type === 'JSXNamespacedName') {\n    return object.namespace.name + ':' + object.name.name;\n  }\n\n  if (object.type === 'JSXMemberExpression') {\n    return getQualifiedJSXName(object.object) + '.' + getQualifiedJSXName(object.property);\n  }\n}\n\nvar acornJsx = function acornJsx(options) {\n  if (options === void 0) options = {};\n  return function (Parser) {\n    return plugin({\n      allowNamespaces: options.allowNamespaces !== false,\n      allowNamespacedObjects: !!options.allowNamespacedObjects\n    }, Parser);\n  };\n};\n\nvar tokTypes = tok;\n\nfunction plugin(options, Parser) {\n  return function (Parser) {\n    function anonymous() {\n      Parser.apply(this, arguments);\n    }\n\n    if (Parser) anonymous.__proto__ = Parser;\n    anonymous.prototype = Object.create(Parser && Parser.prototype);\n    anonymous.prototype.constructor = anonymous;\n\n    anonymous.prototype.jsx_readToken = function jsx_readToken() {\n      var this$1 = this;\n      var out = '',\n          chunkStart = this.pos;\n\n      for (;;) {\n        if (this$1.pos >= this$1.input.length) {\n          this$1.raise(this$1.start, 'Unterminated JSX contents');\n        }\n\n        var ch = this$1.input.charCodeAt(this$1.pos);\n\n        switch (ch) {\n          case 60: // '<'\n\n          case 123:\n            // '{'\n            if (this$1.pos === this$1.start) {\n              if (ch === 60 && this$1.exprAllowed) {\n                ++this$1.pos;\n                return this$1.finishToken(tok.jsxTagStart);\n              }\n\n              return this$1.getTokenFromCode(ch);\n            }\n\n            out += this$1.input.slice(chunkStart, this$1.pos);\n            return this$1.finishToken(tok.jsxText, out);\n\n          case 38:\n            // '&'\n            out += this$1.input.slice(chunkStart, this$1.pos);\n            out += this$1.jsx_readEntity();\n            chunkStart = this$1.pos;\n            break;\n\n          default:\n            if (isNewLine$1(ch)) {\n              out += this$1.input.slice(chunkStart, this$1.pos);\n              out += this$1.jsx_readNewLine(true);\n              chunkStart = this$1.pos;\n            } else {\n              ++this$1.pos;\n            }\n\n        }\n      }\n    };\n\n    anonymous.prototype.jsx_readNewLine = function jsx_readNewLine(normalizeCRLF) {\n      var ch = this.input.charCodeAt(this.pos);\n      var out;\n      ++this.pos;\n\n      if (ch === 13 && this.input.charCodeAt(this.pos) === 10) {\n        ++this.pos;\n        out = normalizeCRLF ? '\\n' : '\\r\\n';\n      } else {\n        out = String.fromCharCode(ch);\n      }\n\n      if (this.options.locations) {\n        ++this.curLine;\n        this.lineStart = this.pos;\n      }\n\n      return out;\n    };\n\n    anonymous.prototype.jsx_readString = function jsx_readString(quote) {\n      var this$1 = this;\n      var out = '',\n          chunkStart = ++this.pos;\n\n      for (;;) {\n        if (this$1.pos >= this$1.input.length) {\n          this$1.raise(this$1.start, 'Unterminated string constant');\n        }\n\n        var ch = this$1.input.charCodeAt(this$1.pos);\n\n        if (ch === quote) {\n          break;\n        }\n\n        if (ch === 38) {\n          // '&'\n          out += this$1.input.slice(chunkStart, this$1.pos);\n          out += this$1.jsx_readEntity();\n          chunkStart = this$1.pos;\n        } else if (isNewLine$1(ch)) {\n          out += this$1.input.slice(chunkStart, this$1.pos);\n          out += this$1.jsx_readNewLine(false);\n          chunkStart = this$1.pos;\n        } else {\n          ++this$1.pos;\n        }\n      }\n\n      out += this.input.slice(chunkStart, this.pos++);\n      return this.finishToken(tt.string, out);\n    };\n\n    anonymous.prototype.jsx_readEntity = function jsx_readEntity() {\n      var this$1 = this;\n      var str = '',\n          count = 0,\n          entity;\n      var ch = this.input[this.pos];\n\n      if (ch !== '&') {\n        this.raise(this.pos, 'Entity must start with an ampersand');\n      }\n\n      var startPos = ++this.pos;\n\n      while (this.pos < this.input.length && count++ < 10) {\n        ch = this$1.input[this$1.pos++];\n\n        if (ch === ';') {\n          if (str[0] === '#') {\n            if (str[1] === 'x') {\n              str = str.substr(2);\n\n              if (hexNumber.test(str)) {\n                entity = String.fromCharCode(parseInt(str, 16));\n              }\n            } else {\n              str = str.substr(1);\n\n              if (decimalNumber.test(str)) {\n                entity = String.fromCharCode(parseInt(str, 10));\n              }\n            }\n          } else {\n            entity = xhtml[str];\n          }\n\n          break;\n        }\n\n        str += ch;\n      }\n\n      if (!entity) {\n        this.pos = startPos;\n        return '&';\n      }\n\n      return entity;\n    }; // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can't contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n\n    anonymous.prototype.jsx_readWord = function jsx_readWord() {\n      var this$1 = this;\n      var ch,\n          start = this.pos;\n\n      do {\n        ch = this$1.input.charCodeAt(++this$1.pos);\n      } while (isIdentifierChar$1(ch) || ch === 45); // '-'\n\n\n      return this.finishToken(tok.jsxName, this.input.slice(start, this.pos));\n    }; // Parse next token as JSX identifier\n\n\n    anonymous.prototype.jsx_parseIdentifier = function jsx_parseIdentifier() {\n      var node = this.startNode();\n\n      if (this.type === tok.jsxName) {\n        node.name = this.value;\n      } else if (this.type.keyword) {\n        node.name = this.type.keyword;\n      } else {\n        this.unexpected();\n      }\n\n      this.next();\n      return this.finishNode(node, 'JSXIdentifier');\n    }; // Parse namespaced identifier.\n\n\n    anonymous.prototype.jsx_parseNamespacedName = function jsx_parseNamespacedName() {\n      var startPos = this.start,\n          startLoc = this.startLoc;\n      var name = this.jsx_parseIdentifier();\n\n      if (!options.allowNamespaces || !this.eat(tt.colon)) {\n        return name;\n      }\n\n      var node = this.startNodeAt(startPos, startLoc);\n      node.namespace = name;\n      node.name = this.jsx_parseIdentifier();\n      return this.finishNode(node, 'JSXNamespacedName');\n    }; // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n\n    anonymous.prototype.jsx_parseElementName = function jsx_parseElementName() {\n      var this$1 = this;\n\n      if (this.type === tok.jsxTagEnd) {\n        return '';\n      }\n\n      var startPos = this.start,\n          startLoc = this.startLoc;\n      var node = this.jsx_parseNamespacedName();\n\n      if (this.type === tt.dot && node.type === 'JSXNamespacedName' && !options.allowNamespacedObjects) {\n        this.unexpected();\n      }\n\n      while (this.eat(tt.dot)) {\n        var newNode = this$1.startNodeAt(startPos, startLoc);\n        newNode.object = node;\n        newNode.property = this$1.jsx_parseIdentifier();\n        node = this$1.finishNode(newNode, 'JSXMemberExpression');\n      }\n\n      return node;\n    }; // Parses any type of JSX attribute value.\n\n\n    anonymous.prototype.jsx_parseAttributeValue = function jsx_parseAttributeValue() {\n      switch (this.type) {\n        case tt.braceL:\n          var node = this.jsx_parseExpressionContainer();\n\n          if (node.expression.type === 'JSXEmptyExpression') {\n            this.raise(node.start, 'JSX attributes must only be assigned a non-empty expression');\n          }\n\n          return node;\n\n        case tok.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom();\n\n        default:\n          this.raise(this.start, 'JSX value should be either an expression or a quoted JSX text');\n      }\n    }; // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n\n    anonymous.prototype.jsx_parseEmptyExpression = function jsx_parseEmptyExpression() {\n      var node = this.startNodeAt(this.lastTokEnd, this.lastTokEndLoc);\n      return this.finishNodeAt(node, 'JSXEmptyExpression', this.start, this.startLoc);\n    }; // Parses JSX expression enclosed into curly brackets.\n\n\n    anonymous.prototype.jsx_parseExpressionContainer = function jsx_parseExpressionContainer() {\n      var node = this.startNode();\n      this.next();\n      node.expression = this.type === tt.braceR ? this.jsx_parseEmptyExpression() : this.parseExpression();\n      this.expect(tt.braceR);\n      return this.finishNode(node, 'JSXExpressionContainer');\n    }; // Parses following JSX attribute name-value pair.\n\n\n    anonymous.prototype.jsx_parseAttribute = function jsx_parseAttribute() {\n      var node = this.startNode();\n\n      if (this.eat(tt.braceL)) {\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssign();\n        this.expect(tt.braceR);\n        return this.finishNode(node, 'JSXSpreadAttribute');\n      }\n\n      node.name = this.jsx_parseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsx_parseAttributeValue() : null;\n      return this.finishNode(node, 'JSXAttribute');\n    }; // Parses JSX opening tag starting after '<'.\n\n\n    anonymous.prototype.jsx_parseOpeningElementAt = function jsx_parseOpeningElementAt(startPos, startLoc) {\n      var this$1 = this;\n      var node = this.startNodeAt(startPos, startLoc);\n      node.attributes = [];\n      var nodeName = this.jsx_parseElementName();\n\n      if (nodeName) {\n        node.name = nodeName;\n      }\n\n      while (this.type !== tt.slash && this.type !== tok.jsxTagEnd) {\n        node.attributes.push(this$1.jsx_parseAttribute());\n      }\n\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tok.jsxTagEnd);\n      return this.finishNode(node, nodeName ? 'JSXOpeningElement' : 'JSXOpeningFragment');\n    }; // Parses JSX closing tag starting after '</'.\n\n\n    anonymous.prototype.jsx_parseClosingElementAt = function jsx_parseClosingElementAt(startPos, startLoc) {\n      var node = this.startNodeAt(startPos, startLoc);\n      var nodeName = this.jsx_parseElementName();\n\n      if (nodeName) {\n        node.name = nodeName;\n      }\n\n      this.expect(tok.jsxTagEnd);\n      return this.finishNode(node, nodeName ? 'JSXClosingElement' : 'JSXClosingFragment');\n    }; // Parses entire JSX element, including it's opening tag\n    // (starting after '<'), attributes, contents and closing tag.\n\n\n    anonymous.prototype.jsx_parseElementAt = function jsx_parseElementAt(startPos, startLoc) {\n      var this$1 = this;\n      var node = this.startNodeAt(startPos, startLoc);\n      var children = [];\n      var openingElement = this.jsx_parseOpeningElementAt(startPos, startLoc);\n      var closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this$1.type) {\n            case tok.jsxTagStart:\n              startPos = this$1.start;\n              startLoc = this$1.startLoc;\n              this$1.next();\n\n              if (this$1.eat(tt.slash)) {\n                closingElement = this$1.jsx_parseClosingElementAt(startPos, startLoc);\n                break contents;\n              }\n\n              children.push(this$1.jsx_parseElementAt(startPos, startLoc));\n              break;\n\n            case tok.jsxText:\n              children.push(this$1.parseExprAtom());\n              break;\n\n            case tt.braceL:\n              children.push(this$1.jsx_parseExpressionContainer());\n              break;\n\n            default:\n              this$1.unexpected();\n          }\n        }\n\n        if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n          this.raise(closingElement.start, 'Expected corresponding JSX closing tag for <' + getQualifiedJSXName(openingElement.name) + '>');\n        }\n      }\n\n      var fragmentOrElement = openingElement.name ? 'Element' : 'Fragment';\n      node['opening' + fragmentOrElement] = openingElement;\n      node['closing' + fragmentOrElement] = closingElement;\n      node.children = children;\n\n      if (this.type === tt.relational && this.value === \"<\") {\n        this.raise(this.start, \"Adjacent JSX elements must be wrapped in an enclosing tag\");\n      }\n\n      return this.finishNode(node, 'JSX' + fragmentOrElement);\n    }; // Parse JSX text\n\n\n    anonymous.prototype.jsx_parseText = function jsx_parseText(value) {\n      var node = this.parseLiteral(value);\n      node.type = \"JSXText\";\n      return node;\n    }; // Parses entire JSX element from current position.\n\n\n    anonymous.prototype.jsx_parseElement = function jsx_parseElement() {\n      var startPos = this.start,\n          startLoc = this.startLoc;\n      this.next();\n      return this.jsx_parseElementAt(startPos, startLoc);\n    };\n\n    anonymous.prototype.parseExprAtom = function parseExprAtom(refShortHandDefaultPos) {\n      if (this.type === tok.jsxText) {\n        return this.jsx_parseText(this.value);\n      } else if (this.type === tok.jsxTagStart) {\n        return this.jsx_parseElement();\n      } else {\n        return Parser.prototype.parseExprAtom.call(this, refShortHandDefaultPos);\n      }\n    };\n\n    anonymous.prototype.readToken = function readToken(code) {\n      var context = this.curContext();\n\n      if (context === tc_expr) {\n        return this.jsx_readToken();\n      }\n\n      if (context === tc_oTag || context === tc_cTag) {\n        if (isIdentifierStart$1(code)) {\n          return this.jsx_readWord();\n        }\n\n        if (code == 62) {\n          ++this.pos;\n          return this.finishToken(tok.jsxTagEnd);\n        }\n\n        if ((code === 34 || code === 39) && context == tc_oTag) {\n          return this.jsx_readString(code);\n        }\n      }\n\n      if (code === 60 && this.exprAllowed && this.input.charCodeAt(this.pos + 1) !== 33) {\n        ++this.pos;\n        return this.finishToken(tok.jsxTagStart);\n      }\n\n      return Parser.prototype.readToken.call(this, code);\n    };\n\n    anonymous.prototype.updateContext = function updateContext(prevType) {\n      if (this.type == tt.braceL) {\n        var curContext = this.curContext();\n\n        if (curContext == tc_oTag) {\n          this.context.push(tokContexts.b_expr);\n        } else if (curContext == tc_expr) {\n          this.context.push(tokContexts.b_tmpl);\n        } else {\n          Parser.prototype.updateContext.call(this, prevType);\n        }\n\n        this.exprAllowed = true;\n      } else if (this.type === tt.slash && prevType === tok.jsxTagStart) {\n        this.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n\n        this.context.push(tc_cTag); // reconsider as closing tag context\n\n        this.exprAllowed = false;\n      } else {\n        return Parser.prototype.updateContext.call(this, prevType);\n      }\n    };\n\n    return anonymous;\n  }(Parser);\n}\n\nacornJsx.tokTypes = tokTypes;\n\nfunction unwrapExports(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n  return module = {\n    exports: {}\n  }, fn(module, module.exports), module.exports;\n}\n\nvar lib = createCommonjsModule(function (module, exports) {\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.DynamicImportKey = undefined;\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var _get = function () {\n    function get(object, property, receiver) {\n      if (object === null) object = Function.prototype;\n      var desc = Object.getOwnPropertyDescriptor(object, property);\n\n      if (desc === undefined) {\n        var parent = Object.getPrototypeOf(object);\n\n        if (parent === null) {\n          return undefined;\n        } else {\n          return get(parent, property, receiver);\n        }\n      } else if (\"value\" in desc) {\n        return desc.value;\n      } else {\n        var getter = desc.get;\n\n        if (getter === undefined) {\n          return undefined;\n        }\n\n        return getter.call(receiver);\n      }\n    }\n\n    return get;\n  }();\n\n  exports['default'] = dynamicImport;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n  /* eslint-disable no-underscore-dangle */\n\n\n  var DynamicImportKey = exports.DynamicImportKey = 'Import'; // NOTE: This allows `yield import()` to parse correctly.\n\n  acorn.tokTypes._import.startsExpr = true;\n\n  function parseDynamicImport() {\n    var node = this.startNode();\n    this.next();\n\n    if (this.type !== acorn.tokTypes.parenL) {\n      this.unexpected();\n    }\n\n    return this.finishNode(node, DynamicImportKey);\n  }\n\n  function parenAfter() {\n    return /^(\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*\\(/.test(this.input.slice(this.pos));\n  }\n\n  function dynamicImport(Parser) {\n    return function (_Parser) {\n      _inherits(_class, _Parser);\n\n      function _class() {\n        _classCallCheck(this, _class);\n\n        return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));\n      }\n\n      _createClass(_class, [{\n        key: 'parseStatement',\n        value: function () {\n          function parseStatement(context, topLevel, exports) {\n            if (this.type === acorn.tokTypes._import && parenAfter.call(this)) {\n              return this.parseExpressionStatement(this.startNode(), this.parseExpression());\n            }\n\n            return _get(_class.prototype.__proto__ || Object.getPrototypeOf(_class.prototype), 'parseStatement', this).call(this, context, topLevel, exports);\n          }\n\n          return parseStatement;\n        }()\n      }, {\n        key: 'parseExprAtom',\n        value: function () {\n          function parseExprAtom(refDestructuringErrors) {\n            if (this.type === acorn.tokTypes._import) {\n              return parseDynamicImport.call(this);\n            }\n\n            return _get(_class.prototype.__proto__ || Object.getPrototypeOf(_class.prototype), 'parseExprAtom', this).call(this, refDestructuringErrors);\n          }\n\n          return parseExprAtom;\n        }()\n      }]);\n\n      return _class;\n    }(Parser);\n  }\n});\nvar acornDynamicImport = unwrapExports(lib);\nvar lib_1 = lib.DynamicImportKey; // used for debugging, without the noise created by\n// circular references\n\nfunction toJSON(node) {\n  var obj = {};\n  Object.keys(node).forEach(function (key) {\n    if (key === 'parent' || key === 'program' || key === 'keys' || key === '__wrapped') {\n      return;\n    }\n\n    if (Array.isArray(node[key])) {\n      obj[key] = node[key].map(toJSON);\n    } else if (node[key] && node[key].toJSON) {\n      obj[key] = node[key].toJSON();\n    } else {\n      obj[key] = node[key];\n    }\n  });\n  return obj;\n}\n\nvar Node$1 = function Node() {};\n\nNode$1.prototype.ancestor = function ancestor(level) {\n  var node = this;\n\n  while (level--) {\n    node = node.parent;\n\n    if (!node) {\n      return null;\n    }\n  }\n\n  return node;\n};\n\nNode$1.prototype.contains = function contains(node) {\n  var this$1 = this;\n\n  while (node) {\n    if (node === this$1) {\n      return true;\n    }\n\n    node = node.parent;\n  }\n\n  return false;\n};\n\nNode$1.prototype.findLexicalBoundary = function findLexicalBoundary() {\n  return this.parent.findLexicalBoundary();\n};\n\nNode$1.prototype.findNearest = function findNearest(type) {\n  if (typeof type === 'string') {\n    type = new RegExp(\"^\" + type + \"$\");\n  }\n\n  if (type.test(this.type)) {\n    return this;\n  }\n\n  return this.parent.findNearest(type);\n};\n\nNode$1.prototype.unparenthesizedParent = function unparenthesizedParent() {\n  var node = this.parent;\n\n  while (node && node.type === 'ParenthesizedExpression') {\n    node = node.parent;\n  }\n\n  return node;\n};\n\nNode$1.prototype.unparenthesize = function unparenthesize() {\n  var node = this;\n\n  while (node.type === 'ParenthesizedExpression') {\n    node = node.expression;\n  }\n\n  return node;\n};\n\nNode$1.prototype.findScope = function findScope(functionScope) {\n  return this.parent.findScope(functionScope);\n};\n\nNode$1.prototype.getIndentation = function getIndentation() {\n  return this.parent.getIndentation();\n};\n\nNode$1.prototype.initialise = function initialise(transforms) {\n  var this$1 = this;\n\n  for (var i = 0, list = this$1.keys; i < list.length; i += 1) {\n    var key = list[i];\n    var value = this$1[key];\n\n    if (Array.isArray(value)) {\n      value.forEach(function (node) {\n        return node && node.initialise(transforms);\n      });\n    } else if (value && typeof value === 'object') {\n      value.initialise(transforms);\n    }\n  }\n};\n\nNode$1.prototype.toJSON = function toJSON$1() {\n  return toJSON(this);\n};\n\nNode$1.prototype.toString = function toString() {\n  return this.program.magicString.original.slice(this.start, this.end);\n};\n\nNode$1.prototype.transpile = function transpile(code, transforms) {\n  var this$1 = this;\n\n  for (var i = 0, list = this$1.keys; i < list.length; i += 1) {\n    var key = list[i];\n    var value = this$1[key];\n\n    if (Array.isArray(value)) {\n      value.forEach(function (node) {\n        return node && node.transpile(code, transforms);\n      });\n    } else if (value && typeof value === 'object') {\n      value.transpile(code, transforms);\n    }\n  }\n};\n\nfunction extractNames(node) {\n  var names = [];\n  extractors[node.type](names, node);\n  return names;\n}\n\nvar extractors = {\n  Identifier: function Identifier(names, node) {\n    names.push(node);\n  },\n  ObjectPattern: function ObjectPattern(names, node) {\n    for (var i = 0, list = node.properties; i < list.length; i += 1) {\n      var prop = list[i];\n      extractors[prop.type](names, prop);\n    }\n  },\n  Property: function Property(names, node) {\n    extractors[node.value.type](names, node.value);\n  },\n  ArrayPattern: function ArrayPattern(names, node) {\n    for (var i = 0, list = node.elements; i < list.length; i += 1) {\n      var element = list[i];\n\n      if (element) {\n        extractors[element.type](names, element);\n      }\n    }\n  },\n  RestElement: function RestElement(names, node) {\n    extractors[node.argument.type](names, node.argument);\n  },\n  AssignmentPattern: function AssignmentPattern(names, node) {\n    extractors[node.left.type](names, node.left);\n  }\n};\nvar reserved = Object.create(null);\n'do if in for let new try var case else enum eval null this true void with await break catch class const false super throw while yield delete export import public return static switch typeof default extends finally package private continue debugger function arguments interface protected implements instanceof'.split(' ').forEach(function (word) {\n  return reserved[word] = true;\n});\n\nfunction Scope$1(options) {\n  options = options || {};\n  this.parent = options.parent;\n  this.isBlockScope = !!options.block;\n  this.createDeclarationCallback = options.declare;\n  var scope = this;\n\n  while (scope.isBlockScope) {\n    scope = scope.parent;\n  }\n\n  this.functionScope = scope;\n  this.identifiers = [];\n  this.declarations = Object.create(null);\n  this.references = Object.create(null);\n  this.blockScopedDeclarations = this.isBlockScope ? null : Object.create(null);\n  this.aliases = Object.create(null);\n}\n\nScope$1.prototype = {\n  addDeclaration: function addDeclaration(node, kind) {\n    var this$1 = this;\n\n    for (var i = 0, list = extractNames(node); i < list.length; i += 1) {\n      var identifier = list[i];\n      var name = identifier.name;\n      var declaration = {\n        name: name,\n        node: identifier,\n        kind: kind,\n        instances: []\n      };\n      this$1.declarations[name] = declaration;\n\n      if (this$1.isBlockScope) {\n        if (!this$1.functionScope.blockScopedDeclarations[name]) {\n          this$1.functionScope.blockScopedDeclarations[name] = [];\n        }\n\n        this$1.functionScope.blockScopedDeclarations[name].push(declaration);\n      }\n    }\n  },\n  addReference: function addReference(identifier) {\n    if (this.consolidated) {\n      this.consolidateReference(identifier);\n    } else {\n      this.identifiers.push(identifier);\n    }\n  },\n  consolidate: function consolidate() {\n    var this$1 = this;\n\n    for (var i = 0; i < this.identifiers.length; i += 1) {\n      // we might push to the array during consolidation, so don't cache length\n      var identifier = this$1.identifiers[i];\n      this$1.consolidateReference(identifier);\n    }\n\n    this.consolidated = true; // TODO understand why this is necessary... seems bad\n  },\n  consolidateReference: function consolidateReference(identifier) {\n    var declaration = this.declarations[identifier.name];\n\n    if (declaration) {\n      declaration.instances.push(identifier);\n    } else {\n      this.references[identifier.name] = true;\n\n      if (this.parent) {\n        this.parent.addReference(identifier);\n      }\n    }\n  },\n  contains: function contains(name) {\n    return this.declarations[name] || (this.parent ? this.parent.contains(name) : false);\n  },\n  createIdentifier: function createIdentifier(base) {\n    if (typeof base === 'number') {\n      base = base.toString();\n    }\n\n    base = base.replace(/\\s/g, '').replace(/\\[([^\\]]+)\\]/g, '_$1').replace(/[^a-zA-Z0-9_$]/g, '_').replace(/_{2,}/, '_');\n    var name = base;\n    var counter = 1;\n\n    while (this.declarations[name] || this.references[name] || this.aliases[name] || name in reserved) {\n      name = base + \"$\" + counter++;\n    }\n\n    this.aliases[name] = true;\n    return name;\n  },\n  createDeclaration: function createDeclaration(base) {\n    var id = this.createIdentifier(base);\n    this.createDeclarationCallback(id);\n    return id;\n  },\n  findDeclaration: function findDeclaration(name) {\n    return this.declarations[name] || this.parent && this.parent.findDeclaration(name);\n  },\n  // Sometimes, block scope declarations change name during transpilation\n  resolveName: function resolveName(name) {\n    var declaration = this.findDeclaration(name);\n    return declaration ? declaration.name : name;\n  }\n};\n\nfunction locate(source, index) {\n  var lines = source.split('\\n');\n  var len = lines.length;\n  var lineStart = 0;\n  var i;\n\n  for (i = 0; i < len; i += 1) {\n    var line = lines[i];\n    var lineEnd = lineStart + line.length + 1; // +1 for newline\n\n    if (lineEnd > index) {\n      return {\n        line: i + 1,\n        column: index - lineStart,\n        char: i\n      };\n    }\n\n    lineStart = lineEnd;\n  }\n\n  throw new Error('Could not determine location of character');\n}\n\nfunction pad(num, len) {\n  var result = String(num);\n  return result + repeat(' ', len - result.length);\n}\n\nfunction repeat(str, times) {\n  var result = '';\n\n  while (times--) {\n    result += str;\n  }\n\n  return result;\n}\n\nfunction getSnippet(source, loc, length) {\n  if (length === void 0) length = 1;\n  var first = Math.max(loc.line - 5, 0);\n  var last = loc.line;\n  var numDigits = String(last).length;\n  var lines = source.split('\\n').slice(first, last);\n  var lastLine = lines[lines.length - 1];\n  var offset = lastLine.slice(0, loc.column).replace(/\\t/g, '  ').length;\n  var snippet = lines.map(function (line, i) {\n    return pad(i + first + 1, numDigits) + \" : \" + line.replace(/\\t/g, '  ');\n  }).join('\\n');\n  snippet += '\\n' + repeat(' ', numDigits + 3 + offset) + repeat('^', length);\n  return snippet;\n}\n\nvar CompileError = function (Error) {\n  function CompileError(message, node) {\n    Error.call(this, message);\n    this.name = 'CompileError';\n\n    if (!node) {\n      return;\n    }\n\n    var source = node.program.magicString.original;\n    var loc = locate(source, node.start);\n    this.message = message + \" (\" + loc.line + \":\" + loc.column + \")\";\n    this.stack = new Error().stack.replace(new RegExp(\".+new \" + this.name + \".+\\\\n\", 'm'), '');\n    this.loc = loc;\n    this.snippet = getSnippet(source, loc, node.end - node.start);\n  }\n\n  if (Error) CompileError.__proto__ = Error;\n  CompileError.prototype = Object.create(Error && Error.prototype);\n  CompileError.prototype.constructor = CompileError;\n\n  CompileError.prototype.toString = function toString() {\n    return this.name + \": \" + this.message + \"\\n\" + this.snippet;\n  };\n\n  return CompileError;\n}(Error);\n\nfunction findIndex(array, fn) {\n  for (var i = 0; i < array.length; i += 1) {\n    if (fn(array[i], i)) {\n      return i;\n    }\n  }\n\n  return -1;\n}\n\nvar handlers = {\n  Identifier: destructureIdentifier,\n  AssignmentPattern: destructureAssignmentPattern,\n  ArrayPattern: destructureArrayPattern,\n  ObjectPattern: destructureObjectPattern\n};\n\nfunction destructure(code, createIdentifier, resolveName, node, ref, inline, statementGenerators) {\n  handlers[node.type](code, createIdentifier, resolveName, node, ref, inline, statementGenerators);\n}\n\nfunction destructureIdentifier(code, createIdentifier, resolveName, node, ref, inline, statementGenerators) {\n  statementGenerators.push(function (start, prefix, suffix) {\n    code.overwrite(node.start, node.end, (inline ? prefix : prefix + \"var \") + resolveName(node) + \" = \" + ref + suffix);\n    code.move(node.start, node.end, start);\n  });\n}\n\nfunction destructureMemberExpression(code, createIdentifier, resolveName, node, ref, inline, statementGenerators) {\n  statementGenerators.push(function (start, prefix, suffix) {\n    code.prependRight(node.start, inline ? prefix : prefix + \"var \");\n    code.appendLeft(node.end, \" = \" + ref + suffix);\n    code.move(node.start, node.end, start);\n  });\n}\n\nfunction destructureAssignmentPattern(code, createIdentifier, resolveName, node, ref, inline, statementGenerators) {\n  var isIdentifier = node.left.type === 'Identifier';\n  var name = isIdentifier ? node.left.name : ref;\n\n  if (!inline) {\n    statementGenerators.push(function (start, prefix, suffix) {\n      code.prependRight(node.left.end, prefix + \"if ( \" + name + \" === void 0 ) \" + name);\n      code.move(node.left.end, node.right.end, start);\n      code.appendLeft(node.right.end, suffix);\n    });\n  }\n\n  if (!isIdentifier) {\n    destructure(code, createIdentifier, resolveName, node.left, ref, inline, statementGenerators);\n  }\n}\n\nfunction destructureArrayPattern(code, createIdentifier, resolveName, node, ref, inline, statementGenerators) {\n  var c = node.start;\n  node.elements.forEach(function (element, i) {\n    if (!element) {\n      return;\n    }\n\n    if (element.type === 'RestElement') {\n      handleProperty(code, createIdentifier, resolveName, c, element.argument, ref + \".slice(\" + i + \")\", inline, statementGenerators);\n    } else {\n      handleProperty(code, createIdentifier, resolveName, c, element, ref + \"[\" + i + \"]\", inline, statementGenerators);\n    }\n\n    c = element.end;\n  });\n  code.remove(c, node.end);\n}\n\nfunction destructureObjectPattern(code, createIdentifier, resolveName, node, ref, inline, statementGenerators) {\n  var this$1 = this;\n  var c = node.start;\n  var nonRestKeys = [];\n  node.properties.forEach(function (prop) {\n    var value;\n    var content;\n\n    if (prop.type === 'Property') {\n      var isComputedKey = prop.computed || prop.key.type !== 'Identifier';\n      var key = isComputedKey ? code.slice(prop.key.start, prop.key.end) : prop.key.name;\n      value = isComputedKey ? ref + \"[\" + key + \"]\" : ref + \".\" + key;\n      content = prop.value;\n      nonRestKeys.push(isComputedKey ? key : '\"' + key + '\"');\n    } else if (prop.type === 'RestElement') {\n      content = prop.argument;\n      value = createIdentifier('rest');\n      statementGenerators.push(function (start, prefix, suffix) {\n        var helper = prop.program.getObjectWithoutPropertiesHelper(code);\n        code.overwrite(prop.start, c = prop.argument.start, (inline ? prefix : prefix + \"var \") + value + \" = \" + helper + \"( \" + ref + \", [\" + nonRestKeys.join(', ') + \"] )\" + suffix);\n        code.move(prop.start, c, start);\n      });\n    } else {\n      throw new CompileError(this$1, \"Unexpected node of type \" + prop.type + \" in object pattern\");\n    }\n\n    handleProperty(code, createIdentifier, resolveName, c, content, value, inline, statementGenerators);\n    c = prop.end;\n  });\n  code.remove(c, node.end);\n}\n\nfunction handleProperty(code, createIdentifier, resolveName, c, node, value, inline, statementGenerators) {\n  switch (node.type) {\n    case 'Identifier':\n      {\n        code.remove(c, node.start);\n        destructureIdentifier(code, createIdentifier, resolveName, node, value, inline, statementGenerators);\n        break;\n      }\n\n    case 'MemberExpression':\n      code.remove(c, node.start);\n      destructureMemberExpression(code, createIdentifier, resolveName, node, value, true, statementGenerators);\n      break;\n\n    case 'AssignmentPattern':\n      {\n        var name;\n        var isIdentifier = node.left.type === 'Identifier';\n\n        if (isIdentifier) {\n          name = resolveName(node.left);\n        } else {\n          name = createIdentifier(value);\n        }\n\n        statementGenerators.push(function (start, prefix, suffix) {\n          if (inline) {\n            code.prependRight(node.right.start, name + \" = \" + value + \", \" + name + \" = \" + name + \" === void 0 ? \");\n            code.appendLeft(node.right.end, \" : \" + name + suffix);\n          } else {\n            code.prependRight(node.right.start, prefix + \"var \" + name + \" = \" + value + \"; if ( \" + name + \" === void 0 ) \" + name + \" = \");\n            code.appendLeft(node.right.end, suffix);\n          }\n\n          code.move(node.right.start, node.right.end, start);\n        });\n\n        if (isIdentifier) {\n          code.remove(c, node.right.start);\n        } else {\n          code.remove(c, node.left.start);\n          code.remove(node.left.end, node.right.start);\n          handleProperty(code, createIdentifier, resolveName, c, node.left, name, inline, statementGenerators);\n        }\n\n        break;\n      }\n\n    case 'ObjectPattern':\n      {\n        code.remove(c, c = node.start);\n        var ref = value;\n\n        if (node.properties.length > 1) {\n          ref = createIdentifier(value);\n          statementGenerators.push(function (start, prefix, suffix) {\n            // this feels a tiny bit hacky, but we can't do a\n            // straightforward appendLeft and keep correct order...\n            code.prependRight(node.start, (inline ? '' : prefix + \"var \") + ref + \" = \");\n            code.overwrite(node.start, c = node.start + 1, value);\n            code.appendLeft(c, suffix);\n            code.overwrite(node.start, c = node.start + 1, (inline ? '' : prefix + \"var \") + ref + \" = \" + value + suffix);\n            code.move(node.start, c, start);\n          });\n        }\n\n        destructureObjectPattern(code, createIdentifier, resolveName, node, ref, inline, statementGenerators);\n        break;\n      }\n\n    case 'ArrayPattern':\n      {\n        code.remove(c, c = node.start);\n\n        if (node.elements.filter(Boolean).length > 1) {\n          var ref$1 = createIdentifier(value);\n          statementGenerators.push(function (start, prefix, suffix) {\n            code.prependRight(node.start, (inline ? '' : prefix + \"var \") + ref$1 + \" = \");\n            code.overwrite(node.start, c = node.start + 1, value, {\n              contentOnly: true\n            });\n            code.appendLeft(c, suffix);\n            code.move(node.start, c, start);\n          });\n          node.elements.forEach(function (element, i) {\n            if (!element) {\n              return;\n            }\n\n            if (element.type === 'RestElement') {\n              handleProperty(code, createIdentifier, resolveName, c, element.argument, ref$1 + \".slice(\" + i + \")\", inline, statementGenerators);\n            } else {\n              handleProperty(code, createIdentifier, resolveName, c, element, ref$1 + \"[\" + i + \"]\", inline, statementGenerators);\n            }\n\n            c = element.end;\n          });\n        } else {\n          var index = findIndex(node.elements, Boolean);\n          var element = node.elements[index];\n\n          if (element.type === 'RestElement') {\n            handleProperty(code, createIdentifier, resolveName, c, element.argument, value + \".slice(\" + index + \")\", inline, statementGenerators);\n          } else {\n            handleProperty(code, createIdentifier, resolveName, c, element, value + \"[\" + index + \"]\", inline, statementGenerators);\n          }\n\n          c = element.end;\n        }\n\n        code.remove(c, node.end);\n        break;\n      }\n\n    default:\n      {\n        throw new Error(\"Unexpected node type in destructuring (\" + node.type + \")\");\n      }\n  }\n}\n\nfunction isUseStrict(node) {\n  if (!node) {\n    return false;\n  }\n\n  if (node.type !== 'ExpressionStatement') {\n    return false;\n  }\n\n  if (node.expression.type !== 'Literal') {\n    return false;\n  }\n\n  return node.expression.value === 'use strict';\n}\n\nvar BlockStatement = function (Node) {\n  function BlockStatement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) BlockStatement.__proto__ = Node;\n  BlockStatement.prototype = Object.create(Node && Node.prototype);\n  BlockStatement.prototype.constructor = BlockStatement;\n\n  BlockStatement.prototype.createScope = function createScope() {\n    var this$1 = this;\n    this.parentIsFunction = /Function/.test(this.parent.type);\n    this.isFunctionBlock = this.parentIsFunction || this.parent.type === 'Root';\n    this.scope = new Scope$1({\n      block: !this.isFunctionBlock,\n      parent: this.parent.findScope(false),\n      declare: function declare(id) {\n        return this$1.createdDeclarations.push(id);\n      }\n    });\n\n    if (this.parentIsFunction) {\n      this.parent.params.forEach(function (node) {\n        this$1.scope.addDeclaration(node, 'param');\n      });\n    }\n  };\n\n  BlockStatement.prototype.initialise = function initialise(transforms) {\n    this.thisAlias = null;\n    this.argumentsAlias = null;\n    this.defaultParameters = [];\n    this.createdDeclarations = []; // normally the scope gets created here, during initialisation,\n    // but in some cases (e.g. `for` statements), we need to create\n    // the scope early, as it pertains to both the init block and\n    // the body of the statement\n\n    if (!this.scope) {\n      this.createScope();\n    }\n\n    this.body.forEach(function (node) {\n      return node.initialise(transforms);\n    });\n    this.scope.consolidate();\n  };\n\n  BlockStatement.prototype.findLexicalBoundary = function findLexicalBoundary() {\n    if (this.type === 'Program') {\n      return this;\n    }\n\n    if (/^Function/.test(this.parent.type)) {\n      return this;\n    }\n\n    return this.parent.findLexicalBoundary();\n  };\n\n  BlockStatement.prototype.findScope = function findScope(functionScope) {\n    if (functionScope && !this.isFunctionBlock) {\n      return this.parent.findScope(functionScope);\n    }\n\n    return this.scope;\n  };\n\n  BlockStatement.prototype.getArgumentsAlias = function getArgumentsAlias() {\n    if (!this.argumentsAlias) {\n      this.argumentsAlias = this.scope.createIdentifier('arguments');\n    }\n\n    return this.argumentsAlias;\n  };\n\n  BlockStatement.prototype.getArgumentsArrayAlias = function getArgumentsArrayAlias() {\n    if (!this.argumentsArrayAlias) {\n      this.argumentsArrayAlias = this.scope.createIdentifier('argsArray');\n    }\n\n    return this.argumentsArrayAlias;\n  };\n\n  BlockStatement.prototype.getThisAlias = function getThisAlias() {\n    if (!this.thisAlias) {\n      this.thisAlias = this.scope.createIdentifier('this');\n    }\n\n    return this.thisAlias;\n  };\n\n  BlockStatement.prototype.getIndentation = function getIndentation() {\n    var this$1 = this;\n\n    if (this.indentation === undefined) {\n      var source = this.program.magicString.original;\n      var useOuter = this.synthetic || !this.body.length;\n      var c = useOuter ? this.start : this.body[0].start;\n\n      while (c && source[c] !== '\\n') {\n        c -= 1;\n      }\n\n      this.indentation = ''; // eslint-disable-next-line no-constant-condition\n\n      while (true) {\n        c += 1;\n        var char = source[c];\n\n        if (char !== ' ' && char !== '\\t') {\n          break;\n        }\n\n        this$1.indentation += char;\n      }\n\n      var indentString = this.program.magicString.getIndentString(); // account for dedented class constructors\n\n      var parent = this.parent;\n\n      while (parent) {\n        if (parent.kind === 'constructor' && !parent.parent.parent.superClass) {\n          this$1.indentation = this$1.indentation.replace(indentString, '');\n        }\n\n        parent = parent.parent;\n      }\n\n      if (useOuter) {\n        this.indentation += indentString;\n      }\n    }\n\n    return this.indentation;\n  };\n\n  BlockStatement.prototype.transpile = function transpile(code, transforms) {\n    var this$1 = this;\n    var indentation = this.getIndentation();\n    var introStatementGenerators = [];\n\n    if (this.argumentsAlias) {\n      introStatementGenerators.push(function (start, prefix, suffix) {\n        var assignment = prefix + \"var \" + this$1.argumentsAlias + \" = arguments\" + suffix;\n        code.appendLeft(start, assignment);\n      });\n    }\n\n    if (this.thisAlias) {\n      introStatementGenerators.push(function (start, prefix, suffix) {\n        var assignment = prefix + \"var \" + this$1.thisAlias + \" = this\" + suffix;\n        code.appendLeft(start, assignment);\n      });\n    }\n\n    if (this.argumentsArrayAlias) {\n      introStatementGenerators.push(function (start, prefix, suffix) {\n        var i = this$1.scope.createIdentifier('i');\n        var assignment = prefix + \"var \" + i + \" = arguments.length, \" + this$1.argumentsArrayAlias + \" = Array(\" + i + \");\\n\" + indentation + \"while ( \" + i + \"-- ) \" + this$1.argumentsArrayAlias + \"[\" + i + \"] = arguments[\" + i + \"]\" + suffix;\n        code.appendLeft(start, assignment);\n      });\n    }\n\n    if (/Function/.test(this.parent.type)) {\n      this.transpileParameters(this.parent.params, code, transforms, indentation, introStatementGenerators);\n    } else if ('CatchClause' === this.parent.type) {\n      this.transpileParameters([this.parent.param], code, transforms, indentation, introStatementGenerators);\n    }\n\n    if (transforms.letConst && this.isFunctionBlock) {\n      this.transpileBlockScopedIdentifiers(code);\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (this.createdDeclarations.length) {\n      introStatementGenerators.push(function (start, prefix, suffix) {\n        var assignment = prefix + \"var \" + this$1.createdDeclarations.join(', ') + suffix;\n        code.appendLeft(start, assignment);\n      });\n    }\n\n    if (this.synthetic) {\n      if (this.parent.type === 'ArrowFunctionExpression') {\n        var expr = this.body[0];\n\n        if (introStatementGenerators.length) {\n          code.appendLeft(this.start, \"{\").prependRight(this.end, this.parent.getIndentation() + \"}\");\n          code.prependRight(expr.start, \"\\n\" + indentation + \"return \");\n          code.appendLeft(expr.end, \";\\n\");\n        } else if (transforms.arrow) {\n          code.prependRight(expr.start, \"{ return \");\n          code.appendLeft(expr.end, \"; }\");\n        }\n      } else if (introStatementGenerators.length) {\n        code.prependRight(this.start, \"{\").appendLeft(this.end, \"}\");\n      }\n    }\n\n    var start;\n\n    if (isUseStrict(this.body[0])) {\n      start = this.body[0].end;\n    } else if (this.synthetic || this.parent.type === 'Root') {\n      start = this.start;\n    } else {\n      start = this.start + 1;\n    }\n\n    var prefix = \"\\n\" + indentation;\n    var suffix = ';';\n    introStatementGenerators.forEach(function (fn, i) {\n      if (i === introStatementGenerators.length - 1) {\n        suffix = \";\\n\";\n      }\n\n      fn(start, prefix, suffix);\n    });\n  };\n\n  BlockStatement.prototype.transpileParameters = function transpileParameters(params, code, transforms, indentation, introStatementGenerators) {\n    var this$1 = this;\n    params.forEach(function (param) {\n      if (param.type === 'AssignmentPattern' && param.left.type === 'Identifier') {\n        if (transforms.defaultParameter) {\n          introStatementGenerators.push(function (start, prefix, suffix) {\n            var lhs = prefix + \"if ( \" + param.left.name + \" === void 0 ) \" + param.left.name;\n            code.prependRight(param.left.end, lhs).move(param.left.end, param.right.end, start).appendLeft(param.right.end, suffix);\n          });\n        }\n      } else if (param.type === 'RestElement') {\n        if (transforms.spreadRest) {\n          introStatementGenerators.push(function (start, prefix, suffix) {\n            var penultimateParam = params[params.length - 2];\n\n            if (penultimateParam) {\n              code.remove(penultimateParam ? penultimateParam.end : param.start, param.end);\n            } else {\n              var start$1 = param.start,\n                  end = param.end; // TODO https://gitlab.com/Rich-Harris/buble/issues/8\n\n              while (/\\s/.test(code.original[start$1 - 1])) {\n                start$1 -= 1;\n              }\n\n              while (/\\s/.test(code.original[end])) {\n                end += 1;\n              }\n\n              code.remove(start$1, end);\n            }\n\n            var name = param.argument.name;\n            var len = this$1.scope.createIdentifier('len');\n            var count = params.length - 1;\n\n            if (count) {\n              code.prependRight(start, prefix + \"var \" + name + \" = [], \" + len + \" = arguments.length - \" + count + \";\\n\" + indentation + \"while ( \" + len + \"-- > 0 ) \" + name + \"[ \" + len + \" ] = arguments[ \" + len + \" + \" + count + \" ]\" + suffix);\n            } else {\n              code.prependRight(start, prefix + \"var \" + name + \" = [], \" + len + \" = arguments.length;\\n\" + indentation + \"while ( \" + len + \"-- ) \" + name + \"[ \" + len + \" ] = arguments[ \" + len + \" ]\" + suffix);\n            }\n          });\n        }\n      } else if (param.type !== 'Identifier') {\n        if (transforms.parameterDestructuring) {\n          var ref = this$1.scope.createIdentifier('ref');\n          destructure(code, function (id) {\n            return this$1.scope.createIdentifier(id);\n          }, function (ref) {\n            var name = ref.name;\n            return this$1.scope.resolveName(name);\n          }, param, ref, false, introStatementGenerators);\n          code.prependRight(param.start, ref);\n        }\n      }\n    });\n  };\n\n  BlockStatement.prototype.transpileBlockScopedIdentifiers = function transpileBlockScopedIdentifiers(code) {\n    var this$1 = this;\n    Object.keys(this.scope.blockScopedDeclarations).forEach(function (name) {\n      var declarations = this$1.scope.blockScopedDeclarations[name];\n\n      for (var i$2 = 0, list$2 = declarations; i$2 < list$2.length; i$2 += 1) {\n        var declaration = list$2[i$2];\n        var cont = false; // TODO implement proper continue...\n\n        if (declaration.kind === 'for.let') {\n          // special case\n          var forStatement = declaration.node.findNearest('ForStatement');\n\n          if (forStatement.shouldRewriteAsFunction) {\n            var outerAlias = this$1.scope.createIdentifier(name);\n            var innerAlias = forStatement.reassigned[name] ? this$1.scope.createIdentifier(name) : name;\n            declaration.name = outerAlias;\n            code.overwrite(declaration.node.start, declaration.node.end, outerAlias, {\n              storeName: true\n            });\n            forStatement.aliases[name] = {\n              outer: outerAlias,\n              inner: innerAlias\n            };\n\n            for (var i = 0, list = declaration.instances; i < list.length; i += 1) {\n              var identifier = list[i];\n              var alias = forStatement.body.contains(identifier) ? innerAlias : outerAlias;\n\n              if (name !== alias) {\n                code.overwrite(identifier.start, identifier.end, alias, {\n                  storeName: true\n                });\n              }\n            }\n\n            cont = true;\n          }\n        }\n\n        if (!cont) {\n          var alias$1 = this$1.scope.createIdentifier(name);\n\n          if (name !== alias$1) {\n            declaration.name = alias$1;\n            code.overwrite(declaration.node.start, declaration.node.end, alias$1, {\n              storeName: true\n            });\n\n            for (var i$1 = 0, list$1 = declaration.instances; i$1 < list$1.length; i$1 += 1) {\n              var identifier$1 = list$1[i$1];\n              identifier$1.rewritten = true;\n              code.overwrite(identifier$1.start, identifier$1.end, alias$1, {\n                storeName: true\n              });\n            }\n          }\n        }\n      }\n    });\n  };\n\n  return BlockStatement;\n}(Node$1);\n\nfunction isArguments(node) {\n  return node.type === 'Identifier' && node.name === 'arguments';\n}\n\nfunction spread(code, elements, start, argumentsArrayAlias, isNew) {\n  var i = elements.length;\n  var firstSpreadIndex = -1;\n\n  while (i--) {\n    var element$1 = elements[i];\n\n    if (element$1 && element$1.type === 'SpreadElement') {\n      if (isArguments(element$1.argument)) {\n        code.overwrite(element$1.argument.start, element$1.argument.end, argumentsArrayAlias);\n      }\n\n      firstSpreadIndex = i;\n    }\n  }\n\n  if (firstSpreadIndex === -1) {\n    return false;\n  } // false indicates no spread elements\n\n\n  if (isNew) {\n    for (i = 0; i < elements.length; i += 1) {\n      var element$2 = elements[i];\n\n      if (element$2.type === 'SpreadElement') {\n        code.remove(element$2.start, element$2.argument.start);\n      } else {\n        code.prependRight(element$2.start, '[');\n        code.prependRight(element$2.end, ']');\n      }\n    }\n\n    return true; // true indicates some spread elements\n  }\n\n  var element = elements[firstSpreadIndex];\n  var previousElement = elements[firstSpreadIndex - 1];\n\n  if (!previousElement) {\n    code.remove(start, element.start);\n    code.overwrite(element.end, elements[1].start, '.concat( ');\n  } else {\n    code.overwrite(previousElement.end, element.start, ' ].concat( ');\n  }\n\n  for (i = firstSpreadIndex; i < elements.length; i += 1) {\n    element = elements[i];\n\n    if (element) {\n      if (element.type === 'SpreadElement') {\n        code.remove(element.start, element.argument.start);\n      } else {\n        code.appendLeft(element.start, '[');\n        code.appendLeft(element.end, ']');\n      }\n    }\n  }\n\n  return true; // true indicates some spread elements\n}\n\nvar ArrayExpression = function (Node) {\n  function ArrayExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ArrayExpression.__proto__ = Node;\n  ArrayExpression.prototype = Object.create(Node && Node.prototype);\n  ArrayExpression.prototype.constructor = ArrayExpression;\n\n  ArrayExpression.prototype.initialise = function initialise(transforms) {\n    var this$1 = this;\n\n    if (transforms.spreadRest && this.elements.length) {\n      var lexicalBoundary = this.findLexicalBoundary();\n      var i = this.elements.length;\n\n      while (i--) {\n        var element = this$1.elements[i];\n\n        if (element && element.type === 'SpreadElement' && isArguments(element.argument)) {\n          this$1.argumentsArrayAlias = lexicalBoundary.getArgumentsArrayAlias();\n        }\n      }\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  ArrayExpression.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (transforms.spreadRest) {\n      // erase trailing comma after last array element if not an array hole\n      if (this.elements.length) {\n        var lastElement = this.elements[this.elements.length - 1];\n\n        if (lastElement && /\\s*,/.test(code.original.slice(lastElement.end, this.end))) {\n          code.overwrite(lastElement.end, this.end - 1, ' ');\n        }\n      }\n\n      if (this.elements.length === 1) {\n        var element = this.elements[0];\n\n        if (element && element.type === 'SpreadElement') {\n          // special case – [ ...arguments ]\n          if (isArguments(element.argument)) {\n            code.overwrite(this.start, this.end, \"[].concat( \" + this.argumentsArrayAlias + \" )\"); // TODO if this is the only use of argsArray, don't bother concating\n          } else {\n            code.overwrite(this.start, element.argument.start, '[].concat( ');\n            code.overwrite(element.end, this.end, ' )');\n          }\n        }\n      } else {\n        var hasSpreadElements = spread(code, this.elements, this.start, this.argumentsArrayAlias);\n\n        if (hasSpreadElements) {\n          code.overwrite(this.end - 1, this.end, ')');\n        }\n      }\n    }\n  };\n\n  return ArrayExpression;\n}(Node$1);\n\nfunction removeTrailingComma(code, c) {\n  while (code.original[c] !== ')') {\n    if (code.original[c] === ',') {\n      code.remove(c, c + 1);\n      return;\n    }\n\n    if (code.original[c] === '/') {\n      c = code.original.indexOf(code.original[c + 1] === '/' ? '\\n' : '*/', c) + 1;\n    }\n\n    c += 1;\n  }\n}\n\nvar ArrowFunctionExpression = function (Node) {\n  function ArrowFunctionExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ArrowFunctionExpression.__proto__ = Node;\n  ArrowFunctionExpression.prototype = Object.create(Node && Node.prototype);\n  ArrowFunctionExpression.prototype.constructor = ArrowFunctionExpression;\n\n  ArrowFunctionExpression.prototype.initialise = function initialise(transforms) {\n    this.body.createScope();\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  ArrowFunctionExpression.prototype.transpile = function transpile(code, transforms) {\n    var naked = this.params.length === 1 && this.start === this.params[0].start;\n\n    if (transforms.arrow || this.needsArguments(transforms)) {\n      // remove arrow\n      var charIndex = this.body.start;\n\n      while (code.original[charIndex] !== '=') {\n        charIndex -= 1;\n      }\n\n      code.remove(charIndex, this.body.start);\n      Node.prototype.transpile.call(this, code, transforms); // wrap naked parameter\n\n      if (naked) {\n        code.prependRight(this.params[0].start, '(');\n        code.appendLeft(this.params[0].end, ')');\n      } // add function\n\n\n      if (this.parent && this.parent.type === 'ExpressionStatement') {\n        // standalone expression statement\n        code.prependRight(this.start, '!function');\n      } else {\n        code.prependRight(this.start, 'function ');\n      }\n    } else {\n      Node.prototype.transpile.call(this, code, transforms);\n    }\n\n    if (transforms.trailingFunctionCommas && this.params.length && !naked) {\n      removeTrailingComma(code, this.params[this.params.length - 1].end);\n    }\n  }; // Returns whether any transforms that will happen use `arguments`\n\n\n  ArrowFunctionExpression.prototype.needsArguments = function needsArguments(transforms) {\n    return transforms.spreadRest && this.params.filter(function (param) {\n      return param.type === 'RestElement';\n    }).length > 0;\n  };\n\n  return ArrowFunctionExpression;\n}(Node$1);\n\nfunction checkConst(identifier, scope) {\n  var declaration = scope.findDeclaration(identifier.name);\n\n  if (declaration && declaration.kind === 'const') {\n    throw new CompileError(identifier.name + \" is read-only\", identifier);\n  }\n}\n\nvar AssignmentExpression = function (Node) {\n  function AssignmentExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) AssignmentExpression.__proto__ = Node;\n  AssignmentExpression.prototype = Object.create(Node && Node.prototype);\n  AssignmentExpression.prototype.constructor = AssignmentExpression;\n\n  AssignmentExpression.prototype.initialise = function initialise(transforms) {\n    if (this.left.type === 'Identifier') {\n      var declaration = this.findScope(false).findDeclaration(this.left.name); // special case – https://gitlab.com/Rich-Harris/buble/issues/11\n\n      var statement = declaration && declaration.node.ancestor(3);\n\n      if (statement && statement.type === 'ForStatement' && statement.body.contains(this)) {\n        statement.reassigned[this.left.name] = true;\n      }\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  AssignmentExpression.prototype.transpile = function transpile(code, transforms) {\n    if (this.left.type === 'Identifier') {\n      // Do this check after everything has been initialized to find\n      // shadowing declarations after this expression\n      checkConst(this.left, this.findScope(false));\n    }\n\n    if (this.operator === '**=' && transforms.exponentiation) {\n      this.transpileExponentiation(code, transforms);\n    } else if (/Pattern/.test(this.left.type) && transforms.destructuring) {\n      this.transpileDestructuring(code);\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  AssignmentExpression.prototype.transpileDestructuring = function transpileDestructuring(code) {\n    var this$1 = this;\n    var writeScope = this.findScope(true);\n    var lookupScope = this.findScope(false);\n    var assign = writeScope.createDeclaration('assign');\n    code.appendRight(this.left.end, \"(\" + assign);\n    code.appendLeft(this.right.end, ', ');\n    var statementGenerators = [];\n    destructure(code, function (id) {\n      return writeScope.createDeclaration(id);\n    }, function (node) {\n      var name = lookupScope.resolveName(node.name);\n      checkConst(node, lookupScope);\n      return name;\n    }, this.left, assign, true, statementGenerators);\n    var suffix = ', ';\n    statementGenerators.forEach(function (fn, j) {\n      if (j === statementGenerators.length - 1) {\n        suffix = '';\n      }\n\n      fn(this$1.end, '', suffix);\n    });\n\n    if (this.unparenthesizedParent().type === 'ExpressionStatement') {\n      // no rvalue needed for expression statement\n      code.prependRight(this.end, \")\");\n    } else {\n      // destructuring is part of an expression - need an rvalue\n      code.appendRight(this.end, \", \" + assign + \")\");\n    }\n  };\n\n  AssignmentExpression.prototype.transpileExponentiation = function transpileExponentiation(code) {\n    var scope = this.findScope(false); // first, the easy part – `**=` -> `=`\n\n    var charIndex = this.left.end;\n\n    while (code.original[charIndex] !== '*') {\n      charIndex += 1;\n    }\n\n    code.remove(charIndex, charIndex + 2); // how we do the next part depends on a number of factors – whether\n    // this is a top-level statement, and whether we're updating a\n    // simple or complex reference\n\n    var base;\n    var left = this.left.unparenthesize();\n\n    if (left.type === 'Identifier') {\n      base = scope.resolveName(left.name);\n    } else if (left.type === 'MemberExpression') {\n      var object;\n      var needsObjectVar = false;\n      var property;\n      var needsPropertyVar = false;\n      var statement = this.findNearest(/(?:Statement|Declaration)$/);\n      var i0 = statement.getIndentation();\n\n      if (left.property.type === 'Identifier') {\n        property = left.computed ? scope.resolveName(left.property.name) : left.property.name;\n      } else {\n        property = scope.createDeclaration('property');\n        needsPropertyVar = true;\n      }\n\n      if (left.object.type === 'Identifier') {\n        object = scope.resolveName(left.object.name);\n      } else {\n        object = scope.createDeclaration('object');\n        needsObjectVar = true;\n      }\n\n      if (left.start === statement.start) {\n        if (needsObjectVar && needsPropertyVar) {\n          code.prependRight(statement.start, object + \" = \");\n          code.overwrite(left.object.end, left.property.start, \";\\n\" + i0 + property + \" = \");\n          code.overwrite(left.property.end, left.end, \";\\n\" + i0 + object + \"[\" + property + \"]\");\n        } else if (needsObjectVar) {\n          code.prependRight(statement.start, object + \" = \");\n          code.appendLeft(left.object.end, \";\\n\" + i0);\n          code.appendLeft(left.object.end, object);\n        } else if (needsPropertyVar) {\n          code.prependRight(left.property.start, property + \" = \");\n          code.appendLeft(left.property.end, \";\\n\" + i0);\n          code.move(left.property.start, left.property.end, this.start);\n          code.appendLeft(left.object.end, \"[\" + property + \"]\");\n          code.remove(left.object.end, left.property.start);\n          code.remove(left.property.end, left.end);\n        }\n      } else {\n        if (needsObjectVar && needsPropertyVar) {\n          code.prependRight(left.start, \"( \" + object + \" = \");\n          code.overwrite(left.object.end, left.property.start, \", \" + property + \" = \");\n          code.overwrite(left.property.end, left.end, \", \" + object + \"[\" + property + \"]\");\n        } else if (needsObjectVar) {\n          code.prependRight(left.start, \"( \" + object + \" = \");\n          code.appendLeft(left.object.end, \", \" + object);\n        } else if (needsPropertyVar) {\n          code.prependRight(left.property.start, \"( \" + property + \" = \");\n          code.appendLeft(left.property.end, \", \");\n          code.move(left.property.start, left.property.end, left.start);\n          code.overwrite(left.object.end, left.property.start, \"[\" + property + \"]\");\n          code.remove(left.property.end, left.end);\n        }\n\n        if (needsPropertyVar) {\n          code.appendLeft(this.end, \" )\");\n        }\n      }\n\n      base = object + (left.computed || needsPropertyVar ? \"[\" + property + \"]\" : \".\" + property);\n    }\n\n    code.prependRight(this.right.start, \"Math.pow( \" + base + \", \");\n    code.appendLeft(this.right.end, \" )\");\n  };\n\n  return AssignmentExpression;\n}(Node$1);\n\nvar BinaryExpression = function (Node) {\n  function BinaryExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) BinaryExpression.__proto__ = Node;\n  BinaryExpression.prototype = Object.create(Node && Node.prototype);\n  BinaryExpression.prototype.constructor = BinaryExpression;\n\n  BinaryExpression.prototype.transpile = function transpile(code, transforms) {\n    if (this.operator === '**' && transforms.exponentiation) {\n      code.prependRight(this.start, \"Math.pow( \");\n      code.overwrite(this.left.end, this.right.start, \", \");\n      code.appendLeft(this.end, \" )\");\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return BinaryExpression;\n}(Node$1);\n\nvar loopStatement = /(?:For(?:In|Of)?|While)Statement/;\n\nvar BreakStatement = function (Node) {\n  function BreakStatement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) BreakStatement.__proto__ = Node;\n  BreakStatement.prototype = Object.create(Node && Node.prototype);\n  BreakStatement.prototype.constructor = BreakStatement;\n\n  BreakStatement.prototype.initialise = function initialise() {\n    var loop = this.findNearest(loopStatement);\n    var switchCase = this.findNearest('SwitchCase');\n\n    if (loop && (!switchCase || loop.depth > switchCase.depth)) {\n      loop.canBreak = true;\n      this.loop = loop;\n    }\n  };\n\n  BreakStatement.prototype.transpile = function transpile(code) {\n    if (this.loop && this.loop.shouldRewriteAsFunction) {\n      if (this.label) {\n        throw new CompileError('Labels are not currently supported in a loop with locally-scoped variables', this);\n      }\n\n      code.overwrite(this.start, this.start + 5, \"return 'break'\");\n    }\n  };\n\n  return BreakStatement;\n}(Node$1);\n\nvar CallExpression = function (Node) {\n  function CallExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) CallExpression.__proto__ = Node;\n  CallExpression.prototype = Object.create(Node && Node.prototype);\n  CallExpression.prototype.constructor = CallExpression;\n\n  CallExpression.prototype.initialise = function initialise(transforms) {\n    var this$1 = this;\n\n    if (transforms.spreadRest && this.arguments.length > 1) {\n      var lexicalBoundary = this.findLexicalBoundary();\n      var i = this.arguments.length;\n\n      while (i--) {\n        var arg = this$1.arguments[i];\n\n        if (arg.type === 'SpreadElement' && isArguments(arg.argument)) {\n          this$1.argumentsArrayAlias = lexicalBoundary.getArgumentsArrayAlias();\n        }\n      }\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  CallExpression.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.spreadRest && this.arguments.length) {\n      var hasSpreadElements = false;\n      var context;\n      var firstArgument = this.arguments[0];\n\n      if (this.arguments.length === 1) {\n        if (firstArgument.type === 'SpreadElement') {\n          code.remove(firstArgument.start, firstArgument.argument.start);\n          hasSpreadElements = true;\n        }\n      } else {\n        hasSpreadElements = spread(code, this.arguments, firstArgument.start, this.argumentsArrayAlias);\n      }\n\n      if (hasSpreadElements) {\n        // we need to handle super() and super.method() differently\n        // due to its instance\n        var _super = null;\n\n        if (this.callee.type === 'Super') {\n          _super = this.callee;\n        } else if (this.callee.type === 'MemberExpression' && this.callee.object.type === 'Super') {\n          _super = this.callee.object;\n        }\n\n        if (!_super && this.callee.type === 'MemberExpression') {\n          if (this.callee.object.type === 'Identifier') {\n            context = this.callee.object.name;\n          } else {\n            context = this.findScope(true).createDeclaration('ref');\n            var callExpression = this.callee.object;\n            code.prependRight(callExpression.start, \"(\" + context + \" = \");\n            code.appendLeft(callExpression.end, \")\");\n          }\n        } else {\n          context = 'void 0';\n        }\n\n        code.appendLeft(this.callee.end, '.apply');\n\n        if (_super) {\n          _super.noCall = true; // bit hacky...\n\n          if (this.arguments.length > 1) {\n            if (firstArgument.type !== 'SpreadElement') {\n              code.prependRight(firstArgument.start, \"[ \");\n            }\n\n            code.appendLeft(this.arguments[this.arguments.length - 1].end, ' )');\n          }\n        } else if (this.arguments.length === 1) {\n          code.prependRight(firstArgument.start, context + \", \");\n        } else {\n          if (firstArgument.type === 'SpreadElement') {\n            code.appendLeft(firstArgument.start, context + \", \");\n          } else {\n            code.appendLeft(firstArgument.start, context + \", [ \");\n          }\n\n          code.appendLeft(this.arguments[this.arguments.length - 1].end, ' )');\n        }\n      }\n    }\n\n    if (transforms.trailingFunctionCommas && this.arguments.length) {\n      removeTrailingComma(code, this.arguments[this.arguments.length - 1].end);\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return CallExpression;\n}(Node$1); // TODO this code is pretty wild, tidy it up\n\n\nvar ClassBody = function (Node) {\n  function ClassBody() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ClassBody.__proto__ = Node;\n  ClassBody.prototype = Object.create(Node && Node.prototype);\n  ClassBody.prototype.constructor = ClassBody;\n\n  ClassBody.prototype.transpile = function transpile(code, transforms, inFunctionExpression, superName) {\n    var this$1 = this;\n\n    if (transforms.classes) {\n      var name = this.parent.name;\n      var indentStr = code.getIndentString();\n      var i0 = this.getIndentation() + (inFunctionExpression ? indentStr : '');\n      var i1 = i0 + indentStr;\n      var constructorIndex = findIndex(this.body, function (node) {\n        return node.kind === 'constructor';\n      });\n      var constructor = this.body[constructorIndex];\n      var introBlock = '';\n      var outroBlock = '';\n\n      if (this.body.length) {\n        code.remove(this.start, this.body[0].start);\n        code.remove(this.body[this.body.length - 1].end, this.end);\n      } else {\n        code.remove(this.start, this.end);\n      }\n\n      if (constructor) {\n        constructor.value.body.isConstructorBody = true;\n        var previousMethod = this.body[constructorIndex - 1];\n        var nextMethod = this.body[constructorIndex + 1]; // ensure constructor is first\n\n        if (constructorIndex > 0) {\n          code.remove(previousMethod.end, constructor.start);\n          code.move(constructor.start, nextMethod ? nextMethod.start : this.end - 1, this.body[0].start);\n        }\n\n        if (!inFunctionExpression) {\n          code.appendLeft(constructor.end, ';');\n        }\n      }\n\n      var namedFunctions = this.program.options.namedFunctionExpressions !== false;\n      var namedConstructor = namedFunctions || this.parent.superClass || this.parent.type !== 'ClassDeclaration';\n\n      if (this.parent.superClass) {\n        var inheritanceBlock = \"if ( \" + superName + \" ) \" + name + \".__proto__ = \" + superName + \";\\n\" + i0 + name + \".prototype = Object.create( \" + superName + \" && \" + superName + \".prototype );\\n\" + i0 + name + \".prototype.constructor = \" + name + \";\";\n\n        if (constructor) {\n          introBlock += \"\\n\\n\" + i0 + inheritanceBlock;\n        } else {\n          var fn = \"function \" + name + \" () {\" + (superName ? \"\\n\" + i1 + superName + \".apply(this, arguments);\\n\" + i0 + \"}\" : \"}\") + (inFunctionExpression ? '' : ';') + (this.body.length ? \"\\n\\n\" + i0 : '');\n          inheritanceBlock = fn + inheritanceBlock;\n          introBlock += inheritanceBlock + \"\\n\\n\" + i0;\n        }\n      } else if (!constructor) {\n        var fn$1 = 'function ' + (namedConstructor ? name + ' ' : '') + '() {}';\n\n        if (this.parent.type === 'ClassDeclaration') {\n          fn$1 += ';';\n        }\n\n        if (this.body.length) {\n          fn$1 += \"\\n\\n\" + i0;\n        }\n\n        introBlock += fn$1;\n      }\n\n      var scope = this.findScope(false);\n      var prototypeGettersAndSetters = [];\n      var staticGettersAndSetters = [];\n      var prototypeAccessors;\n      var staticAccessors;\n      this.body.forEach(function (method, i) {\n        if ((method.kind === 'get' || method.kind === 'set') && transforms.getterSetter) {\n          throw new CompileError(\"getters and setters are not supported. Use `transforms: { getterSetter: false }` to skip transformation and disable this error\", method);\n        }\n\n        if (method.kind === 'constructor') {\n          var constructorName = namedConstructor ? ' ' + name : '';\n          code.overwrite(method.key.start, method.key.end, \"function\" + constructorName);\n          return;\n        }\n\n        if (method.static) {\n          var len = code.original[method.start + 6] == ' ' ? 7 : 6;\n          code.remove(method.start, method.start + len);\n        }\n\n        var isAccessor = method.kind !== 'method';\n        var lhs;\n        var methodName = method.key.name;\n\n        if (reserved[methodName] || method.value.body.scope.references[methodName]) {\n          methodName = scope.createIdentifier(methodName);\n        } // when method name is a string or a number let's pretend it's a computed method\n\n\n        var fake_computed = false;\n\n        if (!method.computed && method.key.type === 'Literal') {\n          fake_computed = true;\n          method.computed = true;\n        }\n\n        if (isAccessor) {\n          if (method.computed) {\n            throw new Error('Computed accessor properties are not currently supported');\n          }\n\n          code.remove(method.start, method.key.start);\n\n          if (method.static) {\n            if (!~staticGettersAndSetters.indexOf(method.key.name)) {\n              staticGettersAndSetters.push(method.key.name);\n            }\n\n            if (!staticAccessors) {\n              staticAccessors = scope.createIdentifier('staticAccessors');\n            }\n\n            lhs = \"\" + staticAccessors;\n          } else {\n            if (!~prototypeGettersAndSetters.indexOf(method.key.name)) {\n              prototypeGettersAndSetters.push(method.key.name);\n            }\n\n            if (!prototypeAccessors) {\n              prototypeAccessors = scope.createIdentifier('prototypeAccessors');\n            }\n\n            lhs = \"\" + prototypeAccessors;\n          }\n        } else {\n          lhs = method.static ? \"\" + name : name + \".prototype\";\n        }\n\n        if (!method.computed) {\n          lhs += '.';\n        }\n\n        var insertNewlines = constructorIndex > 0 && i === constructorIndex + 1 || i === 0 && constructorIndex === this$1.body.length - 1;\n\n        if (insertNewlines) {\n          lhs = \"\\n\\n\" + i0 + lhs;\n        }\n\n        var c = method.key.end;\n\n        if (method.computed) {\n          if (fake_computed) {\n            code.prependRight(method.key.start, '[');\n            code.appendLeft(method.key.end, ']');\n          } else {\n            while (code.original[c] !== ']') {\n              c += 1;\n            }\n\n            c += 1;\n          }\n        }\n\n        var funcName = method.computed || isAccessor || !namedFunctions ? '' : methodName + \" \";\n        var rhs = (isAccessor ? \".\" + method.kind : '') + \" = function\" + (method.value.generator ? '* ' : ' ') + funcName;\n        code.remove(c, method.value.start);\n        code.prependRight(method.value.start, rhs);\n        code.appendLeft(method.end, ';');\n\n        if (method.value.generator) {\n          code.remove(method.start, method.key.start);\n        }\n\n        code.prependRight(method.start, lhs);\n      });\n\n      if (prototypeGettersAndSetters.length || staticGettersAndSetters.length) {\n        var intro = [];\n        var outro = [];\n\n        if (prototypeGettersAndSetters.length) {\n          intro.push(\"var \" + prototypeAccessors + \" = { \" + prototypeGettersAndSetters.map(function (name) {\n            return name + \": { configurable: true }\";\n          }).join(',') + \" };\");\n          outro.push(\"Object.defineProperties( \" + name + \".prototype, \" + prototypeAccessors + \" );\");\n        }\n\n        if (staticGettersAndSetters.length) {\n          intro.push(\"var \" + staticAccessors + \" = { \" + staticGettersAndSetters.map(function (name) {\n            return name + \": { configurable: true }\";\n          }).join(',') + \" };\");\n          outro.push(\"Object.defineProperties( \" + name + \", \" + staticAccessors + \" );\");\n        }\n\n        if (constructor) {\n          introBlock += \"\\n\\n\" + i0;\n        }\n\n        introBlock += intro.join(\"\\n\" + i0);\n\n        if (!constructor) {\n          introBlock += \"\\n\\n\" + i0;\n        }\n\n        outroBlock += \"\\n\\n\" + i0 + outro.join(\"\\n\" + i0);\n      }\n\n      if (constructor) {\n        code.appendLeft(constructor.end, introBlock);\n      } else {\n        code.prependRight(this.start, introBlock);\n      }\n\n      code.appendLeft(this.end, outroBlock);\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return ClassBody;\n}(Node$1); // TODO this function is slightly flawed – it works on the original string,\n// not its current edited state.\n// That's not a problem for the way that it's currently used, but it could\n// be in future...\n\n\nfunction deindent(node, code) {\n  var start = node.start;\n  var end = node.end;\n  var indentStr = code.getIndentString();\n  var indentStrLen = indentStr.length;\n  var indentStart = start - indentStrLen;\n\n  if (!node.program.indentExclusions[indentStart] && code.original.slice(indentStart, start) === indentStr) {\n    code.remove(indentStart, start);\n  }\n\n  var pattern = new RegExp(indentStr + '\\\\S', 'g');\n  var slice = code.original.slice(start, end);\n  var match;\n\n  while (match = pattern.exec(slice)) {\n    var removeStart = start + match.index;\n\n    if (!node.program.indentExclusions[removeStart]) {\n      code.remove(removeStart, removeStart + indentStrLen);\n    }\n  }\n}\n\nvar ClassDeclaration = function (Node) {\n  function ClassDeclaration() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ClassDeclaration.__proto__ = Node;\n  ClassDeclaration.prototype = Object.create(Node && Node.prototype);\n  ClassDeclaration.prototype.constructor = ClassDeclaration;\n\n  ClassDeclaration.prototype.initialise = function initialise(transforms) {\n    if (this.id) {\n      this.name = this.id.name;\n      this.findScope(true).addDeclaration(this.id, 'class');\n    } else {\n      this.name = this.findScope(true).createIdentifier(\"defaultExport\");\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  ClassDeclaration.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.classes) {\n      if (!this.superClass) {\n        deindent(this.body, code);\n      }\n\n      var superName = this.superClass && (this.superClass.name || 'superclass');\n      var i0 = this.getIndentation();\n      var i1 = i0 + code.getIndentString(); // if this is an export default statement, we have to move the export to\n      // after the declaration, because `export default var Foo = ...` is illegal\n\n      var isExportDefaultDeclaration = this.parent.type === 'ExportDefaultDeclaration';\n\n      if (isExportDefaultDeclaration) {\n        code.remove(this.parent.start, this.start);\n      }\n\n      var c = this.start;\n\n      if (this.id) {\n        code.overwrite(c, this.id.start, 'var ');\n        c = this.id.end;\n      } else {\n        code.prependLeft(c, \"var \" + this.name);\n      }\n\n      if (this.superClass) {\n        if (this.superClass.end === this.body.start) {\n          code.remove(c, this.superClass.start);\n          code.appendLeft(c, \" = /*@__PURE__*/(function (\" + superName + \") {\\n\" + i1);\n        } else {\n          code.overwrite(c, this.superClass.start, ' = ');\n          code.overwrite(this.superClass.end, this.body.start, \"/*@__PURE__*/(function (\" + superName + \") {\\n\" + i1);\n        }\n      } else {\n        if (c === this.body.start) {\n          code.appendLeft(c, ' = ');\n        } else {\n          code.overwrite(c, this.body.start, ' = ');\n        }\n      }\n\n      this.body.transpile(code, transforms, !!this.superClass, superName);\n      var syntheticDefaultExport = isExportDefaultDeclaration ? \"\\n\\n\" + i0 + \"export default \" + this.name + \";\" : '';\n\n      if (this.superClass) {\n        code.appendLeft(this.end, \"\\n\\n\" + i1 + \"return \" + this.name + \";\\n\" + i0 + \"}(\");\n        code.move(this.superClass.start, this.superClass.end, this.end);\n        code.prependRight(this.end, \"));\" + syntheticDefaultExport);\n      } else if (syntheticDefaultExport) {\n        code.prependRight(this.end, syntheticDefaultExport);\n      }\n    } else {\n      this.body.transpile(code, transforms, false, null);\n    }\n  };\n\n  return ClassDeclaration;\n}(Node$1);\n\nvar ClassExpression = function (Node) {\n  function ClassExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ClassExpression.__proto__ = Node;\n  ClassExpression.prototype = Object.create(Node && Node.prototype);\n  ClassExpression.prototype.constructor = ClassExpression;\n\n  ClassExpression.prototype.initialise = function initialise(transforms) {\n    this.name = (this.id ? this.id.name : this.parent.type === 'VariableDeclarator' ? this.parent.id.name : this.parent.type !== 'AssignmentExpression' ? null : this.parent.left.type === 'Identifier' ? this.parent.left.name : this.parent.left.type === 'MemberExpression' ? this.parent.left.property.name : null) || this.findScope(true).createIdentifier('anonymous');\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  ClassExpression.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.classes) {\n      var superName = this.superClass && (this.superClass.name || 'superclass');\n      var i0 = this.getIndentation();\n      var i1 = i0 + code.getIndentString();\n\n      if (this.superClass) {\n        code.remove(this.start, this.superClass.start);\n        code.remove(this.superClass.end, this.body.start);\n        code.appendRight(this.start, \"/*@__PURE__*/(function (\" + superName + \") {\\n\" + i1);\n      } else {\n        code.overwrite(this.start, this.body.start, \"/*@__PURE__*/(function () {\\n\" + i1);\n      }\n\n      this.body.transpile(code, transforms, true, superName);\n      var superClass = '';\n\n      if (this.superClass) {\n        superClass = code.slice(this.superClass.start, this.superClass.end);\n        code.remove(this.superClass.start, this.superClass.end);\n      }\n\n      code.appendLeft(this.end, \"\\n\\n\" + i1 + \"return \" + this.name + \";\\n\" + i0 + \"}(\" + superClass + \"))\");\n    } else {\n      this.body.transpile(code, transforms, false);\n    }\n  };\n\n  return ClassExpression;\n}(Node$1);\n\nvar ContinueStatement = function (Node) {\n  function ContinueStatement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ContinueStatement.__proto__ = Node;\n  ContinueStatement.prototype = Object.create(Node && Node.prototype);\n  ContinueStatement.prototype.constructor = ContinueStatement;\n\n  ContinueStatement.prototype.transpile = function transpile(code) {\n    var loop = this.findNearest(loopStatement);\n\n    if (loop.shouldRewriteAsFunction) {\n      if (this.label) {\n        throw new CompileError('Labels are not currently supported in a loop with locally-scoped variables', this);\n      }\n\n      code.overwrite(this.start, this.start + 8, 'return');\n    }\n  };\n\n  return ContinueStatement;\n}(Node$1);\n\nvar ExportDefaultDeclaration = function (Node) {\n  function ExportDefaultDeclaration() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ExportDefaultDeclaration.__proto__ = Node;\n  ExportDefaultDeclaration.prototype = Object.create(Node && Node.prototype);\n  ExportDefaultDeclaration.prototype.constructor = ExportDefaultDeclaration;\n\n  ExportDefaultDeclaration.prototype.initialise = function initialise(transforms) {\n    if (transforms.moduleExport) {\n      throw new CompileError('export is not supported', this);\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  return ExportDefaultDeclaration;\n}(Node$1);\n\nvar ExportNamedDeclaration = function (Node) {\n  function ExportNamedDeclaration() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ExportNamedDeclaration.__proto__ = Node;\n  ExportNamedDeclaration.prototype = Object.create(Node && Node.prototype);\n  ExportNamedDeclaration.prototype.constructor = ExportNamedDeclaration;\n\n  ExportNamedDeclaration.prototype.initialise = function initialise(transforms) {\n    if (transforms.moduleExport) {\n      throw new CompileError('export is not supported', this);\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  return ExportNamedDeclaration;\n}(Node$1);\n\nvar LoopStatement = function (Node) {\n  function LoopStatement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) LoopStatement.__proto__ = Node;\n  LoopStatement.prototype = Object.create(Node && Node.prototype);\n  LoopStatement.prototype.constructor = LoopStatement;\n\n  LoopStatement.prototype.findScope = function findScope(functionScope) {\n    return functionScope || !this.createdScope ? this.parent.findScope(functionScope) : this.body.scope;\n  };\n\n  LoopStatement.prototype.initialise = function initialise(transforms) {\n    var this$1 = this;\n    this.body.createScope();\n    this.createdScope = true; // this is populated as and when reassignments occur\n\n    this.reassigned = Object.create(null);\n    this.aliases = Object.create(null);\n    this.thisRefs = [];\n    Node.prototype.initialise.call(this, transforms);\n\n    if (transforms.letConst) {\n      // see if any block-scoped declarations are referenced\n      // inside function expressions\n      var names = Object.keys(this.body.scope.declarations);\n      var i = names.length;\n\n      while (i--) {\n        var name = names[i];\n        var declaration = this$1.body.scope.declarations[name];\n        var j = declaration.instances.length;\n\n        while (j--) {\n          var instance = declaration.instances[j];\n          var nearestFunctionExpression = instance.findNearest(/Function/);\n\n          if (nearestFunctionExpression && nearestFunctionExpression.depth > this$1.depth) {\n            this$1.shouldRewriteAsFunction = true;\n\n            for (var i$1 = 0, list = this$1.thisRefs; i$1 < list.length; i$1 += 1) {\n              var node = list[i$1];\n              node.alias = node.alias || node.findLexicalBoundary().getThisAlias();\n            }\n\n            break;\n          }\n        }\n\n        if (this$1.shouldRewriteAsFunction) {\n          break;\n        }\n      }\n    }\n  };\n\n  LoopStatement.prototype.transpile = function transpile(code, transforms) {\n    var needsBlock = this.type != 'ForOfStatement' && (this.body.type !== 'BlockStatement' || this.body.type === 'BlockStatement' && this.body.synthetic);\n\n    if (this.shouldRewriteAsFunction) {\n      var i0 = this.getIndentation();\n      var i1 = i0 + code.getIndentString();\n      var argString = this.args ? \" \" + this.args.join(', ') + \" \" : '';\n      var paramString = this.params ? \" \" + this.params.join(', ') + \" \" : '';\n      var functionScope = this.findScope(true);\n      var loop = functionScope.createIdentifier('loop');\n      var before = \"var \" + loop + \" = function (\" + paramString + \") \" + (this.body.synthetic ? \"{\\n\" + i0 + code.getIndentString() : '');\n      var after = (this.body.synthetic ? \"\\n\" + i0 + \"}\" : '') + \";\\n\\n\" + i0;\n      code.prependRight(this.body.start, before);\n      code.appendLeft(this.body.end, after);\n      code.move(this.start, this.body.start, this.body.end);\n\n      if (this.canBreak || this.canReturn) {\n        var returned = functionScope.createIdentifier('returned');\n        var insert = \"{\\n\" + i1 + \"var \" + returned + \" = \" + loop + \"(\" + argString + \");\\n\";\n\n        if (this.canBreak) {\n          insert += \"\\n\" + i1 + \"if ( \" + returned + \" === 'break' ) break;\";\n        }\n\n        if (this.canReturn) {\n          insert += \"\\n\" + i1 + \"if ( \" + returned + \" ) return \" + returned + \".v;\";\n        }\n\n        insert += \"\\n\" + i0 + \"}\";\n        code.prependRight(this.body.end, insert);\n      } else {\n        var callExpression = loop + \"(\" + argString + \");\";\n\n        if (this.type === 'DoWhileStatement') {\n          code.overwrite(this.start, this.body.start, \"do {\\n\" + i1 + callExpression + \"\\n\" + i0 + \"}\");\n        } else {\n          code.prependRight(this.body.end, callExpression);\n        }\n      }\n    } else if (needsBlock) {\n      code.appendLeft(this.body.start, '{ ');\n      code.prependRight(this.body.end, ' }');\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return LoopStatement;\n}(Node$1);\n\nvar ForStatement = function (LoopStatement$$1) {\n  function ForStatement() {\n    LoopStatement$$1.apply(this, arguments);\n  }\n\n  if (LoopStatement$$1) ForStatement.__proto__ = LoopStatement$$1;\n  ForStatement.prototype = Object.create(LoopStatement$$1 && LoopStatement$$1.prototype);\n  ForStatement.prototype.constructor = ForStatement;\n\n  ForStatement.prototype.findScope = function findScope(functionScope) {\n    return functionScope || !this.createdScope ? this.parent.findScope(functionScope) : this.body.scope;\n  };\n\n  ForStatement.prototype.transpile = function transpile(code, transforms) {\n    var this$1 = this;\n    var i1 = this.getIndentation() + code.getIndentString();\n\n    if (this.shouldRewriteAsFunction) {\n      // which variables are declared in the init statement?\n      var names = this.init.type === 'VariableDeclaration' ? this.init.declarations.map(function (declarator) {\n        return extractNames(declarator.id);\n      }) : [];\n      var aliases = this.aliases;\n      this.args = names.map(function (name) {\n        return name in this$1.aliases ? this$1.aliases[name].outer : name;\n      });\n      this.params = names.map(function (name) {\n        return name in this$1.aliases ? this$1.aliases[name].inner : name;\n      });\n      var updates = Object.keys(this.reassigned).map(function (name) {\n        return aliases[name].outer + \" = \" + aliases[name].inner + \";\";\n      });\n\n      if (updates.length) {\n        if (this.body.synthetic) {\n          code.appendLeft(this.body.body[0].end, \"; \" + updates.join(\" \"));\n        } else {\n          var lastStatement = this.body.body[this.body.body.length - 1];\n          code.appendLeft(lastStatement.end, \"\\n\\n\" + i1 + updates.join(\"\\n\" + i1));\n        }\n      }\n    }\n\n    LoopStatement$$1.prototype.transpile.call(this, code, transforms);\n  };\n\n  return ForStatement;\n}(LoopStatement);\n\nvar ForInStatement = function (LoopStatement$$1) {\n  function ForInStatement() {\n    LoopStatement$$1.apply(this, arguments);\n  }\n\n  if (LoopStatement$$1) ForInStatement.__proto__ = LoopStatement$$1;\n  ForInStatement.prototype = Object.create(LoopStatement$$1 && LoopStatement$$1.prototype);\n  ForInStatement.prototype.constructor = ForInStatement;\n\n  ForInStatement.prototype.findScope = function findScope(functionScope) {\n    return functionScope || !this.createdScope ? this.parent.findScope(functionScope) : this.body.scope;\n  };\n\n  ForInStatement.prototype.transpile = function transpile(code, transforms) {\n    var this$1 = this;\n    var hasDeclaration = this.left.type === 'VariableDeclaration';\n\n    if (this.shouldRewriteAsFunction) {\n      // which variables are declared in the init statement?\n      var names = hasDeclaration ? this.left.declarations.map(function (declarator) {\n        return extractNames(declarator.id);\n      }) : [];\n      this.args = names.map(function (name) {\n        return name in this$1.aliases ? this$1.aliases[name].outer : name;\n      });\n      this.params = names.map(function (name) {\n        return name in this$1.aliases ? this$1.aliases[name].inner : name;\n      });\n    }\n\n    LoopStatement$$1.prototype.transpile.call(this, code, transforms);\n    var maybePattern = hasDeclaration ? this.left.declarations[0].id : this.left;\n\n    if (maybePattern.type !== 'Identifier') {\n      this.destructurePattern(code, maybePattern, hasDeclaration);\n    }\n  };\n\n  ForInStatement.prototype.destructurePattern = function destructurePattern(code, pattern, isDeclaration) {\n    var scope = this.findScope(true);\n    var i0 = this.getIndentation();\n    var i1 = i0 + code.getIndentString();\n    var ref = scope.createIdentifier('ref');\n    var bodyStart = this.body.body.length ? this.body.body[0].start : this.body.start + 1;\n    code.move(pattern.start, pattern.end, bodyStart);\n    code.prependRight(pattern.end, isDeclaration ? ref : \"var \" + ref);\n    var statementGenerators = [];\n    destructure(code, function (id) {\n      return scope.createIdentifier(id);\n    }, function (ref) {\n      var name = ref.name;\n      return scope.resolveName(name);\n    }, pattern, ref, false, statementGenerators);\n    var suffix = \";\\n\" + i1;\n    statementGenerators.forEach(function (fn, i) {\n      if (i === statementGenerators.length - 1) {\n        suffix = \";\\n\\n\" + i1;\n      }\n\n      fn(bodyStart, '', suffix);\n    });\n  };\n\n  return ForInStatement;\n}(LoopStatement);\n\nvar ForOfStatement = function (LoopStatement$$1) {\n  function ForOfStatement() {\n    LoopStatement$$1.apply(this, arguments);\n  }\n\n  if (LoopStatement$$1) ForOfStatement.__proto__ = LoopStatement$$1;\n  ForOfStatement.prototype = Object.create(LoopStatement$$1 && LoopStatement$$1.prototype);\n  ForOfStatement.prototype.constructor = ForOfStatement;\n\n  ForOfStatement.prototype.initialise = function initialise(transforms) {\n    if (transforms.forOf && !transforms.dangerousForOf) {\n      throw new CompileError(\"for...of statements are not supported. Use `transforms: { forOf: false }` to skip transformation and disable this error, or `transforms: { dangerousForOf: true }` if you know what you're doing\", this);\n    }\n\n    LoopStatement$$1.prototype.initialise.call(this, transforms);\n  };\n\n  ForOfStatement.prototype.transpile = function transpile(code, transforms) {\n    LoopStatement$$1.prototype.transpile.call(this, code, transforms);\n\n    if (!transforms.dangerousForOf) {\n      return;\n    } // edge case (#80)\n\n\n    if (!this.body.body[0]) {\n      if (this.left.type === 'VariableDeclaration' && this.left.kind === 'var') {\n        code.remove(this.start, this.left.start);\n        code.appendLeft(this.left.end, ';');\n        code.remove(this.left.end, this.end);\n      } else {\n        code.remove(this.start, this.end);\n      }\n\n      return;\n    }\n\n    var scope = this.findScope(true);\n    var i0 = this.getIndentation();\n    var i1 = i0 + code.getIndentString();\n    var key = scope.createIdentifier('i');\n    var list = scope.createIdentifier('list');\n\n    if (this.body.synthetic) {\n      code.prependRight(this.left.start, \"{\\n\" + i1);\n      code.appendLeft(this.body.body[0].end, \"\\n\" + i0 + \"}\");\n    }\n\n    var bodyStart = this.body.body[0].start;\n    code.remove(this.left.end, this.right.start);\n    code.move(this.left.start, this.left.end, bodyStart);\n    code.prependRight(this.right.start, \"var \" + key + \" = 0, \" + list + \" = \");\n    code.appendLeft(this.right.end, \"; \" + key + \" < \" + list + \".length; \" + key + \" += 1\");\n    var isDeclaration = this.left.type === 'VariableDeclaration';\n    var maybeDestructuring = isDeclaration ? this.left.declarations[0].id : this.left;\n\n    if (maybeDestructuring.type !== 'Identifier') {\n      var statementGenerators = [];\n      var ref = scope.createIdentifier('ref');\n      destructure(code, function (id) {\n        return scope.createIdentifier(id);\n      }, function (ref) {\n        var name = ref.name;\n        return scope.resolveName(name);\n      }, maybeDestructuring, ref, !isDeclaration, statementGenerators);\n      var suffix = \";\\n\" + i1;\n      statementGenerators.forEach(function (fn, i) {\n        if (i === statementGenerators.length - 1) {\n          suffix = \";\\n\\n\" + i1;\n        }\n\n        fn(bodyStart, '', suffix);\n      });\n\n      if (isDeclaration) {\n        code.appendLeft(this.left.start + this.left.kind.length + 1, ref);\n        code.appendLeft(this.left.end, \" = \" + list + \"[\" + key + \"];\\n\" + i1);\n      } else {\n        code.appendLeft(this.left.end, \"var \" + ref + \" = \" + list + \"[\" + key + \"];\\n\" + i1);\n      }\n    } else {\n      code.appendLeft(this.left.end, \" = \" + list + \"[\" + key + \"];\\n\\n\" + i1);\n    }\n  };\n\n  return ForOfStatement;\n}(LoopStatement);\n\nvar FunctionDeclaration = function (Node) {\n  function FunctionDeclaration() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) FunctionDeclaration.__proto__ = Node;\n  FunctionDeclaration.prototype = Object.create(Node && Node.prototype);\n  FunctionDeclaration.prototype.constructor = FunctionDeclaration;\n\n  FunctionDeclaration.prototype.initialise = function initialise(transforms) {\n    if (this.generator && transforms.generator) {\n      throw new CompileError('Generators are not supported', this);\n    }\n\n    this.body.createScope();\n\n    if (this.id) {\n      this.findScope(true).addDeclaration(this.id, 'function');\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  FunctionDeclaration.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (transforms.trailingFunctionCommas && this.params.length) {\n      removeTrailingComma(code, this.params[this.params.length - 1].end);\n    }\n  };\n\n  return FunctionDeclaration;\n}(Node$1);\n\nvar FunctionExpression = function (Node) {\n  function FunctionExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) FunctionExpression.__proto__ = Node;\n  FunctionExpression.prototype = Object.create(Node && Node.prototype);\n  FunctionExpression.prototype.constructor = FunctionExpression;\n\n  FunctionExpression.prototype.initialise = function initialise(transforms) {\n    var this$1 = this;\n\n    if (this.generator && transforms.generator) {\n      throw new CompileError('Generators are not supported', this);\n    }\n\n    this.body.createScope();\n\n    if (this.id) {\n      // function expression IDs belong to the child scope...\n      this.body.scope.addDeclaration(this.id, 'function');\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n    var parent = this.parent;\n    var methodName;\n\n    if (transforms.conciseMethodProperty && parent.type === 'Property' && parent.kind === 'init' && parent.method && parent.key.type === 'Identifier') {\n      // object literal concise method\n      methodName = parent.key.name;\n    } else if (transforms.classes && parent.type === 'MethodDefinition' && parent.kind === 'method' && parent.key.type === 'Identifier') {\n      // method definition in a class\n      methodName = parent.key.name;\n    } else if (this.id && this.id.type === 'Identifier') {\n      // naked function expression\n      methodName = this.id.alias || this.id.name;\n    }\n\n    if (methodName) {\n      for (var i$1 = 0, list$1 = this$1.params; i$1 < list$1.length; i$1 += 1) {\n        var param = list$1[i$1];\n\n        if (param.type === 'Identifier' && methodName === param.name) {\n          // workaround for Safari 9/WebKit bug:\n          // https://gitlab.com/Rich-Harris/buble/issues/154\n          // change parameter name when same as method name\n          var scope = this$1.body.scope;\n          var declaration = scope.declarations[methodName];\n          var alias = scope.createIdentifier(methodName);\n          param.alias = alias;\n\n          for (var i = 0, list = declaration.instances; i < list.length; i += 1) {\n            var identifier = list[i];\n            identifier.alias = alias;\n          }\n\n          break;\n        }\n      }\n    }\n  };\n\n  FunctionExpression.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (transforms.trailingFunctionCommas && this.params.length) {\n      removeTrailingComma(code, this.params[this.params.length - 1].end);\n    }\n  };\n\n  return FunctionExpression;\n}(Node$1);\n\nfunction isReference(node, parent) {\n  if (node.type === 'MemberExpression') {\n    return !node.computed && isReference(node.object, node);\n  }\n\n  if (node.type === 'Identifier') {\n    // the only time we could have an identifier node without a parent is\n    // if it's the entire body of a function without a block statement –\n    // i.e. an arrow function expression like `a => a`\n    if (!parent) {\n      return true;\n    }\n\n    if (/(Function|Class)Expression/.test(parent.type)) {\n      return false;\n    }\n\n    if (parent.type === 'VariableDeclarator') {\n      return node === parent.init;\n    } // TODO is this right?\n\n\n    if (parent.type === 'MemberExpression' || parent.type === 'MethodDefinition') {\n      return parent.computed || node === parent.object;\n    }\n\n    if (parent.type === 'ArrayPattern') {\n      return false;\n    } // disregard the `bar` in `{ bar: foo }`, but keep it in `{ [bar]: foo }`\n\n\n    if (parent.type === 'Property') {\n      if (parent.parent.type === 'ObjectPattern') {\n        return false;\n      }\n\n      return parent.computed || node === parent.value;\n    } // disregard the `bar` in `class Foo { bar () {...} }`\n\n\n    if (parent.type === 'MethodDefinition') {\n      return false;\n    } // disregard the `bar` in `export { foo as bar }`\n\n\n    if (parent.type === 'ExportSpecifier' && node !== parent.local) {\n      return false;\n    }\n\n    return true;\n  }\n}\n\nvar Identifier = function (Node) {\n  function Identifier() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) Identifier.__proto__ = Node;\n  Identifier.prototype = Object.create(Node && Node.prototype);\n  Identifier.prototype.constructor = Identifier;\n\n  Identifier.prototype.findScope = function findScope(functionScope) {\n    if (this.parent.params && ~this.parent.params.indexOf(this)) {\n      return this.parent.body.scope;\n    }\n\n    if (this.parent.type === 'FunctionExpression' && this === this.parent.id) {\n      return this.parent.body.scope;\n    }\n\n    return this.parent.findScope(functionScope);\n  };\n\n  Identifier.prototype.initialise = function initialise(transforms) {\n    if (isReference(this, this.parent)) {\n      if (transforms.arrow && this.name === 'arguments' && !this.findScope(false).contains(this.name)) {\n        var lexicalBoundary = this.findLexicalBoundary();\n        var arrowFunction = this.findNearest('ArrowFunctionExpression');\n        var loop = this.findNearest(loopStatement);\n\n        if (arrowFunction && arrowFunction.depth > lexicalBoundary.depth) {\n          this.alias = lexicalBoundary.getArgumentsAlias();\n        }\n\n        if (loop && loop.body.contains(this) && loop.depth > lexicalBoundary.depth) {\n          this.alias = lexicalBoundary.getArgumentsAlias();\n        }\n      }\n\n      this.findScope(false).addReference(this);\n    }\n  };\n\n  Identifier.prototype.transpile = function transpile(code) {\n    if (this.alias) {\n      code.overwrite(this.start, this.end, this.alias, {\n        storeName: true,\n        contentOnly: true\n      });\n    }\n  };\n\n  return Identifier;\n}(Node$1);\n\nvar IfStatement = function (Node) {\n  function IfStatement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) IfStatement.__proto__ = Node;\n  IfStatement.prototype = Object.create(Node && Node.prototype);\n  IfStatement.prototype.constructor = IfStatement;\n\n  IfStatement.prototype.initialise = function initialise(transforms) {\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  IfStatement.prototype.transpile = function transpile(code, transforms) {\n    if (this.consequent.type !== 'BlockStatement' || this.consequent.type === 'BlockStatement' && this.consequent.synthetic) {\n      code.appendLeft(this.consequent.start, '{ ');\n      code.prependRight(this.consequent.end, ' }');\n    }\n\n    if (this.alternate && this.alternate.type !== 'IfStatement' && (this.alternate.type !== 'BlockStatement' || this.alternate.type === 'BlockStatement' && this.alternate.synthetic)) {\n      code.appendLeft(this.alternate.start, '{ ');\n      code.prependRight(this.alternate.end, ' }');\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return IfStatement;\n}(Node$1);\n\nvar ImportDeclaration = function (Node) {\n  function ImportDeclaration() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ImportDeclaration.__proto__ = Node;\n  ImportDeclaration.prototype = Object.create(Node && Node.prototype);\n  ImportDeclaration.prototype.constructor = ImportDeclaration;\n\n  ImportDeclaration.prototype.initialise = function initialise(transforms) {\n    if (transforms.moduleImport) {\n      throw new CompileError('import is not supported', this);\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  return ImportDeclaration;\n}(Node$1);\n\nvar ImportDefaultSpecifier = function (Node) {\n  function ImportDefaultSpecifier() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ImportDefaultSpecifier.__proto__ = Node;\n  ImportDefaultSpecifier.prototype = Object.create(Node && Node.prototype);\n  ImportDefaultSpecifier.prototype.constructor = ImportDefaultSpecifier;\n\n  ImportDefaultSpecifier.prototype.initialise = function initialise(transforms) {\n    this.findScope(true).addDeclaration(this.local, 'import');\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  return ImportDefaultSpecifier;\n}(Node$1);\n\nvar ImportSpecifier = function (Node) {\n  function ImportSpecifier() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ImportSpecifier.__proto__ = Node;\n  ImportSpecifier.prototype = Object.create(Node && Node.prototype);\n  ImportSpecifier.prototype.constructor = ImportSpecifier;\n\n  ImportSpecifier.prototype.initialise = function initialise(transforms) {\n    this.findScope(true).addDeclaration(this.local, 'import');\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  return ImportSpecifier;\n}(Node$1);\n\nvar hasDashes = function hasDashes(val) {\n  return /-/.test(val);\n};\n\nvar formatKey = function formatKey(key) {\n  return hasDashes(key) ? \"'\" + key + \"'\" : key;\n};\n\nvar formatVal = function formatVal(val) {\n  return val ? '' : 'true';\n};\n\nvar JSXAttribute = function (Node) {\n  function JSXAttribute() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXAttribute.__proto__ = Node;\n  JSXAttribute.prototype = Object.create(Node && Node.prototype);\n  JSXAttribute.prototype.constructor = JSXAttribute;\n\n  JSXAttribute.prototype.transpile = function transpile(code, transforms) {\n    var ref = this.name;\n    var start = ref.start;\n    var name = ref.name; // Overwrite equals sign if value is present.\n\n    var end = this.value ? this.value.start : this.name.end;\n    code.overwrite(start, end, formatKey(name) + \": \" + formatVal(this.value));\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return JSXAttribute;\n}(Node$1);\n\nfunction containsNewLine(node) {\n  return node.type === 'JSXText' && !/\\S/.test(node.value) && /\\n/.test(node.value);\n}\n\nvar JSXClosingElement = function (Node) {\n  function JSXClosingElement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXClosingElement.__proto__ = Node;\n  JSXClosingElement.prototype = Object.create(Node && Node.prototype);\n  JSXClosingElement.prototype.constructor = JSXClosingElement;\n\n  JSXClosingElement.prototype.transpile = function transpile(code) {\n    var spaceBeforeParen = true;\n    var lastChild = this.parent.children[this.parent.children.length - 1]; // omit space before closing paren if\n    //   a) this is on a separate line, or\n    //   b) there are no children but there are attributes\n\n    if (lastChild && containsNewLine(lastChild) || this.parent.openingElement.attributes.length) {\n      spaceBeforeParen = false;\n    }\n\n    code.overwrite(this.start, this.end, spaceBeforeParen ? ' )' : ')');\n  };\n\n  return JSXClosingElement;\n}(Node$1);\n\nfunction containsNewLine$1(node) {\n  return node.type === 'JSXText' && !/\\S/.test(node.value) && /\\n/.test(node.value);\n}\n\nvar JSXClosingFragment = function (Node) {\n  function JSXClosingFragment() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXClosingFragment.__proto__ = Node;\n  JSXClosingFragment.prototype = Object.create(Node && Node.prototype);\n  JSXClosingFragment.prototype.constructor = JSXClosingFragment;\n\n  JSXClosingFragment.prototype.transpile = function transpile(code) {\n    var spaceBeforeParen = true;\n    var lastChild = this.parent.children[this.parent.children.length - 1]; // omit space before closing paren if this is on a separate line\n\n    if (lastChild && containsNewLine$1(lastChild)) {\n      spaceBeforeParen = false;\n    }\n\n    code.overwrite(this.start, this.end, spaceBeforeParen ? ' )' : ')');\n  };\n\n  return JSXClosingFragment;\n}(Node$1);\n\nfunction normalise(str, removeTrailingWhitespace) {\n  str = str.replace(/\\u00a0/g, '&nbsp;');\n\n  if (removeTrailingWhitespace && /\\n/.test(str)) {\n    str = str.replace(/\\s+$/, '');\n  }\n\n  str = str.replace(/^\\n\\r?\\s+/, '') // remove leading newline + space\n  .replace(/\\s*\\n\\r?\\s*/gm, ' '); // replace newlines with spaces\n  // TODO prefer single quotes?\n\n  return JSON.stringify(str);\n}\n\nvar JSXElement = function (Node) {\n  function JSXElement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXElement.__proto__ = Node;\n  JSXElement.prototype = Object.create(Node && Node.prototype);\n  JSXElement.prototype.constructor = JSXElement;\n\n  JSXElement.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n    var children = this.children.filter(function (child) {\n      if (child.type !== 'JSXText') {\n        return true;\n      } // remove whitespace-only literals, unless on a single line\n\n\n      return /\\S/.test(child.raw) || !/\\n/.test(child.raw);\n    });\n\n    if (children.length) {\n      var c = (this.openingElement || this.openingFragment).end;\n      var i;\n\n      for (i = 0; i < children.length; i += 1) {\n        var child = children[i];\n        if (child.type === 'JSXExpressionContainer' && child.expression.type === 'JSXEmptyExpression') ;else {\n          var tail = code.original[c] === '\\n' && child.type !== 'JSXText' ? '' : ' ';\n          code.appendLeft(c, \",\" + tail);\n        }\n\n        if (child.type === 'JSXText') {\n          var str = normalise(child.value, i === children.length - 1);\n          code.overwrite(child.start, child.end, str);\n        }\n\n        c = child.end;\n      }\n    }\n  };\n\n  return JSXElement;\n}(Node$1);\n\nvar JSXExpressionContainer = function (Node) {\n  function JSXExpressionContainer() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXExpressionContainer.__proto__ = Node;\n  JSXExpressionContainer.prototype = Object.create(Node && Node.prototype);\n  JSXExpressionContainer.prototype.constructor = JSXExpressionContainer;\n\n  JSXExpressionContainer.prototype.transpile = function transpile(code, transforms) {\n    code.remove(this.start, this.expression.start);\n    code.remove(this.expression.end, this.end);\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return JSXExpressionContainer;\n}(Node$1);\n\nvar JSXFragment = function (JSXElement$$1) {\n  function JSXFragment() {\n    JSXElement$$1.apply(this, arguments);\n  }\n\n  if (JSXElement$$1) JSXFragment.__proto__ = JSXElement$$1;\n  JSXFragment.prototype = Object.create(JSXElement$$1 && JSXElement$$1.prototype);\n  JSXFragment.prototype.constructor = JSXFragment;\n  return JSXFragment;\n}(JSXElement);\n\nvar JSXOpeningElement = function (Node) {\n  function JSXOpeningElement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXOpeningElement.__proto__ = Node;\n  JSXOpeningElement.prototype = Object.create(Node && Node.prototype);\n  JSXOpeningElement.prototype.constructor = JSXOpeningElement;\n\n  JSXOpeningElement.prototype.transpile = function transpile(code, transforms) {\n    var this$1 = this;\n    Node.prototype.transpile.call(this, code, transforms);\n    code.overwrite(this.start, this.name.start, this.program.jsx + \"( \");\n    var html = this.name.type === 'JSXIdentifier' && this.name.name[0] === this.name.name[0].toLowerCase();\n\n    if (html) {\n      code.prependRight(this.name.start, \"'\");\n    }\n\n    var len = this.attributes.length;\n    var c = this.name.end;\n\n    if (len) {\n      var i;\n      var hasSpread = false;\n\n      for (i = 0; i < len; i += 1) {\n        if (this$1.attributes[i].type === 'JSXSpreadAttribute') {\n          hasSpread = true;\n          break;\n        }\n      }\n\n      c = this.attributes[0].end;\n\n      for (i = 0; i < len; i += 1) {\n        var attr = this$1.attributes[i];\n\n        if (i > 0) {\n          if (attr.start === c) {\n            code.prependRight(c, ', ');\n          } else {\n            code.overwrite(c, attr.start, ', ');\n          }\n        }\n\n        if (hasSpread && attr.type !== 'JSXSpreadAttribute') {\n          var lastAttr = this$1.attributes[i - 1];\n          var nextAttr = this$1.attributes[i + 1];\n\n          if (!lastAttr || lastAttr.type === 'JSXSpreadAttribute') {\n            code.prependRight(attr.start, '{ ');\n          }\n\n          if (!nextAttr || nextAttr.type === 'JSXSpreadAttribute') {\n            code.appendLeft(attr.end, ' }');\n          }\n        }\n\n        c = attr.end;\n      }\n\n      var after;\n      var before;\n\n      if (hasSpread) {\n        if (len === 1) {\n          before = html ? \"',\" : ',';\n        } else {\n          if (!this.program.options.objectAssign) {\n            throw new CompileError(\"Mixed JSX attributes ending in spread requires specified objectAssign option with 'Object.assign' or polyfill helper.\", this);\n          }\n\n          before = html ? \"', \" + this.program.options.objectAssign + \"({},\" : \", \" + this.program.options.objectAssign + \"({},\";\n          after = ')';\n        }\n      } else {\n        before = html ? \"', {\" : ', {';\n        after = ' }';\n      }\n\n      code.prependRight(this.name.end, before);\n\n      if (after) {\n        code.appendLeft(this.attributes[len - 1].end, after);\n      }\n    } else {\n      code.appendLeft(this.name.end, html ? \"', null\" : \", null\");\n      c = this.name.end;\n    }\n\n    if (this.selfClosing) {\n      code.overwrite(c, this.end, this.attributes.length ? \")\" : \" )\");\n    } else {\n      code.remove(c, this.end);\n    }\n  };\n\n  return JSXOpeningElement;\n}(Node$1);\n\nvar JSXOpeningFragment = function (Node) {\n  function JSXOpeningFragment() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXOpeningFragment.__proto__ = Node;\n  JSXOpeningFragment.prototype = Object.create(Node && Node.prototype);\n  JSXOpeningFragment.prototype.constructor = JSXOpeningFragment;\n\n  JSXOpeningFragment.prototype.transpile = function transpile(code) {\n    code.overwrite(this.start, this.end, this.program.jsx + \"( React.Fragment, null\");\n  };\n\n  return JSXOpeningFragment;\n}(Node$1);\n\nvar JSXSpreadAttribute = function (Node) {\n  function JSXSpreadAttribute() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) JSXSpreadAttribute.__proto__ = Node;\n  JSXSpreadAttribute.prototype = Object.create(Node && Node.prototype);\n  JSXSpreadAttribute.prototype.constructor = JSXSpreadAttribute;\n\n  JSXSpreadAttribute.prototype.transpile = function transpile(code, transforms) {\n    code.remove(this.start, this.argument.start);\n    code.remove(this.argument.end, this.end);\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return JSXSpreadAttribute;\n}(Node$1);\n\nvar nonAsciiLsOrPs = /[\\u2028-\\u2029]/g;\n\nvar Literal = function (Node) {\n  function Literal() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) Literal.__proto__ = Node;\n  Literal.prototype = Object.create(Node && Node.prototype);\n  Literal.prototype.constructor = Literal;\n\n  Literal.prototype.initialise = function initialise() {\n    if (typeof this.value === 'string') {\n      this.program.indentExclusionElements.push(this);\n    }\n  };\n\n  Literal.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.numericLiteral) {\n      if (this.raw.match(/^0[bo]/i)) {\n        code.overwrite(this.start, this.end, String(this.value), {\n          storeName: true,\n          contentOnly: true\n        });\n      }\n    }\n\n    if (this.regex) {\n      var ref = this.regex;\n      var pattern = ref.pattern;\n      var flags = ref.flags;\n\n      if (transforms.stickyRegExp && /y/.test(flags)) {\n        throw new CompileError('Regular expression sticky flag is not supported', this);\n      }\n\n      if (transforms.unicodeRegExp && /u/.test(flags)) {\n        code.overwrite(this.start, this.end, \"/\" + rewritePattern(pattern, flags) + \"/\" + flags.replace('u', ''), {\n          contentOnly: true\n        });\n      }\n    } else if (typeof this.value === \"string\" && this.value.match(nonAsciiLsOrPs)) {\n      code.overwrite(this.start, this.end, this.raw.replace(nonAsciiLsOrPs, function (m) {\n        return m == \"\\u2028\" ? \"\\\\u2028\" : \"\\\\u2029\";\n      }), {\n        contentOnly: true\n      });\n    }\n  };\n\n  return Literal;\n}(Node$1);\n\nvar MemberExpression = function (Node) {\n  function MemberExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) MemberExpression.__proto__ = Node;\n  MemberExpression.prototype = Object.create(Node && Node.prototype);\n  MemberExpression.prototype.constructor = MemberExpression;\n\n  MemberExpression.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.reservedProperties && reserved[this.property.name]) {\n      code.overwrite(this.object.end, this.property.start, \"['\");\n      code.appendLeft(this.property.end, \"']\");\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return MemberExpression;\n}(Node$1);\n\nvar NewExpression = function (Node) {\n  function NewExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) NewExpression.__proto__ = Node;\n  NewExpression.prototype = Object.create(Node && Node.prototype);\n  NewExpression.prototype.constructor = NewExpression;\n\n  NewExpression.prototype.initialise = function initialise(transforms) {\n    var this$1 = this;\n\n    if (transforms.spreadRest && this.arguments.length) {\n      var lexicalBoundary = this.findLexicalBoundary();\n      var i = this.arguments.length;\n\n      while (i--) {\n        var arg = this$1.arguments[i];\n\n        if (arg.type === 'SpreadElement' && isArguments(arg.argument)) {\n          this$1.argumentsArrayAlias = lexicalBoundary.getArgumentsArrayAlias();\n          break;\n        }\n      }\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  NewExpression.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (transforms.spreadRest && this.arguments.length) {\n      var firstArgument = this.arguments[0];\n      var isNew = true;\n      var hasSpreadElements = spread(code, this.arguments, firstArgument.start, this.argumentsArrayAlias, isNew);\n\n      if (hasSpreadElements) {\n        code.prependRight(this.start + 'new'.length, ' (Function.prototype.bind.apply(');\n        code.overwrite(this.callee.end, firstArgument.start, ', [ null ].concat( ');\n        code.appendLeft(this.end, ' ))');\n      }\n    }\n\n    if (this.arguments.length) {\n      removeTrailingComma(code, this.arguments[this.arguments.length - 1].end);\n    }\n  };\n\n  return NewExpression;\n}(Node$1);\n\nvar ObjectExpression = function (Node) {\n  function ObjectExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ObjectExpression.__proto__ = Node;\n  ObjectExpression.prototype = Object.create(Node && Node.prototype);\n  ObjectExpression.prototype.constructor = ObjectExpression;\n\n  ObjectExpression.prototype.transpile = function transpile(code, transforms) {\n    var this$1 = this;\n    Node.prototype.transpile.call(this, code, transforms);\n    var firstPropertyStart = this.start + 1;\n    var spreadPropertyCount = 0;\n    var computedPropertyCount = 0;\n    var firstSpreadProperty = null;\n    var firstComputedProperty = null;\n\n    for (var i = 0; i < this.properties.length; ++i) {\n      var prop = this$1.properties[i];\n\n      if (prop.type === 'SpreadElement') {\n        spreadPropertyCount += 1;\n\n        if (firstSpreadProperty === null) {\n          firstSpreadProperty = i;\n        }\n      } else if (prop.computed && transforms.computedProperty) {\n        computedPropertyCount += 1;\n\n        if (firstComputedProperty === null) {\n          firstComputedProperty = i;\n        }\n      }\n    }\n\n    if (spreadPropertyCount && !transforms.objectRestSpread && !(computedPropertyCount && transforms.computedProperty)) {\n      spreadPropertyCount = 0;\n      firstSpreadProperty = null;\n    } else if (spreadPropertyCount) {\n      if (!this.program.options.objectAssign) {\n        throw new CompileError(\"Object spread operator requires specified objectAssign option with 'Object.assign' or polyfill helper.\", this);\n      }\n\n      var i$1 = this.properties.length;\n\n      while (i$1--) {\n        var prop$1 = this$1.properties[i$1]; // enclose run of non-spread properties in curlies\n\n        if (prop$1.type === 'Property' && !computedPropertyCount) {\n          var lastProp = this$1.properties[i$1 - 1];\n          var nextProp = this$1.properties[i$1 + 1];\n\n          if (!lastProp || lastProp.type !== 'Property') {\n            code.prependRight(prop$1.start, '{');\n          }\n\n          if (!nextProp || nextProp.type !== 'Property') {\n            code.appendLeft(prop$1.end, '}');\n          }\n        } // Remove ellipsis on spread property\n\n\n        if (prop$1.type === 'SpreadElement') {\n          code.remove(prop$1.start, prop$1.argument.start);\n          code.remove(prop$1.argument.end, prop$1.end);\n        }\n      } // wrap the whole thing in Object.assign\n\n\n      firstPropertyStart = this.properties[0].start;\n\n      if (!computedPropertyCount) {\n        code.overwrite(this.start, firstPropertyStart, this.program.options.objectAssign + \"({}, \");\n        code.overwrite(this.properties[this.properties.length - 1].end, this.end, ')');\n      } else if (this.properties[0].type === 'SpreadElement') {\n        code.overwrite(this.start, firstPropertyStart, this.program.options.objectAssign + \"({}, \");\n        code.remove(this.end - 1, this.end);\n        code.appendRight(this.end, ')');\n      } else {\n        code.prependLeft(this.start, this.program.options.objectAssign + \"(\");\n        code.appendRight(this.end, ')');\n      }\n    }\n\n    if (computedPropertyCount && transforms.computedProperty) {\n      var i0 = this.getIndentation();\n      var isSimpleAssignment;\n      var name;\n\n      if (this.parent.type === 'VariableDeclarator' && this.parent.parent.declarations.length === 1 && this.parent.id.type === 'Identifier') {\n        isSimpleAssignment = true;\n        name = this.parent.id.alias || this.parent.id.name; // TODO is this right?\n      } else if (this.parent.type === 'AssignmentExpression' && this.parent.parent.type === 'ExpressionStatement' && this.parent.left.type === 'Identifier') {\n        isSimpleAssignment = true;\n        name = this.parent.left.alias || this.parent.left.name; // TODO is this right?\n      } else if (this.parent.type === 'AssignmentPattern' && this.parent.left.type === 'Identifier') {\n        isSimpleAssignment = true;\n        name = this.parent.left.alias || this.parent.left.name; // TODO is this right?\n      }\n\n      if (spreadPropertyCount) {\n        isSimpleAssignment = false;\n      } // handle block scoping\n\n\n      name = this.findScope(false).resolveName(name);\n      var start = firstPropertyStart;\n      var end = this.end;\n      if (isSimpleAssignment) ;else {\n        if (firstSpreadProperty === null || firstComputedProperty < firstSpreadProperty) {\n          name = this.findScope(true).createDeclaration('obj');\n          code.prependRight(this.start, \"( \" + name + \" = \");\n        } else {\n          name = null;\n        } // We don't actually need this variable\n\n      }\n      var len = this.properties.length;\n      var lastComputedProp;\n      var sawNonComputedProperty = false;\n      var isFirst = true;\n\n      for (var i$2 = 0; i$2 < len; i$2 += 1) {\n        var prop$2 = this$1.properties[i$2];\n        var moveStart = i$2 > 0 ? this$1.properties[i$2 - 1].end : start;\n\n        if (prop$2.type === 'Property' && (prop$2.computed || lastComputedProp && !spreadPropertyCount)) {\n          if (i$2 === 0) {\n            moveStart = this$1.start + 1;\n          } // Trim leading whitespace\n\n\n          lastComputedProp = prop$2;\n\n          if (!name) {\n            name = this$1.findScope(true).createDeclaration('obj');\n            var propId = name + (prop$2.computed ? '' : '.');\n            code.appendRight(prop$2.start, \"( \" + name + \" = {}, \" + propId);\n          } else {\n            var propId$1 = (isSimpleAssignment ? \";\\n\" + i0 + name : \", \" + name) + (prop$2.key.type === 'Literal' || prop$2.computed ? '' : '.');\n\n            if (moveStart < prop$2.start) {\n              code.overwrite(moveStart, prop$2.start, propId$1);\n            } else {\n              code.prependRight(prop$2.start, propId$1);\n            }\n          }\n\n          var c = prop$2.key.end;\n\n          if (prop$2.computed) {\n            while (code.original[c] !== ']') {\n              c += 1;\n            }\n\n            c += 1;\n          }\n\n          if (prop$2.key.type === 'Literal' && !prop$2.computed) {\n            code.overwrite(prop$2.start, prop$2.key.end + 1, '[' + code.slice(prop$2.start, prop$2.key.end) + '] = ');\n          } else if (prop$2.shorthand || prop$2.method && !prop$2.computed && transforms.conciseMethodProperty) {\n            // Replace : with = if Property::transpile inserted the :\n            code.overwrite(prop$2.key.start, prop$2.key.end, code.slice(prop$2.key.start, prop$2.key.end).replace(/:/, ' ='));\n          } else {\n            if (prop$2.value.start > c) {\n              code.remove(c, prop$2.value.start);\n            }\n\n            code.prependLeft(c, ' = ');\n          } // This duplicates behavior from Property::transpile which is disabled\n          // for computed properties or if conciseMethodProperty is false\n\n\n          if (prop$2.method && (prop$2.computed || !transforms.conciseMethodProperty)) {\n            if (prop$2.value.generator) {\n              code.remove(prop$2.start, prop$2.key.start);\n            }\n\n            code.prependRight(prop$2.value.start, \"function\" + (prop$2.value.generator ? '*' : '') + \" \");\n          }\n        } else if (prop$2.type === 'SpreadElement') {\n          if (name && i$2 > 0) {\n            if (!lastComputedProp) {\n              lastComputedProp = this$1.properties[i$2 - 1];\n            }\n\n            code.appendLeft(lastComputedProp.end, \", \" + name + \" )\");\n            lastComputedProp = null;\n            name = null;\n          }\n        } else {\n          if (!isFirst && spreadPropertyCount) {\n            // We are in an Object.assign context, so we need to wrap regular properties\n            code.prependRight(prop$2.start, '{');\n            code.appendLeft(prop$2.end, '}');\n          }\n\n          sawNonComputedProperty = true;\n        }\n\n        if (isFirst && (prop$2.type === 'SpreadElement' || prop$2.computed)) {\n          var beginEnd = sawNonComputedProperty ? this$1.properties[this$1.properties.length - 1].end : this$1.end - 1; // Trim trailing comma because it can easily become a leading comma which is illegal\n\n          if (code.original[beginEnd] == ',') {\n            ++beginEnd;\n          }\n\n          var closing = code.slice(beginEnd, end);\n          code.prependLeft(moveStart, closing);\n          code.remove(beginEnd, end);\n          isFirst = false;\n        } // Clean up some extranous whitespace\n\n\n        var c$1 = prop$2.end;\n\n        if (i$2 < len - 1 && !sawNonComputedProperty) {\n          while (code.original[c$1] !== ',') {\n            c$1 += 1;\n          }\n        } else if (i$2 == len - 1) {\n          c$1 = this$1.end;\n        }\n\n        if (prop$2.end != c$1) {\n          code.overwrite(prop$2.end, c$1, '', {\n            contentOnly: true\n          });\n        }\n      }\n\n      if (!isSimpleAssignment && name) {\n        code.appendLeft(lastComputedProp.end, \", \" + name + \" )\");\n      }\n    }\n  };\n\n  return ObjectExpression;\n}(Node$1);\n\nvar Property = function (Node) {\n  function Property() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) Property.__proto__ = Node;\n  Property.prototype = Object.create(Node && Node.prototype);\n  Property.prototype.constructor = Property;\n\n  Property.prototype.initialise = function initialise(transforms) {\n    if ((this.kind === 'get' || this.kind === 'set') && transforms.getterSetter) {\n      throw new CompileError(\"getters and setters are not supported. Use `transforms: { getterSetter: false }` to skip transformation and disable this error\", this);\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  Property.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (transforms.conciseMethodProperty && !this.computed && this.parent.type !== 'ObjectPattern') {\n      if (this.shorthand) {\n        code.prependRight(this.start, this.key.name + \": \");\n      } else if (this.method) {\n        var name = '';\n\n        if (this.program.options.namedFunctionExpressions !== false) {\n          if (this.key.type === 'Literal' && typeof this.key.value === 'number') {\n            name = '';\n          } else if (this.key.type === 'Identifier') {\n            if (reserved[this.key.name] || !/^[a-z_$][a-z0-9_$]*$/i.test(this.key.name) || this.value.body.scope.references[this.key.name]) {\n              name = this.findScope(true).createIdentifier(this.key.name);\n            } else {\n              name = this.key.name;\n            }\n          } else {\n            name = this.findScope(true).createIdentifier(this.key.value);\n          }\n\n          name = ' ' + name;\n        }\n\n        if (this.value.generator) {\n          code.remove(this.start, this.key.start);\n        }\n\n        code.appendLeft(this.key.end, \": function\" + (this.value.generator ? '*' : '') + name);\n      }\n    }\n\n    if (transforms.reservedProperties && reserved[this.key.name]) {\n      code.prependRight(this.key.start, \"'\");\n      code.appendLeft(this.key.end, \"'\");\n    }\n  };\n\n  return Property;\n}(Node$1);\n\nvar ReturnStatement = function (Node) {\n  function ReturnStatement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ReturnStatement.__proto__ = Node;\n  ReturnStatement.prototype = Object.create(Node && Node.prototype);\n  ReturnStatement.prototype.constructor = ReturnStatement;\n\n  ReturnStatement.prototype.initialise = function initialise(transforms) {\n    this.loop = this.findNearest(loopStatement);\n    this.nearestFunction = this.findNearest(/Function/);\n\n    if (this.loop && (!this.nearestFunction || this.loop.depth > this.nearestFunction.depth)) {\n      this.loop.canReturn = true;\n      this.shouldWrap = true;\n    }\n\n    if (this.argument) {\n      this.argument.initialise(transforms);\n    }\n  };\n\n  ReturnStatement.prototype.transpile = function transpile(code, transforms) {\n    var shouldWrap = this.shouldWrap && this.loop && this.loop.shouldRewriteAsFunction;\n\n    if (this.argument) {\n      if (shouldWrap) {\n        code.prependRight(this.argument.start, \"{ v: \");\n      }\n\n      this.argument.transpile(code, transforms);\n\n      if (shouldWrap) {\n        code.appendLeft(this.argument.end, \" }\");\n      }\n    } else if (shouldWrap) {\n      code.appendLeft(this.start + 6, ' {}');\n    }\n  };\n\n  return ReturnStatement;\n}(Node$1);\n\nvar Super = function (Node) {\n  function Super() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) Super.__proto__ = Node;\n  Super.prototype = Object.create(Node && Node.prototype);\n  Super.prototype.constructor = Super;\n\n  Super.prototype.initialise = function initialise(transforms) {\n    if (transforms.classes) {\n      this.method = this.findNearest('MethodDefinition');\n\n      if (!this.method) {\n        throw new CompileError('use of super outside class method', this);\n      }\n\n      var parentClass = this.findNearest('ClassBody').parent;\n      this.superClassName = parentClass.superClass && (parentClass.superClass.name || 'superclass');\n\n      if (!this.superClassName) {\n        throw new CompileError('super used in base class', this);\n      }\n\n      this.isCalled = this.parent.type === 'CallExpression' && this === this.parent.callee;\n\n      if (this.method.kind !== 'constructor' && this.isCalled) {\n        throw new CompileError('super() not allowed outside class constructor', this);\n      }\n\n      this.isMember = this.parent.type === 'MemberExpression';\n\n      if (!this.isCalled && !this.isMember) {\n        throw new CompileError('Unexpected use of `super` (expected `super(...)` or `super.*`)', this);\n      }\n    }\n\n    if (transforms.arrow) {\n      var lexicalBoundary = this.findLexicalBoundary();\n      var arrowFunction = this.findNearest('ArrowFunctionExpression');\n      var loop = this.findNearest(loopStatement);\n\n      if (arrowFunction && arrowFunction.depth > lexicalBoundary.depth) {\n        this.thisAlias = lexicalBoundary.getThisAlias();\n      }\n\n      if (loop && loop.body.contains(this) && loop.depth > lexicalBoundary.depth) {\n        this.thisAlias = lexicalBoundary.getThisAlias();\n      }\n    }\n  };\n\n  Super.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.classes) {\n      var expression = this.isCalled || this.method.static ? this.superClassName : this.superClassName + \".prototype\";\n      code.overwrite(this.start, this.end, expression, {\n        storeName: true,\n        contentOnly: true\n      });\n      var callExpression = this.isCalled ? this.parent : this.parent.parent;\n\n      if (callExpression && callExpression.type === 'CallExpression') {\n        if (!this.noCall) {\n          // special case – `super( ...args )`\n          code.appendLeft(callExpression.callee.end, '.call');\n        }\n\n        var thisAlias = this.thisAlias || 'this';\n\n        if (callExpression.arguments.length) {\n          code.appendLeft(callExpression.arguments[0].start, thisAlias + \", \");\n        } else {\n          code.appendLeft(callExpression.end - 1, \"\" + thisAlias);\n        }\n      }\n    }\n  };\n\n  return Super;\n}(Node$1);\n\nvar TaggedTemplateExpression = function (Node) {\n  function TaggedTemplateExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) TaggedTemplateExpression.__proto__ = Node;\n  TaggedTemplateExpression.prototype = Object.create(Node && Node.prototype);\n  TaggedTemplateExpression.prototype.constructor = TaggedTemplateExpression;\n\n  TaggedTemplateExpression.prototype.initialise = function initialise(transforms) {\n    if (transforms.templateString && !transforms.dangerousTaggedTemplateString) {\n      throw new CompileError(\"Tagged template strings are not supported. Use `transforms: { templateString: false }` to skip transformation and disable this error, or `transforms: { dangerousTaggedTemplateString: true }` if you know what you're doing\", this);\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  TaggedTemplateExpression.prototype.transpile = function transpile(code, transforms) {\n    if (transforms.templateString && transforms.dangerousTaggedTemplateString) {\n      var ordered = this.quasi.expressions.concat(this.quasi.quasis).sort(function (a, b) {\n        return a.start - b.start;\n      });\n      var program = this.program;\n      var rootScope = program.body.scope; // insert strings at start\n\n      var templateStrings = this.quasi.quasis.map(function (quasi) {\n        return JSON.stringify(quasi.value.cooked);\n      }).join(', ');\n      var templateObject = this.program.templateLiteralQuasis[templateStrings];\n\n      if (!templateObject) {\n        templateObject = rootScope.createIdentifier('templateObject');\n        code.prependRight(this.program.prependAt, \"var \" + templateObject + \" = Object.freeze([\" + templateStrings + \"]);\\n\");\n        this.program.templateLiteralQuasis[templateStrings] = templateObject;\n      }\n\n      code.overwrite(this.tag.end, ordered[0].start, \"(\" + templateObject);\n      var lastIndex = ordered[0].start;\n      ordered.forEach(function (node) {\n        if (node.type === 'TemplateElement') {\n          code.remove(lastIndex, node.end);\n        } else {\n          code.overwrite(lastIndex, node.start, ', ');\n        }\n\n        lastIndex = node.end;\n      });\n      code.overwrite(lastIndex, this.end, ')');\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return TaggedTemplateExpression;\n}(Node$1);\n\nvar TemplateElement = function (Node) {\n  function TemplateElement() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) TemplateElement.__proto__ = Node;\n  TemplateElement.prototype = Object.create(Node && Node.prototype);\n  TemplateElement.prototype.constructor = TemplateElement;\n\n  TemplateElement.prototype.initialise = function initialise() {\n    this.program.indentExclusionElements.push(this);\n  };\n\n  return TemplateElement;\n}(Node$1);\n\nvar TemplateLiteral = function (Node) {\n  function TemplateLiteral() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) TemplateLiteral.__proto__ = Node;\n  TemplateLiteral.prototype = Object.create(Node && Node.prototype);\n  TemplateLiteral.prototype.constructor = TemplateLiteral;\n\n  TemplateLiteral.prototype.transpile = function transpile(code, transforms) {\n    Node.prototype.transpile.call(this, code, transforms);\n\n    if (transforms.templateString && this.parent.type !== 'TaggedTemplateExpression') {\n      var ordered = this.expressions.concat(this.quasis).sort(function (a, b) {\n        return a.start - b.start || a.end - b.end;\n      }).filter(function (node, i) {\n        // include all expressions\n        if (node.type !== 'TemplateElement') {\n          return true;\n        } // include all non-empty strings\n\n\n        if (node.value.raw) {\n          return true;\n        } // exclude all empty strings not at the head\n\n\n        return !i;\n      }); // special case – we may be able to skip the first element,\n      // if it's the empty string, but only if the second and\n      // third elements aren't both expressions (since they maybe\n      // be numeric, and `1 + 2 + '3' === '33'`)\n\n      if (ordered.length >= 3) {\n        var first = ordered[0];\n        var third = ordered[2];\n\n        if (first.type === 'TemplateElement' && first.value.raw === '' && third.type === 'TemplateElement') {\n          ordered.shift();\n        }\n      }\n\n      var parenthesise = (this.quasis.length !== 1 || this.expressions.length !== 0) && this.parent.type !== 'TemplateLiteral' && this.parent.type !== 'AssignmentExpression' && this.parent.type !== 'AssignmentPattern' && this.parent.type !== 'VariableDeclarator' && (this.parent.type !== 'BinaryExpression' || this.parent.operator !== '+');\n\n      if (parenthesise) {\n        code.appendRight(this.start, '(');\n      }\n\n      var lastIndex = this.start;\n      ordered.forEach(function (node, i) {\n        var prefix = i === 0 ? parenthesise ? '(' : '' : ' + ';\n\n        if (node.type === 'TemplateElement') {\n          code.overwrite(lastIndex, node.end, prefix + JSON.stringify(node.value.cooked));\n        } else {\n          var parenthesise$1 = node.type !== 'Identifier'; // TODO other cases where it's safe\n\n          if (parenthesise$1) {\n            prefix += '(';\n          }\n\n          code.remove(lastIndex, node.start);\n\n          if (prefix) {\n            code.prependRight(node.start, prefix);\n          }\n\n          if (parenthesise$1) {\n            code.appendLeft(node.end, ')');\n          }\n        }\n\n        lastIndex = node.end;\n      });\n\n      if (parenthesise) {\n        code.appendLeft(lastIndex, ')');\n      }\n\n      code.overwrite(lastIndex, this.end, \"\", {\n        contentOnly: true\n      });\n    }\n  };\n\n  return TemplateLiteral;\n}(Node$1);\n\nvar ThisExpression = function (Node) {\n  function ThisExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) ThisExpression.__proto__ = Node;\n  ThisExpression.prototype = Object.create(Node && Node.prototype);\n  ThisExpression.prototype.constructor = ThisExpression;\n\n  ThisExpression.prototype.initialise = function initialise(transforms) {\n    var this$1 = this;\n    var lexicalBoundary = this.findLexicalBoundary();\n\n    if (transforms.letConst) {\n      // save all loops up to the lexical boundary in case we need\n      // to alias them later for block-scoped declarations\n      var node = this.findNearest(loopStatement);\n\n      while (node && node.depth > lexicalBoundary.depth) {\n        node.thisRefs.push(this$1);\n        node = node.parent.findNearest(loopStatement);\n      }\n    }\n\n    if (transforms.arrow) {\n      var arrowFunction = this.findNearest('ArrowFunctionExpression');\n\n      if (arrowFunction && arrowFunction.depth > lexicalBoundary.depth) {\n        this.alias = lexicalBoundary.getThisAlias();\n      }\n    }\n  };\n\n  ThisExpression.prototype.transpile = function transpile(code) {\n    if (this.alias) {\n      code.overwrite(this.start, this.end, this.alias, {\n        storeName: true,\n        contentOnly: true\n      });\n    }\n  };\n\n  return ThisExpression;\n}(Node$1);\n\nvar UpdateExpression = function (Node) {\n  function UpdateExpression() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) UpdateExpression.__proto__ = Node;\n  UpdateExpression.prototype = Object.create(Node && Node.prototype);\n  UpdateExpression.prototype.constructor = UpdateExpression;\n\n  UpdateExpression.prototype.initialise = function initialise(transforms) {\n    if (this.argument.type === 'Identifier') {\n      var declaration = this.findScope(false).findDeclaration(this.argument.name); // special case – https://gitlab.com/Rich-Harris/buble/issues/150\n\n      var statement = declaration && declaration.node.ancestor(3);\n\n      if (statement && statement.type === 'ForStatement' && statement.body.contains(this)) {\n        statement.reassigned[this.argument.name] = true;\n      }\n    }\n\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  UpdateExpression.prototype.transpile = function transpile(code, transforms) {\n    if (this.argument.type === 'Identifier') {\n      // Do this check after everything has been initialized to find\n      // shadowing declarations after this expression\n      checkConst(this.argument, this.findScope(false));\n    }\n\n    Node.prototype.transpile.call(this, code, transforms);\n  };\n\n  return UpdateExpression;\n}(Node$1);\n\nvar VariableDeclaration = function (Node) {\n  function VariableDeclaration() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) VariableDeclaration.__proto__ = Node;\n  VariableDeclaration.prototype = Object.create(Node && Node.prototype);\n  VariableDeclaration.prototype.constructor = VariableDeclaration;\n\n  VariableDeclaration.prototype.initialise = function initialise(transforms) {\n    this.scope = this.findScope(this.kind === 'var');\n    this.declarations.forEach(function (declarator) {\n      return declarator.initialise(transforms);\n    });\n  };\n\n  VariableDeclaration.prototype.transpile = function transpile(code, transforms) {\n    var this$1 = this;\n    var i0 = this.getIndentation();\n    var kind = this.kind;\n\n    if (transforms.letConst && kind !== 'var') {\n      kind = 'var';\n      code.overwrite(this.start, this.start + this.kind.length, kind, {\n        contentOnly: true,\n        storeName: true\n      });\n    }\n\n    if (transforms.destructuring && this.parent.type !== 'ForOfStatement' && this.parent.type !== 'ForInStatement') {\n      var c = this.start;\n      var lastDeclaratorIsPattern;\n      this.declarations.forEach(function (declarator, i) {\n        declarator.transpile(code, transforms);\n\n        if (declarator.id.type === 'Identifier') {\n          if (i > 0 && this$1.declarations[i - 1].id.type !== 'Identifier') {\n            code.overwrite(c, declarator.id.start, \"var \");\n          }\n        } else {\n          var inline = loopStatement.test(this$1.parent.type);\n\n          if (i === 0) {\n            code.remove(c, declarator.id.start);\n          } else {\n            code.overwrite(c, declarator.id.start, \";\\n\" + i0);\n          }\n\n          var simple = declarator.init.type === 'Identifier' && !declarator.init.rewritten;\n          var name = simple ? declarator.init.alias || declarator.init.name : declarator.findScope(true).createIdentifier('ref');\n          c = declarator.start;\n          var statementGenerators = [];\n\n          if (simple) {\n            code.remove(declarator.id.end, declarator.end);\n          } else {\n            statementGenerators.push(function (start, prefix, suffix) {\n              code.prependRight(declarator.id.end, \"var \" + name);\n              code.appendLeft(declarator.init.end, \"\" + suffix);\n              code.move(declarator.id.end, declarator.end, start);\n            });\n          }\n\n          var scope = declarator.findScope(false);\n          destructure(code, function (id) {\n            return scope.createIdentifier(id);\n          }, function (ref) {\n            var name = ref.name;\n            return scope.resolveName(name);\n          }, declarator.id, name, inline, statementGenerators);\n          var prefix = inline ? 'var ' : '';\n          var suffix = inline ? \", \" : \";\\n\" + i0;\n          statementGenerators.forEach(function (fn, j) {\n            if (i === this$1.declarations.length - 1 && j === statementGenerators.length - 1) {\n              suffix = inline ? '' : ';';\n            }\n\n            fn(declarator.start, j === 0 ? prefix : '', suffix);\n          });\n        }\n\n        c = declarator.end;\n        lastDeclaratorIsPattern = declarator.id.type !== 'Identifier';\n      });\n\n      if (lastDeclaratorIsPattern && this.end > c) {\n        code.overwrite(c, this.end, '', {\n          contentOnly: true\n        });\n      }\n    } else {\n      this.declarations.forEach(function (declarator) {\n        declarator.transpile(code, transforms);\n      });\n    }\n  };\n\n  return VariableDeclaration;\n}(Node$1);\n\nvar VariableDeclarator = function (Node) {\n  function VariableDeclarator() {\n    Node.apply(this, arguments);\n  }\n\n  if (Node) VariableDeclarator.__proto__ = Node;\n  VariableDeclarator.prototype = Object.create(Node && Node.prototype);\n  VariableDeclarator.prototype.constructor = VariableDeclarator;\n\n  VariableDeclarator.prototype.initialise = function initialise(transforms) {\n    var kind = this.parent.kind;\n\n    if (kind === 'let' && this.parent.parent.type === 'ForStatement') {\n      kind = 'for.let'; // special case...\n    }\n\n    this.parent.scope.addDeclaration(this.id, kind);\n    Node.prototype.initialise.call(this, transforms);\n  };\n\n  VariableDeclarator.prototype.transpile = function transpile(code, transforms) {\n    if (!this.init && transforms.letConst && this.parent.kind !== 'var') {\n      var inLoop = this.findNearest(/Function|^For(In|Of)?Statement|^(?:Do)?WhileStatement/);\n\n      if (inLoop && !/Function/.test(inLoop.type) && !this.isLeftDeclaratorOfLoop()) {\n        code.appendLeft(this.id.end, ' = (void 0)');\n      }\n    }\n\n    if (this.id) {\n      this.id.transpile(code, transforms);\n    }\n\n    if (this.init) {\n      this.init.transpile(code, transforms);\n    }\n  };\n\n  VariableDeclarator.prototype.isLeftDeclaratorOfLoop = function isLeftDeclaratorOfLoop() {\n    return this.parent && this.parent.type === 'VariableDeclaration' && this.parent.parent && (this.parent.parent.type === 'ForInStatement' || this.parent.parent.type === 'ForOfStatement') && this.parent.parent.left && this.parent.parent.left.declarations[0] === this;\n  };\n\n  return VariableDeclarator;\n}(Node$1);\n\nvar types$2 = {\n  ArrayExpression: ArrayExpression,\n  ArrowFunctionExpression: ArrowFunctionExpression,\n  AssignmentExpression: AssignmentExpression,\n  BinaryExpression: BinaryExpression,\n  BreakStatement: BreakStatement,\n  CallExpression: CallExpression,\n  ClassBody: ClassBody,\n  ClassDeclaration: ClassDeclaration,\n  ClassExpression: ClassExpression,\n  ContinueStatement: ContinueStatement,\n  DoWhileStatement: LoopStatement,\n  ExportNamedDeclaration: ExportNamedDeclaration,\n  ExportDefaultDeclaration: ExportDefaultDeclaration,\n  ForStatement: ForStatement,\n  ForInStatement: ForInStatement,\n  ForOfStatement: ForOfStatement,\n  FunctionDeclaration: FunctionDeclaration,\n  FunctionExpression: FunctionExpression,\n  Identifier: Identifier,\n  IfStatement: IfStatement,\n  ImportDeclaration: ImportDeclaration,\n  ImportDefaultSpecifier: ImportDefaultSpecifier,\n  ImportSpecifier: ImportSpecifier,\n  JSXAttribute: JSXAttribute,\n  JSXClosingElement: JSXClosingElement,\n  JSXClosingFragment: JSXClosingFragment,\n  JSXElement: JSXElement,\n  JSXExpressionContainer: JSXExpressionContainer,\n  JSXFragment: JSXFragment,\n  JSXOpeningElement: JSXOpeningElement,\n  JSXOpeningFragment: JSXOpeningFragment,\n  JSXSpreadAttribute: JSXSpreadAttribute,\n  Literal: Literal,\n  MemberExpression: MemberExpression,\n  NewExpression: NewExpression,\n  ObjectExpression: ObjectExpression,\n  Property: Property,\n  ReturnStatement: ReturnStatement,\n  Super: Super,\n  TaggedTemplateExpression: TaggedTemplateExpression,\n  TemplateElement: TemplateElement,\n  TemplateLiteral: TemplateLiteral,\n  ThisExpression: ThisExpression,\n  UpdateExpression: UpdateExpression,\n  VariableDeclaration: VariableDeclaration,\n  VariableDeclarator: VariableDeclarator,\n  WhileStatement: LoopStatement\n};\nvar keys = {\n  Program: ['body'],\n  Literal: []\n};\nvar statementsWithBlocks = {\n  IfStatement: 'consequent',\n  ForStatement: 'body',\n  ForInStatement: 'body',\n  ForOfStatement: 'body',\n  WhileStatement: 'body',\n  DoWhileStatement: 'body',\n  ArrowFunctionExpression: 'body'\n};\n\nfunction wrap(raw, parent) {\n  if (!raw) {\n    return;\n  }\n\n  if ('length' in raw) {\n    var i = raw.length;\n\n    while (i--) {\n      wrap(raw[i], parent);\n    }\n\n    return;\n  } // with e.g. shorthand properties, key and value are\n  // the same node. We don't want to wrap an object twice\n\n\n  if (raw.__wrapped) {\n    return;\n  }\n\n  raw.__wrapped = true;\n\n  if (!keys[raw.type]) {\n    keys[raw.type] = Object.keys(raw).filter(function (key) {\n      return typeof raw[key] === 'object';\n    });\n  } // special case – body-less if/for/while statements. TODO others?\n\n\n  var bodyType = statementsWithBlocks[raw.type];\n\n  if (bodyType && raw[bodyType].type !== 'BlockStatement') {\n    var expression = raw[bodyType]; // create a synthetic block statement, otherwise all hell\n    // breaks loose when it comes to block scoping\n\n    raw[bodyType] = {\n      start: expression.start,\n      end: expression.end,\n      type: 'BlockStatement',\n      body: [expression],\n      synthetic: true\n    };\n  }\n\n  raw.parent = parent;\n  raw.program = parent.program || parent;\n  raw.depth = parent.depth + 1;\n  raw.keys = keys[raw.type];\n  raw.indentation = undefined;\n\n  for (var i$1 = 0, list = keys[raw.type]; i$1 < list.length; i$1 += 1) {\n    var key = list[i$1];\n    wrap(raw[key], raw);\n  }\n\n  raw.program.magicString.addSourcemapLocation(raw.start);\n  raw.program.magicString.addSourcemapLocation(raw.end);\n  var type = (raw.type === 'BlockStatement' ? BlockStatement : types$2[raw.type]) || Node$1;\n  raw.__proto__ = type.prototype;\n}\n\nfunction Program(source, ast, transforms, options) {\n  var this$1 = this;\n  this.type = 'Root'; // options\n\n  this.jsx = options.jsx || 'React.createElement';\n  this.options = options;\n  this.source = source;\n  this.magicString = new MagicString(source);\n  this.ast = ast;\n  this.depth = 0;\n  wrap(this.body = ast, this);\n  this.body.__proto__ = BlockStatement.prototype;\n  this.templateLiteralQuasis = Object.create(null);\n\n  for (var i = 0; i < this.body.body.length; ++i) {\n    if (!this$1.body.body[i].directive) {\n      this$1.prependAt = this$1.body.body[i].start;\n      break;\n    }\n  }\n\n  this.objectWithoutPropertiesHelper = null;\n  this.indentExclusionElements = [];\n  this.body.initialise(transforms);\n  this.indentExclusions = Object.create(null);\n\n  for (var i$2 = 0, list = this$1.indentExclusionElements; i$2 < list.length; i$2 += 1) {\n    var node = list[i$2];\n\n    for (var i$1 = node.start; i$1 < node.end; i$1 += 1) {\n      this$1.indentExclusions[i$1] = true;\n    }\n  }\n\n  this.body.transpile(this.magicString, transforms);\n}\n\nProgram.prototype = {\n  export: function export$1(options) {\n    if (options === void 0) options = {};\n    return {\n      code: this.magicString.toString(),\n      map: this.magicString.generateMap({\n        file: options.file,\n        source: options.source,\n        includeContent: options.includeContent !== false\n      })\n    };\n  },\n  findNearest: function findNearest() {\n    return null;\n  },\n  findScope: function findScope() {\n    return null;\n  },\n  getObjectWithoutPropertiesHelper: function getObjectWithoutPropertiesHelper(code) {\n    if (!this.objectWithoutPropertiesHelper) {\n      this.objectWithoutPropertiesHelper = this.body.scope.createIdentifier('objectWithoutProperties');\n      code.prependLeft(this.prependAt, \"function \" + this.objectWithoutPropertiesHelper + \" (obj, exclude) { \" + \"var target = {}; for (var k in obj) \" + \"if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) \" + \"target[k] = obj[k]; return target; }\\n\");\n    }\n\n    return this.objectWithoutPropertiesHelper;\n  }\n};\nvar matrix = {\n  chrome: {\n    48: 610719,\n    49: 652287,\n    50: 783359,\n    51: 783359,\n    52: 1045503,\n    53: 1045503,\n    54: 1045503,\n    55: 3142655,\n    56: 3142655,\n    57: 3142655,\n    58: 4191231,\n    59: 4191231,\n    60: 8385535,\n    61: 8385535,\n    62: 8385535,\n    63: 8385535,\n    64: 8385535,\n    65: 8385535,\n    66: 8385535,\n    67: 8385535,\n    68: 8385535,\n    69: 8385535,\n    70: 8385535,\n    71: 8385535\n  },\n  firefox: {\n    43: 643515,\n    44: 643515,\n    45: 643519,\n    46: 774591,\n    47: 774655,\n    48: 774655,\n    49: 774655,\n    50: 774655,\n    51: 775167,\n    52: 4191231,\n    53: 4191231,\n    54: 4191231,\n    55: 8385535,\n    56: 8385535,\n    57: 8385535,\n    58: 8385535,\n    59: 8385535,\n    60: 8385535,\n    61: 8385535,\n    62: 8385535,\n    63: 8385535,\n    64: 8385535\n  },\n  safari: {\n    8: 524297,\n    9: 594141,\n    10: 1831935,\n    '10.1': 4191231,\n    11: 4191231,\n    '11.1': 8385535,\n    12: 8385535\n  },\n  ie: {\n    8: 0,\n    9: 524289,\n    10: 524289,\n    11: 524289 // no let/const in for loops\n\n  },\n  edge: {\n    12: 610459,\n    13: 774559,\n    14: 2085887,\n    15: 4183039,\n    16: 4183039,\n    17: 4183039,\n    18: 4183039,\n    19: 4183039\n  },\n  node: {\n    '0.10': 524289,\n    '0.12': 524417,\n    4: 594335,\n    5: 594335,\n    6: 783359,\n    8: 4191231,\n    '8.3': 8385535,\n    '8.7': 8385535,\n    '8.10': 8385535\n  }\n};\nvar features = ['getterSetter', 'arrow', 'classes', 'computedProperty', 'conciseMethodProperty', 'defaultParameter', 'destructuring', 'forOf', 'generator', 'letConst', 'moduleExport', 'moduleImport', 'numericLiteral', 'parameterDestructuring', 'spreadRest', 'stickyRegExp', 'templateString', 'unicodeRegExp', // ES2016\n'exponentiation', // additional transforms, not from\n// https://featuretests.io\n'reservedProperties', 'trailingFunctionCommas', 'asyncAwait', 'objectRestSpread'];\nvar version$1 = \"0.19.6\";\nvar parser = Parser.extend(acornDynamicImport, acornJsx());\nvar dangerousTransforms = ['dangerousTaggedTemplateString', 'dangerousForOf'];\n\nfunction target(target) {\n  var targets = Object.keys(target);\n  var bitmask = targets.length ? 8388607 : 524289;\n  Object.keys(target).forEach(function (environment) {\n    var versions = matrix[environment];\n\n    if (!versions) {\n      throw new Error(\"Unknown environment '\" + environment + \"'. Please raise an issue at https://github.com/Rich-Harris/buble/issues\");\n    }\n\n    var targetVersion = target[environment];\n\n    if (!(targetVersion in versions)) {\n      throw new Error(\"Support data exists for the following versions of \" + environment + \": \" + Object.keys(versions).join(', ') + \". Please raise an issue at https://github.com/Rich-Harris/buble/issues\");\n    }\n\n    var support = versions[targetVersion];\n    bitmask &= support;\n  });\n  var transforms = Object.create(null);\n  features.forEach(function (name, i) {\n    transforms[name] = !(bitmask & 1 << i);\n  });\n  dangerousTransforms.forEach(function (name) {\n    transforms[name] = false;\n  });\n  return transforms;\n}\n\nfunction transform(source, options) {\n  if (options === void 0) options = {};\n  var ast;\n  var jsx = null;\n\n  try {\n    ast = parser.parse(source, {\n      ecmaVersion: 10,\n      preserveParens: true,\n      sourceType: 'module',\n      allowReturnOutsideFunction: true,\n      onComment: function onComment(block, text) {\n        if (!jsx) {\n          var match = /@jsx\\s+([^\\s]+)/.exec(text);\n\n          if (match) {\n            jsx = match[1];\n          }\n        }\n      }\n    });\n    options.jsx = jsx || options.jsx;\n  } catch (err) {\n    err.snippet = getSnippet(source, err.loc);\n\n    err.toString = function () {\n      return err.name + \": \" + err.message + \"\\n\" + err.snippet;\n    };\n\n    throw err;\n  }\n\n  var transforms = target(options.target || {});\n  Object.keys(options.transforms || {}).forEach(function (name) {\n    if (name === 'modules') {\n      if (!('moduleImport' in options.transforms)) {\n        transforms.moduleImport = options.transforms.modules;\n      }\n\n      if (!('moduleExport' in options.transforms)) {\n        transforms.moduleExport = options.transforms.modules;\n      }\n\n      return;\n    }\n\n    if (!(name in transforms)) {\n      throw new Error(\"Unknown transform '\" + name + \"'\");\n    }\n\n    transforms[name] = options.transforms[name];\n  });\n\n  if (options.objectAssign === true) {\n    options.objectAssign = 'Object.assign';\n  }\n\n  return new Program(source, ast, transforms, options).export(options);\n}\n\nexport { target, transform, version$1 as VERSION };"],"sourceRoot":""}