{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/underscore/modules/_setup.js","webpack:///external \"window.jQuery\"","webpack:///./node_modules/handlebars/dist/cjs/handlebars/utils.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/exception.js","webpack:///./node_modules/handlebars/runtime.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/underscore/modules/restArguments.js","webpack:///./node_modules/underscore/modules/isObject.js","webpack:///./node_modules/underscore/modules/isNull.js","webpack:///./node_modules/underscore/modules/isUndefined.js","webpack:///./node_modules/underscore/modules/isBoolean.js","webpack:///./node_modules/underscore/modules/isElement.js","webpack:///./node_modules/underscore/modules/_tagTester.js","webpack:///./node_modules/underscore/modules/isString.js","webpack:///./node_modules/underscore/modules/isNumber.js","webpack:///./node_modules/underscore/modules/isDate.js","webpack:///./node_modules/underscore/modules/isRegExp.js","webpack:///./node_modules/underscore/modules/isError.js","webpack:///./node_modules/underscore/modules/isSymbol.js","webpack:///./node_modules/underscore/modules/isArrayBuffer.js","webpack:///./node_modules/underscore/modules/isFunction.js","webpack:///./node_modules/underscore/modules/_hasObjectTag.js","webpack:///./node_modules/underscore/modules/_stringTagBug.js","webpack:///./node_modules/underscore/modules/isDataView.js","webpack:///./node_modules/underscore/modules/isArray.js","webpack:///./node_modules/underscore/modules/_has.js","webpack:///./node_modules/underscore/modules/isArguments.js","webpack:///./node_modules/underscore/modules/isFinite.js","webpack:///./node_modules/underscore/modules/isNaN.js","webpack:///./node_modules/underscore/modules/constant.js","webpack:///./node_modules/underscore/modules/_createSizePropertyCheck.js","webpack:///./node_modules/underscore/modules/_shallowProperty.js","webpack:///./node_modules/underscore/modules/_getByteLength.js","webpack:///./node_modules/underscore/modules/_isBufferLike.js","webpack:///./node_modules/underscore/modules/isTypedArray.js","webpack:///./node_modules/underscore/modules/_getLength.js","webpack:///./node_modules/underscore/modules/_collectNonEnumProps.js","webpack:///./node_modules/underscore/modules/keys.js","webpack:///./node_modules/underscore/modules/isEmpty.js","webpack:///./node_modules/underscore/modules/isMatch.js","webpack:///./node_modules/underscore/modules/underscore.js","webpack:///./node_modules/underscore/modules/_toBufferView.js","webpack:///./node_modules/underscore/modules/isEqual.js","webpack:///./node_modules/underscore/modules/allKeys.js","webpack:///./node_modules/underscore/modules/_methodFingerprint.js","webpack:///./node_modules/underscore/modules/isMap.js","webpack:///./node_modules/underscore/modules/isWeakMap.js","webpack:///./node_modules/underscore/modules/isSet.js","webpack:///./node_modules/underscore/modules/isWeakSet.js","webpack:///./node_modules/underscore/modules/values.js","webpack:///./node_modules/underscore/modules/pairs.js","webpack:///./node_modules/underscore/modules/invert.js","webpack:///./node_modules/underscore/modules/functions.js","webpack:///./node_modules/underscore/modules/_createAssigner.js","webpack:///./node_modules/underscore/modules/extend.js","webpack:///./node_modules/underscore/modules/extendOwn.js","webpack:///./node_modules/underscore/modules/defaults.js","webpack:///./node_modules/underscore/modules/_baseCreate.js","webpack:///./node_modules/underscore/modules/create.js","webpack:///./node_modules/underscore/modules/clone.js","webpack:///./node_modules/underscore/modules/tap.js","webpack:///./node_modules/underscore/modules/toPath.js","webpack:///./node_modules/underscore/modules/_toPath.js","webpack:///./node_modules/underscore/modules/_deepGet.js","webpack:///./node_modules/underscore/modules/get.js","webpack:///./node_modules/underscore/modules/has.js","webpack:///./node_modules/underscore/modules/identity.js","webpack:///./node_modules/underscore/modules/matcher.js","webpack:///./node_modules/underscore/modules/property.js","webpack:///./node_modules/underscore/modules/_optimizeCb.js","webpack:///./node_modules/underscore/modules/_baseIteratee.js","webpack:///./node_modules/underscore/modules/iteratee.js","webpack:///./node_modules/underscore/modules/_cb.js","webpack:///./node_modules/underscore/modules/mapObject.js","webpack:///./node_modules/underscore/modules/noop.js","webpack:///./node_modules/underscore/modules/propertyOf.js","webpack:///./node_modules/underscore/modules/times.js","webpack:///./node_modules/underscore/modules/random.js","webpack:///./node_modules/underscore/modules/now.js","webpack:///./node_modules/underscore/modules/_createEscaper.js","webpack:///./node_modules/underscore/modules/_escapeMap.js","webpack:///./node_modules/underscore/modules/escape.js","webpack:///./node_modules/underscore/modules/unescape.js","webpack:///./node_modules/underscore/modules/_unescapeMap.js","webpack:///./node_modules/underscore/modules/templateSettings.js","webpack:///./node_modules/underscore/modules/template.js","webpack:///./node_modules/underscore/modules/result.js","webpack:///./node_modules/underscore/modules/uniqueId.js","webpack:///./node_modules/underscore/modules/chain.js","webpack:///./node_modules/underscore/modules/_executeBound.js","webpack:///./node_modules/underscore/modules/partial.js","webpack:///./node_modules/underscore/modules/bind.js","webpack:///./node_modules/underscore/modules/_isArrayLike.js","webpack:///./node_modules/underscore/modules/_flatten.js","webpack:///./node_modules/underscore/modules/bindAll.js","webpack:///./node_modules/underscore/modules/memoize.js","webpack:///./node_modules/underscore/modules/delay.js","webpack:///./node_modules/underscore/modules/defer.js","webpack:///./node_modules/underscore/modules/throttle.js","webpack:///./node_modules/underscore/modules/debounce.js","webpack:///./node_modules/underscore/modules/wrap.js","webpack:///./node_modules/underscore/modules/negate.js","webpack:///./node_modules/underscore/modules/compose.js","webpack:///./node_modules/underscore/modules/after.js","webpack:///./node_modules/underscore/modules/before.js","webpack:///./node_modules/underscore/modules/once.js","webpack:///./node_modules/underscore/modules/findKey.js","webpack:///./node_modules/underscore/modules/_createPredicateIndexFinder.js","webpack:///./node_modules/underscore/modules/findIndex.js","webpack:///./node_modules/underscore/modules/findLastIndex.js","webpack:///./node_modules/underscore/modules/sortedIndex.js","webpack:///./node_modules/underscore/modules/_createIndexFinder.js","webpack:///./node_modules/underscore/modules/indexOf.js","webpack:///./node_modules/underscore/modules/lastIndexOf.js","webpack:///./node_modules/underscore/modules/find.js","webpack:///./node_modules/underscore/modules/findWhere.js","webpack:///./node_modules/underscore/modules/each.js","webpack:///./node_modules/underscore/modules/map.js","webpack:///./node_modules/underscore/modules/_createReduce.js","webpack:///./node_modules/underscore/modules/reduce.js","webpack:///./node_modules/underscore/modules/reduceRight.js","webpack:///./node_modules/underscore/modules/filter.js","webpack:///./node_modules/underscore/modules/reject.js","webpack:///./node_modules/underscore/modules/every.js","webpack:///./node_modules/underscore/modules/some.js","webpack:///./node_modules/underscore/modules/contains.js","webpack:///./node_modules/underscore/modules/invoke.js","webpack:///./node_modules/underscore/modules/pluck.js","webpack:///./node_modules/underscore/modules/where.js","webpack:///./node_modules/underscore/modules/max.js","webpack:///./node_modules/underscore/modules/min.js","webpack:///./node_modules/underscore/modules/sample.js","webpack:///./node_modules/underscore/modules/shuffle.js","webpack:///./node_modules/underscore/modules/sortBy.js","webpack:///./node_modules/underscore/modules/_group.js","webpack:///./node_modules/underscore/modules/groupBy.js","webpack:///./node_modules/underscore/modules/indexBy.js","webpack:///./node_modules/underscore/modules/countBy.js","webpack:///./node_modules/underscore/modules/partition.js","webpack:///./node_modules/underscore/modules/toArray.js","webpack:///./node_modules/underscore/modules/size.js","webpack:///./node_modules/underscore/modules/_keyInObj.js","webpack:///./node_modules/underscore/modules/pick.js","webpack:///./node_modules/underscore/modules/omit.js","webpack:///./node_modules/underscore/modules/initial.js","webpack:///./node_modules/underscore/modules/first.js","webpack:///./node_modules/underscore/modules/rest.js","webpack:///./node_modules/underscore/modules/last.js","webpack:///./node_modules/underscore/modules/compact.js","webpack:///./node_modules/underscore/modules/flatten.js","webpack:///./node_modules/underscore/modules/difference.js","webpack:///./node_modules/underscore/modules/without.js","webpack:///./node_modules/underscore/modules/uniq.js","webpack:///./node_modules/underscore/modules/union.js","webpack:///./node_modules/underscore/modules/intersection.js","webpack:///./node_modules/underscore/modules/unzip.js","webpack:///./node_modules/underscore/modules/zip.js","webpack:///./node_modules/underscore/modules/object.js","webpack:///./node_modules/underscore/modules/range.js","webpack:///./node_modules/underscore/modules/chunk.js","webpack:///./node_modules/underscore/modules/_chainResult.js","webpack:///./node_modules/underscore/modules/mixin.js","webpack:///./node_modules/underscore/modules/underscore-array-methods.js","webpack:///./node_modules/underscore/modules/index-default.js","webpack:///./node_modules/backbone/backbone.js","webpack:///./node_modules/@173/173js/lib/url.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/base.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/logger.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","webpack:///./public/js/widgets/ping.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars.runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/safe-string.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/runtime.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","webpack:///./node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","webpack:///./node_modules/@173/173js/lib/ui/form.js","webpack:///./public/js/widgets/ValidateForm/index.js","webpack:///./public/js/game-info/widgets/openAlert.js","webpack:///./public/js/ui/enableDialog/index.js","webpack:///./public/js/widgets/getDownloadUrls.js","webpack:///./public/js/widgets/md5.js","webpack:///./public/js/ui/Overlay/index.js","webpack:///./public/js/widgets/requireLogin.js","webpack:///./public/js/ui/createEnableOverlay.js","webpack:///./public/js/ui/Overlay/tmpl.handlebars","webpack:///./public/js/ui/enableDialog/tmpl.handlebars","webpack:///./public/js/game-info/widgets/ActivityForm/index.js","webpack:///./public/js/game-info/widgets/ActivityForm/tmpl.handlebars","webpack:///./public/js/game-info/mods/fetchActivityInfo.js","webpack:///./public/js/game-info/widgets/CherishForm/index.js","webpack:///./public/js/game-info/widgets/CherishForm/tmpl.handlebars","webpack:///./public/js/game-info/widgets/CherishForm/successResult.handlebars","webpack:///./public/js/widgets/MiniTip/index.js","webpack:///./public/js/final/index.entry.js","webpack:///./public/js/final/sections/profile/index.js","webpack:///./public/js/final/sections/profile/voteCurrentGame/index.js","webpack:///./public/js/final/sections/profile/voteCurrentGame/voteSuccessTmpl.handlebars","webpack:///./public/js/final/sections/profile/renderDownload/index.js","webpack:///./public/js/final/sections/profile/cherishCurrentGame.js","webpack:///./public/js/final/sections/similar/index.js","webpack:///./public/js/final/sections/similar/tmpl.handlebars"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","VERSION","root","self","global","Function","ArrayProto","Array","ObjProto","SymbolProto","push","slice","toString","supportsArrayBuffer","ArrayBuffer","supportsDataView","DataView","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","nativeIsView","isView","_isNaN","isNaN","_isFinite","isFinite","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","MAX_ARRAY_INDEX","Math","pow","window","jQuery","extend","indexOf","array","len","length","escapeExpression","string","toHTML","possible","test","replace","badChars","escapeChar","isEmpty","createFrame","frame","_parent","blockParams","params","ids","path","appendContextPath","contextPath","id","escape","chr","obj","arguments","isFunction","errorProps","Exception","message","node","loc","line","undefined","endLineNumber","column","endColumn","start","end","tmp","Error","constructor","this","idx","captureStackTrace","lineNumber","nop","g","e","restArguments","func","startIndex","max","rest","index","args","apply","isObject","type","isNull","isUndefined","isBoolean","isElement","nodeType","tagTester","tag","nodelist","document","childNodes","Int8Array","hasStringTagBug","isIE11","Map","isDataView","getInt8","isArrayBuffer","buffer","has","isArguments","isSymbol","parseFloat","isNumber","constant","createSizePropertyCheck","getSizeProperty","collection","sizeProperty","shallowProperty","typedArrayPattern","collectNonEnumProps","hash","contains","emulatedSet","nonEnumIdx","proto","prop","isString","isMatch","attrs","_keys","_","_wrapped","toBufferView","bufferSource","Uint8Array","byteOffset","valueOf","toJSON","String","eq","a","b","aStack","bStack","deepEq","className","areArrays","aCtor","bCtor","pop","isEqual","allKeys","ie11fingerprint","methods","weakMapMethods","forEachName","commonInit","mapTail","mapMethods","concat","setMethods","values","pairs","invert","result","functions","names","sort","createAssigner","keysFunc","defaults","source","baseCreate","Ctor","props","extendOwn","clone","tap","interceptor","toPath","deepGet","defaultValue","identity","optimizeCb","context","argCount","accumulator","baseIteratee","Infinity","cb","iteratee","mapObject","results","currentKey","noop","propertyOf","times","accum","random","min","floor","Date","getTime","createEscaper","map","escaper","match","join","testRegexp","RegExp","replaceRegexp","templateSettings","evaluate","interpolate","noMatch","escapes","escapeRegExp","bareIdentifier","text","settings","oldSettings","matcher","offset","render","argument","variable","template","data","fallback","idCounter","uniqueId","prefix","chain","instance","_chain","executeBound","sourceFunc","boundFunc","callingContext","partial","boundArgs","placeholder","bound","position","TypeError","callArgs","flatten","input","depth","strict","output","j","hasher","memoize","cache","address","wait","setTimeout","delay","throttle","options","timeout","previous","later","leading","now","throttled","_now","remaining","clearTimeout","trailing","cancel","debounce","immediate","passed","debounced","_args","wrap","wrapper","negate","predicate","compose","after","before","memo","findKey","createPredicateIndexFinder","dir","low","high","mid","createIndexFinder","predicateFind","sortedIndex","item","findIndex","findLastIndex","find","findWhere","each","createReduce","reducer","initial","filter","list","reject","every","some","fromIndex","guard","method","pluck","where","computed","lastComputed","v","sample","last","rand","temp","shuffle","sortBy","criteria","left","right","group","behavior","partition","pass","reStrSymbol","toArray","size","keyInObj","pick","first","compact","Boolean","otherArrays","difference","uniq","isSorted","seen","arrays","intersection","argsLength","unzip","range","stop","step","ceil","chunk","count","chainResult","mixin","$","Backbone","previousBackbone","noConflict","emulateHTTP","emulateJSON","_listening","Events","eventSplitter","eventsApi","events","callback","opts","split","on","_events","onApi","ctx","listening","_listeners","interop","listenTo","_listenId","listeningTo","_listeningTo","Listening","error","tryCatchOn","handlers","off","offApi","listeners","stopListening","handler","_callback","cleanup","once","onceMap","listenToOnce","offer","trigger","triggerApi","objEvents","allEvents","all","triggerEvents","ev","a1","a2","a3","listener","unbind","Model","attributes","preinitialize","cid","cidPrefix","parse","set","changed","initialize","validationError","idAttribute","sync","attr","matches","val","_validate","unset","silent","changes","changing","_changing","_previousAttributes","current","prev","_pending","clear","hasChanged","changedAttributes","diff","old","previousAttributes","fetch","model","success","resp","serverAttrs","wrapError","save","validate","isNew","patch","xhr","destroy","defer","url","base","urlError","encodeURIComponent","isValid","Collection","models","comparator","_reset","reset","setOptions","add","remove","merge","addOptions","splice","insert","at","tail","singular","removed","_removeModels","added","merged","_isModel","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","unshift","shift","_byId","modelId","callbackOpts","CollectionIterator","ITERATOR_VALUES","ITERATOR_KEYS","entries","ITERATOR_KEYSVALUES","_onModelEvent","event","prevId","$$iterator","iterator","kind","_collection","_kind","_index","next","done","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","selector","$el","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","el","delegate","eventName","undelegate","_createElement","createElement","_setAttributes","addUnderscoreMethods","Class","attribute","defaultVal","addMethod","modelMatcher","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","select","any","include","includes","invoke","head","take","drop","without","lastIndexOf","groupBy","countBy","indexBy","omit","config","Base","mappings","methodMap","dataType","contentType","JSON","stringify","_method","beforeSend","setRequestHeader","processData","textStatus","errorThrown","ajax","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","route","isRegExp","_routeToRegExp","router","history","fragment","_extractParameters","execute","navigate","optional","exec","param","decodeURIComponent","History","checkUrl","location","routeStripper","rootStripper","pathStripper","started","interval","atRoot","pathname","getSearch","matchRoot","decodeFragment","decodeURI","href","getHash","getPath","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iframe","src","style","display","tabIndex","body","iWindow","insertBefore","firstChild","contentWindow","open","close","addEventListener","attachEvent","_checkUrlInterval","setInterval","loadUrl","removeEventListener","detachEvent","removeChild","clearInterval","decodedFragment","title","assign","_updateHash","protoProps","staticProps","child","parent","__super__","factory","rNonQuerystring","deparam","paramsArray","pair","paramName","paramValue","substr","normalize","str","joined","getUrlCompontents","search","hashIndex","markIndex","resetParams","addParam","compontents","removeSearch","paramString","hasSameOrigin","originUrl","getRelativeUrl","getURLParameter","rQuestionMark","getURLParameters","_interopRequireDefault","HandlebarsEnvironment","_utils","_exception2","_helpers","_decorators","_logger2","_internalProtoAccess","COMPILER_REVISION","LAST_COMPATIBLE_COMPILER_REVISION","REVISION_CHANGES","1","2","3","4","5","6","7","8","helpers","partials","decorators","registerDefaultHelpers","registerDefaultDecorators","logger","log","registerHelper","fn","unregisterHelper","registerPartial","unregisterPartial","registerDecorator","unregisterDecorator","resetLoggedPropertyAccesses","resetLoggedProperties","_helpersBlockHelperMissing2","_helpersEach2","_helpersHelperMissing2","_helpersIf2","_helpersLog2","_helpersLookup2","_helpersWith2","moveHelperToHooks","helperName","keepHelper","hooks","level","lookupLevel","levelMap","toLowerCase","parseInt","console","_len","_key","createProtoAccessControl","runtimeOptions","defaultMethodWhiteList","defaultPropertyWhiteList","properties","whitelist","_createNewLookupObject","createNewLookupObject","allowedProtoProperties","allowProtoPropertiesByDefault","allowedProtoMethods","allowProtoMethodsByDefault","resultIsAllowed","protoAccessControl","propertyName","checkWhiteList","loggedProperties","newObj","_interopRequireWildcard","protoAccessControlForType","logUnexpecedPropertyAccessOnce","types","MOBILE_GAME_DOWNLOADED_IN_ANDROID","MOBILE_GAME_DOWNLOADED_IN_IOS","OPEN_GAME_DOWNLOADED_QRCODE","DOWNLOAD_MOBILE_GAME_SIMULATOR","IOS_GAME_DOWNLOADED_IN_PC","ANDROID_GAME_DOWNLOADED_IN_PC","urlUtils","trackEventWithKey","hrefOrAction","_jc_ping","withCurrentHref","action","rNON_URL","trackEvent","eventType","trackPageview","applyTrackLink","currentTarget","trackOptions","is","applyTrackBlock","blockElement","applyBiClick","gameCode","applyTrackArea","areaElement","applyBgArea","_handlebarsSafeString2","_handlebarsException2","Utils","runtime","_handlebarsNoConflict2","hb","SafeString","VM","spec","inst","inverse","_exception","priorKey","ret","execIteration","field","newContext","it","conditional","includeZero","lookupProperty","_decoratorsInline2","_decoratorsInline","container","original","sources","checkRevision","compilerInfo","compilerRevision","currentRevision","_base","runtimeVersions","compilerVersions","templateSpec","env","main","decorator","main_d","compiler","templateWasPrecompiledWithCompilerV7","lookup","depths","lambda","invokePartial","resolvePartial","extendedOptions","compile","compilerOptions","indent","lines","programs","program","declaredBlockParams","programWrapper","wrapProgram","mergeIfNeeded","common","nullContext","seal","_setup","useData","initData","useBlockParams","useDepths","executeDecorators","isTop","mergedHelpers","helper","_internalWrapHelper","wrapHelper","passLookupPropertyOption","wrapHelpersToPassLookupProperty","usePartial","useDecorators","keepHelperInHelpers","allowCallsToHelperMissing","_child","currentPartialBlock","partialBlock","prog","currentDepths","transformOptionsFn","Handlebars","$Handlebars","formUtil","toDict","form","dict","serializeArray","send","readonlyForm","formOrElements","elements","resumeForm","ctrlEnterForm","keypress","keyCode","ctrlKey","submit","autoResize","textarea","fakeTextarea","height","scrollTop","getTextareaScrollHeight","maxHeight","minHeight","css","enableAutoResize","fakeTextareaParent","removeAttr","proxy","originalEvent","append","validateFuncs","trim","invalidMsgs","ValidateForm","inputs","fieldErrors","validateElem","validator","invalidMsg","label","errorMessage","handleInvalid","formItem","closest","one","enableDialog","AlertView","content","html","createEnableOverlay","tmpl","md5","GetDownloadInfo","gameCodes","appId","appKey","getPlatformUrl","needSource","nonce","timestamp","sign","time","getUrls","that","when","ios","android","pc","then","res1","res2","res3","raw","u","f","h","fromCharCode","charCodeAt","unescape","C","A","cachedValue","hasRuned","doc","docElement","win","getScrollbarWidth","outer","visibility","width","msOverflowStyle","appendChild","widthNoScroll","offsetWidth","overflow","inner","widthWithScroll","parentNode","Overlay","appendTo","closable","setBody","addClass","klass","overlay","target","isEscKey","removeClass","marginRight","getContentElement","scrollbarWidth","pnCyclePositionX","show","cate","mobileBinderTit","Passport","voteMobileBinderTit","isRequireMobileBind","markIsNoTopbarTrigger","requireMobileBind","getMobileStatus","isBinded","Dialog","showMobileBinder","ti","contents","newgameLoginSuccess","passportDialogEventBind","EVENTS","dialogClose","dialogType","defaultOption","mobileBindOn","isLoggedIn","dialogTitle","view","handleCloseClicked","preventDefault","replaceWith","depth0","helperMissing","formUtils","ued","activityInfo","resultMessage","captchaHash","ajaxSubmitForm","to_update","always","msg","renderFieldErrors","errorFields","fail","showErrors","hideErrors","empty","hide","formSubmitted","validateForm","validateCaptcha","fetchMemberInfo","getJSON","renderWhenFetchMemberInfo","userData","info","propName","activityTimeLabel","begin_time","end_time","fetchAndRenderCaptcha","errorBlock","x","captchaContainer","handleError","hash1","inputCaptchValue","stack1","alias1","dfd","Deferred","resolve","promise","successResultTmpl","click","submitFormFromSudoku","captchaCode","code","status","showSuccessResult","handleContentChanged","contentLength","renderContentRemainLengthTips","remainLength","hasOverflowLength","tipsContainer","abs","sudoku","ifDefinedOr","xOffset","yOffset","listen","mousemove","pageX","y","pageY","tips","top","mouseleave","tipElementHasCreated","tipElement","tipRawHtmlTmpl","zIndex","disableBrowserNativeTooltip","applyWithIn","pingjs","MiniTip","app","init","slick","mainTab","dialog","user","introExtend","renderRank","rederFollow","audioPlay","renderAct","renderAwardGames","fixed","lightbox","option","fadeOut","emitter","windowHeight","ele","_this","dialogName","parents","hasClass","$focus_list","lazyLoad","slidesToScroll","variableWidth","dots","infinite","speed","autoplay","focusOnSelect","currentSlide","nextSlide","$mainTab","topOffsetTop","mainHeight","siblings","animate","tabNav","tabPn","pandora","use","Qrcode","image","imageSize","setAvatar","getUserPortrait","loginSuccess","$this","$txt","$ViewMore","game_codes","res","scriptCharset","fetchGameDownLoad","currentDownNum","DATASTORE","DATASTORELAB","downnum","renderRankView","currentTopInfo","rankName","rankUrl","subRankListUrl","isOnlineGame","rank_type","rankNumber","rank_num","voteNumber","heats_num","hasVoteAct","voteActFlag","rankUnlessEmpty","rankingUrl","rankingName","rank","fetchSubRank","fetchGameRankInfo","pause","load","currentTime","play","goToBl","actId","activityUrl","activityImage","description","awardName","imgPath","logo_pic","substring","game_url","game_name","requireLogin","voteCurrentGame","renderDownload","cherishCurrentGame","openAlert","ActivityForm","voteSuccessTmpl","fetchActivityInfo","submitVoteInfo","voteResult","defaultBtUrl","newGameCodes","newgameCodes","iOS","Android","PC","CherishForm","pageSize","similarGamesArr","initialSimilarGamesArr","recommendData","isReseted","gameType","getRecommend","getSimilar","bindEvents","showList","rcmdList","favorRcmd","validData","startDate","endDate","dateBeforeNow","dateAfterNow","only_this_type","game_type_name","dateStr","game_code","renderItem","isRecommend","isSy","platforms","game_platform","logoPicture","show_pic","large_logo","hasStarLevel","star_level","starLevelPercent","tags","isEmptyObject","alias2","alias4","alias3"],"mappings":"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","file":"js/final/index.entry.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//ue.17173cdn.com/a/newgame/index/v5.4.7/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 142);\n","// Current version.\nexport var VERSION = '1.12.1';\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nexport var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nexport var ArrayProto = Array.prototype, ObjProto = Object.prototype;\nexport var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nexport var push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// Modern feature detection.\nexport var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',\n supportsDataView = typeof DataView !== 'undefined';\n\n// All **ECMAScript 5+** native function implementations that we hope to use\n// are declared here.\nexport var nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create,\n nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;\n\n// Create references to these builtin functions because we override them.\nexport var _isNaN = isNaN,\n _isFinite = isFinite;\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nexport var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nexport var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n// The largest integer that can be represented exactly.\nexport var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n","module.exports = window.jQuery;","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport default function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n","// Is a given variable an object?\nexport default function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\n","// Is a given value equal to null?\nexport default function isNull(obj) {\n return obj === null;\n}\n","// Is a given variable undefined?\nexport default function isUndefined(obj) {\n return obj === void 0;\n}\n","import { toString } from './_setup.js';\n\n// Is a given value a boolean?\nexport default function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n","// Is a given value a DOM element?\nexport default function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n","import { toString } from './_setup.js';\n\n// Internal function for creating a `toString`-based type tester.\nexport default function tagTester(name) {\n var tag = '[object ' + name + ']';\n return function(obj) {\n return toString.call(obj) === tag;\n };\n}\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('String');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Number');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Date');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('RegExp');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Error');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Symbol');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('ArrayBuffer');\n","import tagTester from './_tagTester.js';\nimport { root } from './_setup.js';\n\nvar isFunction = tagTester('Function');\n\n// Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old\n// v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\nexport default isFunction;\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('Object');\n","import { supportsDataView } from './_setup.js';\nimport hasObjectTag from './_hasObjectTag.js';\n\n// In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.\n// In IE 11, the most common among them, this problem also applies to\n// `Map`, `WeakMap` and `Set`.\nexport var hasStringTagBug = (\n supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))\n ),\n isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));\n","import tagTester from './_tagTester.js';\nimport isFunction from './isFunction.js';\nimport isArrayBuffer from './isArrayBuffer.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\n\nvar isDataView = tagTester('DataView');\n\n// In IE 10 - Edge 13, we need a different heuristic\n// to determine whether an object is a `DataView`.\nfunction ie10IsDataView(obj) {\n return obj != null && isFunction(obj.getInt8) && isArrayBuffer(obj.buffer);\n}\n\nexport default (hasStringTagBug ? ie10IsDataView : isDataView);\n","import { nativeIsArray } from './_setup.js';\nimport tagTester from './_tagTester.js';\n\n// Is a given value an array?\n// Delegates to ECMA5's native `Array.isArray`.\nexport default nativeIsArray || tagTester('Array');\n","import { hasOwnProperty } from './_setup.js';\n\n// Internal function to check whether `key` is an own property name of `obj`.\nexport default function has(obj, key) {\n return obj != null && hasOwnProperty.call(obj, key);\n}\n","import tagTester from './_tagTester.js';\nimport has from './_has.js';\n\nvar isArguments = tagTester('Arguments');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return has(obj, 'callee');\n };\n }\n}());\n\nexport default isArguments;\n","import { _isFinite } from './_setup.js';\nimport isSymbol from './isSymbol.js';\n\n// Is a given object a finite number?\nexport default function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));\n}\n","import { _isNaN } from './_setup.js';\nimport isNumber from './isNumber.js';\n\n// Is the given value `NaN`?\nexport default function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function constant(value) {\n return function() {\n return value;\n };\n}\n","import { MAX_ARRAY_INDEX } from './_setup.js';\n\n// Common internal logic for `isArrayLike` and `isBufferLike`.\nexport default function createSizePropertyCheck(getSizeProperty) {\n return function(collection) {\n var sizeProperty = getSizeProperty(collection);\n return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;\n }\n}\n","// Internal helper to generate a function to obtain property `key` from `obj`.\nexport default function shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `byteLength` property of an object.\nexport default shallowProperty('byteLength');\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getByteLength from './_getByteLength.js';\n\n// Internal helper to determine whether we should spend extensive checks against\n// `ArrayBuffer` et al.\nexport default createSizePropertyCheck(getByteLength);\n","import { supportsArrayBuffer, nativeIsView, toString } from './_setup.js';\nimport isDataView from './isDataView.js';\nimport constant from './constant.js';\nimport isBufferLike from './_isBufferLike.js';\n\n// Is a given value a typed array?\nvar typedArrayPattern = /\\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\\]/;\nfunction isTypedArray(obj) {\n // `ArrayBuffer.isView` is the most future-proof, so use it when available.\n // Otherwise, fall back on the above regular expression.\n return nativeIsView ? (nativeIsView(obj) && !isDataView(obj)) :\n isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));\n}\n\nexport default supportsArrayBuffer ? isTypedArray : constant(false);\n","import shallowProperty from './_shallowProperty.js';\n\n// Internal helper to obtain the `length` property of an object.\nexport default shallowProperty('length');\n","import { nonEnumerableProps, ObjProto } from './_setup.js';\nimport isFunction from './isFunction.js';\nimport has from './_has.js';\n\n// Internal helper to create a simple lookup structure.\n// `collectNonEnumProps` used to depend on `_.contains`, but this led to\n// circular imports. `emulatedSet` is a one-off solution that only works for\n// arrays of strings.\nfunction emulatedSet(keys) {\n var hash = {};\n for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;\n return {\n contains: function(key) { return hash[key]; },\n push: function(key) {\n hash[key] = true;\n return keys.push(key);\n }\n };\n}\n\n// Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't\n// be iterated by `for key in ...` and thus missed. Extends `keys` in place if\n// needed.\nexport default function collectNonEnumProps(obj, keys) {\n keys = emulatedSet(keys);\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (has(obj, prop) && !keys.contains(prop)) keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {\n keys.push(prop);\n }\n }\n}\n","import isObject from './isObject.js';\nimport { nativeKeys, hasEnumBug } from './_setup.js';\nimport has from './_has.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport default function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var keys = [];\n for (var key in obj) if (has(obj, key)) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isArray from './isArray.js';\nimport isString from './isString.js';\nimport isArguments from './isArguments.js';\nimport keys from './keys.js';\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport default function isEmpty(obj) {\n if (obj == null) return true;\n // Skip the more expensive `toString`-based type checks if `obj` has no\n // `.length`.\n var length = getLength(obj);\n if (typeof length == 'number' && (\n isArray(obj) || isString(obj) || isArguments(obj)\n )) return length === 0;\n return getLength(keys(obj)) === 0;\n}\n","import keys from './keys.js';\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport default function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n","import { VERSION } from './_setup.js';\n\n// If Underscore is called as a function, it returns a wrapped object that can\n// be used OO-style. This wrapper holds altered versions of all functions added\n// through `_.mixin`. Wrapped objects may be chained.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n_.VERSION = VERSION;\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxies for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import getByteLength from './_getByteLength.js';\n\n// Internal function to wrap or shallow-copy an ArrayBuffer,\n// typed array or DataView to a new view, reusing the buffer.\nexport default function toBufferView(bufferSource) {\n return new Uint8Array(\n bufferSource.buffer || bufferSource,\n bufferSource.byteOffset || 0,\n getByteLength(bufferSource)\n );\n}\n","import _ from './underscore.js';\nimport { toString, SymbolProto } from './_setup.js';\nimport getByteLength from './_getByteLength.js';\nimport isTypedArray from './isTypedArray.js';\nimport isFunction from './isFunction.js';\nimport { hasStringTagBug } from './_stringTagBug.js';\nimport isDataView from './isDataView.js';\nimport keys from './keys.js';\nimport has from './_has.js';\nimport toBufferView from './_toBufferView.js';\n\n// We use this string twice, so give it a name for minification.\nvar tagDataView = '[object DataView]';\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `_.isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n // Work around a bug in IE 10 - Edge 13.\n if (hasStringTagBug && className == '[object Object]' && isDataView(a)) {\n if (!isDataView(b)) return false;\n className = tagDataView;\n }\n switch (className) {\n // These types are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n case '[object ArrayBuffer]':\n case tagDataView:\n // Coerce to typed array so we can fall through.\n return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays && isTypedArray(a)) {\n var byteLength = getByteLength(a);\n if (byteLength !== getByteLength(b)) return false;\n if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;\n areArrays = true;\n }\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport default function isEqual(a, b) {\n return eq(a, b);\n}\n","import isObject from './isObject.js';\nimport { hasEnumBug } from './_setup.js';\nimport collectNonEnumProps from './_collectNonEnumProps.js';\n\n// Retrieve all the enumerable property names of an object.\nexport default function allKeys(obj) {\n if (!isObject(obj)) return [];\n var keys = [];\n for (var key in obj) keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, keys);\n return keys;\n}\n","import getLength from './_getLength.js';\nimport isFunction from './isFunction.js';\nimport allKeys from './allKeys.js';\n\n// Since the regular `Object.prototype.toString` type tests don't work for\n// some types in IE 11, we use a fingerprinting heuristic instead, based\n// on the methods. It's not great, but it's the best we got.\n// The fingerprint method lists are defined below.\nexport function ie11fingerprint(methods) {\n var length = getLength(methods);\n return function(obj) {\n if (obj == null) return false;\n // `Map`, `WeakMap` and `Set` have no enumerable keys.\n var keys = allKeys(obj);\n if (getLength(keys)) return false;\n for (var i = 0; i < length; i++) {\n if (!isFunction(obj[methods[i]])) return false;\n }\n // If we are testing against `WeakMap`, we need to ensure that\n // `obj` doesn't have a `forEach` method in order to distinguish\n // it from a regular `Map`.\n return methods !== weakMapMethods || !isFunction(obj[forEachName]);\n };\n}\n\n// In the interest of compact minification, we write\n// each string in the fingerprints only once.\nvar forEachName = 'forEach',\n hasName = 'has',\n commonInit = ['clear', 'delete'],\n mapTail = ['get', hasName, 'set'];\n\n// `Map`, `WeakMap` and `Set` each have slightly different\n// combinations of the above sublists.\nexport var mapMethods = commonInit.concat(forEachName, mapTail),\n weakMapMethods = commonInit.concat(mapTail),\n setMethods = ['add'].concat(commonInit, forEachName, hasName);\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, mapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, weakMapMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');\n","import tagTester from './_tagTester.js';\nimport { isIE11 } from './_stringTagBug.js';\nimport { ie11fingerprint, setMethods } from './_methodFingerprint.js';\n\nexport default isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');\n","import tagTester from './_tagTester.js';\n\nexport default tagTester('WeakSet');\n","import keys from './keys.js';\n\n// Retrieve the values of an object's properties.\nexport default function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n","import keys from './keys.js';\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of `_.object` with one argument.\nexport default function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n","import keys from './keys.js';\n\n// Invert the keys and values of an object. The values must be serializable.\nexport default function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n","import isFunction from './isFunction.js';\n\n// Return a sorted list of the function names available on the object.\nexport default function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\n","// An internal function for creating assigner functions.\nexport default function createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Extend a given object with all the properties in passed-in object(s).\nexport default createAssigner(allKeys);\n","import createAssigner from './_createAssigner.js';\nimport keys from './keys.js';\n\n// Assigns a given object with all the own properties in the passed-in\n// object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport default createAssigner(keys);\n","import createAssigner from './_createAssigner.js';\nimport allKeys from './allKeys.js';\n\n// Fill in a given object with default properties.\nexport default createAssigner(allKeys, true);\n","import isObject from './isObject.js';\nimport { nativeCreate } from './_setup.js';\n\n// Create a naked function reference for surrogate-prototype-swapping.\nfunction ctor() {\n return function(){};\n}\n\n// An internal function for creating a new object that inherits from another.\nexport default function baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n var Ctor = ctor();\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n","import baseCreate from './_baseCreate.js';\nimport extendOwn from './extendOwn.js';\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport default function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n","import isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport extend from './extend.js';\n\n// Create a (shallow-cloned) duplicate of an object.\nexport default function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n","// Invokes `interceptor` with the `obj` and then returns `obj`.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport default function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n","import _ from './underscore.js';\nimport isArray from './isArray.js';\n\n// Normalize a (deep) property `path` to array.\n// Like `_.iteratee`, this function can be customized.\nexport default function toPath(path) {\n return isArray(path) ? path : [path];\n}\n_.toPath = toPath;\n","import _ from './underscore.js';\nimport './toPath.js';\n\n// Internal wrapper for `_.toPath` to enable minification.\n// Similar to `cb` for `_.iteratee`.\nexport default function toPath(path) {\n return _.toPath(path);\n}\n","// Internal function to obtain a nested property in `obj` along `path`.\nexport default function deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n","import toPath from './_toPath.js';\nimport deepGet from './_deepGet.js';\nimport isUndefined from './isUndefined.js';\n\n// Get the value of the (deep) property on `path` from `object`.\n// If any property in `path` does not exist or if the value is\n// `undefined`, return `defaultValue` instead.\n// The `path` is normalized through `_.toPath`.\nexport default function get(object, path, defaultValue) {\n var value = deepGet(object, toPath(path));\n return isUndefined(value) ? defaultValue : value;\n}\n","import _has from './_has.js';\nimport toPath from './_toPath.js';\n\n// Shortcut function for checking if an object has a given property directly on\n// itself (in other words, not on a prototype). Unlike the internal `has`\n// function, this public version can also traverse nested properties.\nexport default function has(obj, path) {\n path = toPath(path);\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (!_has(obj, key)) return false;\n obj = obj[key];\n }\n return !!length;\n}\n","// Keep the identity function around for default iteratees.\nexport default function identity(value) {\n return value;\n}\n","import extendOwn from './extendOwn.js';\nimport isMatch from './isMatch.js';\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport default function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\n","import deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indices.\nexport default function property(path) {\n path = toPath(path);\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n","// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nexport default function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n","import identity from './identity.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isArray from './isArray.js';\nimport matcher from './matcher.js';\nimport property from './property.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `_.identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nexport default function baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only `argCount` argument.\nexport default function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n_.iteratee = iteratee;\n","import _ from './underscore.js';\nimport baseIteratee from './_baseIteratee.js';\nimport iteratee from './iteratee.js';\n\n// The function we call internally to generate a callback. It invokes\n// `_.iteratee` if overridden, otherwise `baseIteratee`.\nexport default function cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the results of applying the `iteratee` to each element of `obj`.\n// In contrast to `_.map` it returns an object.\nexport default function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","// Predicate-generating function. Often useful outside of Underscore.\nexport default function noop(){}\n","import noop from './noop.js';\nimport get from './get.js';\n\n// Generates a function for a given object that returns a given property.\nexport default function propertyOf(obj) {\n if (obj == null) return noop;\n return function(path) {\n return get(obj, path);\n };\n}\n","import optimizeCb from './_optimizeCb.js';\n\n// Run a function **n** times.\nexport default function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n","// Return a random integer between `min` and `max` (inclusive).\nexport default function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n","// A (possibly faster) way to get the current timestamp as an integer.\nexport default Date.now || function() {\n return new Date().getTime();\n};\n","import keys from './keys.js';\n\n// Internal helper to generate functions for escaping and unescaping strings\n// to/from HTML interpolation.\nexport default function createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\n","// Internal list of HTML entities for escaping.\nexport default {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n};\n","import createEscaper from './_createEscaper.js';\nimport escapeMap from './_escapeMap.js';\n\n// Function for escaping strings to HTML interpolation.\nexport default createEscaper(escapeMap);\n","import createEscaper from './_createEscaper.js';\nimport unescapeMap from './_unescapeMap.js';\n\n// Function for unescaping strings from HTML interpolation.\nexport default createEscaper(unescapeMap);\n","import invert from './invert.js';\nimport escapeMap from './_escapeMap.js';\n\n// Internal list of HTML entities for unescaping.\nexport default invert(escapeMap);\n","import _ from './underscore.js';\n\n// By default, Underscore uses ERB-style template delimiters. Change the\n// following template settings to use alternative delimiters.\nexport default _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n","import defaults from './defaults.js';\nimport _ from './underscore.js';\nimport './templateSettings.js';\n\n// When customizing `_.templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nfunction escapeChar(match) {\n return '\\\\' + escapes[match];\n}\n\nvar bareIdentifier = /^\\s*(\\w|\\$)+\\s*$/;\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport default function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n var argument = settings.variable;\n if (argument) {\n if (!bareIdentifier.test(argument)) throw new Error(argument);\n } else {\n // If a variable is not specified, place data values in local scope.\n source = 'with(obj||{}){\\n' + source + '}\\n';\n argument = 'obj';\n }\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(argument, '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n","import isFunction from './isFunction.js';\nimport toPath from './_toPath.js';\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport default function result(obj, path, fallback) {\n path = toPath(path);\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n","// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport default function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n","import _ from './underscore.js';\n\n// Start chaining a wrapped Underscore object.\nexport default function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n","import baseCreate from './_baseCreate.js';\nimport isObject from './isObject.js';\n\n// Internal function to execute `sourceFunc` bound to `context` with optional\n// `args`. Determines whether to execute a function as a constructor or as a\n// normal function.\nexport default function executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n","import restArguments from './restArguments.js';\nimport executeBound from './_executeBound.js';\nimport _ from './underscore.js';\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. `_` acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.\nvar partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\nexport default partial;\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport executeBound from './_executeBound.js';\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally).\nexport default restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n","import createSizePropertyCheck from './_createSizePropertyCheck.js';\nimport getLength from './_getLength.js';\n\n// Internal helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nexport default createSizePropertyCheck(getLength);\n","import getLength from './_getLength.js';\nimport isArrayLike from './_isArrayLike.js';\nimport isArray from './isArray.js';\nimport isArguments from './isArguments.js';\n\n// Internal implementation of a recursive `flatten` function.\nexport default function flatten(input, depth, strict, output) {\n output = output || [];\n if (!depth && depth !== 0) {\n depth = Infinity;\n } else if (depth <= 0) {\n return output.concat(input);\n }\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (depth > 1) {\n flatten(value, depth - 1, strict, output);\n idx = output.length;\n } else {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport bind from './bind.js';\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport default restArguments(function(obj, keys) {\n keys = flatten(keys, false, false);\n var index = keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = keys[index];\n obj[key] = bind(obj[key], obj);\n }\n return obj;\n});\n","import has from './_has.js';\n\n// Memoize an expensive function by storing its results.\nexport default function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n","import restArguments from './restArguments.js';\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport default restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n","import partial from './partial.js';\nimport delay from './delay.js';\nimport _ from './underscore.js';\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport default partial(delay, _, 1);\n","import now from './now.js';\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport default function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n","import restArguments from './restArguments.js';\nimport now from './now.js';\n\n// When a sequence of calls of the returned function ends, the argument\n// function is triggered. The end of a sequence is defined by the `wait`\n// parameter. If `immediate` is passed, the argument function will be\n// triggered at the beginning of the sequence instead of at the end.\nexport default function debounce(func, wait, immediate) {\n var timeout, previous, args, result, context;\n\n var later = function() {\n var passed = now() - previous;\n if (wait > passed) {\n timeout = setTimeout(later, wait - passed);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n // This check is needed because `func` can recursively invoke `debounced`.\n if (!timeout) args = context = null;\n }\n };\n\n var debounced = restArguments(function(_args) {\n context = this;\n args = _args;\n previous = now();\n if (!timeout) {\n timeout = setTimeout(later, wait);\n if (immediate) result = func.apply(context, args);\n }\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = args = context = null;\n };\n\n return debounced;\n}\n","import partial from './partial.js';\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport default function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n","// Returns a negated version of the passed-in predicate.\nexport default function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n","// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport default function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n","// Returns a function that will only be executed on and after the Nth call.\nexport default function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n","// Returns a function that will only be executed up to (but not including) the\n// Nth call.\nexport default function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n","import partial from './partial.js';\nimport before from './before.js';\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport default partial(before, 2);\n","import cb from './_cb.js';\nimport keys from './keys.js';\n\n// Returns the first key on an object that passes a truth test.\nexport default function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Internal function to generate `_.findIndex` and `_.findLastIndex`.\nexport default function createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the first index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(1);\n","import createPredicateIndexFinder from './_createPredicateIndexFinder.js';\n\n// Returns the last index on an array-like that passes a truth test.\nexport default createPredicateIndexFinder(-1);\n","import cb from './_cb.js';\nimport getLength from './_getLength.js';\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport default function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n","import getLength from './_getLength.js';\nimport { slice } from './_setup.js';\nimport isNaN from './isNaN.js';\n\n// Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.\nexport default function createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n","import sortedIndex from './sortedIndex.js';\nimport findIndex from './findIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport default createIndexFinder(1, findIndex, sortedIndex);\n","import findLastIndex from './findLastIndex.js';\nimport createIndexFinder from './_createIndexFinder.js';\n\n// Return the position of the last occurrence of an item in an array,\n// or -1 if the item is not included in the array.\nexport default createIndexFinder(-1, findLastIndex);\n","import isArrayLike from './_isArrayLike.js';\nimport findIndex from './findIndex.js';\nimport findKey from './findKey.js';\n\n// Return the first value which passes a truth test.\nexport default function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\n","import find from './find.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.find`: getting the first\n// object containing specific `key:value` pairs.\nexport default function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n","import optimizeCb from './_optimizeCb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// The cornerstone for collection functions, an `each`\n// implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport default function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the results of applying the iteratee to each element.\nexport default function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\nimport optimizeCb from './_optimizeCb.js';\n\n// Internal helper to create a reducing function, iterating left or right.\nexport default function createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n","import createReduce from './_createReduce.js';\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport default createReduce(1);\n","import createReduce from './_createReduce.js';\n\n// The right-associative version of reduce, also known as `foldr`.\nexport default createReduce(-1);\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// Return all the elements that pass a truth test.\nexport default function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\n","import filter from './filter.js';\nimport negate from './negate.js';\nimport cb from './_cb.js';\n\n// Return all the elements for which a truth test fails.\nexport default function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine whether all of the elements pass a truth test.\nexport default function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\n","import cb from './_cb.js';\nimport isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Determine if at least one element in the object passes a truth test.\nexport default function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport indexOf from './indexOf.js';\n\n// Determine if the array or object contains a given item (using `===`).\nexport default function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport map from './map.js';\nimport deepGet from './_deepGet.js';\nimport toPath from './_toPath.js';\n\n// Invoke a method (with arguments) on every item in a collection.\nexport default restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else {\n path = toPath(path);\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n","import map from './map.js';\nimport property from './property.js';\n\n// Convenience version of a common use case of `_.map`: fetching a property.\nexport default function pluck(obj, key) {\n return map(obj, property(key));\n}\n","import filter from './filter.js';\nimport matcher from './matcher.js';\n\n// Convenience version of a common use case of `_.filter`: selecting only\n// objects containing specific `key:value` pairs.\nexport default function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the maximum element (or element-based computation).\nexport default function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport values from './values.js';\nimport cb from './_cb.js';\nimport each from './each.js';\n\n// Return the minimum element (or element-based computation).\nexport default function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n","import isArrayLike from './_isArrayLike.js';\nimport clone from './clone.js';\nimport values from './values.js';\nimport getLength from './_getLength.js';\nimport random from './random.js';\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `_.map`.\nexport default function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n","import sample from './sample.js';\n\n// Shuffle a collection.\nexport default function shuffle(obj) {\n return sample(obj, Infinity);\n}\n","import cb from './_cb.js';\nimport pluck from './pluck.js';\nimport map from './map.js';\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport default function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n","import cb from './_cb.js';\nimport each from './each.js';\n\n// An internal function used for aggregate \"group by\" operations.\nexport default function group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key].push(value); else result[key] = [value];\n});\n","import group from './_group.js';\n\n// Indexes the object's values by a criterion, similar to `_.groupBy`, but for\n// when you know that your index values will be unique.\nexport default group(function(result, value, key) {\n result[key] = value;\n});\n","import group from './_group.js';\nimport has from './_has.js';\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport default group(function(result, value, key) {\n if (has(result, key)) result[key]++; else result[key] = 1;\n});\n","import group from './_group.js';\n\n// Split a collection into two arrays: one whose elements all pass the given\n// truth test, and one whose elements all do not pass the truth test.\nexport default group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n","import isArray from './isArray.js';\nimport { slice } from './_setup.js';\nimport isString from './isString.js';\nimport isArrayLike from './_isArrayLike.js';\nimport map from './map.js';\nimport identity from './identity.js';\nimport values from './values.js';\n\n// Safely create a real, live array from anything iterable.\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\nexport default function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together.\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n","import isArrayLike from './_isArrayLike.js';\nimport keys from './keys.js';\n\n// Return the number of elements in a collection.\nexport default function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n","// Internal `_.pick` helper function to determine whether `key` is an enumerable\n// property name of `obj`.\nexport default function keyInObj(value, key, obj) {\n return key in obj;\n}\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport optimizeCb from './_optimizeCb.js';\nimport allKeys from './allKeys.js';\nimport keyInObj from './_keyInObj.js';\nimport flatten from './_flatten.js';\n\n// Return a copy of the object only containing the allowed properties.\nexport default restArguments(function(obj, keys) {\n var result = {}, iteratee = keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);\n keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n keys = flatten(keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n","import restArguments from './restArguments.js';\nimport isFunction from './isFunction.js';\nimport negate from './negate.js';\nimport map from './map.js';\nimport flatten from './_flatten.js';\nimport contains from './contains.js';\nimport pick from './pick.js';\n\n// Return a copy of the object without the disallowed properties.\nexport default restArguments(function(obj, keys) {\n var iteratee = keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (keys.length > 1) context = keys[1];\n } else {\n keys = map(flatten(keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n","import { slice } from './_setup.js';\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport default function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n","import initial from './initial.js';\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `_.map`.\nexport default function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\n","import { slice } from './_setup.js';\n\n// Returns everything but the first entry of the `array`. Especially useful on\n// the `arguments` object. Passing an **n** will return the rest N values in the\n// `array`.\nexport default function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\n","import rest from './rest.js';\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport default function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null || guard ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n","import filter from './filter.js';\n\n// Trim out all falsy values from an array.\nexport default function compact(array) {\n return filter(array, Boolean);\n}\n","import _flatten from './_flatten.js';\n\n// Flatten out an array, either recursively (by default), or up to `depth`.\n// Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.\nexport default function flatten(array, depth) {\n return _flatten(array, depth, false);\n}\n","import restArguments from './restArguments.js';\nimport flatten from './_flatten.js';\nimport filter from './filter.js';\nimport contains from './contains.js';\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport default restArguments(function(array, rest) {\n rest = flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n","import restArguments from './restArguments.js';\nimport difference from './difference.js';\n\n// Return a version of the array that does not contain the specified value(s).\nexport default restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n","import isBoolean from './isBoolean.js';\nimport cb from './_cb.js';\nimport getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport default function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport uniq from './uniq.js';\nimport flatten from './_flatten.js';\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport default restArguments(function(arrays) {\n return uniq(flatten(arrays, true, true));\n});\n","import getLength from './_getLength.js';\nimport contains from './contains.js';\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport default function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n","import max from './max.js';\nimport getLength from './_getLength.js';\nimport pluck from './pluck.js';\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport default function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n","import restArguments from './restArguments.js';\nimport unzip from './unzip.js';\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport default restArguments(unzip);\n","import getLength from './_getLength.js';\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of `_.pairs`.\nexport default function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n","// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport default function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n","import { slice } from './_setup.js';\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport default function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n","import _ from './underscore.js';\n\n// Helper function to continue chaining intermediate results.\nexport default function chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport functions from './functions.js';\nimport { push } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add your own custom functions to the Underscore object.\nexport default function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n","import _ from './underscore.js';\nimport each from './each.js';\nimport { ArrayProto } from './_setup.js';\nimport chainResult from './_chainResult.js';\n\n// Add all mutator `Array` functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) {\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) {\n delete obj[0];\n }\n }\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor `Array` functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n if (obj != null) obj = method.apply(obj, arguments);\n return chainResult(this, obj);\n };\n});\n\nexport default _;\n","// Default Export\n// ==============\n// In this module, we mix our bundled exports into the `_` object and export\n// the result. This is analogous to setting `module.exports = _` in CommonJS.\n// Hence, this module is also the entry point of our UMD bundle and the package\n// entry point for CommonJS and AMD users. In other words, this is (the source\n// of) the module you are interfacing with when you do any of the following:\n//\n// ```js\n// // CommonJS\n// var _ = require('underscore');\n//\n// // AMD\n// define(['underscore'], function(_) {...});\n//\n// // UMD in the browser\n// // _ is available as a global variable\n// ```\nimport * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API.\n_._ = _;\n// Export the Underscore API.\nexport default _;\n","// Backbone.js 1.4.0\n\n// (c) 2010-2019 Jeremy Ashkenas and DocumentCloud\n// Backbone may be freely distributed under the MIT license.\n// For all details and documentation:\n// http://backbonejs.org\n\n(function(factory) {\n\n // Establish the root object, `window` (`self`) in the browser, or `global` on the server.\n // We use `self` instead of `window` for `WebWorker` support.\n var root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global;\n\n // Set up Backbone appropriately for the environment. Start with AMD.\n if (typeof define === 'function' && define.amd) {\n define(['underscore', 'jquery', 'exports'], function(_, $, exports) {\n // Export global even in AMD case in case this script is loaded with\n // others that may still expect a global Backbone.\n root.Backbone = factory(root, exports, _, $);\n });\n\n // Next for Node.js or CommonJS. jQuery may not be needed as a module.\n } else if (typeof exports !== 'undefined') {\n var _ = require('underscore'), $;\n try { $ = require('jquery'); } catch (e) {}\n factory(root, exports, _, $);\n\n // Finally, as a browser global.\n } else {\n root.Backbone = factory(root, {}, root._, root.jQuery || root.Zepto || root.ender || root.$);\n }\n\n})(function(root, Backbone, _, $) {\n\n // Initial Setup\n // -------------\n\n // Save the previous value of the `Backbone` variable, so that it can be\n // restored later on, if `noConflict` is used.\n var previousBackbone = root.Backbone;\n\n // Create a local reference to a common array method we'll want to use later.\n var slice = Array.prototype.slice;\n\n // Current version of the library. Keep in sync with `package.json`.\n Backbone.VERSION = '1.4.0';\n\n // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns\n // the `$` variable.\n Backbone.$ = $;\n\n // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable\n // to its previous owner. Returns a reference to this Backbone object.\n Backbone.noConflict = function() {\n root.Backbone = previousBackbone;\n return this;\n };\n\n // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option\n // will fake `\"PATCH\"`, `\"PUT\"` and `\"DELETE\"` requests via the `_method` parameter and\n // set a `X-Http-Method-Override` header.\n Backbone.emulateHTTP = false;\n\n // Turn on `emulateJSON` to support legacy servers that can't deal with direct\n // `application/json` requests ... this will encode the body as\n // `application/x-www-form-urlencoded` instead and will send the model in a\n // form param named `model`.\n Backbone.emulateJSON = false;\n\n // Backbone.Events\n // ---------------\n\n // A module that can be mixed in to *any object* in order to provide it with\n // a custom event channel. You may bind a callback to an event with `on` or\n // remove with `off`; `trigger`-ing an event fires all callbacks in\n // succession.\n //\n // var object = {};\n // _.extend(object, Backbone.Events);\n // object.on('expand', function(){ alert('expanded'); });\n // object.trigger('expand');\n //\n var Events = Backbone.Events = {};\n\n // Regular expression used to split event strings.\n var eventSplitter = /\\s+/;\n\n // A private global variable to share between listeners and listenees.\n var _listening;\n\n // Iterates over the standard `event, callback` (as well as the fancy multiple\n // space-separated events `\"change blur\", callback` and jQuery-style event\n // maps `{event: callback}`).\n var eventsApi = function(iteratee, events, name, callback, opts) {\n var i = 0, names;\n if (name && typeof name === 'object') {\n // Handle event maps.\n if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;\n for (names = _.keys(name); i < names.length ; i++) {\n events = eventsApi(iteratee, events, names[i], name[names[i]], opts);\n }\n } else if (name && eventSplitter.test(name)) {\n // Handle space-separated event names by delegating them individually.\n for (names = name.split(eventSplitter); i < names.length; i++) {\n events = iteratee(events, names[i], callback, opts);\n }\n } else {\n // Finally, standard events.\n events = iteratee(events, name, callback, opts);\n }\n return events;\n };\n\n // Bind an event to a `callback` function. Passing `\"all\"` will bind\n // the callback to all events fired.\n Events.on = function(name, callback, context) {\n this._events = eventsApi(onApi, this._events || {}, name, callback, {\n context: context,\n ctx: this,\n listening: _listening\n });\n\n if (_listening) {\n var listeners = this._listeners || (this._listeners = {});\n listeners[_listening.id] = _listening;\n // Allow the listening to use a counter, instead of tracking\n // callbacks for library interop\n _listening.interop = false;\n }\n\n return this;\n };\n\n // Inversion-of-control versions of `on`. Tell *this* object to listen to\n // an event in another object... keeping track of what it's listening to\n // for easier unbinding later.\n Events.listenTo = function(obj, name, callback) {\n if (!obj) return this;\n var id = obj._listenId || (obj._listenId = _.uniqueId('l'));\n var listeningTo = this._listeningTo || (this._listeningTo = {});\n var listening = _listening = listeningTo[id];\n\n // This object is not listening to any other events on `obj` yet.\n // Setup the necessary references to track the listening callbacks.\n if (!listening) {\n this._listenId || (this._listenId = _.uniqueId('l'));\n listening = _listening = listeningTo[id] = new Listening(this, obj);\n }\n\n // Bind callbacks on obj.\n var error = tryCatchOn(obj, name, callback, this);\n _listening = void 0;\n\n if (error) throw error;\n // If the target obj is not Backbone.Events, track events manually.\n if (listening.interop) listening.on(name, callback);\n\n return this;\n };\n\n // The reducing API that adds a callback to the `events` object.\n var onApi = function(events, name, callback, options) {\n if (callback) {\n var handlers = events[name] || (events[name] = []);\n var context = options.context, ctx = options.ctx, listening = options.listening;\n if (listening) listening.count++;\n\n handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});\n }\n return events;\n };\n\n // An try-catch guarded #on function, to prevent poisoning the global\n // `_listening` variable.\n var tryCatchOn = function(obj, name, callback, context) {\n try {\n obj.on(name, callback, context);\n } catch (e) {\n return e;\n }\n };\n\n // Remove one or many callbacks. If `context` is null, removes all\n // callbacks with that function. If `callback` is null, removes all\n // callbacks for the event. If `name` is null, removes all bound\n // callbacks for all events.\n Events.off = function(name, callback, context) {\n if (!this._events) return this;\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: context,\n listeners: this._listeners\n });\n\n return this;\n };\n\n // Tell this object to stop listening to either specific events ... or\n // to every object it's currently listening to.\n Events.stopListening = function(obj, name, callback) {\n var listeningTo = this._listeningTo;\n if (!listeningTo) return this;\n\n var ids = obj ? [obj._listenId] : _.keys(listeningTo);\n for (var i = 0; i < ids.length; i++) {\n var listening = listeningTo[ids[i]];\n\n // If listening doesn't exist, this object is not currently\n // listening to obj. Break out early.\n if (!listening) break;\n\n listening.obj.off(name, callback, this);\n if (listening.interop) listening.off(name, callback);\n }\n if (_.isEmpty(listeningTo)) this._listeningTo = void 0;\n\n return this;\n };\n\n // The reducing API that removes a callback from the `events` object.\n var offApi = function(events, name, callback, options) {\n if (!events) return;\n\n var context = options.context, listeners = options.listeners;\n var i = 0, names;\n\n // Delete all event listeners and \"drop\" events.\n if (!name && !context && !callback) {\n for (names = _.keys(listeners); i < names.length; i++) {\n listeners[names[i]].cleanup();\n }\n return;\n }\n\n names = name ? [name] : _.keys(events);\n for (; i < names.length; i++) {\n name = names[i];\n var handlers = events[name];\n\n // Bail out if there are no events stored.\n if (!handlers) break;\n\n // Find any remaining events.\n var remaining = [];\n for (var j = 0; j < handlers.length; j++) {\n var handler = handlers[j];\n if (\n callback && callback !== handler.callback &&\n callback !== handler.callback._callback ||\n context && context !== handler.context\n ) {\n remaining.push(handler);\n } else {\n var listening = handler.listening;\n if (listening) listening.off(name, callback);\n }\n }\n\n // Replace events if there are any remaining. Otherwise, clean up.\n if (remaining.length) {\n events[name] = remaining;\n } else {\n delete events[name];\n }\n }\n\n return events;\n };\n\n // Bind an event to only be triggered a single time. After the first time\n // the callback is invoked, its listener will be removed. If multiple events\n // are passed in using the space-separated syntax, the handler will fire\n // once for each event, not once for a combination of all events.\n Events.once = function(name, callback, context) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.off.bind(this));\n if (typeof name === 'string' && context == null) callback = void 0;\n return this.on(events, callback, context);\n };\n\n // Inversion-of-control versions of `once`.\n Events.listenToOnce = function(obj, name, callback) {\n // Map the event into a `{event: once}` object.\n var events = eventsApi(onceMap, {}, name, callback, this.stopListening.bind(this, obj));\n return this.listenTo(obj, events);\n };\n\n // Reduces the event callbacks into a map of `{event: onceWrapper}`.\n // `offer` unbinds the `onceWrapper` after it has been called.\n var onceMap = function(map, name, callback, offer) {\n if (callback) {\n var once = map[name] = _.once(function() {\n offer(name, once);\n callback.apply(this, arguments);\n });\n once._callback = callback;\n }\n return map;\n };\n\n // Trigger one or many events, firing all bound callbacks. Callbacks are\n // passed the same arguments as `trigger` is, apart from the event name\n // (unless you're listening on `\"all\"`, which will cause your callback to\n // receive the true name of the event as the first argument).\n Events.trigger = function(name) {\n if (!this._events) return this;\n\n var length = Math.max(0, arguments.length - 1);\n var args = Array(length);\n for (var i = 0; i < length; i++) args[i] = arguments[i + 1];\n\n eventsApi(triggerApi, this._events, name, void 0, args);\n return this;\n };\n\n // Handles triggering the appropriate event callbacks.\n var triggerApi = function(objEvents, name, callback, args) {\n if (objEvents) {\n var events = objEvents[name];\n var allEvents = objEvents.all;\n if (events && allEvents) allEvents = allEvents.slice();\n if (events) triggerEvents(events, args);\n if (allEvents) triggerEvents(allEvents, [name].concat(args));\n }\n return objEvents;\n };\n\n // A difficult-to-believe, but optimized internal dispatch function for\n // triggering events. Tries to keep the usual cases speedy (most internal\n // Backbone events have 3 arguments).\n var triggerEvents = function(events, args) {\n var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];\n switch (args.length) {\n case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;\n case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;\n case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;\n case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;\n default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;\n }\n };\n\n // A listening class that tracks and cleans up memory bindings\n // when all callbacks have been offed.\n var Listening = function(listener, obj) {\n this.id = listener._listenId;\n this.listener = listener;\n this.obj = obj;\n this.interop = true;\n this.count = 0;\n this._events = void 0;\n };\n\n Listening.prototype.on = Events.on;\n\n // Offs a callback (or several).\n // Uses an optimized counter if the listenee uses Backbone.Events.\n // Otherwise, falls back to manual tracking to support events\n // library interop.\n Listening.prototype.off = function(name, callback) {\n var cleanup;\n if (this.interop) {\n this._events = eventsApi(offApi, this._events, name, callback, {\n context: void 0,\n listeners: void 0\n });\n cleanup = !this._events;\n } else {\n this.count--;\n cleanup = this.count === 0;\n }\n if (cleanup) this.cleanup();\n };\n\n // Cleans up memory bindings between the listener and the listenee.\n Listening.prototype.cleanup = function() {\n delete this.listener._listeningTo[this.obj._listenId];\n if (!this.interop) delete this.obj._listeners[this.id];\n };\n\n // Aliases for backwards compatibility.\n Events.bind = Events.on;\n Events.unbind = Events.off;\n\n // Allow the `Backbone` object to serve as a global event bus, for folks who\n // want global \"pubsub\" in a convenient place.\n _.extend(Backbone, Events);\n\n // Backbone.Model\n // --------------\n\n // Backbone **Models** are the basic data object in the framework --\n // frequently representing a row in a table in a database on your server.\n // A discrete chunk of data and a bunch of useful, related methods for\n // performing computations and transformations on that data.\n\n // Create a new model with the specified attributes. A client id (`cid`)\n // is automatically generated and assigned for you.\n var Model = Backbone.Model = function(attributes, options) {\n var attrs = attributes || {};\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n this.cid = _.uniqueId(this.cidPrefix);\n this.attributes = {};\n if (options.collection) this.collection = options.collection;\n if (options.parse) attrs = this.parse(attrs, options) || {};\n var defaults = _.result(this, 'defaults');\n attrs = _.defaults(_.extend({}, defaults, attrs), defaults);\n this.set(attrs, options);\n this.changed = {};\n this.initialize.apply(this, arguments);\n };\n\n // Attach all inheritable methods to the Model prototype.\n _.extend(Model.prototype, Events, {\n\n // A hash of attributes whose current and previous value differ.\n changed: null,\n\n // The value returned during the last failed validation.\n validationError: null,\n\n // The default name for the JSON `id` attribute is `\"id\"`. MongoDB and\n // CouchDB users may want to set this to `\"_id\"`.\n idAttribute: 'id',\n\n // The prefix is used to create the client id which is used to identify models locally.\n // You may want to override this if you're experiencing name clashes with model ids.\n cidPrefix: 'c',\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Model.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Return a copy of the model's `attributes` object.\n toJSON: function(options) {\n return _.clone(this.attributes);\n },\n\n // Proxy `Backbone.sync` by default -- but override this if you need\n // custom syncing semantics for *this* particular model.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Get the value of an attribute.\n get: function(attr) {\n return this.attributes[attr];\n },\n\n // Get the HTML-escaped value of an attribute.\n escape: function(attr) {\n return _.escape(this.get(attr));\n },\n\n // Returns `true` if the attribute contains a value that is not null\n // or undefined.\n has: function(attr) {\n return this.get(attr) != null;\n },\n\n // Special-cased proxy to underscore's `_.matches` method.\n matches: function(attrs) {\n return !!_.iteratee(attrs, this)(this.attributes);\n },\n\n // Set a hash of model attributes on the object, firing `\"change\"`. This is\n // the core primitive operation of a model, updating the data and notifying\n // anyone who needs to know about the change in state. The heart of the beast.\n set: function(key, val, options) {\n if (key == null) return this;\n\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options || (options = {});\n\n // Run validation.\n if (!this._validate(attrs, options)) return false;\n\n // Extract attributes and options.\n var unset = options.unset;\n var silent = options.silent;\n var changes = [];\n var changing = this._changing;\n this._changing = true;\n\n if (!changing) {\n this._previousAttributes = _.clone(this.attributes);\n this.changed = {};\n }\n\n var current = this.attributes;\n var changed = this.changed;\n var prev = this._previousAttributes;\n\n // For each `set` attribute, update or delete the current value.\n for (var attr in attrs) {\n val = attrs[attr];\n if (!_.isEqual(current[attr], val)) changes.push(attr);\n if (!_.isEqual(prev[attr], val)) {\n changed[attr] = val;\n } else {\n delete changed[attr];\n }\n unset ? delete current[attr] : current[attr] = val;\n }\n\n // Update the `id`.\n if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);\n\n // Trigger all relevant attribute changes.\n if (!silent) {\n if (changes.length) this._pending = options;\n for (var i = 0; i < changes.length; i++) {\n this.trigger('change:' + changes[i], this, current[changes[i]], options);\n }\n }\n\n // You might be wondering why there's a `while` loop here. Changes can\n // be recursively nested within `\"change\"` events.\n if (changing) return this;\n if (!silent) {\n while (this._pending) {\n options = this._pending;\n this._pending = false;\n this.trigger('change', this, options);\n }\n }\n this._pending = false;\n this._changing = false;\n return this;\n },\n\n // Remove an attribute from the model, firing `\"change\"`. `unset` is a noop\n // if the attribute doesn't exist.\n unset: function(attr, options) {\n return this.set(attr, void 0, _.extend({}, options, {unset: true}));\n },\n\n // Clear all attributes on the model, firing `\"change\"`.\n clear: function(options) {\n var attrs = {};\n for (var key in this.attributes) attrs[key] = void 0;\n return this.set(attrs, _.extend({}, options, {unset: true}));\n },\n\n // Determine if the model has changed since the last `\"change\"` event.\n // If you specify an attribute name, determine if that attribute has changed.\n hasChanged: function(attr) {\n if (attr == null) return !_.isEmpty(this.changed);\n return _.has(this.changed, attr);\n },\n\n // Return an object containing all the attributes that have changed, or\n // false if there are no changed attributes. Useful for determining what\n // parts of a view need to be updated and/or what attributes need to be\n // persisted to the server. Unset attributes will be set to undefined.\n // You can also pass an attributes object to diff against the model,\n // determining if there *would be* a change.\n changedAttributes: function(diff) {\n if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;\n var old = this._changing ? this._previousAttributes : this.attributes;\n var changed = {};\n var hasChanged;\n for (var attr in diff) {\n var val = diff[attr];\n if (_.isEqual(old[attr], val)) continue;\n changed[attr] = val;\n hasChanged = true;\n }\n return hasChanged ? changed : false;\n },\n\n // Get the previous value of an attribute, recorded at the time the last\n // `\"change\"` event was fired.\n previous: function(attr) {\n if (attr == null || !this._previousAttributes) return null;\n return this._previousAttributes[attr];\n },\n\n // Get all of the attributes of the model at the time of the previous\n // `\"change\"` event.\n previousAttributes: function() {\n return _.clone(this._previousAttributes);\n },\n\n // Fetch the model from the server, merging the response with the model's\n // local attributes. Any changed attributes will trigger a \"change\" event.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var model = this;\n var success = options.success;\n options.success = function(resp) {\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (!model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Set a hash of model attributes, and sync the model to the server.\n // If the server returns an attributes hash that differs, the model's\n // state will be `set` again.\n save: function(key, val, options) {\n // Handle both `\"key\", value` and `{key: value}` -style arguments.\n var attrs;\n if (key == null || typeof key === 'object') {\n attrs = key;\n options = val;\n } else {\n (attrs = {})[key] = val;\n }\n\n options = _.extend({validate: true, parse: true}, options);\n var wait = options.wait;\n\n // If we're not waiting and attributes exist, save acts as\n // `set(attr).save(null, opts)` with validation. Otherwise, check if\n // the model will be valid when the attributes, if any, are set.\n if (attrs && !wait) {\n if (!this.set(attrs, options)) return false;\n } else if (!this._validate(attrs, options)) {\n return false;\n }\n\n // After a successful server-side save, the client is (optionally)\n // updated with the server-side state.\n var model = this;\n var success = options.success;\n var attributes = this.attributes;\n options.success = function(resp) {\n // Ensure attributes are restored during synchronous saves.\n model.attributes = attributes;\n var serverAttrs = options.parse ? model.parse(resp, options) : resp;\n if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);\n if (serverAttrs && !model.set(serverAttrs, options)) return false;\n if (success) success.call(options.context, model, resp, options);\n model.trigger('sync', model, resp, options);\n };\n wrapError(this, options);\n\n // Set temporary attributes if `{wait: true}` to properly find new ids.\n if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);\n\n var method = this.isNew() ? 'create' : options.patch ? 'patch' : 'update';\n if (method === 'patch' && !options.attrs) options.attrs = attrs;\n var xhr = this.sync(method, this, options);\n\n // Restore attributes.\n this.attributes = attributes;\n\n return xhr;\n },\n\n // Destroy this model on the server if it was already persisted.\n // Optimistically removes the model from its collection, if it has one.\n // If `wait: true` is passed, waits for the server to respond before removal.\n destroy: function(options) {\n options = options ? _.clone(options) : {};\n var model = this;\n var success = options.success;\n var wait = options.wait;\n\n var destroy = function() {\n model.stopListening();\n model.trigger('destroy', model, model.collection, options);\n };\n\n options.success = function(resp) {\n if (wait) destroy();\n if (success) success.call(options.context, model, resp, options);\n if (!model.isNew()) model.trigger('sync', model, resp, options);\n };\n\n var xhr = false;\n if (this.isNew()) {\n _.defer(options.success);\n } else {\n wrapError(this, options);\n xhr = this.sync('delete', this, options);\n }\n if (!wait) destroy();\n return xhr;\n },\n\n // Default URL for the model's representation on the server -- if you're\n // using Backbone's restful methods, override this to change the endpoint\n // that will be called.\n url: function() {\n var base =\n _.result(this, 'urlRoot') ||\n _.result(this.collection, 'url') ||\n urlError();\n if (this.isNew()) return base;\n var id = this.get(this.idAttribute);\n return base.replace(/[^\\/]$/, '$&/') + encodeURIComponent(id);\n },\n\n // **parse** converts a response into the hash of attributes to be `set` on\n // the model. The default implementation is just to pass the response along.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new model with identical attributes to this one.\n clone: function() {\n return new this.constructor(this.attributes);\n },\n\n // A model is new if it has never been saved to the server, and lacks an id.\n isNew: function() {\n return !this.has(this.idAttribute);\n },\n\n // Check if the model is currently in a valid state.\n isValid: function(options) {\n return this._validate({}, _.extend({}, options, {validate: true}));\n },\n\n // Run validation against the next complete set of model attributes,\n // returning `true` if all is well. Otherwise, fire an `\"invalid\"` event.\n _validate: function(attrs, options) {\n if (!options.validate || !this.validate) return true;\n attrs = _.extend({}, this.attributes, attrs);\n var error = this.validationError = this.validate(attrs, options) || null;\n if (!error) return true;\n this.trigger('invalid', this, error, _.extend(options, {validationError: error}));\n return false;\n }\n\n });\n\n // Backbone.Collection\n // -------------------\n\n // If models tend to represent a single row of data, a Backbone Collection is\n // more analogous to a table full of data ... or a small slice or page of that\n // table, or a collection of rows that belong together for a particular reason\n // -- all of the messages in this particular folder, all of the documents\n // belonging to this particular author, and so on. Collections maintain\n // indexes of their models, both in order, and for lookup by `id`.\n\n // Create a new **Collection**, perhaps to contain a specific type of `model`.\n // If a `comparator` is specified, the Collection will maintain\n // its models in sort order, as they're added and removed.\n var Collection = Backbone.Collection = function(models, options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.model) this.model = options.model;\n if (options.comparator !== void 0) this.comparator = options.comparator;\n this._reset();\n this.initialize.apply(this, arguments);\n if (models) this.reset(models, _.extend({silent: true}, options));\n };\n\n // Default options for `Collection#set`.\n var setOptions = {add: true, remove: true, merge: true};\n var addOptions = {add: true, remove: false};\n\n // Splices `insert` into `array` at index `at`.\n var splice = function(array, insert, at) {\n at = Math.min(Math.max(at, 0), array.length);\n var tail = Array(array.length - at);\n var length = insert.length;\n var i;\n for (i = 0; i < tail.length; i++) tail[i] = array[i + at];\n for (i = 0; i < length; i++) array[i + at] = insert[i];\n for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];\n };\n\n // Define the Collection's inheritable methods.\n _.extend(Collection.prototype, Events, {\n\n // The default model for a collection is just a **Backbone.Model**.\n // This should be overridden in most cases.\n model: Model,\n\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Collection.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // The JSON representation of a Collection is an array of the\n // models' attributes.\n toJSON: function(options) {\n return this.map(function(model) { return model.toJSON(options); });\n },\n\n // Proxy `Backbone.sync` by default.\n sync: function() {\n return Backbone.sync.apply(this, arguments);\n },\n\n // Add a model, or list of models to the set. `models` may be Backbone\n // Models or raw JavaScript objects to be converted to Models, or any\n // combination of the two.\n add: function(models, options) {\n return this.set(models, _.extend({merge: false}, options, addOptions));\n },\n\n // Remove a model, or a list of models from the set.\n remove: function(models, options) {\n options = _.extend({}, options);\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n var removed = this._removeModels(models, options);\n if (!options.silent && removed.length) {\n options.changes = {added: [], merged: [], removed: removed};\n this.trigger('update', this, options);\n }\n return singular ? removed[0] : removed;\n },\n\n // Update a collection by `set`-ing a new list of models, adding new ones,\n // removing models that are no longer present, and merging models that\n // already exist in the collection, as necessary. Similar to **Model#set**,\n // the core operation for updating the data contained by the collection.\n set: function(models, options) {\n if (models == null) return;\n\n options = _.extend({}, setOptions, options);\n if (options.parse && !this._isModel(models)) {\n models = this.parse(models, options) || [];\n }\n\n var singular = !_.isArray(models);\n models = singular ? [models] : models.slice();\n\n var at = options.at;\n if (at != null) at = +at;\n if (at > this.length) at = this.length;\n if (at < 0) at += this.length + 1;\n\n var set = [];\n var toAdd = [];\n var toMerge = [];\n var toRemove = [];\n var modelMap = {};\n\n var add = options.add;\n var merge = options.merge;\n var remove = options.remove;\n\n var sort = false;\n var sortable = this.comparator && at == null && options.sort !== false;\n var sortAttr = _.isString(this.comparator) ? this.comparator : null;\n\n // Turn bare objects into model references, and prevent invalid models\n // from being added.\n var model, i;\n for (i = 0; i < models.length; i++) {\n model = models[i];\n\n // If a duplicate is found, prevent it from being added and\n // optionally merge it into the existing model.\n var existing = this.get(model);\n if (existing) {\n if (merge && model !== existing) {\n var attrs = this._isModel(model) ? model.attributes : model;\n if (options.parse) attrs = existing.parse(attrs, options);\n existing.set(attrs, options);\n toMerge.push(existing);\n if (sortable && !sort) sort = existing.hasChanged(sortAttr);\n }\n if (!modelMap[existing.cid]) {\n modelMap[existing.cid] = true;\n set.push(existing);\n }\n models[i] = existing;\n\n // If this is a new, valid model, push it to the `toAdd` list.\n } else if (add) {\n model = models[i] = this._prepareModel(model, options);\n if (model) {\n toAdd.push(model);\n this._addReference(model, options);\n modelMap[model.cid] = true;\n set.push(model);\n }\n }\n }\n\n // Remove stale models.\n if (remove) {\n for (i = 0; i < this.length; i++) {\n model = this.models[i];\n if (!modelMap[model.cid]) toRemove.push(model);\n }\n if (toRemove.length) this._removeModels(toRemove, options);\n }\n\n // See if sorting is needed, update `length` and splice in new models.\n var orderChanged = false;\n var replace = !sortable && add && remove;\n if (set.length && replace) {\n orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {\n return m !== set[index];\n });\n this.models.length = 0;\n splice(this.models, set, 0);\n this.length = this.models.length;\n } else if (toAdd.length) {\n if (sortable) sort = true;\n splice(this.models, toAdd, at == null ? this.length : at);\n this.length = this.models.length;\n }\n\n // Silently sort the collection if appropriate.\n if (sort) this.sort({silent: true});\n\n // Unless silenced, it's time to fire all appropriate add/sort/update events.\n if (!options.silent) {\n for (i = 0; i < toAdd.length; i++) {\n if (at != null) options.index = at + i;\n model = toAdd[i];\n model.trigger('add', model, this, options);\n }\n if (sort || orderChanged) this.trigger('sort', this, options);\n if (toAdd.length || toRemove.length || toMerge.length) {\n options.changes = {\n added: toAdd,\n removed: toRemove,\n merged: toMerge\n };\n this.trigger('update', this, options);\n }\n }\n\n // Return the added (or merged) model (or models).\n return singular ? models[0] : models;\n },\n\n // When you have more items than you want to add or remove individually,\n // you can reset the entire set with a new list of models, without firing\n // any granular `add` or `remove` events. Fires `reset` when finished.\n // Useful for bulk operations and optimizations.\n reset: function(models, options) {\n options = options ? _.clone(options) : {};\n for (var i = 0; i < this.models.length; i++) {\n this._removeReference(this.models[i], options);\n }\n options.previousModels = this.models;\n this._reset();\n models = this.add(models, _.extend({silent: true}, options));\n if (!options.silent) this.trigger('reset', this, options);\n return models;\n },\n\n // Add a model to the end of the collection.\n push: function(model, options) {\n return this.add(model, _.extend({at: this.length}, options));\n },\n\n // Remove a model from the end of the collection.\n pop: function(options) {\n var model = this.at(this.length - 1);\n return this.remove(model, options);\n },\n\n // Add a model to the beginning of the collection.\n unshift: function(model, options) {\n return this.add(model, _.extend({at: 0}, options));\n },\n\n // Remove a model from the beginning of the collection.\n shift: function(options) {\n var model = this.at(0);\n return this.remove(model, options);\n },\n\n // Slice out a sub-array of models from the collection.\n slice: function() {\n return slice.apply(this.models, arguments);\n },\n\n // Get a model from the set by id, cid, model object with id or cid\n // properties, or an attributes object that is transformed through modelId.\n get: function(obj) {\n if (obj == null) return void 0;\n return this._byId[obj] ||\n this._byId[this.modelId(this._isModel(obj) ? obj.attributes : obj)] ||\n obj.cid && this._byId[obj.cid];\n },\n\n // Returns `true` if the model is in the collection.\n has: function(obj) {\n return this.get(obj) != null;\n },\n\n // Get the model at the given index.\n at: function(index) {\n if (index < 0) index += this.length;\n return this.models[index];\n },\n\n // Return models with matching attributes. Useful for simple cases of\n // `filter`.\n where: function(attrs, first) {\n return this[first ? 'find' : 'filter'](attrs);\n },\n\n // Return the first model with matching attributes. Useful for simple cases\n // of `find`.\n findWhere: function(attrs) {\n return this.where(attrs, true);\n },\n\n // Force the collection to re-sort itself. You don't need to call this under\n // normal circumstances, as the set will maintain sort order as each item\n // is added.\n sort: function(options) {\n var comparator = this.comparator;\n if (!comparator) throw new Error('Cannot sort a set without a comparator');\n options || (options = {});\n\n var length = comparator.length;\n if (_.isFunction(comparator)) comparator = comparator.bind(this);\n\n // Run sort based on type of `comparator`.\n if (length === 1 || _.isString(comparator)) {\n this.models = this.sortBy(comparator);\n } else {\n this.models.sort(comparator);\n }\n if (!options.silent) this.trigger('sort', this, options);\n return this;\n },\n\n // Pluck an attribute from each model in the collection.\n pluck: function(attr) {\n return this.map(attr + '');\n },\n\n // Fetch the default set of models for this collection, resetting the\n // collection when they arrive. If `reset: true` is passed, the response\n // data will be passed through the `reset` method instead of `set`.\n fetch: function(options) {\n options = _.extend({parse: true}, options);\n var success = options.success;\n var collection = this;\n options.success = function(resp) {\n var method = options.reset ? 'reset' : 'set';\n collection[method](resp, options);\n if (success) success.call(options.context, collection, resp, options);\n collection.trigger('sync', collection, resp, options);\n };\n wrapError(this, options);\n return this.sync('read', this, options);\n },\n\n // Create a new instance of a model in this collection. Add the model to the\n // collection immediately, unless `wait: true` is passed, in which case we\n // wait for the server to agree.\n create: function(model, options) {\n options = options ? _.clone(options) : {};\n var wait = options.wait;\n model = this._prepareModel(model, options);\n if (!model) return false;\n if (!wait) this.add(model, options);\n var collection = this;\n var success = options.success;\n options.success = function(m, resp, callbackOpts) {\n if (wait) collection.add(m, callbackOpts);\n if (success) success.call(callbackOpts.context, m, resp, callbackOpts);\n };\n model.save(null, options);\n return model;\n },\n\n // **parse** converts a response into a list of models to be added to the\n // collection. The default implementation is just to pass it through.\n parse: function(resp, options) {\n return resp;\n },\n\n // Create a new collection with an identical list of models as this one.\n clone: function() {\n return new this.constructor(this.models, {\n model: this.model,\n comparator: this.comparator\n });\n },\n\n // Define how to uniquely identify models in the collection.\n modelId: function(attrs) {\n return attrs[this.model.prototype.idAttribute || 'id'];\n },\n\n // Get an iterator of all models in this collection.\n values: function() {\n return new CollectionIterator(this, ITERATOR_VALUES);\n },\n\n // Get an iterator of all model IDs in this collection.\n keys: function() {\n return new CollectionIterator(this, ITERATOR_KEYS);\n },\n\n // Get an iterator of all [ID, model] tuples in this collection.\n entries: function() {\n return new CollectionIterator(this, ITERATOR_KEYSVALUES);\n },\n\n // Private method to reset all internal state. Called when the collection\n // is first initialized or reset.\n _reset: function() {\n this.length = 0;\n this.models = [];\n this._byId = {};\n },\n\n // Prepare a hash of attributes (or other model) to be added to this\n // collection.\n _prepareModel: function(attrs, options) {\n if (this._isModel(attrs)) {\n if (!attrs.collection) attrs.collection = this;\n return attrs;\n }\n options = options ? _.clone(options) : {};\n options.collection = this;\n var model = new this.model(attrs, options);\n if (!model.validationError) return model;\n this.trigger('invalid', this, model.validationError, options);\n return false;\n },\n\n // Internal method called by both remove and set.\n _removeModels: function(models, options) {\n var removed = [];\n for (var i = 0; i < models.length; i++) {\n var model = this.get(models[i]);\n if (!model) continue;\n\n var index = this.indexOf(model);\n this.models.splice(index, 1);\n this.length--;\n\n // Remove references before triggering 'remove' event to prevent an\n // infinite loop. #3693\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n\n if (!options.silent) {\n options.index = index;\n model.trigger('remove', model, this, options);\n }\n\n removed.push(model);\n this._removeReference(model, options);\n }\n return removed;\n },\n\n // Method for checking whether an object should be considered a model for\n // the purposes of adding to the collection.\n _isModel: function(model) {\n return model instanceof Model;\n },\n\n // Internal method to create a model's ties to a collection.\n _addReference: function(model, options) {\n this._byId[model.cid] = model;\n var id = this.modelId(model.attributes);\n if (id != null) this._byId[id] = model;\n model.on('all', this._onModelEvent, this);\n },\n\n // Internal method to sever a model's ties to a collection.\n _removeReference: function(model, options) {\n delete this._byId[model.cid];\n var id = this.modelId(model.attributes);\n if (id != null) delete this._byId[id];\n if (this === model.collection) delete model.collection;\n model.off('all', this._onModelEvent, this);\n },\n\n // Internal method called every time a model in the set fires an event.\n // Sets need to update their indexes when models change ids. All other\n // events simply proxy through. \"add\" and \"remove\" events that originate\n // in other collections are ignored.\n _onModelEvent: function(event, model, collection, options) {\n if (model) {\n if ((event === 'add' || event === 'remove') && collection !== this) return;\n if (event === 'destroy') this.remove(model, options);\n if (event === 'change') {\n var prevId = this.modelId(model.previousAttributes());\n var id = this.modelId(model.attributes);\n if (prevId !== id) {\n if (prevId != null) delete this._byId[prevId];\n if (id != null) this._byId[id] = model;\n }\n }\n }\n this.trigger.apply(this, arguments);\n }\n\n });\n\n // Defining an @@iterator method implements JavaScript's Iterable protocol.\n // In modern ES2015 browsers, this value is found at Symbol.iterator.\n /* global Symbol */\n var $$iterator = typeof Symbol === 'function' && Symbol.iterator;\n if ($$iterator) {\n Collection.prototype[$$iterator] = Collection.prototype.values;\n }\n\n // CollectionIterator\n // ------------------\n\n // A CollectionIterator implements JavaScript's Iterator protocol, allowing the\n // use of `for of` loops in modern browsers and interoperation between\n // Backbone.Collection and other JavaScript functions and third-party libraries\n // which can operate on Iterables.\n var CollectionIterator = function(collection, kind) {\n this._collection = collection;\n this._kind = kind;\n this._index = 0;\n };\n\n // This \"enum\" defines the three possible kinds of values which can be emitted\n // by a CollectionIterator that correspond to the values(), keys() and entries()\n // methods on Collection, respectively.\n var ITERATOR_VALUES = 1;\n var ITERATOR_KEYS = 2;\n var ITERATOR_KEYSVALUES = 3;\n\n // All Iterators should themselves be Iterable.\n if ($$iterator) {\n CollectionIterator.prototype[$$iterator] = function() {\n return this;\n };\n }\n\n CollectionIterator.prototype.next = function() {\n if (this._collection) {\n\n // Only continue iterating if the iterated collection is long enough.\n if (this._index < this._collection.length) {\n var model = this._collection.at(this._index);\n this._index++;\n\n // Construct a value depending on what kind of values should be iterated.\n var value;\n if (this._kind === ITERATOR_VALUES) {\n value = model;\n } else {\n var id = this._collection.modelId(model.attributes);\n if (this._kind === ITERATOR_KEYS) {\n value = id;\n } else { // ITERATOR_KEYSVALUES\n value = [id, model];\n }\n }\n return {value: value, done: false};\n }\n\n // Once exhausted, remove the reference to the collection so future\n // calls to the next method always return done.\n this._collection = void 0;\n }\n\n return {value: void 0, done: true};\n };\n\n // Backbone.View\n // -------------\n\n // Backbone Views are almost more convention than they are actual code. A View\n // is simply a JavaScript object that represents a logical chunk of UI in the\n // DOM. This might be a single item, an entire list, a sidebar or panel, or\n // even the surrounding frame which wraps your whole app. Defining a chunk of\n // UI as a **View** allows you to define your DOM events declaratively, without\n // having to worry about render order ... and makes it easy for the view to\n // react to specific changes in the state of your models.\n\n // Creating a Backbone.View creates its initial element outside of the DOM,\n // if an existing element is not provided...\n var View = Backbone.View = function(options) {\n this.cid = _.uniqueId('view');\n this.preinitialize.apply(this, arguments);\n _.extend(this, _.pick(options, viewOptions));\n this._ensureElement();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regex to split keys for `delegate`.\n var delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\n\n // List of view options to be set as properties.\n var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];\n\n // Set up all inheritable **Backbone.View** properties and methods.\n _.extend(View.prototype, Events, {\n\n // The default `tagName` of a View's element is `\"div\"`.\n tagName: 'div',\n\n // jQuery delegate for element lookup, scoped to DOM elements within the\n // current view. This should be preferred to global lookups where possible.\n $: function(selector) {\n return this.$el.find(selector);\n },\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the View\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // **render** is the core function that your view should override, in order\n // to populate its element (`this.el`), with the appropriate HTML. The\n // convention is for **render** to always return `this`.\n render: function() {\n return this;\n },\n\n // Remove this view by taking the element out of the DOM, and removing any\n // applicable Backbone.Events listeners.\n remove: function() {\n this._removeElement();\n this.stopListening();\n return this;\n },\n\n // Remove this view's element from the document and all event listeners\n // attached to it. Exposed for subclasses using an alternative DOM\n // manipulation API.\n _removeElement: function() {\n this.$el.remove();\n },\n\n // Change the view's element (`this.el` property) and re-delegate the\n // view's events on the new element.\n setElement: function(element) {\n this.undelegateEvents();\n this._setElement(element);\n this.delegateEvents();\n return this;\n },\n\n // Creates the `this.el` and `this.$el` references for this view using the\n // given `el`. `el` can be a CSS selector or an HTML string, a jQuery\n // context or an element. Subclasses can override this to utilize an\n // alternative DOM manipulation API and are only required to set the\n // `this.el` property.\n _setElement: function(el) {\n this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);\n this.el = this.$el[0];\n },\n\n // Set callbacks, where `this.events` is a hash of\n //\n // *{\"event selector\": \"callback\"}*\n //\n // {\n // 'mousedown .title': 'edit',\n // 'click .button': 'save',\n // 'click .open': function(e) { ... }\n // }\n //\n // pairs. Callbacks will be bound to the view, with `this` set properly.\n // Uses event delegation for efficiency.\n // Omitting the selector binds the event to `this.el`.\n delegateEvents: function(events) {\n events || (events = _.result(this, 'events'));\n if (!events) return this;\n this.undelegateEvents();\n for (var key in events) {\n var method = events[key];\n if (!_.isFunction(method)) method = this[method];\n if (!method) continue;\n var match = key.match(delegateEventSplitter);\n this.delegate(match[1], match[2], method.bind(this));\n }\n return this;\n },\n\n // Add a single event listener to the view's element (or a child element\n // using `selector`). This only works for delegate-able events: not `focus`,\n // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.\n delegate: function(eventName, selector, listener) {\n this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Clears all callbacks previously bound to the view by `delegateEvents`.\n // You usually don't need to use this, but may wish to if you have multiple\n // Backbone views attached to the same DOM element.\n undelegateEvents: function() {\n if (this.$el) this.$el.off('.delegateEvents' + this.cid);\n return this;\n },\n\n // A finer-grained `undelegateEvents` for removing a single delegated event.\n // `selector` and `listener` are both optional.\n undelegate: function(eventName, selector, listener) {\n this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);\n return this;\n },\n\n // Produces a DOM element to be assigned to your view. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _createElement: function(tagName) {\n return document.createElement(tagName);\n },\n\n // Ensure that the View has a DOM element to render into.\n // If `this.el` is a string, pass it through `$()`, take the first\n // matching element, and re-assign it to `el`. Otherwise, create\n // an element from the `id`, `className` and `tagName` properties.\n _ensureElement: function() {\n if (!this.el) {\n var attrs = _.extend({}, _.result(this, 'attributes'));\n if (this.id) attrs.id = _.result(this, 'id');\n if (this.className) attrs['class'] = _.result(this, 'className');\n this.setElement(this._createElement(_.result(this, 'tagName')));\n this._setAttributes(attrs);\n } else {\n this.setElement(_.result(this, 'el'));\n }\n },\n\n // Set attributes from a hash on this view's element. Exposed for\n // subclasses using an alternative DOM manipulation API.\n _setAttributes: function(attributes) {\n this.$el.attr(attributes);\n }\n\n });\n\n // Proxy Backbone class methods to Underscore functions, wrapping the model's\n // `attributes` object or collection's `models` array behind the scenes.\n //\n // collection.filter(function(model) { return model.get('age') > 10 });\n // collection.each(this.addView);\n //\n // `Function#apply` can be slow so we use the method's arg count, if we know it.\n var addMethod = function(base, length, method, attribute) {\n switch (length) {\n case 1: return function() {\n return base[method](this[attribute]);\n };\n case 2: return function(value) {\n return base[method](this[attribute], value);\n };\n case 3: return function(iteratee, context) {\n return base[method](this[attribute], cb(iteratee, this), context);\n };\n case 4: return function(iteratee, defaultVal, context) {\n return base[method](this[attribute], cb(iteratee, this), defaultVal, context);\n };\n default: return function() {\n var args = slice.call(arguments);\n args.unshift(this[attribute]);\n return base[method].apply(base, args);\n };\n }\n };\n\n var addUnderscoreMethods = function(Class, base, methods, attribute) {\n _.each(methods, function(length, method) {\n if (base[method]) Class.prototype[method] = addMethod(base, length, method, attribute);\n });\n };\n\n // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.\n var cb = function(iteratee, instance) {\n if (_.isFunction(iteratee)) return iteratee;\n if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);\n if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };\n return iteratee;\n };\n var modelMatcher = function(attrs) {\n var matcher = _.matches(attrs);\n return function(model) {\n return matcher(model.attributes);\n };\n };\n\n // Underscore methods that we want to implement on the Collection.\n // 90% of the core usefulness of Backbone Collections is actually implemented\n // right here:\n var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,\n foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,\n select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,\n contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,\n head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,\n without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,\n isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,\n sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};\n\n\n // Underscore methods that we want to implement on the Model, mapped to the\n // number of arguments they take.\n var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,\n omit: 0, chain: 1, isEmpty: 1};\n\n // Mix in each Underscore method as a proxy to `Collection#models`.\n\n _.each([\n [Collection, collectionMethods, 'models'],\n [Model, modelMethods, 'attributes']\n ], function(config) {\n var Base = config[0],\n methods = config[1],\n attribute = config[2];\n\n Base.mixin = function(obj) {\n var mappings = _.reduce(_.functions(obj), function(memo, name) {\n memo[name] = 0;\n return memo;\n }, {});\n addUnderscoreMethods(Base, obj, mappings, attribute);\n };\n\n addUnderscoreMethods(Base, _, methods, attribute);\n });\n\n // Backbone.sync\n // -------------\n\n // Override this function to change the manner in which Backbone persists\n // models to the server. You will be passed the type of request, and the\n // model in question. By default, makes a RESTful Ajax request\n // to the model's `url()`. Some possible customizations could be:\n //\n // * Use `setTimeout` to batch rapid-fire updates into a single request.\n // * Send up the models as XML instead of JSON.\n // * Persist models via WebSockets instead of Ajax.\n //\n // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests\n // as `POST`, with a `_method` parameter containing the true HTTP method,\n // as well as all requests with the body as `application/x-www-form-urlencoded`\n // instead of `application/json` with the model in a param named `model`.\n // Useful when interfacing with server-side languages like **PHP** that make\n // it difficult to read the body of `PUT` requests.\n Backbone.sync = function(method, model, options) {\n var type = methodMap[method];\n\n // Default options, unless specified.\n _.defaults(options || (options = {}), {\n emulateHTTP: Backbone.emulateHTTP,\n emulateJSON: Backbone.emulateJSON\n });\n\n // Default JSON-request options.\n var params = {type: type, dataType: 'json'};\n\n // Ensure that we have a URL.\n if (!options.url) {\n params.url = _.result(model, 'url') || urlError();\n }\n\n // Ensure that we have the appropriate request data.\n if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n params.contentType = 'application/json';\n params.data = JSON.stringify(options.attrs || model.toJSON(options));\n }\n\n // For older servers, emulate JSON by encoding the request into an HTML-form.\n if (options.emulateJSON) {\n params.contentType = 'application/x-www-form-urlencoded';\n params.data = params.data ? {model: params.data} : {};\n }\n\n // For older servers, emulate HTTP by mimicking the HTTP method with `_method`\n // And an `X-HTTP-Method-Override` header.\n if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {\n params.type = 'POST';\n if (options.emulateJSON) params.data._method = type;\n var beforeSend = options.beforeSend;\n options.beforeSend = function(xhr) {\n xhr.setRequestHeader('X-HTTP-Method-Override', type);\n if (beforeSend) return beforeSend.apply(this, arguments);\n };\n }\n\n // Don't process data on a non-GET request.\n if (params.type !== 'GET' && !options.emulateJSON) {\n params.processData = false;\n }\n\n // Pass along `textStatus` and `errorThrown` from jQuery.\n var error = options.error;\n options.error = function(xhr, textStatus, errorThrown) {\n options.textStatus = textStatus;\n options.errorThrown = errorThrown;\n if (error) error.call(options.context, xhr, textStatus, errorThrown);\n };\n\n // Make the request, allowing the user to override any Ajax options.\n var xhr = options.xhr = Backbone.ajax(_.extend(params, options));\n model.trigger('request', model, xhr, options);\n return xhr;\n };\n\n // Map from CRUD to HTTP for our default `Backbone.sync` implementation.\n var methodMap = {\n create: 'POST',\n update: 'PUT',\n patch: 'PATCH',\n delete: 'DELETE',\n read: 'GET'\n };\n\n // Set the default implementation of `Backbone.ajax` to proxy through to `$`.\n // Override this if you'd like to use a different library.\n Backbone.ajax = function() {\n return Backbone.$.ajax.apply(Backbone.$, arguments);\n };\n\n // Backbone.Router\n // ---------------\n\n // Routers map faux-URLs to actions, and fire events when routes are\n // matched. Creating a new one sets its `routes` hash, if not set statically.\n var Router = Backbone.Router = function(options) {\n options || (options = {});\n this.preinitialize.apply(this, arguments);\n if (options.routes) this.routes = options.routes;\n this._bindRoutes();\n this.initialize.apply(this, arguments);\n };\n\n // Cached regular expressions for matching named param parts and splatted\n // parts of route strings.\n var optionalParam = /\\((.*?)\\)/g;\n var namedParam = /(\\(\\?)?:\\w+/g;\n var splatParam = /\\*\\w+/g;\n var escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n\n // Set up all inheritable **Backbone.Router** properties and methods.\n _.extend(Router.prototype, Events, {\n\n // preinitialize is an empty function by default. You can override it with a function\n // or object. preinitialize will run before any instantiation logic is run in the Router.\n preinitialize: function(){},\n\n // Initialize is an empty function by default. Override it with your own\n // initialization logic.\n initialize: function(){},\n\n // Manually bind a single named route to a callback. For example:\n //\n // this.route('search/:query/p:num', 'search', function(query, num) {\n // ...\n // });\n //\n route: function(route, name, callback) {\n if (!_.isRegExp(route)) route = this._routeToRegExp(route);\n if (_.isFunction(name)) {\n callback = name;\n name = '';\n }\n if (!callback) callback = this[name];\n var router = this;\n Backbone.history.route(route, function(fragment) {\n var args = router._extractParameters(route, fragment);\n if (router.execute(callback, args, name) !== false) {\n router.trigger.apply(router, ['route:' + name].concat(args));\n router.trigger('route', name, args);\n Backbone.history.trigger('route', router, name, args);\n }\n });\n return this;\n },\n\n // Execute a route handler with the provided parameters. This is an\n // excellent place to do pre-route setup or post-route cleanup.\n execute: function(callback, args, name) {\n if (callback) callback.apply(this, args);\n },\n\n // Simple proxy to `Backbone.history` to save a fragment into the history.\n navigate: function(fragment, options) {\n Backbone.history.navigate(fragment, options);\n return this;\n },\n\n // Bind all defined routes to `Backbone.history`. We have to reverse the\n // order of the routes here to support behavior where the most general\n // routes can be defined at the bottom of the route map.\n _bindRoutes: function() {\n if (!this.routes) return;\n this.routes = _.result(this, 'routes');\n var route, routes = _.keys(this.routes);\n while ((route = routes.pop()) != null) {\n this.route(route, this.routes[route]);\n }\n },\n\n // Convert a route string into a regular expression, suitable for matching\n // against the current location hash.\n _routeToRegExp: function(route) {\n route = route.replace(escapeRegExp, '\\\\$&')\n .replace(optionalParam, '(?:$1)?')\n .replace(namedParam, function(match, optional) {\n return optional ? match : '([^/?]+)';\n })\n .replace(splatParam, '([^?]*?)');\n return new RegExp('^' + route + '(?:\\\\?([\\\\s\\\\S]*))?$');\n },\n\n // Given a route, and a URL fragment that it matches, return the array of\n // extracted decoded parameters. Empty or unmatched parameters will be\n // treated as `null` to normalize cross-browser behavior.\n _extractParameters: function(route, fragment) {\n var params = route.exec(fragment).slice(1);\n return _.map(params, function(param, i) {\n // Don't decode the search params.\n if (i === params.length - 1) return param || null;\n return param ? decodeURIComponent(param) : null;\n });\n }\n\n });\n\n // Backbone.History\n // ----------------\n\n // Handles cross-browser history management, based on either\n // [pushState](http://diveintohtml5.info/history.html) and real URLs, or\n // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)\n // and URL fragments. If the browser supports neither (old IE, natch),\n // falls back to polling.\n var History = Backbone.History = function() {\n this.handlers = [];\n this.checkUrl = this.checkUrl.bind(this);\n\n // Ensure that `History` can be used outside of the browser.\n if (typeof window !== 'undefined') {\n this.location = window.location;\n this.history = window.history;\n }\n };\n\n // Cached regex for stripping a leading hash/slash and trailing space.\n var routeStripper = /^[#\\/]|\\s+$/g;\n\n // Cached regex for stripping leading and trailing slashes.\n var rootStripper = /^\\/+|\\/+$/g;\n\n // Cached regex for stripping urls of hash.\n var pathStripper = /#.*$/;\n\n // Has the history handling already been started?\n History.started = false;\n\n // Set up all inheritable **Backbone.History** properties and methods.\n _.extend(History.prototype, Events, {\n\n // The default interval to poll for hash changes, if necessary, is\n // twenty times a second.\n interval: 50,\n\n // Are we at the app root?\n atRoot: function() {\n var path = this.location.pathname.replace(/[^\\/]$/, '$&/');\n return path === this.root && !this.getSearch();\n },\n\n // Does the pathname match the root?\n matchRoot: function() {\n var path = this.decodeFragment(this.location.pathname);\n var rootPath = path.slice(0, this.root.length - 1) + '/';\n return rootPath === this.root;\n },\n\n // Unicode characters in `location.pathname` are percent encoded so they're\n // decoded for comparison. `%25` should not be decoded since it may be part\n // of an encoded parameter.\n decodeFragment: function(fragment) {\n return decodeURI(fragment.replace(/%25/g, '%2525'));\n },\n\n // In IE6, the hash fragment and search params are incorrect if the\n // fragment contains `?`.\n getSearch: function() {\n var match = this.location.href.replace(/#.*/, '').match(/\\?.+/);\n return match ? match[0] : '';\n },\n\n // Gets the true hash value. Cannot use location.hash directly due to bug\n // in Firefox where location.hash will always be decoded.\n getHash: function(window) {\n var match = (window || this).location.href.match(/#(.*)$/);\n return match ? match[1] : '';\n },\n\n // Get the pathname and search params, without the root.\n getPath: function() {\n var path = this.decodeFragment(\n this.location.pathname + this.getSearch()\n ).slice(this.root.length - 1);\n return path.charAt(0) === '/' ? path.slice(1) : path;\n },\n\n // Get the cross-browser normalized URL fragment from the path or hash.\n getFragment: function(fragment) {\n if (fragment == null) {\n if (this._usePushState || !this._wantsHashChange) {\n fragment = this.getPath();\n } else {\n fragment = this.getHash();\n }\n }\n return fragment.replace(routeStripper, '');\n },\n\n // Start the hash change handling, returning `true` if the current URL matches\n // an existing route, and `false` otherwise.\n start: function(options) {\n if (History.started) throw new Error('Backbone.history has already been started');\n History.started = true;\n\n // Figure out the initial configuration. Do we need an iframe?\n // Is pushState desired ... is it available?\n this.options = _.extend({root: '/'}, this.options, options);\n this.root = this.options.root;\n this._wantsHashChange = this.options.hashChange !== false;\n this._hasHashChange = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);\n this._useHashChange = this._wantsHashChange && this._hasHashChange;\n this._wantsPushState = !!this.options.pushState;\n this._hasPushState = !!(this.history && this.history.pushState);\n this._usePushState = this._wantsPushState && this._hasPushState;\n this.fragment = this.getFragment();\n\n // Normalize root to always include a leading and trailing slash.\n this.root = ('/' + this.root + '/').replace(rootStripper, '/');\n\n // Transition from hashChange to pushState or vice versa if both are\n // requested.\n if (this._wantsHashChange && this._wantsPushState) {\n\n // If we've started off with a route from a `pushState`-enabled\n // browser, but we're currently in a browser that doesn't support it...\n if (!this._hasPushState && !this.atRoot()) {\n var rootPath = this.root.slice(0, -1) || '/';\n this.location.replace(rootPath + '#' + this.getPath());\n // Return immediately as browser will do redirect to new url\n return true;\n\n // Or if we've started out with a hash-based route, but we're currently\n // in a browser where it could be `pushState`-based instead...\n } else if (this._hasPushState && this.atRoot()) {\n this.navigate(this.getHash(), {replace: true});\n }\n\n }\n\n // Proxy an iframe to handle location events if the browser doesn't\n // support the `hashchange` event, HTML5 history, or the user wants\n // `hashChange` but not `pushState`.\n if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {\n this.iframe = document.createElement('iframe');\n this.iframe.src = 'javascript:0';\n this.iframe.style.display = 'none';\n this.iframe.tabIndex = -1;\n var body = document.body;\n // Using `appendChild` will throw on IE < 9 if the document is not ready.\n var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;\n iWindow.document.open();\n iWindow.document.close();\n iWindow.location.hash = '#' + this.fragment;\n }\n\n // Add a cross-platform `addEventListener` shim for older browsers.\n var addEventListener = window.addEventListener || function(eventName, listener) {\n return attachEvent('on' + eventName, listener);\n };\n\n // Depending on whether we're using pushState or hashes, and whether\n // 'onhashchange' is supported, determine how we check the URL state.\n if (this._usePushState) {\n addEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n addEventListener('hashchange', this.checkUrl, false);\n } else if (this._wantsHashChange) {\n this._checkUrlInterval = setInterval(this.checkUrl, this.interval);\n }\n\n if (!this.options.silent) return this.loadUrl();\n },\n\n // Disable Backbone.history, perhaps temporarily. Not useful in a real app,\n // but possibly useful for unit testing Routers.\n stop: function() {\n // Add a cross-platform `removeEventListener` shim for older browsers.\n var removeEventListener = window.removeEventListener || function(eventName, listener) {\n return detachEvent('on' + eventName, listener);\n };\n\n // Remove window listeners.\n if (this._usePushState) {\n removeEventListener('popstate', this.checkUrl, false);\n } else if (this._useHashChange && !this.iframe) {\n removeEventListener('hashchange', this.checkUrl, false);\n }\n\n // Clean up the iframe if necessary.\n if (this.iframe) {\n document.body.removeChild(this.iframe);\n this.iframe = null;\n }\n\n // Some environments will throw when clearing an undefined interval.\n if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);\n History.started = false;\n },\n\n // Add a route to be tested when the fragment changes. Routes added later\n // may override previous routes.\n route: function(route, callback) {\n this.handlers.unshift({route: route, callback: callback});\n },\n\n // Checks the current URL to see if it has changed, and if it has,\n // calls `loadUrl`, normalizing across the hidden iframe.\n checkUrl: function(e) {\n var current = this.getFragment();\n\n // If the user pressed the back button, the iframe's hash will have\n // changed and we should use that for comparison.\n if (current === this.fragment && this.iframe) {\n current = this.getHash(this.iframe.contentWindow);\n }\n\n if (current === this.fragment) return false;\n if (this.iframe) this.navigate(current);\n this.loadUrl();\n },\n\n // Attempt to load the current URL fragment. If a route succeeds with a\n // match, returns `true`. If no defined routes matches the fragment,\n // returns `false`.\n loadUrl: function(fragment) {\n // If the root doesn't match, no routes can match either.\n if (!this.matchRoot()) return false;\n fragment = this.fragment = this.getFragment(fragment);\n return _.some(this.handlers, function(handler) {\n if (handler.route.test(fragment)) {\n handler.callback(fragment);\n return true;\n }\n });\n },\n\n // Save a fragment into the hash history, or replace the URL state if the\n // 'replace' option is passed. You are responsible for properly URL-encoding\n // the fragment in advance.\n //\n // The options object can contain `trigger: true` if you wish to have the\n // route callback be fired (not usually desirable), or `replace: true`, if\n // you wish to modify the current URL without adding an entry to the history.\n navigate: function(fragment, options) {\n if (!History.started) return false;\n if (!options || options === true) options = {trigger: !!options};\n\n // Normalize the fragment.\n fragment = this.getFragment(fragment || '');\n\n // Don't include a trailing slash on the root.\n var rootPath = this.root;\n if (fragment === '' || fragment.charAt(0) === '?') {\n rootPath = rootPath.slice(0, -1) || '/';\n }\n var url = rootPath + fragment;\n\n // Strip the fragment of the query and hash for matching.\n fragment = fragment.replace(pathStripper, '');\n\n // Decode for matching.\n var decodedFragment = this.decodeFragment(fragment);\n\n if (this.fragment === decodedFragment) return;\n this.fragment = decodedFragment;\n\n // If pushState is available, we use it to set the fragment as a real URL.\n if (this._usePushState) {\n this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);\n\n // If hash changes haven't been explicitly disabled, update the hash\n // fragment to store history.\n } else if (this._wantsHashChange) {\n this._updateHash(this.location, fragment, options.replace);\n if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {\n var iWindow = this.iframe.contentWindow;\n\n // Opening and closing the iframe tricks IE7 and earlier to push a\n // history entry on hash-tag change. When replace is true, we don't\n // want this.\n if (!options.replace) {\n iWindow.document.open();\n iWindow.document.close();\n }\n\n this._updateHash(iWindow.location, fragment, options.replace);\n }\n\n // If you've told us that you explicitly don't want fallback hashchange-\n // based history, then `navigate` becomes a page refresh.\n } else {\n return this.location.assign(url);\n }\n if (options.trigger) return this.loadUrl(fragment);\n },\n\n // Update the hash location, either replacing the current entry, or adding\n // a new one to the browser history.\n _updateHash: function(location, fragment, replace) {\n if (replace) {\n var href = location.href.replace(/(javascript:|#).*$/, '');\n location.replace(href + '#' + fragment);\n } else {\n // Some browsers require that `hash` contains a leading #.\n location.hash = '#' + fragment;\n }\n }\n\n });\n\n // Create the default Backbone.history.\n Backbone.history = new History;\n\n // Helpers\n // -------\n\n // Helper function to correctly set up the prototype chain for subclasses.\n // Similar to `goog.inherits`, but uses a hash of prototype properties and\n // class properties to be extended.\n var extend = function(protoProps, staticProps) {\n var parent = this;\n var child;\n\n // The constructor function for the new subclass is either defined by you\n // (the \"constructor\" property in your `extend` definition), or defaulted\n // by us to simply call the parent constructor.\n if (protoProps && _.has(protoProps, 'constructor')) {\n child = protoProps.constructor;\n } else {\n child = function(){ return parent.apply(this, arguments); };\n }\n\n // Add static properties to the constructor function, if supplied.\n _.extend(child, parent, staticProps);\n\n // Set the prototype chain to inherit from `parent`, without calling\n // `parent`'s constructor function and add the prototype properties.\n child.prototype = _.create(parent.prototype, protoProps);\n child.prototype.constructor = child;\n\n // Set a convenience property in case the parent's prototype is needed\n // later.\n child.__super__ = parent.prototype;\n\n return child;\n };\n\n // Set up inheritance for the model, collection, router, view and history.\n Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;\n\n // Throw an error when a URL is needed, and none is supplied.\n var urlError = function() {\n throw new Error('A \"url\" property or function must be specified');\n };\n\n // Wrap an optional error callback with a fallback error event.\n var wrapError = function(model, options) {\n var error = options.error;\n options.error = function(resp) {\n if (error) error.call(options.context, model, resp, options);\n model.trigger('error', model, resp, options);\n };\n };\n\n return Backbone;\n});\n","var rNonQuerystring = /\\+/g\n\nvar deparam = exports.deparam = function (string) {\n var params = {}\n , paramsArray = string.replace(rNonQuerystring, ' ').split('&')\n\n for (var i = 0, l = paramsArray.length; i < l; i++) {\n var paramString = paramsArray[i]\n , pair = paramString.split('=')\n , paramName = decodeURIComponent([pair[0]])\n , paramValue = pair.length>2?decodeURIComponent([pair.slice(1).join('=')]):decodeURIComponent([pair[1]])\n if(/^.*\\[\\]$/.test(paramName)){\n paramName=paramName.substr(0,paramName.length-2);\n params[paramName]=params[paramName]||[];\n params[paramName].push(paramValue);\n continue;\n }\n paramName&&(params[paramName] = paramValue)\n }\n\n return params\n}\n\n// copy from\n// https://github.com/jfromaniello/url-join/blob/master/lib/url-join.js\n// version: b02169596877a1e6cd518f1b0d711f38c721fb02\nfunction normalize(str) {\n return str\n .replace(/[\\/]+/g, '/')\n .replace(/\\/\\?/g, '?')\n .replace(/\\/\\#/g, '#')\n .replace(/\\:\\//g, '://')\n}\n\nvar join = exports.join = function() {\n var joined = [].slice.call(arguments, 0).join('/')\n return normalize(joined)\n}\n\n\nfunction getUrlCompontents(url) {\n var hash = ''\n , search = ''\n , rest = url\n , hashIndex = rest.indexOf('#')\n , markIndex = rest.indexOf('?')\n\n if (hashIndex !== -1) {\n hash = rest.substr(hashIndex)\n rest = rest.slice(0, hashIndex)\n }\n\n if (markIndex !== -1) {\n search = rest.substr(markIndex)\n rest = rest.slice(0, markIndex)\n }\n\n return { rest: rest, search: search, hash: hash }\n}\n\nfunction removeSearch(url) {\n var compontents = getUrlCompontents(url)\n return compontents.rest + (compontents.hash || '')\n}\n\nexports.resetParams = function(url, params) {\n return exports.addParam(removeSearch(url), params)\n}\n\nexports.addParam = function(url, params) {\n var paramString = ''\n\n for (var key in params) {\n if (!params.hasOwnProperty(key)) { continue }\n\n var value = params[key]\n if (value === '' || typeof value === 'undefined') { continue }\n\n if (paramString) { paramString += '&' }\n paramString += encodeURIComponent(key)\n + '=' + encodeURIComponent(value)\n }\n\n if (!paramString) { return url }\n\n var compontents = getUrlCompontents(url);\n\n var hash = compontents.hash\n , search = compontents.search\n , rest = compontents.rest\n\n return (rest\n + (search ? (search + '&' + paramString) : ('?' + paramString))\n + (hash ? hash : ''))\n}\n\nvar hasSameOrigin = exports.hasSameOrigin = function(url, originUrl) {\n if (url[0] === '/') { return true }\n var rOrigin = new RegExp('^' + originUrl)\n return rOrigin.test(url)\n}\n\nexports.getRelativeUrl = function(url, originUrl) {\n if (url[0] === '/' || !hasSameOrigin(url, originUrl)) { return url }\n return join('/', url.substr(originUrl.length))\n}\n\nexports.getURLParameter = function(name, search) {\n search = search || location.search\n var param = search.split(name + '=')[1];\n return param ? decodeURIComponent(param.split('&')[0]) : null\n}\n\nvar rQuestionMark = /^\\?/\nexports.getURLParameters = function(search) {\n search = search || location.search\n search = search.replace(rQuestionMark, '');\n return deparam(search)\n}\n\n// Copy From Backbone.js#Backbone.Route\n// Gets the true hash value. Cannot use location.hash directly due to bug\n// in Firefox where location.hash will always be decoded.\nexports.getHash = function() {\n var match = window.location.href.match(/#(.*)$/)\n return match ? match[1] : ''\n}\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.7';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy43JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar logger = _interopRequireWildcard(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=\n","var types = {\n MOBILE_GAME_DOWNLOADED_IN_ANDROID: 'mEB3q2'\n, MOBILE_GAME_DOWNLOADED_IN_IOS: 'yyEfAv'\n, OPEN_GAME_DOWNLOADED_QRCODE: '7nQVju'\n, DOWNLOAD_MOBILE_GAME_SIMULATOR: '73UBVf'\n, IOS_GAME_DOWNLOADED_IN_PC: 'UZ77nm'\n, ANDROID_GAME_DOWNLOADED_IN_PC: 'I7b6na'\n}\n\nvar urlUtils = require('@173js/url')\n\nfunction trackEventWithKey(key, hrefOrAction, options) {\n var _jc_ping = window._jc_ping || [];\n options = options || {}\n\n if (options.withCurrentHref) {\n hrefOrAction = urlUtils.addParam(\n window.location.href, { action: hrefOrAction }\n )\n }\n\n _jc_ping.push([\n '_trackBlockClick'\n , key\n , hrefOrAction\n ])\n\n window._jc_ping = _jc_ping\n}\n\nvar rNON_URL = /^(#|javascript:)/\n , $ = require('jquery')\n\nmodule.exports = {\n trackEvent: function(eventType, href) {\n trackEventWithKey(types[eventType], href)\n }\n, trackEventWithKey: trackEventWithKey\n, trackPageview: function() {\n // See more: http://bi.local.17173.com/pages/viewpage.action?pageId=983282\n window._jc_ping = window._jc_ping || []\n _jc_ping.push(['_trackPageview'])\n }\n, applyTrackLink: function() {\n $('body').on('mousedown', 'a[data-track-link]', function(e) {\n //TODO: DRY\n var element = $(e.currentTarget)\n , hrefOrAction = element.attr('href')\n , key = element.data('track-link')\n , trackOptions = { withCurrentHref : false }\n\n if (rNON_URL.test(hrefOrAction)) {\n if (!element.is('[data-track-action]')) { return }\n hrefOrAction = element.data('track-action')\n trackOptions.withCurrentHref = true\n }\n\n trackEventWithKey(key, hrefOrAction, trackOptions)\n })\n }\n, applyTrackBlock: function() {\n $('[data-track-block]').each(function(index, blockElement) {\n blockElement = $(blockElement)\n var key = $(blockElement).data('track-block')\n\n blockElement.on('mousedown', 'a, .trackDiv, button', function(e) {\n var element = $(e.currentTarget)\n , hrefOrAction = element.attr('href') || element.attr('class')\n , trackOptions = { withCurrentHref : false }\n\n if (rNON_URL.test(hrefOrAction) || hrefOrAction.indexOf('trackDiv') != -1) {\n if (!element.is('[data-track-action]')) { return }\n hrefOrAction = element.data('track-action')\n trackOptions.withCurrentHref = true\n }\n\n trackEventWithKey(key, hrefOrAction, trackOptions)\n })\n })\n }\n, applyBiClick: function(gameCode) {\n window._jc_ping = window._jc_ping || [];\n _jc_ping.push([ '_trackBiClick', 'g_1_'+gameCode+'_gift-follow']);\n }\n, applyTrackArea: function() {\n $('[data-track-area]').each(function(index, areaElement) {\n areaElement = $(areaElement)\n var key = $(areaElement).data('track-area')\n\n window._jc_ping = window._jc_ping || [];\n _jc_ping.push([\n '_trackModuleArea',\n areaElement,\n key\n ]);\n })\n }\n, applyBgArea:function(){\n $('[data-bg-area]').each(function(index, areaElement) {\n areaElement = $(areaElement)\n var key = $(areaElement).data('bg-area')\n window._jc_ping = window._jc_ping || [];\n _jc_ping.push([\n '_trackModule',\n areaElement,\n key\n ]);\n })\n }\n}\n\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n var newContext = [];\n var iterator = context[global.Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n var root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==\n","var $ = require('jquery')\n , formUtil = {}\n , VISIBLE_INPUT = \"input, button, textarea\"\n , TEXTAREA = \"textarea\"\n\nformUtil.toDict = function(form) {\n var dict = {}\n , array = form.serializeArray()\n , item\n\n for (var i = 0; i < array.length; i++) {\n item = array[i]\n dict[item.name] = item.value\n }\n\n return dict\n}\n\nformUtil.send = function(form, options) {\n var data = formUtil.toDict(form)\n , method = form.attr(\"method\")\n , action = form.attr('action')\n\n // The form itself should contains ck, right?\n return $.ajax($.extend({\n type: method\n , url: action\n , data: data\n }, options))\n}\n\nformUtil.readonlyForm = function(formOrElements) {\n var elements = formOrElements[\n formOrElements.is('form') ? 'find' : 'filter'\n ](VISIBLE_INPUT)\n\n elements.each(function(index, el) {\n var element = $(el)\n element.data('prev-disabled-prop', element.prop('disabled'))\n });\n elements.prop('disabled', true);\n}\n\nformUtil.resumeForm = function(formOrElements) {\n var elements = formOrElements[\n formOrElements.is('form') ? 'find' : 'filter'\n ](VISIBLE_INPUT)\n\n elements.each(function(index, el) {\n var element = $(el)\n element.prop('disabled', element.data('prev-disabled-prop'))\n });\n}\n\n\nvar ENTER_KEYCODE = 13\nformUtil.ctrlEnterForm = function(form) {\n var textarea = form.find(TEXTAREA)\n\n textarea.keypress(function(e) {\n if (e.keyCode === ENTER_KEYCODE && e.ctrlKey) {\n form.submit()\n }\n })\n}\n\nfunction getTextareaScrollHeight(textarea) {\n // Using scrollTop rather than scrollHeight\n // because scrollHeight is non-standard and includes padding.\n return textarea.height(0).scrollTop(0).scrollTop(10000).scrollTop()\n}\n\nformUtil.autoResize = function(textarea) {\n var fakeTextarea = textarea.data('fake-textarea')\n\n if (!fakeTextarea) { return }\n\n var value = textarea.val()\n\n fakeTextarea.val(value)\n\n var height = getTextareaScrollHeight(fakeTextarea)\n , maxHeight = textarea.data('max-height') || 100\n , minHeight = textarea.data('min-height')\n\n if (height > maxHeight) {\n height = maxHeight\n textarea.css({'overflow-y': 'auto'})\n }\n\n textarea.height((height < minHeight) ? minHeight: height)\n}\n\nformUtil.enableAutoResize = function(textarea, fakeTextareaParent) {\n var fakeTextarea = textarea.clone()\n fakeTextarea.removeAttr('name')\n\n fakeTextareaParent = fakeTextareaParent || textarea.parent()\n\n textarea.data('fake-textarea', fakeTextarea)\n\n var minHeight = textarea.data('min-height')\n if (!minHeight) {\n textarea.data('min-height', textarea.height())\n }\n\n textarea.on('input keyup', $.proxy(function(e) {\n if (e && e.originalEvent) {\n var prop = e.originalEvent.propertyName\n if (prop && prop !== 'value') {\n return\n }\n }\n formUtil.autoResize(textarea)\n }, this))\n\n fakeTextarea.attr({\n 'style': 'position: absolute; left: -999px;'\n })\n\n fakeTextareaParent.append(fakeTextarea)\n}\n\nmodule.exports = formUtil\n","var _ = require('underscore')\n , $ = require('jquery')\n\nvar validateFuncs = {\n '[data-required]': function validateRequired(input) {\n return !!$.trim(input.val()).length\n }\n, '[data-type=\"qq\"]': function validateRequired(input) {\n var value = input.val()\n if (!value) { return true }\n\n var rQQ = /^[1-9][0-9]{4,}$/i;\n return rQQ.test(value)\n }\n, '[data-type=\"telephone\"]': function validateRequired(input) {\n var value = input.val()\n if (!value) { return true }\n var rTelephone = /^((\\(\\d{3}\\))|(\\d{3}\\-))?1[345789]\\d{9}$/i;\n return rTelephone.test(value)\n }\n, '[data-type=\"email\"]': function validateRequired(input) {\n var value = input.val()\n if (!value) { return true }\n\n var rEmail = /^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/i;\n return rEmail.test(value)\n }\n, '[data-max-length]': function validateRequired(input) {\n var value = input.val()\n if (!value) { return true }\n\n return value.length <= input.data('max-length')\n }\n}\n\nvar invalidMsgs = {\n '[data-required]': '<%= label %>为必填项'\n, '[data-type=\"qq\"]': 'QQ 号码格式不正确'\n, '[data-type=\"telephone\"]': '手机号码格式不正确'\n, '[data-type=\"email\"]': '邮箱格式不正确'\n, '[data-max-length]': function(input) {\n return '<%= label %>最多只能输入' + input.data('max-length') + '个字'\n }\n}\n\nfunction ValidateForm(options) {\n options = options || {}\n this.form = options.form\n this.inputs = this.form.find('[data-validate]')\n this.validateFuncs = validateFuncs\n this.invalidMsgs = invalidMsgs\n this.fieldErrors = [];\n}\n\n\nValidateForm.prototype.validate = function() {\n\n var isValid = true\n this.fieldErrors = []\n\n this.inputs.each($.proxy(function(i, el) {\n el = $(el)\n if (!this.validateElem(el)) {\n isValid = false\n }\n }, this))\n\n return isValid\n}\n\nValidateForm.prototype.validateElem = function(el) {\n el = $(el)\n var invalidMsgs = this.invalidMsgs\n , val = $.trim(el.val())\n\n el.val(val)\n\n return _.every(this.validateFuncs, function(validator, selector) {\n if (!el.is(selector)) { return true }\n\n var valid = validator(el)\n\n if (valid) { return true }\n\n var invalidMsg = invalidMsgs[selector]\n\n if (_.isFunction(invalidMsg)) { invalidMsg = invalidMsg(el) }\n\n var label = el.data('label')\n , errorMessage = _.template(invalidMsg)({ label: label })\n\n this.handleInvalid(el, errorMessage)\n\n return false\n }, this)\n}\n\nValidateForm.prototype.handleInvalid = function(input, errorMessage) {\n this.fieldErrors.push({\n input: input\n , message: errorMessage\n })\n\n var formItem = input.closest('.form-group')\n\n formItem.css('border-color', 'red')\n\n input.one('change input', function() {\n formItem.css('border-color', '#e6e6e6')\n })\n}\n\nmodule.exports = ValidateForm\n","var Backbone = require('backbone')\n , Overlay = require('ui/Overlay')\n , enableDialog = require('ui/enableDialog')\n\nvar AlertView = Backbone.View.extend({\n initialize: function(options) {\n this.content = options.content\n this.html = options.html\n }\n, render: function() {\n this.$el.html(\n this.content\n ? $('

').text(this.content)\n : this.html\n )\n\n return this\n }\n})\n\nmodule.exports = function(options) {\n options = options || {}\n\n var View = enableDialog(AlertView, { title: options.title || '提示' })\n , alertView = new View(options)\n\n return alertView.render().open()\n}\n","var createEnableOverlay = require('ui/createEnableOverlay')\n , tmpl = require('./tmpl.handlebars')\n\nmodule.exports = createEnableOverlay(tmpl)\n","var $ = require('jquery')\n , md5 = require('./md5')\n\nfunction GetDownloadInfo(gameCodes) {\n this.appId = 'yQWbAjGE';\n this.appKey = '1cas9ubnk1ZfWuMZ';\n this.gameCodes = gameCodes;\n // this.getUrls();\n}\n\nGetDownloadInfo.prototype = {\n getPlatformUrl: function(gameCode, needSource) {\n var that = this;\n if (gameCode) {\n var nonce = Math.ceil(Math.ceil(new Date().getTime() / 1000) / (60 / 2)) + 17173,\n timestamp = new Date().getTime();\n var url = 'https://dmanage.17173.com/api/downloadUrl';\n if (needSource) {\n url = 'https://dmanage.17173.com/api/downloadUrlAndSource'\n }\n return $.ajax({\n url: url,\n dataType: 'jsonp',\n data: {\n nonce: nonce,\n sign: md5('gameCode=' + gameCode + '&nonce=' + nonce + '&time=' + timestamp + '&appKey=' + that.appKey + ''),\n time: timestamp,\n gameCode: gameCode,\n appId: that.appId\n }\n })\n }\n return null;\n },\n getUrls: function(callback) {\n var that = this;\n\n $.when(that.getPlatformUrl(that.gameCodes.ios), that.getPlatformUrl(that.gameCodes.android), that.getPlatformUrl(that.gameCodes.pc)).then(function (res1, res2, res3) {\n var data = {};\n if (that.gameCodes.ios && res1[0].data) {\n data.ios = res1[0].data;\n }\n\n if (that.gameCodes.android && res2[0].data) {\n data.android = res2[0].data;\n }\n\n if (that.gameCodes.pc && res3[0].data) {\n data.pc = res3[0].data;\n }\n\n if ($.isFunction(callback)) {\n this.callback = callback(data);\n }\n })\n }\n}\n\nmodule.exports = GetDownloadInfo","function md5(string, key, raw) {\n function t(n, t) {\n var r = (65535 & n) + (65535 & t);\n return (n >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r\n }\n\n function r(n, t) {\n return n << t | n >>> 32 - t\n }\n\n function e(n, e, o, u, c, f) {\n return t(r(t(t(e, n), t(u, f)), c), o)\n }\n\n function o(n, t, r, o, u, c, f) {\n return e(t & r | ~t & o, n, t, u, c, f)\n }\n\n function u(n, t, r, o, u, c, f) {\n return e(t & o | r & ~o, n, t, u, c, f)\n }\n\n function c(n, t, r, o, u, c, f) {\n return e(t ^ r ^ o, n, t, u, c, f)\n }\n\n function f(n, t, r, o, u, c, f) {\n return e(r ^ (t | ~o), n, t, u, c, f)\n }\n\n function i(n, r) {\n n[r >> 5] |= 128 << r % 32, n[14 + (r + 64 >>> 9 << 4)] = r;\n var e, i, a, d, h, l = 1732584193,\n g = -271733879,\n v = -1732584194,\n m = 271733878;\n for (e = 0; e < n.length; e += 16) i = l, a = g, d = v, h = m, g = f(g = f(g = f(g = f(g = c(g = c(g = c(g = c(g = u(g = u(g = u(g = u(g = o(g = o(g = o(g = o(g, v = o(v, m = o(m, l = o(l, g, v, m, n[e], 7, -680876936), g, v, n[e + 1], 12, -389564586), l, g, n[e + 2], 17, 606105819), m, l, n[e + 3], 22, -1044525330), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 4], 7, -176418897), g, v, n[e + 5], 12, 1200080426), l, g, n[e + 6], 17, -1473231341), m, l, n[e + 7], 22, -45705983), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 8], 7, 1770035416), g, v, n[e + 9], 12, -1958414417), l, g, n[e + 10], 17, -42063), m, l, n[e + 11], 22, -1990404162), v = o(v, m = o(m, l = o(l, g, v, m, n[e + 12], 7, 1804603682), g, v, n[e + 13], 12, -40341101), l, g, n[e + 14], 17, -1502002290), m, l, n[e + 15], 22, 1236535329), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 1], 5, -165796510), g, v, n[e + 6], 9, -1069501632), l, g, n[e + 11], 14, 643717713), m, l, n[e], 20, -373897302), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 5], 5, -701558691), g, v, n[e + 10], 9, 38016083), l, g, n[e + 15], 14, -660478335), m, l, n[e + 4], 20, -405537848), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 9], 5, 568446438), g, v, n[e + 14], 9, -1019803690), l, g, n[e + 3], 14, -187363961), m, l, n[e + 8], 20, 1163531501), v = u(v, m = u(m, l = u(l, g, v, m, n[e + 13], 5, -1444681467), g, v, n[e + 2], 9, -51403784), l, g, n[e + 7], 14, 1735328473), m, l, n[e + 12], 20, -1926607734), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 5], 4, -378558), g, v, n[e + 8], 11, -2022574463), l, g, n[e + 11], 16, 1839030562), m, l, n[e + 14], 23, -35309556), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 1], 4, -1530992060), g, v, n[e + 4], 11, 1272893353), l, g, n[e + 7], 16, -155497632), m, l, n[e + 10], 23, -1094730640), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 13], 4, 681279174), g, v, n[e], 11, -358537222), l, g, n[e + 3], 16, -722521979), m, l, n[e + 6], 23, 76029189), v = c(v, m = c(m, l = c(l, g, v, m, n[e + 9], 4, -640364487), g, v, n[e + 12], 11, -421815835), l, g, n[e + 15], 16, 530742520), m, l, n[e + 2], 23, -995338651), v = f(v, m = f(m, l = f(l, g, v, m, n[e], 6, -198630844), g, v, n[e + 7], 10, 1126891415), l, g, n[e + 14], 15, -1416354905), m, l, n[e + 5], 21, -57434055), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 12], 6, 1700485571), g, v, n[e + 3], 10, -1894986606), l, g, n[e + 10], 15, -1051523), m, l, n[e + 1], 21, -2054922799), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 8], 6, 1873313359), g, v, n[e + 15], 10, -30611744), l, g, n[e + 6], 15, -1560198380), m, l, n[e + 13], 21, 1309151649), v = f(v, m = f(m, l = f(l, g, v, m, n[e + 4], 6, -145523070), g, v, n[e + 11], 10, -1120210379), l, g, n[e + 2], 15, 718787259), m, l, n[e + 9], 21, -343485551), l = t(l, i), g = t(g, a), v = t(v, d), m = t(m, h);\n return [l, g, v, m]\n }\n\n function a(n) {\n var t, r = \"\",\n e = 32 * n.length;\n for (t = 0; t < e; t += 8) r += String.fromCharCode(n[t >> 5] >>> t % 32 & 255);\n return r\n }\n\n function d(n) {\n var t, r = [];\n for (r[(n.length >> 2) - 1] = void 0, t = 0; t < r.length; t += 1) r[t] = 0;\n var e = 8 * n.length;\n for (t = 0; t < e; t += 8) r[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32;\n return r\n }\n\n function h(n) {\n return a(i(d(n), 8 * n.length))\n }\n\n function l(n, t) {\n var r, e, o = d(n),\n u = [],\n c = [];\n for (u[15] = c[15] = void 0, o.length > 16 && (o = i(o, 8 * n.length)), r = 0; r < 16; r += 1) u[r] = 909522486 ^ o[r], c[r] = 1549556828 ^ o[r];\n return e = i(u.concat(d(t)), 512 + 8 * t.length), a(i(c.concat(e), 640))\n }\n\n function g(n) {\n var t, r, e = \"\";\n for (r = 0; r < n.length; r += 1) t = n.charCodeAt(r), e += \"0123456789abcdef\".charAt(t >>> 4 & 15) + \"0123456789abcdef\".charAt(15 & t);\n return e\n }\n\n function v(n) {\n return unescape(encodeURIComponent(n))\n }\n\n function m(n) {\n return h(v(n))\n }\n\n function p(n) {\n return g(m(n))\n }\n\n function s(n, t) {\n return l(v(n), v(t))\n }\n\n function C(n, t) {\n return g(s(n, t))\n }\n\n function A(n, t, r) {\n return t ? r ? s(t, n) : C(t, n) : r ? m(n) : p(n)\n }\n return A(string, key, raw);\n}\n\nmodule.exports = md5;","var $ = require('jquery')\n , doc = $(document)\n , docElement = $('html')\n , tmpl = require('./tmpl.handlebars')\n , WIHTOUT_SCROLL_MARGIN_RIGHT = 0\n , body = $('body')\n , win = $(window)\n\nfunction cacheable(func) {\n var cachedValue\n , hasRuned = false\n\n return function() {\n if (!hasRuned) {\n hasRuned = true\n cachedValue = func()\n }\n return cachedValue\n }\n}\n\nfunction getScrollbarWidth() {\n // Copy from http://tinyurl.com/k2wj4cm\n var outer = document.createElement(\"div\");\n outer.style.visibility = \"hidden\";\n outer.style.width = \"100px\";\n outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\n\n document.body.appendChild(outer);\n\n var widthNoScroll = outer.offsetWidth;\n // force scrollbars\n outer.style.overflow = \"scroll\";\n\n // add innerdiv\n var inner = document.createElement(\"div\");\n inner.style.width = \"100%\";\n outer.appendChild(inner);\n\n var widthWithScroll = inner.offsetWidth;\n\n // remove divs\n outer.parentNode.removeChild(outer);\n\n return widthNoScroll - widthWithScroll;\n}\n\ngetScrollbarWidth = cacheable(getScrollbarWidth)\n\nfunction Overlay(opts) {\n this.opts = opts\n this.el = $(tmpl()).appendTo('body')\n this.body = this.el.find('.overlay-in')\n this.closable = opts.closable !== void 0\n ? !!opts.closable : true\n\n this.setBody()\n this.el.addClass(opts.klass)\n\n if (!this.closable) { return }\n\n var overlay = this\n doc.on('click.close', '.overlay-wrap', function(e) {\n if (e.target !== e.currentTarget) { return }\n overlay.close()\n })\n .on('keyup.close', function(e) {\n var tagName = e.target.tagName\n , isEscKey = e.keyCode === 27\n , isInputField = /input|textarea/i.test(tagName)\n\n if (!isInputField && isEscKey) {\n overlay.close()\n }\n })\n}\n\n$.extend(Overlay.prototype, {\n close: function(silent) {\n this.el.remove()\n docElement.removeClass('overlay-show')\n docElement.css({ marginRight: WIHTOUT_SCROLL_MARGIN_RIGHT })\n doc.off('.close')\n\n //XXX: dirty but work, fix windows 下侧边栏分享组件浮动\n body.find('.pn-float').css({ left: '50%' })\n body.find('.pn-cycle').css({ right: '10px' })\n return this\n }\n\n, getContentElement: function() {\n return this.el.find('.k-content')\n }\n\n, open: function() {\n this.scrollTop = doc.scrollTop()\n\n //XXX: dirty but work, fix windows 下侧边栏分享组件浮动\n body.find('.pn-float').css({ left: win.width() / 2 })\n\n docElement.addClass('overlay-show')\n var scrollbarWidth = getScrollbarWidth()\n docElement.css({ marginRight: scrollbarWidth })\n\n //fix windows\n var pnCyclePositionX = scrollbarWidth + 10\n body.find('.pn-cycle').css({ right: pnCyclePositionX })\n\n this.el.show()\n return this\n }\n\n, setBody: function(body) {\n body = body || this.opts.body\n this.body.html(body)\n return this\n }\n})\n\nmodule.exports = Overlay;\n","var $ = require('jquery')\n\nmodule.exports = function requireLogin(callback, cate) {\n\n return function() {\n var Passport = window.Passport || {}\n , args = arguments\n , voteMobileBinderTit = '亲爱的玩家,您需要绑定手机号后才能给游戏投票哦~'\n , mobileBinderTit\n , isRequireMobileBind = false\n , markIsNoTopbarTrigger = true //标记是非Topbar登陆触发的Passport,用于事件隔离\n\n if (cate) {\n isRequireMobileBind = true\n }\n\n if (cate == 'vote') {\n mobileBinderTit = voteMobileBinderTit\n }\n\n function requireMobileBind() {\n Passport.getMobileStatus(function(isBinded){\n if (!isBinded) {\n //手机未绑定,弹出手机绑定弹窗\n Passport.Dialog.showMobileBinder();\n var ti = setInterval(function(){\n if($('#nut').contents().find('.gpp-tel-bind .pprt-bindMobile-el .gpp-tit').length){\n clearInterval(ti);\n $('#nut').contents().find('.gpp-tel-bind .pprt-bindMobile-el .gpp-tit').text(mobileBinderTit).css('line-height','22px');\n }\n },500);\n }else {\n //手机已绑定,去执行回调\n callback.apply(this, args)\n }\n });\n }\n\n function newgameLoginSuccess() {\n if (isRequireMobileBind) {\n requireMobileBind();\n return\n }\n //登陆成功,不需要手机绑定,去执行回调\n callback.apply(this, args)\n }\n\n if(typeof passportDialogEventBind === 'undefined'){\n Passport.on(Passport.EVENTS.dialogClose, function (events) {\n window.passportDialogEventBind = true; //防止多次绑定\n if (events.dialogType == 'login') {\n //关闭登录弹窗,取消绑定\n window.Passport.off('loginSuccess', newgameLoginSuccess)\n }\n if (events.dialogType == 'mobileBind') {\n if (markIsNoTopbarTrigger) { //事件隔离\n Passport.getMobileStatus(function(isBinded){\n if (isBinded) {\n //手机绑定成功,去操作\n callback.apply(this, args)\n }\n });\n }\n }\n });\n }\n\n if (Passport && Passport.defaultOption) {\n Passport.defaultOption.mobileBindOn=false\n }\n\n if(!Passport.isLoggedIn()){\n // 没有登陆\n Passport.off('loginSuccess', newgameLoginSuccess)\n Passport.Dialog.show()\n Passport.on('loginSuccess', newgameLoginSuccess)\n } else {\n // 有登陆\n if (isRequireMobileBind) {\n // 需要手机绑定\n requireMobileBind();\n } else {\n // 不需要手机绑定\n callback.apply(this, args)\n }\n }\n\n }\n}\n","var Backbone = require('backbone')\n , Overlay = require('ui/Overlay')\n\nmodule.exports = function(tmpl) {\n\n return function(View, options) {\n options = options || {}\n var dialogTitle = options.title\n\n return Backbone.View.extend({\n initialize: function(options) {\n this.overlay = new Overlay({ closable: true })\n this.view = new View(options)\n this.listenTo(this.view, 'close', this.close, this)\n }\n , events: {\n 'click .overlay-close': 'handleCloseClicked'\n }\n , handleCloseClicked: function(e) {\n e.preventDefault()\n this.close()\n }\n , open: function() {\n this.overlay.open()\n }\n , close: function() {\n this.overlay.close()\n }\n , render: function() {\n this.$el.html(tmpl({ title: dialogTitle }))\n this.$('.view-placeholder')\n .replaceWith(this.view.render().el)\n\n this.overlay.setBody(this.$el)\n return this\n }\n })\n }\n\n}\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"

\\n
\\n
\\n
\\n
\\n
\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
\\n ×\\n
\\n

\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":20},\"end\":{\"line\":4,\"column\":29}}}) : helper)))\n + \"

\\n
\\n
\\n
\\n
\\n
\\n\";\n},\"useData\":true});","var Backbone = require('backbone')\n , _ = require('underscore')\n , tmpl = require('./tmpl.handlebars')\n , enableDialog = require('ui/enableDialog')\n , formUtils = require('@173js/ui/form')\n , ValidateForm = require('widgets/ValidateForm')\n , ued = window.ued || {}\n , EMPTY_CPATCHA_HASH = 663\n\nvar View = Backbone.View.extend({\n events: {\n 'submit form': 'formSubmitted'\n , 'click .captcha-container': 'fetchAndRenderCaptcha'\n }\n, initialize: function(options) {\n options = options || {}\n this.activityInfo = options.activityInfo || {}\n this.resultMessage = options.resultMessage || ''\n this.captchaHash = EMPTY_CPATCHA_HASH\n }\n, ajaxSubmitForm: function(dict) {\n var ued = window.ued || {}\n , gameCode = ued.gameCode\n , form = this.$('form')\n\n formUtils.readonlyForm(form)\n\n return $.ajax({\n type: 'POST',\n url: '/game-collectVoteData.html',\n dataType:'json',\n data: _.extend({ id: gameCode }, dict, { to_update: +!!dict.to_update })\n }).always(function() {\n formUtils.resumeForm(form)\n }).done(_.bind(function(resp) {\n if (resp.result === 'success') {\n return this.$el.html(resp.msg)\n }\n\n this.renderFieldErrors(\n _.map(_.values(resp.errorFields), function(message) {\n return { message: message }\n })\n )\n }, this))\n .fail(_.bind(function() {\n this.$el.html('网络发生了错误')\n }))\n }\n, showErrors: function(message) {\n var errorBlock = this.$('.error-block')\n errorBlock.html('' + message + '').show()\n }\n, hideErrors: function() {\n var errorBlock = this.$('.error-block')\n errorBlock.empty().hide()\n }\n, formSubmitted: function(e) {\n e.preventDefault()\n var dict = formUtils.toDict(this.$('form'))\n , HIDE_ERRORS = []\n\n this.renderFieldErrors(HIDE_ERRORS)\n\n if (!this.validateForm.validate()) {\n this.renderFieldErrors(this.validateForm.fieldErrors)\n return\n }\n\n if (!this.validateCaptcha(this.form)) {\n this.validateForm.handleInvalid(\n this.form.find('input[name=\"captcha\"]')\n , '验证码错误'\n )\n\n this.renderFieldErrors(this.validateForm.fieldErrors)\n return\n }\n\n this.ajaxSubmitForm(dict)\n }\n, fetchMemberInfo: function() {\n return $.getJSON('/game-getMemberInfo.html')\n }\n, renderWhenFetchMemberInfo: function(resp) {\n var userData = resp.data || {}\n , info = this.activityInfo\n\n _.each(['need_account', 'need_address', 'need_server'], function(propName) {\n info[propName] = +info[propName];\n })\n\n this.$el.html(tmpl(\n _.extend({}, info\n , userData\n , { activityTimeLabel: info.begin_time + ' - ' + info.end_time\n , resultMessage: this.resultMessage\n }\n )\n ))\n\n this.form = this.$('form')\n this.validateForm = new ValidateForm({\n form: this.form\n })\n\n this.fetchAndRenderCaptcha()\n }\n, render: function() {\n this.$el.html('加载中...')\n this.fetchMemberInfo()\n .done(_.bind(this.renderWhenFetchMemberInfo, this))\n return this\n }\n, renderFieldErrors: function(fieldErrors) {\n // TODO: DRY\n var errorBlock = this.$('.errors-block')\n if (!fieldErrors || !fieldErrors.length) {\n errorBlock.hide()\n return\n }\n\n errorBlock.empty()\n\n _.each(fieldErrors, function(x) {\n if (!x.message) { return }\n errorBlock.append('
  • ' + x.message + '
  • ')\n })\n\n this.fetchAndRenderCaptcha()\n\n errorBlock.show()\n }\n, fetchAndRenderCaptcha: function() {\n var captchaContainer = this.$('.captcha-container')\n\n function handleError() {\n captchaContainer.text('网络发生了错误,点击重试')\n }\n\n return $.ajax({\n url: '/game-captcha.html?refresh=1'\n , dataType:'json'\n , cache: false\n }).done(_.bind(function(resp) {\n if (!resp) { return handleError() }\n\n var image = resp.url\n captchaContainer.html(\n $('', { height: 50, src: resp.url })\n )\n this.captchaHash = +resp.hash1\n }, this))\n .fail(handleError)\n }\n, validateCaptcha: function(form) {\n var inputCaptchValue = $.trim(form.find('input[name=\"captcha\"]').val())\n if (!inputCaptchValue) { return false }\n\n var INIT_HASH = 0\n , FIRST_CHAR = 0\n , inputCaptchHash = _.reduceRight(\n inputCaptchValue\n , function(memo, value) {\n return memo + value.toLowerCase().charCodeAt(FIRST_CHAR)\n }\n , INIT_HASH\n )\n\n return inputCaptchHash === this.captchaHash\n }\n})\n\nmodule.exports = enableDialog(View, { title: '有奖活动' })\n","var Handlebars = require(\"../../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
    \\n \"\n + ((stack1 = ((helper = (helper = lookupProperty(helpers,\"resultMessage\") || (depth0 != null ? lookupProperty(depth0,\"resultMessage\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"resultMessage\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":6},\"end\":{\"line\":4,\"column\":25}}}) : helper))) != null ? stack1 : \"\")\n + \"\\n
    \\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
    \\n

    活动简介

    \\n \"\n + ((stack1 = ((helper = (helper = lookupProperty(helpers,\"content\") || (depth0 != null ? lookupProperty(depth0,\"content\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"content\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":56,\"column\":8},\"end\":{\"line\":56,\"column\":21}}}) : helper))) != null ? stack1 : \"\")\n + \"\\n
    \\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n return \"
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n return \"
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";\n},\"9\":function(container,depth0,helpers,partials,data) {\n return \"
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
    \\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"resultMessage\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":2},\"end\":{\"line\":6,\"column\":9}}})) != null ? stack1 : \"\")\n + \"\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"content\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":53,\"column\":4},\"end\":{\"line\":58,\"column\":11}}})) != null ? stack1 : \"\")\n + \"
    \\n

    活动时间:

    \\n

    \"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"activityTimeLabel\") || (depth0 != null ? lookupProperty(depth0,\"activityTimeLabel\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(alias1,{\"name\":\"activityTimeLabel\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":61,\"column\":12},\"end\":{\"line\":61,\"column\":33}}}) : helper)))\n + \"

    \\n
    \\n
    \\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"need_account\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":64,\"column\":2},\"end\":{\"line\":75,\"column\":9}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"need_server\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(7, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":76,\"column\":2},\"end\":{\"line\":87,\"column\":9}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"need_address\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":88,\"column\":2},\"end\":{\"line\":99,\"column\":9}}})) != null ? stack1 : \"\")\n + \"
    \\n
    \\n 验证码加载中...\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";\n},\"useData\":true});","var $ = require('jquery')\n\nmodule.exports = function(gameCode) {\n var dfd = new $.Deferred()\n\n $.getJSON(\n '/game-getactivityinfo-' + gameCode + '.html'\n ).done(function(resp) {\n resp = resp || {}\n\n if (resp && resp.msg === 'success') {\n return dfd.resolve(resp.data || null)\n }\n\n return dfd.resolve(null)\n })\n\n return dfd.promise()\n\n}\n","var Backbone = require('backbone')\n , _ = require('underscore')\n , tmpl = require('./tmpl.handlebars')\n , successResultTmpl = require('./successResult.handlebars')\n , enableDialog = require('ui/enableDialog')\n , formUtils = require('@173js/ui/form')\n , ued = window.ued || {}\n , ValidateForm = require('widgets/ValidateForm')\n\nvar View = Backbone.View.extend({\n events: {\n 'submit form': 'formSubmitted'\n , 'keyup textarea[name=\"content\"]': 'handleContentChanged'\n }\n, initialize: function(options) {\n options = options || {}\n }\n, formSubmitted: function(e) {\n e.preventDefault()\n }\n, renderFieldErrors: function(fieldErrors) {\n var errorBlock = this.$('.errors-block')\n if (!fieldErrors || !fieldErrors.length) {\n errorBlock.hide()\n return\n }\n\n errorBlock.empty()\n\n _.each(fieldErrors, function(x) {\n if (!x.message) { return }\n errorBlock.append('
  • ' + x.message + '
  • ')\n })\n\n // force captcha refresh\n this.$('.xcaptcha_img_change').click()\n\n errorBlock.show()\n }\n, submitFormFromSudoku: function(captchaCode, error) {\n var dict = formUtils.toDict(this.form)\n , EMPTY_ERRORS = []\n\n if (!this.validateForm.validate()) {\n this.renderFieldErrors(this.validateForm.fieldErrors)\n return\n }\n\n formUtils.readonlyForm(this.form)\n\n this.renderFieldErrors(EMPTY_ERRORS)\n\n this.ajaxSubmitForm(\n _.extend(\n { id: ued.gameCode, code: captchaCode }\n , dict\n )\n )\n .done(_.bind(function(resp) {\n var SUCCESS = 1\n if (resp.status === SUCCESS) {\n this.showSuccessResult()\n return\n }\n\n this.renderFieldErrors([{ message: resp.msg }])\n }, this))\n .fail(_.bind(function() {\n this.renderFieldErrors([{ message: '网络发生了错误' }])\n }, this))\n .always(_.bind(function() {\n formUtils.resumeForm(this.form)\n }, this))\n }\n, showSuccessResult: function() {\n this.$el.html(successResultTmpl())\n }\n, ajaxSubmitForm: function(data) {\n return $.ajax({\n type: 'POST'\n , url: '/legacy-cherish.html'\n , data: data\n , dataType:'json'\n })\n }\n, handleContentChanged: function(e) {\n var textarea = $(e.currentTarget)\n , content = $.trim(textarea.val())\n , contentLength = content.length\n\n this.renderContentRemainLengthTips(contentLength)\n }\n, renderContentRemainLengthTips: function(contentLength) {\n var MAX_CONTENT_LENGTH = 50\n , remainLength = MAX_CONTENT_LENGTH - contentLength\n , hasOverflowLength = remainLength < 0\n , tipsContainer = this.$('.textarea-words-num')\n\n tipsContainer.css({\n 'color': hasOverflowLength ? 'red': 'inherit'\n })\n\n tipsContainer.html(\n (hasOverflowLength\n ? '已经超出了'\n : '还可以输入')\n +'' + Math.abs(remainLength) + '个字'\n )\n }\n, render: function() {\n var EMPTY_CONTENT_LENGTH = 0\n\n this.$el.html(tmpl())\n this.form = this.$('form')\n\n this.validateForm = new ValidateForm({\n form: this.form\n })\n\n this.renderContentRemainLengthTips(EMPTY_CONTENT_LENGTH)\n\n this.$('#sudoku').sudoku({\n 'ajaxValidata': false\n , 'callback': _.bind(this.submitFormFromSudoku, this)\n })\n\n return this\n }\n})\n\nmodule.exports = enableDialog(View, { title: '怀念' })\n","var Handlebars = require(\"../../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
    \\n

    写下你想说的话吧~

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    验证码加载中...
    \\n
    \\n
    \\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"\\n怀念成功,感谢您的热心参与!\\n\";\n},\"useData\":true});","var $ = require('jquery')\n , X_OFFSET = 30\n , Y_OFFSET = 25\n\nfunction ifDefinedOr(value, defaultValue) {\n return value !== void 0 ? value : defaultValue\n}\n\nfunction View(element) {\n this.$el = element\n this.xOffset = ifDefinedOr(this.$el.data('mini-tip-x-offset'), X_OFFSET)\n this.yOffset = ifDefinedOr(this.$el.data('mini-tip-y-offset'), Y_OFFSET)\n}\n\nView.prototype.listen = function() {\n this.$el\n .mousemove($.proxy(function(e) {\n var x = e.pageX + this.xOffset\n , y = e.pageY + this.yOffset\n , tips = this.tips()\n\n tips.css({ left: x, top: y }).show()\n }, this))\n .mouseleave($.proxy(function() {\n this.tips().hide()\n }, this))\n}\n\nView.prototype.tips = function() {\n var body = $('body')\n\n if (!this.tipElementHasCreated) {\n this.tipElement = $('
    ', {\n 'class': 'tooltip'\n })\n\n var tipRawHtmlTmpl = this.$el.data('mini-tip-tmpl')\n\n this.tipElement\n .css({ position: 'absolute' , zIndex: '544' })\n\n if (!tipRawHtmlTmpl) {\n this.tipElement.text(this.$el.data('mini-tip'))\n } else {\n this.tipElement.html(\n $('script#' + tipRawHtmlTmpl).html()\n )\n }\n\n body.append(this.tipElement)\n this.tipElementHasCreated = true\n }\n\n return this.tipElement\n}\n\nView.prototype.render = function() {\n if (!this.$el.is('[data-mini-tip]')) { return }\n this.disableBrowserNativeTooltip()\n this.listen()\n}\n\nView.prototype.disableBrowserNativeTooltip = function() {\n if (!this.$el.is('a')) { return }\n this.$el.removeAttr('title')\n}\n\nView.applyWithIn = function(selector, context) {\n context = context || document\n\n $(context).find(selector).each(function(i, el) {\n var widget = new View($(el), context)\n widget.render()\n })\n}\n\nmodule.exports = View\n","import '@/css/final/index.scss';\r\nrequire('./sections/profile');\r\nrequire('./sections/similar')\r\nvar _ = require('underscore');\r\nvar pingjs = require('widgets/ping');\r\nvar MiniTip = require('widgets/MiniTip');\r\n\r\nif (/newgame.local/.test(location.href)) {\r\n $('body').append('')\r\n}\r\n\r\nvar app = {\r\n init: function () {\r\n app.bind()\r\n app.slick()\r\n app.mainTab()\r\n app.dialog()\r\n app.user()\r\n app.introExtend()\r\n app.renderRank()\r\n app.rederFollow()\r\n app.audioPlay()\r\n app.renderAct()\r\n app.renderAwardGames()\r\n $(window).on('load resize', function () {\r\n app.fixed()\r\n })\r\n MiniTip.applyWithIn('[data-mini-tip]')\r\n pingjs.applyTrackBlock()\r\n pingjs.applyTrackLink()\r\n pingjs.applyBgArea()\r\n },\r\n bind: function () {\r\n lightbox.option({\r\n 'resizeDuration': 400,\r\n // 'disableScrolling':true,\r\n })\r\n $('.item-pic').on('click', function () {\r\n $('#lightboxWrap').show()\r\n })\r\n $('.lb-close,#lightboxWrap').on('click', function () {\r\n $('#lightboxWrap').fadeOut(500)\r\n })\r\n // 预约组件互通\r\n window.ued && window.ued.emitter && ued.emitter.on('GAMERESERVE-FOLLOWED', function () {\r\n if ($('.gb-newgame-channel').text() == '预约') {\r\n $('.gb-newgame-comm-btn').addClass('disable')\r\n $('.gb-newgame-channel').text('已预约')\r\n }\r\n })\r\n window.ued && window.ued.emitter && ued.emitter.on('GAMETOP-FOLLOWED', function () {\r\n $('.game-follow-bt').click()\r\n })\r\n },\r\n fixed: function () {\r\n var windowHeight = $(window).height(); // 浏览器自身的高度\r\n function checkFixed(ele) { // 传入一个元素的jq对象\r\n var scrollTop = $(window).scrollTop(); //即页面向上滚动的距离\r\n var offsetTop = ele.offset().top + ele.height(); //目标元素相对于document顶部的位置\r\n //在2个临界状态之间的就为出现在视野中的\r\n if (offsetTop < (scrollTop + windowHeight)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n $('.game-questionnaire').height($('.game-questionnaire .fixed-con').height())\r\n $('.js-fixed-wrap').height($('.js-fixed-wrap .fixed-con').height())\r\n var ti = setInterval(function () {\r\n if ($('.mod-17173app-qrcode').length) {\r\n $('.js-fixed-wrap').height($('.js-fixed-wrap .fixed-con').height())\r\n clearInterval(ti)\r\n }\r\n }, 1000)\r\n\r\n $(window).on('scroll', function () {\r\n $('.js-fixed-wrap').each(function () {\r\n var _this = $(this)\r\n // fixed元素高度大于屏幕高度\r\n if (_this.height() > windowHeight || _this.height() > windowHeight) {\r\n $('.fixed-con', _this).removeClass('fixed-top')\r\n if (checkFixed(_this)) {\r\n $('.fixed-con', _this).addClass('fixed-bottom')\r\n } else {\r\n $('.fixed-con', _this).removeClass('fixed-bottom')\r\n }\r\n } else {\r\n $(window).scrollTop() > _this.offset().top ? $('.fixed-con', _this).addClass('fixed-top') : $('.fixed-con', _this).removeClass('fixed-top')\r\n }\r\n })\r\n $('.mod-17173app-qrcode-con').length &&\r\n $(window).scrollTop() > $('.mod-17173app-qrcode').offset().top ? $('.mod-17173app-qrcode-con').addClass('fixed-top') : $('.mod-17173app-qrcode-con').removeClass('fixed-top')\r\n })\r\n },\r\n dialog: function () {\r\n $('[data-dialog]').on('click', function () {\r\n var dialogName = $(this).attr('data-dialog')\r\n $('.dialog-' + dialogName).show()\r\n if (dialogName == 'video') {\r\n var iframeSrc = $(this).data('video').split('/', -1)[4];\r\n var html = '';\r\n $('.dialog-video').find('.dialog-bd').html(html);\r\n }\r\n })\r\n\r\n $('.dialog .btn-close').on('click', function () {\r\n $(this).parents('.dialog').hide();\r\n $(this).parents('.dialog').hasClass('dialog-video') && $(this).parents('.dialog').find('.dialog-bd').html('')\r\n });\r\n },\r\n slick: function () {\r\n var $focus_list = $('.js-focus').find('.focus-list')\r\n $focus_list.slick({\r\n lazyLoad: 'ondemand',\r\n slidesToScroll: 1,\r\n variableWidth: true,\r\n dots: false,\r\n infinite: true,\r\n speed: 500,\r\n autoplay: false,\r\n focusOnSelect: true,\r\n })\r\n // 视频\r\n $('.js-view-video').each(function () {\r\n var iframeSrc = $(this).find('.box-video').data('url').split('/', -1)[4];\r\n var html = '';\r\n $(this).find('.box-iframe-video').html(html)\r\n $focus_list.on('beforeChange', function (event, slick, currentSlide, nextSlide) {\r\n if (nextSlide != 0) {\r\n $(this).find('.box-iframe-video').html('')\r\n } else {\r\n $(this).find('.box-iframe-video').html(html)\r\n }\r\n })\r\n })\r\n\r\n $('.slick-slide', $focus_list).each(function () {\r\n if (!$(this).hasClass('slick-cloned')) {\r\n $(this).find('.item-pic a').attr({\r\n 'data-lightbox': 'pics',\r\n href: $(this).find('img').attr('src').split('!')[0]\r\n })\r\n }\r\n })\r\n },\r\n mainTab: function () {\r\n var $mainTab = $('.main-tab .tab-in>[data-tab]')\r\n var topOffsetTop = $('.main-tab').offset().top\r\n var mainHeight = $('.main-tab').height()\r\n\r\n $('.main-tab .tab-in a').on('click', function () {\r\n $(this).addClass('active').siblings().removeClass('active');\r\n });\r\n\r\n $mainTab.on('click', function () {\r\n var index = $(this).index();\r\n $('.main-tab .tab-pn .tab-pn-con').eq(index).show().siblings().hide();\r\n $('html, body').stop().animate({\r\n scrollTop: topOffsetTop\r\n }, 0)\r\n });\r\n\r\n $('.law a').on('click', function () {\r\n $('.js-tab-cmt').trigger('click')\r\n });\r\n $('.js-tab-cmt').on('click', function () {\r\n $('.main-tab .tab-pn .tab-pn-con').eq(0).show().siblings().hide()\r\n $('html, body').stop().animate({\r\n scrollTop: $('.pn-comment').offset().top - 165\r\n }, 200)\r\n });\r\n\r\n $('.js-tab').each(function () {\r\n var tabNav = $(this).find('.tab-nav-list')\r\n var tabPn = $(this).find('.tab-pn-news')\r\n $(tabNav).find('a').on('click', function () {\r\n var i = $(this).index()\r\n $(this).addClass('active').siblings().removeClass('active')\r\n tabPn.find('.tab-pn-news-con').eq(i).show().siblings('.tab-pn-news-con').hide()\r\n })\r\n })\r\n\r\n var onScroll = function () {\r\n if ($('.main-tab').offset().top != topOffsetTop) {\r\n topOffsetTop = $('.main-tab').offset().top\r\n }\r\n if ($('.main-tab').height() != mainHeight) {\r\n mainHeight = $('.main-tab').height()\r\n }\r\n if ($(document).scrollTop() > topOffsetTop) {\r\n $('.main-tab .tab-in').addClass('fixed');\r\n } else {\r\n $('.main-tab .tab-in').removeClass('fixed');\r\n }\r\n\r\n if ($(document).scrollTop() > $('.header').height() - 400) {\r\n $('.pn-float-final').show();\r\n } else {\r\n $('.pn-float-final').hide();\r\n }\r\n }\r\n\r\n $(window).on('scroll', onScroll);\r\n\r\n $('.btn-gotop').on('click', function () {\r\n $('html, body').stop().animate({\r\n scrollTop: 0,\r\n }, 500);\r\n });\r\n\r\n pandora.use(['qrcode'], function (Qrcode) {\r\n var qqUrl = $('#code-qq').data('url');\r\n new Qrcode({\r\n element: '#code-qq',\r\n text: qqUrl,\r\n size: 92,\r\n image: 'https://ue.17173cdn.com/a/newgame/final/202107/img/ico-qq.png',\r\n imageSize: 28,\r\n });\r\n });\r\n },\r\n user: function () {\r\n var setAvatar = function () {\r\n var url = Passport.getUserPortrait(Passport.data('uid').toString(), 1)\r\n $('.header-c1 .btn-login img').attr({\r\n 'src': url,\r\n 'href': 'https://passport.17173.com/main'\r\n })\r\n }\r\n\r\n if (Passport.isLoggedIn()) {\r\n $('.header-c1 .btn-remind').addClass('login');\r\n setAvatar();\r\n }\r\n Passport.on(Passport.EVENTS.loginSuccess, function (events) {\r\n setAvatar();\r\n });\r\n $('[data-login]').click(function () {\r\n if (!Passport.isLoggedIn()) {\r\n Passport.Dialog.show();\r\n return;\r\n }\r\n });\r\n },\r\n // 简介展开收起\r\n introExtend: function () {\r\n $('.js-extend').each(function () {\r\n var $this = $(this)\r\n var $txt = $(this).find('.box-txt')\r\n var $ViewMore = $(this).find('.view-more')\r\n $txt.height() > 66 ? $ViewMore.show() : $ViewMore.hide()\r\n $ViewMore.click(function () {\r\n if ($(this).text() == '展开') {\r\n $(this).text('收起')\r\n $this.addClass('show')\r\n } else {\r\n $(this).text('展开')\r\n $this.removeClass('show')\r\n }\r\n })\r\n })\r\n },\r\n // 关注数 下载数 游戏下载链接渲染\r\n rederFollow: function () {\r\n // 关注数\r\n $.ajax({\r\n url: '//api.17173.com/hao/v1/getGameScheCount',\r\n data: {\r\n game_codes: gameCode\r\n },\r\n dataType: 'jsonp',\r\n }).done(function (res) {\r\n (res.data[gameCode] && res.data[gameCode] > 99) && $('[data-follow-count]').text(res.data[gameCode]).parents('.item').show()\r\n })\r\n\r\n // 下载数\r\n var fetchGameDownLoad = function (gameCode) {\r\n return $.ajax({\r\n url: '//d.17173cdn.com/download/game/js/' + gameCode + '.js',\r\n dataType: 'script',\r\n scriptCharset: 'utf-8',\r\n cache: true\r\n })\r\n }\r\n fetchGameDownLoad(gameCode).done(function () {\r\n var datastore = window.DATASTORE || window.DATASTORELAB || {}\r\n var DownNumInfo = datastore['game.downnum'] || {}\r\n var currentDownNum = DownNumInfo[gameCode] || {}\r\n if (currentDownNum.downnum) {\r\n $('[data-down-num]').text(currentDownNum.downnum)\r\n $('[data-down-num]').parents('.item').show()\r\n }\r\n })\r\n\r\n },\r\n // 排行榜\r\n renderRank: function (data) {\r\n var fetchSubRank = function (subRankListUrl) {\r\n $.ajax({\r\n url: 'https://api.17173.com/merge-interface/v1/game-rank',\r\n dataType: \"jsonp\",\r\n data: {\r\n gameCode: gameCode,\r\n rankingUrl: subRankListUrl\r\n },\r\n success: function (d) {\r\n $('.hot-rank .rank').html(''+d.data.rankingName+'
    '+d.data.rank+'
    ')\r\n }\r\n })\r\n };\r\n\r\n var fetchGameRankInfo = function (gameCode) {\r\n return $.ajax({\r\n url: '//d.17173cdn.com/game-top/info/js/' + gameCode + '.js',\r\n dataType: 'script',\r\n scriptCharset: 'utf-8',\r\n cache: true\r\n })\r\n };\r\n var renderRankView = function (currentTopInfo) {\r\n var rankName, rankUrl, isOnlineGame = false, subRankListUrl\r\n if (currentTopInfo.rank_type === 'NEW') {\r\n rankName = '新游期待榜'\r\n rankUrl = '//top.17173.com/list-1-0-0-0-0-0-0-0-0-0-1.html'\r\n subRankListUrl = 'http://top.17173.com/list-1-0-0-0-0-0-0-0-0-0-1.html'\r\n isOnlineGame = true\r\n } else if (currentTopInfo.rank_type === 'HOT') {\r\n rankName = '热门游戏榜'\r\n rankUrl = '//top.17173.com/list-2-0-0-0-0-0-0-0-0-0-1.html'\r\n subRankListUrl = 'http://top.17173.com/list-2-0-0-0-0-0-0-0-0-0-1.html'\r\n isOnlineGame = true\r\n } else if (currentTopInfo.rank_type === 'EXPECT') {\r\n rankName = '手游期待榜'\r\n rankUrl = '//top.17173.com/list-1-0-4-0-0-0-0-0-0-0-1.html'\r\n subRankListUrl = 'http://top.17173.com/list-1-0-4-0-0-0-0-0-0-0-1.html'\r\n } else {\r\n rankName = '手游热门榜'\r\n rankUrl = '//top.17173.com/list-2-0-4-0-0-0-0-0-0-0-1.html'\r\n subRankListUrl = 'http://top.17173.com/list-2-0-4-0-0-0-0-0-0-0-1.html'\r\n }\r\n var info = {\r\n rankNumber: currentTopInfo.rank_num,\r\n rankName: rankName,\r\n rankUrl: rankUrl,\r\n voteNumber: currentTopInfo.heats_num,\r\n hasVoteAct: window.ued.voteActFlag,\r\n isOnlineGame: isOnlineGame,\r\n rankUnlessEmpty: !_.isEmpty(currentTopInfo) && currentTopInfo.rank_num,\r\n subRankListUrl: subRankListUrl\r\n }\r\n if (info.rankUnlessEmpty == 0) {\r\n $('[data-rank-url],.hot-rank .js-vote').hide()\r\n } else {\r\n $('.download-rank .status').addClass('ex')\r\n $('[data-rank-url],.hot-rank .js-vote').show()\r\n fetchSubRank(subRankListUrl, info.rankName)\r\n }\r\n }\r\n fetchGameRankInfo(gameCode).done(function () {\r\n var datastore = window.DATASTORE || window.DATASTORELAB || {}\r\n var topInfo = datastore['game-top.info'] || {}\r\n var currentTopInfo = topInfo[gameCode] || {}\r\n renderRankView(currentTopInfo)\r\n })\r\n },\r\n // 音频播放\r\n audioPlay: function () {\r\n $('.ots-list>li').on('click', function () {\r\n $('.ost-item audio')[0].pause();\r\n var src = $(this).data('ots');\r\n $(this).addClass('active').siblings().removeClass('active');\r\n $('.ost-item source').attr('src', src);\r\n $('.ost-item audio')[0].load();\r\n $('.ost-item audio')[0].currentTime = 0;\r\n $('.ost-item audio')[0].play();\r\n });\r\n },\r\n // 最新活动 走活动平台\r\n renderAct: function () {\r\n function goToBl() {\r\n // 定位到新闻爆料\r\n if ($('#bl_news').length && location.href.indexOf('#bl_news') > -1) {\r\n $('html, body').stop().animate({\r\n scrollTop: $('#bl_news').offset().top - 165,\r\n }, 200);\r\n }\r\n }\r\n if ($('[data-actid]').length) {\r\n var actId = $('[data-actid]').data('actid')\r\n $.ajax({\r\n url: 'https://actapp.17173.com/api/v2/activity/' + actId + '/info',\r\n dataType: 'jsonp',\r\n success: function (res) {\r\n $('[data-actid]').html('
    最新活动参与活动
    ')\r\n if (location.href.indexOf('#act') > -1) {\r\n $('html, body').stop().animate({\r\n scrollTop: $('[data-actid]').offset().top - 165,\r\n }, 0);\r\n }\r\n goToBl()\r\n }\r\n })\r\n } else {\r\n goToBl()\r\n }\r\n },\r\n //该奖项的游戏列表\r\n renderAwardGames: function () {\r\n $('.best-game li').on('click', function () {\r\n var i = $(this).data('id')\r\n var awardName = '《' + $(this).find('p:eq(0)').text() + '》' + $(this).find('p:eq(1)').text()\r\n $.ajax({\r\n url: './game-awards-' + i + '.html',\r\n success: function (res) {\r\n var html = []\r\n res.map(function (v) {\r\n html.push(awardGameHtml(v))\r\n })\r\n $('.dialog-awards .dialog-hd .tit').html(awardName)\r\n $('.dialog-awards .game-list').html(html.join(''))\r\n $('.dialog-awards').show()\r\n }\r\n })\r\n function awardGameHtml(data) {\r\n var imgPath = data.logo_pic + '!a-3-240x.' + data.logo_pic.substring(data.logo_pic.lastIndexOf(\".\") + 1)\r\n return '
    ' + data.game_name + '
    '\r\n }\r\n })\r\n }\r\n}\r\n$(function () {\r\n app.init()\r\n})","var $ = require('jquery'),\n requireLogin = require('widgets/requireLogin'),\n voteCurrentGame = require('./voteCurrentGame'),\n renderDownload = require('./renderDownload'),\n cherishCurrentGame = require('./cherishCurrentGame')\n\n$(function () {\n $('.header').on('click', '.js-vote', requireLogin(voteCurrentGame, 'vote'))\n $('.header').on('click', '.js-cherish', requireLogin(cherishCurrentGame))\n renderDownload($('.header'))\n})\n\n","var $ = require('jquery')\n , ERROR_MSG = '网络发生了错误'\n , openAlert = require('game-info/widgets/openAlert')\n , ActivityForm = require('game-info/widgets/ActivityForm')\n , voteSuccessTmpl = require('./voteSuccessTmpl.handlebars')\n , fetchActivityInfo = require('game-info/mods/fetchActivityInfo')\n\nfunction submitVoteInfo(gameCode) {\n var dfd = new $.Deferred()\n\n $.ajax({\n type: 'POST'\n , url: '/game-vote.html'\n , dataType:'json'\n , data: { id : gameCode }\n }).done(function(resp) {\n dfd.resolve(resp)\n }).fail(dfd.reject)\n\n return dfd.promise()\n}\n\nmodule.exports = function(e) {\n var ued = window.ued || {}\n , gameCode = ued.gameCode\n $.when(fetchActivityInfo(gameCode), submitVoteInfo(gameCode))\n .done(function(activityInfo, voteResult) {\n // console.log(gameCode,activityInfo)\n if (activityInfo && activityInfo.begin_time) {\n var formDiaog = new ActivityForm({\n activityInfo: activityInfo\n , resultMessage: voteSuccessTmpl()\n })\n\n formDiaog.render().open()\n return\n }\n\n if (voteResult.result === 'failure') {\n return openAlert({ content: voteResult.msg || ERROR_MSG })\n }\n\n openAlert({ title: '投票成功', html: voteSuccessTmpl })\n })\n .fail(function() { openAlert({ content: ERROR_MSG }) })\n}\n","var Handlebars = require(\"../../../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n return \"
    \\n \\n \\n 投票信息正在审核中,感谢您的热心参与!\\n
    \\n\";\n},\"useData\":true});","var $ = require('jquery'),\n GetDownloadUrls = require('widgets/getDownloadUrls')\n\nmodule.exports = function (container) {\n var ued = window.ued || {},\n section = container.find('.header-c2'),\n defaultBtUrl = section.find('.channel-dl-pc').attr('href'),\n data = {}\n if (defaultBtUrl != 'javascript:;') {\n data.dlSiteInfo = {\n url: defaultBtUrl,\n dataBiClick: 'g_1_' + ued.gameCode + '_download',\n sourceOfficial: false,\n }\n }\n\n var newGameCodes = {}\n if (ued.newgameCodes) {\n if (typeof ued.newgameCodes.iOS != 'undefined') {\n newGameCodes.ios = ued.newgameCodes.iOS\n }\n if (typeof ued.newgameCodes.Android != 'undefined') {\n newGameCodes.android = ued.newgameCodes.Android\n }\n if (typeof ued.newgameCodes.PC != 'undefined') {\n newGameCodes.pc = ued.newgameCodes.PC\n }\n }\n\n // 20240411去掉“电脑版下载”,使用正常的下载逻辑\n // var getDownloadUrls = new GetDownloadUrls(newGameCodes)\n // 如果是手游则判断有没有雷电合作链接\n // if (ued.isMobileGame) {\n // $.when(getDownloadUrls.getPlatformUrl('100000' + ued.gameId, true)).then(\n // function (res) {\n // // source 为 20 表示是联运的,为 40 表示是官方\n // if (res.data && res.data.source == 20) {\n // section\n // .find('.channel-dl')\n // .attr('href', res.data.downloadUrl)\n // .attr('target', '_self')\n // .text('电脑版下载»')\n // .show()\n // } else {\n // render()\n // }\n // }\n // )\n // } else {\n // render()\n // }\n render()\n\n function render() {\n ued.emitter.on('NEWGAME-INFO-DOWNLOADTEXT', function () {\n $('.channel-dl')\n .show()\n .on('click', function () {\n $('.gb-newgame-comm-btn a').click()\n })\n })\n }\n}\n","var $ = require('jquery')\n , ERROR_MSG = '网络发生了错误'\n , openAlert = require('game-info/widgets/openAlert')\n , CherishForm = require('game-info/widgets/CherishForm')\n\nmodule.exports = function(e) {\n var ued = window.ued || {}\n , gameCode = ued.gameCode\n\n var formDiaog = new CherishForm()\n formDiaog.render().open()\n}\n","var $ = require('jquery')\n , tmpl = require('./tmpl.handlebars')\n , _ = require('underscore')\n\n$(function() {\n /**\n * XXX: 猜你喜欢模块,包含推广位,原开发:黄见欢\n */\n var favorRecommend = {\n pageSize: 4,\n similarGamesArr: [],\n initialSimilarGamesArr: [],\n recommendData: {},\n isReseted : false,\n // 初始化方法,包括获取当前游戏类型、获取一个推广游戏数据、获取相似游戏数据、绑定元素事件\n init: function() {\n var ued = window.ued || {}\n this.gameType = ued.gameType;\n this.getRecommend();\n this.getSimilar();\n this.bindEvents();\n this.showList();\n },\n // 获取符合时间范围,且符合投放类型的推广数据,并随机选择一条在当前页显示\n getRecommend: function() {\n var rcmdList = window.favorRcmd || [], validData = [];\n for (var i = 0; i < rcmdList.length; i++) {\n var startDate = rcmdList[i].startDate;\n var endDate = rcmdList[i].endDate;\n\n if (this.dateBeforeNow(startDate) && this.dateAfterNow(endDate) && (!rcmdList[i].only_this_type || rcmdList[i].game_type_name == this.gameType )) {\n validData.push(rcmdList[i]);\n }\n }\n if (validData.length > 0) {\n this.recommendData = validData[parseInt(Math.random()*validData.length,10)];\n this.pageSize = 3;\n }\n },\n // 计算日期是否比当前早\n dateBeforeNow: function(dateStr) {\n return !dateStr || new Date(dateStr).getTime() <= new Date().getTime();\n },\n // 计算日期是否迟于当前日期\n dateAfterNow: function(dateStr) {\n return !dateStr || new Date(dateStr).getTime() >= new Date().getTime();\n },\n // 获取相似游戏数据,并剔除与推广游戏相同的数据\n getSimilar: function() {\n var ued = window.ued || {}\n this.similarGamesArr = ued.similarGamesArr || [];\n this.initialSimilarGamesArr = this.similarGamesArr.concat();\n if (!!this.recommendData.game_code) {\n for (var i = 0; i < this.similarGamesArr.length; i++) {\n if (this.similarGamesArr[i].game_code == this.recommendData.game_code) {\n this.similarGamesArr.splice(i, 1);\n }\n }\n }\n // 数组随机排序\n for (var i = this.similarGamesArr.length - 1; i > 0; i--) {\n var j = Math.floor(Math.random() * (i + 1));\n var temp = this.similarGamesArr[i];\n this.similarGamesArr[i] = this.similarGamesArr[j];\n this.similarGamesArr[j] = temp;\n }\n },\n // 渲染一条数据\n renderItem: function(item, isRecommend) {\n var isSy = false\n , platforms = item.game_platform\n for (var i = 0; i < platforms.length; i++) {\n if (platforms[i] == 'Android' || platforms[i] == 'IOS') {\n isSy = true;\n break\n }\n }\n\n var info = $.extend({\n logoPicture: item.show_pic || item.logo_pic || item.large_logo\n , hasStarLevel: !!item.star_level\n , starLevelPercent: item.star_level * 20\n , isSy: isSy\n , tags: _.map([\n 'game_frame'\n , 'game_style'\n , 'game_theme'\n , 'game_type'\n ], function(tagName) {\n return {\n name: item[tagName + '_name']\n , url: item[tagName + '_url']\n }\n })\n }, item)\n\n if (!item.game_code) { return '' }\n\n return tmpl(info)\n },\n // 渲染整个列表\n showList: function() {\n var html = '', itemArr = [];\n // 先渲染推广数据\n if (!$.isEmptyObject(this.recommendData)) {\n html += this.renderItem(this.recommendData, true);\n }\n\n if(this.similarGamesArr.length > this.pageSize) {\n for (var l = 0; l < this.pageSize; l++) {\n html += this.renderItem(this.similarGamesArr[l]);\n }\n this.similarGamesArr.splice(0, this.pageSize);\n if (this.similarGamesArr.length <= this.pageSize) {\n this.isReseted = true;\n }\n } else {\n for (var i = 0; i < this.similarGamesArr.length; i++) {\n html+= this.renderItem(this.similarGamesArr[i]);\n }\n if (this.isReseted) {\n this.similarGamesArr = this.initialSimilarGamesArr.concat();\n }\n }\n\n $('.js-similar-list').empty().append(html);\n },\n // 绑定元素事件\n bindEvents: function() {\n var self = this;\n $('.js-similar-list').show();\n if (this.similarGamesArr.length > this.pageSize) {\n $('.js-refresh-similar').click(function() {\n self.showList();\n });\n } else {\n $('.js-refresh-similar').hide();\n }\n }\n };\n favorRecommend.init();\n})\n","var Handlebars = require(\"../../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \" \\n \\n \\n \\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n return \" 暂未评星\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"name\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":25,\"column\":6},\"end\":{\"line\":27,\"column\":13}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \" \"\n + alias4(((helper = (helper = lookupProperty(helpers,\"name\") || (depth0 != null ? lookupProperty(depth0,\"name\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"name\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":26,\"column\":57},\"end\":{\"line\":26,\"column\":65}}}) : helper)))\n + \"\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"
  • \\n \\n
    \\n

    \\n \"\n + alias4(((helper = (helper = lookupProperty(helpers,\"game_name\") || (depth0 != null ? lookupProperty(depth0,\"game_name\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"game_name\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":21,\"column\":67},\"end\":{\"line\":21,\"column\":80}}}) : helper)))\n + \"\\n

    \\n
    \\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"tags\") : depth0),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(5, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":24,\"column\":6},\"end\":{\"line\":28,\"column\":15}}})) != null ? stack1 : \"\")\n + \"
    \\n
    \\n
  • \";\n},\"useData\":true});"],"sourceRoot":""}