{"version":3,"sources":["webpack:///vendor.c6beacf4ff958d611fa9.bundle.js","webpack:///./src/vendor.ts","webpack:///angular2/src/facade/lang.ts","webpack:///./~/rxjs/Observable.js","webpack:///angular2/core.ts","webpack:///angular2/src/facade/collection.ts","webpack:///angular2/src/facade/exceptions.ts","webpack:///./~/rxjs/Subscriber.js","webpack:///angular2/src/core/di.ts","webpack:///angular2/src/facade/async.ts","webpack:///./~/rxjs/OuterSubscriber.js","webpack:///./~/rxjs/util/subscribeToResult.js","webpack:///./~/rxjs/util/errorObject.js","webpack:///angular2/src/platform/dom/dom_adapter.ts","webpack:///./~/rxjs/util/tryCatch.js","webpack:///./~/rxjs/Subject.js","webpack:///angular2/src/core/reflection/reflection.ts","webpack:///./~/rxjs/Subscription.js","webpack:///angular2/src/core/change_detection/change_detection.ts","webpack:///./~/rxjs/util/root.js","webpack:///angular2/src/common/forms/directives/control_value_accessor.ts","webpack:///angular2/src/common/forms/validators.ts","webpack:///angular2/src/common/pipes/invalid_pipe_argument_exception.ts","webpack:///./~/rxjs/util/isArray.js","webpack:///angular2/src/compiler/util.ts","webpack:///angular2/src/core/change_detection/constants.ts","webpack:///angular2/src/common/forms/directives/ng_control.ts","webpack:///angular2/src/core/metadata/view.ts","webpack:///angular2/src/http/enums.ts","webpack:///angular2/src/router/instruction.ts","webpack:///./~/rxjs/util/SymbolShim.js","webpack:///angular2/router.ts","webpack:///angular2/src/common/forms/directives/shared.ts","webpack:///angular2/src/compiler/source_module.ts","webpack:///angular2/src/compiler/template_ast.ts","webpack:///angular2/src/core/change_detection/change_detection_util.ts","webpack:///angular2/src/core/di/metadata.ts","webpack:///angular2/src/core/linker/compiler.ts","webpack:///angular2/src/platform/dom/events/event_manager.ts","webpack:///angular2/src/common/forms/directives/control_container.ts","webpack:///angular2/src/compiler/html_tags.ts","webpack:///angular2/src/compiler/url_resolver.ts","webpack:///angular2/src/core/application_tokens.ts","webpack:///angular2/src/core/change_detection/proto_record.ts","webpack:///angular2/src/core/di/provider.ts","webpack:///angular2/src/core/linker/dynamic_component_loader.ts","webpack:///angular2/src/core/linker/view.ts","webpack:///angular2/src/core/linker/view_type.ts","webpack:///angular2/src/core/metadata/directives.ts","webpack:///angular2/src/core/util/decorators.ts","webpack:///angular2/src/facade/promise.ts","webpack:///angular2/src/http/headers.ts","webpack:///angular2/src/platform/dom/dom_tokens.ts","webpack:///angular2/src/router/location/location_strategy.ts","webpack:///angular2/src/router/location/platform_location.ts","webpack:///./~/rxjs/observable/PromiseObservable.js","webpack:///./~/rxjs/symbol/rxSubscriber.js","webpack:///./~/rxjs/util/isFunction.js","webpack:///angular2/common.ts","webpack:///angular2/http.ts","webpack:///angular2/src/common/forms/directives/checkbox_value_accessor.ts","webpack:///angular2/src/common/forms/directives/default_value_accessor.ts","webpack:///angular2/src/common/forms/directives/radio_control_value_accessor.ts","webpack:///angular2/src/common/forms/directives/select_control_value_accessor.ts","webpack:///angular2/src/common/forms/model.ts","webpack:///angular2/src/compiler/directive_metadata.ts","webpack:///angular2/src/compiler/xhr.ts","webpack:///angular2/src/core/change_detection/parser/ast.ts","webpack:///angular2/src/core/linker/directive_resolver.ts","webpack:///angular2/src/core/linker/element.ts","webpack:///angular2/src/core/linker/interfaces.ts","webpack:///angular2/src/core/linker/view_manager.ts","webpack:///angular2/src/core/linker/view_ref.ts","webpack:///angular2/src/core/metadata.ts","webpack:///angular2/src/core/render/api.ts","webpack:///angular2/src/core/testability/testability.ts","webpack:///angular2/src/core/zone/ng_zone.ts","webpack:///angular2/src/http/base_response_options.ts","webpack:///angular2/src/http/http_utils.ts","webpack:///angular2/src/platform/dom/shared_styles_host.ts","webpack:///angular2/src/router/location/location.ts","webpack:///angular2/src/router/route_config/route_config_impl.ts","webpack:///angular2/src/router/router.ts","webpack:///./~/rxjs/util/ObjectUnsubscribedError.js","webpack:///./~/rxjs/util/isPromise.js","webpack:///angular2/platform/browser.ts","webpack:///angular2/platform/common_dom.ts","webpack:///angular2/src/common/directives/ng_switch.ts","webpack:///angular2/src/common/forms/directives/abstract_control_directive.ts","webpack:///angular2/src/common/forms/directives/ng_control_group.ts","webpack:///angular2/src/common/forms/directives/ng_control_name.ts","webpack:///angular2/src/common/forms/directives/ng_control_status.ts","webpack:///angular2/src/common/forms/directives/ng_form.ts","webpack:///angular2/src/common/forms/directives/ng_form_control.ts","webpack:///angular2/src/common/forms/directives/ng_form_model.ts","webpack:///angular2/src/common/forms/directives/ng_model.ts","webpack:///angular2/src/common/forms/directives/number_value_accessor.ts","webpack:///angular2/src/common/forms/directives/validators.ts","webpack:///angular2/src/compiler/html_ast.ts","webpack:///angular2/src/compiler/html_parser.ts","webpack:///angular2/src/compiler/parse_util.ts","webpack:///angular2/src/compiler/proto_view_compiler.ts","webpack:///angular2/src/compiler/schema/element_schema_registry.ts","webpack:///angular2/src/compiler/style_url_resolver.ts","webpack:///angular2/src/compiler/template_compiler.ts","webpack:///angular2/src/compiler/template_parser.ts","webpack:///angular2/src/core/change_detection/abstract_change_detector.ts","webpack:///angular2/src/core/change_detection/directive_record.ts","webpack:///angular2/src/core/change_detection/interfaces.ts","webpack:///angular2/src/core/debug/debug_node.ts","webpack:///angular2/src/core/di/decorators.ts","webpack:///angular2/src/core/di/exceptions.ts","webpack:///angular2/src/core/di/forward_ref.ts","webpack:///angular2/src/core/di/key.ts","webpack:///angular2/src/core/linker/element_ref.ts","webpack:///angular2/src/core/linker/pipe_resolver.ts","webpack:///angular2/src/core/linker/view_container_ref.ts","webpack:///angular2/src/core/linker/view_resolver.ts","webpack:///angular2/src/core/metadata/di.ts","webpack:///angular2/src/core/platform_directives_and_pipes.ts","webpack:///angular2/src/core/profile/profile.ts","webpack:///angular2/src/facade/exception_handler.ts","webpack:///angular2/src/http/backends/browser_xhr.ts","webpack:///angular2/src/http/base_request_options.ts","webpack:///angular2/src/http/interfaces.ts","webpack:///angular2/src/http/static_response.ts","webpack:///angular2/src/platform/dom/dom_renderer.ts","webpack:///angular2/src/router/lifecycle/lifecycle_annotations_impl.ts","webpack:///angular2/src/router/route_registry.ts","webpack:///angular2/src/router/url_parser.ts","webpack:///./~/rxjs/add/operator/map.js","webpack:///./~/rxjs/add/operator/mergeMap.js","webpack:///./~/rxjs/operator/map.js","webpack:///./~/rxjs/operator/mergeMap.js","webpack:///./~/rxjs/operator/toPromise.js","webpack:///./~/rxjs/util/isObject.js","webpack:///./~/rxjs/util/throwError.js","webpack:///angular2/compiler.ts","webpack:///angular2/src/animate/animation_builder.ts","webpack:///angular2/src/animate/browser_details.ts","webpack:///angular2/src/common/directives.ts","webpack:///angular2/src/common/directives/ng_class.ts","webpack:///angular2/src/common/directives/ng_for.ts","webpack:///angular2/src/common/directives/ng_if.ts","webpack:///angular2/src/common/directives/ng_plural.ts","webpack:///angular2/src/common/directives/ng_style.ts","webpack:///angular2/src/common/forms.ts","webpack:///angular2/src/common/forms/form_builder.ts","webpack:///angular2/src/common/pipes/async_pipe.ts","webpack:///angular2/src/common/pipes/date_pipe.ts","webpack:///angular2/src/common/pipes/i18n_plural_pipe.ts","webpack:///angular2/src/common/pipes/i18n_select_pipe.ts","webpack:///angular2/src/common/pipes/json_pipe.ts","webpack:///angular2/src/common/pipes/lowercase_pipe.ts","webpack:///angular2/src/common/pipes/number_pipe.ts","webpack:///angular2/src/common/pipes/replace_pipe.ts","webpack:///angular2/src/common/pipes/slice_pipe.ts","webpack:///angular2/src/common/pipes/uppercase_pipe.ts","webpack:///angular2/src/compiler/change_detector_compiler.ts","webpack:///angular2/src/compiler/runtime_compiler.ts","webpack:///angular2/src/compiler/runtime_metadata.ts","webpack:///angular2/src/compiler/selector.ts","webpack:///angular2/src/compiler/style_compiler.ts","webpack:///angular2/src/compiler/template_normalizer.ts","webpack:///angular2/src/compiler/template_preparser.ts","webpack:///angular2/src/compiler/view_compiler.ts","webpack:///angular2/src/core/application_ref.ts","webpack:///angular2/src/core/change_detection.ts","webpack:///angular2/src/core/change_detection/binding_record.ts","webpack:///angular2/src/core/change_detection/change_detection_jit_generator.ts","webpack:///angular2/src/core/change_detection/change_detector_ref.ts","webpack:///angular2/src/core/change_detection/codegen_facade.ts","webpack:///angular2/src/core/change_detection/differs/default_iterable_differ.ts","webpack:///angular2/src/core/change_detection/differs/default_keyvalue_differ.ts","webpack:///angular2/src/core/change_detection/differs/iterable_differs.ts","webpack:///angular2/src/core/change_detection/differs/keyvalue_differs.ts","webpack:///angular2/src/core/change_detection/dynamic_change_detector.ts","webpack:///angular2/src/core/change_detection/exceptions.ts","webpack:///angular2/src/core/change_detection/parser/lexer.ts","webpack:///angular2/src/core/change_detection/parser/locals.ts","webpack:///angular2/src/core/change_detection/proto_change_detector.ts","webpack:///angular2/src/core/console.ts","webpack:///angular2/src/core/di/injector.ts","webpack:///angular2/src/core/linker/query_list.ts","webpack:///angular2/src/core/linker/resolved_metadata_cache.ts","webpack:///angular2/src/core/linker/template_ref.ts","webpack:///angular2/src/core/pipes/pipe_provider.ts","webpack:///angular2/src/core/pipes/pipes.ts","webpack:///angular2/src/core/reflection/reflection_capabilities.ts","webpack:///angular2/src/core/reflection/reflector.ts","webpack:///angular2/src/core/zone/ng_zone_impl.ts","webpack:///angular2/src/facade/base_wrapped_exception.ts","webpack:///angular2/src/facade/intl.ts","webpack:///angular2/src/facade/math.ts","webpack:///angular2/src/http/backends/browser_jsonp.ts","webpack:///angular2/src/http/backends/jsonp_backend.ts","webpack:///angular2/src/http/backends/xhr_backend.ts","webpack:///angular2/src/http/http.ts","webpack:///angular2/src/http/static_request.ts","webpack:///angular2/src/http/url_search_params.ts","webpack:///angular2/src/platform/browser/browser_adapter.ts","webpack:///angular2/src/platform/browser/xhr_impl.ts","webpack:///angular2/src/platform/browser_common.ts","webpack:///angular2/src/platform/dom/events/dom_events.ts","webpack:///angular2/src/platform/dom/util.ts","webpack:///angular2/src/router/directives/router_link.ts","webpack:///angular2/src/router/directives/router_outlet.ts","webpack:///angular2/src/router/lifecycle/lifecycle_annotations.ts","webpack:///angular2/src/router/lifecycle/route_lifecycle_reflector.ts","webpack:///angular2/src/router/location/path_location_strategy.ts","webpack:///angular2/src/router/route_config/route_config_decorator.ts","webpack:///angular2/src/router/router_providers_common.ts","webpack:///angular2/src/router/rules/route_paths/route_path.ts","webpack:///angular2/src/router/rules/rules.ts","webpack:///./~/rxjs/InnerSubscriber.js","webpack:///./~/rxjs/Observer.js","webpack:///./~/rxjs/subject/SubjectSubscription.js","webpack:///./~/rxjs/util/toSubscriber.js","webpack:///angular2/src/animate/animation.ts","webpack:///angular2/src/animate/css_animation_builder.ts","webpack:///angular2/src/animate/css_animation_options.ts","webpack:///angular2/src/common/common_directives.ts","webpack:///angular2/src/common/directives/core_directives.ts","webpack:///angular2/src/common/directives/observable_list_diff.ts","webpack:///angular2/src/common/forms/directives.ts","webpack:///angular2/src/common/forms/directives/normalize_validator.ts","webpack:///angular2/src/common/pipes.ts","webpack:///angular2/src/common/pipes/common_pipes.ts","webpack:///angular2/src/compiler/change_definition_factory.ts","webpack:///angular2/src/compiler/compiler.ts","webpack:///angular2/src/compiler/html_lexer.ts","webpack:///angular2/src/compiler/schema/dom_element_schema_registry.ts","webpack:///angular2/src/compiler/shadow_css.ts","webpack:///angular2/src/core/angular_entrypoint.ts","webpack:///angular2/src/core/application_common_providers.ts","webpack:///angular2/src/core/change_detection/coalesce.ts","webpack:///angular2/src/core/change_detection/codegen_logic_util.ts","webpack:///angular2/src/core/change_detection/codegen_name_util.ts","webpack:///angular2/src/core/change_detection/event_binding.ts","webpack:///angular2/src/core/change_detection/jit_proto_change_detector.ts","webpack:///angular2/src/core/change_detection/parser/parser.ts","webpack:///angular2/src/core/change_detection/pipe_lifecycle_reflector.ts","webpack:///angular2/src/core/change_detection/pipes.ts","webpack:///angular2/src/core/debug/debug_renderer.ts","webpack:///angular2/src/core/di/opaque_token.ts","webpack:///angular2/src/core/linker.ts","webpack:///angular2/src/core/linker/directive_lifecycle_reflector.ts","webpack:///angular2/src/core/platform_common_providers.ts","webpack:///angular2/src/core/prod_mode.ts","webpack:///angular2/src/core/profile/wtf_impl.ts","webpack:///angular2/src/core/profile/wtf_init.ts","webpack:///angular2/src/core/render.ts","webpack:///angular2/src/core/util.ts","webpack:///angular2/src/core/zone.ts","webpack:///angular2/src/facade/browser.ts","webpack:///angular2/src/facade/facade.ts","webpack:///angular2/src/platform/browser/generic_browser_adapter.ts","webpack:///angular2/src/platform/browser/testability.ts","webpack:///angular2/src/platform/browser/title.ts","webpack:///angular2/src/platform/browser/tools/common_tools.ts","webpack:///angular2/src/platform/browser/tools/tools.ts","webpack:///angular2/src/platform/dom/debug/by.ts","webpack:///angular2/src/platform/dom/debug/ng_probe.ts","webpack:///angular2/src/platform/dom/events/hammer_common.ts","webpack:///angular2/src/platform/dom/events/hammer_gestures.ts","webpack:///angular2/src/platform/dom/events/key_events.ts","webpack:///angular2/src/router/location/browser_platform_location.ts","webpack:///angular2/src/router/location/hash_location_strategy.ts","webpack:///angular2/src/router/route_config/route_config_normalizer.ts","webpack:///angular2/src/router/router_providers.ts","webpack:///angular2/src/router/rules/route_handlers/async_route_handler.ts","webpack:///angular2/src/router/rules/route_handlers/sync_route_handler.ts","webpack:///angular2/src/router/rules/route_paths/param_route_path.ts","webpack:///angular2/src/router/rules/route_paths/regex_route_path.ts","webpack:///angular2/src/router/rules/rule_set.ts","webpack:///angular2/src/router/utils.ts","webpack:///angular2/src/transform/template_compiler/change_detector_codegen.ts","webpack:////source/mdlComponentHandler.js","webpack:////source/tabs.js","webpack:////source/layout.js","webpack:////source/rAF.js","webpack:////source/button.js","webpack:////source/checkbox.js","webpack:////source/icon-toggle.js","webpack:////source/menu.js","webpack:////source/progress.js","webpack:////source/radio.js","webpack:////source/slider.js","webpack:////source/snackbar.js","webpack:////source/spinner.js","webpack:////source/switch.js","webpack:////source/textfield.js","webpack:////source/tooltip.js","webpack:////source/data-table.js","webpack:////source/ripple.js","webpack:////source/material.js","webpack:///(webpack)/buildin/module.js"],"names":["webpackJsonp","module","exports","__webpack_require__","global","scheduleMicroTask","fn","getTypeNameForDebugging","type","lockMode","enableProdMode","assertionsEnabled","CONST_EXPR","expr","CONST","isPresent","obj","isBlank","isString","isFunction","isType","isStringMap","isPromise","isArray","isNumber","isDate","noop","stringify","token","serializeEnum","val","deserializeEnum","values","resolveEnumToken","enumValue","looseIdentical","a","b","getMapKey","value","normalizeBlank","normalizeBool","isJsObject","o","print","setValueOnPath","path","getSymbolIterator","evalExpression","sourceUrl","declarations","vars","isPrimitive","hasConstructor","bitWiseOr","bitWiseAnd","escape","s","globalScope","__extends","this","d","__","constructor","p","hasOwnProperty","prototype","Object","create","window","WorkerGlobalScope","self","IS_DART","_global","Type","Function","Math","Date","_devMode","_modeLocked","assert","condition","StringWrapper","StringWrapper.fromCharCode","StringWrapper.charCodeAt","StringWrapper.split","StringWrapper.equals","StringWrapper.stripLeft","StringWrapper.stripRight","StringWrapper.replace","StringWrapper.replaceAll","StringWrapper.slice","StringWrapper.replaceAllMapped","matches","_i","arguments","length","splice","cb","StringWrapper.contains","StringWrapper.compare","StringJoiner","StringJoiner.constructor","StringJoiner.add","StringJoiner.toString","NumberParseError","_super","NumberParseError.constructor","NumberParseError.toString","Error","NumberWrapper","NumberWrapper.toFixed","NumberWrapper.equal","NumberWrapper.parseIntAutoRadix","NumberWrapper.parseInt","NumberWrapper.parseFloat","get","NumberWrapper.NaN","enumerable","configurable","NumberWrapper.isNaN","NumberWrapper.isInteger","RegExp","RegExpWrapper","RegExpWrapper.create","RegExpWrapper.firstMatch","RegExpWrapper.test","RegExpWrapper.matcher","RegExpMatcherWrapper","RegExpMatcherWrapper.next","FunctionWrapper","FunctionWrapper.apply","Json","Json.parse","Json.stringify","DateWrapper","DateWrapper.create","DateWrapper.fromISOString","DateWrapper.fromMillis","DateWrapper.toMillis","DateWrapper.now","DateWrapper.toJson","_symbolIterator","call","root_1","SymbolShim_1","toSubscriber_1","tryCatch_1","errorObject_1","Observable","subscribe","_isScalar","_subscribe","lift","operator","observable","source","observerOrNext","error","complete","subscriber","toSubscriber","add","syncErrorThrowable","syncErrorThrown","syncErrorValue","forEach","next","thisArg","PromiseCtor","root","Rx","config","Promise","resolve","reject","result","tryCatch","errorObject","e","SymbolShim","__export","m","lang_1","application_ref_1","platform","createNgZone","PlatformRef","ApplicationRef","application_tokens_1","APP_ID","APP_COMPONENT","APP_INITIALIZER","PACKAGE_ROOT_URL","PLATFORM_INITIALIZER","debug_node_1","DebugElement","DebugNode","asNativeElements","isListLikeIterable","areIterablesEqual","comparator","iterateListLike","Map","Set","createMapFromPairs","size","pairs","createMapAndPopulateFromPairs","createMapFromMap","createMapAndPopulateFromMap","_clearValues","keys","_clearValuesWithForeEach","_arrayFromMap","getValues","createArrayFromMap","createArrayFromMapWithForeach","MapWrapper","MapWrapper.clone","MapWrapper.createFromStringMap","MapWrapper.toStringMap","MapWrapper.createFromPairs","MapWrapper.clearValues","MapWrapper.iterable","MapWrapper.keys","MapWrapper.values","StringMapWrapper","StringMapWrapper.create","StringMapWrapper.contains","StringMapWrapper.get","StringMapWrapper.set","StringMapWrapper.keys","StringMapWrapper.values","StringMapWrapper.isEmpty","StringMapWrapper.delete","StringMapWrapper.forEach","StringMapWrapper.merge","StringMapWrapper.equals","ListWrapper","ListWrapper.createFixedSize","ListWrapper.createGrowableSize","ListWrapper.clone","ListWrapper.createImmutable","ListWrapper.forEachWithIndex","ListWrapper.first","ListWrapper.last","ListWrapper.indexOf","ListWrapper.contains","ListWrapper.reversed","ListWrapper.concat","ListWrapper.insert","ListWrapper.removeAt","ListWrapper.removeAll","ListWrapper.remove","ListWrapper.clear","ListWrapper.isEmpty","ListWrapper.fill","ListWrapper.equals","ListWrapper.slice","ListWrapper.splice","ListWrapper.sort","ListWrapper.toString","ListWrapper.toJSON","ListWrapper.maximum","ListWrapper.isImmutable","createSetFromList","test","lst","createSetAndPopulateFromList","SetWrapper","SetWrapper.createFromList","SetWrapper.has","SetWrapper.delete","makeTypeError","message","unimplemented","base_wrapped_exception_1","exception_handler_1","exception_handler_2","ExceptionHandler","BaseException","BaseException.constructor","BaseException.toString","WrappedException","WrappedException.constructor","WrappedException.wrapperMessage","WrappedException.wrapperStack","WrappedException.originalException","WrappedException.originalStack","WrappedException.context","WrappedException.message","WrappedException.toString","BaseWrappedException","isFunction_1","Subscription_1","rxSubscriber_1","Observer_1","Subscriber","destinationOrNext","isStopped","destination","empty","SafeSubscriber","_next","err","_error","_complete","unsubscribe","isUnsubscribed","rxSubscriber","Subscription","_parent","context","_context","__tryOrSetError","__tryOrUnsub","parent","_unsubscribe","metadata_1","InjectMetadata","OptionalMetadata","InjectableMetadata","SelfMetadata","HostMetadata","SkipSelfMetadata","DependencyMetadata","forward_ref_1","forwardRef","resolveForwardRef","injector_1","Injector","provider_1","Binding","ProviderBuilder","ResolvedFactory","Dependency","bind","Provider","provide","key_1","Key","exceptions_1","NoProviderError","AbstractProviderError","CyclicDependencyError","InstantiationError","InvalidProviderError","NoAnnotationError","OutOfBoundsError","opaque_token_1","OpaqueToken","promise_1","PromiseWrapper","PromiseCompleter","Subject_1","PromiseObservable_1","toPromise_1","Observable_1","Subject_2","Subject","TimerWrapper","TimerWrapper.setTimeout","TimerWrapper.clearTimeout","TimerWrapper.setInterval","TimerWrapper.clearInterval","ObservableWrapper","ObservableWrapper.subscribe","ObservableWrapper.isObservable","ObservableWrapper.hasSubscribers","ObservableWrapper.dispose","ObservableWrapper.callNext","ObservableWrapper.callEmit","ObservableWrapper.callError","ObservableWrapper.callComplete","ObservableWrapper.fromPromise","ObservableWrapper.toPromise","EventEmitter","EventEmitter.constructor","EventEmitter.emit","EventEmitter.next","EventEmitter.subscribe","Subscriber_1","OuterSubscriber","apply","notifyNext","outerValue","innerValue","outerIndex","innerIndex","innerSub","notifyError","notifyComplete","subscribeToResult","outerSubscriber","InnerSubscriber_1","InnerSubscriber","isArray_1","i","len","isPromise_1","then","setTimeout","iterator","result_1","item","obs","TypeError","setRootDomAdapter","adapter","DOM","DomAdapter","DomAdapter.attrToPropMap","set","tryCatcher","tryCatchTarget","SubjectSubscription_1","throwError_1","ObjectUnsubscribedError_1","observers","hasErrored","dispatching","hasCompleted","subject","subscription","remove","errorValue","throwIfUnsubscribed","SubjectSubscription","push","asObservable","SubjectObservable","_finalNext","index","slice","_finalError","_finalComplete","throwError","ObjectUnsubscribedError","reflector_1","reflector_2","Reflector","ReflectionInfo","reflection_capabilities_1","reflector","ReflectionCapabilities","isObject_1","errors","hasErrors","_a","_subscriptions","trial","sub","isObject","UnsubscriptionError","concat","EMPTY","subscriptions","subscriptionIndex","indexOf","name","iterable_differs_1","default_iterable_differ_1","keyvalue_differs_1","default_keyvalue_differ_1","default_keyvalue_differ_2","DefaultKeyValueDifferFactory","KeyValueChangeRecord","default_iterable_differ_2","DefaultIterableDifferFactory","CollectionChangeRecord","ast_1","ASTWithSource","AST","AstTransformer","PropertyRead","LiteralArray","ImplicitReceiver","lexer_1","Lexer","parser_1","Parser","locals_1","Locals","DehydratedException","ExpressionChangedAfterItHasBeenCheckedException","ChangeDetectionError","interfaces_1","ChangeDetectorDefinition","DebugContext","ChangeDetectorGenConfig","constants_1","ChangeDetectionStrategy","CHANGE_DETECTION_STRATEGY_VALUES","proto_change_detector_1","DynamicProtoChangeDetector","jit_proto_change_detector_1","JitProtoChangeDetector","binding_record_1","BindingRecord","BindingTarget","directive_record_1","DirectiveIndex","DirectiveRecord","dynamic_change_detector_1","DynamicChangeDetector","change_detector_ref_1","ChangeDetectorRef","iterable_differs_2","IterableDiffers","keyvalue_differs_2","KeyValueDiffers","change_detection_util_1","WrappedValue","SimpleChange","keyValDiff","iterableDiff","defaultIterableDiffers","defaultKeyValueDiffers","objectTypes","boolean","function","object","number","string","undefined","freeGlobal","nodeType","core_1","NG_VALUE_ACCESSOR","_convertToPromise","_executeValidators","control","validators","_executeAsyncValidators","_mergeErrors","arrayOfErrors","async_1","collection_1","NG_VALIDATORS","NG_ASYNC_VALIDATORS","Validators","Validators.required","Validators.minLength","Validators.maxLength","Validators.pattern","Validators.nullValidator","Validators.compose","presentValidators","Validators.composeAsync","promises","map","all","InvalidPipeArgumentException","InvalidPipeArgumentException.constructor","Array","x","camelCaseToDashCase","input","dashCaseToCamelCase","escapeSingleQuoteString","escapeDoubleQuoteString","escapeString","re","codeGenExportVariable","codeGenConstConstructorCall","codeGenValueFn","params","fnName","codeGenFnHeader","codeGenToString","splitAtColon","defaultValues","escapeValue","codeGenArray","data","codeGenFlatArray","codeGenStringMap","keyValueArray","codeGenKeyValue","keyValue","addAll","target","flattenArray","CAMEL_CASE_REGEXP","DASH_CASE_REGEXP","SINGLE_QUOTE_ESCAPE_STRING_RE","DOUBLE_QUOTE_ESCAPE_STRING_RE","MODULE_SUFFIX","CONST_VAR","Statement","Statement.constructor","Expression","Expression.constructor","isDefaultChangeDetectionStrategy","changeDetectionStrategy","ChangeDetectorState","CheckOnce","Checked","CheckAlways","Detached","OnPush","Default","CHANGE_DETECTOR_STATE_VALUES","NeverChecked","CheckedBefore","Errored","abstract_control_directive_1","NgControl","NgControl.constructor","NgControl.validator","NgControl.asyncValidator","AbstractControlDirective","__decorate","decorators","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__metadata","k","v","metadata","ViewEncapsulation","VIEW_ENCAPSULATION_VALUES","Emulated","Native","None","ViewMetadata","_b","ViewMetadata.constructor","RequestMethod","ReadyState","ResponseType","RouteParams","RouteParams.constructor","RouteParams.get","RouteData","RouteData.constructor","RouteData.get","BLANK_ROUTE_DATA","Instruction","Instruction.constructor","Instruction.urlPath","Instruction.urlParams","Instruction.specificity","Instruction.toRootUrl","Instruction._toNonRootUrl","Instruction.toUrlQuery","Instruction.replaceChild","Instruction.toUrlPath","Instruction.toLinkUrl","Instruction._toLinkUrl","Instruction._stringifyPathMatrixAuxPrefixed","Instruction._stringifyMatrixParams","Instruction._stringifyPathMatrixAux","Instruction._stringifyAux","ResolvedInstruction","ResolvedInstruction.constructor","ResolvedInstruction.resolveComponent","DefaultInstruction","DefaultInstruction.constructor","DefaultInstruction.toLinkUrl","DefaultInstruction._toLinkUrl","UnresolvedInstruction","UnresolvedInstruction.constructor","UnresolvedInstruction.urlPath","UnresolvedInstruction.urlParams","UnresolvedInstruction.resolveComponent","RedirectInstruction","RedirectInstruction.constructor","RedirectInstruction.specificity","ComponentInstruction","ComponentInstruction.constructor","polyfillSymbol","Symbol","ensureSymbol","ensureIterator","ensureObservable","ensureFor","for","symbolForPolyfill","description","id","getOwnPropertyNames","router_1","Router","router_outlet_1","RouterOutlet","router_link_1","RouterLink","instruction_1","platform_location_1","PlatformLocation","route_registry_1","RouteRegistry","ROUTER_PRIMARY_COMPONENT","location_strategy_1","LocationStrategy","APP_BASE_HREF","hash_location_strategy_1","HashLocationStrategy","path_location_strategy_1","PathLocationStrategy","location_1","Location","lifecycle_annotations_1","CanActivate","instruction_2","router_providers_common_1","ROUTER_PROVIDERS_COMMON","router_providers_1","ROUTER_PROVIDERS","ROUTER_BINDINGS","router_outlet_2","router_link_2","ROUTER_DIRECTIVES","controlPath","setUpControl","dir","setUpControlGroup","_throwError","composeValidators","composeAsyncValidators","isPropertyUpdated","changes","viewModel","selectValueAccessor","valueAccessors","validators_1","default_value_accessor_1","number_value_accessor_1","checkbox_value_accessor_1","select_control_value_accessor_1","radio_control_value_accessor_1","normalize_validator_1","moduleRef","moduleUrl","MODULE_REGEXP","SourceModule","SourceModule.constructor","SourceModule.getSourceWithoutImports","SourceModule.getSourceWithImports","SourceExpression","SourceExpression.constructor","SourceExpressions","SourceExpressions.constructor","SourceWithImports","SourceWithImports.constructor","templateVisitAll","visitor","asts","TextAst","TextAst.constructor","TextAst.visit","BoundTextAst","BoundTextAst.constructor","BoundTextAst.visit","AttrAst","AttrAst.constructor","AttrAst.visit","BoundElementPropertyAst","BoundElementPropertyAst.constructor","BoundElementPropertyAst.visit","BoundEventAst","BoundEventAst.constructor","BoundEventAst.visit","BoundEventAst.fullName","VariableAst","VariableAst.constructor","VariableAst.visit","ElementAst","ElementAst.constructor","ElementAst.visit","ElementAst.isBound","ElementAst.getComponent","EmbeddedTemplateAst","EmbeddedTemplateAst.constructor","EmbeddedTemplateAst.visit","BoundDirectivePropertyAst","BoundDirectivePropertyAst.constructor","BoundDirectivePropertyAst.visit","DirectiveAst","DirectiveAst.constructor","DirectiveAst.visit","NgContentAst","NgContentAst.constructor","NgContentAst.visit","PropertyBindingType","_simpleChange","previousValue","currentValue","pipe_lifecycle_reflector_1","WrappedValue.constructor","WrappedValue.wrap","_wrappedValues","_wrappedIndex","SimpleChange.constructor","SimpleChange.isFirstChange","ChangeDetectionUtil","ChangeDetectionUtil.arrayFn0","ChangeDetectionUtil.arrayFn1","ChangeDetectionUtil.arrayFn2","ChangeDetectionUtil.arrayFn3","ChangeDetectionUtil.arrayFn4","ChangeDetectionUtil.arrayFn5","ChangeDetectionUtil.arrayFn6","ChangeDetectionUtil.arrayFn7","ChangeDetectionUtil.arrayFn8","ChangeDetectionUtil.arrayFn9","ChangeDetectionUtil.operation_negate","ChangeDetectionUtil.operation_add","ChangeDetectionUtil.operation_subtract","ChangeDetectionUtil.operation_multiply","ChangeDetectionUtil.operation_divide","ChangeDetectionUtil.operation_remainder","ChangeDetectionUtil.operation_equals","ChangeDetectionUtil.operation_not_equals","ChangeDetectionUtil.operation_identical","ChangeDetectionUtil.operation_not_identical","ChangeDetectionUtil.operation_less_then","ChangeDetectionUtil.operation_greater_then","ChangeDetectionUtil.operation_less_or_equals_then","ChangeDetectionUtil.operation_greater_or_equals_then","ChangeDetectionUtil.cond","ChangeDetectionUtil.mapFn","ChangeDetectionUtil.mapFn.buildMap","ChangeDetectionUtil.keyedAccess","ChangeDetectionUtil.unwrapValue","ChangeDetectionUtil.changeDetectionMode","ChangeDetectionUtil.simpleChange","ChangeDetectionUtil.isValueBlank","ChangeDetectionUtil.s","ChangeDetectionUtil.protoByIndex","ChangeDetectionUtil.callPipeOnDestroy","ChangeDetectionUtil.bindingTarget","ChangeDetectionUtil.directiveIndex","ChangeDetectionUtil.looseNotIdentical","ChangeDetectionUtil.devModeEqual","InjectMetadata.constructor","InjectMetadata.toString","OptionalMetadata.toString","DependencyMetadata.token","SelfMetadata.toString","SkipSelfMetadata.toString","HostMetadata.toString","isHostViewFactory","di_1","reflection_1","view_1","view_ref_1","Compiler","Compiler_","Compiler_.constructor","Compiler_.compileInHost","__param","paramIndex","decorator","ng_zone_1","EVENT_MANAGER_PLUGINS","EventManager","EventManager.constructor","EventManager.addEventListener","EventManager.addGlobalEventListener","EventManager.getZone","EventManager._findPluginFor","NgZone","EventManagerPlugin","EventManagerPlugin.supports","EventManagerPlugin.addEventListener","EventManagerPlugin.addGlobalEventListener","ControlContainer","ControlContainer.constructor","ControlContainer.formDirective","ControlContainer.path","getHtmlTagDefinition","tagName","splitNsName","elementName","getNsPrefix","mergeNsAndName","prefix","localName","NAMED_ENTITIES","Aacute","aacute","Acirc","acirc","acute","AElig","aelig","Agrave","agrave","alefsym","Alpha","alpha","amp","and","ang","apos","Aring","aring","asymp","Atilde","atilde","Auml","auml","bdquo","Beta","beta","brvbar","bull","cap","Ccedil","ccedil","cedil","cent","Chi","chi","circ","clubs","cong","copy","crarr","cup","curren","dagger","Dagger","darr","dArr","deg","Delta","delta","diams","divide","Eacute","eacute","Ecirc","ecirc","Egrave","egrave","emsp","ensp","Epsilon","epsilon","equiv","Eta","eta","ETH","eth","Euml","euml","euro","exist","fnof","forall","frac12","frac14","frac34","frasl","Gamma","gamma","ge","gt","harr","hArr","hearts","hellip","Iacute","iacute","Icirc","icirc","iexcl","Igrave","igrave","image","infin","int","Iota","iota","iquest","isin","Iuml","iuml","Kappa","kappa","Lambda","lambda","lang","laquo","larr","lArr","lceil","ldquo","le","lfloor","lowast","loz","lrm","lsaquo","lsquo","lt","macr","mdash","micro","middot","minus","Mu","mu","nabla","nbsp","ndash","ne","ni","not","notin","nsub","Ntilde","ntilde","Nu","nu","Oacute","oacute","Ocirc","ocirc","OElig","oelig","Ograve","ograve","oline","Omega","omega","Omicron","omicron","oplus","or","ordf","ordm","Oslash","oslash","Otilde","otilde","otimes","Ouml","ouml","para","permil","perp","Phi","phi","Pi","pi","piv","plusmn","pound","prime","Prime","prod","prop","Psi","psi","quot","radic","rang","raquo","rarr","rArr","rceil","rdquo","real","reg","rfloor","Rho","rho","rlm","rsaquo","rsquo","sbquo","Scaron","scaron","sdot","sect","shy","Sigma","sigma","sigmaf","sim","spades","sube","sum","sup","sup1","sup2","sup3","supe","szlig","Tau","tau","there4","Theta","theta","thetasym","thinsp","THORN","thorn","tilde","times","trade","Uacute","uacute","uarr","uArr","Ucirc","ucirc","Ugrave","ugrave","uml","upsih","Upsilon","upsilon","Uuml","uuml","weierp","Xi","xi","Yacute","yacute","yen","yuml","Yuml","Zeta","zeta","zwj","zwnj","HtmlTagContentType","HtmlTagDefinition","HtmlTagDefinition.constructor","HtmlTagDefinition.requireExtraParent","HtmlTagDefinition.isClosedByChild","TAG_DEFINITIONS","base","isVoid","meta","area","embed","link","img","param","hr","br","track","wbr","closedByChildren","closedByParent","thead","tbody","tfoot","tr","requiredParents","td","th","col","svg","implicitNamespacePrefix","math","li","dt","dd","rb","rt","rtc","rp","optgroup","option","pre","ignoreFirstLf","listing","style","contentType","RAW_TEXT","script","title","ESCAPABLE_RAW_TEXT","textarea","DEFAULT_TAG_DEFINITION","NS_PREFIX_RE","createWithoutPackagePrefix","getUrlScheme","url","_buildFromEncodedParts","opt_scheme","opt_userInfo","opt_domain","opt_port","opt_path","opt_queryData","opt_fragment","_split","uri","_removeDotSegments","_joinAndCanonicalizePath","parts","_resolveUrl","di_2","DEFAULT_PACKAGE_URL_PROVIDER","useValue","UrlResolver","UrlResolver.constructor","UrlResolver.resolve","String","_ComponentIndex","_splitRe","_appIdRandomProviderFactory","_randomChar","APP_COMPONENT_REF_PROMISE","APP_ID_RANDOM_PROVIDER","useFactory","deps","RecordType","ProtoRecord","ProtoRecord.constructor","ProtoRecord.isPureFunction","ProtoRecord.isUsedByOtherRecord","ProtoRecord.shouldBeChecked","ProtoRecord.isPipeRecord","ProtoRecord.isConditionalSkipRecord","ProtoRecord.isUnconditionalSkipRecord","ProtoRecord.isSkipRecord","ProtoRecord.isLifeCycleRecord","resolveFactory","provider","resolveProvider","resolveProviders","providers","mergeResolvedProviders","normalizedProvidersMap","_normalizeProviders","res","_constructDependencies","factoryFunction","dependencies","_dependenciesFor","typeOrFunc","_extractToken","_createDependency","optional","lowerBoundVisibility","upperBoundVisibility","depProps","exceptions_2","Dependency.constructor","Dependency.fromKey","_EMPTY_LIST","Provider.constructor","Provider.multi","Binding.constructor","Binding.toClass","Binding.toAlias","Binding.toFactory","Binding.toValue","ResolvedProvider_","ResolvedProvider_.constructor","ResolvedProvider_.resolvedFactory","ResolvedFactory.constructor","ProviderBuilder.constructor","ProviderBuilder.toClass","ProviderBuilder.toValue","ProviderBuilder.toAlias","ProviderBuilder.toFactory","compiler_1","view_manager_1","ComponentRef","ComponentRef.hostView","ComponentRef.hostComponent","ComponentRef_","ComponentRef_.constructor","ComponentRef_.hostComponentType","ComponentRef_.dispose","DynamicComponentLoader","DynamicComponentLoader_","DynamicComponentLoader_.constructor","DynamicComponentLoader_.loadAsRoot","DynamicComponentLoader_.loadIntoLocation","DynamicComponentLoader_.loadNextToLocation","AppViewManager","_localsToStringMap","locals","flattenNestedViewRenderNodes","nodes","_flattenNestedViewRenderNodes","renderNodes","findLastRenderNode","node","checkSlotCount","componentName","expectedSlotCount","projectableNodes","change_detection_1","element_1","api_1","pipes_1","util_1","interfaces_2","pipes_2","view_type_1","REFLECT_PREFIX","EMPTY_CONTEXT","AppView","AppView.constructor","AppView.init","AppView.destroy","AppView.notifyOnDestroy","AppView.changeDetectorRef","AppView.flatRootNodes","AppView.hasLocal","AppView.setLocal","AppView.notifyOnBinding","AppView.logBindingUpdate","AppView.notifyAfterContentChecked","AppView.notifyAfterViewChecked","AppView.getDebugContext","AppView.getDirectiveFor","AppView.getDetectorFor","AppView.triggerEventHandlers","AppProtoView","AppProtoView.constructor","AppProtoView.create","HostViewFactory","HostViewFactory.constructor","ViewType","DirectiveMetadata","DirectiveMetadata.constructor","DirectiveMetadata.inputs","DirectiveMetadata.properties","DirectiveMetadata.outputs","DirectiveMetadata.events","DirectiveMetadata.providers","DirectiveMetadata.bindings","ComponentMetadata","ComponentMetadata.constructor","ComponentMetadata.viewProviders","ComponentMetadata.viewBindings","PipeMetadata","PipeMetadata.constructor","PipeMetadata.pure","InputMetadata","InputMetadata.constructor","OutputMetadata","OutputMetadata.constructor","HostBindingMetadata","HostBindingMetadata.constructor","HostListenerMetadata","HostListenerMetadata.constructor","extractAnnotation","annotation","applyParams","fnOrArray","Class","clsDef","makeDecorator","annotationCls","chainFn","makeDecorator.DecoratorFactory","makeDecorator.DecoratorFactory.TypeDecorator","makeParamDecorator","makeParamDecorator.ParamDecoratorFactory","makeParamDecorator.ParamDecoratorFactory.ParamDecorator","makePropDecorator","decoratorCls","makePropDecorator.PropDecoratorFactory","makePropDecorator.PropDecoratorFactory.PropDecorator","_nextClassId","checkReflect","PromiseCompleter.constructor","PromiseWrapper.resolve","PromiseWrapper.reject","PromiseWrapper.catchError","PromiseWrapper.all","PromiseWrapper.then","PromiseWrapper.wrap","PromiseWrapper.scheduleMicrotask","PromiseWrapper.isPromise","PromiseWrapper.completer","Headers","Headers.constructor","Headers.fromResponseHeaderString","Headers.append","Headers.delete","Headers.forEach","Headers.get","Headers.has","Headers.keys","Headers.set","Headers.values","Headers.toJSON","Headers.getAll","Headers.entries","DOCUMENT","normalizeQueryParams","joinWithSlash","start","end","PlatformLocation.pathname","PlatformLocation.search","PlatformLocation.hash","dispatchNext","dispatchError","PromiseObservable","promise","scheduler","_this","schedule","http_1","xhr_backend_1","jsonp_backend_1","browser_xhr_1","browser_jsonp_1","base_request_options_1","base_response_options_1","static_request_1","Request","static_response_1","Response","Connection","ConnectionBackend","browser_xhr_2","BrowserXhr","base_request_options_2","BaseRequestOptions","RequestOptions","base_response_options_2","BaseResponseOptions","ResponseOptions","xhr_backend_2","XHRBackend","XHRConnection","jsonp_backend_2","JSONPBackend","JSONPConnection","http_2","Http","Jsonp","headers_1","enums_1","url_search_params_1","URLSearchParams","HTTP_PROVIDERS","xhrBackend","requestOptions","useClass","HTTP_BINDINGS","JSONP_PROVIDERS","jsonpBackend","BrowserJsonp","JSONPBackend_","JSON_BINDINGS","control_value_accessor_1","CHECKBOX_VALUE_ACCESSOR","useExisting","CheckboxControlValueAccessor","multi","CheckboxControlValueAccessor.constructor","CheckboxControlValueAccessor.writeValue","CheckboxControlValueAccessor.registerOnChange","CheckboxControlValueAccessor.registerOnTouched","Renderer","ElementRef","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","DefaultValueAccessor.constructor","DefaultValueAccessor.writeValue","DefaultValueAccessor.registerOnChange","DefaultValueAccessor.registerOnTouched","ng_control_1","RADIO_VALUE_ACCESSOR","RadioControlValueAccessor","RadioControlRegistry","RadioControlRegistry.constructor","RadioControlRegistry.add","RadioControlRegistry.remove","RadioControlRegistry.select","RadioButtonState","RadioButtonState.constructor","RadioControlValueAccessor.constructor","RadioControlValueAccessor.ngOnInit","RadioControlValueAccessor.ngOnDestroy","RadioControlValueAccessor.writeValue","RadioControlValueAccessor.registerOnChange","RadioControlValueAccessor.fireUncheck","RadioControlValueAccessor.registerOnTouched","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","NgSelectOption","SelectControlValueAccessor.constructor","SelectControlValueAccessor.writeValue","SelectControlValueAccessor.registerOnChange","SelectControlValueAccessor.registerOnTouched","SelectControlValueAccessor._updateValueWhenListOfOptionsChanges","QueryList","isControl","_find","toObservable","VALID","INVALID","PENDING","AbstractControl","AbstractControl.constructor","AbstractControl.value","AbstractControl.status","AbstractControl.valid","AbstractControl.errors","AbstractControl.pristine","AbstractControl.dirty","AbstractControl.touched","AbstractControl.untouched","AbstractControl.valueChanges","AbstractControl.statusChanges","AbstractControl.pending","AbstractControl.markAsTouched","AbstractControl.markAsDirty","AbstractControl.markAsPending","AbstractControl.setParent","AbstractControl.updateValueAndValidity","AbstractControl._runValidator","AbstractControl._runAsyncValidator","AbstractControl._cancelExistingSubscription","AbstractControl.setErrors","AbstractControl.find","AbstractControl.getError","AbstractControl.hasError","AbstractControl.root","AbstractControl._updateControlsErrors","AbstractControl._initObservables","AbstractControl._calculateStatus","Control","Control.constructor","Control.updateValue","Control._anyControlsHaveStatus","Control.registerOnChange","ControlGroup","ControlGroup.constructor","ControlGroup.addControl","ControlGroup.removeControl","ControlGroup.include","ControlGroup.exclude","ControlGroup.contains","ControlGroup._setParentForControls","ControlGroup._updateValue","ControlGroup._anyControlsHaveStatus","ControlGroup._reduceValue","ControlGroup._reduceChildren","ControlGroup._included","ControlArray","ControlArray.constructor","ControlArray.at","ControlArray.push","ControlArray.insert","ControlArray.removeAt","ControlArray.length","ControlArray._updateValue","ControlArray._anyControlsHaveStatus","ControlArray._setParentForControls","createHostComponentMeta","componentType","componentSelector","arrayFromJson","arrayToJson","objFromJson","objToJson","selector_1","HOST_REG_EXP","CompileMetadataWithIdentifier","CompileMetadataWithIdentifier.fromJson","CompileMetadataWithIdentifier.identifier","CompileMetadataWithType","CompileMetadataWithType.constructor","CompileMetadataWithType.fromJson","CompileMetadataWithType.type","CompileMetadataWithType.identifier","CompileIdentifierMetadata","CompileIdentifierMetadata.constructor","CompileIdentifierMetadata.fromJson","CompileIdentifierMetadata.toJson","CompileIdentifierMetadata.identifier","CompileDiDependencyMetadata","CompileDiDependencyMetadata.constructor","CompileDiDependencyMetadata.fromJson","CompileDiDependencyMetadata.toJson","CompileProviderMetadata","CompileProviderMetadata.constructor","CompileProviderMetadata.fromJson","CompileProviderMetadata.toJson","CompileFactoryMetadata","CompileFactoryMetadata.constructor","CompileFactoryMetadata.identifier","CompileFactoryMetadata.toJson","CompileTypeMetadata","CompileTypeMetadata.constructor","CompileTypeMetadata.fromJson","CompileTypeMetadata.identifier","CompileTypeMetadata.type","CompileTypeMetadata.toJson","CompileQueryMetadata","CompileQueryMetadata.constructor","CompileQueryMetadata.fromJson","CompileQueryMetadata.toJson","CompileTemplateMetadata","CompileTemplateMetadata.constructor","CompileTemplateMetadata.fromJson","CompileTemplateMetadata.toJson","CompileDirectiveMetadata","CompileDirectiveMetadata.constructor","CompileDirectiveMetadata.create","CompileDirectiveMetadata.identifier","CompileDirectiveMetadata.fromJson","CompileDirectiveMetadata.toJson","CompilePipeMetadata","CompilePipeMetadata.constructor","CompilePipeMetadata.identifier","CompilePipeMetadata.fromJson","CompilePipeMetadata.toJson","_COMPILE_METADATA_FROM_JSON","Directive","fromJson","Pipe","Identifier","XHR","XHR.get","AST.visit","AST.toString","Quote","Quote.constructor","Quote.visit","Quote.toString","EmptyExpr","EmptyExpr.constructor","ImplicitReceiver.constructor","ImplicitReceiver.visit","Chain","Chain.constructor","Chain.visit","Conditional","Conditional.constructor","Conditional.visit","PropertyRead.constructor","PropertyRead.visit","PropertyWrite","PropertyWrite.constructor","PropertyWrite.visit","SafePropertyRead","SafePropertyRead.constructor","SafePropertyRead.visit","KeyedRead","KeyedRead.constructor","KeyedRead.visit","KeyedWrite","KeyedWrite.constructor","KeyedWrite.visit","BindingPipe","BindingPipe.constructor","BindingPipe.visit","LiteralPrimitive","LiteralPrimitive.constructor","LiteralPrimitive.visit","LiteralArray.constructor","LiteralArray.visit","LiteralMap","LiteralMap.constructor","LiteralMap.visit","Interpolation","Interpolation.constructor","Interpolation.visit","Binary","Binary.constructor","Binary.visit","PrefixNot","PrefixNot.constructor","PrefixNot.visit","MethodCall","MethodCall.constructor","MethodCall.visit","SafeMethodCall","SafeMethodCall.constructor","SafeMethodCall.visit","FunctionCall","FunctionCall.constructor","FunctionCall.visit","ASTWithSource.constructor","ASTWithSource.visit","ASTWithSource.toString","TemplateBinding","TemplateBinding.constructor","RecursiveAstVisitor","RecursiveAstVisitor.visitBinary","RecursiveAstVisitor.visitChain","RecursiveAstVisitor.visitConditional","RecursiveAstVisitor.visitPipe","RecursiveAstVisitor.visitFunctionCall","RecursiveAstVisitor.visitImplicitReceiver","RecursiveAstVisitor.visitInterpolation","RecursiveAstVisitor.visitKeyedRead","RecursiveAstVisitor.visitKeyedWrite","RecursiveAstVisitor.visitLiteralArray","RecursiveAstVisitor.visitLiteralMap","RecursiveAstVisitor.visitLiteralPrimitive","RecursiveAstVisitor.visitMethodCall","RecursiveAstVisitor.visitPrefixNot","RecursiveAstVisitor.visitPropertyRead","RecursiveAstVisitor.visitPropertyWrite","RecursiveAstVisitor.visitSafePropertyRead","RecursiveAstVisitor.visitSafeMethodCall","RecursiveAstVisitor.visitAll","RecursiveAstVisitor.visitQuote","AstTransformer.visitImplicitReceiver","AstTransformer.visitInterpolation","AstTransformer.visitLiteralPrimitive","AstTransformer.visitPropertyRead","AstTransformer.visitPropertyWrite","AstTransformer.visitSafePropertyRead","AstTransformer.visitMethodCall","AstTransformer.visitSafeMethodCall","AstTransformer.visitFunctionCall","AstTransformer.visitLiteralArray","AstTransformer.visitLiteralMap","AstTransformer.visitBinary","AstTransformer.visitPrefixNot","AstTransformer.visitConditional","AstTransformer.visitPipe","AstTransformer.visitKeyedRead","AstTransformer.visitKeyedWrite","AstTransformer.visitAll","AstTransformer.visitChain","AstTransformer.visitQuote","_isDirectiveMetadata","DirectiveResolver","DirectiveResolver.resolve","DirectiveResolver._mergeWithPropertyMetadata","DirectiveResolver._merge","CODEGEN_DIRECTIVE_RESOLVER","setProvidersVisibility","visibility","_staticKeys","provider_2","element_ref_1","view_container_ref_1","element_ref_2","template_ref_1","directives_1","query_list_1","pipe_provider_1","view_container_ref_2","StaticKeys","StaticKeys.constructor","StaticKeys.instance","DirectiveDependency","DirectiveDependency.constructor","DirectiveDependency._verify","DirectiveDependency.createFrom","DirectiveDependency._attributeName","DirectiveDependency._query","DirectiveProvider","DirectiveProvider.constructor","DirectiveProvider.displayName","DirectiveProvider.createFromType","QueryMetadataWithSetter","QueryMetadataWithSetter.constructor","AppProtoElement","AppProtoElement.constructor","AppProtoElement.create","AppProtoElement.getProviderAtIndex","_Context","_Context.constructor","InjectorWithHostBoundary","InjectorWithHostBoundary.constructor","AppElement","AppElement.constructor","AppElement.getViewParentInjector","AppElement.attachComponentView","AppElement._debugContext","AppElement.hasVariableBinding","AppElement.getVariableBinding","AppElement.get","AppElement.hasDirective","AppElement.getComponent","AppElement.getInjector","AppElement.getElementRef","AppElement.getViewContainerRef","AppElement.getTemplateRef","AppElement.getDependency","AppElement._buildAttribute","AppElement.addDirectivesMatchingQuery","AppElement._buildQueryStrategy","AppElement.getDirectiveAtIndex","AppElement.ngAfterViewChecked","AppElement.ngAfterContentChecked","AppElement.traverseAndSetQueriesAsDirty","AppElement._setQueriesAsDirty","_EmptyQueryStrategy","_EmptyQueryStrategy.findQuery","_emptyQueryStrategy","InlineQueryStrategy","InlineQueryStrategy.constructor","InlineQueryStrategy.setContentQueriesAsDirty","InlineQueryStrategy.setViewQueriesAsDirty","InlineQueryStrategy.updateContentQueries","InlineQueryStrategy.updateViewQueries","InlineQueryStrategy.findQuery","DynamicQueryStrategy","DynamicQueryStrategy.constructor","DynamicQueryStrategy.setContentQueriesAsDirty","DynamicQueryStrategy.setViewQueriesAsDirty","DynamicQueryStrategy.updateContentQueries","DynamicQueryStrategy.updateViewQueries","DynamicQueryStrategy.findQuery","ElementDirectiveInlineStrategy","ElementDirectiveInlineStrategy.constructor","ElementDirectiveInlineStrategy.init","ElementDirectiveInlineStrategy.getComponent","ElementDirectiveInlineStrategy.isComponentKey","ElementDirectiveInlineStrategy.addDirectivesMatchingQuery","ElementDirectiveDynamicStrategy","ElementDirectiveDynamicStrategy.constructor","ElementDirectiveDynamicStrategy.init","ElementDirectiveDynamicStrategy.getComponent","ElementDirectiveDynamicStrategy.isComponentKey","ElementDirectiveDynamicStrategy.addDirectivesMatchingQuery","ProtoQueryRef","ProtoQueryRef.constructor","ProtoQueryRef.usesPropertySyntax","QueryRef","QueryRef.constructor","QueryRef.isViewQuery","QueryRef.update","QueryRef._update","QueryRef._visit","QueryRef._visitInjector","QueryRef._visitViewContainerViews","QueryRef._visitView","QueryRef._aggregateVariableBinding","QueryRef._aggregateDirective","_ComponentViewChangeDetectorRef","_ComponentViewChangeDetectorRef.constructor","_ComponentViewChangeDetectorRef.markForCheck","_ComponentViewChangeDetectorRef.detach","_ComponentViewChangeDetectorRef.detectChanges","_ComponentViewChangeDetectorRef.checkNoChanges","_ComponentViewChangeDetectorRef.reattach","LifecycleHooks","LIFECYCLE_HOOKS_VALUES","OnInit","OnDestroy","DoCheck","OnChanges","AfterContentInit","AfterContentChecked","AfterViewInit","AfterViewChecked","profile_1","AppViewManager_","AppViewManager_.constructor","AppViewManager_.getViewContainer","AppViewManager_.getHostElement","AppViewManager_.getNamedElementInComponentView","AppViewManager_.getComponent","AppViewManager_.createRootHostView","AppViewManager_.destroyRootHostView","AppViewManager_.createEmbeddedViewInContainer","AppViewManager_.createHostViewInContainer","AppViewManager_.destroyViewInContainer","AppViewManager_.attachViewInContainer","AppViewManager_.detachViewInContainer","AppViewManager_.createRenderComponentType","AppViewManager_._attachViewToContainer","AppViewManager_._detachViewInContainer","RootRenderer","ViewRef","ViewRef.changeDetectorRef","ViewRef.destroyed","HostViewRef","HostViewRef.constructor","HostViewRef.rootNodes","EmbeddedViewRef","EmbeddedViewRef.constructor","EmbeddedViewRef.rootNodes","ViewRef_","ViewRef_.constructor","ViewRef_.internalView","ViewRef_.changeDetectorRef","ViewRef_.rootNodes","ViewRef_.setLocal","ViewRef_.hasLocal","ViewRef_.destroyed","HostViewFactoryRef","HostViewFactoryRef_","HostViewFactoryRef_.constructor","HostViewFactoryRef_.internalHostViewFactory","QueryMetadata","ContentChildrenMetadata","ContentChildMetadata","ViewChildrenMetadata","ViewQueryMetadata","ViewChildMetadata","AttributeMetadata","directives_2","view_2","decorators_1","Component","View","Attribute","Query","ContentChildren","ContentChild","ViewChildren","ViewChild","ViewQuery","Input","Output","HostBinding","HostListener","RenderComponentType","RenderComponentType.constructor","RenderDebugInfo","RenderDebugInfo.constructor","setTestabilityGetter","getter","Testability","Testability.constructor","Testability._watchAngularEvents","Testability.increasePendingRequestCount","Testability.decreasePendingRequestCount","Testability.isStable","Testability._runCallbacksIfReady","Testability.whenStable","Testability.getPendingRequestCount","Testability.findBindings","Testability.findProviders","TestabilityRegistry","TestabilityRegistry.constructor","TestabilityRegistry.registerApplication","TestabilityRegistry.getTestability","TestabilityRegistry.getAllTestabilities","TestabilityRegistry.getAllRootElements","TestabilityRegistry.findTestabilityInTree","_NoopGetTestability","_NoopGetTestability.findTestabilityInTree","_testabilityGetter","ng_zone_impl_1","ng_zone_impl_2","NgZoneError","NgZone.constructor","enableLongStackTrace","NgZone.isInAngularZone","NgZone.assertInAngularZone","NgZone.assertNotInAngularZone","NgZone._checkStable","NgZone.onUnstable","NgZone.onMicrotaskEmpty","NgZone.onStable","NgZone.onError","NgZone.hasPendingMicrotasks","NgZone.hasPendingMacrotasks","NgZone.run","NgZone.runOutsideAngular","ResponseOptions.constructor","ResponseOptions.merge","BaseResponseOptions.constructor","normalizeMethodName","method","getResponseURL","xhr","isSuccess","status","lang_2","dom_adapter_1","dom_tokens_1","SharedStylesHost","SharedStylesHost.constructor","SharedStylesHost.addStyles","SharedStylesHost.getAllStyles","DomSharedStylesHost","DomSharedStylesHost.constructor","DomSharedStylesHost._addStylesToHost","DomSharedStylesHost.addHost","DomSharedStylesHost.removeHost","DomSharedStylesHost.onStylesAdded","_stripBaseHref","baseHref","stripIndexHtml","stripTrailingSlash","Location.constructor","Location.path","Location.normalize","Location.prepareExternalUrl","Location.go","Location.replaceState","Location.forward","Location.back","Location.subscribe","RouteConfig","RouteConfig.constructor","AbstractRoute","AbstractRoute.constructor","Route","Route.constructor","AuxRoute","AuxRoute.constructor","AsyncRoute","AsyncRoute.constructor","Redirect","Redirect.constructor","canActivateOne","nextInstruction","prevInstruction","route_lifecycle_reflector_1","_resolveToTrue","_resolveToFalse","Router.constructor","Router.childRouter","Router.auxRouter","Router.registerPrimaryOutlet","Router.unregisterPrimaryOutlet","Router.registerAuxOutlet","Router.isRouteActive","Router.config","Router.navigate","Router.navigateByUrl","Router.navigateByInstruction","Router._settleInstruction","Router._navigate","Router._emitNavigationFinish","Router._emitNavigationFail","Router._afterPromiseFinishNavigating","Router._routerCanReuse","Router._canActivate","Router._routerCanDeactivate","Router.commit","Router._startNavigating","Router._finishNavigating","Router.subscribe","Router.deactivate","Router.recognize","Router._getAncestorInstructions","Router.renavigate","Router.generate","RootRouter","RootRouter.constructor","RootRouter.commit","RootRouter.dispose","ChildRouter","ChildRouter.constructor","ChildRouter.navigateByUrl","ChildRouter.navigateByInstruction","bootstrap","appComponentType","customProviders","angular_entrypoint_1","AngularEntrypoint","browser_common_1","BROWSER_PROVIDERS","ELEMENT_PROBE_PROVIDERS","ELEMENT_PROBE_PROVIDERS_PROD_MODE","inspectNativeElement","BrowserDomAdapter","By","Title","enableDebugTools","disableDebugTools","browser_common_2","xhr_impl_1","compiler_2","BROWSER_APP_PROVIDERS","BROWSER_APP_COMMON_PROVIDERS","COMPILER_PROVIDERS","XHRImpl","dom_renderer_1","DomRenderer","shared_styles_host_1","dom_events_1","DomEventsPlugin","event_manager_1","_WHEN_DEFAULT","SwitchView","SwitchView.constructor","SwitchView.create","SwitchView.destroy","NgSwitch","NgSwitch.constructor","NgSwitch.ngSwitch","NgSwitch._onWhenValueChanged","NgSwitch._emptyAllActiveViews","NgSwitch._activateViews","NgSwitch._registerView","NgSwitch._deregisterView","NgSwitchWhen","NgSwitchWhen.constructor","NgSwitchWhen.ngSwitchWhen","ViewContainerRef","TemplateRef","NgSwitchDefault","NgSwitchDefault.constructor","AbstractControlDirective.control","AbstractControlDirective.value","AbstractControlDirective.valid","AbstractControlDirective.errors","AbstractControlDirective.pristine","AbstractControlDirective.dirty","AbstractControlDirective.touched","AbstractControlDirective.untouched","AbstractControlDirective.path","control_container_1","shared_1","controlGroupProvider","NgControlGroup","NgControlGroup.constructor","NgControlGroup.ngOnInit","NgControlGroup.ngOnDestroy","NgControlGroup.control","NgControlGroup.path","NgControlGroup.formDirective","NgControlGroup.validator","NgControlGroup.asyncValidator","controlNameBinding","NgControlName","NgControlName.constructor","NgControlName.ngOnChanges","NgControlName.ngOnDestroy","NgControlName.viewToModelUpdate","NgControlName.path","NgControlName.formDirective","NgControlName.validator","NgControlName.asyncValidator","NgControlName.control","NgControlStatus","NgControlStatus.constructor","NgControlStatus.ngClassUntouched","NgControlStatus.ngClassTouched","NgControlStatus.ngClassPristine","NgControlStatus.ngClassDirty","NgControlStatus.ngClassValid","NgControlStatus.ngClassInvalid","model_1","formDirectiveProvider","NgForm","NgForm.constructor","NgForm.formDirective","NgForm.control","NgForm.path","NgForm.controls","NgForm.addControl","NgForm.getControl","NgForm.removeControl","NgForm.addControlGroup","NgForm.removeControlGroup","NgForm.getControlGroup","NgForm.updateModel","NgForm.onSubmit","NgForm._findContainer","formControlBinding","NgFormControl","NgFormControl.constructor","NgFormControl.ngOnChanges","NgFormControl.path","NgFormControl.validator","NgFormControl.asyncValidator","NgFormControl.control","NgFormControl.viewToModelUpdate","NgFormControl._isControlChanged","NgFormModel","NgFormModel.constructor","NgFormModel.ngOnChanges","NgFormModel.formDirective","NgFormModel.control","NgFormModel.path","NgFormModel.addControl","NgFormModel.getControl","NgFormModel.removeControl","NgFormModel.addControlGroup","NgFormModel.getControlGroup","NgFormModel.updateModel","NgFormModel.onSubmit","NgFormModel._updateDomValue","NgModel","NgModel.constructor","NgModel.ngOnChanges","NgModel.control","NgModel.path","NgModel.validator","NgModel.asyncValidator","NgModel.viewToModelUpdate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","NumberValueAccessor.constructor","NumberValueAccessor.writeValue","NumberValueAccessor.registerOnChange","NumberValueAccessor.registerOnTouched","REQUIRED_VALIDATOR","required","RequiredValidator","MIN_LENGTH_VALIDATOR","MinLengthValidator","MinLengthValidator.constructor","MinLengthValidator.validate","MAX_LENGTH_VALIDATOR","MaxLengthValidator","MaxLengthValidator.constructor","MaxLengthValidator.validate","PATTERN_VALIDATOR","PatternValidator","PatternValidator.constructor","PatternValidator.validate","htmlVisitAll","HtmlTextAst","HtmlTextAst.constructor","HtmlTextAst.visit","HtmlAttrAst","HtmlAttrAst.constructor","HtmlAttrAst.visit","HtmlElementAst","HtmlElementAst.constructor","HtmlElementAst.visit","HtmlCommentAst","HtmlCommentAst.constructor","HtmlCommentAst.visit","getElementFullName","parentElement","html_ast_1","html_lexer_1","parse_util_1","html_tags_1","HtmlTreeError","HtmlTreeError.constructor","HtmlTreeError.create","ParseError","HtmlParseTreeResult","HtmlParseTreeResult.constructor","HtmlParser","HtmlParser.parse","TreeBuilder","TreeBuilder.constructor","TreeBuilder.build","TreeBuilder._advance","TreeBuilder._advanceIf","TreeBuilder._consumeCdata","TreeBuilder._consumeComment","TreeBuilder._consumeText","TreeBuilder._closeVoidElement","TreeBuilder._consumeStartTag","TreeBuilder._pushElement","TreeBuilder._consumeEndTag","TreeBuilder._popElement","TreeBuilder._consumeAttr","TreeBuilder._getParentElement","TreeBuilder._addToParent","ParseLocation","ParseLocation.constructor","ParseLocation.toString","ParseSourceFile","ParseSourceFile.constructor","ParseSourceSpan","ParseSourceSpan.constructor","ParseSourceSpan.toString","ParseError.constructor","ParseError.toString","visitAndReturnContext","mapToKeyValueArray","mergeAttributeValue","attrName","attrValue1","attrValue2","keyValueArrayToStringMap","codeGenDirectivesArray","directives","codeGenTypesArray","types","codeGenViewType","typeRef","getViewType","component","embeddedTemplateIndex","template_ast_1","source_module_1","PROTO_VIEW_JIT_IMPORTS","APP_VIEW_MODULE_REF","VIEW_TYPE_MODULE_REF","APP_EL_MODULE_REF","METADATA_MODULE_REF","IMPLICIT_TEMPLATE_VAR","CLASS_ATTR","STYLE_ATTR","ProtoViewCompiler","ProtoViewCompiler.compileProtoViewRuntime","ProtoViewCompiler.compileProtoViewCodeGen","CompileProtoViews","CompileProtoViews.constructor","CompileProtoView","CompileProtoView.constructor","CompileProtoElement","CompileProtoElement.constructor","ProtoViewFactory","ProtoViewFactory.constructor","ProtoViewFactory.createCompileProtoView","CodeGenProtoViewFactory","CodeGenProtoViewFactory.constructor","CodeGenProtoViewFactory._nextProtoViewVar","CodeGenProtoViewFactory.createAppProtoView","CodeGenProtoViewFactory.createAppProtoElement","RuntimeProtoViewFactory","RuntimeProtoViewFactory.constructor","RuntimeProtoViewFactory.createAppProtoView","RuntimeProtoViewFactory.createAppProtoElement","ProtoViewBuilderVisitor","ProtoViewBuilderVisitor.constructor","ProtoViewBuilderVisitor._readAttrNameAndValues","ProtoViewBuilderVisitor.visitBoundText","ProtoViewBuilderVisitor.visitText","ProtoViewBuilderVisitor.visitNgContent","ProtoViewBuilderVisitor.visitElement","ProtoViewBuilderVisitor.visitEmbeddedTemplate","ProtoViewBuilderVisitor._addProtoElement","ProtoViewBuilderVisitor.visitVariable","ProtoViewBuilderVisitor.visitAttr","ProtoViewBuilderVisitor.visitDirective","ProtoViewBuilderVisitor.visitEvent","ProtoViewBuilderVisitor.visitDirectiveProperty","ProtoViewBuilderVisitor.visitElementProperty","DirectiveContext","DirectiveContext.constructor","ElementSchemaRegistry","ElementSchemaRegistry.hasProperty","ElementSchemaRegistry.getMappedPropName","isStyleUrlResolvable","extractStyleUrls","resolver","baseUrl","cssText","StyleWithImports","StyleWithImports.constructor","_cssImportRe","_urlWithSchemaRe","assertComponent","templateModuleUrl","codeGenHostViewFactoryName","codeGenComponentViewFactoryName","nestedCompType","mergeStringMaps","maps","removeDuplicates","items","filterPipes","template","allPipes","directive_metadata_1","change_detector_compiler_1","style_compiler_1","view_compiler_1","proto_view_compiler_1","template_parser_1","template_normalizer_1","runtime_metadata_1","resolved_metadata_cache_1","METADATA_CACHE_MODULE_REF","TemplateCompiler","TemplateCompiler.constructor","TemplateCompiler.normalizeDirectiveMetadata","TemplateCompiler.compileHostComponentRuntime","TemplateCompiler.clearCache","TemplateCompiler.compileTemplatesCodeGen","TemplateCompiler.compileStylesheetCodeGen","TemplateCompiler._compileComponentRuntime","TemplateCompiler._compileNestedComponentRuntime","TemplateCompiler._createViewFactoryRuntime","TemplateCompiler._getNestedComponentViewFactory","TemplateCompiler._compileComponentCodeGen","TemplateCompiler._createViewFactoryCodeGen","RuntimeMetadataResolver","TemplateNormalizer","TemplateParser","StyleCompiler","ChangeDetectionCompiler","ViewCompiler","ResolvedMetadataCache","NormalizedComponentWithViewDirectives","NormalizedComponentWithViewDirectives.constructor","CompiledTemplate","CompiledTemplate.constructor","CompiledTemplate.init","DirectiveCollector","DirectiveCollector.constructor","DirectiveCollector.findUsedDirectives","DirectiveCollector.visitBoundText","DirectiveCollector.visitText","DirectiveCollector.visitNgContent","DirectiveCollector.visitElement","DirectiveCollector.visitEmbeddedTemplate","DirectiveCollector.visitVariable","DirectiveCollector.visitAttr","DirectiveCollector.visitDirective","DirectiveCollector.visitEvent","DirectiveCollector.visitDirectiveProperty","DirectiveCollector.visitElementProperty","PipeVisitor","PipeVisitor.constructor","PipeVisitor.visitBoundText","PipeVisitor.visitText","PipeVisitor.visitNgContent","PipeVisitor.visitElement","PipeVisitor.visitEmbeddedTemplate","PipeVisitor.visitVariable","PipeVisitor.visitAttr","PipeVisitor.visitDirective","PipeVisitor.visitEvent","PipeVisitor.visitDirectiveProperty","PipeVisitor.visitElementProperty","splitClasses","classAttrValue","createElementCssSelector","matchableAttrs","html_parser_1","element_schema_registry_1","template_preparser_1","style_url_resolver_1","BIND_NAME_REGEXP","TEMPLATE_ELEMENT","TEMPLATE_ATTR","TEMPLATE_ATTR_PREFIX","PROPERTY_PARTS_SEPARATOR","ATTRIBUTE_PREFIX","CLASS_PREFIX","STYLE_PREFIX","TEXT_CSS_SELECTOR","CssSelector","parse","TEMPLATE_TRANSFORMS","TemplateParseError","TemplateParseError.constructor","TemplateParser.constructor","TemplateParser.parse","TemplateParseVisitor","TemplateParseVisitor.constructor","TemplateParseVisitor._reportError","TemplateParseVisitor._parseInterpolation","TemplateParseVisitor._parseAction","TemplateParseVisitor._parseBinding","TemplateParseVisitor._parseTemplateBindings","TemplateParseVisitor._checkPipes","TemplateParseVisitor.visitText","TemplateParseVisitor.visitAttr","TemplateParseVisitor.visitComment","TemplateParseVisitor.visitElement","TemplateParseVisitor._parseInlineTemplateBinding","TemplateParseVisitor._parseAttr","TemplateParseVisitor._normalizeAttributeName","TemplateParseVisitor._parseVariable","TemplateParseVisitor._parseProperty","TemplateParseVisitor._parsePropertyInterpolation","TemplateParseVisitor._parsePropertyAst","TemplateParseVisitor._parseAssignmentEvent","TemplateParseVisitor._parseEvent","TemplateParseVisitor._parseLiteralAttr","TemplateParseVisitor._parseDirectives","TemplateParseVisitor._createDirectiveAsts","TemplateParseVisitor._createDirectiveHostPropertyAsts","TemplateParseVisitor._createDirectiveHostEventAsts","TemplateParseVisitor._createDirectivePropertyAsts","TemplateParseVisitor._createElementPropertyAsts","TemplateParseVisitor._createElementPropertyAst","TemplateParseVisitor._findComponentDirectiveNames","TemplateParseVisitor._assertOnlyOneComponent","TemplateParseVisitor._assertNoComponentsNorElementBindingsOnTemplate","TemplateParseVisitor._assertAllEventsPublishedByDirectives","NonBindableVisitor","NonBindableVisitor.visitElement","NonBindableVisitor.visitComment","NonBindableVisitor.visitAttr","NonBindableVisitor.visitText","BoundElementOrDirectiveProperty","BoundElementOrDirectiveProperty.constructor","Component.constructor","Component.create","Component.findNgContentIndex","EMPTY_COMPONENT","SelectorMatcher","NON_BINDABLE_VISITOR","PipeCollector","PipeCollector.constructor","PipeCollector.visitPipe","_scope_check","wtfCreateScope","AbstractChangeDetector","AbstractChangeDetector.constructor","AbstractChangeDetector.addContentChild","AbstractChangeDetector.removeContentChild","AbstractChangeDetector.addViewChild","AbstractChangeDetector.removeViewChild","AbstractChangeDetector.remove","AbstractChangeDetector.handleEvent","AbstractChangeDetector.handleEventInternal","AbstractChangeDetector.detectChanges","AbstractChangeDetector.checkNoChanges","AbstractChangeDetector.runDetectChanges","AbstractChangeDetector.detectChangesInRecords","AbstractChangeDetector.hydrate","AbstractChangeDetector.dehydrate","AbstractChangeDetector.hydrated","AbstractChangeDetector.destroyRecursive","AbstractChangeDetector.afterContentLifecycleCallbacks","AbstractChangeDetector.afterViewLifecycleCallbacks","AbstractChangeDetector._detectChangesContentChildren","AbstractChangeDetector._detectChangesInViewChildren","AbstractChangeDetector.markAsCheckOnce","AbstractChangeDetector.markPathToRootAsCheckOnce","AbstractChangeDetector._unsubscribeFromOutputs","AbstractChangeDetector.getDirectiveFor","AbstractChangeDetector.getDetectorFor","AbstractChangeDetector.notifyDispatcher","AbstractChangeDetector.logBindingUpdate","AbstractChangeDetector.addChange","AbstractChangeDetector._throwError","AbstractChangeDetector.throwOnChangeError","AbstractChangeDetector.throwDehydratedError","AbstractChangeDetector._currentBinding","DirectiveIndex.constructor","DirectiveIndex.name","DirectiveRecord.constructor","DirectiveRecord.isDefaultChangeDetection","DebugContext.constructor","ChangeDetectorGenConfig.constructor","ChangeDetectorDefinition.constructor","debugEls","_queryElementChildren","element","predicate","_queryNodeChildren","parentNode","getDebugNode","nativeNode","getAllDebugNodes","indexDebugNode","removeDebugNodeFromIndex","EventListener","EventListener.constructor","DebugNode.constructor","DebugNode.setDebugInfo","DebugNode.inject","DebugNode.getLocal","DebugElement.constructor","DebugElement.addChild","DebugElement.removeChild","DebugElement.insertChildrenAfter","DebugElement.query","DebugElement.queryAll","DebugElement.queryAllNodes","DebugElement.children","DebugElement.triggerEventHandler","_nativeNodeToDebugNode","Inject","Optional","Injectable","Self","Host","SkipSelf","findFirstClosedCycle","constructResolvingPath","AbstractProviderError.constructor","AbstractProviderError.addKey","AbstractProviderError.context","NoProviderError.constructor","first","CyclicDependencyError.constructor","InstantiationError.constructor","InstantiationError.addKey","InstantiationError.wrapperMessage","InstantiationError.causeKey","InstantiationError.context","InvalidProviderError.constructor","NoAnnotationError.constructor","NoAnnotationError._genMessage","OutOfBoundsError.constructor","MixingMultiProvidersWithRegularProvidersError","MixingMultiProvidersWithRegularProvidersError.constructor","forwardRefFn","Key.constructor","Key.displayName","Key.get","Key.numberOfKeys","KeyRegistry","KeyRegistry.constructor","KeyRegistry.get","KeyRegistry.numberOfKeys","_globalKeyRegistry","ElementRef.nativeElement","ElementRef_","ElementRef_.constructor","ElementRef_.internalElement","ElementRef_.nativeElement","_isPipeMetadata","PipeResolver","PipeResolver.resolve","CODEGEN_PIPE_RESOLVER","ViewContainerRef.element","ViewContainerRef.clear","ViewContainerRef.length","ViewContainerRef_","ViewContainerRef_.constructor","ViewContainerRef_.get","ViewContainerRef_.length","ViewContainerRef_.element","ViewContainerRef_.createEmbeddedView","ViewContainerRef_.createHostView","ViewContainerRef_.insert","ViewContainerRef_.indexOf","ViewContainerRef_.remove","ViewContainerRef_.detach","ViewResolver","ViewResolver.constructor","ViewResolver.resolve","ViewResolver._resolve","ViewResolver._throwMixingViewAndComponent","AttributeMetadata.constructor","AttributeMetadata.token","AttributeMetadata.toString","QueryMetadata.constructor","QueryMetadata.isViewQuery","QueryMetadata.selector","QueryMetadata.isVarBindingQuery","QueryMetadata.varBindings","QueryMetadata.toString","ContentChildrenMetadata.constructor","ContentChildMetadata.constructor","ViewQueryMetadata.constructor","ViewQueryMetadata.isViewQuery","ViewQueryMetadata.toString","ViewChildrenMetadata.constructor","ViewChildMetadata.constructor","PLATFORM_DIRECTIVES","PLATFORM_PIPES","noopScope","arg0","arg1","impl","wtfEnabled","detectWTF","createScope","signature","flags","wtfLeave","leave","wtfStartTimeRange","startTimeRange","rangeType","action","wtfEndTimeRange","endTimeRange","_ArrayLogger","_ArrayLogger.constructor","_ArrayLogger.log","_ArrayLogger.logError","_ArrayLogger.logGroup","ExceptionHandler.constructor","ExceptionHandler.exceptionToString","ExceptionHandler.call","ExceptionHandler._extractMessage","ExceptionHandler._longStackTrace","ExceptionHandler._findContext","ExceptionHandler._findOriginalException","ExceptionHandler._findOriginalStack","BrowserXhr.build","http_utils_1","RequestOptions.constructor","RequestOptions.merge","BaseRequestOptions.constructor","Response.constructor","Response.blob","Response.json","Response.text","Response.arrayBuffer","moveNodesAfterSibling","sibling","appendNodes","decoratePreventDefault","eventHandler","_shimContentAttribute","componentShortId","_shimHostAttribute","_flattenStyles","compId","styles","splitNamespace","animation_builder_1","NAMESPACE_URIS","xlink","TEMPLATE_COMMENT_TEXT","TEMPLATE_BINDINGS_EXP","DomRootRenderer","DomRootRenderer.constructor","DomRootRenderer.renderComponent","DomRootRenderer_","DomRootRenderer_.constructor","AnimationBuilder","DomRenderer.constructor","DomRenderer.renderComponent","DomRenderer.selectRootElement","DomRenderer.createElement","DomRenderer.createViewRoot","DomRenderer.createTemplateAnchor","DomRenderer.createText","DomRenderer.projectNodes","DomRenderer.attachViewAfter","DomRenderer.detachView","DomRenderer.destroyView","DomRenderer.listen","DomRenderer.listenGlobal","DomRenderer.setElementProperty","DomRenderer.setElementAttribute","DomRenderer.setBindingDebugInfo","DomRenderer.setElementClass","DomRenderer.setElementStyle","DomRenderer.invokeElementMethod","DomRenderer.setText","DomRenderer.animateNodeEnter","DomRenderer.animateNodeLeave","COMPONENT_REGEX","COMPONENT_VARIABLE","HOST_ATTR","CONTENT_ATTR","RouteLifecycleHook","RouteLifecycleHook.constructor","CanActivate.constructor","routerCanReuse","routerCanDeactivate","routerOnActivate","routerOnReuse","routerOnDeactivate","splitAndFlattenLinkParams","linkParams","strItem","accumulation","split","mostSpecific","instructions","compareSpecificityStrings","assertTerminalComponent","route_config_impl_1","rules_1","rule_set_1","route_config_normalizer_1","url_parser_1","_resolveToNull","RouteRegistry.constructor","RouteRegistry.config","RouteRegistry.configFromComponent","RouteRegistry.recognize","RouteRegistry._recognize","RouteRegistry._auxRoutesToUnresolved","RouteRegistry.generate","RouteRegistry._generate","RouteRegistry.hasRoute","RouteRegistry.generateDefault","convertUrlParamsToArray","urlParams","serializeParams","joiner","pathSegmentsToUrl","pathSegments","matchUrlSegment","str","Url","Url.constructor","Url.toString","Url.segmentToString","Url._auxToString","Url._matrixParamsToString","Url._childString","RootUrl","RootUrl.constructor","RootUrl.toString","RootUrl.segmentToString","RootUrl._queryParamsToString","SEGMENT_RE","UrlParser","UrlParser.peekStartsWith","UrlParser.capture","UrlParser.parse","UrlParser.parseRoot","UrlParser.parseSegment","UrlParser.parseQueryParams","UrlParser.parseMatrixParams","UrlParser.parseParam","UrlParser.parseAuxiliaryRoutes","parser","map_1","mergeMap_1","mergeMap","flatMap","project","MapOperator","MapSubscriber","count","resultSelector","concurrent","Number","POSITIVE_INFINITY","MergeMapOperator","subscribeToResult_1","OuterSubscriber_1","observer","MergeMapSubscriber","buffer","active","_tryNext","_innerSub","ish","_notifyResultSelector","shift","toPromise","css_animation_builder_1","browser_details_1","AnimationBuilder.constructor","AnimationBuilder.css","BrowserDetails","math_1","BrowserDetails.constructor","BrowserDetails.doesElapsedTimeIncludesDelay","BrowserDetails.raf","RafQueue","RafQueue.constructor","RafQueue._raf","RafQueue._nextFrame","RafQueue.cancel","ng_class_1","NgClass","ng_for_1","NgFor","ng_if_1","NgIf","ng_style_1","NgStyle","ng_switch_1","ng_plural_1","NgPlural","NgPluralCase","NgLocalization","core_directives_1","CORE_DIRECTIVES","NgClass.constructor","NgClass.initialClasses","NgClass.rawClass","NgClass.ngDoCheck","NgClass.ngOnDestroy","NgClass._cleanupClasses","NgClass._applyKeyValueChanges","NgClass._applyIterableChanges","NgClass._applyInitialClasses","NgClass._applyClasses","NgClass._toggleClass","NgFor.constructor","NgFor.ngForOf","NgFor.ngForTemplate","NgFor.ngForTrackBy","NgFor.ngDoCheck","NgFor._applyChanges","NgFor._perViewChange","NgFor._bulkRemove","NgFor._bulkInsert","RecordViewTuple","RecordViewTuple.constructor","NgIf.constructor","NgIf.ngIf","_CATEGORY_DEFAULT","NgPluralCase.constructor","NgPlural.constructor","NgPlural.ngPlural","NgPlural.ngAfterContentInit","NgPlural._updateView","NgPlural._clearViews","NgPlural._activateView","NgPlural._getCategoryView","NgPlural._isValueView","NgPlural._formatValue","NgPlural._stripValue","NgStyle.constructor","NgStyle.rawStyle","NgStyle.ngDoCheck","NgStyle._applyChanges","NgStyle._setStyle","ng_control_name_1","ng_form_control_1","ng_model_1","ng_control_group_1","ng_form_model_1","ng_form_1","ng_control_status_1","FORM_DIRECTIVES","validators_2","form_builder_1","FormBuilder","form_builder_2","FORM_PROVIDERS","FORM_BINDINGS","modelModule","FormBuilder.group","FormBuilder.control","FormBuilder.array","FormBuilder._reduceControls","FormBuilder._createControl","invalid_pipe_argument_exception_1","ObservableStrategy","ObservableStrategy.createSubscription","ObservableStrategy.dispose","ObservableStrategy.onDestroy","PromiseStrategy","PromiseStrategy.createSubscription","_promiseStrategy","_observableStrategy","AsyncPipe","AsyncPipe.constructor","AsyncPipe.ngOnDestroy","AsyncPipe.transform","AsyncPipe._subscribe","AsyncPipe._selectStrategy","AsyncPipe._dispose","AsyncPipe._updateLatestValue","intl_1","defaultLocale","DatePipe","DatePipe.transform","DatePipe.supports","interpolationExp","I18nPluralPipe","I18nPluralPipe.transform","I18nSelectPipe","I18nSelectPipe.transform","JsonPipe","JsonPipe.transform","LowerCasePipe","LowerCasePipe.transform","_re","NumberPipe","NumberPipe._format","DecimalPipe","DecimalPipe.constructor","DecimalPipe.transform","PercentPipe","PercentPipe.constructor","PercentPipe.transform","CurrencyPipe","CurrencyPipe.constructor","CurrencyPipe.transform","ReplacePipe","ReplacePipe.transform","ReplacePipe._supportedInput","ReplacePipe._supportedPattern","ReplacePipe._supportedReplacement","SlicePipe","SlicePipe.transform","SlicePipe.supports","UpperCasePipe","UpperCasePipe.transform","change_detection_jit_generator_1","abstract_change_detector_1","change_definition_factory_1","change_detector_codegen_1","ABSTRACT_CHANGE_DETECTOR","UTIL","CHANGE_DETECTOR_STATE","CHANGE_DETECTION_JIT_IMPORTS","ABSTRACT_CHANGE_DETECTOR_MODULE","UTIL_MODULE","PREGEN_PROTO_CHANGE_DETECTOR_MODULE","CONSTANTS_MODULE","ChangeDetectionCompiler.constructor","ChangeDetectionCompiler.compileComponentRuntime","ChangeDetectionCompiler._createChangeDetectorFactory","ChangeDetectionCompiler.compileComponentCodeGen","template_compiler_1","RuntimeCompiler","RuntimeCompiler.constructor","RuntimeCompiler_","RuntimeCompiler_.constructor","RuntimeCompiler_.compileInHost","RuntimeCompiler_.clearCache","flattenDirectives","view","platformDirectives","flattenPipes","platformPipes","tree","out","isValidType","calcModuleUrl","cmpMetadata","cpl","md","directive_resolver_1","pipe_resolver_1","view_resolver_1","directive_lifecycle_reflector_1","platform_directives_and_pipes_1","url_resolver_1","RuntimeMetadataResolver.constructor","RuntimeMetadataResolver.getDirectiveMetadata","RuntimeMetadataResolver.getPipeMetadata","RuntimeMetadataResolver.getViewDirectivesMetadata","RuntimeMetadataResolver.getViewPipesMetadata","_EMPTY_ATTR_VALUE","_SELECTOR_REGEXP","CssSelector.constructor","CssSelector.parse","CssSelector.isElementSelector","CssSelector.setElement","CssSelector.getMatchingElementTemplate","CssSelector.addAttribute","CssSelector.addClassName","CssSelector.toString","SelectorMatcher.constructor","SelectorMatcher.createNotMatcher","SelectorMatcher.addSelectables","SelectorMatcher._addSelectable","SelectorMatcher._addTerminal","SelectorMatcher._addPartial","SelectorMatcher.match","SelectorMatcher._matchTerminal","SelectorMatcher._matchPartial","SelectorListContext","SelectorListContext.constructor","SelectorContext","SelectorContext.constructor","SelectorContext.finalize","xhr_1","shadow_css_1","StyleCompiler.constructor","StyleCompiler.compileComponentRuntime","StyleCompiler.compileComponentCodeGen","StyleCompiler.compileStylesheetCodeGen","StyleCompiler.clearCache","StyleCompiler._loadStyles","StyleCompiler._styleCodeGen","StyleCompiler._styleModule","StyleCompiler._shimIfNeeded","StyleCompiler._createModuleUrl","TemplateNormalizer.constructor","TemplateNormalizer.normalizeTemplate","TemplateNormalizer.normalizeLoadedTemplate","TemplatePreparseVisitor","TemplatePreparseVisitor.constructor","TemplatePreparseVisitor.visitElement","TemplatePreparseVisitor.visitComment","TemplatePreparseVisitor.visitAttr","TemplatePreparseVisitor.visitText","preparseElement","ast","normalizeNgContentSelect","selectAttr","NG_CONTENT_SELECT_ATTR","NG_CONTENT_ELEMENT","LINK_ELEMENT","LINK_STYLE_REL_ATTR","LINK_STYLE_HREF_ATTR","LINK_STYLE_REL_VALUE","STYLE_ELEMENT","SCRIPT_ELEMENT","NG_NON_BINDABLE_ATTR","PreparsedElementType","PreparsedElement","PreparsedElement.constructor","codeGenEventHandler","boundElementIndex","eventName","codeGenViewFactoryName","codeGenViewEncapsulation","VIEW_JIT_IMPORTS","ViewCompiler.compileComponentRuntime","ViewCompiler.compileComponentCodeGen","CodeGenViewFactory","CodeGenViewFactory.constructor","CodeGenViewFactory._nextVar","CodeGenViewFactory._nextRenderVar","CodeGenViewFactory._nextAppVar","CodeGenViewFactory._nextDisposableVar","CodeGenViewFactory.createText","CodeGenViewFactory.createElement","CodeGenViewFactory.createTemplateAnchor","CodeGenViewFactory.createGlobalEventListener","CodeGenViewFactory.createElementEventListener","CodeGenViewFactory.setElementAttribute","CodeGenViewFactory.createAppElement","CodeGenViewFactory.createAndSetComponentView","CodeGenViewFactory.getProjectedNodes","CodeGenViewFactory.appendProjectedNodes","CodeGenViewFactory.createViewFactory","RuntimeViewFactory","RuntimeViewFactory.constructor","RuntimeViewFactory.createText","RuntimeViewFactory.createElement","RuntimeViewFactory.createTemplateAnchor","RuntimeViewFactory.createGlobalEventListener","RuntimeViewFactory.createElementEventListener","RuntimeViewFactory.setElementAttribute","RuntimeViewFactory.createAppElement","RuntimeViewFactory.createAndSetComponentView","RuntimeViewFactory.getProjectedNodes","RuntimeViewFactory.appendProjectedNodes","RuntimeViewFactory.createViewFactory","ParentElement","ParentElement.constructor","ParentElement.addContentNode","ViewBuilderVisitor","ViewBuilderVisitor.constructor","ViewBuilderVisitor._addRenderNode","ViewBuilderVisitor._getParentRenderNode","ViewBuilderVisitor.visitBoundText","ViewBuilderVisitor.visitText","ViewBuilderVisitor._visitText","ViewBuilderVisitor.visitNgContent","ViewBuilderVisitor.visitElement","ViewBuilderVisitor.visitEmbeddedTemplate","ViewBuilderVisitor.visitVariable","ViewBuilderVisitor.visitAttr","ViewBuilderVisitor.visitDirective","ViewBuilderVisitor.visitEvent","ViewBuilderVisitor.visitDirectiveProperty","ViewBuilderVisitor.visitElementProperty","_componentProviders","disposePlatform","_createPlatform","_runPlatformInitializers","injector","_runAppInitializers","testability_1","dynamic_component_loader_1","console_1","_platform","_platformProviders","PlatformRef.injector","PlatformRef_","PlatformRef_.constructor","PlatformRef_.registerDisposeListener","PlatformRef_.injector","PlatformRef_.application","PlatformRef_.asyncApplication","PlatformRef_._initApp","PlatformRef_.dispose","PlatformRef_._applicationDisposed","ApplicationRef.injector","ApplicationRef.zone","ApplicationRef.componentTypes","ApplicationRef_","ApplicationRef_.constructor","ApplicationRef_.registerBootstrapListener","ApplicationRef_.registerDisposeListener","ApplicationRef_.registerChangeDetector","ApplicationRef_.unregisterChangeDetector","ApplicationRef_.bootstrap","ApplicationRef_._loadComponent","ApplicationRef_._unloadComponent","ApplicationRef_.injector","ApplicationRef_.zone","ApplicationRef_.tick","ApplicationRef_.dispose","ApplicationRef_.componentTypes","DIRECTIVE_LIFECYCLE","BINDING","DIRECTIVE","ELEMENT_PROPERTY","ELEMENT_ATTRIBUTE","ELEMENT_CLASS","ELEMENT_STYLE","TEXT_NODE","EVENT","HOST_EVENT","BindingTarget.constructor","BindingTarget.isDirective","BindingTarget.isElementProperty","BindingTarget.isElementAttribute","BindingTarget.isElementClass","BindingTarget.isElementStyle","BindingTarget.isTextNode","BindingRecord.constructor","BindingRecord.isDirectiveLifecycle","BindingRecord.callOnChanges","BindingRecord.isDefaultChangeDetection","BindingRecord.createDirectiveDoCheck","BindingRecord.createDirectiveOnInit","BindingRecord.createDirectiveOnChanges","BindingRecord.createForDirective","BindingRecord.createForElementProperty","BindingRecord.createForElementAttribute","BindingRecord.createForElementClass","BindingRecord.createForElementStyle","BindingRecord.createForHostProperty","BindingRecord.createForHostAttribute","BindingRecord.createForHostClass","BindingRecord.createForHostStyle","BindingRecord.createForTextNode","BindingRecord.createForEvent","BindingRecord.createForHostEvent","proto_record_1","codegen_name_util_1","codegen_logic_util_1","codegen_facade_1","IS_CHANGED_LOCAL","CHANGES_LOCAL","ChangeDetectorJITGenerator","ChangeDetectorJITGenerator.constructor","ChangeDetectorJITGenerator.generate","ChangeDetectorJITGenerator.generateSource","ChangeDetectorJITGenerator._genPropertyBindingTargets","ChangeDetectorJITGenerator._genDirectiveIndices","ChangeDetectorJITGenerator._maybeGenHandleEventInternal","ChangeDetectorJITGenerator._genEventBinding","ChangeDetectorJITGenerator._genEventBindingEval","ChangeDetectorJITGenerator._genMarkPathToRootAsCheckOnce","ChangeDetectorJITGenerator._genUpdatePreventDefault","ChangeDetectorJITGenerator._maybeGenDehydrateDirectives","ChangeDetectorJITGenerator._maybeGenHydrateDirectives","ChangeDetectorJITGenerator._maybeGenAfterContentLifecycleCallbacks","ChangeDetectorJITGenerator._maybeGenAfterViewLifecycleCallbacks","ChangeDetectorJITGenerator._genAllRecords","ChangeDetectorJITGenerator._genConditionalSkip","ChangeDetectorJITGenerator._genUnconditionalSkip","ChangeDetectorJITGenerator._genEndOfSkipBlock","ChangeDetectorJITGenerator._genDirectiveLifecycle","ChangeDetectorJITGenerator._genPipeCheck","ChangeDetectorJITGenerator._genReferenceCheck","ChangeDetectorJITGenerator._genChangeMarker","ChangeDetectorJITGenerator._genUpdateDirectiveOrElement","ChangeDetectorJITGenerator._genThrowOnChangeCheck","ChangeDetectorJITGenerator._genAddToChanges","ChangeDetectorJITGenerator._maybeFirstInBinding","ChangeDetectorJITGenerator._maybeGenLastInDirective","ChangeDetectorJITGenerator._genOnCheck","ChangeDetectorJITGenerator._genOnInit","ChangeDetectorJITGenerator._genOnChange","ChangeDetectorJITGenerator._genNotifyOnPushDetectors","ChangeDetectorRef_","ChangeDetectorRef_.constructor","ChangeDetectorRef_.markForCheck","ChangeDetectorRef_.detach","ChangeDetectorRef_.detectChanges","ChangeDetectorRef_.checkNoChanges","ChangeDetectorRef_.reattach","codify","rawString","combineGeneratedStrings","vals","DefaultIterableDifferFactory.supports","DefaultIterableDifferFactory.create","trackByIdentity","DefaultIterableDiffer","DefaultIterableDiffer.constructor","DefaultIterableDiffer.collection","DefaultIterableDiffer.length","DefaultIterableDiffer.forEachItem","DefaultIterableDiffer.forEachPreviousItem","DefaultIterableDiffer.forEachAddedItem","DefaultIterableDiffer.forEachMovedItem","DefaultIterableDiffer.forEachRemovedItem","DefaultIterableDiffer.forEachIdentityChange","DefaultIterableDiffer.diff","DefaultIterableDiffer.check","DefaultIterableDiffer.isDirty","DefaultIterableDiffer._reset","DefaultIterableDiffer._mismatch","DefaultIterableDiffer._verifyReinsertion","DefaultIterableDiffer._truncate","DefaultIterableDiffer._reinsertAfter","DefaultIterableDiffer._moveAfter","DefaultIterableDiffer._addAfter","DefaultIterableDiffer._insertAfter","DefaultIterableDiffer._remove","DefaultIterableDiffer._unlink","DefaultIterableDiffer._addToMoves","DefaultIterableDiffer._addToRemovals","DefaultIterableDiffer._addIdentityChange","DefaultIterableDiffer.toString","CollectionChangeRecord.constructor","CollectionChangeRecord.toString","_DuplicateItemRecordList","_DuplicateItemRecordList.constructor","_DuplicateItemRecordList.add","_DuplicateItemRecordList.get","_DuplicateItemRecordList.remove","_DuplicateMap","_DuplicateMap.constructor","_DuplicateMap.put","_DuplicateMap.get","_DuplicateMap.remove","_DuplicateMap.isEmpty","_DuplicateMap.clear","_DuplicateMap.toString","DefaultKeyValueDifferFactory.supports","DefaultKeyValueDifferFactory.create","DefaultKeyValueDiffer","DefaultKeyValueDiffer.constructor","DefaultKeyValueDiffer.isDirty","DefaultKeyValueDiffer.forEachItem","DefaultKeyValueDiffer.forEachPreviousItem","DefaultKeyValueDiffer.forEachChangedItem","DefaultKeyValueDiffer.forEachAddedItem","DefaultKeyValueDiffer.forEachRemovedItem","DefaultKeyValueDiffer.diff","DefaultKeyValueDiffer.check","DefaultKeyValueDiffer._reset","DefaultKeyValueDiffer._truncate","DefaultKeyValueDiffer._isInRemovals","DefaultKeyValueDiffer._addToRemovals","DefaultKeyValueDiffer._removeFromSeq","DefaultKeyValueDiffer._removeFromRemovals","DefaultKeyValueDiffer._addToAdditions","DefaultKeyValueDiffer._addToChanges","DefaultKeyValueDiffer.toString","DefaultKeyValueDiffer._forEach","KeyValueChangeRecord.constructor","KeyValueChangeRecord.toString","IterableDiffers.constructor","IterableDiffers.create","IterableDiffers.extend","IterableDiffers.find","KeyValueDiffers.constructor","KeyValueDiffers.create","KeyValueDiffers.extend","KeyValueDiffers.find","DynamicChangeDetector.constructor","DynamicChangeDetector.handleEventInternal","DynamicChangeDetector._processEventBinding","DynamicChangeDetector._computeSkipLength","DynamicChangeDetector._markPathAsCheckOnce","DynamicChangeDetector._matchingEventBindings","DynamicChangeDetector.hydrateDirectives","DynamicChangeDetector._createEventHandler","DynamicChangeDetector.dehydrateDirectives","DynamicChangeDetector._destroyPipes","DynamicChangeDetector._destroyDirectives","DynamicChangeDetector.checkNoChanges","DynamicChangeDetector.detectChangesInRecordsInternal","DynamicChangeDetector._firstInBinding","DynamicChangeDetector.afterContentLifecycleCallbacksInternal","DynamicChangeDetector.afterViewLifecycleCallbacksInternal","DynamicChangeDetector._updateDirectiveOrElement","DynamicChangeDetector._addChange","DynamicChangeDetector._getDirectiveFor","DynamicChangeDetector._getDetectorFor","DynamicChangeDetector._check","DynamicChangeDetector._referenceCheck","DynamicChangeDetector._calculateCurrValue","DynamicChangeDetector._pipeCheck","DynamicChangeDetector._pipeFor","DynamicChangeDetector._readContext","DynamicChangeDetector._readSelf","DynamicChangeDetector._writeSelf","DynamicChangeDetector._readPipe","DynamicChangeDetector._writePipe","DynamicChangeDetector._setChanged","DynamicChangeDetector._pureFuncAndArgsDidNotChange","DynamicChangeDetector._argsChanged","DynamicChangeDetector._argsOrContextChanged","DynamicChangeDetector._readArgs","ExpressionChangedAfterItHasBeenCheckedException.constructor","ChangeDetectionError.constructor","DehydratedException.constructor","EventEvaluationError","EventEvaluationError.constructor","EventEvaluationErrorContext","EventEvaluationErrorContext.constructor","newCharacterToken","code","newIdentifierToken","text","newKeywordToken","newOperatorToken","newStringToken","newNumberToken","n","isWhitespace","isIdentifierStart","isIdentifier","isIdentifierPart","isDigit","isExponentStart","isExponentSign","unescape","TokenType","Lexer.tokenize","Token","Token.constructor","Token.isCharacter","Token.isNumber","Token.isString","Token.isOperator","Token.isIdentifier","Token.isKeyword","Token.isKeywordVar","Token.isKeywordNull","Token.isKeywordUndefined","Token.isKeywordTrue","Token.isKeywordFalse","Token.toNumber","Token.toString","EOF","Character","$EOF","$TAB","$LF","$VTAB","$FF","$CR","$SPACE","$BANG","$DQ","$HASH","$$","$PERCENT","$AMPERSAND","$SQ","$LPAREN","$RPAREN","$STAR","$PLUS","$COMMA","$MINUS","$PERIOD","$SLASH","$COLON","$SEMICOLON","$LT","$EQ","$GT","$QUESTION","$0","$9","$A","$E","$Z","$LBRACKET","$BACKSLASH","$RBRACKET","$CARET","$_","$a","$e","$f","$n","$r","$t","$u","$v","$z","$LBRACE","$BAR","$RBRACE","$NBSP","ScannerError","ScannerError.constructor","ScannerError.toString","_Scanner","_Scanner.constructor","_Scanner.advance","_Scanner.scanToken","_Scanner.scanCharacter","_Scanner.scanOperator","_Scanner.scanComplexOperator","_Scanner.scanIdentifier","_Scanner.scanNumber","_Scanner.scanString","_Scanner.error","KEYWORDS","createFromList","Locals.constructor","Locals.contains","Locals.get","Locals.set","Locals.clearLocalValues","createPropertyRecords","definition","createEventRecords","_arrayFn","_mapPrimitiveName","_operationToPrimitiveName","operation","_operationToFunction","_interpolationFn","strings","event_binding_1","coalesce_1","DynamicProtoChangeDetector.constructor","DynamicProtoChangeDetector.instantiate","ProtoRecordBuilder","ProtoRecordBuilder.constructor","ProtoRecordBuilder.add","ProtoRecordBuilder._setArgumentToPureFunction","ProtoRecordBuilder._appendRecords","_ConvertAstIntoProtoRecords","_ConvertAstIntoProtoRecords.constructor","_ConvertAstIntoProtoRecords.append","_ConvertAstIntoProtoRecords.create","_ConvertAstIntoProtoRecords.visitImplicitReceiver","_ConvertAstIntoProtoRecords.visitInterpolation","_ConvertAstIntoProtoRecords.visitLiteralPrimitive","_ConvertAstIntoProtoRecords.visitPropertyRead","_ConvertAstIntoProtoRecords.visitPropertyWrite","_ConvertAstIntoProtoRecords.visitKeyedWrite","_ConvertAstIntoProtoRecords.visitSafePropertyRead","_ConvertAstIntoProtoRecords.visitMethodCall","_ConvertAstIntoProtoRecords.visitSafeMethodCall","_ConvertAstIntoProtoRecords.visitFunctionCall","_ConvertAstIntoProtoRecords.visitLiteralArray","_ConvertAstIntoProtoRecords.visitLiteralMap","_ConvertAstIntoProtoRecords.visitBinary","_ConvertAstIntoProtoRecords.visitPrefixNot","_ConvertAstIntoProtoRecords.visitConditional","_ConvertAstIntoProtoRecords.visitPipe","_ConvertAstIntoProtoRecords.visitKeyedRead","_ConvertAstIntoProtoRecords.visitChain","_ConvertAstIntoProtoRecords.visitQuote","_ConvertAstIntoProtoRecords._visitAll","_ConvertAstIntoProtoRecords._addRecord","Console","Console.log","canSee","src","dst","_mapProviders","_MAX_CONSTRUCTION_COUNTER","UNDEFINED","Visibility","ProtoInjectorInlineStrategy","ProtoInjectorInlineStrategy.constructor","ProtoInjectorInlineStrategy.getProviderAtIndex","ProtoInjectorInlineStrategy.createInjectorStrategy","ProtoInjectorDynamicStrategy","ProtoInjectorDynamicStrategy.constructor","ProtoInjectorDynamicStrategy.getProviderAtIndex","ProtoInjectorDynamicStrategy.createInjectorStrategy","ProtoInjector","ProtoInjector.constructor","ProtoInjector.fromResolvedProviders","ProtoInjector.getProviderAtIndex","InjectorInlineStrategy","InjectorInlineStrategy.constructor","InjectorInlineStrategy.resetConstructionCounter","InjectorInlineStrategy.instantiateProvider","InjectorInlineStrategy.getObjByKeyId","InjectorInlineStrategy.getObjAtIndex","InjectorInlineStrategy.getMaxNumberOfObjects","InjectorDynamicStrategy","InjectorDynamicStrategy.constructor","InjectorDynamicStrategy.resetConstructionCounter","InjectorDynamicStrategy.instantiateProvider","InjectorDynamicStrategy.getObjByKeyId","InjectorDynamicStrategy.getObjAtIndex","InjectorDynamicStrategy.getMaxNumberOfObjects","ProviderWithVisibility","ProviderWithVisibility.constructor","ProviderWithVisibility.getKeyId","Injector.constructor","Injector.resolve","Injector.resolveAndCreate","Injector.fromResolvedProviders","Injector.fromResolvedBindings","Injector.hostBoundary","Injector.debugContext","Injector.get","Injector.getOptional","Injector.getAt","Injector.parent","Injector.internalStrategy","Injector.resolveAndCreateChild","Injector.createChildFromResolved","Injector.resolveAndInstantiate","Injector.instantiateResolved","Injector._new","Injector._instantiateProvider","Injector._instantiate","Injector._getByDependency","Injector._getByKey","Injector._throwOrNull","Injector._getByKeySelf","Injector._getByKeyHost","Injector._getPrivateDependency","Injector._getByKeyDefault","Injector.displayName","Injector.toString","INJECTOR_KEY","QueryList.constructor","QueryList.changes","QueryList.length","QueryList.first","QueryList.last","QueryList.map","QueryList.filter","QueryList.reduce","QueryList.forEach","QueryList.toArray","QueryList[getSymbolIterator()]","QueryList.toString","QueryList.reset","QueryList.notifyOnChanges","ResolvedMetadataCache.constructor","ResolvedMetadataCache.getResolvedDirectiveMetadata","ResolvedMetadataCache.getResolvedPipeMetadata","CODEGEN_RESOLVED_METADATA_CACHE","TemplateRef.elementRef","TemplateRef_","TemplateRef_.constructor","TemplateRef_.elementRef","PipeProvider","PipeProvider.constructor","PipeProvider.createFromType","cd","ProtoPipes","ProtoPipes.constructor","ProtoPipes.fromProviders","ProtoPipes.get","Pipes","Pipes.constructor","Pipes.get","ReflectionCapabilities.constructor","ReflectionCapabilities.isReflectionEnabled","ReflectionCapabilities.factory","ReflectionCapabilities._zipTypesAndAnnotations","ReflectionCapabilities.parameters","ReflectionCapabilities.annotations","ReflectionCapabilities.propMetadata","ReflectionCapabilities.interfaces","ReflectionCapabilities.getter","ReflectionCapabilities.setter","ReflectionCapabilities.method","ReflectionCapabilities.importUri","_mergeMaps","ReflectionInfo.constructor","Reflector.constructor","Reflector.isReflectionEnabled","Reflector.trackUsage","Reflector.listUnusedKeys","Reflector.registerFunction","Reflector.registerType","Reflector.registerGetters","Reflector.registerSetters","Reflector.registerMethods","Reflector.factory","Reflector.parameters","Reflector.annotations","Reflector.propMetadata","Reflector.interfaces","Reflector.getter","Reflector.setter","Reflector.method","Reflector._getReflectionInfo","Reflector._containsReflectionInfo","Reflector.importUri","NgZoneError.constructor","NgZoneImpl","NgZoneImpl.constructor","NgZoneImpl.isInAngularZone","NgZoneImpl.runInner","NgZoneImpl.runOuter","BaseWrappedException.constructor","BaseWrappedException.wrapperMessage","BaseWrappedException.wrapperStack","BaseWrappedException.originalException","BaseWrappedException.originalStack","BaseWrappedException.context","BaseWrappedException.message","digitCondition","nameCondition","extractComponents","pattern","NumberFormatStyle","NumberFormatter","NumberFormatter.format","dateFormatterCache","DateFormatter","DateFormatter.format","NaN","_getJsonpConnections","_nextRequestId","JSONP_HOME","_jsonpConnections","BrowserJsonp.build","BrowserJsonp.nextRequestID","BrowserJsonp.requestCallback","BrowserJsonp.exposeConnection","BrowserJsonp.removeConnection","BrowserJsonp.send","BrowserJsonp.cleanup","JSONP_ERR_NO_CALLBACK","JSONP_ERR_WRONG_METHOD","JSONPConnection_","JSONPConnection_.constructor","JSONPConnection_.finished","JSONPBackend.constructor","JSONPBackend_.constructor","JSONPBackend_.createConnection","XHRConnection.constructor","XHRBackend.constructor","XHRBackend.createConnection","httpRequest","backend","request","mergeOptions","defaultOpts","providedOpts","Http.constructor","Http.request","Http.get","Http.post","Http.put","Http.delete","Http.patch","Http.head","Jsonp.constructor","Jsonp.request","Request.constructor","Request.text","paramParser","rawParams","URLSearchParams.constructor","URLSearchParams.clone","URLSearchParams.has","URLSearchParams.get","URLSearchParams.getAll","URLSearchParams.set","URLSearchParams.setAll","URLSearchParams.append","URLSearchParams.appendAll","URLSearchParams.replaceAll","URLSearchParams.toString","URLSearchParams.delete","getBaseElementHref","relativePath","generic_browser_adapter_1","_attrToPropMap","class","innerHtml","readonly","tabindex","DOM_KEY_LOCATION_NUMPAD","_keyMap","\b","\t","","\u001b","Del","Esc","Left","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","A","B","C","D","E","F","G","H","I","J","K","M","N","O","`","","BrowserDomAdapter.constructor","BrowserDomAdapter.parse","BrowserDomAdapter.makeCurrent","BrowserDomAdapter.hasProperty","BrowserDomAdapter.setProperty","BrowserDomAdapter.getProperty","BrowserDomAdapter.invoke","BrowserDomAdapter.logError","BrowserDomAdapter.log","BrowserDomAdapter.logGroup","BrowserDomAdapter.logGroupEnd","BrowserDomAdapter.attrToPropMap","BrowserDomAdapter.query","BrowserDomAdapter.querySelector","BrowserDomAdapter.querySelectorAll","BrowserDomAdapter.on","BrowserDomAdapter.onAndCancel","BrowserDomAdapter.dispatchEvent","BrowserDomAdapter.createMouseEvent","BrowserDomAdapter.createEvent","BrowserDomAdapter.preventDefault","BrowserDomAdapter.isPrevented","BrowserDomAdapter.getInnerHTML","BrowserDomAdapter.getOuterHTML","BrowserDomAdapter.nodeName","BrowserDomAdapter.nodeValue","BrowserDomAdapter.type","BrowserDomAdapter.content","BrowserDomAdapter.firstChild","BrowserDomAdapter.nextSibling","BrowserDomAdapter.parentElement","BrowserDomAdapter.childNodes","BrowserDomAdapter.childNodesAsList","BrowserDomAdapter.clearNodes","BrowserDomAdapter.appendChild","BrowserDomAdapter.removeChild","BrowserDomAdapter.replaceChild","BrowserDomAdapter.remove","BrowserDomAdapter.insertBefore","BrowserDomAdapter.insertAllBefore","BrowserDomAdapter.insertAfter","BrowserDomAdapter.setInnerHTML","BrowserDomAdapter.getText","BrowserDomAdapter.setText","BrowserDomAdapter.getValue","BrowserDomAdapter.setValue","BrowserDomAdapter.getChecked","BrowserDomAdapter.setChecked","BrowserDomAdapter.createComment","BrowserDomAdapter.createTemplate","BrowserDomAdapter.createElement","BrowserDomAdapter.createElementNS","BrowserDomAdapter.createTextNode","BrowserDomAdapter.createScriptTag","BrowserDomAdapter.createStyleElement","BrowserDomAdapter.createShadowRoot","BrowserDomAdapter.getShadowRoot","BrowserDomAdapter.getHost","BrowserDomAdapter.clone","BrowserDomAdapter.getElementsByClassName","BrowserDomAdapter.getElementsByTagName","BrowserDomAdapter.classList","BrowserDomAdapter.addClass","BrowserDomAdapter.removeClass","BrowserDomAdapter.hasClass","BrowserDomAdapter.setStyle","BrowserDomAdapter.removeStyle","BrowserDomAdapter.getStyle","BrowserDomAdapter.hasStyle","BrowserDomAdapter.tagName","BrowserDomAdapter.attributeMap","BrowserDomAdapter.hasAttribute","BrowserDomAdapter.hasAttributeNS","BrowserDomAdapter.getAttribute","BrowserDomAdapter.getAttributeNS","BrowserDomAdapter.setAttribute","BrowserDomAdapter.setAttributeNS","BrowserDomAdapter.removeAttribute","BrowserDomAdapter.removeAttributeNS","BrowserDomAdapter.templateAwareRoot","BrowserDomAdapter.createHtmlDocument","BrowserDomAdapter.defaultDoc","BrowserDomAdapter.getBoundingClientRect","BrowserDomAdapter.getTitle","BrowserDomAdapter.setTitle","BrowserDomAdapter.elementMatches","BrowserDomAdapter.isTemplateElement","BrowserDomAdapter.isTextNode","BrowserDomAdapter.isCommentNode","BrowserDomAdapter.isElementNode","BrowserDomAdapter.hasShadowRoot","BrowserDomAdapter.isShadowRoot","BrowserDomAdapter.importIntoDoc","BrowserDomAdapter.adoptNode","BrowserDomAdapter.getHref","BrowserDomAdapter.getEventKey","BrowserDomAdapter.getGlobalEventTarget","BrowserDomAdapter.getHistory","BrowserDomAdapter.getLocation","BrowserDomAdapter.getBaseHref","BrowserDomAdapter.resetBaseElement","BrowserDomAdapter.getUserAgent","BrowserDomAdapter.setData","BrowserDomAdapter.getData","BrowserDomAdapter.getComputedStyle","BrowserDomAdapter.setGlobalVar","BrowserDomAdapter.requestAnimationFrame","BrowserDomAdapter.cancelAnimationFrame","BrowserDomAdapter.performanceNow","GenericBrowserDomAdapter","baseElement","urlParsingNode","XHRImpl.constructor","XHRImpl.get","response","responseText","completer","_exceptionHandler","_document","initDomAdapter","common_1","key_events_1","hammer_gestures_1","shared_styles_host_2","browser_adapter_1","testability_2","wtf_init_1","common_dom_1","dom_tokens_2","title_1","common_dom_2","browser_adapter_2","tools_1","PLATFORM_COMMON_PROVIDERS","APPLICATION_COMMON_PROVIDERS","COMMON_PIPES","COMMON_DIRECTIVES","KeyEventsPlugin","HammerGesturesPlugin","DomEventsPlugin.constructor","DomEventsPlugin.supports","DomEventsPlugin.addEventListener","DomEventsPlugin.addGlobalEventListener","RouterLink.constructor","RouterLink._updateLink","RouterLink.isRouteActive","RouterLink.routeParams","RouterLink.onClick","routerMod","hookMod","RouterOutlet.constructor","RouterOutlet.activate","RouterOutlet.reuse","RouterOutlet.deactivate","RouterOutlet.routerCanDeactivate","RouterOutlet.routerCanReuse","RouterOutlet.ngOnDestroy","lifecycle_annotations_impl_1","lifecycle_annotations_impl_2","hasLifecycleHook","getCanActivateHook","PathLocationStrategy.constructor","PathLocationStrategy.onPopState","PathLocationStrategy.getBaseHref","PathLocationStrategy.prepareExternalUrl","PathLocationStrategy.path","PathLocationStrategy.pushState","PathLocationStrategy.replaceState","PathLocationStrategy.forward","PathLocationStrategy.back","route_config_impl_2","routerFactory","registry","location","primaryComponent","appRef","routerPrimaryComponentFactory","app","MatchedUrl","MatchedUrl.constructor","GeneratedUrl","GeneratedUrl.constructor","RouteMatch","PathMatch","PathMatch.constructor","RedirectMatch","RedirectMatch.constructor","RedirectRule","RedirectRule.constructor","RedirectRule.path","RedirectRule.recognize","RedirectRule.generate","RouteRule","RouteRule.constructor","RouteRule.path","RouteRule.recognize","RouteRule.generate","RouteRule.generateComponentPathValues","RouteRule._getInstruction","subscriberIndex","nextOrObserver","Animation","Animation.constructor","Animation.totalTime","Animation.wait","Animation.setup","Animation.start","Animation.applyStyles","Animation.addClasses","Animation.removeClasses","Animation.addEvents","Animation.handleAnimationEvent","Animation.handleAnimationCompleted","Animation.onComplete","Animation.parseDurationString","Animation.stripLetters","css_animation_options_1","animation_1","CssAnimationBuilder","CssAnimationBuilder.constructor","CssAnimationBuilder.addAnimationClass","CssAnimationBuilder.addClass","CssAnimationBuilder.removeClass","CssAnimationBuilder.setDuration","CssAnimationBuilder.setDelay","CssAnimationBuilder.setStyles","CssAnimationBuilder.setFromStyles","CssAnimationBuilder.setToStyles","CssAnimationBuilder.start","CssAnimationOptions","CssAnimationOptions.constructor","forms_1","ng_control_name_2","ng_form_control_2","ng_model_2","ng_control_group_2","ng_form_model_2","ng_form_2","default_value_accessor_2","checkbox_value_accessor_2","radio_control_value_accessor_2","number_value_accessor_2","ng_control_status_2","select_control_value_accessor_2","normalizeValidator","validator","normalizeAsyncValidator","async_pipe_1","date_pipe_1","json_pipe_1","slice_pipe_1","lowercase_pipe_1","number_pipe_1","uppercase_pipe_1","replace_pipe_1","i18n_plural_pipe_1","i18n_select_pipe_1","common_pipes_1","createChangeDetectorDefinitions","componentStrategy","genConfig","parsedTemplate","createChangeDefinitions","pvVisitors","_collectNestedProtoViewsVariableNames","ProtoViewVisitor","ProtoViewVisitor.constructor","ProtoViewVisitor.visitEmbeddedTemplate","ProtoViewVisitor.visitElement","ProtoViewVisitor.visitNgContent","ProtoViewVisitor.visitVariable","ProtoViewVisitor.visitEvent","ProtoViewVisitor.visitElementProperty","ProtoViewVisitor.visitAttr","ProtoViewVisitor.visitBoundText","ProtoViewVisitor.visitText","ProtoViewVisitor.visitDirective","ProtoViewVisitor.visitDirectiveProperty","_createChangeDetectorGenConfig","runtime_compiler_1","template_parser_2","template_compiler_2","runtime_compiler_2","dom_element_schema_registry_1","change_detection_2","DomElementSchemaRegistry","tokenizeHtml","sourceContent","unexpectedCharacterErrorMsg","charCode","unknownEntityErrorMsg","entitySrc","isNotWhitespace","isNameEnd","isPrefixEnd","isDigitEntityEnd","isNamedEntityEnd","isTextEnd","isAsciiLetter","isAsciiHexDigit","compareCharCodeCaseInsensitive","code1","code2","toUpperCaseCharCode","mergeTextTokens","srcTokens","HtmlTokenType","HtmlToken","HtmlToken.constructor","HtmlTokenError","HtmlTokenError.constructor","HtmlTokenizeResult","HtmlTokenizeResult.constructor","$F","$X","$x","CR_OR_CRLF_REGEXP","ControlFlowError","ControlFlowError.constructor","_HtmlTokenizer","_HtmlTokenizer.constructor","_HtmlTokenizer._processCarriageReturns","_HtmlTokenizer.tokenize","_HtmlTokenizer._getLocation","_HtmlTokenizer._getSpan","_HtmlTokenizer._beginToken","_HtmlTokenizer._endToken","_HtmlTokenizer._createError","_HtmlTokenizer._advance","_HtmlTokenizer._attemptCharCode","_HtmlTokenizer._attemptCharCodeCaseInsensitive","_HtmlTokenizer._requireCharCode","_HtmlTokenizer._attemptStr","_HtmlTokenizer._attemptStrCaseInsensitive","_HtmlTokenizer._requireStr","_HtmlTokenizer._attemptCharCodeUntilFn","_HtmlTokenizer._requireCharCodeUntilFn","_HtmlTokenizer._attemptUntilChar","_HtmlTokenizer._readChar","_HtmlTokenizer._decodeEntity","_HtmlTokenizer._consumeRawText","_HtmlTokenizer._consumeComment","_HtmlTokenizer._consumeCdata","_HtmlTokenizer._consumeDocType","_HtmlTokenizer._consumePrefixAndName","_HtmlTokenizer._consumeTagOpen","_HtmlTokenizer._consumeRawTextWithTagClose","_HtmlTokenizer._consumeTagOpenStart","_HtmlTokenizer._consumeAttributeName","_HtmlTokenizer._consumeAttributeValue","_HtmlTokenizer._consumeTagOpenEnd","_HtmlTokenizer._consumeTagClose","_HtmlTokenizer._consumeText","_HtmlTokenizer._savePosition","_HtmlTokenizer._restorePosition","DomElementSchemaRegistry.constructor","DomElementSchemaRegistry._getProtoElement","DomElementSchemaRegistry.hasProperty","DomElementSchemaRegistry.getMappedPropName","stripComments","processRules","ruleCallback","selector","content","suffix","contentPrefix","startsWith","BLOCK_PLACEHOLDER","inputWithEscapedBlocks","blocks","nextBlockIndex","substring","rule","CssRule","escapeBlocks","ShadowCss","ShadowCss.constructor","ShadowCss.shimCssText","ShadowCss._insertDirectives","ShadowCss._insertPolyfillDirectivesInCssText","ShadowCss._insertPolyfillRulesInCssText","replace","ShadowCss._scopeCssText","ShadowCss._extractUnscopedRulesFromCssText","ShadowCss._convertColonHost","ShadowCss._convertColonHostContext","ShadowCss._convertColonRule","trim","partReplacer","_polyfillHostNoCombinator","join","ShadowCss._colonHostContextPartReplacer","ShadowCss._colonHostPartReplacer","ShadowCss._convertShadowDOMSelectors","ShadowCss._scopeSelectors","ShadowCss._scopeSelector","ShadowCss._selectorNeedsScoping","ShadowCss._makeScopeMatcher","ShadowCss._applySelectorScope","ShadowCss._applySimpleSelectorScope","ShadowCss._applyStrictSelectorScope","ShadowCss._insertPolyfillHostInCssText","_cssContentNextSelectorRe","_cssContentRuleRe","_cssContentUnscopedRuleRe","_polyfillHost","_polyfillHostContext","_parenSuffix","_cssColonHostRe","_cssColonHostContextRe","_shadowDOMSelectorsRe","_shadowDeepSelectors","_selectorReSuffix","_polyfillHostRe","_colonHostRe","_colonHostContextRe","_commentRe","_ruleRe","_curlyRe","OPEN_CURLY","CLOSE_CURLY","CssRule.constructor","StringWithEscapedBlocks","StringWithEscapedBlocks.constructor","AngularEntrypoint.constructor","view_manager_2","dynamic_component_loader_2","coalesce","srcRecords","_optimizeSkips","_mayBeAddRecord","record","dstRecords","excludedIdxs","excluded","_findFirstMatch","_cloneAndUpdateIndexes","indexMap","_srcToDstSelfIndex","srcIdx","_createSelfRecord","contextIndex","selfIndex","_haveSameDirIndex","CodegenLogicUtil","CodegenLogicUtil.constructor","CodegenLogicUtil.genPropertyBindingEvalValue","CodegenLogicUtil.genEventBindingEvalValue","CodegenLogicUtil._genEvalValue","CodegenLogicUtil.genPropertyBindingTargets","CodegenLogicUtil.genDirectiveIndices","CodegenLogicUtil._genInterpolation","CodegenLogicUtil.genHydrateDirectives","CodegenLogicUtil.genDirectivesOnDestroy","CodegenLogicUtil._genEventHandler","CodegenLogicUtil._genReadDirective","CodegenLogicUtil.genHydrateDetectors","CodegenLogicUtil.genContentLifecycleCallbacks","CodegenLogicUtil.genViewLifecycleCallbacks","sanitizeName","_STATE_ACCESSOR","_PROP_BINDING_INDEX","_DIRECTIVES_ACCESSOR","_DISPATCHER_ACCESSOR","_LOCALS_ACCESSOR","_MODE_ACCESSOR","_PIPES_ACCESSOR","_PROTOS_ACCESSOR","CONTEXT_ACCESSOR","CONTEXT_INDEX","_FIELD_PREFIX","_whiteSpaceRegExp","CodegenNameUtil","CodegenNameUtil.constructor","CodegenNameUtil._addFieldPrefix","CodegenNameUtil.getDispatcherName","CodegenNameUtil.getPipesAccessorName","CodegenNameUtil.getProtosName","CodegenNameUtil.getDirectivesAccessorName","CodegenNameUtil.getLocalsAccessorName","CodegenNameUtil.getStateName","CodegenNameUtil.getModeName","CodegenNameUtil.getPropertyBindingIndex","CodegenNameUtil.getLocalName","CodegenNameUtil.getEventLocalName","CodegenNameUtil.getChangeName","CodegenNameUtil.genInitLocals","CodegenNameUtil.genInitEventLocals","CodegenNameUtil.getPreventDefaultAccesor","CodegenNameUtil.getFieldCount","CodegenNameUtil.getFieldName","CodegenNameUtil.getAllFieldNames","CodegenNameUtil.genDehydrateFields","CodegenNameUtil.genPipeOnDestroy","CodegenNameUtil.getPipeName","CodegenNameUtil.getDirectiveName","CodegenNameUtil.getDetectorName","EventBinding","EventBinding.constructor","JitProtoChangeDetector.constructor","JitProtoChangeDetector.isSupported","JitProtoChangeDetector.instantiate","JitProtoChangeDetector._createFactory","_implicitReceiver","INTERPOLATION_REGEXP","ParseException","ParseException.constructor","Parser.constructor","Parser.parseAction","Parser.parseBinding","Parser.parseSimpleBinding","Parser._parseBindingAst","Parser._parseQuote","Parser.parseTemplateBindings","Parser.parseInterpolation","Parser.wrapLiteralPrimitive","Parser._checkNoInterpolation","Parser._findInterpolationErrorColumn","_ParseAST","_ParseAST.constructor","_ParseAST.peek","_ParseAST.next","_ParseAST.inputIndex","_ParseAST.advance","_ParseAST.optionalCharacter","_ParseAST.optionalKeywordVar","_ParseAST.peekKeywordVar","_ParseAST.expectCharacter","_ParseAST.optionalOperator","_ParseAST.expectOperator","_ParseAST.expectIdentifierOrKeyword","_ParseAST.expectIdentifierOrKeywordOrString","_ParseAST.parseChain","_ParseAST.parsePipe","_ParseAST.parseExpression","_ParseAST.parseConditional","_ParseAST.parseLogicalOr","_ParseAST.parseLogicalAnd","_ParseAST.parseEquality","_ParseAST.parseRelational","_ParseAST.parseAdditive","_ParseAST.parseMultiplicative","_ParseAST.parsePrefix","_ParseAST.parseCallChain","_ParseAST.parsePrimary","_ParseAST.parseExpressionList","_ParseAST.parseLiteralMap","_ParseAST.parseAccessMemberOrMethodCall","_ParseAST.parseCallArguments","_ParseAST.parseBlockContent","_ParseAST.expectTemplateBindingKey","_ParseAST.parseTemplateBindings","_ParseAST.error","SimpleExpressionChecker","SimpleExpressionChecker.constructor","SimpleExpressionChecker.check","SimpleExpressionChecker.visitInterpolation","SimpleExpressionChecker.visitPropertyWrite","SimpleExpressionChecker.visitSafePropertyRead","SimpleExpressionChecker.visitMethodCall","SimpleExpressionChecker.visitSafeMethodCall","SimpleExpressionChecker.visitFunctionCall","SimpleExpressionChecker.visitLiteralArray","SimpleExpressionChecker.visitLiteralMap","SimpleExpressionChecker.visitBinary","SimpleExpressionChecker.visitPrefixNot","SimpleExpressionChecker.visitConditional","SimpleExpressionChecker.visitPipe","SimpleExpressionChecker.visitKeyedRead","SimpleExpressionChecker.visitKeyedWrite","SimpleExpressionChecker.visitAll","SimpleExpressionChecker.visitChain","SimpleExpressionChecker.visitQuote","implementsOnDestroy","pipe","SelectedPipe","SelectedPipe.constructor","DebugDomRootRenderer","DebugDomRootRenderer.constructor","DebugDomRootRenderer.renderComponent","DebugDomRenderer","DebugDomRenderer.constructor","DebugDomRenderer.renderComponent","DebugDomRenderer.selectRootElement","DebugDomRenderer.createElement","DebugDomRenderer.createViewRoot","DebugDomRenderer.createTemplateAnchor","DebugDomRenderer.createText","DebugDomRenderer.projectNodes","DebugDomRenderer.attachViewAfter","DebugDomRenderer.detachView","DebugDomRenderer.destroyView","DebugDomRenderer.listen","DebugDomRenderer.listenGlobal","DebugDomRenderer.setElementProperty","DebugDomRenderer.setElementAttribute","DebugDomRenderer.setBindingDebugInfo","DebugDomRenderer.setElementDebugInfo","DebugDomRenderer.setElementClass","DebugDomRenderer.setElementStyle","DebugDomRenderer.invokeElementMethod","DebugDomRenderer.setText","OpaqueToken.constructor","OpaqueToken.toString","lcInterface","_reflector","scope","returnValue","range","trace","events","wtfInit","win","document","gc","performance","Event","MouseEvent","KeyboardEvent","EventTarget","History","GenericBrowserDomAdapter.constructor","GenericBrowserDomAdapter.getXHR","GenericBrowserDomAdapter.getDistributedNodes","GenericBrowserDomAdapter.resolveAndSetHref","GenericBrowserDomAdapter.supportsDOMEvents","GenericBrowserDomAdapter.supportsNativeShadowDOM","GenericBrowserDomAdapter.getAnimationPrefix","GenericBrowserDomAdapter.getTransitionEnd","GenericBrowserDomAdapter.supportsAnimation","PublicTestability","PublicTestability.constructor","PublicTestability.isStable","PublicTestability.whenStable","PublicTestability.findBindings","PublicTestability.findProviders","BrowserGetTestability","BrowserGetTestability.init","BrowserGetTestability.addToWindow","didWork","didWork_","callback","testability","whenStable","decrement","BrowserGetTestability.findTestabilityInTree","Title.getTitle","Title.setTitle","browser_1","AngularTools","AngularTools.constructor","AngularProfiler","AngularProfiler.constructor","AngularProfiler.timeChangeDetection","ref","common_tools_1","By.all","By.css","By.directive","_createConditionalRootRenderer","rootRenderer","_createRootRenderer","debug_renderer_1","CORE_TOKENS","INSPECT_GLOBAL_NAME","CORE_TOKENS_GLOBAL_NAME","_eventNames","pan","panstart","panmove","panend","pancancel","panleft","panright","panup","pandown","pinch","pinchstart","pinchmove","pinchend","pinchcancel","pinchin","pinchout","press","pressup","rotate","rotatestart","rotatemove","rotateend","rotatecancel","swipe","swipeleft","swiperight","swipeup","swipedown","tap","HammerGesturesPluginCommon","HammerGesturesPluginCommon.constructor","HammerGesturesPluginCommon.supports","hammer_common_1","HammerGesturesPlugin.constructor","HammerGesturesPlugin.supports","HammerGesturesPlugin.addEventListener","mc","Hammer","enable","eventObj","zone","run","handler","on","off","modifierKeys","modifierKeyGetters","alt","event","altKey","ctrlKey","metaKey","shiftKey","KeyEventsPlugin.constructor","KeyEventsPlugin.supports","KeyEventsPlugin.addEventListener","KeyEventsPlugin.parseEventName","KeyEventsPlugin.getEventFullKey","KeyEventsPlugin.eventCallback","KeyEventsPlugin._normalizeKey","BrowserPlatformLocation","BrowserPlatformLocation.constructor","BrowserPlatformLocation._init","BrowserPlatformLocation.location","BrowserPlatformLocation.getBaseHrefFromDOM","BrowserPlatformLocation.onPopState","BrowserPlatformLocation.onHashChange","BrowserPlatformLocation.pathname","BrowserPlatformLocation.search","BrowserPlatformLocation.hash","BrowserPlatformLocation.pushState","BrowserPlatformLocation.replaceState","BrowserPlatformLocation.forward","BrowserPlatformLocation.back","HashLocationStrategy.constructor","HashLocationStrategy.onPopState","HashLocationStrategy.getBaseHref","HashLocationStrategy.path","HashLocationStrategy.prepareExternalUrl","HashLocationStrategy.pushState","HashLocationStrategy.replaceState","HashLocationStrategy.forward","HashLocationStrategy.back","normalizeRouteConfig","wrapLoaderToReconfigureRegistry","loader","assertComponentExists","route_config_decorator_1","browser_platform_location_1","AsyncRouteHandler","AsyncRouteHandler.constructor","AsyncRouteHandler.resolveComponentType","SyncRouteHandler","SyncRouteHandler.constructor","SyncRouteHandler.resolveComponentType","utils_1","route_path_1","ContinuationPathSegment","ContinuationPathSegment.constructor","ContinuationPathSegment.generate","ContinuationPathSegment.match","StaticPathSegment","StaticPathSegment.constructor","StaticPathSegment.match","StaticPathSegment.generate","DynamicPathSegment","DynamicPathSegment.constructor","DynamicPathSegment.match","DynamicPathSegment.generate","StarPathSegment","StarPathSegment.constructor","StarPathSegment.match","StarPathSegment.generate","ParamRoutePath","ParamRoutePath.constructor","ParamRoutePath.matchUrl","ParamRoutePath.generateUrl","ParamRoutePath.toString","ParamRoutePath._parsePathString","ParamRoutePath._calculateSpecificity","ParamRoutePath._calculateHash","ParamRoutePath._assertValidPath","RegexRoutePath","RegexRoutePath.constructor","RegexRoutePath.matchUrl","RegexRoutePath.generateUrl","RegexRoutePath.toString","async_route_handler_1","sync_route_handler_1","param_route_path_1","regex_route_path_1","RuleSet","RuleSet.constructor","RuleSet.config","RuleSet.recognize","RuleSet.recognizeAuxiliary","RuleSet.hasRoute","RuleSet.componentLoaded","RuleSet.loadComponent","RuleSet.generate","RuleSet.generateAuxiliary","RuleSet._assertNoHashCollision","RuleSet._getRoutePath","normalizeString","TouchMap","TouchMap.constructor","TouchMap.get","TouchMap.getUnused","Codegen","Codegen.generate","Codegen.toString","MaterialTab","tab","ctx","element_","classList","contains","CssClasses_","MDL_JS_RIPPLE_EFFECT","rippleContainer","createElement","MDL_RIPPLE_CONTAINER","ripple","MDL_RIPPLE","appendChild","addEventListener","preventDefault","href","panel","querySelector","resetTabState_","resetPanelState_","ACTIVE_CLASS","MaterialLayoutTab","tabs","panels","layout","selectTab","content_","IS_ACTIVE","tabBar_","JS_RIPPLE_EFFECT","RIPPLE_CONTAINER","RIPPLE","getAttribute","charAt","show","componentHandler","upgradeDom","optJsClass","optCssClass","upgradeElement","upgradeElements","elements","upgradeAllRegistered","registerUpgradedCallback","jsClass","register","downgradeElements","findRegisteredClass_","optReplace","registeredComponents_","className","getUpgradedListOfElement_","dataUpgraded","isElementUpgraded_","upgradedList","upgradeDomInternal","cssClass","t","registeredClass","querySelectorAll","upgradeElementInternal","Element","classesToUpgrade","setAttribute","instance","classConstructor","componentConfigProperty_","createdComponents_","j","callbacks","widget","ev","CustomEvent","bubbles","cancelable","createEvent","initEvent","dispatchEvent","upgradeElementsInternal","HTMLElement","children","registerInternal","widgetMissing","newConfig","classAsString","found","registerUpgradedCallbackInternal","regClass","upgradeAllRegisteredInternal","deconstructComponentInternal","componentIndex","upgrades","componentPlace","downgradeNodesInternal","downgradeNode","filter","NodeList","Node","ComponentConfigPublic","ComponentConfig","documentElement","now","getTime","vendors","requestAnimationFrame","vp","cancelAnimationFrame","navigator","userAgent","lastTime","nextTime","max","clearTimeout","MaterialButton","init","Constant_","RIPPLE_EFFECT","blurHandler_","blur","disable","disabled","rippleElement_","boundRippleBlurHandler","boundButtonBlurHandler","MaterialCheckbox","TINY_TIMEOUT","INPUT","BOX_OUTLINE","FOCUS_HELPER","TICK_OUTLINE","RIPPLE_IGNORE_EVENTS","RIPPLE_CENTER","IS_FOCUSED","IS_DISABLED","IS_CHECKED","IS_UPGRADED","onChange_","updateClasses_","onFocus_","onBlur_","onMouseUp_","blur_","checkDisabled","checkToggleState","inputElement_","checked","check","uncheck","boxOutline","tickContainer","tickOutline","rippleContainerElement_","boundRippleMouseUp","boundInputOnChange","boundInputOnFocus","boundInputOnBlur","boundElementMouseUp","MaterialIconToggle","boundElementOnMouseUp","MaterialMenu","TRANSITION_DURATION_SECONDS","TRANSITION_DURATION_FRACTION","CLOSE_TIMEOUT","Keycodes_","ENTER","ESCAPE","SPACE","UP_ARROW","DOWN_ARROW","CONTAINER","OUTLINE","ITEM","ITEM_RIPPLE_CONTAINER","IS_VISIBLE","IS_ANIMATING","BOTTOM_LEFT","BOTTOM_RIGHT","TOP_LEFT","TOP_RIGHT","UNALIGNED","container","insertBefore","removeChild","container_","outline","outline_","forElId","forEl","getElementById","forElement_","handleForClick_","handleForKeyboardEvent_","boundItemKeydown_","handleItemKeyboardEvent_","boundItemClick_","handleItemClick_","tabIndex","evt","rect","getBoundingClientRect","forRect","right","top","offsetTop","offsetHeight","left","offsetLeft","bottom","toggle","keyCode","focus","currentIndex","click","hide","hasAttribute","stopPropagation","closing_","applyClip_","height","width","clip","removeAnimationEndListener_","addAnimationEndListener_","transitionDuration","itemDelay","transitionDelay","removeEventListener","removeProperty","MaterialProgress","INDETERMINATE_CLASS","setProgress","progressbar_","setBuffer","bufferbar_","auxbar_","el","MaterialRadio","JS_RADIO","RADIO_BTN","RADIO_OUTER_CIRCLE","RADIO_INNER_CIRCLE","radios","getElementsByClassName","button","btnElement_","onMouseup_","boundChangeHandler_","boundFocusHandler_","boundBlurHandler_","boundMouseUpHandler_","outerCircle","innerCircle","MaterialSlider","isIE_","msPointerEnabled","IE_CONTAINER","SLIDER_CONTAINER","BACKGROUND_FLEX","BACKGROUND_LOWER","BACKGROUND_UPPER","IS_LOWEST_VALUE","onInput_","updateValueStyles_","onContainerMouseDown_","newEvent","buttons","clientX","clientY","y","fraction","min","backgroundLower_","flex","webkitFlex","backgroundUpper_","change","containerIE","backgroundFlex","boundInputHandler","boundChangeHandler","boundMouseUpHandler","boundContainerMouseDownHandler","MaterialSnackbar","textElement_","cssClasses_","MESSAGE","actionElement_","ACTION","actionHandler_","message_","actionText_","queuedNotifications_","setActionHidden_","ANIMATION_LENGTH","SNACKBAR","ACTIVE","displaySnackbar_","textContent","cleanup_","timeout_","showSnackbar","actionHandler","actionText","timeout","checkQueue_","Boolean","removeAttribute","MaterialSpinner","MDL_SPINNER_LAYER_COUNT","MDL_SPINNER_LAYER","MDL_SPINNER_CIRCLE_CLIPPER","MDL_SPINNER_CIRCLE","MDL_SPINNER_GAP_PATCH","MDL_SPINNER_LEFT","MDL_SPINNER_RIGHT","createLayer","layer","leftClipper","gapPatch","rightClipper","circleOwners","circle","stop","MaterialSwitch","TRACK","THUMB","thumb","focusHelper","boundFocusHandler","boundBlurHandler","MaterialTabs","TAB_CLASS","PANEL_CLASS","UPGRADED_CLASS","MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS","initTabs_","tabs_","panels_","MaterialTextfield","maxRows","NO_MAX_ROWS","MAX_ROWS_ATTRIBUTE","LABEL","IS_DIRTY","IS_INVALID","HAS_PLACEHOLDER","onKeyDown_","currentRowCount","onReset_","checkValidity","checkDirty","checkFocus","input_","validity","valid","label_","parseInt","isNaN","boundUpdateClassesHandler","boundResetHandler","boundKeyDownHandler","invalid","MaterialTooltip","BOTTOM","LEFT","RIGHT","TOP","handleMouseEnter_","props","marginLeft","offsetWidth","marginTop","handleMouseLeave_","boundMouseEnterHandler","boundMouseLeaveHandler","MaterialLayout","MAX_WIDTH","TAB_SCROLL_PIXELS","RESIZE_TIMEOUT","MENU_ICON","CHEVRON_LEFT","CHEVRON_RIGHT","Mode_","STANDARD","SEAMED","WATERFALL","SCROLL","HEADER","DRAWER","CONTENT","DRAWER_BTN","ICON","HEADER_SEAMED","HEADER_WATERFALL","HEADER_SCROLL","FIXED_HEADER","OBFUSCATOR","TAB_BAR","TAB_CONTAINER","TAB","TAB_BAR_BUTTON","TAB_BAR_LEFT_BUTTON","TAB_BAR_RIGHT_BUTTON","PANEL","HAS_DRAWER","HAS_TABS","HAS_SCROLLING_HEADER","CASTING_SHADOW","IS_COMPACT","IS_SMALL_SCREEN","IS_DRAWER_OPEN","ON_LARGE_SCREEN","ON_SMALL_SCREEN","contentScrollHandler_","header_","headerVisible","scrollTop","keyboardEventHandler_","drawer_","toggleDrawer","screenSizeHandler_","screenSizeMediaQuery_","obfuscator_","drawerToggleHandler_","headerTransitionEndHandler_","headerClickHandler_","tabBar","drawerButton","focusedElement","directChildren","childNodes","numChildren","child","persisted","overflowY","mode","drawerButtonIcon","innerHTML","firstChild","obfuscator","matchMedia","addListener","tabContainer","leftButton","leftButtonIcon","scrollLeft","rightButton","rightButtonIcon","tabUpdateHandler","scrollWidth","windowResizeHandler","resizeTimeoutId_","MaterialDataTable","DATA_TABLE","SELECTABLE","SELECT_ELEMENT","IS_SELECTED","selectRow_","checkbox","row","opt_rows","createCheckbox_","label","labelClasses","firstHeader","bodyRows","footRows","rows","headerCheckbox","firstCell","nodeName","toUpperCase","rowCheckbox","MaterialRipple","INITIAL_SCALE","INITIAL_SIZE","INITIAL_OPACITY","FINAL_OPACITY","FINAL_SCALE","RIPPLE_EFFECT_IGNORE_EVENTS","downHandler_","boundHeight","boundWidth","rippleSize_","sqrt","ignoringMouseDown_","frameCount","getFrameCount","setFrameCount","bound","currentTarget","round","touches","setRippleXY","setRippleStyles","animFrameHandler","upHandler_","detail","recentering","frameCount_","x_","y_","boundDownHandler","boundUpHandler","fC","getRippleElement","newX","newY","transformString","scale","offset","webkitTransform","msTransform","transform","webpackPolyfill","deprecate","paths"],"mappings":"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U,KAAAqX,QAAArX,OAEAgV,gBAAA1U,UAAAgP,OAAA,SAAApJ,OACAlG,KAAAiQ,OAAA0E,YAAAzO,MAAAlG,MACAA,KAAAwP,eAEAwF,gBAAA1U,UAAAiP,UAAA,WACAvP,KAAAiQ,OAAA2E,eAAA5U,MACAA,KAAAwP,eAEAwF,iBACCd,aAAApF,WACDxS,SAAA0Y,iCtNg2+BM,SAAS3Y,OAAQC,SuN73+BvB,YACAA,SAAA4S,OACAO,gBAAA,EACA9I,KAAA,SAAAhI,SACAuH,MAAA,SAAAmJ,KAA2B,KAAAA,MAC3BlJ,SAAA,evNo4+BS,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA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Sr+I,OAAQC,SoR9tpCvB,YAIA,IAAAy+I,SAAA,WACEA,iBAAYA,cAKdA,MAJEA,qCAASA,SAAkBA,uBAAgCA,KACzDC,KAAMA,yBAERD,sCAAqBE,KAAMA,yBAC7BF,UANaz+I,SAAAy+I,QAAOA,SpR6upCX,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEH,SAAS1+I,OAAQC,UqR96pCvB,WACA,YC+GA,SAAA4+I,GAAAC,EAAAC,GACA,GAAAD,EAAA,CACA,GAAAC,EAAAC,SAAAC,UAAAC,SAAAH,EAAAI,YAAAC,sBAAA,CACA,GAAAC,GAAArN,SAAAsN,cAAA,OACAD,GAAAJ,UAAAh1I,IAAA80I,EAAAI,YAAAI,sBACAF,EAAAJ,UAAAh1I,IAAA80I,EAAAI,YAAAC,qBACA,IAAAI,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAA80I,EAAAI,YAAAM,YACAJ,EAAAK,YAAAF,GACAV,EAAAY,YAAAL,GAEAP,EAAAa,iBAAA,iBAAAz0I,GACAA,EAAA00I,gBACA,IAAAC,GAAAf,EAAAe,KAAAz0D,MAAA,QACA00D,EAAAf,EAAAC,SAAAe,cAAA,IAAAF,EACAd,GAAAiB,iBACAjB,EAAAkB,mBACAnB,EAAAG,UAAAh1I,IAAA80I,EAAAI,YAAAe,cACAJ,EAAAb,UAAAh1I,IAAA80I,EAAAI,YAAAe,iBCwTA,QAAAC,GAAArB,EAAAsB,EAAAC,EAAAC,GAIA,QAAAC,KACA,GAAAV,GAAAf,EAAAe,KAAAz0D,MAAA,QACA00D,EAAAQ,EAAAE,SAAAT,cAAA,IAAAF,EACAS,GAAAN,eAAAI,GACAE,EAAAL,iBAAAI,GACAvB,EAAAG,UAAAh1I,IAAAq2I,EAAAnB,YAAAsB,WACAX,EAAAb,UAAAh1I,IAAAq2I,EAAAnB,YAAAsB,WAEA,GAAAH,EAAAI,QAAAzB,UAAAC,SAAAoB,EAAAnB,YAAAwB,kBAAA,CACA,GAAAtB,GAAArN,SAAAsN,cAAA,OACAD,GAAAJ,UAAAh1I,IAAAq2I,EAAAnB,YAAAyB,kBACAvB,EAAAJ,UAAAh1I,IAAAq2I,EAAAnB,YAAAwB,iBACA,IAAAnB,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAAq2I,EAAAnB,YAAA0B,QACAxB,EAAAK,YAAAF,GACAV,EAAAY,YAAAL,GAEAP,EAAAa,iBAAA,iBAAAz0I,GACA,MAAA4zI,EAAAgC,aAAA,QAAAC,OAAA,KACA71I,EAAA00I,iBACAW,OAGAzB,EAAAkC,KAAAT,EFtbA,GAAAU,IAUAC,WAAA,SAAAC,EAAAC,KAQAC,eAAA,SAAAhjE,EAAA8iE,KAOAG,gBAAA,SAAAC,KAKAC,qBAAA,aAWAC,yBAAA,SAAAC,EAAA9N,KAMA+N,SAAA,SAAAh3I,KAMAi3I,kBAAA,SAAAjxG,KAGAswG,GAAA,WAoBA,QAAAY,GAAAllI,EAAAmlI,GACA,OAAAjpI,GAAA,EAAAA,EAAAkpI,EAAAh8I,OAAA8S,IACA,GAAAkpI,EAAAlpI,GAAAmpI,YAAArlI,EAIA,MAHA,mBAAAmlI,KACAC,EAAAlpI,GAAAipI,GAEAC,EAAAlpI,EAGA,UAUA,QAAAopI,GAAA5jE,GACA,GAAA6jE,GAAA7jE,EAAAyiE,aAAA,gBAEA,eAAAoB,GAAA,IAAAA,EAAA92D,MAAA,KAYA,QAAA+2D,GAAA9jE,EAAAqjE,GACA,GAAAU,GAAAH,EAAA5jE,EACA,YAAA+jE,EAAA1lI,QAAAglI,GAYA,QAAAW,GAAAlB,EAAAC,GACA,sBAAAD,IACA,mBAAAC,GACA,OAAAvoI,GAAA,EAAAA,EAAAkpI,EAAAh8I,OAAA8S,IACAwpI,EAAAN,EAAAlpI,GAAAmpI,UACAD,EAAAlpI,GAAAypI,cAEA,CACA,GAAAZ,GAAAa,CACA,uBAAAnB,GAAA,CACA,GAAAoB,GAAAX,EAAAH,EACAc,KACApB,EAAAoB,EAAAF,UAKA,OADAf,GAAAvP,SAAAyQ,iBAAA,IAAArB,GACAruC,EAAA,EAAAA,EAAAwuC,EAAAx7I,OAAAgtG,IACA2vC,EAAAnB,EAAAxuC,GAAA2uC,IAYA,QAAAgB,GAAArkE,EAAA8iE,GAEA,qBAAA9iE,gBAAAskE,UACA,SAAA/7I,OAAA,oDAEA,IAAAw7I,GAAAH,EAAA5jE,GACAukE,IAGA,IAAAzB,EAUAgB,EAAA9jE,EAAA8iE,IACAyB,EAAAhoI,KAAAinI,EAAAV,QAXA,CACA,GAAAlC,GAAA5gE,EAAA4gE,SACA8C,GAAA13I,QAAA,SAAAmkE,GAEAywE,EAAAC,SAAA1wE,EAAA8zE,WACA,KAAAM,EAAAlmI,QAAA8xD,KACA2zE,EAAA9jE,EAAA7P,EAAAwzE,YACAY,EAAAhoI,KAAA4zD,KAQA,OAAAg0E,GAAA3pI,EAAA,EAAAk6F,EAAA6vC,EAAA78I,OAAAgtG,EAAAl6F,MAAA,CAEA,GADA2pI,EAAAI,EAAA/pI,IACA2pI,EAiBA,SAAA57I,OACA,6DAhBAw7I,GAAAxnI,KAAA4nI,EAAAR,WACA3jE,EAAAwkE,aAAA,gBAAAT,EAAAne,KAAA,KACA,IAAA6e,GAAA,GAAAN,GAAAO,iBAAA1kE,EACAykE,GAAAE,GAAAR,EACAS,EAAAroI,KAAAkoI,EAEA,QAAAI,GAAA,EAAA73I,EAAAm3I,EAAAW,UAAAp9I,OAAAsF,EAAA63I,MACAV,EAAAW,UAAAD,GAAA7kE,EAGAmkE,GAAAY,SAEA/kE,EAAAmkE,EAAAR,WAAAc,EAOA,IAAAO,EACA,gBAAAj/I,SAAA,kBAAAA,QAAAk/I,YACAD,EAAA,GAAAlR,OAAA,yBACAoR,WAAAC,iBAGAH,EAAArR,SAAAyR,YAAA,UACAJ,EAAAK,UAAA,gCAEArlE,EAAAslE,cAAAN,IAUA,QAAAO,GAAArC,GACA7+H,MAAAphB,QAAAigJ,KAEAA,EADA,kBAAAA,GAAAnoI,KACAsJ,MAAAze,UAAAgX,MAAAnS,KAAAoC,IAEAq2I,GAGA,QAAAljE,GAAAxlE,EAAA,EAAAk6F,EAAAwuC,EAAAx7I,OAAAgtG,EAAAl6F,MACAwlE,EAAAkjE,EAAA1oI,GACAwlE,YAAAwlE,eACAnB,EAAArkE,GACAA,EAAAylE,SAAA/9I,OAAA,GACA69I,EAAAvlE,EAAAylE,WAWA,QAAAC,GAAAp5I,GAKA,GAAAq5I,GAAA,mBAAAr5I,GAAAy4I,QACA,mBAAAz4I,GAAAy4I,OACAA,IAEAY,KACAZ,EAAAz4I,EAAAy4I,QAAAz4I,EAAAy4I,OAGA,IAAAa,IACAlB,iBAAAp4I,EAAA7G,aAAA6G,EAAA7G,YACAk+I,UAAAr3I,EAAAu5I,eAAAv5I,EAAAu5I,cACA5B,SAAA33I,EAAA23I,UAAA33I,EAAA23I,SACAc,SACAD,aAYA,IATApB,EAAA13I,QAAA,SAAA+O,GACA,GAAAA,EAAAkpI,WAAA2B,EAAA3B,SACA,SAAA17I,OAAA,sDAAAwS,EAAAkpI,SAEA,IAAAlpI,EAAA4oI,YAAAiC,EAAAjC,UACA,SAAAp7I,OAAA,wDAIA+D,EAAA7G,YAAAG,UACAD,eAAAg/I,GACA,SAAAp8I,OACA,uCAAAo8I,EACA,0BAGA,IAAAmB,GAAAtC,EAAAl3I,EAAAu5I,cAAAD,EAEAE,IACApC,EAAAnnI,KAAAqpI,GAcA,QAAAG,GAAA1C,EAAA9N,GACA,GAAAyQ,GAAAxC,EAAAH,EACA2C,IACAA,EAAAlB,UAAAvoI,KAAAg5H,GAQA,QAAA0Q,KACA,OAAAvxC,GAAA,EAAAA,EAAAgvC,EAAAh8I,OAAAgtG,IACAsvC,EAAAN,EAAAhvC,GAAAivC,WAWA,QAAAuC,GAAA/1E,GACA,GAAAA,EAAA,CACA,GAAAg2E,GAAAvB,EAAAvmI,QAAA8xD,EACAy0E,GAAAj9I,OAAAw+I,EAAA,EAEA,IAAAC,GAAAj2E,EAAAwwE,SAAA8B,aAAA,iBAAA11D,MAAA,KACAs5D,EAAAD,EAAA/nI,QAAA8xD,EAAAw0E,GAAAkB,cACAO,GAAAz+I,OAAA0+I,EAAA,GACAl2E,EAAAwwE,SAAA6D,aAAA,gBAAA4B,EAAAxgB,KAAA,KAEA,IAAAof,EACA,gBAAAj/I,SAAA,kBAAAA,QAAAk/I,YACAD,EAAA,GAAAlR,OAAA,2BACAoR,WAAAC,iBAGAH,EAAArR,SAAAyR,YAAA,UACAJ,EAAAK,UAAA,mCAUA,QAAAiB,GAAAh0G,GAKA,GAAAi0G,GAAA,SAAA7zG,GACAkyG,EAAA4B,OAAA,SAAAzrI,GACA,MAAAA,GAAA4lI,WAAAjuG,IACA1mC,QAAAk6I,GAEA,IAAA5zG,YAAAjuB,QAAAiuB,YAAAm0G,UACA,OAAA/xC,GAAA,EAAAA,EAAApiE,EAAA5qC,OAAAgtG,IACA6xC,EAAAj0G,EAAAoiE,QAEA,MAAApiE,YAAAo0G,OAGA,SAAAn+I,OAAA,oDAFAg+I,GAAAj0G,IAhTA,GAAAoxG,MAGAkB,KAEAD,EAAA,6BAmTA,QACA9B,WAAAmB,EACAhB,eAAAqB,EACApB,gBAAAsC,EACApC,qBAAA8C,EACA7C,yBAAA2C,EACAzC,SAAAoC,EACAnC,kBAAA+C,MAeA1D,EAAA+D,sBAcA/D,EAAAgE,gBAcAhE,EAAA5pF,UAIA4pF,EAAAC,WAAAD,EAAAC,WACAD,EAAAI,eAAAJ,EAAAI,eACAJ,EAAAK,gBAAAL,EAAAK,gBACAL,EAAAO,qBACAP,EAAAO,qBACAP,EAAAQ,yBACAR,EAAAQ,yBACAR,EAAAU,SAAAV,EAAAU,SACAV,EAAAW,kBAAAX,EAAAW,kBACAx9I,OAAA68I,mBACA78I,OAAA68I,mBAEA78I,OAAAu7I,iBAAA,kBAQA,aAAA3N,UAAAsN,cAAA,QACA,iBAAAtN,WACA,oBAAA5tI,SAAAse,MAAAze,UAAAoG,SACA2nI,SAAAkT,gBAAAjG,UAAAh1I,IAAA,UACAg3I,EAAAO,yBAKAP,EAAAI,eAAA,aAIAJ,EAAAU,SAAA,gBGheA/8I,KAAAugJ,MAKAvgJ,KAAAugJ,IAAA,WACA,UAAAvgJ,OAAAwgJ,WAEAxgJ,KAAAugJ,IAAAvgJ,KAAAugJ,IAMA,QAJAE,IACA,SACA,OAEAxsI,EAAA,EAAAA,EAAAwsI,EAAAt/I,SAAA3B,OAAAkhJ,wBAAAzsI,EAAA,CACA,GAAA0sI,GAAAF,EAAAxsI,EACAzU,QAAAkhJ,sBAAAlhJ,OAAAmhJ,EAAA,yBACAnhJ,OAAAohJ,qBAAAphJ,OAAAmhJ,EAAA,yBAAAnhJ,OAAAmhJ,EAAA,+BACAnhJ,OAAAkhJ,sBAAAlhJ,OAAAkhJ,sBACAlhJ,OAAAohJ,qBAAAphJ,OAAAohJ,qBAEA,0BAAA90I,KAAAtM,OAAAqhJ,UAAAC,aAAAthJ,OAAAkhJ,wBAAAlhJ,OAAAohJ,qBAAA,CACA,GAAAG,GAAA,CAKAvhJ,QAAAkhJ,sBAAA,SAAA1R,GACA,GAAAuR,GAAAvgJ,KAAAugJ,MACAS,EAAAjhJ,KAAAkhJ,IAAAF,EAAA,GAAAR,EACA,OAAAlsI,YAAA,WACA26H,EAAA+R,EAAAC,IACAA,EAAAT,IAEA/gJ,OAAAohJ,qBAAAM,aC5CA1hJ,OAAAkhJ,sBAAAlhJ,OAAAkhJ,sBACAlhJ,OAAAohJ,qBAAAphJ,OAAAohJ,qBAyBA,GAAAO,GAAA,SAAA1nE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAA2hJ,iBAOAA,EAAA9hJ,UAAAgiJ,aASAF,EAAA9hJ,UAAAk7I,aACA+G,cAAA,uBACAtF,iBAAA,+BACAC,OAAA,cAQAkF,EAAA9hJ,UAAAkiJ,aAAA,SAAA7N,GACAA,GACA30I,KAAAq7I,SAAAoH,QASAL,EAAA9hJ,UAAAoiJ,QAAA,WACA1iJ,KAAAq7I,SAAAsH,aAEAP,EAAA9hJ,UAAAoiJ,QAAAN,EAAA9hJ,UAAAoiJ,QAMAN,EAAA9hJ,UAAA2zI,OAAA,WACAj0I,KAAAq7I,SAAAsH,aAEAP,EAAA9hJ,UAAA2zI,OAAAmO,EAAA9hJ,UAAA2zI,OAIAmO,EAAA9hJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAAr7I,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA+G,eAAA,CACA,GAAA7G,GAAArN,SAAAsN,cAAA,OACAD,GAAAJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAyB,kBACAj9I,KAAA4iJ,eAAAvU,SAAAsN,cAAA,QACA37I,KAAA4iJ,eAAAtH,UAAAh1I,IAAAtG,KAAAw7I,YAAA0B,QACAxB,EAAAK,YAAA/7I,KAAA4iJ,gBACA5iJ,KAAA6iJ,uBAAA7iJ,KAAAwiJ,aAAAnxI,KAAArR,MACAA,KAAA4iJ,eAAA5G,iBAAA,UAAAh8I,KAAA6iJ,wBACA7iJ,KAAAq7I,SAAAU,YAAAL,GAEA17I,KAAA8iJ,uBAAA9iJ,KAAAwiJ,aAAAnxI,KAAArR,MACAA,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAA8iJ,wBACA9iJ,KAAAq7I,SAAAW,iBAAA,aAAAh8I,KAAA8iJ,0BAKAxF,EAAAU,UACA79I,YAAAiiJ,EACA7B,cAAA,iBC1GA5B,SAAA,gBACAc,WA0BA,IAAAsD,GAAA,SAAAroE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAsiJ,mBAOAA,EAAAziJ,UAAAgiJ,WAAAU,aAAA,MASAD,EAAAziJ,UAAAk7I,aACAyH,MAAA,sBACAC,YAAA,4BACAC,aAAA,6BACAC,aAAA,6BACAb,cAAA,uBACAc,qBAAA,sCACApG,iBAAA,iCACAqG,cAAA,qBACApG,OAAA,aACAqG,WAAA,aACAC,YAAA,cACAC,WAAA,aACAC,YAAA,eAQAX,EAAAziJ,UAAAqjJ,UAAA,SAAAhP,GACA30I,KAAA4jJ,kBAQAb,EAAAziJ,UAAAujJ,SAAA,SAAAlP,GACA30I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+H,aAQAR,EAAAziJ,UAAAwjJ,QAAA,SAAAnP,GACA30I,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+H,aAQAR,EAAAziJ,UAAAyjJ,WAAA,SAAApP,GACA30I,KAAAgkJ,SAOAjB,EAAAziJ,UAAAsjJ,eAAA,WACA5jJ,KAAAikJ,gBACAjkJ,KAAAkkJ,oBAOAnB,EAAAziJ,UAAA0jJ,MAAA,WAGAvjJ,OAAA6U,WAAA,WACAtV,KAAAmkJ,cAAA1B,QACApxI,KAAArR,WAAAsiJ,UAAAU,eAQAD,EAAAziJ,UAAA4jJ,iBAAA,WACAlkJ,KAAAmkJ,cAAAC,QACApkJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAiI,YAEAzjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAiI,aAGAV,EAAAziJ,UAAA4jJ,iBAAAnB,EAAAziJ,UAAA4jJ,iBAMAnB,EAAAziJ,UAAA2jJ,cAAA,WACAjkJ,KAAAmkJ,cAAAxB,SACA3iJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAgI,aAEAxjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAgI,cAGAT,EAAAziJ,UAAA2jJ,cAAAlB,EAAAziJ,UAAA2jJ,cAMAlB,EAAAziJ,UAAAoiJ,QAAA,WACA1iJ,KAAAmkJ,cAAAxB,YACA3iJ,KAAA4jJ,kBAEAb,EAAAziJ,UAAAoiJ,QAAAK,EAAAziJ,UAAAoiJ,QAMAK,EAAAziJ,UAAA2zI,OAAA,WACAj0I,KAAAmkJ,cAAAxB,YACA3iJ,KAAA4jJ,kBAEAb,EAAAziJ,UAAA2zI,OAAA8O,EAAAziJ,UAAA2zI,OAMA8O,EAAAziJ,UAAA+jJ,MAAA,WACArkJ,KAAAmkJ,cAAAC,WACApkJ,KAAA4jJ,kBAEAb,EAAAziJ,UAAA+jJ,MAAAtB,EAAAziJ,UAAA+jJ,MAMAtB,EAAAziJ,UAAAgkJ,QAAA,WACAtkJ,KAAAmkJ,cAAAC,WACApkJ,KAAA4jJ,kBAEAb,EAAAziJ,UAAAgkJ,QAAAvB,EAAAziJ,UAAAgkJ,QAIAvB,EAAAziJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACAr7I,KAAAmkJ,cAAAnkJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAyH,MACA,IAAAsB,GAAAlW,SAAAsN,cAAA,OACA4I,GAAAjJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA0H,YACA,IAAAsB,GAAAnW,SAAAsN,cAAA,OACA6I,GAAAlJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA2H,aACA,IAAAsB,GAAApW,SAAAsN,cAAA,OAKA,IAJA8I,EAAAnJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA4H,cACAmB,EAAAxI,YAAA0I,GACAzkJ,KAAAq7I,SAAAU,YAAAyI,GACAxkJ,KAAAq7I,SAAAU,YAAAwI,GACAvkJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA+G,eAAA,CACAviJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA6H,sBACArjJ,KAAA0kJ,wBAAArW,SAAAsN,cAAA,QACA37I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAyB,kBACAj9I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA+G,eACAviJ,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA8H,eACAtjJ,KAAA2kJ,mBAAA3kJ,KAAA+jJ,WAAA1yI,KAAArR,MACAA,KAAA0kJ,wBAAA1I,iBAAA,UAAAh8I,KAAA2kJ,mBACA,IAAA9I,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAAtG,KAAAw7I,YAAA0B,QACAl9I,KAAA0kJ,wBAAA3I,YAAAF,GACA77I,KAAAq7I,SAAAU,YAAA/7I,KAAA0kJ,yBAEA1kJ,KAAA4kJ,mBAAA5kJ,KAAA2jJ,UAAAtyI,KAAArR,MACAA,KAAA6kJ,kBAAA7kJ,KAAA6jJ,SAAAxyI,KAAArR,MACAA,KAAA8kJ,iBAAA9kJ,KAAA8jJ,QAAAzyI,KAAArR,MACAA,KAAA+kJ,oBAAA/kJ,KAAA+jJ,WAAA1yI,KAAArR,MACAA,KAAAmkJ,cAAAnI,iBAAA,SAAAh8I,KAAA4kJ,oBACA5kJ,KAAAmkJ,cAAAnI,iBAAA,QAAAh8I,KAAA6kJ,mBACA7kJ,KAAAmkJ,cAAAnI,iBAAA,OAAAh8I,KAAA8kJ,kBACA9kJ,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAA+kJ,qBACA/kJ,KAAA4jJ,iBACA5jJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,eAKApG,EAAAU,UACA79I,YAAA4iJ,EACAxC,cAAA,mBCvOA5B,SAAA,kBACAc,WA0BA,IAAAuF,GAAA,SAAAtqE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAukJ,qBAOAA,EAAA1kJ,UAAAgiJ,WAAAU,aAAA,MASAgC,EAAA1kJ,UAAAk7I,aACAyH,MAAA,yBACAjG,iBAAA,uBACAqG,qBAAA,sCACApG,iBAAA,oCACAqG,cAAA,qBACApG,OAAA,aACAqG,WAAA,aACAC,YAAA,cACAC,WAAA,cAQAuB,EAAA1kJ,UAAAqjJ,UAAA,SAAAhP,GACA30I,KAAA4jJ,kBAQAoB,EAAA1kJ,UAAAujJ,SAAA,SAAAlP,GACA30I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+H,aAQAyB,EAAA1kJ,UAAAwjJ,QAAA,SAAAnP,GACA30I,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+H,aAQAyB,EAAA1kJ,UAAAyjJ,WAAA,SAAApP,GACA30I,KAAAgkJ,SAOAgB,EAAA1kJ,UAAAsjJ,eAAA,WACA5jJ,KAAAikJ,gBACAjkJ,KAAAkkJ,oBAOAc,EAAA1kJ,UAAA0jJ,MAAA,WAGAvjJ,OAAA6U,WAAA,WACAtV,KAAAmkJ,cAAA1B,QACApxI,KAAArR,WAAAsiJ,UAAAU,eAQAgC,EAAA1kJ,UAAA4jJ,iBAAA,WACAlkJ,KAAAmkJ,cAAAC,QACApkJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAiI,YAEAzjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAiI,aAGAuB,EAAA1kJ,UAAA4jJ,iBAAAc,EAAA1kJ,UAAA4jJ,iBAMAc,EAAA1kJ,UAAA2jJ,cAAA,WACAjkJ,KAAAmkJ,cAAAxB,SACA3iJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAgI,aAEAxjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAgI,cAGAwB,EAAA1kJ,UAAA2jJ,cAAAe,EAAA1kJ,UAAA2jJ,cAMAe,EAAA1kJ,UAAAoiJ,QAAA,WACA1iJ,KAAAmkJ,cAAAxB,YACA3iJ,KAAA4jJ,kBAEAoB,EAAA1kJ,UAAAoiJ,QAAAsC,EAAA1kJ,UAAAoiJ,QAMAsC,EAAA1kJ,UAAA2zI,OAAA,WACAj0I,KAAAmkJ,cAAAxB,YACA3iJ,KAAA4jJ,kBAEAoB,EAAA1kJ,UAAA2zI,OAAA+Q,EAAA1kJ,UAAA2zI,OAMA+Q,EAAA1kJ,UAAA+jJ,MAAA,WACArkJ,KAAAmkJ,cAAAC,WACApkJ,KAAA4jJ,kBAEAoB,EAAA1kJ,UAAA+jJ,MAAAW,EAAA1kJ,UAAA+jJ,MAMAW,EAAA1kJ,UAAAgkJ,QAAA,WACAtkJ,KAAAmkJ,cAAAC,WACApkJ,KAAA4jJ,kBAEAoB,EAAA1kJ,UAAAgkJ,QAAAU,EAAA1kJ,UAAAgkJ,QAIAU,EAAA1kJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CAEA,GADAr7I,KAAAmkJ,cAAAnkJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAyH,OACAjjJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAwB,kBAAA,CACAh9I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA6H,sBACArjJ,KAAA0kJ,wBAAArW,SAAAsN,cAAA,QACA37I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAyB,kBACAj9I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAwB,kBACAh9I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA8H,eACAtjJ,KAAA2kJ,mBAAA3kJ,KAAA+jJ,WAAA1yI,KAAArR,MACAA,KAAA0kJ,wBAAA1I,iBAAA,UAAAh8I,KAAA2kJ,mBACA,IAAA9I,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAAtG,KAAAw7I,YAAA0B,QACAl9I,KAAA0kJ,wBAAA3I,YAAAF,GACA77I,KAAAq7I,SAAAU,YAAA/7I,KAAA0kJ,yBAEA1kJ,KAAA4kJ,mBAAA5kJ,KAAA2jJ,UAAAtyI,KAAArR,MACAA,KAAA6kJ,kBAAA7kJ,KAAA6jJ,SAAAxyI,KAAArR,MACAA,KAAA8kJ,iBAAA9kJ,KAAA8jJ,QAAAzyI,KAAArR,MACAA,KAAAilJ,sBAAAjlJ,KAAA+jJ,WAAA1yI,KAAArR,MACAA,KAAAmkJ,cAAAnI,iBAAA,SAAAh8I,KAAA4kJ,oBACA5kJ,KAAAmkJ,cAAAnI,iBAAA,QAAAh8I,KAAA6kJ,mBACA7kJ,KAAAmkJ,cAAAnI,iBAAA,OAAAh8I,KAAA8kJ,kBACA9kJ,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAAilJ,uBACAjlJ,KAAA4jJ,iBACA5jJ,KAAAq7I,SAAAC,UAAAh1I,IAAA,iBAKAg3I,EAAAU,UACA79I,YAAA6kJ,EACAzE,cAAA,qBC1NA5B,SAAA,qBACAc,WA0BA,IAAAyF,GAAA,SAAAxqE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAykJ,eAOAA,EAAA5kJ,UAAAgiJ,WAEA6C,4BAAA,GAEAC,6BAAA,GAGAC,cAAA,KAQAH,EAAA5kJ,UAAAglJ,WACAC,MAAA,GACAC,OAAA,GACAC,MAAA,GACAC,SAAA,GACAC,WAAA,IAUAT,EAAA5kJ,UAAAk7I,aACAoK,UAAA,sBACAC,QAAA,oBACAC,KAAA,iBACAC,sBAAA,kCACAxD,cAAA,uBACAc,qBAAA,sCACAnG,OAAA,aAEAwG,YAAA,cACAsC,WAAA,aACAC,aAAA,eAEAC,YAAA,wBAEAC,aAAA,yBACAC,SAAA,qBACAC,UAAA,sBACAC,UAAA,uBAKApB,EAAA5kJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CAEA,GAAAkL,GAAAlY,SAAAsN,cAAA,MACA4K,GAAAjL,UAAAh1I,IAAAtG,KAAAw7I,YAAAoK,WACA5lJ,KAAAq7I,SAAA7zE,cAAAg/E,aAAAD,EAAAvmJ,KAAAq7I,UACAr7I,KAAAq7I,SAAA7zE,cAAAi/E,YAAAzmJ,KAAAq7I,UACAkL,EAAAxK,YAAA/7I,KAAAq7I,UACAr7I,KAAA0mJ,WAAAH,CAEA,IAAAI,GAAAtY,SAAAsN,cAAA,MACAgL,GAAArL,UAAAh1I,IAAAtG,KAAAw7I,YAAAqK,SACA7lJ,KAAA4mJ,SAAAD,EACAJ,EAAAC,aAAAG,EAAA3mJ,KAAAq7I,SAEA,IAAAwL,GAAA7mJ,KAAAq7I,SAAA8B,aAAA,QAAAn9I,KAAAq7I,SAAA8B,aAAA,gBACA2J,EAAA,IACAD,KACAC,EAAAzY,SAAA0Y,eAAAF,GACAC,IACA9mJ,KAAAgnJ,YAAAF,EACAA,EAAA9K,iBAAA,QAAAh8I,KAAAinJ,gBAAA51I,KAAArR,OACA8mJ,EAAA9K,iBAAA,UAAAh8I,KAAAknJ,wBAAA71I,KAAArR,QAGA,IAAAmvE,GAAAnvE,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAsK,KACA9lJ,MAAAmnJ,kBAAAnnJ,KAAAonJ,yBAAA/1I,KAAArR,MACAA,KAAAqnJ,gBAAArnJ,KAAAsnJ,iBAAAj2I,KAAArR,KACA,QAAAkV,GAAA,EAAAA,EAAAi6D,EAAA/sE,OAAA8S,IAEAi6D,EAAAj6D,GAAA8mI,iBAAA,QAAAh8I,KAAAqnJ,iBAEAl4E,EAAAj6D,GAAAqyI,SAAA,KAEAp4E,EAAAj6D,GAAA8mI,iBAAA,UAAAh8I,KAAAmnJ,kBAGA,IAAAnnJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA+G,eAEA,IADAviJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA6H;AACAnuI,EAAA,EAAAA,EAAAi6D,EAAA/sE,OAAA8S,IAAA,CACA,GAAAO,GAAA05D,EAAAj6D,GACAwmI,EAAArN,SAAAsN,cAAA,OACAD,GAAAJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAuK,sBACA,IAAAlK,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAAtG,KAAAw7I,YAAA0B,QACAxB,EAAAK,YAAAF,GACApmI,EAAAsmI,YAAAL,GACAjmI,EAAA6lI,UAAAh1I,IAAAtG,KAAAw7I,YAAA+G,eAIAviJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA0K,cACAlmJ,KAAA4mJ,SAAAtL,UAAAh1I,IAAAtG,KAAAw7I,YAAA0K,aAEAlmJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA2K,eACAnmJ,KAAA4mJ,SAAAtL,UAAAh1I,IAAAtG,KAAAw7I,YAAA2K,cAEAnmJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA4K,WACApmJ,KAAA4mJ,SAAAtL,UAAAh1I,IAAAtG,KAAAw7I,YAAA4K,UAEApmJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA6K,YACArmJ,KAAA4mJ,SAAAtL,UAAAh1I,IAAAtG,KAAAw7I,YAAA6K,WAEArmJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA8K,YACAtmJ,KAAA4mJ,SAAAtL,UAAAh1I,IAAAtG,KAAAw7I,YAAA8K,WAEAC,EAAAjL,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,eAUAwB,EAAA5kJ,UAAA2mJ,gBAAA,SAAAO,GACA,GAAAxnJ,KAAAq7I,UAAAr7I,KAAAgnJ,YAAA,CACA,GAAAS,GAAAznJ,KAAAgnJ,YAAAU,wBACAC,EAAA3nJ,KAAAgnJ,YAAAx/E,cAAAkgF,uBACA1nJ,MAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA8K,aACAtmJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA2K,eAEAnmJ,KAAA0mJ,WAAAzgH,MAAA2hH,MAAAD,EAAAC,MAAAH,EAAAG,MAAA,KACA5nJ,KAAA0mJ,WAAAzgH,MAAA4hH,IAAA7nJ,KAAAgnJ,YAAAc,UAAA9nJ,KAAAgnJ,YAAAe,aAAA,MACA/nJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA4K,WAEApmJ,KAAA0mJ,WAAAzgH,MAAA+hH,KAAAhoJ,KAAAgnJ,YAAAiB,WAAA,KACAjoJ,KAAA0mJ,WAAAzgH,MAAAiiH,OAAAP,EAAAO,OAAAT,EAAAI,IAAA,MACA7nJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA6K,YAEArmJ,KAAA0mJ,WAAAzgH,MAAA2hH,MAAAD,EAAAC,MAAAH,EAAAG,MAAA,KACA5nJ,KAAA0mJ,WAAAzgH,MAAAiiH,OAAAP,EAAAO,OAAAT,EAAAI,IAAA,OAGA7nJ,KAAA0mJ,WAAAzgH,MAAA+hH,KAAAhoJ,KAAAgnJ,YAAAiB,WAAA,KACAjoJ,KAAA0mJ,WAAAzgH,MAAA4hH,IAAA7nJ,KAAAgnJ,YAAAc,UAAA9nJ,KAAAgnJ,YAAAe,aAAA,OAGA/nJ,KAAAmoJ,OAAAX,IAQAtC,EAAA5kJ,UAAA4mJ,wBAAA,SAAAM,GACA,GAAAxnJ,KAAAq7I,UAAAr7I,KAAA0mJ,YAAA1mJ,KAAAgnJ,YAAA,CACA,GAAA73E,GAAAnvE,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAsK,KAAA,mBACA32E,MAAA/sE,OAAA,GAAApC,KAAA0mJ,WAAApL,UAAAC,SAAAv7I,KAAAw7I,YAAAwK,cACAwB,EAAAY,UAAApoJ,KAAAslJ,UAAAI,UACA8B,EAAAvL,iBACA9sE,IAAA/sE,OAAA,GAAAimJ,SACAb,EAAAY,UAAApoJ,KAAAslJ,UAAAK,aACA6B,EAAAvL,iBACA9sE,EAAA,GAAAk5E,YAWAnD,EAAA5kJ,UAAA8mJ,yBAAA,SAAAI,GACA,GAAAxnJ,KAAAq7I,UAAAr7I,KAAA0mJ,WAAA,CACA,GAAAv3E,GAAAnvE,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAsK,KAAA,mBACA,IAAA32E,KAAA/sE,OAAA,GAAApC,KAAA0mJ,WAAApL,UAAAC,SAAAv7I,KAAAw7I,YAAAwK,YAAA,CACA,GAAAsC,GAAAvpI,MAAAze,UAAAgX,MAAAnS,KAAAgqE,GAAAp2D,QAAAyuI,EAAA9mI,OACA,IAAA8mI,EAAAY,UAAApoJ,KAAAslJ,UAAAI,SACA8B,EAAAvL,iBACAqM,EAAA,EACAn5E,EAAAm5E,EAAA,GAAAD,QAEAl5E,IAAA/sE,OAAA,GAAAimJ,YAEA,IAAAb,EAAAY,UAAApoJ,KAAAslJ,UAAAK,WACA6B,EAAAvL,iBACA9sE,EAAA/sE,OAAAkmJ,EAAA,EACAn5E,EAAAm5E,EAAA,GAAAD,QAEAl5E,EAAA,GAAAk5E,YAEA,IAAAb,EAAAY,UAAApoJ,KAAAslJ,UAAAG,OAAA+B,EAAAY,UAAApoJ,KAAAslJ,UAAAC,MAAA,CACAiC,EAAAvL,gBAEA,IAAA10I,GAAA,GAAAknI,YAAA,YACA+Y,GAAA9mI,OAAAs/H,cAAAz4I,GACAA,EAAA,GAAAknI,YAAA,WACA+Y,EAAA9mI,OAAAs/H,cAAAz4I,GAEAigJ,EAAA9mI,OAAA6nI,YACAf,GAAAY,UAAApoJ,KAAAslJ,UAAAE,SACAgC,EAAAvL,iBACAj8I,KAAAwoJ,WAWAtD,EAAA5kJ,UAAAgnJ,iBAAA,SAAAE,GACAA,EAAA9mI,OAAA+nI,aAAA,YACAjB,EAAAkB,mBAGA1oJ,KAAA2oJ,YACAloJ,OAAA6U,WAAA,SAAAkyI,GACAxnJ,KAAAwoJ,OACAxoJ,KAAA2oJ,aACAt3I,KAAArR,WAAAsiJ,UAAA+C,iBAYAH,EAAA5kJ,UAAAsoJ,WAAA,SAAAC,EAAAC,GACA9oJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA8K,WAEAtmJ,KAAAq7I,SAAAp1G,MAAA8iH,KAAA,GACA/oJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA2K,cAEAnmJ,KAAAq7I,SAAAp1G,MAAA8iH,KAAA,UAAAD,EAAA,QAAAA,EAAA,MACA9oJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA4K,UAEApmJ,KAAAq7I,SAAAp1G,MAAA8iH,KAAA,QAAAF,EAAA,QAAAA,EAAA,QACA7oJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA6K,WAEArmJ,KAAAq7I,SAAAp1G,MAAA8iH,KAAA,QAAAF,EAAA,MAAAC,EAAA,MAAAD,EAAA,MAAAC,EAAA,MAGA9oJ,KAAAq7I,SAAAp1G,MAAA8iH,KAAA,IASA7D,EAAA5kJ,UAAA0oJ,4BAAA,SAAAxB,GACAA,EAAA9mI,OAAA46H,UAAAzkI,OAAAquI,EAAA5kJ,UAAAk7I,YAAAyK,eAOAf,EAAA5kJ,UAAA2oJ,yBAAA,WACAjpJ,KAAAq7I,SAAAW,iBAAA,gBAAAh8I,KAAAgpJ,6BACAhpJ,KAAAq7I,SAAAW,iBAAA,sBAAAh8I,KAAAgpJ,8BAOA9D,EAAA5kJ,UAAA+8I,KAAA,SAAAmK,GACA,GAAAxnJ,KAAAq7I,UAAAr7I,KAAA0mJ,YAAA1mJ,KAAA4mJ,SAAA,CAEA,GAAAiC,GAAA7oJ,KAAAq7I,SAAAqM,wBAAAmB,OACAC,EAAA9oJ,KAAAq7I,SAAAqM,wBAAAoB,KAEA9oJ,MAAA0mJ,WAAAzgH,MAAA6iH,QAAA,KACA9oJ,KAAA0mJ,WAAAzgH,MAAA4iH,SAAA,KACA7oJ,KAAA4mJ,SAAA3gH,MAAA6iH,QAAA,KACA9oJ,KAAA4mJ,SAAA3gH,MAAA4iH,SAAA,IAKA,QAJAK,GAAAlpJ,KAAAsiJ,UAAA6C,4BAAAnlJ,KAAAsiJ,UAAA8C,6BAGAj2E,EAAAnvE,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAsK,MACA5wI,EAAA,EAAAA,EAAAi6D,EAAA/sE,OAAA8S,IAAA,CACA,GAAAi0I,GAAA,IAEAA,GADAnpJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA4K,WAAApmJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA6K,YACAwC,EAAA15E,EAAAj6D,GAAA4yI,UAAA34E,EAAAj6D,GAAA6yI,cAAAc,EAAAK,EAAA,IAEA/5E,EAAAj6D,GAAA4yI,UAAAe,EAAAK,EAAA,IAEA/5E,EAAAj6D,GAAA+wB,MAAAmjH,gBAAAD,EAGAnpJ,KAAA4oJ,WAAAC,EAAAC,GAGAroJ,OAAAkhJ,sBAAA,WACA3hJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAyK,cACAjmJ,KAAAq7I,SAAAp1G,MAAA8iH,KAAA,UAAAD,EAAA,MAAAD,EAAA,QACA7oJ,KAAA0mJ,WAAApL,UAAAh1I,IAAAtG,KAAAw7I,YAAAwK,aACA30I,KAAArR,OAEAA,KAAAipJ,0BAEA,IAAAhZ,GAAA,SAAA1oI,GAOAA,IAAAigJ,GAAAxnJ,KAAA2oJ,UAAAphJ,EAAAmZ,OAAAm6D,aAAA76E,KAAAq7I,WACAhN,SAAAgb,oBAAA,QAAApZ,GACAjwI,KAAAwoJ,SAEAn3I,KAAArR,KACAquI,UAAA2N,iBAAA,QAAA/L,KAGAiV,EAAA5kJ,UAAA+8I,KAAA6H,EAAA5kJ,UAAA+8I,KAMA6H,EAAA5kJ,UAAAkoJ,KAAA,WACA,GAAAxoJ,KAAAq7I,UAAAr7I,KAAA0mJ,YAAA1mJ,KAAA4mJ,SAAA,CAGA,OAFAz3E,GAAAnvE,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAsK,MAEA5wI,EAAA,EAAAA,EAAAi6D,EAAA/sE,OAAA8S,IACAi6D,EAAAj6D,GAAA+wB,MAAAqjH,eAAA,mBAGA,IAAA7B,GAAAznJ,KAAAq7I,SAAAqM,wBACAmB,EAAApB,EAAAoB,OACAC,EAAArB,EAAAqB,KAGA9oJ,MAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAyK,cACAjmJ,KAAA4oJ,WAAAC,EAAAC,GACA9oJ,KAAA0mJ,WAAApL,UAAAzkI,OAAA7W,KAAAw7I,YAAAwK,YAEAhmJ,KAAAipJ,6BAGA/D,EAAA5kJ,UAAAkoJ,KAAAtD,EAAA5kJ,UAAAkoJ,KAMAtD,EAAA5kJ,UAAA6nJ,OAAA,SAAAX,GACAxnJ,KAAA0mJ,WAAApL,UAAAC,SAAAv7I,KAAAw7I,YAAAwK,YACAhmJ,KAAAwoJ,OAEAxoJ,KAAAq9I,KAAAmK,IAGAtC,EAAA5kJ,UAAA6nJ,OAAAjD,EAAA5kJ,UAAA6nJ,OAGA7K,EAAAU,UACA79I,YAAA+kJ,EACA3E,cAAA,eChaA5B,SAAA,cACAc,WA0BA,IAAA8J,GAAA,SAAA7uE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAA8oJ,mBAOAA,EAAAjpJ,UAAAgiJ,aASAiH,EAAAjpJ,UAAAk7I,aAAAgO,oBAAA,+BAOAD,EAAAjpJ,UAAAmpJ,YAAA,SAAArpJ,GACAJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAgO,uBAGAxpJ,KAAA0pJ,aAAAzjH,MAAA6iH,MAAA1oJ,EAAA,MAEAmpJ,EAAAjpJ,UAAAmpJ,YAAAF,EAAAjpJ,UAAAmpJ,YAOAF,EAAAjpJ,UAAAqpJ,UAAA,SAAAvpJ,GACAJ,KAAA4pJ,WAAA3jH,MAAA6iH,MAAA1oJ,EAAA,IACAJ,KAAA6pJ,QAAA5jH,MAAA6iH,MAAA,IAAA1oJ,EAAA,KAEAmpJ,EAAAjpJ,UAAAqpJ,UAAAJ,EAAAjpJ,UAAAqpJ,UAIAJ,EAAAjpJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAAyO,GAAAzb,SAAAsN,cAAA,MACAmO,GAAAzL,UAAA,uBACAr+I,KAAAq7I,SAAAU,YAAA+N,GACA9pJ,KAAA0pJ,aAAAI,EACAA,EAAAzb,SAAAsN,cAAA,OACAmO,EAAAzL,UAAA,qBACAr+I,KAAAq7I,SAAAU,YAAA+N,GACA9pJ,KAAA4pJ,WAAAE,EACAA,EAAAzb,SAAAsN,cAAA,OACAmO,EAAAzL,UAAA,kBACAr+I,KAAAq7I,SAAAU,YAAA+N,GACA9pJ,KAAA6pJ,QAAAC,EACA9pJ,KAAA0pJ,aAAAzjH,MAAA6iH,MAAA,KACA9oJ,KAAA4pJ,WAAA3jH,MAAA6iH,MAAA,OACA9oJ,KAAA6pJ,QAAA5jH,MAAA6iH,MAAA,KACA9oJ,KAAAq7I,SAAAC,UAAAh1I,IAAA,iBAKAg3I,EAAAU,UACA79I,YAAAopJ,EACAhJ,cAAA,mBCpGA5B,SAAA,kBACAc,WA0BA,IAAAsK,GAAA,SAAArvE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAspJ,gBAOAA,EAAAzpJ,UAAAgiJ,WAAAU,aAAA,MASA+G,EAAAzpJ,UAAAk7I,aACA+H,WAAA,aACAC,YAAA,cACAC,WAAA,aACAC,YAAA,cACAsG,SAAA,eACAC,UAAA,oBACAC,mBAAA,0BACAC,mBAAA,0BACA5H,cAAA,uBACAc,qBAAA,sCACApG,iBAAA,8BACAqG,cAAA,qBACApG,OAAA,cAQA6M,EAAAzpJ,UAAAqjJ,UAAA,SAAAhP,GAIA,OADAyV,GAAA/b,SAAAgc,uBAAArqJ,KAAAw7I,YAAAwO,UACA90I,EAAA,EAAAA,EAAAk1I,EAAAhoJ,OAAA8S,IAAA,CACA,GAAAo1I,GAAAF,EAAAl1I,GAAAknI,cAAA,IAAAp8I,KAAAw7I,YAAAyO,UAEAK,GAAAnN,aAAA,UAAAn9I,KAAAuqJ,YAAApN,aAAA,SACAiN,EAAAl1I,GAAA60I,cAAAnG,mBAUAmG,EAAAzpJ,UAAAujJ,SAAA,SAAAlP,GACA30I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+H,aAQAwG,EAAAzpJ,UAAAwjJ,QAAA,SAAAnP,GACA30I,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+H,aAQAwG,EAAAzpJ,UAAAkqJ,WAAA,SAAA7V,GACA30I,KAAAgkJ,SAOA+F,EAAAzpJ,UAAAsjJ,eAAA,WACA5jJ,KAAAikJ,gBACAjkJ,KAAAkkJ,oBAOA6F,EAAAzpJ,UAAA0jJ,MAAA,WAGAvjJ,OAAA6U,WAAA,WACAtV,KAAAuqJ,YAAA9H,QACApxI,KAAArR,WAAAsiJ,UAAAU,eAQA+G,EAAAzpJ,UAAA2jJ,cAAA,WACAjkJ,KAAAuqJ,YAAA5H,SACA3iJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAgI,aAEAxjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAgI,cAGAuG,EAAAzpJ,UAAA2jJ,cAAA8F,EAAAzpJ,UAAA2jJ,cAMA8F,EAAAzpJ,UAAA4jJ,iBAAA,WACAlkJ,KAAAuqJ,YAAAnG,QACApkJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAiI,YAEAzjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAiI,aAGAsG,EAAAzpJ,UAAA4jJ,iBAAA6F,EAAAzpJ,UAAA4jJ,iBAMA6F,EAAAzpJ,UAAAoiJ,QAAA,WACA1iJ,KAAAuqJ,YAAA5H,YACA3iJ,KAAA4jJ,kBAEAmG,EAAAzpJ,UAAAoiJ,QAAAqH,EAAAzpJ,UAAAoiJ,QAMAqH,EAAAzpJ,UAAA2zI,OAAA,WACAj0I,KAAAuqJ,YAAA5H,YACA3iJ,KAAA4jJ,kBAEAmG,EAAAzpJ,UAAA2zI,OAAA8V,EAAAzpJ,UAAA2zI,OAMA8V,EAAAzpJ,UAAA+jJ,MAAA,WACArkJ,KAAAuqJ,YAAAnG,WACApkJ,KAAA4jJ,kBAEAmG,EAAAzpJ,UAAA+jJ,MAAA0F,EAAAzpJ,UAAA+jJ,MAMA0F,EAAAzpJ,UAAAgkJ,QAAA,WACAtkJ,KAAAuqJ,YAAAnG,WACApkJ,KAAA4jJ,kBAEAmG,EAAAzpJ,UAAAgkJ,QAAAyF,EAAAzpJ,UAAAgkJ,QAIAyF,EAAAzpJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACAr7I,KAAAuqJ,YAAAvqJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAyO,WACAjqJ,KAAAyqJ,oBAAAzqJ,KAAA2jJ,UAAAtyI,KAAArR,MACAA,KAAA0qJ,mBAAA1qJ,KAAA2jJ,UAAAtyI,KAAArR,MACAA,KAAA2qJ,kBAAA3qJ,KAAA8jJ,QAAAzyI,KAAArR,MACAA,KAAA4qJ,qBAAA5qJ,KAAAwqJ,WAAAn5I,KAAArR,KACA,IAAA6qJ,GAAAxc,SAAAsN,cAAA,OACAkP,GAAAvP,UAAAh1I,IAAAtG,KAAAw7I,YAAA0O,mBACA,IAAAY,GAAAzc,SAAAsN,cAAA,OACAmP,GAAAxP,UAAAh1I,IAAAtG,KAAAw7I,YAAA2O,oBACAnqJ,KAAAq7I,SAAAU,YAAA8O,GACA7qJ,KAAAq7I,SAAAU,YAAA+O,EACA,IAAApP,EACA,IAAA17I,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA+G,eAAA,CACAviJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA6H,sBACA3H,EAAArN,SAAAsN,cAAA,QACAD,EAAAJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAyB,kBACAvB,EAAAJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA+G,eACA7G,EAAAJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA8H,eACA5H,EAAAM,iBAAA,UAAAh8I,KAAA4qJ,qBACA,IAAA/O,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAAtG,KAAAw7I,YAAA0B,QACAxB,EAAAK,YAAAF,GACA77I,KAAAq7I,SAAAU,YAAAL,GAEA17I,KAAAuqJ,YAAAvO,iBAAA,SAAAh8I,KAAAyqJ,qBACAzqJ,KAAAuqJ,YAAAvO,iBAAA,QAAAh8I,KAAA0qJ,oBACA1qJ,KAAAuqJ,YAAAvO,iBAAA,OAAAh8I,KAAA2qJ,mBACA3qJ,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAA4qJ,sBACA5qJ,KAAA4jJ,iBACA5jJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,eAKApG,EAAAU,UACA79I,YAAA4pJ,EACAxJ,cAAA,gBC7OA5B,SAAA,eACAc,WA0BA,IAAAsL,GAAA,SAAArwE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAgrJ,MAAAvqJ,OAAAqhJ,UAAAmJ,iBAEAjrJ,KAAAqiJ,OAEA5hJ,QAAAsqJ,iBAOAA,EAAAzqJ,UAAAgiJ,aASAyI,EAAAzqJ,UAAAk7I,aACA0P,aAAA,2BACAC,iBAAA,wBACAC,gBAAA,8BACAC,iBAAA,+BACAC,iBAAA,+BACAC,gBAAA,kBACA7H,YAAA,eAQAqH,EAAAzqJ,UAAAkrJ,SAAA,SAAA7W,GACA30I,KAAAyrJ,sBAQAV,EAAAzqJ,UAAAqjJ,UAAA,SAAAhP,GACA30I,KAAAyrJ,sBAQAV,EAAAzqJ,UAAAyjJ,WAAA,SAAApP,GACAA,EAAAj0H,OAAA+hI,QAYAsI,EAAAzqJ,UAAAorJ,sBAAA,SAAA/W,GAGA,GAAAA,EAAAj0H,SAAA1gB,KAAAq7I,SAAA7zE,cAAA,CAKAmtE,EAAAsH,gBACA,IAAA0P,GAAA,GAAAld,YAAA,aACA/tH,OAAAi0H,EAAAj0H,OACAkrI,QAAAjX,EAAAiX,QACAC,QAAAlX,EAAAkX,QACAC,QAAA9rJ,KAAAq7I,SAAAqM,wBAAAqE,GAEA/rJ,MAAAq7I,SAAA2E,cAAA2L,KAOAZ,EAAAzqJ,UAAAmrJ,mBAAA,WAEA,GAAAO,IAAAhsJ,KAAAq7I,SAAA18I,MAAAqB,KAAAq7I,SAAA4Q,MAAAjsJ,KAAAq7I,SAAA6G,IAAAliJ,KAAAq7I,SAAA4Q,IACA,KAAAD,EACAhsJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+P,iBAEAvrJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+P,iBAEAvrJ,KAAAgrJ,QACAhrJ,KAAAksJ,iBAAAjmH,MAAAkmH,KAAAH,EACAhsJ,KAAAksJ,iBAAAjmH,MAAAmmH,WAAAJ,EACAhsJ,KAAAqsJ,iBAAApmH,MAAAkmH,KAAA,EAAAH,EACAhsJ,KAAAqsJ,iBAAApmH,MAAAmmH,WAAA,EAAAJ,IASAjB,EAAAzqJ,UAAAoiJ,QAAA,WACA1iJ,KAAAq7I,SAAAsH,aAEAoI,EAAAzqJ,UAAAoiJ,QAAAqI,EAAAzqJ,UAAAoiJ,QAMAqI,EAAAzqJ,UAAA2zI,OAAA,WACAj0I,KAAAq7I,SAAAsH,aAEAoI,EAAAzqJ,UAAA2zI,OAAA8W,EAAAzqJ,UAAA2zI,OAOA8W,EAAAzqJ,UAAAgsJ,OAAA,SAAA3tJ,GACA,mBAAAA,KACAqB,KAAAq7I,SAAA18I,SAEAqB,KAAAyrJ,sBAEAV,EAAAzqJ,UAAAgsJ,OAAAvB,EAAAzqJ,UAAAgsJ,OAIAvB,EAAAzqJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAAr7I,KAAAgrJ,MAAA,CAIA,GAAAuB,GAAAle,SAAAsN,cAAA,MACA4Q,GAAAjR,UAAAh1I,IAAAtG,KAAAw7I,YAAA0P,cACAlrJ,KAAAq7I,SAAA7zE,cAAAg/E,aAAA+F,EAAAvsJ,KAAAq7I,UACAr7I,KAAAq7I,SAAA7zE,cAAAi/E,YAAAzmJ,KAAAq7I,UACAkR,EAAAxQ,YAAA/7I,KAAAq7I,cACA,CAIA,GAAAkL,GAAAlY,SAAAsN,cAAA,MACA4K,GAAAjL,UAAAh1I,IAAAtG,KAAAw7I,YAAA2P,kBACAnrJ,KAAAq7I,SAAA7zE,cAAAg/E,aAAAD,EAAAvmJ,KAAAq7I,UACAr7I,KAAAq7I,SAAA7zE,cAAAi/E,YAAAzmJ,KAAAq7I,UACAkL,EAAAxK,YAAA/7I,KAAAq7I,SACA,IAAAmR,GAAAne,SAAAsN,cAAA,MACA6Q,GAAAlR,UAAAh1I,IAAAtG,KAAAw7I,YAAA4P,iBACA7E,EAAAxK,YAAAyQ,GACAxsJ,KAAAksJ,iBAAA7d,SAAAsN,cAAA,OACA37I,KAAAksJ,iBAAA5Q,UAAAh1I,IAAAtG,KAAAw7I,YAAA6P,kBACAmB,EAAAzQ,YAAA/7I,KAAAksJ,kBACAlsJ,KAAAqsJ,iBAAAhe,SAAAsN,cAAA,OACA37I,KAAAqsJ,iBAAA/Q,UAAAh1I,IAAAtG,KAAAw7I,YAAA8P,kBACAkB,EAAAzQ,YAAA/7I,KAAAqsJ,kBAEArsJ,KAAAysJ,kBAAAzsJ,KAAAwrJ,SAAAn6I,KAAArR,MACAA,KAAA0sJ,mBAAA1sJ,KAAA2jJ,UAAAtyI,KAAArR,MACAA,KAAA2sJ,oBAAA3sJ,KAAA+jJ,WAAA1yI,KAAArR,MACAA,KAAA4sJ,+BAAA5sJ,KAAA0rJ,sBAAAr6I,KAAArR,MACAA,KAAAq7I,SAAAW,iBAAA,QAAAh8I,KAAAysJ,mBACAzsJ,KAAAq7I,SAAAW,iBAAA,SAAAh8I,KAAA0sJ,oBACA1sJ,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAA2sJ,qBACA3sJ,KAAAq7I,SAAA7zE,cAAAw0E,iBAAA,YAAAh8I,KAAA4sJ,gCACA5sJ,KAAAyrJ,qBACAzrJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,eAKApG,EAAAU,UACA79I,YAAA4qJ,EACAxK,cAAA,iBCtNA5B,SAAA,gBACAc,WAyBA,IAAAoN,GAAA,SAAAnyE,GAIA,GAHA16E,KAAAq7I,SAAA3gE,EACA16E,KAAA8sJ,aAAA9sJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAA+sJ,YAAAC,SACAhtJ,KAAAitJ,eAAAjtJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAA+sJ,YAAAG,SACAltJ,KAAA8sJ,aACA,SAAA7pJ,OAAA,kDAEA,KAAAjD,KAAAitJ,eACA,SAAAhqJ,OAAA,kDAEAjD,MAAAgsF,UACAhsF,KAAAmtJ,eAAAlwI,OACAjd,KAAAotJ,SAAAnwI,OACAjd,KAAAqtJ,YAAApwI,OACAjd,KAAAstJ,wBACAttJ,KAAAutJ,qBAEA9sJ,QAAAosJ,mBAOAA,EAAAvsJ,UAAAgiJ,WAEAkL,iBAAA,KAUAX,EAAAvsJ,UAAAysJ,aACAU,SAAA,eACAT,QAAA,qBACAE,OAAA,uBACAQ,OAAA,wBAOAb,EAAAvsJ,UAAAqtJ,iBAAA,WACA3tJ,KAAAq7I,SAAA6D,aAAA,sBACAl/I,KAAAmtJ,iBACAntJ,KAAAitJ,eAAAW,YAAA5tJ,KAAAqtJ,YACArtJ,KAAAitJ,eAAAjR,iBAAA,QAAAh8I,KAAAmtJ,gBACAntJ,KAAAutJ,sBAEAvtJ,KAAA8sJ,aAAAc,YAAA5tJ,KAAAotJ,SACAptJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAA+sJ,YAAAW,QACA1tJ,KAAAq7I,SAAA6D,aAAA,uBACA5pI,WAAAtV,KAAA6tJ,SAAAx8I,KAAArR,WAAA8tJ,WAQAjB,EAAAvsJ,UAAAytJ,aAAA,SAAA5tI,GACA,GAAAlD,SAAAkD,EACA,SAAAld,OAAA,mEAEA,IAAAga,SAAAkD,EAAA5S,QACA,SAAAtK,OAAA,4CAEA,IAAAkd,EAAA6tI,gBAAA7tI,EAAA8tI,WACA,SAAAhrJ,OAAA,+CAEAjD,MAAAgsF,OACAhsF,KAAAstJ,qBAAAr2I,KAAAkJ,IAEAngB,KAAAgsF,UACAhsF,KAAAotJ,SAAAjtI,EAAA5S,QACA4S,EAAA+tI,QACAluJ,KAAA8tJ,SAAA3tI,EAAA+tI,QAEAluJ,KAAA8tJ,SAAA,KAEA3tI,EAAA6tI,gBACAhuJ,KAAAmtJ,eAAAhtI,EAAA6tI,eAEA7tI,EAAA8tI,aACAjuJ,KAAAqtJ,YAAAltI,EAAA8tI,YAEAjuJ,KAAA2tJ,qBAGAd,EAAAvsJ,UAAAytJ,aAAAlB,EAAAvsJ,UAAAytJ,aAOAlB,EAAAvsJ,UAAA6tJ,YAAA,WACAnuJ,KAAAstJ,qBAAAlrJ,OAAA,GACApC,KAAA+tJ,aAAA/tJ,KAAAstJ,qBAAAjhE,UAQAwgE,EAAAvsJ,UAAAutJ,SAAA,WACA7tJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAA+sJ,YAAAW,QACAp4I,WAAA,WACAtV,KAAAq7I,SAAA6D,aAAA,sBACAl/I,KAAA8sJ,aAAAc,YAAA,GACAQ,QAAApuJ,KAAAitJ,eAAA9P,aAAA,kBACAn9I,KAAAutJ,qBACAvtJ,KAAAitJ,eAAAW,YAAA,GACA5tJ,KAAAitJ,eAAA5D,oBAAA,QAAArpJ,KAAAmtJ,iBAEAntJ,KAAAmtJ,eAAAlwI,OACAjd,KAAAotJ,SAAAnwI,OACAjd,KAAAqtJ,YAAApwI,OACAjd,KAAAgsF,UACAhsF,KAAAmuJ,eACA98I,KAAArR,WAAAsiJ,UAAAkL,mBAQAX,EAAAvsJ,UAAAitJ,iBAAA,SAAA5uJ,GACAA,EACAqB,KAAAitJ,eAAA/N,aAAA,sBAEAl/I,KAAAitJ,eAAAoB,gBAAA,gBAKA/Q,EAAAU,UACA79I,YAAA0sJ,EACAtM,cAAA,mBC3KA5B,SAAA,kBACAc,WA0BA,IAAA6O,GAAA,SAAA5zE,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAA6tJ,kBAOAA,EAAAhuJ,UAAAgiJ,WAAAiM,wBAAA,GASAD,EAAAhuJ,UAAAk7I,aACAgT,kBAAA,qBACAC,2BAAA,8BACAC,mBAAA,sBACAC,sBAAA,yBACAC,iBAAA,oBACAC,kBAAA,sBAQAP,EAAAhuJ,UAAAwuJ,YAAA,SAAAz3I,GACA,GAAA03I,GAAA1gB,SAAAsN,cAAA,MACAoT,GAAAzT,UAAAh1I,IAAAtG,KAAAw7I,YAAAgT,mBACAO,EAAAzT,UAAAh1I,IAAAtG,KAAAw7I,YAAAgT,kBAAA,IAAAn3I,EACA,IAAA23I,GAAA3gB,SAAAsN,cAAA,MACAqT,GAAA1T,UAAAh1I,IAAAtG,KAAAw7I,YAAAiT,4BACAO,EAAA1T,UAAAh1I,IAAAtG,KAAAw7I,YAAAoT,iBACA,IAAAK,GAAA5gB,SAAAsN,cAAA,MACAsT,GAAA3T,UAAAh1I,IAAAtG,KAAAw7I,YAAAmT,sBACA,IAAAO,GAAA7gB,SAAAsN,cAAA,MACAuT,GAAA5T,UAAAh1I,IAAAtG,KAAAw7I,YAAAiT,4BACAS,EAAA5T,UAAAh1I,IAAAtG,KAAAw7I,YAAAqT,kBAMA,QALAM,IACAH,EACAC,EACAC,GAEAh6I,EAAA,EAAAA,EAAAi6I,EAAA/sJ,OAAA8S,IAAA,CACA,GAAAk6I,GAAA/gB,SAAAsN,cAAA,MACAyT,GAAA9T,UAAAh1I,IAAAtG,KAAAw7I,YAAAkT,oBACAS,EAAAj6I,GAAA6mI,YAAAqT,GAEAL,EAAAhT,YAAAiT,GACAD,EAAAhT,YAAAkT,GACAF,EAAAhT,YAAAmT,GACAlvJ,KAAAq7I,SAAAU,YAAAgT,IAEAT,EAAAhuJ,UAAAwuJ,YAAAR,EAAAhuJ,UAAAwuJ,YAOAR,EAAAhuJ,UAAA+uJ,KAAA,WACArvJ,KAAAq7I,SAAAC,UAAAzkI,OAAA,cAEAy3I,EAAAhuJ,UAAA+uJ,KAAAf,EAAAhuJ,UAAA+uJ,KAQAf,EAAAhuJ,UAAA0zC,MAAA,WACAh0C,KAAAq7I,SAAAC,UAAAh1I,IAAA,cAEAgoJ,EAAAhuJ,UAAA0zC,MAAAs6G,EAAAhuJ,UAAA0zC,MAIAs6G,EAAAhuJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,OAAAnmI,GAAA,EAAAA,GAAAlV,KAAAsiJ,UAAAiM,wBAAAr5I,IACAlV,KAAA8uJ,YAAA55I,EAEAlV,MAAAq7I,SAAAC,UAAAh1I,IAAA,iBAKAg3I,EAAAU,UACA79I,YAAAmuJ,EACA/N,cAAA,kBC9HA5B,SAAA,iBACAc,WA0BA,IAAA6P,GAAA,SAAA50E,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAA6uJ,iBAOAA,EAAAhvJ,UAAAgiJ,WAAAU,aAAA,MASAsM,EAAAhvJ,UAAAk7I,aACAyH,MAAA,oBACAsM,MAAA,oBACAC,MAAA,oBACArM,aAAA,2BACAZ,cAAA,uBACAc,qBAAA,sCACApG,iBAAA,+BACAqG,cAAA,qBACApG,OAAA,aACAqG,WAAA,aACAC,YAAA,cACAC,WAAA,cAQA6L,EAAAhvJ,UAAAqjJ,UAAA,SAAAhP,GACA30I,KAAA4jJ,kBAQA0L,EAAAhvJ,UAAAujJ,SAAA,SAAAlP,GACA30I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+H,aAQA+L,EAAAhvJ,UAAAwjJ,QAAA,SAAAnP,GACA30I,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+H,aAQA+L,EAAAhvJ,UAAAyjJ,WAAA,SAAApP,GACA30I,KAAAgkJ,SAOAsL,EAAAhvJ,UAAAsjJ,eAAA,WACA5jJ,KAAAikJ,gBACAjkJ,KAAAkkJ,oBAOAoL,EAAAhvJ,UAAA0jJ,MAAA,WAGAvjJ,OAAA6U,WAAA,WACAtV,KAAAmkJ,cAAA1B,QACApxI,KAAArR,WAAAsiJ,UAAAU,eAQAsM,EAAAhvJ,UAAA2jJ,cAAA,WACAjkJ,KAAAmkJ,cAAAxB,SACA3iJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAgI,aAEAxjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAgI,cAGA8L,EAAAhvJ,UAAA2jJ,cAAAqL,EAAAhvJ,UAAA2jJ,cAMAqL,EAAAhvJ,UAAA4jJ,iBAAA,WACAlkJ,KAAAmkJ,cAAAC,QACApkJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAiI,YAEAzjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAiI,aAGA6L,EAAAhvJ,UAAA4jJ,iBAAAoL,EAAAhvJ,UAAA4jJ,iBAMAoL,EAAAhvJ,UAAAoiJ,QAAA,WACA1iJ,KAAAmkJ,cAAAxB,YACA3iJ,KAAA4jJ,kBAEA0L,EAAAhvJ,UAAAoiJ,QAAA4M,EAAAhvJ,UAAAoiJ,QAMA4M,EAAAhvJ,UAAA2zI,OAAA,WACAj0I,KAAAmkJ,cAAAxB,YACA3iJ,KAAA4jJ,kBAEA0L,EAAAhvJ,UAAA2zI,OAAAqb,EAAAhvJ,UAAA2zI,OAMAqb,EAAAhvJ,UAAAg0I,GAAA,WACAt0I,KAAAmkJ,cAAAC,WACApkJ,KAAA4jJ,kBAEA0L,EAAAhvJ,UAAAg0I,GAAAgb,EAAAhvJ,UAAAg0I,GAMAgb,EAAAhvJ,UAAAi0I,IAAA,WACAv0I,KAAAmkJ,cAAAC,WACApkJ,KAAA4jJ,kBAEA0L,EAAAhvJ,UAAAi0I,IAAA+a,EAAAhvJ,UAAAi0I,IAIA+a,EAAAhvJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACAr7I,KAAAmkJ,cAAAnkJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAyH,MACA,IAAA3+G,GAAA+pG,SAAAsN,cAAA,MACAr3G,GAAAg3G,UAAAh1I,IAAAtG,KAAAw7I,YAAA+T,MACA,IAAAE,GAAAphB,SAAAsN,cAAA,MACA8T,GAAAnU,UAAAh1I,IAAAtG,KAAAw7I,YAAAgU,MACA,IAAAE,GAAArhB,SAAAsN,cAAA,OAMA,IALA+T,EAAApU,UAAAh1I,IAAAtG,KAAAw7I,YAAA2H,cACAsM,EAAA1T,YAAA2T,GACA1vJ,KAAAq7I,SAAAU,YAAAz3G,GACAtkC,KAAAq7I,SAAAU,YAAA0T,GACAzvJ,KAAA2sJ,oBAAA3sJ,KAAA+jJ,WAAA1yI,KAAArR,MACAA,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA+G,eAAA,CACAviJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA6H,sBACArjJ,KAAA0kJ,wBAAArW,SAAAsN,cAAA,QACA37I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAAyB,kBACAj9I,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA+G,eACAviJ,KAAA0kJ,wBAAApJ,UAAAh1I,IAAAtG,KAAAw7I,YAAA8H,eACAtjJ,KAAA0kJ,wBAAA1I,iBAAA,UAAAh8I,KAAA2sJ,oBACA,IAAA9Q,GAAAxN,SAAAsN,cAAA,OACAE,GAAAP,UAAAh1I,IAAAtG,KAAAw7I,YAAA0B,QACAl9I,KAAA0kJ,wBAAA3I,YAAAF,GACA77I,KAAAq7I,SAAAU,YAAA/7I,KAAA0kJ,yBAEA1kJ,KAAA0sJ,mBAAA1sJ,KAAA2jJ,UAAAtyI,KAAArR,MACAA,KAAA2vJ,kBAAA3vJ,KAAA6jJ,SAAAxyI,KAAArR,MACAA,KAAA4vJ,iBAAA5vJ,KAAA8jJ,QAAAzyI,KAAArR,MACAA,KAAAmkJ,cAAAnI,iBAAA,SAAAh8I,KAAA0sJ,oBACA1sJ,KAAAmkJ,cAAAnI,iBAAA,QAAAh8I,KAAA2vJ,mBACA3vJ,KAAAmkJ,cAAAnI,iBAAA,OAAAh8I,KAAA4vJ,kBACA5vJ,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAA2sJ,qBACA3sJ,KAAA4jJ,iBACA5jJ,KAAAq7I,SAAAC,UAAAh1I,IAAA,iBAKAg3I,EAAAU,UACA79I,YAAAmvJ,EACA/O,cAAA,iBZrOA5B,SAAA,gBACAc,WA0BA,IAAAoQ,GAAA,SAAAn1E,GAEA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAovJ,eAOAA,EAAAvvJ,UAAAgiJ,aASAuN,EAAAvvJ,UAAAk7I,aACAsU,UAAA,gBACAC,YAAA,kBACAxT,aAAA,YACAyT,eAAA,cACAvU,qBAAA,uBACAG,qBAAA,6BACAE,WAAA,aACAmU,mCAAA,uCAOAJ,EAAAvvJ,UAAA4vJ,UAAA,WACAlwJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAC,uBACAz7I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAyU,oCAGAjwJ,KAAAmwJ,MAAAnwJ,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAsU,WACA9vJ,KAAAowJ,QAAApwJ,KAAAq7I,SAAAyD,iBAAA,IAAA9+I,KAAAw7I,YAAAuU,YAEA,QAAA76I,GAAA,EAAAA,EAAAlV,KAAAmwJ,MAAA/tJ,OAAA8S,IACA,GAAAgmI,GAAAl7I,KAAAmwJ,MAAAj7I,GAAAlV,KAEAA,MAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAwU,iBAOAH,EAAAvvJ,UAAA+7I,eAAA,WACA,OAAAj5H,GAAA,EAAAA,EAAApjB,KAAAmwJ,MAAA/tJ,OAAAghB,IACApjB,KAAAmwJ,MAAA/sI,GAAAk4H,UAAAzkI,OAAA7W,KAAAw7I,YAAAe,eAQAsT,EAAAvvJ,UAAAg8I,iBAAA,WACA,OAAAiD,GAAA,EAAAA,EAAAv/I,KAAAowJ,QAAAhuJ,OAAAm9I,IACAv/I,KAAAowJ,QAAA7Q,GAAAjE,UAAAzkI,OAAA7W,KAAAw7I,YAAAe,eAMAsT,EAAAvvJ,UAAA+hJ,KAAA,WACAriJ,KAAAq7I,UACAr7I,KAAAkwJ,aAkCA5S,EAAAU,UACA79I,YAAA0vJ,EazIAtP,cAAA,eACA5B,SAAA,eA0BA,IAAA0R,GAAA,SAAA31E,GACA16E,KAAAq7I,SAAA3gE,EACA16E,KAAAswJ,QAAAtwJ,KAAAsiJ,UAAAiO,YAEAvwJ,KAAAqiJ,OAEA5hJ,QAAA4vJ,oBAOAA,EAAA/vJ,UAAAgiJ,WACAiO,YAAA,GACAC,mBAAA,WAUAH,EAAA/vJ,UAAAk7I,aACAiV,MAAA,uBACAxN,MAAA,uBACAyN,SAAA,WACAnN,WAAA,aACAC,YAAA,cACAmN,WAAA,aACAjN,YAAA,cACAkN,gBAAA,mBAQAP,EAAA/vJ,UAAAuwJ,WAAA,SAAAlc,GACA,GAAAmc,GAAAnc,EAAAj0H,OAAA/hB,MAAA8oF,MAAA,MAAArlF,MACA,MAAAuyI,EAAAyT,SACA0I,GAAA9wJ,KAAAswJ,SACA3b,EAAAsH,kBAUAoU,EAAA/vJ,UAAAujJ,SAAA,SAAAlP,GACA30I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+H,aAQA8M,EAAA/vJ,UAAAwjJ,QAAA,SAAAnP,GACA30I,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+H,aAQA8M,EAAA/vJ,UAAAywJ,SAAA,SAAApc,GACA30I,KAAA4jJ,kBAOAyM,EAAA/vJ,UAAAsjJ,eAAA,WACA5jJ,KAAAikJ,gBACAjkJ,KAAAgxJ,gBACAhxJ,KAAAixJ,aACAjxJ,KAAAkxJ,cAQAb,EAAA/vJ,UAAA2jJ,cAAA,WACAjkJ,KAAAmxJ,OAAAxO,SACA3iJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAgI,aAEAxjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAgI,cAGA6M,EAAA/vJ,UAAA2jJ,cAAAoM,EAAA/vJ,UAAA2jJ,cAMAoM,EAAA/vJ,UAAA4wJ,WAAA,WACA9C,QAAApuJ,KAAAq7I,SAAAe,cAAA,WACAp8I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+H,YAEAvjJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAA+H,aAGA8M,EAAA/vJ,UAAA4wJ,WAAAb,EAAA/vJ,UAAA4wJ,WAMAb,EAAA/vJ,UAAA0wJ,cAAA,WACAhxJ,KAAAmxJ,OAAAC,WACApxJ,KAAAmxJ,OAAAC,SAAAC,MACArxJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAmV,YAEA3wJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAmV,cAIAN,EAAA/vJ,UAAA0wJ,cAAAX,EAAA/vJ,UAAA0wJ,cAMAX,EAAA/vJ,UAAA2wJ,WAAA,WACAjxJ,KAAAmxJ,OAAAxyJ,OAAAqB,KAAAmxJ,OAAAxyJ,MAAAyD,OAAA,EACApC,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkV,UAEA1wJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAkV,WAGAL,EAAA/vJ,UAAA2wJ,WAAAZ,EAAA/vJ,UAAA2wJ,WAMAZ,EAAA/vJ,UAAAoiJ,QAAA,WACA1iJ,KAAAmxJ,OAAAxO,YACA3iJ,KAAA4jJ,kBAEAyM,EAAA/vJ,UAAAoiJ,QAAA2N,EAAA/vJ,UAAAoiJ,QAMA2N,EAAA/vJ,UAAA2zI,OAAA,WACAj0I,KAAAmxJ,OAAAxO,YACA3iJ,KAAA4jJ,kBAEAyM,EAAA/vJ,UAAA2zI,OAAAoc,EAAA/vJ,UAAA2zI,OAOAoc,EAAA/vJ,UAAAgsJ,OAAA,SAAA3tJ,GACAqB,KAAAmxJ,OAAAxyJ,SAAA,GACAqB,KAAA4jJ,kBAEAyM,EAAA/vJ,UAAAgsJ,OAAA+D,EAAA/vJ,UAAAgsJ,OAIA+D,EAAA/vJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,WACAr7I,KAAAsxJ,OAAAtxJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAiV,OACAzwJ,KAAAmxJ,OAAAnxJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAyH,OACAjjJ,KAAAmxJ,QAAA,CACAnxJ,KAAAmxJ,OAAA1I,aAAAzoJ,KAAAsiJ,UAAAkO,sBACAxwJ,KAAAswJ,QAAAiB,SAAAvxJ,KAAAmxJ,OAAAhU,aAAAn9I,KAAAsiJ,UAAAkO,oBAAA,IACAgB,MAAAxxJ,KAAAswJ,WACAtwJ,KAAAswJ,QAAAtwJ,KAAAsiJ,UAAAiO,cAGAvwJ,KAAAmxJ,OAAA1I,aAAA,gBACAzoJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAoV,iBAEA5wJ,KAAAyxJ,0BAAAzxJ,KAAA4jJ,eAAAvyI,KAAArR,MACAA,KAAA2vJ,kBAAA3vJ,KAAA6jJ,SAAAxyI,KAAArR,MACAA,KAAA4vJ,iBAAA5vJ,KAAA8jJ,QAAAzyI,KAAArR,MACAA,KAAA0xJ,kBAAA1xJ,KAAA+wJ,SAAA1/I,KAAArR,MACAA,KAAAmxJ,OAAAnV,iBAAA,QAAAh8I,KAAAyxJ,2BACAzxJ,KAAAmxJ,OAAAnV,iBAAA,QAAAh8I,KAAA2vJ,mBACA3vJ,KAAAmxJ,OAAAnV,iBAAA,OAAAh8I,KAAA4vJ,kBACA5vJ,KAAAmxJ,OAAAnV,iBAAA,QAAAh8I,KAAA0xJ,mBACA1xJ,KAAAswJ,UAAAtwJ,KAAAsiJ,UAAAiO,cAGAvwJ,KAAA2xJ,oBAAA3xJ,KAAA6wJ,WAAAx/I,KAAArR,MACAA,KAAAmxJ,OAAAnV,iBAAA,UAAAh8I,KAAA2xJ,qBAEA,IAAAC,GAAA5xJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAmV,WACA3wJ,MAAA4jJ,iBACA5jJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,aACAkO,GACA5xJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAmV,YAEA3wJ,KAAAmxJ,OAAA1I,aAAA,eACAzoJ,KAAAq7I,SAAAgN,QACAroJ,KAAAkxJ,gBAOA5T,EAAAU,UACA79I,YAAAkwJ,EACA9P,cAAA,oBCxPA5B,SAAA,mBACAc,WA0BA,IAAAoS,GAAA,SAAAn3E,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAoxJ,kBAOAA,EAAAvxJ,UAAAgiJ,aASAuP,EAAAvxJ,UAAAk7I,aACAsB,UAAA,YACAgV,OAAA,sBACAC,KAAA,oBACAC,MAAA,qBACAC,IAAA,oBAQAJ,EAAAvxJ,UAAA4xJ,kBAAA,SAAAvd,GACA,GAAAwd,GAAAxd,EAAAj0H,OAAAgnI,wBACAM,EAAAmK,EAAAnK,KAAAmK,EAAArJ,MAAA,EACAjB,EAAAsK,EAAAtK,IAAAsK,EAAAtJ,OAAA,EACAuJ,EAAA,IAAApyJ,KAAAq7I,SAAAgX,YAAA,GACAC,EAAA,IAAAtyJ,KAAAq7I,SAAA0M,aAAA,EACA/nJ,MAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAuW,OAAA/xJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAwW,QACAhK,EAAAmK,EAAArJ,MAAA,EACA,EAAAjB,EAAAyK,GACAtyJ,KAAAq7I,SAAAp1G,MAAA4hH,IAAA,EACA7nJ,KAAAq7I,SAAAp1G,MAAAqsH,UAAA,IAEAtyJ,KAAAq7I,SAAAp1G,MAAA4hH,MAAA,KACA7nJ,KAAAq7I,SAAAp1G,MAAAqsH,YAAA,OAGA,EAAAtK,EAAAoK,GACApyJ,KAAAq7I,SAAAp1G,MAAA+hH,KAAA,EACAhoJ,KAAAq7I,SAAAp1G,MAAAmsH,WAAA,IAEApyJ,KAAAq7I,SAAAp1G,MAAA+hH,OAAA,KACAhoJ,KAAAq7I,SAAAp1G,MAAAmsH,aAAA,MAGApyJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAyW,KACAjyJ,KAAAq7I,SAAAp1G,MAAA4hH,IAAAsK,EAAAtK,IAAA7nJ,KAAAq7I,SAAA0M,aAAA,QACA/nJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAwW,OACAhyJ,KAAAq7I,SAAAp1G,MAAA+hH,KAAAmK,EAAAnK,KAAAmK,EAAArJ,MAAA,QACA9oJ,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAuW,MACA/xJ,KAAAq7I,SAAAp1G,MAAA+hH,KAAAmK,EAAAnK,KAAAhoJ,KAAAq7I,SAAAgX,YAAA,QAEAryJ,KAAAq7I,SAAAp1G,MAAA4hH,IAAAsK,EAAAtK,IAAAsK,EAAAtJ,OAAA,QAEA7oJ,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAsB,YAOA+U,EAAAvxJ,UAAAiyJ,kBAAA,WACAvyJ,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAsB,YAKA+U,EAAAvxJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAAwL,GAAA7mJ,KAAAq7I,SAAA8B,aAAA,MACA0J,KACA7mJ,KAAAgnJ,YAAA3Y,SAAA0Y,eAAAF,IAEA7mJ,KAAAgnJ,cAEAhnJ,KAAAgnJ,YAAAyB,aAAA,aACAzoJ,KAAAgnJ,YAAA9H,aAAA,gBAEAl/I,KAAAwyJ,uBAAAxyJ,KAAAkyJ,kBAAA7gJ,KAAArR,MACAA,KAAAyyJ,uBAAAzyJ,KAAAuyJ,kBAAAlhJ,KAAArR,MACAA,KAAAgnJ,YAAAhL,iBAAA,aAAAh8I,KAAAwyJ,2BACAxyJ,KAAAgnJ,YAAAhL,iBAAA,WAAAh8I,KAAAwyJ,2BACAxyJ,KAAAgnJ,YAAAhL,iBAAA,aAAAh8I,KAAAyyJ,2BACAhyJ,OAAAu7I,iBAAA,aAAAh8I,KAAAyyJ,2BAMAnV,EAAAU,UACA79I,YAAA0xJ,EblIAtR,cAAA,kBACA5B,SAAA,eA0BA,IAAA+T,GAAA,SAAAh4E,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAiyJ,iBAOAA,EAAApyJ,UAAAgiJ,WACAqQ,UAAA,sBACAC,kBAAA,IACAC,eAAA,IACAC,UAAA,WACAC,aAAA,eACAC,cAAA,iBAQAN,EAAApyJ,UAAAglJ,WACAC,MAAA,GACAC,OAAA,GACAC,MAAA,IAQAiN,EAAApyJ,UAAA2yJ,OACAC,SAAA,EACAC,OAAA,EACAC,UAAA,EACAC,OAAA,GAUAX,EAAApyJ,UAAAk7I,aACAoK,UAAA,wBACA0N,OAAA,qBACAC,OAAA,qBACAC,QAAA,sBACAC,WAAA,4BACAC,KAAA,iBACA1W,iBAAA,uBACAC,iBAAA,mCACAC,OAAA,aACAmG,qBAAA,sCACAsQ,cAAA,6BACAC,iBAAA,gCACAC,cAAA,6BACAC,aAAA,2BACAC,WAAA,yBACAC,QAAA,sBACAC,cAAA,gCACAC,IAAA,kBACAC,eAAA,6BACAC,oBAAA,kCACAC,qBAAA,mCACAC,MAAA,wBACAC,WAAA,aACAC,SAAA,WACAC,qBAAA,uBACAC,eAAA,oBACAC,WAAA,aACAC,gBAAA,kBACAC,eAAA,aACA/X,UAAA,YACA4G,YAAA,cACAuC,aAAA,eACA6O,gBAAA,gCACAC,gBAAA,iCAOArC,EAAApyJ,UAAA00J,sBAAA,WACA,IAAAh1J,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAyK,cAAA,CAGA,GAAAiP,IAAAl1J,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAoZ,kBAAA50J,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAsY,aACA9zJ,MAAA68I,SAAAsY,UAAA,IAAAn1J,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAmZ,aACA30J,KAAAi1J,QAAA3Z,UAAAh1I,IAAAtG,KAAAw7I,YAAAkZ,gBACA10J,KAAAi1J,QAAA3Z,UAAAh1I,IAAAtG,KAAAw7I,YAAAmZ,YACAO,GACAl1J,KAAAi1J,QAAA3Z,UAAAh1I,IAAAtG,KAAAw7I,YAAAyK,eAEAjmJ,KAAA68I,SAAAsY,WAAA,GAAAn1J,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAmZ,cACA30J,KAAAi1J,QAAA3Z,UAAAzkI,OAAA7W,KAAAw7I,YAAAkZ,gBACA10J,KAAAi1J,QAAA3Z,UAAAzkI,OAAA7W,KAAAw7I,YAAAmZ;AACAO,GACAl1J,KAAAi1J,QAAA3Z,UAAAh1I,IAAAtG,KAAAw7I,YAAAyK,iBAUAyM,EAAApyJ,UAAA80J,sBAAA,SAAA5N,GAEAA,EAAAY,UAAApoJ,KAAAslJ,UAAAE,QAAAxlJ,KAAAq1J,QAAA/Z,UAAAC,SAAAv7I,KAAAw7I,YAAAqZ,iBACA70J,KAAAs1J,gBAQA5C,EAAApyJ,UAAAi1J,mBAAA,WACAv1J,KAAAw1J,sBAAAvzJ,QACAjC,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAoZ,kBAEA50J,KAAAq7I,SAAAC,UAAAzkI,OAAA7W,KAAAw7I,YAAAoZ,iBAEA50J,KAAAq1J,UACAr1J,KAAAq1J,QAAA/Z,UAAAzkI,OAAA7W,KAAAw7I,YAAAqZ,gBACA70J,KAAAy1J,YAAAna,UAAAzkI,OAAA7W,KAAAw7I,YAAAqZ,mBAUAnC,EAAApyJ,UAAAo1J,qBAAA,SAAAlO,GACA,GAAAA,GAAA,YAAAA,EAAA5qJ,KAAA,CACA,GAAA4qJ,EAAAY,UAAApoJ,KAAAslJ,UAAAG,OAAA+B,EAAAY,UAAApoJ,KAAAslJ,UAAAC,MAKA,MAHAiC,GAAAvL,iBAMAj8I,KAAAs1J,gBAOA5C,EAAApyJ,UAAAq1J,4BAAA,WACA31J,KAAAi1J,QAAA3Z,UAAAzkI,OAAA7W,KAAAw7I,YAAAyK,eAOAyM,EAAApyJ,UAAAs1J,oBAAA,WACA51J,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAmZ,cACA30J,KAAAi1J,QAAA3Z,UAAAzkI,OAAA7W,KAAAw7I,YAAAmZ,YACA30J,KAAAi1J,QAAA3Z,UAAAh1I,IAAAtG,KAAAw7I,YAAAyK,gBAQAyM,EAAApyJ,UAAA+7I,eAAA,SAAAwZ,GACA,OAAAzyI,GAAA,EAAAA,EAAAyyI,EAAAzzJ,OAAAghB,IACAyyI,EAAAzyI,GAAAk4H,UAAAzkI,OAAA7W,KAAAw7I,YAAAsB,YAQA4V,EAAApyJ,UAAAg8I,iBAAA,SAAAI,GACA,OAAA6C,GAAA,EAAAA,EAAA7C,EAAAt6I,OAAAm9I,IACA7C,EAAA6C,GAAAjE,UAAAzkI,OAAA7W,KAAAw7I,YAAAsB,YAQA4V,EAAApyJ,UAAAg1J,aAAA,WACA,GAAAQ,GAAA91J,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAiY,WACAzzJ,MAAAq1J,QAAA/Z,UAAA6M,OAAAnoJ,KAAAw7I,YAAAqZ,gBACA70J,KAAAy1J,YAAAna,UAAA6M,OAAAnoJ,KAAAw7I,YAAAqZ,gBAEA70J,KAAAq1J,QAAA/Z,UAAAC,SAAAv7I,KAAAw7I,YAAAqZ,iBACA70J,KAAAq1J,QAAAnW,aAAA,uBACA4W,EAAA5W,aAAA,0BAEAl/I,KAAAq1J,QAAAnW,aAAA,sBACA4W,EAAA5W,aAAA,2BAGAwT,EAAApyJ,UAAAg1J,aAAA5C,EAAApyJ,UAAAg1J,aAIA5C,EAAApyJ,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAAkL,GAAAlY,SAAAsN,cAAA,MACA4K,GAAAjL,UAAAh1I,IAAAtG,KAAAw7I,YAAAoK,UACA,IAAAmQ,GAAA/1J,KAAAq7I,SAAAe,cAAA,SACAp8I,MAAAq7I,SAAA7zE,cAAAg/E,aAAAD,EAAAvmJ,KAAAq7I,UACAr7I,KAAAq7I,SAAA7zE,cAAAi/E,YAAAzmJ,KAAAq7I,UACAkL,EAAAxK,YAAA/7I,KAAAq7I,UACA0a,GACAA,EAAA1N,OAIA,QAFA2N,GAAAh2J,KAAAq7I,SAAA4a,WACAC,EAAAF,EAAA5zJ,OACAygB,EAAA,EAAAqzI,EAAArzI,MAAA,CACA,GAAAszI,GAAAH,EAAAnzI,EACAszI,GAAA7a,WAAA6a,EAAA7a,UAAAC,SAAAv7I,KAAAw7I,YAAA8X,UACAtzJ,KAAAi1J,QAAAkB,GAEAA,EAAA7a,WAAA6a,EAAA7a,UAAAC,SAAAv7I,KAAAw7I,YAAA+X,UACAvzJ,KAAAq1J,QAAAc,GAEAA,EAAA7a,WAAA6a,EAAA7a,UAAAC,SAAAv7I,KAAAw7I,YAAAgY,WACAxzJ,KAAA68I,SAAAsZ,GAGA11J,OAAAu7I,iBAAA,oBAAAz0I,GACAA,EAAA6uJ,YAGAp2J,KAAAq7I,SAAAp1G,MAAAowH,UAAA,SACA1U,sBAAA,WACA3hJ,KAAAq7I,SAAAp1G,MAAAowH,UAAA,IACAhlJ,KAAArR,SAEAqR,KAAArR,UACAA,KAAAi1J,UACAj1J,KAAA+8I,QAAA/8I,KAAAi1J,QAAA7Y,cAAA,IAAAp8I,KAAAw7I,YAAAwY,SAEA,IAAAsC,GAAAt2J,KAAAizJ,MAAAC,QA+BA,IA9BAlzJ,KAAAi1J,UACAj1J,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAmY,eACA2C,EAAAt2J,KAAAizJ,MAAAE,OACAnzJ,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAoY,mBACA0C,EAAAt2J,KAAAizJ,MAAAG,UACApzJ,KAAAi1J,QAAAjZ,iBAAA,gBAAAh8I,KAAA21J,4BAAAtkJ,KAAArR,OACAA,KAAAi1J,QAAAjZ,iBAAA,QAAAh8I,KAAA41J,oBAAAvkJ,KAAArR,QACAA,KAAAi1J,QAAA3Z,UAAAC,SAAAv7I,KAAAw7I,YAAAqY,iBACAyC,EAAAt2J,KAAAizJ,MAAAI,OACA9M,EAAAjL,UAAAh1I,IAAAtG,KAAAw7I,YAAAiZ,uBAEA6B,IAAAt2J,KAAAizJ,MAAAC,UACAlzJ,KAAAi1J,QAAA3Z,UAAAh1I,IAAAtG,KAAAw7I,YAAAkZ,gBACA10J,KAAA+8I,SACA/8I,KAAA+8I,QAAAzB,UAAAh1I,IAAAtG,KAAAw7I,YAAAkZ,iBAEA4B,IAAAt2J,KAAAizJ,MAAAE,QAAAmD,IAAAt2J,KAAAizJ,MAAAI,QACArzJ,KAAAi1J,QAAA3Z,UAAAzkI,OAAA7W,KAAAw7I,YAAAkZ,gBACA10J,KAAA+8I,SACA/8I,KAAA+8I,QAAAzB,UAAAzkI,OAAA7W,KAAAw7I,YAAAkZ,iBAEA4B,IAAAt2J,KAAAizJ,MAAAG,YAIApzJ,KAAA68I,SAAAb,iBAAA,SAAAh8I,KAAAg1J,sBAAA3jJ,KAAArR,OACAA,KAAAg1J,0BAIAh1J,KAAAq1J,QAAA,CACA,GAAAS,GAAA91J,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAAiY,WACA,KAAAqC,EAAA,CACAA,EAAAznB,SAAAsN,cAAA,OACAma,EAAA5W,aAAA,yBACA4W,EAAA5W,aAAA,iBACA4W,EAAA5W,aAAA,gBACA4W,EAAAxa,UAAAh1I,IAAAtG,KAAAw7I,YAAAiY,WACA,IAAA8C,GAAAloB,SAAAsN,cAAA,IACA4a,GAAAjb,UAAAh1I,IAAAtG,KAAAw7I,YAAAkY,MACA6C,EAAAC,UAAAx2J,KAAAsiJ,UAAAwQ,UACAgD,EAAA/Z,YAAAwa,GAEAv2J,KAAAq1J,QAAA/Z,UAAAC,SAAAv7I,KAAAw7I,YAAAsZ,iBAEAgB,EAAAxa,UAAAh1I,IAAAtG,KAAAw7I,YAAAsZ,iBACA90J,KAAAq1J,QAAA/Z,UAAAC,SAAAv7I,KAAAw7I,YAAAuZ,kBAEAe,EAAAxa,UAAAh1I,IAAAtG,KAAAw7I,YAAAuZ,iBAEAe,EAAA9Z,iBAAA,QAAAh8I,KAAA01J,qBAAArkJ,KAAArR,OACA81J,EAAA9Z,iBAAA,UAAAh8I,KAAA01J,qBAAArkJ,KAAArR,OAIAA,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAA+Y,YAGAv0J,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAsY,cACA9zJ,KAAAi1J,QAAAzO,aAAAsP,EAAA91J,KAAAi1J,QAAAwB,YAEAz2J,KAAAq7I,SAAAmL,aAAAsP,EAAA91J,KAAA68I,SAEA,IAAA6Z,GAAAroB,SAAAsN,cAAA,MACA+a,GAAApb,UAAAh1I,IAAAtG,KAAAw7I,YAAAuY,YACA/zJ,KAAAq7I,SAAAU,YAAA2a,GACAA,EAAA1a,iBAAA,QAAAh8I,KAAA01J,qBAAArkJ,KAAArR,OACAA,KAAAy1J,YAAAiB,EACA12J,KAAAq1J,QAAArZ,iBAAA,UAAAh8I,KAAAo1J,sBAAA/jJ,KAAArR,OACAA,KAAAq1J,QAAAnW,aAAA,sBAQA,GAJAl/I,KAAAw1J,sBAAA/0J,OAAAk2J,WAAA32J,KAAAsiJ,UAAAqQ,WACA3yJ,KAAAw1J,sBAAAoB,YAAA52J,KAAAu1J,mBAAAlkJ,KAAArR,OACAA,KAAAu1J,qBAEAv1J,KAAAi1J,SAAAj1J,KAAA+8I,QAAA,CACA/8I,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAgZ,SACA,IAAAqC,GAAAxoB,SAAAsN,cAAA,MACAkb,GAAAvb,UAAAh1I,IAAAtG,KAAAw7I,YAAAyY,eACAj0J,KAAAi1J,QAAAzO,aAAAqQ,EAAA72J,KAAA+8I,SACA/8I,KAAAi1J,QAAAxO,YAAAzmJ,KAAA+8I,QACA,IAAA+Z,GAAAzoB,SAAAsN,cAAA,MACAmb,GAAAxb,UAAAh1I,IAAAtG,KAAAw7I,YAAA2Y,gBACA2C,EAAAxb,UAAAh1I,IAAAtG,KAAAw7I,YAAA4Y,oBACA,IAAA2C,GAAA1oB,SAAAsN,cAAA,IACAob,GAAAzb,UAAAh1I,IAAAtG,KAAAw7I,YAAAkY,MACAqD,EAAAnJ,YAAA5tJ,KAAAsiJ,UAAAyQ,aACA+D,EAAA/a,YAAAgb,GACAD,EAAA9a,iBAAA,mBACAh8I,KAAA+8I,QAAAia,YAAAh3J,KAAAsiJ,UAAAsQ,mBACAvhJ,KAAArR,MACA,IAAAi3J,GAAA5oB,SAAAsN,cAAA,MACAsb,GAAA3b,UAAAh1I,IAAAtG,KAAAw7I,YAAA2Y,gBACA8C,EAAA3b,UAAAh1I,IAAAtG,KAAAw7I,YAAA6Y,qBACA,IAAA6C,GAAA7oB,SAAAsN,cAAA,IACAub,GAAA5b,UAAAh1I,IAAAtG,KAAAw7I,YAAAkY,MACAwD,EAAAtJ,YAAA5tJ,KAAAsiJ,UAAA0Q,cACAiE,EAAAlb,YAAAmb,GACAD,EAAAjb,iBAAA,mBACAh8I,KAAA+8I,QAAAia,YAAAh3J,KAAAsiJ,UAAAsQ,mBACAvhJ,KAAArR,OACA62J,EAAA9a,YAAA+a,GACAD,EAAA9a,YAAA/7I,KAAA+8I,SACA8Z,EAAA9a,YAAAkb,EAGA,IAAAE,GAAA,WACAn3J,KAAA+8I,QAAAia,WAAA,EACAF,EAAAxb,UAAAh1I,IAAAtG,KAAAw7I,YAAAsB,WAEAga,EAAAxb,UAAAzkI,OAAA7W,KAAAw7I,YAAAsB,WAEA98I,KAAA+8I,QAAAia,WAAAh3J,KAAA+8I,QAAAqa,YAAAp3J,KAAA+8I,QAAAsV,YACA4E,EAAA3b,UAAAh1I,IAAAtG,KAAAw7I,YAAAsB,WAEAma,EAAA3b,UAAAzkI,OAAA7W,KAAAw7I,YAAAsB,YAEAzrI,KAAArR,KACAA,MAAA+8I,QAAAf,iBAAA,SAAAmb,GACAA,GAEA,IAAAE,GAAA,WAEAr3J,KAAAs3J,kBACAnV,aAAAniJ,KAAAs3J,kBAEAt3J,KAAAs3J,iBAAAhiJ,WAAA,WACA6hJ,IACAn3J,KAAAs3J,iBAAA,MACAjmJ,KAAArR,WAAAsiJ,UAAAuQ,iBACAxhJ,KAAArR,KACAS,QAAAu7I,iBAAA,SAAAqb,GACAr3J,KAAA+8I,QAAAzB,UAAAC,SAAAv7I,KAAAw7I,YAAAwB,mBACAh9I,KAAA+8I,QAAAzB,UAAAh1I,IAAAtG,KAAAw7I,YAAA6H,qBAMA,QAHA5G,GAAAz8I,KAAA+8I,QAAA+B,iBAAA,IAAA9+I,KAAAw7I,YAAA0Y,KACAxX,EAAA18I,KAAA68I,SAAAiC,iBAAA,IAAA9+I,KAAAw7I,YAAA8Y,OAEAp/I,EAAA,EAAAA,EAAAunI,EAAAr6I,OAAA8S,IACA,GAAAsnI,GAAAC,EAAAvnI,GAAAunI,EAAAC,EAAA18I,MAGAA,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,eAyCAjjJ,OAAA+7I,oBAGAc,EAAAU,UACA79I,YAAAuyJ,Ec3dAnS,cAAA,iBACA5B,SAAA,iBA0BA,IAAA4Y,GAAA,SAAA78E,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAA82J,oBAOAA,EAAAj3J,UAAAgiJ,aASAiV,EAAAj3J,UAAAk7I,aACAgc,WAAA,iBACAC,WAAA,6BACAC,eAAA,yBACAC,YAAA,cACAjU,YAAA,eAWA6T,EAAAj3J,UAAAs3J,WAAA,SAAAC,EAAAC,EAAAC,GACA,MAAAD,GACA,WACAD,EAAAzT,QACA0T,EAAAxc,UAAAh1I,IAAAtG,KAAAw7I,YAAAmc,aAEAG,EAAAxc,UAAAzkI,OAAA7W,KAAAw7I,YAAAmc,cAEAtmJ,KAAArR,MAEA+3J,EACA,WACA,GAAA7iJ,GACA40I,CACA,IAAA+N,EAAAzT,QACA,IAAAlvI,EAAA,EAAAA,EAAA6iJ,EAAA31J,OAAA8S,IACA40I,EAAAiO,EAAA7iJ,GAAAknI,cAAA,MAAAA,cAAA,iBACA0N,EAAA/G,iBAAAsB,QACA0T,EAAA7iJ,GAAAomI,UAAAh1I,IAAAtG,KAAAw7I,YAAAmc,iBAGA,KAAAziJ,EAAA,EAAAA,EAAA6iJ,EAAA31J,OAAA8S,IACA40I,EAAAiO,EAAA7iJ,GAAAknI,cAAA,MAAAA,cAAA,iBACA0N,EAAA/G,iBAAAuB,UACAyT,EAAA7iJ,GAAAomI,UAAAzkI,OAAA7W,KAAAw7I,YAAAmc,cAGAtmJ,KAAArR,MAjBA,QA4BAu3J,EAAAj3J,UAAA03J,gBAAA,SAAAF,EAAAC,GACA,GAAAE,GAAA5pB,SAAAsN,cAAA,SACAuc,GACA,eACA,kBACA,uBACAl4J,KAAAw7I,YAAAkc,eAEAO,GAAA5Z,UAAA6Z,EAAA53B,KAAA,IACA,IAAAu3B,GAAAxpB,SAAAsN,cAAA,QAWA,OAVAkc,GAAAj7J,KAAA,WACAi7J,EAAAvc,UAAAh1I,IAAA,uBACAwxJ,GACAD,EAAAzT,QAAA0T,EAAAxc,UAAAC,SAAAv7I,KAAAw7I,YAAAmc,aACAE,EAAA7b,iBAAA,SAAAh8I,KAAA43J,WAAAC,EAAAC,KACAC,GACAF,EAAA7b,iBAAA,SAAAh8I,KAAA43J,WAAAC,EAAA,KAAAE,IAEAE,EAAAlc,YAAA8b,GACAva,EAAAI,eAAAua,EAAA,oBACAA,GAKAV,EAAAj3J,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAA8c,GAAAn4J,KAAAq7I,SAAAe,cAAA,MACAgc,EAAAr5I,MAAAze,UAAAgX,MAAAnS,KAAAnF,KAAAq7I,SAAAyD,iBAAA,aACAuZ,EAAAt5I,MAAAze,UAAAgX,MAAAnS,KAAAnF,KAAAq7I,SAAAyD,iBAAA,aACAwZ,EAAAF,EAAAz/I,OAAA0/I,EACA,IAAAr4J,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAAic,YAAA,CACA,GAAAzyH,GAAAqpG,SAAAsN,cAAA,MACA4c,EAAAv4J,KAAAg4J,gBAAA,KAAAM,EACAtzH,GAAA+2G,YAAAwc,GACAJ,EAAA3wF,cAAAg/E,aAAAxhH,EAAAmzH,EACA,QAAAjjJ,GAAA,EAAAA,EAAAojJ,EAAAl2J,OAAA8S,IAAA,CACA,GAAAsjJ,GAAAF,EAAApjJ,GAAAknI,cAAA,KACA,IAAAoc,EAAA,CACA,GAAAzzH,GAAAspG,SAAAsN,cAAA,KACA,cAAA2c,EAAApjJ,GAAA2lE,WAAA49E,SAAAC,cAAA,CACA,GAAAC,GAAA34J,KAAAg4J,gBAAAM,EAAApjJ,GACA6vB,GAAAg3G,YAAA4c,GAEAL,EAAApjJ,GAAAsxI,aAAAzhH,EAAAyzH,IAGAx4J,KAAAq7I,SAAAC,UAAAh1I,IAAAtG,KAAAw7I,YAAAkI,gBAMApG,EAAAU,UACA79I,YAAAo3J,EC5JAhX,cAAA,oBACA5B,SAAA,qBA0BA,IAAAia,GAAA,SAAAl+E,GACA16E,KAAAq7I,SAAA3gE,EAEA16E,KAAAqiJ,OAEA5hJ,QAAAm4J,iBAOAA,EAAAt4J,UAAAgiJ,WACAuW,cAAA,wBACAC,aAAA,MACAC,gBAAA,MACAC,cAAA,IACAC,YAAA,IAUAL,EAAAt4J,UAAAk7I,aACA8H,cAAA,qBACA4V,4BAAA,sCACAhc,OAAA,aACA+I,aAAA,eACAD,WAAA,cAQA4S,EAAAt4J,UAAA64J,aAAA,SAAAxkB,GACA,IAAA30I,KAAA4iJ,eAAA38G,MAAA6iH,QAAA9oJ,KAAA4iJ,eAAA38G,MAAA4iH,OAAA,CACA,GAAApB,GAAAznJ,KAAAq7I,SAAAqM,uBACA1nJ,MAAAo5J,YAAA3R,EAAAoB,OACA7oJ,KAAAq5J,WAAA5R,EAAAqB,MACA9oJ,KAAAs5J,YAAA,EAAAt4J,KAAAu4J,KAAA9R,EAAAqB,MAAArB,EAAAqB,MAAArB,EAAAoB,OAAApB,EAAAoB,QAAA,EACA7oJ,KAAA4iJ,eAAA38G,MAAA6iH,MAAA9oJ,KAAAs5J,YAAA,KACAt5J,KAAA4iJ,eAAA38G,MAAA4iH,OAAA7oJ,KAAAs5J,YAAA,KAGA,GADAt5J,KAAA4iJ,eAAAtH,UAAAh1I,IAAAtG,KAAAw7I,YAAAwK,YACA,cAAArR,EAAA/3I,MAAAoD,KAAAw5J,mBACAx5J,KAAAw5J,0BACA,CACA,eAAA7kB,EAAA/3I,OACAoD,KAAAw5J,sBAEA,IAAAC,GAAAz5J,KAAA05J,eACA,IAAAD,EAAA,EACA,MAEAz5J,MAAA25J,cAAA,EACA,IACA36I,GACA+sI,EAFA6N,EAAAjlB,EAAAklB,cAAAnS,uBAIA,QAAA/S,EAAAkX,SAAA,IAAAlX,EAAAmX,QACA9sI,EAAAhe,KAAA84J,MAAAF,EAAA9Q,MAAA,GACAiD,EAAA/qJ,KAAA84J,MAAAF,EAAA/Q,OAAA,OACA,CACA,GAAAgD,GAAAlX,EAAAkX,QAAAlX,EAAAkX,QAAAlX,EAAAolB,QAAA,GAAAlO,QACAC,EAAAnX,EAAAmX,QAAAnX,EAAAmX,QAAAnX,EAAAolB,QAAA,GAAAjO,OACA9sI,GAAAhe,KAAA84J,MAAAjO,EAAA+N,EAAA5R,MACA+D,EAAA/qJ,KAAA84J,MAAAhO,EAAA8N,EAAA/R,KAEA7nJ,KAAAg6J,YAAAh7I,EAAA+sI,GACA/rJ,KAAAi6J,oBACAx5J,OAAAkhJ,sBAAA3hJ,KAAAk6J,iBAAA7oJ,KAAArR,SASA44J,EAAAt4J,UAAA65J,WAAA,SAAAxlB,GAEAA,GAAA,IAAAA,EAAAylB,QAIA35J,OAAA6U,WAAA,WACAtV,KAAA4iJ,eAAAtH,UAAAzkI,OAAA7W,KAAAw7I,YAAAwK,aACA30I,KAAArR,MAAA,IAMA44J,EAAAt4J,UAAA+hJ,KAAA,WACA,GAAAriJ,KAAAq7I,SAAA,CACA,GAAAgf,GAAAr6J,KAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA8H,cACAtjJ,MAAAq7I,SAAAC,UAAAC,SAAAv7I,KAAAw7I,YAAA0d,+BACAl5J,KAAA4iJ,eAAA5iJ,KAAAq7I,SAAAe,cAAA,IAAAp8I,KAAAw7I,YAAA0B,QACAl9I,KAAAs6J,YAAA,EACAt6J,KAAAs5J,YAAA,EACAt5J,KAAAu6J,GAAA,EACAv6J,KAAAw6J,GAAA,EAIAx6J,KAAAw5J,sBACAx5J,KAAAy6J,iBAAAz6J,KAAAm5J,aAAA9nJ,KAAArR,MACAA,KAAAq7I,SAAAW,iBAAA,YAAAh8I,KAAAy6J,kBACAz6J,KAAAq7I,SAAAW,iBAAA,aAAAh8I,KAAAy6J,kBACAz6J,KAAA06J,eAAA16J,KAAAm6J,WAAA9oJ,KAAArR,MACAA,KAAAq7I,SAAAW,iBAAA,UAAAh8I,KAAA06J,gBACA16J,KAAAq7I,SAAAW,iBAAA,aAAAh8I,KAAA06J,gBACA16J,KAAAq7I,SAAAW,iBAAA,WAAAh8I,KAAA06J,gBACA16J,KAAAq7I,SAAAW,iBAAA,OAAAh8I,KAAA06J,gBAKA16J,KAAA05J,cAAA,WACA,MAAA15J,MAAAs6J,aAMAt6J,KAAA25J,cAAA,SAAAgB,GACA36J,KAAAs6J,YAAAK,GAMA36J,KAAA46J,iBAAA,WACA,MAAA56J,MAAA4iJ,gBAOA5iJ,KAAAg6J,YAAA,SAAAa,EAAAC,GACA96J,KAAAu6J,GAAAM,EACA76J,KAAAw6J,GAAAM,GAMA96J,KAAAi6J,gBAAA,SAAAjmH,GACA,UAAAh0C,KAAA4iJ,eAAA,CACA,GAAAmY,GACAC,EACA9xJ,EACA+xJ,EAAA,aAAAj7J,KAAAu6J,GAAA,OAAAv6J,KAAAw6J,GAAA,KACAxmH,IACAgnH,EAAAh7J,KAAAsiJ,UAAAuW,cACA3vJ,EAAAlJ,KAAAsiJ,UAAAwW,eAEAkC,EAAAh7J,KAAAsiJ,UAAA2W,YACA/vJ,EAAAlJ,KAAAs5J,YAAA,KACAe,IACAY,EAAA,aAAAj7J,KAAAq5J,WAAA,SAAAr5J,KAAAo5J,YAAA,UAGA2B,EAAA,yBAAAE,EAAAD,EACAh7J,KAAA4iJ,eAAA38G,MAAAi1H,gBAAAH,EACA/6J,KAAA4iJ,eAAA38G,MAAAk1H,YAAAJ,EACA/6J,KAAA4iJ,eAAA38G,MAAAm1H,UAAAL,EACA/mH,EACAh0C,KAAA4iJ,eAAAtH,UAAAzkI,OAAA7W,KAAAw7I,YAAAyK,cAEAjmJ,KAAA4iJ,eAAAtH,UAAAh1I,IAAAtG,KAAAw7I,YAAAyK,gBAOAjmJ,KAAAk6J,iBAAA,WACAl6J,KAAAs6J,eAAA,EACA75J,OAAAkhJ,sBAAA3hJ,KAAAk6J,iBAAA7oJ,KAAArR,OAEAA,KAAAi6J,wBAQA3c,EAAAU,UACA79I,YAAAy4J,EACArY,cAAA,iBCkqHI5B,SAAU,uBACVc,gBvSyjiCE,SAASpjJ,OAAQC,SwS77pCvBD,OAAAC,QAAA,SAAAD,QAQA,MAPAA,QAAAg/J,kBACAh/J,OAAAi/J,UAAA,aACAj/J,OAAAk/J,SAEAl/J,OAAA8jJ,YACA9jJ,OAAAg/J,gBAAA,GAEAh/J","file":"vendor.c6beacf4ff958d611fa9.bundle.js","sourcesContent":["webpackJsonp([1],[\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// For vendors for example jQuery, Lodash, angular2-jwt just import them here unless you plan on\r\n\t// chunking vendors files for async loading. You would need to import the async loaded vendors\r\n\t// at the entry point of the async loaded file. Also see custom-typings.d.ts as you also need to\r\n\t// run `typings install x` where `x` is your module\r\n\t\"use strict\";\r\n\t// Angular 2\r\n\t__webpack_require__(170);\r\n\t__webpack_require__(171);\r\n\t__webpack_require__(4);\r\n\t__webpack_require__(118);\r\n\t__webpack_require__(119);\r\n\t__webpack_require__(75);\r\n\t__webpack_require__(832);\r\n\t// RxJS\r\n\t__webpack_require__(242);\r\n\t__webpack_require__(243);\r\n\t// Angular 2 Material 2\r\n\t// TODO(gdi2290): uncomment when material is fixed\r\n\t// import '@angular2-material/sidenav';\r\n\t// import '@angular2-material/toolbar';\r\n\t// import '@angular2-material/button';\r\n\t// import '@angular2-material/checkbox';\r\n\t// import '@angular2-material/radio';\r\n\t// import '@angular2-material/progress-circle';\r\n\t// import '@angular2-material/card';\r\n\t// look in platform/directives and platform/providers\r\n\tif (true) {\r\n\t}\r\n\telse {\r\n\t}\r\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar globalScope;\r\n\tif (typeof window === 'undefined') {\r\n\t    if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\r\n\t        // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492\r\n\t        globalScope = self;\r\n\t    }\r\n\t    else {\r\n\t        globalScope = global;\r\n\t    }\r\n\t}\r\n\telse {\r\n\t    globalScope = window;\r\n\t}\r\n\tfunction scheduleMicroTask(fn) {\r\n\t    Zone.current.scheduleMicroTask('scheduleMicrotask', fn);\r\n\t}\r\n\texports.scheduleMicroTask = scheduleMicroTask;\r\n\texports.IS_DART = false;\r\n\t// Need to declare a new variable for global here since TypeScript\r\n\t// exports the original value of the symbol.\r\n\tvar _global = globalScope;\r\n\texports.global = _global;\r\n\texports.Type = Function;\r\n\tfunction getTypeNameForDebugging(type) {\r\n\t    return type['name'];\r\n\t}\r\n\texports.getTypeNameForDebugging = getTypeNameForDebugging;\r\n\texports.Math = _global.Math;\r\n\texports.Date = _global.Date;\r\n\tvar _devMode = true;\r\n\tvar _modeLocked = false;\r\n\tfunction lockMode() {\r\n\t    _modeLocked = true;\r\n\t}\r\n\texports.lockMode = lockMode;\r\n\t/**\r\n\t * Disable Angular's development mode, which turns off assertions and other\r\n\t * checks within the framework.\r\n\t *\r\n\t * One important assertion this disables verifies that a change detection pass\r\n\t * does not result in additional changes to any bindings (also known as\r\n\t * unidirectional data flow).\r\n\t */\r\n\tfunction enableProdMode() {\r\n\t    if (_modeLocked) {\r\n\t        // Cannot use BaseException as that ends up importing from facade/lang.\r\n\t        throw 'Cannot enable prod mode after platform setup.';\r\n\t    }\r\n\t    _devMode = false;\r\n\t}\r\n\texports.enableProdMode = enableProdMode;\r\n\tfunction assertionsEnabled() {\r\n\t    return _devMode;\r\n\t}\r\n\texports.assertionsEnabled = assertionsEnabled;\r\n\t// TODO: remove calls to assert in production environment\r\n\t// Note: Can't just export this and import in in other files\r\n\t// as `assert` is a reserved keyword in Dart\r\n\t_global.assert = function assert(condition) {\r\n\t    // TODO: to be fixed properly via #2830, noop for now\r\n\t};\r\n\t// This function is needed only to properly support Dart's const expressions\r\n\t// see https://github.com/angular/ts2dart/pull/151 for more info\r\n\tfunction CONST_EXPR(expr) {\r\n\t    return expr;\r\n\t}\r\n\texports.CONST_EXPR = CONST_EXPR;\r\n\tfunction CONST() {\r\n\t    return function (target) { return target; };\r\n\t}\r\n\texports.CONST = CONST;\r\n\tfunction isPresent(obj) {\r\n\t    return obj !== undefined && obj !== null;\r\n\t}\r\n\texports.isPresent = isPresent;\r\n\tfunction isBlank(obj) {\r\n\t    return obj === undefined || obj === null;\r\n\t}\r\n\texports.isBlank = isBlank;\r\n\tfunction isString(obj) {\r\n\t    return typeof obj === \"string\";\r\n\t}\r\n\texports.isString = isString;\r\n\tfunction isFunction(obj) {\r\n\t    return typeof obj === \"function\";\r\n\t}\r\n\texports.isFunction = isFunction;\r\n\tfunction isType(obj) {\r\n\t    return isFunction(obj);\r\n\t}\r\n\texports.isType = isType;\r\n\tfunction isStringMap(obj) {\r\n\t    return typeof obj === 'object' && obj !== null;\r\n\t}\r\n\texports.isStringMap = isStringMap;\r\n\tfunction isPromise(obj) {\r\n\t    return obj instanceof _global.Promise;\r\n\t}\r\n\texports.isPromise = isPromise;\r\n\tfunction isArray(obj) {\r\n\t    return Array.isArray(obj);\r\n\t}\r\n\texports.isArray = isArray;\r\n\tfunction isNumber(obj) {\r\n\t    return typeof obj === 'number';\r\n\t}\r\n\texports.isNumber = isNumber;\r\n\tfunction isDate(obj) {\r\n\t    return obj instanceof exports.Date && !isNaN(obj.valueOf());\r\n\t}\r\n\texports.isDate = isDate;\r\n\tfunction noop() { }\r\n\texports.noop = noop;\r\n\tfunction stringify(token) {\r\n\t    if (typeof token === 'string') {\r\n\t        return token;\r\n\t    }\r\n\t    if (token === undefined || token === null) {\r\n\t        return '' + token;\r\n\t    }\r\n\t    if (token.name) {\r\n\t        return token.name;\r\n\t    }\r\n\t    if (token.overriddenName) {\r\n\t        return token.overriddenName;\r\n\t    }\r\n\t    var res = token.toString();\r\n\t    var newLineIndex = res.indexOf(\"\\n\");\r\n\t    return (newLineIndex === -1) ? res : res.substring(0, newLineIndex);\r\n\t}\r\n\texports.stringify = stringify;\r\n\t// serialize / deserialize enum exist only for consistency with dart API\r\n\t// enums in typescript don't need to be serialized\r\n\tfunction serializeEnum(val) {\r\n\t    return val;\r\n\t}\r\n\texports.serializeEnum = serializeEnum;\r\n\tfunction deserializeEnum(val, values) {\r\n\t    return val;\r\n\t}\r\n\texports.deserializeEnum = deserializeEnum;\r\n\tfunction resolveEnumToken(enumValue, val) {\r\n\t    return enumValue[val];\r\n\t}\r\n\texports.resolveEnumToken = resolveEnumToken;\r\n\tvar StringWrapper = (function () {\r\n\t    function StringWrapper() {\r\n\t    }\r\n\t    StringWrapper.fromCharCode = function (code) { return String.fromCharCode(code); };\r\n\t    StringWrapper.charCodeAt = function (s, index) { return s.charCodeAt(index); };\r\n\t    StringWrapper.split = function (s, regExp) { return s.split(regExp); };\r\n\t    StringWrapper.equals = function (s, s2) { return s === s2; };\r\n\t    StringWrapper.stripLeft = function (s, charVal) {\r\n\t        if (s && s.length) {\r\n\t            var pos = 0;\r\n\t            for (var i = 0; i < s.length; i++) {\r\n\t                if (s[i] != charVal)\r\n\t                    break;\r\n\t                pos++;\r\n\t            }\r\n\t            s = s.substring(pos);\r\n\t        }\r\n\t        return s;\r\n\t    };\r\n\t    StringWrapper.stripRight = function (s, charVal) {\r\n\t        if (s && s.length) {\r\n\t            var pos = s.length;\r\n\t            for (var i = s.length - 1; i >= 0; i--) {\r\n\t                if (s[i] != charVal)\r\n\t                    break;\r\n\t                pos--;\r\n\t            }\r\n\t            s = s.substring(0, pos);\r\n\t        }\r\n\t        return s;\r\n\t    };\r\n\t    StringWrapper.replace = function (s, from, replace) {\r\n\t        return s.replace(from, replace);\r\n\t    };\r\n\t    StringWrapper.replaceAll = function (s, from, replace) {\r\n\t        return s.replace(from, replace);\r\n\t    };\r\n\t    StringWrapper.slice = function (s, from, to) {\r\n\t        if (from === void 0) { from = 0; }\r\n\t        if (to === void 0) { to = null; }\r\n\t        return s.slice(from, to === null ? undefined : to);\r\n\t    };\r\n\t    StringWrapper.replaceAllMapped = function (s, from, cb) {\r\n\t        return s.replace(from, function () {\r\n\t            var matches = [];\r\n\t            for (var _i = 0; _i < arguments.length; _i++) {\r\n\t                matches[_i - 0] = arguments[_i];\r\n\t            }\r\n\t            // Remove offset & string from the result array\r\n\t            matches.splice(-2, 2);\r\n\t            // The callback receives match, p1, ..., pn\r\n\t            return cb(matches);\r\n\t        });\r\n\t    };\r\n\t    StringWrapper.contains = function (s, substr) { return s.indexOf(substr) != -1; };\r\n\t    StringWrapper.compare = function (a, b) {\r\n\t        if (a < b) {\r\n\t            return -1;\r\n\t        }\r\n\t        else if (a > b) {\r\n\t            return 1;\r\n\t        }\r\n\t        else {\r\n\t            return 0;\r\n\t        }\r\n\t    };\r\n\t    return StringWrapper;\r\n\t})();\r\n\texports.StringWrapper = StringWrapper;\r\n\tvar StringJoiner = (function () {\r\n\t    function StringJoiner(parts) {\r\n\t        if (parts === void 0) { parts = []; }\r\n\t        this.parts = parts;\r\n\t    }\r\n\t    StringJoiner.prototype.add = function (part) { this.parts.push(part); };\r\n\t    StringJoiner.prototype.toString = function () { return this.parts.join(\"\"); };\r\n\t    return StringJoiner;\r\n\t})();\r\n\texports.StringJoiner = StringJoiner;\r\n\tvar NumberParseError = (function (_super) {\r\n\t    __extends(NumberParseError, _super);\r\n\t    function NumberParseError(message) {\r\n\t        _super.call(this);\r\n\t        this.message = message;\r\n\t    }\r\n\t    NumberParseError.prototype.toString = function () { return this.message; };\r\n\t    return NumberParseError;\r\n\t})(Error);\r\n\texports.NumberParseError = NumberParseError;\r\n\tvar NumberWrapper = (function () {\r\n\t    function NumberWrapper() {\r\n\t    }\r\n\t    NumberWrapper.toFixed = function (n, fractionDigits) { return n.toFixed(fractionDigits); };\r\n\t    NumberWrapper.equal = function (a, b) { return a === b; };\r\n\t    NumberWrapper.parseIntAutoRadix = function (text) {\r\n\t        var result = parseInt(text);\r\n\t        if (isNaN(result)) {\r\n\t            throw new NumberParseError(\"Invalid integer literal when parsing \" + text);\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    NumberWrapper.parseInt = function (text, radix) {\r\n\t        if (radix == 10) {\r\n\t            if (/^(\\-|\\+)?[0-9]+$/.test(text)) {\r\n\t                return parseInt(text, radix);\r\n\t            }\r\n\t        }\r\n\t        else if (radix == 16) {\r\n\t            if (/^(\\-|\\+)?[0-9ABCDEFabcdef]+$/.test(text)) {\r\n\t                return parseInt(text, radix);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            var result = parseInt(text, radix);\r\n\t            if (!isNaN(result)) {\r\n\t                return result;\r\n\t            }\r\n\t        }\r\n\t        throw new NumberParseError(\"Invalid integer literal when parsing \" + text + \" in base \" +\r\n\t            radix);\r\n\t    };\r\n\t    // TODO: NaN is a valid literal but is returned by parseFloat to indicate an error.\r\n\t    NumberWrapper.parseFloat = function (text) { return parseFloat(text); };\r\n\t    Object.defineProperty(NumberWrapper, \"NaN\", {\r\n\t        get: function () { return NaN; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NumberWrapper.isNaN = function (value) { return isNaN(value); };\r\n\t    NumberWrapper.isInteger = function (value) { return Number.isInteger(value); };\r\n\t    return NumberWrapper;\r\n\t})();\r\n\texports.NumberWrapper = NumberWrapper;\r\n\texports.RegExp = _global.RegExp;\r\n\tvar RegExpWrapper = (function () {\r\n\t    function RegExpWrapper() {\r\n\t    }\r\n\t    RegExpWrapper.create = function (regExpStr, flags) {\r\n\t        if (flags === void 0) { flags = ''; }\r\n\t        flags = flags.replace(/g/g, '');\r\n\t        return new _global.RegExp(regExpStr, flags + 'g');\r\n\t    };\r\n\t    RegExpWrapper.firstMatch = function (regExp, input) {\r\n\t        // Reset multimatch regex state\r\n\t        regExp.lastIndex = 0;\r\n\t        return regExp.exec(input);\r\n\t    };\r\n\t    RegExpWrapper.test = function (regExp, input) {\r\n\t        regExp.lastIndex = 0;\r\n\t        return regExp.test(input);\r\n\t    };\r\n\t    RegExpWrapper.matcher = function (regExp, input) {\r\n\t        // Reset regex state for the case\r\n\t        // someone did not loop over all matches\r\n\t        // last time.\r\n\t        regExp.lastIndex = 0;\r\n\t        return { re: regExp, input: input };\r\n\t    };\r\n\t    return RegExpWrapper;\r\n\t})();\r\n\texports.RegExpWrapper = RegExpWrapper;\r\n\tvar RegExpMatcherWrapper = (function () {\r\n\t    function RegExpMatcherWrapper() {\r\n\t    }\r\n\t    RegExpMatcherWrapper.next = function (matcher) {\r\n\t        return matcher.re.exec(matcher.input);\r\n\t    };\r\n\t    return RegExpMatcherWrapper;\r\n\t})();\r\n\texports.RegExpMatcherWrapper = RegExpMatcherWrapper;\r\n\tvar FunctionWrapper = (function () {\r\n\t    function FunctionWrapper() {\r\n\t    }\r\n\t    FunctionWrapper.apply = function (fn, posArgs) { return fn.apply(null, posArgs); };\r\n\t    return FunctionWrapper;\r\n\t})();\r\n\texports.FunctionWrapper = FunctionWrapper;\r\n\t// JS has NaN !== NaN\r\n\tfunction looseIdentical(a, b) {\r\n\t    return a === b || typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b);\r\n\t}\r\n\texports.looseIdentical = looseIdentical;\r\n\t// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise)\r\n\t// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\r\n\tfunction getMapKey(value) {\r\n\t    return value;\r\n\t}\r\n\texports.getMapKey = getMapKey;\r\n\tfunction normalizeBlank(obj) {\r\n\t    return isBlank(obj) ? null : obj;\r\n\t}\r\n\texports.normalizeBlank = normalizeBlank;\r\n\tfunction normalizeBool(obj) {\r\n\t    return isBlank(obj) ? false : obj;\r\n\t}\r\n\texports.normalizeBool = normalizeBool;\r\n\tfunction isJsObject(o) {\r\n\t    return o !== null && (typeof o === \"function\" || typeof o === \"object\");\r\n\t}\r\n\texports.isJsObject = isJsObject;\r\n\tfunction print(obj) {\r\n\t    console.log(obj);\r\n\t}\r\n\texports.print = print;\r\n\t// Can't be all uppercase as our transpiler would think it is a special directive...\r\n\tvar Json = (function () {\r\n\t    function Json() {\r\n\t    }\r\n\t    Json.parse = function (s) { return _global.JSON.parse(s); };\r\n\t    Json.stringify = function (data) {\r\n\t        // Dart doesn't take 3 arguments\r\n\t        return _global.JSON.stringify(data, null, 2);\r\n\t    };\r\n\t    return Json;\r\n\t})();\r\n\texports.Json = Json;\r\n\tvar DateWrapper = (function () {\r\n\t    function DateWrapper() {\r\n\t    }\r\n\t    DateWrapper.create = function (year, month, day, hour, minutes, seconds, milliseconds) {\r\n\t        if (month === void 0) { month = 1; }\r\n\t        if (day === void 0) { day = 1; }\r\n\t        if (hour === void 0) { hour = 0; }\r\n\t        if (minutes === void 0) { minutes = 0; }\r\n\t        if (seconds === void 0) { seconds = 0; }\r\n\t        if (milliseconds === void 0) { milliseconds = 0; }\r\n\t        return new exports.Date(year, month - 1, day, hour, minutes, seconds, milliseconds);\r\n\t    };\r\n\t    DateWrapper.fromISOString = function (str) { return new exports.Date(str); };\r\n\t    DateWrapper.fromMillis = function (ms) { return new exports.Date(ms); };\r\n\t    DateWrapper.toMillis = function (date) { return date.getTime(); };\r\n\t    DateWrapper.now = function () { return new exports.Date(); };\r\n\t    DateWrapper.toJson = function (date) { return date.toJSON(); };\r\n\t    return DateWrapper;\r\n\t})();\r\n\texports.DateWrapper = DateWrapper;\r\n\tfunction setValueOnPath(global, path, value) {\r\n\t    var parts = path.split('.');\r\n\t    var obj = global;\r\n\t    while (parts.length > 1) {\r\n\t        var name = parts.shift();\r\n\t        if (obj.hasOwnProperty(name) && isPresent(obj[name])) {\r\n\t            obj = obj[name];\r\n\t        }\r\n\t        else {\r\n\t            obj = obj[name] = {};\r\n\t        }\r\n\t    }\r\n\t    if (obj === undefined || obj === null) {\r\n\t        obj = {};\r\n\t    }\r\n\t    obj[parts.shift()] = value;\r\n\t}\r\n\texports.setValueOnPath = setValueOnPath;\r\n\tvar _symbolIterator = null;\r\n\tfunction getSymbolIterator() {\r\n\t    if (isBlank(_symbolIterator)) {\r\n\t        if (isPresent(Symbol) && isPresent(Symbol.iterator)) {\r\n\t            _symbolIterator = Symbol.iterator;\r\n\t        }\r\n\t        else {\r\n\t            // es6-shim specific logic\r\n\t            var keys = Object.getOwnPropertyNames(Map.prototype);\r\n\t            for (var i = 0; i < keys.length; ++i) {\r\n\t                var key = keys[i];\r\n\t                if (key !== 'entries' && key !== 'size' &&\r\n\t                    Map.prototype[key] === Map.prototype['entries']) {\r\n\t                    _symbolIterator = key;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    return _symbolIterator;\r\n\t}\r\n\texports.getSymbolIterator = getSymbolIterator;\r\n\tfunction evalExpression(sourceUrl, expr, declarations, vars) {\r\n\t    var fnBody = declarations + \"\\nreturn \" + expr + \"\\n//# sourceURL=\" + sourceUrl;\r\n\t    var fnArgNames = [];\r\n\t    var fnArgValues = [];\r\n\t    for (var argName in vars) {\r\n\t        fnArgNames.push(argName);\r\n\t        fnArgValues.push(vars[argName]);\r\n\t    }\r\n\t    return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues);\r\n\t}\r\n\texports.evalExpression = evalExpression;\r\n\tfunction isPrimitive(obj) {\r\n\t    return !isJsObject(obj);\r\n\t}\r\n\texports.isPrimitive = isPrimitive;\r\n\tfunction hasConstructor(value, type) {\r\n\t    return value.constructor === type;\r\n\t}\r\n\texports.hasConstructor = hasConstructor;\r\n\tfunction bitWiseOr(values) {\r\n\t    return values.reduce(function (a, b) { return a | b; });\r\n\t}\r\n\texports.bitWiseOr = bitWiseOr;\r\n\tfunction bitWiseAnd(values) {\r\n\t    return values.reduce(function (a, b) { return a & b; });\r\n\t}\r\n\texports.bitWiseAnd = bitWiseAnd;\r\n\tfunction escape(s) {\r\n\t    return _global.encodeURI(s);\r\n\t}\r\n\texports.escape = escape;\r\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar root_1 = __webpack_require__(45);\n\tvar SymbolShim_1 = __webpack_require__(74);\n\tvar toSubscriber_1 = __webpack_require__(583);\n\tvar tryCatch_1 = __webpack_require__(22);\n\tvar errorObject_1 = __webpack_require__(19);\n\t/**\n\t * A representation of any set of values over any amount of time. This the most basic building block\n\t * of RxJS.\n\t *\n\t * @class Observable<T>\n\t */\n\tvar Observable = (function () {\n\t    /**\n\t     * @constructor\n\t     * @param {Function} subscribe the function that is\n\t     * called when the Observable is initially subscribed to. This function is given a Subscriber, to which new values\n\t     * can be `next`ed, or an `error` method can be called to raise an error, or `complete` can be called to notify\n\t     * of a successful completion.\n\t     */\n\t    function Observable(subscribe) {\n\t        this._isScalar = false;\n\t        if (subscribe) {\n\t            this._subscribe = subscribe;\n\t        }\n\t    }\n\t    /**\n\t     * @method lift\n\t     * @param {Operator} operator the operator defining the operation to take on the observable\n\t     * @returns {Observable} a new observable with the Operator applied\n\t     * @description creates a new Observable, with this Observable as the source, and the passed\n\t     * operator defined as the new observable's operator.\n\t     */\n\t    Observable.prototype.lift = function (operator) {\n\t        var observable = new Observable();\n\t        observable.source = this;\n\t        observable.operator = operator;\n\t        return observable;\n\t    };\n\t    /**\n\t     * @method subscribe\n\t     * @param {PartialObserver|Function} observerOrNext (optional) either an observer defining all functions to be called,\n\t     *  or the first of three possible handlers, which is the handler for each value emitted from the observable.\n\t     * @param {Function} error (optional) a handler for a terminal event resulting from an error. If no error handler is provided,\n\t     *  the error will be thrown as unhandled\n\t     * @param {Function} complete (optional) a handler for a terminal event resulting from successful completion.\n\t     * @returns {Subscription} a subscription reference to the registered handlers\n\t     * @description registers handlers for handling emitted values, error and completions from the observable, and\n\t     *  executes the observable's subscriber function, which will take action to set up the underlying data stream\n\t     */\n\t    Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n\t        var operator = this.operator;\n\t        var subscriber = toSubscriber_1.toSubscriber(observerOrNext, error, complete);\n\t        if (operator) {\n\t            subscriber.add(this._subscribe(operator.call(subscriber)));\n\t        }\n\t        else {\n\t            subscriber.add(this._subscribe(subscriber));\n\t        }\n\t        if (subscriber.syncErrorThrowable) {\n\t            subscriber.syncErrorThrowable = false;\n\t            if (subscriber.syncErrorThrown) {\n\t                throw subscriber.syncErrorValue;\n\t            }\n\t        }\n\t        return subscriber;\n\t    };\n\t    /**\n\t     * @method forEach\n\t     * @param {Function} next a handler for each value emitted by the observable\n\t     * @param {any} [thisArg] a `this` context for the `next` handler function\n\t     * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n\t     * @returns {Promise} a promise that either resolves on observable completion or\n\t     *  rejects with the handled error\n\t     */\n\t    Observable.prototype.forEach = function (next, thisArg, PromiseCtor) {\n\t        if (!PromiseCtor) {\n\t            if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {\n\t                PromiseCtor = root_1.root.Rx.config.Promise;\n\t            }\n\t            else if (root_1.root.Promise) {\n\t                PromiseCtor = root_1.root.Promise;\n\t            }\n\t        }\n\t        if (!PromiseCtor) {\n\t            throw new Error('no Promise impl found');\n\t        }\n\t        var source = this;\n\t        return new PromiseCtor(function (resolve, reject) {\n\t            source.subscribe(function (value) {\n\t                var result = tryCatch_1.tryCatch(next).call(thisArg, value);\n\t                if (result === errorObject_1.errorObject) {\n\t                    reject(errorObject_1.errorObject.e);\n\t                }\n\t            }, reject, resolve);\n\t        });\n\t    };\n\t    Observable.prototype._subscribe = function (subscriber) {\n\t        return this.source.subscribe(subscriber);\n\t    };\n\t    /**\n\t     * @method Symbol.observable\n\t     * @returns {Observable} this instance of the observable\n\t     * @description an interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n\t     */\n\t    Observable.prototype[SymbolShim_1.SymbolShim.observable] = function () {\n\t        return this;\n\t    };\n\t    // HACK: Since TypeScript inherits static properties too, we have to\n\t    // fight against TypeScript here so Subject can have a different static create signature\n\t    /**\n\t     * @static\n\t     * @method create\n\t     * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n\t     * @returns {Observable} a new cold observable\n\t     * @description creates a new cold Observable by calling the Observable constructor\n\t     */\n\t    Observable.create = function (subscribe) {\n\t        return new Observable(subscribe);\n\t    };\n\t    return Observable;\n\t}());\n\texports.Observable = Observable;\n\t//# sourceMappingURL=Observable.js.map\n\n/***/ },\n/* 3 */,\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';function __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\t/**\r\n\t * @module\r\n\t * @description\r\n\t * Starting point to import all public core APIs.\r\n\t */\r\n\t__export(__webpack_require__(133));\r\n\t__export(__webpack_require__(622));\r\n\t__export(__webpack_require__(617));\r\n\t__export(__webpack_require__(8));\r\n\t__export(__webpack_require__(625));\r\n\tvar lang_1 = __webpack_require__(1);\r\n\texports.enableProdMode = lang_1.enableProdMode;\r\n\tvar application_ref_1 = __webpack_require__(288);\r\n\texports.platform = application_ref_1.platform;\r\n\texports.createNgZone = application_ref_1.createNgZone;\r\n\texports.PlatformRef = application_ref_1.PlatformRef;\r\n\texports.ApplicationRef = application_ref_1.ApplicationRef;\r\n\tvar application_tokens_1 = __webpack_require__(93);\r\n\texports.APP_ID = application_tokens_1.APP_ID;\r\n\texports.APP_COMPONENT = application_tokens_1.APP_COMPONENT;\r\n\texports.APP_INITIALIZER = application_tokens_1.APP_INITIALIZER;\r\n\texports.PACKAGE_ROOT_URL = application_tokens_1.PACKAGE_ROOT_URL;\r\n\texports.PLATFORM_INITIALIZER = application_tokens_1.PLATFORM_INITIALIZER;\r\n\t__export(__webpack_require__(623));\r\n\t__export(__webpack_require__(620));\r\n\t__export(__webpack_require__(614));\r\n\tvar debug_node_1 = __webpack_require__(194);\r\n\texports.DebugElement = debug_node_1.DebugElement;\r\n\texports.DebugNode = debug_node_1.DebugNode;\r\n\texports.asNativeElements = debug_node_1.asNativeElements;\r\n\t__export(__webpack_require__(135));\r\n\t__export(__webpack_require__(289));\r\n\t__export(__webpack_require__(204));\r\n\t__export(__webpack_require__(616));\r\n\t__export(__webpack_require__(603));\r\n\t__export(__webpack_require__(27));\r\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\texports.Map = lang_1.global.Map;\r\n\texports.Set = lang_1.global.Set;\r\n\t// Safari and Internet Explorer do not support the iterable parameter to the\r\n\t// Map constructor.  We work around that by manually adding the items.\r\n\tvar createMapFromPairs = (function () {\r\n\t    try {\r\n\t        if (new exports.Map([[1, 2]]).size === 1) {\r\n\t            return function createMapFromPairs(pairs) { return new exports.Map(pairs); };\r\n\t        }\r\n\t    }\r\n\t    catch (e) {\r\n\t    }\r\n\t    return function createMapAndPopulateFromPairs(pairs) {\r\n\t        var map = new exports.Map();\r\n\t        for (var i = 0; i < pairs.length; i++) {\r\n\t            var pair = pairs[i];\r\n\t            map.set(pair[0], pair[1]);\r\n\t        }\r\n\t        return map;\r\n\t    };\r\n\t})();\r\n\tvar createMapFromMap = (function () {\r\n\t    try {\r\n\t        if (new exports.Map(new exports.Map())) {\r\n\t            return function createMapFromMap(m) { return new exports.Map(m); };\r\n\t        }\r\n\t    }\r\n\t    catch (e) {\r\n\t    }\r\n\t    return function createMapAndPopulateFromMap(m) {\r\n\t        var map = new exports.Map();\r\n\t        m.forEach(function (v, k) { map.set(k, v); });\r\n\t        return map;\r\n\t    };\r\n\t})();\r\n\tvar _clearValues = (function () {\r\n\t    if ((new exports.Map()).keys().next) {\r\n\t        return function _clearValues(m) {\r\n\t            var keyIterator = m.keys();\r\n\t            var k;\r\n\t            while (!((k = keyIterator.next()).done)) {\r\n\t                m.set(k.value, null);\r\n\t            }\r\n\t        };\r\n\t    }\r\n\t    else {\r\n\t        return function _clearValuesWithForeEach(m) {\r\n\t            m.forEach(function (v, k) { m.set(k, null); });\r\n\t        };\r\n\t    }\r\n\t})();\r\n\t// Safari doesn't implement MapIterator.next(), which is used is Traceur's polyfill of Array.from\r\n\t// TODO(mlaval): remove the work around once we have a working polyfill of Array.from\r\n\tvar _arrayFromMap = (function () {\r\n\t    try {\r\n\t        if ((new exports.Map()).values().next) {\r\n\t            return function createArrayFromMap(m, getValues) {\r\n\t                return getValues ? Array.from(m.values()) : Array.from(m.keys());\r\n\t            };\r\n\t        }\r\n\t    }\r\n\t    catch (e) {\r\n\t    }\r\n\t    return function createArrayFromMapWithForeach(m, getValues) {\r\n\t        var res = ListWrapper.createFixedSize(m.size), i = 0;\r\n\t        m.forEach(function (v, k) {\r\n\t            res[i] = getValues ? v : k;\r\n\t            i++;\r\n\t        });\r\n\t        return res;\r\n\t    };\r\n\t})();\r\n\tvar MapWrapper = (function () {\r\n\t    function MapWrapper() {\r\n\t    }\r\n\t    MapWrapper.clone = function (m) { return createMapFromMap(m); };\r\n\t    MapWrapper.createFromStringMap = function (stringMap) {\r\n\t        var result = new exports.Map();\r\n\t        for (var prop in stringMap) {\r\n\t            result.set(prop, stringMap[prop]);\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    MapWrapper.toStringMap = function (m) {\r\n\t        var r = {};\r\n\t        m.forEach(function (v, k) { return r[k] = v; });\r\n\t        return r;\r\n\t    };\r\n\t    MapWrapper.createFromPairs = function (pairs) { return createMapFromPairs(pairs); };\r\n\t    MapWrapper.clearValues = function (m) { _clearValues(m); };\r\n\t    MapWrapper.iterable = function (m) { return m; };\r\n\t    MapWrapper.keys = function (m) { return _arrayFromMap(m, false); };\r\n\t    MapWrapper.values = function (m) { return _arrayFromMap(m, true); };\r\n\t    return MapWrapper;\r\n\t})();\r\n\texports.MapWrapper = MapWrapper;\r\n\t/**\r\n\t * Wraps Javascript Objects\r\n\t */\r\n\tvar StringMapWrapper = (function () {\r\n\t    function StringMapWrapper() {\r\n\t    }\r\n\t    StringMapWrapper.create = function () {\r\n\t        // Note: We are not using Object.create(null) here due to\r\n\t        // performance!\r\n\t        // http://jsperf.com/ng2-object-create-null\r\n\t        return {};\r\n\t    };\r\n\t    StringMapWrapper.contains = function (map, key) {\r\n\t        return map.hasOwnProperty(key);\r\n\t    };\r\n\t    StringMapWrapper.get = function (map, key) {\r\n\t        return map.hasOwnProperty(key) ? map[key] : undefined;\r\n\t    };\r\n\t    StringMapWrapper.set = function (map, key, value) { map[key] = value; };\r\n\t    StringMapWrapper.keys = function (map) { return Object.keys(map); };\r\n\t    StringMapWrapper.values = function (map) {\r\n\t        return Object.keys(map).reduce(function (r, a) {\r\n\t            r.push(map[a]);\r\n\t            return r;\r\n\t        }, []);\r\n\t    };\r\n\t    StringMapWrapper.isEmpty = function (map) {\r\n\t        for (var prop in map) {\r\n\t            return false;\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    StringMapWrapper.delete = function (map, key) { delete map[key]; };\r\n\t    StringMapWrapper.forEach = function (map, callback) {\r\n\t        for (var prop in map) {\r\n\t            if (map.hasOwnProperty(prop)) {\r\n\t                callback(map[prop], prop);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    StringMapWrapper.merge = function (m1, m2) {\r\n\t        var m = {};\r\n\t        for (var attr in m1) {\r\n\t            if (m1.hasOwnProperty(attr)) {\r\n\t                m[attr] = m1[attr];\r\n\t            }\r\n\t        }\r\n\t        for (var attr in m2) {\r\n\t            if (m2.hasOwnProperty(attr)) {\r\n\t                m[attr] = m2[attr];\r\n\t            }\r\n\t        }\r\n\t        return m;\r\n\t    };\r\n\t    StringMapWrapper.equals = function (m1, m2) {\r\n\t        var k1 = Object.keys(m1);\r\n\t        var k2 = Object.keys(m2);\r\n\t        if (k1.length != k2.length) {\r\n\t            return false;\r\n\t        }\r\n\t        var key;\r\n\t        for (var i = 0; i < k1.length; i++) {\r\n\t            key = k1[i];\r\n\t            if (m1[key] !== m2[key]) {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    return StringMapWrapper;\r\n\t})();\r\n\texports.StringMapWrapper = StringMapWrapper;\r\n\tvar ListWrapper = (function () {\r\n\t    function ListWrapper() {\r\n\t    }\r\n\t    // JS has no way to express a statically fixed size list, but dart does so we\r\n\t    // keep both methods.\r\n\t    ListWrapper.createFixedSize = function (size) { return new Array(size); };\r\n\t    ListWrapper.createGrowableSize = function (size) { return new Array(size); };\r\n\t    ListWrapper.clone = function (array) { return array.slice(0); };\r\n\t    ListWrapper.createImmutable = function (array) {\r\n\t        var result = ListWrapper.clone(array);\r\n\t        Object.seal(result);\r\n\t        return result;\r\n\t    };\r\n\t    ListWrapper.forEachWithIndex = function (array, fn) {\r\n\t        for (var i = 0; i < array.length; i++) {\r\n\t            fn(array[i], i);\r\n\t        }\r\n\t    };\r\n\t    ListWrapper.first = function (array) {\r\n\t        if (!array)\r\n\t            return null;\r\n\t        return array[0];\r\n\t    };\r\n\t    ListWrapper.last = function (array) {\r\n\t        if (!array || array.length == 0)\r\n\t            return null;\r\n\t        return array[array.length - 1];\r\n\t    };\r\n\t    ListWrapper.indexOf = function (array, value, startIndex) {\r\n\t        if (startIndex === void 0) { startIndex = 0; }\r\n\t        return array.indexOf(value, startIndex);\r\n\t    };\r\n\t    ListWrapper.contains = function (list, el) { return list.indexOf(el) !== -1; };\r\n\t    ListWrapper.reversed = function (array) {\r\n\t        var a = ListWrapper.clone(array);\r\n\t        return a.reverse();\r\n\t    };\r\n\t    ListWrapper.concat = function (a, b) { return a.concat(b); };\r\n\t    ListWrapper.insert = function (list, index, value) { list.splice(index, 0, value); };\r\n\t    ListWrapper.removeAt = function (list, index) {\r\n\t        var res = list[index];\r\n\t        list.splice(index, 1);\r\n\t        return res;\r\n\t    };\r\n\t    ListWrapper.removeAll = function (list, items) {\r\n\t        for (var i = 0; i < items.length; ++i) {\r\n\t            var index = list.indexOf(items[i]);\r\n\t            list.splice(index, 1);\r\n\t        }\r\n\t    };\r\n\t    ListWrapper.remove = function (list, el) {\r\n\t        var index = list.indexOf(el);\r\n\t        if (index > -1) {\r\n\t            list.splice(index, 1);\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    ListWrapper.clear = function (list) { list.length = 0; };\r\n\t    ListWrapper.isEmpty = function (list) { return list.length == 0; };\r\n\t    ListWrapper.fill = function (list, value, start, end) {\r\n\t        if (start === void 0) { start = 0; }\r\n\t        if (end === void 0) { end = null; }\r\n\t        list.fill(value, start, end === null ? list.length : end);\r\n\t    };\r\n\t    ListWrapper.equals = function (a, b) {\r\n\t        if (a.length != b.length)\r\n\t            return false;\r\n\t        for (var i = 0; i < a.length; ++i) {\r\n\t            if (a[i] !== b[i])\r\n\t                return false;\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    ListWrapper.slice = function (l, from, to) {\r\n\t        if (from === void 0) { from = 0; }\r\n\t        if (to === void 0) { to = null; }\r\n\t        return l.slice(from, to === null ? undefined : to);\r\n\t    };\r\n\t    ListWrapper.splice = function (l, from, length) { return l.splice(from, length); };\r\n\t    ListWrapper.sort = function (l, compareFn) {\r\n\t        if (lang_1.isPresent(compareFn)) {\r\n\t            l.sort(compareFn);\r\n\t        }\r\n\t        else {\r\n\t            l.sort();\r\n\t        }\r\n\t    };\r\n\t    ListWrapper.toString = function (l) { return l.toString(); };\r\n\t    ListWrapper.toJSON = function (l) { return JSON.stringify(l); };\r\n\t    ListWrapper.maximum = function (list, predicate) {\r\n\t        if (list.length == 0) {\r\n\t            return null;\r\n\t        }\r\n\t        var solution = null;\r\n\t        var maxValue = -Infinity;\r\n\t        for (var index = 0; index < list.length; index++) {\r\n\t            var candidate = list[index];\r\n\t            if (lang_1.isBlank(candidate)) {\r\n\t                continue;\r\n\t            }\r\n\t            var candidateValue = predicate(candidate);\r\n\t            if (candidateValue > maxValue) {\r\n\t                solution = candidate;\r\n\t                maxValue = candidateValue;\r\n\t            }\r\n\t        }\r\n\t        return solution;\r\n\t    };\r\n\t    ListWrapper.isImmutable = function (list) { return Object.isSealed(list); };\r\n\t    return ListWrapper;\r\n\t})();\r\n\texports.ListWrapper = ListWrapper;\r\n\tfunction isListLikeIterable(obj) {\r\n\t    if (!lang_1.isJsObject(obj))\r\n\t        return false;\r\n\t    return lang_1.isArray(obj) ||\r\n\t        (!(obj instanceof exports.Map) &&\r\n\t            lang_1.getSymbolIterator() in obj); // JS Iterable have a Symbol.iterator prop\r\n\t}\r\n\texports.isListLikeIterable = isListLikeIterable;\r\n\tfunction areIterablesEqual(a, b, comparator) {\r\n\t    var iterator1 = a[lang_1.getSymbolIterator()]();\r\n\t    var iterator2 = b[lang_1.getSymbolIterator()]();\r\n\t    while (true) {\r\n\t        var item1 = iterator1.next();\r\n\t        var item2 = iterator2.next();\r\n\t        if (item1.done && item2.done)\r\n\t            return true;\r\n\t        if (item1.done || item2.done)\r\n\t            return false;\r\n\t        if (!comparator(item1.value, item2.value))\r\n\t            return false;\r\n\t    }\r\n\t}\r\n\texports.areIterablesEqual = areIterablesEqual;\r\n\tfunction iterateListLike(obj, fn) {\r\n\t    if (lang_1.isArray(obj)) {\r\n\t        for (var i = 0; i < obj.length; i++) {\r\n\t            fn(obj[i]);\r\n\t        }\r\n\t    }\r\n\t    else {\r\n\t        var iterator = obj[lang_1.getSymbolIterator()]();\r\n\t        var item;\r\n\t        while (!((item = iterator.next()).done)) {\r\n\t            fn(item.value);\r\n\t        }\r\n\t    }\r\n\t}\r\n\texports.iterateListLike = iterateListLike;\r\n\t// Safari and Internet Explorer do not support the iterable parameter to the\r\n\t// Set constructor.  We work around that by manually adding the items.\r\n\tvar createSetFromList = (function () {\r\n\t    var test = new exports.Set([1, 2, 3]);\r\n\t    if (test.size === 3) {\r\n\t        return function createSetFromList(lst) { return new exports.Set(lst); };\r\n\t    }\r\n\t    else {\r\n\t        return function createSetAndPopulateFromList(lst) {\r\n\t            var res = new exports.Set(lst);\r\n\t            if (res.size !== lst.length) {\r\n\t                for (var i = 0; i < lst.length; i++) {\r\n\t                    res.add(lst[i]);\r\n\t                }\r\n\t            }\r\n\t            return res;\r\n\t        };\r\n\t    }\r\n\t})();\r\n\tvar SetWrapper = (function () {\r\n\t    function SetWrapper() {\r\n\t    }\r\n\t    SetWrapper.createFromList = function (lst) { return createSetFromList(lst); };\r\n\t    SetWrapper.has = function (s, key) { return s.has(key); };\r\n\t    SetWrapper.delete = function (m, k) { m.delete(k); };\r\n\t    return SetWrapper;\r\n\t})();\r\n\texports.SetWrapper = SetWrapper;\r\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar base_wrapped_exception_1 = __webpack_require__(313);\r\n\tvar exception_handler_1 = __webpack_require__(206);\r\n\tvar exception_handler_2 = __webpack_require__(206);\r\n\texports.ExceptionHandler = exception_handler_2.ExceptionHandler;\r\n\tvar BaseException = (function (_super) {\r\n\t    __extends(BaseException, _super);\r\n\t    function BaseException(message) {\r\n\t        if (message === void 0) { message = \"--\"; }\r\n\t        _super.call(this, message);\r\n\t        this.message = message;\r\n\t        this.stack = (new Error(message)).stack;\r\n\t    }\r\n\t    BaseException.prototype.toString = function () { return this.message; };\r\n\t    return BaseException;\r\n\t})(Error);\r\n\texports.BaseException = BaseException;\r\n\t/**\r\n\t * Wraps an exception and provides additional context or information.\r\n\t */\r\n\tvar WrappedException = (function (_super) {\r\n\t    __extends(WrappedException, _super);\r\n\t    function WrappedException(_wrapperMessage, _originalException, _originalStack, _context) {\r\n\t        _super.call(this, _wrapperMessage);\r\n\t        this._wrapperMessage = _wrapperMessage;\r\n\t        this._originalException = _originalException;\r\n\t        this._originalStack = _originalStack;\r\n\t        this._context = _context;\r\n\t        this._wrapperStack = (new Error(_wrapperMessage)).stack;\r\n\t    }\r\n\t    Object.defineProperty(WrappedException.prototype, \"wrapperMessage\", {\r\n\t        get: function () { return this._wrapperMessage; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(WrappedException.prototype, \"wrapperStack\", {\r\n\t        get: function () { return this._wrapperStack; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(WrappedException.prototype, \"originalException\", {\r\n\t        get: function () { return this._originalException; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(WrappedException.prototype, \"originalStack\", {\r\n\t        get: function () { return this._originalStack; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(WrappedException.prototype, \"context\", {\r\n\t        get: function () { return this._context; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(WrappedException.prototype, \"message\", {\r\n\t        get: function () { return exception_handler_1.ExceptionHandler.exceptionToString(this); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    WrappedException.prototype.toString = function () { return this.message; };\r\n\t    return WrappedException;\r\n\t})(base_wrapped_exception_1.BaseWrappedException);\r\n\texports.WrappedException = WrappedException;\r\n\tfunction makeTypeError(message) {\r\n\t    return new TypeError(message);\r\n\t}\r\n\texports.makeTypeError = makeTypeError;\r\n\tfunction unimplemented() {\r\n\t    throw new BaseException('unimplemented');\r\n\t}\r\n\texports.unimplemented = unimplemented;\r\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar isFunction_1 = __webpack_require__(116);\n\tvar Subscription_1 = __webpack_require__(28);\n\tvar rxSubscriber_1 = __webpack_require__(113);\n\tvar Observer_1 = __webpack_require__(385);\n\tvar Subscriber = (function (_super) {\n\t    __extends(Subscriber, _super);\n\t    function Subscriber(destinationOrNext, error, complete) {\n\t        _super.call(this);\n\t        this.syncErrorValue = null;\n\t        this.syncErrorThrown = false;\n\t        this.syncErrorThrowable = false;\n\t        this.isStopped = false;\n\t        switch (arguments.length) {\n\t            case 0:\n\t                this.destination = Observer_1.empty;\n\t                break;\n\t            case 1:\n\t                if (!destinationOrNext) {\n\t                    this.destination = Observer_1.empty;\n\t                    break;\n\t                }\n\t                if (typeof destinationOrNext === 'object') {\n\t                    if (destinationOrNext instanceof Subscriber) {\n\t                        this.destination = destinationOrNext;\n\t                    }\n\t                    else {\n\t                        this.syncErrorThrowable = true;\n\t                        this.destination = new SafeSubscriber(this, destinationOrNext);\n\t                    }\n\t                    break;\n\t                }\n\t            default:\n\t                this.syncErrorThrowable = true;\n\t                this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);\n\t                break;\n\t        }\n\t    }\n\t    Subscriber.create = function (next, error, complete) {\n\t        var subscriber = new Subscriber(next, error, complete);\n\t        subscriber.syncErrorThrowable = false;\n\t        return subscriber;\n\t    };\n\t    Subscriber.prototype.next = function (value) {\n\t        if (!this.isStopped) {\n\t            this._next(value);\n\t        }\n\t    };\n\t    Subscriber.prototype.error = function (err) {\n\t        if (!this.isStopped) {\n\t            this.isStopped = true;\n\t            this._error(err);\n\t        }\n\t    };\n\t    Subscriber.prototype.complete = function () {\n\t        if (!this.isStopped) {\n\t            this.isStopped = true;\n\t            this._complete();\n\t        }\n\t    };\n\t    Subscriber.prototype.unsubscribe = function () {\n\t        if (this.isUnsubscribed) {\n\t            return;\n\t        }\n\t        this.isStopped = true;\n\t        _super.prototype.unsubscribe.call(this);\n\t    };\n\t    Subscriber.prototype._next = function (value) {\n\t        this.destination.next(value);\n\t    };\n\t    Subscriber.prototype._error = function (err) {\n\t        this.destination.error(err);\n\t        this.unsubscribe();\n\t    };\n\t    Subscriber.prototype._complete = function () {\n\t        this.destination.complete();\n\t        this.unsubscribe();\n\t    };\n\t    Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () {\n\t        return this;\n\t    };\n\t    return Subscriber;\n\t}(Subscription_1.Subscription));\n\texports.Subscriber = Subscriber;\n\tvar SafeSubscriber = (function (_super) {\n\t    __extends(SafeSubscriber, _super);\n\t    function SafeSubscriber(_parent, observerOrNext, error, complete) {\n\t        _super.call(this);\n\t        this._parent = _parent;\n\t        var next;\n\t        var context = this;\n\t        if (isFunction_1.isFunction(observerOrNext)) {\n\t            next = observerOrNext;\n\t        }\n\t        else if (observerOrNext) {\n\t            context = observerOrNext;\n\t            next = observerOrNext.next;\n\t            error = observerOrNext.error;\n\t            complete = observerOrNext.complete;\n\t        }\n\t        this._context = context;\n\t        this._next = next;\n\t        this._error = error;\n\t        this._complete = complete;\n\t    }\n\t    SafeSubscriber.prototype.next = function (value) {\n\t        if (!this.isStopped && this._next) {\n\t            var _parent = this._parent;\n\t            if (!_parent.syncErrorThrowable) {\n\t                this.__tryOrUnsub(this._next, value);\n\t            }\n\t            else if (this.__tryOrSetError(_parent, this._next, value)) {\n\t                this.unsubscribe();\n\t            }\n\t        }\n\t    };\n\t    SafeSubscriber.prototype.error = function (err) {\n\t        if (!this.isStopped) {\n\t            var _parent = this._parent;\n\t            if (this._error) {\n\t                if (!_parent.syncErrorThrowable) {\n\t                    this.__tryOrUnsub(this._error, err);\n\t                    this.unsubscribe();\n\t                }\n\t                else {\n\t                    this.__tryOrSetError(_parent, this._error, err);\n\t                    this.unsubscribe();\n\t                }\n\t            }\n\t            else if (!_parent.syncErrorThrowable) {\n\t                this.unsubscribe();\n\t                throw err;\n\t            }\n\t            else {\n\t                _parent.syncErrorValue = err;\n\t                _parent.syncErrorThrown = true;\n\t                this.unsubscribe();\n\t            }\n\t        }\n\t    };\n\t    SafeSubscriber.prototype.complete = function () {\n\t        if (!this.isStopped) {\n\t            var _parent = this._parent;\n\t            if (this._complete) {\n\t                if (!_parent.syncErrorThrowable) {\n\t                    this.__tryOrUnsub(this._complete);\n\t                    this.unsubscribe();\n\t                }\n\t                else {\n\t                    this.__tryOrSetError(_parent, this._complete);\n\t                    this.unsubscribe();\n\t                }\n\t            }\n\t            else {\n\t                this.unsubscribe();\n\t            }\n\t        }\n\t    };\n\t    SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n\t        try {\n\t            fn.call(this._context, value);\n\t        }\n\t        catch (err) {\n\t            this.unsubscribe();\n\t            throw err;\n\t        }\n\t    };\n\t    SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n\t        try {\n\t            fn.call(this._context, value);\n\t        }\n\t        catch (err) {\n\t            parent.syncErrorValue = err;\n\t            parent.syncErrorThrown = true;\n\t            return true;\n\t        }\n\t        return false;\n\t    };\n\t    SafeSubscriber.prototype._unsubscribe = function () {\n\t        var _parent = this._parent;\n\t        this._context = null;\n\t        this._parent = null;\n\t        _parent.unsubscribe();\n\t    };\n\t    return SafeSubscriber;\n\t}(Subscriber));\n\t//# sourceMappingURL=Subscriber.js.map\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * The `di` module provides dependency injection container services.\r\n\t */\r\n\tfunction __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\tvar metadata_1 = __webpack_require__(80);\r\n\texports.InjectMetadata = metadata_1.InjectMetadata;\r\n\texports.OptionalMetadata = metadata_1.OptionalMetadata;\r\n\texports.InjectableMetadata = metadata_1.InjectableMetadata;\r\n\texports.SelfMetadata = metadata_1.SelfMetadata;\r\n\texports.HostMetadata = metadata_1.HostMetadata;\r\n\texports.SkipSelfMetadata = metadata_1.SkipSelfMetadata;\r\n\texports.DependencyMetadata = metadata_1.DependencyMetadata;\r\n\t// we have to reexport * because Dart and TS export two different sets of types\r\n\t__export(__webpack_require__(195));\r\n\tvar forward_ref_1 = __webpack_require__(197);\r\n\texports.forwardRef = forward_ref_1.forwardRef;\r\n\texports.resolveForwardRef = forward_ref_1.resolveForwardRef;\r\n\tvar injector_1 = __webpack_require__(304);\r\n\texports.Injector = injector_1.Injector;\r\n\tvar provider_1 = __webpack_require__(95);\r\n\texports.Binding = provider_1.Binding;\r\n\texports.ProviderBuilder = provider_1.ProviderBuilder;\r\n\texports.ResolvedFactory = provider_1.ResolvedFactory;\r\n\texports.Dependency = provider_1.Dependency;\r\n\texports.bind = provider_1.bind;\r\n\texports.Provider = provider_1.Provider;\r\n\texports.provide = provider_1.provide;\r\n\tvar key_1 = __webpack_require__(198);\r\n\texports.Key = key_1.Key;\r\n\tvar exceptions_1 = __webpack_require__(196);\r\n\texports.NoProviderError = exceptions_1.NoProviderError;\r\n\texports.AbstractProviderError = exceptions_1.AbstractProviderError;\r\n\texports.CyclicDependencyError = exceptions_1.CyclicDependencyError;\r\n\texports.InstantiationError = exceptions_1.InstantiationError;\r\n\texports.InvalidProviderError = exceptions_1.InvalidProviderError;\r\n\texports.NoAnnotationError = exceptions_1.NoAnnotationError;\r\n\texports.OutOfBoundsError = exceptions_1.OutOfBoundsError;\r\n\tvar opaque_token_1 = __webpack_require__(613);\r\n\texports.OpaqueToken = opaque_token_1.OpaqueToken;\r\n\n\n/***/ },\n/* 9 */,\n/* 10 */,\n/* 11 */,\n/* 12 */,\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar promise_1 = __webpack_require__(101);\r\n\texports.PromiseWrapper = promise_1.PromiseWrapper;\r\n\texports.PromiseCompleter = promise_1.PromiseCompleter;\r\n\tvar Subject_1 = __webpack_require__(25);\r\n\tvar PromiseObservable_1 = __webpack_require__(110);\r\n\tvar toPromise_1 = __webpack_require__(252);\r\n\tvar Observable_1 = __webpack_require__(2);\r\n\texports.Observable = Observable_1.Observable;\r\n\tvar Subject_2 = __webpack_require__(25);\r\n\texports.Subject = Subject_2.Subject;\r\n\tvar TimerWrapper = (function () {\r\n\t    function TimerWrapper() {\r\n\t    }\r\n\t    TimerWrapper.setTimeout = function (fn, millis) {\r\n\t        return lang_1.global.setTimeout(fn, millis);\r\n\t    };\r\n\t    TimerWrapper.clearTimeout = function (id) { lang_1.global.clearTimeout(id); };\r\n\t    TimerWrapper.setInterval = function (fn, millis) {\r\n\t        return lang_1.global.setInterval(fn, millis);\r\n\t    };\r\n\t    TimerWrapper.clearInterval = function (id) { lang_1.global.clearInterval(id); };\r\n\t    return TimerWrapper;\r\n\t})();\r\n\texports.TimerWrapper = TimerWrapper;\r\n\tvar ObservableWrapper = (function () {\r\n\t    function ObservableWrapper() {\r\n\t    }\r\n\t    // TODO(vsavkin): when we use rxnext, try inferring the generic type from the first arg\r\n\t    ObservableWrapper.subscribe = function (emitter, onNext, onError, onComplete) {\r\n\t        if (onComplete === void 0) { onComplete = function () { }; }\r\n\t        onError = (typeof onError === \"function\") && onError || lang_1.noop;\r\n\t        onComplete = (typeof onComplete === \"function\") && onComplete || lang_1.noop;\r\n\t        return emitter.subscribe({ next: onNext, error: onError, complete: onComplete });\r\n\t    };\r\n\t    ObservableWrapper.isObservable = function (obs) { return !!obs.subscribe; };\r\n\t    /**\r\n\t     * Returns whether `obs` has any subscribers listening to events.\r\n\t     */\r\n\t    ObservableWrapper.hasSubscribers = function (obs) { return obs.observers.length > 0; };\r\n\t    ObservableWrapper.dispose = function (subscription) { subscription.unsubscribe(); };\r\n\t    /**\r\n\t     * @deprecated - use callEmit() instead\r\n\t     */\r\n\t    ObservableWrapper.callNext = function (emitter, value) { emitter.next(value); };\r\n\t    ObservableWrapper.callEmit = function (emitter, value) { emitter.emit(value); };\r\n\t    ObservableWrapper.callError = function (emitter, error) { emitter.error(error); };\r\n\t    ObservableWrapper.callComplete = function (emitter) { emitter.complete(); };\r\n\t    ObservableWrapper.fromPromise = function (promise) {\r\n\t        return PromiseObservable_1.PromiseObservable.create(promise);\r\n\t    };\r\n\t    ObservableWrapper.toPromise = function (obj) { return toPromise_1.toPromise.call(obj); };\r\n\t    return ObservableWrapper;\r\n\t})();\r\n\texports.ObservableWrapper = ObservableWrapper;\r\n\t/**\r\n\t * Use by directives and components to emit custom Events.\r\n\t *\r\n\t * ### Examples\r\n\t *\r\n\t * In the following example, `Zippy` alternatively emits `open` and `close` events when its\r\n\t * title gets clicked:\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'zippy',\r\n\t *   template: `\r\n\t *   <div class=\"zippy\">\r\n\t *     <div (click)=\"toggle()\">Toggle</div>\r\n\t *     <div [hidden]=\"!visible\">\r\n\t *       <ng-content></ng-content>\r\n\t *     </div>\r\n\t *  </div>`})\r\n\t * export class Zippy {\r\n\t *   visible: boolean = true;\r\n\t *   @Output() open: EventEmitter<any> = new EventEmitter();\r\n\t *   @Output() close: EventEmitter<any> = new EventEmitter();\r\n\t *\r\n\t *   toggle() {\r\n\t *     this.visible = !this.visible;\r\n\t *     if (this.visible) {\r\n\t *       this.open.emit(null);\r\n\t *     } else {\r\n\t *       this.close.emit(null);\r\n\t *     }\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Use Rx.Observable but provides an adapter to make it work as specified here:\r\n\t * https://github.com/jhusain/observable-spec\r\n\t *\r\n\t * Once a reference implementation of the spec is available, switch to it.\r\n\t */\r\n\tvar EventEmitter = (function (_super) {\r\n\t    __extends(EventEmitter, _super);\r\n\t    /**\r\n\t     * Creates an instance of [EventEmitter], which depending on [isAsync],\r\n\t     * delivers events synchronously or asynchronously.\r\n\t     */\r\n\t    function EventEmitter(isAsync) {\r\n\t        if (isAsync === void 0) { isAsync = true; }\r\n\t        _super.call(this);\r\n\t        this._isAsync = isAsync;\r\n\t    }\r\n\t    EventEmitter.prototype.emit = function (value) { _super.prototype.next.call(this, value); };\r\n\t    /**\r\n\t     * @deprecated - use .emit(value) instead\r\n\t     */\r\n\t    EventEmitter.prototype.next = function (value) { _super.prototype.next.call(this, value); };\r\n\t    EventEmitter.prototype.subscribe = function (generatorOrNext, error, complete) {\r\n\t        var schedulerFn;\r\n\t        var errorFn = function (err) { return null; };\r\n\t        var completeFn = function () { return null; };\r\n\t        if (generatorOrNext && typeof generatorOrNext === 'object') {\r\n\t            schedulerFn = this._isAsync ? function (value) { setTimeout(function () { return generatorOrNext.next(value); }); } :\r\n\t                function (value) { generatorOrNext.next(value); };\r\n\t            if (generatorOrNext.error) {\r\n\t                errorFn = this._isAsync ? function (err) { setTimeout(function () { return generatorOrNext.error(err); }); } :\r\n\t                    function (err) { generatorOrNext.error(err); };\r\n\t            }\r\n\t            if (generatorOrNext.complete) {\r\n\t                completeFn = this._isAsync ? function () { setTimeout(function () { return generatorOrNext.complete(); }); } :\r\n\t                    function () { generatorOrNext.complete(); };\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            schedulerFn = this._isAsync ? function (value) { setTimeout(function () { return generatorOrNext(value); }); } :\r\n\t                function (value) { generatorOrNext(value); };\r\n\t            if (error) {\r\n\t                errorFn =\r\n\t                    this._isAsync ? function (err) { setTimeout(function () { return error(err); }); } : function (err) { error(err); };\r\n\t            }\r\n\t            if (complete) {\r\n\t                completeFn =\r\n\t                    this._isAsync ? function () { setTimeout(function () { return complete(); }); } : function () { complete(); };\r\n\t            }\r\n\t        }\r\n\t        return _super.prototype.subscribe.call(this, schedulerFn, errorFn, completeFn);\r\n\t    };\r\n\t    return EventEmitter;\r\n\t})(Subject_1.Subject);\r\n\texports.EventEmitter = EventEmitter;\r\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar Subscriber_1 = __webpack_require__(7);\n\tvar OuterSubscriber = (function (_super) {\n\t    __extends(OuterSubscriber, _super);\n\t    function OuterSubscriber() {\n\t        _super.apply(this, arguments);\n\t    }\n\t    OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n\t        this.destination.next(innerValue);\n\t    };\n\t    OuterSubscriber.prototype.notifyError = function (error, innerSub) {\n\t        this.destination.error(error);\n\t    };\n\t    OuterSubscriber.prototype.notifyComplete = function (innerSub) {\n\t        this.destination.complete();\n\t    };\n\t    return OuterSubscriber;\n\t}(Subscriber_1.Subscriber));\n\texports.OuterSubscriber = OuterSubscriber;\n\t//# sourceMappingURL=OuterSubscriber.js.map\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar root_1 = __webpack_require__(45);\n\tvar isArray_1 = __webpack_require__(55);\n\tvar isPromise_1 = __webpack_require__(168);\n\tvar Observable_1 = __webpack_require__(2);\n\tvar SymbolShim_1 = __webpack_require__(74);\n\tvar InnerSubscriber_1 = __webpack_require__(384);\n\tfunction subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {\n\t    var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n\t    if (destination.isUnsubscribed) {\n\t        return;\n\t    }\n\t    if (result instanceof Observable_1.Observable) {\n\t        if (result._isScalar) {\n\t            destination.next(result.value);\n\t            destination.complete();\n\t            return;\n\t        }\n\t        else {\n\t            return result.subscribe(destination);\n\t        }\n\t    }\n\t    if (isArray_1.isArray(result)) {\n\t        for (var i = 0, len = result.length; i < len && !destination.isUnsubscribed; i++) {\n\t            destination.next(result[i]);\n\t        }\n\t        if (!destination.isUnsubscribed) {\n\t            destination.complete();\n\t        }\n\t    }\n\t    else if (isPromise_1.isPromise(result)) {\n\t        result.then(function (value) {\n\t            if (!destination.isUnsubscribed) {\n\t                destination.next(value);\n\t                destination.complete();\n\t            }\n\t        }, function (err) { return destination.error(err); })\n\t            .then(null, function (err) {\n\t            // Escaping the Promise trap: globally throw unhandled errors\n\t            root_1.root.setTimeout(function () { throw err; });\n\t        });\n\t        return destination;\n\t    }\n\t    else if (typeof result[SymbolShim_1.SymbolShim.iterator] === 'function') {\n\t        for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n\t            var item = result_1[_i];\n\t            destination.next(item);\n\t            if (destination.isUnsubscribed) {\n\t                break;\n\t            }\n\t        }\n\t        if (!destination.isUnsubscribed) {\n\t            destination.complete();\n\t        }\n\t    }\n\t    else if (typeof result[SymbolShim_1.SymbolShim.observable] === 'function') {\n\t        var obs = result[SymbolShim_1.SymbolShim.observable]();\n\t        if (typeof obs.subscribe !== 'function') {\n\t            destination.error('invalid observable');\n\t        }\n\t        else {\n\t            return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));\n\t        }\n\t    }\n\t    else {\n\t        destination.error(new TypeError('unknown type returned'));\n\t    }\n\t}\n\texports.subscribeToResult = subscribeToResult;\n\t//# sourceMappingURL=subscribeToResult.js.map\n\n/***/ },\n/* 16 */,\n/* 17 */,\n/* 18 */,\n/* 19 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// typeof any so that it we don't have to cast when comparing a result to the error object\n\texports.errorObject = { e: {} };\n\t//# sourceMappingURL=errorObject.js.map\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\texports.DOM = null;\r\n\tfunction setRootDomAdapter(adapter) {\r\n\t    if (lang_1.isBlank(exports.DOM)) {\r\n\t        exports.DOM = adapter;\r\n\t    }\r\n\t}\r\n\texports.setRootDomAdapter = setRootDomAdapter;\r\n\t/* tslint:disable:requireParameterType */\r\n\t/**\r\n\t * Provides DOM operations in an environment-agnostic way.\r\n\t */\r\n\tvar DomAdapter = (function () {\r\n\t    function DomAdapter() {\r\n\t    }\r\n\t    Object.defineProperty(DomAdapter.prototype, \"attrToPropMap\", {\r\n\t        /**\r\n\t         * Maps attribute names to their corresponding property names for cases\r\n\t         * where attribute name doesn't match property name.\r\n\t         */\r\n\t        get: function () { return this._attrToPropMap; },\r\n\t        set: function (value) { this._attrToPropMap = value; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    ;\r\n\t    return DomAdapter;\r\n\t})();\r\n\texports.DomAdapter = DomAdapter;\r\n\n\n/***/ },\n/* 21 */,\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar errorObject_1 = __webpack_require__(19);\n\tvar tryCatchTarget;\n\tfunction tryCatcher() {\n\t    try {\n\t        return tryCatchTarget.apply(this, arguments);\n\t    }\n\t    catch (e) {\n\t        errorObject_1.errorObject.e = e;\n\t        return errorObject_1.errorObject;\n\t    }\n\t}\n\tfunction tryCatch(fn) {\n\t    tryCatchTarget = fn;\n\t    return tryCatcher;\n\t}\n\texports.tryCatch = tryCatch;\n\t;\n\t//# sourceMappingURL=tryCatch.js.map\n\n/***/ },\n/* 23 */,\n/* 24 */,\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar Observable_1 = __webpack_require__(2);\n\tvar Subscriber_1 = __webpack_require__(7);\n\tvar Subscription_1 = __webpack_require__(28);\n\tvar SubjectSubscription_1 = __webpack_require__(577);\n\tvar rxSubscriber_1 = __webpack_require__(113);\n\tvar throwError_1 = __webpack_require__(258);\n\tvar ObjectUnsubscribedError_1 = __webpack_require__(166);\n\tvar Subject = (function (_super) {\n\t    __extends(Subject, _super);\n\t    function Subject(destination, source) {\n\t        _super.call(this);\n\t        this.destination = destination;\n\t        this.source = source;\n\t        this.observers = [];\n\t        this.isUnsubscribed = false;\n\t        this.isStopped = false;\n\t        this.hasErrored = false;\n\t        this.dispatching = false;\n\t        this.hasCompleted = false;\n\t    }\n\t    Subject.prototype.lift = function (operator) {\n\t        var subject = new Subject(this.destination || this, this);\n\t        subject.operator = operator;\n\t        return subject;\n\t    };\n\t    Subject.prototype.add = function (subscription) {\n\t        Subscription_1.Subscription.prototype.add.call(this, subscription);\n\t    };\n\t    Subject.prototype.remove = function (subscription) {\n\t        Subscription_1.Subscription.prototype.remove.call(this, subscription);\n\t    };\n\t    Subject.prototype.unsubscribe = function () {\n\t        Subscription_1.Subscription.prototype.unsubscribe.call(this);\n\t    };\n\t    Subject.prototype._subscribe = function (subscriber) {\n\t        if (this.source) {\n\t            return this.source.subscribe(subscriber);\n\t        }\n\t        else {\n\t            if (subscriber.isUnsubscribed) {\n\t                return;\n\t            }\n\t            else if (this.hasErrored) {\n\t                return subscriber.error(this.errorValue);\n\t            }\n\t            else if (this.hasCompleted) {\n\t                return subscriber.complete();\n\t            }\n\t            this.throwIfUnsubscribed();\n\t            var subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n\t            this.observers.push(subscriber);\n\t            return subscription;\n\t        }\n\t    };\n\t    Subject.prototype._unsubscribe = function () {\n\t        this.source = null;\n\t        this.isStopped = true;\n\t        this.observers = null;\n\t        this.destination = null;\n\t    };\n\t    Subject.prototype.next = function (value) {\n\t        this.throwIfUnsubscribed();\n\t        if (this.isStopped) {\n\t            return;\n\t        }\n\t        this.dispatching = true;\n\t        this._next(value);\n\t        this.dispatching = false;\n\t        if (this.hasErrored) {\n\t            this._error(this.errorValue);\n\t        }\n\t        else if (this.hasCompleted) {\n\t            this._complete();\n\t        }\n\t    };\n\t    Subject.prototype.error = function (err) {\n\t        this.throwIfUnsubscribed();\n\t        if (this.isStopped) {\n\t            return;\n\t        }\n\t        this.isStopped = true;\n\t        this.hasErrored = true;\n\t        this.errorValue = err;\n\t        if (this.dispatching) {\n\t            return;\n\t        }\n\t        this._error(err);\n\t    };\n\t    Subject.prototype.complete = function () {\n\t        this.throwIfUnsubscribed();\n\t        if (this.isStopped) {\n\t            return;\n\t        }\n\t        this.isStopped = true;\n\t        this.hasCompleted = true;\n\t        if (this.dispatching) {\n\t            return;\n\t        }\n\t        this._complete();\n\t    };\n\t    Subject.prototype.asObservable = function () {\n\t        var observable = new SubjectObservable(this);\n\t        return observable;\n\t    };\n\t    Subject.prototype._next = function (value) {\n\t        if (this.destination) {\n\t            this.destination.next(value);\n\t        }\n\t        else {\n\t            this._finalNext(value);\n\t        }\n\t    };\n\t    Subject.prototype._finalNext = function (value) {\n\t        var index = -1;\n\t        var observers = this.observers.slice(0);\n\t        var len = observers.length;\n\t        while (++index < len) {\n\t            observers[index].next(value);\n\t        }\n\t    };\n\t    Subject.prototype._error = function (err) {\n\t        if (this.destination) {\n\t            this.destination.error(err);\n\t        }\n\t        else {\n\t            this._finalError(err);\n\t        }\n\t    };\n\t    Subject.prototype._finalError = function (err) {\n\t        var index = -1;\n\t        var observers = this.observers;\n\t        // optimization to block our SubjectSubscriptions from\n\t        // splicing themselves out of the observers list one by one.\n\t        this.observers = null;\n\t        this.isUnsubscribed = true;\n\t        if (observers) {\n\t            var len = observers.length;\n\t            while (++index < len) {\n\t                observers[index].error(err);\n\t            }\n\t        }\n\t        this.isUnsubscribed = false;\n\t        this.unsubscribe();\n\t    };\n\t    Subject.prototype._complete = function () {\n\t        if (this.destination) {\n\t            this.destination.complete();\n\t        }\n\t        else {\n\t            this._finalComplete();\n\t        }\n\t    };\n\t    Subject.prototype._finalComplete = function () {\n\t        var index = -1;\n\t        var observers = this.observers;\n\t        // optimization to block our SubjectSubscriptions from\n\t        // splicing themselves out of the observers list one by one.\n\t        this.observers = null;\n\t        this.isUnsubscribed = true;\n\t        if (observers) {\n\t            var len = observers.length;\n\t            while (++index < len) {\n\t                observers[index].complete();\n\t            }\n\t        }\n\t        this.isUnsubscribed = false;\n\t        this.unsubscribe();\n\t    };\n\t    Subject.prototype.throwIfUnsubscribed = function () {\n\t        if (this.isUnsubscribed) {\n\t            throwError_1.throwError(new ObjectUnsubscribedError_1.ObjectUnsubscribedError());\n\t        }\n\t    };\n\t    Subject.prototype[rxSubscriber_1.rxSubscriber] = function () {\n\t        return new Subscriber_1.Subscriber(this);\n\t    };\n\t    Subject.create = function (destination, source) {\n\t        return new Subject(destination, source);\n\t    };\n\t    return Subject;\n\t}(Observable_1.Observable));\n\texports.Subject = Subject;\n\tvar SubjectObservable = (function (_super) {\n\t    __extends(SubjectObservable, _super);\n\t    function SubjectObservable(source) {\n\t        _super.call(this);\n\t        this.source = source;\n\t    }\n\t    return SubjectObservable;\n\t}(Observable_1.Observable));\n\t//# sourceMappingURL=Subject.js.map\n\n/***/ },\n/* 26 */,\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var reflector_1 = __webpack_require__(311);\r\n\tvar reflector_2 = __webpack_require__(311);\r\n\texports.Reflector = reflector_2.Reflector;\r\n\texports.ReflectionInfo = reflector_2.ReflectionInfo;\r\n\tvar reflection_capabilities_1 = __webpack_require__(310);\r\n\t/**\r\n\t * The {@link Reflector} used internally in Angular to access metadata\r\n\t * about symbols.\r\n\t */\r\n\texports.reflector = new reflector_1.Reflector(new reflection_capabilities_1.ReflectionCapabilities());\r\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar isArray_1 = __webpack_require__(55);\n\tvar isObject_1 = __webpack_require__(257);\n\tvar isFunction_1 = __webpack_require__(116);\n\tvar tryCatch_1 = __webpack_require__(22);\n\tvar errorObject_1 = __webpack_require__(19);\n\tvar Subscription = (function () {\n\t    function Subscription(_unsubscribe) {\n\t        this.isUnsubscribed = false;\n\t        if (_unsubscribe) {\n\t            this._unsubscribe = _unsubscribe;\n\t        }\n\t    }\n\t    Subscription.prototype.unsubscribe = function () {\n\t        var hasErrors = false;\n\t        var errors;\n\t        if (this.isUnsubscribed) {\n\t            return;\n\t        }\n\t        this.isUnsubscribed = true;\n\t        var _a = this, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n\t        this._subscriptions = null;\n\t        if (isFunction_1.isFunction(_unsubscribe)) {\n\t            var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);\n\t            if (trial === errorObject_1.errorObject) {\n\t                hasErrors = true;\n\t                (errors = errors || []).push(errorObject_1.errorObject.e);\n\t            }\n\t        }\n\t        if (isArray_1.isArray(_subscriptions)) {\n\t            var index = -1;\n\t            var len = _subscriptions.length;\n\t            while (++index < len) {\n\t                var sub = _subscriptions[index];\n\t                if (isObject_1.isObject(sub)) {\n\t                    var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);\n\t                    if (trial === errorObject_1.errorObject) {\n\t                        hasErrors = true;\n\t                        errors = errors || [];\n\t                        var err = errorObject_1.errorObject.e;\n\t                        if (err instanceof UnsubscriptionError) {\n\t                            errors = errors.concat(err.errors);\n\t                        }\n\t                        else {\n\t                            errors.push(err);\n\t                        }\n\t                    }\n\t                }\n\t            }\n\t        }\n\t        if (hasErrors) {\n\t            throw new UnsubscriptionError(errors);\n\t        }\n\t    };\n\t    Subscription.prototype.add = function (subscription) {\n\t        // return early if:\n\t        //  1. the subscription is null\n\t        //  2. we're attempting to add our this\n\t        //  3. we're attempting to add the static `empty` Subscription\n\t        if (!subscription || (subscription === this) || (subscription === Subscription.EMPTY)) {\n\t            return;\n\t        }\n\t        var sub = subscription;\n\t        switch (typeof subscription) {\n\t            case 'function':\n\t                sub = new Subscription(subscription);\n\t            case 'object':\n\t                if (sub.isUnsubscribed || typeof sub.unsubscribe !== 'function') {\n\t                    break;\n\t                }\n\t                else if (this.isUnsubscribed) {\n\t                    sub.unsubscribe();\n\t                }\n\t                else {\n\t                    (this._subscriptions || (this._subscriptions = [])).push(sub);\n\t                }\n\t                break;\n\t            default:\n\t                throw new Error('Unrecognized subscription ' + subscription + ' added to Subscription.');\n\t        }\n\t    };\n\t    Subscription.prototype.remove = function (subscription) {\n\t        // return early if:\n\t        //  1. the subscription is null\n\t        //  2. we're attempting to remove ourthis\n\t        //  3. we're attempting to remove the static `empty` Subscription\n\t        if (subscription == null || (subscription === this) || (subscription === Subscription.EMPTY)) {\n\t            return;\n\t        }\n\t        var subscriptions = this._subscriptions;\n\t        if (subscriptions) {\n\t            var subscriptionIndex = subscriptions.indexOf(subscription);\n\t            if (subscriptionIndex !== -1) {\n\t                subscriptions.splice(subscriptionIndex, 1);\n\t            }\n\t        }\n\t    };\n\t    Subscription.EMPTY = (function (empty) {\n\t        empty.isUnsubscribed = true;\n\t        return empty;\n\t    }(new Subscription()));\n\t    return Subscription;\n\t}());\n\texports.Subscription = Subscription;\n\tvar UnsubscriptionError = (function (_super) {\n\t    __extends(UnsubscriptionError, _super);\n\t    function UnsubscriptionError(errors) {\n\t        _super.call(this, 'unsubscriptoin error(s)');\n\t        this.errors = errors;\n\t        this.name = 'UnsubscriptionError';\n\t    }\n\t    return UnsubscriptionError;\n\t}(Error));\n\texports.UnsubscriptionError = UnsubscriptionError;\n\t//# sourceMappingURL=Subscription.js.map\n\n/***/ },\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */,\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */,\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var iterable_differs_1 = __webpack_require__(296);\r\n\tvar default_iterable_differ_1 = __webpack_require__(294);\r\n\tvar keyvalue_differs_1 = __webpack_require__(297);\r\n\tvar default_keyvalue_differ_1 = __webpack_require__(295);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar default_keyvalue_differ_2 = __webpack_require__(295);\r\n\texports.DefaultKeyValueDifferFactory = default_keyvalue_differ_2.DefaultKeyValueDifferFactory;\r\n\texports.KeyValueChangeRecord = default_keyvalue_differ_2.KeyValueChangeRecord;\r\n\tvar default_iterable_differ_2 = __webpack_require__(294);\r\n\texports.DefaultIterableDifferFactory = default_iterable_differ_2.DefaultIterableDifferFactory;\r\n\texports.CollectionChangeRecord = default_iterable_differ_2.CollectionChangeRecord;\r\n\tvar ast_1 = __webpack_require__(127);\r\n\texports.ASTWithSource = ast_1.ASTWithSource;\r\n\texports.AST = ast_1.AST;\r\n\texports.AstTransformer = ast_1.AstTransformer;\r\n\texports.PropertyRead = ast_1.PropertyRead;\r\n\texports.LiteralArray = ast_1.LiteralArray;\r\n\texports.ImplicitReceiver = ast_1.ImplicitReceiver;\r\n\tvar lexer_1 = __webpack_require__(300);\r\n\texports.Lexer = lexer_1.Lexer;\r\n\tvar parser_1 = __webpack_require__(609);\r\n\texports.Parser = parser_1.Parser;\r\n\tvar locals_1 = __webpack_require__(301);\r\n\texports.Locals = locals_1.Locals;\r\n\tvar exceptions_1 = __webpack_require__(299);\r\n\texports.DehydratedException = exceptions_1.DehydratedException;\r\n\texports.ExpressionChangedAfterItHasBeenCheckedException = exceptions_1.ExpressionChangedAfterItHasBeenCheckedException;\r\n\texports.ChangeDetectionError = exceptions_1.ChangeDetectionError;\r\n\tvar interfaces_1 = __webpack_require__(193);\r\n\texports.ChangeDetectorDefinition = interfaces_1.ChangeDetectorDefinition;\r\n\texports.DebugContext = interfaces_1.DebugContext;\r\n\texports.ChangeDetectorGenConfig = interfaces_1.ChangeDetectorGenConfig;\r\n\tvar constants_1 = __webpack_require__(57);\r\n\texports.ChangeDetectionStrategy = constants_1.ChangeDetectionStrategy;\r\n\texports.CHANGE_DETECTION_STRATEGY_VALUES = constants_1.CHANGE_DETECTION_STRATEGY_VALUES;\r\n\tvar proto_change_detector_1 = __webpack_require__(302);\r\n\texports.DynamicProtoChangeDetector = proto_change_detector_1.DynamicProtoChangeDetector;\r\n\tvar jit_proto_change_detector_1 = __webpack_require__(608);\r\n\texports.JitProtoChangeDetector = jit_proto_change_detector_1.JitProtoChangeDetector;\r\n\tvar binding_record_1 = __webpack_require__(290);\r\n\texports.BindingRecord = binding_record_1.BindingRecord;\r\n\texports.BindingTarget = binding_record_1.BindingTarget;\r\n\tvar directive_record_1 = __webpack_require__(192);\r\n\texports.DirectiveIndex = directive_record_1.DirectiveIndex;\r\n\texports.DirectiveRecord = directive_record_1.DirectiveRecord;\r\n\tvar dynamic_change_detector_1 = __webpack_require__(298);\r\n\texports.DynamicChangeDetector = dynamic_change_detector_1.DynamicChangeDetector;\r\n\tvar change_detector_ref_1 = __webpack_require__(292);\r\n\texports.ChangeDetectorRef = change_detector_ref_1.ChangeDetectorRef;\r\n\tvar iterable_differs_2 = __webpack_require__(296);\r\n\texports.IterableDiffers = iterable_differs_2.IterableDiffers;\r\n\tvar keyvalue_differs_2 = __webpack_require__(297);\r\n\texports.KeyValueDiffers = keyvalue_differs_2.KeyValueDiffers;\r\n\tvar change_detection_util_1 = __webpack_require__(79);\r\n\texports.WrappedValue = change_detection_util_1.WrappedValue;\r\n\texports.SimpleChange = change_detection_util_1.SimpleChange;\r\n\t/**\r\n\t * Structural diffing for `Object`s and `Map`s.\r\n\t */\r\n\texports.keyValDiff = lang_1.CONST_EXPR([lang_1.CONST_EXPR(new default_keyvalue_differ_1.DefaultKeyValueDifferFactory())]);\r\n\t/**\r\n\t * Structural diffing for `Iterable` types such as `Array`s.\r\n\t */\r\n\texports.iterableDiff = lang_1.CONST_EXPR([lang_1.CONST_EXPR(new default_iterable_differ_1.DefaultIterableDifferFactory())]);\r\n\texports.defaultIterableDiffers = lang_1.CONST_EXPR(new iterable_differs_1.IterableDiffers(exports.iterableDiff));\r\n\texports.defaultKeyValueDiffers = lang_1.CONST_EXPR(new keyvalue_differs_1.KeyValueDiffers(exports.keyValDiff));\r\n\n\n/***/ },\n/* 38 */,\n/* 39 */,\n/* 40 */,\n/* 41 */,\n/* 42 */,\n/* 43 */,\n/* 44 */,\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(module, global) {\"use strict\";\n\tvar objectTypes = {\n\t    'boolean': false,\n\t    'function': true,\n\t    'object': true,\n\t    'number': false,\n\t    'string': false,\n\t    'undefined': false\n\t};\n\texports.root = (objectTypes[typeof self] && self) || (objectTypes[typeof window] && window);\n\t/* tslint:disable:no-unused-variable */\n\tvar freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\tvar freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\n\tvar freeGlobal = objectTypes[typeof global] && global;\n\tif (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n\t    exports.root = freeGlobal;\n\t}\n\t//# sourceMappingURL=root.js.map\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(833)(module), (function() { return this; }())))\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Used to provide a {@link ControlValueAccessor} for form controls.\r\n\t *\r\n\t * See {@link DefaultValueAccessor} for how to implement one.\r\n\t */\r\n\texports.NG_VALUE_ACCESSOR = lang_1.CONST_EXPR(new core_1.OpaqueToken(\"NgValueAccessor\"));\r\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar promise_1 = __webpack_require__(101);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar core_1 = __webpack_require__(4);\r\n\t/**\r\n\t * Providers for validators to be used for {@link Control}s in a form.\r\n\t *\r\n\t * Provide this using `multi: true` to add validators.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/forms/ts/ng_validators/ng_validators.ts region='ng_validators'}\r\n\t */\r\n\texports.NG_VALIDATORS = lang_1.CONST_EXPR(new core_1.OpaqueToken(\"NgValidators\"));\r\n\t/**\r\n\t * Providers for asynchronous validators to be used for {@link Control}s\r\n\t * in a form.\r\n\t *\r\n\t * Provide this using `multi: true` to add validators.\r\n\t *\r\n\t * See {@link NG_VALIDATORS} for more details.\r\n\t */\r\n\texports.NG_ASYNC_VALIDATORS = lang_1.CONST_EXPR(new core_1.OpaqueToken(\"NgAsyncValidators\"));\r\n\t/**\r\n\t * Provides a set of validators used by form controls.\r\n\t *\r\n\t * A validator is a function that processes a {@link Control} or collection of\r\n\t * controls and returns a map of errors. A null map means that validation has passed.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * var loginControl = new Control(\"\", Validators.required)\r\n\t * ```\r\n\t */\r\n\tvar Validators = (function () {\r\n\t    function Validators() {\r\n\t    }\r\n\t    /**\r\n\t     * Validator that requires controls to have a non-empty value.\r\n\t     */\r\n\t    Validators.required = function (control) {\r\n\t        return lang_1.isBlank(control.value) || (lang_1.isString(control.value) && control.value == \"\") ?\r\n\t            { \"required\": true } :\r\n\t            null;\r\n\t    };\r\n\t    /**\r\n\t     * Validator that requires controls to have a value of a minimum length.\r\n\t     */\r\n\t    Validators.minLength = function (minLength) {\r\n\t        return function (control) {\r\n\t            if (lang_1.isPresent(Validators.required(control)))\r\n\t                return null;\r\n\t            var v = control.value;\r\n\t            return v.length < minLength ?\r\n\t                { \"minlength\": { \"requiredLength\": minLength, \"actualLength\": v.length } } :\r\n\t                null;\r\n\t        };\r\n\t    };\r\n\t    /**\r\n\t     * Validator that requires controls to have a value of a maximum length.\r\n\t     */\r\n\t    Validators.maxLength = function (maxLength) {\r\n\t        return function (control) {\r\n\t            if (lang_1.isPresent(Validators.required(control)))\r\n\t                return null;\r\n\t            var v = control.value;\r\n\t            return v.length > maxLength ?\r\n\t                { \"maxlength\": { \"requiredLength\": maxLength, \"actualLength\": v.length } } :\r\n\t                null;\r\n\t        };\r\n\t    };\r\n\t    /**\r\n\t     * Validator that requires a control to match a regex to its value.\r\n\t     */\r\n\t    Validators.pattern = function (pattern) {\r\n\t        return function (control) {\r\n\t            if (lang_1.isPresent(Validators.required(control)))\r\n\t                return null;\r\n\t            var regex = new RegExp(\"^\" + pattern + \"$\");\r\n\t            var v = control.value;\r\n\t            return regex.test(v) ? null :\r\n\t                { \"pattern\": { \"requiredPattern\": \"^\" + pattern + \"$\", \"actualValue\": v } };\r\n\t        };\r\n\t    };\r\n\t    /**\r\n\t     * No-op validator.\r\n\t     */\r\n\t    Validators.nullValidator = function (c) { return null; };\r\n\t    /**\r\n\t     * Compose multiple validators into a single function that returns the union\r\n\t     * of the individual error maps.\r\n\t     */\r\n\t    Validators.compose = function (validators) {\r\n\t        if (lang_1.isBlank(validators))\r\n\t            return null;\r\n\t        var presentValidators = validators.filter(lang_1.isPresent);\r\n\t        if (presentValidators.length == 0)\r\n\t            return null;\r\n\t        return function (control) {\r\n\t            return _mergeErrors(_executeValidators(control, presentValidators));\r\n\t        };\r\n\t    };\r\n\t    Validators.composeAsync = function (validators) {\r\n\t        if (lang_1.isBlank(validators))\r\n\t            return null;\r\n\t        var presentValidators = validators.filter(lang_1.isPresent);\r\n\t        if (presentValidators.length == 0)\r\n\t            return null;\r\n\t        return function (control) {\r\n\t            var promises = _executeAsyncValidators(control, presentValidators).map(_convertToPromise);\r\n\t            return promise_1.PromiseWrapper.all(promises).then(_mergeErrors);\r\n\t        };\r\n\t    };\r\n\t    return Validators;\r\n\t})();\r\n\texports.Validators = Validators;\r\n\tfunction _convertToPromise(obj) {\r\n\t    return promise_1.PromiseWrapper.isPromise(obj) ? obj : async_1.ObservableWrapper.toPromise(obj);\r\n\t}\r\n\tfunction _executeValidators(control, validators) {\r\n\t    return validators.map(function (v) { return v(control); });\r\n\t}\r\n\tfunction _executeAsyncValidators(control, validators) {\r\n\t    return validators.map(function (v) { return v(control); });\r\n\t}\r\n\tfunction _mergeErrors(arrayOfErrors) {\r\n\t    var res = arrayOfErrors.reduce(function (res, errors) {\r\n\t        return lang_1.isPresent(errors) ? collection_1.StringMapWrapper.merge(res, errors) : res;\r\n\t    }, {});\r\n\t    return collection_1.StringMapWrapper.isEmpty(res) ? null : res;\r\n\t}\r\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar InvalidPipeArgumentException = (function (_super) {\r\n\t    __extends(InvalidPipeArgumentException, _super);\r\n\t    function InvalidPipeArgumentException(type, value) {\r\n\t        _super.call(this, \"Invalid argument '\" + value + \"' for pipe '\" + lang_1.stringify(type) + \"'\");\r\n\t    }\r\n\t    return InvalidPipeArgumentException;\r\n\t})(exceptions_1.BaseException);\r\n\texports.InvalidPipeArgumentException = InvalidPipeArgumentException;\r\n\n\n/***/ },\n/* 49 */,\n/* 50 */,\n/* 51 */,\n/* 52 */,\n/* 53 */,\n/* 54 */,\n/* 55 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\texports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });\n\t//# sourceMappingURL=isArray.js.map\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar CAMEL_CASE_REGEXP = /([A-Z])/g;\r\n\tvar DASH_CASE_REGEXP = /-([a-z])/g;\r\n\tvar SINGLE_QUOTE_ESCAPE_STRING_RE = /'|\\\\|\\n|\\r|\\$/g;\r\n\tvar DOUBLE_QUOTE_ESCAPE_STRING_RE = /\"|\\\\|\\n|\\r|\\$/g;\r\n\texports.MODULE_SUFFIX = lang_1.IS_DART ? '.dart' : '.js';\r\n\texports.CONST_VAR = lang_1.IS_DART ? 'const' : 'var';\r\n\tfunction camelCaseToDashCase(input) {\r\n\t    return lang_1.StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP, function (m) { return '-' + m[1].toLowerCase(); });\r\n\t}\r\n\texports.camelCaseToDashCase = camelCaseToDashCase;\r\n\tfunction dashCaseToCamelCase(input) {\r\n\t    return lang_1.StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP, function (m) { return m[1].toUpperCase(); });\r\n\t}\r\n\texports.dashCaseToCamelCase = dashCaseToCamelCase;\r\n\tfunction escapeSingleQuoteString(input) {\r\n\t    if (lang_1.isBlank(input)) {\r\n\t        return null;\r\n\t    }\r\n\t    return \"'\" + escapeString(input, SINGLE_QUOTE_ESCAPE_STRING_RE) + \"'\";\r\n\t}\r\n\texports.escapeSingleQuoteString = escapeSingleQuoteString;\r\n\tfunction escapeDoubleQuoteString(input) {\r\n\t    if (lang_1.isBlank(input)) {\r\n\t        return null;\r\n\t    }\r\n\t    return \"\\\"\" + escapeString(input, DOUBLE_QUOTE_ESCAPE_STRING_RE) + \"\\\"\";\r\n\t}\r\n\texports.escapeDoubleQuoteString = escapeDoubleQuoteString;\r\n\tfunction escapeString(input, re) {\r\n\t    return lang_1.StringWrapper.replaceAllMapped(input, re, function (match) {\r\n\t        if (match[0] == '$') {\r\n\t            return lang_1.IS_DART ? '\\\\$' : '$';\r\n\t        }\r\n\t        else if (match[0] == '\\n') {\r\n\t            return '\\\\n';\r\n\t        }\r\n\t        else if (match[0] == '\\r') {\r\n\t            return '\\\\r';\r\n\t        }\r\n\t        else {\r\n\t            return \"\\\\\" + match[0];\r\n\t        }\r\n\t    });\r\n\t}\r\n\tfunction codeGenExportVariable(name) {\r\n\t    if (lang_1.IS_DART) {\r\n\t        return \"const \" + name + \" = \";\r\n\t    }\r\n\t    else {\r\n\t        return \"var \" + name + \" = exports['\" + name + \"'] = \";\r\n\t    }\r\n\t}\r\n\texports.codeGenExportVariable = codeGenExportVariable;\r\n\tfunction codeGenConstConstructorCall(name) {\r\n\t    if (lang_1.IS_DART) {\r\n\t        return \"const \" + name;\r\n\t    }\r\n\t    else {\r\n\t        return \"new \" + name;\r\n\t    }\r\n\t}\r\n\texports.codeGenConstConstructorCall = codeGenConstConstructorCall;\r\n\tfunction codeGenValueFn(params, value, fnName) {\r\n\t    if (fnName === void 0) { fnName = ''; }\r\n\t    if (lang_1.IS_DART) {\r\n\t        return codeGenFnHeader(params, fnName) + \" => \" + value;\r\n\t    }\r\n\t    else {\r\n\t        return codeGenFnHeader(params, fnName) + \" { return \" + value + \"; }\";\r\n\t    }\r\n\t}\r\n\texports.codeGenValueFn = codeGenValueFn;\r\n\tfunction codeGenFnHeader(params, fnName) {\r\n\t    if (fnName === void 0) { fnName = ''; }\r\n\t    if (lang_1.IS_DART) {\r\n\t        return fnName + \"(\" + params.join(',') + \")\";\r\n\t    }\r\n\t    else {\r\n\t        return \"function \" + fnName + \"(\" + params.join(',') + \")\";\r\n\t    }\r\n\t}\r\n\texports.codeGenFnHeader = codeGenFnHeader;\r\n\tfunction codeGenToString(expr) {\r\n\t    if (lang_1.IS_DART) {\r\n\t        return \"'${\" + expr + \"}'\";\r\n\t    }\r\n\t    else {\r\n\t        // JS automatically converts to string...\r\n\t        return expr;\r\n\t    }\r\n\t}\r\n\texports.codeGenToString = codeGenToString;\r\n\tfunction splitAtColon(input, defaultValues) {\r\n\t    var parts = lang_1.StringWrapper.split(input.trim(), /\\s*:\\s*/g);\r\n\t    if (parts.length > 1) {\r\n\t        return parts;\r\n\t    }\r\n\t    else {\r\n\t        return defaultValues;\r\n\t    }\r\n\t}\r\n\texports.splitAtColon = splitAtColon;\r\n\tvar Statement = (function () {\r\n\t    function Statement(statement) {\r\n\t        this.statement = statement;\r\n\t    }\r\n\t    return Statement;\r\n\t})();\r\n\texports.Statement = Statement;\r\n\tvar Expression = (function () {\r\n\t    function Expression(expression, isArray) {\r\n\t        if (isArray === void 0) { isArray = false; }\r\n\t        this.expression = expression;\r\n\t        this.isArray = isArray;\r\n\t    }\r\n\t    return Expression;\r\n\t})();\r\n\texports.Expression = Expression;\r\n\tfunction escapeValue(value) {\r\n\t    if (value instanceof Expression) {\r\n\t        return value.expression;\r\n\t    }\r\n\t    else if (lang_1.isString(value)) {\r\n\t        return escapeSingleQuoteString(value);\r\n\t    }\r\n\t    else if (lang_1.isBlank(value)) {\r\n\t        return 'null';\r\n\t    }\r\n\t    else {\r\n\t        return \"\" + value;\r\n\t    }\r\n\t}\r\n\texports.escapeValue = escapeValue;\r\n\tfunction codeGenArray(data) {\r\n\t    return \"[\" + data.map(escapeValue).join(',') + \"]\";\r\n\t}\r\n\texports.codeGenArray = codeGenArray;\r\n\tfunction codeGenFlatArray(values) {\r\n\t    var result = '([';\r\n\t    var isFirstArrayEntry = true;\r\n\t    var concatFn = lang_1.IS_DART ? '.addAll' : 'concat';\r\n\t    for (var i = 0; i < values.length; i++) {\r\n\t        var value = values[i];\r\n\t        if (value instanceof Expression && value.isArray) {\r\n\t            result += \"]).\" + concatFn + \"(\" + value.expression + \").\" + concatFn + \"([\";\r\n\t            isFirstArrayEntry = true;\r\n\t        }\r\n\t        else {\r\n\t            if (!isFirstArrayEntry) {\r\n\t                result += ',';\r\n\t            }\r\n\t            isFirstArrayEntry = false;\r\n\t            result += escapeValue(value);\r\n\t        }\r\n\t    }\r\n\t    result += '])';\r\n\t    return result;\r\n\t}\r\n\texports.codeGenFlatArray = codeGenFlatArray;\r\n\tfunction codeGenStringMap(keyValueArray) {\r\n\t    return \"{\" + keyValueArray.map(codeGenKeyValue).join(',') + \"}\";\r\n\t}\r\n\texports.codeGenStringMap = codeGenStringMap;\r\n\tfunction codeGenKeyValue(keyValue) {\r\n\t    return escapeValue(keyValue[0]) + \":\" + escapeValue(keyValue[1]);\r\n\t}\r\n\tfunction addAll(source, target) {\r\n\t    for (var i = 0; i < source.length; i++) {\r\n\t        target.push(source[i]);\r\n\t    }\r\n\t}\r\n\texports.addAll = addAll;\r\n\tfunction flattenArray(source, target) {\r\n\t    if (lang_1.isPresent(source)) {\r\n\t        for (var i = 0; i < source.length; i++) {\r\n\t            var item = source[i];\r\n\t            if (lang_1.isArray(item)) {\r\n\t                flattenArray(item, target);\r\n\t            }\r\n\t            else {\r\n\t                target.push(item);\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    return target;\r\n\t}\r\n\texports.flattenArray = flattenArray;\r\n\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Describes the current state of the change detector.\r\n\t */\r\n\t(function (ChangeDetectorState) {\r\n\t    /**\r\n\t     * `NeverChecked` means that the change detector has not been checked yet, and\r\n\t     * initialization methods should be called during detection.\r\n\t     */\r\n\t    ChangeDetectorState[ChangeDetectorState[\"NeverChecked\"] = 0] = \"NeverChecked\";\r\n\t    /**\r\n\t     * `CheckedBefore` means that the change detector has successfully completed at least\r\n\t     * one detection previously.\r\n\t     */\r\n\t    ChangeDetectorState[ChangeDetectorState[\"CheckedBefore\"] = 1] = \"CheckedBefore\";\r\n\t    /**\r\n\t     * `Errored` means that the change detector encountered an error checking a binding\r\n\t     * or calling a directive lifecycle method and is now in an inconsistent state. Change\r\n\t     * detectors in this state will no longer detect changes.\r\n\t     */\r\n\t    ChangeDetectorState[ChangeDetectorState[\"Errored\"] = 2] = \"Errored\";\r\n\t})(exports.ChangeDetectorState || (exports.ChangeDetectorState = {}));\r\n\tvar ChangeDetectorState = exports.ChangeDetectorState;\r\n\t/**\r\n\t * Describes within the change detector which strategy will be used the next time change\r\n\t * detection is triggered.\r\n\t */\r\n\t(function (ChangeDetectionStrategy) {\r\n\t    /**\r\n\t     * `CheckedOnce` means that after calling detectChanges the mode of the change detector\r\n\t     * will become `Checked`.\r\n\t     */\r\n\t    ChangeDetectionStrategy[ChangeDetectionStrategy[\"CheckOnce\"] = 0] = \"CheckOnce\";\r\n\t    /**\r\n\t     * `Checked` means that the change detector should be skipped until its mode changes to\r\n\t     * `CheckOnce`.\r\n\t     */\r\n\t    ChangeDetectionStrategy[ChangeDetectionStrategy[\"Checked\"] = 1] = \"Checked\";\r\n\t    /**\r\n\t     * `CheckAlways` means that after calling detectChanges the mode of the change detector\r\n\t     * will remain `CheckAlways`.\r\n\t     */\r\n\t    ChangeDetectionStrategy[ChangeDetectionStrategy[\"CheckAlways\"] = 2] = \"CheckAlways\";\r\n\t    /**\r\n\t     * `Detached` means that the change detector sub tree is not a part of the main tree and\r\n\t     * should be skipped.\r\n\t     */\r\n\t    ChangeDetectionStrategy[ChangeDetectionStrategy[\"Detached\"] = 3] = \"Detached\";\r\n\t    /**\r\n\t     * `OnPush` means that the change detector's mode will be set to `CheckOnce` during hydration.\r\n\t     */\r\n\t    ChangeDetectionStrategy[ChangeDetectionStrategy[\"OnPush\"] = 4] = \"OnPush\";\r\n\t    /**\r\n\t     * `Default` means that the change detector's mode will be set to `CheckAlways` during hydration.\r\n\t     */\r\n\t    ChangeDetectionStrategy[ChangeDetectionStrategy[\"Default\"] = 5] = \"Default\";\r\n\t})(exports.ChangeDetectionStrategy || (exports.ChangeDetectionStrategy = {}));\r\n\tvar ChangeDetectionStrategy = exports.ChangeDetectionStrategy;\r\n\t/**\r\n\t * List of possible {@link ChangeDetectionStrategy} values.\r\n\t */\r\n\texports.CHANGE_DETECTION_STRATEGY_VALUES = [\r\n\t    ChangeDetectionStrategy.CheckOnce,\r\n\t    ChangeDetectionStrategy.Checked,\r\n\t    ChangeDetectionStrategy.CheckAlways,\r\n\t    ChangeDetectionStrategy.Detached,\r\n\t    ChangeDetectionStrategy.OnPush,\r\n\t    ChangeDetectionStrategy.Default\r\n\t];\r\n\t/**\r\n\t * List of possible {@link ChangeDetectorState} values.\r\n\t */\r\n\texports.CHANGE_DETECTOR_STATE_VALUES = [\r\n\t    ChangeDetectorState.NeverChecked,\r\n\t    ChangeDetectorState.CheckedBefore,\r\n\t    ChangeDetectorState.Errored\r\n\t];\r\n\tfunction isDefaultChangeDetectionStrategy(changeDetectionStrategy) {\r\n\t    return lang_1.isBlank(changeDetectionStrategy) ||\r\n\t        changeDetectionStrategy === ChangeDetectionStrategy.Default;\r\n\t}\r\n\texports.isDefaultChangeDetectionStrategy = isDefaultChangeDetectionStrategy;\r\n\n\n/***/ },\n/* 58 */,\n/* 59 */,\n/* 60 */,\n/* 61 */,\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar abstract_control_directive_1 = __webpack_require__(173);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * A base class that all control directive extend.\r\n\t * It binds a {@link Control} object to a DOM element.\r\n\t *\r\n\t * Used internally by Angular forms.\r\n\t */\r\n\tvar NgControl = (function (_super) {\r\n\t    __extends(NgControl, _super);\r\n\t    function NgControl() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.name = null;\r\n\t        this.valueAccessor = null;\r\n\t    }\r\n\t    Object.defineProperty(NgControl.prototype, \"validator\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControl.prototype, \"asyncValidator\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return NgControl;\r\n\t})(abstract_control_directive_1.AbstractControlDirective);\r\n\texports.NgControl = NgControl;\r\n\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Defines template and style encapsulation options available for Component's {@link View}.\r\n\t *\r\n\t * See {@link ViewMetadata#encapsulation}.\r\n\t */\r\n\t(function (ViewEncapsulation) {\r\n\t    /**\r\n\t     * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host\r\n\t     * Element and pre-processing the style rules provided via\r\n\t     * {@link ViewMetadata#styles} or {@link ViewMetadata#stylesUrls}, and adding the new Host Element\r\n\t     * attribute to all selectors.\r\n\t     *\r\n\t     * This is the default option.\r\n\t     */\r\n\t    ViewEncapsulation[ViewEncapsulation[\"Emulated\"] = 0] = \"Emulated\";\r\n\t    /**\r\n\t     * Use the native encapsulation mechanism of the renderer.\r\n\t     *\r\n\t     * For the DOM this means using [Shadow DOM](https://w3c.github.io/webcomponents/spec/shadow/) and\r\n\t     * creating a ShadowRoot for Component's Host Element.\r\n\t     */\r\n\t    ViewEncapsulation[ViewEncapsulation[\"Native\"] = 1] = \"Native\";\r\n\t    /**\r\n\t     * Don't provide any template or style encapsulation.\r\n\t     */\r\n\t    ViewEncapsulation[ViewEncapsulation[\"None\"] = 2] = \"None\";\r\n\t})(exports.ViewEncapsulation || (exports.ViewEncapsulation = {}));\r\n\tvar ViewEncapsulation = exports.ViewEncapsulation;\r\n\texports.VIEW_ENCAPSULATION_VALUES = [ViewEncapsulation.Emulated, ViewEncapsulation.Native, ViewEncapsulation.None];\r\n\t/**\r\n\t * Metadata properties available for configuring Views.\r\n\t *\r\n\t * Each Angular component requires a single `@Component` and at least one `@View` annotation. The\r\n\t * `@View` annotation specifies the HTML template to use, and lists the directives that are active\r\n\t * within the template.\r\n\t *\r\n\t * When a component is instantiated, the template is loaded into the component's shadow root, and\r\n\t * the expressions and statements in the template are evaluated against the component.\r\n\t *\r\n\t * For details on the `@Component` annotation, see {@link ComponentMetadata}.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'greet',\r\n\t *   template: 'Hello {{name}}!',\r\n\t *   directives: [GreetUser, Bold]\r\n\t * })\r\n\t * class Greet {\r\n\t *   name: string;\r\n\t *\r\n\t *   constructor() {\r\n\t *     this.name = 'World';\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar ViewMetadata = (function () {\r\n\t    function ViewMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, templateUrl = _b.templateUrl, template = _b.template, directives = _b.directives, pipes = _b.pipes, encapsulation = _b.encapsulation, styles = _b.styles, styleUrls = _b.styleUrls;\r\n\t        this.templateUrl = templateUrl;\r\n\t        this.template = template;\r\n\t        this.styleUrls = styleUrls;\r\n\t        this.styles = styles;\r\n\t        this.directives = directives;\r\n\t        this.pipes = pipes;\r\n\t        this.encapsulation = encapsulation;\r\n\t    }\r\n\t    ViewMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], ViewMetadata);\r\n\t    return ViewMetadata;\r\n\t})();\r\n\texports.ViewMetadata = ViewMetadata;\r\n\n\n/***/ },\n/* 64 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * Supported http methods.\r\n\t */\r\n\t(function (RequestMethod) {\r\n\t    RequestMethod[RequestMethod[\"Get\"] = 0] = \"Get\";\r\n\t    RequestMethod[RequestMethod[\"Post\"] = 1] = \"Post\";\r\n\t    RequestMethod[RequestMethod[\"Put\"] = 2] = \"Put\";\r\n\t    RequestMethod[RequestMethod[\"Delete\"] = 3] = \"Delete\";\r\n\t    RequestMethod[RequestMethod[\"Options\"] = 4] = \"Options\";\r\n\t    RequestMethod[RequestMethod[\"Head\"] = 5] = \"Head\";\r\n\t    RequestMethod[RequestMethod[\"Patch\"] = 6] = \"Patch\";\r\n\t})(exports.RequestMethod || (exports.RequestMethod = {}));\r\n\tvar RequestMethod = exports.RequestMethod;\r\n\t/**\r\n\t * All possible states in which a connection can be, based on\r\n\t * [States](http://www.w3.org/TR/XMLHttpRequest/#states) from the `XMLHttpRequest` spec, but with an\r\n\t * additional \"CANCELLED\" state.\r\n\t */\r\n\t(function (ReadyState) {\r\n\t    ReadyState[ReadyState[\"Unsent\"] = 0] = \"Unsent\";\r\n\t    ReadyState[ReadyState[\"Open\"] = 1] = \"Open\";\r\n\t    ReadyState[ReadyState[\"HeadersReceived\"] = 2] = \"HeadersReceived\";\r\n\t    ReadyState[ReadyState[\"Loading\"] = 3] = \"Loading\";\r\n\t    ReadyState[ReadyState[\"Done\"] = 4] = \"Done\";\r\n\t    ReadyState[ReadyState[\"Cancelled\"] = 5] = \"Cancelled\";\r\n\t})(exports.ReadyState || (exports.ReadyState = {}));\r\n\tvar ReadyState = exports.ReadyState;\r\n\t/**\r\n\t * Acceptable response types to be associated with a {@link Response}, based on\r\n\t * [ResponseType](https://fetch.spec.whatwg.org/#responsetype) from the Fetch spec.\r\n\t */\r\n\t(function (ResponseType) {\r\n\t    ResponseType[ResponseType[\"Basic\"] = 0] = \"Basic\";\r\n\t    ResponseType[ResponseType[\"Cors\"] = 1] = \"Cors\";\r\n\t    ResponseType[ResponseType[\"Default\"] = 2] = \"Default\";\r\n\t    ResponseType[ResponseType[\"Error\"] = 3] = \"Error\";\r\n\t    ResponseType[ResponseType[\"Opaque\"] = 4] = \"Opaque\";\r\n\t})(exports.ResponseType || (exports.ResponseType = {}));\r\n\tvar ResponseType = exports.ResponseType;\r\n\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\t/**\r\n\t * `RouteParams` is an immutable map of parameters for the given route\r\n\t * based on the url matcher and optional parameters for that route.\r\n\t *\r\n\t * You can inject `RouteParams` into the constructor of a component to use it.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteParams} from\r\n\t * 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {path: '/user/:id', component: UserCmp, name: 'UserCmp'},\r\n\t * ])\r\n\t * class AppCmp {}\r\n\t *\r\n\t * @Component({ template: 'user: {{id}}' })\r\n\t * class UserCmp {\r\n\t *   id: string;\r\n\t *   constructor(params: RouteParams) {\r\n\t *     this.id = params.get('id');\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, ROUTER_PROVIDERS);\r\n\t * ```\r\n\t */\r\n\tvar RouteParams = (function () {\r\n\t    function RouteParams(params) {\r\n\t        this.params = params;\r\n\t    }\r\n\t    RouteParams.prototype.get = function (param) { return lang_1.normalizeBlank(collection_1.StringMapWrapper.get(this.params, param)); };\r\n\t    return RouteParams;\r\n\t})();\r\n\texports.RouteParams = RouteParams;\r\n\t/**\r\n\t * `RouteData` is an immutable map of additional data you can configure in your {@link Route}.\r\n\t *\r\n\t * You can inject `RouteData` into the constructor of a component to use it.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteData} from\r\n\t * 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {path: '/user/:id', component: UserCmp, name: 'UserCmp', data: {isAdmin: true}},\r\n\t * ])\r\n\t * class AppCmp {}\r\n\t *\r\n\t * @Component({\r\n\t *   ...,\r\n\t *   template: 'user: {{isAdmin}}'\r\n\t * })\r\n\t * class UserCmp {\r\n\t *   string: isAdmin;\r\n\t *   constructor(data: RouteData) {\r\n\t *     this.isAdmin = data.get('isAdmin');\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, ROUTER_PROVIDERS);\r\n\t * ```\r\n\t */\r\n\tvar RouteData = (function () {\r\n\t    function RouteData(data) {\r\n\t        if (data === void 0) { data = lang_1.CONST_EXPR({}); }\r\n\t        this.data = data;\r\n\t    }\r\n\t    RouteData.prototype.get = function (key) { return lang_1.normalizeBlank(collection_1.StringMapWrapper.get(this.data, key)); };\r\n\t    return RouteData;\r\n\t})();\r\n\texports.RouteData = RouteData;\r\n\texports.BLANK_ROUTE_DATA = new RouteData();\r\n\t/**\r\n\t * `Instruction` is a tree of {@link ComponentInstruction}s with all the information needed\r\n\t * to transition each component in the app to a given route, including all auxiliary routes.\r\n\t *\r\n\t * `Instruction`s can be created using {@link Router#generate}, and can be used to\r\n\t * perform route changes with {@link Router#navigateByInstruction}.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   constructor(router: Router) {\r\n\t *     var instruction = router.generate(['/MyRoute']);\r\n\t *     router.navigateByInstruction(instruction);\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, ROUTER_PROVIDERS);\r\n\t * ```\r\n\t */\r\n\tvar Instruction = (function () {\r\n\t    function Instruction(component, child, auxInstruction) {\r\n\t        this.component = component;\r\n\t        this.child = child;\r\n\t        this.auxInstruction = auxInstruction;\r\n\t    }\r\n\t    Object.defineProperty(Instruction.prototype, \"urlPath\", {\r\n\t        get: function () { return lang_1.isPresent(this.component) ? this.component.urlPath : ''; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(Instruction.prototype, \"urlParams\", {\r\n\t        get: function () { return lang_1.isPresent(this.component) ? this.component.urlParams : []; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(Instruction.prototype, \"specificity\", {\r\n\t        get: function () {\r\n\t            var total = '';\r\n\t            if (lang_1.isPresent(this.component)) {\r\n\t                total += this.component.specificity;\r\n\t            }\r\n\t            if (lang_1.isPresent(this.child)) {\r\n\t                total += this.child.specificity;\r\n\t            }\r\n\t            return total;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * converts the instruction into a URL string\r\n\t     */\r\n\t    Instruction.prototype.toRootUrl = function () { return this.toUrlPath() + this.toUrlQuery(); };\r\n\t    /** @internal */\r\n\t    Instruction.prototype._toNonRootUrl = function () {\r\n\t        return this._stringifyPathMatrixAuxPrefixed() +\r\n\t            (lang_1.isPresent(this.child) ? this.child._toNonRootUrl() : '');\r\n\t    };\r\n\t    Instruction.prototype.toUrlQuery = function () { return this.urlParams.length > 0 ? ('?' + this.urlParams.join('&')) : ''; };\r\n\t    /**\r\n\t     * Returns a new instruction that shares the state of the existing instruction, but with\r\n\t     * the given child {@link Instruction} replacing the existing child.\r\n\t     */\r\n\t    Instruction.prototype.replaceChild = function (child) {\r\n\t        return new ResolvedInstruction(this.component, child, this.auxInstruction);\r\n\t    };\r\n\t    /**\r\n\t     * If the final URL for the instruction is ``\r\n\t     */\r\n\t    Instruction.prototype.toUrlPath = function () {\r\n\t        return this.urlPath + this._stringifyAux() +\r\n\t            (lang_1.isPresent(this.child) ? this.child._toNonRootUrl() : '');\r\n\t    };\r\n\t    // default instructions override these\r\n\t    Instruction.prototype.toLinkUrl = function () {\r\n\t        return this.urlPath + this._stringifyAux() +\r\n\t            (lang_1.isPresent(this.child) ? this.child._toLinkUrl() : '') + this.toUrlQuery();\r\n\t    };\r\n\t    // this is the non-root version (called recursively)\r\n\t    /** @internal */\r\n\t    Instruction.prototype._toLinkUrl = function () {\r\n\t        return this._stringifyPathMatrixAuxPrefixed() +\r\n\t            (lang_1.isPresent(this.child) ? this.child._toLinkUrl() : '');\r\n\t    };\r\n\t    /** @internal */\r\n\t    Instruction.prototype._stringifyPathMatrixAuxPrefixed = function () {\r\n\t        var primary = this._stringifyPathMatrixAux();\r\n\t        if (primary.length > 0) {\r\n\t            primary = '/' + primary;\r\n\t        }\r\n\t        return primary;\r\n\t    };\r\n\t    /** @internal */\r\n\t    Instruction.prototype._stringifyMatrixParams = function () {\r\n\t        return this.urlParams.length > 0 ? (';' + this.urlParams.join(';')) : '';\r\n\t    };\r\n\t    /** @internal */\r\n\t    Instruction.prototype._stringifyPathMatrixAux = function () {\r\n\t        if (lang_1.isBlank(this.component)) {\r\n\t            return '';\r\n\t        }\r\n\t        return this.urlPath + this._stringifyMatrixParams() + this._stringifyAux();\r\n\t    };\r\n\t    /** @internal */\r\n\t    Instruction.prototype._stringifyAux = function () {\r\n\t        var routes = [];\r\n\t        collection_1.StringMapWrapper.forEach(this.auxInstruction, function (auxInstruction, _) {\r\n\t            routes.push(auxInstruction._stringifyPathMatrixAux());\r\n\t        });\r\n\t        if (routes.length > 0) {\r\n\t            return '(' + routes.join('//') + ')';\r\n\t        }\r\n\t        return '';\r\n\t    };\r\n\t    return Instruction;\r\n\t})();\r\n\texports.Instruction = Instruction;\r\n\t/**\r\n\t * a resolved instruction has an outlet instruction for itself, but maybe not for...\r\n\t */\r\n\tvar ResolvedInstruction = (function (_super) {\r\n\t    __extends(ResolvedInstruction, _super);\r\n\t    function ResolvedInstruction(component, child, auxInstruction) {\r\n\t        _super.call(this, component, child, auxInstruction);\r\n\t    }\r\n\t    ResolvedInstruction.prototype.resolveComponent = function () {\r\n\t        return async_1.PromiseWrapper.resolve(this.component);\r\n\t    };\r\n\t    return ResolvedInstruction;\r\n\t})(Instruction);\r\n\texports.ResolvedInstruction = ResolvedInstruction;\r\n\t/**\r\n\t * Represents a resolved default route\r\n\t */\r\n\tvar DefaultInstruction = (function (_super) {\r\n\t    __extends(DefaultInstruction, _super);\r\n\t    function DefaultInstruction(component, child) {\r\n\t        _super.call(this, component, child, {});\r\n\t    }\r\n\t    DefaultInstruction.prototype.toLinkUrl = function () { return ''; };\r\n\t    /** @internal */\r\n\t    DefaultInstruction.prototype._toLinkUrl = function () { return ''; };\r\n\t    return DefaultInstruction;\r\n\t})(ResolvedInstruction);\r\n\texports.DefaultInstruction = DefaultInstruction;\r\n\t/**\r\n\t * Represents a component that may need to do some redirection or lazy loading at a later time.\r\n\t */\r\n\tvar UnresolvedInstruction = (function (_super) {\r\n\t    __extends(UnresolvedInstruction, _super);\r\n\t    function UnresolvedInstruction(_resolver, _urlPath, _urlParams) {\r\n\t        if (_urlPath === void 0) { _urlPath = ''; }\r\n\t        if (_urlParams === void 0) { _urlParams = lang_1.CONST_EXPR([]); }\r\n\t        _super.call(this, null, null, {});\r\n\t        this._resolver = _resolver;\r\n\t        this._urlPath = _urlPath;\r\n\t        this._urlParams = _urlParams;\r\n\t    }\r\n\t    Object.defineProperty(UnresolvedInstruction.prototype, \"urlPath\", {\r\n\t        get: function () {\r\n\t            if (lang_1.isPresent(this.component)) {\r\n\t                return this.component.urlPath;\r\n\t            }\r\n\t            if (lang_1.isPresent(this._urlPath)) {\r\n\t                return this._urlPath;\r\n\t            }\r\n\t            return '';\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(UnresolvedInstruction.prototype, \"urlParams\", {\r\n\t        get: function () {\r\n\t            if (lang_1.isPresent(this.component)) {\r\n\t                return this.component.urlParams;\r\n\t            }\r\n\t            if (lang_1.isPresent(this._urlParams)) {\r\n\t                return this._urlParams;\r\n\t            }\r\n\t            return [];\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    UnresolvedInstruction.prototype.resolveComponent = function () {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(this.component)) {\r\n\t            return async_1.PromiseWrapper.resolve(this.component);\r\n\t        }\r\n\t        return this._resolver().then(function (instruction) {\r\n\t            _this.child = lang_1.isPresent(instruction) ? instruction.child : null;\r\n\t            return _this.component = lang_1.isPresent(instruction) ? instruction.component : null;\r\n\t        });\r\n\t    };\r\n\t    return UnresolvedInstruction;\r\n\t})(Instruction);\r\n\texports.UnresolvedInstruction = UnresolvedInstruction;\r\n\tvar RedirectInstruction = (function (_super) {\r\n\t    __extends(RedirectInstruction, _super);\r\n\t    function RedirectInstruction(component, child, auxInstruction, _specificity) {\r\n\t        _super.call(this, component, child, auxInstruction);\r\n\t        this._specificity = _specificity;\r\n\t    }\r\n\t    Object.defineProperty(RedirectInstruction.prototype, \"specificity\", {\r\n\t        get: function () { return this._specificity; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return RedirectInstruction;\r\n\t})(ResolvedInstruction);\r\n\texports.RedirectInstruction = RedirectInstruction;\r\n\t/**\r\n\t * A `ComponentInstruction` represents the route state for a single component.\r\n\t *\r\n\t * `ComponentInstructions` is a public API. Instances of `ComponentInstruction` are passed\r\n\t * to route lifecycle hooks, like {@link CanActivate}.\r\n\t *\r\n\t * `ComponentInstruction`s are [hash consed](https://en.wikipedia.org/wiki/Hash_consing). You should\r\n\t * never construct one yourself with \"new.\" Instead, rely on {@link Router/RouteRecognizer} to\r\n\t * construct `ComponentInstruction`s.\r\n\t *\r\n\t * You should not modify this object. It should be treated as immutable.\r\n\t */\r\n\tvar ComponentInstruction = (function () {\r\n\t    /**\r\n\t     * @internal\r\n\t     */\r\n\t    function ComponentInstruction(urlPath, urlParams, data, componentType, terminal, specificity, params) {\r\n\t        if (params === void 0) { params = null; }\r\n\t        this.urlPath = urlPath;\r\n\t        this.urlParams = urlParams;\r\n\t        this.componentType = componentType;\r\n\t        this.terminal = terminal;\r\n\t        this.specificity = specificity;\r\n\t        this.params = params;\r\n\t        this.reuse = false;\r\n\t        this.routeData = lang_1.isPresent(data) ? data : exports.BLANK_ROUTE_DATA;\r\n\t    }\r\n\t    return ComponentInstruction;\r\n\t})();\r\n\texports.ComponentInstruction = ComponentInstruction;\r\n\n\n/***/ },\n/* 66 */,\n/* 67 */,\n/* 68 */,\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar root_1 = __webpack_require__(45);\n\tfunction polyfillSymbol(root) {\n\t    var Symbol = ensureSymbol(root);\n\t    ensureIterator(Symbol, root);\n\t    ensureObservable(Symbol);\n\t    ensureFor(Symbol);\n\t    return Symbol;\n\t}\n\texports.polyfillSymbol = polyfillSymbol;\n\tfunction ensureFor(Symbol) {\n\t    if (!Symbol.for) {\n\t        Symbol.for = symbolForPolyfill;\n\t    }\n\t}\n\texports.ensureFor = ensureFor;\n\tvar id = 0;\n\tfunction ensureSymbol(root) {\n\t    if (!root.Symbol) {\n\t        root.Symbol = function symbolFuncPolyfill(description) {\n\t            return \"@@Symbol(\" + description + \"):\" + id++;\n\t        };\n\t    }\n\t    return root.Symbol;\n\t}\n\texports.ensureSymbol = ensureSymbol;\n\tfunction symbolForPolyfill(key) {\n\t    return '@@' + key;\n\t}\n\texports.symbolForPolyfill = symbolForPolyfill;\n\tfunction ensureIterator(Symbol, root) {\n\t    if (!Symbol.iterator) {\n\t        if (typeof Symbol.for === 'function') {\n\t            Symbol.iterator = Symbol.for('iterator');\n\t        }\n\t        else if (root.Set && typeof new root.Set()['@@iterator'] === 'function') {\n\t            // Bug for mozilla version\n\t            Symbol.iterator = '@@iterator';\n\t        }\n\t        else if (root.Map) {\n\t            // es6-shim specific logic\n\t            var keys = Object.getOwnPropertyNames(root.Map.prototype);\n\t            for (var i = 0; i < keys.length; ++i) {\n\t                var key = keys[i];\n\t                if (key !== 'entries' && key !== 'size' && root.Map.prototype[key] === root.Map.prototype['entries']) {\n\t                    Symbol.iterator = key;\n\t                    break;\n\t                }\n\t            }\n\t        }\n\t        else {\n\t            Symbol.iterator = '@@iterator';\n\t        }\n\t    }\n\t}\n\texports.ensureIterator = ensureIterator;\n\tfunction ensureObservable(Symbol) {\n\t    if (!Symbol.observable) {\n\t        if (typeof Symbol.for === 'function') {\n\t            Symbol.observable = Symbol.for('observable');\n\t        }\n\t        else {\n\t            Symbol.observable = '@@observable';\n\t        }\n\t    }\n\t}\n\texports.ensureObservable = ensureObservable;\n\texports.SymbolShim = polyfillSymbol(root_1.root);\n\t//# sourceMappingURL=SymbolShim.js.map\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * Maps application URLs into application states, to support deep-linking and navigation.\r\n\t */\r\n\tfunction __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\tvar router_1 = __webpack_require__(142);\r\n\texports.Router = router_1.Router;\r\n\tvar router_outlet_1 = __webpack_require__(328);\r\n\texports.RouterOutlet = router_outlet_1.RouterOutlet;\r\n\tvar router_link_1 = __webpack_require__(327);\r\n\texports.RouterLink = router_link_1.RouterLink;\r\n\tvar instruction_1 = __webpack_require__(65);\r\n\texports.RouteParams = instruction_1.RouteParams;\r\n\texports.RouteData = instruction_1.RouteData;\r\n\tvar platform_location_1 = __webpack_require__(105);\r\n\texports.PlatformLocation = platform_location_1.PlatformLocation;\r\n\tvar route_registry_1 = __webpack_require__(213);\r\n\texports.RouteRegistry = route_registry_1.RouteRegistry;\r\n\texports.ROUTER_PRIMARY_COMPONENT = route_registry_1.ROUTER_PRIMARY_COMPONENT;\r\n\tvar location_strategy_1 = __webpack_require__(104);\r\n\texports.LocationStrategy = location_strategy_1.LocationStrategy;\r\n\texports.APP_BASE_HREF = location_strategy_1.APP_BASE_HREF;\r\n\tvar hash_location_strategy_1 = __webpack_require__(637);\r\n\texports.HashLocationStrategy = hash_location_strategy_1.HashLocationStrategy;\r\n\tvar path_location_strategy_1 = __webpack_require__(331);\r\n\texports.PathLocationStrategy = path_location_strategy_1.PathLocationStrategy;\r\n\tvar location_1 = __webpack_require__(140);\r\n\texports.Location = location_1.Location;\r\n\t__export(__webpack_require__(332));\r\n\t__export(__webpack_require__(639));\r\n\tvar lifecycle_annotations_1 = __webpack_require__(329);\r\n\texports.CanActivate = lifecycle_annotations_1.CanActivate;\r\n\tvar instruction_2 = __webpack_require__(65);\r\n\texports.Instruction = instruction_2.Instruction;\r\n\texports.ComponentInstruction = instruction_2.ComponentInstruction;\r\n\tvar core_1 = __webpack_require__(4);\r\n\texports.OpaqueToken = core_1.OpaqueToken;\r\n\tvar router_providers_common_1 = __webpack_require__(333);\r\n\texports.ROUTER_PROVIDERS_COMMON = router_providers_common_1.ROUTER_PROVIDERS_COMMON;\r\n\tvar router_providers_1 = __webpack_require__(640);\r\n\texports.ROUTER_PROVIDERS = router_providers_1.ROUTER_PROVIDERS;\r\n\texports.ROUTER_BINDINGS = router_providers_1.ROUTER_BINDINGS;\r\n\tvar router_outlet_2 = __webpack_require__(328);\r\n\tvar router_link_2 = __webpack_require__(327);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * A list of directives. To use the router directives like {@link RouterOutlet} and\r\n\t * {@link RouterLink}, add this to your `directives` array in the {@link View} decorator of your\r\n\t * component.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *    // ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\r\n\t * ```\r\n\t */\r\n\texports.ROUTER_DIRECTIVES = lang_1.CONST_EXPR([router_outlet_2.RouterOutlet, router_link_2.RouterLink]);\r\n\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar default_value_accessor_1 = __webpack_require__(121);\r\n\tvar number_value_accessor_1 = __webpack_require__(181);\r\n\tvar checkbox_value_accessor_1 = __webpack_require__(120);\r\n\tvar select_control_value_accessor_1 = __webpack_require__(123);\r\n\tvar radio_control_value_accessor_1 = __webpack_require__(122);\r\n\tvar normalize_validator_1 = __webpack_require__(594);\r\n\tfunction controlPath(name, parent) {\r\n\t    var p = collection_1.ListWrapper.clone(parent.path);\r\n\t    p.push(name);\r\n\t    return p;\r\n\t}\r\n\texports.controlPath = controlPath;\r\n\tfunction setUpControl(control, dir) {\r\n\t    if (lang_1.isBlank(control))\r\n\t        _throwError(dir, \"Cannot find control\");\r\n\t    if (lang_1.isBlank(dir.valueAccessor))\r\n\t        _throwError(dir, \"No value accessor for\");\r\n\t    control.validator = validators_1.Validators.compose([control.validator, dir.validator]);\r\n\t    control.asyncValidator = validators_1.Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\r\n\t    dir.valueAccessor.writeValue(control.value);\r\n\t    // view -> model\r\n\t    dir.valueAccessor.registerOnChange(function (newValue) {\r\n\t        dir.viewToModelUpdate(newValue);\r\n\t        control.updateValue(newValue, { emitModelToViewChange: false });\r\n\t        control.markAsDirty();\r\n\t    });\r\n\t    // model -> view\r\n\t    control.registerOnChange(function (newValue) { return dir.valueAccessor.writeValue(newValue); });\r\n\t    // touched\r\n\t    dir.valueAccessor.registerOnTouched(function () { return control.markAsTouched(); });\r\n\t}\r\n\texports.setUpControl = setUpControl;\r\n\tfunction setUpControlGroup(control, dir) {\r\n\t    if (lang_1.isBlank(control))\r\n\t        _throwError(dir, \"Cannot find control\");\r\n\t    control.validator = validators_1.Validators.compose([control.validator, dir.validator]);\r\n\t    control.asyncValidator = validators_1.Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\r\n\t}\r\n\texports.setUpControlGroup = setUpControlGroup;\r\n\tfunction _throwError(dir, message) {\r\n\t    var path = dir.path.join(\" -> \");\r\n\t    throw new exceptions_1.BaseException(message + \" '\" + path + \"'\");\r\n\t}\r\n\tfunction composeValidators(validators) {\r\n\t    return lang_1.isPresent(validators) ? validators_1.Validators.compose(validators.map(normalize_validator_1.normalizeValidator)) : null;\r\n\t}\r\n\texports.composeValidators = composeValidators;\r\n\tfunction composeAsyncValidators(validators) {\r\n\t    return lang_1.isPresent(validators) ? validators_1.Validators.composeAsync(validators.map(normalize_validator_1.normalizeAsyncValidator)) :\r\n\t        null;\r\n\t}\r\n\texports.composeAsyncValidators = composeAsyncValidators;\r\n\tfunction isPropertyUpdated(changes, viewModel) {\r\n\t    if (!collection_1.StringMapWrapper.contains(changes, \"model\"))\r\n\t        return false;\r\n\t    var change = changes[\"model\"];\r\n\t    if (change.isFirstChange())\r\n\t        return true;\r\n\t    return !lang_1.looseIdentical(viewModel, change.currentValue);\r\n\t}\r\n\texports.isPropertyUpdated = isPropertyUpdated;\r\n\t// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\r\n\tfunction selectValueAccessor(dir, valueAccessors) {\r\n\t    if (lang_1.isBlank(valueAccessors))\r\n\t        return null;\r\n\t    var defaultAccessor;\r\n\t    var builtinAccessor;\r\n\t    var customAccessor;\r\n\t    valueAccessors.forEach(function (v) {\r\n\t        if (lang_1.hasConstructor(v, default_value_accessor_1.DefaultValueAccessor)) {\r\n\t            defaultAccessor = v;\r\n\t        }\r\n\t        else if (lang_1.hasConstructor(v, checkbox_value_accessor_1.CheckboxControlValueAccessor) ||\r\n\t            lang_1.hasConstructor(v, number_value_accessor_1.NumberValueAccessor) ||\r\n\t            lang_1.hasConstructor(v, select_control_value_accessor_1.SelectControlValueAccessor) ||\r\n\t            lang_1.hasConstructor(v, radio_control_value_accessor_1.RadioControlValueAccessor)) {\r\n\t            if (lang_1.isPresent(builtinAccessor))\r\n\t                _throwError(dir, \"More than one built-in value accessor matches\");\r\n\t            builtinAccessor = v;\r\n\t        }\r\n\t        else {\r\n\t            if (lang_1.isPresent(customAccessor))\r\n\t                _throwError(dir, \"More than one custom value accessor matches\");\r\n\t            customAccessor = v;\r\n\t        }\r\n\t    });\r\n\t    if (lang_1.isPresent(customAccessor))\r\n\t        return customAccessor;\r\n\t    if (lang_1.isPresent(builtinAccessor))\r\n\t        return builtinAccessor;\r\n\t    if (lang_1.isPresent(defaultAccessor))\r\n\t        return defaultAccessor;\r\n\t    _throwError(dir, \"No valid value accessor for\");\r\n\t    return null;\r\n\t}\r\n\texports.selectValueAccessor = selectValueAccessor;\r\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar MODULE_REGEXP = /#MODULE\\[([^\\]]*)\\]/g;\r\n\tfunction moduleRef(moduleUrl) {\r\n\t    return \"#MODULE[\" + moduleUrl + \"]\";\r\n\t}\r\n\texports.moduleRef = moduleRef;\r\n\t/**\r\n\t * Represents generated source code with module references. Internal to the Angular compiler.\r\n\t */\r\n\tvar SourceModule = (function () {\r\n\t    function SourceModule(moduleUrl, sourceWithModuleRefs) {\r\n\t        this.moduleUrl = moduleUrl;\r\n\t        this.sourceWithModuleRefs = sourceWithModuleRefs;\r\n\t    }\r\n\t    SourceModule.getSourceWithoutImports = function (sourceWithModuleRefs) {\r\n\t        return lang_1.StringWrapper.replaceAllMapped(sourceWithModuleRefs, MODULE_REGEXP, function (match) { return ''; });\r\n\t    };\r\n\t    SourceModule.prototype.getSourceWithImports = function () {\r\n\t        var _this = this;\r\n\t        var moduleAliases = {};\r\n\t        var imports = [];\r\n\t        var newSource = lang_1.StringWrapper.replaceAllMapped(this.sourceWithModuleRefs, MODULE_REGEXP, function (match) {\r\n\t            var moduleUrl = match[1];\r\n\t            var alias = moduleAliases[moduleUrl];\r\n\t            if (lang_1.isBlank(alias)) {\r\n\t                if (moduleUrl == _this.moduleUrl) {\r\n\t                    alias = '';\r\n\t                }\r\n\t                else {\r\n\t                    alias = \"import\" + imports.length;\r\n\t                    imports.push([moduleUrl, alias]);\r\n\t                }\r\n\t                moduleAliases[moduleUrl] = alias;\r\n\t            }\r\n\t            return alias.length > 0 ? alias + \".\" : '';\r\n\t        });\r\n\t        return new SourceWithImports(newSource, imports);\r\n\t    };\r\n\t    return SourceModule;\r\n\t})();\r\n\texports.SourceModule = SourceModule;\r\n\tvar SourceExpression = (function () {\r\n\t    function SourceExpression(declarations, expression) {\r\n\t        this.declarations = declarations;\r\n\t        this.expression = expression;\r\n\t    }\r\n\t    return SourceExpression;\r\n\t})();\r\n\texports.SourceExpression = SourceExpression;\r\n\tvar SourceExpressions = (function () {\r\n\t    function SourceExpressions(declarations, expressions) {\r\n\t        this.declarations = declarations;\r\n\t        this.expressions = expressions;\r\n\t    }\r\n\t    return SourceExpressions;\r\n\t})();\r\n\texports.SourceExpressions = SourceExpressions;\r\n\t/**\r\n\t * Represents generated source code with imports. Internal to the Angular compiler.\r\n\t */\r\n\tvar SourceWithImports = (function () {\r\n\t    function SourceWithImports(source, imports) {\r\n\t        this.source = source;\r\n\t        this.imports = imports;\r\n\t    }\r\n\t    return SourceWithImports;\r\n\t})();\r\n\texports.SourceWithImports = SourceWithImports;\r\n\n\n/***/ },\n/* 78 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * A segment of text within the template.\r\n\t */\r\n\tvar TextAst = (function () {\r\n\t    function TextAst(value, ngContentIndex, sourceSpan) {\r\n\t        this.value = value;\r\n\t        this.ngContentIndex = ngContentIndex;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    TextAst.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); };\r\n\t    return TextAst;\r\n\t})();\r\n\texports.TextAst = TextAst;\r\n\t/**\r\n\t * A bound expression within the text of a template.\r\n\t */\r\n\tvar BoundTextAst = (function () {\r\n\t    function BoundTextAst(value, ngContentIndex, sourceSpan) {\r\n\t        this.value = value;\r\n\t        this.ngContentIndex = ngContentIndex;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    BoundTextAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitBoundText(this, context);\r\n\t    };\r\n\t    return BoundTextAst;\r\n\t})();\r\n\texports.BoundTextAst = BoundTextAst;\r\n\t/**\r\n\t * A plain attribute on an element.\r\n\t */\r\n\tvar AttrAst = (function () {\r\n\t    function AttrAst(name, value, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.value = value;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    AttrAst.prototype.visit = function (visitor, context) { return visitor.visitAttr(this, context); };\r\n\t    return AttrAst;\r\n\t})();\r\n\texports.AttrAst = AttrAst;\r\n\t/**\r\n\t * A binding for an element property (e.g. `[property]=\"expression\"`).\r\n\t */\r\n\tvar BoundElementPropertyAst = (function () {\r\n\t    function BoundElementPropertyAst(name, type, value, unit, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.type = type;\r\n\t        this.value = value;\r\n\t        this.unit = unit;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    BoundElementPropertyAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitElementProperty(this, context);\r\n\t    };\r\n\t    return BoundElementPropertyAst;\r\n\t})();\r\n\texports.BoundElementPropertyAst = BoundElementPropertyAst;\r\n\t/**\r\n\t * A binding for an element event (e.g. `(event)=\"handler()\"`).\r\n\t */\r\n\tvar BoundEventAst = (function () {\r\n\t    function BoundEventAst(name, target, handler, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.target = target;\r\n\t        this.handler = handler;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    BoundEventAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitEvent(this, context);\r\n\t    };\r\n\t    Object.defineProperty(BoundEventAst.prototype, \"fullName\", {\r\n\t        get: function () {\r\n\t            if (lang_1.isPresent(this.target)) {\r\n\t                return this.target + \":\" + this.name;\r\n\t            }\r\n\t            else {\r\n\t                return this.name;\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return BoundEventAst;\r\n\t})();\r\n\texports.BoundEventAst = BoundEventAst;\r\n\t/**\r\n\t * A variable declaration on an element (e.g. `#var=\"expression\"`).\r\n\t */\r\n\tvar VariableAst = (function () {\r\n\t    function VariableAst(name, value, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.value = value;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    VariableAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitVariable(this, context);\r\n\t    };\r\n\t    return VariableAst;\r\n\t})();\r\n\texports.VariableAst = VariableAst;\r\n\t/**\r\n\t * An element declaration in a template.\r\n\t */\r\n\tvar ElementAst = (function () {\r\n\t    function ElementAst(name, attrs, inputs, outputs, exportAsVars, directives, children, ngContentIndex, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.attrs = attrs;\r\n\t        this.inputs = inputs;\r\n\t        this.outputs = outputs;\r\n\t        this.exportAsVars = exportAsVars;\r\n\t        this.directives = directives;\r\n\t        this.children = children;\r\n\t        this.ngContentIndex = ngContentIndex;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    ElementAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitElement(this, context);\r\n\t    };\r\n\t    /**\r\n\t     * Whether the element has any active bindings (inputs, outputs, vars, or directives).\r\n\t     */\r\n\t    ElementAst.prototype.isBound = function () {\r\n\t        return (this.inputs.length > 0 || this.outputs.length > 0 || this.exportAsVars.length > 0 ||\r\n\t            this.directives.length > 0);\r\n\t    };\r\n\t    /**\r\n\t     * Get the component associated with this element, if any.\r\n\t     */\r\n\t    ElementAst.prototype.getComponent = function () {\r\n\t        return this.directives.length > 0 && this.directives[0].directive.isComponent ?\r\n\t            this.directives[0].directive :\r\n\t            null;\r\n\t    };\r\n\t    return ElementAst;\r\n\t})();\r\n\texports.ElementAst = ElementAst;\r\n\t/**\r\n\t * A `<template>` element included in an Angular template.\r\n\t */\r\n\tvar EmbeddedTemplateAst = (function () {\r\n\t    function EmbeddedTemplateAst(attrs, outputs, vars, directives, children, ngContentIndex, sourceSpan) {\r\n\t        this.attrs = attrs;\r\n\t        this.outputs = outputs;\r\n\t        this.vars = vars;\r\n\t        this.directives = directives;\r\n\t        this.children = children;\r\n\t        this.ngContentIndex = ngContentIndex;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    EmbeddedTemplateAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitEmbeddedTemplate(this, context);\r\n\t    };\r\n\t    return EmbeddedTemplateAst;\r\n\t})();\r\n\texports.EmbeddedTemplateAst = EmbeddedTemplateAst;\r\n\t/**\r\n\t * A directive property with a bound value (e.g. `*ngIf=\"condition\").\r\n\t */\r\n\tvar BoundDirectivePropertyAst = (function () {\r\n\t    function BoundDirectivePropertyAst(directiveName, templateName, value, sourceSpan) {\r\n\t        this.directiveName = directiveName;\r\n\t        this.templateName = templateName;\r\n\t        this.value = value;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    BoundDirectivePropertyAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitDirectiveProperty(this, context);\r\n\t    };\r\n\t    return BoundDirectivePropertyAst;\r\n\t})();\r\n\texports.BoundDirectivePropertyAst = BoundDirectivePropertyAst;\r\n\t/**\r\n\t * A directive declared on an element.\r\n\t */\r\n\tvar DirectiveAst = (function () {\r\n\t    function DirectiveAst(directive, inputs, hostProperties, hostEvents, exportAsVars, sourceSpan) {\r\n\t        this.directive = directive;\r\n\t        this.inputs = inputs;\r\n\t        this.hostProperties = hostProperties;\r\n\t        this.hostEvents = hostEvents;\r\n\t        this.exportAsVars = exportAsVars;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    DirectiveAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitDirective(this, context);\r\n\t    };\r\n\t    return DirectiveAst;\r\n\t})();\r\n\texports.DirectiveAst = DirectiveAst;\r\n\t/**\r\n\t * Position where content is to be projected (instance of `<ng-content>` in a template).\r\n\t */\r\n\tvar NgContentAst = (function () {\r\n\t    function NgContentAst(index, ngContentIndex, sourceSpan) {\r\n\t        this.index = index;\r\n\t        this.ngContentIndex = ngContentIndex;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    NgContentAst.prototype.visit = function (visitor, context) {\r\n\t        return visitor.visitNgContent(this, context);\r\n\t    };\r\n\t    return NgContentAst;\r\n\t})();\r\n\texports.NgContentAst = NgContentAst;\r\n\t/**\r\n\t * Enumeration of types of property bindings.\r\n\t */\r\n\t(function (PropertyBindingType) {\r\n\t    /**\r\n\t     * A normal binding to a property (e.g. `[property]=\"expression\"`).\r\n\t     */\r\n\t    PropertyBindingType[PropertyBindingType[\"Property\"] = 0] = \"Property\";\r\n\t    /**\r\n\t     * A binding to an element attribute (e.g. `[attr.name]=\"expression\"`).\r\n\t     */\r\n\t    PropertyBindingType[PropertyBindingType[\"Attribute\"] = 1] = \"Attribute\";\r\n\t    /**\r\n\t     * A binding to a CSS class (e.g. `[class.name]=\"condition\"`).\r\n\t     */\r\n\t    PropertyBindingType[PropertyBindingType[\"Class\"] = 2] = \"Class\";\r\n\t    /**\r\n\t     * A binding to a style rule (e.g. `[style.rule]=\"expression\"`).\r\n\t     */\r\n\t    PropertyBindingType[PropertyBindingType[\"Style\"] = 3] = \"Style\";\r\n\t})(exports.PropertyBindingType || (exports.PropertyBindingType = {}));\r\n\tvar PropertyBindingType = exports.PropertyBindingType;\r\n\t/**\r\n\t * Visit every node in a list of {@link TemplateAst}s with the given {@link TemplateAstVisitor}.\r\n\t */\r\n\tfunction templateVisitAll(visitor, asts, context) {\r\n\t    if (context === void 0) { context = null; }\r\n\t    var result = [];\r\n\t    asts.forEach(function (ast) {\r\n\t        var astResult = ast.visit(visitor, context);\r\n\t        if (lang_1.isPresent(astResult)) {\r\n\t            result.push(astResult);\r\n\t        }\r\n\t    });\r\n\t    return result;\r\n\t}\r\n\texports.templateVisitAll = templateVisitAll;\r\n\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar pipe_lifecycle_reflector_1 = __webpack_require__(610);\r\n\tvar binding_record_1 = __webpack_require__(290);\r\n\tvar directive_record_1 = __webpack_require__(192);\r\n\t/**\r\n\t * Indicates that the result of a {@link PipeMetadata} transformation has changed even though the\r\n\t * reference\r\n\t * has not changed.\r\n\t *\r\n\t * The wrapped value will be unwrapped by change detection, and the unwrapped value will be stored.\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * ```\r\n\t * if (this._latestValue === this._latestReturnedValue) {\r\n\t *    return this._latestReturnedValue;\r\n\t *  } else {\r\n\t *    this._latestReturnedValue = this._latestValue;\r\n\t *    return WrappedValue.wrap(this._latestValue); // this will force update\r\n\t *  }\r\n\t * ```\r\n\t */\r\n\tvar WrappedValue = (function () {\r\n\t    function WrappedValue(wrapped) {\r\n\t        this.wrapped = wrapped;\r\n\t    }\r\n\t    WrappedValue.wrap = function (value) {\r\n\t        var w = _wrappedValues[_wrappedIndex++ % 5];\r\n\t        w.wrapped = value;\r\n\t        return w;\r\n\t    };\r\n\t    return WrappedValue;\r\n\t})();\r\n\texports.WrappedValue = WrappedValue;\r\n\tvar _wrappedValues = [\r\n\t    new WrappedValue(null),\r\n\t    new WrappedValue(null),\r\n\t    new WrappedValue(null),\r\n\t    new WrappedValue(null),\r\n\t    new WrappedValue(null)\r\n\t];\r\n\tvar _wrappedIndex = 0;\r\n\t/**\r\n\t * Represents a basic change from a previous to a new value.\r\n\t */\r\n\tvar SimpleChange = (function () {\r\n\t    function SimpleChange(previousValue, currentValue) {\r\n\t        this.previousValue = previousValue;\r\n\t        this.currentValue = currentValue;\r\n\t    }\r\n\t    /**\r\n\t     * Check whether the new value is the first value assigned.\r\n\t     */\r\n\t    SimpleChange.prototype.isFirstChange = function () { return this.previousValue === ChangeDetectionUtil.uninitialized; };\r\n\t    return SimpleChange;\r\n\t})();\r\n\texports.SimpleChange = SimpleChange;\r\n\tfunction _simpleChange(previousValue, currentValue) {\r\n\t    return new SimpleChange(previousValue, currentValue);\r\n\t}\r\n\t/* tslint:disable:requireParameterType */\r\n\tvar ChangeDetectionUtil = (function () {\r\n\t    function ChangeDetectionUtil() {\r\n\t    }\r\n\t    ChangeDetectionUtil.arrayFn0 = function () { return []; };\r\n\t    ChangeDetectionUtil.arrayFn1 = function (a1) { return [a1]; };\r\n\t    ChangeDetectionUtil.arrayFn2 = function (a1, a2) { return [a1, a2]; };\r\n\t    ChangeDetectionUtil.arrayFn3 = function (a1, a2, a3) { return [a1, a2, a3]; };\r\n\t    ChangeDetectionUtil.arrayFn4 = function (a1, a2, a3, a4) { return [a1, a2, a3, a4]; };\r\n\t    ChangeDetectionUtil.arrayFn5 = function (a1, a2, a3, a4, a5) { return [a1, a2, a3, a4, a5]; };\r\n\t    ChangeDetectionUtil.arrayFn6 = function (a1, a2, a3, a4, a5, a6) { return [a1, a2, a3, a4, a5, a6]; };\r\n\t    ChangeDetectionUtil.arrayFn7 = function (a1, a2, a3, a4, a5, a6, a7) { return [a1, a2, a3, a4, a5, a6, a7]; };\r\n\t    ChangeDetectionUtil.arrayFn8 = function (a1, a2, a3, a4, a5, a6, a7, a8) {\r\n\t        return [a1, a2, a3, a4, a5, a6, a7, a8];\r\n\t    };\r\n\t    ChangeDetectionUtil.arrayFn9 = function (a1, a2, a3, a4, a5, a6, a7, a8, a9) {\r\n\t        return [a1, a2, a3, a4, a5, a6, a7, a8, a9];\r\n\t    };\r\n\t    ChangeDetectionUtil.operation_negate = function (value) { return !value; };\r\n\t    ChangeDetectionUtil.operation_add = function (left, right) { return left + right; };\r\n\t    ChangeDetectionUtil.operation_subtract = function (left, right) { return left - right; };\r\n\t    ChangeDetectionUtil.operation_multiply = function (left, right) { return left * right; };\r\n\t    ChangeDetectionUtil.operation_divide = function (left, right) { return left / right; };\r\n\t    ChangeDetectionUtil.operation_remainder = function (left, right) { return left % right; };\r\n\t    ChangeDetectionUtil.operation_equals = function (left, right) { return left == right; };\r\n\t    ChangeDetectionUtil.operation_not_equals = function (left, right) { return left != right; };\r\n\t    ChangeDetectionUtil.operation_identical = function (left, right) { return left === right; };\r\n\t    ChangeDetectionUtil.operation_not_identical = function (left, right) { return left !== right; };\r\n\t    ChangeDetectionUtil.operation_less_then = function (left, right) { return left < right; };\r\n\t    ChangeDetectionUtil.operation_greater_then = function (left, right) { return left > right; };\r\n\t    ChangeDetectionUtil.operation_less_or_equals_then = function (left, right) { return left <= right; };\r\n\t    ChangeDetectionUtil.operation_greater_or_equals_then = function (left, right) { return left >= right; };\r\n\t    ChangeDetectionUtil.cond = function (cond, trueVal, falseVal) { return cond ? trueVal : falseVal; };\r\n\t    ChangeDetectionUtil.mapFn = function (keys) {\r\n\t        function buildMap(values) {\r\n\t            var res = collection_1.StringMapWrapper.create();\r\n\t            for (var i = 0; i < keys.length; ++i) {\r\n\t                collection_1.StringMapWrapper.set(res, keys[i], values[i]);\r\n\t            }\r\n\t            return res;\r\n\t        }\r\n\t        switch (keys.length) {\r\n\t            case 0:\r\n\t                return function () { return []; };\r\n\t            case 1:\r\n\t                return function (a1) { return buildMap([a1]); };\r\n\t            case 2:\r\n\t                return function (a1, a2) { return buildMap([a1, a2]); };\r\n\t            case 3:\r\n\t                return function (a1, a2, a3) { return buildMap([a1, a2, a3]); };\r\n\t            case 4:\r\n\t                return function (a1, a2, a3, a4) { return buildMap([a1, a2, a3, a4]); };\r\n\t            case 5:\r\n\t                return function (a1, a2, a3, a4, a5) { return buildMap([a1, a2, a3, a4, a5]); };\r\n\t            case 6:\r\n\t                return function (a1, a2, a3, a4, a5, a6) { return buildMap([a1, a2, a3, a4, a5, a6]); };\r\n\t            case 7:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7) { return buildMap([a1, a2, a3, a4, a5, a6, a7]); };\r\n\t            case 8:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8) { return buildMap([a1, a2, a3, a4, a5, a6, a7, a8]); };\r\n\t            case 9:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9) {\r\n\t                    return buildMap([a1, a2, a3, a4, a5, a6, a7, a8, a9]);\r\n\t                };\r\n\t            default:\r\n\t                throw new exceptions_1.BaseException(\"Does not support literal maps with more than 9 elements\");\r\n\t        }\r\n\t    };\r\n\t    ChangeDetectionUtil.keyedAccess = function (obj, args) { return obj[args[0]]; };\r\n\t    ChangeDetectionUtil.unwrapValue = function (value) {\r\n\t        if (value instanceof WrappedValue) {\r\n\t            return value.wrapped;\r\n\t        }\r\n\t        else {\r\n\t            return value;\r\n\t        }\r\n\t    };\r\n\t    ChangeDetectionUtil.changeDetectionMode = function (strategy) {\r\n\t        return constants_1.isDefaultChangeDetectionStrategy(strategy) ? constants_1.ChangeDetectionStrategy.CheckAlways :\r\n\t            constants_1.ChangeDetectionStrategy.CheckOnce;\r\n\t    };\r\n\t    ChangeDetectionUtil.simpleChange = function (previousValue, currentValue) {\r\n\t        return _simpleChange(previousValue, currentValue);\r\n\t    };\r\n\t    ChangeDetectionUtil.isValueBlank = function (value) { return lang_1.isBlank(value); };\r\n\t    ChangeDetectionUtil.s = function (value) { return lang_1.isPresent(value) ? \"\" + value : ''; };\r\n\t    ChangeDetectionUtil.protoByIndex = function (protos, selfIndex) {\r\n\t        return selfIndex < 1 ?\r\n\t            null :\r\n\t            protos[selfIndex - 1]; // self index is shifted by one because of context\r\n\t    };\r\n\t    ChangeDetectionUtil.callPipeOnDestroy = function (selectedPipe) {\r\n\t        if (pipe_lifecycle_reflector_1.implementsOnDestroy(selectedPipe.pipe)) {\r\n\t            selectedPipe.pipe.ngOnDestroy();\r\n\t        }\r\n\t    };\r\n\t    ChangeDetectionUtil.bindingTarget = function (mode, elementIndex, name, unit, debug) {\r\n\t        return new binding_record_1.BindingTarget(mode, elementIndex, name, unit, debug);\r\n\t    };\r\n\t    ChangeDetectionUtil.directiveIndex = function (elementIndex, directiveIndex) {\r\n\t        return new directive_record_1.DirectiveIndex(elementIndex, directiveIndex);\r\n\t    };\r\n\t    ChangeDetectionUtil.looseNotIdentical = function (a, b) { return !lang_1.looseIdentical(a, b); };\r\n\t    ChangeDetectionUtil.devModeEqual = function (a, b) {\r\n\t        if (collection_1.isListLikeIterable(a) && collection_1.isListLikeIterable(b)) {\r\n\t            return collection_1.areIterablesEqual(a, b, ChangeDetectionUtil.devModeEqual);\r\n\t        }\r\n\t        else if (!collection_1.isListLikeIterable(a) && !lang_1.isPrimitive(a) && !collection_1.isListLikeIterable(b) &&\r\n\t            !lang_1.isPrimitive(b)) {\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            return lang_1.looseIdentical(a, b);\r\n\t        }\r\n\t    };\r\n\t    ChangeDetectionUtil.uninitialized = lang_1.CONST_EXPR(new Object());\r\n\t    return ChangeDetectionUtil;\r\n\t})();\r\n\texports.ChangeDetectionUtil = ChangeDetectionUtil;\r\n\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * A parameter metadata that specifies a dependency.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/6uHYJK?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class Engine {}\r\n\t *\r\n\t * @Injectable()\r\n\t * class Car {\r\n\t *   engine;\r\n\t *   constructor(@Inject(\"MyEngine\") engine:Engine) {\r\n\t *     this.engine = engine;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *  provide(\"MyEngine\", {useClass: Engine}),\r\n\t *  Car\r\n\t * ]);\r\n\t *\r\n\t * expect(injector.get(Car).engine instanceof Engine).toBe(true);\r\n\t * ```\r\n\t *\r\n\t * When `@Inject()` is not present, {@link Injector} will use the type annotation of the parameter.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * class Engine {}\r\n\t *\r\n\t * @Injectable()\r\n\t * class Car {\r\n\t *   constructor(public engine: Engine) {} //same as constructor(@Inject(Engine) engine:Engine)\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([Engine, Car]);\r\n\t * expect(injector.get(Car).engine instanceof Engine).toBe(true);\r\n\t * ```\r\n\t */\r\n\tvar InjectMetadata = (function () {\r\n\t    function InjectMetadata(token) {\r\n\t        this.token = token;\r\n\t    }\r\n\t    InjectMetadata.prototype.toString = function () { return \"@Inject(\" + lang_1.stringify(this.token) + \")\"; };\r\n\t    InjectMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], InjectMetadata);\r\n\t    return InjectMetadata;\r\n\t})();\r\n\texports.InjectMetadata = InjectMetadata;\r\n\t/**\r\n\t * A parameter metadata that marks a dependency as optional. {@link Injector} provides `null` if\r\n\t * the dependency is not found.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/AsryOm?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class Engine {}\r\n\t *\r\n\t * @Injectable()\r\n\t * class Car {\r\n\t *   engine;\r\n\t *   constructor(@Optional() engine:Engine) {\r\n\t *     this.engine = engine;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([Car]);\r\n\t * expect(injector.get(Car).engine).toBeNull();\r\n\t * ```\r\n\t */\r\n\tvar OptionalMetadata = (function () {\r\n\t    function OptionalMetadata() {\r\n\t    }\r\n\t    OptionalMetadata.prototype.toString = function () { return \"@Optional()\"; };\r\n\t    OptionalMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], OptionalMetadata);\r\n\t    return OptionalMetadata;\r\n\t})();\r\n\texports.OptionalMetadata = OptionalMetadata;\r\n\t/**\r\n\t * `DependencyMetadata` is used by the framework to extend DI.\r\n\t * This is internal to Angular and should not be used directly.\r\n\t */\r\n\tvar DependencyMetadata = (function () {\r\n\t    function DependencyMetadata() {\r\n\t    }\r\n\t    Object.defineProperty(DependencyMetadata.prototype, \"token\", {\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DependencyMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DependencyMetadata);\r\n\t    return DependencyMetadata;\r\n\t})();\r\n\texports.DependencyMetadata = DependencyMetadata;\r\n\t/**\r\n\t * A marker metadata that marks a class as available to {@link Injector} for creation.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/Wk4DMQ?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * @Injectable()\r\n\t * class UsefulService {}\r\n\t *\r\n\t * @Injectable()\r\n\t * class NeedsService {\r\n\t *   constructor(public service:UsefulService) {}\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([NeedsService, UsefulService]);\r\n\t * expect(injector.get(NeedsService).service instanceof UsefulService).toBe(true);\r\n\t * ```\r\n\t * {@link Injector} will throw {@link NoAnnotationError} when trying to instantiate a class that\r\n\t * does not have `@Injectable` marker, as shown in the example below.\r\n\t *\r\n\t * ```typescript\r\n\t * class UsefulService {}\r\n\t *\r\n\t * class NeedsService {\r\n\t *   constructor(public service:UsefulService) {}\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([NeedsService, UsefulService]);\r\n\t * expect(() => injector.get(NeedsService)).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar InjectableMetadata = (function () {\r\n\t    function InjectableMetadata() {\r\n\t    }\r\n\t    InjectableMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], InjectableMetadata);\r\n\t    return InjectableMetadata;\r\n\t})();\r\n\texports.InjectableMetadata = InjectableMetadata;\r\n\t/**\r\n\t * Specifies that an {@link Injector} should retrieve a dependency only from itself.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/NeagAg?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class Dependency {\r\n\t * }\r\n\t *\r\n\t * @Injectable()\r\n\t * class NeedsDependency {\r\n\t *   dependency;\r\n\t *   constructor(@Self() dependency:Dependency) {\r\n\t *     this.dependency = dependency;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * var inj = Injector.resolveAndCreate([Dependency, NeedsDependency]);\r\n\t * var nd = inj.get(NeedsDependency);\r\n\t *\r\n\t * expect(nd.dependency instanceof Dependency).toBe(true);\r\n\t *\r\n\t * var inj = Injector.resolveAndCreate([Dependency]);\r\n\t * var child = inj.resolveAndCreateChild([NeedsDependency]);\r\n\t * expect(() => child.get(NeedsDependency)).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar SelfMetadata = (function () {\r\n\t    function SelfMetadata() {\r\n\t    }\r\n\t    SelfMetadata.prototype.toString = function () { return \"@Self()\"; };\r\n\t    SelfMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], SelfMetadata);\r\n\t    return SelfMetadata;\r\n\t})();\r\n\texports.SelfMetadata = SelfMetadata;\r\n\t/**\r\n\t * Specifies that the dependency resolution should start from the parent injector.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/Wchdzb?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class Dependency {\r\n\t * }\r\n\t *\r\n\t * @Injectable()\r\n\t * class NeedsDependency {\r\n\t *   dependency;\r\n\t *   constructor(@SkipSelf() dependency:Dependency) {\r\n\t *     this.dependency = dependency;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * var parent = Injector.resolveAndCreate([Dependency]);\r\n\t * var child = parent.resolveAndCreateChild([NeedsDependency]);\r\n\t * expect(child.get(NeedsDependency).dependency instanceof Depedency).toBe(true);\r\n\t *\r\n\t * var inj = Injector.resolveAndCreate([Dependency, NeedsDependency]);\r\n\t * expect(() => inj.get(NeedsDependency)).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar SkipSelfMetadata = (function () {\r\n\t    function SkipSelfMetadata() {\r\n\t    }\r\n\t    SkipSelfMetadata.prototype.toString = function () { return \"@SkipSelf()\"; };\r\n\t    SkipSelfMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], SkipSelfMetadata);\r\n\t    return SkipSelfMetadata;\r\n\t})();\r\n\texports.SkipSelfMetadata = SkipSelfMetadata;\r\n\t/**\r\n\t * Specifies that an injector should retrieve a dependency from any injector until reaching the\r\n\t * closest host.\r\n\t *\r\n\t * In Angular, a component element is automatically declared as a host for all the injectors in\r\n\t * its view.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/GX79pV?p=preview))\r\n\t *\r\n\t * In the following example `App` contains `ParentCmp`, which contains `ChildDirective`.\r\n\t * So `ParentCmp` is the host of `ChildDirective`.\r\n\t *\r\n\t * `ChildDirective` depends on two services: `HostService` and `OtherService`.\r\n\t * `HostService` is defined at `ParentCmp`, and `OtherService` is defined at `App`.\r\n\t *\r\n\t *```typescript\r\n\t * class OtherService {}\r\n\t * class HostService {}\r\n\t *\r\n\t * @Directive({\r\n\t *   selector: 'child-directive'\r\n\t * })\r\n\t * class ChildDirective {\r\n\t *   constructor(@Optional() @Host() os:OtherService, @Optional() @Host() hs:HostService){\r\n\t *     console.log(\"os is null\", os);\r\n\t *     console.log(\"hs is NOT null\", hs);\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'parent-cmp',\r\n\t *   providers: [HostService],\r\n\t *   template: `\r\n\t *     Dir: <child-directive></child-directive>\r\n\t *   `,\r\n\t *   directives: [ChildDirective]\r\n\t * })\r\n\t * class ParentCmp {\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   providers: [OtherService],\r\n\t *   template: `\r\n\t *     Parent: <parent-cmp></parent-cmp>\r\n\t *   `,\r\n\t *   directives: [ParentCmp]\r\n\t * })\r\n\t * class App {\r\n\t * }\r\n\t *\r\n\t * bootstrap(App);\r\n\t *```\r\n\t */\r\n\tvar HostMetadata = (function () {\r\n\t    function HostMetadata() {\r\n\t    }\r\n\t    HostMetadata.prototype.toString = function () { return \"@Host()\"; };\r\n\t    HostMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], HostMetadata);\r\n\t    return HostMetadata;\r\n\t})();\r\n\texports.HostMetadata = HostMetadata;\r\n\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar view_1 = __webpack_require__(97);\r\n\tvar view_ref_1 = __webpack_require__(132);\r\n\t/**\r\n\t * Low-level service for compiling {@link Component}s into {@link ProtoViewRef ProtoViews}s, which\r\n\t * can later be used to create and render a Component instance.\r\n\t *\r\n\t * Most applications should instead use higher-level {@link DynamicComponentLoader} service, which\r\n\t * both compiles and instantiates a Component.\r\n\t */\r\n\tvar Compiler = (function () {\r\n\t    function Compiler() {\r\n\t    }\r\n\t    return Compiler;\r\n\t})();\r\n\texports.Compiler = Compiler;\r\n\tfunction isHostViewFactory(type) {\r\n\t    return type instanceof view_1.HostViewFactory;\r\n\t}\r\n\tvar Compiler_ = (function (_super) {\r\n\t    __extends(Compiler_, _super);\r\n\t    function Compiler_() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Compiler_.prototype.compileInHost = function (componentType) {\r\n\t        var metadatas = reflection_1.reflector.annotations(componentType);\r\n\t        var hostViewFactory = metadatas.find(isHostViewFactory);\r\n\t        if (lang_1.isBlank(hostViewFactory)) {\r\n\t            throw new exceptions_1.BaseException(\"No precompiled component \" + lang_1.stringify(componentType) + \" found\");\r\n\t        }\r\n\t        return async_1.PromiseWrapper.resolve(new view_ref_1.HostViewFactoryRef_(hostViewFactory));\r\n\t    };\r\n\t    Compiler_.prototype.clearCache = function () { };\r\n\t    Compiler_ = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], Compiler_);\r\n\t    return Compiler_;\r\n\t})(Compiler);\r\n\texports.Compiler_ = Compiler_;\r\n\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar ng_zone_1 = __webpack_require__(136);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\texports.EVENT_MANAGER_PLUGINS = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"EventManagerPlugins\"));\r\n\tvar EventManager = (function () {\r\n\t    function EventManager(plugins, _zone) {\r\n\t        var _this = this;\r\n\t        this._zone = _zone;\r\n\t        plugins.forEach(function (p) { return p.manager = _this; });\r\n\t        this._plugins = collection_1.ListWrapper.reversed(plugins);\r\n\t    }\r\n\t    EventManager.prototype.addEventListener = function (element, eventName, handler) {\r\n\t        var plugin = this._findPluginFor(eventName);\r\n\t        return plugin.addEventListener(element, eventName, handler);\r\n\t    };\r\n\t    EventManager.prototype.addGlobalEventListener = function (target, eventName, handler) {\r\n\t        var plugin = this._findPluginFor(eventName);\r\n\t        return plugin.addGlobalEventListener(target, eventName, handler);\r\n\t    };\r\n\t    EventManager.prototype.getZone = function () { return this._zone; };\r\n\t    /** @internal */\r\n\t    EventManager.prototype._findPluginFor = function (eventName) {\r\n\t        var plugins = this._plugins;\r\n\t        for (var i = 0; i < plugins.length; i++) {\r\n\t            var plugin = plugins[i];\r\n\t            if (plugin.supports(eventName)) {\r\n\t                return plugin;\r\n\t            }\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"No event manager plugin found for event \" + eventName);\r\n\t    };\r\n\t    EventManager = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        __param(0, di_1.Inject(exports.EVENT_MANAGER_PLUGINS)), \r\n\t        __metadata('design:paramtypes', [Array, ng_zone_1.NgZone])\r\n\t    ], EventManager);\r\n\t    return EventManager;\r\n\t})();\r\n\texports.EventManager = EventManager;\r\n\tvar EventManagerPlugin = (function () {\r\n\t    function EventManagerPlugin() {\r\n\t    }\r\n\t    // That is equivalent to having supporting $event.target\r\n\t    EventManagerPlugin.prototype.supports = function (eventName) { return false; };\r\n\t    EventManagerPlugin.prototype.addEventListener = function (element, eventName, handler) {\r\n\t        throw \"not implemented\";\r\n\t    };\r\n\t    EventManagerPlugin.prototype.addGlobalEventListener = function (element, eventName, handler) {\r\n\t        throw \"not implemented\";\r\n\t    };\r\n\t    return EventManagerPlugin;\r\n\t})();\r\n\texports.EventManagerPlugin = EventManagerPlugin;\r\n\n\n/***/ },\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar abstract_control_directive_1 = __webpack_require__(173);\r\n\t/**\r\n\t * A directive that contains multiple {@link NgControl}s.\r\n\t *\r\n\t * Only used by the forms module.\r\n\t */\r\n\tvar ControlContainer = (function (_super) {\r\n\t    __extends(ControlContainer, _super);\r\n\t    function ControlContainer() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(ControlContainer.prototype, \"formDirective\", {\r\n\t        /**\r\n\t         * Get the form to which this container belongs.\r\n\t         */\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ControlContainer.prototype, \"path\", {\r\n\t        /**\r\n\t         * Get the path to this container.\r\n\t         */\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ControlContainer;\r\n\t})(abstract_control_directive_1.AbstractControlDirective);\r\n\texports.ControlContainer = ControlContainer;\r\n\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\t// see http://www.w3.org/TR/html51/syntax.html#named-character-references\r\n\t// see https://html.spec.whatwg.org/multipage/entities.json\r\n\t// This list is not exhaustive to keep the compiler footprint low.\r\n\t// The `&#123;` / `&#x1ab;` syntax should be used when the named character reference does not exist.\r\n\texports.NAMED_ENTITIES = lang_1.CONST_EXPR({\r\n\t    'Aacute': '\\u00C1',\r\n\t    'aacute': '\\u00E1',\r\n\t    'Acirc': '\\u00C2',\r\n\t    'acirc': '\\u00E2',\r\n\t    'acute': '\\u00B4',\r\n\t    'AElig': '\\u00C6',\r\n\t    'aelig': '\\u00E6',\r\n\t    'Agrave': '\\u00C0',\r\n\t    'agrave': '\\u00E0',\r\n\t    'alefsym': '\\u2135',\r\n\t    'Alpha': '\\u0391',\r\n\t    'alpha': '\\u03B1',\r\n\t    'amp': '&',\r\n\t    'and': '\\u2227',\r\n\t    'ang': '\\u2220',\r\n\t    'apos': '\\u0027',\r\n\t    'Aring': '\\u00C5',\r\n\t    'aring': '\\u00E5',\r\n\t    'asymp': '\\u2248',\r\n\t    'Atilde': '\\u00C3',\r\n\t    'atilde': '\\u00E3',\r\n\t    'Auml': '\\u00C4',\r\n\t    'auml': '\\u00E4',\r\n\t    'bdquo': '\\u201E',\r\n\t    'Beta': '\\u0392',\r\n\t    'beta': '\\u03B2',\r\n\t    'brvbar': '\\u00A6',\r\n\t    'bull': '\\u2022',\r\n\t    'cap': '\\u2229',\r\n\t    'Ccedil': '\\u00C7',\r\n\t    'ccedil': '\\u00E7',\r\n\t    'cedil': '\\u00B8',\r\n\t    'cent': '\\u00A2',\r\n\t    'Chi': '\\u03A7',\r\n\t    'chi': '\\u03C7',\r\n\t    'circ': '\\u02C6',\r\n\t    'clubs': '\\u2663',\r\n\t    'cong': '\\u2245',\r\n\t    'copy': '\\u00A9',\r\n\t    'crarr': '\\u21B5',\r\n\t    'cup': '\\u222A',\r\n\t    'curren': '\\u00A4',\r\n\t    'dagger': '\\u2020',\r\n\t    'Dagger': '\\u2021',\r\n\t    'darr': '\\u2193',\r\n\t    'dArr': '\\u21D3',\r\n\t    'deg': '\\u00B0',\r\n\t    'Delta': '\\u0394',\r\n\t    'delta': '\\u03B4',\r\n\t    'diams': '\\u2666',\r\n\t    'divide': '\\u00F7',\r\n\t    'Eacute': '\\u00C9',\r\n\t    'eacute': '\\u00E9',\r\n\t    'Ecirc': '\\u00CA',\r\n\t    'ecirc': '\\u00EA',\r\n\t    'Egrave': '\\u00C8',\r\n\t    'egrave': '\\u00E8',\r\n\t    'empty': '\\u2205',\r\n\t    'emsp': '\\u2003',\r\n\t    'ensp': '\\u2002',\r\n\t    'Epsilon': '\\u0395',\r\n\t    'epsilon': '\\u03B5',\r\n\t    'equiv': '\\u2261',\r\n\t    'Eta': '\\u0397',\r\n\t    'eta': '\\u03B7',\r\n\t    'ETH': '\\u00D0',\r\n\t    'eth': '\\u00F0',\r\n\t    'Euml': '\\u00CB',\r\n\t    'euml': '\\u00EB',\r\n\t    'euro': '\\u20AC',\r\n\t    'exist': '\\u2203',\r\n\t    'fnof': '\\u0192',\r\n\t    'forall': '\\u2200',\r\n\t    'frac12': '\\u00BD',\r\n\t    'frac14': '\\u00BC',\r\n\t    'frac34': '\\u00BE',\r\n\t    'frasl': '\\u2044',\r\n\t    'Gamma': '\\u0393',\r\n\t    'gamma': '\\u03B3',\r\n\t    'ge': '\\u2265',\r\n\t    'gt': '>',\r\n\t    'harr': '\\u2194',\r\n\t    'hArr': '\\u21D4',\r\n\t    'hearts': '\\u2665',\r\n\t    'hellip': '\\u2026',\r\n\t    'Iacute': '\\u00CD',\r\n\t    'iacute': '\\u00ED',\r\n\t    'Icirc': '\\u00CE',\r\n\t    'icirc': '\\u00EE',\r\n\t    'iexcl': '\\u00A1',\r\n\t    'Igrave': '\\u00CC',\r\n\t    'igrave': '\\u00EC',\r\n\t    'image': '\\u2111',\r\n\t    'infin': '\\u221E',\r\n\t    'int': '\\u222B',\r\n\t    'Iota': '\\u0399',\r\n\t    'iota': '\\u03B9',\r\n\t    'iquest': '\\u00BF',\r\n\t    'isin': '\\u2208',\r\n\t    'Iuml': '\\u00CF',\r\n\t    'iuml': '\\u00EF',\r\n\t    'Kappa': '\\u039A',\r\n\t    'kappa': '\\u03BA',\r\n\t    'Lambda': '\\u039B',\r\n\t    'lambda': '\\u03BB',\r\n\t    'lang': '\\u27E8',\r\n\t    'laquo': '\\u00AB',\r\n\t    'larr': '\\u2190',\r\n\t    'lArr': '\\u21D0',\r\n\t    'lceil': '\\u2308',\r\n\t    'ldquo': '\\u201C',\r\n\t    'le': '\\u2264',\r\n\t    'lfloor': '\\u230A',\r\n\t    'lowast': '\\u2217',\r\n\t    'loz': '\\u25CA',\r\n\t    'lrm': '\\u200E',\r\n\t    'lsaquo': '\\u2039',\r\n\t    'lsquo': '\\u2018',\r\n\t    'lt': '<',\r\n\t    'macr': '\\u00AF',\r\n\t    'mdash': '\\u2014',\r\n\t    'micro': '\\u00B5',\r\n\t    'middot': '\\u00B7',\r\n\t    'minus': '\\u2212',\r\n\t    'Mu': '\\u039C',\r\n\t    'mu': '\\u03BC',\r\n\t    'nabla': '\\u2207',\r\n\t    'nbsp': '\\u00A0',\r\n\t    'ndash': '\\u2013',\r\n\t    'ne': '\\u2260',\r\n\t    'ni': '\\u220B',\r\n\t    'not': '\\u00AC',\r\n\t    'notin': '\\u2209',\r\n\t    'nsub': '\\u2284',\r\n\t    'Ntilde': '\\u00D1',\r\n\t    'ntilde': '\\u00F1',\r\n\t    'Nu': '\\u039D',\r\n\t    'nu': '\\u03BD',\r\n\t    'Oacute': '\\u00D3',\r\n\t    'oacute': '\\u00F3',\r\n\t    'Ocirc': '\\u00D4',\r\n\t    'ocirc': '\\u00F4',\r\n\t    'OElig': '\\u0152',\r\n\t    'oelig': '\\u0153',\r\n\t    'Ograve': '\\u00D2',\r\n\t    'ograve': '\\u00F2',\r\n\t    'oline': '\\u203E',\r\n\t    'Omega': '\\u03A9',\r\n\t    'omega': '\\u03C9',\r\n\t    'Omicron': '\\u039F',\r\n\t    'omicron': '\\u03BF',\r\n\t    'oplus': '\\u2295',\r\n\t    'or': '\\u2228',\r\n\t    'ordf': '\\u00AA',\r\n\t    'ordm': '\\u00BA',\r\n\t    'Oslash': '\\u00D8',\r\n\t    'oslash': '\\u00F8',\r\n\t    'Otilde': '\\u00D5',\r\n\t    'otilde': '\\u00F5',\r\n\t    'otimes': '\\u2297',\r\n\t    'Ouml': '\\u00D6',\r\n\t    'ouml': '\\u00F6',\r\n\t    'para': '\\u00B6',\r\n\t    'permil': '\\u2030',\r\n\t    'perp': '\\u22A5',\r\n\t    'Phi': '\\u03A6',\r\n\t    'phi': '\\u03C6',\r\n\t    'Pi': '\\u03A0',\r\n\t    'pi': '\\u03C0',\r\n\t    'piv': '\\u03D6',\r\n\t    'plusmn': '\\u00B1',\r\n\t    'pound': '\\u00A3',\r\n\t    'prime': '\\u2032',\r\n\t    'Prime': '\\u2033',\r\n\t    'prod': '\\u220F',\r\n\t    'prop': '\\u221D',\r\n\t    'Psi': '\\u03A8',\r\n\t    'psi': '\\u03C8',\r\n\t    'quot': '\\u0022',\r\n\t    'radic': '\\u221A',\r\n\t    'rang': '\\u27E9',\r\n\t    'raquo': '\\u00BB',\r\n\t    'rarr': '\\u2192',\r\n\t    'rArr': '\\u21D2',\r\n\t    'rceil': '\\u2309',\r\n\t    'rdquo': '\\u201D',\r\n\t    'real': '\\u211C',\r\n\t    'reg': '\\u00AE',\r\n\t    'rfloor': '\\u230B',\r\n\t    'Rho': '\\u03A1',\r\n\t    'rho': '\\u03C1',\r\n\t    'rlm': '\\u200F',\r\n\t    'rsaquo': '\\u203A',\r\n\t    'rsquo': '\\u2019',\r\n\t    'sbquo': '\\u201A',\r\n\t    'Scaron': '\\u0160',\r\n\t    'scaron': '\\u0161',\r\n\t    'sdot': '\\u22C5',\r\n\t    'sect': '\\u00A7',\r\n\t    'shy': '\\u00AD',\r\n\t    'Sigma': '\\u03A3',\r\n\t    'sigma': '\\u03C3',\r\n\t    'sigmaf': '\\u03C2',\r\n\t    'sim': '\\u223C',\r\n\t    'spades': '\\u2660',\r\n\t    'sub': '\\u2282',\r\n\t    'sube': '\\u2286',\r\n\t    'sum': '\\u2211',\r\n\t    'sup': '\\u2283',\r\n\t    'sup1': '\\u00B9',\r\n\t    'sup2': '\\u00B2',\r\n\t    'sup3': '\\u00B3',\r\n\t    'supe': '\\u2287',\r\n\t    'szlig': '\\u00DF',\r\n\t    'Tau': '\\u03A4',\r\n\t    'tau': '\\u03C4',\r\n\t    'there4': '\\u2234',\r\n\t    'Theta': '\\u0398',\r\n\t    'theta': '\\u03B8',\r\n\t    'thetasym': '\\u03D1',\r\n\t    'thinsp': '\\u2009',\r\n\t    'THORN': '\\u00DE',\r\n\t    'thorn': '\\u00FE',\r\n\t    'tilde': '\\u02DC',\r\n\t    'times': '\\u00D7',\r\n\t    'trade': '\\u2122',\r\n\t    'Uacute': '\\u00DA',\r\n\t    'uacute': '\\u00FA',\r\n\t    'uarr': '\\u2191',\r\n\t    'uArr': '\\u21D1',\r\n\t    'Ucirc': '\\u00DB',\r\n\t    'ucirc': '\\u00FB',\r\n\t    'Ugrave': '\\u00D9',\r\n\t    'ugrave': '\\u00F9',\r\n\t    'uml': '\\u00A8',\r\n\t    'upsih': '\\u03D2',\r\n\t    'Upsilon': '\\u03A5',\r\n\t    'upsilon': '\\u03C5',\r\n\t    'Uuml': '\\u00DC',\r\n\t    'uuml': '\\u00FC',\r\n\t    'weierp': '\\u2118',\r\n\t    'Xi': '\\u039E',\r\n\t    'xi': '\\u03BE',\r\n\t    'Yacute': '\\u00DD',\r\n\t    'yacute': '\\u00FD',\r\n\t    'yen': '\\u00A5',\r\n\t    'yuml': '\\u00FF',\r\n\t    'Yuml': '\\u0178',\r\n\t    'Zeta': '\\u0396',\r\n\t    'zeta': '\\u03B6',\r\n\t    'zwj': '\\u200D',\r\n\t    'zwnj': '\\u200C',\r\n\t});\r\n\t(function (HtmlTagContentType) {\r\n\t    HtmlTagContentType[HtmlTagContentType[\"RAW_TEXT\"] = 0] = \"RAW_TEXT\";\r\n\t    HtmlTagContentType[HtmlTagContentType[\"ESCAPABLE_RAW_TEXT\"] = 1] = \"ESCAPABLE_RAW_TEXT\";\r\n\t    HtmlTagContentType[HtmlTagContentType[\"PARSABLE_DATA\"] = 2] = \"PARSABLE_DATA\";\r\n\t})(exports.HtmlTagContentType || (exports.HtmlTagContentType = {}));\r\n\tvar HtmlTagContentType = exports.HtmlTagContentType;\r\n\tvar HtmlTagDefinition = (function () {\r\n\t    function HtmlTagDefinition(_a) {\r\n\t        var _this = this;\r\n\t        var _b = _a === void 0 ? {} : _a, closedByChildren = _b.closedByChildren, requiredParents = _b.requiredParents, implicitNamespacePrefix = _b.implicitNamespacePrefix, contentType = _b.contentType, closedByParent = _b.closedByParent, isVoid = _b.isVoid, ignoreFirstLf = _b.ignoreFirstLf;\r\n\t        this.closedByChildren = {};\r\n\t        this.closedByParent = false;\r\n\t        if (lang_1.isPresent(closedByChildren) && closedByChildren.length > 0) {\r\n\t            closedByChildren.forEach(function (tagName) { return _this.closedByChildren[tagName] = true; });\r\n\t        }\r\n\t        this.isVoid = lang_1.normalizeBool(isVoid);\r\n\t        this.closedByParent = lang_1.normalizeBool(closedByParent) || this.isVoid;\r\n\t        if (lang_1.isPresent(requiredParents) && requiredParents.length > 0) {\r\n\t            this.requiredParents = {};\r\n\t            this.parentToAdd = requiredParents[0];\r\n\t            requiredParents.forEach(function (tagName) { return _this.requiredParents[tagName] = true; });\r\n\t        }\r\n\t        this.implicitNamespacePrefix = implicitNamespacePrefix;\r\n\t        this.contentType = lang_1.isPresent(contentType) ? contentType : HtmlTagContentType.PARSABLE_DATA;\r\n\t        this.ignoreFirstLf = lang_1.normalizeBool(ignoreFirstLf);\r\n\t    }\r\n\t    HtmlTagDefinition.prototype.requireExtraParent = function (currentParent) {\r\n\t        if (lang_1.isBlank(this.requiredParents)) {\r\n\t            return false;\r\n\t        }\r\n\t        if (lang_1.isBlank(currentParent)) {\r\n\t            return true;\r\n\t        }\r\n\t        var lcParent = currentParent.toLowerCase();\r\n\t        return this.requiredParents[lcParent] != true && lcParent != 'template';\r\n\t    };\r\n\t    HtmlTagDefinition.prototype.isClosedByChild = function (name) {\r\n\t        return this.isVoid || lang_1.normalizeBool(this.closedByChildren[name.toLowerCase()]);\r\n\t    };\r\n\t    return HtmlTagDefinition;\r\n\t})();\r\n\texports.HtmlTagDefinition = HtmlTagDefinition;\r\n\t// see http://www.w3.org/TR/html51/syntax.html#optional-tags\r\n\t// This implementation does not fully conform to the HTML5 spec.\r\n\tvar TAG_DEFINITIONS = {\r\n\t    'base': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'meta': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'area': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'embed': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'link': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'img': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'input': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'param': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'hr': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'br': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'source': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'track': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'wbr': new HtmlTagDefinition({ isVoid: true }),\r\n\t    'p': new HtmlTagDefinition({\r\n\t        closedByChildren: [\r\n\t            'address',\r\n\t            'article',\r\n\t            'aside',\r\n\t            'blockquote',\r\n\t            'div',\r\n\t            'dl',\r\n\t            'fieldset',\r\n\t            'footer',\r\n\t            'form',\r\n\t            'h1',\r\n\t            'h2',\r\n\t            'h3',\r\n\t            'h4',\r\n\t            'h5',\r\n\t            'h6',\r\n\t            'header',\r\n\t            'hgroup',\r\n\t            'hr',\r\n\t            'main',\r\n\t            'nav',\r\n\t            'ol',\r\n\t            'p',\r\n\t            'pre',\r\n\t            'section',\r\n\t            'table',\r\n\t            'ul'\r\n\t        ],\r\n\t        closedByParent: true\r\n\t    }),\r\n\t    'thead': new HtmlTagDefinition({ closedByChildren: ['tbody', 'tfoot'] }),\r\n\t    'tbody': new HtmlTagDefinition({ closedByChildren: ['tbody', 'tfoot'], closedByParent: true }),\r\n\t    'tfoot': new HtmlTagDefinition({ closedByChildren: ['tbody'], closedByParent: true }),\r\n\t    'tr': new HtmlTagDefinition({\r\n\t        closedByChildren: ['tr'],\r\n\t        requiredParents: ['tbody', 'tfoot', 'thead'],\r\n\t        closedByParent: true\r\n\t    }),\r\n\t    'td': new HtmlTagDefinition({ closedByChildren: ['td', 'th'], closedByParent: true }),\r\n\t    'th': new HtmlTagDefinition({ closedByChildren: ['td', 'th'], closedByParent: true }),\r\n\t    'col': new HtmlTagDefinition({ requiredParents: ['colgroup'], isVoid: true }),\r\n\t    'svg': new HtmlTagDefinition({ implicitNamespacePrefix: 'svg' }),\r\n\t    'math': new HtmlTagDefinition({ implicitNamespacePrefix: 'math' }),\r\n\t    'li': new HtmlTagDefinition({ closedByChildren: ['li'], closedByParent: true }),\r\n\t    'dt': new HtmlTagDefinition({ closedByChildren: ['dt', 'dd'] }),\r\n\t    'dd': new HtmlTagDefinition({ closedByChildren: ['dt', 'dd'], closedByParent: true }),\r\n\t    'rb': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),\r\n\t    'rt': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),\r\n\t    'rtc': new HtmlTagDefinition({ closedByChildren: ['rb', 'rtc', 'rp'], closedByParent: true }),\r\n\t    'rp': new HtmlTagDefinition({ closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true }),\r\n\t    'optgroup': new HtmlTagDefinition({ closedByChildren: ['optgroup'], closedByParent: true }),\r\n\t    'option': new HtmlTagDefinition({ closedByChildren: ['option', 'optgroup'], closedByParent: true }),\r\n\t    'pre': new HtmlTagDefinition({ ignoreFirstLf: true }),\r\n\t    'listing': new HtmlTagDefinition({ ignoreFirstLf: true }),\r\n\t    'style': new HtmlTagDefinition({ contentType: HtmlTagContentType.RAW_TEXT }),\r\n\t    'script': new HtmlTagDefinition({ contentType: HtmlTagContentType.RAW_TEXT }),\r\n\t    'title': new HtmlTagDefinition({ contentType: HtmlTagContentType.ESCAPABLE_RAW_TEXT }),\r\n\t    'textarea': new HtmlTagDefinition({ contentType: HtmlTagContentType.ESCAPABLE_RAW_TEXT, ignoreFirstLf: true }),\r\n\t};\r\n\tvar DEFAULT_TAG_DEFINITION = new HtmlTagDefinition();\r\n\tfunction getHtmlTagDefinition(tagName) {\r\n\t    var result = TAG_DEFINITIONS[tagName.toLowerCase()];\r\n\t    return lang_1.isPresent(result) ? result : DEFAULT_TAG_DEFINITION;\r\n\t}\r\n\texports.getHtmlTagDefinition = getHtmlTagDefinition;\r\n\tvar NS_PREFIX_RE = /^@([^:]+):(.+)/g;\r\n\tfunction splitNsName(elementName) {\r\n\t    if (elementName[0] != '@') {\r\n\t        return [null, elementName];\r\n\t    }\r\n\t    var match = lang_1.RegExpWrapper.firstMatch(NS_PREFIX_RE, elementName);\r\n\t    return [match[1], match[2]];\r\n\t}\r\n\texports.splitNsName = splitNsName;\r\n\tfunction getNsPrefix(elementName) {\r\n\t    return splitNsName(elementName)[0];\r\n\t}\r\n\texports.getNsPrefix = getNsPrefix;\r\n\tfunction mergeNsAndName(prefix, localName) {\r\n\t    return lang_1.isPresent(prefix) ? \"@\" + prefix + \":\" + localName : localName;\r\n\t}\r\n\texports.mergeNsAndName = mergeNsAndName;\r\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar application_tokens_1 = __webpack_require__(93);\r\n\tvar di_2 = __webpack_require__(8);\r\n\t/**\r\n\t * Create a {@link UrlResolver} with no package prefix.\r\n\t */\r\n\tfunction createWithoutPackagePrefix() {\r\n\t    return new UrlResolver();\r\n\t}\r\n\texports.createWithoutPackagePrefix = createWithoutPackagePrefix;\r\n\t/**\r\n\t * A default provider for {@link PACKAGE_ROOT_URL} that maps to '/'.\r\n\t */\r\n\texports.DEFAULT_PACKAGE_URL_PROVIDER = new di_2.Provider(application_tokens_1.PACKAGE_ROOT_URL, { useValue: \"/\" });\r\n\t/**\r\n\t * Used by the {@link Compiler} when resolving HTML and CSS template URLs.\r\n\t *\r\n\t * This class can be overridden by the application developer to create custom behavior.\r\n\t *\r\n\t * See {@link Compiler}\r\n\t *\r\n\t * ## Example\r\n\t *\r\n\t * {@example compiler/ts/url_resolver/url_resolver.ts region='url_resolver'}\r\n\t */\r\n\tvar UrlResolver = (function () {\r\n\t    function UrlResolver(packagePrefix) {\r\n\t        if (packagePrefix === void 0) { packagePrefix = null; }\r\n\t        if (lang_1.isPresent(packagePrefix)) {\r\n\t            this._packagePrefix = lang_1.StringWrapper.stripRight(packagePrefix, \"/\") + \"/\";\r\n\t        }\r\n\t    }\r\n\t    /**\r\n\t     * Resolves the `url` given the `baseUrl`:\r\n\t     * - when the `url` is null, the `baseUrl` is returned,\r\n\t     * - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of\r\n\t     * `baseUrl` and `url`,\r\n\t     * - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is\r\n\t     * returned as is (ignoring the `baseUrl`)\r\n\t     *\r\n\t     * @param {string} baseUrl\r\n\t     * @param {string} url\r\n\t     * @returns {string} the resolved URL\r\n\t     */\r\n\t    UrlResolver.prototype.resolve = function (baseUrl, url) {\r\n\t        var resolvedUrl = url;\r\n\t        if (lang_1.isPresent(baseUrl) && baseUrl.length > 0) {\r\n\t            resolvedUrl = _resolveUrl(baseUrl, resolvedUrl);\r\n\t        }\r\n\t        if (lang_1.isPresent(this._packagePrefix) && getUrlScheme(resolvedUrl) == \"package\") {\r\n\t            resolvedUrl = resolvedUrl.replace(\"package:\", this._packagePrefix);\r\n\t        }\r\n\t        return resolvedUrl;\r\n\t    };\r\n\t    UrlResolver = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        __param(0, di_1.Inject(application_tokens_1.PACKAGE_ROOT_URL)), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], UrlResolver);\r\n\t    return UrlResolver;\r\n\t})();\r\n\texports.UrlResolver = UrlResolver;\r\n\t/**\r\n\t * Extract the scheme of a URL.\r\n\t */\r\n\tfunction getUrlScheme(url) {\r\n\t    var match = _split(url);\r\n\t    return (match && match[_ComponentIndex.Scheme]) || \"\";\r\n\t}\r\n\texports.getUrlScheme = getUrlScheme;\r\n\t// The code below is adapted from Traceur:\r\n\t// https://github.com/google/traceur-compiler/blob/9511c1dafa972bf0de1202a8a863bad02f0f95a8/src/runtime/url.js\r\n\t/**\r\n\t * Builds a URI string from already-encoded parts.\r\n\t *\r\n\t * No encoding is performed.  Any component may be omitted as either null or\r\n\t * undefined.\r\n\t *\r\n\t * @param {?string=} opt_scheme The scheme such as 'http'.\r\n\t * @param {?string=} opt_userInfo The user name before the '@'.\r\n\t * @param {?string=} opt_domain The domain such as 'www.google.com', already\r\n\t *     URI-encoded.\r\n\t * @param {(string|null)=} opt_port The port number.\r\n\t * @param {?string=} opt_path The path, already URI-encoded.  If it is not\r\n\t *     empty, it must begin with a slash.\r\n\t * @param {?string=} opt_queryData The URI-encoded query data.\r\n\t * @param {?string=} opt_fragment The URI-encoded fragment identifier.\r\n\t * @return {string} The fully combined URI.\r\n\t */\r\n\tfunction _buildFromEncodedParts(opt_scheme, opt_userInfo, opt_domain, opt_port, opt_path, opt_queryData, opt_fragment) {\r\n\t    var out = [];\r\n\t    if (lang_1.isPresent(opt_scheme)) {\r\n\t        out.push(opt_scheme + ':');\r\n\t    }\r\n\t    if (lang_1.isPresent(opt_domain)) {\r\n\t        out.push('//');\r\n\t        if (lang_1.isPresent(opt_userInfo)) {\r\n\t            out.push(opt_userInfo + '@');\r\n\t        }\r\n\t        out.push(opt_domain);\r\n\t        if (lang_1.isPresent(opt_port)) {\r\n\t            out.push(':' + opt_port);\r\n\t        }\r\n\t    }\r\n\t    if (lang_1.isPresent(opt_path)) {\r\n\t        out.push(opt_path);\r\n\t    }\r\n\t    if (lang_1.isPresent(opt_queryData)) {\r\n\t        out.push('?' + opt_queryData);\r\n\t    }\r\n\t    if (lang_1.isPresent(opt_fragment)) {\r\n\t        out.push('#' + opt_fragment);\r\n\t    }\r\n\t    return out.join('');\r\n\t}\r\n\t/**\r\n\t * A regular expression for breaking a URI into its component parts.\r\n\t *\r\n\t * {@link http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#RFC2234} says\r\n\t * As the \"first-match-wins\" algorithm is identical to the \"greedy\"\r\n\t * disambiguation method used by POSIX regular expressions, it is natural and\r\n\t * commonplace to use a regular expression for parsing the potential five\r\n\t * components of a URI reference.\r\n\t *\r\n\t * The following line is the regular expression for breaking-down a\r\n\t * well-formed URI reference into its components.\r\n\t *\r\n\t * <pre>\r\n\t * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\r\n\t *  12            3  4          5       6  7        8 9\r\n\t * </pre>\r\n\t *\r\n\t * The numbers in the second line above are only to assist readability; they\r\n\t * indicate the reference points for each subexpression (i.e., each paired\r\n\t * parenthesis). We refer to the value matched for subexpression <n> as $<n>.\r\n\t * For example, matching the above expression to\r\n\t * <pre>\r\n\t *     http://www.ics.uci.edu/pub/ietf/uri/#Related\r\n\t * </pre>\r\n\t * results in the following subexpression matches:\r\n\t * <pre>\r\n\t *    $1 = http:\r\n\t *    $2 = http\r\n\t *    $3 = //www.ics.uci.edu\r\n\t *    $4 = www.ics.uci.edu\r\n\t *    $5 = /pub/ietf/uri/\r\n\t *    $6 = <undefined>\r\n\t *    $7 = <undefined>\r\n\t *    $8 = #Related\r\n\t *    $9 = Related\r\n\t * </pre>\r\n\t * where <undefined> indicates that the component is not present, as is the\r\n\t * case for the query component in the above example. Therefore, we can\r\n\t * determine the value of the five components as\r\n\t * <pre>\r\n\t *    scheme    = $2\r\n\t *    authority = $4\r\n\t *    path      = $5\r\n\t *    query     = $7\r\n\t *    fragment  = $9\r\n\t * </pre>\r\n\t *\r\n\t * The regular expression has been modified slightly to expose the\r\n\t * userInfo, domain, and port separately from the authority.\r\n\t * The modified version yields\r\n\t * <pre>\r\n\t *    $1 = http              scheme\r\n\t *    $2 = <undefined>       userInfo -\\\r\n\t *    $3 = www.ics.uci.edu   domain     | authority\r\n\t *    $4 = <undefined>       port     -/\r\n\t *    $5 = /pub/ietf/uri/    path\r\n\t *    $6 = <undefined>       query without ?\r\n\t *    $7 = Related           fragment without #\r\n\t * </pre>\r\n\t * @type {!RegExp}\r\n\t * @internal\r\n\t */\r\n\tvar _splitRe = lang_1.RegExpWrapper.create('^' +\r\n\t    '(?:' +\r\n\t    '([^:/?#.]+)' +\r\n\t    // used by other URL parts such as :,\r\n\t    // ?, /, #, and .\r\n\t    ':)?' +\r\n\t    '(?://' +\r\n\t    '(?:([^/?#]*)@)?' +\r\n\t    '([\\\\w\\\\d\\\\-\\\\u0100-\\\\uffff.%]*)' +\r\n\t    // digits, dashes, dots, percent\r\n\t    // escapes, and unicode characters.\r\n\t    '(?::([0-9]+))?' +\r\n\t    ')?' +\r\n\t    '([^?#]+)?' +\r\n\t    '(?:\\\\?([^#]*))?' +\r\n\t    '(?:#(.*))?' +\r\n\t    '$');\r\n\t/**\r\n\t * The index of each URI component in the return value of goog.uri.utils.split.\r\n\t * @enum {number}\r\n\t */\r\n\tvar _ComponentIndex;\r\n\t(function (_ComponentIndex) {\r\n\t    _ComponentIndex[_ComponentIndex[\"Scheme\"] = 1] = \"Scheme\";\r\n\t    _ComponentIndex[_ComponentIndex[\"UserInfo\"] = 2] = \"UserInfo\";\r\n\t    _ComponentIndex[_ComponentIndex[\"Domain\"] = 3] = \"Domain\";\r\n\t    _ComponentIndex[_ComponentIndex[\"Port\"] = 4] = \"Port\";\r\n\t    _ComponentIndex[_ComponentIndex[\"Path\"] = 5] = \"Path\";\r\n\t    _ComponentIndex[_ComponentIndex[\"QueryData\"] = 6] = \"QueryData\";\r\n\t    _ComponentIndex[_ComponentIndex[\"Fragment\"] = 7] = \"Fragment\";\r\n\t})(_ComponentIndex || (_ComponentIndex = {}));\r\n\t/**\r\n\t * Splits a URI into its component parts.\r\n\t *\r\n\t * Each component can be accessed via the component indices; for example:\r\n\t * <pre>\r\n\t * goog.uri.utils.split(someStr)[goog.uri.utils.CompontentIndex.QUERY_DATA];\r\n\t * </pre>\r\n\t *\r\n\t * @param {string} uri The URI string to examine.\r\n\t * @return {!Array.<string|undefined>} Each component still URI-encoded.\r\n\t *     Each component that is present will contain the encoded value, whereas\r\n\t *     components that are not present will be undefined or empty, depending\r\n\t *     on the browser's regular expression implementation.  Never null, since\r\n\t *     arbitrary strings may still look like path names.\r\n\t */\r\n\tfunction _split(uri) {\r\n\t    return lang_1.RegExpWrapper.firstMatch(_splitRe, uri);\r\n\t}\r\n\t/**\r\n\t  * Removes dot segments in given path component, as described in\r\n\t  * RFC 3986, section 5.2.4.\r\n\t  *\r\n\t  * @param {string} path A non-empty path component.\r\n\t  * @return {string} Path component with removed dot segments.\r\n\t  */\r\n\tfunction _removeDotSegments(path) {\r\n\t    if (path == '/')\r\n\t        return '/';\r\n\t    var leadingSlash = path[0] == '/' ? '/' : '';\r\n\t    var trailingSlash = path[path.length - 1] === '/' ? '/' : '';\r\n\t    var segments = path.split('/');\r\n\t    var out = [];\r\n\t    var up = 0;\r\n\t    for (var pos = 0; pos < segments.length; pos++) {\r\n\t        var segment = segments[pos];\r\n\t        switch (segment) {\r\n\t            case '':\r\n\t            case '.':\r\n\t                break;\r\n\t            case '..':\r\n\t                if (out.length > 0) {\r\n\t                    out.pop();\r\n\t                }\r\n\t                else {\r\n\t                    up++;\r\n\t                }\r\n\t                break;\r\n\t            default:\r\n\t                out.push(segment);\r\n\t        }\r\n\t    }\r\n\t    if (leadingSlash == '') {\r\n\t        while (up-- > 0) {\r\n\t            out.unshift('..');\r\n\t        }\r\n\t        if (out.length === 0)\r\n\t            out.push('.');\r\n\t    }\r\n\t    return leadingSlash + out.join('/') + trailingSlash;\r\n\t}\r\n\t/**\r\n\t * Takes an array of the parts from split and canonicalizes the path part\r\n\t * and then joins all the parts.\r\n\t * @param {Array.<string?>} parts\r\n\t * @return {string}\r\n\t */\r\n\tfunction _joinAndCanonicalizePath(parts) {\r\n\t    var path = parts[_ComponentIndex.Path];\r\n\t    path = lang_1.isBlank(path) ? '' : _removeDotSegments(path);\r\n\t    parts[_ComponentIndex.Path] = path;\r\n\t    return _buildFromEncodedParts(parts[_ComponentIndex.Scheme], parts[_ComponentIndex.UserInfo], parts[_ComponentIndex.Domain], parts[_ComponentIndex.Port], path, parts[_ComponentIndex.QueryData], parts[_ComponentIndex.Fragment]);\r\n\t}\r\n\t/**\r\n\t * Resolves a URL.\r\n\t * @param {string} base The URL acting as the base URL.\r\n\t * @param {string} to The URL to resolve.\r\n\t * @return {string}\r\n\t */\r\n\tfunction _resolveUrl(base, url) {\r\n\t    var parts = _split(encodeURI(url));\r\n\t    var baseParts = _split(base);\r\n\t    if (lang_1.isPresent(parts[_ComponentIndex.Scheme])) {\r\n\t        return _joinAndCanonicalizePath(parts);\r\n\t    }\r\n\t    else {\r\n\t        parts[_ComponentIndex.Scheme] = baseParts[_ComponentIndex.Scheme];\r\n\t    }\r\n\t    for (var i = _ComponentIndex.Scheme; i <= _ComponentIndex.Port; i++) {\r\n\t        if (lang_1.isBlank(parts[i])) {\r\n\t            parts[i] = baseParts[i];\r\n\t        }\r\n\t    }\r\n\t    if (parts[_ComponentIndex.Path][0] == '/') {\r\n\t        return _joinAndCanonicalizePath(parts);\r\n\t    }\r\n\t    var path = baseParts[_ComponentIndex.Path];\r\n\t    if (lang_1.isBlank(path))\r\n\t        path = '/';\r\n\t    var index = path.lastIndexOf('/');\r\n\t    path = path.substring(0, index + 1) + parts[_ComponentIndex.Path];\r\n\t    parts[_ComponentIndex.Path] = path;\r\n\t    return _joinAndCanonicalizePath(parts);\r\n\t}\r\n\n\n/***/ },\n/* 93 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t *  @internal\r\n\t */\r\n\texports.APP_COMPONENT_REF_PROMISE = lang_1.CONST_EXPR(new di_1.OpaqueToken('Promise<ComponentRef>'));\r\n\t/**\r\n\t * An {@link angular2/di/OpaqueToken} representing the application root type in the {@link\r\n\t * Injector}.\r\n\t *\r\n\t * ```\r\n\t * @Component(...)\r\n\t * class MyApp {\r\n\t *   ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(MyApp).then((appRef:ApplicationRef) {\r\n\t *   expect(appRef.injector.get(appComponentTypeToken)).toEqual(MyApp);\r\n\t * });\r\n\t *\r\n\t * ```\r\n\t */\r\n\texports.APP_COMPONENT = lang_1.CONST_EXPR(new di_1.OpaqueToken('AppComponent'));\r\n\t/**\r\n\t * A DI Token representing a unique string id assigned to the application by Angular and used\r\n\t * primarily for prefixing application attributes and CSS styles when\r\n\t * {@link ViewEncapsulation#Emulated} is being used.\r\n\t *\r\n\t * If you need to avoid randomly generated value to be used as an application id, you can provide\r\n\t * a custom value via a DI provider <!-- TODO: provider --> configuring the root {@link Injector}\r\n\t * using this token.\r\n\t */\r\n\texports.APP_ID = lang_1.CONST_EXPR(new di_1.OpaqueToken('AppId'));\r\n\tfunction _appIdRandomProviderFactory() {\r\n\t    return \"\" + _randomChar() + _randomChar() + _randomChar();\r\n\t}\r\n\t/**\r\n\t * Providers that will generate a random APP_ID_TOKEN.\r\n\t */\r\n\texports.APP_ID_RANDOM_PROVIDER = lang_1.CONST_EXPR(new di_1.Provider(exports.APP_ID, { useFactory: _appIdRandomProviderFactory, deps: [] }));\r\n\tfunction _randomChar() {\r\n\t    return lang_1.StringWrapper.fromCharCode(97 + lang_1.Math.floor(lang_1.Math.random() * 25));\r\n\t}\r\n\t/**\r\n\t * A function that will be executed when a platform is initialized.\r\n\t */\r\n\texports.PLATFORM_INITIALIZER = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Platform Initializer\"));\r\n\t/**\r\n\t * A function that will be executed when an application is initialized.\r\n\t */\r\n\texports.APP_INITIALIZER = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Application Initializer\"));\r\n\t/**\r\n\t * A token which indicates the root directory of the application\r\n\t */\r\n\texports.PACKAGE_ROOT_URL = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Application Packages Root URL\"));\r\n\n\n/***/ },\n/* 94 */\n/***/ function(module, exports) {\n\n\t'use strict';(function (RecordType) {\r\n\t    RecordType[RecordType[\"Self\"] = 0] = \"Self\";\r\n\t    RecordType[RecordType[\"Const\"] = 1] = \"Const\";\r\n\t    RecordType[RecordType[\"PrimitiveOp\"] = 2] = \"PrimitiveOp\";\r\n\t    RecordType[RecordType[\"PropertyRead\"] = 3] = \"PropertyRead\";\r\n\t    RecordType[RecordType[\"PropertyWrite\"] = 4] = \"PropertyWrite\";\r\n\t    RecordType[RecordType[\"Local\"] = 5] = \"Local\";\r\n\t    RecordType[RecordType[\"InvokeMethod\"] = 6] = \"InvokeMethod\";\r\n\t    RecordType[RecordType[\"InvokeClosure\"] = 7] = \"InvokeClosure\";\r\n\t    RecordType[RecordType[\"KeyedRead\"] = 8] = \"KeyedRead\";\r\n\t    RecordType[RecordType[\"KeyedWrite\"] = 9] = \"KeyedWrite\";\r\n\t    RecordType[RecordType[\"Pipe\"] = 10] = \"Pipe\";\r\n\t    RecordType[RecordType[\"Interpolate\"] = 11] = \"Interpolate\";\r\n\t    RecordType[RecordType[\"SafeProperty\"] = 12] = \"SafeProperty\";\r\n\t    RecordType[RecordType[\"CollectionLiteral\"] = 13] = \"CollectionLiteral\";\r\n\t    RecordType[RecordType[\"SafeMethodInvoke\"] = 14] = \"SafeMethodInvoke\";\r\n\t    RecordType[RecordType[\"DirectiveLifecycle\"] = 15] = \"DirectiveLifecycle\";\r\n\t    RecordType[RecordType[\"Chain\"] = 16] = \"Chain\";\r\n\t    RecordType[RecordType[\"SkipRecordsIf\"] = 17] = \"SkipRecordsIf\";\r\n\t    RecordType[RecordType[\"SkipRecordsIfNot\"] = 18] = \"SkipRecordsIfNot\";\r\n\t    RecordType[RecordType[\"SkipRecords\"] = 19] = \"SkipRecords\"; // Skip records unconditionally\r\n\t})(exports.RecordType || (exports.RecordType = {}));\r\n\tvar RecordType = exports.RecordType;\r\n\tvar ProtoRecord = (function () {\r\n\t    function ProtoRecord(mode, name, funcOrValue, args, fixedArgs, contextIndex, directiveIndex, selfIndex, bindingRecord, lastInBinding, lastInDirective, argumentToPureFunction, referencedBySelf, propertyBindingIndex) {\r\n\t        this.mode = mode;\r\n\t        this.name = name;\r\n\t        this.funcOrValue = funcOrValue;\r\n\t        this.args = args;\r\n\t        this.fixedArgs = fixedArgs;\r\n\t        this.contextIndex = contextIndex;\r\n\t        this.directiveIndex = directiveIndex;\r\n\t        this.selfIndex = selfIndex;\r\n\t        this.bindingRecord = bindingRecord;\r\n\t        this.lastInBinding = lastInBinding;\r\n\t        this.lastInDirective = lastInDirective;\r\n\t        this.argumentToPureFunction = argumentToPureFunction;\r\n\t        this.referencedBySelf = referencedBySelf;\r\n\t        this.propertyBindingIndex = propertyBindingIndex;\r\n\t    }\r\n\t    ProtoRecord.prototype.isPureFunction = function () {\r\n\t        return this.mode === RecordType.Interpolate || this.mode === RecordType.CollectionLiteral;\r\n\t    };\r\n\t    ProtoRecord.prototype.isUsedByOtherRecord = function () { return !this.lastInBinding || this.referencedBySelf; };\r\n\t    ProtoRecord.prototype.shouldBeChecked = function () {\r\n\t        return this.argumentToPureFunction || this.lastInBinding || this.isPureFunction() ||\r\n\t            this.isPipeRecord();\r\n\t    };\r\n\t    ProtoRecord.prototype.isPipeRecord = function () { return this.mode === RecordType.Pipe; };\r\n\t    ProtoRecord.prototype.isConditionalSkipRecord = function () {\r\n\t        return this.mode === RecordType.SkipRecordsIfNot || this.mode === RecordType.SkipRecordsIf;\r\n\t    };\r\n\t    ProtoRecord.prototype.isUnconditionalSkipRecord = function () { return this.mode === RecordType.SkipRecords; };\r\n\t    ProtoRecord.prototype.isSkipRecord = function () {\r\n\t        return this.isConditionalSkipRecord() || this.isUnconditionalSkipRecord();\r\n\t    };\r\n\t    ProtoRecord.prototype.isLifeCycleRecord = function () { return this.mode === RecordType.DirectiveLifecycle; };\r\n\t    return ProtoRecord;\r\n\t})();\r\n\texports.ProtoRecord = ProtoRecord;\r\n\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar key_1 = __webpack_require__(198);\r\n\tvar metadata_1 = __webpack_require__(80);\r\n\tvar exceptions_2 = __webpack_require__(196);\r\n\tvar forward_ref_1 = __webpack_require__(197);\r\n\t/**\r\n\t * `Dependency` is used by the framework to extend DI.\r\n\t * This is internal to Angular and should not be used directly.\r\n\t */\r\n\tvar Dependency = (function () {\r\n\t    function Dependency(key, optional, lowerBoundVisibility, upperBoundVisibility, properties) {\r\n\t        this.key = key;\r\n\t        this.optional = optional;\r\n\t        this.lowerBoundVisibility = lowerBoundVisibility;\r\n\t        this.upperBoundVisibility = upperBoundVisibility;\r\n\t        this.properties = properties;\r\n\t    }\r\n\t    Dependency.fromKey = function (key) { return new Dependency(key, false, null, null, []); };\r\n\t    return Dependency;\r\n\t})();\r\n\texports.Dependency = Dependency;\r\n\tvar _EMPTY_LIST = lang_1.CONST_EXPR([]);\r\n\t/**\r\n\t * Describes how the {@link Injector} should instantiate a given token.\r\n\t *\r\n\t * See {@link provide}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/GNAyj6K6PfYg2NBzgwZ5?p%3Dpreview&p=preview))\r\n\t *\r\n\t * ```javascript\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *   new Provider(\"message\", { useValue: 'Hello' })\r\n\t * ]);\r\n\t *\r\n\t * expect(injector.get(\"message\")).toEqual('Hello');\r\n\t * ```\r\n\t */\r\n\tvar Provider = (function () {\r\n\t    function Provider(token, _a) {\r\n\t        var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi;\r\n\t        this.token = token;\r\n\t        this.useClass = useClass;\r\n\t        this.useValue = useValue;\r\n\t        this.useExisting = useExisting;\r\n\t        this.useFactory = useFactory;\r\n\t        this.dependencies = deps;\r\n\t        this._multi = multi;\r\n\t    }\r\n\t    Object.defineProperty(Provider.prototype, \"multi\", {\r\n\t        // TODO: Provide a full working example after alpha38 is released.\r\n\t        /**\r\n\t         * Creates multiple providers matching the same token (a multi-provider).\r\n\t         *\r\n\t         * Multi-providers are used for creating pluggable service, where the system comes\r\n\t         * with some default providers, and the user can register additional providers.\r\n\t         * The combination of the default providers and the additional providers will be\r\n\t         * used to drive the behavior of the system.\r\n\t         *\r\n\t         * ### Example\r\n\t         *\r\n\t         * ```typescript\r\n\t         * var injector = Injector.resolveAndCreate([\r\n\t         *   new Provider(\"Strings\", { useValue: \"String1\", multi: true}),\r\n\t         *   new Provider(\"Strings\", { useValue: \"String2\", multi: true})\r\n\t         * ]);\r\n\t         *\r\n\t         * expect(injector.get(\"Strings\")).toEqual([\"String1\", \"String2\"]);\r\n\t         * ```\r\n\t         *\r\n\t         * Multi-providers and regular providers cannot be mixed. The following\r\n\t         * will throw an exception:\r\n\t         *\r\n\t         * ```typescript\r\n\t         * var injector = Injector.resolveAndCreate([\r\n\t         *   new Provider(\"Strings\", { useValue: \"String1\", multi: true }),\r\n\t         *   new Provider(\"Strings\", { useValue: \"String2\"})\r\n\t         * ]);\r\n\t         * ```\r\n\t         */\r\n\t        get: function () { return lang_1.normalizeBool(this._multi); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Provider = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object, Object])\r\n\t    ], Provider);\r\n\t    return Provider;\r\n\t})();\r\n\texports.Provider = Provider;\r\n\t/**\r\n\t * See {@link Provider} instead.\r\n\t *\r\n\t * @deprecated\r\n\t */\r\n\tvar Binding = (function (_super) {\r\n\t    __extends(Binding, _super);\r\n\t    function Binding(token, _a) {\r\n\t        var toClass = _a.toClass, toValue = _a.toValue, toAlias = _a.toAlias, toFactory = _a.toFactory, deps = _a.deps, multi = _a.multi;\r\n\t        _super.call(this, token, {\r\n\t            useClass: toClass,\r\n\t            useValue: toValue,\r\n\t            useExisting: toAlias,\r\n\t            useFactory: toFactory,\r\n\t            deps: deps,\r\n\t            multi: multi\r\n\t        });\r\n\t    }\r\n\t    Object.defineProperty(Binding.prototype, \"toClass\", {\r\n\t        /**\r\n\t         * @deprecated\r\n\t         */\r\n\t        get: function () { return this.useClass; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(Binding.prototype, \"toAlias\", {\r\n\t        /**\r\n\t         * @deprecated\r\n\t         */\r\n\t        get: function () { return this.useExisting; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(Binding.prototype, \"toFactory\", {\r\n\t        /**\r\n\t         * @deprecated\r\n\t         */\r\n\t        get: function () { return this.useFactory; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(Binding.prototype, \"toValue\", {\r\n\t        /**\r\n\t         * @deprecated\r\n\t         */\r\n\t        get: function () { return this.useValue; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Binding = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object, Object])\r\n\t    ], Binding);\r\n\t    return Binding;\r\n\t})(Provider);\r\n\texports.Binding = Binding;\r\n\tvar ResolvedProvider_ = (function () {\r\n\t    function ResolvedProvider_(key, resolvedFactories, multiProvider) {\r\n\t        this.key = key;\r\n\t        this.resolvedFactories = resolvedFactories;\r\n\t        this.multiProvider = multiProvider;\r\n\t    }\r\n\t    Object.defineProperty(ResolvedProvider_.prototype, \"resolvedFactory\", {\r\n\t        get: function () { return this.resolvedFactories[0]; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ResolvedProvider_;\r\n\t})();\r\n\texports.ResolvedProvider_ = ResolvedProvider_;\r\n\t/**\r\n\t * An internal resolved representation of a factory function created by resolving {@link Provider}.\r\n\t */\r\n\tvar ResolvedFactory = (function () {\r\n\t    function ResolvedFactory(\r\n\t        /**\r\n\t         * Factory function which can return an instance of an object represented by a key.\r\n\t         */\r\n\t        factory, \r\n\t        /**\r\n\t         * Arguments (dependencies) to the `factory` function.\r\n\t         */\r\n\t        dependencies) {\r\n\t        this.factory = factory;\r\n\t        this.dependencies = dependencies;\r\n\t    }\r\n\t    return ResolvedFactory;\r\n\t})();\r\n\texports.ResolvedFactory = ResolvedFactory;\r\n\t/**\r\n\t * Creates a {@link Provider}.\r\n\t *\r\n\t * To construct a {@link Provider}, bind a `token` to either a class, a value, a factory function,\r\n\t * or\r\n\t * to an existing `token`.\r\n\t * See {@link ProviderBuilder} for more details.\r\n\t *\r\n\t * The `token` is most commonly a class or {@link angular2/di/OpaqueToken}.\r\n\t *\r\n\t * @deprecated\r\n\t */\r\n\tfunction bind(token) {\r\n\t    return new ProviderBuilder(token);\r\n\t}\r\n\texports.bind = bind;\r\n\t/**\r\n\t * Creates a {@link Provider}.\r\n\t *\r\n\t * See {@link Provider} for more details.\r\n\t *\r\n\t * <!-- TODO: improve the docs -->\r\n\t */\r\n\tfunction provide(token, _a) {\r\n\t    var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi;\r\n\t    return new Provider(token, {\r\n\t        useClass: useClass,\r\n\t        useValue: useValue,\r\n\t        useExisting: useExisting,\r\n\t        useFactory: useFactory,\r\n\t        deps: deps,\r\n\t        multi: multi\r\n\t    });\r\n\t}\r\n\texports.provide = provide;\r\n\t/**\r\n\t * Helper class for the {@link bind} function.\r\n\t */\r\n\tvar ProviderBuilder = (function () {\r\n\t    function ProviderBuilder(token) {\r\n\t        this.token = token;\r\n\t    }\r\n\t    /**\r\n\t     * Binds a DI token to a class.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/ZpBCSYqv6e2ud5KXLdxQ?p=preview))\r\n\t     *\r\n\t     * Because `toAlias` and `toClass` are often confused, the example contains\r\n\t     * both use cases for easy comparison.\r\n\t     *\r\n\t     * ```typescript\r\n\t     * class Vehicle {}\r\n\t     *\r\n\t     * class Car extends Vehicle {}\r\n\t     *\r\n\t     * var injectorClass = Injector.resolveAndCreate([\r\n\t     *   Car,\r\n\t     *   provide(Vehicle, {useClass: Car})\r\n\t     * ]);\r\n\t     * var injectorAlias = Injector.resolveAndCreate([\r\n\t     *   Car,\r\n\t     *   provide(Vehicle, {useExisting: Car})\r\n\t     * ]);\r\n\t     *\r\n\t     * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));\r\n\t     * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);\r\n\t     *\r\n\t     * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));\r\n\t     * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);\r\n\t     * ```\r\n\t     */\r\n\t    ProviderBuilder.prototype.toClass = function (type) {\r\n\t        if (!lang_1.isType(type)) {\r\n\t            throw new exceptions_1.BaseException(\"Trying to create a class provider but \\\"\" + lang_1.stringify(type) + \"\\\" is not a class!\");\r\n\t        }\r\n\t        return new Provider(this.token, { useClass: type });\r\n\t    };\r\n\t    /**\r\n\t     * Binds a DI token to a value.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/G024PFHmDL0cJFgfZK8O?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * var injector = Injector.resolveAndCreate([\r\n\t     *   provide('message', {useValue: 'Hello'})\r\n\t     * ]);\r\n\t     *\r\n\t     * expect(injector.get('message')).toEqual('Hello');\r\n\t     * ```\r\n\t     */\r\n\t    ProviderBuilder.prototype.toValue = function (value) { return new Provider(this.token, { useValue: value }); };\r\n\t    /**\r\n\t     * Binds a DI token to an existing token.\r\n\t     *\r\n\t     * Angular will return the same instance as if the provided token was used. (This is\r\n\t     * in contrast to `useClass` where a separate instance of `useClass` will be returned.)\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/uBaoF2pN5cfc5AfZapNw?p=preview))\r\n\t     *\r\n\t     * Because `toAlias` and `toClass` are often confused, the example contains\r\n\t     * both use cases for easy comparison.\r\n\t     *\r\n\t     * ```typescript\r\n\t     * class Vehicle {}\r\n\t     *\r\n\t     * class Car extends Vehicle {}\r\n\t     *\r\n\t     * var injectorAlias = Injector.resolveAndCreate([\r\n\t     *   Car,\r\n\t     *   provide(Vehicle, {useExisting: Car})\r\n\t     * ]);\r\n\t     * var injectorClass = Injector.resolveAndCreate([\r\n\t     *   Car,\r\n\t     *   provide(Vehicle, {useClass: Car})\r\n\t     * ]);\r\n\t     *\r\n\t     * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));\r\n\t     * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);\r\n\t     *\r\n\t     * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));\r\n\t     * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);\r\n\t     * ```\r\n\t     */\r\n\t    ProviderBuilder.prototype.toAlias = function (aliasToken) {\r\n\t        if (lang_1.isBlank(aliasToken)) {\r\n\t            throw new exceptions_1.BaseException(\"Can not alias \" + lang_1.stringify(this.token) + \" to a blank value!\");\r\n\t        }\r\n\t        return new Provider(this.token, { useExisting: aliasToken });\r\n\t    };\r\n\t    /**\r\n\t     * Binds a DI token to a function which computes the value.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/OejNIfTT3zb1iBxaIYOb?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * var injector = Injector.resolveAndCreate([\r\n\t     *   provide(Number, {useFactory: () => { return 1+2; }}),\r\n\t     *   provide(String, {useFactory: (v) => { return \"Value: \" + v; }, deps: [Number]})\r\n\t     * ]);\r\n\t     *\r\n\t     * expect(injector.get(Number)).toEqual(3);\r\n\t     * expect(injector.get(String)).toEqual('Value: 3');\r\n\t     * ```\r\n\t     */\r\n\t    ProviderBuilder.prototype.toFactory = function (factory, dependencies) {\r\n\t        if (!lang_1.isFunction(factory)) {\r\n\t            throw new exceptions_1.BaseException(\"Trying to create a factory provider but \\\"\" + lang_1.stringify(factory) + \"\\\" is not a function!\");\r\n\t        }\r\n\t        return new Provider(this.token, { useFactory: factory, deps: dependencies });\r\n\t    };\r\n\t    return ProviderBuilder;\r\n\t})();\r\n\texports.ProviderBuilder = ProviderBuilder;\r\n\t/**\r\n\t * Resolve a single provider.\r\n\t */\r\n\tfunction resolveFactory(provider) {\r\n\t    var factoryFn;\r\n\t    var resolvedDeps;\r\n\t    if (lang_1.isPresent(provider.useClass)) {\r\n\t        var useClass = forward_ref_1.resolveForwardRef(provider.useClass);\r\n\t        factoryFn = reflection_1.reflector.factory(useClass);\r\n\t        resolvedDeps = _dependenciesFor(useClass);\r\n\t    }\r\n\t    else if (lang_1.isPresent(provider.useExisting)) {\r\n\t        factoryFn = function (aliasInstance) { return aliasInstance; };\r\n\t        resolvedDeps = [Dependency.fromKey(key_1.Key.get(provider.useExisting))];\r\n\t    }\r\n\t    else if (lang_1.isPresent(provider.useFactory)) {\r\n\t        factoryFn = provider.useFactory;\r\n\t        resolvedDeps = _constructDependencies(provider.useFactory, provider.dependencies);\r\n\t    }\r\n\t    else {\r\n\t        factoryFn = function () { return provider.useValue; };\r\n\t        resolvedDeps = _EMPTY_LIST;\r\n\t    }\r\n\t    return new ResolvedFactory(factoryFn, resolvedDeps);\r\n\t}\r\n\texports.resolveFactory = resolveFactory;\r\n\t/**\r\n\t * Converts the {@link Provider} into {@link ResolvedProvider}.\r\n\t *\r\n\t * {@link Injector} internally only uses {@link ResolvedProvider}, {@link Provider} contains\r\n\t * convenience provider syntax.\r\n\t */\r\n\tfunction resolveProvider(provider) {\r\n\t    return new ResolvedProvider_(key_1.Key.get(provider.token), [resolveFactory(provider)], provider.multi);\r\n\t}\r\n\texports.resolveProvider = resolveProvider;\r\n\t/**\r\n\t * Resolve a list of Providers.\r\n\t */\r\n\tfunction resolveProviders(providers) {\r\n\t    var normalized = _normalizeProviders(providers, []);\r\n\t    var resolved = normalized.map(resolveProvider);\r\n\t    return collection_1.MapWrapper.values(mergeResolvedProviders(resolved, new Map()));\r\n\t}\r\n\texports.resolveProviders = resolveProviders;\r\n\t/**\r\n\t * Merges a list of ResolvedProviders into a list where\r\n\t * each key is contained exactly once and multi providers\r\n\t * have been merged.\r\n\t */\r\n\tfunction mergeResolvedProviders(providers, normalizedProvidersMap) {\r\n\t    for (var i = 0; i < providers.length; i++) {\r\n\t        var provider = providers[i];\r\n\t        var existing = normalizedProvidersMap.get(provider.key.id);\r\n\t        if (lang_1.isPresent(existing)) {\r\n\t            if (provider.multiProvider !== existing.multiProvider) {\r\n\t                throw new exceptions_2.MixingMultiProvidersWithRegularProvidersError(existing, provider);\r\n\t            }\r\n\t            if (provider.multiProvider) {\r\n\t                for (var j = 0; j < provider.resolvedFactories.length; j++) {\r\n\t                    existing.resolvedFactories.push(provider.resolvedFactories[j]);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                normalizedProvidersMap.set(provider.key.id, provider);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            var resolvedProvider;\r\n\t            if (provider.multiProvider) {\r\n\t                resolvedProvider = new ResolvedProvider_(provider.key, collection_1.ListWrapper.clone(provider.resolvedFactories), provider.multiProvider);\r\n\t            }\r\n\t            else {\r\n\t                resolvedProvider = provider;\r\n\t            }\r\n\t            normalizedProvidersMap.set(provider.key.id, resolvedProvider);\r\n\t        }\r\n\t    }\r\n\t    return normalizedProvidersMap;\r\n\t}\r\n\texports.mergeResolvedProviders = mergeResolvedProviders;\r\n\tfunction _normalizeProviders(providers, res) {\r\n\t    providers.forEach(function (b) {\r\n\t        if (b instanceof lang_1.Type) {\r\n\t            res.push(provide(b, { useClass: b }));\r\n\t        }\r\n\t        else if (b instanceof Provider) {\r\n\t            res.push(b);\r\n\t        }\r\n\t        else if (b instanceof Array) {\r\n\t            _normalizeProviders(b, res);\r\n\t        }\r\n\t        else if (b instanceof ProviderBuilder) {\r\n\t            throw new exceptions_2.InvalidProviderError(b.token);\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_2.InvalidProviderError(b);\r\n\t        }\r\n\t    });\r\n\t    return res;\r\n\t}\r\n\tfunction _constructDependencies(factoryFunction, dependencies) {\r\n\t    if (lang_1.isBlank(dependencies)) {\r\n\t        return _dependenciesFor(factoryFunction);\r\n\t    }\r\n\t    else {\r\n\t        var params = dependencies.map(function (t) { return [t]; });\r\n\t        return dependencies.map(function (t) { return _extractToken(factoryFunction, t, params); });\r\n\t    }\r\n\t}\r\n\tfunction _dependenciesFor(typeOrFunc) {\r\n\t    var params = reflection_1.reflector.parameters(typeOrFunc);\r\n\t    if (lang_1.isBlank(params))\r\n\t        return [];\r\n\t    if (params.some(lang_1.isBlank)) {\r\n\t        throw new exceptions_2.NoAnnotationError(typeOrFunc, params);\r\n\t    }\r\n\t    return params.map(function (p) { return _extractToken(typeOrFunc, p, params); });\r\n\t}\r\n\tfunction _extractToken(typeOrFunc, metadata /*any[] | any*/, params) {\r\n\t    var depProps = [];\r\n\t    var token = null;\r\n\t    var optional = false;\r\n\t    if (!lang_1.isArray(metadata)) {\r\n\t        if (metadata instanceof metadata_1.InjectMetadata) {\r\n\t            return _createDependency(metadata.token, optional, null, null, depProps);\r\n\t        }\r\n\t        else {\r\n\t            return _createDependency(metadata, optional, null, null, depProps);\r\n\t        }\r\n\t    }\r\n\t    var lowerBoundVisibility = null;\r\n\t    var upperBoundVisibility = null;\r\n\t    for (var i = 0; i < metadata.length; ++i) {\r\n\t        var paramMetadata = metadata[i];\r\n\t        if (paramMetadata instanceof lang_1.Type) {\r\n\t            token = paramMetadata;\r\n\t        }\r\n\t        else if (paramMetadata instanceof metadata_1.InjectMetadata) {\r\n\t            token = paramMetadata.token;\r\n\t        }\r\n\t        else if (paramMetadata instanceof metadata_1.OptionalMetadata) {\r\n\t            optional = true;\r\n\t        }\r\n\t        else if (paramMetadata instanceof metadata_1.SelfMetadata) {\r\n\t            upperBoundVisibility = paramMetadata;\r\n\t        }\r\n\t        else if (paramMetadata instanceof metadata_1.HostMetadata) {\r\n\t            upperBoundVisibility = paramMetadata;\r\n\t        }\r\n\t        else if (paramMetadata instanceof metadata_1.SkipSelfMetadata) {\r\n\t            lowerBoundVisibility = paramMetadata;\r\n\t        }\r\n\t        else if (paramMetadata instanceof metadata_1.DependencyMetadata) {\r\n\t            if (lang_1.isPresent(paramMetadata.token)) {\r\n\t                token = paramMetadata.token;\r\n\t            }\r\n\t            depProps.push(paramMetadata);\r\n\t        }\r\n\t    }\r\n\t    token = forward_ref_1.resolveForwardRef(token);\r\n\t    if (lang_1.isPresent(token)) {\r\n\t        return _createDependency(token, optional, lowerBoundVisibility, upperBoundVisibility, depProps);\r\n\t    }\r\n\t    else {\r\n\t        throw new exceptions_2.NoAnnotationError(typeOrFunc, params);\r\n\t    }\r\n\t}\r\n\tfunction _createDependency(token, optional, lowerBoundVisibility, upperBoundVisibility, depProps) {\r\n\t    return new Dependency(key_1.Key.get(token), optional, lowerBoundVisibility, upperBoundVisibility, depProps);\r\n\t}\r\n\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar compiler_1 = __webpack_require__(81);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar view_manager_1 = __webpack_require__(131);\r\n\t/**\r\n\t * Represents an instance of a Component created via {@link DynamicComponentLoader}.\r\n\t *\r\n\t * `ComponentRef` provides access to the Component Instance as well other objects related to this\r\n\t * Component Instance and allows you to destroy the Component Instance via the {@link #dispose}\r\n\t * method.\r\n\t */\r\n\tvar ComponentRef = (function () {\r\n\t    function ComponentRef() {\r\n\t    }\r\n\t    Object.defineProperty(ComponentRef.prototype, \"hostView\", {\r\n\t        /**\r\n\t         * The {@link ViewRef} of the Host View of this Component instance.\r\n\t         */\r\n\t        get: function () {\r\n\t            return this.location.internalElement.parentView.ref;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ComponentRef.prototype, \"hostComponent\", {\r\n\t        /**\r\n\t         * @internal\r\n\t         *\r\n\t         * The instance of the component.\r\n\t         *\r\n\t         * TODO(i): this api should be removed\r\n\t         */\r\n\t        get: function () { return this.instance; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ComponentRef;\r\n\t})();\r\n\texports.ComponentRef = ComponentRef;\r\n\tvar ComponentRef_ = (function (_super) {\r\n\t    __extends(ComponentRef_, _super);\r\n\t    /**\r\n\t     * TODO(i): refactor into public/private fields\r\n\t     */\r\n\t    function ComponentRef_(location, instance, componentType, injector, _dispose) {\r\n\t        _super.call(this);\r\n\t        this._dispose = _dispose;\r\n\t        this.location = location;\r\n\t        this.instance = instance;\r\n\t        this.componentType = componentType;\r\n\t        this.injector = injector;\r\n\t    }\r\n\t    Object.defineProperty(ComponentRef_.prototype, \"hostComponentType\", {\r\n\t        /**\r\n\t         * @internal\r\n\t         *\r\n\t         * Returns the type of this Component instance.\r\n\t         *\r\n\t         * TODO(i): this api should be removed\r\n\t         */\r\n\t        get: function () { return this.componentType; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ComponentRef_.prototype.dispose = function () { this._dispose(); };\r\n\t    return ComponentRef_;\r\n\t})(ComponentRef);\r\n\texports.ComponentRef_ = ComponentRef_;\r\n\t/**\r\n\t * Service for instantiating a Component and attaching it to a View at a specified location.\r\n\t */\r\n\tvar DynamicComponentLoader = (function () {\r\n\t    function DynamicComponentLoader() {\r\n\t    }\r\n\t    return DynamicComponentLoader;\r\n\t})();\r\n\texports.DynamicComponentLoader = DynamicComponentLoader;\r\n\tvar DynamicComponentLoader_ = (function (_super) {\r\n\t    __extends(DynamicComponentLoader_, _super);\r\n\t    function DynamicComponentLoader_(_compiler, _viewManager) {\r\n\t        _super.call(this);\r\n\t        this._compiler = _compiler;\r\n\t        this._viewManager = _viewManager;\r\n\t    }\r\n\t    DynamicComponentLoader_.prototype.loadAsRoot = function (type, overrideSelector, injector, onDispose, projectableNodes) {\r\n\t        var _this = this;\r\n\t        return this._compiler.compileInHost(type).then(function (hostProtoViewRef) {\r\n\t            var hostViewRef = _this._viewManager.createRootHostView(hostProtoViewRef, overrideSelector, injector, projectableNodes);\r\n\t            var newLocation = _this._viewManager.getHostElement(hostViewRef);\r\n\t            var component = _this._viewManager.getComponent(newLocation);\r\n\t            var dispose = function () {\r\n\t                if (lang_1.isPresent(onDispose)) {\r\n\t                    onDispose();\r\n\t                }\r\n\t                _this._viewManager.destroyRootHostView(hostViewRef);\r\n\t            };\r\n\t            return new ComponentRef_(newLocation, component, type, injector, dispose);\r\n\t        });\r\n\t    };\r\n\t    DynamicComponentLoader_.prototype.loadIntoLocation = function (type, hostLocation, anchorName, providers, projectableNodes) {\r\n\t        if (providers === void 0) { providers = null; }\r\n\t        if (projectableNodes === void 0) { projectableNodes = null; }\r\n\t        return this.loadNextToLocation(type, this._viewManager.getNamedElementInComponentView(hostLocation, anchorName), providers, projectableNodes);\r\n\t    };\r\n\t    DynamicComponentLoader_.prototype.loadNextToLocation = function (type, location, providers, projectableNodes) {\r\n\t        var _this = this;\r\n\t        if (providers === void 0) { providers = null; }\r\n\t        if (projectableNodes === void 0) { projectableNodes = null; }\r\n\t        return this._compiler.compileInHost(type).then(function (hostProtoViewRef) {\r\n\t            var viewContainer = _this._viewManager.getViewContainer(location);\r\n\t            var hostViewRef = viewContainer.createHostView(hostProtoViewRef, viewContainer.length, providers, projectableNodes);\r\n\t            var newLocation = _this._viewManager.getHostElement(hostViewRef);\r\n\t            var component = _this._viewManager.getComponent(newLocation);\r\n\t            var dispose = function () {\r\n\t                var index = viewContainer.indexOf(hostViewRef);\r\n\t                if (!hostViewRef.destroyed && index !== -1) {\r\n\t                    viewContainer.remove(index);\r\n\t                }\r\n\t            };\r\n\t            return new ComponentRef_(newLocation, component, type, null, dispose);\r\n\t        });\r\n\t    };\r\n\t    DynamicComponentLoader_ = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [compiler_1.Compiler, view_manager_1.AppViewManager])\r\n\t    ], DynamicComponentLoader_);\r\n\t    return DynamicComponentLoader_;\r\n\t})(DynamicComponentLoader);\r\n\texports.DynamicComponentLoader_ = DynamicComponentLoader_;\r\n\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar interfaces_1 = __webpack_require__(193);\r\n\tvar element_1 = __webpack_require__(129);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar api_1 = __webpack_require__(134);\r\n\tvar view_ref_1 = __webpack_require__(132);\r\n\tvar pipes_1 = __webpack_require__(309);\r\n\tvar util_1 = __webpack_require__(621);\r\n\tvar interfaces_2 = __webpack_require__(193);\r\n\texports.DebugContext = interfaces_2.DebugContext;\r\n\tvar pipes_2 = __webpack_require__(309);\r\n\tvar view_type_1 = __webpack_require__(98);\r\n\tvar REFLECT_PREFIX = 'ng-reflect-';\r\n\tvar EMPTY_CONTEXT = lang_1.CONST_EXPR(new Object());\r\n\t/**\r\n\t * Cost of making objects: http://jsperf.com/instantiate-size-of-object\r\n\t *\r\n\t */\r\n\tvar AppView = (function () {\r\n\t    function AppView(proto, renderer, viewManager, projectableNodes, containerAppElement, imperativelyCreatedProviders, rootInjector, changeDetector) {\r\n\t        this.proto = proto;\r\n\t        this.renderer = renderer;\r\n\t        this.viewManager = viewManager;\r\n\t        this.projectableNodes = projectableNodes;\r\n\t        this.containerAppElement = containerAppElement;\r\n\t        this.changeDetector = changeDetector;\r\n\t        /**\r\n\t         * The context against which data-binding expressions in this view are evaluated against.\r\n\t         * This is always a component instance.\r\n\t         */\r\n\t        this.context = null;\r\n\t        this.destroyed = false;\r\n\t        this.ref = new view_ref_1.ViewRef_(this);\r\n\t        var injectorWithHostBoundary = element_1.AppElement.getViewParentInjector(this.proto.type, containerAppElement, imperativelyCreatedProviders, rootInjector);\r\n\t        this.parentInjector = injectorWithHostBoundary.injector;\r\n\t        this.hostInjectorBoundary = injectorWithHostBoundary.hostInjectorBoundary;\r\n\t        var pipes;\r\n\t        var context;\r\n\t        switch (proto.type) {\r\n\t            case view_type_1.ViewType.COMPONENT:\r\n\t                pipes = new pipes_2.Pipes(proto.protoPipes, containerAppElement.getInjector());\r\n\t                context = containerAppElement.getComponent();\r\n\t                break;\r\n\t            case view_type_1.ViewType.EMBEDDED:\r\n\t                pipes = containerAppElement.parentView.pipes;\r\n\t                context = containerAppElement.parentView.context;\r\n\t                break;\r\n\t            case view_type_1.ViewType.HOST:\r\n\t                pipes = null;\r\n\t                context = EMPTY_CONTEXT;\r\n\t                break;\r\n\t        }\r\n\t        this.pipes = pipes;\r\n\t        this.context = context;\r\n\t    }\r\n\t    AppView.prototype.init = function (rootNodesOrAppElements, allNodes, disposables, appElements) {\r\n\t        this.rootNodesOrAppElements = rootNodesOrAppElements;\r\n\t        this.allNodes = allNodes;\r\n\t        this.disposables = disposables;\r\n\t        this.appElements = appElements;\r\n\t        var localsMap = new collection_1.Map();\r\n\t        collection_1.StringMapWrapper.forEach(this.proto.templateVariableBindings, function (templateName, _) { localsMap.set(templateName, null); });\r\n\t        for (var i = 0; i < appElements.length; i++) {\r\n\t            var appEl = appElements[i];\r\n\t            var providerTokens = [];\r\n\t            if (lang_1.isPresent(appEl.proto.protoInjector)) {\r\n\t                for (var j = 0; j < appEl.proto.protoInjector.numberOfProviders; j++) {\r\n\t                    providerTokens.push(appEl.proto.protoInjector.getProviderAtIndex(j).key.token);\r\n\t                }\r\n\t            }\r\n\t            collection_1.StringMapWrapper.forEach(appEl.proto.directiveVariableBindings, function (directiveIndex, name) {\r\n\t                if (lang_1.isBlank(directiveIndex)) {\r\n\t                    localsMap.set(name, appEl.nativeElement);\r\n\t                }\r\n\t                else {\r\n\t                    localsMap.set(name, appEl.getDirectiveAtIndex(directiveIndex));\r\n\t                }\r\n\t            });\r\n\t            this.renderer.setElementDebugInfo(appEl.nativeElement, new api_1.RenderDebugInfo(appEl.getInjector(), appEl.getComponent(), providerTokens, localsMap));\r\n\t        }\r\n\t        var parentLocals = null;\r\n\t        if (this.proto.type !== view_type_1.ViewType.COMPONENT) {\r\n\t            parentLocals =\r\n\t                lang_1.isPresent(this.containerAppElement) ? this.containerAppElement.parentView.locals : null;\r\n\t        }\r\n\t        if (this.proto.type === view_type_1.ViewType.COMPONENT) {\r\n\t            // Note: the render nodes have been attached to their host element\r\n\t            // in the ViewFactory already.\r\n\t            this.containerAppElement.attachComponentView(this);\r\n\t            this.containerAppElement.parentView.changeDetector.addViewChild(this.changeDetector);\r\n\t        }\r\n\t        this.locals = new change_detection_1.Locals(parentLocals, localsMap);\r\n\t        this.changeDetector.hydrate(this.context, this.locals, this, this.pipes);\r\n\t        this.viewManager.onViewCreated(this);\r\n\t    };\r\n\t    AppView.prototype.destroy = function () {\r\n\t        if (this.destroyed) {\r\n\t            throw new exceptions_1.BaseException('This view has already been destroyed!');\r\n\t        }\r\n\t        this.changeDetector.destroyRecursive();\r\n\t    };\r\n\t    AppView.prototype.notifyOnDestroy = function () {\r\n\t        this.destroyed = true;\r\n\t        var hostElement = this.proto.type === view_type_1.ViewType.COMPONENT ? this.containerAppElement.nativeElement : null;\r\n\t        this.renderer.destroyView(hostElement, this.allNodes);\r\n\t        for (var i = 0; i < this.disposables.length; i++) {\r\n\t            this.disposables[i]();\r\n\t        }\r\n\t        this.viewManager.onViewDestroyed(this);\r\n\t    };\r\n\t    Object.defineProperty(AppView.prototype, \"changeDetectorRef\", {\r\n\t        get: function () { return this.changeDetector.ref; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AppView.prototype, \"flatRootNodes\", {\r\n\t        get: function () { return flattenNestedViewRenderNodes(this.rootNodesOrAppElements); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AppView.prototype.hasLocal = function (contextName) {\r\n\t        return collection_1.StringMapWrapper.contains(this.proto.templateVariableBindings, contextName);\r\n\t    };\r\n\t    AppView.prototype.setLocal = function (contextName, value) {\r\n\t        if (!this.hasLocal(contextName)) {\r\n\t            return;\r\n\t        }\r\n\t        var templateName = this.proto.templateVariableBindings[contextName];\r\n\t        this.locals.set(templateName, value);\r\n\t    };\r\n\t    // dispatch to element injector or text nodes based on context\r\n\t    AppView.prototype.notifyOnBinding = function (b, currentValue) {\r\n\t        if (b.isTextNode()) {\r\n\t            this.renderer.setText(this.allNodes[b.elementIndex], currentValue);\r\n\t        }\r\n\t        else {\r\n\t            var nativeElement = this.appElements[b.elementIndex].nativeElement;\r\n\t            if (b.isElementProperty()) {\r\n\t                this.renderer.setElementProperty(nativeElement, b.name, currentValue);\r\n\t            }\r\n\t            else if (b.isElementAttribute()) {\r\n\t                this.renderer.setElementAttribute(nativeElement, b.name, lang_1.isPresent(currentValue) ? \"\" + currentValue : null);\r\n\t            }\r\n\t            else if (b.isElementClass()) {\r\n\t                this.renderer.setElementClass(nativeElement, b.name, currentValue);\r\n\t            }\r\n\t            else if (b.isElementStyle()) {\r\n\t                var unit = lang_1.isPresent(b.unit) ? b.unit : '';\r\n\t                this.renderer.setElementStyle(nativeElement, b.name, lang_1.isPresent(currentValue) ? \"\" + currentValue + unit : null);\r\n\t            }\r\n\t            else {\r\n\t                throw new exceptions_1.BaseException('Unsupported directive record');\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AppView.prototype.logBindingUpdate = function (b, value) {\r\n\t        if (b.isDirective() || b.isElementProperty()) {\r\n\t            var nativeElement = this.appElements[b.elementIndex].nativeElement;\r\n\t            this.renderer.setBindingDebugInfo(nativeElement, \"\" + REFLECT_PREFIX + util_1.camelCaseToDashCase(b.name), \"\" + value);\r\n\t        }\r\n\t    };\r\n\t    AppView.prototype.notifyAfterContentChecked = function () {\r\n\t        var count = this.appElements.length;\r\n\t        for (var i = count - 1; i >= 0; i--) {\r\n\t            this.appElements[i].ngAfterContentChecked();\r\n\t        }\r\n\t    };\r\n\t    AppView.prototype.notifyAfterViewChecked = function () {\r\n\t        var count = this.appElements.length;\r\n\t        for (var i = count - 1; i >= 0; i--) {\r\n\t            this.appElements[i].ngAfterViewChecked();\r\n\t        }\r\n\t    };\r\n\t    AppView.prototype.getDebugContext = function (appElement, elementIndex, directiveIndex) {\r\n\t        try {\r\n\t            if (lang_1.isBlank(appElement) && elementIndex < this.appElements.length) {\r\n\t                appElement = this.appElements[elementIndex];\r\n\t            }\r\n\t            var container = this.containerAppElement;\r\n\t            var element = lang_1.isPresent(appElement) ? appElement.nativeElement : null;\r\n\t            var componentElement = lang_1.isPresent(container) ? container.nativeElement : null;\r\n\t            var directive = lang_1.isPresent(directiveIndex) ? appElement.getDirectiveAtIndex(directiveIndex) : null;\r\n\t            var injector = lang_1.isPresent(appElement) ? appElement.getInjector() : null;\r\n\t            return new interfaces_1.DebugContext(element, componentElement, directive, this.context, _localsToStringMap(this.locals), injector);\r\n\t        }\r\n\t        catch (e) {\r\n\t            // TODO: vsavkin log the exception once we have a good way to log errors and warnings\r\n\t            // if an error happens during getting the debug context, we return null.\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    AppView.prototype.getDirectiveFor = function (directive) {\r\n\t        return this.appElements[directive.elementIndex].getDirectiveAtIndex(directive.directiveIndex);\r\n\t    };\r\n\t    AppView.prototype.getDetectorFor = function (directive) {\r\n\t        var componentView = this.appElements[directive.elementIndex].componentView;\r\n\t        return lang_1.isPresent(componentView) ? componentView.changeDetector : null;\r\n\t    };\r\n\t    /**\r\n\t     * Triggers the event handlers for the element and the directives.\r\n\t     *\r\n\t     * This method is intended to be called from directive EventEmitters.\r\n\t     *\r\n\t     * @param {string} eventName\r\n\t     * @param {*} eventObj\r\n\t     * @param {number} boundElementIndex\r\n\t     * @return false if preventDefault must be applied to the DOM event\r\n\t     */\r\n\t    AppView.prototype.triggerEventHandlers = function (eventName, eventObj, boundElementIndex) {\r\n\t        return this.changeDetector.handleEvent(eventName, boundElementIndex, eventObj);\r\n\t    };\r\n\t    return AppView;\r\n\t})();\r\n\texports.AppView = AppView;\r\n\tfunction _localsToStringMap(locals) {\r\n\t    var res = {};\r\n\t    var c = locals;\r\n\t    while (lang_1.isPresent(c)) {\r\n\t        res = collection_1.StringMapWrapper.merge(res, collection_1.MapWrapper.toStringMap(c.current));\r\n\t        c = c.parent;\r\n\t    }\r\n\t    return res;\r\n\t}\r\n\t/**\r\n\t *\r\n\t */\r\n\tvar AppProtoView = (function () {\r\n\t    function AppProtoView(type, protoPipes, templateVariableBindings) {\r\n\t        this.type = type;\r\n\t        this.protoPipes = protoPipes;\r\n\t        this.templateVariableBindings = templateVariableBindings;\r\n\t    }\r\n\t    AppProtoView.create = function (metadataCache, type, pipes, templateVariableBindings) {\r\n\t        var protoPipes = null;\r\n\t        if (lang_1.isPresent(pipes) && pipes.length > 0) {\r\n\t            var boundPipes = collection_1.ListWrapper.createFixedSize(pipes.length);\r\n\t            for (var i = 0; i < pipes.length; i++) {\r\n\t                boundPipes[i] = metadataCache.getResolvedPipeMetadata(pipes[i]);\r\n\t            }\r\n\t            protoPipes = pipes_1.ProtoPipes.fromProviders(boundPipes);\r\n\t        }\r\n\t        return new AppProtoView(type, protoPipes, templateVariableBindings);\r\n\t    };\r\n\t    return AppProtoView;\r\n\t})();\r\n\texports.AppProtoView = AppProtoView;\r\n\tvar HostViewFactory = (function () {\r\n\t    function HostViewFactory(selector, viewFactory) {\r\n\t        this.selector = selector;\r\n\t        this.viewFactory = viewFactory;\r\n\t    }\r\n\t    HostViewFactory = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String, Function])\r\n\t    ], HostViewFactory);\r\n\t    return HostViewFactory;\r\n\t})();\r\n\texports.HostViewFactory = HostViewFactory;\r\n\tfunction flattenNestedViewRenderNodes(nodes) {\r\n\t    return _flattenNestedViewRenderNodes(nodes, []);\r\n\t}\r\n\texports.flattenNestedViewRenderNodes = flattenNestedViewRenderNodes;\r\n\tfunction _flattenNestedViewRenderNodes(nodes, renderNodes) {\r\n\t    for (var i = 0; i < nodes.length; i++) {\r\n\t        var node = nodes[i];\r\n\t        if (node instanceof element_1.AppElement) {\r\n\t            var appEl = node;\r\n\t            renderNodes.push(appEl.nativeElement);\r\n\t            if (lang_1.isPresent(appEl.nestedViews)) {\r\n\t                for (var k = 0; k < appEl.nestedViews.length; k++) {\r\n\t                    _flattenNestedViewRenderNodes(appEl.nestedViews[k].rootNodesOrAppElements, renderNodes);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            renderNodes.push(node);\r\n\t        }\r\n\t    }\r\n\t    return renderNodes;\r\n\t}\r\n\tfunction findLastRenderNode(node) {\r\n\t    var lastNode;\r\n\t    if (node instanceof element_1.AppElement) {\r\n\t        var appEl = node;\r\n\t        lastNode = appEl.nativeElement;\r\n\t        if (lang_1.isPresent(appEl.nestedViews)) {\r\n\t            // Note: Views might have no root nodes at all!\r\n\t            for (var i = appEl.nestedViews.length - 1; i >= 0; i--) {\r\n\t                var nestedView = appEl.nestedViews[i];\r\n\t                if (nestedView.rootNodesOrAppElements.length > 0) {\r\n\t                    lastNode = findLastRenderNode(nestedView.rootNodesOrAppElements[nestedView.rootNodesOrAppElements.length - 1]);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t    else {\r\n\t        lastNode = node;\r\n\t    }\r\n\t    return lastNode;\r\n\t}\r\n\texports.findLastRenderNode = findLastRenderNode;\r\n\tfunction checkSlotCount(componentName, expectedSlotCount, projectableNodes) {\r\n\t    var givenSlotCount = lang_1.isPresent(projectableNodes) ? projectableNodes.length : 0;\r\n\t    if (givenSlotCount < expectedSlotCount) {\r\n\t        throw new exceptions_1.BaseException((\"The component \" + componentName + \" has \" + expectedSlotCount + \" <ng-content> elements,\") +\r\n\t            (\" but only \" + givenSlotCount + \" slots were provided.\"));\r\n\t    }\r\n\t}\r\n\texports.checkSlotCount = checkSlotCount;\r\n\n\n/***/ },\n/* 98 */\n/***/ function(module, exports) {\n\n\t'use strict';(function (ViewType) {\r\n\t    // A view that contains the host element with bound component directive.\r\n\t    // Contains a COMPONENT view\r\n\t    ViewType[ViewType[\"HOST\"] = 0] = \"HOST\";\r\n\t    // The view of the component\r\n\t    // Can contain 0 to n EMBEDDED views\r\n\t    ViewType[ViewType[\"COMPONENT\"] = 1] = \"COMPONENT\";\r\n\t    // A view that is embedded into another View via a <template> element\r\n\t    // inside of a COMPONENT view\r\n\t    ViewType[ViewType[\"EMBEDDED\"] = 2] = \"EMBEDDED\";\r\n\t})(exports.ViewType || (exports.ViewType = {}));\r\n\tvar ViewType = exports.ViewType;\r\n\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar metadata_1 = __webpack_require__(80);\r\n\tvar change_detection_1 = __webpack_require__(289);\r\n\t/**\r\n\t * Directives allow you to attach behavior to elements in the DOM.\r\n\t *\r\n\t * {@link DirectiveMetadata}s with an embedded view are called {@link ComponentMetadata}s.\r\n\t *\r\n\t * A directive consists of a single directive annotation and a controller class. When the\r\n\t * directive's `selector` matches\r\n\t * elements in the DOM, the following steps occur:\r\n\t *\r\n\t * 1. For each directive, the `ElementInjector` attempts to resolve the directive's constructor\r\n\t * arguments.\r\n\t * 2. Angular instantiates directives for each matched element using `ElementInjector` in a\r\n\t * depth-first order,\r\n\t *    as declared in the HTML.\r\n\t *\r\n\t * ## Understanding How Injection Works\r\n\t *\r\n\t * There are three stages of injection resolution.\r\n\t * - *Pre-existing Injectors*:\r\n\t *   - The terminal {@link Injector} cannot resolve dependencies. It either throws an error or, if\r\n\t * the dependency was\r\n\t *     specified as `@Optional`, returns `null`.\r\n\t *   - The platform injector resolves browser singleton resources, such as: cookies, title,\r\n\t * location, and others.\r\n\t * - *Component Injectors*: Each component instance has its own {@link Injector}, and they follow\r\n\t * the same parent-child hierarchy\r\n\t *     as the component instances in the DOM.\r\n\t * - *Element Injectors*: Each component instance has a Shadow DOM. Within the Shadow DOM each\r\n\t * element has an `ElementInjector`\r\n\t *     which follow the same parent-child hierarchy as the DOM elements themselves.\r\n\t *\r\n\t * When a template is instantiated, it also must instantiate the corresponding directives in a\r\n\t * depth-first order. The\r\n\t * current `ElementInjector` resolves the constructor dependencies for each directive.\r\n\t *\r\n\t * Angular then resolves dependencies as follows, according to the order in which they appear in the\r\n\t * {@link ViewMetadata}:\r\n\t *\r\n\t * 1. Dependencies on the current element\r\n\t * 2. Dependencies on element injectors and their parents until it encounters a Shadow DOM boundary\r\n\t * 3. Dependencies on component injectors and their parents until it encounters the root component\r\n\t * 4. Dependencies on pre-existing injectors\r\n\t *\r\n\t *\r\n\t * The `ElementInjector` can inject other directives, element-specific special objects, or it can\r\n\t * delegate to the parent\r\n\t * injector.\r\n\t *\r\n\t * To inject other directives, declare the constructor parameter as:\r\n\t * - `directive:DirectiveType`: a directive on the current element only\r\n\t * - `@Host() directive:DirectiveType`: any directive that matches the type between the current\r\n\t * element and the\r\n\t *    Shadow DOM root.\r\n\t * - `@Query(DirectiveType) query:QueryList<DirectiveType>`: A live collection of direct child\r\n\t * directives.\r\n\t * - `@QueryDescendants(DirectiveType) query:QueryList<DirectiveType>`: A live collection of any\r\n\t * child directives.\r\n\t *\r\n\t * To inject element-specific special objects, declare the constructor parameter as:\r\n\t * - `element: ElementRef` to obtain a reference to logical element in the view.\r\n\t * - `viewContainer: ViewContainerRef` to control child template instantiation, for\r\n\t * {@link DirectiveMetadata} directives only\r\n\t * - `bindingPropagation: BindingPropagation` to control change detection in a more granular way.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example demonstrates how dependency injection resolves constructor arguments in\r\n\t * practice.\r\n\t *\r\n\t *\r\n\t * Assume this HTML template:\r\n\t *\r\n\t * ```\r\n\t * <div dependency=\"1\">\r\n\t *   <div dependency=\"2\">\r\n\t *     <div dependency=\"3\" my-directive>\r\n\t *       <div dependency=\"4\">\r\n\t *         <div dependency=\"5\"></div>\r\n\t *       </div>\r\n\t *       <div dependency=\"6\"></div>\r\n\t *     </div>\r\n\t *   </div>\r\n\t * </div>\r\n\t * ```\r\n\t *\r\n\t * With the following `dependency` decorator and `SomeService` injectable class.\r\n\t *\r\n\t * ```\r\n\t * @Injectable()\r\n\t * class SomeService {\r\n\t * }\r\n\t *\r\n\t * @Directive({\r\n\t *   selector: '[dependency]',\r\n\t *   inputs: [\r\n\t *     'id: dependency'\r\n\t *   ]\r\n\t * })\r\n\t * class Dependency {\r\n\t *   id:string;\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Let's step through the different ways in which `MyDirective` could be declared...\r\n\t *\r\n\t *\r\n\t * ### No injection\r\n\t *\r\n\t * Here the constructor is declared with no arguments, therefore nothing is injected into\r\n\t * `MyDirective`.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor() {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with no dependencies.\r\n\t *\r\n\t *\r\n\t * ### Component-level injection\r\n\t *\r\n\t * Directives can inject any injectable instance from the closest component injector or any of its\r\n\t * parents.\r\n\t *\r\n\t * Here, the constructor declares a parameter, `someService`, and injects the `SomeService` type\r\n\t * from the parent\r\n\t * component's injector.\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(someService: SomeService) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a dependency on `SomeService`.\r\n\t *\r\n\t *\r\n\t * ### Injecting a directive from the current element\r\n\t *\r\n\t * Directives can inject other directives declared on the current element.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(dependency: Dependency) {\r\n\t *     expect(dependency.id).toEqual(3);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t * This directive would be instantiated with `Dependency` declared at the same element, in this case\r\n\t * `dependency=\"3\"`.\r\n\t *\r\n\t * ### Injecting a directive from any ancestor elements\r\n\t *\r\n\t * Directives can inject other directives declared on any ancestor element (in the current Shadow\r\n\t * DOM), i.e. on the current element, the\r\n\t * parent element, or its parents.\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Host() dependency: Dependency) {\r\n\t *     expect(dependency.id).toEqual(2);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * `@Host` checks the current element, the parent, as well as its parents recursively. If\r\n\t * `dependency=\"2\"` didn't\r\n\t * exist on the direct parent, this injection would\r\n\t * have returned\r\n\t * `dependency=\"1\"`.\r\n\t *\r\n\t *\r\n\t * ### Injecting a live collection of direct child directives\r\n\t *\r\n\t *\r\n\t * A directive can also query for other child directives. Since parent directives are instantiated\r\n\t * before child directives, a directive can't simply inject the list of child directives. Instead,\r\n\t * the directive injects a {@link QueryList}, which updates its contents as children are added,\r\n\t * removed, or moved by a directive that uses a {@link ViewContainerRef} such as a `ngFor`, an\r\n\t * `ngIf`, or an `ngSwitch`.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Query(Dependency) dependencies:QueryList<Dependency>) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a {@link QueryList} which contains `Dependency` 4 and\r\n\t * `Dependency` 6. Here, `Dependency` 5 would not be included, because it is not a direct child.\r\n\t *\r\n\t * ### Injecting a live collection of descendant directives\r\n\t *\r\n\t * By passing the descendant flag to `@Query` above, we can include the children of the child\r\n\t * elements.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Query(Dependency, {descendants: true}) dependencies:QueryList<Dependency>) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a Query which would contain `Dependency` 4, 5 and 6.\r\n\t *\r\n\t * ### Optional injection\r\n\t *\r\n\t * The normal behavior of directives is to return an error when a specified dependency cannot be\r\n\t * resolved. If you\r\n\t * would like to inject `null` on unresolved dependency instead, you can annotate that dependency\r\n\t * with `@Optional()`.\r\n\t * This explicitly permits the author of a template to treat some of the surrounding directives as\r\n\t * optional.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Optional() dependency:Dependency) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a `Dependency` directive found on the current element.\r\n\t * If none can be\r\n\t * found, the injector supplies `null` instead of throwing an error.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Here we use a decorator directive to simply define basic tool-tip behavior.\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: '[tooltip]',\r\n\t *   inputs: [\r\n\t *     'text: tooltip'\r\n\t *   ],\r\n\t *   host: {\r\n\t *     '(mouseenter)': 'onMouseEnter()',\r\n\t *     '(mouseleave)': 'onMouseLeave()'\r\n\t *   }\r\n\t * })\r\n\t * class Tooltip{\r\n\t *   text:string;\r\n\t *   overlay:Overlay; // NOT YET IMPLEMENTED\r\n\t *   overlayManager:OverlayManager; // NOT YET IMPLEMENTED\r\n\t *\r\n\t *   constructor(overlayManager:OverlayManager) {\r\n\t *     this.overlay = overlay;\r\n\t *   }\r\n\t *\r\n\t *   onMouseEnter() {\r\n\t *     // exact signature to be determined\r\n\t *     this.overlay = this.overlayManager.open(text, ...);\r\n\t *   }\r\n\t *\r\n\t *   onMouseLeave() {\r\n\t *     this.overlay.close();\r\n\t *     this.overlay = null;\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t * In our HTML template, we can then add this behavior to a `<div>` or any other element with the\r\n\t * `tooltip` selector,\r\n\t * like so:\r\n\t *\r\n\t * ```\r\n\t * <div tooltip=\"some text here\"></div>\r\n\t * ```\r\n\t *\r\n\t * Directives can also control the instantiation, destruction, and positioning of inline template\r\n\t * elements:\r\n\t *\r\n\t * A directive uses a {@link ViewContainerRef} to instantiate, insert, move, and destroy views at\r\n\t * runtime.\r\n\t * The {@link ViewContainerRef} is created as a result of `<template>` element, and represents a\r\n\t * location in the current view\r\n\t * where these actions are performed.\r\n\t *\r\n\t * Views are always created as children of the current {@link ViewMetadata}, and as siblings of the\r\n\t * `<template>` element. Thus a\r\n\t * directive in a child view cannot inject the directive that created it.\r\n\t *\r\n\t * Since directives that create views via ViewContainers are common in Angular, and using the full\r\n\t * `<template>` element syntax is wordy, Angular\r\n\t * also supports a shorthand notation: `<li *foo=\"bar\">` and `<li template=\"foo: bar\">` are\r\n\t * equivalent.\r\n\t *\r\n\t * Thus,\r\n\t *\r\n\t * ```\r\n\t * <ul>\r\n\t *   <li *foo=\"bar\" title=\"text\"></li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Expands in use to:\r\n\t *\r\n\t * ```\r\n\t * <ul>\r\n\t *   <template [foo]=\"bar\">\r\n\t *     <li title=\"text\"></li>\r\n\t *   </template>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Notice that although the shorthand places `*foo=\"bar\"` within the `<li>` element, the binding for\r\n\t * the directive\r\n\t * controller is correctly instantiated on the `<template>` element rather than the `<li>` element.\r\n\t *\r\n\t * ## Lifecycle hooks\r\n\t *\r\n\t * When the directive class implements some {@link angular2/lifecycle_hooks} the callbacks are\r\n\t * called by the change detection at defined points in time during the life of the directive.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Let's suppose we want to implement the `unless` behavior, to conditionally include a template.\r\n\t *\r\n\t * Here is a simple directive that triggers on an `unless` selector:\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: '[unless]',\r\n\t *   inputs: ['unless']\r\n\t * })\r\n\t * export class Unless {\r\n\t *   viewContainer: ViewContainerRef;\r\n\t *   templateRef: TemplateRef;\r\n\t *   prevCondition: boolean;\r\n\t *\r\n\t *   constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef) {\r\n\t *     this.viewContainer = viewContainer;\r\n\t *     this.templateRef = templateRef;\r\n\t *     this.prevCondition = null;\r\n\t *   }\r\n\t *\r\n\t *   set unless(newCondition) {\r\n\t *     if (newCondition && (isBlank(this.prevCondition) || !this.prevCondition)) {\r\n\t *       this.prevCondition = true;\r\n\t *       this.viewContainer.clear();\r\n\t *     } else if (!newCondition && (isBlank(this.prevCondition) || this.prevCondition)) {\r\n\t *       this.prevCondition = false;\r\n\t *       this.viewContainer.create(this.templateRef);\r\n\t *     }\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * We can then use this `unless` selector in a template:\r\n\t * ```\r\n\t * <ul>\r\n\t *   <li *unless=\"expr\"></li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Once the directive instantiates the child view, the shorthand notation for the template expands\r\n\t * and the result is:\r\n\t *\r\n\t * ```\r\n\t * <ul>\r\n\t *   <template [unless]=\"exp\">\r\n\t *     <li></li>\r\n\t *   </template>\r\n\t *   <li></li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Note also that although the `<li></li>` template still exists inside the `<template></template>`,\r\n\t * the instantiated\r\n\t * view occurs on the second `<li></li>` which is a sibling to the `<template>` element.\r\n\t */\r\n\tvar DirectiveMetadata = (function (_super) {\r\n\t    __extends(DirectiveMetadata, _super);\r\n\t    function DirectiveMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, selector = _b.selector, inputs = _b.inputs, outputs = _b.outputs, properties = _b.properties, events = _b.events, host = _b.host, bindings = _b.bindings, providers = _b.providers, exportAs = _b.exportAs, queries = _b.queries;\r\n\t        _super.call(this);\r\n\t        this.selector = selector;\r\n\t        this._inputs = inputs;\r\n\t        this._properties = properties;\r\n\t        this._outputs = outputs;\r\n\t        this._events = events;\r\n\t        this.host = host;\r\n\t        this.exportAs = exportAs;\r\n\t        this.queries = queries;\r\n\t        this._providers = providers;\r\n\t        this._bindings = bindings;\r\n\t    }\r\n\t    Object.defineProperty(DirectiveMetadata.prototype, \"inputs\", {\r\n\t        /**\r\n\t         * Enumerates the set of data-bound input properties for a directive\r\n\t         *\r\n\t         * Angular automatically updates input properties during change detection.\r\n\t         *\r\n\t         * The `inputs` property defines a set of `directiveProperty` to `bindingProperty`\r\n\t         * configuration:\r\n\t         *\r\n\t         * - `directiveProperty` specifies the component property where the value is written.\r\n\t         * - `bindingProperty` specifies the DOM property where the value is read from.\r\n\t         *\r\n\t         * When `bindingProperty` is not provided, it is assumed to be equal to `directiveProperty`.\r\n\t         *\r\n\t         * ### Example ([live demo](http://plnkr.co/edit/ivhfXY?p=preview))\r\n\t         *\r\n\t         * The following example creates a component with two data-bound properties.\r\n\t         *\r\n\t         * ```typescript\r\n\t         * @Component({\r\n\t         *   selector: 'bank-account',\r\n\t         *   inputs: ['bankName', 'id: account-id'],\r\n\t         *   template: `\r\n\t         *     Bank Name: {{bankName}}\r\n\t         *     Account Id: {{id}}\r\n\t         *   `\r\n\t         * })\r\n\t         * class BankAccount {\r\n\t         *   bankName: string;\r\n\t         *   id: string;\r\n\t         *\r\n\t         *   // this property is not bound, and won't be automatically updated by Angular\r\n\t         *   normalizedBankName: string;\r\n\t         * }\r\n\t         *\r\n\t         * @Component({\r\n\t         *   selector: 'app',\r\n\t         *   template: `\r\n\t         *     <bank-account bank-name=\"RBC\" account-id=\"4747\"></bank-account>\r\n\t         *   `,\r\n\t         *   directives: [BankAccount]\r\n\t         * })\r\n\t         * class App {}\r\n\t         *\r\n\t         * bootstrap(App);\r\n\t         * ```\r\n\t         *\r\n\t         */\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._properties) && this._properties.length > 0 ? this._properties :\r\n\t                this._inputs;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(DirectiveMetadata.prototype, \"properties\", {\r\n\t        get: function () { return this.inputs; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(DirectiveMetadata.prototype, \"outputs\", {\r\n\t        /**\r\n\t         * Enumerates the set of event-bound output properties.\r\n\t         *\r\n\t         * When an output property emits an event, an event handler attached to that event\r\n\t         * the template is invoked.\r\n\t         *\r\n\t         * The `outputs` property defines a set of `directiveProperty` to `bindingProperty`\r\n\t         * configuration:\r\n\t         *\r\n\t         * - `directiveProperty` specifies the component property that emits events.\r\n\t         * - `bindingProperty` specifies the DOM property the event handler is attached to.\r\n\t         *\r\n\t         * ### Example ([live demo](http://plnkr.co/edit/d5CNq7?p=preview))\r\n\t         *\r\n\t         * ```typescript\r\n\t         * @Directive({\r\n\t         *   selector: 'interval-dir',\r\n\t         *   outputs: ['everySecond', 'five5Secs: everyFiveSeconds']\r\n\t         * })\r\n\t         * class IntervalDir {\r\n\t         *   everySecond = new EventEmitter();\r\n\t         *   five5Secs = new EventEmitter();\r\n\t         *\r\n\t         *   constructor() {\r\n\t         *     setInterval(() => this.everySecond.emit(\"event\"), 1000);\r\n\t         *     setInterval(() => this.five5Secs.emit(\"event\"), 5000);\r\n\t         *   }\r\n\t         * }\r\n\t         *\r\n\t         * @Component({\r\n\t         *   selector: 'app',\r\n\t         *   template: `\r\n\t         *     <interval-dir (everySecond)=\"everySecond()\" (everyFiveSeconds)=\"everyFiveSeconds()\">\r\n\t         *     </interval-dir>\r\n\t         *   `,\r\n\t         *   directives: [IntervalDir]\r\n\t         * })\r\n\t         * class App {\r\n\t         *   everySecond() { console.log('second'); }\r\n\t         *   everyFiveSeconds() { console.log('five seconds'); }\r\n\t         * }\r\n\t         * bootstrap(App);\r\n\t         * ```\r\n\t         *\r\n\t         */\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._events) && this._events.length > 0 ? this._events : this._outputs;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(DirectiveMetadata.prototype, \"events\", {\r\n\t        get: function () { return this.outputs; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(DirectiveMetadata.prototype, \"providers\", {\r\n\t        /**\r\n\t         * Defines the set of injectable objects that are visible to a Directive and its light DOM\r\n\t         * children.\r\n\t         *\r\n\t         * ## Simple Example\r\n\t         *\r\n\t         * Here is an example of a class that can be injected:\r\n\t         *\r\n\t         * ```\r\n\t         * class Greeter {\r\n\t         *    greet(name:string) {\r\n\t         *      return 'Hello ' + name + '!';\r\n\t         *    }\r\n\t         * }\r\n\t         *\r\n\t         * @Directive({\r\n\t         *   selector: 'greet',\r\n\t         *   bindings: [\r\n\t         *     Greeter\r\n\t         *   ]\r\n\t         * })\r\n\t         * class HelloWorld {\r\n\t         *   greeter:Greeter;\r\n\t         *\r\n\t         *   constructor(greeter:Greeter) {\r\n\t         *     this.greeter = greeter;\r\n\t         *   }\r\n\t         * }\r\n\t         * ```\r\n\t         */\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._bindings) && this._bindings.length > 0 ? this._bindings :\r\n\t                this._providers;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(DirectiveMetadata.prototype, \"bindings\", {\r\n\t        /** @deprecated */\r\n\t        get: function () { return this.providers; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DirectiveMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], DirectiveMetadata);\r\n\t    return DirectiveMetadata;\r\n\t})(metadata_1.InjectableMetadata);\r\n\texports.DirectiveMetadata = DirectiveMetadata;\r\n\t/**\r\n\t * Declare reusable UI building blocks for an application.\r\n\t *\r\n\t * Each Angular component requires a single `@Component` annotation. The\r\n\t * `@Component`\r\n\t * annotation specifies when a component is instantiated, and which properties and hostListeners it\r\n\t * binds to.\r\n\t *\r\n\t * When a component is instantiated, Angular\r\n\t * - creates a shadow DOM for the component.\r\n\t * - loads the selected template into the shadow DOM.\r\n\t * - creates all the injectable objects configured with `providers` and `viewProviders`.\r\n\t *\r\n\t * All template expressions and statements are then evaluated against the component instance.\r\n\t *\r\n\t * For details on the `@View` annotation, see {@link ViewMetadata}.\r\n\t *\r\n\t * ## Lifecycle hooks\r\n\t *\r\n\t * When the component class implements some {@link angular2/lifecycle_hooks} the callbacks are\r\n\t * called by the change detection at defined points in time during the life of the component.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/ts/metadata/metadata.ts region='component'}\r\n\t */\r\n\tvar ComponentMetadata = (function (_super) {\r\n\t    __extends(ComponentMetadata, _super);\r\n\t    function ComponentMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, selector = _b.selector, inputs = _b.inputs, outputs = _b.outputs, properties = _b.properties, events = _b.events, host = _b.host, exportAs = _b.exportAs, moduleId = _b.moduleId, bindings = _b.bindings, providers = _b.providers, viewBindings = _b.viewBindings, viewProviders = _b.viewProviders, _c = _b.changeDetection, changeDetection = _c === void 0 ? change_detection_1.ChangeDetectionStrategy.Default : _c, queries = _b.queries, templateUrl = _b.templateUrl, template = _b.template, styleUrls = _b.styleUrls, styles = _b.styles, directives = _b.directives, pipes = _b.pipes, encapsulation = _b.encapsulation;\r\n\t        _super.call(this, {\r\n\t            selector: selector,\r\n\t            inputs: inputs,\r\n\t            outputs: outputs,\r\n\t            properties: properties,\r\n\t            events: events,\r\n\t            host: host,\r\n\t            exportAs: exportAs,\r\n\t            bindings: bindings,\r\n\t            providers: providers,\r\n\t            queries: queries\r\n\t        });\r\n\t        this.changeDetection = changeDetection;\r\n\t        this._viewProviders = viewProviders;\r\n\t        this._viewBindings = viewBindings;\r\n\t        this.templateUrl = templateUrl;\r\n\t        this.template = template;\r\n\t        this.styleUrls = styleUrls;\r\n\t        this.styles = styles;\r\n\t        this.directives = directives;\r\n\t        this.pipes = pipes;\r\n\t        this.encapsulation = encapsulation;\r\n\t        this.moduleId = moduleId;\r\n\t    }\r\n\t    Object.defineProperty(ComponentMetadata.prototype, \"viewProviders\", {\r\n\t        /**\r\n\t         * Defines the set of injectable objects that are visible to its view DOM children.\r\n\t         *\r\n\t         * ## Simple Example\r\n\t         *\r\n\t         * Here is an example of a class that can be injected:\r\n\t         *\r\n\t         * ```\r\n\t         * class Greeter {\r\n\t         *    greet(name:string) {\r\n\t         *      return 'Hello ' + name + '!';\r\n\t         *    }\r\n\t         * }\r\n\t         *\r\n\t         * @Directive({\r\n\t         *   selector: 'needs-greeter'\r\n\t         * })\r\n\t         * class NeedsGreeter {\r\n\t         *   greeter:Greeter;\r\n\t         *\r\n\t         *   constructor(greeter:Greeter) {\r\n\t         *     this.greeter = greeter;\r\n\t         *   }\r\n\t         * }\r\n\t         *\r\n\t         * @Component({\r\n\t         *   selector: 'greet',\r\n\t         *   viewProviders: [\r\n\t         *     Greeter\r\n\t         *   ],\r\n\t         *   template: `<needs-greeter></needs-greeter>`,\r\n\t         *   directives: [NeedsGreeter]\r\n\t         * })\r\n\t         * class HelloWorld {\r\n\t         * }\r\n\t         *\r\n\t         * ```\r\n\t         */\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._viewBindings) && this._viewBindings.length > 0 ? this._viewBindings :\r\n\t                this._viewProviders;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ComponentMetadata.prototype, \"viewBindings\", {\r\n\t        get: function () { return this.viewProviders; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ComponentMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], ComponentMetadata);\r\n\t    return ComponentMetadata;\r\n\t})(DirectiveMetadata);\r\n\texports.ComponentMetadata = ComponentMetadata;\r\n\t/**\r\n\t * Declare reusable pipe function.\r\n\t *\r\n\t * A \"pure\" pipe is only re-evaluated when either the input or any of the arguments change.\r\n\t *\r\n\t * When not specified, pipes default to being pure.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/ts/metadata/metadata.ts region='pipe'}\r\n\t */\r\n\tvar PipeMetadata = (function (_super) {\r\n\t    __extends(PipeMetadata, _super);\r\n\t    function PipeMetadata(_a) {\r\n\t        var name = _a.name, pure = _a.pure;\r\n\t        _super.call(this);\r\n\t        this.name = name;\r\n\t        this._pure = pure;\r\n\t    }\r\n\t    Object.defineProperty(PipeMetadata.prototype, \"pure\", {\r\n\t        get: function () { return lang_1.isPresent(this._pure) ? this._pure : true; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    PipeMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], PipeMetadata);\r\n\t    return PipeMetadata;\r\n\t})(metadata_1.InjectableMetadata);\r\n\texports.PipeMetadata = PipeMetadata;\r\n\t/**\r\n\t * Declares a data-bound input property.\r\n\t *\r\n\t * Angular automatically updates data-bound properties during change detection.\r\n\t *\r\n\t * `InputMetadata` takes an optional parameter that specifies the name\r\n\t * used when instantiating a component in the template. When not provided,\r\n\t * the name of the decorated property is used.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example creates a component with two input properties.\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'bank-account',\r\n\t *   template: `\r\n\t *     Bank Name: {{bankName}}\r\n\t *     Account Id: {{id}}\r\n\t *   `\r\n\t * })\r\n\t * class BankAccount {\r\n\t *   @Input() bankName: string;\r\n\t *   @Input('account-id') id: string;\r\n\t *\r\n\t *   // this property is not bound, and won't be automatically updated by Angular\r\n\t *   normalizedBankName: string;\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `\r\n\t *     <bank-account bank-name=\"RBC\" account-id=\"4747\"></bank-account>\r\n\t *   `,\r\n\t *   directives: [BankAccount]\r\n\t * })\r\n\t * class App {}\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\tvar InputMetadata = (function () {\r\n\t    function InputMetadata(\r\n\t        /**\r\n\t         * Name used when instantiating a component in the template.\r\n\t         */\r\n\t        bindingPropertyName) {\r\n\t        this.bindingPropertyName = bindingPropertyName;\r\n\t    }\r\n\t    InputMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], InputMetadata);\r\n\t    return InputMetadata;\r\n\t})();\r\n\texports.InputMetadata = InputMetadata;\r\n\t/**\r\n\t * Declares an event-bound output property.\r\n\t *\r\n\t * When an output property emits an event, an event handler attached to that event\r\n\t * the template is invoked.\r\n\t *\r\n\t * `OutputMetadata` takes an optional parameter that specifies the name\r\n\t * used when instantiating a component in the template. When not provided,\r\n\t * the name of the decorated property is used.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({\r\n\t *   selector: 'interval-dir',\r\n\t * })\r\n\t * class IntervalDir {\r\n\t *   @Output() everySecond = new EventEmitter();\r\n\t *   @Output('everyFiveSeconds') five5Secs = new EventEmitter();\r\n\t *\r\n\t *   constructor() {\r\n\t *     setInterval(() => this.everySecond.emit(\"event\"), 1000);\r\n\t *     setInterval(() => this.five5Secs.emit(\"event\"), 5000);\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `\r\n\t *     <interval-dir (everySecond)=\"everySecond()\" (everyFiveSeconds)=\"everyFiveSeconds()\">\r\n\t *     </interval-dir>\r\n\t *   `,\r\n\t *   directives: [IntervalDir]\r\n\t * })\r\n\t * class App {\r\n\t *   everySecond() { console.log('second'); }\r\n\t *   everyFiveSeconds() { console.log('five seconds'); }\r\n\t * }\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\tvar OutputMetadata = (function () {\r\n\t    function OutputMetadata(bindingPropertyName) {\r\n\t        this.bindingPropertyName = bindingPropertyName;\r\n\t    }\r\n\t    OutputMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], OutputMetadata);\r\n\t    return OutputMetadata;\r\n\t})();\r\n\texports.OutputMetadata = OutputMetadata;\r\n\t/**\r\n\t * Declares a host property binding.\r\n\t *\r\n\t * Angular automatically checks host property bindings during change detection.\r\n\t * If a binding changes, it will update the host element of the directive.\r\n\t *\r\n\t * `HostBindingMetadata` takes an optional parameter that specifies the property\r\n\t * name of the host element that will be updated. When not provided,\r\n\t * the class property name is used.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example creates a directive that sets the `valid` and `invalid` classes\r\n\t * on the DOM element that has ngModel directive on it.\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({selector: '[ngModel]'})\r\n\t * class NgModelStatus {\r\n\t *   constructor(public control:NgModel) {}\r\n\t *   @HostBinding('class.valid') get valid { return this.control.valid; }\r\n\t *   @HostBinding('class.invalid') get invalid { return this.control.invalid; }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `<input [(ngModel)]=\"prop\">`,\r\n\t *   directives: [FORM_DIRECTIVES, NgModelStatus]\r\n\t * })\r\n\t * class App {\r\n\t *   prop;\r\n\t * }\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\tvar HostBindingMetadata = (function () {\r\n\t    function HostBindingMetadata(hostPropertyName) {\r\n\t        this.hostPropertyName = hostPropertyName;\r\n\t    }\r\n\t    HostBindingMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], HostBindingMetadata);\r\n\t    return HostBindingMetadata;\r\n\t})();\r\n\texports.HostBindingMetadata = HostBindingMetadata;\r\n\t/**\r\n\t * Declares a host listener.\r\n\t *\r\n\t * Angular will invoke the decorated method when the host element emits the specified event.\r\n\t *\r\n\t * If the decorated method returns `false`, then `preventDefault` is applied on the DOM\r\n\t * event.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example declares a directive that attaches a click listener to the button and\r\n\t * counts clicks.\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({selector: 'button[counting]'})\r\n\t * class CountClicks {\r\n\t *   numberOfClicks = 0;\r\n\t *\r\n\t *   @HostListener('click', ['$event.target'])\r\n\t *   onClick(btn) {\r\n\t *     console.log(\"button\", btn, \"number of clicks:\", this.numberOfClicks++);\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `<button counting>Increment</button>`,\r\n\t *   directives: [CountClicks]\r\n\t * })\r\n\t * class App {}\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\tvar HostListenerMetadata = (function () {\r\n\t    function HostListenerMetadata(eventName, args) {\r\n\t        this.eventName = eventName;\r\n\t        this.args = args;\r\n\t    }\r\n\t    HostListenerMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String, Array])\r\n\t    ], HostListenerMetadata);\r\n\t    return HostListenerMetadata;\r\n\t})();\r\n\texports.HostListenerMetadata = HostListenerMetadata;\r\n\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar _nextClassId = 0;\r\n\tfunction extractAnnotation(annotation) {\r\n\t    if (lang_1.isFunction(annotation) && annotation.hasOwnProperty('annotation')) {\r\n\t        // it is a decorator, extract annotation\r\n\t        annotation = annotation.annotation;\r\n\t    }\r\n\t    return annotation;\r\n\t}\r\n\tfunction applyParams(fnOrArray, key) {\r\n\t    if (fnOrArray === Object || fnOrArray === String || fnOrArray === Function ||\r\n\t        fnOrArray === Number || fnOrArray === Array) {\r\n\t        throw new Error(\"Can not use native \" + lang_1.stringify(fnOrArray) + \" as constructor\");\r\n\t    }\r\n\t    if (lang_1.isFunction(fnOrArray)) {\r\n\t        return fnOrArray;\r\n\t    }\r\n\t    else if (fnOrArray instanceof Array) {\r\n\t        var annotations = fnOrArray;\r\n\t        var fn = fnOrArray[fnOrArray.length - 1];\r\n\t        if (!lang_1.isFunction(fn)) {\r\n\t            throw new Error(\"Last position of Class method array must be Function in key \" + key + \" was '\" + lang_1.stringify(fn) + \"'\");\r\n\t        }\r\n\t        var annoLength = annotations.length - 1;\r\n\t        if (annoLength != fn.length) {\r\n\t            throw new Error(\"Number of annotations (\" + annoLength + \") does not match number of arguments (\" + fn.length + \") in the function: \" + lang_1.stringify(fn));\r\n\t        }\r\n\t        var paramsAnnotations = [];\r\n\t        for (var i = 0, ii = annotations.length - 1; i < ii; i++) {\r\n\t            var paramAnnotations = [];\r\n\t            paramsAnnotations.push(paramAnnotations);\r\n\t            var annotation = annotations[i];\r\n\t            if (annotation instanceof Array) {\r\n\t                for (var j = 0; j < annotation.length; j++) {\r\n\t                    paramAnnotations.push(extractAnnotation(annotation[j]));\r\n\t                }\r\n\t            }\r\n\t            else if (lang_1.isFunction(annotation)) {\r\n\t                paramAnnotations.push(extractAnnotation(annotation));\r\n\t            }\r\n\t            else {\r\n\t                paramAnnotations.push(annotation);\r\n\t            }\r\n\t        }\r\n\t        Reflect.defineMetadata('parameters', paramsAnnotations, fn);\r\n\t        return fn;\r\n\t    }\r\n\t    else {\r\n\t        throw new Error(\"Only Function or Array is supported in Class definition for key '\" + key + \"' is '\" + lang_1.stringify(fnOrArray) + \"'\");\r\n\t    }\r\n\t}\r\n\t/**\r\n\t * Provides a way for expressing ES6 classes with parameter annotations in ES5.\r\n\t *\r\n\t * ## Basic Example\r\n\t *\r\n\t * ```\r\n\t * var Greeter = ng.Class({\r\n\t *   constructor: function(name) {\r\n\t *     this.name = name;\r\n\t *   },\r\n\t *\r\n\t *   greet: function() {\r\n\t *     alert('Hello ' + this.name + '!');\r\n\t *   }\r\n\t * });\r\n\t * ```\r\n\t *\r\n\t * is equivalent to ES6:\r\n\t *\r\n\t * ```\r\n\t * class Greeter {\r\n\t *   constructor(name) {\r\n\t *     this.name = name;\r\n\t *   }\r\n\t *\r\n\t *   greet() {\r\n\t *     alert('Hello ' + this.name + '!');\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * or equivalent to ES5:\r\n\t *\r\n\t * ```\r\n\t * var Greeter = function (name) {\r\n\t *   this.name = name;\r\n\t * }\r\n\t *\r\n\t * Greeter.prototype.greet = function () {\r\n\t *   alert('Hello ' + this.name + '!');\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * ### Example with parameter annotations\r\n\t *\r\n\t * ```\r\n\t * var MyService = ng.Class({\r\n\t *   constructor: [String, [new Query(), QueryList], function(name, queryList) {\r\n\t *     ...\r\n\t *   }]\r\n\t * });\r\n\t * ```\r\n\t *\r\n\t * is equivalent to ES6:\r\n\t *\r\n\t * ```\r\n\t * class MyService {\r\n\t *   constructor(name: string, @Query() queryList: QueryList) {\r\n\t *     ...\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * ### Example with inheritance\r\n\t *\r\n\t * ```\r\n\t * var Shape = ng.Class({\r\n\t *   constructor: (color) {\r\n\t *     this.color = color;\r\n\t *   }\r\n\t * });\r\n\t *\r\n\t * var Square = ng.Class({\r\n\t *   extends: Shape,\r\n\t *   constructor: function(color, size) {\r\n\t *     Shape.call(this, color);\r\n\t *     this.size = size;\r\n\t *   }\r\n\t * });\r\n\t * ```\r\n\t */\r\n\tfunction Class(clsDef) {\r\n\t    var constructor = applyParams(clsDef.hasOwnProperty('constructor') ? clsDef.constructor : undefined, 'constructor');\r\n\t    var proto = constructor.prototype;\r\n\t    if (clsDef.hasOwnProperty('extends')) {\r\n\t        if (lang_1.isFunction(clsDef.extends)) {\r\n\t            constructor.prototype = proto =\r\n\t                Object.create(clsDef.extends.prototype);\r\n\t        }\r\n\t        else {\r\n\t            throw new Error(\"Class definition 'extends' property must be a constructor function was: \" + lang_1.stringify(clsDef.extends));\r\n\t        }\r\n\t    }\r\n\t    for (var key in clsDef) {\r\n\t        if (key != 'extends' && key != 'prototype' && clsDef.hasOwnProperty(key)) {\r\n\t            proto[key] = applyParams(clsDef[key], key);\r\n\t        }\r\n\t    }\r\n\t    if (this && this.annotations instanceof Array) {\r\n\t        Reflect.defineMetadata('annotations', this.annotations, constructor);\r\n\t    }\r\n\t    if (!constructor['name']) {\r\n\t        constructor['overriddenName'] = \"class\" + _nextClassId++;\r\n\t    }\r\n\t    return constructor;\r\n\t}\r\n\texports.Class = Class;\r\n\tvar Reflect = lang_1.global.Reflect;\r\n\t// Throw statement at top-level is disallowed by closure compiler in ES6 input.\r\n\t// Wrap in an IIFE as a work-around.\r\n\t(function checkReflect() {\r\n\t    if (!(Reflect && Reflect.getMetadata)) {\r\n\t        throw 'reflect-metadata shim is required when using class decorators';\r\n\t    }\r\n\t})();\r\n\tfunction makeDecorator(annotationCls, chainFn) {\r\n\t    if (chainFn === void 0) { chainFn = null; }\r\n\t    function DecoratorFactory(objOrType) {\r\n\t        var annotationInstance = new annotationCls(objOrType);\r\n\t        if (this instanceof annotationCls) {\r\n\t            return annotationInstance;\r\n\t        }\r\n\t        else {\r\n\t            var chainAnnotation = lang_1.isFunction(this) && this.annotations instanceof Array ? this.annotations : [];\r\n\t            chainAnnotation.push(annotationInstance);\r\n\t            var TypeDecorator = function TypeDecorator(cls) {\r\n\t                var annotations = Reflect.getOwnMetadata('annotations', cls);\r\n\t                annotations = annotations || [];\r\n\t                annotations.push(annotationInstance);\r\n\t                Reflect.defineMetadata('annotations', annotations, cls);\r\n\t                return cls;\r\n\t            };\r\n\t            TypeDecorator.annotations = chainAnnotation;\r\n\t            TypeDecorator.Class = Class;\r\n\t            if (chainFn)\r\n\t                chainFn(TypeDecorator);\r\n\t            return TypeDecorator;\r\n\t        }\r\n\t    }\r\n\t    DecoratorFactory.prototype = Object.create(annotationCls.prototype);\r\n\t    return DecoratorFactory;\r\n\t}\r\n\texports.makeDecorator = makeDecorator;\r\n\tfunction makeParamDecorator(annotationCls) {\r\n\t    function ParamDecoratorFactory() {\r\n\t        var args = [];\r\n\t        for (var _i = 0; _i < arguments.length; _i++) {\r\n\t            args[_i - 0] = arguments[_i];\r\n\t        }\r\n\t        var annotationInstance = Object.create(annotationCls.prototype);\r\n\t        annotationCls.apply(annotationInstance, args);\r\n\t        if (this instanceof annotationCls) {\r\n\t            return annotationInstance;\r\n\t        }\r\n\t        else {\r\n\t            ParamDecorator.annotation = annotationInstance;\r\n\t            return ParamDecorator;\r\n\t        }\r\n\t        function ParamDecorator(cls, unusedKey, index) {\r\n\t            var parameters = Reflect.getMetadata('parameters', cls);\r\n\t            parameters = parameters || [];\r\n\t            // there might be gaps if some in between parameters do not have annotations.\r\n\t            // we pad with nulls.\r\n\t            while (parameters.length <= index) {\r\n\t                parameters.push(null);\r\n\t            }\r\n\t            parameters[index] = parameters[index] || [];\r\n\t            var annotationsForParam = parameters[index];\r\n\t            annotationsForParam.push(annotationInstance);\r\n\t            Reflect.defineMetadata('parameters', parameters, cls);\r\n\t            return cls;\r\n\t        }\r\n\t    }\r\n\t    ParamDecoratorFactory.prototype = Object.create(annotationCls.prototype);\r\n\t    return ParamDecoratorFactory;\r\n\t}\r\n\texports.makeParamDecorator = makeParamDecorator;\r\n\tfunction makePropDecorator(decoratorCls) {\r\n\t    function PropDecoratorFactory() {\r\n\t        var args = [];\r\n\t        for (var _i = 0; _i < arguments.length; _i++) {\r\n\t            args[_i - 0] = arguments[_i];\r\n\t        }\r\n\t        var decoratorInstance = Object.create(decoratorCls.prototype);\r\n\t        decoratorCls.apply(decoratorInstance, args);\r\n\t        if (this instanceof decoratorCls) {\r\n\t            return decoratorInstance;\r\n\t        }\r\n\t        else {\r\n\t            return function PropDecorator(target, name) {\r\n\t                var meta = Reflect.getOwnMetadata('propMetadata', target.constructor);\r\n\t                meta = meta || {};\r\n\t                meta[name] = meta[name] || [];\r\n\t                meta[name].unshift(decoratorInstance);\r\n\t                Reflect.defineMetadata('propMetadata', meta, target.constructor);\r\n\t            };\r\n\t        }\r\n\t    }\r\n\t    PropDecoratorFactory.prototype = Object.create(decoratorCls.prototype);\r\n\t    return PropDecoratorFactory;\r\n\t}\r\n\texports.makePropDecorator = makePropDecorator;\r\n\n\n/***/ },\n/* 101 */\n/***/ function(module, exports) {\n\n\t'use strict';var PromiseCompleter = (function () {\r\n\t    function PromiseCompleter() {\r\n\t        var _this = this;\r\n\t        this.promise = new Promise(function (res, rej) {\r\n\t            _this.resolve = res;\r\n\t            _this.reject = rej;\r\n\t        });\r\n\t    }\r\n\t    return PromiseCompleter;\r\n\t})();\r\n\texports.PromiseCompleter = PromiseCompleter;\r\n\tvar PromiseWrapper = (function () {\r\n\t    function PromiseWrapper() {\r\n\t    }\r\n\t    PromiseWrapper.resolve = function (obj) { return Promise.resolve(obj); };\r\n\t    PromiseWrapper.reject = function (obj, _) { return Promise.reject(obj); };\r\n\t    // Note: We can't rename this method into `catch`, as this is not a valid\r\n\t    // method name in Dart.\r\n\t    PromiseWrapper.catchError = function (promise, onError) {\r\n\t        return promise.catch(onError);\r\n\t    };\r\n\t    PromiseWrapper.all = function (promises) {\r\n\t        if (promises.length == 0)\r\n\t            return Promise.resolve([]);\r\n\t        return Promise.all(promises);\r\n\t    };\r\n\t    PromiseWrapper.then = function (promise, success, rejection) {\r\n\t        return promise.then(success, rejection);\r\n\t    };\r\n\t    PromiseWrapper.wrap = function (computation) {\r\n\t        return new Promise(function (res, rej) {\r\n\t            try {\r\n\t                res(computation());\r\n\t            }\r\n\t            catch (e) {\r\n\t                rej(e);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    PromiseWrapper.scheduleMicrotask = function (computation) {\r\n\t        PromiseWrapper.then(PromiseWrapper.resolve(null), computation, function (_) { });\r\n\t    };\r\n\t    PromiseWrapper.isPromise = function (obj) { return obj instanceof Promise; };\r\n\t    PromiseWrapper.completer = function () { return new PromiseCompleter(); };\r\n\t    return PromiseWrapper;\r\n\t})();\r\n\texports.PromiseWrapper = PromiseWrapper;\r\n\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\t/**\r\n\t * Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as\r\n\t * specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class).\r\n\t *\r\n\t * The only known difference between this `Headers` implementation and the spec is the\r\n\t * lack of an `entries` method.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/MTdwT6?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {Headers} from 'angular2/http';\r\n\t *\r\n\t * var firstHeaders = new Headers();\r\n\t * firstHeaders.append('Content-Type', 'image/jpeg');\r\n\t * console.log(firstHeaders.get('Content-Type')) //'image/jpeg'\r\n\t *\r\n\t * // Create headers from Plain Old JavaScript Object\r\n\t * var secondHeaders = new Headers({\r\n\t *   'X-My-Custom-Header': 'Angular'\r\n\t * });\r\n\t * console.log(secondHeaders.get('X-My-Custom-Header')); //'Angular'\r\n\t *\r\n\t * var thirdHeaders = new Headers(secondHeaders);\r\n\t * console.log(thirdHeaders.get('X-My-Custom-Header')); //'Angular'\r\n\t * ```\r\n\t */\r\n\tvar Headers = (function () {\r\n\t    function Headers(headers) {\r\n\t        var _this = this;\r\n\t        if (headers instanceof Headers) {\r\n\t            this._headersMap = headers._headersMap;\r\n\t            return;\r\n\t        }\r\n\t        this._headersMap = new collection_1.Map();\r\n\t        if (lang_1.isBlank(headers)) {\r\n\t            return;\r\n\t        }\r\n\t        // headers instanceof StringMap\r\n\t        collection_1.StringMapWrapper.forEach(headers, function (v, k) {\r\n\t            _this._headersMap.set(k, collection_1.isListLikeIterable(v) ? v : [v]);\r\n\t        });\r\n\t    }\r\n\t    /**\r\n\t     * Returns a new Headers instance from the given DOMString of Response Headers\r\n\t     */\r\n\t    Headers.fromResponseHeaderString = function (headersString) {\r\n\t        return headersString.trim()\r\n\t            .split('\\n')\r\n\t            .map(function (val) { return val.split(':'); })\r\n\t            .map(function (_a) {\r\n\t            var key = _a[0], parts = _a.slice(1);\r\n\t            return ([key.trim(), parts.join(':').trim()]);\r\n\t        })\r\n\t            .reduce(function (headers, _a) {\r\n\t            var key = _a[0], value = _a[1];\r\n\t            return !headers.set(key, value) && headers;\r\n\t        }, new Headers());\r\n\t    };\r\n\t    /**\r\n\t     * Appends a header to existing list of header values for a given header name.\r\n\t     */\r\n\t    Headers.prototype.append = function (name, value) {\r\n\t        var mapName = this._headersMap.get(name);\r\n\t        var list = collection_1.isListLikeIterable(mapName) ? mapName : [];\r\n\t        list.push(value);\r\n\t        this._headersMap.set(name, list);\r\n\t    };\r\n\t    /**\r\n\t     * Deletes all header values for the given name.\r\n\t     */\r\n\t    Headers.prototype.delete = function (name) { this._headersMap.delete(name); };\r\n\t    Headers.prototype.forEach = function (fn) {\r\n\t        this._headersMap.forEach(fn);\r\n\t    };\r\n\t    /**\r\n\t     * Returns first header that matches given name.\r\n\t     */\r\n\t    Headers.prototype.get = function (header) { return collection_1.ListWrapper.first(this._headersMap.get(header)); };\r\n\t    /**\r\n\t     * Check for existence of header by given name.\r\n\t     */\r\n\t    Headers.prototype.has = function (header) { return this._headersMap.has(header); };\r\n\t    /**\r\n\t     * Provides names of set headers\r\n\t     */\r\n\t    Headers.prototype.keys = function () { return collection_1.MapWrapper.keys(this._headersMap); };\r\n\t    /**\r\n\t     * Sets or overrides header value for given name.\r\n\t     */\r\n\t    Headers.prototype.set = function (header, value) {\r\n\t        var list = [];\r\n\t        if (collection_1.isListLikeIterable(value)) {\r\n\t            var pushValue = value.join(',');\r\n\t            list.push(pushValue);\r\n\t        }\r\n\t        else {\r\n\t            list.push(value);\r\n\t        }\r\n\t        this._headersMap.set(header, list);\r\n\t    };\r\n\t    /**\r\n\t     * Returns values of all headers.\r\n\t     */\r\n\t    Headers.prototype.values = function () { return collection_1.MapWrapper.values(this._headersMap); };\r\n\t    /**\r\n\t     * Returns string of all headers.\r\n\t     */\r\n\t    Headers.prototype.toJSON = function () {\r\n\t        var serializableHeaders = {};\r\n\t        this._headersMap.forEach(function (values, name) {\r\n\t            var list = [];\r\n\t            collection_1.iterateListLike(values, function (val) { return list = collection_1.ListWrapper.concat(list, val.split(',')); });\r\n\t            serializableHeaders[name] = list;\r\n\t        });\r\n\t        return serializableHeaders;\r\n\t    };\r\n\t    /**\r\n\t     * Returns list of header values for a given name.\r\n\t     */\r\n\t    Headers.prototype.getAll = function (header) {\r\n\t        var headers = this._headersMap.get(header);\r\n\t        return collection_1.isListLikeIterable(headers) ? headers : [];\r\n\t    };\r\n\t    /**\r\n\t     * This method is not implemented.\r\n\t     */\r\n\t    Headers.prototype.entries = function () { throw new exceptions_1.BaseException('\"entries\" method is not implemented on Headers class'); };\r\n\t    return Headers;\r\n\t})();\r\n\texports.Headers = Headers;\r\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * A DI Token representing the main rendering context. In a browser this is the DOM Document.\r\n\t *\r\n\t * Note: Document might not be available in the Application Context when Application and Rendering\r\n\t * Contexts are not the same (e.g. when running the application into a Web Worker).\r\n\t */\r\n\texports.DOCUMENT = lang_1.CONST_EXPR(new di_1.OpaqueToken('DocumentToken'));\r\n\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\t/**\r\n\t * `LocationStrategy` is responsible for representing and reading route state\r\n\t * from the browser's URL. Angular provides two strategies:\r\n\t * {@link HashLocationStrategy} and {@link PathLocationStrategy} (default).\r\n\t *\r\n\t * This is used under the hood of the {@link Location} service.\r\n\t *\r\n\t * Applications should use the {@link Router} or {@link Location} services to\r\n\t * interact with application route state.\r\n\t *\r\n\t * For instance, {@link HashLocationStrategy} produces URLs like\r\n\t * `http://example.com#/foo`, and {@link PathLocationStrategy} produces\r\n\t * `http://example.com/foo` as an equivalent URL.\r\n\t *\r\n\t * See these two classes for more.\r\n\t */\r\n\tvar LocationStrategy = (function () {\r\n\t    function LocationStrategy() {\r\n\t    }\r\n\t    return LocationStrategy;\r\n\t})();\r\n\texports.LocationStrategy = LocationStrategy;\r\n\t/**\r\n\t * The `APP_BASE_HREF` token represents the base href to be used with the\r\n\t * {@link PathLocationStrategy}.\r\n\t *\r\n\t * If you're using {@link PathLocationStrategy}, you must provide a provider to a string\r\n\t * representing the URL prefix that should be preserved when generating and recognizing\r\n\t * URLs.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   // ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   provide(APP_BASE_HREF, {useValue: '/my/app'})\r\n\t * ]);\r\n\t * ```\r\n\t */\r\n\texports.APP_BASE_HREF = lang_1.CONST_EXPR(new core_1.OpaqueToken('appBaseHref'));\r\n\tfunction normalizeQueryParams(params) {\r\n\t    return (params.length > 0 && params.substring(0, 1) != '?') ? ('?' + params) : params;\r\n\t}\r\n\texports.normalizeQueryParams = normalizeQueryParams;\r\n\tfunction joinWithSlash(start, end) {\r\n\t    if (start.length == 0) {\r\n\t        return end;\r\n\t    }\r\n\t    if (end.length == 0) {\r\n\t        return start;\r\n\t    }\r\n\t    var slashes = 0;\r\n\t    if (start.endsWith('/')) {\r\n\t        slashes++;\r\n\t    }\r\n\t    if (end.startsWith('/')) {\r\n\t        slashes++;\r\n\t    }\r\n\t    if (slashes == 2) {\r\n\t        return start + end.substring(1);\r\n\t    }\r\n\t    if (slashes == 1) {\r\n\t        return start + end;\r\n\t    }\r\n\t    return start + '/' + end;\r\n\t}\r\n\texports.joinWithSlash = joinWithSlash;\r\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * This class should not be used directly by an application developer. Instead, use\r\n\t * {@link Location}.\r\n\t *\r\n\t * `PlatformLocation` encapsulates all calls to DOM apis, which allows the Router to be platform\r\n\t * agnostic.\r\n\t * This means that we can have different implementation of `PlatformLocation` for the different\r\n\t * platforms\r\n\t * that angular supports. For example, the default `PlatformLocation` is {@link\r\n\t * BrowserPlatformLocation},\r\n\t * however when you run your app in a WebWorker you use {@link WebWorkerPlatformLocation}.\r\n\t *\r\n\t * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}\r\n\t * when\r\n\t * they need to interact with the DOM apis like pushState, popState, etc...\r\n\t *\r\n\t * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly\r\n\t * by\r\n\t * the {@link Router} in order to navigate between routes. Since all interactions between {@link\r\n\t * Router} /\r\n\t * {@link Location} / {@link LocationStrategy} and DOM apis flow through the `PlatformLocation`\r\n\t * class\r\n\t * they are all platform independent.\r\n\t */\r\n\tvar PlatformLocation = (function () {\r\n\t    function PlatformLocation() {\r\n\t    }\r\n\t    Object.defineProperty(PlatformLocation.prototype, \"pathname\", {\r\n\t        /* abstract */ get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(PlatformLocation.prototype, \"search\", {\r\n\t        /* abstract */ get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(PlatformLocation.prototype, \"hash\", {\r\n\t        /* abstract */ get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return PlatformLocation;\r\n\t})();\r\n\texports.PlatformLocation = PlatformLocation;\r\n\n\n/***/ },\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar root_1 = __webpack_require__(45);\n\tvar Observable_1 = __webpack_require__(2);\n\tvar PromiseObservable = (function (_super) {\n\t    __extends(PromiseObservable, _super);\n\t    function PromiseObservable(promise, scheduler) {\n\t        if (scheduler === void 0) { scheduler = null; }\n\t        _super.call(this);\n\t        this.promise = promise;\n\t        this.scheduler = scheduler;\n\t    }\n\t    PromiseObservable.create = function (promise, scheduler) {\n\t        if (scheduler === void 0) { scheduler = null; }\n\t        return new PromiseObservable(promise, scheduler);\n\t    };\n\t    PromiseObservable.prototype._subscribe = function (subscriber) {\n\t        var _this = this;\n\t        var promise = this.promise;\n\t        var scheduler = this.scheduler;\n\t        if (scheduler == null) {\n\t            if (this._isScalar) {\n\t                if (!subscriber.isUnsubscribed) {\n\t                    subscriber.next(this.value);\n\t                    subscriber.complete();\n\t                }\n\t            }\n\t            else {\n\t                promise.then(function (value) {\n\t                    _this.value = value;\n\t                    _this._isScalar = true;\n\t                    if (!subscriber.isUnsubscribed) {\n\t                        subscriber.next(value);\n\t                        subscriber.complete();\n\t                    }\n\t                }, function (err) {\n\t                    if (!subscriber.isUnsubscribed) {\n\t                        subscriber.error(err);\n\t                    }\n\t                })\n\t                    .then(null, function (err) {\n\t                    // escape the promise trap, throw unhandled errors\n\t                    root_1.root.setTimeout(function () { throw err; });\n\t                });\n\t            }\n\t        }\n\t        else {\n\t            if (this._isScalar) {\n\t                if (!subscriber.isUnsubscribed) {\n\t                    return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });\n\t                }\n\t            }\n\t            else {\n\t                promise.then(function (value) {\n\t                    _this.value = value;\n\t                    _this._isScalar = true;\n\t                    if (!subscriber.isUnsubscribed) {\n\t                        subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));\n\t                    }\n\t                }, function (err) {\n\t                    if (!subscriber.isUnsubscribed) {\n\t                        subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));\n\t                    }\n\t                })\n\t                    .then(null, function (err) {\n\t                    // escape the promise trap, throw unhandled errors\n\t                    root_1.root.setTimeout(function () { throw err; });\n\t                });\n\t            }\n\t        }\n\t    };\n\t    return PromiseObservable;\n\t}(Observable_1.Observable));\n\texports.PromiseObservable = PromiseObservable;\n\tfunction dispatchNext(_a) {\n\t    var value = _a.value, subscriber = _a.subscriber;\n\t    if (!subscriber.isUnsubscribed) {\n\t        subscriber.next(value);\n\t        subscriber.complete();\n\t    }\n\t}\n\tfunction dispatchError(_a) {\n\t    var err = _a.err, subscriber = _a.subscriber;\n\t    if (!subscriber.isUnsubscribed) {\n\t        subscriber.error(err);\n\t    }\n\t}\n\t//# sourceMappingURL=PromiseObservable.js.map\n\n/***/ },\n/* 111 */,\n/* 112 */,\n/* 113 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar SymbolShim_1 = __webpack_require__(74);\n\t/**\n\t * rxSubscriber symbol is a symbol for retreiving an \"Rx safe\" Observer from an object\n\t * \"Rx safety\" can be defined as an object that has all of the traits of an Rx Subscriber,\n\t * including the ability to add and remove subscriptions to the subscription chain and\n\t * guarantees involving event triggering (can't \"next\" after unsubscription, etc).\n\t */\n\texports.rxSubscriber = SymbolShim_1.SymbolShim.for('rxSubscriber');\n\t//# sourceMappingURL=rxSubscriber.js.map\n\n/***/ },\n/* 114 */,\n/* 115 */,\n/* 116 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tfunction isFunction(x) {\n\t    return typeof x === 'function';\n\t}\n\texports.isFunction = isFunction;\n\t//# sourceMappingURL=isFunction.js.map\n\n/***/ },\n/* 117 */,\n/* 118 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';function __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\t__export(__webpack_require__(595));\r\n\t__export(__webpack_require__(262));\r\n\t__export(__webpack_require__(268));\r\n\t__export(__webpack_require__(590));\r\n\n\n/***/ },\n/* 119 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * The http module provides services to perform http requests. To get started, see the {@link Http}\r\n\t * class.\r\n\t */\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar http_1 = __webpack_require__(319);\r\n\tvar xhr_backend_1 = __webpack_require__(318);\r\n\tvar jsonp_backend_1 = __webpack_require__(317);\r\n\tvar browser_xhr_1 = __webpack_require__(207);\r\n\tvar browser_jsonp_1 = __webpack_require__(316);\r\n\tvar base_request_options_1 = __webpack_require__(208);\r\n\tvar base_response_options_1 = __webpack_require__(137);\r\n\tvar static_request_1 = __webpack_require__(320);\r\n\texports.Request = static_request_1.Request;\r\n\tvar static_response_1 = __webpack_require__(210);\r\n\texports.Response = static_response_1.Response;\r\n\tvar interfaces_1 = __webpack_require__(209);\r\n\texports.Connection = interfaces_1.Connection;\r\n\texports.ConnectionBackend = interfaces_1.ConnectionBackend;\r\n\tvar browser_xhr_2 = __webpack_require__(207);\r\n\texports.BrowserXhr = browser_xhr_2.BrowserXhr;\r\n\tvar base_request_options_2 = __webpack_require__(208);\r\n\texports.BaseRequestOptions = base_request_options_2.BaseRequestOptions;\r\n\texports.RequestOptions = base_request_options_2.RequestOptions;\r\n\tvar base_response_options_2 = __webpack_require__(137);\r\n\texports.BaseResponseOptions = base_response_options_2.BaseResponseOptions;\r\n\texports.ResponseOptions = base_response_options_2.ResponseOptions;\r\n\tvar xhr_backend_2 = __webpack_require__(318);\r\n\texports.XHRBackend = xhr_backend_2.XHRBackend;\r\n\texports.XHRConnection = xhr_backend_2.XHRConnection;\r\n\tvar jsonp_backend_2 = __webpack_require__(317);\r\n\texports.JSONPBackend = jsonp_backend_2.JSONPBackend;\r\n\texports.JSONPConnection = jsonp_backend_2.JSONPConnection;\r\n\tvar http_2 = __webpack_require__(319);\r\n\texports.Http = http_2.Http;\r\n\texports.Jsonp = http_2.Jsonp;\r\n\tvar headers_1 = __webpack_require__(102);\r\n\texports.Headers = headers_1.Headers;\r\n\tvar enums_1 = __webpack_require__(64);\r\n\texports.ResponseType = enums_1.ResponseType;\r\n\texports.ReadyState = enums_1.ReadyState;\r\n\texports.RequestMethod = enums_1.RequestMethod;\r\n\tvar url_search_params_1 = __webpack_require__(321);\r\n\texports.URLSearchParams = url_search_params_1.URLSearchParams;\r\n\t/**\r\n\t * Provides a basic set of injectables to use the {@link Http} service in any application.\r\n\t *\r\n\t * The `HTTP_PROVIDERS` should be included either in a component's injector,\r\n\t * or in the root injector when bootstrapping an application.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/snj7Nv?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {NgFor} from 'angular2/common';\r\n\t * import {HTTP_PROVIDERS, Http} from 'angular2/http';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   providers: [HTTP_PROVIDERS],\r\n\t *   template: `\r\n\t *     <div>\r\n\t *       <h1>People</h1>\r\n\t *       <ul>\r\n\t *         <li *ngFor=\"#person of people\">\r\n\t *           {{person.name}}\r\n\t *         </li>\r\n\t *       </ul>\r\n\t *     </div>\r\n\t *   `,\r\n\t *   directives: [NgFor]\r\n\t * })\r\n\t * export class App {\r\n\t *   people: Object[];\r\n\t *   constructor(http:Http) {\r\n\t *     http.get('people.json').subscribe(res => {\r\n\t *       this.people = res.json();\r\n\t *     });\r\n\t *   }\r\n\t *   active:boolean = false;\r\n\t *   toggleActiveState() {\r\n\t *     this.active = !this.active;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(App)\r\n\t *   .catch(err => console.error(err));\r\n\t * ```\r\n\t *\r\n\t * The primary public API included in `HTTP_PROVIDERS` is the {@link Http} class.\r\n\t * However, other providers required by `Http` are included,\r\n\t * which may be beneficial to override in certain cases.\r\n\t *\r\n\t * The providers included in `HTTP_PROVIDERS` include:\r\n\t *  * {@link Http}\r\n\t *  * {@link XHRBackend}\r\n\t *  * `BrowserXHR` - Private factory to create `XMLHttpRequest` instances\r\n\t *  * {@link RequestOptions} - Bound to {@link BaseRequestOptions} class\r\n\t *  * {@link ResponseOptions} - Bound to {@link BaseResponseOptions} class\r\n\t *\r\n\t * There may be cases where it makes sense to extend the base request options,\r\n\t * such as to add a search string to be appended to all URLs.\r\n\t * To accomplish this, a new provider for {@link RequestOptions} should\r\n\t * be added in the same injector as `HTTP_PROVIDERS`.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/aCMEXi?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {provide} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {HTTP_PROVIDERS, BaseRequestOptions, RequestOptions} from 'angular2/http';\r\n\t *\r\n\t * class MyOptions extends BaseRequestOptions {\r\n\t *   search: string = 'coreTeam=true';\r\n\t * }\r\n\t *\r\n\t * bootstrap(App, [HTTP_PROVIDERS, provide(RequestOptions, {useClass: MyOptions})])\r\n\t *   .catch(err => console.error(err));\r\n\t * ```\r\n\t *\r\n\t * Likewise, to use a mock backend for unit tests, the {@link XHRBackend}\r\n\t * provider should be bound to {@link MockBackend}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/7LWALD?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {provide} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {HTTP_PROVIDERS, Http, Response, XHRBackend} from 'angular2/http';\r\n\t * import {MockBackend} from 'angular2/http/testing';\r\n\t *\r\n\t * var people = [{name: 'Jeff'}, {name: 'Tobias'}];\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *   HTTP_PROVIDERS,\r\n\t *   MockBackend,\r\n\t *   provide(XHRBackend, {useExisting: MockBackend})\r\n\t * ]);\r\n\t * var http = injector.get(Http);\r\n\t * var backend = injector.get(MockBackend);\r\n\t *\r\n\t * // Listen for any new requests\r\n\t * backend.connections.observer({\r\n\t *   next: connection => {\r\n\t *     var response = new Response({body: people});\r\n\t *     setTimeout(() => {\r\n\t *       // Send a response to the request\r\n\t *       connection.mockRespond(response);\r\n\t *     });\r\n\t *   }\r\n\t * });\r\n\t *\r\n\t * http.get('people.json').observer({\r\n\t *   next: res => {\r\n\t *     // Response came from mock backend\r\n\t *     console.log('first person', res.json()[0].name);\r\n\t *   }\r\n\t * });\r\n\t * ```\r\n\t */\r\n\texports.HTTP_PROVIDERS = [\r\n\t    // TODO(pascal): use factory type annotations once supported in DI\r\n\t    // issue: https://github.com/angular/angular/issues/3183\r\n\t    core_1.provide(http_1.Http, {\r\n\t        useFactory: function (xhrBackend, requestOptions) {\r\n\t            return new http_1.Http(xhrBackend, requestOptions);\r\n\t        },\r\n\t        deps: [xhr_backend_1.XHRBackend, base_request_options_1.RequestOptions]\r\n\t    }),\r\n\t    browser_xhr_1.BrowserXhr,\r\n\t    core_1.provide(base_request_options_1.RequestOptions, { useClass: base_request_options_1.BaseRequestOptions }),\r\n\t    core_1.provide(base_response_options_1.ResponseOptions, { useClass: base_response_options_1.BaseResponseOptions }),\r\n\t    xhr_backend_1.XHRBackend\r\n\t];\r\n\t/**\r\n\t * See {@link HTTP_PROVIDERS} instead.\r\n\t *\r\n\t * @deprecated\r\n\t */\r\n\texports.HTTP_BINDINGS = exports.HTTP_PROVIDERS;\r\n\t/**\r\n\t * Provides a basic set of providers to use the {@link Jsonp} service in any application.\r\n\t *\r\n\t * The `JSONP_PROVIDERS` should be included either in a component's injector,\r\n\t * or in the root injector when bootstrapping an application.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/vmeN4F?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {NgFor} from 'angular2/common';\r\n\t * import {JSONP_PROVIDERS, Jsonp} from 'angular2/http';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   providers: [JSONP_PROVIDERS],\r\n\t *   template: `\r\n\t *     <div>\r\n\t *       <h1>People</h1>\r\n\t *       <ul>\r\n\t *         <li *ngFor=\"#person of people\">\r\n\t *           {{person.name}}\r\n\t *         </li>\r\n\t *       </ul>\r\n\t *     </div>\r\n\t *   `,\r\n\t *   directives: [NgFor]\r\n\t * })\r\n\t * export class App {\r\n\t *   people: Array<Object>;\r\n\t *   constructor(jsonp:Jsonp) {\r\n\t *     jsonp.request('people.json').subscribe(res => {\r\n\t *       this.people = res.json();\r\n\t *     })\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * The primary public API included in `JSONP_PROVIDERS` is the {@link Jsonp} class.\r\n\t * However, other providers required by `Jsonp` are included,\r\n\t * which may be beneficial to override in certain cases.\r\n\t *\r\n\t * The providers included in `JSONP_PROVIDERS` include:\r\n\t *  * {@link Jsonp}\r\n\t *  * {@link JSONPBackend}\r\n\t *  * `BrowserJsonp` - Private factory\r\n\t *  * {@link RequestOptions} - Bound to {@link BaseRequestOptions} class\r\n\t *  * {@link ResponseOptions} - Bound to {@link BaseResponseOptions} class\r\n\t *\r\n\t * There may be cases where it makes sense to extend the base request options,\r\n\t * such as to add a search string to be appended to all URLs.\r\n\t * To accomplish this, a new provider for {@link RequestOptions} should\r\n\t * be added in the same injector as `JSONP_PROVIDERS`.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/TFug7x?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {provide} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {JSONP_PROVIDERS, BaseRequestOptions, RequestOptions} from 'angular2/http';\r\n\t *\r\n\t * class MyOptions extends BaseRequestOptions {\r\n\t *   search: string = 'coreTeam=true';\r\n\t * }\r\n\t *\r\n\t * bootstrap(App, [JSONP_PROVIDERS, provide(RequestOptions, {useClass: MyOptions})])\r\n\t *   .catch(err => console.error(err));\r\n\t * ```\r\n\t *\r\n\t * Likewise, to use a mock backend for unit tests, the {@link JSONPBackend}\r\n\t * provider should be bound to {@link MockBackend}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/HDqZWL?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {provide, Injector} from 'angular2/core';\r\n\t * import {JSONP_PROVIDERS, Jsonp, Response, JSONPBackend} from 'angular2/http';\r\n\t * import {MockBackend} from 'angular2/http/testing';\r\n\t *\r\n\t * var people = [{name: 'Jeff'}, {name: 'Tobias'}];\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *   JSONP_PROVIDERS,\r\n\t *   MockBackend,\r\n\t *   provide(JSONPBackend, {useExisting: MockBackend})\r\n\t * ]);\r\n\t * var jsonp = injector.get(Jsonp);\r\n\t * var backend = injector.get(MockBackend);\r\n\t *\r\n\t * // Listen for any new requests\r\n\t * backend.connections.observer({\r\n\t *   next: connection => {\r\n\t *     var response = new Response({body: people});\r\n\t *     setTimeout(() => {\r\n\t *       // Send a response to the request\r\n\t *       connection.mockRespond(response);\r\n\t *     });\r\n\t *   }\r\n\t * });\r\n\t\r\n\t * jsonp.get('people.json').observer({\r\n\t *   next: res => {\r\n\t *     // Response came from mock backend\r\n\t *     console.log('first person', res.json()[0].name);\r\n\t *   }\r\n\t * });\r\n\t * ```\r\n\t */\r\n\texports.JSONP_PROVIDERS = [\r\n\t    // TODO(pascal): use factory type annotations once supported in DI\r\n\t    // issue: https://github.com/angular/angular/issues/3183\r\n\t    core_1.provide(http_1.Jsonp, {\r\n\t        useFactory: function (jsonpBackend, requestOptions) {\r\n\t            return new http_1.Jsonp(jsonpBackend, requestOptions);\r\n\t        },\r\n\t        deps: [jsonp_backend_1.JSONPBackend, base_request_options_1.RequestOptions]\r\n\t    }),\r\n\t    browser_jsonp_1.BrowserJsonp,\r\n\t    core_1.provide(base_request_options_1.RequestOptions, { useClass: base_request_options_1.BaseRequestOptions }),\r\n\t    core_1.provide(base_response_options_1.ResponseOptions, { useClass: base_response_options_1.BaseResponseOptions }),\r\n\t    core_1.provide(jsonp_backend_1.JSONPBackend, { useClass: jsonp_backend_1.JSONPBackend_ })\r\n\t];\r\n\t/**\r\n\t * See {@link JSONP_PROVIDERS} instead.\r\n\t *\r\n\t * @deprecated\r\n\t */\r\n\texports.JSON_BINDINGS = exports.JSONP_PROVIDERS;\r\n\n\n/***/ },\n/* 120 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar CHECKBOX_VALUE_ACCESSOR = lang_1.CONST_EXPR(new core_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, { useExisting: core_1.forwardRef(function () { return CheckboxControlValueAccessor; }), multi: true }));\r\n\t/**\r\n\t * The accessor for writing a value and listening to changes on a checkbox input element.\r\n\t *\r\n\t *  ### Example\r\n\t *  ```\r\n\t *  <input type=\"checkbox\" ngControl=\"rememberLogin\">\r\n\t *  ```\r\n\t */\r\n\tvar CheckboxControlValueAccessor = (function () {\r\n\t    function CheckboxControlValueAccessor(_renderer, _elementRef) {\r\n\t        this._renderer = _renderer;\r\n\t        this._elementRef = _elementRef;\r\n\t        this.onChange = function (_) { };\r\n\t        this.onTouched = function () { };\r\n\t    }\r\n\t    CheckboxControlValueAccessor.prototype.writeValue = function (value) {\r\n\t        this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', value);\r\n\t    };\r\n\t    CheckboxControlValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\r\n\t    CheckboxControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\r\n\t    CheckboxControlValueAccessor = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: 'input[type=checkbox][ngControl],input[type=checkbox][ngFormControl],input[type=checkbox][ngModel]',\r\n\t            host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\r\n\t            providers: [CHECKBOX_VALUE_ACCESSOR]\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [core_1.Renderer, core_1.ElementRef])\r\n\t    ], CheckboxControlValueAccessor);\r\n\t    return CheckboxControlValueAccessor;\r\n\t})();\r\n\texports.CheckboxControlValueAccessor = CheckboxControlValueAccessor;\r\n\n\n/***/ },\n/* 121 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar DEFAULT_VALUE_ACCESSOR = lang_1.CONST_EXPR(new core_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, { useExisting: core_1.forwardRef(function () { return DefaultValueAccessor; }), multi: true }));\r\n\t/**\r\n\t * The default accessor for writing a value and listening to changes that is used by the\r\n\t * {@link NgModel}, {@link NgFormControl}, and {@link NgControlName} directives.\r\n\t *\r\n\t *  ### Example\r\n\t *  ```\r\n\t *  <input type=\"text\" ngControl=\"searchQuery\">\r\n\t *  ```\r\n\t */\r\n\tvar DefaultValueAccessor = (function () {\r\n\t    function DefaultValueAccessor(_renderer, _elementRef) {\r\n\t        this._renderer = _renderer;\r\n\t        this._elementRef = _elementRef;\r\n\t        this.onChange = function (_) { };\r\n\t        this.onTouched = function () { };\r\n\t    }\r\n\t    DefaultValueAccessor.prototype.writeValue = function (value) {\r\n\t        var normalizedValue = lang_1.isBlank(value) ? '' : value;\r\n\t        this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', normalizedValue);\r\n\t    };\r\n\t    DefaultValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\r\n\t    DefaultValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\r\n\t    DefaultValueAccessor = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: 'input:not([type=checkbox])[ngControl],textarea[ngControl],input:not([type=checkbox])[ngFormControl],textarea[ngFormControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\r\n\t            // TODO: vsavkin replace the above selector with the one below it once\r\n\t            // https://github.com/angular/angular/issues/3011 is implemented\r\n\t            // selector: '[ngControl],[ngModel],[ngFormControl]',\r\n\t            host: { '(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\r\n\t            bindings: [DEFAULT_VALUE_ACCESSOR]\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [core_1.Renderer, core_1.ElementRef])\r\n\t    ], DefaultValueAccessor);\r\n\t    return DefaultValueAccessor;\r\n\t})();\r\n\texports.DefaultValueAccessor = DefaultValueAccessor;\r\n\n\n/***/ },\n/* 122 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar RADIO_VALUE_ACCESSOR = lang_1.CONST_EXPR(new core_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, { useExisting: core_1.forwardRef(function () { return RadioControlValueAccessor; }), multi: true }));\r\n\t/**\r\n\t * Internal class used by Angular to uncheck radio buttons with the matching name.\r\n\t */\r\n\tvar RadioControlRegistry = (function () {\r\n\t    function RadioControlRegistry() {\r\n\t        this._accessors = [];\r\n\t    }\r\n\t    RadioControlRegistry.prototype.add = function (control, accessor) {\r\n\t        this._accessors.push([control, accessor]);\r\n\t    };\r\n\t    RadioControlRegistry.prototype.remove = function (accessor) {\r\n\t        var indexToRemove = -1;\r\n\t        for (var i = 0; i < this._accessors.length; ++i) {\r\n\t            if (this._accessors[i][1] === accessor) {\r\n\t                indexToRemove = i;\r\n\t            }\r\n\t        }\r\n\t        collection_1.ListWrapper.removeAt(this._accessors, indexToRemove);\r\n\t    };\r\n\t    RadioControlRegistry.prototype.select = function (accessor) {\r\n\t        this._accessors.forEach(function (c) {\r\n\t            if (c[0].control.root === accessor._control.control.root && c[1] !== accessor) {\r\n\t                c[1].fireUncheck();\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    RadioControlRegistry = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], RadioControlRegistry);\r\n\t    return RadioControlRegistry;\r\n\t})();\r\n\texports.RadioControlRegistry = RadioControlRegistry;\r\n\t/**\r\n\t * The value provided by the forms API for radio buttons.\r\n\t */\r\n\tvar RadioButtonState = (function () {\r\n\t    function RadioButtonState(checked, value) {\r\n\t        this.checked = checked;\r\n\t        this.value = value;\r\n\t    }\r\n\t    return RadioButtonState;\r\n\t})();\r\n\texports.RadioButtonState = RadioButtonState;\r\n\t/**\r\n\t * The accessor for writing a radio control value and listening to changes that is used by the\r\n\t * {@link NgModel}, {@link NgFormControl}, and {@link NgControlName} directives.\r\n\t *\r\n\t *  ### Example\r\n\t *  ```\r\n\t *  @Component({\r\n\t *    template: `\r\n\t *      <input type=\"radio\" name=\"food\" [(ngModel)]=\"foodChicken\">\r\n\t *      <input type=\"radio\" name=\"food\" [(ngModel)]=\"foodFish\">\r\n\t *    `\r\n\t *  })\r\n\t *  class FoodCmp {\r\n\t *    foodChicken = new RadioButtonState(true, \"chicken\");\r\n\t *    foodFish = new RadioButtonState(false, \"fish\");\r\n\t *  }\r\n\t *  ```\r\n\t */\r\n\tvar RadioControlValueAccessor = (function () {\r\n\t    function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {\r\n\t        this._renderer = _renderer;\r\n\t        this._elementRef = _elementRef;\r\n\t        this._registry = _registry;\r\n\t        this._injector = _injector;\r\n\t        this.onChange = function () { };\r\n\t        this.onTouched = function () { };\r\n\t    }\r\n\t    RadioControlValueAccessor.prototype.ngOnInit = function () {\r\n\t        this._control = this._injector.get(ng_control_1.NgControl);\r\n\t        this._registry.add(this._control, this);\r\n\t    };\r\n\t    RadioControlValueAccessor.prototype.ngOnDestroy = function () { this._registry.remove(this); };\r\n\t    RadioControlValueAccessor.prototype.writeValue = function (value) {\r\n\t        this._state = value;\r\n\t        if (lang_1.isPresent(value) && value.checked) {\r\n\t            this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', true);\r\n\t        }\r\n\t    };\r\n\t    RadioControlValueAccessor.prototype.registerOnChange = function (fn) {\r\n\t        var _this = this;\r\n\t        this._fn = fn;\r\n\t        this.onChange = function () {\r\n\t            fn(new RadioButtonState(true, _this._state.value));\r\n\t            _this._registry.select(_this);\r\n\t        };\r\n\t    };\r\n\t    RadioControlValueAccessor.prototype.fireUncheck = function () { this._fn(new RadioButtonState(false, this._state.value)); };\r\n\t    RadioControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\r\n\t    __decorate([\r\n\t        core_1.Input(), \r\n\t        __metadata('design:type', String)\r\n\t    ], RadioControlValueAccessor.prototype, \"name\", void 0);\r\n\t    RadioControlValueAccessor = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: 'input[type=radio][ngControl],input[type=radio][ngFormControl],input[type=radio][ngModel]',\r\n\t            host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },\r\n\t            providers: [RADIO_VALUE_ACCESSOR]\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [core_1.Renderer, core_1.ElementRef, RadioControlRegistry, core_1.Injector])\r\n\t    ], RadioControlValueAccessor);\r\n\t    return RadioControlValueAccessor;\r\n\t})();\r\n\texports.RadioControlValueAccessor = RadioControlValueAccessor;\r\n\n\n/***/ },\n/* 123 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar SELECT_VALUE_ACCESSOR = lang_1.CONST_EXPR(new core_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, { useExisting: core_1.forwardRef(function () { return SelectControlValueAccessor; }), multi: true }));\r\n\t/**\r\n\t * Marks `<option>` as dynamic, so Angular can be notified when options change.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * <select ngControl=\"city\">\r\n\t *   <option *ngFor=\"#c of cities\" [value]=\"c\"></option>\r\n\t * </select>\r\n\t * ```\r\n\t */\r\n\tvar NgSelectOption = (function () {\r\n\t    function NgSelectOption() {\r\n\t    }\r\n\t    NgSelectOption = __decorate([\r\n\t        core_1.Directive({ selector: 'option' }), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], NgSelectOption);\r\n\t    return NgSelectOption;\r\n\t})();\r\n\texports.NgSelectOption = NgSelectOption;\r\n\t/**\r\n\t * The accessor for writing a value and listening to changes on a select element.\r\n\t */\r\n\tvar SelectControlValueAccessor = (function () {\r\n\t    function SelectControlValueAccessor(_renderer, _elementRef, query) {\r\n\t        this._renderer = _renderer;\r\n\t        this._elementRef = _elementRef;\r\n\t        this.onChange = function (_) { };\r\n\t        this.onTouched = function () { };\r\n\t        this._updateValueWhenListOfOptionsChanges(query);\r\n\t    }\r\n\t    SelectControlValueAccessor.prototype.writeValue = function (value) {\r\n\t        this.value = value;\r\n\t        this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', value);\r\n\t    };\r\n\t    SelectControlValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\r\n\t    SelectControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\r\n\t    SelectControlValueAccessor.prototype._updateValueWhenListOfOptionsChanges = function (query) {\r\n\t        var _this = this;\r\n\t        async_1.ObservableWrapper.subscribe(query.changes, function (_) { return _this.writeValue(_this.value); });\r\n\t    };\r\n\t    SelectControlValueAccessor = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: 'select[ngControl],select[ngFormControl],select[ngModel]',\r\n\t            host: { '(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\r\n\t            bindings: [SELECT_VALUE_ACCESSOR]\r\n\t        }),\r\n\t        __param(2, core_1.Query(NgSelectOption, { descendants: true })), \r\n\t        __metadata('design:paramtypes', [core_1.Renderer, core_1.ElementRef, core_1.QueryList])\r\n\t    ], SelectControlValueAccessor);\r\n\t    return SelectControlValueAccessor;\r\n\t})();\r\n\texports.SelectControlValueAccessor = SelectControlValueAccessor;\r\n\n\n/***/ },\n/* 124 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar promise_1 = __webpack_require__(101);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\t/**\r\n\t * Indicates that a Control is valid, i.e. that no errors exist in the input value.\r\n\t */\r\n\texports.VALID = \"VALID\";\r\n\t/**\r\n\t * Indicates that a Control is invalid, i.e. that an error exists in the input value.\r\n\t */\r\n\texports.INVALID = \"INVALID\";\r\n\t/**\r\n\t * Indicates that a Control is pending, i.e. that async validation is occurring and\r\n\t * errors are not yet available for the input value.\r\n\t */\r\n\texports.PENDING = \"PENDING\";\r\n\tfunction isControl(control) {\r\n\t    return control instanceof AbstractControl;\r\n\t}\r\n\texports.isControl = isControl;\r\n\tfunction _find(control, path) {\r\n\t    if (lang_1.isBlank(path))\r\n\t        return null;\r\n\t    if (!(path instanceof Array)) {\r\n\t        path = path.split(\"/\");\r\n\t    }\r\n\t    if (path instanceof Array && collection_1.ListWrapper.isEmpty(path))\r\n\t        return null;\r\n\t    return path\r\n\t        .reduce(function (v, name) {\r\n\t        if (v instanceof ControlGroup) {\r\n\t            return lang_1.isPresent(v.controls[name]) ? v.controls[name] : null;\r\n\t        }\r\n\t        else if (v instanceof ControlArray) {\r\n\t            var index = name;\r\n\t            return lang_1.isPresent(v.at(index)) ? v.at(index) : null;\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t    }, control);\r\n\t}\r\n\tfunction toObservable(r) {\r\n\t    return promise_1.PromiseWrapper.isPromise(r) ? async_1.ObservableWrapper.fromPromise(r) : r;\r\n\t}\r\n\t/**\r\n\t *\r\n\t */\r\n\tvar AbstractControl = (function () {\r\n\t    function AbstractControl(validator, asyncValidator) {\r\n\t        this.validator = validator;\r\n\t        this.asyncValidator = asyncValidator;\r\n\t        this._pristine = true;\r\n\t        this._touched = false;\r\n\t    }\r\n\t    Object.defineProperty(AbstractControl.prototype, \"value\", {\r\n\t        get: function () { return this._value; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"status\", {\r\n\t        get: function () { return this._status; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"valid\", {\r\n\t        get: function () { return this._status === exports.VALID; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"errors\", {\r\n\t        /**\r\n\t         * Returns the errors of this control.\r\n\t         */\r\n\t        get: function () { return this._errors; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"pristine\", {\r\n\t        get: function () { return this._pristine; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"dirty\", {\r\n\t        get: function () { return !this.pristine; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"touched\", {\r\n\t        get: function () { return this._touched; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"untouched\", {\r\n\t        get: function () { return !this._touched; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"valueChanges\", {\r\n\t        get: function () { return this._valueChanges; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"statusChanges\", {\r\n\t        get: function () { return this._statusChanges; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControl.prototype, \"pending\", {\r\n\t        get: function () { return this._status == exports.PENDING; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AbstractControl.prototype.markAsTouched = function () { this._touched = true; };\r\n\t    AbstractControl.prototype.markAsDirty = function (_a) {\r\n\t        var onlySelf = (_a === void 0 ? {} : _a).onlySelf;\r\n\t        onlySelf = lang_1.normalizeBool(onlySelf);\r\n\t        this._pristine = false;\r\n\t        if (lang_1.isPresent(this._parent) && !onlySelf) {\r\n\t            this._parent.markAsDirty({ onlySelf: onlySelf });\r\n\t        }\r\n\t    };\r\n\t    AbstractControl.prototype.markAsPending = function (_a) {\r\n\t        var onlySelf = (_a === void 0 ? {} : _a).onlySelf;\r\n\t        onlySelf = lang_1.normalizeBool(onlySelf);\r\n\t        this._status = exports.PENDING;\r\n\t        if (lang_1.isPresent(this._parent) && !onlySelf) {\r\n\t            this._parent.markAsPending({ onlySelf: onlySelf });\r\n\t        }\r\n\t    };\r\n\t    AbstractControl.prototype.setParent = function (parent) { this._parent = parent; };\r\n\t    AbstractControl.prototype.updateValueAndValidity = function (_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, onlySelf = _b.onlySelf, emitEvent = _b.emitEvent;\r\n\t        onlySelf = lang_1.normalizeBool(onlySelf);\r\n\t        emitEvent = lang_1.isPresent(emitEvent) ? emitEvent : true;\r\n\t        this._updateValue();\r\n\t        this._errors = this._runValidator();\r\n\t        this._status = this._calculateStatus();\r\n\t        if (this._status == exports.VALID || this._status == exports.PENDING) {\r\n\t            this._runAsyncValidator(emitEvent);\r\n\t        }\r\n\t        if (emitEvent) {\r\n\t            async_1.ObservableWrapper.callEmit(this._valueChanges, this._value);\r\n\t            async_1.ObservableWrapper.callEmit(this._statusChanges, this._status);\r\n\t        }\r\n\t        if (lang_1.isPresent(this._parent) && !onlySelf) {\r\n\t            this._parent.updateValueAndValidity({ onlySelf: onlySelf, emitEvent: emitEvent });\r\n\t        }\r\n\t    };\r\n\t    AbstractControl.prototype._runValidator = function () {\r\n\t        return lang_1.isPresent(this.validator) ? this.validator(this) : null;\r\n\t    };\r\n\t    AbstractControl.prototype._runAsyncValidator = function (emitEvent) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(this.asyncValidator)) {\r\n\t            this._status = exports.PENDING;\r\n\t            this._cancelExistingSubscription();\r\n\t            var obs = toObservable(this.asyncValidator(this));\r\n\t            this._asyncValidationSubscription = async_1.ObservableWrapper.subscribe(obs, function (res) { return _this.setErrors(res, { emitEvent: emitEvent }); });\r\n\t        }\r\n\t    };\r\n\t    AbstractControl.prototype._cancelExistingSubscription = function () {\r\n\t        if (lang_1.isPresent(this._asyncValidationSubscription)) {\r\n\t            async_1.ObservableWrapper.dispose(this._asyncValidationSubscription);\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Sets errors on a control.\r\n\t     *\r\n\t     * This is used when validations are run not automatically, but manually by the user.\r\n\t     *\r\n\t     * Calling `setErrors` will also update the validity of the parent control.\r\n\t     *\r\n\t     * ## Usage\r\n\t     *\r\n\t     * ```\r\n\t     * var login = new Control(\"someLogin\");\r\n\t     * login.setErrors({\r\n\t     *   \"notUnique\": true\r\n\t     * });\r\n\t     *\r\n\t     * expect(login.valid).toEqual(false);\r\n\t     * expect(login.errors).toEqual({\"notUnique\": true});\r\n\t     *\r\n\t     * login.updateValue(\"someOtherLogin\");\r\n\t     *\r\n\t     * expect(login.valid).toEqual(true);\r\n\t     * ```\r\n\t     */\r\n\t    AbstractControl.prototype.setErrors = function (errors, _a) {\r\n\t        var emitEvent = (_a === void 0 ? {} : _a).emitEvent;\r\n\t        emitEvent = lang_1.isPresent(emitEvent) ? emitEvent : true;\r\n\t        this._errors = errors;\r\n\t        this._status = this._calculateStatus();\r\n\t        if (emitEvent) {\r\n\t            async_1.ObservableWrapper.callEmit(this._statusChanges, this._status);\r\n\t        }\r\n\t        if (lang_1.isPresent(this._parent)) {\r\n\t            this._parent._updateControlsErrors();\r\n\t        }\r\n\t    };\r\n\t    AbstractControl.prototype.find = function (path) { return _find(this, path); };\r\n\t    AbstractControl.prototype.getError = function (errorCode, path) {\r\n\t        if (path === void 0) { path = null; }\r\n\t        var control = lang_1.isPresent(path) && !collection_1.ListWrapper.isEmpty(path) ? this.find(path) : this;\r\n\t        if (lang_1.isPresent(control) && lang_1.isPresent(control._errors)) {\r\n\t            return collection_1.StringMapWrapper.get(control._errors, errorCode);\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    AbstractControl.prototype.hasError = function (errorCode, path) {\r\n\t        if (path === void 0) { path = null; }\r\n\t        return lang_1.isPresent(this.getError(errorCode, path));\r\n\t    };\r\n\t    Object.defineProperty(AbstractControl.prototype, \"root\", {\r\n\t        get: function () {\r\n\t            var x = this;\r\n\t            while (lang_1.isPresent(x._parent)) {\r\n\t                x = x._parent;\r\n\t            }\r\n\t            return x;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /** @internal */\r\n\t    AbstractControl.prototype._updateControlsErrors = function () {\r\n\t        this._status = this._calculateStatus();\r\n\t        if (lang_1.isPresent(this._parent)) {\r\n\t            this._parent._updateControlsErrors();\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    AbstractControl.prototype._initObservables = function () {\r\n\t        this._valueChanges = new async_1.EventEmitter();\r\n\t        this._statusChanges = new async_1.EventEmitter();\r\n\t    };\r\n\t    AbstractControl.prototype._calculateStatus = function () {\r\n\t        if (lang_1.isPresent(this._errors))\r\n\t            return exports.INVALID;\r\n\t        if (this._anyControlsHaveStatus(exports.PENDING))\r\n\t            return exports.PENDING;\r\n\t        if (this._anyControlsHaveStatus(exports.INVALID))\r\n\t            return exports.INVALID;\r\n\t        return exports.VALID;\r\n\t    };\r\n\t    return AbstractControl;\r\n\t})();\r\n\texports.AbstractControl = AbstractControl;\r\n\t/**\r\n\t * Defines a part of a form that cannot be divided into other controls. `Control`s have values and\r\n\t * validation state, which is determined by an optional validation function.\r\n\t *\r\n\t * `Control` is one of the three fundamental building blocks used to define forms in Angular, along\r\n\t * with {@link ControlGroup} and {@link ControlArray}.\r\n\t *\r\n\t * ## Usage\r\n\t *\r\n\t * By default, a `Control` is created for every `<input>` or other form component.\r\n\t * With {@link NgFormControl} or {@link NgFormModel} an existing {@link Control} can be\r\n\t * bound to a DOM element instead. This `Control` can be configured with a custom\r\n\t * validation function.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))\r\n\t */\r\n\tvar Control = (function (_super) {\r\n\t    __extends(Control, _super);\r\n\t    function Control(value, validator, asyncValidator) {\r\n\t        if (value === void 0) { value = null; }\r\n\t        if (validator === void 0) { validator = null; }\r\n\t        if (asyncValidator === void 0) { asyncValidator = null; }\r\n\t        _super.call(this, validator, asyncValidator);\r\n\t        this._value = value;\r\n\t        this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n\t        this._initObservables();\r\n\t    }\r\n\t    /**\r\n\t     * Set the value of the control to `value`.\r\n\t     *\r\n\t     * If `onlySelf` is `true`, this change will only affect the validation of this `Control`\r\n\t     * and not its parent component. If `emitEvent` is `true`, this change will cause a\r\n\t     * `valueChanges` event on the `Control` to be emitted. Both of these options default to\r\n\t     * `false`.\r\n\t     *\r\n\t     * If `emitModelToViewChange` is `true`, the view will be notified about the new value\r\n\t     * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not\r\n\t     * specified.\r\n\t     */\r\n\t    Control.prototype.updateValue = function (value, _a) {\r\n\t        var _b = _a === void 0 ? {} : _a, onlySelf = _b.onlySelf, emitEvent = _b.emitEvent, emitModelToViewChange = _b.emitModelToViewChange;\r\n\t        emitModelToViewChange = lang_1.isPresent(emitModelToViewChange) ? emitModelToViewChange : true;\r\n\t        this._value = value;\r\n\t        if (lang_1.isPresent(this._onChange) && emitModelToViewChange)\r\n\t            this._onChange(this._value);\r\n\t        this.updateValueAndValidity({ onlySelf: onlySelf, emitEvent: emitEvent });\r\n\t    };\r\n\t    /**\r\n\t     * @internal\r\n\t     */\r\n\t    Control.prototype._updateValue = function () { };\r\n\t    /**\r\n\t     * @internal\r\n\t     */\r\n\t    Control.prototype._anyControlsHaveStatus = function (status) { return false; };\r\n\t    /**\r\n\t     * Register a listener for change events.\r\n\t     */\r\n\t    Control.prototype.registerOnChange = function (fn) { this._onChange = fn; };\r\n\t    return Control;\r\n\t})(AbstractControl);\r\n\texports.Control = Control;\r\n\t/**\r\n\t * Defines a part of a form, of fixed length, that can contain other controls.\r\n\t *\r\n\t * A `ControlGroup` aggregates the values and errors of each {@link Control} in the group. Thus, if\r\n\t * one of the controls in a group is invalid, the entire group is invalid. Similarly, if a control\r\n\t * changes its value, the entire group changes as well.\r\n\t *\r\n\t * `ControlGroup` is one of the three fundamental building blocks used to define forms in Angular,\r\n\t * along with {@link Control} and {@link ControlArray}. {@link ControlArray} can also contain other\r\n\t * controls, but is of variable length.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))\r\n\t */\r\n\tvar ControlGroup = (function (_super) {\r\n\t    __extends(ControlGroup, _super);\r\n\t    function ControlGroup(controls, optionals, validator, asyncValidator) {\r\n\t        if (optionals === void 0) { optionals = null; }\r\n\t        if (validator === void 0) { validator = null; }\r\n\t        if (asyncValidator === void 0) { asyncValidator = null; }\r\n\t        _super.call(this, validator, asyncValidator);\r\n\t        this.controls = controls;\r\n\t        this._optionals = lang_1.isPresent(optionals) ? optionals : {};\r\n\t        this._initObservables();\r\n\t        this._setParentForControls();\r\n\t        this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n\t    }\r\n\t    /**\r\n\t     * Add a control to this group.\r\n\t     */\r\n\t    ControlGroup.prototype.addControl = function (name, control) {\r\n\t        this.controls[name] = control;\r\n\t        control.setParent(this);\r\n\t    };\r\n\t    /**\r\n\t     * Remove a control from this group.\r\n\t     */\r\n\t    ControlGroup.prototype.removeControl = function (name) { collection_1.StringMapWrapper.delete(this.controls, name); };\r\n\t    /**\r\n\t     * Mark the named control as non-optional.\r\n\t     */\r\n\t    ControlGroup.prototype.include = function (controlName) {\r\n\t        collection_1.StringMapWrapper.set(this._optionals, controlName, true);\r\n\t        this.updateValueAndValidity();\r\n\t    };\r\n\t    /**\r\n\t     * Mark the named control as optional.\r\n\t     */\r\n\t    ControlGroup.prototype.exclude = function (controlName) {\r\n\t        collection_1.StringMapWrapper.set(this._optionals, controlName, false);\r\n\t        this.updateValueAndValidity();\r\n\t    };\r\n\t    /**\r\n\t     * Check whether there is a control with the given name in the group.\r\n\t     */\r\n\t    ControlGroup.prototype.contains = function (controlName) {\r\n\t        var c = collection_1.StringMapWrapper.contains(this.controls, controlName);\r\n\t        return c && this._included(controlName);\r\n\t    };\r\n\t    /** @internal */\r\n\t    ControlGroup.prototype._setParentForControls = function () {\r\n\t        var _this = this;\r\n\t        collection_1.StringMapWrapper.forEach(this.controls, function (control, name) { control.setParent(_this); });\r\n\t    };\r\n\t    /** @internal */\r\n\t    ControlGroup.prototype._updateValue = function () { this._value = this._reduceValue(); };\r\n\t    /** @internal */\r\n\t    ControlGroup.prototype._anyControlsHaveStatus = function (status) {\r\n\t        var _this = this;\r\n\t        var res = false;\r\n\t        collection_1.StringMapWrapper.forEach(this.controls, function (control, name) {\r\n\t            res = res || (_this.contains(name) && control.status == status);\r\n\t        });\r\n\t        return res;\r\n\t    };\r\n\t    /** @internal */\r\n\t    ControlGroup.prototype._reduceValue = function () {\r\n\t        return this._reduceChildren({}, function (acc, control, name) {\r\n\t            acc[name] = control.value;\r\n\t            return acc;\r\n\t        });\r\n\t    };\r\n\t    /** @internal */\r\n\t    ControlGroup.prototype._reduceChildren = function (initValue, fn) {\r\n\t        var _this = this;\r\n\t        var res = initValue;\r\n\t        collection_1.StringMapWrapper.forEach(this.controls, function (control, name) {\r\n\t            if (_this._included(name)) {\r\n\t                res = fn(res, control, name);\r\n\t            }\r\n\t        });\r\n\t        return res;\r\n\t    };\r\n\t    /** @internal */\r\n\t    ControlGroup.prototype._included = function (controlName) {\r\n\t        var isOptional = collection_1.StringMapWrapper.contains(this._optionals, controlName);\r\n\t        return !isOptional || collection_1.StringMapWrapper.get(this._optionals, controlName);\r\n\t    };\r\n\t    return ControlGroup;\r\n\t})(AbstractControl);\r\n\texports.ControlGroup = ControlGroup;\r\n\t/**\r\n\t * Defines a part of a form, of variable length, that can contain other controls.\r\n\t *\r\n\t * A `ControlArray` aggregates the values and errors of each {@link Control} in the group. Thus, if\r\n\t * one of the controls in a group is invalid, the entire group is invalid. Similarly, if a control\r\n\t * changes its value, the entire group changes as well.\r\n\t *\r\n\t * `ControlArray` is one of the three fundamental building blocks used to define forms in Angular,\r\n\t * along with {@link Control} and {@link ControlGroup}. {@link ControlGroup} can also contain\r\n\t * other controls, but is of fixed length.\r\n\t *\r\n\t * ## Adding or removing controls\r\n\t *\r\n\t * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\r\n\t * in `ControlArray` itself. These methods ensure the controls are properly tracked in the\r\n\t * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\r\n\t * the `ControlArray` directly, as that will result in strange and unexpected behavior such\r\n\t * as broken change detection.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))\r\n\t */\r\n\tvar ControlArray = (function (_super) {\r\n\t    __extends(ControlArray, _super);\r\n\t    function ControlArray(controls, validator, asyncValidator) {\r\n\t        if (validator === void 0) { validator = null; }\r\n\t        if (asyncValidator === void 0) { asyncValidator = null; }\r\n\t        _super.call(this, validator, asyncValidator);\r\n\t        this.controls = controls;\r\n\t        this._initObservables();\r\n\t        this._setParentForControls();\r\n\t        this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n\t    }\r\n\t    /**\r\n\t     * Get the {@link AbstractControl} at the given `index` in the array.\r\n\t     */\r\n\t    ControlArray.prototype.at = function (index) { return this.controls[index]; };\r\n\t    /**\r\n\t     * Insert a new {@link AbstractControl} at the end of the array.\r\n\t     */\r\n\t    ControlArray.prototype.push = function (control) {\r\n\t        this.controls.push(control);\r\n\t        control.setParent(this);\r\n\t        this.updateValueAndValidity();\r\n\t    };\r\n\t    /**\r\n\t     * Insert a new {@link AbstractControl} at the given `index` in the array.\r\n\t     */\r\n\t    ControlArray.prototype.insert = function (index, control) {\r\n\t        collection_1.ListWrapper.insert(this.controls, index, control);\r\n\t        control.setParent(this);\r\n\t        this.updateValueAndValidity();\r\n\t    };\r\n\t    /**\r\n\t     * Remove the control at the given `index` in the array.\r\n\t     */\r\n\t    ControlArray.prototype.removeAt = function (index) {\r\n\t        collection_1.ListWrapper.removeAt(this.controls, index);\r\n\t        this.updateValueAndValidity();\r\n\t    };\r\n\t    Object.defineProperty(ControlArray.prototype, \"length\", {\r\n\t        /**\r\n\t         * Length of the control array.\r\n\t         */\r\n\t        get: function () { return this.controls.length; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /** @internal */\r\n\t    ControlArray.prototype._updateValue = function () { this._value = this.controls.map(function (control) { return control.value; }); };\r\n\t    /** @internal */\r\n\t    ControlArray.prototype._anyControlsHaveStatus = function (status) {\r\n\t        return this.controls.some(function (c) { return c.status == status; });\r\n\t    };\r\n\t    /** @internal */\r\n\t    ControlArray.prototype._setParentForControls = function () {\r\n\t        var _this = this;\r\n\t        this.controls.forEach(function (control) { control.setParent(_this); });\r\n\t    };\r\n\t    return ControlArray;\r\n\t})(AbstractControl);\r\n\texports.ControlArray = ControlArray;\r\n\n\n/***/ },\n/* 125 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar view_1 = __webpack_require__(63);\r\n\tvar selector_1 = __webpack_require__(283);\r\n\tvar util_1 = __webpack_require__(56);\r\n\tvar interfaces_1 = __webpack_require__(130);\r\n\t// group 1: \"property\" from \"[property]\"\r\n\t// group 2: \"event\" from \"(event)\"\r\n\tvar HOST_REG_EXP = /^(?:(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\)))$/g;\r\n\tvar CompileMetadataWithIdentifier = (function () {\r\n\t    function CompileMetadataWithIdentifier() {\r\n\t    }\r\n\t    CompileMetadataWithIdentifier.fromJson = function (data) {\r\n\t        return _COMPILE_METADATA_FROM_JSON[data['class']](data);\r\n\t    };\r\n\t    Object.defineProperty(CompileMetadataWithIdentifier.prototype, \"identifier\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return CompileMetadataWithIdentifier;\r\n\t})();\r\n\texports.CompileMetadataWithIdentifier = CompileMetadataWithIdentifier;\r\n\tvar CompileMetadataWithType = (function (_super) {\r\n\t    __extends(CompileMetadataWithType, _super);\r\n\t    function CompileMetadataWithType() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    CompileMetadataWithType.fromJson = function (data) {\r\n\t        return _COMPILE_METADATA_FROM_JSON[data['class']](data);\r\n\t    };\r\n\t    Object.defineProperty(CompileMetadataWithType.prototype, \"type\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(CompileMetadataWithType.prototype, \"identifier\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return CompileMetadataWithType;\r\n\t})(CompileMetadataWithIdentifier);\r\n\texports.CompileMetadataWithType = CompileMetadataWithType;\r\n\tvar CompileIdentifierMetadata = (function () {\r\n\t    function CompileIdentifierMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, constConstructor = _b.constConstructor;\r\n\t        this.runtime = runtime;\r\n\t        this.name = name;\r\n\t        this.prefix = prefix;\r\n\t        this.moduleUrl = moduleUrl;\r\n\t        this.constConstructor = constConstructor;\r\n\t    }\r\n\t    CompileIdentifierMetadata.fromJson = function (data) {\r\n\t        return new CompileIdentifierMetadata({\r\n\t            name: data['name'],\r\n\t            prefix: data['prefix'],\r\n\t            moduleUrl: data['moduleUrl'],\r\n\t            constConstructor: data['constConstructor']\r\n\t        });\r\n\t    };\r\n\t    CompileIdentifierMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            // Note: Runtime type can't be serialized...\r\n\t            'class': 'Identifier',\r\n\t            'name': this.name,\r\n\t            'moduleUrl': this.moduleUrl,\r\n\t            'prefix': this.prefix,\r\n\t            'constConstructor': this.constConstructor\r\n\t        };\r\n\t    };\r\n\t    Object.defineProperty(CompileIdentifierMetadata.prototype, \"identifier\", {\r\n\t        get: function () { return this; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return CompileIdentifierMetadata;\r\n\t})();\r\n\texports.CompileIdentifierMetadata = CompileIdentifierMetadata;\r\n\tvar CompileDiDependencyMetadata = (function () {\r\n\t    function CompileDiDependencyMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, isAttribute = _b.isAttribute, isSelf = _b.isSelf, isHost = _b.isHost, isSkipSelf = _b.isSkipSelf, isOptional = _b.isOptional, query = _b.query, viewQuery = _b.viewQuery, token = _b.token;\r\n\t        this.isAttribute = lang_1.normalizeBool(isAttribute);\r\n\t        this.isSelf = lang_1.normalizeBool(isSelf);\r\n\t        this.isHost = lang_1.normalizeBool(isHost);\r\n\t        this.isSkipSelf = lang_1.normalizeBool(isSkipSelf);\r\n\t        this.isOptional = lang_1.normalizeBool(isOptional);\r\n\t        this.query = query;\r\n\t        this.viewQuery = viewQuery;\r\n\t        this.token = token;\r\n\t    }\r\n\t    CompileDiDependencyMetadata.fromJson = function (data) {\r\n\t        return new CompileDiDependencyMetadata({\r\n\t            token: objFromJson(data['token'], CompileIdentifierMetadata.fromJson),\r\n\t            query: objFromJson(data['query'], CompileQueryMetadata.fromJson),\r\n\t            viewQuery: objFromJson(data['viewQuery'], CompileQueryMetadata.fromJson),\r\n\t            isAttribute: data['isAttribute'],\r\n\t            isSelf: data['isSelf'],\r\n\t            isHost: data['isHost'],\r\n\t            isSkipSelf: data['isSkipSelf'],\r\n\t            isOptional: data['isOptional']\r\n\t        });\r\n\t    };\r\n\t    CompileDiDependencyMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            // Note: Runtime type can't be serialized...\r\n\t            'token': objToJson(this.token),\r\n\t            'query': objToJson(this.query),\r\n\t            'viewQuery': objToJson(this.viewQuery),\r\n\t            'isAttribute': this.isAttribute,\r\n\t            'isSelf': this.isSelf,\r\n\t            'isHost': this.isHost,\r\n\t            'isSkipSelf': this.isSkipSelf,\r\n\t            'isOptional': this.isOptional\r\n\t        };\r\n\t    };\r\n\t    return CompileDiDependencyMetadata;\r\n\t})();\r\n\texports.CompileDiDependencyMetadata = CompileDiDependencyMetadata;\r\n\tvar CompileProviderMetadata = (function () {\r\n\t    function CompileProviderMetadata(_a) {\r\n\t        var token = _a.token, useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi;\r\n\t        this.token = token;\r\n\t        this.useClass = useClass;\r\n\t        this.useValue = useValue;\r\n\t        this.useExisting = useExisting;\r\n\t        this.useFactory = useFactory;\r\n\t        this.deps = deps;\r\n\t        this.multi = multi;\r\n\t    }\r\n\t    CompileProviderMetadata.fromJson = function (data) {\r\n\t        return new CompileProviderMetadata({\r\n\t            token: objFromJson(data['token'], CompileIdentifierMetadata.fromJson),\r\n\t            useClass: objFromJson(data['useClass'], CompileTypeMetadata.fromJson)\r\n\t        });\r\n\t    };\r\n\t    CompileProviderMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            // Note: Runtime type can't be serialized...\r\n\t            'token': objToJson(this.token),\r\n\t            'useClass': objToJson(this.useClass)\r\n\t        };\r\n\t    };\r\n\t    return CompileProviderMetadata;\r\n\t})();\r\n\texports.CompileProviderMetadata = CompileProviderMetadata;\r\n\tvar CompileFactoryMetadata = (function () {\r\n\t    function CompileFactoryMetadata(_a) {\r\n\t        var runtime = _a.runtime, name = _a.name, moduleUrl = _a.moduleUrl, constConstructor = _a.constConstructor, diDeps = _a.diDeps;\r\n\t        this.runtime = runtime;\r\n\t        this.name = name;\r\n\t        this.moduleUrl = moduleUrl;\r\n\t        this.diDeps = diDeps;\r\n\t        this.constConstructor = constConstructor;\r\n\t    }\r\n\t    Object.defineProperty(CompileFactoryMetadata.prototype, \"identifier\", {\r\n\t        get: function () { return this; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    CompileFactoryMetadata.prototype.toJson = function () { return null; };\r\n\t    return CompileFactoryMetadata;\r\n\t})();\r\n\texports.CompileFactoryMetadata = CompileFactoryMetadata;\r\n\t/**\r\n\t * Metadata regarding compilation of a type.\r\n\t */\r\n\tvar CompileTypeMetadata = (function () {\r\n\t    function CompileTypeMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, runtime = _b.runtime, name = _b.name, moduleUrl = _b.moduleUrl, prefix = _b.prefix, isHost = _b.isHost, constConstructor = _b.constConstructor, diDeps = _b.diDeps;\r\n\t        this.runtime = runtime;\r\n\t        this.name = name;\r\n\t        this.moduleUrl = moduleUrl;\r\n\t        this.prefix = prefix;\r\n\t        this.isHost = lang_1.normalizeBool(isHost);\r\n\t        this.constConstructor = constConstructor;\r\n\t        this.diDeps = lang_1.normalizeBlank(diDeps);\r\n\t    }\r\n\t    CompileTypeMetadata.fromJson = function (data) {\r\n\t        return new CompileTypeMetadata({\r\n\t            name: data['name'],\r\n\t            moduleUrl: data['moduleUrl'],\r\n\t            prefix: data['prefix'],\r\n\t            isHost: data['isHost'],\r\n\t            constConstructor: data['constConstructor'],\r\n\t            diDeps: arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson)\r\n\t        });\r\n\t    };\r\n\t    Object.defineProperty(CompileTypeMetadata.prototype, \"identifier\", {\r\n\t        get: function () { return this; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(CompileTypeMetadata.prototype, \"type\", {\r\n\t        get: function () { return this; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    CompileTypeMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            // Note: Runtime type can't be serialized...\r\n\t            'class': 'Type',\r\n\t            'name': this.name,\r\n\t            'moduleUrl': this.moduleUrl,\r\n\t            'prefix': this.prefix,\r\n\t            'isHost': this.isHost,\r\n\t            'constConstructor': this.constConstructor,\r\n\t            'diDeps': arrayToJson(this.diDeps)\r\n\t        };\r\n\t    };\r\n\t    return CompileTypeMetadata;\r\n\t})();\r\n\texports.CompileTypeMetadata = CompileTypeMetadata;\r\n\tvar CompileQueryMetadata = (function () {\r\n\t    function CompileQueryMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, selectors = _b.selectors, descendants = _b.descendants, first = _b.first, propertyName = _b.propertyName;\r\n\t        this.selectors = selectors;\r\n\t        this.descendants = descendants;\r\n\t        this.first = lang_1.normalizeBool(first);\r\n\t        this.propertyName = propertyName;\r\n\t    }\r\n\t    CompileQueryMetadata.fromJson = function (data) {\r\n\t        return new CompileQueryMetadata({\r\n\t            selectors: arrayFromJson(data['selectors'], CompileIdentifierMetadata.fromJson),\r\n\t            descendants: data['descendants'],\r\n\t            first: data['first'],\r\n\t            propertyName: data['propertyName']\r\n\t        });\r\n\t    };\r\n\t    CompileQueryMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            // Note: Runtime type can't be serialized...\r\n\t            'selectors': arrayToJson(this.selectors),\r\n\t            'descendants': this.descendants,\r\n\t            'first': this.first,\r\n\t            'propertyName': this.propertyName\r\n\t        };\r\n\t    };\r\n\t    return CompileQueryMetadata;\r\n\t})();\r\n\texports.CompileQueryMetadata = CompileQueryMetadata;\r\n\t/**\r\n\t * Metadata regarding compilation of a template.\r\n\t */\r\n\tvar CompileTemplateMetadata = (function () {\r\n\t    function CompileTemplateMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, encapsulation = _b.encapsulation, template = _b.template, templateUrl = _b.templateUrl, styles = _b.styles, styleUrls = _b.styleUrls, ngContentSelectors = _b.ngContentSelectors;\r\n\t        this.encapsulation = lang_1.isPresent(encapsulation) ? encapsulation : view_1.ViewEncapsulation.Emulated;\r\n\t        this.template = template;\r\n\t        this.templateUrl = templateUrl;\r\n\t        this.styles = lang_1.isPresent(styles) ? styles : [];\r\n\t        this.styleUrls = lang_1.isPresent(styleUrls) ? styleUrls : [];\r\n\t        this.ngContentSelectors = lang_1.isPresent(ngContentSelectors) ? ngContentSelectors : [];\r\n\t    }\r\n\t    CompileTemplateMetadata.fromJson = function (data) {\r\n\t        return new CompileTemplateMetadata({\r\n\t            encapsulation: lang_1.isPresent(data['encapsulation']) ?\r\n\t                view_1.VIEW_ENCAPSULATION_VALUES[data['encapsulation']] :\r\n\t                data['encapsulation'],\r\n\t            template: data['template'],\r\n\t            templateUrl: data['templateUrl'],\r\n\t            styles: data['styles'],\r\n\t            styleUrls: data['styleUrls'],\r\n\t            ngContentSelectors: data['ngContentSelectors']\r\n\t        });\r\n\t    };\r\n\t    CompileTemplateMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            'encapsulation': lang_1.isPresent(this.encapsulation) ? lang_1.serializeEnum(this.encapsulation) : this.encapsulation,\r\n\t            'template': this.template,\r\n\t            'templateUrl': this.templateUrl,\r\n\t            'styles': this.styles,\r\n\t            'styleUrls': this.styleUrls,\r\n\t            'ngContentSelectors': this.ngContentSelectors\r\n\t        };\r\n\t    };\r\n\t    return CompileTemplateMetadata;\r\n\t})();\r\n\texports.CompileTemplateMetadata = CompileTemplateMetadata;\r\n\t/**\r\n\t * Metadata regarding compilation of a directive.\r\n\t */\r\n\tvar CompileDirectiveMetadata = (function () {\r\n\t    function CompileDirectiveMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, dynamicLoadable = _b.dynamicLoadable, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, hostListeners = _b.hostListeners, hostProperties = _b.hostProperties, hostAttributes = _b.hostAttributes, lifecycleHooks = _b.lifecycleHooks, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, template = _b.template;\r\n\t        this.type = type;\r\n\t        this.isComponent = isComponent;\r\n\t        this.dynamicLoadable = dynamicLoadable;\r\n\t        this.selector = selector;\r\n\t        this.exportAs = exportAs;\r\n\t        this.changeDetection = changeDetection;\r\n\t        this.inputs = inputs;\r\n\t        this.outputs = outputs;\r\n\t        this.hostListeners = hostListeners;\r\n\t        this.hostProperties = hostProperties;\r\n\t        this.hostAttributes = hostAttributes;\r\n\t        this.lifecycleHooks = lifecycleHooks;\r\n\t        this.providers = lang_1.normalizeBlank(providers);\r\n\t        this.viewProviders = lang_1.normalizeBlank(viewProviders);\r\n\t        this.queries = queries;\r\n\t        this.viewQueries = viewQueries;\r\n\t        this.template = template;\r\n\t    }\r\n\t    CompileDirectiveMetadata.create = function (_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, type = _b.type, isComponent = _b.isComponent, dynamicLoadable = _b.dynamicLoadable, selector = _b.selector, exportAs = _b.exportAs, changeDetection = _b.changeDetection, inputs = _b.inputs, outputs = _b.outputs, host = _b.host, lifecycleHooks = _b.lifecycleHooks, providers = _b.providers, viewProviders = _b.viewProviders, queries = _b.queries, viewQueries = _b.viewQueries, template = _b.template;\r\n\t        var hostListeners = {};\r\n\t        var hostProperties = {};\r\n\t        var hostAttributes = {};\r\n\t        if (lang_1.isPresent(host)) {\r\n\t            collection_1.StringMapWrapper.forEach(host, function (value, key) {\r\n\t                var matches = lang_1.RegExpWrapper.firstMatch(HOST_REG_EXP, key);\r\n\t                if (lang_1.isBlank(matches)) {\r\n\t                    hostAttributes[key] = value;\r\n\t                }\r\n\t                else if (lang_1.isPresent(matches[1])) {\r\n\t                    hostProperties[matches[1]] = value;\r\n\t                }\r\n\t                else if (lang_1.isPresent(matches[2])) {\r\n\t                    hostListeners[matches[2]] = value;\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        var inputsMap = {};\r\n\t        if (lang_1.isPresent(inputs)) {\r\n\t            inputs.forEach(function (bindConfig) {\r\n\t                // canonical syntax: `dirProp: elProp`\r\n\t                // if there is no `:`, use dirProp = elProp\r\n\t                var parts = util_1.splitAtColon(bindConfig, [bindConfig, bindConfig]);\r\n\t                inputsMap[parts[0]] = parts[1];\r\n\t            });\r\n\t        }\r\n\t        var outputsMap = {};\r\n\t        if (lang_1.isPresent(outputs)) {\r\n\t            outputs.forEach(function (bindConfig) {\r\n\t                // canonical syntax: `dirProp: elProp`\r\n\t                // if there is no `:`, use dirProp = elProp\r\n\t                var parts = util_1.splitAtColon(bindConfig, [bindConfig, bindConfig]);\r\n\t                outputsMap[parts[0]] = parts[1];\r\n\t            });\r\n\t        }\r\n\t        return new CompileDirectiveMetadata({\r\n\t            type: type,\r\n\t            isComponent: lang_1.normalizeBool(isComponent),\r\n\t            dynamicLoadable: lang_1.normalizeBool(dynamicLoadable),\r\n\t            selector: selector,\r\n\t            exportAs: exportAs,\r\n\t            changeDetection: changeDetection,\r\n\t            inputs: inputsMap,\r\n\t            outputs: outputsMap,\r\n\t            hostListeners: hostListeners,\r\n\t            hostProperties: hostProperties,\r\n\t            hostAttributes: hostAttributes,\r\n\t            lifecycleHooks: lang_1.isPresent(lifecycleHooks) ? lifecycleHooks : [],\r\n\t            providers: providers,\r\n\t            viewProviders: viewProviders,\r\n\t            queries: queries,\r\n\t            viewQueries: viewQueries,\r\n\t            template: template\r\n\t        });\r\n\t    };\r\n\t    Object.defineProperty(CompileDirectiveMetadata.prototype, \"identifier\", {\r\n\t        get: function () { return this.type; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    CompileDirectiveMetadata.fromJson = function (data) {\r\n\t        return new CompileDirectiveMetadata({\r\n\t            isComponent: data['isComponent'],\r\n\t            dynamicLoadable: data['dynamicLoadable'],\r\n\t            selector: data['selector'],\r\n\t            exportAs: data['exportAs'],\r\n\t            type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],\r\n\t            changeDetection: lang_1.isPresent(data['changeDetection']) ?\r\n\t                change_detection_1.CHANGE_DETECTION_STRATEGY_VALUES[data['changeDetection']] :\r\n\t                data['changeDetection'],\r\n\t            inputs: data['inputs'],\r\n\t            outputs: data['outputs'],\r\n\t            hostListeners: data['hostListeners'],\r\n\t            hostProperties: data['hostProperties'],\r\n\t            hostAttributes: data['hostAttributes'],\r\n\t            lifecycleHooks: data['lifecycleHooks'].map(function (hookValue) { return interfaces_1.LIFECYCLE_HOOKS_VALUES[hookValue]; }),\r\n\t            template: lang_1.isPresent(data['template']) ? CompileTemplateMetadata.fromJson(data['template']) :\r\n\t                data['template'],\r\n\t            providers: arrayFromJson(data['providers'], CompileProviderMetadata.fromJson)\r\n\t        });\r\n\t    };\r\n\t    CompileDirectiveMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            'class': 'Directive',\r\n\t            'isComponent': this.isComponent,\r\n\t            'dynamicLoadable': this.dynamicLoadable,\r\n\t            'selector': this.selector,\r\n\t            'exportAs': this.exportAs,\r\n\t            'type': lang_1.isPresent(this.type) ? this.type.toJson() : this.type,\r\n\t            'changeDetection': lang_1.isPresent(this.changeDetection) ? lang_1.serializeEnum(this.changeDetection) :\r\n\t                this.changeDetection,\r\n\t            'inputs': this.inputs,\r\n\t            'outputs': this.outputs,\r\n\t            'hostListeners': this.hostListeners,\r\n\t            'hostProperties': this.hostProperties,\r\n\t            'hostAttributes': this.hostAttributes,\r\n\t            'lifecycleHooks': this.lifecycleHooks.map(function (hook) { return lang_1.serializeEnum(hook); }),\r\n\t            'template': lang_1.isPresent(this.template) ? this.template.toJson() : this.template,\r\n\t            'providers': arrayToJson(this.providers)\r\n\t        };\r\n\t    };\r\n\t    return CompileDirectiveMetadata;\r\n\t})();\r\n\texports.CompileDirectiveMetadata = CompileDirectiveMetadata;\r\n\t/**\r\n\t * Construct {@link CompileDirectiveMetadata} from {@link ComponentTypeMetadata} and a selector.\r\n\t */\r\n\tfunction createHostComponentMeta(componentType, componentSelector) {\r\n\t    var template = selector_1.CssSelector.parse(componentSelector)[0].getMatchingElementTemplate();\r\n\t    return CompileDirectiveMetadata.create({\r\n\t        type: new CompileTypeMetadata({\r\n\t            runtime: Object,\r\n\t            name: \"Host\" + componentType.name,\r\n\t            moduleUrl: componentType.moduleUrl,\r\n\t            isHost: true\r\n\t        }),\r\n\t        template: new CompileTemplateMetadata({ template: template, templateUrl: '', styles: [], styleUrls: [], ngContentSelectors: [] }),\r\n\t        changeDetection: change_detection_1.ChangeDetectionStrategy.Default,\r\n\t        inputs: [],\r\n\t        outputs: [],\r\n\t        host: {},\r\n\t        lifecycleHooks: [],\r\n\t        isComponent: true,\r\n\t        dynamicLoadable: false,\r\n\t        selector: '*',\r\n\t        providers: [],\r\n\t        viewProviders: [],\r\n\t        queries: [],\r\n\t        viewQueries: []\r\n\t    });\r\n\t}\r\n\texports.createHostComponentMeta = createHostComponentMeta;\r\n\tvar CompilePipeMetadata = (function () {\r\n\t    function CompilePipeMetadata(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, type = _b.type, name = _b.name, pure = _b.pure;\r\n\t        this.type = type;\r\n\t        this.name = name;\r\n\t        this.pure = lang_1.normalizeBool(pure);\r\n\t    }\r\n\t    Object.defineProperty(CompilePipeMetadata.prototype, \"identifier\", {\r\n\t        get: function () { return this.type; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    CompilePipeMetadata.fromJson = function (data) {\r\n\t        return new CompilePipeMetadata({\r\n\t            type: lang_1.isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],\r\n\t            name: data['name'],\r\n\t            pure: data['pure']\r\n\t        });\r\n\t    };\r\n\t    CompilePipeMetadata.prototype.toJson = function () {\r\n\t        return {\r\n\t            'class': 'Pipe',\r\n\t            'type': lang_1.isPresent(this.type) ? this.type.toJson() : null,\r\n\t            'name': this.name,\r\n\t            'pure': this.pure\r\n\t        };\r\n\t    };\r\n\t    return CompilePipeMetadata;\r\n\t})();\r\n\texports.CompilePipeMetadata = CompilePipeMetadata;\r\n\tvar _COMPILE_METADATA_FROM_JSON = {\r\n\t    'Directive': CompileDirectiveMetadata.fromJson,\r\n\t    'Pipe': CompilePipeMetadata.fromJson,\r\n\t    'Type': CompileTypeMetadata.fromJson,\r\n\t    'Identifier': CompileIdentifierMetadata.fromJson\r\n\t};\r\n\tfunction arrayFromJson(obj, fn) {\r\n\t    return lang_1.isBlank(obj) ? null : obj.map(function (o) { return objFromJson(o, fn); });\r\n\t}\r\n\tfunction arrayToJson(obj) {\r\n\t    return lang_1.isBlank(obj) ? null : obj.map(objToJson);\r\n\t}\r\n\tfunction objFromJson(obj, fn) {\r\n\t    return (lang_1.isString(obj) || lang_1.isBlank(obj)) ? obj : fn(obj);\r\n\t}\r\n\tfunction objToJson(obj) {\r\n\t    return (lang_1.isString(obj) || lang_1.isBlank(obj)) ? obj : obj.toJson();\r\n\t}\r\n\n\n/***/ },\n/* 126 */\n/***/ function(module, exports) {\n\n\t'use strict';// TODO: vsavkin rename it into TemplateLoader\r\n\t/**\r\n\t * An interface for retrieving documents by URL that the compiler uses\r\n\t * to load templates.\r\n\t */\r\n\tvar XHR = (function () {\r\n\t    function XHR() {\r\n\t    }\r\n\t    XHR.prototype.get = function (url) { return null; };\r\n\t    return XHR;\r\n\t})();\r\n\texports.XHR = XHR;\r\n\n\n/***/ },\n/* 127 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar AST = (function () {\r\n\t    function AST() {\r\n\t    }\r\n\t    AST.prototype.visit = function (visitor) { return null; };\r\n\t    AST.prototype.toString = function () { return \"AST\"; };\r\n\t    return AST;\r\n\t})();\r\n\texports.AST = AST;\r\n\t/**\r\n\t * Represents a quoted expression of the form:\r\n\t *\r\n\t * quote = prefix `:` uninterpretedExpression\r\n\t * prefix = identifier\r\n\t * uninterpretedExpression = arbitrary string\r\n\t *\r\n\t * A quoted expression is meant to be pre-processed by an AST transformer that\r\n\t * converts it into another AST that no longer contains quoted expressions.\r\n\t * It is meant to allow third-party developers to extend Angular template\r\n\t * expression language. The `uninterpretedExpression` part of the quote is\r\n\t * therefore not interpreted by the Angular's own expression parser.\r\n\t */\r\n\tvar Quote = (function (_super) {\r\n\t    __extends(Quote, _super);\r\n\t    function Quote(prefix, uninterpretedExpression, location) {\r\n\t        _super.call(this);\r\n\t        this.prefix = prefix;\r\n\t        this.uninterpretedExpression = uninterpretedExpression;\r\n\t        this.location = location;\r\n\t    }\r\n\t    Quote.prototype.visit = function (visitor) { return visitor.visitQuote(this); };\r\n\t    Quote.prototype.toString = function () { return \"Quote\"; };\r\n\t    return Quote;\r\n\t})(AST);\r\n\texports.Quote = Quote;\r\n\tvar EmptyExpr = (function (_super) {\r\n\t    __extends(EmptyExpr, _super);\r\n\t    function EmptyExpr() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    EmptyExpr.prototype.visit = function (visitor) {\r\n\t        // do nothing\r\n\t    };\r\n\t    return EmptyExpr;\r\n\t})(AST);\r\n\texports.EmptyExpr = EmptyExpr;\r\n\tvar ImplicitReceiver = (function (_super) {\r\n\t    __extends(ImplicitReceiver, _super);\r\n\t    function ImplicitReceiver() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    ImplicitReceiver.prototype.visit = function (visitor) { return visitor.visitImplicitReceiver(this); };\r\n\t    return ImplicitReceiver;\r\n\t})(AST);\r\n\texports.ImplicitReceiver = ImplicitReceiver;\r\n\t/**\r\n\t * Multiple expressions separated by a semicolon.\r\n\t */\r\n\tvar Chain = (function (_super) {\r\n\t    __extends(Chain, _super);\r\n\t    function Chain(expressions) {\r\n\t        _super.call(this);\r\n\t        this.expressions = expressions;\r\n\t    }\r\n\t    Chain.prototype.visit = function (visitor) { return visitor.visitChain(this); };\r\n\t    return Chain;\r\n\t})(AST);\r\n\texports.Chain = Chain;\r\n\tvar Conditional = (function (_super) {\r\n\t    __extends(Conditional, _super);\r\n\t    function Conditional(condition, trueExp, falseExp) {\r\n\t        _super.call(this);\r\n\t        this.condition = condition;\r\n\t        this.trueExp = trueExp;\r\n\t        this.falseExp = falseExp;\r\n\t    }\r\n\t    Conditional.prototype.visit = function (visitor) { return visitor.visitConditional(this); };\r\n\t    return Conditional;\r\n\t})(AST);\r\n\texports.Conditional = Conditional;\r\n\tvar PropertyRead = (function (_super) {\r\n\t    __extends(PropertyRead, _super);\r\n\t    function PropertyRead(receiver, name, getter) {\r\n\t        _super.call(this);\r\n\t        this.receiver = receiver;\r\n\t        this.name = name;\r\n\t        this.getter = getter;\r\n\t    }\r\n\t    PropertyRead.prototype.visit = function (visitor) { return visitor.visitPropertyRead(this); };\r\n\t    return PropertyRead;\r\n\t})(AST);\r\n\texports.PropertyRead = PropertyRead;\r\n\tvar PropertyWrite = (function (_super) {\r\n\t    __extends(PropertyWrite, _super);\r\n\t    function PropertyWrite(receiver, name, setter, value) {\r\n\t        _super.call(this);\r\n\t        this.receiver = receiver;\r\n\t        this.name = name;\r\n\t        this.setter = setter;\r\n\t        this.value = value;\r\n\t    }\r\n\t    PropertyWrite.prototype.visit = function (visitor) { return visitor.visitPropertyWrite(this); };\r\n\t    return PropertyWrite;\r\n\t})(AST);\r\n\texports.PropertyWrite = PropertyWrite;\r\n\tvar SafePropertyRead = (function (_super) {\r\n\t    __extends(SafePropertyRead, _super);\r\n\t    function SafePropertyRead(receiver, name, getter) {\r\n\t        _super.call(this);\r\n\t        this.receiver = receiver;\r\n\t        this.name = name;\r\n\t        this.getter = getter;\r\n\t    }\r\n\t    SafePropertyRead.prototype.visit = function (visitor) { return visitor.visitSafePropertyRead(this); };\r\n\t    return SafePropertyRead;\r\n\t})(AST);\r\n\texports.SafePropertyRead = SafePropertyRead;\r\n\tvar KeyedRead = (function (_super) {\r\n\t    __extends(KeyedRead, _super);\r\n\t    function KeyedRead(obj, key) {\r\n\t        _super.call(this);\r\n\t        this.obj = obj;\r\n\t        this.key = key;\r\n\t    }\r\n\t    KeyedRead.prototype.visit = function (visitor) { return visitor.visitKeyedRead(this); };\r\n\t    return KeyedRead;\r\n\t})(AST);\r\n\texports.KeyedRead = KeyedRead;\r\n\tvar KeyedWrite = (function (_super) {\r\n\t    __extends(KeyedWrite, _super);\r\n\t    function KeyedWrite(obj, key, value) {\r\n\t        _super.call(this);\r\n\t        this.obj = obj;\r\n\t        this.key = key;\r\n\t        this.value = value;\r\n\t    }\r\n\t    KeyedWrite.prototype.visit = function (visitor) { return visitor.visitKeyedWrite(this); };\r\n\t    return KeyedWrite;\r\n\t})(AST);\r\n\texports.KeyedWrite = KeyedWrite;\r\n\tvar BindingPipe = (function (_super) {\r\n\t    __extends(BindingPipe, _super);\r\n\t    function BindingPipe(exp, name, args) {\r\n\t        _super.call(this);\r\n\t        this.exp = exp;\r\n\t        this.name = name;\r\n\t        this.args = args;\r\n\t    }\r\n\t    BindingPipe.prototype.visit = function (visitor) { return visitor.visitPipe(this); };\r\n\t    return BindingPipe;\r\n\t})(AST);\r\n\texports.BindingPipe = BindingPipe;\r\n\tvar LiteralPrimitive = (function (_super) {\r\n\t    __extends(LiteralPrimitive, _super);\r\n\t    function LiteralPrimitive(value) {\r\n\t        _super.call(this);\r\n\t        this.value = value;\r\n\t    }\r\n\t    LiteralPrimitive.prototype.visit = function (visitor) { return visitor.visitLiteralPrimitive(this); };\r\n\t    return LiteralPrimitive;\r\n\t})(AST);\r\n\texports.LiteralPrimitive = LiteralPrimitive;\r\n\tvar LiteralArray = (function (_super) {\r\n\t    __extends(LiteralArray, _super);\r\n\t    function LiteralArray(expressions) {\r\n\t        _super.call(this);\r\n\t        this.expressions = expressions;\r\n\t    }\r\n\t    LiteralArray.prototype.visit = function (visitor) { return visitor.visitLiteralArray(this); };\r\n\t    return LiteralArray;\r\n\t})(AST);\r\n\texports.LiteralArray = LiteralArray;\r\n\tvar LiteralMap = (function (_super) {\r\n\t    __extends(LiteralMap, _super);\r\n\t    function LiteralMap(keys, values) {\r\n\t        _super.call(this);\r\n\t        this.keys = keys;\r\n\t        this.values = values;\r\n\t    }\r\n\t    LiteralMap.prototype.visit = function (visitor) { return visitor.visitLiteralMap(this); };\r\n\t    return LiteralMap;\r\n\t})(AST);\r\n\texports.LiteralMap = LiteralMap;\r\n\tvar Interpolation = (function (_super) {\r\n\t    __extends(Interpolation, _super);\r\n\t    function Interpolation(strings, expressions) {\r\n\t        _super.call(this);\r\n\t        this.strings = strings;\r\n\t        this.expressions = expressions;\r\n\t    }\r\n\t    Interpolation.prototype.visit = function (visitor) { return visitor.visitInterpolation(this); };\r\n\t    return Interpolation;\r\n\t})(AST);\r\n\texports.Interpolation = Interpolation;\r\n\tvar Binary = (function (_super) {\r\n\t    __extends(Binary, _super);\r\n\t    function Binary(operation, left, right) {\r\n\t        _super.call(this);\r\n\t        this.operation = operation;\r\n\t        this.left = left;\r\n\t        this.right = right;\r\n\t    }\r\n\t    Binary.prototype.visit = function (visitor) { return visitor.visitBinary(this); };\r\n\t    return Binary;\r\n\t})(AST);\r\n\texports.Binary = Binary;\r\n\tvar PrefixNot = (function (_super) {\r\n\t    __extends(PrefixNot, _super);\r\n\t    function PrefixNot(expression) {\r\n\t        _super.call(this);\r\n\t        this.expression = expression;\r\n\t    }\r\n\t    PrefixNot.prototype.visit = function (visitor) { return visitor.visitPrefixNot(this); };\r\n\t    return PrefixNot;\r\n\t})(AST);\r\n\texports.PrefixNot = PrefixNot;\r\n\tvar MethodCall = (function (_super) {\r\n\t    __extends(MethodCall, _super);\r\n\t    function MethodCall(receiver, name, fn, args) {\r\n\t        _super.call(this);\r\n\t        this.receiver = receiver;\r\n\t        this.name = name;\r\n\t        this.fn = fn;\r\n\t        this.args = args;\r\n\t    }\r\n\t    MethodCall.prototype.visit = function (visitor) { return visitor.visitMethodCall(this); };\r\n\t    return MethodCall;\r\n\t})(AST);\r\n\texports.MethodCall = MethodCall;\r\n\tvar SafeMethodCall = (function (_super) {\r\n\t    __extends(SafeMethodCall, _super);\r\n\t    function SafeMethodCall(receiver, name, fn, args) {\r\n\t        _super.call(this);\r\n\t        this.receiver = receiver;\r\n\t        this.name = name;\r\n\t        this.fn = fn;\r\n\t        this.args = args;\r\n\t    }\r\n\t    SafeMethodCall.prototype.visit = function (visitor) { return visitor.visitSafeMethodCall(this); };\r\n\t    return SafeMethodCall;\r\n\t})(AST);\r\n\texports.SafeMethodCall = SafeMethodCall;\r\n\tvar FunctionCall = (function (_super) {\r\n\t    __extends(FunctionCall, _super);\r\n\t    function FunctionCall(target, args) {\r\n\t        _super.call(this);\r\n\t        this.target = target;\r\n\t        this.args = args;\r\n\t    }\r\n\t    FunctionCall.prototype.visit = function (visitor) { return visitor.visitFunctionCall(this); };\r\n\t    return FunctionCall;\r\n\t})(AST);\r\n\texports.FunctionCall = FunctionCall;\r\n\tvar ASTWithSource = (function (_super) {\r\n\t    __extends(ASTWithSource, _super);\r\n\t    function ASTWithSource(ast, source, location) {\r\n\t        _super.call(this);\r\n\t        this.ast = ast;\r\n\t        this.source = source;\r\n\t        this.location = location;\r\n\t    }\r\n\t    ASTWithSource.prototype.visit = function (visitor) { return this.ast.visit(visitor); };\r\n\t    ASTWithSource.prototype.toString = function () { return this.source + \" in \" + this.location; };\r\n\t    return ASTWithSource;\r\n\t})(AST);\r\n\texports.ASTWithSource = ASTWithSource;\r\n\tvar TemplateBinding = (function () {\r\n\t    function TemplateBinding(key, keyIsVar, name, expression) {\r\n\t        this.key = key;\r\n\t        this.keyIsVar = keyIsVar;\r\n\t        this.name = name;\r\n\t        this.expression = expression;\r\n\t    }\r\n\t    return TemplateBinding;\r\n\t})();\r\n\texports.TemplateBinding = TemplateBinding;\r\n\tvar RecursiveAstVisitor = (function () {\r\n\t    function RecursiveAstVisitor() {\r\n\t    }\r\n\t    RecursiveAstVisitor.prototype.visitBinary = function (ast) {\r\n\t        ast.left.visit(this);\r\n\t        ast.right.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitChain = function (ast) { return this.visitAll(ast.expressions); };\r\n\t    RecursiveAstVisitor.prototype.visitConditional = function (ast) {\r\n\t        ast.condition.visit(this);\r\n\t        ast.trueExp.visit(this);\r\n\t        ast.falseExp.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitPipe = function (ast) {\r\n\t        ast.exp.visit(this);\r\n\t        this.visitAll(ast.args);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitFunctionCall = function (ast) {\r\n\t        ast.target.visit(this);\r\n\t        this.visitAll(ast.args);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitImplicitReceiver = function (ast) { return null; };\r\n\t    RecursiveAstVisitor.prototype.visitInterpolation = function (ast) { return this.visitAll(ast.expressions); };\r\n\t    RecursiveAstVisitor.prototype.visitKeyedRead = function (ast) {\r\n\t        ast.obj.visit(this);\r\n\t        ast.key.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitKeyedWrite = function (ast) {\r\n\t        ast.obj.visit(this);\r\n\t        ast.key.visit(this);\r\n\t        ast.value.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitLiteralArray = function (ast) { return this.visitAll(ast.expressions); };\r\n\t    RecursiveAstVisitor.prototype.visitLiteralMap = function (ast) { return this.visitAll(ast.values); };\r\n\t    RecursiveAstVisitor.prototype.visitLiteralPrimitive = function (ast) { return null; };\r\n\t    RecursiveAstVisitor.prototype.visitMethodCall = function (ast) {\r\n\t        ast.receiver.visit(this);\r\n\t        return this.visitAll(ast.args);\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitPrefixNot = function (ast) {\r\n\t        ast.expression.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitPropertyRead = function (ast) {\r\n\t        ast.receiver.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitPropertyWrite = function (ast) {\r\n\t        ast.receiver.visit(this);\r\n\t        ast.value.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitSafePropertyRead = function (ast) {\r\n\t        ast.receiver.visit(this);\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitSafeMethodCall = function (ast) {\r\n\t        ast.receiver.visit(this);\r\n\t        return this.visitAll(ast.args);\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitAll = function (asts) {\r\n\t        var _this = this;\r\n\t        asts.forEach(function (ast) { return ast.visit(_this); });\r\n\t        return null;\r\n\t    };\r\n\t    RecursiveAstVisitor.prototype.visitQuote = function (ast) { return null; };\r\n\t    return RecursiveAstVisitor;\r\n\t})();\r\n\texports.RecursiveAstVisitor = RecursiveAstVisitor;\r\n\tvar AstTransformer = (function () {\r\n\t    function AstTransformer() {\r\n\t    }\r\n\t    AstTransformer.prototype.visitImplicitReceiver = function (ast) { return ast; };\r\n\t    AstTransformer.prototype.visitInterpolation = function (ast) {\r\n\t        return new Interpolation(ast.strings, this.visitAll(ast.expressions));\r\n\t    };\r\n\t    AstTransformer.prototype.visitLiteralPrimitive = function (ast) { return new LiteralPrimitive(ast.value); };\r\n\t    AstTransformer.prototype.visitPropertyRead = function (ast) {\r\n\t        return new PropertyRead(ast.receiver.visit(this), ast.name, ast.getter);\r\n\t    };\r\n\t    AstTransformer.prototype.visitPropertyWrite = function (ast) {\r\n\t        return new PropertyWrite(ast.receiver.visit(this), ast.name, ast.setter, ast.value);\r\n\t    };\r\n\t    AstTransformer.prototype.visitSafePropertyRead = function (ast) {\r\n\t        return new SafePropertyRead(ast.receiver.visit(this), ast.name, ast.getter);\r\n\t    };\r\n\t    AstTransformer.prototype.visitMethodCall = function (ast) {\r\n\t        return new MethodCall(ast.receiver.visit(this), ast.name, ast.fn, this.visitAll(ast.args));\r\n\t    };\r\n\t    AstTransformer.prototype.visitSafeMethodCall = function (ast) {\r\n\t        return new SafeMethodCall(ast.receiver.visit(this), ast.name, ast.fn, this.visitAll(ast.args));\r\n\t    };\r\n\t    AstTransformer.prototype.visitFunctionCall = function (ast) {\r\n\t        return new FunctionCall(ast.target.visit(this), this.visitAll(ast.args));\r\n\t    };\r\n\t    AstTransformer.prototype.visitLiteralArray = function (ast) {\r\n\t        return new LiteralArray(this.visitAll(ast.expressions));\r\n\t    };\r\n\t    AstTransformer.prototype.visitLiteralMap = function (ast) {\r\n\t        return new LiteralMap(ast.keys, this.visitAll(ast.values));\r\n\t    };\r\n\t    AstTransformer.prototype.visitBinary = function (ast) {\r\n\t        return new Binary(ast.operation, ast.left.visit(this), ast.right.visit(this));\r\n\t    };\r\n\t    AstTransformer.prototype.visitPrefixNot = function (ast) { return new PrefixNot(ast.expression.visit(this)); };\r\n\t    AstTransformer.prototype.visitConditional = function (ast) {\r\n\t        return new Conditional(ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));\r\n\t    };\r\n\t    AstTransformer.prototype.visitPipe = function (ast) {\r\n\t        return new BindingPipe(ast.exp.visit(this), ast.name, this.visitAll(ast.args));\r\n\t    };\r\n\t    AstTransformer.prototype.visitKeyedRead = function (ast) {\r\n\t        return new KeyedRead(ast.obj.visit(this), ast.key.visit(this));\r\n\t    };\r\n\t    AstTransformer.prototype.visitKeyedWrite = function (ast) {\r\n\t        return new KeyedWrite(ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));\r\n\t    };\r\n\t    AstTransformer.prototype.visitAll = function (asts) {\r\n\t        var res = collection_1.ListWrapper.createFixedSize(asts.length);\r\n\t        for (var i = 0; i < asts.length; ++i) {\r\n\t            res[i] = asts[i].visit(this);\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    AstTransformer.prototype.visitChain = function (ast) { return new Chain(this.visitAll(ast.expressions)); };\r\n\t    AstTransformer.prototype.visitQuote = function (ast) {\r\n\t        return new Quote(ast.prefix, ast.uninterpretedExpression, ast.location);\r\n\t    };\r\n\t    return AstTransformer;\r\n\t})();\r\n\texports.AstTransformer = AstTransformer;\r\n\n\n/***/ },\n/* 128 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar metadata_1 = __webpack_require__(133);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tfunction _isDirectiveMetadata(type) {\r\n\t    return type instanceof metadata_1.DirectiveMetadata;\r\n\t}\r\n\t/*\r\n\t * Resolve a `Type` for {@link DirectiveMetadata}.\r\n\t *\r\n\t * This interface can be overridden by the application developer to create custom behavior.\r\n\t *\r\n\t * See {@link Compiler}\r\n\t */\r\n\tvar DirectiveResolver = (function () {\r\n\t    function DirectiveResolver() {\r\n\t    }\r\n\t    /**\r\n\t     * Return {@link DirectiveMetadata} for a given `Type`.\r\n\t     */\r\n\t    DirectiveResolver.prototype.resolve = function (type) {\r\n\t        var typeMetadata = reflection_1.reflector.annotations(di_1.resolveForwardRef(type));\r\n\t        if (lang_1.isPresent(typeMetadata)) {\r\n\t            var metadata = typeMetadata.find(_isDirectiveMetadata);\r\n\t            if (lang_1.isPresent(metadata)) {\r\n\t                var propertyMetadata = reflection_1.reflector.propMetadata(type);\r\n\t                return this._mergeWithPropertyMetadata(metadata, propertyMetadata, type);\r\n\t            }\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"No Directive annotation found on \" + lang_1.stringify(type));\r\n\t    };\r\n\t    DirectiveResolver.prototype._mergeWithPropertyMetadata = function (dm, propertyMetadata, directiveType) {\r\n\t        var inputs = [];\r\n\t        var outputs = [];\r\n\t        var host = {};\r\n\t        var queries = {};\r\n\t        collection_1.StringMapWrapper.forEach(propertyMetadata, function (metadata, propName) {\r\n\t            metadata.forEach(function (a) {\r\n\t                if (a instanceof metadata_1.InputMetadata) {\r\n\t                    if (lang_1.isPresent(a.bindingPropertyName)) {\r\n\t                        inputs.push(propName + \": \" + a.bindingPropertyName);\r\n\t                    }\r\n\t                    else {\r\n\t                        inputs.push(propName);\r\n\t                    }\r\n\t                }\r\n\t                if (a instanceof metadata_1.OutputMetadata) {\r\n\t                    if (lang_1.isPresent(a.bindingPropertyName)) {\r\n\t                        outputs.push(propName + \": \" + a.bindingPropertyName);\r\n\t                    }\r\n\t                    else {\r\n\t                        outputs.push(propName);\r\n\t                    }\r\n\t                }\r\n\t                if (a instanceof metadata_1.HostBindingMetadata) {\r\n\t                    if (lang_1.isPresent(a.hostPropertyName)) {\r\n\t                        host[(\"[\" + a.hostPropertyName + \"]\")] = propName;\r\n\t                    }\r\n\t                    else {\r\n\t                        host[(\"[\" + propName + \"]\")] = propName;\r\n\t                    }\r\n\t                }\r\n\t                if (a instanceof metadata_1.HostListenerMetadata) {\r\n\t                    var args = lang_1.isPresent(a.args) ? a.args.join(', ') : '';\r\n\t                    host[(\"(\" + a.eventName + \")\")] = propName + \"(\" + args + \")\";\r\n\t                }\r\n\t                if (a instanceof metadata_1.ContentChildrenMetadata) {\r\n\t                    queries[propName] = a;\r\n\t                }\r\n\t                if (a instanceof metadata_1.ViewChildrenMetadata) {\r\n\t                    queries[propName] = a;\r\n\t                }\r\n\t                if (a instanceof metadata_1.ContentChildMetadata) {\r\n\t                    queries[propName] = a;\r\n\t                }\r\n\t                if (a instanceof metadata_1.ViewChildMetadata) {\r\n\t                    queries[propName] = a;\r\n\t                }\r\n\t            });\r\n\t        });\r\n\t        return this._merge(dm, inputs, outputs, host, queries, directiveType);\r\n\t    };\r\n\t    DirectiveResolver.prototype._merge = function (dm, inputs, outputs, host, queries, directiveType) {\r\n\t        var mergedInputs = lang_1.isPresent(dm.inputs) ? collection_1.ListWrapper.concat(dm.inputs, inputs) : inputs;\r\n\t        var mergedOutputs;\r\n\t        if (lang_1.isPresent(dm.outputs)) {\r\n\t            dm.outputs.forEach(function (propName) {\r\n\t                if (collection_1.ListWrapper.contains(outputs, propName)) {\r\n\t                    throw new exceptions_1.BaseException(\"Output event '\" + propName + \"' defined multiple times in '\" + lang_1.stringify(directiveType) + \"'\");\r\n\t                }\r\n\t            });\r\n\t            mergedOutputs = collection_1.ListWrapper.concat(dm.outputs, outputs);\r\n\t        }\r\n\t        else {\r\n\t            mergedOutputs = outputs;\r\n\t        }\r\n\t        var mergedHost = lang_1.isPresent(dm.host) ? collection_1.StringMapWrapper.merge(dm.host, host) : host;\r\n\t        var mergedQueries = lang_1.isPresent(dm.queries) ? collection_1.StringMapWrapper.merge(dm.queries, queries) : queries;\r\n\t        if (dm instanceof metadata_1.ComponentMetadata) {\r\n\t            return new metadata_1.ComponentMetadata({\r\n\t                selector: dm.selector,\r\n\t                inputs: mergedInputs,\r\n\t                outputs: mergedOutputs,\r\n\t                host: mergedHost,\r\n\t                exportAs: dm.exportAs,\r\n\t                moduleId: dm.moduleId,\r\n\t                queries: mergedQueries,\r\n\t                changeDetection: dm.changeDetection,\r\n\t                providers: dm.providers,\r\n\t                viewProviders: dm.viewProviders\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            return new metadata_1.DirectiveMetadata({\r\n\t                selector: dm.selector,\r\n\t                inputs: mergedInputs,\r\n\t                outputs: mergedOutputs,\r\n\t                host: mergedHost,\r\n\t                exportAs: dm.exportAs,\r\n\t                queries: mergedQueries,\r\n\t                providers: dm.providers\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    DirectiveResolver = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DirectiveResolver);\r\n\t    return DirectiveResolver;\r\n\t})();\r\n\texports.DirectiveResolver = DirectiveResolver;\r\n\texports.CODEGEN_DIRECTIVE_RESOLVER = new DirectiveResolver();\r\n\n\n/***/ },\n/* 129 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar provider_1 = __webpack_require__(95);\r\n\tvar injector_1 = __webpack_require__(304);\r\n\tvar provider_2 = __webpack_require__(95);\r\n\tvar di_2 = __webpack_require__(203);\r\n\tvar view_type_1 = __webpack_require__(98);\r\n\tvar element_ref_1 = __webpack_require__(199);\r\n\tvar view_container_ref_1 = __webpack_require__(201);\r\n\tvar element_ref_2 = __webpack_require__(199);\r\n\tvar api_1 = __webpack_require__(134);\r\n\tvar template_ref_1 = __webpack_require__(307);\r\n\tvar directives_1 = __webpack_require__(99);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar query_list_1 = __webpack_require__(305);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar pipe_provider_1 = __webpack_require__(308);\r\n\tvar view_container_ref_2 = __webpack_require__(201);\r\n\tvar _staticKeys;\r\n\tvar StaticKeys = (function () {\r\n\t    function StaticKeys() {\r\n\t        this.templateRefId = di_1.Key.get(template_ref_1.TemplateRef).id;\r\n\t        this.viewContainerId = di_1.Key.get(view_container_ref_1.ViewContainerRef).id;\r\n\t        this.changeDetectorRefId = di_1.Key.get(change_detection_1.ChangeDetectorRef).id;\r\n\t        this.elementRefId = di_1.Key.get(element_ref_2.ElementRef).id;\r\n\t        this.rendererId = di_1.Key.get(api_1.Renderer).id;\r\n\t    }\r\n\t    StaticKeys.instance = function () {\r\n\t        if (lang_1.isBlank(_staticKeys))\r\n\t            _staticKeys = new StaticKeys();\r\n\t        return _staticKeys;\r\n\t    };\r\n\t    return StaticKeys;\r\n\t})();\r\n\texports.StaticKeys = StaticKeys;\r\n\tvar DirectiveDependency = (function (_super) {\r\n\t    __extends(DirectiveDependency, _super);\r\n\t    function DirectiveDependency(key, optional, lowerBoundVisibility, upperBoundVisibility, properties, attributeName, queryDecorator) {\r\n\t        _super.call(this, key, optional, lowerBoundVisibility, upperBoundVisibility, properties);\r\n\t        this.attributeName = attributeName;\r\n\t        this.queryDecorator = queryDecorator;\r\n\t        this._verify();\r\n\t    }\r\n\t    /** @internal */\r\n\t    DirectiveDependency.prototype._verify = function () {\r\n\t        var count = 0;\r\n\t        if (lang_1.isPresent(this.queryDecorator))\r\n\t            count++;\r\n\t        if (lang_1.isPresent(this.attributeName))\r\n\t            count++;\r\n\t        if (count > 1)\r\n\t            throw new exceptions_1.BaseException('A directive injectable can contain only one of the following @Attribute or @Query.');\r\n\t    };\r\n\t    DirectiveDependency.createFrom = function (d) {\r\n\t        return new DirectiveDependency(d.key, d.optional, d.lowerBoundVisibility, d.upperBoundVisibility, d.properties, DirectiveDependency._attributeName(d.properties), DirectiveDependency._query(d.properties));\r\n\t    };\r\n\t    /** @internal */\r\n\t    DirectiveDependency._attributeName = function (properties) {\r\n\t        var p = properties.find(function (p) { return p instanceof di_2.AttributeMetadata; });\r\n\t        return lang_1.isPresent(p) ? p.attributeName : null;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DirectiveDependency._query = function (properties) {\r\n\t        return properties.find(function (p) { return p instanceof di_2.QueryMetadata; });\r\n\t    };\r\n\t    return DirectiveDependency;\r\n\t})(di_1.Dependency);\r\n\texports.DirectiveDependency = DirectiveDependency;\r\n\tvar DirectiveProvider = (function (_super) {\r\n\t    __extends(DirectiveProvider, _super);\r\n\t    function DirectiveProvider(key, factory, deps, isComponent, providers, viewProviders, queries) {\r\n\t        _super.call(this, key, [new provider_2.ResolvedFactory(factory, deps)], false);\r\n\t        this.isComponent = isComponent;\r\n\t        this.providers = providers;\r\n\t        this.viewProviders = viewProviders;\r\n\t        this.queries = queries;\r\n\t    }\r\n\t    Object.defineProperty(DirectiveProvider.prototype, \"displayName\", {\r\n\t        get: function () { return this.key.displayName; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DirectiveProvider.createFromType = function (type, meta) {\r\n\t        var provider = new di_1.Provider(type, { useClass: type });\r\n\t        if (lang_1.isBlank(meta)) {\r\n\t            meta = new directives_1.DirectiveMetadata();\r\n\t        }\r\n\t        var rb = provider_2.resolveProvider(provider);\r\n\t        var rf = rb.resolvedFactories[0];\r\n\t        var deps = rf.dependencies.map(DirectiveDependency.createFrom);\r\n\t        var isComponent = meta instanceof directives_1.ComponentMetadata;\r\n\t        var resolvedProviders = lang_1.isPresent(meta.providers) ? di_1.Injector.resolve(meta.providers) : null;\r\n\t        var resolvedViewProviders = meta instanceof directives_1.ComponentMetadata && lang_1.isPresent(meta.viewProviders) ?\r\n\t            di_1.Injector.resolve(meta.viewProviders) :\r\n\t            null;\r\n\t        var queries = [];\r\n\t        if (lang_1.isPresent(meta.queries)) {\r\n\t            collection_1.StringMapWrapper.forEach(meta.queries, function (meta, fieldName) {\r\n\t                var setter = reflection_1.reflector.setter(fieldName);\r\n\t                queries.push(new QueryMetadataWithSetter(setter, meta));\r\n\t            });\r\n\t        }\r\n\t        // queries passed into the constructor.\r\n\t        // TODO: remove this after constructor queries are no longer supported\r\n\t        deps.forEach(function (d) {\r\n\t            if (lang_1.isPresent(d.queryDecorator)) {\r\n\t                queries.push(new QueryMetadataWithSetter(null, d.queryDecorator));\r\n\t            }\r\n\t        });\r\n\t        return new DirectiveProvider(rb.key, rf.factory, deps, isComponent, resolvedProviders, resolvedViewProviders, queries);\r\n\t    };\r\n\t    return DirectiveProvider;\r\n\t})(provider_2.ResolvedProvider_);\r\n\texports.DirectiveProvider = DirectiveProvider;\r\n\tvar QueryMetadataWithSetter = (function () {\r\n\t    function QueryMetadataWithSetter(setter, metadata) {\r\n\t        this.setter = setter;\r\n\t        this.metadata = metadata;\r\n\t    }\r\n\t    return QueryMetadataWithSetter;\r\n\t})();\r\n\texports.QueryMetadataWithSetter = QueryMetadataWithSetter;\r\n\tfunction setProvidersVisibility(providers, visibility, result) {\r\n\t    for (var i = 0; i < providers.length; i++) {\r\n\t        result.set(providers[i].key.id, visibility);\r\n\t    }\r\n\t}\r\n\tvar AppProtoElement = (function () {\r\n\t    function AppProtoElement(firstProviderIsComponent, index, attributes, pwvs, protoQueryRefs, directiveVariableBindings) {\r\n\t        this.firstProviderIsComponent = firstProviderIsComponent;\r\n\t        this.index = index;\r\n\t        this.attributes = attributes;\r\n\t        this.protoQueryRefs = protoQueryRefs;\r\n\t        this.directiveVariableBindings = directiveVariableBindings;\r\n\t        var length = pwvs.length;\r\n\t        if (length > 0) {\r\n\t            this.protoInjector = new injector_1.ProtoInjector(pwvs);\r\n\t        }\r\n\t        else {\r\n\t            this.protoInjector = null;\r\n\t            this.protoQueryRefs = [];\r\n\t        }\r\n\t    }\r\n\t    AppProtoElement.create = function (metadataCache, index, attributes, directiveTypes, directiveVariableBindings) {\r\n\t        var componentDirProvider = null;\r\n\t        var mergedProvidersMap = new Map();\r\n\t        var providerVisibilityMap = new Map();\r\n\t        var providers = collection_1.ListWrapper.createGrowableSize(directiveTypes.length);\r\n\t        var protoQueryRefs = [];\r\n\t        for (var i = 0; i < directiveTypes.length; i++) {\r\n\t            var dirProvider = metadataCache.getResolvedDirectiveMetadata(directiveTypes[i]);\r\n\t            providers[i] = new injector_1.ProviderWithVisibility(dirProvider, dirProvider.isComponent ? injector_1.Visibility.PublicAndPrivate : injector_1.Visibility.Public);\r\n\t            if (dirProvider.isComponent) {\r\n\t                componentDirProvider = dirProvider;\r\n\t            }\r\n\t            else {\r\n\t                if (lang_1.isPresent(dirProvider.providers)) {\r\n\t                    provider_1.mergeResolvedProviders(dirProvider.providers, mergedProvidersMap);\r\n\t                    setProvidersVisibility(dirProvider.providers, injector_1.Visibility.Public, providerVisibilityMap);\r\n\t                }\r\n\t            }\r\n\t            if (lang_1.isPresent(dirProvider.viewProviders)) {\r\n\t                provider_1.mergeResolvedProviders(dirProvider.viewProviders, mergedProvidersMap);\r\n\t                setProvidersVisibility(dirProvider.viewProviders, injector_1.Visibility.Private, providerVisibilityMap);\r\n\t            }\r\n\t            for (var queryIdx = 0; queryIdx < dirProvider.queries.length; queryIdx++) {\r\n\t                var q = dirProvider.queries[queryIdx];\r\n\t                protoQueryRefs.push(new ProtoQueryRef(i, q.setter, q.metadata));\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(componentDirProvider) && lang_1.isPresent(componentDirProvider.providers)) {\r\n\t            // directive providers need to be prioritized over component providers\r\n\t            provider_1.mergeResolvedProviders(componentDirProvider.providers, mergedProvidersMap);\r\n\t            setProvidersVisibility(componentDirProvider.providers, injector_1.Visibility.Public, providerVisibilityMap);\r\n\t        }\r\n\t        mergedProvidersMap.forEach(function (provider, _) {\r\n\t            providers.push(new injector_1.ProviderWithVisibility(provider, providerVisibilityMap.get(provider.key.id)));\r\n\t        });\r\n\t        return new AppProtoElement(lang_1.isPresent(componentDirProvider), index, attributes, providers, protoQueryRefs, directiveVariableBindings);\r\n\t    };\r\n\t    AppProtoElement.prototype.getProviderAtIndex = function (index) { return this.protoInjector.getProviderAtIndex(index); };\r\n\t    return AppProtoElement;\r\n\t})();\r\n\texports.AppProtoElement = AppProtoElement;\r\n\tvar _Context = (function () {\r\n\t    function _Context(element, componentElement, injector) {\r\n\t        this.element = element;\r\n\t        this.componentElement = componentElement;\r\n\t        this.injector = injector;\r\n\t    }\r\n\t    return _Context;\r\n\t})();\r\n\tvar InjectorWithHostBoundary = (function () {\r\n\t    function InjectorWithHostBoundary(injector, hostInjectorBoundary) {\r\n\t        this.injector = injector;\r\n\t        this.hostInjectorBoundary = hostInjectorBoundary;\r\n\t    }\r\n\t    return InjectorWithHostBoundary;\r\n\t})();\r\n\texports.InjectorWithHostBoundary = InjectorWithHostBoundary;\r\n\tvar AppElement = (function () {\r\n\t    function AppElement(proto, parentView, parent, nativeElement, embeddedViewFactory) {\r\n\t        var _this = this;\r\n\t        this.proto = proto;\r\n\t        this.parentView = parentView;\r\n\t        this.parent = parent;\r\n\t        this.nativeElement = nativeElement;\r\n\t        this.embeddedViewFactory = embeddedViewFactory;\r\n\t        this.nestedViews = null;\r\n\t        this.componentView = null;\r\n\t        this.ref = new element_ref_1.ElementRef_(this);\r\n\t        var parentInjector = lang_1.isPresent(parent) ? parent._injector : parentView.parentInjector;\r\n\t        if (lang_1.isPresent(this.proto.protoInjector)) {\r\n\t            var isBoundary;\r\n\t            if (lang_1.isPresent(parent) && lang_1.isPresent(parent.proto.protoInjector)) {\r\n\t                isBoundary = false;\r\n\t            }\r\n\t            else {\r\n\t                isBoundary = parentView.hostInjectorBoundary;\r\n\t            }\r\n\t            this._queryStrategy = this._buildQueryStrategy();\r\n\t            this._injector = new di_1.Injector(this.proto.protoInjector, parentInjector, isBoundary, this, function () { return _this._debugContext(); });\r\n\t            // we couple ourselves to the injector strategy to avoid polymorphic calls\r\n\t            var injectorStrategy = this._injector.internalStrategy;\r\n\t            this._strategy = injectorStrategy instanceof injector_1.InjectorInlineStrategy ?\r\n\t                new ElementDirectiveInlineStrategy(injectorStrategy, this) :\r\n\t                new ElementDirectiveDynamicStrategy(injectorStrategy, this);\r\n\t            this._strategy.init();\r\n\t        }\r\n\t        else {\r\n\t            this._queryStrategy = null;\r\n\t            this._injector = parentInjector;\r\n\t            this._strategy = null;\r\n\t        }\r\n\t    }\r\n\t    AppElement.getViewParentInjector = function (parentViewType, containerAppElement, imperativelyCreatedProviders, rootInjector) {\r\n\t        var parentInjector;\r\n\t        var hostInjectorBoundary;\r\n\t        switch (parentViewType) {\r\n\t            case view_type_1.ViewType.COMPONENT:\r\n\t                parentInjector = containerAppElement._injector;\r\n\t                hostInjectorBoundary = true;\r\n\t                break;\r\n\t            case view_type_1.ViewType.EMBEDDED:\r\n\t                parentInjector = lang_1.isPresent(containerAppElement.proto.protoInjector) ?\r\n\t                    containerAppElement._injector.parent :\r\n\t                    containerAppElement._injector;\r\n\t                hostInjectorBoundary = containerAppElement._injector.hostBoundary;\r\n\t                break;\r\n\t            case view_type_1.ViewType.HOST:\r\n\t                if (lang_1.isPresent(containerAppElement)) {\r\n\t                    // host view is attached to a container\r\n\t                    parentInjector = lang_1.isPresent(containerAppElement.proto.protoInjector) ?\r\n\t                        containerAppElement._injector.parent :\r\n\t                        containerAppElement._injector;\r\n\t                    if (lang_1.isPresent(imperativelyCreatedProviders)) {\r\n\t                        var imperativeProvidersWithVisibility = imperativelyCreatedProviders.map(function (p) { return new injector_1.ProviderWithVisibility(p, injector_1.Visibility.Public); });\r\n\t                        // The imperative injector is similar to having an element between\r\n\t                        // the dynamic-loaded component and its parent => no boundary between\r\n\t                        // the component and imperativelyCreatedInjector.\r\n\t                        parentInjector = new di_1.Injector(new injector_1.ProtoInjector(imperativeProvidersWithVisibility), parentInjector, true, null, null);\r\n\t                        hostInjectorBoundary = false;\r\n\t                    }\r\n\t                    else {\r\n\t                        hostInjectorBoundary = containerAppElement._injector.hostBoundary;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    // bootstrap\r\n\t                    parentInjector = rootInjector;\r\n\t                    hostInjectorBoundary = true;\r\n\t                }\r\n\t                break;\r\n\t        }\r\n\t        return new InjectorWithHostBoundary(parentInjector, hostInjectorBoundary);\r\n\t    };\r\n\t    AppElement.prototype.attachComponentView = function (componentView) { this.componentView = componentView; };\r\n\t    AppElement.prototype._debugContext = function () {\r\n\t        var c = this.parentView.getDebugContext(this, null, null);\r\n\t        return lang_1.isPresent(c) ? new _Context(c.element, c.componentElement, c.injector) : null;\r\n\t    };\r\n\t    AppElement.prototype.hasVariableBinding = function (name) {\r\n\t        var vb = this.proto.directiveVariableBindings;\r\n\t        return lang_1.isPresent(vb) && collection_1.StringMapWrapper.contains(vb, name);\r\n\t    };\r\n\t    AppElement.prototype.getVariableBinding = function (name) {\r\n\t        var index = this.proto.directiveVariableBindings[name];\r\n\t        return lang_1.isPresent(index) ? this.getDirectiveAtIndex(index) : this.getElementRef();\r\n\t    };\r\n\t    AppElement.prototype.get = function (token) { return this._injector.get(token); };\r\n\t    AppElement.prototype.hasDirective = function (type) { return lang_1.isPresent(this._injector.getOptional(type)); };\r\n\t    AppElement.prototype.getComponent = function () { return lang_1.isPresent(this._strategy) ? this._strategy.getComponent() : null; };\r\n\t    AppElement.prototype.getInjector = function () { return this._injector; };\r\n\t    AppElement.prototype.getElementRef = function () { return this.ref; };\r\n\t    AppElement.prototype.getViewContainerRef = function () { return new view_container_ref_2.ViewContainerRef_(this); };\r\n\t    AppElement.prototype.getTemplateRef = function () {\r\n\t        if (lang_1.isPresent(this.embeddedViewFactory)) {\r\n\t            return new template_ref_1.TemplateRef_(this.ref);\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    AppElement.prototype.getDependency = function (injector, provider, dep) {\r\n\t        if (provider instanceof DirectiveProvider) {\r\n\t            var dirDep = dep;\r\n\t            if (lang_1.isPresent(dirDep.attributeName))\r\n\t                return this._buildAttribute(dirDep);\r\n\t            if (lang_1.isPresent(dirDep.queryDecorator))\r\n\t                return this._queryStrategy.findQuery(dirDep.queryDecorator).list;\r\n\t            if (dirDep.key.id === StaticKeys.instance().changeDetectorRefId) {\r\n\t                // We provide the component's view change detector to components and\r\n\t                // the surrounding component's change detector to directives.\r\n\t                if (this.proto.firstProviderIsComponent) {\r\n\t                    // Note: The component view is not yet created when\r\n\t                    // this method is called!\r\n\t                    return new _ComponentViewChangeDetectorRef(this);\r\n\t                }\r\n\t                else {\r\n\t                    return this.parentView.changeDetector.ref;\r\n\t                }\r\n\t            }\r\n\t            if (dirDep.key.id === StaticKeys.instance().elementRefId) {\r\n\t                return this.getElementRef();\r\n\t            }\r\n\t            if (dirDep.key.id === StaticKeys.instance().viewContainerId) {\r\n\t                return this.getViewContainerRef();\r\n\t            }\r\n\t            if (dirDep.key.id === StaticKeys.instance().templateRefId) {\r\n\t                var tr = this.getTemplateRef();\r\n\t                if (lang_1.isBlank(tr) && !dirDep.optional) {\r\n\t                    throw new di_1.NoProviderError(null, dirDep.key);\r\n\t                }\r\n\t                return tr;\r\n\t            }\r\n\t            if (dirDep.key.id === StaticKeys.instance().rendererId) {\r\n\t                return this.parentView.renderer;\r\n\t            }\r\n\t        }\r\n\t        else if (provider instanceof pipe_provider_1.PipeProvider) {\r\n\t            if (dep.key.id === StaticKeys.instance().changeDetectorRefId) {\r\n\t                // We provide the component's view change detector to components and\r\n\t                // the surrounding component's change detector to directives.\r\n\t                if (this.proto.firstProviderIsComponent) {\r\n\t                    // Note: The component view is not yet created when\r\n\t                    // this method is called!\r\n\t                    return new _ComponentViewChangeDetectorRef(this);\r\n\t                }\r\n\t                else {\r\n\t                    return this.parentView.changeDetector;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return injector_1.UNDEFINED;\r\n\t    };\r\n\t    AppElement.prototype._buildAttribute = function (dep) {\r\n\t        var attributes = this.proto.attributes;\r\n\t        if (lang_1.isPresent(attributes) && collection_1.StringMapWrapper.contains(attributes, dep.attributeName)) {\r\n\t            return attributes[dep.attributeName];\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    AppElement.prototype.addDirectivesMatchingQuery = function (query, list) {\r\n\t        var templateRef = this.getTemplateRef();\r\n\t        if (query.selector === template_ref_1.TemplateRef && lang_1.isPresent(templateRef)) {\r\n\t            list.push(templateRef);\r\n\t        }\r\n\t        if (this._strategy != null) {\r\n\t            this._strategy.addDirectivesMatchingQuery(query, list);\r\n\t        }\r\n\t    };\r\n\t    AppElement.prototype._buildQueryStrategy = function () {\r\n\t        if (this.proto.protoQueryRefs.length === 0) {\r\n\t            return _emptyQueryStrategy;\r\n\t        }\r\n\t        else if (this.proto.protoQueryRefs.length <=\r\n\t            InlineQueryStrategy.NUMBER_OF_SUPPORTED_QUERIES) {\r\n\t            return new InlineQueryStrategy(this);\r\n\t        }\r\n\t        else {\r\n\t            return new DynamicQueryStrategy(this);\r\n\t        }\r\n\t    };\r\n\t    AppElement.prototype.getDirectiveAtIndex = function (index) { return this._injector.getAt(index); };\r\n\t    AppElement.prototype.ngAfterViewChecked = function () {\r\n\t        if (lang_1.isPresent(this._queryStrategy))\r\n\t            this._queryStrategy.updateViewQueries();\r\n\t    };\r\n\t    AppElement.prototype.ngAfterContentChecked = function () {\r\n\t        if (lang_1.isPresent(this._queryStrategy))\r\n\t            this._queryStrategy.updateContentQueries();\r\n\t    };\r\n\t    AppElement.prototype.traverseAndSetQueriesAsDirty = function () {\r\n\t        var inj = this;\r\n\t        while (lang_1.isPresent(inj)) {\r\n\t            inj._setQueriesAsDirty();\r\n\t            if (lang_1.isBlank(inj.parent) && inj.parentView.proto.type === view_type_1.ViewType.EMBEDDED) {\r\n\t                inj = inj.parentView.containerAppElement;\r\n\t            }\r\n\t            else {\r\n\t                inj = inj.parent;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AppElement.prototype._setQueriesAsDirty = function () {\r\n\t        if (lang_1.isPresent(this._queryStrategy)) {\r\n\t            this._queryStrategy.setContentQueriesAsDirty();\r\n\t        }\r\n\t        if (this.parentView.proto.type === view_type_1.ViewType.COMPONENT) {\r\n\t            this.parentView.containerAppElement._queryStrategy.setViewQueriesAsDirty();\r\n\t        }\r\n\t    };\r\n\t    return AppElement;\r\n\t})();\r\n\texports.AppElement = AppElement;\r\n\tvar _EmptyQueryStrategy = (function () {\r\n\t    function _EmptyQueryStrategy() {\r\n\t    }\r\n\t    _EmptyQueryStrategy.prototype.setContentQueriesAsDirty = function () { };\r\n\t    _EmptyQueryStrategy.prototype.setViewQueriesAsDirty = function () { };\r\n\t    _EmptyQueryStrategy.prototype.updateContentQueries = function () { };\r\n\t    _EmptyQueryStrategy.prototype.updateViewQueries = function () { };\r\n\t    _EmptyQueryStrategy.prototype.findQuery = function (query) {\r\n\t        throw new exceptions_1.BaseException(\"Cannot find query for directive \" + query + \".\");\r\n\t    };\r\n\t    return _EmptyQueryStrategy;\r\n\t})();\r\n\tvar _emptyQueryStrategy = new _EmptyQueryStrategy();\r\n\tvar InlineQueryStrategy = (function () {\r\n\t    function InlineQueryStrategy(ei) {\r\n\t        var protoRefs = ei.proto.protoQueryRefs;\r\n\t        if (protoRefs.length > 0)\r\n\t            this.query0 = new QueryRef(protoRefs[0], ei);\r\n\t        if (protoRefs.length > 1)\r\n\t            this.query1 = new QueryRef(protoRefs[1], ei);\r\n\t        if (protoRefs.length > 2)\r\n\t            this.query2 = new QueryRef(protoRefs[2], ei);\r\n\t    }\r\n\t    InlineQueryStrategy.prototype.setContentQueriesAsDirty = function () {\r\n\t        if (lang_1.isPresent(this.query0) && !this.query0.isViewQuery)\r\n\t            this.query0.dirty = true;\r\n\t        if (lang_1.isPresent(this.query1) && !this.query1.isViewQuery)\r\n\t            this.query1.dirty = true;\r\n\t        if (lang_1.isPresent(this.query2) && !this.query2.isViewQuery)\r\n\t            this.query2.dirty = true;\r\n\t    };\r\n\t    InlineQueryStrategy.prototype.setViewQueriesAsDirty = function () {\r\n\t        if (lang_1.isPresent(this.query0) && this.query0.isViewQuery)\r\n\t            this.query0.dirty = true;\r\n\t        if (lang_1.isPresent(this.query1) && this.query1.isViewQuery)\r\n\t            this.query1.dirty = true;\r\n\t        if (lang_1.isPresent(this.query2) && this.query2.isViewQuery)\r\n\t            this.query2.dirty = true;\r\n\t    };\r\n\t    InlineQueryStrategy.prototype.updateContentQueries = function () {\r\n\t        if (lang_1.isPresent(this.query0) && !this.query0.isViewQuery) {\r\n\t            this.query0.update();\r\n\t        }\r\n\t        if (lang_1.isPresent(this.query1) && !this.query1.isViewQuery) {\r\n\t            this.query1.update();\r\n\t        }\r\n\t        if (lang_1.isPresent(this.query2) && !this.query2.isViewQuery) {\r\n\t            this.query2.update();\r\n\t        }\r\n\t    };\r\n\t    InlineQueryStrategy.prototype.updateViewQueries = function () {\r\n\t        if (lang_1.isPresent(this.query0) && this.query0.isViewQuery) {\r\n\t            this.query0.update();\r\n\t        }\r\n\t        if (lang_1.isPresent(this.query1) && this.query1.isViewQuery) {\r\n\t            this.query1.update();\r\n\t        }\r\n\t        if (lang_1.isPresent(this.query2) && this.query2.isViewQuery) {\r\n\t            this.query2.update();\r\n\t        }\r\n\t    };\r\n\t    InlineQueryStrategy.prototype.findQuery = function (query) {\r\n\t        if (lang_1.isPresent(this.query0) && this.query0.protoQueryRef.query === query) {\r\n\t            return this.query0;\r\n\t        }\r\n\t        if (lang_1.isPresent(this.query1) && this.query1.protoQueryRef.query === query) {\r\n\t            return this.query1;\r\n\t        }\r\n\t        if (lang_1.isPresent(this.query2) && this.query2.protoQueryRef.query === query) {\r\n\t            return this.query2;\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"Cannot find query for directive \" + query + \".\");\r\n\t    };\r\n\t    InlineQueryStrategy.NUMBER_OF_SUPPORTED_QUERIES = 3;\r\n\t    return InlineQueryStrategy;\r\n\t})();\r\n\tvar DynamicQueryStrategy = (function () {\r\n\t    function DynamicQueryStrategy(ei) {\r\n\t        this.queries = ei.proto.protoQueryRefs.map(function (p) { return new QueryRef(p, ei); });\r\n\t    }\r\n\t    DynamicQueryStrategy.prototype.setContentQueriesAsDirty = function () {\r\n\t        for (var i = 0; i < this.queries.length; ++i) {\r\n\t            var q = this.queries[i];\r\n\t            if (!q.isViewQuery)\r\n\t                q.dirty = true;\r\n\t        }\r\n\t    };\r\n\t    DynamicQueryStrategy.prototype.setViewQueriesAsDirty = function () {\r\n\t        for (var i = 0; i < this.queries.length; ++i) {\r\n\t            var q = this.queries[i];\r\n\t            if (q.isViewQuery)\r\n\t                q.dirty = true;\r\n\t        }\r\n\t    };\r\n\t    DynamicQueryStrategy.prototype.updateContentQueries = function () {\r\n\t        for (var i = 0; i < this.queries.length; ++i) {\r\n\t            var q = this.queries[i];\r\n\t            if (!q.isViewQuery) {\r\n\t                q.update();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DynamicQueryStrategy.prototype.updateViewQueries = function () {\r\n\t        for (var i = 0; i < this.queries.length; ++i) {\r\n\t            var q = this.queries[i];\r\n\t            if (q.isViewQuery) {\r\n\t                q.update();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DynamicQueryStrategy.prototype.findQuery = function (query) {\r\n\t        for (var i = 0; i < this.queries.length; ++i) {\r\n\t            var q = this.queries[i];\r\n\t            if (q.protoQueryRef.query === query) {\r\n\t                return q;\r\n\t            }\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"Cannot find query for directive \" + query + \".\");\r\n\t    };\r\n\t    return DynamicQueryStrategy;\r\n\t})();\r\n\t/**\r\n\t * Strategy used by the `ElementInjector` when the number of providers is 10 or less.\r\n\t * In such a case, inlining fields is beneficial for performances.\r\n\t */\r\n\tvar ElementDirectiveInlineStrategy = (function () {\r\n\t    function ElementDirectiveInlineStrategy(injectorStrategy, _ei) {\r\n\t        this.injectorStrategy = injectorStrategy;\r\n\t        this._ei = _ei;\r\n\t    }\r\n\t    ElementDirectiveInlineStrategy.prototype.init = function () {\r\n\t        var i = this.injectorStrategy;\r\n\t        var p = i.protoStrategy;\r\n\t        i.resetConstructionCounter();\r\n\t        if (p.provider0 instanceof DirectiveProvider && lang_1.isPresent(p.keyId0) && i.obj0 === injector_1.UNDEFINED)\r\n\t            i.obj0 = i.instantiateProvider(p.provider0, p.visibility0);\r\n\t        if (p.provider1 instanceof DirectiveProvider && lang_1.isPresent(p.keyId1) && i.obj1 === injector_1.UNDEFINED)\r\n\t            i.obj1 = i.instantiateProvider(p.provider1, p.visibility1);\r\n\t        if (p.provider2 instanceof DirectiveProvider && lang_1.isPresent(p.keyId2) && i.obj2 === injector_1.UNDEFINED)\r\n\t            i.obj2 = i.instantiateProvider(p.provider2, p.visibility2);\r\n\t        if (p.provider3 instanceof DirectiveProvider && lang_1.isPresent(p.keyId3) && i.obj3 === injector_1.UNDEFINED)\r\n\t            i.obj3 = i.instantiateProvider(p.provider3, p.visibility3);\r\n\t        if (p.provider4 instanceof DirectiveProvider && lang_1.isPresent(p.keyId4) && i.obj4 === injector_1.UNDEFINED)\r\n\t            i.obj4 = i.instantiateProvider(p.provider4, p.visibility4);\r\n\t        if (p.provider5 instanceof DirectiveProvider && lang_1.isPresent(p.keyId5) && i.obj5 === injector_1.UNDEFINED)\r\n\t            i.obj5 = i.instantiateProvider(p.provider5, p.visibility5);\r\n\t        if (p.provider6 instanceof DirectiveProvider && lang_1.isPresent(p.keyId6) && i.obj6 === injector_1.UNDEFINED)\r\n\t            i.obj6 = i.instantiateProvider(p.provider6, p.visibility6);\r\n\t        if (p.provider7 instanceof DirectiveProvider && lang_1.isPresent(p.keyId7) && i.obj7 === injector_1.UNDEFINED)\r\n\t            i.obj7 = i.instantiateProvider(p.provider7, p.visibility7);\r\n\t        if (p.provider8 instanceof DirectiveProvider && lang_1.isPresent(p.keyId8) && i.obj8 === injector_1.UNDEFINED)\r\n\t            i.obj8 = i.instantiateProvider(p.provider8, p.visibility8);\r\n\t        if (p.provider9 instanceof DirectiveProvider && lang_1.isPresent(p.keyId9) && i.obj9 === injector_1.UNDEFINED)\r\n\t            i.obj9 = i.instantiateProvider(p.provider9, p.visibility9);\r\n\t    };\r\n\t    ElementDirectiveInlineStrategy.prototype.getComponent = function () { return this.injectorStrategy.obj0; };\r\n\t    ElementDirectiveInlineStrategy.prototype.isComponentKey = function (key) {\r\n\t        return this._ei.proto.firstProviderIsComponent && lang_1.isPresent(key) &&\r\n\t            key.id === this.injectorStrategy.protoStrategy.keyId0;\r\n\t    };\r\n\t    ElementDirectiveInlineStrategy.prototype.addDirectivesMatchingQuery = function (query, list) {\r\n\t        var i = this.injectorStrategy;\r\n\t        var p = i.protoStrategy;\r\n\t        if (lang_1.isPresent(p.provider0) && p.provider0.key.token === query.selector) {\r\n\t            if (i.obj0 === injector_1.UNDEFINED)\r\n\t                i.obj0 = i.instantiateProvider(p.provider0, p.visibility0);\r\n\t            list.push(i.obj0);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider1) && p.provider1.key.token === query.selector) {\r\n\t            if (i.obj1 === injector_1.UNDEFINED)\r\n\t                i.obj1 = i.instantiateProvider(p.provider1, p.visibility1);\r\n\t            list.push(i.obj1);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider2) && p.provider2.key.token === query.selector) {\r\n\t            if (i.obj2 === injector_1.UNDEFINED)\r\n\t                i.obj2 = i.instantiateProvider(p.provider2, p.visibility2);\r\n\t            list.push(i.obj2);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider3) && p.provider3.key.token === query.selector) {\r\n\t            if (i.obj3 === injector_1.UNDEFINED)\r\n\t                i.obj3 = i.instantiateProvider(p.provider3, p.visibility3);\r\n\t            list.push(i.obj3);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider4) && p.provider4.key.token === query.selector) {\r\n\t            if (i.obj4 === injector_1.UNDEFINED)\r\n\t                i.obj4 = i.instantiateProvider(p.provider4, p.visibility4);\r\n\t            list.push(i.obj4);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider5) && p.provider5.key.token === query.selector) {\r\n\t            if (i.obj5 === injector_1.UNDEFINED)\r\n\t                i.obj5 = i.instantiateProvider(p.provider5, p.visibility5);\r\n\t            list.push(i.obj5);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider6) && p.provider6.key.token === query.selector) {\r\n\t            if (i.obj6 === injector_1.UNDEFINED)\r\n\t                i.obj6 = i.instantiateProvider(p.provider6, p.visibility6);\r\n\t            list.push(i.obj6);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider7) && p.provider7.key.token === query.selector) {\r\n\t            if (i.obj7 === injector_1.UNDEFINED)\r\n\t                i.obj7 = i.instantiateProvider(p.provider7, p.visibility7);\r\n\t            list.push(i.obj7);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider8) && p.provider8.key.token === query.selector) {\r\n\t            if (i.obj8 === injector_1.UNDEFINED)\r\n\t                i.obj8 = i.instantiateProvider(p.provider8, p.visibility8);\r\n\t            list.push(i.obj8);\r\n\t        }\r\n\t        if (lang_1.isPresent(p.provider9) && p.provider9.key.token === query.selector) {\r\n\t            if (i.obj9 === injector_1.UNDEFINED)\r\n\t                i.obj9 = i.instantiateProvider(p.provider9, p.visibility9);\r\n\t            list.push(i.obj9);\r\n\t        }\r\n\t    };\r\n\t    return ElementDirectiveInlineStrategy;\r\n\t})();\r\n\t/**\r\n\t * Strategy used by the `ElementInjector` when the number of bindings is 11 or more.\r\n\t * In such a case, there are too many fields to inline (see ElementInjectorInlineStrategy).\r\n\t */\r\n\tvar ElementDirectiveDynamicStrategy = (function () {\r\n\t    function ElementDirectiveDynamicStrategy(injectorStrategy, _ei) {\r\n\t        this.injectorStrategy = injectorStrategy;\r\n\t        this._ei = _ei;\r\n\t    }\r\n\t    ElementDirectiveDynamicStrategy.prototype.init = function () {\r\n\t        var inj = this.injectorStrategy;\r\n\t        var p = inj.protoStrategy;\r\n\t        inj.resetConstructionCounter();\r\n\t        for (var i = 0; i < p.keyIds.length; i++) {\r\n\t            if (p.providers[i] instanceof DirectiveProvider && lang_1.isPresent(p.keyIds[i]) &&\r\n\t                inj.objs[i] === injector_1.UNDEFINED) {\r\n\t                inj.objs[i] = inj.instantiateProvider(p.providers[i], p.visibilities[i]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ElementDirectiveDynamicStrategy.prototype.getComponent = function () { return this.injectorStrategy.objs[0]; };\r\n\t    ElementDirectiveDynamicStrategy.prototype.isComponentKey = function (key) {\r\n\t        var p = this.injectorStrategy.protoStrategy;\r\n\t        return this._ei.proto.firstProviderIsComponent && lang_1.isPresent(key) && key.id === p.keyIds[0];\r\n\t    };\r\n\t    ElementDirectiveDynamicStrategy.prototype.addDirectivesMatchingQuery = function (query, list) {\r\n\t        var ist = this.injectorStrategy;\r\n\t        var p = ist.protoStrategy;\r\n\t        for (var i = 0; i < p.providers.length; i++) {\r\n\t            if (p.providers[i].key.token === query.selector) {\r\n\t                if (ist.objs[i] === injector_1.UNDEFINED) {\r\n\t                    ist.objs[i] = ist.instantiateProvider(p.providers[i], p.visibilities[i]);\r\n\t                }\r\n\t                list.push(ist.objs[i]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    return ElementDirectiveDynamicStrategy;\r\n\t})();\r\n\tvar ProtoQueryRef = (function () {\r\n\t    function ProtoQueryRef(dirIndex, setter, query) {\r\n\t        this.dirIndex = dirIndex;\r\n\t        this.setter = setter;\r\n\t        this.query = query;\r\n\t    }\r\n\t    Object.defineProperty(ProtoQueryRef.prototype, \"usesPropertySyntax\", {\r\n\t        get: function () { return lang_1.isPresent(this.setter); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ProtoQueryRef;\r\n\t})();\r\n\texports.ProtoQueryRef = ProtoQueryRef;\r\n\tvar QueryRef = (function () {\r\n\t    function QueryRef(protoQueryRef, originator) {\r\n\t        this.protoQueryRef = protoQueryRef;\r\n\t        this.originator = originator;\r\n\t        this.list = new query_list_1.QueryList();\r\n\t        this.dirty = true;\r\n\t    }\r\n\t    Object.defineProperty(QueryRef.prototype, \"isViewQuery\", {\r\n\t        get: function () { return this.protoQueryRef.query.isViewQuery; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    QueryRef.prototype.update = function () {\r\n\t        if (!this.dirty)\r\n\t            return;\r\n\t        this._update();\r\n\t        this.dirty = false;\r\n\t        // TODO delete the check once only field queries are supported\r\n\t        if (this.protoQueryRef.usesPropertySyntax) {\r\n\t            var dir = this.originator.getDirectiveAtIndex(this.protoQueryRef.dirIndex);\r\n\t            if (this.protoQueryRef.query.first) {\r\n\t                this.protoQueryRef.setter(dir, this.list.length > 0 ? this.list.first : null);\r\n\t            }\r\n\t            else {\r\n\t                this.protoQueryRef.setter(dir, this.list);\r\n\t            }\r\n\t        }\r\n\t        this.list.notifyOnChanges();\r\n\t    };\r\n\t    QueryRef.prototype._update = function () {\r\n\t        var aggregator = [];\r\n\t        if (this.protoQueryRef.query.isViewQuery) {\r\n\t            // intentionally skipping originator for view queries.\r\n\t            var nestedView = this.originator.componentView;\r\n\t            if (lang_1.isPresent(nestedView))\r\n\t                this._visitView(nestedView, aggregator);\r\n\t        }\r\n\t        else {\r\n\t            this._visit(this.originator, aggregator);\r\n\t        }\r\n\t        this.list.reset(aggregator);\r\n\t    };\r\n\t    ;\r\n\t    QueryRef.prototype._visit = function (inj, aggregator) {\r\n\t        var view = inj.parentView;\r\n\t        var startIdx = inj.proto.index;\r\n\t        for (var i = startIdx; i < view.appElements.length; i++) {\r\n\t            var curInj = view.appElements[i];\r\n\t            // The first injector after inj, that is outside the subtree rooted at\r\n\t            // inj has to have a null parent or a parent that is an ancestor of inj.\r\n\t            if (i > startIdx && (lang_1.isBlank(curInj.parent) || curInj.parent.proto.index < startIdx)) {\r\n\t                break;\r\n\t            }\r\n\t            if (!this.protoQueryRef.query.descendants &&\r\n\t                !(curInj.parent == this.originator || curInj == this.originator))\r\n\t                continue;\r\n\t            // We visit the view container(VC) views right after the injector that contains\r\n\t            // the VC. Theoretically, that might not be the right order if there are\r\n\t            // child injectors of said injector. Not clear whether if such case can\r\n\t            // even be constructed with the current apis.\r\n\t            this._visitInjector(curInj, aggregator);\r\n\t            this._visitViewContainerViews(curInj.nestedViews, aggregator);\r\n\t        }\r\n\t    };\r\n\t    QueryRef.prototype._visitInjector = function (inj, aggregator) {\r\n\t        if (this.protoQueryRef.query.isVarBindingQuery) {\r\n\t            this._aggregateVariableBinding(inj, aggregator);\r\n\t        }\r\n\t        else {\r\n\t            this._aggregateDirective(inj, aggregator);\r\n\t        }\r\n\t    };\r\n\t    QueryRef.prototype._visitViewContainerViews = function (views, aggregator) {\r\n\t        if (lang_1.isPresent(views)) {\r\n\t            for (var j = 0; j < views.length; j++) {\r\n\t                this._visitView(views[j], aggregator);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    QueryRef.prototype._visitView = function (view, aggregator) {\r\n\t        for (var i = 0; i < view.appElements.length; i++) {\r\n\t            var inj = view.appElements[i];\r\n\t            this._visitInjector(inj, aggregator);\r\n\t            this._visitViewContainerViews(inj.nestedViews, aggregator);\r\n\t        }\r\n\t    };\r\n\t    QueryRef.prototype._aggregateVariableBinding = function (inj, aggregator) {\r\n\t        var vb = this.protoQueryRef.query.varBindings;\r\n\t        for (var i = 0; i < vb.length; ++i) {\r\n\t            if (inj.hasVariableBinding(vb[i])) {\r\n\t                aggregator.push(inj.getVariableBinding(vb[i]));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    QueryRef.prototype._aggregateDirective = function (inj, aggregator) {\r\n\t        inj.addDirectivesMatchingQuery(this.protoQueryRef.query, aggregator);\r\n\t    };\r\n\t    return QueryRef;\r\n\t})();\r\n\texports.QueryRef = QueryRef;\r\n\tvar _ComponentViewChangeDetectorRef = (function (_super) {\r\n\t    __extends(_ComponentViewChangeDetectorRef, _super);\r\n\t    function _ComponentViewChangeDetectorRef(_appElement) {\r\n\t        _super.call(this);\r\n\t        this._appElement = _appElement;\r\n\t    }\r\n\t    _ComponentViewChangeDetectorRef.prototype.markForCheck = function () { this._appElement.componentView.changeDetector.ref.markForCheck(); };\r\n\t    _ComponentViewChangeDetectorRef.prototype.detach = function () { this._appElement.componentView.changeDetector.ref.detach(); };\r\n\t    _ComponentViewChangeDetectorRef.prototype.detectChanges = function () { this._appElement.componentView.changeDetector.ref.detectChanges(); };\r\n\t    _ComponentViewChangeDetectorRef.prototype.checkNoChanges = function () { this._appElement.componentView.changeDetector.ref.checkNoChanges(); };\r\n\t    _ComponentViewChangeDetectorRef.prototype.reattach = function () { this._appElement.componentView.changeDetector.ref.reattach(); };\r\n\t    return _ComponentViewChangeDetectorRef;\r\n\t})(change_detection_1.ChangeDetectorRef);\r\n\n\n/***/ },\n/* 130 */\n/***/ function(module, exports) {\n\n\t'use strict';(function (LifecycleHooks) {\r\n\t    LifecycleHooks[LifecycleHooks[\"OnInit\"] = 0] = \"OnInit\";\r\n\t    LifecycleHooks[LifecycleHooks[\"OnDestroy\"] = 1] = \"OnDestroy\";\r\n\t    LifecycleHooks[LifecycleHooks[\"DoCheck\"] = 2] = \"DoCheck\";\r\n\t    LifecycleHooks[LifecycleHooks[\"OnChanges\"] = 3] = \"OnChanges\";\r\n\t    LifecycleHooks[LifecycleHooks[\"AfterContentInit\"] = 4] = \"AfterContentInit\";\r\n\t    LifecycleHooks[LifecycleHooks[\"AfterContentChecked\"] = 5] = \"AfterContentChecked\";\r\n\t    LifecycleHooks[LifecycleHooks[\"AfterViewInit\"] = 6] = \"AfterViewInit\";\r\n\t    LifecycleHooks[LifecycleHooks[\"AfterViewChecked\"] = 7] = \"AfterViewChecked\";\r\n\t})(exports.LifecycleHooks || (exports.LifecycleHooks = {}));\r\n\tvar LifecycleHooks = exports.LifecycleHooks;\r\n\t/**\r\n\t * @internal\r\n\t */\r\n\texports.LIFECYCLE_HOOKS_VALUES = [\r\n\t    LifecycleHooks.OnInit,\r\n\t    LifecycleHooks.OnDestroy,\r\n\t    LifecycleHooks.DoCheck,\r\n\t    LifecycleHooks.OnChanges,\r\n\t    LifecycleHooks.AfterContentInit,\r\n\t    LifecycleHooks.AfterContentChecked,\r\n\t    LifecycleHooks.AfterViewInit,\r\n\t    LifecycleHooks.AfterViewChecked\r\n\t];\r\n\n\n/***/ },\n/* 131 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar view_1 = __webpack_require__(97);\r\n\tvar api_1 = __webpack_require__(134);\r\n\tvar profile_1 = __webpack_require__(205);\r\n\tvar application_tokens_1 = __webpack_require__(93);\r\n\tvar view_type_1 = __webpack_require__(98);\r\n\t/**\r\n\t * Service exposing low level API for creating, moving and destroying Views.\r\n\t *\r\n\t * Most applications should use higher-level abstractions like {@link DynamicComponentLoader} and\r\n\t * {@link ViewContainerRef} instead.\r\n\t */\r\n\tvar AppViewManager = (function () {\r\n\t    function AppViewManager() {\r\n\t    }\r\n\t    return AppViewManager;\r\n\t})();\r\n\texports.AppViewManager = AppViewManager;\r\n\tvar AppViewManager_ = (function (_super) {\r\n\t    __extends(AppViewManager_, _super);\r\n\t    function AppViewManager_(_renderer, _appId) {\r\n\t        _super.call(this);\r\n\t        this._renderer = _renderer;\r\n\t        this._appId = _appId;\r\n\t        this._nextCompTypeId = 0;\r\n\t        /** @internal */\r\n\t        this._createRootHostViewScope = profile_1.wtfCreateScope('AppViewManager#createRootHostView()');\r\n\t        /** @internal */\r\n\t        this._destroyRootHostViewScope = profile_1.wtfCreateScope('AppViewManager#destroyRootHostView()');\r\n\t        /** @internal */\r\n\t        this._createEmbeddedViewInContainerScope = profile_1.wtfCreateScope('AppViewManager#createEmbeddedViewInContainer()');\r\n\t        /** @internal */\r\n\t        this._createHostViewInContainerScope = profile_1.wtfCreateScope('AppViewManager#createHostViewInContainer()');\r\n\t        /** @internal */\r\n\t        this._destroyViewInContainerScope = profile_1.wtfCreateScope('AppViewMananger#destroyViewInContainer()');\r\n\t        /** @internal */\r\n\t        this._attachViewInContainerScope = profile_1.wtfCreateScope('AppViewMananger#attachViewInContainer()');\r\n\t        /** @internal */\r\n\t        this._detachViewInContainerScope = profile_1.wtfCreateScope('AppViewMananger#detachViewInContainer()');\r\n\t    }\r\n\t    AppViewManager_.prototype.getViewContainer = function (location) {\r\n\t        return location.internalElement.getViewContainerRef();\r\n\t    };\r\n\t    AppViewManager_.prototype.getHostElement = function (hostViewRef) {\r\n\t        var hostView = hostViewRef.internalView;\r\n\t        if (hostView.proto.type !== view_type_1.ViewType.HOST) {\r\n\t            throw new exceptions_1.BaseException('This operation is only allowed on host views');\r\n\t        }\r\n\t        return hostView.appElements[0].ref;\r\n\t    };\r\n\t    AppViewManager_.prototype.getNamedElementInComponentView = function (hostLocation, variableName) {\r\n\t        var appEl = hostLocation.internalElement;\r\n\t        var componentView = appEl.componentView;\r\n\t        if (lang_1.isBlank(componentView)) {\r\n\t            throw new exceptions_1.BaseException(\"There is no component directive at element \" + hostLocation);\r\n\t        }\r\n\t        for (var i = 0; i < componentView.appElements.length; i++) {\r\n\t            var compAppEl = componentView.appElements[i];\r\n\t            if (collection_1.StringMapWrapper.contains(compAppEl.proto.directiveVariableBindings, variableName)) {\r\n\t                return compAppEl.ref;\r\n\t            }\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"Could not find variable \" + variableName);\r\n\t    };\r\n\t    AppViewManager_.prototype.getComponent = function (hostLocation) {\r\n\t        return hostLocation.internalElement.getComponent();\r\n\t    };\r\n\t    AppViewManager_.prototype.createRootHostView = function (hostViewFactoryRef, overrideSelector, injector, projectableNodes) {\r\n\t        if (projectableNodes === void 0) { projectableNodes = null; }\r\n\t        var s = this._createRootHostViewScope();\r\n\t        var hostViewFactory = hostViewFactoryRef.internalHostViewFactory;\r\n\t        var selector = lang_1.isPresent(overrideSelector) ? overrideSelector : hostViewFactory.selector;\r\n\t        var view = hostViewFactory.viewFactory(this._renderer, this, null, projectableNodes, selector, null, injector);\r\n\t        return profile_1.wtfLeave(s, view.ref);\r\n\t    };\r\n\t    AppViewManager_.prototype.destroyRootHostView = function (hostViewRef) {\r\n\t        var s = this._destroyRootHostViewScope();\r\n\t        var hostView = hostViewRef.internalView;\r\n\t        hostView.renderer.detachView(view_1.flattenNestedViewRenderNodes(hostView.rootNodesOrAppElements));\r\n\t        hostView.destroy();\r\n\t        profile_1.wtfLeave(s);\r\n\t    };\r\n\t    AppViewManager_.prototype.createEmbeddedViewInContainer = function (viewContainerLocation, index, templateRef) {\r\n\t        var s = this._createEmbeddedViewInContainerScope();\r\n\t        var contextEl = templateRef.elementRef.internalElement;\r\n\t        var view = contextEl.embeddedViewFactory(contextEl.parentView.renderer, this, contextEl, contextEl.parentView.projectableNodes, null, null, null);\r\n\t        this._attachViewToContainer(view, viewContainerLocation.internalElement, index);\r\n\t        return profile_1.wtfLeave(s, view.ref);\r\n\t    };\r\n\t    AppViewManager_.prototype.createHostViewInContainer = function (viewContainerLocation, index, hostViewFactoryRef, dynamicallyCreatedProviders, projectableNodes) {\r\n\t        var s = this._createHostViewInContainerScope();\r\n\t        // TODO(tbosch): This should be specifiable via an additional argument!\r\n\t        var viewContainerLocation_ = viewContainerLocation;\r\n\t        var contextEl = viewContainerLocation_.internalElement;\r\n\t        var hostViewFactory = hostViewFactoryRef.internalHostViewFactory;\r\n\t        var view = hostViewFactory.viewFactory(contextEl.parentView.renderer, contextEl.parentView.viewManager, contextEl, projectableNodes, null, dynamicallyCreatedProviders, null);\r\n\t        this._attachViewToContainer(view, viewContainerLocation_.internalElement, index);\r\n\t        return profile_1.wtfLeave(s, view.ref);\r\n\t    };\r\n\t    AppViewManager_.prototype.destroyViewInContainer = function (viewContainerLocation, index) {\r\n\t        var s = this._destroyViewInContainerScope();\r\n\t        var view = this._detachViewInContainer(viewContainerLocation.internalElement, index);\r\n\t        view.destroy();\r\n\t        profile_1.wtfLeave(s);\r\n\t    };\r\n\t    // TODO(i): refactor detachViewInContainer+attachViewInContainer to moveViewInContainer\r\n\t    AppViewManager_.prototype.attachViewInContainer = function (viewContainerLocation, index, viewRef) {\r\n\t        var viewRef_ = viewRef;\r\n\t        var s = this._attachViewInContainerScope();\r\n\t        this._attachViewToContainer(viewRef_.internalView, viewContainerLocation.internalElement, index);\r\n\t        return profile_1.wtfLeave(s, viewRef_);\r\n\t    };\r\n\t    // TODO(i): refactor detachViewInContainer+attachViewInContainer to moveViewInContainer\r\n\t    AppViewManager_.prototype.detachViewInContainer = function (viewContainerLocation, index) {\r\n\t        var s = this._detachViewInContainerScope();\r\n\t        var view = this._detachViewInContainer(viewContainerLocation.internalElement, index);\r\n\t        return profile_1.wtfLeave(s, view.ref);\r\n\t    };\r\n\t    /** @internal */\r\n\t    AppViewManager_.prototype.onViewCreated = function (view) { };\r\n\t    /** @internal */\r\n\t    AppViewManager_.prototype.onViewDestroyed = function (view) { };\r\n\t    /** @internal */\r\n\t    AppViewManager_.prototype.createRenderComponentType = function (encapsulation, styles) {\r\n\t        return new api_1.RenderComponentType(this._appId + \"-\" + this._nextCompTypeId++, encapsulation, styles);\r\n\t    };\r\n\t    AppViewManager_.prototype._attachViewToContainer = function (view, vcAppElement, viewIndex) {\r\n\t        if (view.proto.type === view_type_1.ViewType.COMPONENT) {\r\n\t            throw new exceptions_1.BaseException(\"Component views can't be moved!\");\r\n\t        }\r\n\t        var nestedViews = vcAppElement.nestedViews;\r\n\t        if (nestedViews == null) {\r\n\t            nestedViews = [];\r\n\t            vcAppElement.nestedViews = nestedViews;\r\n\t        }\r\n\t        collection_1.ListWrapper.insert(nestedViews, viewIndex, view);\r\n\t        var refNode;\r\n\t        if (viewIndex > 0) {\r\n\t            var prevView = nestedViews[viewIndex - 1];\r\n\t            refNode = prevView.rootNodesOrAppElements.length > 0 ?\r\n\t                prevView.rootNodesOrAppElements[prevView.rootNodesOrAppElements.length - 1] :\r\n\t                null;\r\n\t        }\r\n\t        else {\r\n\t            refNode = vcAppElement.nativeElement;\r\n\t        }\r\n\t        if (lang_1.isPresent(refNode)) {\r\n\t            var refRenderNode = view_1.findLastRenderNode(refNode);\r\n\t            view.renderer.attachViewAfter(refRenderNode, view_1.flattenNestedViewRenderNodes(view.rootNodesOrAppElements));\r\n\t        }\r\n\t        // TODO: This is only needed when a view is destroyed,\r\n\t        // not when it is detached for reordering with ng-for...\r\n\t        vcAppElement.parentView.changeDetector.addContentChild(view.changeDetector);\r\n\t        vcAppElement.traverseAndSetQueriesAsDirty();\r\n\t    };\r\n\t    AppViewManager_.prototype._detachViewInContainer = function (vcAppElement, viewIndex) {\r\n\t        var view = collection_1.ListWrapper.removeAt(vcAppElement.nestedViews, viewIndex);\r\n\t        if (view.proto.type === view_type_1.ViewType.COMPONENT) {\r\n\t            throw new exceptions_1.BaseException(\"Component views can't be moved!\");\r\n\t        }\r\n\t        vcAppElement.traverseAndSetQueriesAsDirty();\r\n\t        view.renderer.detachView(view_1.flattenNestedViewRenderNodes(view.rootNodesOrAppElements));\r\n\t        // TODO: This is only needed when a view is destroyed,\r\n\t        // not when it is detached for reordering with ng-for...\r\n\t        view.changeDetector.remove();\r\n\t        return view;\r\n\t    };\r\n\t    AppViewManager_ = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        __param(1, di_1.Inject(application_tokens_1.APP_ID)), \r\n\t        __metadata('design:paramtypes', [api_1.RootRenderer, String])\r\n\t    ], AppViewManager_);\r\n\t    return AppViewManager_;\r\n\t})(AppViewManager);\r\n\texports.AppViewManager_ = AppViewManager_;\r\n\n\n/***/ },\n/* 132 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar ViewRef = (function () {\r\n\t    function ViewRef() {\r\n\t    }\r\n\t    Object.defineProperty(ViewRef.prototype, \"changeDetectorRef\", {\r\n\t        /**\r\n\t         * @internal\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    Object.defineProperty(ViewRef.prototype, \"destroyed\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ViewRef;\r\n\t})();\r\n\texports.ViewRef = ViewRef;\r\n\t/**\r\n\t * Represents a View containing a single Element that is the Host Element of a {@link Component}\r\n\t * instance.\r\n\t *\r\n\t * A Host View is created for every dynamically created Component that was compiled on its own (as\r\n\t * opposed to as a part of another Component's Template) via {@link Compiler#compileInHost} or one\r\n\t * of the higher-level APIs: {@link AppViewManager#createRootHostView},\r\n\t * {@link AppViewManager#createHostViewInContainer}, {@link ViewContainerRef#createHostView}.\r\n\t */\r\n\tvar HostViewRef = (function (_super) {\r\n\t    __extends(HostViewRef, _super);\r\n\t    function HostViewRef() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(HostViewRef.prototype, \"rootNodes\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    return HostViewRef;\r\n\t})(ViewRef);\r\n\texports.HostViewRef = HostViewRef;\r\n\t/**\r\n\t * Represents an Angular View.\r\n\t *\r\n\t * <!-- TODO: move the next two paragraphs to the dev guide -->\r\n\t * A View is a fundamental building block of the application UI. It is the smallest grouping of\r\n\t * Elements which are created and destroyed together.\r\n\t *\r\n\t * Properties of elements in a View can change, but the structure (number and order) of elements in\r\n\t * a View cannot. Changing the structure of Elements can only be done by inserting, moving or\r\n\t * removing nested Views via a {@link ViewContainerRef}. Each View can contain many View Containers.\r\n\t * <!-- /TODO -->\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Given this template...\r\n\t *\r\n\t * ```\r\n\t * Count: {{items.length}}\r\n\t * <ul>\r\n\t *   <li *ngFor=\"var item of items\">{{item}}</li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * ... we have two {@link ProtoViewRef}s:\r\n\t *\r\n\t * Outer {@link ProtoViewRef}:\r\n\t * ```\r\n\t * Count: {{items.length}}\r\n\t * <ul>\r\n\t *   <template ngFor var-item [ngForOf]=\"items\"></template>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Inner {@link ProtoViewRef}:\r\n\t * ```\r\n\t *   <li>{{item}}</li>\r\n\t * ```\r\n\t *\r\n\t * Notice that the original template is broken down into two separate {@link ProtoViewRef}s.\r\n\t *\r\n\t * The outer/inner {@link ProtoViewRef}s are then assembled into views like so:\r\n\t *\r\n\t * ```\r\n\t * <!-- ViewRef: outer-0 -->\r\n\t * Count: 2\r\n\t * <ul>\r\n\t *   <template view-container-ref></template>\r\n\t *   <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->\r\n\t *   <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->\r\n\t * </ul>\r\n\t * <!-- /ViewRef: outer-0 -->\r\n\t * ```\r\n\t */\r\n\tvar EmbeddedViewRef = (function (_super) {\r\n\t    __extends(EmbeddedViewRef, _super);\r\n\t    function EmbeddedViewRef() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    Object.defineProperty(EmbeddedViewRef.prototype, \"rootNodes\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    return EmbeddedViewRef;\r\n\t})(ViewRef);\r\n\texports.EmbeddedViewRef = EmbeddedViewRef;\r\n\tvar ViewRef_ = (function () {\r\n\t    function ViewRef_(_view) {\r\n\t        this._view = _view;\r\n\t        this._view = _view;\r\n\t    }\r\n\t    Object.defineProperty(ViewRef_.prototype, \"internalView\", {\r\n\t        get: function () { return this._view; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ViewRef_.prototype, \"changeDetectorRef\", {\r\n\t        /**\r\n\t         * Return `ChangeDetectorRef`\r\n\t         */\r\n\t        get: function () { return this._view.changeDetector.ref; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ViewRef_.prototype, \"rootNodes\", {\r\n\t        get: function () { return this._view.flatRootNodes; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ViewRef_.prototype.setLocal = function (variableName, value) { this._view.setLocal(variableName, value); };\r\n\t    ViewRef_.prototype.hasLocal = function (variableName) { return this._view.hasLocal(variableName); };\r\n\t    Object.defineProperty(ViewRef_.prototype, \"destroyed\", {\r\n\t        get: function () { return this._view.destroyed; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ViewRef_;\r\n\t})();\r\n\texports.ViewRef_ = ViewRef_;\r\n\tvar HostViewFactoryRef = (function () {\r\n\t    function HostViewFactoryRef() {\r\n\t    }\r\n\t    return HostViewFactoryRef;\r\n\t})();\r\n\texports.HostViewFactoryRef = HostViewFactoryRef;\r\n\tvar HostViewFactoryRef_ = (function () {\r\n\t    function HostViewFactoryRef_(_hostViewFactory) {\r\n\t        this._hostViewFactory = _hostViewFactory;\r\n\t    }\r\n\t    Object.defineProperty(HostViewFactoryRef_.prototype, \"internalHostViewFactory\", {\r\n\t        get: function () { return this._hostViewFactory; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return HostViewFactoryRef_;\r\n\t})();\r\n\texports.HostViewFactoryRef_ = HostViewFactoryRef_;\r\n\n\n/***/ },\n/* 133 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * This indirection is needed to free up Component, etc symbols in the public API\r\n\t * to be used by the decorator versions of these annotations.\r\n\t */\r\n\tvar di_1 = __webpack_require__(203);\r\n\texports.QueryMetadata = di_1.QueryMetadata;\r\n\texports.ContentChildrenMetadata = di_1.ContentChildrenMetadata;\r\n\texports.ContentChildMetadata = di_1.ContentChildMetadata;\r\n\texports.ViewChildrenMetadata = di_1.ViewChildrenMetadata;\r\n\texports.ViewQueryMetadata = di_1.ViewQueryMetadata;\r\n\texports.ViewChildMetadata = di_1.ViewChildMetadata;\r\n\texports.AttributeMetadata = di_1.AttributeMetadata;\r\n\tvar directives_1 = __webpack_require__(99);\r\n\texports.ComponentMetadata = directives_1.ComponentMetadata;\r\n\texports.DirectiveMetadata = directives_1.DirectiveMetadata;\r\n\texports.PipeMetadata = directives_1.PipeMetadata;\r\n\texports.InputMetadata = directives_1.InputMetadata;\r\n\texports.OutputMetadata = directives_1.OutputMetadata;\r\n\texports.HostBindingMetadata = directives_1.HostBindingMetadata;\r\n\texports.HostListenerMetadata = directives_1.HostListenerMetadata;\r\n\tvar view_1 = __webpack_require__(63);\r\n\texports.ViewMetadata = view_1.ViewMetadata;\r\n\texports.ViewEncapsulation = view_1.ViewEncapsulation;\r\n\tvar di_2 = __webpack_require__(203);\r\n\tvar directives_2 = __webpack_require__(99);\r\n\tvar view_2 = __webpack_require__(63);\r\n\tvar decorators_1 = __webpack_require__(100);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ComponentMetadata.\r\n\t/**\r\n\t * Declare reusable UI building blocks for an application.\r\n\t *\r\n\t * Each Angular component requires a single `@Component` annotation. The `@Component`\r\n\t * annotation specifies when a component is instantiated, and which properties and hostListeners it\r\n\t * binds to.\r\n\t *\r\n\t * When a component is instantiated, Angular\r\n\t * - creates a shadow DOM for the component.\r\n\t * - loads the selected template into the shadow DOM.\r\n\t * - creates all the injectable objects configured with `providers` and `viewProviders`.\r\n\t *\r\n\t * All template expressions and statements are then evaluated against the component instance.\r\n\t *\r\n\t * ## Lifecycle hooks\r\n\t *\r\n\t * When the component class implements some {@link angular2/lifecycle_hooks} the callbacks are\r\n\t * called by the change detection at defined points in time during the life of the component.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/ts/metadata/metadata.ts region='component'}\r\n\t */\r\n\texports.Component = decorators_1.makeDecorator(directives_2.ComponentMetadata, function (fn) { return fn.View = View; });\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from DirectiveMetadata.\r\n\t/**\r\n\t * Directives allow you to attach behavior to elements in the DOM.\r\n\t *\r\n\t * {@link DirectiveMetadata}s with an embedded view are called {@link ComponentMetadata}s.\r\n\t *\r\n\t * A directive consists of a single directive annotation and a controller class. When the\r\n\t * directive's `selector` matches\r\n\t * elements in the DOM, the following steps occur:\r\n\t *\r\n\t * 1. For each directive, the `ElementInjector` attempts to resolve the directive's constructor\r\n\t * arguments.\r\n\t * 2. Angular instantiates directives for each matched element using `ElementInjector` in a\r\n\t * depth-first order,\r\n\t *    as declared in the HTML.\r\n\t *\r\n\t * ## Understanding How Injection Works\r\n\t *\r\n\t * There are three stages of injection resolution.\r\n\t * - *Pre-existing Injectors*:\r\n\t *   - The terminal {@link Injector} cannot resolve dependencies. It either throws an error or, if\r\n\t * the dependency was\r\n\t *     specified as `@Optional`, returns `null`.\r\n\t *   - The platform injector resolves browser singleton resources, such as: cookies, title,\r\n\t * location, and others.\r\n\t * - *Component Injectors*: Each component instance has its own {@link Injector}, and they follow\r\n\t * the same parent-child hierarchy\r\n\t *     as the component instances in the DOM.\r\n\t * - *Element Injectors*: Each component instance has a Shadow DOM. Within the Shadow DOM each\r\n\t * element has an `ElementInjector`\r\n\t *     which follow the same parent-child hierarchy as the DOM elements themselves.\r\n\t *\r\n\t * When a template is instantiated, it also must instantiate the corresponding directives in a\r\n\t * depth-first order. The\r\n\t * current `ElementInjector` resolves the constructor dependencies for each directive.\r\n\t *\r\n\t * Angular then resolves dependencies as follows, according to the order in which they appear in the\r\n\t * {@link ViewMetadata}:\r\n\t *\r\n\t * 1. Dependencies on the current element\r\n\t * 2. Dependencies on element injectors and their parents until it encounters a Shadow DOM boundary\r\n\t * 3. Dependencies on component injectors and their parents until it encounters the root component\r\n\t * 4. Dependencies on pre-existing injectors\r\n\t *\r\n\t *\r\n\t * The `ElementInjector` can inject other directives, element-specific special objects, or it can\r\n\t * delegate to the parent\r\n\t * injector.\r\n\t *\r\n\t * To inject other directives, declare the constructor parameter as:\r\n\t * - `directive:DirectiveType`: a directive on the current element only\r\n\t * - `@Host() directive:DirectiveType`: any directive that matches the type between the current\r\n\t * element and the\r\n\t *    Shadow DOM root.\r\n\t * - `@Query(DirectiveType) query:QueryList<DirectiveType>`: A live collection of direct child\r\n\t * directives.\r\n\t * - `@QueryDescendants(DirectiveType) query:QueryList<DirectiveType>`: A live collection of any\r\n\t * child directives.\r\n\t *\r\n\t * To inject element-specific special objects, declare the constructor parameter as:\r\n\t * - `element: ElementRef` to obtain a reference to logical element in the view.\r\n\t * - `viewContainer: ViewContainerRef` to control child template instantiation, for\r\n\t * {@link DirectiveMetadata} directives only\r\n\t * - `bindingPropagation: BindingPropagation` to control change detection in a more granular way.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example demonstrates how dependency injection resolves constructor arguments in\r\n\t * practice.\r\n\t *\r\n\t *\r\n\t * Assume this HTML template:\r\n\t *\r\n\t * ```\r\n\t * <div dependency=\"1\">\r\n\t *   <div dependency=\"2\">\r\n\t *     <div dependency=\"3\" my-directive>\r\n\t *       <div dependency=\"4\">\r\n\t *         <div dependency=\"5\"></div>\r\n\t *       </div>\r\n\t *       <div dependency=\"6\"></div>\r\n\t *     </div>\r\n\t *   </div>\r\n\t * </div>\r\n\t * ```\r\n\t *\r\n\t * With the following `dependency` decorator and `SomeService` injectable class.\r\n\t *\r\n\t * ```\r\n\t * @Injectable()\r\n\t * class SomeService {\r\n\t * }\r\n\t *\r\n\t * @Directive({\r\n\t *   selector: '[dependency]',\r\n\t *   inputs: [\r\n\t *     'id: dependency'\r\n\t *   ]\r\n\t * })\r\n\t * class Dependency {\r\n\t *   id:string;\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Let's step through the different ways in which `MyDirective` could be declared...\r\n\t *\r\n\t *\r\n\t * ### No injection\r\n\t *\r\n\t * Here the constructor is declared with no arguments, therefore nothing is injected into\r\n\t * `MyDirective`.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor() {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with no dependencies.\r\n\t *\r\n\t *\r\n\t * ### Component-level injection\r\n\t *\r\n\t * Directives can inject any injectable instance from the closest component injector or any of its\r\n\t * parents.\r\n\t *\r\n\t * Here, the constructor declares a parameter, `someService`, and injects the `SomeService` type\r\n\t * from the parent\r\n\t * component's injector.\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(someService: SomeService) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a dependency on `SomeService`.\r\n\t *\r\n\t *\r\n\t * ### Injecting a directive from the current element\r\n\t *\r\n\t * Directives can inject other directives declared on the current element.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(dependency: Dependency) {\r\n\t *     expect(dependency.id).toEqual(3);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t * This directive would be instantiated with `Dependency` declared at the same element, in this case\r\n\t * `dependency=\"3\"`.\r\n\t *\r\n\t * ### Injecting a directive from any ancestor elements\r\n\t *\r\n\t * Directives can inject other directives declared on any ancestor element (in the current Shadow\r\n\t * DOM), i.e. on the current element, the\r\n\t * parent element, or its parents.\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Host() dependency: Dependency) {\r\n\t *     expect(dependency.id).toEqual(2);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * `@Host` checks the current element, the parent, as well as its parents recursively. If\r\n\t * `dependency=\"2\"` didn't\r\n\t * exist on the direct parent, this injection would\r\n\t * have returned\r\n\t * `dependency=\"1\"`.\r\n\t *\r\n\t *\r\n\t * ### Injecting a live collection of direct child directives\r\n\t *\r\n\t *\r\n\t * A directive can also query for other child directives. Since parent directives are instantiated\r\n\t * before child directives, a directive can't simply inject the list of child directives. Instead,\r\n\t * the directive injects a {@link QueryList}, which updates its contents as children are added,\r\n\t * removed, or moved by a directive that uses a {@link ViewContainerRef} such as a `ngFor`, an\r\n\t * `ngIf`, or an `ngSwitch`.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Query(Dependency) dependencies:QueryList<Dependency>) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a {@link QueryList} which contains `Dependency` 4 and\r\n\t * 6. Here, `Dependency` 5 would not be included, because it is not a direct child.\r\n\t *\r\n\t * ### Injecting a live collection of descendant directives\r\n\t *\r\n\t * By passing the descendant flag to `@Query` above, we can include the children of the child\r\n\t * elements.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Query(Dependency, {descendants: true}) dependencies:QueryList<Dependency>) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a Query which would contain `Dependency` 4, 5 and 6.\r\n\t *\r\n\t * ### Optional injection\r\n\t *\r\n\t * The normal behavior of directives is to return an error when a specified dependency cannot be\r\n\t * resolved. If you\r\n\t * would like to inject `null` on unresolved dependency instead, you can annotate that dependency\r\n\t * with `@Optional()`.\r\n\t * This explicitly permits the author of a template to treat some of the surrounding directives as\r\n\t * optional.\r\n\t *\r\n\t * ```\r\n\t * @Directive({ selector: '[my-directive]' })\r\n\t * class MyDirective {\r\n\t *   constructor(@Optional() dependency:Dependency) {\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This directive would be instantiated with a `Dependency` directive found on the current element.\r\n\t * If none can be\r\n\t * found, the injector supplies `null` instead of throwing an error.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Here we use a decorator directive to simply define basic tool-tip behavior.\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: '[tooltip]',\r\n\t *   inputs: [\r\n\t *     'text: tooltip'\r\n\t *   ],\r\n\t *   host: {\r\n\t *     '(mouseenter)': 'onMouseEnter()',\r\n\t *     '(mouseleave)': 'onMouseLeave()'\r\n\t *   }\r\n\t * })\r\n\t * class Tooltip{\r\n\t *   text:string;\r\n\t *   overlay:Overlay; // NOT YET IMPLEMENTED\r\n\t *   overlayManager:OverlayManager; // NOT YET IMPLEMENTED\r\n\t *\r\n\t *   constructor(overlayManager:OverlayManager) {\r\n\t *     this.overlay = overlay;\r\n\t *   }\r\n\t *\r\n\t *   onMouseEnter() {\r\n\t *     // exact signature to be determined\r\n\t *     this.overlay = this.overlayManager.open(text, ...);\r\n\t *   }\r\n\t *\r\n\t *   onMouseLeave() {\r\n\t *     this.overlay.close();\r\n\t *     this.overlay = null;\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t * In our HTML template, we can then add this behavior to a `<div>` or any other element with the\r\n\t * `tooltip` selector,\r\n\t * like so:\r\n\t *\r\n\t * ```\r\n\t * <div tooltip=\"some text here\"></div>\r\n\t * ```\r\n\t *\r\n\t * Directives can also control the instantiation, destruction, and positioning of inline template\r\n\t * elements:\r\n\t *\r\n\t * A directive uses a {@link ViewContainerRef} to instantiate, insert, move, and destroy views at\r\n\t * runtime.\r\n\t * The {@link ViewContainerRef} is created as a result of `<template>` element, and represents a\r\n\t * location in the current view\r\n\t * where these actions are performed.\r\n\t *\r\n\t * Views are always created as children of the current {@link ViewMetadata}, and as siblings of the\r\n\t * `<template>` element. Thus a\r\n\t * directive in a child view cannot inject the directive that created it.\r\n\t *\r\n\t * Since directives that create views via ViewContainers are common in Angular, and using the full\r\n\t * `<template>` element syntax is wordy, Angular\r\n\t * also supports a shorthand notation: `<li *foo=\"bar\">` and `<li template=\"foo: bar\">` are\r\n\t * equivalent.\r\n\t *\r\n\t * Thus,\r\n\t *\r\n\t * ```\r\n\t * <ul>\r\n\t *   <li *foo=\"bar\" title=\"text\"></li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Expands in use to:\r\n\t *\r\n\t * ```\r\n\t * <ul>\r\n\t *   <template [foo]=\"bar\">\r\n\t *     <li title=\"text\"></li>\r\n\t *   </template>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Notice that although the shorthand places `*foo=\"bar\"` within the `<li>` element, the binding for\r\n\t * the directive\r\n\t * controller is correctly instantiated on the `<template>` element rather than the `<li>` element.\r\n\t *\r\n\t * ## Lifecycle hooks\r\n\t *\r\n\t * When the directive class implements some {@link angular2/lifecycle_hooks} the callbacks are\r\n\t * called by the change detection at defined points in time during the life of the directive.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Let's suppose we want to implement the `unless` behavior, to conditionally include a template.\r\n\t *\r\n\t * Here is a simple directive that triggers on an `unless` selector:\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: '[unless]',\r\n\t *   inputs: ['unless']\r\n\t * })\r\n\t * export class Unless {\r\n\t *   viewContainer: ViewContainerRef;\r\n\t *   templateRef: TemplateRef;\r\n\t *   prevCondition: boolean;\r\n\t *\r\n\t *   constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef) {\r\n\t *     this.viewContainer = viewContainer;\r\n\t *     this.templateRef = templateRef;\r\n\t *     this.prevCondition = null;\r\n\t *   }\r\n\t *\r\n\t *   set unless(newCondition) {\r\n\t *     if (newCondition && (isBlank(this.prevCondition) || !this.prevCondition)) {\r\n\t *       this.prevCondition = true;\r\n\t *       this.viewContainer.clear();\r\n\t *     } else if (!newCondition && (isBlank(this.prevCondition) || this.prevCondition)) {\r\n\t *       this.prevCondition = false;\r\n\t *       this.viewContainer.create(this.templateRef);\r\n\t *     }\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * We can then use this `unless` selector in a template:\r\n\t * ```\r\n\t * <ul>\r\n\t *   <li *unless=\"expr\"></li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Once the directive instantiates the child view, the shorthand notation for the template expands\r\n\t * and the result is:\r\n\t *\r\n\t * ```\r\n\t * <ul>\r\n\t *   <template [unless]=\"exp\">\r\n\t *     <li></li>\r\n\t *   </template>\r\n\t *   <li></li>\r\n\t * </ul>\r\n\t * ```\r\n\t *\r\n\t * Note also that although the `<li></li>` template still exists inside the `<template></template>`,\r\n\t * the instantiated\r\n\t * view occurs on the second `<li></li>` which is a sibling to the `<template>` element.\r\n\t */\r\n\texports.Directive = decorators_1.makeDecorator(directives_2.DirectiveMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewMetadata.\r\n\t/**\r\n\t * Metadata properties available for configuring Views.\r\n\t *\r\n\t * Each Angular component requires a single `@Component` and at least one `@View` annotation. The\r\n\t * `@View` annotation specifies the HTML template to use, and lists the directives that are active\r\n\t * within the template.\r\n\t *\r\n\t * When a component is instantiated, the template is loaded into the component's shadow root, and\r\n\t * the expressions and statements in the template are evaluated against the component.\r\n\t *\r\n\t * For details on the `@Component` annotation, see {@link ComponentMetadata}.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'greet',\r\n\t *   template: 'Hello {{name}}!',\r\n\t *   directives: [GreetUser, Bold]\r\n\t * })\r\n\t * class Greet {\r\n\t *   name: string;\r\n\t *\r\n\t *   constructor() {\r\n\t *     this.name = 'World';\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar View = decorators_1.makeDecorator(view_2.ViewMetadata, function (fn) { return fn.View = View; });\r\n\t/**\r\n\t * Specifies that a constant attribute value should be injected.\r\n\t *\r\n\t * The directive can inject constant string literals of host element attributes.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Suppose we have an `<input>` element and want to know its `type`.\r\n\t *\r\n\t * ```html\r\n\t * <input type=\"text\">\r\n\t * ```\r\n\t *\r\n\t * A decorator can inject string literal `text` like so:\r\n\t *\r\n\t * {@example core/ts/metadata/metadata.ts region='attributeMetadata'}\r\n\t */\r\n\texports.Attribute = decorators_1.makeParamDecorator(di_2.AttributeMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from QueryMetadata.\r\n\t/**\r\n\t * Declares an injectable parameter to be a live list of directives or variable\r\n\t * bindings from the content children of a directive.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\r\n\t *\r\n\t * Assume that `<tabs>` component would like to get a list its children `<pane>`\r\n\t * components as shown in this example:\r\n\t *\r\n\t * ```html\r\n\t * <tabs>\r\n\t *   <pane title=\"Overview\">...</pane>\r\n\t *   <pane *ngFor=\"#o of objects\" [title]=\"o.title\">{{o.text}}</pane>\r\n\t * </tabs>\r\n\t * ```\r\n\t *\r\n\t * The preferred solution is to query for `Pane` directives using this decorator.\r\n\t *\r\n\t * ```javascript\r\n\t * @Component({\r\n\t *   selector: 'pane',\r\n\t *   inputs: ['title']\r\n\t * })\r\n\t * class Pane {\r\n\t *   title:string;\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *  selector: 'tabs',\r\n\t *  template: `\r\n\t *    <ul>\r\n\t *      <li *ngFor=\"#pane of panes\">{{pane.title}}</li>\r\n\t *    </ul>\r\n\t *    <ng-content></ng-content>\r\n\t *  `\r\n\t * })\r\n\t * class Tabs {\r\n\t *   panes: QueryList<Pane>;\r\n\t *   constructor(@Query(Pane) panes:QueryList<Pane>) {\r\n\t *     this.panes = panes;\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * A query can look for variable bindings by passing in a string with desired binding symbol.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/sT2j25cH1dURAyBRCKx1?p=preview))\r\n\t * ```html\r\n\t * <seeker>\r\n\t *   <div #findme>...</div>\r\n\t * </seeker>\r\n\t *\r\n\t * @Component({ selector: 'foo' })\r\n\t * class seeker {\r\n\t *   constructor(@Query('findme') elList: QueryList<ElementRef>) {...}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * In this case the object that is injected depend on the type of the variable\r\n\t * binding. It can be an ElementRef, a directive or a component.\r\n\t *\r\n\t * Passing in a comma separated list of variable bindings will query for all of them.\r\n\t *\r\n\t * ```html\r\n\t * <seeker>\r\n\t *   <div #findMe>...</div>\r\n\t *   <div #findMeToo>...</div>\r\n\t * </seeker>\r\n\t *\r\n\t *  @Component({\r\n\t *   selector: 'foo'\r\n\t * })\r\n\t * class Seeker {\r\n\t *   constructor(@Query('findMe, findMeToo') elList: QueryList<ElementRef>) {...}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Configure whether query looks for direct children or all descendants\r\n\t * of the querying element, by using the `descendants` parameter.\r\n\t * It is set to `false` by default.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/wtGeB977bv7qvA5FTYl9?p=preview))\r\n\t * ```html\r\n\t * <container #first>\r\n\t *   <item>a</item>\r\n\t *   <item>b</item>\r\n\t *   <container #second>\r\n\t *     <item>c</item>\r\n\t *   </container>\r\n\t * </container>\r\n\t * ```\r\n\t *\r\n\t * When querying for items, the first container will see only `a` and `b` by default,\r\n\t * but with `Query(TextDirective, {descendants: true})` it will see `c` too.\r\n\t *\r\n\t * The queried directives are kept in a depth-first pre-order with respect to their\r\n\t * positions in the DOM.\r\n\t *\r\n\t * Query does not look deep into any subcomponent views.\r\n\t *\r\n\t * Query is updated as part of the change-detection cycle. Since change detection\r\n\t * happens after construction of a directive, QueryList will always be empty when observed in the\r\n\t * constructor.\r\n\t *\r\n\t * The injected object is an unmodifiable live list.\r\n\t * See {@link QueryList} for more details.\r\n\t */\r\n\texports.Query = decorators_1.makeParamDecorator(di_2.QueryMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ContentChildrenMetadata.\r\n\t/**\r\n\t * Configures a content query.\r\n\t *\r\n\t * Content queries are set before the `ngAfterContentInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: 'someDir'\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;\r\n\t *\r\n\t *   ngAfterContentInit() {\r\n\t *     // contentChildren is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\texports.ContentChildren = decorators_1.makePropDecorator(di_2.ContentChildrenMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ContentChildMetadata.\r\n\t/**\r\n\t * Configures a content query.\r\n\t *\r\n\t * Content queries are set before the `ngAfterContentInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: 'someDir'\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ContentChild(ChildDirective) contentChild;\r\n\t *\r\n\t *   ngAfterContentInit() {\r\n\t *     // contentChild is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\texports.ContentChild = decorators_1.makePropDecorator(di_2.ContentChildMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewChildrenMetadata.\r\n\t/**\r\n\t * Configures a view query.\r\n\t *\r\n\t * View queries are set before the `ngAfterViewInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'someDir',\r\n\t *   templateUrl: 'someTemplate',\r\n\t *   directives: [ItemDirective]\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ViewChildren(ItemDirective) viewChildren: QueryList<ItemDirective>;\r\n\t *\r\n\t *   ngAfterViewInit() {\r\n\t *     // viewChildren is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\texports.ViewChildren = decorators_1.makePropDecorator(di_2.ViewChildrenMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewChildMetadata.\r\n\t/**\r\n\t * Configures a view query.\r\n\t *\r\n\t * View queries are set before the `ngAfterViewInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'someDir',\r\n\t *   templateUrl: 'someTemplate',\r\n\t *   directives: [ItemDirective]\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ViewChild(ItemDirective) viewChild:ItemDirective;\r\n\t *\r\n\t *   ngAfterViewInit() {\r\n\t *     // viewChild is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\texports.ViewChild = decorators_1.makePropDecorator(di_2.ViewChildMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewQueryMetadata.\r\n\t/**\r\n\t * Similar to {@link QueryMetadata}, but querying the component view, instead of\r\n\t * the content children.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/eNsFHDf7YjyM6IzKxM1j?p=preview))\r\n\t *\r\n\t * ```javascript\r\n\t * @Component({\r\n\t *   ...,\r\n\t *   template: `\r\n\t *     <item> a </item>\r\n\t *     <item> b </item>\r\n\t *     <item> c </item>\r\n\t *   `\r\n\t * })\r\n\t * class MyComponent {\r\n\t *   shown: boolean;\r\n\t *\r\n\t *   constructor(private @Query(Item) items:QueryList<Item>) {\r\n\t *     items.changes.subscribe(() => console.log(items.length));\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Supports the same querying parameters as {@link QueryMetadata}, except\r\n\t * `descendants`. This always queries the whole view.\r\n\t *\r\n\t * As `shown` is flipped between true and false, items will contain zero of one\r\n\t * items.\r\n\t *\r\n\t * Specifies that a {@link QueryList} should be injected.\r\n\t *\r\n\t * The injected object is an iterable and observable live list.\r\n\t * See {@link QueryList} for more details.\r\n\t */\r\n\texports.ViewQuery = decorators_1.makeParamDecorator(di_2.ViewQueryMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from PipeMetadata.\r\n\t/**\r\n\t * Declare reusable pipe function.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/ts/metadata/metadata.ts region='pipe'}\r\n\t */\r\n\texports.Pipe = decorators_1.makeDecorator(directives_2.PipeMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from InputMetadata.\r\n\t/**\r\n\t * Declares a data-bound input property.\r\n\t *\r\n\t * Angular automatically updates data-bound properties during change detection.\r\n\t *\r\n\t * `InputMetadata` takes an optional parameter that specifies the name\r\n\t * used when instantiating a component in the template. When not provided,\r\n\t * the name of the decorated property is used.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example creates a component with two input properties.\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'bank-account',\r\n\t *   template: `\r\n\t *     Bank Name: {{bankName}}\r\n\t *     Account Id: {{id}}\r\n\t *   `\r\n\t * })\r\n\t * class BankAccount {\r\n\t *   @Input() bankName: string;\r\n\t *   @Input('account-id') id: string;\r\n\t *\r\n\t *   // this property is not bound, and won't be automatically updated by Angular\r\n\t *   normalizedBankName: string;\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `\r\n\t *     <bank-account bank-name=\"RBC\" account-id=\"4747\"></bank-account>\r\n\t *   `,\r\n\t *   directives: [BankAccount]\r\n\t * })\r\n\t * class App {}\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\texports.Input = decorators_1.makePropDecorator(directives_2.InputMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from OutputMetadata.\r\n\t/**\r\n\t * Declares an event-bound output property.\r\n\t *\r\n\t * When an output property emits an event, an event handler attached to that event\r\n\t * the template is invoked.\r\n\t *\r\n\t * `OutputMetadata` takes an optional parameter that specifies the name\r\n\t * used when instantiating a component in the template. When not provided,\r\n\t * the name of the decorated property is used.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({\r\n\t *   selector: 'interval-dir',\r\n\t * })\r\n\t * class IntervalDir {\r\n\t *   @Output() everySecond = new EventEmitter();\r\n\t *   @Output('everyFiveSeconds') five5Secs = new EventEmitter();\r\n\t *\r\n\t *   constructor() {\r\n\t *     setInterval(() => this.everySecond.emit(\"event\"), 1000);\r\n\t *     setInterval(() => this.five5Secs.emit(\"event\"), 5000);\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `\r\n\t *     <interval-dir (everySecond)=\"everySecond()\" (everyFiveSeconds)=\"everyFiveSeconds()\">\r\n\t *     </interval-dir>\r\n\t *   `,\r\n\t *   directives: [IntervalDir]\r\n\t * })\r\n\t * class App {\r\n\t *   everySecond() { console.log('second'); }\r\n\t *   everyFiveSeconds() { console.log('five seconds'); }\r\n\t * }\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\texports.Output = decorators_1.makePropDecorator(directives_2.OutputMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from HostBindingMetadata.\r\n\t/**\r\n\t * Declares a host property binding.\r\n\t *\r\n\t * Angular automatically checks host property bindings during change detection.\r\n\t * If a binding changes, it will update the host element of the directive.\r\n\t *\r\n\t * `HostBindingMetadata` takes an optional parameter that specifies the property\r\n\t * name of the host element that will be updated. When not provided,\r\n\t * the class property name is used.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example creates a directive that sets the `valid` and `invalid` classes\r\n\t * on the DOM element that has ngModel directive on it.\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({selector: '[ngModel]'})\r\n\t * class NgModelStatus {\r\n\t *   constructor(public control:NgModel) {}\r\n\t *   @HostBinding('[class.valid]') get valid { return this.control.valid; }\r\n\t *   @HostBinding('[class.invalid]') get invalid { return this.control.invalid; }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `<input [(ngModel)]=\"prop\">`,\r\n\t *   directives: [FORM_DIRECTIVES, NgModelStatus]\r\n\t * })\r\n\t * class App {\r\n\t *   prop;\r\n\t * }\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\texports.HostBinding = decorators_1.makePropDecorator(directives_2.HostBindingMetadata);\r\n\t// TODO(alexeagle): remove the duplication of this doc. It is copied from HostListenerMetadata.\r\n\t/**\r\n\t * Declares a host listener.\r\n\t *\r\n\t * Angular will invoke the decorated method when the host element emits the specified event.\r\n\t *\r\n\t * If the decorated method returns `false`, then `preventDefault` is applied on the DOM\r\n\t * event.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * The following example declares a directive that attaches a click listener to the button and\r\n\t * counts clicks.\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({selector: 'button[counting]'})\r\n\t * class CountClicks {\r\n\t *   numberOfClicks = 0;\r\n\t *\r\n\t *   @HostListener('click', ['$event.target'])\r\n\t *   onClick(btn) {\r\n\t *     console.log(\"button\", btn, \"number of clicks:\", this.numberOfClicks++);\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `<button counting>Increment</button>`,\r\n\t *   directives: [CountClicks]\r\n\t * })\r\n\t * class App {}\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t */\r\n\texports.HostListener = decorators_1.makePropDecorator(directives_2.HostListenerMetadata);\r\n\n\n/***/ },\n/* 134 */\n/***/ function(module, exports) {\n\n\t'use strict';var RenderComponentType = (function () {\r\n\t    function RenderComponentType(id, encapsulation, styles) {\r\n\t        this.id = id;\r\n\t        this.encapsulation = encapsulation;\r\n\t        this.styles = styles;\r\n\t    }\r\n\t    return RenderComponentType;\r\n\t})();\r\n\texports.RenderComponentType = RenderComponentType;\r\n\tvar RenderDebugInfo = (function () {\r\n\t    function RenderDebugInfo(injector, component, providerTokens, locals) {\r\n\t        this.injector = injector;\r\n\t        this.component = component;\r\n\t        this.providerTokens = providerTokens;\r\n\t        this.locals = locals;\r\n\t    }\r\n\t    return RenderDebugInfo;\r\n\t})();\r\n\texports.RenderDebugInfo = RenderDebugInfo;\r\n\tvar Renderer = (function () {\r\n\t    function Renderer() {\r\n\t    }\r\n\t    return Renderer;\r\n\t})();\r\n\texports.Renderer = Renderer;\r\n\t/**\r\n\t * Injectable service that provides a low-level interface for modifying the UI.\r\n\t *\r\n\t * Use this service to bypass Angular's templating and make custom UI changes that can't be\r\n\t * expressed declaratively. For example if you need to set a property or an attribute whose name is\r\n\t * not statically known, use {@link #setElementProperty} or {@link #setElementAttribute}\r\n\t * respectively.\r\n\t *\r\n\t * If you are implementing a custom renderer, you must implement this interface.\r\n\t *\r\n\t * The default Renderer implementation is `DomRenderer`. Also available is `WebWorkerRenderer`.\r\n\t */\r\n\tvar RootRenderer = (function () {\r\n\t    function RootRenderer() {\r\n\t    }\r\n\t    return RootRenderer;\r\n\t})();\r\n\texports.RootRenderer = RootRenderer;\r\n\n\n/***/ },\n/* 135 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar ng_zone_1 = __webpack_require__(136);\r\n\tvar async_1 = __webpack_require__(13);\r\n\t/**\r\n\t * The Testability service provides testing hooks that can be accessed from\r\n\t * the browser and by services such as Protractor. Each bootstrapped Angular\r\n\t * application on the page will have an instance of Testability.\r\n\t */\r\n\tvar Testability = (function () {\r\n\t    function Testability(_ngZone) {\r\n\t        this._ngZone = _ngZone;\r\n\t        /** @internal */\r\n\t        this._pendingCount = 0;\r\n\t        this._isZoneStable = true;\r\n\t        /**\r\n\t         * Whether any work was done since the last 'whenStable' callback. This is\r\n\t         * useful to detect if this could have potentially destabilized another\r\n\t         * component while it is stabilizing.\r\n\t         * @internal\r\n\t         */\r\n\t        this._didWork = false;\r\n\t        /** @internal */\r\n\t        this._callbacks = [];\r\n\t        this._watchAngularEvents();\r\n\t    }\r\n\t    /** @internal */\r\n\t    Testability.prototype._watchAngularEvents = function () {\r\n\t        var _this = this;\r\n\t        async_1.ObservableWrapper.subscribe(this._ngZone.onUnstable, function (_) {\r\n\t            _this._didWork = true;\r\n\t            _this._isZoneStable = false;\r\n\t        });\r\n\t        this._ngZone.runOutsideAngular(function () {\r\n\t            async_1.ObservableWrapper.subscribe(_this._ngZone.onStable, function (_) {\r\n\t                ng_zone_1.NgZone.assertNotInAngularZone();\r\n\t                lang_1.scheduleMicroTask(function () {\r\n\t                    _this._isZoneStable = true;\r\n\t                    _this._runCallbacksIfReady();\r\n\t                });\r\n\t            });\r\n\t        });\r\n\t    };\r\n\t    Testability.prototype.increasePendingRequestCount = function () {\r\n\t        this._pendingCount += 1;\r\n\t        this._didWork = true;\r\n\t        return this._pendingCount;\r\n\t    };\r\n\t    Testability.prototype.decreasePendingRequestCount = function () {\r\n\t        this._pendingCount -= 1;\r\n\t        if (this._pendingCount < 0) {\r\n\t            throw new exceptions_1.BaseException('pending async requests below zero');\r\n\t        }\r\n\t        this._runCallbacksIfReady();\r\n\t        return this._pendingCount;\r\n\t    };\r\n\t    Testability.prototype.isStable = function () {\r\n\t        return this._isZoneStable && this._pendingCount == 0 && !this._ngZone.hasPendingMacrotasks;\r\n\t    };\r\n\t    /** @internal */\r\n\t    Testability.prototype._runCallbacksIfReady = function () {\r\n\t        var _this = this;\r\n\t        if (this.isStable()) {\r\n\t            // Schedules the call backs in a new frame so that it is always async.\r\n\t            lang_1.scheduleMicroTask(function () {\r\n\t                while (_this._callbacks.length !== 0) {\r\n\t                    (_this._callbacks.pop())(_this._didWork);\r\n\t                }\r\n\t                _this._didWork = false;\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            // Not Ready\r\n\t            this._didWork = true;\r\n\t        }\r\n\t    };\r\n\t    Testability.prototype.whenStable = function (callback) {\r\n\t        this._callbacks.push(callback);\r\n\t        this._runCallbacksIfReady();\r\n\t    };\r\n\t    Testability.prototype.getPendingRequestCount = function () { return this._pendingCount; };\r\n\t    Testability.prototype.findBindings = function (using, provider, exactMatch) {\r\n\t        // TODO(juliemr): implement.\r\n\t        return [];\r\n\t    };\r\n\t    Testability.prototype.findProviders = function (using, provider, exactMatch) {\r\n\t        // TODO(juliemr): implement.\r\n\t        return [];\r\n\t    };\r\n\t    Testability = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [ng_zone_1.NgZone])\r\n\t    ], Testability);\r\n\t    return Testability;\r\n\t})();\r\n\texports.Testability = Testability;\r\n\t/**\r\n\t * A global registry of {@link Testability} instances for specific elements.\r\n\t */\r\n\tvar TestabilityRegistry = (function () {\r\n\t    function TestabilityRegistry() {\r\n\t        /** @internal */\r\n\t        this._applications = new collection_1.Map();\r\n\t        _testabilityGetter.addToWindow(this);\r\n\t    }\r\n\t    TestabilityRegistry.prototype.registerApplication = function (token, testability) {\r\n\t        this._applications.set(token, testability);\r\n\t    };\r\n\t    TestabilityRegistry.prototype.getTestability = function (elem) { return this._applications.get(elem); };\r\n\t    TestabilityRegistry.prototype.getAllTestabilities = function () { return collection_1.MapWrapper.values(this._applications); };\r\n\t    TestabilityRegistry.prototype.getAllRootElements = function () { return collection_1.MapWrapper.keys(this._applications); };\r\n\t    TestabilityRegistry.prototype.findTestabilityInTree = function (elem, findInAncestors) {\r\n\t        if (findInAncestors === void 0) { findInAncestors = true; }\r\n\t        return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors);\r\n\t    };\r\n\t    TestabilityRegistry = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], TestabilityRegistry);\r\n\t    return TestabilityRegistry;\r\n\t})();\r\n\texports.TestabilityRegistry = TestabilityRegistry;\r\n\tvar _NoopGetTestability = (function () {\r\n\t    function _NoopGetTestability() {\r\n\t    }\r\n\t    _NoopGetTestability.prototype.addToWindow = function (registry) { };\r\n\t    _NoopGetTestability.prototype.findTestabilityInTree = function (registry, elem, findInAncestors) {\r\n\t        return null;\r\n\t    };\r\n\t    _NoopGetTestability = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], _NoopGetTestability);\r\n\t    return _NoopGetTestability;\r\n\t})();\r\n\t/**\r\n\t * Set the {@link GetTestability} implementation used by the Angular testing framework.\r\n\t */\r\n\tfunction setTestabilityGetter(getter) {\r\n\t    _testabilityGetter = getter;\r\n\t}\r\n\texports.setTestabilityGetter = setTestabilityGetter;\r\n\tvar _testabilityGetter = lang_1.CONST_EXPR(new _NoopGetTestability());\r\n\n\n/***/ },\n/* 136 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var async_1 = __webpack_require__(13);\r\n\tvar ng_zone_impl_1 = __webpack_require__(312);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar ng_zone_impl_2 = __webpack_require__(312);\r\n\texports.NgZoneError = ng_zone_impl_2.NgZoneError;\r\n\t/**\r\n\t * An injectable service for executing work inside or outside of the Angular zone.\r\n\t *\r\n\t * The most common use of this service is to optimize performance when starting a work consisting of\r\n\t * one or more asynchronous tasks that don't require UI updates or error handling to be handled by\r\n\t * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks\r\n\t * can reenter the Angular zone via {@link #run}.\r\n\t *\r\n\t * <!-- TODO: add/fix links to:\r\n\t *   - docs explaining zones and the use of zones in Angular and change-detection\r\n\t *   - link to runOutsideAngular/run (throughout this file!)\r\n\t *   -->\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\r\n\t * ```\r\n\t * import {Component, View, NgZone} from 'angular2/core';\r\n\t * import {NgIf} from 'angular2/common';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'ng-zone-demo'.\r\n\t *   template: `\r\n\t *     <h2>Demo: NgZone</h2>\r\n\t *\r\n\t *     <p>Progress: {{progress}}%</p>\r\n\t *     <p *ngIf=\"progress >= 100\">Done processing {{label}} of Angular zone!</p>\r\n\t *\r\n\t *     <button (click)=\"processWithinAngularZone()\">Process within Angular zone</button>\r\n\t *     <button (click)=\"processOutsideOfAngularZone()\">Process outside of Angular zone</button>\r\n\t *   `,\r\n\t *   directives: [NgIf]\r\n\t * })\r\n\t * export class NgZoneDemo {\r\n\t *   progress: number = 0;\r\n\t *   label: string;\r\n\t *\r\n\t *   constructor(private _ngZone: NgZone) {}\r\n\t *\r\n\t *   // Loop inside the Angular zone\r\n\t *   // so the UI DOES refresh after each setTimeout cycle\r\n\t *   processWithinAngularZone() {\r\n\t *     this.label = 'inside';\r\n\t *     this.progress = 0;\r\n\t *     this._increaseProgress(() => console.log('Inside Done!'));\r\n\t *   }\r\n\t *\r\n\t *   // Loop outside of the Angular zone\r\n\t *   // so the UI DOES NOT refresh after each setTimeout cycle\r\n\t *   processOutsideOfAngularZone() {\r\n\t *     this.label = 'outside';\r\n\t *     this.progress = 0;\r\n\t *     this._ngZone.runOutsideAngular(() => {\r\n\t *       this._increaseProgress(() => {\r\n\t *       // reenter the Angular zone and display done\r\n\t *       this._ngZone.run(() => {console.log('Outside Done!') });\r\n\t *     }}));\r\n\t *   }\r\n\t *\r\n\t *\r\n\t *   _increaseProgress(doneCallback: () => void) {\r\n\t *     this.progress += 1;\r\n\t *     console.log(`Current progress: ${this.progress}%`);\r\n\t *\r\n\t *     if (this.progress < 100) {\r\n\t *       window.setTimeout(() => this._increaseProgress(doneCallback)), 10)\r\n\t *     } else {\r\n\t *       doneCallback();\r\n\t *     }\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar NgZone = (function () {\r\n\t    /**\r\n\t     * @param {bool} enableLongStackTrace whether to enable long stack trace. They should only be\r\n\t     *               enabled in development mode as they significantly impact perf.\r\n\t     */\r\n\t    function NgZone(_a) {\r\n\t        var _this = this;\r\n\t        var _b = _a.enableLongStackTrace, enableLongStackTrace = _b === void 0 ? false : _b;\r\n\t        this._hasPendingMicrotasks = false;\r\n\t        this._hasPendingMacrotasks = false;\r\n\t        /** @internal */\r\n\t        this._isStable = true;\r\n\t        /** @internal */\r\n\t        this._nesting = 0;\r\n\t        /** @internal */\r\n\t        this._onUnstable = new async_1.EventEmitter(false);\r\n\t        /** @internal */\r\n\t        this._onMicrotaskEmpty = new async_1.EventEmitter(false);\r\n\t        /** @internal */\r\n\t        this._onStable = new async_1.EventEmitter(false);\r\n\t        /** @internal */\r\n\t        this._onErrorEvents = new async_1.EventEmitter(false);\r\n\t        this._zoneImpl = new ng_zone_impl_1.NgZoneImpl({\r\n\t            trace: enableLongStackTrace,\r\n\t            onEnter: function () {\r\n\t                // console.log('ZONE.enter', this._nesting, this._isStable);\r\n\t                _this._nesting++;\r\n\t                if (_this._isStable) {\r\n\t                    _this._isStable = false;\r\n\t                    _this._onUnstable.emit(null);\r\n\t                }\r\n\t            },\r\n\t            onLeave: function () {\r\n\t                _this._nesting--;\r\n\t                // console.log('ZONE.leave', this._nesting, this._isStable);\r\n\t                _this._checkStable();\r\n\t            },\r\n\t            setMicrotask: function (hasMicrotasks) {\r\n\t                _this._hasPendingMicrotasks = hasMicrotasks;\r\n\t                _this._checkStable();\r\n\t            },\r\n\t            setMacrotask: function (hasMacrotasks) { _this._hasPendingMacrotasks = hasMacrotasks; },\r\n\t            onError: function (error) { return _this._onErrorEvents.emit(error); }\r\n\t        });\r\n\t    }\r\n\t    NgZone.isInAngularZone = function () { return ng_zone_impl_1.NgZoneImpl.isInAngularZone(); };\r\n\t    NgZone.assertInAngularZone = function () {\r\n\t        if (!ng_zone_impl_1.NgZoneImpl.isInAngularZone()) {\r\n\t            throw new exceptions_1.BaseException('Expected to be in Angular Zone, but it is not!');\r\n\t        }\r\n\t    };\r\n\t    NgZone.assertNotInAngularZone = function () {\r\n\t        if (ng_zone_impl_1.NgZoneImpl.isInAngularZone()) {\r\n\t            throw new exceptions_1.BaseException('Expected to not be in Angular Zone, but it is!');\r\n\t        }\r\n\t    };\r\n\t    NgZone.prototype._checkStable = function () {\r\n\t        var _this = this;\r\n\t        if (this._nesting == 0) {\r\n\t            if (!this._hasPendingMicrotasks && !this._isStable) {\r\n\t                try {\r\n\t                    // console.log('ZONE.microtaskEmpty');\r\n\t                    this._nesting++;\r\n\t                    this._onMicrotaskEmpty.emit(null);\r\n\t                }\r\n\t                finally {\r\n\t                    this._nesting--;\r\n\t                    if (!this._hasPendingMicrotasks) {\r\n\t                        try {\r\n\t                            // console.log('ZONE.stable', this._nesting, this._isStable);\r\n\t                            this.runOutsideAngular(function () { return _this._onStable.emit(null); });\r\n\t                        }\r\n\t                        finally {\r\n\t                            this._isStable = true;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ;\r\n\t    Object.defineProperty(NgZone.prototype, \"onUnstable\", {\r\n\t        /**\r\n\t         * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\r\n\t         */\r\n\t        get: function () { return this._onUnstable; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgZone.prototype, \"onMicrotaskEmpty\", {\r\n\t        /**\r\n\t         * Notifies when there is no more microtasks enqueue in the current VM Turn.\r\n\t         * This is a hint for Angular to do change detection, which may enqueue more microtasks.\r\n\t         * For this reason this event can fire multiple times per VM Turn.\r\n\t         */\r\n\t        get: function () { return this._onMicrotaskEmpty; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgZone.prototype, \"onStable\", {\r\n\t        /**\r\n\t         * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\r\n\t         * implies we are about to relinquish VM turn.\r\n\t         * This event gets called just once.\r\n\t         */\r\n\t        get: function () { return this._onStable; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgZone.prototype, \"onError\", {\r\n\t        /**\r\n\t         * Notify that an error has been delivered.\r\n\t         */\r\n\t        get: function () { return this._onErrorEvents; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgZone.prototype, \"hasPendingMicrotasks\", {\r\n\t        /**\r\n\t         * Whether there are any outstanding microtasks.\r\n\t         */\r\n\t        get: function () { return this._hasPendingMicrotasks; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgZone.prototype, \"hasPendingMacrotasks\", {\r\n\t        /**\r\n\t         * Whether there are any outstanding microtasks.\r\n\t         */\r\n\t        get: function () { return this._hasPendingMacrotasks; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * Executes the `fn` function synchronously within the Angular zone and returns value returned by\r\n\t     * the function.\r\n\t     *\r\n\t     * Running functions via `run` allows you to reenter Angular zone from a task that was executed\r\n\t     * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\r\n\t     *\r\n\t     * Any future tasks or microtasks scheduled from within this function will continue executing from\r\n\t     * within the Angular zone.\r\n\t     */\r\n\t    NgZone.prototype.run = function (fn) { return this._zoneImpl.runInner(fn); };\r\n\t    /**\r\n\t     * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by\r\n\t     * the function.\r\n\t     *\r\n\t     * Running functions via `runOutsideAngular` allows you to escape Angular's zone and do work that\r\n\t     * doesn't trigger Angular change-detection or is subject to Angular's error handling.\r\n\t     *\r\n\t     * Any future tasks or microtasks scheduled from within this function will continue executing from\r\n\t     * outside of the Angular zone.\r\n\t     *\r\n\t     * Use {@link #run} to reenter the Angular zone and do work that updates the application model.\r\n\t     */\r\n\t    NgZone.prototype.runOutsideAngular = function (fn) { return this._zoneImpl.runOuter(fn); };\r\n\t    return NgZone;\r\n\t})();\r\n\texports.NgZone = NgZone;\r\n\n\n/***/ },\n/* 137 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar headers_1 = __webpack_require__(102);\r\n\tvar enums_1 = __webpack_require__(64);\r\n\t/**\r\n\t * Creates a response options object to be optionally provided when instantiating a\r\n\t * {@link Response}.\r\n\t *\r\n\t * This class is based on the `ResponseInit` description in the [Fetch\r\n\t * Spec](https://fetch.spec.whatwg.org/#responseinit).\r\n\t *\r\n\t * All values are null by default. Typical defaults can be found in the\r\n\t * {@link BaseResponseOptions} class, which sub-classes `ResponseOptions`.\r\n\t *\r\n\t * This class may be used in tests to build {@link Response Responses} for\r\n\t * mock responses (see {@link MockBackend}).\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/P9Jkk8e8cz6NVzbcxEsD?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * import {ResponseOptions, Response} from 'angular2/http';\r\n\t *\r\n\t * var options = new ResponseOptions({\r\n\t *   body: '{\"name\":\"Jeff\"}'\r\n\t * });\r\n\t * var res = new Response(options);\r\n\t *\r\n\t * console.log('res.json():', res.json()); // Object {name: \"Jeff\"}\r\n\t * ```\r\n\t */\r\n\tvar ResponseOptions = (function () {\r\n\t    function ResponseOptions(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, body = _b.body, status = _b.status, headers = _b.headers, statusText = _b.statusText, type = _b.type, url = _b.url;\r\n\t        this.body = lang_1.isPresent(body) ? body : null;\r\n\t        this.status = lang_1.isPresent(status) ? status : null;\r\n\t        this.headers = lang_1.isPresent(headers) ? headers : null;\r\n\t        this.statusText = lang_1.isPresent(statusText) ? statusText : null;\r\n\t        this.type = lang_1.isPresent(type) ? type : null;\r\n\t        this.url = lang_1.isPresent(url) ? url : null;\r\n\t    }\r\n\t    /**\r\n\t     * Creates a copy of the `ResponseOptions` instance, using the optional input as values to\r\n\t     * override\r\n\t     * existing values. This method will not change the values of the instance on which it is being\r\n\t     * called.\r\n\t     *\r\n\t     * This may be useful when sharing a base `ResponseOptions` object inside tests,\r\n\t     * where certain properties may change from test to test.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/1lXquqFfgduTFBWjNoRE?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * import {ResponseOptions, Response} from 'angular2/http';\r\n\t     *\r\n\t     * var options = new ResponseOptions({\r\n\t     *   body: {name: 'Jeff'}\r\n\t     * });\r\n\t     * var res = new Response(options.merge({\r\n\t     *   url: 'https://google.com'\r\n\t     * }));\r\n\t     * console.log('options.url:', options.url); // null\r\n\t     * console.log('res.json():', res.json()); // Object {name: \"Jeff\"}\r\n\t     * console.log('res.url:', res.url); // https://google.com\r\n\t     * ```\r\n\t     */\r\n\t    ResponseOptions.prototype.merge = function (options) {\r\n\t        return new ResponseOptions({\r\n\t            body: lang_1.isPresent(options) && lang_1.isPresent(options.body) ? options.body : this.body,\r\n\t            status: lang_1.isPresent(options) && lang_1.isPresent(options.status) ? options.status : this.status,\r\n\t            headers: lang_1.isPresent(options) && lang_1.isPresent(options.headers) ? options.headers : this.headers,\r\n\t            statusText: lang_1.isPresent(options) && lang_1.isPresent(options.statusText) ? options.statusText :\r\n\t                this.statusText,\r\n\t            type: lang_1.isPresent(options) && lang_1.isPresent(options.type) ? options.type : this.type,\r\n\t            url: lang_1.isPresent(options) && lang_1.isPresent(options.url) ? options.url : this.url,\r\n\t        });\r\n\t    };\r\n\t    return ResponseOptions;\r\n\t})();\r\n\texports.ResponseOptions = ResponseOptions;\r\n\t/**\r\n\t * Subclass of {@link ResponseOptions}, with default values.\r\n\t *\r\n\t * Default values:\r\n\t *  * status: 200\r\n\t *  * headers: empty {@link Headers} object\r\n\t *\r\n\t * This class could be extended and bound to the {@link ResponseOptions} class\r\n\t * when configuring an {@link Injector}, in order to override the default options\r\n\t * used by {@link Http} to create {@link Response Responses}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/qv8DLT?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * import {provide} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {HTTP_PROVIDERS, Headers, Http, BaseResponseOptions, ResponseOptions} from\r\n\t * 'angular2/http';\r\n\t * import {App} from './myapp';\r\n\t *\r\n\t * class MyOptions extends BaseResponseOptions {\r\n\t *   headers:Headers = new Headers({network: 'github'});\r\n\t * }\r\n\t *\r\n\t * bootstrap(App, [HTTP_PROVIDERS, provide(ResponseOptions, {useClass: MyOptions})]);\r\n\t * ```\r\n\t *\r\n\t * The options could also be extended when manually creating a {@link Response}\r\n\t * object.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/VngosOWiaExEtbstDoix?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {BaseResponseOptions, Response} from 'angular2/http';\r\n\t *\r\n\t * var options = new BaseResponseOptions();\r\n\t * var res = new Response(options.merge({\r\n\t *   body: 'Angular2',\r\n\t *   headers: new Headers({framework: 'angular'})\r\n\t * }));\r\n\t * console.log('res.headers.get(\"framework\"):', res.headers.get('framework')); // angular\r\n\t * console.log('res.text():', res.text()); // Angular2;\r\n\t * ```\r\n\t */\r\n\tvar BaseResponseOptions = (function (_super) {\r\n\t    __extends(BaseResponseOptions, _super);\r\n\t    function BaseResponseOptions() {\r\n\t        _super.call(this, { status: 200, statusText: 'Ok', type: enums_1.ResponseType.Default, headers: new headers_1.Headers() });\r\n\t    }\r\n\t    BaseResponseOptions = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], BaseResponseOptions);\r\n\t    return BaseResponseOptions;\r\n\t})(ResponseOptions);\r\n\texports.BaseResponseOptions = BaseResponseOptions;\r\n\n\n/***/ },\n/* 138 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar enums_1 = __webpack_require__(64);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tfunction normalizeMethodName(method) {\r\n\t    if (lang_1.isString(method)) {\r\n\t        var originalMethod = method;\r\n\t        method = method\r\n\t            .replace(/(\\w)(\\w*)/g, function (g0, g1, g2) {\r\n\t            return g1.toUpperCase() + g2.toLowerCase();\r\n\t        });\r\n\t        method = enums_1.RequestMethod[method];\r\n\t        if (typeof method !== 'number')\r\n\t            throw exceptions_1.makeTypeError(\"Invalid request method. The method \\\"\" + originalMethod + \"\\\" is not supported.\");\r\n\t    }\r\n\t    return method;\r\n\t}\r\n\texports.normalizeMethodName = normalizeMethodName;\r\n\texports.isSuccess = function (status) { return (status >= 200 && status < 300); };\r\n\tfunction getResponseURL(xhr) {\r\n\t    if ('responseURL' in xhr) {\r\n\t        return xhr.responseURL;\r\n\t    }\r\n\t    if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\r\n\t        return xhr.getResponseHeader('X-Request-URL');\r\n\t    }\r\n\t    return;\r\n\t}\r\n\texports.getResponseURL = getResponseURL;\r\n\tvar lang_2 = __webpack_require__(1);\r\n\texports.isJsObject = lang_2.isJsObject;\r\n\n\n/***/ },\n/* 139 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar dom_tokens_1 = __webpack_require__(103);\r\n\tvar SharedStylesHost = (function () {\r\n\t    function SharedStylesHost() {\r\n\t        /** @internal */\r\n\t        this._styles = [];\r\n\t        /** @internal */\r\n\t        this._stylesSet = new Set();\r\n\t    }\r\n\t    SharedStylesHost.prototype.addStyles = function (styles) {\r\n\t        var _this = this;\r\n\t        var additions = [];\r\n\t        styles.forEach(function (style) {\r\n\t            if (!collection_1.SetWrapper.has(_this._stylesSet, style)) {\r\n\t                _this._stylesSet.add(style);\r\n\t                _this._styles.push(style);\r\n\t                additions.push(style);\r\n\t            }\r\n\t        });\r\n\t        this.onStylesAdded(additions);\r\n\t    };\r\n\t    SharedStylesHost.prototype.onStylesAdded = function (additions) { };\r\n\t    SharedStylesHost.prototype.getAllStyles = function () { return this._styles; };\r\n\t    SharedStylesHost = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], SharedStylesHost);\r\n\t    return SharedStylesHost;\r\n\t})();\r\n\texports.SharedStylesHost = SharedStylesHost;\r\n\tvar DomSharedStylesHost = (function (_super) {\r\n\t    __extends(DomSharedStylesHost, _super);\r\n\t    function DomSharedStylesHost(doc) {\r\n\t        _super.call(this);\r\n\t        this._hostNodes = new Set();\r\n\t        this._hostNodes.add(doc.head);\r\n\t    }\r\n\t    /** @internal */\r\n\t    DomSharedStylesHost.prototype._addStylesToHost = function (styles, host) {\r\n\t        for (var i = 0; i < styles.length; i++) {\r\n\t            var style = styles[i];\r\n\t            dom_adapter_1.DOM.appendChild(host, dom_adapter_1.DOM.createStyleElement(style));\r\n\t        }\r\n\t    };\r\n\t    DomSharedStylesHost.prototype.addHost = function (hostNode) {\r\n\t        this._addStylesToHost(this._styles, hostNode);\r\n\t        this._hostNodes.add(hostNode);\r\n\t    };\r\n\t    DomSharedStylesHost.prototype.removeHost = function (hostNode) { collection_1.SetWrapper.delete(this._hostNodes, hostNode); };\r\n\t    DomSharedStylesHost.prototype.onStylesAdded = function (additions) {\r\n\t        var _this = this;\r\n\t        this._hostNodes.forEach(function (hostNode) { _this._addStylesToHost(additions, hostNode); });\r\n\t    };\r\n\t    DomSharedStylesHost = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        __param(0, di_1.Inject(dom_tokens_1.DOCUMENT)), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], DomSharedStylesHost);\r\n\t    return DomSharedStylesHost;\r\n\t})(SharedStylesHost);\r\n\texports.DomSharedStylesHost = DomSharedStylesHost;\r\n\n\n/***/ },\n/* 140 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar location_strategy_1 = __webpack_require__(104);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar core_1 = __webpack_require__(4);\r\n\t/**\r\n\t * `Location` is a service that applications can use to interact with a browser's URL.\r\n\t * Depending on which {@link LocationStrategy} is used, `Location` will either persist\r\n\t * to the URL's path or the URL's hash segment.\r\n\t *\r\n\t * Note: it's better to use {@link Router#navigate} service to trigger route changes. Use\r\n\t * `Location` only if you need to interact with or create normalized URLs outside of\r\n\t * routing.\r\n\t *\r\n\t * `Location` is responsible for normalizing the URL against the application's base href.\r\n\t * A normalized URL is absolute from the URL host, includes the application's base href, and has no\r\n\t * trailing slash:\r\n\t * - `/my/app/user/123` is normalized\r\n\t * - `my/app/user/123` **is not** normalized\r\n\t * - `/my/app/user/123/` **is not** normalized\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {\r\n\t *   ROUTER_DIRECTIVES,\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   RouteConfig,\r\n\t *   Location\r\n\t * } from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   constructor(location: Location) {\r\n\t *     location.go('/foo');\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\r\n\t * ```\r\n\t */\r\n\tvar Location = (function () {\r\n\t    function Location(platformStrategy) {\r\n\t        var _this = this;\r\n\t        this.platformStrategy = platformStrategy;\r\n\t        /** @internal */\r\n\t        this._subject = new async_1.EventEmitter();\r\n\t        var browserBaseHref = this.platformStrategy.getBaseHref();\r\n\t        this._baseHref = stripTrailingSlash(stripIndexHtml(browserBaseHref));\r\n\t        this.platformStrategy.onPopState(function (ev) {\r\n\t            async_1.ObservableWrapper.callEmit(_this._subject, { 'url': _this.path(), 'pop': true, 'type': ev.type });\r\n\t        });\r\n\t    }\r\n\t    /**\r\n\t     * Returns the normalized URL path.\r\n\t     */\r\n\t    Location.prototype.path = function () { return this.normalize(this.platformStrategy.path()); };\r\n\t    /**\r\n\t     * Given a string representing a URL, returns the normalized URL path without leading or\r\n\t     * trailing slashes\r\n\t     */\r\n\t    Location.prototype.normalize = function (url) {\r\n\t        return stripTrailingSlash(_stripBaseHref(this._baseHref, stripIndexHtml(url)));\r\n\t    };\r\n\t    /**\r\n\t     * Given a string representing a URL, returns the platform-specific external URL path.\r\n\t     * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one\r\n\t     * before normalizing. This method will also add a hash if `HashLocationStrategy` is\r\n\t     * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\r\n\t     */\r\n\t    Location.prototype.prepareExternalUrl = function (url) {\r\n\t        if (url.length > 0 && !url.startsWith('/')) {\r\n\t            url = '/' + url;\r\n\t        }\r\n\t        return this.platformStrategy.prepareExternalUrl(url);\r\n\t    };\r\n\t    // TODO: rename this method to pushState\r\n\t    /**\r\n\t     * Changes the browsers URL to the normalized version of the given URL, and pushes a\r\n\t     * new item onto the platform's history.\r\n\t     */\r\n\t    Location.prototype.go = function (path, query) {\r\n\t        if (query === void 0) { query = ''; }\r\n\t        this.platformStrategy.pushState(null, '', path, query);\r\n\t    };\r\n\t    /**\r\n\t     * Changes the browsers URL to the normalized version of the given URL, and replaces\r\n\t     * the top item on the platform's history stack.\r\n\t     */\r\n\t    Location.prototype.replaceState = function (path, query) {\r\n\t        if (query === void 0) { query = ''; }\r\n\t        this.platformStrategy.replaceState(null, '', path, query);\r\n\t    };\r\n\t    /**\r\n\t     * Navigates forward in the platform's history.\r\n\t     */\r\n\t    Location.prototype.forward = function () { this.platformStrategy.forward(); };\r\n\t    /**\r\n\t     * Navigates back in the platform's history.\r\n\t     */\r\n\t    Location.prototype.back = function () { this.platformStrategy.back(); };\r\n\t    /**\r\n\t     * Subscribe to the platform's `popState` events.\r\n\t     */\r\n\t    Location.prototype.subscribe = function (onNext, onThrow, onReturn) {\r\n\t        if (onThrow === void 0) { onThrow = null; }\r\n\t        if (onReturn === void 0) { onReturn = null; }\r\n\t        return async_1.ObservableWrapper.subscribe(this._subject, onNext, onThrow, onReturn);\r\n\t    };\r\n\t    Location = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [location_strategy_1.LocationStrategy])\r\n\t    ], Location);\r\n\t    return Location;\r\n\t})();\r\n\texports.Location = Location;\r\n\tfunction _stripBaseHref(baseHref, url) {\r\n\t    if (baseHref.length > 0 && url.startsWith(baseHref)) {\r\n\t        return url.substring(baseHref.length);\r\n\t    }\r\n\t    return url;\r\n\t}\r\n\tfunction stripIndexHtml(url) {\r\n\t    if (/\\/index.html$/g.test(url)) {\r\n\t        // '/index.html'.length == 11\r\n\t        return url.substring(0, url.length - 11);\r\n\t    }\r\n\t    return url;\r\n\t}\r\n\tfunction stripTrailingSlash(url) {\r\n\t    if (/\\/$/g.test(url)) {\r\n\t        url = url.substring(0, url.length - 1);\r\n\t    }\r\n\t    return url;\r\n\t}\r\n\n\n/***/ },\n/* 141 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar __make_dart_analyzer_happy = null;\r\n\t/**\r\n\t * The `RouteConfig` decorator defines routes for a given component.\r\n\t *\r\n\t * It takes an array of {@link RouteDefinition}s.\r\n\t */\r\n\tvar RouteConfig = (function () {\r\n\t    function RouteConfig(configs) {\r\n\t        this.configs = configs;\r\n\t    }\r\n\t    RouteConfig = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Array])\r\n\t    ], RouteConfig);\r\n\t    return RouteConfig;\r\n\t})();\r\n\texports.RouteConfig = RouteConfig;\r\n\tvar AbstractRoute = (function () {\r\n\t    function AbstractRoute(_a) {\r\n\t        var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data;\r\n\t        this.name = name;\r\n\t        this.useAsDefault = useAsDefault;\r\n\t        this.path = path;\r\n\t        this.regex = regex;\r\n\t        this.serializer = serializer;\r\n\t        this.data = data;\r\n\t    }\r\n\t    AbstractRoute = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], AbstractRoute);\r\n\t    return AbstractRoute;\r\n\t})();\r\n\texports.AbstractRoute = AbstractRoute;\r\n\t/**\r\n\t * `Route` is a type of {@link RouteDefinition} used to route a path to a component.\r\n\t *\r\n\t * It has the following properties:\r\n\t * - `path` is a string that uses the route matcher DSL.\r\n\t * - `component` a component type.\r\n\t * - `name` is an optional `CamelCase` string representing the name of the route.\r\n\t * - `data` is an optional property of any type representing arbitrary route metadata for the given\r\n\t * route. It is injectable via {@link RouteData}.\r\n\t * - `useAsDefault` is a boolean value. If `true`, the child route will be navigated to if no child\r\n\t * route is specified during the navigation.\r\n\t *\r\n\t * ### Example\r\n\t * ```\r\n\t * import {RouteConfig, Route} from 'angular2/router';\r\n\t *\r\n\t * @RouteConfig([\r\n\t *   new Route({path: '/home', component: HomeCmp, name: 'HomeCmp' })\r\n\t * ])\r\n\t * class MyApp {}\r\n\t * ```\r\n\t */\r\n\tvar Route = (function (_super) {\r\n\t    __extends(Route, _super);\r\n\t    function Route(_a) {\r\n\t        var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, component = _a.component;\r\n\t        _super.call(this, {\r\n\t            name: name,\r\n\t            useAsDefault: useAsDefault,\r\n\t            path: path,\r\n\t            regex: regex,\r\n\t            serializer: serializer,\r\n\t            data: data\r\n\t        });\r\n\t        this.aux = null;\r\n\t        this.component = component;\r\n\t    }\r\n\t    Route = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], Route);\r\n\t    return Route;\r\n\t})(AbstractRoute);\r\n\texports.Route = Route;\r\n\t/**\r\n\t * `AuxRoute` is a type of {@link RouteDefinition} used to define an auxiliary route.\r\n\t *\r\n\t * It takes an object with the following properties:\r\n\t * - `path` is a string that uses the route matcher DSL.\r\n\t * - `component` a component type.\r\n\t * - `name` is an optional `CamelCase` string representing the name of the route.\r\n\t * - `data` is an optional property of any type representing arbitrary route metadata for the given\r\n\t * route. It is injectable via {@link RouteData}.\r\n\t *\r\n\t * ### Example\r\n\t * ```\r\n\t * import {RouteConfig, AuxRoute} from 'angular2/router';\r\n\t *\r\n\t * @RouteConfig([\r\n\t *   new AuxRoute({path: '/home', component: HomeCmp})\r\n\t * ])\r\n\t * class MyApp {}\r\n\t * ```\r\n\t */\r\n\tvar AuxRoute = (function (_super) {\r\n\t    __extends(AuxRoute, _super);\r\n\t    function AuxRoute(_a) {\r\n\t        var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, component = _a.component;\r\n\t        _super.call(this, {\r\n\t            name: name,\r\n\t            useAsDefault: useAsDefault,\r\n\t            path: path,\r\n\t            regex: regex,\r\n\t            serializer: serializer,\r\n\t            data: data\r\n\t        });\r\n\t        this.component = component;\r\n\t    }\r\n\t    AuxRoute = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], AuxRoute);\r\n\t    return AuxRoute;\r\n\t})(AbstractRoute);\r\n\texports.AuxRoute = AuxRoute;\r\n\t/**\r\n\t * `AsyncRoute` is a type of {@link RouteDefinition} used to route a path to an asynchronously\r\n\t * loaded component.\r\n\t *\r\n\t * It has the following properties:\r\n\t * - `path` is a string that uses the route matcher DSL.\r\n\t * - `loader` is a function that returns a promise that resolves to a component.\r\n\t * - `name` is an optional `CamelCase` string representing the name of the route.\r\n\t * - `data` is an optional property of any type representing arbitrary route metadata for the given\r\n\t * route. It is injectable via {@link RouteData}.\r\n\t * - `useAsDefault` is a boolean value. If `true`, the child route will be navigated to if no child\r\n\t * route is specified during the navigation.\r\n\t *\r\n\t * ### Example\r\n\t * ```\r\n\t * import {RouteConfig, AsyncRoute} from 'angular2/router';\r\n\t *\r\n\t * @RouteConfig([\r\n\t *   new AsyncRoute({path: '/home', loader: () => Promise.resolve(MyLoadedCmp), name:\r\n\t * 'MyLoadedCmp'})\r\n\t * ])\r\n\t * class MyApp {}\r\n\t * ```\r\n\t */\r\n\tvar AsyncRoute = (function (_super) {\r\n\t    __extends(AsyncRoute, _super);\r\n\t    function AsyncRoute(_a) {\r\n\t        var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, loader = _a.loader;\r\n\t        _super.call(this, {\r\n\t            name: name,\r\n\t            useAsDefault: useAsDefault,\r\n\t            path: path,\r\n\t            regex: regex,\r\n\t            serializer: serializer,\r\n\t            data: data\r\n\t        });\r\n\t        this.aux = null;\r\n\t        this.loader = loader;\r\n\t    }\r\n\t    AsyncRoute = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], AsyncRoute);\r\n\t    return AsyncRoute;\r\n\t})(AbstractRoute);\r\n\texports.AsyncRoute = AsyncRoute;\r\n\t/**\r\n\t * `Redirect` is a type of {@link RouteDefinition} used to route a path to a canonical route.\r\n\t *\r\n\t * It has the following properties:\r\n\t * - `path` is a string that uses the route matcher DSL.\r\n\t * - `redirectTo` is an array representing the link DSL.\r\n\t *\r\n\t * Note that redirects **do not** affect how links are generated. For that, see the `useAsDefault`\r\n\t * option.\r\n\t *\r\n\t * ### Example\r\n\t * ```\r\n\t * import {RouteConfig, Route, Redirect} from 'angular2/router';\r\n\t *\r\n\t * @RouteConfig([\r\n\t *   new Redirect({path: '/', redirectTo: ['/Home'] }),\r\n\t *   new Route({path: '/home', component: HomeCmp, name: 'Home'})\r\n\t * ])\r\n\t * class MyApp {}\r\n\t * ```\r\n\t */\r\n\tvar Redirect = (function (_super) {\r\n\t    __extends(Redirect, _super);\r\n\t    function Redirect(_a) {\r\n\t        var name = _a.name, useAsDefault = _a.useAsDefault, path = _a.path, regex = _a.regex, serializer = _a.serializer, data = _a.data, redirectTo = _a.redirectTo;\r\n\t        _super.call(this, {\r\n\t            name: name,\r\n\t            useAsDefault: useAsDefault,\r\n\t            path: path,\r\n\t            regex: regex,\r\n\t            serializer: serializer,\r\n\t            data: data\r\n\t        });\r\n\t        this.redirectTo = redirectTo;\r\n\t    }\r\n\t    Redirect = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], Redirect);\r\n\t    return Redirect;\r\n\t})(AbstractRoute);\r\n\texports.Redirect = Redirect;\r\n\n\n/***/ },\n/* 142 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar route_registry_1 = __webpack_require__(213);\r\n\tvar location_1 = __webpack_require__(140);\r\n\tvar route_lifecycle_reflector_1 = __webpack_require__(330);\r\n\tvar _resolveToTrue = async_1.PromiseWrapper.resolve(true);\r\n\tvar _resolveToFalse = async_1.PromiseWrapper.resolve(false);\r\n\t/**\r\n\t * The `Router` is responsible for mapping URLs to components.\r\n\t *\r\n\t * You can see the state of the router by inspecting the read-only field `router.navigating`.\r\n\t * This may be useful for showing a spinner, for instance.\r\n\t *\r\n\t * ## Concepts\r\n\t *\r\n\t * Routers and component instances have a 1:1 correspondence.\r\n\t *\r\n\t * The router holds reference to a number of {@link RouterOutlet}.\r\n\t * An outlet is a placeholder that the router dynamically fills in depending on the current URL.\r\n\t *\r\n\t * When the router navigates from a URL, it must first recognize it and serialize it into an\r\n\t * `Instruction`.\r\n\t * The router uses the `RouteRegistry` to get an `Instruction`.\r\n\t */\r\n\tvar Router = (function () {\r\n\t    function Router(registry, parent, hostComponent, root) {\r\n\t        this.registry = registry;\r\n\t        this.parent = parent;\r\n\t        this.hostComponent = hostComponent;\r\n\t        this.root = root;\r\n\t        this.navigating = false;\r\n\t        /**\r\n\t         * The current `Instruction` for the router\r\n\t         */\r\n\t        this.currentInstruction = null;\r\n\t        this._currentNavigation = _resolveToTrue;\r\n\t        this._outlet = null;\r\n\t        this._auxRouters = new collection_1.Map();\r\n\t        this._subject = new async_1.EventEmitter();\r\n\t    }\r\n\t    /**\r\n\t     * Constructs a child router. You probably don't need to use this unless you're writing a reusable\r\n\t     * component.\r\n\t     */\r\n\t    Router.prototype.childRouter = function (hostComponent) {\r\n\t        return this._childRouter = new ChildRouter(this, hostComponent);\r\n\t    };\r\n\t    /**\r\n\t     * Constructs a child router. You probably don't need to use this unless you're writing a reusable\r\n\t     * component.\r\n\t     */\r\n\t    Router.prototype.auxRouter = function (hostComponent) { return new ChildRouter(this, hostComponent); };\r\n\t    /**\r\n\t     * Register an outlet to be notified of primary route changes.\r\n\t     *\r\n\t     * You probably don't need to use this unless you're writing a reusable component.\r\n\t     */\r\n\t    Router.prototype.registerPrimaryOutlet = function (outlet) {\r\n\t        if (lang_1.isPresent(outlet.name)) {\r\n\t            throw new exceptions_1.BaseException(\"registerPrimaryOutlet expects to be called with an unnamed outlet.\");\r\n\t        }\r\n\t        if (lang_1.isPresent(this._outlet)) {\r\n\t            throw new exceptions_1.BaseException(\"Primary outlet is already registered.\");\r\n\t        }\r\n\t        this._outlet = outlet;\r\n\t        if (lang_1.isPresent(this.currentInstruction)) {\r\n\t            return this.commit(this.currentInstruction, false);\r\n\t        }\r\n\t        return _resolveToTrue;\r\n\t    };\r\n\t    /**\r\n\t     * Unregister an outlet (because it was destroyed, etc).\r\n\t     *\r\n\t     * You probably don't need to use this unless you're writing a custom outlet implementation.\r\n\t     */\r\n\t    Router.prototype.unregisterPrimaryOutlet = function (outlet) {\r\n\t        if (lang_1.isPresent(outlet.name)) {\r\n\t            throw new exceptions_1.BaseException(\"registerPrimaryOutlet expects to be called with an unnamed outlet.\");\r\n\t        }\r\n\t        this._outlet = null;\r\n\t    };\r\n\t    /**\r\n\t     * Register an outlet to notified of auxiliary route changes.\r\n\t     *\r\n\t     * You probably don't need to use this unless you're writing a reusable component.\r\n\t     */\r\n\t    Router.prototype.registerAuxOutlet = function (outlet) {\r\n\t        var outletName = outlet.name;\r\n\t        if (lang_1.isBlank(outletName)) {\r\n\t            throw new exceptions_1.BaseException(\"registerAuxOutlet expects to be called with an outlet with a name.\");\r\n\t        }\r\n\t        var router = this.auxRouter(this.hostComponent);\r\n\t        this._auxRouters.set(outletName, router);\r\n\t        router._outlet = outlet;\r\n\t        var auxInstruction;\r\n\t        if (lang_1.isPresent(this.currentInstruction) &&\r\n\t            lang_1.isPresent(auxInstruction = this.currentInstruction.auxInstruction[outletName])) {\r\n\t            return router.commit(auxInstruction);\r\n\t        }\r\n\t        return _resolveToTrue;\r\n\t    };\r\n\t    /**\r\n\t     * Given an instruction, returns `true` if the instruction is currently active,\r\n\t     * otherwise `false`.\r\n\t     */\r\n\t    Router.prototype.isRouteActive = function (instruction) {\r\n\t        var router = this;\r\n\t        while (lang_1.isPresent(router.parent) && lang_1.isPresent(instruction.child)) {\r\n\t            router = router.parent;\r\n\t            instruction = instruction.child;\r\n\t        }\r\n\t        return lang_1.isPresent(this.currentInstruction) &&\r\n\t            this.currentInstruction.component == instruction.component;\r\n\t    };\r\n\t    /**\r\n\t     * Dynamically update the routing configuration and trigger a navigation.\r\n\t     *\r\n\t     * ### Usage\r\n\t     *\r\n\t     * ```\r\n\t     * router.config([\r\n\t     *   { 'path': '/', 'component': IndexComp },\r\n\t     *   { 'path': '/user/:id', 'component': UserComp },\r\n\t     * ]);\r\n\t     * ```\r\n\t     */\r\n\t    Router.prototype.config = function (definitions) {\r\n\t        var _this = this;\r\n\t        definitions.forEach(function (routeDefinition) { _this.registry.config(_this.hostComponent, routeDefinition); });\r\n\t        return this.renavigate();\r\n\t    };\r\n\t    /**\r\n\t     * Navigate based on the provided Route Link DSL. It's preferred to navigate with this method\r\n\t     * over `navigateByUrl`.\r\n\t     *\r\n\t     * ### Usage\r\n\t     *\r\n\t     * This method takes an array representing the Route Link DSL:\r\n\t     * ```\r\n\t     * ['./MyCmp', {param: 3}]\r\n\t     * ```\r\n\t     * See the {@link RouterLink} directive for more.\r\n\t     */\r\n\t    Router.prototype.navigate = function (linkParams) {\r\n\t        var instruction = this.generate(linkParams);\r\n\t        return this.navigateByInstruction(instruction, false);\r\n\t    };\r\n\t    /**\r\n\t     * Navigate to a URL. Returns a promise that resolves when navigation is complete.\r\n\t     * It's preferred to navigate with `navigate` instead of this method, since URLs are more brittle.\r\n\t     *\r\n\t     * If the given URL begins with a `/`, router will navigate absolutely.\r\n\t     * If the given URL does not begin with `/`, the router will navigate relative to this component.\r\n\t     */\r\n\t    Router.prototype.navigateByUrl = function (url, _skipLocationChange) {\r\n\t        var _this = this;\r\n\t        if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n\t        return this._currentNavigation = this._currentNavigation.then(function (_) {\r\n\t            _this.lastNavigationAttempt = url;\r\n\t            _this._startNavigating();\r\n\t            return _this._afterPromiseFinishNavigating(_this.recognize(url).then(function (instruction) {\r\n\t                if (lang_1.isBlank(instruction)) {\r\n\t                    return false;\r\n\t                }\r\n\t                return _this._navigate(instruction, _skipLocationChange);\r\n\t            }));\r\n\t        });\r\n\t    };\r\n\t    /**\r\n\t     * Navigate via the provided instruction. Returns a promise that resolves when navigation is\r\n\t     * complete.\r\n\t     */\r\n\t    Router.prototype.navigateByInstruction = function (instruction, _skipLocationChange) {\r\n\t        var _this = this;\r\n\t        if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n\t        if (lang_1.isBlank(instruction)) {\r\n\t            return _resolveToFalse;\r\n\t        }\r\n\t        return this._currentNavigation = this._currentNavigation.then(function (_) {\r\n\t            _this._startNavigating();\r\n\t            return _this._afterPromiseFinishNavigating(_this._navigate(instruction, _skipLocationChange));\r\n\t        });\r\n\t    };\r\n\t    /** @internal */\r\n\t    Router.prototype._settleInstruction = function (instruction) {\r\n\t        var _this = this;\r\n\t        return instruction.resolveComponent().then(function (_) {\r\n\t            var unsettledInstructions = [];\r\n\t            if (lang_1.isPresent(instruction.component)) {\r\n\t                instruction.component.reuse = false;\r\n\t            }\r\n\t            if (lang_1.isPresent(instruction.child)) {\r\n\t                unsettledInstructions.push(_this._settleInstruction(instruction.child));\r\n\t            }\r\n\t            collection_1.StringMapWrapper.forEach(instruction.auxInstruction, function (instruction, _) {\r\n\t                unsettledInstructions.push(_this._settleInstruction(instruction));\r\n\t            });\r\n\t            return async_1.PromiseWrapper.all(unsettledInstructions);\r\n\t        });\r\n\t    };\r\n\t    /** @internal */\r\n\t    Router.prototype._navigate = function (instruction, _skipLocationChange) {\r\n\t        var _this = this;\r\n\t        return this._settleInstruction(instruction)\r\n\t            .then(function (_) { return _this._routerCanReuse(instruction); })\r\n\t            .then(function (_) { return _this._canActivate(instruction); })\r\n\t            .then(function (result) {\r\n\t            if (!result) {\r\n\t                return false;\r\n\t            }\r\n\t            return _this._routerCanDeactivate(instruction)\r\n\t                .then(function (result) {\r\n\t                if (result) {\r\n\t                    return _this.commit(instruction, _skipLocationChange)\r\n\t                        .then(function (_) {\r\n\t                        _this._emitNavigationFinish(instruction.toRootUrl());\r\n\t                        return true;\r\n\t                    });\r\n\t                }\r\n\t            });\r\n\t        });\r\n\t    };\r\n\t    Router.prototype._emitNavigationFinish = function (url) { async_1.ObservableWrapper.callEmit(this._subject, url); };\r\n\t    Router.prototype._emitNavigationFail = function (url) { async_1.ObservableWrapper.callError(this._subject, url); };\r\n\t    Router.prototype._afterPromiseFinishNavigating = function (promise) {\r\n\t        var _this = this;\r\n\t        return async_1.PromiseWrapper.catchError(promise.then(function (_) { return _this._finishNavigating(); }), function (err) {\r\n\t            _this._finishNavigating();\r\n\t            throw err;\r\n\t        });\r\n\t    };\r\n\t    /*\r\n\t     * Recursively set reuse flags\r\n\t     */\r\n\t    /** @internal */\r\n\t    Router.prototype._routerCanReuse = function (instruction) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isBlank(this._outlet)) {\r\n\t            return _resolveToFalse;\r\n\t        }\r\n\t        if (lang_1.isBlank(instruction.component)) {\r\n\t            return _resolveToTrue;\r\n\t        }\r\n\t        return this._outlet.routerCanReuse(instruction.component)\r\n\t            .then(function (result) {\r\n\t            instruction.component.reuse = result;\r\n\t            if (result && lang_1.isPresent(_this._childRouter) && lang_1.isPresent(instruction.child)) {\r\n\t                return _this._childRouter._routerCanReuse(instruction.child);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    Router.prototype._canActivate = function (nextInstruction) {\r\n\t        return canActivateOne(nextInstruction, this.currentInstruction);\r\n\t    };\r\n\t    Router.prototype._routerCanDeactivate = function (instruction) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isBlank(this._outlet)) {\r\n\t            return _resolveToTrue;\r\n\t        }\r\n\t        var next;\r\n\t        var childInstruction = null;\r\n\t        var reuse = false;\r\n\t        var componentInstruction = null;\r\n\t        if (lang_1.isPresent(instruction)) {\r\n\t            childInstruction = instruction.child;\r\n\t            componentInstruction = instruction.component;\r\n\t            reuse = lang_1.isBlank(instruction.component) || instruction.component.reuse;\r\n\t        }\r\n\t        if (reuse) {\r\n\t            next = _resolveToTrue;\r\n\t        }\r\n\t        else {\r\n\t            next = this._outlet.routerCanDeactivate(componentInstruction);\r\n\t        }\r\n\t        // TODO: aux route lifecycle hooks\r\n\t        return next.then(function (result) {\r\n\t            if (result == false) {\r\n\t                return false;\r\n\t            }\r\n\t            if (lang_1.isPresent(_this._childRouter)) {\r\n\t                return _this._childRouter._routerCanDeactivate(childInstruction);\r\n\t            }\r\n\t            return true;\r\n\t        });\r\n\t    };\r\n\t    /**\r\n\t     * Updates this router and all descendant routers according to the given instruction\r\n\t     */\r\n\t    Router.prototype.commit = function (instruction, _skipLocationChange) {\r\n\t        var _this = this;\r\n\t        if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n\t        this.currentInstruction = instruction;\r\n\t        var next = _resolveToTrue;\r\n\t        if (lang_1.isPresent(this._outlet) && lang_1.isPresent(instruction.component)) {\r\n\t            var componentInstruction = instruction.component;\r\n\t            if (componentInstruction.reuse) {\r\n\t                next = this._outlet.reuse(componentInstruction);\r\n\t            }\r\n\t            else {\r\n\t                next =\r\n\t                    this.deactivate(instruction).then(function (_) { return _this._outlet.activate(componentInstruction); });\r\n\t            }\r\n\t            if (lang_1.isPresent(instruction.child)) {\r\n\t                next = next.then(function (_) {\r\n\t                    if (lang_1.isPresent(_this._childRouter)) {\r\n\t                        return _this._childRouter.commit(instruction.child);\r\n\t                    }\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        var promises = [];\r\n\t        this._auxRouters.forEach(function (router, name) {\r\n\t            if (lang_1.isPresent(instruction.auxInstruction[name])) {\r\n\t                promises.push(router.commit(instruction.auxInstruction[name]));\r\n\t            }\r\n\t        });\r\n\t        return next.then(function (_) { return async_1.PromiseWrapper.all(promises); });\r\n\t    };\r\n\t    /** @internal */\r\n\t    Router.prototype._startNavigating = function () { this.navigating = true; };\r\n\t    /** @internal */\r\n\t    Router.prototype._finishNavigating = function () { this.navigating = false; };\r\n\t    /**\r\n\t     * Subscribe to URL updates from the router\r\n\t     */\r\n\t    Router.prototype.subscribe = function (onNext, onError) {\r\n\t        return async_1.ObservableWrapper.subscribe(this._subject, onNext, onError);\r\n\t    };\r\n\t    /**\r\n\t     * Removes the contents of this router's outlet and all descendant outlets\r\n\t     */\r\n\t    Router.prototype.deactivate = function (instruction) {\r\n\t        var _this = this;\r\n\t        var childInstruction = null;\r\n\t        var componentInstruction = null;\r\n\t        if (lang_1.isPresent(instruction)) {\r\n\t            childInstruction = instruction.child;\r\n\t            componentInstruction = instruction.component;\r\n\t        }\r\n\t        var next = _resolveToTrue;\r\n\t        if (lang_1.isPresent(this._childRouter)) {\r\n\t            next = this._childRouter.deactivate(childInstruction);\r\n\t        }\r\n\t        if (lang_1.isPresent(this._outlet)) {\r\n\t            next = next.then(function (_) { return _this._outlet.deactivate(componentInstruction); });\r\n\t        }\r\n\t        // TODO: handle aux routes\r\n\t        return next;\r\n\t    };\r\n\t    /**\r\n\t     * Given a URL, returns an instruction representing the component graph\r\n\t     */\r\n\t    Router.prototype.recognize = function (url) {\r\n\t        var ancestorComponents = this._getAncestorInstructions();\r\n\t        return this.registry.recognize(url, ancestorComponents);\r\n\t    };\r\n\t    Router.prototype._getAncestorInstructions = function () {\r\n\t        var ancestorInstructions = [this.currentInstruction];\r\n\t        var ancestorRouter = this;\r\n\t        while (lang_1.isPresent(ancestorRouter = ancestorRouter.parent)) {\r\n\t            ancestorInstructions.unshift(ancestorRouter.currentInstruction);\r\n\t        }\r\n\t        return ancestorInstructions;\r\n\t    };\r\n\t    /**\r\n\t     * Navigates to either the last URL successfully navigated to, or the last URL requested if the\r\n\t     * router has yet to successfully navigate.\r\n\t     */\r\n\t    Router.prototype.renavigate = function () {\r\n\t        if (lang_1.isBlank(this.lastNavigationAttempt)) {\r\n\t            return this._currentNavigation;\r\n\t        }\r\n\t        return this.navigateByUrl(this.lastNavigationAttempt);\r\n\t    };\r\n\t    /**\r\n\t     * Generate an `Instruction` based on the provided Route Link DSL.\r\n\t     */\r\n\t    Router.prototype.generate = function (linkParams) {\r\n\t        var ancestorInstructions = this._getAncestorInstructions();\r\n\t        return this.registry.generate(linkParams, ancestorInstructions);\r\n\t    };\r\n\t    Router = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [route_registry_1.RouteRegistry, Router, Object, Router])\r\n\t    ], Router);\r\n\t    return Router;\r\n\t})();\r\n\texports.Router = Router;\r\n\tvar RootRouter = (function (_super) {\r\n\t    __extends(RootRouter, _super);\r\n\t    function RootRouter(registry, location, primaryComponent) {\r\n\t        var _this = this;\r\n\t        _super.call(this, registry, null, primaryComponent);\r\n\t        this.root = this;\r\n\t        this._location = location;\r\n\t        this._locationSub = this._location.subscribe(function (change) {\r\n\t            // we call recognize ourselves\r\n\t            _this.recognize(change['url'])\r\n\t                .then(function (instruction) {\r\n\t                if (lang_1.isPresent(instruction)) {\r\n\t                    _this.navigateByInstruction(instruction, lang_1.isPresent(change['pop']))\r\n\t                        .then(function (_) {\r\n\t                        // this is a popstate event; no need to change the URL\r\n\t                        if (lang_1.isPresent(change['pop']) && change['type'] != 'hashchange') {\r\n\t                            return;\r\n\t                        }\r\n\t                        var emitPath = instruction.toUrlPath();\r\n\t                        var emitQuery = instruction.toUrlQuery();\r\n\t                        if (emitPath.length > 0 && emitPath[0] != '/') {\r\n\t                            emitPath = '/' + emitPath;\r\n\t                        }\r\n\t                        // Because we've opted to use All hashchange events occur outside Angular.\r\n\t                        // However, apps that are migrating might have hash links that operate outside\r\n\t                        // angular to which routing must respond.\r\n\t                        // To support these cases where we respond to hashchanges and redirect as a\r\n\t                        // result, we need to replace the top item on the stack.\r\n\t                        if (change['type'] == 'hashchange') {\r\n\t                            if (instruction.toRootUrl() != _this._location.path()) {\r\n\t                                _this._location.replaceState(emitPath, emitQuery);\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            _this._location.go(emitPath, emitQuery);\r\n\t                        }\r\n\t                    });\r\n\t                }\r\n\t                else {\r\n\t                    _this._emitNavigationFail(change['url']);\r\n\t                }\r\n\t            });\r\n\t        });\r\n\t        this.registry.configFromComponent(primaryComponent);\r\n\t        this.navigateByUrl(location.path());\r\n\t    }\r\n\t    RootRouter.prototype.commit = function (instruction, _skipLocationChange) {\r\n\t        var _this = this;\r\n\t        if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n\t        var emitPath = instruction.toUrlPath();\r\n\t        var emitQuery = instruction.toUrlQuery();\r\n\t        if (emitPath.length > 0 && emitPath[0] != '/') {\r\n\t            emitPath = '/' + emitPath;\r\n\t        }\r\n\t        var promise = _super.prototype.commit.call(this, instruction);\r\n\t        if (!_skipLocationChange) {\r\n\t            promise = promise.then(function (_) { _this._location.go(emitPath, emitQuery); });\r\n\t        }\r\n\t        return promise;\r\n\t    };\r\n\t    RootRouter.prototype.dispose = function () {\r\n\t        if (lang_1.isPresent(this._locationSub)) {\r\n\t            async_1.ObservableWrapper.dispose(this._locationSub);\r\n\t            this._locationSub = null;\r\n\t        }\r\n\t    };\r\n\t    RootRouter = __decorate([\r\n\t        core_1.Injectable(),\r\n\t        __param(2, core_1.Inject(route_registry_1.ROUTER_PRIMARY_COMPONENT)), \r\n\t        __metadata('design:paramtypes', [route_registry_1.RouteRegistry, location_1.Location, lang_1.Type])\r\n\t    ], RootRouter);\r\n\t    return RootRouter;\r\n\t})(Router);\r\n\texports.RootRouter = RootRouter;\r\n\tvar ChildRouter = (function (_super) {\r\n\t    __extends(ChildRouter, _super);\r\n\t    function ChildRouter(parent, hostComponent) {\r\n\t        _super.call(this, parent.registry, parent, hostComponent, parent.root);\r\n\t        this.parent = parent;\r\n\t    }\r\n\t    ChildRouter.prototype.navigateByUrl = function (url, _skipLocationChange) {\r\n\t        if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n\t        // Delegate navigation to the root router\r\n\t        return this.parent.navigateByUrl(url, _skipLocationChange);\r\n\t    };\r\n\t    ChildRouter.prototype.navigateByInstruction = function (instruction, _skipLocationChange) {\r\n\t        if (_skipLocationChange === void 0) { _skipLocationChange = false; }\r\n\t        // Delegate navigation to the root router\r\n\t        return this.parent.navigateByInstruction(instruction, _skipLocationChange);\r\n\t    };\r\n\t    return ChildRouter;\r\n\t})(Router);\r\n\tfunction canActivateOne(nextInstruction, prevInstruction) {\r\n\t    var next = _resolveToTrue;\r\n\t    if (lang_1.isBlank(nextInstruction.component)) {\r\n\t        return next;\r\n\t    }\r\n\t    if (lang_1.isPresent(nextInstruction.child)) {\r\n\t        next = canActivateOne(nextInstruction.child, lang_1.isPresent(prevInstruction) ? prevInstruction.child : null);\r\n\t    }\r\n\t    return next.then(function (result) {\r\n\t        if (result == false) {\r\n\t            return false;\r\n\t        }\r\n\t        if (nextInstruction.component.reuse) {\r\n\t            return true;\r\n\t        }\r\n\t        var hook = route_lifecycle_reflector_1.getCanActivateHook(nextInstruction.component.componentType);\r\n\t        if (lang_1.isPresent(hook)) {\r\n\t            return hook(nextInstruction.component, lang_1.isPresent(prevInstruction) ? prevInstruction.component : null);\r\n\t        }\r\n\t        return true;\r\n\t    });\r\n\t}\r\n\n\n/***/ },\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\t/**\n\t * an error thrown when an action is invalid because the object\n\t * has been unsubscribed\n\t */\n\tvar ObjectUnsubscribedError = (function (_super) {\n\t    __extends(ObjectUnsubscribedError, _super);\n\t    function ObjectUnsubscribedError() {\n\t        _super.call(this, 'object unsubscribed');\n\t        this.name = 'ObjectUnsubscribedError';\n\t    }\n\t    return ObjectUnsubscribedError;\n\t}(Error));\n\texports.ObjectUnsubscribedError = ObjectUnsubscribedError;\n\t//# sourceMappingURL=ObjectUnsubscribedError.js.map\n\n/***/ },\n/* 167 */,\n/* 168 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tfunction isPromise(value) {\n\t    return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n\t}\n\texports.isPromise = isPromise;\n\t//# sourceMappingURL=isPromise.js.map\n\n/***/ },\n/* 169 */,\n/* 170 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var angular_entrypoint_1 = __webpack_require__(602);\r\n\texports.AngularEntrypoint = angular_entrypoint_1.AngularEntrypoint;\r\n\tvar browser_common_1 = __webpack_require__(324);\r\n\texports.BROWSER_PROVIDERS = browser_common_1.BROWSER_PROVIDERS;\r\n\texports.ELEMENT_PROBE_PROVIDERS = browser_common_1.ELEMENT_PROBE_PROVIDERS;\r\n\texports.ELEMENT_PROBE_PROVIDERS_PROD_MODE = browser_common_1.ELEMENT_PROBE_PROVIDERS_PROD_MODE;\r\n\texports.inspectNativeElement = browser_common_1.inspectNativeElement;\r\n\texports.BrowserDomAdapter = browser_common_1.BrowserDomAdapter;\r\n\texports.By = browser_common_1.By;\r\n\texports.Title = browser_common_1.Title;\r\n\texports.DOCUMENT = browser_common_1.DOCUMENT;\r\n\texports.enableDebugTools = browser_common_1.enableDebugTools;\r\n\texports.disableDebugTools = browser_common_1.disableDebugTools;\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar browser_common_2 = __webpack_require__(324);\r\n\tvar compiler_1 = __webpack_require__(259);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar reflection_capabilities_1 = __webpack_require__(310);\r\n\tvar xhr_impl_1 = __webpack_require__(323);\r\n\tvar compiler_2 = __webpack_require__(259);\r\n\tvar di_1 = __webpack_require__(8);\r\n\t/**\r\n\t * An array of providers that should be passed into `application()` when bootstrapping a component.\r\n\t */\r\n\texports.BROWSER_APP_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    browser_common_2.BROWSER_APP_COMMON_PROVIDERS,\r\n\t    compiler_1.COMPILER_PROVIDERS,\r\n\t    new di_1.Provider(compiler_2.XHR, { useClass: xhr_impl_1.XHRImpl }),\r\n\t]);\r\n\t/**\r\n\t * Bootstrapping for Angular applications.\r\n\t *\r\n\t * You instantiate an Angular application by explicitly specifying a component to use\r\n\t * as the root component for your application via the `bootstrap()` method.\r\n\t *\r\n\t * ## Simple Example\r\n\t *\r\n\t * Assuming this `index.html`:\r\n\t *\r\n\t * ```html\r\n\t * <html>\r\n\t *   <!-- load Angular script tags here. -->\r\n\t *   <body>\r\n\t *     <my-app>loading...</my-app>\r\n\t *   </body>\r\n\t * </html>\r\n\t * ```\r\n\t *\r\n\t * An application is bootstrapped inside an existing browser DOM, typically `index.html`.\r\n\t * Unlike Angular 1, Angular 2 does not compile/process providers in `index.html`. This is\r\n\t * mainly for security reasons, as well as architectural changes in Angular 2. This means\r\n\t * that `index.html` can safely be processed using server-side technologies such as\r\n\t * providers. Bindings can thus use double-curly `{{ syntax }}` without collision from\r\n\t * Angular 2 component double-curly `{{ syntax }}`.\r\n\t *\r\n\t * We can use this script code:\r\n\t *\r\n\t * {@example core/ts/bootstrap/bootstrap.ts region='bootstrap'}\r\n\t *\r\n\t * When the app developer invokes `bootstrap()` with the root component `MyApp` as its\r\n\t * argument, Angular performs the following tasks:\r\n\t *\r\n\t *  1. It uses the component's `selector` property to locate the DOM element which needs\r\n\t *     to be upgraded into the angular component.\r\n\t *  2. It creates a new child injector (from the platform injector). Optionally, you can\r\n\t *     also override the injector configuration for an app by invoking `bootstrap` with the\r\n\t *     `componentInjectableBindings` argument.\r\n\t *  3. It creates a new `Zone` and connects it to the angular application's change detection\r\n\t *     domain instance.\r\n\t *  4. It creates an emulated or shadow DOM on the selected component's host element and loads the\r\n\t *     template into it.\r\n\t *  5. It instantiates the specified component.\r\n\t *  6. Finally, Angular performs change detection to apply the initial data providers for the\r\n\t *     application.\r\n\t *\r\n\t *\r\n\t * ## Bootstrapping Multiple Applications\r\n\t *\r\n\t * When working within a browser window, there are many singleton resources: cookies, title,\r\n\t * location, and others. Angular services that represent these resources must likewise be\r\n\t * shared across all Angular applications that occupy the same browser window. For this\r\n\t * reason, Angular creates exactly one global platform object which stores all shared\r\n\t * services, and each angular application injector has the platform injector as its parent.\r\n\t *\r\n\t * Each application has its own private injector as well. When there are multiple\r\n\t * applications on a page, Angular treats each application injector's services as private\r\n\t * to that application.\r\n\t *\r\n\t * ## API\r\n\t *\r\n\t * - `appComponentType`: The root component which should act as the application. This is\r\n\t *   a reference to a `Type` which is annotated with `@Component(...)`.\r\n\t * - `customProviders`: An additional set of providers that can be added to the\r\n\t *   app injector to override default injection behavior.\r\n\t *\r\n\t * Returns a `Promise` of {@link ComponentRef}.\r\n\t */\r\n\tfunction bootstrap(appComponentType, customProviders) {\r\n\t    core_1.reflector.reflectionCapabilities = new reflection_capabilities_1.ReflectionCapabilities();\r\n\t    var appProviders = lang_1.isPresent(customProviders) ? [exports.BROWSER_APP_PROVIDERS, customProviders] : exports.BROWSER_APP_PROVIDERS;\r\n\t    return core_1.platform(browser_common_2.BROWSER_PROVIDERS).application(appProviders).bootstrap(appComponentType);\r\n\t}\r\n\texports.bootstrap = bootstrap;\r\n\n\n/***/ },\n/* 171 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';function __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\t/**\r\n\t * This is a set of classes and objects that can be used both in the browser and on the server.\r\n\t */\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\texports.DOM = dom_adapter_1.DOM;\r\n\texports.setRootDomAdapter = dom_adapter_1.setRootDomAdapter;\r\n\texports.DomAdapter = dom_adapter_1.DomAdapter;\r\n\tvar dom_renderer_1 = __webpack_require__(211);\r\n\texports.DomRenderer = dom_renderer_1.DomRenderer;\r\n\tvar dom_tokens_1 = __webpack_require__(103);\r\n\texports.DOCUMENT = dom_tokens_1.DOCUMENT;\r\n\tvar shared_styles_host_1 = __webpack_require__(139);\r\n\texports.SharedStylesHost = shared_styles_host_1.SharedStylesHost;\r\n\texports.DomSharedStylesHost = shared_styles_host_1.DomSharedStylesHost;\r\n\tvar dom_events_1 = __webpack_require__(325);\r\n\texports.DomEventsPlugin = dom_events_1.DomEventsPlugin;\r\n\tvar event_manager_1 = __webpack_require__(82);\r\n\texports.EVENT_MANAGER_PLUGINS = event_manager_1.EVENT_MANAGER_PLUGINS;\r\n\texports.EventManager = event_manager_1.EventManager;\r\n\texports.EventManagerPlugin = event_manager_1.EventManagerPlugin;\r\n\t__export(__webpack_require__(631));\r\n\t__export(__webpack_require__(632));\r\n\n\n/***/ },\n/* 172 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar _WHEN_DEFAULT = lang_1.CONST_EXPR(new Object());\r\n\tvar SwitchView = (function () {\r\n\t    function SwitchView(_viewContainerRef, _templateRef) {\r\n\t        this._viewContainerRef = _viewContainerRef;\r\n\t        this._templateRef = _templateRef;\r\n\t    }\r\n\t    SwitchView.prototype.create = function () { this._viewContainerRef.createEmbeddedView(this._templateRef); };\r\n\t    SwitchView.prototype.destroy = function () { this._viewContainerRef.clear(); };\r\n\t    return SwitchView;\r\n\t})();\r\n\texports.SwitchView = SwitchView;\r\n\t/**\r\n\t * Adds or removes DOM sub-trees when their match expressions match the switch expression.\r\n\t *\r\n\t * Elements within `NgSwitch` but without `NgSwitchWhen` or `NgSwitchDefault` directives will be\r\n\t * preserved at the location as specified in the template.\r\n\t *\r\n\t * `NgSwitch` simply inserts nested elements based on which match expression matches the value\r\n\t * obtained from the evaluated switch expression. In other words, you define a container element\r\n\t * (where you place the directive with a switch expression on the\r\n\t * **`[ngSwitch]=\"...\"` attribute**), define any inner elements inside of the directive and\r\n\t * place a `[ngSwitchWhen]` attribute per element.\r\n\t *\r\n\t * The `ngSwitchWhen` property is used to inform `NgSwitch` which element to display when the\r\n\t * expression is evaluated. If a matching expression is not found via a `ngSwitchWhen` property\r\n\t * then an element with the `ngSwitchDefault` attribute is displayed.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/DQMTII95CbuqWrl3lYAs?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `\r\n\t *     <p>Value = {{value}}</p>\r\n\t *     <button (click)=\"inc()\">Increment</button>\r\n\t *\r\n\t *     <div [ngSwitch]=\"value\">\r\n\t *       <p *ngSwitchWhen=\"'init'\">increment to start</p>\r\n\t *       <p *ngSwitchWhen=\"0\">0, increment again</p>\r\n\t *       <p *ngSwitchWhen=\"1\">1, increment again</p>\r\n\t *       <p *ngSwitchWhen=\"2\">2, stop incrementing</p>\r\n\t *       <p *ngSwitchDefault>&gt; 2, STOP!</p>\r\n\t *     </div>\r\n\t *\r\n\t *     <!-- alternate syntax -->\r\n\t *\r\n\t *     <p [ngSwitch]=\"value\">\r\n\t *       <template ngSwitchWhen=\"init\">increment to start</template>\r\n\t *       <template [ngSwitchWhen]=\"0\">0, increment again</template>\r\n\t *       <template [ngSwitchWhen]=\"1\">1, increment again</template>\r\n\t *       <template [ngSwitchWhen]=\"2\">2, stop incrementing</template>\r\n\t *       <template ngSwitchDefault>&gt; 2, STOP!</template>\r\n\t *     </p>\r\n\t *   `,\r\n\t *   directives: [NgSwitch, NgSwitchWhen, NgSwitchDefault]\r\n\t * })\r\n\t * export class App {\r\n\t *   value = 'init';\r\n\t *\r\n\t *   inc() {\r\n\t *     this.value = this.value === 'init' ? 0 : this.value + 1;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(App).catch(err => console.error(err));\r\n\t * ```\r\n\t */\r\n\tvar NgSwitch = (function () {\r\n\t    function NgSwitch() {\r\n\t        this._useDefault = false;\r\n\t        this._valueViews = new collection_1.Map();\r\n\t        this._activeViews = [];\r\n\t    }\r\n\t    Object.defineProperty(NgSwitch.prototype, \"ngSwitch\", {\r\n\t        set: function (value) {\r\n\t            // Empty the currently active ViewContainers\r\n\t            this._emptyAllActiveViews();\r\n\t            // Add the ViewContainers matching the value (with a fallback to default)\r\n\t            this._useDefault = false;\r\n\t            var views = this._valueViews.get(value);\r\n\t            if (lang_1.isBlank(views)) {\r\n\t                this._useDefault = true;\r\n\t                views = lang_1.normalizeBlank(this._valueViews.get(_WHEN_DEFAULT));\r\n\t            }\r\n\t            this._activateViews(views);\r\n\t            this._switchValue = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /** @internal */\r\n\t    NgSwitch.prototype._onWhenValueChanged = function (oldWhen, newWhen, view) {\r\n\t        this._deregisterView(oldWhen, view);\r\n\t        this._registerView(newWhen, view);\r\n\t        if (oldWhen === this._switchValue) {\r\n\t            view.destroy();\r\n\t            collection_1.ListWrapper.remove(this._activeViews, view);\r\n\t        }\r\n\t        else if (newWhen === this._switchValue) {\r\n\t            if (this._useDefault) {\r\n\t                this._useDefault = false;\r\n\t                this._emptyAllActiveViews();\r\n\t            }\r\n\t            view.create();\r\n\t            this._activeViews.push(view);\r\n\t        }\r\n\t        // Switch to default when there is no more active ViewContainers\r\n\t        if (this._activeViews.length === 0 && !this._useDefault) {\r\n\t            this._useDefault = true;\r\n\t            this._activateViews(this._valueViews.get(_WHEN_DEFAULT));\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgSwitch.prototype._emptyAllActiveViews = function () {\r\n\t        var activeContainers = this._activeViews;\r\n\t        for (var i = 0; i < activeContainers.length; i++) {\r\n\t            activeContainers[i].destroy();\r\n\t        }\r\n\t        this._activeViews = [];\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgSwitch.prototype._activateViews = function (views) {\r\n\t        // TODO(vicb): assert(this._activeViews.length === 0);\r\n\t        if (lang_1.isPresent(views)) {\r\n\t            for (var i = 0; i < views.length; i++) {\r\n\t                views[i].create();\r\n\t            }\r\n\t            this._activeViews = views;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgSwitch.prototype._registerView = function (value, view) {\r\n\t        var views = this._valueViews.get(value);\r\n\t        if (lang_1.isBlank(views)) {\r\n\t            views = [];\r\n\t            this._valueViews.set(value, views);\r\n\t        }\r\n\t        views.push(view);\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgSwitch.prototype._deregisterView = function (value, view) {\r\n\t        // `_WHEN_DEFAULT` is used a marker for non-registered whens\r\n\t        if (value === _WHEN_DEFAULT)\r\n\t            return;\r\n\t        var views = this._valueViews.get(value);\r\n\t        if (views.length == 1) {\r\n\t            this._valueViews.delete(value);\r\n\t        }\r\n\t        else {\r\n\t            collection_1.ListWrapper.remove(views, view);\r\n\t        }\r\n\t    };\r\n\t    NgSwitch = __decorate([\r\n\t        core_1.Directive({ selector: '[ngSwitch]', inputs: ['ngSwitch'] }), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], NgSwitch);\r\n\t    return NgSwitch;\r\n\t})();\r\n\texports.NgSwitch = NgSwitch;\r\n\t/**\r\n\t * Insert the sub-tree when the `ngSwitchWhen` expression evaluates to the same value as the\r\n\t * enclosing switch expression.\r\n\t *\r\n\t * If multiple match expression match the switch expression value, all of them are displayed.\r\n\t *\r\n\t * See {@link NgSwitch} for more details and example.\r\n\t */\r\n\tvar NgSwitchWhen = (function () {\r\n\t    function NgSwitchWhen(viewContainer, templateRef, ngSwitch) {\r\n\t        // `_WHEN_DEFAULT` is used as a marker for a not yet initialized value\r\n\t        /** @internal */\r\n\t        this._value = _WHEN_DEFAULT;\r\n\t        this._switch = ngSwitch;\r\n\t        this._view = new SwitchView(viewContainer, templateRef);\r\n\t    }\r\n\t    Object.defineProperty(NgSwitchWhen.prototype, \"ngSwitchWhen\", {\r\n\t        set: function (value) {\r\n\t            this._switch._onWhenValueChanged(this._value, value, this._view);\r\n\t            this._value = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgSwitchWhen = __decorate([\r\n\t        core_1.Directive({ selector: '[ngSwitchWhen]', inputs: ['ngSwitchWhen'] }),\r\n\t        __param(2, core_1.Host()), \r\n\t        __metadata('design:paramtypes', [core_1.ViewContainerRef, core_1.TemplateRef, NgSwitch])\r\n\t    ], NgSwitchWhen);\r\n\t    return NgSwitchWhen;\r\n\t})();\r\n\texports.NgSwitchWhen = NgSwitchWhen;\r\n\t/**\r\n\t * Default case statements are displayed when no match expression matches the switch expression\r\n\t * value.\r\n\t *\r\n\t * See {@link NgSwitch} for more details and example.\r\n\t */\r\n\tvar NgSwitchDefault = (function () {\r\n\t    function NgSwitchDefault(viewContainer, templateRef, sswitch) {\r\n\t        sswitch._registerView(_WHEN_DEFAULT, new SwitchView(viewContainer, templateRef));\r\n\t    }\r\n\t    NgSwitchDefault = __decorate([\r\n\t        core_1.Directive({ selector: '[ngSwitchDefault]' }),\r\n\t        __param(2, core_1.Host()), \r\n\t        __metadata('design:paramtypes', [core_1.ViewContainerRef, core_1.TemplateRef, NgSwitch])\r\n\t    ], NgSwitchDefault);\r\n\t    return NgSwitchDefault;\r\n\t})();\r\n\texports.NgSwitchDefault = NgSwitchDefault;\r\n\n\n/***/ },\n/* 173 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * Base class for control directives.\r\n\t *\r\n\t * Only used internally in the forms module.\r\n\t */\r\n\tvar AbstractControlDirective = (function () {\r\n\t    function AbstractControlDirective() {\r\n\t    }\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"control\", {\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"value\", {\r\n\t        get: function () { return lang_1.isPresent(this.control) ? this.control.value : null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"valid\", {\r\n\t        get: function () { return lang_1.isPresent(this.control) ? this.control.valid : null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"errors\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this.control) ? this.control.errors : null;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"pristine\", {\r\n\t        get: function () { return lang_1.isPresent(this.control) ? this.control.pristine : null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"dirty\", {\r\n\t        get: function () { return lang_1.isPresent(this.control) ? this.control.dirty : null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"touched\", {\r\n\t        get: function () { return lang_1.isPresent(this.control) ? this.control.touched : null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"untouched\", {\r\n\t        get: function () { return lang_1.isPresent(this.control) ? this.control.untouched : null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(AbstractControlDirective.prototype, \"path\", {\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return AbstractControlDirective;\r\n\t})();\r\n\texports.AbstractControlDirective = AbstractControlDirective;\r\n\n\n/***/ },\n/* 174 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar control_container_1 = __webpack_require__(90);\r\n\tvar shared_1 = __webpack_require__(76);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar controlGroupProvider = lang_1.CONST_EXPR(new core_1.Provider(control_container_1.ControlContainer, { useExisting: core_1.forwardRef(function () { return NgControlGroup; }) }));\r\n\t/**\r\n\t * Creates and binds a control group to a DOM element.\r\n\t *\r\n\t * This directive can only be used as a child of {@link NgForm} or {@link NgFormModel}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/7EJ11uGeaggViYM6T5nq?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'my-app',\r\n\t *   directives: [FORM_DIRECTIVES],\r\n\t *   template: `\r\n\t *     <div>\r\n\t *       <h2>Angular2 Control &amp; ControlGroup Example</h2>\r\n\t *       <form #f=\"ngForm\">\r\n\t *         <div ngControlGroup=\"name\" #cg-name=\"form\">\r\n\t *           <h3>Enter your name:</h3>\r\n\t *           <p>First: <input ngControl=\"first\" required></p>\r\n\t *           <p>Middle: <input ngControl=\"middle\"></p>\r\n\t *           <p>Last: <input ngControl=\"last\" required></p>\r\n\t *         </div>\r\n\t *         <h3>Name value:</h3>\r\n\t *         <pre>{{valueOf(cgName)}}</pre>\r\n\t *         <p>Name is {{cgName?.control?.valid ? \"valid\" : \"invalid\"}}</p>\r\n\t *         <h3>What's your favorite food?</h3>\r\n\t *         <p><input ngControl=\"food\"></p>\r\n\t *         <h3>Form value</h3>\r\n\t *         <pre>{{valueOf(f)}}</pre>\r\n\t *       </form>\r\n\t *     </div>\r\n\t *   `,\r\n\t *   directives: [FORM_DIRECTIVES]\r\n\t * })\r\n\t * export class App {\r\n\t *   valueOf(cg: NgControlGroup): string {\r\n\t *     if (cg.control == null) {\r\n\t *       return null;\r\n\t *     }\r\n\t *     return JSON.stringify(cg.control.value, null, 2);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * This example declares a control group for a user's name. The value and validation state of\r\n\t * this group can be accessed separately from the overall form.\r\n\t */\r\n\tvar NgControlGroup = (function (_super) {\r\n\t    __extends(NgControlGroup, _super);\r\n\t    function NgControlGroup(parent, _validators, _asyncValidators) {\r\n\t        _super.call(this);\r\n\t        this._validators = _validators;\r\n\t        this._asyncValidators = _asyncValidators;\r\n\t        this._parent = parent;\r\n\t    }\r\n\t    NgControlGroup.prototype.ngOnInit = function () { this.formDirective.addControlGroup(this); };\r\n\t    NgControlGroup.prototype.ngOnDestroy = function () { this.formDirective.removeControlGroup(this); };\r\n\t    Object.defineProperty(NgControlGroup.prototype, \"control\", {\r\n\t        /**\r\n\t         * Get the {@link ControlGroup} backing this binding.\r\n\t         */\r\n\t        get: function () { return this.formDirective.getControlGroup(this); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlGroup.prototype, \"path\", {\r\n\t        /**\r\n\t         * Get the path to this control group.\r\n\t         */\r\n\t        get: function () { return shared_1.controlPath(this.name, this._parent); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlGroup.prototype, \"formDirective\", {\r\n\t        /**\r\n\t         * Get the {@link Form} to which this group belongs.\r\n\t         */\r\n\t        get: function () { return this._parent.formDirective; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlGroup.prototype, \"validator\", {\r\n\t        get: function () { return shared_1.composeValidators(this._validators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlGroup.prototype, \"asyncValidator\", {\r\n\t        get: function () { return shared_1.composeAsyncValidators(this._asyncValidators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgControlGroup = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[ngControlGroup]',\r\n\t            providers: [controlGroupProvider],\r\n\t            inputs: ['name: ngControlGroup'],\r\n\t            exportAs: 'ngForm'\r\n\t        }),\r\n\t        __param(0, core_1.Host()),\r\n\t        __param(0, core_1.SkipSelf()),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Self()),\r\n\t        __param(1, core_1.Inject(validators_1.NG_VALIDATORS)),\r\n\t        __param(2, core_1.Optional()),\r\n\t        __param(2, core_1.Self()),\r\n\t        __param(2, core_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), \r\n\t        __metadata('design:paramtypes', [control_container_1.ControlContainer, Array, Array])\r\n\t    ], NgControlGroup);\r\n\t    return NgControlGroup;\r\n\t})(control_container_1.ControlContainer);\r\n\texports.NgControlGroup = NgControlGroup;\r\n\n\n/***/ },\n/* 175 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_container_1 = __webpack_require__(90);\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar shared_1 = __webpack_require__(76);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar controlNameBinding = lang_1.CONST_EXPR(new core_1.Provider(ng_control_1.NgControl, { useExisting: core_1.forwardRef(function () { return NgControlName; }) }));\r\n\t/**\r\n\t * Creates and binds a control with a specified name to a DOM element.\r\n\t *\r\n\t * This directive can only be used as a child of {@link NgForm} or {@link NgFormModel}.\r\n\t\r\n\t * ### Example\r\n\t *\r\n\t * In this example, we create the login and password controls.\r\n\t * We can work with each control separately: check its validity, get its value, listen to its\r\n\t * changes.\r\n\t *\r\n\t *  ```\r\n\t * @Component({\r\n\t *      selector: \"login-comp\",\r\n\t *      directives: [FORM_DIRECTIVES],\r\n\t *      template: `\r\n\t *        <form #f=\"ngForm\" (submit)='onLogIn(f.value)'>\r\n\t *          Login <input type='text' ngControl='login' #l=\"form\">\r\n\t *          <div *ngIf=\"!l.valid\">Login is invalid</div>\r\n\t *\r\n\t *          Password <input type='password' ngControl='password'>\r\n\t *          <button type='submit'>Log in!</button>\r\n\t *        </form>\r\n\t *      `})\r\n\t * class LoginComp {\r\n\t *  onLogIn(value): void {\r\n\t *    // value === {login: 'some login', password: 'some password'}\r\n\t *  }\r\n\t * }\r\n\t *  ```\r\n\t *\r\n\t * We can also use ngModel to bind a domain model to the form.\r\n\t *\r\n\t *  ```\r\n\t * @Component({\r\n\t *      selector: \"login-comp\",\r\n\t *      directives: [FORM_DIRECTIVES],\r\n\t *      template: `\r\n\t *        <form (submit)='onLogIn()'>\r\n\t *          Login <input type='text' ngControl='login' [(ngModel)]=\"credentials.login\">\r\n\t *          Password <input type='password' ngControl='password'\r\n\t *                          [(ngModel)]=\"credentials.password\">\r\n\t *          <button type='submit'>Log in!</button>\r\n\t *        </form>\r\n\t *      `})\r\n\t * class LoginComp {\r\n\t *  credentials: {login:string, password:string};\r\n\t *\r\n\t *  onLogIn(): void {\r\n\t *    // this.credentials.login === \"some login\"\r\n\t *    // this.credentials.password === \"some password\"\r\n\t *  }\r\n\t * }\r\n\t *  ```\r\n\t */\r\n\tvar NgControlName = (function (_super) {\r\n\t    __extends(NgControlName, _super);\r\n\t    function NgControlName(_parent, _validators, _asyncValidators, valueAccessors) {\r\n\t        _super.call(this);\r\n\t        this._parent = _parent;\r\n\t        this._validators = _validators;\r\n\t        this._asyncValidators = _asyncValidators;\r\n\t        /** @internal */\r\n\t        this.update = new async_1.EventEmitter();\r\n\t        this._added = false;\r\n\t        this.valueAccessor = shared_1.selectValueAccessor(this, valueAccessors);\r\n\t    }\r\n\t    NgControlName.prototype.ngOnChanges = function (changes) {\r\n\t        if (!this._added) {\r\n\t            this.formDirective.addControl(this);\r\n\t            this._added = true;\r\n\t        }\r\n\t        if (shared_1.isPropertyUpdated(changes, this.viewModel)) {\r\n\t            this.viewModel = this.model;\r\n\t            this.formDirective.updateModel(this, this.model);\r\n\t        }\r\n\t    };\r\n\t    NgControlName.prototype.ngOnDestroy = function () { this.formDirective.removeControl(this); };\r\n\t    NgControlName.prototype.viewToModelUpdate = function (newValue) {\r\n\t        this.viewModel = newValue;\r\n\t        async_1.ObservableWrapper.callEmit(this.update, newValue);\r\n\t    };\r\n\t    Object.defineProperty(NgControlName.prototype, \"path\", {\r\n\t        get: function () { return shared_1.controlPath(this.name, this._parent); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlName.prototype, \"formDirective\", {\r\n\t        get: function () { return this._parent.formDirective; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlName.prototype, \"validator\", {\r\n\t        get: function () { return shared_1.composeValidators(this._validators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlName.prototype, \"asyncValidator\", {\r\n\t        get: function () { return shared_1.composeAsyncValidators(this._asyncValidators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlName.prototype, \"control\", {\r\n\t        get: function () { return this.formDirective.getControl(this); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgControlName = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[ngControl]',\r\n\t            bindings: [controlNameBinding],\r\n\t            inputs: ['name: ngControl', 'model: ngModel'],\r\n\t            outputs: ['update: ngModelChange'],\r\n\t            exportAs: 'ngForm'\r\n\t        }),\r\n\t        __param(0, core_1.Host()),\r\n\t        __param(0, core_1.SkipSelf()),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Self()),\r\n\t        __param(1, core_1.Inject(validators_1.NG_VALIDATORS)),\r\n\t        __param(2, core_1.Optional()),\r\n\t        __param(2, core_1.Self()),\r\n\t        __param(2, core_1.Inject(validators_1.NG_ASYNC_VALIDATORS)),\r\n\t        __param(3, core_1.Optional()),\r\n\t        __param(3, core_1.Self()),\r\n\t        __param(3, core_1.Inject(control_value_accessor_1.NG_VALUE_ACCESSOR)), \r\n\t        __metadata('design:paramtypes', [control_container_1.ControlContainer, Array, Array, Array])\r\n\t    ], NgControlName);\r\n\t    return NgControlName;\r\n\t})(ng_control_1.NgControl);\r\n\texports.NgControlName = NgControlName;\r\n\n\n/***/ },\n/* 176 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Directive automatically applied to Angular forms that sets CSS classes\r\n\t * based on control status (valid/invalid/dirty/etc).\r\n\t */\r\n\tvar NgControlStatus = (function () {\r\n\t    function NgControlStatus(cd) {\r\n\t        this._cd = cd;\r\n\t    }\r\n\t    Object.defineProperty(NgControlStatus.prototype, \"ngClassUntouched\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._cd.control) ? this._cd.control.untouched : false;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlStatus.prototype, \"ngClassTouched\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._cd.control) ? this._cd.control.touched : false;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlStatus.prototype, \"ngClassPristine\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._cd.control) ? this._cd.control.pristine : false;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlStatus.prototype, \"ngClassDirty\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._cd.control) ? this._cd.control.dirty : false;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlStatus.prototype, \"ngClassValid\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._cd.control) ? this._cd.control.valid : false;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgControlStatus.prototype, \"ngClassInvalid\", {\r\n\t        get: function () {\r\n\t            return lang_1.isPresent(this._cd.control) ? !this._cd.control.valid : false;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgControlStatus = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[ngControl],[ngModel],[ngFormControl]',\r\n\t            host: {\r\n\t                '[class.ng-untouched]': 'ngClassUntouched',\r\n\t                '[class.ng-touched]': 'ngClassTouched',\r\n\t                '[class.ng-pristine]': 'ngClassPristine',\r\n\t                '[class.ng-dirty]': 'ngClassDirty',\r\n\t                '[class.ng-valid]': 'ngClassValid',\r\n\t                '[class.ng-invalid]': 'ngClassInvalid'\r\n\t            }\r\n\t        }),\r\n\t        __param(0, core_1.Self()), \r\n\t        __metadata('design:paramtypes', [ng_control_1.NgControl])\r\n\t    ], NgControlStatus);\r\n\t    return NgControlStatus;\r\n\t})();\r\n\texports.NgControlStatus = NgControlStatus;\r\n\n\n/***/ },\n/* 177 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_container_1 = __webpack_require__(90);\r\n\tvar model_1 = __webpack_require__(124);\r\n\tvar shared_1 = __webpack_require__(76);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar formDirectiveProvider = lang_1.CONST_EXPR(new core_1.Provider(control_container_1.ControlContainer, { useExisting: core_1.forwardRef(function () { return NgForm; }) }));\r\n\t/**\r\n\t * If `NgForm` is bound in a component, `<form>` elements in that component will be\r\n\t * upgraded to use the Angular form system.\r\n\t *\r\n\t * ### Typical Use\r\n\t *\r\n\t * Include `FORM_DIRECTIVES` in the `directives` section of a {@link View} annotation\r\n\t * to use `NgForm` and its associated controls.\r\n\t *\r\n\t * ### Structure\r\n\t *\r\n\t * An Angular form is a collection of `Control`s in some hierarchy.\r\n\t * `Control`s can be at the top level or can be organized in `ControlGroup`s\r\n\t * or `ControlArray`s. This hierarchy is reflected in the form's `value`, a\r\n\t * JSON object that mirrors the form structure.\r\n\t *\r\n\t * ### Submission\r\n\t *\r\n\t * The `ngSubmit` event signals when the user triggers a form submission.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/ltdgYj4P0iY64AR71EpL?p=preview))\r\n\t *\r\n\t *  ```typescript\r\n\t * @Component({\r\n\t *   selector: 'my-app',\r\n\t *   template: `\r\n\t *     <div>\r\n\t *       <p>Submit the form to see the data object Angular builds</p>\r\n\t *       <h2>NgForm demo</h2>\r\n\t *       <form #f=\"ngForm\" (ngSubmit)=\"onSubmit(f.value)\">\r\n\t *         <h3>Control group: credentials</h3>\r\n\t *         <div ngControlGroup=\"credentials\">\r\n\t *           <p>Login: <input type=\"text\" ngControl=\"login\"></p>\r\n\t *           <p>Password: <input type=\"password\" ngControl=\"password\"></p>\r\n\t *         </div>\r\n\t *         <h3>Control group: person</h3>\r\n\t *         <div ngControlGroup=\"person\">\r\n\t *           <p>First name: <input type=\"text\" ngControl=\"firstName\"></p>\r\n\t *           <p>Last name: <input type=\"text\" ngControl=\"lastName\"></p>\r\n\t *         </div>\r\n\t *         <button type=\"submit\">Submit Form</button>\r\n\t *       <p>Form data submitted:</p>\r\n\t *       </form>\r\n\t *       <pre>{{data}}</pre>\r\n\t *     </div>\r\n\t * `,\r\n\t *   directives: [CORE_DIRECTIVES, FORM_DIRECTIVES]\r\n\t * })\r\n\t * export class App {\r\n\t *   constructor() {}\r\n\t *\r\n\t *   data: string;\r\n\t *\r\n\t *   onSubmit(data) {\r\n\t *     this.data = JSON.stringify(data, null, 2);\r\n\t *   }\r\n\t * }\r\n\t *  ```\r\n\t */\r\n\tvar NgForm = (function (_super) {\r\n\t    __extends(NgForm, _super);\r\n\t    function NgForm(validators, asyncValidators) {\r\n\t        _super.call(this);\r\n\t        this.ngSubmit = new async_1.EventEmitter();\r\n\t        this.form = new model_1.ControlGroup({}, null, shared_1.composeValidators(validators), shared_1.composeAsyncValidators(asyncValidators));\r\n\t    }\r\n\t    Object.defineProperty(NgForm.prototype, \"formDirective\", {\r\n\t        get: function () { return this; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgForm.prototype, \"control\", {\r\n\t        get: function () { return this.form; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgForm.prototype, \"path\", {\r\n\t        get: function () { return []; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgForm.prototype, \"controls\", {\r\n\t        get: function () { return this.form.controls; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgForm.prototype.addControl = function (dir) {\r\n\t        var _this = this;\r\n\t        async_1.PromiseWrapper.scheduleMicrotask(function () {\r\n\t            var container = _this._findContainer(dir.path);\r\n\t            var ctrl = new model_1.Control();\r\n\t            shared_1.setUpControl(ctrl, dir);\r\n\t            container.addControl(dir.name, ctrl);\r\n\t            ctrl.updateValueAndValidity({ emitEvent: false });\r\n\t        });\r\n\t    };\r\n\t    NgForm.prototype.getControl = function (dir) { return this.form.find(dir.path); };\r\n\t    NgForm.prototype.removeControl = function (dir) {\r\n\t        var _this = this;\r\n\t        async_1.PromiseWrapper.scheduleMicrotask(function () {\r\n\t            var container = _this._findContainer(dir.path);\r\n\t            if (lang_1.isPresent(container)) {\r\n\t                container.removeControl(dir.name);\r\n\t                container.updateValueAndValidity({ emitEvent: false });\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    NgForm.prototype.addControlGroup = function (dir) {\r\n\t        var _this = this;\r\n\t        async_1.PromiseWrapper.scheduleMicrotask(function () {\r\n\t            var container = _this._findContainer(dir.path);\r\n\t            var group = new model_1.ControlGroup({});\r\n\t            shared_1.setUpControlGroup(group, dir);\r\n\t            container.addControl(dir.name, group);\r\n\t            group.updateValueAndValidity({ emitEvent: false });\r\n\t        });\r\n\t    };\r\n\t    NgForm.prototype.removeControlGroup = function (dir) {\r\n\t        var _this = this;\r\n\t        async_1.PromiseWrapper.scheduleMicrotask(function () {\r\n\t            var container = _this._findContainer(dir.path);\r\n\t            if (lang_1.isPresent(container)) {\r\n\t                container.removeControl(dir.name);\r\n\t                container.updateValueAndValidity({ emitEvent: false });\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    NgForm.prototype.getControlGroup = function (dir) {\r\n\t        return this.form.find(dir.path);\r\n\t    };\r\n\t    NgForm.prototype.updateModel = function (dir, value) {\r\n\t        var _this = this;\r\n\t        async_1.PromiseWrapper.scheduleMicrotask(function () {\r\n\t            var ctrl = _this.form.find(dir.path);\r\n\t            ctrl.updateValue(value);\r\n\t        });\r\n\t    };\r\n\t    NgForm.prototype.onSubmit = function () {\r\n\t        async_1.ObservableWrapper.callEmit(this.ngSubmit, null);\r\n\t        return false;\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgForm.prototype._findContainer = function (path) {\r\n\t        path.pop();\r\n\t        return collection_1.ListWrapper.isEmpty(path) ? this.form : this.form.find(path);\r\n\t    };\r\n\t    NgForm = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: 'form:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]',\r\n\t            bindings: [formDirectiveProvider],\r\n\t            host: {\r\n\t                '(submit)': 'onSubmit()',\r\n\t            },\r\n\t            outputs: ['ngSubmit'],\r\n\t            exportAs: 'ngForm'\r\n\t        }),\r\n\t        __param(0, core_1.Optional()),\r\n\t        __param(0, core_1.Self()),\r\n\t        __param(0, core_1.Inject(validators_1.NG_VALIDATORS)),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Self()),\r\n\t        __param(1, core_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), \r\n\t        __metadata('design:paramtypes', [Array, Array])\r\n\t    ], NgForm);\r\n\t    return NgForm;\r\n\t})(control_container_1.ControlContainer);\r\n\texports.NgForm = NgForm;\r\n\n\n/***/ },\n/* 178 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar shared_1 = __webpack_require__(76);\r\n\tvar formControlBinding = lang_1.CONST_EXPR(new core_1.Provider(ng_control_1.NgControl, { useExisting: core_1.forwardRef(function () { return NgFormControl; }) }));\r\n\t/**\r\n\t * Binds an existing {@link Control} to a DOM element.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/jcQlZ2tTh22BZZ2ucNAT?p=preview))\r\n\t *\r\n\t * In this example, we bind the control to an input element. When the value of the input element\r\n\t * changes, the value of the control will reflect that change. Likewise, if the value of the\r\n\t * control changes, the input element reflects that change.\r\n\t *\r\n\t *  ```typescript\r\n\t * @Component({\r\n\t *   selector: 'my-app',\r\n\t *   template: `\r\n\t *     <div>\r\n\t *       <h2>NgFormControl Example</h2>\r\n\t *       <form>\r\n\t *         <p>Element with existing control: <input type=\"text\"\r\n\t * [ngFormControl]=\"loginControl\"></p>\r\n\t *         <p>Value of existing control: {{loginControl.value}}</p>\r\n\t *       </form>\r\n\t *     </div>\r\n\t *   `,\r\n\t *   directives: [CORE_DIRECTIVES, FORM_DIRECTIVES]\r\n\t * })\r\n\t * export class App {\r\n\t *   loginControl: Control = new Control('');\r\n\t * }\r\n\t *  ```\r\n\t *\r\n\t * ###ngModel\r\n\t *\r\n\t * We can also use `ngModel` to bind a domain model to the form.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/yHMLuHO7DNgT8XvtjTDH?p=preview))\r\n\t *\r\n\t *  ```typescript\r\n\t * @Component({\r\n\t *      selector: \"login-comp\",\r\n\t *      directives: [FORM_DIRECTIVES],\r\n\t *      template: \"<input type='text' [ngFormControl]='loginControl' [(ngModel)]='login'>\"\r\n\t *      })\r\n\t * class LoginComp {\r\n\t *  loginControl: Control = new Control('');\r\n\t *  login:string;\r\n\t * }\r\n\t *  ```\r\n\t */\r\n\tvar NgFormControl = (function (_super) {\r\n\t    __extends(NgFormControl, _super);\r\n\t    function NgFormControl(_validators, _asyncValidators, valueAccessors) {\r\n\t        _super.call(this);\r\n\t        this._validators = _validators;\r\n\t        this._asyncValidators = _asyncValidators;\r\n\t        this.update = new async_1.EventEmitter();\r\n\t        this.valueAccessor = shared_1.selectValueAccessor(this, valueAccessors);\r\n\t    }\r\n\t    NgFormControl.prototype.ngOnChanges = function (changes) {\r\n\t        if (this._isControlChanged(changes)) {\r\n\t            shared_1.setUpControl(this.form, this);\r\n\t            this.form.updateValueAndValidity({ emitEvent: false });\r\n\t        }\r\n\t        if (shared_1.isPropertyUpdated(changes, this.viewModel)) {\r\n\t            this.form.updateValue(this.model);\r\n\t            this.viewModel = this.model;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(NgFormControl.prototype, \"path\", {\r\n\t        get: function () { return []; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFormControl.prototype, \"validator\", {\r\n\t        get: function () { return shared_1.composeValidators(this._validators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFormControl.prototype, \"asyncValidator\", {\r\n\t        get: function () { return shared_1.composeAsyncValidators(this._asyncValidators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFormControl.prototype, \"control\", {\r\n\t        get: function () { return this.form; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgFormControl.prototype.viewToModelUpdate = function (newValue) {\r\n\t        this.viewModel = newValue;\r\n\t        async_1.ObservableWrapper.callEmit(this.update, newValue);\r\n\t    };\r\n\t    NgFormControl.prototype._isControlChanged = function (changes) {\r\n\t        return collection_1.StringMapWrapper.contains(changes, \"form\");\r\n\t    };\r\n\t    NgFormControl = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[ngFormControl]',\r\n\t            bindings: [formControlBinding],\r\n\t            inputs: ['form: ngFormControl', 'model: ngModel'],\r\n\t            outputs: ['update: ngModelChange'],\r\n\t            exportAs: 'ngForm'\r\n\t        }),\r\n\t        __param(0, core_1.Optional()),\r\n\t        __param(0, core_1.Self()),\r\n\t        __param(0, core_1.Inject(validators_1.NG_VALIDATORS)),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Self()),\r\n\t        __param(1, core_1.Inject(validators_1.NG_ASYNC_VALIDATORS)),\r\n\t        __param(2, core_1.Optional()),\r\n\t        __param(2, core_1.Self()),\r\n\t        __param(2, core_1.Inject(control_value_accessor_1.NG_VALUE_ACCESSOR)), \r\n\t        __metadata('design:paramtypes', [Array, Array, Array])\r\n\t    ], NgFormControl);\r\n\t    return NgFormControl;\r\n\t})(ng_control_1.NgControl);\r\n\texports.NgFormControl = NgFormControl;\r\n\n\n/***/ },\n/* 179 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_container_1 = __webpack_require__(90);\r\n\tvar shared_1 = __webpack_require__(76);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar formDirectiveProvider = lang_1.CONST_EXPR(new core_1.Provider(control_container_1.ControlContainer, { useExisting: core_1.forwardRef(function () { return NgFormModel; }) }));\r\n\t/**\r\n\t * Binds an existing control group to a DOM element.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/jqrVirudY8anJxTMUjTP?p=preview))\r\n\t *\r\n\t * In this example, we bind the control group to the form element, and we bind the login and\r\n\t * password controls to the login and password elements.\r\n\t *\r\n\t *  ```typescript\r\n\t * @Component({\r\n\t *   selector: 'my-app',\r\n\t *   template: `\r\n\t *     <div>\r\n\t *       <h2>NgFormModel Example</h2>\r\n\t *       <form [ngFormModel]=\"loginForm\">\r\n\t *         <p>Login: <input type=\"text\" ngControl=\"login\"></p>\r\n\t *         <p>Password: <input type=\"password\" ngControl=\"password\"></p>\r\n\t *       </form>\r\n\t *       <p>Value:</p>\r\n\t *       <pre>{{value}}</pre>\r\n\t *     </div>\r\n\t *   `,\r\n\t *   directives: [FORM_DIRECTIVES]\r\n\t * })\r\n\t * export class App {\r\n\t *   loginForm: ControlGroup;\r\n\t *\r\n\t *   constructor() {\r\n\t *     this.loginForm = new ControlGroup({\r\n\t *       login: new Control(\"\"),\r\n\t *       password: new Control(\"\")\r\n\t *     });\r\n\t *   }\r\n\t *\r\n\t *   get value(): string {\r\n\t *     return JSON.stringify(this.loginForm.value, null, 2);\r\n\t *   }\r\n\t * }\r\n\t *  ```\r\n\t *\r\n\t * We can also use ngModel to bind a domain model to the form.\r\n\t *\r\n\t *  ```typescript\r\n\t * @Component({\r\n\t *      selector: \"login-comp\",\r\n\t *      directives: [FORM_DIRECTIVES],\r\n\t *      template: `\r\n\t *        <form [ngFormModel]='loginForm'>\r\n\t *          Login <input type='text' ngControl='login' [(ngModel)]='credentials.login'>\r\n\t *          Password <input type='password' ngControl='password'\r\n\t *                          [(ngModel)]='credentials.password'>\r\n\t *          <button (click)=\"onLogin()\">Login</button>\r\n\t *        </form>`\r\n\t *      })\r\n\t * class LoginComp {\r\n\t *  credentials: {login: string, password: string};\r\n\t *  loginForm: ControlGroup;\r\n\t *\r\n\t *  constructor() {\r\n\t *    this.loginForm = new ControlGroup({\r\n\t *      login: new Control(\"\"),\r\n\t *      password: new Control(\"\")\r\n\t *    });\r\n\t *  }\r\n\t *\r\n\t *  onLogin(): void {\r\n\t *    // this.credentials.login === 'some login'\r\n\t *    // this.credentials.password === 'some password'\r\n\t *  }\r\n\t * }\r\n\t *  ```\r\n\t */\r\n\tvar NgFormModel = (function (_super) {\r\n\t    __extends(NgFormModel, _super);\r\n\t    function NgFormModel(_validators, _asyncValidators) {\r\n\t        _super.call(this);\r\n\t        this._validators = _validators;\r\n\t        this._asyncValidators = _asyncValidators;\r\n\t        this.form = null;\r\n\t        this.directives = [];\r\n\t        this.ngSubmit = new async_1.EventEmitter();\r\n\t    }\r\n\t    NgFormModel.prototype.ngOnChanges = function (changes) {\r\n\t        if (collection_1.StringMapWrapper.contains(changes, \"form\")) {\r\n\t            var sync = shared_1.composeValidators(this._validators);\r\n\t            this.form.validator = validators_1.Validators.compose([this.form.validator, sync]);\r\n\t            var async = shared_1.composeAsyncValidators(this._asyncValidators);\r\n\t            this.form.asyncValidator = validators_1.Validators.composeAsync([this.form.asyncValidator, async]);\r\n\t            this.form.updateValueAndValidity({ onlySelf: true, emitEvent: false });\r\n\t        }\r\n\t        this._updateDomValue();\r\n\t    };\r\n\t    Object.defineProperty(NgFormModel.prototype, \"formDirective\", {\r\n\t        get: function () { return this; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFormModel.prototype, \"control\", {\r\n\t        get: function () { return this.form; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFormModel.prototype, \"path\", {\r\n\t        get: function () { return []; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgFormModel.prototype.addControl = function (dir) {\r\n\t        var ctrl = this.form.find(dir.path);\r\n\t        shared_1.setUpControl(ctrl, dir);\r\n\t        ctrl.updateValueAndValidity({ emitEvent: false });\r\n\t        this.directives.push(dir);\r\n\t    };\r\n\t    NgFormModel.prototype.getControl = function (dir) { return this.form.find(dir.path); };\r\n\t    NgFormModel.prototype.removeControl = function (dir) { collection_1.ListWrapper.remove(this.directives, dir); };\r\n\t    NgFormModel.prototype.addControlGroup = function (dir) {\r\n\t        var ctrl = this.form.find(dir.path);\r\n\t        shared_1.setUpControlGroup(ctrl, dir);\r\n\t        ctrl.updateValueAndValidity({ emitEvent: false });\r\n\t    };\r\n\t    NgFormModel.prototype.removeControlGroup = function (dir) { };\r\n\t    NgFormModel.prototype.getControlGroup = function (dir) {\r\n\t        return this.form.find(dir.path);\r\n\t    };\r\n\t    NgFormModel.prototype.updateModel = function (dir, value) {\r\n\t        var ctrl = this.form.find(dir.path);\r\n\t        ctrl.updateValue(value);\r\n\t    };\r\n\t    NgFormModel.prototype.onSubmit = function () {\r\n\t        async_1.ObservableWrapper.callEmit(this.ngSubmit, null);\r\n\t        return false;\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgFormModel.prototype._updateDomValue = function () {\r\n\t        var _this = this;\r\n\t        this.directives.forEach(function (dir) {\r\n\t            var ctrl = _this.form.find(dir.path);\r\n\t            dir.valueAccessor.writeValue(ctrl.value);\r\n\t        });\r\n\t    };\r\n\t    NgFormModel = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[ngFormModel]',\r\n\t            bindings: [formDirectiveProvider],\r\n\t            inputs: ['form: ngFormModel'],\r\n\t            host: { '(submit)': 'onSubmit()' },\r\n\t            outputs: ['ngSubmit'],\r\n\t            exportAs: 'ngForm'\r\n\t        }),\r\n\t        __param(0, core_1.Optional()),\r\n\t        __param(0, core_1.Self()),\r\n\t        __param(0, core_1.Inject(validators_1.NG_VALIDATORS)),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Self()),\r\n\t        __param(1, core_1.Inject(validators_1.NG_ASYNC_VALIDATORS)), \r\n\t        __metadata('design:paramtypes', [Array, Array])\r\n\t    ], NgFormModel);\r\n\t    return NgFormModel;\r\n\t})(control_container_1.ControlContainer);\r\n\texports.NgFormModel = NgFormModel;\r\n\n\n/***/ },\n/* 180 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\tvar model_1 = __webpack_require__(124);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar shared_1 = __webpack_require__(76);\r\n\tvar formControlBinding = lang_1.CONST_EXPR(new core_1.Provider(ng_control_1.NgControl, { useExisting: core_1.forwardRef(function () { return NgModel; }) }));\r\n\t/**\r\n\t * Binds a domain model to a form control.\r\n\t *\r\n\t * ### Usage\r\n\t *\r\n\t * `ngModel` binds an existing domain model to a form control. For a\r\n\t * two-way binding, use `[(ngModel)]` to ensure the model updates in\r\n\t * both directions.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/R3UX5qDaUqFO2VYR0UzH?p=preview))\r\n\t *  ```typescript\r\n\t * @Component({\r\n\t *      selector: \"search-comp\",\r\n\t *      directives: [FORM_DIRECTIVES],\r\n\t *      template: `<input type='text' [(ngModel)]=\"searchQuery\">`\r\n\t *      })\r\n\t * class SearchComp {\r\n\t *  searchQuery: string;\r\n\t * }\r\n\t *  ```\r\n\t */\r\n\tvar NgModel = (function (_super) {\r\n\t    __extends(NgModel, _super);\r\n\t    function NgModel(_validators, _asyncValidators, valueAccessors) {\r\n\t        _super.call(this);\r\n\t        this._validators = _validators;\r\n\t        this._asyncValidators = _asyncValidators;\r\n\t        /** @internal */\r\n\t        this._control = new model_1.Control();\r\n\t        /** @internal */\r\n\t        this._added = false;\r\n\t        this.update = new async_1.EventEmitter();\r\n\t        this.valueAccessor = shared_1.selectValueAccessor(this, valueAccessors);\r\n\t    }\r\n\t    NgModel.prototype.ngOnChanges = function (changes) {\r\n\t        if (!this._added) {\r\n\t            shared_1.setUpControl(this._control, this);\r\n\t            this._control.updateValueAndValidity({ emitEvent: false });\r\n\t            this._added = true;\r\n\t        }\r\n\t        if (shared_1.isPropertyUpdated(changes, this.viewModel)) {\r\n\t            this._control.updateValue(this.model);\r\n\t            this.viewModel = this.model;\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(NgModel.prototype, \"control\", {\r\n\t        get: function () { return this._control; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgModel.prototype, \"path\", {\r\n\t        get: function () { return []; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgModel.prototype, \"validator\", {\r\n\t        get: function () { return shared_1.composeValidators(this._validators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgModel.prototype, \"asyncValidator\", {\r\n\t        get: function () { return shared_1.composeAsyncValidators(this._asyncValidators); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgModel.prototype.viewToModelUpdate = function (newValue) {\r\n\t        this.viewModel = newValue;\r\n\t        async_1.ObservableWrapper.callEmit(this.update, newValue);\r\n\t    };\r\n\t    NgModel = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[ngModel]:not([ngControl]):not([ngFormControl])',\r\n\t            bindings: [formControlBinding],\r\n\t            inputs: ['model: ngModel'],\r\n\t            outputs: ['update: ngModelChange'],\r\n\t            exportAs: 'ngForm'\r\n\t        }),\r\n\t        __param(0, core_1.Optional()),\r\n\t        __param(0, core_1.Self()),\r\n\t        __param(0, core_1.Inject(validators_1.NG_VALIDATORS)),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Self()),\r\n\t        __param(1, core_1.Inject(validators_1.NG_ASYNC_VALIDATORS)),\r\n\t        __param(2, core_1.Optional()),\r\n\t        __param(2, core_1.Self()),\r\n\t        __param(2, core_1.Inject(control_value_accessor_1.NG_VALUE_ACCESSOR)), \r\n\t        __metadata('design:paramtypes', [Array, Array, Array])\r\n\t    ], NgModel);\r\n\t    return NgModel;\r\n\t})(ng_control_1.NgControl);\r\n\texports.NgModel = NgModel;\r\n\n\n/***/ },\n/* 181 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar NUMBER_VALUE_ACCESSOR = lang_1.CONST_EXPR(new core_1.Provider(control_value_accessor_1.NG_VALUE_ACCESSOR, { useExisting: core_1.forwardRef(function () { return NumberValueAccessor; }), multi: true }));\r\n\t/**\r\n\t * The accessor for writing a number value and listening to changes that is used by the\r\n\t * {@link NgModel}, {@link NgFormControl}, and {@link NgControlName} directives.\r\n\t *\r\n\t *  ### Example\r\n\t *  ```\r\n\t *  <input type=\"number\" [(ngModel)]=\"age\">\r\n\t *  ```\r\n\t */\r\n\tvar NumberValueAccessor = (function () {\r\n\t    function NumberValueAccessor(_renderer, _elementRef) {\r\n\t        this._renderer = _renderer;\r\n\t        this._elementRef = _elementRef;\r\n\t        this.onChange = function (_) { };\r\n\t        this.onTouched = function () { };\r\n\t    }\r\n\t    NumberValueAccessor.prototype.writeValue = function (value) {\r\n\t        this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', value);\r\n\t    };\r\n\t    NumberValueAccessor.prototype.registerOnChange = function (fn) {\r\n\t        this.onChange = function (value) { fn(lang_1.NumberWrapper.parseFloat(value)); };\r\n\t    };\r\n\t    NumberValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\r\n\t    NumberValueAccessor = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: 'input[type=number][ngControl],input[type=number][ngFormControl],input[type=number][ngModel]',\r\n\t            host: {\r\n\t                '(change)': 'onChange($event.target.value)',\r\n\t                '(input)': 'onChange($event.target.value)',\r\n\t                '(blur)': 'onTouched()'\r\n\t            },\r\n\t            bindings: [NUMBER_VALUE_ACCESSOR]\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [core_1.Renderer, core_1.ElementRef])\r\n\t    ], NumberValueAccessor);\r\n\t    return NumberValueAccessor;\r\n\t})();\r\n\texports.NumberValueAccessor = NumberValueAccessor;\r\n\n\n/***/ },\n/* 182 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar validators_1 = __webpack_require__(47);\r\n\tvar lang_2 = __webpack_require__(1);\r\n\tvar REQUIRED_VALIDATOR = lang_1.CONST_EXPR(new core_1.Provider(validators_1.NG_VALIDATORS, { useValue: validators_1.Validators.required, multi: true }));\r\n\t/**\r\n\t * A Directive that adds the `required` validator to any controls marked with the\r\n\t * `required` attribute, via the {@link NG_VALIDATORS} binding.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * <input ngControl=\"fullName\" required>\r\n\t * ```\r\n\t */\r\n\tvar RequiredValidator = (function () {\r\n\t    function RequiredValidator() {\r\n\t    }\r\n\t    RequiredValidator = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[required][ngControl],[required][ngFormControl],[required][ngModel]',\r\n\t            providers: [REQUIRED_VALIDATOR]\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], RequiredValidator);\r\n\t    return RequiredValidator;\r\n\t})();\r\n\texports.RequiredValidator = RequiredValidator;\r\n\t/**\r\n\t * Provivder which adds {@link MinLengthValidator} to {@link NG_VALIDATORS}.\r\n\t *\r\n\t * ## Example:\r\n\t *\r\n\t * {@example common/forms/ts/validators/validators.ts region='min'}\r\n\t */\r\n\tvar MIN_LENGTH_VALIDATOR = lang_1.CONST_EXPR(new core_1.Provider(validators_1.NG_VALIDATORS, { useExisting: core_1.forwardRef(function () { return MinLengthValidator; }), multi: true }));\r\n\t/**\r\n\t * A directive which installs the {@link MinLengthValidator} for any `ngControl`,\r\n\t * `ngFormControl`, or control with `ngModel` that also has a `minlength` attribute.\r\n\t */\r\n\tvar MinLengthValidator = (function () {\r\n\t    function MinLengthValidator(minLength) {\r\n\t        this._validator = validators_1.Validators.minLength(lang_2.NumberWrapper.parseInt(minLength, 10));\r\n\t    }\r\n\t    MinLengthValidator.prototype.validate = function (c) { return this._validator(c); };\r\n\t    MinLengthValidator = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[minlength][ngControl],[minlength][ngFormControl],[minlength][ngModel]',\r\n\t            providers: [MIN_LENGTH_VALIDATOR]\r\n\t        }),\r\n\t        __param(0, core_1.Attribute(\"minlength\")), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], MinLengthValidator);\r\n\t    return MinLengthValidator;\r\n\t})();\r\n\texports.MinLengthValidator = MinLengthValidator;\r\n\t/**\r\n\t * Provider which adds {@link MaxLengthValidator} to {@link NG_VALIDATORS}.\r\n\t *\r\n\t * ## Example:\r\n\t *\r\n\t * {@example common/forms/ts/validators/validators.ts region='max'}\r\n\t */\r\n\tvar MAX_LENGTH_VALIDATOR = lang_1.CONST_EXPR(new core_1.Provider(validators_1.NG_VALIDATORS, { useExisting: core_1.forwardRef(function () { return MaxLengthValidator; }), multi: true }));\r\n\t/**\r\n\t * A directive which installs the {@link MaxLengthValidator} for any `ngControl, `ngFormControl`,\r\n\t * or control with `ngModel` that also has a `maxlength` attribute.\r\n\t */\r\n\tvar MaxLengthValidator = (function () {\r\n\t    function MaxLengthValidator(maxLength) {\r\n\t        this._validator = validators_1.Validators.maxLength(lang_2.NumberWrapper.parseInt(maxLength, 10));\r\n\t    }\r\n\t    MaxLengthValidator.prototype.validate = function (c) { return this._validator(c); };\r\n\t    MaxLengthValidator = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[maxlength][ngControl],[maxlength][ngFormControl],[maxlength][ngModel]',\r\n\t            providers: [MAX_LENGTH_VALIDATOR]\r\n\t        }),\r\n\t        __param(0, core_1.Attribute(\"maxlength\")), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], MaxLengthValidator);\r\n\t    return MaxLengthValidator;\r\n\t})();\r\n\texports.MaxLengthValidator = MaxLengthValidator;\r\n\t/**\r\n\t * A Directive that adds the `pattern` validator to any controls marked with the\r\n\t * `pattern` attribute, via the {@link NG_VALIDATORS} binding. Uses attribute value\r\n\t * as the regex to validate Control value against.  Follows pattern attribute\r\n\t * semantics; i.e. regex must match entire Control value.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * <input [ngControl]=\"fullName\" pattern=\"[a-zA-Z ]*\">\r\n\t * ```\r\n\t */\r\n\tvar PATTERN_VALIDATOR = lang_1.CONST_EXPR(new core_1.Provider(validators_1.NG_VALIDATORS, { useExisting: core_1.forwardRef(function () { return PatternValidator; }), multi: true }));\r\n\tvar PatternValidator = (function () {\r\n\t    function PatternValidator(pattern) {\r\n\t        this._validator = validators_1.Validators.pattern(pattern);\r\n\t    }\r\n\t    PatternValidator.prototype.validate = function (c) { return this._validator(c); };\r\n\t    PatternValidator = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[pattern][ngControl],[pattern][ngFormControl],[pattern][ngModel]',\r\n\t            providers: [PATTERN_VALIDATOR]\r\n\t        }),\r\n\t        __param(0, core_1.Attribute(\"pattern\")), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], PatternValidator);\r\n\t    return PatternValidator;\r\n\t})();\r\n\texports.PatternValidator = PatternValidator;\r\n\n\n/***/ },\n/* 183 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar HtmlTextAst = (function () {\r\n\t    function HtmlTextAst(value, sourceSpan) {\r\n\t        this.value = value;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    HtmlTextAst.prototype.visit = function (visitor, context) { return visitor.visitText(this, context); };\r\n\t    return HtmlTextAst;\r\n\t})();\r\n\texports.HtmlTextAst = HtmlTextAst;\r\n\tvar HtmlAttrAst = (function () {\r\n\t    function HtmlAttrAst(name, value, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.value = value;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    HtmlAttrAst.prototype.visit = function (visitor, context) { return visitor.visitAttr(this, context); };\r\n\t    return HtmlAttrAst;\r\n\t})();\r\n\texports.HtmlAttrAst = HtmlAttrAst;\r\n\tvar HtmlElementAst = (function () {\r\n\t    function HtmlElementAst(name, attrs, children, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.attrs = attrs;\r\n\t        this.children = children;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    HtmlElementAst.prototype.visit = function (visitor, context) { return visitor.visitElement(this, context); };\r\n\t    return HtmlElementAst;\r\n\t})();\r\n\texports.HtmlElementAst = HtmlElementAst;\r\n\tvar HtmlCommentAst = (function () {\r\n\t    function HtmlCommentAst(value, sourceSpan) {\r\n\t        this.value = value;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    HtmlCommentAst.prototype.visit = function (visitor, context) { return visitor.visitComment(this, context); };\r\n\t    return HtmlCommentAst;\r\n\t})();\r\n\texports.HtmlCommentAst = HtmlCommentAst;\r\n\tfunction htmlVisitAll(visitor, asts, context) {\r\n\t    if (context === void 0) { context = null; }\r\n\t    var result = [];\r\n\t    asts.forEach(function (ast) {\r\n\t        var astResult = ast.visit(visitor, context);\r\n\t        if (lang_1.isPresent(astResult)) {\r\n\t            result.push(astResult);\r\n\t        }\r\n\t    });\r\n\t    return result;\r\n\t}\r\n\texports.htmlVisitAll = htmlVisitAll;\r\n\n\n/***/ },\n/* 184 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar html_ast_1 = __webpack_require__(183);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar html_lexer_1 = __webpack_require__(599);\r\n\tvar parse_util_1 = __webpack_require__(185);\r\n\tvar html_tags_1 = __webpack_require__(91);\r\n\tvar HtmlTreeError = (function (_super) {\r\n\t    __extends(HtmlTreeError, _super);\r\n\t    function HtmlTreeError(elementName, span, msg) {\r\n\t        _super.call(this, span, msg);\r\n\t        this.elementName = elementName;\r\n\t    }\r\n\t    HtmlTreeError.create = function (elementName, span, msg) {\r\n\t        return new HtmlTreeError(elementName, span, msg);\r\n\t    };\r\n\t    return HtmlTreeError;\r\n\t})(parse_util_1.ParseError);\r\n\texports.HtmlTreeError = HtmlTreeError;\r\n\tvar HtmlParseTreeResult = (function () {\r\n\t    function HtmlParseTreeResult(rootNodes, errors) {\r\n\t        this.rootNodes = rootNodes;\r\n\t        this.errors = errors;\r\n\t    }\r\n\t    return HtmlParseTreeResult;\r\n\t})();\r\n\texports.HtmlParseTreeResult = HtmlParseTreeResult;\r\n\tvar HtmlParser = (function () {\r\n\t    function HtmlParser() {\r\n\t    }\r\n\t    HtmlParser.prototype.parse = function (sourceContent, sourceUrl) {\r\n\t        var tokensAndErrors = html_lexer_1.tokenizeHtml(sourceContent, sourceUrl);\r\n\t        var treeAndErrors = new TreeBuilder(tokensAndErrors.tokens).build();\r\n\t        return new HtmlParseTreeResult(treeAndErrors.rootNodes, tokensAndErrors.errors\r\n\t            .concat(treeAndErrors.errors));\r\n\t    };\r\n\t    HtmlParser = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], HtmlParser);\r\n\t    return HtmlParser;\r\n\t})();\r\n\texports.HtmlParser = HtmlParser;\r\n\tvar TreeBuilder = (function () {\r\n\t    function TreeBuilder(tokens) {\r\n\t        this.tokens = tokens;\r\n\t        this.index = -1;\r\n\t        this.rootNodes = [];\r\n\t        this.errors = [];\r\n\t        this.elementStack = [];\r\n\t        this._advance();\r\n\t    }\r\n\t    TreeBuilder.prototype.build = function () {\r\n\t        while (this.peek.type !== html_lexer_1.HtmlTokenType.EOF) {\r\n\t            if (this.peek.type === html_lexer_1.HtmlTokenType.TAG_OPEN_START) {\r\n\t                this._consumeStartTag(this._advance());\r\n\t            }\r\n\t            else if (this.peek.type === html_lexer_1.HtmlTokenType.TAG_CLOSE) {\r\n\t                this._consumeEndTag(this._advance());\r\n\t            }\r\n\t            else if (this.peek.type === html_lexer_1.HtmlTokenType.CDATA_START) {\r\n\t                this._closeVoidElement();\r\n\t                this._consumeCdata(this._advance());\r\n\t            }\r\n\t            else if (this.peek.type === html_lexer_1.HtmlTokenType.COMMENT_START) {\r\n\t                this._closeVoidElement();\r\n\t                this._consumeComment(this._advance());\r\n\t            }\r\n\t            else if (this.peek.type === html_lexer_1.HtmlTokenType.TEXT ||\r\n\t                this.peek.type === html_lexer_1.HtmlTokenType.RAW_TEXT ||\r\n\t                this.peek.type === html_lexer_1.HtmlTokenType.ESCAPABLE_RAW_TEXT) {\r\n\t                this._closeVoidElement();\r\n\t                this._consumeText(this._advance());\r\n\t            }\r\n\t            else {\r\n\t                // Skip all other tokens...\r\n\t                this._advance();\r\n\t            }\r\n\t        }\r\n\t        return new HtmlParseTreeResult(this.rootNodes, this.errors);\r\n\t    };\r\n\t    TreeBuilder.prototype._advance = function () {\r\n\t        var prev = this.peek;\r\n\t        if (this.index < this.tokens.length - 1) {\r\n\t            // Note: there is always an EOF token at the end\r\n\t            this.index++;\r\n\t        }\r\n\t        this.peek = this.tokens[this.index];\r\n\t        return prev;\r\n\t    };\r\n\t    TreeBuilder.prototype._advanceIf = function (type) {\r\n\t        if (this.peek.type === type) {\r\n\t            return this._advance();\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    TreeBuilder.prototype._consumeCdata = function (startToken) {\r\n\t        this._consumeText(this._advance());\r\n\t        this._advanceIf(html_lexer_1.HtmlTokenType.CDATA_END);\r\n\t    };\r\n\t    TreeBuilder.prototype._consumeComment = function (token) {\r\n\t        var text = this._advanceIf(html_lexer_1.HtmlTokenType.RAW_TEXT);\r\n\t        this._advanceIf(html_lexer_1.HtmlTokenType.COMMENT_END);\r\n\t        var value = lang_1.isPresent(text) ? text.parts[0].trim() : null;\r\n\t        this._addToParent(new html_ast_1.HtmlCommentAst(value, token.sourceSpan));\r\n\t    };\r\n\t    TreeBuilder.prototype._consumeText = function (token) {\r\n\t        var text = token.parts[0];\r\n\t        if (text.length > 0 && text[0] == '\\n') {\r\n\t            var parent_1 = this._getParentElement();\r\n\t            if (lang_1.isPresent(parent_1) && parent_1.children.length == 0 &&\r\n\t                html_tags_1.getHtmlTagDefinition(parent_1.name).ignoreFirstLf) {\r\n\t                text = text.substring(1);\r\n\t            }\r\n\t        }\r\n\t        if (text.length > 0) {\r\n\t            this._addToParent(new html_ast_1.HtmlTextAst(text, token.sourceSpan));\r\n\t        }\r\n\t    };\r\n\t    TreeBuilder.prototype._closeVoidElement = function () {\r\n\t        if (this.elementStack.length > 0) {\r\n\t            var el = collection_1.ListWrapper.last(this.elementStack);\r\n\t            if (html_tags_1.getHtmlTagDefinition(el.name).isVoid) {\r\n\t                this.elementStack.pop();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    TreeBuilder.prototype._consumeStartTag = function (startTagToken) {\r\n\t        var prefix = startTagToken.parts[0];\r\n\t        var name = startTagToken.parts[1];\r\n\t        var attrs = [];\r\n\t        while (this.peek.type === html_lexer_1.HtmlTokenType.ATTR_NAME) {\r\n\t            attrs.push(this._consumeAttr(this._advance()));\r\n\t        }\r\n\t        var fullName = getElementFullName(prefix, name, this._getParentElement());\r\n\t        var selfClosing = false;\r\n\t        // Note: There could have been a tokenizer error\r\n\t        // so that we don't get a token for the end tag...\r\n\t        if (this.peek.type === html_lexer_1.HtmlTokenType.TAG_OPEN_END_VOID) {\r\n\t            this._advance();\r\n\t            selfClosing = true;\r\n\t            if (html_tags_1.getNsPrefix(fullName) == null && !html_tags_1.getHtmlTagDefinition(fullName).isVoid) {\r\n\t                this.errors.push(HtmlTreeError.create(fullName, startTagToken.sourceSpan, \"Only void and foreign elements can be self closed \\\"\" + startTagToken.parts[1] + \"\\\"\"));\r\n\t            }\r\n\t        }\r\n\t        else if (this.peek.type === html_lexer_1.HtmlTokenType.TAG_OPEN_END) {\r\n\t            this._advance();\r\n\t            selfClosing = false;\r\n\t        }\r\n\t        var end = this.peek.sourceSpan.start;\r\n\t        var el = new html_ast_1.HtmlElementAst(fullName, attrs, [], new parse_util_1.ParseSourceSpan(startTagToken.sourceSpan.start, end));\r\n\t        this._pushElement(el);\r\n\t        if (selfClosing) {\r\n\t            this._popElement(fullName);\r\n\t        }\r\n\t    };\r\n\t    TreeBuilder.prototype._pushElement = function (el) {\r\n\t        if (this.elementStack.length > 0) {\r\n\t            var parentEl = collection_1.ListWrapper.last(this.elementStack);\r\n\t            if (html_tags_1.getHtmlTagDefinition(parentEl.name).isClosedByChild(el.name)) {\r\n\t                this.elementStack.pop();\r\n\t            }\r\n\t        }\r\n\t        var tagDef = html_tags_1.getHtmlTagDefinition(el.name);\r\n\t        var parentEl = this._getParentElement();\r\n\t        if (tagDef.requireExtraParent(lang_1.isPresent(parentEl) ? parentEl.name : null)) {\r\n\t            var newParent = new html_ast_1.HtmlElementAst(tagDef.parentToAdd, [], [el], el.sourceSpan);\r\n\t            this._addToParent(newParent);\r\n\t            this.elementStack.push(newParent);\r\n\t            this.elementStack.push(el);\r\n\t        }\r\n\t        else {\r\n\t            this._addToParent(el);\r\n\t            this.elementStack.push(el);\r\n\t        }\r\n\t    };\r\n\t    TreeBuilder.prototype._consumeEndTag = function (endTagToken) {\r\n\t        var fullName = getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement());\r\n\t        if (html_tags_1.getHtmlTagDefinition(fullName).isVoid) {\r\n\t            this.errors.push(HtmlTreeError.create(fullName, endTagToken.sourceSpan, \"Void elements do not have end tags \\\"\" + endTagToken.parts[1] + \"\\\"\"));\r\n\t        }\r\n\t        else if (!this._popElement(fullName)) {\r\n\t            this.errors.push(HtmlTreeError.create(fullName, endTagToken.sourceSpan, \"Unexpected closing tag \\\"\" + endTagToken.parts[1] + \"\\\"\"));\r\n\t        }\r\n\t    };\r\n\t    TreeBuilder.prototype._popElement = function (fullName) {\r\n\t        for (var stackIndex = this.elementStack.length - 1; stackIndex >= 0; stackIndex--) {\r\n\t            var el = this.elementStack[stackIndex];\r\n\t            if (el.name == fullName) {\r\n\t                collection_1.ListWrapper.splice(this.elementStack, stackIndex, this.elementStack.length - stackIndex);\r\n\t                return true;\r\n\t            }\r\n\t            if (!html_tags_1.getHtmlTagDefinition(el.name).closedByParent) {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    TreeBuilder.prototype._consumeAttr = function (attrName) {\r\n\t        var fullName = html_tags_1.mergeNsAndName(attrName.parts[0], attrName.parts[1]);\r\n\t        var end = attrName.sourceSpan.end;\r\n\t        var value = '';\r\n\t        if (this.peek.type === html_lexer_1.HtmlTokenType.ATTR_VALUE) {\r\n\t            var valueToken = this._advance();\r\n\t            value = valueToken.parts[0];\r\n\t            end = valueToken.sourceSpan.end;\r\n\t        }\r\n\t        return new html_ast_1.HtmlAttrAst(fullName, value, new parse_util_1.ParseSourceSpan(attrName.sourceSpan.start, end));\r\n\t    };\r\n\t    TreeBuilder.prototype._getParentElement = function () {\r\n\t        return this.elementStack.length > 0 ? collection_1.ListWrapper.last(this.elementStack) : null;\r\n\t    };\r\n\t    TreeBuilder.prototype._addToParent = function (node) {\r\n\t        var parent = this._getParentElement();\r\n\t        if (lang_1.isPresent(parent)) {\r\n\t            parent.children.push(node);\r\n\t        }\r\n\t        else {\r\n\t            this.rootNodes.push(node);\r\n\t        }\r\n\t    };\r\n\t    return TreeBuilder;\r\n\t})();\r\n\tfunction getElementFullName(prefix, localName, parentElement) {\r\n\t    if (lang_1.isBlank(prefix)) {\r\n\t        prefix = html_tags_1.getHtmlTagDefinition(localName).implicitNamespacePrefix;\r\n\t        if (lang_1.isBlank(prefix) && lang_1.isPresent(parentElement)) {\r\n\t            prefix = html_tags_1.getNsPrefix(parentElement.name);\r\n\t        }\r\n\t    }\r\n\t    return html_tags_1.mergeNsAndName(prefix, localName);\r\n\t}\r\n\n\n/***/ },\n/* 185 */\n/***/ function(module, exports) {\n\n\t'use strict';var ParseLocation = (function () {\r\n\t    function ParseLocation(file, offset, line, col) {\r\n\t        this.file = file;\r\n\t        this.offset = offset;\r\n\t        this.line = line;\r\n\t        this.col = col;\r\n\t    }\r\n\t    ParseLocation.prototype.toString = function () { return this.file.url + \"@\" + this.line + \":\" + this.col; };\r\n\t    return ParseLocation;\r\n\t})();\r\n\texports.ParseLocation = ParseLocation;\r\n\tvar ParseSourceFile = (function () {\r\n\t    function ParseSourceFile(content, url) {\r\n\t        this.content = content;\r\n\t        this.url = url;\r\n\t    }\r\n\t    return ParseSourceFile;\r\n\t})();\r\n\texports.ParseSourceFile = ParseSourceFile;\r\n\tvar ParseSourceSpan = (function () {\r\n\t    function ParseSourceSpan(start, end) {\r\n\t        this.start = start;\r\n\t        this.end = end;\r\n\t    }\r\n\t    ParseSourceSpan.prototype.toString = function () {\r\n\t        return this.start.file.content.substring(this.start.offset, this.end.offset);\r\n\t    };\r\n\t    return ParseSourceSpan;\r\n\t})();\r\n\texports.ParseSourceSpan = ParseSourceSpan;\r\n\tvar ParseError = (function () {\r\n\t    function ParseError(span, msg) {\r\n\t        this.span = span;\r\n\t        this.msg = msg;\r\n\t    }\r\n\t    ParseError.prototype.toString = function () {\r\n\t        var source = this.span.start.file.content;\r\n\t        var ctxStart = this.span.start.offset;\r\n\t        if (ctxStart > source.length - 1) {\r\n\t            ctxStart = source.length - 1;\r\n\t        }\r\n\t        var ctxEnd = ctxStart;\r\n\t        var ctxLen = 0;\r\n\t        var ctxLines = 0;\r\n\t        while (ctxLen < 100 && ctxStart > 0) {\r\n\t            ctxStart--;\r\n\t            ctxLen++;\r\n\t            if (source[ctxStart] == \"\\n\") {\r\n\t                if (++ctxLines == 3) {\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        ctxLen = 0;\r\n\t        ctxLines = 0;\r\n\t        while (ctxLen < 100 && ctxEnd < source.length - 1) {\r\n\t            ctxEnd++;\r\n\t            ctxLen++;\r\n\t            if (source[ctxEnd] == \"\\n\") {\r\n\t                if (++ctxLines == 3) {\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' +\r\n\t            source.substring(this.span.start.offset, ctxEnd + 1);\r\n\t        return this.msg + \" (\\\"\" + context + \"\\\"): \" + this.span.start;\r\n\t    };\r\n\t    return ParseError;\r\n\t})();\r\n\texports.ParseError = ParseError;\r\n\n\n/***/ },\n/* 186 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar template_ast_1 = __webpack_require__(78);\r\n\tvar source_module_1 = __webpack_require__(77);\r\n\tvar view_1 = __webpack_require__(97);\r\n\tvar view_type_1 = __webpack_require__(98);\r\n\tvar element_1 = __webpack_require__(129);\r\n\tvar util_1 = __webpack_require__(56);\r\n\tvar di_1 = __webpack_require__(8);\r\n\texports.PROTO_VIEW_JIT_IMPORTS = lang_1.CONST_EXPR({ 'AppProtoView': view_1.AppProtoView, 'AppProtoElement': element_1.AppProtoElement, 'ViewType': view_type_1.ViewType });\r\n\t// TODO: have a single file that reexports everything needed for\r\n\t// codegen explicitly\r\n\t// - helps understanding what codegen works against\r\n\t// - less imports in codegen code\r\n\texports.APP_VIEW_MODULE_REF = source_module_1.moduleRef('package:angular2/src/core/linker/view' + util_1.MODULE_SUFFIX);\r\n\texports.VIEW_TYPE_MODULE_REF = source_module_1.moduleRef('package:angular2/src/core/linker/view_type' + util_1.MODULE_SUFFIX);\r\n\texports.APP_EL_MODULE_REF = source_module_1.moduleRef('package:angular2/src/core/linker/element' + util_1.MODULE_SUFFIX);\r\n\texports.METADATA_MODULE_REF = source_module_1.moduleRef('package:angular2/src/core/metadata/view' + util_1.MODULE_SUFFIX);\r\n\tvar IMPLICIT_TEMPLATE_VAR = '\\$implicit';\r\n\tvar CLASS_ATTR = 'class';\r\n\tvar STYLE_ATTR = 'style';\r\n\tvar ProtoViewCompiler = (function () {\r\n\t    function ProtoViewCompiler() {\r\n\t    }\r\n\t    ProtoViewCompiler.prototype.compileProtoViewRuntime = function (metadataCache, component, template, pipes) {\r\n\t        var protoViewFactory = new RuntimeProtoViewFactory(metadataCache, component, pipes);\r\n\t        var allProtoViews = [];\r\n\t        protoViewFactory.createCompileProtoView(template, [], [], allProtoViews);\r\n\t        return new CompileProtoViews([], allProtoViews);\r\n\t    };\r\n\t    ProtoViewCompiler.prototype.compileProtoViewCodeGen = function (resolvedMetadataCacheExpr, component, template, pipes) {\r\n\t        var protoViewFactory = new CodeGenProtoViewFactory(resolvedMetadataCacheExpr, component, pipes);\r\n\t        var allProtoViews = [];\r\n\t        var allStatements = [];\r\n\t        protoViewFactory.createCompileProtoView(template, [], allStatements, allProtoViews);\r\n\t        return new CompileProtoViews(allStatements.map(function (stmt) { return stmt.statement; }), allProtoViews);\r\n\t    };\r\n\t    ProtoViewCompiler = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], ProtoViewCompiler);\r\n\t    return ProtoViewCompiler;\r\n\t})();\r\n\texports.ProtoViewCompiler = ProtoViewCompiler;\r\n\tvar CompileProtoViews = (function () {\r\n\t    function CompileProtoViews(declarations, protoViews) {\r\n\t        this.declarations = declarations;\r\n\t        this.protoViews = protoViews;\r\n\t    }\r\n\t    return CompileProtoViews;\r\n\t})();\r\n\texports.CompileProtoViews = CompileProtoViews;\r\n\tvar CompileProtoView = (function () {\r\n\t    function CompileProtoView(embeddedTemplateIndex, protoElements, protoView) {\r\n\t        this.embeddedTemplateIndex = embeddedTemplateIndex;\r\n\t        this.protoElements = protoElements;\r\n\t        this.protoView = protoView;\r\n\t    }\r\n\t    return CompileProtoView;\r\n\t})();\r\n\texports.CompileProtoView = CompileProtoView;\r\n\tvar CompileProtoElement = (function () {\r\n\t    function CompileProtoElement(boundElementIndex, attrNameAndValues, variableNameAndValues, renderEvents, directives, embeddedTemplateIndex, appProtoEl) {\r\n\t        this.boundElementIndex = boundElementIndex;\r\n\t        this.attrNameAndValues = attrNameAndValues;\r\n\t        this.variableNameAndValues = variableNameAndValues;\r\n\t        this.renderEvents = renderEvents;\r\n\t        this.directives = directives;\r\n\t        this.embeddedTemplateIndex = embeddedTemplateIndex;\r\n\t        this.appProtoEl = appProtoEl;\r\n\t    }\r\n\t    return CompileProtoElement;\r\n\t})();\r\n\texports.CompileProtoElement = CompileProtoElement;\r\n\tfunction visitAndReturnContext(visitor, asts, context) {\r\n\t    template_ast_1.templateVisitAll(visitor, asts, context);\r\n\t    return context;\r\n\t}\r\n\tvar ProtoViewFactory = (function () {\r\n\t    function ProtoViewFactory(component) {\r\n\t        this.component = component;\r\n\t    }\r\n\t    ProtoViewFactory.prototype.createCompileProtoView = function (template, templateVariableBindings, targetStatements, targetProtoViews) {\r\n\t        var embeddedTemplateIndex = targetProtoViews.length;\r\n\t        // Note: targetProtoViews needs to be in depth first order.\r\n\t        // So we \"reserve\" a space here that we fill after the recursion is done\r\n\t        targetProtoViews.push(null);\r\n\t        var builder = new ProtoViewBuilderVisitor(this, targetStatements, targetProtoViews);\r\n\t        template_ast_1.templateVisitAll(builder, template);\r\n\t        var viewType = getViewType(this.component, embeddedTemplateIndex);\r\n\t        var appProtoView = this.createAppProtoView(embeddedTemplateIndex, viewType, templateVariableBindings, targetStatements);\r\n\t        var cpv = new CompileProtoView(embeddedTemplateIndex, builder.protoElements, appProtoView);\r\n\t        targetProtoViews[embeddedTemplateIndex] = cpv;\r\n\t        return cpv;\r\n\t    };\r\n\t    return ProtoViewFactory;\r\n\t})();\r\n\tvar CodeGenProtoViewFactory = (function (_super) {\r\n\t    __extends(CodeGenProtoViewFactory, _super);\r\n\t    function CodeGenProtoViewFactory(resolvedMetadataCacheExpr, component, pipes) {\r\n\t        _super.call(this, component);\r\n\t        this.resolvedMetadataCacheExpr = resolvedMetadataCacheExpr;\r\n\t        this.pipes = pipes;\r\n\t        this._nextVarId = 0;\r\n\t    }\r\n\t    CodeGenProtoViewFactory.prototype._nextProtoViewVar = function (embeddedTemplateIndex) {\r\n\t        return \"appProtoView\" + this._nextVarId++ + \"_\" + this.component.type.name + embeddedTemplateIndex;\r\n\t    };\r\n\t    CodeGenProtoViewFactory.prototype.createAppProtoView = function (embeddedTemplateIndex, viewType, templateVariableBindings, targetStatements) {\r\n\t        var protoViewVarName = this._nextProtoViewVar(embeddedTemplateIndex);\r\n\t        var viewTypeExpr = codeGenViewType(viewType);\r\n\t        var pipesExpr = embeddedTemplateIndex === 0 ?\r\n\t            codeGenTypesArray(this.pipes.map(function (pipeMeta) { return pipeMeta.type; })) :\r\n\t            null;\r\n\t        var statement = \"var \" + protoViewVarName + \" = \" + exports.APP_VIEW_MODULE_REF + \"AppProtoView.create(\" + this.resolvedMetadataCacheExpr.expression + \", \" + viewTypeExpr + \", \" + pipesExpr + \", \" + util_1.codeGenStringMap(templateVariableBindings) + \");\";\r\n\t        targetStatements.push(new util_1.Statement(statement));\r\n\t        return new util_1.Expression(protoViewVarName);\r\n\t    };\r\n\t    CodeGenProtoViewFactory.prototype.createAppProtoElement = function (boundElementIndex, attrNameAndValues, variableNameAndValues, directives, targetStatements) {\r\n\t        var varName = \"appProtoEl\" + this._nextVarId++ + \"_\" + this.component.type.name;\r\n\t        var value = exports.APP_EL_MODULE_REF + \"AppProtoElement.create(\\n        \" + this.resolvedMetadataCacheExpr.expression + \",\\n        \" + boundElementIndex + \",\\n        \" + util_1.codeGenStringMap(attrNameAndValues) + \",\\n        \" + codeGenDirectivesArray(directives) + \",\\n        \" + util_1.codeGenStringMap(variableNameAndValues) + \"\\n      )\";\r\n\t        var statement = \"var \" + varName + \" = \" + value + \";\";\r\n\t        targetStatements.push(new util_1.Statement(statement));\r\n\t        return new util_1.Expression(varName);\r\n\t    };\r\n\t    return CodeGenProtoViewFactory;\r\n\t})(ProtoViewFactory);\r\n\tvar RuntimeProtoViewFactory = (function (_super) {\r\n\t    __extends(RuntimeProtoViewFactory, _super);\r\n\t    function RuntimeProtoViewFactory(metadataCache, component, pipes) {\r\n\t        _super.call(this, component);\r\n\t        this.metadataCache = metadataCache;\r\n\t        this.pipes = pipes;\r\n\t    }\r\n\t    RuntimeProtoViewFactory.prototype.createAppProtoView = function (embeddedTemplateIndex, viewType, templateVariableBindings, targetStatements) {\r\n\t        var pipes = embeddedTemplateIndex === 0 ? this.pipes.map(function (pipeMeta) { return pipeMeta.type.runtime; }) : [];\r\n\t        var templateVars = keyValueArrayToStringMap(templateVariableBindings);\r\n\t        return view_1.AppProtoView.create(this.metadataCache, viewType, pipes, templateVars);\r\n\t    };\r\n\t    RuntimeProtoViewFactory.prototype.createAppProtoElement = function (boundElementIndex, attrNameAndValues, variableNameAndValues, directives, targetStatements) {\r\n\t        var attrs = keyValueArrayToStringMap(attrNameAndValues);\r\n\t        return element_1.AppProtoElement.create(this.metadataCache, boundElementIndex, attrs, directives.map(function (dirMeta) { return dirMeta.type.runtime; }), keyValueArrayToStringMap(variableNameAndValues));\r\n\t    };\r\n\t    return RuntimeProtoViewFactory;\r\n\t})(ProtoViewFactory);\r\n\tvar ProtoViewBuilderVisitor = (function () {\r\n\t    function ProtoViewBuilderVisitor(factory, allStatements, allProtoViews) {\r\n\t        this.factory = factory;\r\n\t        this.allStatements = allStatements;\r\n\t        this.allProtoViews = allProtoViews;\r\n\t        this.protoElements = [];\r\n\t        this.boundElementCount = 0;\r\n\t    }\r\n\t    ProtoViewBuilderVisitor.prototype._readAttrNameAndValues = function (directives, attrAsts) {\r\n\t        var attrs = visitAndReturnContext(this, attrAsts, {});\r\n\t        directives.forEach(function (directiveMeta) {\r\n\t            collection_1.StringMapWrapper.forEach(directiveMeta.hostAttributes, function (value, name) {\r\n\t                var prevValue = attrs[name];\r\n\t                attrs[name] = lang_1.isPresent(prevValue) ? mergeAttributeValue(name, prevValue, value) : value;\r\n\t            });\r\n\t        });\r\n\t        return mapToKeyValueArray(attrs);\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype.visitBoundText = function (ast, context) { return null; };\r\n\t    ProtoViewBuilderVisitor.prototype.visitText = function (ast, context) { return null; };\r\n\t    ProtoViewBuilderVisitor.prototype.visitNgContent = function (ast, context) { return null; };\r\n\t    ProtoViewBuilderVisitor.prototype.visitElement = function (ast, context) {\r\n\t        var _this = this;\r\n\t        var boundElementIndex = null;\r\n\t        if (ast.isBound()) {\r\n\t            boundElementIndex = this.boundElementCount++;\r\n\t        }\r\n\t        var component = ast.getComponent();\r\n\t        var variableNameAndValues = [];\r\n\t        if (lang_1.isBlank(component)) {\r\n\t            ast.exportAsVars.forEach(function (varAst) { variableNameAndValues.push([varAst.name, null]); });\r\n\t        }\r\n\t        var directives = [];\r\n\t        var renderEvents = visitAndReturnContext(this, ast.outputs, new Map());\r\n\t        collection_1.ListWrapper.forEachWithIndex(ast.directives, function (directiveAst, index) {\r\n\t            directiveAst.visit(_this, new DirectiveContext(index, boundElementIndex, renderEvents, variableNameAndValues, directives));\r\n\t        });\r\n\t        var renderEventArray = [];\r\n\t        renderEvents.forEach(function (eventAst, _) { return renderEventArray.push(eventAst); });\r\n\t        var attrNameAndValues = this._readAttrNameAndValues(directives, ast.attrs);\r\n\t        this._addProtoElement(ast.isBound(), boundElementIndex, attrNameAndValues, variableNameAndValues, renderEventArray, directives, null);\r\n\t        template_ast_1.templateVisitAll(this, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype.visitEmbeddedTemplate = function (ast, context) {\r\n\t        var _this = this;\r\n\t        var boundElementIndex = this.boundElementCount++;\r\n\t        var directives = [];\r\n\t        collection_1.ListWrapper.forEachWithIndex(ast.directives, function (directiveAst, index) {\r\n\t            directiveAst.visit(_this, new DirectiveContext(index, boundElementIndex, new Map(), [], directives));\r\n\t        });\r\n\t        var attrNameAndValues = this._readAttrNameAndValues(directives, ast.attrs);\r\n\t        var templateVariableBindings = ast.vars.map(function (varAst) { return [varAst.value.length > 0 ? varAst.value : IMPLICIT_TEMPLATE_VAR, varAst.name]; });\r\n\t        var nestedProtoView = this.factory.createCompileProtoView(ast.children, templateVariableBindings, this.allStatements, this.allProtoViews);\r\n\t        this._addProtoElement(true, boundElementIndex, attrNameAndValues, [], [], directives, nestedProtoView.embeddedTemplateIndex);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype._addProtoElement = function (isBound, boundElementIndex, attrNameAndValues, variableNameAndValues, renderEvents, directives, embeddedTemplateIndex) {\r\n\t        var appProtoEl = null;\r\n\t        if (isBound) {\r\n\t            appProtoEl =\r\n\t                this.factory.createAppProtoElement(boundElementIndex, attrNameAndValues, variableNameAndValues, directives, this.allStatements);\r\n\t        }\r\n\t        var compileProtoEl = new CompileProtoElement(boundElementIndex, attrNameAndValues, variableNameAndValues, renderEvents, directives, embeddedTemplateIndex, appProtoEl);\r\n\t        this.protoElements.push(compileProtoEl);\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype.visitVariable = function (ast, ctx) { return null; };\r\n\t    ProtoViewBuilderVisitor.prototype.visitAttr = function (ast, attrNameAndValues) {\r\n\t        attrNameAndValues[ast.name] = ast.value;\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype.visitDirective = function (ast, ctx) {\r\n\t        ctx.targetDirectives.push(ast.directive);\r\n\t        template_ast_1.templateVisitAll(this, ast.hostEvents, ctx.hostEventTargetAndNames);\r\n\t        ast.exportAsVars.forEach(function (varAst) { ctx.targetVariableNameAndValues.push([varAst.name, ctx.index]); });\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype.visitEvent = function (ast, eventTargetAndNames) {\r\n\t        eventTargetAndNames.set(ast.fullName, ast);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewBuilderVisitor.prototype.visitDirectiveProperty = function (ast, context) { return null; };\r\n\t    ProtoViewBuilderVisitor.prototype.visitElementProperty = function (ast, context) { return null; };\r\n\t    return ProtoViewBuilderVisitor;\r\n\t})();\r\n\tfunction mapToKeyValueArray(data) {\r\n\t    var entryArray = [];\r\n\t    collection_1.StringMapWrapper.forEach(data, function (value, name) { entryArray.push([name, value]); });\r\n\t    // We need to sort to get a defined output order\r\n\t    // for tests and for caching generated artifacts...\r\n\t    collection_1.ListWrapper.sort(entryArray, function (entry1, entry2) {\r\n\t        return lang_1.StringWrapper.compare(entry1[0], entry2[0]);\r\n\t    });\r\n\t    var keyValueArray = [];\r\n\t    entryArray.forEach(function (entry) { keyValueArray.push([entry[0], entry[1]]); });\r\n\t    return keyValueArray;\r\n\t}\r\n\tfunction mergeAttributeValue(attrName, attrValue1, attrValue2) {\r\n\t    if (attrName == CLASS_ATTR || attrName == STYLE_ATTR) {\r\n\t        return attrValue1 + \" \" + attrValue2;\r\n\t    }\r\n\t    else {\r\n\t        return attrValue2;\r\n\t    }\r\n\t}\r\n\tvar DirectiveContext = (function () {\r\n\t    function DirectiveContext(index, boundElementIndex, hostEventTargetAndNames, targetVariableNameAndValues, targetDirectives) {\r\n\t        this.index = index;\r\n\t        this.boundElementIndex = boundElementIndex;\r\n\t        this.hostEventTargetAndNames = hostEventTargetAndNames;\r\n\t        this.targetVariableNameAndValues = targetVariableNameAndValues;\r\n\t        this.targetDirectives = targetDirectives;\r\n\t    }\r\n\t    return DirectiveContext;\r\n\t})();\r\n\tfunction keyValueArrayToStringMap(keyValueArray) {\r\n\t    var stringMap = {};\r\n\t    for (var i = 0; i < keyValueArray.length; i++) {\r\n\t        var entry = keyValueArray[i];\r\n\t        stringMap[entry[0]] = entry[1];\r\n\t    }\r\n\t    return stringMap;\r\n\t}\r\n\tfunction codeGenDirectivesArray(directives) {\r\n\t    var expressions = directives.map(function (directiveType) { return typeRef(directiveType.type); });\r\n\t    return \"[\" + expressions.join(',') + \"]\";\r\n\t}\r\n\tfunction codeGenTypesArray(types) {\r\n\t    var expressions = types.map(typeRef);\r\n\t    return \"[\" + expressions.join(',') + \"]\";\r\n\t}\r\n\tfunction codeGenViewType(value) {\r\n\t    if (lang_1.IS_DART) {\r\n\t        return \"\" + exports.VIEW_TYPE_MODULE_REF + value;\r\n\t    }\r\n\t    else {\r\n\t        return \"\" + value;\r\n\t    }\r\n\t}\r\n\tfunction typeRef(type) {\r\n\t    return \"\" + source_module_1.moduleRef(type.moduleUrl) + type.name;\r\n\t}\r\n\tfunction getViewType(component, embeddedTemplateIndex) {\r\n\t    if (embeddedTemplateIndex > 0) {\r\n\t        return view_type_1.ViewType.EMBEDDED;\r\n\t    }\r\n\t    else if (component.type.isHost) {\r\n\t        return view_type_1.ViewType.HOST;\r\n\t    }\r\n\t    else {\r\n\t        return view_type_1.ViewType.COMPONENT;\r\n\t    }\r\n\t}\r\n\n\n/***/ },\n/* 187 */\n/***/ function(module, exports) {\n\n\t'use strict';var ElementSchemaRegistry = (function () {\r\n\t    function ElementSchemaRegistry() {\r\n\t    }\r\n\t    ElementSchemaRegistry.prototype.hasProperty = function (tagName, propName) { return true; };\r\n\t    ElementSchemaRegistry.prototype.getMappedPropName = function (propName) { return propName; };\r\n\t    return ElementSchemaRegistry;\r\n\t})();\r\n\texports.ElementSchemaRegistry = ElementSchemaRegistry;\r\n\n\n/***/ },\n/* 188 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';// Some of the code comes from WebComponents.JS\r\n\t// https://github.com/webcomponents/webcomponentsjs/blob/master/src/HTMLImports/path.js\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar StyleWithImports = (function () {\r\n\t    function StyleWithImports(style, styleUrls) {\r\n\t        this.style = style;\r\n\t        this.styleUrls = styleUrls;\r\n\t    }\r\n\t    return StyleWithImports;\r\n\t})();\r\n\texports.StyleWithImports = StyleWithImports;\r\n\tfunction isStyleUrlResolvable(url) {\r\n\t    if (lang_1.isBlank(url) || url.length === 0 || url[0] == '/')\r\n\t        return false;\r\n\t    var schemeMatch = lang_1.RegExpWrapper.firstMatch(_urlWithSchemaRe, url);\r\n\t    return lang_1.isBlank(schemeMatch) || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';\r\n\t}\r\n\texports.isStyleUrlResolvable = isStyleUrlResolvable;\r\n\t/**\r\n\t * Rewrites stylesheets by resolving and removing the @import urls that\r\n\t * are either relative or don't have a `package:` scheme\r\n\t */\r\n\tfunction extractStyleUrls(resolver, baseUrl, cssText) {\r\n\t    var foundUrls = [];\r\n\t    var modifiedCssText = lang_1.StringWrapper.replaceAllMapped(cssText, _cssImportRe, function (m) {\r\n\t        var url = lang_1.isPresent(m[1]) ? m[1] : m[2];\r\n\t        if (!isStyleUrlResolvable(url)) {\r\n\t            // Do not attempt to resolve non-package absolute URLs with URI scheme\r\n\t            return m[0];\r\n\t        }\r\n\t        foundUrls.push(resolver.resolve(baseUrl, url));\r\n\t        return '';\r\n\t    });\r\n\t    return new StyleWithImports(modifiedCssText, foundUrls);\r\n\t}\r\n\texports.extractStyleUrls = extractStyleUrls;\r\n\tvar _cssImportRe = /@import\\s+(?:url\\()?\\s*(?:(?:['\"]([^'\"]*))|([^;\\)\\s]*))[^;]*;?/g;\r\n\t// TODO: can't use /^[^:/?#.]+:/g due to clang-format bug:\r\n\t//       https://github.com/angular/angular/issues/4596\r\n\tvar _urlWithSchemaRe = /^([a-zA-Z\\-\\+\\.]+):/g;\r\n\n\n/***/ },\n/* 189 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar directive_metadata_1 = __webpack_require__(125);\r\n\tvar template_ast_1 = __webpack_require__(78);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar source_module_1 = __webpack_require__(77);\r\n\tvar change_detector_compiler_1 = __webpack_require__(280);\r\n\tvar style_compiler_1 = __webpack_require__(284);\r\n\tvar view_compiler_1 = __webpack_require__(287);\r\n\tvar proto_view_compiler_1 = __webpack_require__(186);\r\n\tvar template_parser_1 = __webpack_require__(190);\r\n\tvar template_normalizer_1 = __webpack_require__(285);\r\n\tvar runtime_metadata_1 = __webpack_require__(282);\r\n\tvar view_1 = __webpack_require__(97);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar resolved_metadata_cache_1 = __webpack_require__(306);\r\n\tvar util_1 = __webpack_require__(56);\r\n\texports.METADATA_CACHE_MODULE_REF = source_module_1.moduleRef('package:angular2/src/core/linker/resolved_metadata_cache' + util_1.MODULE_SUFFIX);\r\n\t/**\r\n\t * An internal module of the Angular compiler that begins with component types,\r\n\t * extracts templates, and eventually produces a compiled version of the component\r\n\t * ready for linking into an application.\r\n\t */\r\n\tvar TemplateCompiler = (function () {\r\n\t    function TemplateCompiler(_runtimeMetadataResolver, _templateNormalizer, _templateParser, _styleCompiler, _cdCompiler, _protoViewCompiler, _viewCompiler, _resolvedMetadataCache, _genConfig) {\r\n\t        this._runtimeMetadataResolver = _runtimeMetadataResolver;\r\n\t        this._templateNormalizer = _templateNormalizer;\r\n\t        this._templateParser = _templateParser;\r\n\t        this._styleCompiler = _styleCompiler;\r\n\t        this._cdCompiler = _cdCompiler;\r\n\t        this._protoViewCompiler = _protoViewCompiler;\r\n\t        this._viewCompiler = _viewCompiler;\r\n\t        this._resolvedMetadataCache = _resolvedMetadataCache;\r\n\t        this._genConfig = _genConfig;\r\n\t        this._hostCacheKeys = new Map();\r\n\t        this._compiledTemplateCache = new Map();\r\n\t        this._compiledTemplateDone = new Map();\r\n\t    }\r\n\t    TemplateCompiler.prototype.normalizeDirectiveMetadata = function (directive) {\r\n\t        if (!directive.isComponent) {\r\n\t            // For non components there is nothing to be normalized yet.\r\n\t            return async_1.PromiseWrapper.resolve(directive);\r\n\t        }\r\n\t        return this._templateNormalizer.normalizeTemplate(directive.type, directive.template)\r\n\t            .then(function (normalizedTemplate) { return new directive_metadata_1.CompileDirectiveMetadata({\r\n\t            type: directive.type,\r\n\t            isComponent: directive.isComponent,\r\n\t            dynamicLoadable: directive.dynamicLoadable,\r\n\t            selector: directive.selector,\r\n\t            exportAs: directive.exportAs,\r\n\t            changeDetection: directive.changeDetection,\r\n\t            inputs: directive.inputs,\r\n\t            outputs: directive.outputs,\r\n\t            hostListeners: directive.hostListeners,\r\n\t            hostProperties: directive.hostProperties,\r\n\t            hostAttributes: directive.hostAttributes,\r\n\t            lifecycleHooks: directive.lifecycleHooks,\r\n\t            providers: directive.providers,\r\n\t            template: normalizedTemplate\r\n\t        }); });\r\n\t    };\r\n\t    TemplateCompiler.prototype.compileHostComponentRuntime = function (type) {\r\n\t        var compMeta = this._runtimeMetadataResolver.getDirectiveMetadata(type);\r\n\t        var hostCacheKey = this._hostCacheKeys.get(type);\r\n\t        if (lang_1.isBlank(hostCacheKey)) {\r\n\t            hostCacheKey = new Object();\r\n\t            this._hostCacheKeys.set(type, hostCacheKey);\r\n\t            assertComponent(compMeta);\r\n\t            var hostMeta = directive_metadata_1.createHostComponentMeta(compMeta.type, compMeta.selector);\r\n\t            this._compileComponentRuntime(hostCacheKey, hostMeta, [compMeta], [], []);\r\n\t        }\r\n\t        return this._compiledTemplateDone.get(hostCacheKey)\r\n\t            .then(function (compiledTemplate) {\r\n\t            return new view_1.HostViewFactory(compMeta.selector, compiledTemplate.viewFactory);\r\n\t        });\r\n\t    };\r\n\t    TemplateCompiler.prototype.clearCache = function () {\r\n\t        this._styleCompiler.clearCache();\r\n\t        this._compiledTemplateCache.clear();\r\n\t        this._compiledTemplateDone.clear();\r\n\t        this._hostCacheKeys.clear();\r\n\t    };\r\n\t    TemplateCompiler.prototype.compileTemplatesCodeGen = function (components) {\r\n\t        var _this = this;\r\n\t        if (components.length === 0) {\r\n\t            throw new exceptions_1.BaseException('No components given');\r\n\t        }\r\n\t        var declarations = [];\r\n\t        components.forEach(function (componentWithDirs) {\r\n\t            var compMeta = componentWithDirs.component;\r\n\t            assertComponent(compMeta);\r\n\t            _this._compileComponentCodeGen(compMeta, componentWithDirs.directives, componentWithDirs.pipes, declarations);\r\n\t            if (compMeta.dynamicLoadable) {\r\n\t                var hostMeta = directive_metadata_1.createHostComponentMeta(compMeta.type, compMeta.selector);\r\n\t                var viewFactoryExpression = _this._compileComponentCodeGen(hostMeta, [compMeta], [], declarations);\r\n\t                var constructionKeyword = lang_1.IS_DART ? 'const' : 'new';\r\n\t                var compiledTemplateExpr = constructionKeyword + \" \" + proto_view_compiler_1.APP_VIEW_MODULE_REF + \"HostViewFactory('\" + compMeta.selector + \"',\" + viewFactoryExpression + \")\";\r\n\t                var varName = codeGenHostViewFactoryName(compMeta.type);\r\n\t                declarations.push(\"\" + util_1.codeGenExportVariable(varName) + compiledTemplateExpr + \";\");\r\n\t            }\r\n\t        });\r\n\t        var moduleUrl = components[0].component.type.moduleUrl;\r\n\t        return new source_module_1.SourceModule(\"\" + templateModuleUrl(moduleUrl), declarations.join('\\n'));\r\n\t    };\r\n\t    TemplateCompiler.prototype.compileStylesheetCodeGen = function (stylesheetUrl, cssText) {\r\n\t        return this._styleCompiler.compileStylesheetCodeGen(stylesheetUrl, cssText);\r\n\t    };\r\n\t    TemplateCompiler.prototype._compileComponentRuntime = function (cacheKey, compMeta, viewDirectives, pipes, compilingComponentsPath) {\r\n\t        var _this = this;\r\n\t        var uniqViewDirectives = removeDuplicates(viewDirectives);\r\n\t        var uniqViewPipes = removeDuplicates(pipes);\r\n\t        var compiledTemplate = this._compiledTemplateCache.get(cacheKey);\r\n\t        var done = this._compiledTemplateDone.get(cacheKey);\r\n\t        if (lang_1.isBlank(compiledTemplate)) {\r\n\t            compiledTemplate = new CompiledTemplate();\r\n\t            this._compiledTemplateCache.set(cacheKey, compiledTemplate);\r\n\t            done = async_1.PromiseWrapper\r\n\t                .all([this._styleCompiler.compileComponentRuntime(compMeta.template)].concat(uniqViewDirectives.map(function (dirMeta) { return _this.normalizeDirectiveMetadata(dirMeta); })))\r\n\t                .then(function (stylesAndNormalizedViewDirMetas) {\r\n\t                var normalizedViewDirMetas = stylesAndNormalizedViewDirMetas.slice(1);\r\n\t                var styles = stylesAndNormalizedViewDirMetas[0];\r\n\t                var parsedTemplate = _this._templateParser.parse(compMeta.template.template, normalizedViewDirMetas, uniqViewPipes, compMeta.type.name);\r\n\t                var childPromises = [];\r\n\t                var usedDirectives = DirectiveCollector.findUsedDirectives(parsedTemplate);\r\n\t                usedDirectives.components.forEach(function (component) { return _this._compileNestedComponentRuntime(component, compilingComponentsPath, childPromises); });\r\n\t                return async_1.PromiseWrapper.all(childPromises)\r\n\t                    .then(function (_) {\r\n\t                    var filteredPipes = filterPipes(parsedTemplate, uniqViewPipes);\r\n\t                    compiledTemplate.init(_this._createViewFactoryRuntime(compMeta, parsedTemplate, usedDirectives.directives, styles, filteredPipes));\r\n\t                    return compiledTemplate;\r\n\t                });\r\n\t            });\r\n\t            this._compiledTemplateDone.set(cacheKey, done);\r\n\t        }\r\n\t        return compiledTemplate;\r\n\t    };\r\n\t    TemplateCompiler.prototype._compileNestedComponentRuntime = function (childComponentDir, parentCompilingComponentsPath, childPromises) {\r\n\t        var compilingComponentsPath = collection_1.ListWrapper.clone(parentCompilingComponentsPath);\r\n\t        var childCacheKey = childComponentDir.type.runtime;\r\n\t        var childViewDirectives = this._runtimeMetadataResolver.getViewDirectivesMetadata(childComponentDir.type.runtime);\r\n\t        var childViewPipes = this._runtimeMetadataResolver.getViewPipesMetadata(childComponentDir.type.runtime);\r\n\t        var childIsRecursive = collection_1.ListWrapper.contains(compilingComponentsPath, childCacheKey);\r\n\t        compilingComponentsPath.push(childCacheKey);\r\n\t        this._compileComponentRuntime(childCacheKey, childComponentDir, childViewDirectives, childViewPipes, compilingComponentsPath);\r\n\t        if (!childIsRecursive) {\r\n\t            // Only wait for a child if it is not a cycle\r\n\t            childPromises.push(this._compiledTemplateDone.get(childCacheKey));\r\n\t        }\r\n\t    };\r\n\t    TemplateCompiler.prototype._createViewFactoryRuntime = function (compMeta, parsedTemplate, directives, styles, pipes) {\r\n\t        var _this = this;\r\n\t        if (lang_1.IS_DART || !this._genConfig.useJit) {\r\n\t            var changeDetectorFactories = this._cdCompiler.compileComponentRuntime(compMeta.type, compMeta.changeDetection, parsedTemplate);\r\n\t            var protoViews = this._protoViewCompiler.compileProtoViewRuntime(this._resolvedMetadataCache, compMeta, parsedTemplate, pipes);\r\n\t            return this._viewCompiler.compileComponentRuntime(compMeta, parsedTemplate, styles, protoViews.protoViews, changeDetectorFactories, function (compMeta) { return _this._getNestedComponentViewFactory(compMeta); });\r\n\t        }\r\n\t        else {\r\n\t            var declarations = [];\r\n\t            var viewFactoryExpr = this._createViewFactoryCodeGen('resolvedMetadataCache', compMeta, new source_module_1.SourceExpression([], 'styles'), parsedTemplate, pipes, declarations);\r\n\t            var vars = { 'exports': {}, 'styles': styles, 'resolvedMetadataCache': this._resolvedMetadataCache };\r\n\t            directives.forEach(function (dirMeta) {\r\n\t                vars[dirMeta.type.name] = dirMeta.type.runtime;\r\n\t                if (dirMeta.isComponent && dirMeta.type.runtime !== compMeta.type.runtime) {\r\n\t                    vars[(\"viewFactory_\" + dirMeta.type.name + \"0\")] = _this._getNestedComponentViewFactory(dirMeta);\r\n\t                }\r\n\t            });\r\n\t            pipes.forEach(function (pipeMeta) { return vars[pipeMeta.type.name] = pipeMeta.type.runtime; });\r\n\t            var declarationsWithoutImports = source_module_1.SourceModule.getSourceWithoutImports(declarations.join('\\n'));\r\n\t            return lang_1.evalExpression(\"viewFactory_\" + compMeta.type.name, viewFactoryExpr, declarationsWithoutImports, mergeStringMaps([vars, change_detector_compiler_1.CHANGE_DETECTION_JIT_IMPORTS, proto_view_compiler_1.PROTO_VIEW_JIT_IMPORTS, view_compiler_1.VIEW_JIT_IMPORTS]));\r\n\t        }\r\n\t    };\r\n\t    TemplateCompiler.prototype._getNestedComponentViewFactory = function (compMeta) {\r\n\t        return this._compiledTemplateCache.get(compMeta.type.runtime).viewFactory;\r\n\t    };\r\n\t    TemplateCompiler.prototype._compileComponentCodeGen = function (compMeta, directives, pipes, targetDeclarations) {\r\n\t        var uniqueDirectives = removeDuplicates(directives);\r\n\t        var uniqPipes = removeDuplicates(pipes);\r\n\t        var styleExpr = this._styleCompiler.compileComponentCodeGen(compMeta.template);\r\n\t        var parsedTemplate = this._templateParser.parse(compMeta.template.template, uniqueDirectives, uniqPipes, compMeta.type.name);\r\n\t        var filteredPipes = filterPipes(parsedTemplate, uniqPipes);\r\n\t        return this._createViewFactoryCodeGen(exports.METADATA_CACHE_MODULE_REF + \"CODEGEN_RESOLVED_METADATA_CACHE\", compMeta, styleExpr, parsedTemplate, filteredPipes, targetDeclarations);\r\n\t    };\r\n\t    TemplateCompiler.prototype._createViewFactoryCodeGen = function (resolvedMetadataCacheExpr, compMeta, styleExpr, parsedTemplate, pipes, targetDeclarations) {\r\n\t        var changeDetectorsExprs = this._cdCompiler.compileComponentCodeGen(compMeta.type, compMeta.changeDetection, parsedTemplate);\r\n\t        var protoViewExprs = this._protoViewCompiler.compileProtoViewCodeGen(new util_1.Expression(resolvedMetadataCacheExpr), compMeta, parsedTemplate, pipes);\r\n\t        var viewFactoryExpr = this._viewCompiler.compileComponentCodeGen(compMeta, parsedTemplate, styleExpr, protoViewExprs.protoViews, changeDetectorsExprs, codeGenComponentViewFactoryName);\r\n\t        util_1.addAll(changeDetectorsExprs.declarations, targetDeclarations);\r\n\t        util_1.addAll(protoViewExprs.declarations, targetDeclarations);\r\n\t        util_1.addAll(viewFactoryExpr.declarations, targetDeclarations);\r\n\t        return viewFactoryExpr.expression;\r\n\t    };\r\n\t    TemplateCompiler = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [runtime_metadata_1.RuntimeMetadataResolver, template_normalizer_1.TemplateNormalizer, template_parser_1.TemplateParser, style_compiler_1.StyleCompiler, change_detector_compiler_1.ChangeDetectionCompiler, proto_view_compiler_1.ProtoViewCompiler, view_compiler_1.ViewCompiler, resolved_metadata_cache_1.ResolvedMetadataCache, change_detection_1.ChangeDetectorGenConfig])\r\n\t    ], TemplateCompiler);\r\n\t    return TemplateCompiler;\r\n\t})();\r\n\texports.TemplateCompiler = TemplateCompiler;\r\n\tvar NormalizedComponentWithViewDirectives = (function () {\r\n\t    function NormalizedComponentWithViewDirectives(component, directives, pipes) {\r\n\t        this.component = component;\r\n\t        this.directives = directives;\r\n\t        this.pipes = pipes;\r\n\t    }\r\n\t    return NormalizedComponentWithViewDirectives;\r\n\t})();\r\n\texports.NormalizedComponentWithViewDirectives = NormalizedComponentWithViewDirectives;\r\n\tvar CompiledTemplate = (function () {\r\n\t    function CompiledTemplate() {\r\n\t        this.viewFactory = null;\r\n\t    }\r\n\t    CompiledTemplate.prototype.init = function (viewFactory) { this.viewFactory = viewFactory; };\r\n\t    return CompiledTemplate;\r\n\t})();\r\n\tfunction assertComponent(meta) {\r\n\t    if (!meta.isComponent) {\r\n\t        throw new exceptions_1.BaseException(\"Could not compile '\" + meta.type.name + \"' because it is not a component.\");\r\n\t    }\r\n\t}\r\n\tfunction templateModuleUrl(moduleUrl) {\r\n\t    var urlWithoutSuffix = moduleUrl.substring(0, moduleUrl.length - util_1.MODULE_SUFFIX.length);\r\n\t    return urlWithoutSuffix + \".template\" + util_1.MODULE_SUFFIX;\r\n\t}\r\n\tfunction codeGenHostViewFactoryName(type) {\r\n\t    return \"hostViewFactory_\" + type.name;\r\n\t}\r\n\tfunction codeGenComponentViewFactoryName(nestedCompType) {\r\n\t    return source_module_1.moduleRef(templateModuleUrl(nestedCompType.type.moduleUrl)) + \"viewFactory_\" + nestedCompType.type.name + \"0\";\r\n\t}\r\n\tfunction mergeStringMaps(maps) {\r\n\t    var result = {};\r\n\t    maps.forEach(function (map) { collection_1.StringMapWrapper.forEach(map, function (value, key) { result[key] = value; }); });\r\n\t    return result;\r\n\t}\r\n\tfunction removeDuplicates(items) {\r\n\t    var res = [];\r\n\t    items.forEach(function (item) {\r\n\t        var hasMatch = res.filter(function (r) { return r.type.name == item.type.name && r.type.moduleUrl == item.type.moduleUrl &&\r\n\t            r.type.runtime == item.type.runtime; })\r\n\t            .length > 0;\r\n\t        if (!hasMatch) {\r\n\t            res.push(item);\r\n\t        }\r\n\t    });\r\n\t    return res;\r\n\t}\r\n\tvar DirectiveCollector = (function () {\r\n\t    function DirectiveCollector() {\r\n\t        this.directives = [];\r\n\t        this.components = [];\r\n\t    }\r\n\t    DirectiveCollector.findUsedDirectives = function (parsedTemplate) {\r\n\t        var collector = new DirectiveCollector();\r\n\t        template_ast_1.templateVisitAll(collector, parsedTemplate);\r\n\t        return collector;\r\n\t    };\r\n\t    DirectiveCollector.prototype.visitBoundText = function (ast, context) { return null; };\r\n\t    DirectiveCollector.prototype.visitText = function (ast, context) { return null; };\r\n\t    DirectiveCollector.prototype.visitNgContent = function (ast, context) { return null; };\r\n\t    DirectiveCollector.prototype.visitElement = function (ast, context) {\r\n\t        template_ast_1.templateVisitAll(this, ast.directives);\r\n\t        template_ast_1.templateVisitAll(this, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    DirectiveCollector.prototype.visitEmbeddedTemplate = function (ast, context) {\r\n\t        template_ast_1.templateVisitAll(this, ast.directives);\r\n\t        template_ast_1.templateVisitAll(this, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    DirectiveCollector.prototype.visitVariable = function (ast, ctx) { return null; };\r\n\t    DirectiveCollector.prototype.visitAttr = function (ast, attrNameAndValues) { return null; };\r\n\t    DirectiveCollector.prototype.visitDirective = function (ast, ctx) {\r\n\t        if (ast.directive.isComponent) {\r\n\t            this.components.push(ast.directive);\r\n\t        }\r\n\t        this.directives.push(ast.directive);\r\n\t        return null;\r\n\t    };\r\n\t    DirectiveCollector.prototype.visitEvent = function (ast, eventTargetAndNames) {\r\n\t        return null;\r\n\t    };\r\n\t    DirectiveCollector.prototype.visitDirectiveProperty = function (ast, context) { return null; };\r\n\t    DirectiveCollector.prototype.visitElementProperty = function (ast, context) { return null; };\r\n\t    return DirectiveCollector;\r\n\t})();\r\n\tfunction filterPipes(template, allPipes) {\r\n\t    var visitor = new PipeVisitor();\r\n\t    template_ast_1.templateVisitAll(visitor, template);\r\n\t    return allPipes.filter(function (pipeMeta) { return collection_1.SetWrapper.has(visitor.collector.pipes, pipeMeta.name); });\r\n\t}\r\n\tvar PipeVisitor = (function () {\r\n\t    function PipeVisitor() {\r\n\t        this.collector = new template_parser_1.PipeCollector();\r\n\t    }\r\n\t    PipeVisitor.prototype.visitBoundText = function (ast, context) {\r\n\t        ast.value.visit(this.collector);\r\n\t        return null;\r\n\t    };\r\n\t    PipeVisitor.prototype.visitText = function (ast, context) { return null; };\r\n\t    PipeVisitor.prototype.visitNgContent = function (ast, context) { return null; };\r\n\t    PipeVisitor.prototype.visitElement = function (ast, context) {\r\n\t        template_ast_1.templateVisitAll(this, ast.inputs);\r\n\t        template_ast_1.templateVisitAll(this, ast.outputs);\r\n\t        template_ast_1.templateVisitAll(this, ast.directives);\r\n\t        template_ast_1.templateVisitAll(this, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    PipeVisitor.prototype.visitEmbeddedTemplate = function (ast, context) {\r\n\t        template_ast_1.templateVisitAll(this, ast.outputs);\r\n\t        template_ast_1.templateVisitAll(this, ast.directives);\r\n\t        template_ast_1.templateVisitAll(this, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    PipeVisitor.prototype.visitVariable = function (ast, ctx) { return null; };\r\n\t    PipeVisitor.prototype.visitAttr = function (ast, attrNameAndValues) { return null; };\r\n\t    PipeVisitor.prototype.visitDirective = function (ast, ctx) {\r\n\t        template_ast_1.templateVisitAll(this, ast.inputs);\r\n\t        template_ast_1.templateVisitAll(this, ast.hostEvents);\r\n\t        template_ast_1.templateVisitAll(this, ast.hostProperties);\r\n\t        return null;\r\n\t    };\r\n\t    PipeVisitor.prototype.visitEvent = function (ast, eventTargetAndNames) {\r\n\t        ast.handler.visit(this.collector);\r\n\t        return null;\r\n\t    };\r\n\t    PipeVisitor.prototype.visitDirectiveProperty = function (ast, context) {\r\n\t        ast.value.visit(this.collector);\r\n\t        return null;\r\n\t    };\r\n\t    PipeVisitor.prototype.visitElementProperty = function (ast, context) {\r\n\t        ast.value.visit(this.collector);\r\n\t        return null;\r\n\t    };\r\n\t    return PipeVisitor;\r\n\t})();\r\n\n\n/***/ },\n/* 190 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_2 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar html_parser_1 = __webpack_require__(184);\r\n\tvar html_tags_1 = __webpack_require__(91);\r\n\tvar parse_util_1 = __webpack_require__(185);\r\n\tvar ast_1 = __webpack_require__(127);\r\n\tvar template_ast_1 = __webpack_require__(78);\r\n\tvar selector_1 = __webpack_require__(283);\r\n\tvar element_schema_registry_1 = __webpack_require__(187);\r\n\tvar template_preparser_1 = __webpack_require__(286);\r\n\tvar style_url_resolver_1 = __webpack_require__(188);\r\n\tvar html_ast_1 = __webpack_require__(183);\r\n\tvar util_1 = __webpack_require__(56);\r\n\t// Group 1 = \"bind-\"\r\n\t// Group 2 = \"var-\" or \"#\"\r\n\t// Group 3 = \"on-\"\r\n\t// Group 4 = \"bindon-\"\r\n\t// Group 5 = the identifier after \"bind-\", \"var-/#\", or \"on-\"\r\n\t// Group 6 = identifier inside [()]\r\n\t// Group 7 = identifier inside []\r\n\t// Group 8 = identifier inside ()\r\n\tvar BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(var-|#)|(on-)|(bindon-))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/g;\r\n\tvar TEMPLATE_ELEMENT = 'template';\r\n\tvar TEMPLATE_ATTR = 'template';\r\n\tvar TEMPLATE_ATTR_PREFIX = '*';\r\n\tvar CLASS_ATTR = 'class';\r\n\tvar PROPERTY_PARTS_SEPARATOR = '.';\r\n\tvar ATTRIBUTE_PREFIX = 'attr';\r\n\tvar CLASS_PREFIX = 'class';\r\n\tvar STYLE_PREFIX = 'style';\r\n\tvar TEXT_CSS_SELECTOR = selector_1.CssSelector.parse('*')[0];\r\n\t/**\r\n\t * Provides an array of {@link TemplateAstVisitor}s which will be used to transform\r\n\t * parsed templates before compilation is invoked, allowing custom expression syntax\r\n\t * and other advanced transformations.\r\n\t *\r\n\t * This is currently an internal-only feature and not meant for general use.\r\n\t */\r\n\texports.TEMPLATE_TRANSFORMS = lang_2.CONST_EXPR(new core_1.OpaqueToken('TemplateTransforms'));\r\n\tvar TemplateParseError = (function (_super) {\r\n\t    __extends(TemplateParseError, _super);\r\n\t    function TemplateParseError(message, span) {\r\n\t        _super.call(this, span, message);\r\n\t    }\r\n\t    return TemplateParseError;\r\n\t})(parse_util_1.ParseError);\r\n\texports.TemplateParseError = TemplateParseError;\r\n\tvar TemplateParser = (function () {\r\n\t    function TemplateParser(_exprParser, _schemaRegistry, _htmlParser, transforms) {\r\n\t        this._exprParser = _exprParser;\r\n\t        this._schemaRegistry = _schemaRegistry;\r\n\t        this._htmlParser = _htmlParser;\r\n\t        this.transforms = transforms;\r\n\t    }\r\n\t    TemplateParser.prototype.parse = function (template, directives, pipes, templateUrl) {\r\n\t        var parseVisitor = new TemplateParseVisitor(directives, pipes, this._exprParser, this._schemaRegistry);\r\n\t        var htmlAstWithErrors = this._htmlParser.parse(template, templateUrl);\r\n\t        var result = html_ast_1.htmlVisitAll(parseVisitor, htmlAstWithErrors.rootNodes, EMPTY_COMPONENT);\r\n\t        var errors = htmlAstWithErrors.errors.concat(parseVisitor.errors);\r\n\t        if (errors.length > 0) {\r\n\t            var errorString = errors.join('\\n');\r\n\t            throw new exceptions_1.BaseException(\"Template parse errors:\\n\" + errorString);\r\n\t        }\r\n\t        if (lang_1.isPresent(this.transforms)) {\r\n\t            this.transforms.forEach(function (transform) { result = template_ast_1.templateVisitAll(transform, result); });\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    TemplateParser = __decorate([\r\n\t        core_1.Injectable(),\r\n\t        __param(3, core_1.Optional()),\r\n\t        __param(3, core_1.Inject(exports.TEMPLATE_TRANSFORMS)), \r\n\t        __metadata('design:paramtypes', [change_detection_1.Parser, element_schema_registry_1.ElementSchemaRegistry, html_parser_1.HtmlParser, Array])\r\n\t    ], TemplateParser);\r\n\t    return TemplateParser;\r\n\t})();\r\n\texports.TemplateParser = TemplateParser;\r\n\tvar TemplateParseVisitor = (function () {\r\n\t    function TemplateParseVisitor(directives, pipes, _exprParser, _schemaRegistry) {\r\n\t        var _this = this;\r\n\t        this._exprParser = _exprParser;\r\n\t        this._schemaRegistry = _schemaRegistry;\r\n\t        this.errors = [];\r\n\t        this.directivesIndex = new Map();\r\n\t        this.ngContentCount = 0;\r\n\t        this.selectorMatcher = new selector_1.SelectorMatcher();\r\n\t        collection_1.ListWrapper.forEachWithIndex(directives, function (directive, index) {\r\n\t            var selector = selector_1.CssSelector.parse(directive.selector);\r\n\t            _this.selectorMatcher.addSelectables(selector, directive);\r\n\t            _this.directivesIndex.set(directive, index);\r\n\t        });\r\n\t        this.pipesByName = new Map();\r\n\t        pipes.forEach(function (pipe) { return _this.pipesByName.set(pipe.name, pipe); });\r\n\t    }\r\n\t    TemplateParseVisitor.prototype._reportError = function (message, sourceSpan) {\r\n\t        this.errors.push(new TemplateParseError(message, sourceSpan));\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseInterpolation = function (value, sourceSpan) {\r\n\t        var sourceInfo = sourceSpan.start.toString();\r\n\t        try {\r\n\t            var ast = this._exprParser.parseInterpolation(value, sourceInfo);\r\n\t            this._checkPipes(ast, sourceSpan);\r\n\t            return ast;\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._reportError(\"\" + e, sourceSpan);\r\n\t            return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseAction = function (value, sourceSpan) {\r\n\t        var sourceInfo = sourceSpan.start.toString();\r\n\t        try {\r\n\t            var ast = this._exprParser.parseAction(value, sourceInfo);\r\n\t            this._checkPipes(ast, sourceSpan);\r\n\t            return ast;\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._reportError(\"\" + e, sourceSpan);\r\n\t            return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseBinding = function (value, sourceSpan) {\r\n\t        var sourceInfo = sourceSpan.start.toString();\r\n\t        try {\r\n\t            var ast = this._exprParser.parseBinding(value, sourceInfo);\r\n\t            this._checkPipes(ast, sourceSpan);\r\n\t            return ast;\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._reportError(\"\" + e, sourceSpan);\r\n\t            return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseTemplateBindings = function (value, sourceSpan) {\r\n\t        var _this = this;\r\n\t        var sourceInfo = sourceSpan.start.toString();\r\n\t        try {\r\n\t            var bindings = this._exprParser.parseTemplateBindings(value, sourceInfo);\r\n\t            bindings.forEach(function (binding) {\r\n\t                if (lang_1.isPresent(binding.expression)) {\r\n\t                    _this._checkPipes(binding.expression, sourceSpan);\r\n\t                }\r\n\t            });\r\n\t            return bindings;\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._reportError(\"\" + e, sourceSpan);\r\n\t            return [];\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._checkPipes = function (ast, sourceSpan) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(ast)) {\r\n\t            var collector = new PipeCollector();\r\n\t            ast.visit(collector);\r\n\t            collector.pipes.forEach(function (pipeName) {\r\n\t                if (!_this.pipesByName.has(pipeName)) {\r\n\t                    _this._reportError(\"The pipe '\" + pipeName + \"' could not be found\", sourceSpan);\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype.visitText = function (ast, component) {\r\n\t        var ngContentIndex = component.findNgContentIndex(TEXT_CSS_SELECTOR);\r\n\t        var expr = this._parseInterpolation(ast.value, ast.sourceSpan);\r\n\t        if (lang_1.isPresent(expr)) {\r\n\t            return new template_ast_1.BoundTextAst(expr, ngContentIndex, ast.sourceSpan);\r\n\t        }\r\n\t        else {\r\n\t            return new template_ast_1.TextAst(ast.value, ngContentIndex, ast.sourceSpan);\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype.visitAttr = function (ast, contex) {\r\n\t        return new template_ast_1.AttrAst(ast.name, ast.value, ast.sourceSpan);\r\n\t    };\r\n\t    TemplateParseVisitor.prototype.visitComment = function (ast, context) { return null; };\r\n\t    TemplateParseVisitor.prototype.visitElement = function (element, component) {\r\n\t        var _this = this;\r\n\t        var nodeName = element.name;\r\n\t        var preparsedElement = template_preparser_1.preparseElement(element);\r\n\t        if (preparsedElement.type === template_preparser_1.PreparsedElementType.SCRIPT ||\r\n\t            preparsedElement.type === template_preparser_1.PreparsedElementType.STYLE) {\r\n\t            // Skipping <script> for security reasons\r\n\t            // Skipping <style> as we already processed them\r\n\t            // in the StyleCompiler\r\n\t            return null;\r\n\t        }\r\n\t        if (preparsedElement.type === template_preparser_1.PreparsedElementType.STYLESHEET &&\r\n\t            style_url_resolver_1.isStyleUrlResolvable(preparsedElement.hrefAttr)) {\r\n\t            // Skipping stylesheets with either relative urls or package scheme as we already processed\r\n\t            // them in the StyleCompiler\r\n\t            return null;\r\n\t        }\r\n\t        var matchableAttrs = [];\r\n\t        var elementOrDirectiveProps = [];\r\n\t        var vars = [];\r\n\t        var events = [];\r\n\t        var templateElementOrDirectiveProps = [];\r\n\t        var templateVars = [];\r\n\t        var templateMatchableAttrs = [];\r\n\t        var hasInlineTemplates = false;\r\n\t        var attrs = [];\r\n\t        element.attrs.forEach(function (attr) {\r\n\t            var hasBinding = _this._parseAttr(attr, matchableAttrs, elementOrDirectiveProps, events, vars);\r\n\t            var hasTemplateBinding = _this._parseInlineTemplateBinding(attr, templateMatchableAttrs, templateElementOrDirectiveProps, templateVars);\r\n\t            if (!hasBinding && !hasTemplateBinding) {\r\n\t                // don't include the bindings as attributes as well in the AST\r\n\t                attrs.push(_this.visitAttr(attr, null));\r\n\t                matchableAttrs.push([attr.name, attr.value]);\r\n\t            }\r\n\t            if (hasTemplateBinding) {\r\n\t                hasInlineTemplates = true;\r\n\t            }\r\n\t        });\r\n\t        var lcElName = html_tags_1.splitNsName(nodeName.toLowerCase())[1];\r\n\t        var isTemplateElement = lcElName == TEMPLATE_ELEMENT;\r\n\t        var elementCssSelector = createElementCssSelector(nodeName, matchableAttrs);\r\n\t        var directives = this._createDirectiveAsts(element.name, this._parseDirectives(this.selectorMatcher, elementCssSelector), elementOrDirectiveProps, isTemplateElement ? [] : vars, element.sourceSpan);\r\n\t        var elementProps = this._createElementPropertyAsts(element.name, elementOrDirectiveProps, directives);\r\n\t        var children = html_ast_1.htmlVisitAll(preparsedElement.nonBindable ? NON_BINDABLE_VISITOR : this, element.children, Component.create(directives));\r\n\t        var elementNgContentIndex = hasInlineTemplates ? null : component.findNgContentIndex(elementCssSelector);\r\n\t        var parsedElement;\r\n\t        if (preparsedElement.type === template_preparser_1.PreparsedElementType.NG_CONTENT) {\r\n\t            if (lang_1.isPresent(element.children) && element.children.length > 0) {\r\n\t                this._reportError(\"<ng-content> element cannot have content. <ng-content> must be immediately followed by </ng-content>\", element.sourceSpan);\r\n\t            }\r\n\t            parsedElement =\r\n\t                new template_ast_1.NgContentAst(this.ngContentCount++, elementNgContentIndex, element.sourceSpan);\r\n\t        }\r\n\t        else if (isTemplateElement) {\r\n\t            this._assertAllEventsPublishedByDirectives(directives, events);\r\n\t            this._assertNoComponentsNorElementBindingsOnTemplate(directives, elementProps, element.sourceSpan);\r\n\t            parsedElement = new template_ast_1.EmbeddedTemplateAst(attrs, events, vars, directives, children, elementNgContentIndex, element.sourceSpan);\r\n\t        }\r\n\t        else {\r\n\t            this._assertOnlyOneComponent(directives, element.sourceSpan);\r\n\t            var elementExportAsVars = vars.filter(function (varAst) { return varAst.value.length === 0; });\r\n\t            parsedElement =\r\n\t                new template_ast_1.ElementAst(nodeName, attrs, elementProps, events, elementExportAsVars, directives, children, elementNgContentIndex, element.sourceSpan);\r\n\t        }\r\n\t        if (hasInlineTemplates) {\r\n\t            var templateCssSelector = createElementCssSelector(TEMPLATE_ELEMENT, templateMatchableAttrs);\r\n\t            var templateDirectives = this._createDirectiveAsts(element.name, this._parseDirectives(this.selectorMatcher, templateCssSelector), templateElementOrDirectiveProps, [], element.sourceSpan);\r\n\t            var templateElementProps = this._createElementPropertyAsts(element.name, templateElementOrDirectiveProps, templateDirectives);\r\n\t            this._assertNoComponentsNorElementBindingsOnTemplate(templateDirectives, templateElementProps, element.sourceSpan);\r\n\t            parsedElement = new template_ast_1.EmbeddedTemplateAst([], [], templateVars, templateDirectives, [parsedElement], component.findNgContentIndex(templateCssSelector), element.sourceSpan);\r\n\t        }\r\n\t        return parsedElement;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseInlineTemplateBinding = function (attr, targetMatchableAttrs, targetProps, targetVars) {\r\n\t        var templateBindingsSource = null;\r\n\t        if (attr.name == TEMPLATE_ATTR) {\r\n\t            templateBindingsSource = attr.value;\r\n\t        }\r\n\t        else if (attr.name.startsWith(TEMPLATE_ATTR_PREFIX)) {\r\n\t            var key = attr.name.substring(TEMPLATE_ATTR_PREFIX.length); // remove the star\r\n\t            templateBindingsSource = (attr.value.length == 0) ? key : key + ' ' + attr.value;\r\n\t        }\r\n\t        if (lang_1.isPresent(templateBindingsSource)) {\r\n\t            var bindings = this._parseTemplateBindings(templateBindingsSource, attr.sourceSpan);\r\n\t            for (var i = 0; i < bindings.length; i++) {\r\n\t                var binding = bindings[i];\r\n\t                if (binding.keyIsVar) {\r\n\t                    targetVars.push(new template_ast_1.VariableAst(binding.key, binding.name, attr.sourceSpan));\r\n\t                    targetMatchableAttrs.push([binding.key, binding.name]);\r\n\t                }\r\n\t                else if (lang_1.isPresent(binding.expression)) {\r\n\t                    this._parsePropertyAst(binding.key, binding.expression, attr.sourceSpan, targetMatchableAttrs, targetProps);\r\n\t                }\r\n\t                else {\r\n\t                    targetMatchableAttrs.push([binding.key, '']);\r\n\t                    this._parseLiteralAttr(binding.key, null, attr.sourceSpan, targetProps);\r\n\t                }\r\n\t            }\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseAttr = function (attr, targetMatchableAttrs, targetProps, targetEvents, targetVars) {\r\n\t        var attrName = this._normalizeAttributeName(attr.name);\r\n\t        var attrValue = attr.value;\r\n\t        var bindParts = lang_1.RegExpWrapper.firstMatch(BIND_NAME_REGEXP, attrName);\r\n\t        var hasBinding = false;\r\n\t        if (lang_1.isPresent(bindParts)) {\r\n\t            hasBinding = true;\r\n\t            if (lang_1.isPresent(bindParts[1])) {\r\n\t                this._parseProperty(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs, targetProps);\r\n\t            }\r\n\t            else if (lang_1.isPresent(bindParts[2])) {\r\n\t                var identifier = bindParts[5];\r\n\t                this._parseVariable(identifier, attrValue, attr.sourceSpan, targetVars);\r\n\t            }\r\n\t            else if (lang_1.isPresent(bindParts[3])) {\r\n\t                this._parseEvent(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs, targetEvents);\r\n\t            }\r\n\t            else if (lang_1.isPresent(bindParts[4])) {\r\n\t                this._parseProperty(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs, targetProps);\r\n\t                this._parseAssignmentEvent(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs, targetEvents);\r\n\t            }\r\n\t            else if (lang_1.isPresent(bindParts[6])) {\r\n\t                this._parseProperty(bindParts[6], attrValue, attr.sourceSpan, targetMatchableAttrs, targetProps);\r\n\t                this._parseAssignmentEvent(bindParts[6], attrValue, attr.sourceSpan, targetMatchableAttrs, targetEvents);\r\n\t            }\r\n\t            else if (lang_1.isPresent(bindParts[7])) {\r\n\t                this._parseProperty(bindParts[7], attrValue, attr.sourceSpan, targetMatchableAttrs, targetProps);\r\n\t            }\r\n\t            else if (lang_1.isPresent(bindParts[8])) {\r\n\t                this._parseEvent(bindParts[8], attrValue, attr.sourceSpan, targetMatchableAttrs, targetEvents);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            hasBinding = this._parsePropertyInterpolation(attrName, attrValue, attr.sourceSpan, targetMatchableAttrs, targetProps);\r\n\t        }\r\n\t        if (!hasBinding) {\r\n\t            this._parseLiteralAttr(attrName, attrValue, attr.sourceSpan, targetProps);\r\n\t        }\r\n\t        return hasBinding;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._normalizeAttributeName = function (attrName) {\r\n\t        return attrName.toLowerCase().startsWith('data-') ? attrName.substring(5) : attrName;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseVariable = function (identifier, value, sourceSpan, targetVars) {\r\n\t        if (identifier.indexOf('-') > -1) {\r\n\t            this._reportError(\"\\\"-\\\" is not allowed in variable names\", sourceSpan);\r\n\t        }\r\n\t        targetVars.push(new template_ast_1.VariableAst(identifier, value, sourceSpan));\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseProperty = function (name, expression, sourceSpan, targetMatchableAttrs, targetProps) {\r\n\t        this._parsePropertyAst(name, this._parseBinding(expression, sourceSpan), sourceSpan, targetMatchableAttrs, targetProps);\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parsePropertyInterpolation = function (name, value, sourceSpan, targetMatchableAttrs, targetProps) {\r\n\t        var expr = this._parseInterpolation(value, sourceSpan);\r\n\t        if (lang_1.isPresent(expr)) {\r\n\t            this._parsePropertyAst(name, expr, sourceSpan, targetMatchableAttrs, targetProps);\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parsePropertyAst = function (name, ast, sourceSpan, targetMatchableAttrs, targetProps) {\r\n\t        targetMatchableAttrs.push([name, ast.source]);\r\n\t        targetProps.push(new BoundElementOrDirectiveProperty(name, ast, false, sourceSpan));\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseAssignmentEvent = function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {\r\n\t        this._parseEvent(name + \"Change\", expression + \"=$event\", sourceSpan, targetMatchableAttrs, targetEvents);\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseEvent = function (name, expression, sourceSpan, targetMatchableAttrs, targetEvents) {\r\n\t        // long format: 'target: eventName'\r\n\t        var parts = util_1.splitAtColon(name, [null, name]);\r\n\t        var target = parts[0];\r\n\t        var eventName = parts[1];\r\n\t        var ast = this._parseAction(expression, sourceSpan);\r\n\t        targetMatchableAttrs.push([name, ast.source]);\r\n\t        targetEvents.push(new template_ast_1.BoundEventAst(eventName, target, ast, sourceSpan));\r\n\t        // Don't detect directives for event names for now,\r\n\t        // so don't add the event name to the matchableAttrs\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseLiteralAttr = function (name, value, sourceSpan, targetProps) {\r\n\t        targetProps.push(new BoundElementOrDirectiveProperty(name, this._exprParser.wrapLiteralPrimitive(value, ''), true, sourceSpan));\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._parseDirectives = function (selectorMatcher, elementCssSelector) {\r\n\t        var _this = this;\r\n\t        var directives = [];\r\n\t        selectorMatcher.match(elementCssSelector, function (selector, directive) { directives.push(directive); });\r\n\t        // Need to sort the directives so that we get consistent results throughout,\r\n\t        // as selectorMatcher uses Maps inside.\r\n\t        // Also need to make components the first directive in the array\r\n\t        collection_1.ListWrapper.sort(directives, function (dir1, dir2) {\r\n\t            var dir1Comp = dir1.isComponent;\r\n\t            var dir2Comp = dir2.isComponent;\r\n\t            if (dir1Comp && !dir2Comp) {\r\n\t                return -1;\r\n\t            }\r\n\t            else if (!dir1Comp && dir2Comp) {\r\n\t                return 1;\r\n\t            }\r\n\t            else {\r\n\t                return _this.directivesIndex.get(dir1) - _this.directivesIndex.get(dir2);\r\n\t            }\r\n\t        });\r\n\t        return directives;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._createDirectiveAsts = function (elementName, directives, props, possibleExportAsVars, sourceSpan) {\r\n\t        var _this = this;\r\n\t        var matchedVariables = new Set();\r\n\t        var directiveAsts = directives.map(function (directive) {\r\n\t            var hostProperties = [];\r\n\t            var hostEvents = [];\r\n\t            var directiveProperties = [];\r\n\t            _this._createDirectiveHostPropertyAsts(elementName, directive.hostProperties, sourceSpan, hostProperties);\r\n\t            _this._createDirectiveHostEventAsts(directive.hostListeners, sourceSpan, hostEvents);\r\n\t            _this._createDirectivePropertyAsts(directive.inputs, props, directiveProperties);\r\n\t            var exportAsVars = [];\r\n\t            possibleExportAsVars.forEach(function (varAst) {\r\n\t                if ((varAst.value.length === 0 && directive.isComponent) ||\r\n\t                    (directive.exportAs == varAst.value)) {\r\n\t                    exportAsVars.push(varAst);\r\n\t                    matchedVariables.add(varAst.name);\r\n\t                }\r\n\t            });\r\n\t            return new template_ast_1.DirectiveAst(directive, directiveProperties, hostProperties, hostEvents, exportAsVars, sourceSpan);\r\n\t        });\r\n\t        possibleExportAsVars.forEach(function (varAst) {\r\n\t            if (varAst.value.length > 0 && !collection_1.SetWrapper.has(matchedVariables, varAst.name)) {\r\n\t                _this._reportError(\"There is no directive with \\\"exportAs\\\" set to \\\"\" + varAst.value + \"\\\"\", varAst.sourceSpan);\r\n\t            }\r\n\t        });\r\n\t        return directiveAsts;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._createDirectiveHostPropertyAsts = function (elementName, hostProps, sourceSpan, targetPropertyAsts) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(hostProps)) {\r\n\t            collection_1.StringMapWrapper.forEach(hostProps, function (expression, propName) {\r\n\t                var exprAst = _this._parseBinding(expression, sourceSpan);\r\n\t                targetPropertyAsts.push(_this._createElementPropertyAst(elementName, propName, exprAst, sourceSpan));\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._createDirectiveHostEventAsts = function (hostListeners, sourceSpan, targetEventAsts) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(hostListeners)) {\r\n\t            collection_1.StringMapWrapper.forEach(hostListeners, function (expression, propName) {\r\n\t                _this._parseEvent(propName, expression, sourceSpan, [], targetEventAsts);\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._createDirectivePropertyAsts = function (directiveProperties, boundProps, targetBoundDirectiveProps) {\r\n\t        if (lang_1.isPresent(directiveProperties)) {\r\n\t            var boundPropsByName = new Map();\r\n\t            boundProps.forEach(function (boundProp) {\r\n\t                var prevValue = boundPropsByName.get(boundProp.name);\r\n\t                if (lang_1.isBlank(prevValue) || prevValue.isLiteral) {\r\n\t                    // give [a]=\"b\" a higher precedence than a=\"b\" on the same element\r\n\t                    boundPropsByName.set(boundProp.name, boundProp);\r\n\t                }\r\n\t            });\r\n\t            collection_1.StringMapWrapper.forEach(directiveProperties, function (elProp, dirProp) {\r\n\t                var boundProp = boundPropsByName.get(elProp);\r\n\t                // Bindings are optional, so this binding only needs to be set up if an expression is given.\r\n\t                if (lang_1.isPresent(boundProp)) {\r\n\t                    targetBoundDirectiveProps.push(new template_ast_1.BoundDirectivePropertyAst(dirProp, boundProp.name, boundProp.expression, boundProp.sourceSpan));\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._createElementPropertyAsts = function (elementName, props, directives) {\r\n\t        var _this = this;\r\n\t        var boundElementProps = [];\r\n\t        var boundDirectivePropsIndex = new Map();\r\n\t        directives.forEach(function (directive) {\r\n\t            directive.inputs.forEach(function (prop) {\r\n\t                boundDirectivePropsIndex.set(prop.templateName, prop);\r\n\t            });\r\n\t        });\r\n\t        props.forEach(function (prop) {\r\n\t            if (!prop.isLiteral && lang_1.isBlank(boundDirectivePropsIndex.get(prop.name))) {\r\n\t                boundElementProps.push(_this._createElementPropertyAst(elementName, prop.name, prop.expression, prop.sourceSpan));\r\n\t            }\r\n\t        });\r\n\t        return boundElementProps;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._createElementPropertyAst = function (elementName, name, ast, sourceSpan) {\r\n\t        var unit = null;\r\n\t        var bindingType;\r\n\t        var boundPropertyName;\r\n\t        var parts = name.split(PROPERTY_PARTS_SEPARATOR);\r\n\t        if (parts.length === 1) {\r\n\t            boundPropertyName = this._schemaRegistry.getMappedPropName(parts[0]);\r\n\t            bindingType = template_ast_1.PropertyBindingType.Property;\r\n\t            if (!this._schemaRegistry.hasProperty(elementName, boundPropertyName)) {\r\n\t                this._reportError(\"Can't bind to '\" + boundPropertyName + \"' since it isn't a known native property\", sourceSpan);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (parts[0] == ATTRIBUTE_PREFIX) {\r\n\t                boundPropertyName = parts[1];\r\n\t                var nsSeparatorIdx = boundPropertyName.indexOf(':');\r\n\t                if (nsSeparatorIdx > -1) {\r\n\t                    var ns = boundPropertyName.substring(0, nsSeparatorIdx);\r\n\t                    var name_1 = boundPropertyName.substring(nsSeparatorIdx + 1);\r\n\t                    boundPropertyName = html_tags_1.mergeNsAndName(ns, name_1);\r\n\t                }\r\n\t                bindingType = template_ast_1.PropertyBindingType.Attribute;\r\n\t            }\r\n\t            else if (parts[0] == CLASS_PREFIX) {\r\n\t                boundPropertyName = parts[1];\r\n\t                bindingType = template_ast_1.PropertyBindingType.Class;\r\n\t            }\r\n\t            else if (parts[0] == STYLE_PREFIX) {\r\n\t                unit = parts.length > 2 ? parts[2] : null;\r\n\t                boundPropertyName = parts[1];\r\n\t                bindingType = template_ast_1.PropertyBindingType.Style;\r\n\t            }\r\n\t            else {\r\n\t                this._reportError(\"Invalid property name '\" + name + \"'\", sourceSpan);\r\n\t                bindingType = null;\r\n\t            }\r\n\t        }\r\n\t        return new template_ast_1.BoundElementPropertyAst(boundPropertyName, bindingType, ast, unit, sourceSpan);\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._findComponentDirectiveNames = function (directives) {\r\n\t        var componentTypeNames = [];\r\n\t        directives.forEach(function (directive) {\r\n\t            var typeName = directive.directive.type.name;\r\n\t            if (directive.directive.isComponent) {\r\n\t                componentTypeNames.push(typeName);\r\n\t            }\r\n\t        });\r\n\t        return componentTypeNames;\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._assertOnlyOneComponent = function (directives, sourceSpan) {\r\n\t        var componentTypeNames = this._findComponentDirectiveNames(directives);\r\n\t        if (componentTypeNames.length > 1) {\r\n\t            this._reportError(\"More than one component: \" + componentTypeNames.join(','), sourceSpan);\r\n\t        }\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._assertNoComponentsNorElementBindingsOnTemplate = function (directives, elementProps, sourceSpan) {\r\n\t        var _this = this;\r\n\t        var componentTypeNames = this._findComponentDirectiveNames(directives);\r\n\t        if (componentTypeNames.length > 0) {\r\n\t            this._reportError(\"Components on an embedded template: \" + componentTypeNames.join(','), sourceSpan);\r\n\t        }\r\n\t        elementProps.forEach(function (prop) {\r\n\t            _this._reportError(\"Property binding \" + prop.name + \" not used by any directive on an embedded template\", sourceSpan);\r\n\t        });\r\n\t    };\r\n\t    TemplateParseVisitor.prototype._assertAllEventsPublishedByDirectives = function (directives, events) {\r\n\t        var _this = this;\r\n\t        var allDirectiveEvents = new Set();\r\n\t        directives.forEach(function (directive) {\r\n\t            collection_1.StringMapWrapper.forEach(directive.directive.outputs, function (eventName, _) { allDirectiveEvents.add(eventName); });\r\n\t        });\r\n\t        events.forEach(function (event) {\r\n\t            if (lang_1.isPresent(event.target) || !collection_1.SetWrapper.has(allDirectiveEvents, event.name)) {\r\n\t                _this._reportError(\"Event binding \" + event.fullName + \" not emitted by any directive on an embedded template\", event.sourceSpan);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    return TemplateParseVisitor;\r\n\t})();\r\n\tvar NonBindableVisitor = (function () {\r\n\t    function NonBindableVisitor() {\r\n\t    }\r\n\t    NonBindableVisitor.prototype.visitElement = function (ast, component) {\r\n\t        var preparsedElement = template_preparser_1.preparseElement(ast);\r\n\t        if (preparsedElement.type === template_preparser_1.PreparsedElementType.SCRIPT ||\r\n\t            preparsedElement.type === template_preparser_1.PreparsedElementType.STYLE ||\r\n\t            preparsedElement.type === template_preparser_1.PreparsedElementType.STYLESHEET) {\r\n\t            // Skipping <script> for security reasons\r\n\t            // Skipping <style> and stylesheets as we already processed them\r\n\t            // in the StyleCompiler\r\n\t            return null;\r\n\t        }\r\n\t        var attrNameAndValues = ast.attrs.map(function (attrAst) { return [attrAst.name, attrAst.value]; });\r\n\t        var selector = createElementCssSelector(ast.name, attrNameAndValues);\r\n\t        var ngContentIndex = component.findNgContentIndex(selector);\r\n\t        var children = html_ast_1.htmlVisitAll(this, ast.children, EMPTY_COMPONENT);\r\n\t        return new template_ast_1.ElementAst(ast.name, html_ast_1.htmlVisitAll(this, ast.attrs), [], [], [], [], children, ngContentIndex, ast.sourceSpan);\r\n\t    };\r\n\t    NonBindableVisitor.prototype.visitComment = function (ast, context) { return null; };\r\n\t    NonBindableVisitor.prototype.visitAttr = function (ast, context) {\r\n\t        return new template_ast_1.AttrAst(ast.name, ast.value, ast.sourceSpan);\r\n\t    };\r\n\t    NonBindableVisitor.prototype.visitText = function (ast, component) {\r\n\t        var ngContentIndex = component.findNgContentIndex(TEXT_CSS_SELECTOR);\r\n\t        return new template_ast_1.TextAst(ast.value, ngContentIndex, ast.sourceSpan);\r\n\t    };\r\n\t    return NonBindableVisitor;\r\n\t})();\r\n\tvar BoundElementOrDirectiveProperty = (function () {\r\n\t    function BoundElementOrDirectiveProperty(name, expression, isLiteral, sourceSpan) {\r\n\t        this.name = name;\r\n\t        this.expression = expression;\r\n\t        this.isLiteral = isLiteral;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    return BoundElementOrDirectiveProperty;\r\n\t})();\r\n\tfunction splitClasses(classAttrValue) {\r\n\t    return lang_1.StringWrapper.split(classAttrValue.trim(), /\\s+/g);\r\n\t}\r\n\texports.splitClasses = splitClasses;\r\n\tvar Component = (function () {\r\n\t    function Component(ngContentIndexMatcher, wildcardNgContentIndex) {\r\n\t        this.ngContentIndexMatcher = ngContentIndexMatcher;\r\n\t        this.wildcardNgContentIndex = wildcardNgContentIndex;\r\n\t    }\r\n\t    Component.create = function (directives) {\r\n\t        if (directives.length === 0 || !directives[0].directive.isComponent) {\r\n\t            return EMPTY_COMPONENT;\r\n\t        }\r\n\t        var matcher = new selector_1.SelectorMatcher();\r\n\t        var ngContentSelectors = directives[0].directive.template.ngContentSelectors;\r\n\t        var wildcardNgContentIndex = null;\r\n\t        for (var i = 0; i < ngContentSelectors.length; i++) {\r\n\t            var selector = ngContentSelectors[i];\r\n\t            if (lang_1.StringWrapper.equals(selector, '*')) {\r\n\t                wildcardNgContentIndex = i;\r\n\t            }\r\n\t            else {\r\n\t                matcher.addSelectables(selector_1.CssSelector.parse(ngContentSelectors[i]), i);\r\n\t            }\r\n\t        }\r\n\t        return new Component(matcher, wildcardNgContentIndex);\r\n\t    };\r\n\t    Component.prototype.findNgContentIndex = function (selector) {\r\n\t        var ngContentIndices = [];\r\n\t        this.ngContentIndexMatcher.match(selector, function (selector, ngContentIndex) { ngContentIndices.push(ngContentIndex); });\r\n\t        collection_1.ListWrapper.sort(ngContentIndices);\r\n\t        if (lang_1.isPresent(this.wildcardNgContentIndex)) {\r\n\t            ngContentIndices.push(this.wildcardNgContentIndex);\r\n\t        }\r\n\t        return ngContentIndices.length > 0 ? ngContentIndices[0] : null;\r\n\t    };\r\n\t    return Component;\r\n\t})();\r\n\tfunction createElementCssSelector(elementName, matchableAttrs) {\r\n\t    var cssSelector = new selector_1.CssSelector();\r\n\t    var elNameNoNs = html_tags_1.splitNsName(elementName)[1];\r\n\t    cssSelector.setElement(elNameNoNs);\r\n\t    for (var i = 0; i < matchableAttrs.length; i++) {\r\n\t        var attrName = matchableAttrs[i][0];\r\n\t        var attrNameNoNs = html_tags_1.splitNsName(attrName)[1];\r\n\t        var attrValue = matchableAttrs[i][1];\r\n\t        cssSelector.addAttribute(attrNameNoNs, attrValue);\r\n\t        if (attrName.toLowerCase() == CLASS_ATTR) {\r\n\t            var classes = splitClasses(attrValue);\r\n\t            classes.forEach(function (className) { return cssSelector.addClassName(className); });\r\n\t        }\r\n\t    }\r\n\t    return cssSelector;\r\n\t}\r\n\tvar EMPTY_COMPONENT = new Component(new selector_1.SelectorMatcher(), null);\r\n\tvar NON_BINDABLE_VISITOR = new NonBindableVisitor();\r\n\tvar PipeCollector = (function (_super) {\r\n\t    __extends(PipeCollector, _super);\r\n\t    function PipeCollector() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.pipes = new Set();\r\n\t    }\r\n\t    PipeCollector.prototype.visitPipe = function (ast) {\r\n\t        this.pipes.add(ast.name);\r\n\t        ast.exp.visit(this);\r\n\t        this.visitAll(ast.args);\r\n\t        return null;\r\n\t    };\r\n\t    return PipeCollector;\r\n\t})(ast_1.RecursiveAstVisitor);\r\n\texports.PipeCollector = PipeCollector;\r\n\n\n/***/ },\n/* 191 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar change_detection_util_1 = __webpack_require__(79);\r\n\tvar change_detector_ref_1 = __webpack_require__(292);\r\n\tvar exceptions_1 = __webpack_require__(299);\r\n\tvar locals_1 = __webpack_require__(301);\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar profile_1 = __webpack_require__(205);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar _scope_check = profile_1.wtfCreateScope(\"ChangeDetector#check(ascii id, bool throwOnChange)\");\r\n\tvar _Context = (function () {\r\n\t    function _Context(element, componentElement, context, locals, injector, expression) {\r\n\t        this.element = element;\r\n\t        this.componentElement = componentElement;\r\n\t        this.context = context;\r\n\t        this.locals = locals;\r\n\t        this.injector = injector;\r\n\t        this.expression = expression;\r\n\t    }\r\n\t    return _Context;\r\n\t})();\r\n\tvar AbstractChangeDetector = (function () {\r\n\t    function AbstractChangeDetector(id, numberOfPropertyProtoRecords, bindingTargets, directiveIndices, strategy) {\r\n\t        this.id = id;\r\n\t        this.numberOfPropertyProtoRecords = numberOfPropertyProtoRecords;\r\n\t        this.bindingTargets = bindingTargets;\r\n\t        this.directiveIndices = directiveIndices;\r\n\t        this.strategy = strategy;\r\n\t        this.contentChildren = [];\r\n\t        this.viewChildren = [];\r\n\t        // The names of the below fields must be kept in sync with codegen_name_util.ts or\r\n\t        // change detection will fail.\r\n\t        this.state = constants_1.ChangeDetectorState.NeverChecked;\r\n\t        this.locals = null;\r\n\t        this.mode = null;\r\n\t        this.pipes = null;\r\n\t        this.ref = new change_detector_ref_1.ChangeDetectorRef_(this);\r\n\t    }\r\n\t    AbstractChangeDetector.prototype.addContentChild = function (cd) {\r\n\t        this.contentChildren.push(cd);\r\n\t        cd.parent = this;\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.removeContentChild = function (cd) { collection_1.ListWrapper.remove(this.contentChildren, cd); };\r\n\t    AbstractChangeDetector.prototype.addViewChild = function (cd) {\r\n\t        this.viewChildren.push(cd);\r\n\t        cd.parent = this;\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.removeViewChild = function (cd) { collection_1.ListWrapper.remove(this.viewChildren, cd); };\r\n\t    AbstractChangeDetector.prototype.remove = function () { this.parent.removeContentChild(this); };\r\n\t    AbstractChangeDetector.prototype.handleEvent = function (eventName, elIndex, event) {\r\n\t        if (!this.hydrated()) {\r\n\t            this.throwDehydratedError(this.id + \" -> \" + eventName);\r\n\t        }\r\n\t        try {\r\n\t            var locals = new Map();\r\n\t            locals.set('$event', event);\r\n\t            var res = !this.handleEventInternal(eventName, elIndex, new locals_1.Locals(this.locals, locals));\r\n\t            this.markPathToRootAsCheckOnce();\r\n\t            return res;\r\n\t        }\r\n\t        catch (e) {\r\n\t            var c = this.dispatcher.getDebugContext(null, elIndex, null);\r\n\t            var context = lang_1.isPresent(c) ?\r\n\t                new exceptions_1.EventEvaluationErrorContext(c.element, c.componentElement, c.context, c.locals, c.injector) :\r\n\t                null;\r\n\t            throw new exceptions_1.EventEvaluationError(eventName, e, e.stack, context);\r\n\t        }\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.handleEventInternal = function (eventName, elIndex, locals) { return false; };\r\n\t    AbstractChangeDetector.prototype.detectChanges = function () { this.runDetectChanges(false); };\r\n\t    AbstractChangeDetector.prototype.checkNoChanges = function () {\r\n\t        if (lang_1.assertionsEnabled()) {\r\n\t            this.runDetectChanges(true);\r\n\t        }\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.runDetectChanges = function (throwOnChange) {\r\n\t        if (this.mode === constants_1.ChangeDetectionStrategy.Detached ||\r\n\t            this.mode === constants_1.ChangeDetectionStrategy.Checked || this.state === constants_1.ChangeDetectorState.Errored)\r\n\t            return;\r\n\t        var s = _scope_check(this.id, throwOnChange);\r\n\t        this.detectChangesInRecords(throwOnChange);\r\n\t        this._detectChangesContentChildren(throwOnChange);\r\n\t        if (!throwOnChange)\r\n\t            this.afterContentLifecycleCallbacks();\r\n\t        this._detectChangesInViewChildren(throwOnChange);\r\n\t        if (!throwOnChange)\r\n\t            this.afterViewLifecycleCallbacks();\r\n\t        if (this.mode === constants_1.ChangeDetectionStrategy.CheckOnce)\r\n\t            this.mode = constants_1.ChangeDetectionStrategy.Checked;\r\n\t        this.state = constants_1.ChangeDetectorState.CheckedBefore;\r\n\t        profile_1.wtfLeave(s);\r\n\t    };\r\n\t    // This method is not intended to be overridden. Subclasses should instead provide an\r\n\t    // implementation of `detectChangesInRecordsInternal` which does the work of detecting changes\r\n\t    // and which this method will call.\r\n\t    // This method expects that `detectChangesInRecordsInternal` will set the property\r\n\t    // `this.propertyBindingIndex` to the propertyBindingIndex of the first proto record. This is to\r\n\t    // facilitate error reporting.\r\n\t    AbstractChangeDetector.prototype.detectChangesInRecords = function (throwOnChange) {\r\n\t        if (!this.hydrated()) {\r\n\t            this.throwDehydratedError(this.id);\r\n\t        }\r\n\t        try {\r\n\t            this.detectChangesInRecordsInternal(throwOnChange);\r\n\t        }\r\n\t        catch (e) {\r\n\t            // throwOnChange errors aren't counted as fatal errors.\r\n\t            if (!(e instanceof exceptions_1.ExpressionChangedAfterItHasBeenCheckedException)) {\r\n\t                this.state = constants_1.ChangeDetectorState.Errored;\r\n\t            }\r\n\t            this._throwError(e, e.stack);\r\n\t        }\r\n\t    };\r\n\t    // Subclasses should override this method to perform any work necessary to detect and report\r\n\t    // changes. For example, changes should be reported via `ChangeDetectionUtil.addChange`, lifecycle\r\n\t    // methods should be called, etc.\r\n\t    // This implementation should also set `this.propertyBindingIndex` to the propertyBindingIndex of\r\n\t    // the\r\n\t    // first proto record to facilitate error reporting. See {@link #detectChangesInRecords}.\r\n\t    AbstractChangeDetector.prototype.detectChangesInRecordsInternal = function (throwOnChange) { };\r\n\t    // This method is not intended to be overridden. Subclasses should instead provide an\r\n\t    // implementation of `hydrateDirectives`.\r\n\t    AbstractChangeDetector.prototype.hydrate = function (context, locals, dispatcher, pipes) {\r\n\t        this.dispatcher = dispatcher;\r\n\t        this.mode = change_detection_util_1.ChangeDetectionUtil.changeDetectionMode(this.strategy);\r\n\t        this.context = context;\r\n\t        this.locals = locals;\r\n\t        this.pipes = pipes;\r\n\t        this.hydrateDirectives(dispatcher);\r\n\t        this.state = constants_1.ChangeDetectorState.NeverChecked;\r\n\t    };\r\n\t    // Subclasses should override this method to hydrate any directives.\r\n\t    AbstractChangeDetector.prototype.hydrateDirectives = function (dispatcher) { };\r\n\t    // This method is not intended to be overridden. Subclasses should instead provide an\r\n\t    // implementation of `dehydrateDirectives`.\r\n\t    AbstractChangeDetector.prototype.dehydrate = function () {\r\n\t        this.dehydrateDirectives(true);\r\n\t        this._unsubscribeFromOutputs();\r\n\t        this.dispatcher = null;\r\n\t        this.context = null;\r\n\t        this.locals = null;\r\n\t        this.pipes = null;\r\n\t    };\r\n\t    // Subclasses should override this method to dehydrate any directives. This method should reverse\r\n\t    // any work done in `hydrateDirectives`.\r\n\t    AbstractChangeDetector.prototype.dehydrateDirectives = function (destroyPipes) { };\r\n\t    AbstractChangeDetector.prototype.hydrated = function () { return lang_1.isPresent(this.context); };\r\n\t    AbstractChangeDetector.prototype.destroyRecursive = function () {\r\n\t        this.dispatcher.notifyOnDestroy();\r\n\t        this.dehydrate();\r\n\t        var children = this.contentChildren;\r\n\t        for (var i = 0; i < children.length; i++) {\r\n\t            children[i].destroyRecursive();\r\n\t        }\r\n\t        children = this.viewChildren;\r\n\t        for (var i = 0; i < children.length; i++) {\r\n\t            children[i].destroyRecursive();\r\n\t        }\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.afterContentLifecycleCallbacks = function () {\r\n\t        this.dispatcher.notifyAfterContentChecked();\r\n\t        this.afterContentLifecycleCallbacksInternal();\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.afterContentLifecycleCallbacksInternal = function () { };\r\n\t    AbstractChangeDetector.prototype.afterViewLifecycleCallbacks = function () {\r\n\t        this.dispatcher.notifyAfterViewChecked();\r\n\t        this.afterViewLifecycleCallbacksInternal();\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.afterViewLifecycleCallbacksInternal = function () { };\r\n\t    /** @internal */\r\n\t    AbstractChangeDetector.prototype._detectChangesContentChildren = function (throwOnChange) {\r\n\t        var c = this.contentChildren;\r\n\t        for (var i = 0; i < c.length; ++i) {\r\n\t            c[i].runDetectChanges(throwOnChange);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    AbstractChangeDetector.prototype._detectChangesInViewChildren = function (throwOnChange) {\r\n\t        var c = this.viewChildren;\r\n\t        for (var i = 0; i < c.length; ++i) {\r\n\t            c[i].runDetectChanges(throwOnChange);\r\n\t        }\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.markAsCheckOnce = function () { this.mode = constants_1.ChangeDetectionStrategy.CheckOnce; };\r\n\t    AbstractChangeDetector.prototype.markPathToRootAsCheckOnce = function () {\r\n\t        var c = this;\r\n\t        while (lang_1.isPresent(c) && c.mode !== constants_1.ChangeDetectionStrategy.Detached) {\r\n\t            if (c.mode === constants_1.ChangeDetectionStrategy.Checked)\r\n\t                c.mode = constants_1.ChangeDetectionStrategy.CheckOnce;\r\n\t            c = c.parent;\r\n\t        }\r\n\t    };\r\n\t    AbstractChangeDetector.prototype._unsubscribeFromOutputs = function () {\r\n\t        if (lang_1.isPresent(this.outputSubscriptions)) {\r\n\t            for (var i = 0; i < this.outputSubscriptions.length; ++i) {\r\n\t                async_1.ObservableWrapper.dispose(this.outputSubscriptions[i]);\r\n\t                this.outputSubscriptions[i] = null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.getDirectiveFor = function (directives, index) {\r\n\t        return directives.getDirectiveFor(this.directiveIndices[index]);\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.getDetectorFor = function (directives, index) {\r\n\t        return directives.getDetectorFor(this.directiveIndices[index]);\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.notifyDispatcher = function (value) {\r\n\t        this.dispatcher.notifyOnBinding(this._currentBinding(), value);\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.logBindingUpdate = function (value) {\r\n\t        this.dispatcher.logBindingUpdate(this._currentBinding(), value);\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.addChange = function (changes, oldValue, newValue) {\r\n\t        if (lang_1.isBlank(changes)) {\r\n\t            changes = {};\r\n\t        }\r\n\t        changes[this._currentBinding().name] = change_detection_util_1.ChangeDetectionUtil.simpleChange(oldValue, newValue);\r\n\t        return changes;\r\n\t    };\r\n\t    AbstractChangeDetector.prototype._throwError = function (exception, stack) {\r\n\t        var error;\r\n\t        try {\r\n\t            var c = this.dispatcher.getDebugContext(null, this._currentBinding().elementIndex, null);\r\n\t            var context = lang_1.isPresent(c) ? new _Context(c.element, c.componentElement, c.context, c.locals, c.injector, this._currentBinding().debug) :\r\n\t                null;\r\n\t            error = new exceptions_1.ChangeDetectionError(this._currentBinding().debug, exception, stack, context);\r\n\t        }\r\n\t        catch (e) {\r\n\t            // if an error happens during getting the debug context, we throw a ChangeDetectionError\r\n\t            // without the extra information.\r\n\t            error = new exceptions_1.ChangeDetectionError(null, exception, stack, null);\r\n\t        }\r\n\t        throw error;\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.throwOnChangeError = function (oldValue, newValue) {\r\n\t        throw new exceptions_1.ExpressionChangedAfterItHasBeenCheckedException(this._currentBinding().debug, oldValue, newValue, null);\r\n\t    };\r\n\t    AbstractChangeDetector.prototype.throwDehydratedError = function (detail) { throw new exceptions_1.DehydratedException(detail); };\r\n\t    AbstractChangeDetector.prototype._currentBinding = function () {\r\n\t        return this.bindingTargets[this.propertyBindingIndex];\r\n\t    };\r\n\t    return AbstractChangeDetector;\r\n\t})();\r\n\texports.AbstractChangeDetector = AbstractChangeDetector;\r\n\n\n/***/ },\n/* 192 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar DirectiveIndex = (function () {\r\n\t    function DirectiveIndex(elementIndex, directiveIndex) {\r\n\t        this.elementIndex = elementIndex;\r\n\t        this.directiveIndex = directiveIndex;\r\n\t    }\r\n\t    Object.defineProperty(DirectiveIndex.prototype, \"name\", {\r\n\t        get: function () { return this.elementIndex + \"_\" + this.directiveIndex; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return DirectiveIndex;\r\n\t})();\r\n\texports.DirectiveIndex = DirectiveIndex;\r\n\tvar DirectiveRecord = (function () {\r\n\t    function DirectiveRecord(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, directiveIndex = _b.directiveIndex, callAfterContentInit = _b.callAfterContentInit, callAfterContentChecked = _b.callAfterContentChecked, callAfterViewInit = _b.callAfterViewInit, callAfterViewChecked = _b.callAfterViewChecked, callOnChanges = _b.callOnChanges, callDoCheck = _b.callDoCheck, callOnInit = _b.callOnInit, callOnDestroy = _b.callOnDestroy, changeDetection = _b.changeDetection, outputs = _b.outputs;\r\n\t        this.directiveIndex = directiveIndex;\r\n\t        this.callAfterContentInit = lang_1.normalizeBool(callAfterContentInit);\r\n\t        this.callAfterContentChecked = lang_1.normalizeBool(callAfterContentChecked);\r\n\t        this.callOnChanges = lang_1.normalizeBool(callOnChanges);\r\n\t        this.callAfterViewInit = lang_1.normalizeBool(callAfterViewInit);\r\n\t        this.callAfterViewChecked = lang_1.normalizeBool(callAfterViewChecked);\r\n\t        this.callDoCheck = lang_1.normalizeBool(callDoCheck);\r\n\t        this.callOnInit = lang_1.normalizeBool(callOnInit);\r\n\t        this.callOnDestroy = lang_1.normalizeBool(callOnDestroy);\r\n\t        this.changeDetection = changeDetection;\r\n\t        this.outputs = outputs;\r\n\t    }\r\n\t    DirectiveRecord.prototype.isDefaultChangeDetection = function () {\r\n\t        return constants_1.isDefaultChangeDetectionStrategy(this.changeDetection);\r\n\t    };\r\n\t    return DirectiveRecord;\r\n\t})();\r\n\texports.DirectiveRecord = DirectiveRecord;\r\n\n\n/***/ },\n/* 193 */\n/***/ function(module, exports) {\n\n\t'use strict';var DebugContext = (function () {\r\n\t    function DebugContext(element, componentElement, directive, context, locals, injector) {\r\n\t        this.element = element;\r\n\t        this.componentElement = componentElement;\r\n\t        this.directive = directive;\r\n\t        this.context = context;\r\n\t        this.locals = locals;\r\n\t        this.injector = injector;\r\n\t    }\r\n\t    return DebugContext;\r\n\t})();\r\n\texports.DebugContext = DebugContext;\r\n\tvar ChangeDetectorGenConfig = (function () {\r\n\t    function ChangeDetectorGenConfig(genDebugInfo, logBindingUpdate, useJit) {\r\n\t        this.genDebugInfo = genDebugInfo;\r\n\t        this.logBindingUpdate = logBindingUpdate;\r\n\t        this.useJit = useJit;\r\n\t    }\r\n\t    return ChangeDetectorGenConfig;\r\n\t})();\r\n\texports.ChangeDetectorGenConfig = ChangeDetectorGenConfig;\r\n\tvar ChangeDetectorDefinition = (function () {\r\n\t    function ChangeDetectorDefinition(id, strategy, variableNames, bindingRecords, eventRecords, directiveRecords, genConfig) {\r\n\t        this.id = id;\r\n\t        this.strategy = strategy;\r\n\t        this.variableNames = variableNames;\r\n\t        this.bindingRecords = bindingRecords;\r\n\t        this.eventRecords = eventRecords;\r\n\t        this.directiveRecords = directiveRecords;\r\n\t        this.genConfig = genConfig;\r\n\t    }\r\n\t    return ChangeDetectorDefinition;\r\n\t})();\r\n\texports.ChangeDetectorDefinition = ChangeDetectorDefinition;\r\n\n\n/***/ },\n/* 194 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar EventListener = (function () {\r\n\t    function EventListener(name, callback) {\r\n\t        this.name = name;\r\n\t        this.callback = callback;\r\n\t    }\r\n\t    ;\r\n\t    return EventListener;\r\n\t})();\r\n\texports.EventListener = EventListener;\r\n\tvar DebugNode = (function () {\r\n\t    function DebugNode(nativeNode, parent) {\r\n\t        this.nativeNode = nativeNode;\r\n\t        if (lang_1.isPresent(parent) && parent instanceof DebugElement) {\r\n\t            parent.addChild(this);\r\n\t        }\r\n\t        else {\r\n\t            this.parent = null;\r\n\t        }\r\n\t        this.listeners = [];\r\n\t        this.providerTokens = [];\r\n\t    }\r\n\t    DebugNode.prototype.setDebugInfo = function (info) {\r\n\t        this.injector = info.injector;\r\n\t        this.providerTokens = info.providerTokens;\r\n\t        this.locals = info.locals;\r\n\t        this.componentInstance = info.component;\r\n\t    };\r\n\t    DebugNode.prototype.inject = function (token) { return this.injector.get(token); };\r\n\t    DebugNode.prototype.getLocal = function (name) { return this.locals.get(name); };\r\n\t    return DebugNode;\r\n\t})();\r\n\texports.DebugNode = DebugNode;\r\n\tvar DebugElement = (function (_super) {\r\n\t    __extends(DebugElement, _super);\r\n\t    function DebugElement(nativeNode, parent) {\r\n\t        _super.call(this, nativeNode, parent);\r\n\t        this.properties = new Map();\r\n\t        this.attributes = new Map();\r\n\t        this.childNodes = [];\r\n\t        this.nativeElement = nativeNode;\r\n\t    }\r\n\t    DebugElement.prototype.addChild = function (child) {\r\n\t        if (lang_1.isPresent(child)) {\r\n\t            this.childNodes.push(child);\r\n\t            child.parent = this;\r\n\t        }\r\n\t    };\r\n\t    DebugElement.prototype.removeChild = function (child) {\r\n\t        var childIndex = this.childNodes.indexOf(child);\r\n\t        if (childIndex !== -1) {\r\n\t            child.parent = null;\r\n\t            this.childNodes.splice(childIndex, 1);\r\n\t        }\r\n\t    };\r\n\t    DebugElement.prototype.insertChildrenAfter = function (child, newChildren) {\r\n\t        var siblingIndex = this.childNodes.indexOf(child);\r\n\t        if (siblingIndex !== -1) {\r\n\t            var previousChildren = this.childNodes.slice(0, siblingIndex + 1);\r\n\t            var nextChildren = this.childNodes.slice(siblingIndex + 1);\r\n\t            this.childNodes =\r\n\t                collection_1.ListWrapper.concat(collection_1.ListWrapper.concat(previousChildren, newChildren), nextChildren);\r\n\t            for (var i = 0; i < newChildren.length; ++i) {\r\n\t                var newChild = newChildren[i];\r\n\t                if (lang_1.isPresent(newChild.parent)) {\r\n\t                    newChild.parent.removeChild(newChild);\r\n\t                }\r\n\t                newChild.parent = this;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DebugElement.prototype.query = function (predicate) {\r\n\t        var results = this.queryAll(predicate);\r\n\t        return results.length > 0 ? results[0] : null;\r\n\t    };\r\n\t    DebugElement.prototype.queryAll = function (predicate) {\r\n\t        var matches = [];\r\n\t        _queryElementChildren(this, predicate, matches);\r\n\t        return matches;\r\n\t    };\r\n\t    DebugElement.prototype.queryAllNodes = function (predicate) {\r\n\t        var matches = [];\r\n\t        _queryNodeChildren(this, predicate, matches);\r\n\t        return matches;\r\n\t    };\r\n\t    Object.defineProperty(DebugElement.prototype, \"children\", {\r\n\t        get: function () {\r\n\t            var children = [];\r\n\t            this.childNodes.forEach(function (node) {\r\n\t                if (node instanceof DebugElement) {\r\n\t                    children.push(node);\r\n\t                }\r\n\t            });\r\n\t            return children;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DebugElement.prototype.triggerEventHandler = function (eventName, eventObj) {\r\n\t        this.listeners.forEach(function (listener) {\r\n\t            if (listener.name == eventName) {\r\n\t                listener.callback(eventObj);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    return DebugElement;\r\n\t})(DebugNode);\r\n\texports.DebugElement = DebugElement;\r\n\tfunction asNativeElements(debugEls) {\r\n\t    return debugEls.map(function (el) { return el.nativeElement; });\r\n\t}\r\n\texports.asNativeElements = asNativeElements;\r\n\tfunction _queryElementChildren(element, predicate, matches) {\r\n\t    element.childNodes.forEach(function (node) {\r\n\t        if (node instanceof DebugElement) {\r\n\t            if (predicate(node)) {\r\n\t                matches.push(node);\r\n\t            }\r\n\t            _queryElementChildren(node, predicate, matches);\r\n\t        }\r\n\t    });\r\n\t}\r\n\tfunction _queryNodeChildren(parentNode, predicate, matches) {\r\n\t    if (parentNode instanceof DebugElement) {\r\n\t        parentNode.childNodes.forEach(function (node) {\r\n\t            if (predicate(node)) {\r\n\t                matches.push(node);\r\n\t            }\r\n\t            if (node instanceof DebugElement) {\r\n\t                _queryNodeChildren(node, predicate, matches);\r\n\t            }\r\n\t        });\r\n\t    }\r\n\t}\r\n\t// Need to keep the nodes in a global Map so that multiple angular apps are supported.\r\n\tvar _nativeNodeToDebugNode = new Map();\r\n\tfunction getDebugNode(nativeNode) {\r\n\t    return _nativeNodeToDebugNode.get(nativeNode);\r\n\t}\r\n\texports.getDebugNode = getDebugNode;\r\n\tfunction getAllDebugNodes() {\r\n\t    return collection_1.MapWrapper.values(_nativeNodeToDebugNode);\r\n\t}\r\n\texports.getAllDebugNodes = getAllDebugNodes;\r\n\tfunction indexDebugNode(node) {\r\n\t    _nativeNodeToDebugNode.set(node.nativeNode, node);\r\n\t}\r\n\texports.indexDebugNode = indexDebugNode;\r\n\tfunction removeDebugNodeFromIndex(node) {\r\n\t    _nativeNodeToDebugNode.delete(node.nativeNode);\r\n\t}\r\n\texports.removeDebugNodeFromIndex = removeDebugNodeFromIndex;\r\n\n\n/***/ },\n/* 195 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var metadata_1 = __webpack_require__(80);\r\n\tvar decorators_1 = __webpack_require__(100);\r\n\t/**\r\n\t * Factory for creating {@link InjectMetadata}.\r\n\t */\r\n\texports.Inject = decorators_1.makeParamDecorator(metadata_1.InjectMetadata);\r\n\t/**\r\n\t * Factory for creating {@link OptionalMetadata}.\r\n\t */\r\n\texports.Optional = decorators_1.makeParamDecorator(metadata_1.OptionalMetadata);\r\n\t/**\r\n\t * Factory for creating {@link InjectableMetadata}.\r\n\t */\r\n\texports.Injectable = decorators_1.makeDecorator(metadata_1.InjectableMetadata);\r\n\t/**\r\n\t * Factory for creating {@link SelfMetadata}.\r\n\t */\r\n\texports.Self = decorators_1.makeParamDecorator(metadata_1.SelfMetadata);\r\n\t/**\r\n\t * Factory for creating {@link HostMetadata}.\r\n\t */\r\n\texports.Host = decorators_1.makeParamDecorator(metadata_1.HostMetadata);\r\n\t/**\r\n\t * Factory for creating {@link SkipSelfMetadata}.\r\n\t */\r\n\texports.SkipSelf = decorators_1.makeParamDecorator(metadata_1.SkipSelfMetadata);\r\n\n\n/***/ },\n/* 196 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tfunction findFirstClosedCycle(keys) {\r\n\t    var res = [];\r\n\t    for (var i = 0; i < keys.length; ++i) {\r\n\t        if (collection_1.ListWrapper.contains(res, keys[i])) {\r\n\t            res.push(keys[i]);\r\n\t            return res;\r\n\t        }\r\n\t        else {\r\n\t            res.push(keys[i]);\r\n\t        }\r\n\t    }\r\n\t    return res;\r\n\t}\r\n\tfunction constructResolvingPath(keys) {\r\n\t    if (keys.length > 1) {\r\n\t        var reversed = findFirstClosedCycle(collection_1.ListWrapper.reversed(keys));\r\n\t        var tokenStrs = reversed.map(function (k) { return lang_1.stringify(k.token); });\r\n\t        return \" (\" + tokenStrs.join(' -> ') + \")\";\r\n\t    }\r\n\t    else {\r\n\t        return \"\";\r\n\t    }\r\n\t}\r\n\t/**\r\n\t * Base class for all errors arising from misconfigured providers.\r\n\t */\r\n\tvar AbstractProviderError = (function (_super) {\r\n\t    __extends(AbstractProviderError, _super);\r\n\t    function AbstractProviderError(injector, key, constructResolvingMessage) {\r\n\t        _super.call(this, \"DI Exception\");\r\n\t        this.keys = [key];\r\n\t        this.injectors = [injector];\r\n\t        this.constructResolvingMessage = constructResolvingMessage;\r\n\t        this.message = this.constructResolvingMessage(this.keys);\r\n\t    }\r\n\t    AbstractProviderError.prototype.addKey = function (injector, key) {\r\n\t        this.injectors.push(injector);\r\n\t        this.keys.push(key);\r\n\t        this.message = this.constructResolvingMessage(this.keys);\r\n\t    };\r\n\t    Object.defineProperty(AbstractProviderError.prototype, \"context\", {\r\n\t        get: function () { return this.injectors[this.injectors.length - 1].debugContext(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return AbstractProviderError;\r\n\t})(exceptions_1.BaseException);\r\n\texports.AbstractProviderError = AbstractProviderError;\r\n\t/**\r\n\t * Thrown when trying to retrieve a dependency by `Key` from {@link Injector}, but the\r\n\t * {@link Injector} does not have a {@link Provider} for {@link Key}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/vq8D3FRB9aGbnWJqtEPE?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class A {\r\n\t *   constructor(b:B) {}\r\n\t * }\r\n\t *\r\n\t * expect(() => Injector.resolveAndCreate([A])).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar NoProviderError = (function (_super) {\r\n\t    __extends(NoProviderError, _super);\r\n\t    function NoProviderError(injector, key) {\r\n\t        _super.call(this, injector, key, function (keys) {\r\n\t            var first = lang_1.stringify(collection_1.ListWrapper.first(keys).token);\r\n\t            return \"No provider for \" + first + \"!\" + constructResolvingPath(keys);\r\n\t        });\r\n\t    }\r\n\t    return NoProviderError;\r\n\t})(AbstractProviderError);\r\n\texports.NoProviderError = NoProviderError;\r\n\t/**\r\n\t * Thrown when dependencies form a cycle.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/wYQdNos0Tzql3ei1EV9j?p=info))\r\n\t *\r\n\t * ```typescript\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *   provide(\"one\", {useFactory: (two) => \"two\", deps: [[new Inject(\"two\")]]}),\r\n\t *   provide(\"two\", {useFactory: (one) => \"one\", deps: [[new Inject(\"one\")]]})\r\n\t * ]);\r\n\t *\r\n\t * expect(() => injector.get(\"one\")).toThrowError();\r\n\t * ```\r\n\t *\r\n\t * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.\r\n\t */\r\n\tvar CyclicDependencyError = (function (_super) {\r\n\t    __extends(CyclicDependencyError, _super);\r\n\t    function CyclicDependencyError(injector, key) {\r\n\t        _super.call(this, injector, key, function (keys) {\r\n\t            return \"Cannot instantiate cyclic dependency!\" + constructResolvingPath(keys);\r\n\t        });\r\n\t    }\r\n\t    return CyclicDependencyError;\r\n\t})(AbstractProviderError);\r\n\texports.CyclicDependencyError = CyclicDependencyError;\r\n\t/**\r\n\t * Thrown when a constructing type returns with an Error.\r\n\t *\r\n\t * The `InstantiationError` class contains the original error plus the dependency graph which caused\r\n\t * this object to be instantiated.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/7aWYdcqTQsP0eNqEdUAf?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class A {\r\n\t *   constructor() {\r\n\t *     throw new Error('message');\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([A]);\r\n\t\r\n\t * try {\r\n\t *   injector.get(A);\r\n\t * } catch (e) {\r\n\t *   expect(e instanceof InstantiationError).toBe(true);\r\n\t *   expect(e.originalException.message).toEqual(\"message\");\r\n\t *   expect(e.originalStack).toBeDefined();\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar InstantiationError = (function (_super) {\r\n\t    __extends(InstantiationError, _super);\r\n\t    function InstantiationError(injector, originalException, originalStack, key) {\r\n\t        _super.call(this, \"DI Exception\", originalException, originalStack, null);\r\n\t        this.keys = [key];\r\n\t        this.injectors = [injector];\r\n\t    }\r\n\t    InstantiationError.prototype.addKey = function (injector, key) {\r\n\t        this.injectors.push(injector);\r\n\t        this.keys.push(key);\r\n\t    };\r\n\t    Object.defineProperty(InstantiationError.prototype, \"wrapperMessage\", {\r\n\t        get: function () {\r\n\t            var first = lang_1.stringify(collection_1.ListWrapper.first(this.keys).token);\r\n\t            return \"Error during instantiation of \" + first + \"!\" + constructResolvingPath(this.keys) + \".\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(InstantiationError.prototype, \"causeKey\", {\r\n\t        get: function () { return this.keys[0]; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(InstantiationError.prototype, \"context\", {\r\n\t        get: function () { return this.injectors[this.injectors.length - 1].debugContext(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return InstantiationError;\r\n\t})(exceptions_1.WrappedException);\r\n\texports.InstantiationError = InstantiationError;\r\n\t/**\r\n\t * Thrown when an object other then {@link Provider} (or `Type`) is passed to {@link Injector}\r\n\t * creation.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/YatCFbPAMCL0JSSQ4mvH?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * expect(() => Injector.resolveAndCreate([\"not a type\"])).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar InvalidProviderError = (function (_super) {\r\n\t    __extends(InvalidProviderError, _super);\r\n\t    function InvalidProviderError(provider) {\r\n\t        _super.call(this, \"Invalid provider - only instances of Provider and Type are allowed, got: \" +\r\n\t            provider.toString());\r\n\t    }\r\n\t    return InvalidProviderError;\r\n\t})(exceptions_1.BaseException);\r\n\texports.InvalidProviderError = InvalidProviderError;\r\n\t/**\r\n\t * Thrown when the class has no annotation information.\r\n\t *\r\n\t * Lack of annotation information prevents the {@link Injector} from determining which dependencies\r\n\t * need to be injected into the constructor.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/rHnZtlNS7vJOPQ6pcVkm?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class A {\r\n\t *   constructor(b) {}\r\n\t * }\r\n\t *\r\n\t * expect(() => Injector.resolveAndCreate([A])).toThrowError();\r\n\t * ```\r\n\t *\r\n\t * This error is also thrown when the class not marked with {@link Injectable} has parameter types.\r\n\t *\r\n\t * ```typescript\r\n\t * class B {}\r\n\t *\r\n\t * class A {\r\n\t *   constructor(b:B) {} // no information about the parameter types of A is available at runtime.\r\n\t * }\r\n\t *\r\n\t * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar NoAnnotationError = (function (_super) {\r\n\t    __extends(NoAnnotationError, _super);\r\n\t    function NoAnnotationError(typeOrFunc, params) {\r\n\t        _super.call(this, NoAnnotationError._genMessage(typeOrFunc, params));\r\n\t    }\r\n\t    NoAnnotationError._genMessage = function (typeOrFunc, params) {\r\n\t        var signature = [];\r\n\t        for (var i = 0, ii = params.length; i < ii; i++) {\r\n\t            var parameter = params[i];\r\n\t            if (lang_1.isBlank(parameter) || parameter.length == 0) {\r\n\t                signature.push('?');\r\n\t            }\r\n\t            else {\r\n\t                signature.push(parameter.map(lang_1.stringify).join(' '));\r\n\t            }\r\n\t        }\r\n\t        return \"Cannot resolve all parameters for '\" + lang_1.stringify(typeOrFunc) + \"'(\" +\r\n\t            signature.join(', ') + \"). \" +\r\n\t            \"Make sure that all the parameters are decorated with Inject or have valid type annotations and that '\" +\r\n\t            lang_1.stringify(typeOrFunc) + \"' is decorated with Injectable.\";\r\n\t    };\r\n\t    return NoAnnotationError;\r\n\t})(exceptions_1.BaseException);\r\n\texports.NoAnnotationError = NoAnnotationError;\r\n\t/**\r\n\t * Thrown when getting an object by index.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/bRs0SX2OTQiJzqvjgl8P?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * class A {}\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([A]);\r\n\t *\r\n\t * expect(() => injector.getAt(100)).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar OutOfBoundsError = (function (_super) {\r\n\t    __extends(OutOfBoundsError, _super);\r\n\t    function OutOfBoundsError(index) {\r\n\t        _super.call(this, \"Index \" + index + \" is out-of-bounds.\");\r\n\t    }\r\n\t    return OutOfBoundsError;\r\n\t})(exceptions_1.BaseException);\r\n\texports.OutOfBoundsError = OutOfBoundsError;\r\n\t// TODO: add a working example after alpha38 is released\r\n\t/**\r\n\t * Thrown when a multi provider and a regular provider are bound to the same token.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * expect(() => Injector.resolveAndCreate([\r\n\t *   new Provider(\"Strings\", {useValue: \"string1\", multi: true}),\r\n\t *   new Provider(\"Strings\", {useValue: \"string2\", multi: false})\r\n\t * ])).toThrowError();\r\n\t * ```\r\n\t */\r\n\tvar MixingMultiProvidersWithRegularProvidersError = (function (_super) {\r\n\t    __extends(MixingMultiProvidersWithRegularProvidersError, _super);\r\n\t    function MixingMultiProvidersWithRegularProvidersError(provider1, provider2) {\r\n\t        _super.call(this, \"Cannot mix multi providers and regular providers, got: \" + provider1.toString() + \" \" +\r\n\t            provider2.toString());\r\n\t    }\r\n\t    return MixingMultiProvidersWithRegularProvidersError;\r\n\t})(exceptions_1.BaseException);\r\n\texports.MixingMultiProvidersWithRegularProvidersError = MixingMultiProvidersWithRegularProvidersError;\r\n\n\n/***/ },\n/* 197 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Allows to refer to references which are not yet defined.\r\n\t *\r\n\t * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\r\n\t * DI is declared,\r\n\t * but not yet defined. It is also used when the `token` which we use when creating a query is not\r\n\t * yet defined.\r\n\t *\r\n\t * ### Example\r\n\t * {@example core/di/ts/forward_ref/forward_ref.ts region='forward_ref'}\r\n\t */\r\n\tfunction forwardRef(forwardRefFn) {\r\n\t    forwardRefFn.__forward_ref__ = forwardRef;\r\n\t    forwardRefFn.toString = function () { return lang_1.stringify(this()); };\r\n\t    return forwardRefFn;\r\n\t}\r\n\texports.forwardRef = forwardRef;\r\n\t/**\r\n\t * Lazily retrieves the reference value from a forwardRef.\r\n\t *\r\n\t * Acts as the identity function when given a non-forward-ref value.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/GU72mJrk1fiodChcmiDR?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * var ref = forwardRef(() => \"refValue\");\r\n\t * expect(resolveForwardRef(ref)).toEqual(\"refValue\");\r\n\t * expect(resolveForwardRef(\"regularValue\")).toEqual(\"regularValue\");\r\n\t * ```\r\n\t *\r\n\t * See: {@link forwardRef}\r\n\t */\r\n\tfunction resolveForwardRef(type) {\r\n\t    if (lang_1.isFunction(type) && type.hasOwnProperty('__forward_ref__') &&\r\n\t        type.__forward_ref__ === forwardRef) {\r\n\t        return type();\r\n\t    }\r\n\t    else {\r\n\t        return type;\r\n\t    }\r\n\t}\r\n\texports.resolveForwardRef = resolveForwardRef;\r\n\n\n/***/ },\n/* 198 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar forward_ref_1 = __webpack_require__(197);\r\n\t/**\r\n\t * A unique object used for retrieving items from the {@link Injector}.\r\n\t *\r\n\t * Keys have:\r\n\t * - a system-wide unique `id`.\r\n\t * - a `token`.\r\n\t *\r\n\t * `Key` is used internally by {@link Injector} because its system-wide unique `id` allows the\r\n\t * injector to store created objects in a more efficient way.\r\n\t *\r\n\t * `Key` should not be created directly. {@link Injector} creates keys automatically when resolving\r\n\t * providers.\r\n\t */\r\n\tvar Key = (function () {\r\n\t    /**\r\n\t     * Private\r\n\t     */\r\n\t    function Key(token, id) {\r\n\t        this.token = token;\r\n\t        this.id = id;\r\n\t        if (lang_1.isBlank(token)) {\r\n\t            throw new exceptions_1.BaseException('Token must be defined!');\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(Key.prototype, \"displayName\", {\r\n\t        /**\r\n\t         * Returns a stringified token.\r\n\t         */\r\n\t        get: function () { return lang_1.stringify(this.token); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * Retrieves a `Key` for a token.\r\n\t     */\r\n\t    Key.get = function (token) { return _globalKeyRegistry.get(forward_ref_1.resolveForwardRef(token)); };\r\n\t    Object.defineProperty(Key, \"numberOfKeys\", {\r\n\t        /**\r\n\t         * @returns the number of keys registered in the system.\r\n\t         */\r\n\t        get: function () { return _globalKeyRegistry.numberOfKeys; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return Key;\r\n\t})();\r\n\texports.Key = Key;\r\n\t/**\r\n\t * @internal\r\n\t */\r\n\tvar KeyRegistry = (function () {\r\n\t    function KeyRegistry() {\r\n\t        this._allKeys = new Map();\r\n\t    }\r\n\t    KeyRegistry.prototype.get = function (token) {\r\n\t        if (token instanceof Key)\r\n\t            return token;\r\n\t        if (this._allKeys.has(token)) {\r\n\t            return this._allKeys.get(token);\r\n\t        }\r\n\t        var newKey = new Key(token, Key.numberOfKeys);\r\n\t        this._allKeys.set(token, newKey);\r\n\t        return newKey;\r\n\t    };\r\n\t    Object.defineProperty(KeyRegistry.prototype, \"numberOfKeys\", {\r\n\t        get: function () { return this._allKeys.size; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return KeyRegistry;\r\n\t})();\r\n\texports.KeyRegistry = KeyRegistry;\r\n\tvar _globalKeyRegistry = new KeyRegistry();\r\n\n\n/***/ },\n/* 199 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * Represents a location in a View that has an injection, change-detection and render context\r\n\t * associated with it.\r\n\t *\r\n\t * An `ElementRef` is created for each element in the Template that contains a Directive, Component\r\n\t * or data-binding.\r\n\t *\r\n\t * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM\r\n\t * element.\r\n\t */\r\n\tvar ElementRef = (function () {\r\n\t    function ElementRef() {\r\n\t    }\r\n\t    Object.defineProperty(ElementRef.prototype, \"nativeElement\", {\r\n\t        /**\r\n\t         * The underlying native element or `null` if direct access to native elements is not supported\r\n\t         * (e.g. when the application runs in a web worker).\r\n\t         *\r\n\t         * <div class=\"callout is-critical\">\r\n\t         *   <header>Use with caution</header>\r\n\t         *   <p>\r\n\t         *    Use this API as the last resort when direct access to DOM is needed. Use templating and\r\n\t         *    data-binding provided by Angular instead. Alternatively you take a look at {@link Renderer}\r\n\t         *    which provides API that can safely be used even when direct access to native elements is not\r\n\t         *    supported.\r\n\t         *   </p>\r\n\t         *   <p>\r\n\t         *    Relying on direct DOM access creates tight coupling between your application and rendering\r\n\t         *    layers which will make it impossible to separate the two and deploy your application into a\r\n\t         *    web worker.\r\n\t         *   </p>\r\n\t         * </div>\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ElementRef;\r\n\t})();\r\n\texports.ElementRef = ElementRef;\r\n\tvar ElementRef_ = (function () {\r\n\t    function ElementRef_(_appElement) {\r\n\t        this._appElement = _appElement;\r\n\t    }\r\n\t    Object.defineProperty(ElementRef_.prototype, \"internalElement\", {\r\n\t        get: function () { return this._appElement; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ElementRef_.prototype, \"nativeElement\", {\r\n\t        get: function () { return this._appElement.nativeElement; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return ElementRef_;\r\n\t})();\r\n\texports.ElementRef_ = ElementRef_;\r\n\n\n/***/ },\n/* 200 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar metadata_1 = __webpack_require__(133);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tfunction _isPipeMetadata(type) {\r\n\t    return type instanceof metadata_1.PipeMetadata;\r\n\t}\r\n\t/**\r\n\t * Resolve a `Type` for {@link PipeMetadata}.\r\n\t *\r\n\t * This interface can be overridden by the application developer to create custom behavior.\r\n\t *\r\n\t * See {@link Compiler}\r\n\t */\r\n\tvar PipeResolver = (function () {\r\n\t    function PipeResolver() {\r\n\t    }\r\n\t    /**\r\n\t     * Return {@link PipeMetadata} for a given `Type`.\r\n\t     */\r\n\t    PipeResolver.prototype.resolve = function (type) {\r\n\t        var metas = reflection_1.reflector.annotations(di_1.resolveForwardRef(type));\r\n\t        if (lang_1.isPresent(metas)) {\r\n\t            var annotation = metas.find(_isPipeMetadata);\r\n\t            if (lang_1.isPresent(annotation)) {\r\n\t                return annotation;\r\n\t            }\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"No Pipe decorator found on \" + lang_1.stringify(type));\r\n\t    };\r\n\t    PipeResolver = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], PipeResolver);\r\n\t    return PipeResolver;\r\n\t})();\r\n\texports.PipeResolver = PipeResolver;\r\n\texports.CODEGEN_PIPE_RESOLVER = new PipeResolver();\r\n\n\n/***/ },\n/* 201 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Represents a container where one or more Views can be attached.\r\n\t *\r\n\t * The container can contain two kinds of Views. Host Views, created by instantiating a\r\n\t * {@link Component} via {@link #createHostView}, and Embedded Views, created by instantiating an\r\n\t * {@link TemplateRef Embedded Template} via {@link #createEmbeddedView}.\r\n\t *\r\n\t * The location of the View Container within the containing View is specified by the Anchor\r\n\t * `element`. Each View Container can have only one Anchor Element and each Anchor Element can only\r\n\t * have a single View Container.\r\n\t *\r\n\t * Root elements of Views attached to this container become siblings of the Anchor Element in\r\n\t * the Rendered View.\r\n\t *\r\n\t * To access a `ViewContainerRef` of an Element, you can either place a {@link Directive} injected\r\n\t * with `ViewContainerRef` on the Element, or you obtain it via\r\n\t * {@link AppViewManager#getViewContainer}.\r\n\t *\r\n\t * <!-- TODO(i): we are also considering ElementRef#viewContainer api -->\r\n\t */\r\n\tvar ViewContainerRef = (function () {\r\n\t    function ViewContainerRef() {\r\n\t    }\r\n\t    Object.defineProperty(ViewContainerRef.prototype, \"element\", {\r\n\t        /**\r\n\t         * Anchor element that specifies the location of this container in the containing View.\r\n\t         * <!-- TODO: rename to anchorElement -->\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * Destroys all Views in this container.\r\n\t     */\r\n\t    ViewContainerRef.prototype.clear = function () {\r\n\t        for (var i = this.length - 1; i >= 0; i--) {\r\n\t            this.remove(i);\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(ViewContainerRef.prototype, \"length\", {\r\n\t        /**\r\n\t         * Returns the number of Views currently attached to this container.\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    return ViewContainerRef;\r\n\t})();\r\n\texports.ViewContainerRef = ViewContainerRef;\r\n\tvar ViewContainerRef_ = (function (_super) {\r\n\t    __extends(ViewContainerRef_, _super);\r\n\t    function ViewContainerRef_(_element) {\r\n\t        _super.call(this);\r\n\t        this._element = _element;\r\n\t    }\r\n\t    ViewContainerRef_.prototype.get = function (index) { return this._element.nestedViews[index].ref; };\r\n\t    Object.defineProperty(ViewContainerRef_.prototype, \"length\", {\r\n\t        get: function () {\r\n\t            var views = this._element.nestedViews;\r\n\t            return lang_1.isPresent(views) ? views.length : 0;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ViewContainerRef_.prototype, \"element\", {\r\n\t        get: function () { return this._element.ref; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    // TODO(rado): profile and decide whether bounds checks should be added\r\n\t    // to the methods below.\r\n\t    ViewContainerRef_.prototype.createEmbeddedView = function (templateRef, index) {\r\n\t        if (index === void 0) { index = -1; }\r\n\t        if (index == -1)\r\n\t            index = this.length;\r\n\t        var vm = this._element.parentView.viewManager;\r\n\t        return vm.createEmbeddedViewInContainer(this._element.ref, index, templateRef);\r\n\t    };\r\n\t    ViewContainerRef_.prototype.createHostView = function (hostViewFactoryRef, index, dynamicallyCreatedProviders, projectableNodes) {\r\n\t        if (index === void 0) { index = -1; }\r\n\t        if (dynamicallyCreatedProviders === void 0) { dynamicallyCreatedProviders = null; }\r\n\t        if (projectableNodes === void 0) { projectableNodes = null; }\r\n\t        if (index == -1)\r\n\t            index = this.length;\r\n\t        var vm = this._element.parentView.viewManager;\r\n\t        return vm.createHostViewInContainer(this._element.ref, index, hostViewFactoryRef, dynamicallyCreatedProviders, projectableNodes);\r\n\t    };\r\n\t    // TODO(i): refactor insert+remove into move\r\n\t    ViewContainerRef_.prototype.insert = function (viewRef, index) {\r\n\t        if (index === void 0) { index = -1; }\r\n\t        if (index == -1)\r\n\t            index = this.length;\r\n\t        var vm = this._element.parentView.viewManager;\r\n\t        return vm.attachViewInContainer(this._element.ref, index, viewRef);\r\n\t    };\r\n\t    ViewContainerRef_.prototype.indexOf = function (viewRef) {\r\n\t        return collection_1.ListWrapper.indexOf(this._element.nestedViews, viewRef.internalView);\r\n\t    };\r\n\t    // TODO(i): rename to destroy\r\n\t    ViewContainerRef_.prototype.remove = function (index) {\r\n\t        if (index === void 0) { index = -1; }\r\n\t        if (index == -1)\r\n\t            index = this.length - 1;\r\n\t        var vm = this._element.parentView.viewManager;\r\n\t        return vm.destroyViewInContainer(this._element.ref, index);\r\n\t        // view is intentionally not returned to the client.\r\n\t    };\r\n\t    // TODO(i): refactor insert+remove into move\r\n\t    ViewContainerRef_.prototype.detach = function (index) {\r\n\t        if (index === void 0) { index = -1; }\r\n\t        if (index == -1)\r\n\t            index = this.length - 1;\r\n\t        var vm = this._element.parentView.viewManager;\r\n\t        return vm.detachViewInContainer(this._element.ref, index);\r\n\t    };\r\n\t    return ViewContainerRef_;\r\n\t})(ViewContainerRef);\r\n\texports.ViewContainerRef_ = ViewContainerRef_;\r\n\n\n/***/ },\n/* 202 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar view_1 = __webpack_require__(63);\r\n\tvar directives_1 = __webpack_require__(99);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\t/**\r\n\t * Resolves types to {@link ViewMetadata}.\r\n\t */\r\n\tvar ViewResolver = (function () {\r\n\t    function ViewResolver() {\r\n\t        /** @internal */\r\n\t        this._cache = new collection_1.Map();\r\n\t    }\r\n\t    ViewResolver.prototype.resolve = function (component) {\r\n\t        var view = this._cache.get(component);\r\n\t        if (lang_1.isBlank(view)) {\r\n\t            view = this._resolve(component);\r\n\t            this._cache.set(component, view);\r\n\t        }\r\n\t        return view;\r\n\t    };\r\n\t    /** @internal */\r\n\t    ViewResolver.prototype._resolve = function (component) {\r\n\t        var compMeta;\r\n\t        var viewMeta;\r\n\t        reflection_1.reflector.annotations(component).forEach(function (m) {\r\n\t            if (m instanceof view_1.ViewMetadata) {\r\n\t                viewMeta = m;\r\n\t            }\r\n\t            if (m instanceof directives_1.ComponentMetadata) {\r\n\t                compMeta = m;\r\n\t            }\r\n\t        });\r\n\t        if (lang_1.isPresent(compMeta)) {\r\n\t            if (lang_1.isBlank(compMeta.template) && lang_1.isBlank(compMeta.templateUrl) && lang_1.isBlank(viewMeta)) {\r\n\t                throw new exceptions_1.BaseException(\"Component '\" + lang_1.stringify(component) + \"' must have either 'template' or 'templateUrl' set.\");\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.template) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"template\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.templateUrl) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"templateUrl\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.directives) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"directives\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.pipes) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"pipes\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.encapsulation) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"encapsulation\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.styles) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"styles\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(compMeta.styleUrls) && lang_1.isPresent(viewMeta)) {\r\n\t                this._throwMixingViewAndComponent(\"styleUrls\", component);\r\n\t            }\r\n\t            else if (lang_1.isPresent(viewMeta)) {\r\n\t                return viewMeta;\r\n\t            }\r\n\t            else {\r\n\t                return new view_1.ViewMetadata({\r\n\t                    templateUrl: compMeta.templateUrl,\r\n\t                    template: compMeta.template,\r\n\t                    directives: compMeta.directives,\r\n\t                    pipes: compMeta.pipes,\r\n\t                    encapsulation: compMeta.encapsulation,\r\n\t                    styles: compMeta.styles,\r\n\t                    styleUrls: compMeta.styleUrls\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (lang_1.isBlank(viewMeta)) {\r\n\t                throw new exceptions_1.BaseException(\"Could not compile '\" + lang_1.stringify(component) + \"' because it is not a component.\");\r\n\t            }\r\n\t            else {\r\n\t                return viewMeta;\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    /** @internal */\r\n\t    ViewResolver.prototype._throwMixingViewAndComponent = function (propertyName, component) {\r\n\t        throw new exceptions_1.BaseException(\"Component '\" + lang_1.stringify(component) + \"' cannot have both '\" + propertyName + \"' and '@View' set at the same time\\\"\");\r\n\t    };\r\n\t    ViewResolver = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], ViewResolver);\r\n\t    return ViewResolver;\r\n\t})();\r\n\texports.ViewResolver = ViewResolver;\r\n\n\n/***/ },\n/* 203 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar metadata_1 = __webpack_require__(80);\r\n\t/**\r\n\t * Specifies that a constant attribute value should be injected.\r\n\t *\r\n\t * The directive can inject constant string literals of host element attributes.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Suppose we have an `<input>` element and want to know its `type`.\r\n\t *\r\n\t * ```html\r\n\t * <input type=\"text\">\r\n\t * ```\r\n\t *\r\n\t * A decorator can inject string literal `text` like so:\r\n\t *\r\n\t * {@example core/ts/metadata/metadata.ts region='attributeMetadata'}\r\n\t */\r\n\tvar AttributeMetadata = (function (_super) {\r\n\t    __extends(AttributeMetadata, _super);\r\n\t    function AttributeMetadata(attributeName) {\r\n\t        _super.call(this);\r\n\t        this.attributeName = attributeName;\r\n\t    }\r\n\t    Object.defineProperty(AttributeMetadata.prototype, \"token\", {\r\n\t        get: function () {\r\n\t            // Normally one would default a token to a type of an injected value but here\r\n\t            // the type of a variable is \"string\" and we can't use primitive type as a return value\r\n\t            // so we use instance of Attribute instead. This doesn't matter much in practice as arguments\r\n\t            // with @Attribute annotation are injected by ElementInjector that doesn't take tokens into\r\n\t            // account.\r\n\t            return this;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    AttributeMetadata.prototype.toString = function () { return \"@Attribute(\" + lang_1.stringify(this.attributeName) + \")\"; };\r\n\t    AttributeMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], AttributeMetadata);\r\n\t    return AttributeMetadata;\r\n\t})(metadata_1.DependencyMetadata);\r\n\texports.AttributeMetadata = AttributeMetadata;\r\n\t/**\r\n\t * Declares an injectable parameter to be a live list of directives or variable\r\n\t * bindings from the content children of a directive.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\r\n\t *\r\n\t * Assume that `<tabs>` component would like to get a list its children `<pane>`\r\n\t * components as shown in this example:\r\n\t *\r\n\t * ```html\r\n\t * <tabs>\r\n\t *   <pane title=\"Overview\">...</pane>\r\n\t *   <pane *ngFor=\"#o of objects\" [title]=\"o.title\">{{o.text}}</pane>\r\n\t * </tabs>\r\n\t * ```\r\n\t *\r\n\t * The preferred solution is to query for `Pane` directives using this decorator.\r\n\t *\r\n\t * ```javascript\r\n\t * @Component({\r\n\t *   selector: 'pane',\r\n\t *   inputs: ['title']\r\n\t * })\r\n\t * class Pane {\r\n\t *   title:string;\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *  selector: 'tabs',\r\n\t *  template: `\r\n\t *    <ul>\r\n\t *      <li *ngFor=\"#pane of panes\">{{pane.title}}</li>\r\n\t *    </ul>\r\n\t *    <ng-content></ng-content>\r\n\t *  `\r\n\t * })\r\n\t * class Tabs {\r\n\t *   panes: QueryList<Pane>;\r\n\t *   constructor(@Query(Pane) panes:QueryList<Pane>) {\r\n\t  *    this.panes = panes;\r\n\t  *  }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * A query can look for variable bindings by passing in a string with desired binding symbol.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/sT2j25cH1dURAyBRCKx1?p=preview))\r\n\t * ```html\r\n\t * <seeker>\r\n\t *   <div #findme>...</div>\r\n\t * </seeker>\r\n\t *\r\n\t * @Component({ selector: 'seeker' })\r\n\t * class Seeker {\r\n\t *   constructor(@Query('findme') elList: QueryList<ElementRef>) {...}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * In this case the object that is injected depend on the type of the variable\r\n\t * binding. It can be an ElementRef, a directive or a component.\r\n\t *\r\n\t * Passing in a comma separated list of variable bindings will query for all of them.\r\n\t *\r\n\t * ```html\r\n\t * <seeker>\r\n\t *   <div #find-me>...</div>\r\n\t *   <div #find-me-too>...</div>\r\n\t * </seeker>\r\n\t *\r\n\t *  @Component({\r\n\t *   selector: 'seeker'\r\n\t * })\r\n\t * class Seeker {\r\n\t *   constructor(@Query('findMe, findMeToo') elList: QueryList<ElementRef>) {...}\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Configure whether query looks for direct children or all descendants\r\n\t * of the querying element, by using the `descendants` parameter.\r\n\t * It is set to `false` by default.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/wtGeB977bv7qvA5FTYl9?p=preview))\r\n\t * ```html\r\n\t * <container #first>\r\n\t *   <item>a</item>\r\n\t *   <item>b</item>\r\n\t *   <container #second>\r\n\t *     <item>c</item>\r\n\t *   </container>\r\n\t * </container>\r\n\t * ```\r\n\t *\r\n\t * When querying for items, the first container will see only `a` and `b` by default,\r\n\t * but with `Query(TextDirective, {descendants: true})` it will see `c` too.\r\n\t *\r\n\t * The queried directives are kept in a depth-first pre-order with respect to their\r\n\t * positions in the DOM.\r\n\t *\r\n\t * Query does not look deep into any subcomponent views.\r\n\t *\r\n\t * Query is updated as part of the change-detection cycle. Since change detection\r\n\t * happens after construction of a directive, QueryList will always be empty when observed in the\r\n\t * constructor.\r\n\t *\r\n\t * The injected object is an unmodifiable live list.\r\n\t * See {@link QueryList} for more details.\r\n\t */\r\n\tvar QueryMetadata = (function (_super) {\r\n\t    __extends(QueryMetadata, _super);\r\n\t    function QueryMetadata(_selector, _a) {\r\n\t        var _b = _a === void 0 ? {} : _a, _c = _b.descendants, descendants = _c === void 0 ? false : _c, _d = _b.first, first = _d === void 0 ? false : _d;\r\n\t        _super.call(this);\r\n\t        this._selector = _selector;\r\n\t        this.descendants = descendants;\r\n\t        this.first = first;\r\n\t    }\r\n\t    Object.defineProperty(QueryMetadata.prototype, \"isViewQuery\", {\r\n\t        /**\r\n\t         * always `false` to differentiate it with {@link ViewQueryMetadata}.\r\n\t         */\r\n\t        get: function () { return false; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(QueryMetadata.prototype, \"selector\", {\r\n\t        /**\r\n\t         * what this is querying for.\r\n\t         */\r\n\t        get: function () { return di_1.resolveForwardRef(this._selector); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(QueryMetadata.prototype, \"isVarBindingQuery\", {\r\n\t        /**\r\n\t         * whether this is querying for a variable binding or a directive.\r\n\t         */\r\n\t        get: function () { return lang_1.isString(this.selector); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(QueryMetadata.prototype, \"varBindings\", {\r\n\t        /**\r\n\t         * returns a list of variable bindings this is querying for.\r\n\t         * Only applicable if this is a variable bindings query.\r\n\t         */\r\n\t        get: function () { return this.selector.split(','); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    QueryMetadata.prototype.toString = function () { return \"@Query(\" + lang_1.stringify(this.selector) + \")\"; };\r\n\t    QueryMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object, Object])\r\n\t    ], QueryMetadata);\r\n\t    return QueryMetadata;\r\n\t})(metadata_1.DependencyMetadata);\r\n\texports.QueryMetadata = QueryMetadata;\r\n\t// TODO: add an example after ContentChildren and ViewChildren are in master\r\n\t/**\r\n\t * Configures a content query.\r\n\t *\r\n\t * Content queries are set before the `ngAfterContentInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: 'someDir'\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;\r\n\t *\r\n\t *   ngAfterContentInit() {\r\n\t *     // contentChildren is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar ContentChildrenMetadata = (function (_super) {\r\n\t    __extends(ContentChildrenMetadata, _super);\r\n\t    function ContentChildrenMetadata(_selector, _a) {\r\n\t        var _b = (_a === void 0 ? {} : _a).descendants, descendants = _b === void 0 ? false : _b;\r\n\t        _super.call(this, _selector, { descendants: descendants });\r\n\t    }\r\n\t    ContentChildrenMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object, Object])\r\n\t    ], ContentChildrenMetadata);\r\n\t    return ContentChildrenMetadata;\r\n\t})(QueryMetadata);\r\n\texports.ContentChildrenMetadata = ContentChildrenMetadata;\r\n\t// TODO: add an example after ContentChild and ViewChild are in master\r\n\t/**\r\n\t * Configures a content query.\r\n\t *\r\n\t * Content queries are set before the `ngAfterContentInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Directive({\r\n\t *   selector: 'someDir'\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ContentChild(ChildDirective) contentChild;\r\n\t *\r\n\t *   ngAfterContentInit() {\r\n\t *     // contentChild is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar ContentChildMetadata = (function (_super) {\r\n\t    __extends(ContentChildMetadata, _super);\r\n\t    function ContentChildMetadata(_selector) {\r\n\t        _super.call(this, _selector, { descendants: true, first: true });\r\n\t    }\r\n\t    ContentChildMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], ContentChildMetadata);\r\n\t    return ContentChildMetadata;\r\n\t})(QueryMetadata);\r\n\texports.ContentChildMetadata = ContentChildMetadata;\r\n\t/**\r\n\t * Similar to {@link QueryMetadata}, but querying the component view, instead of\r\n\t * the content children.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/eNsFHDf7YjyM6IzKxM1j?p=preview))\r\n\t *\r\n\t * ```javascript\r\n\t * @Component({\r\n\t *   ...,\r\n\t *   template: `\r\n\t *     <item> a </item>\r\n\t *     <item> b </item>\r\n\t *     <item> c </item>\r\n\t *   `\r\n\t * })\r\n\t * class MyComponent {\r\n\t *   shown: boolean;\r\n\t *\r\n\t *   constructor(private @Query(Item) items:QueryList<Item>) {\r\n\t *     items.changes.subscribe(() => console.log(items.length));\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * Supports the same querying parameters as {@link QueryMetadata}, except\r\n\t * `descendants`. This always queries the whole view.\r\n\t *\r\n\t * As `shown` is flipped between true and false, items will contain zero of one\r\n\t * items.\r\n\t *\r\n\t * Specifies that a {@link QueryList} should be injected.\r\n\t *\r\n\t * The injected object is an iterable and observable live list.\r\n\t * See {@link QueryList} for more details.\r\n\t */\r\n\tvar ViewQueryMetadata = (function (_super) {\r\n\t    __extends(ViewQueryMetadata, _super);\r\n\t    function ViewQueryMetadata(_selector, _a) {\r\n\t        var _b = _a === void 0 ? {} : _a, _c = _b.descendants, descendants = _c === void 0 ? false : _c, _d = _b.first, first = _d === void 0 ? false : _d;\r\n\t        _super.call(this, _selector, { descendants: descendants, first: first });\r\n\t    }\r\n\t    Object.defineProperty(ViewQueryMetadata.prototype, \"isViewQuery\", {\r\n\t        /**\r\n\t         * always `true` to differentiate it with {@link QueryMetadata}.\r\n\t         */\r\n\t        get: function () { return true; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ViewQueryMetadata.prototype.toString = function () { return \"@ViewQuery(\" + lang_1.stringify(this.selector) + \")\"; };\r\n\t    ViewQueryMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object, Object])\r\n\t    ], ViewQueryMetadata);\r\n\t    return ViewQueryMetadata;\r\n\t})(QueryMetadata);\r\n\texports.ViewQueryMetadata = ViewQueryMetadata;\r\n\t/**\r\n\t * Configures a view query.\r\n\t *\r\n\t * View queries are set before the `ngAfterViewInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'someDir',\r\n\t *   templateUrl: 'someTemplate',\r\n\t *   directives: [ItemDirective]\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ViewChildren(ItemDirective) viewChildren: QueryList<ItemDirective>;\r\n\t *\r\n\t *   ngAfterViewInit() {\r\n\t *     // viewChildren is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar ViewChildrenMetadata = (function (_super) {\r\n\t    __extends(ViewChildrenMetadata, _super);\r\n\t    function ViewChildrenMetadata(_selector) {\r\n\t        _super.call(this, _selector, { descendants: true });\r\n\t    }\r\n\t    ViewChildrenMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], ViewChildrenMetadata);\r\n\t    return ViewChildrenMetadata;\r\n\t})(ViewQueryMetadata);\r\n\texports.ViewChildrenMetadata = ViewChildrenMetadata;\r\n\t/**\r\n\t * Configures a view query.\r\n\t *\r\n\t * View queries are set before the `ngAfterViewInit` callback is called.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * @Component({\r\n\t *   selector: 'someDir',\r\n\t *   templateUrl: 'someTemplate',\r\n\t *   directives: [ItemDirective]\r\n\t * })\r\n\t * class SomeDir {\r\n\t *   @ViewChild(ItemDirective) viewChild:ItemDirective;\r\n\t *\r\n\t *   ngAfterViewInit() {\r\n\t *     // viewChild is set\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar ViewChildMetadata = (function (_super) {\r\n\t    __extends(ViewChildMetadata, _super);\r\n\t    function ViewChildMetadata(_selector) {\r\n\t        _super.call(this, _selector, { descendants: true, first: true });\r\n\t    }\r\n\t    ViewChildMetadata = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Object])\r\n\t    ], ViewChildMetadata);\r\n\t    return ViewChildMetadata;\r\n\t})(ViewQueryMetadata);\r\n\texports.ViewChildMetadata = ViewChildMetadata;\r\n\n\n/***/ },\n/* 204 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * A token that can be provided when bootstraping an application to make an array of directives\r\n\t * available in every component of the application.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * import {PLATFORM_DIRECTIVES} from 'angular2/core';\r\n\t * import {OtherDirective} from './myDirectives';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'my-component',\r\n\t *   template: `\r\n\t *     <!-- can use other directive even though the component does not list it in `directives` -->\r\n\t *     <other-directive></other-directive>\r\n\t *   `\r\n\t * })\r\n\t * export class MyComponent {\r\n\t *   ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(MyComponent, [provide(PLATFORM_DIRECTIVES, {useValue: [OtherDirective], multi:true})]);\r\n\t * ```\r\n\t */\r\n\texports.PLATFORM_DIRECTIVES = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Platform Directives\"));\r\n\t/**\r\n\t * A token that can be provided when bootstraping an application to make an array of pipes\r\n\t * available in every component of the application.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * import {PLATFORM_PIPES} from 'angular2/core';\r\n\t * import {OtherPipe} from './myPipe';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'my-component',\r\n\t *   template: `\r\n\t *     {{123 | other-pipe}}\r\n\t *   `\r\n\t * })\r\n\t * export class MyComponent {\r\n\t *   ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(MyComponent, [provide(PLATFORM_PIPES, {useValue: [OtherPipe], multi:true})]);\r\n\t * ```\r\n\t */\r\n\texports.PLATFORM_PIPES = lang_1.CONST_EXPR(new di_1.OpaqueToken(\"Platform Pipes\"));\r\n\n\n/***/ },\n/* 205 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var impl = __webpack_require__(618);\r\n\t// Change exports to const once https://github.com/angular/ts2dart/issues/150\r\n\t/**\r\n\t * True if WTF is enabled.\r\n\t */\r\n\texports.wtfEnabled = impl.detectWTF();\r\n\tfunction noopScope(arg0, arg1) {\r\n\t    return null;\r\n\t}\r\n\t/**\r\n\t * Create trace scope.\r\n\t *\r\n\t * Scopes must be strictly nested and are analogous to stack frames, but\r\n\t * do not have to follow the stack frames. Instead it is recommended that they follow logical\r\n\t * nesting. You may want to use\r\n\t * [Event\r\n\t * Signatures](http://google.github.io/tracing-framework/instrumenting-code.html#custom-events)\r\n\t * as they are defined in WTF.\r\n\t *\r\n\t * Used to mark scope entry. The return value is used to leave the scope.\r\n\t *\r\n\t *     var myScope = wtfCreateScope('MyClass#myMethod(ascii someVal)');\r\n\t *\r\n\t *     someMethod() {\r\n\t *        var s = myScope('Foo'); // 'Foo' gets stored in tracing UI\r\n\t *        // DO SOME WORK HERE\r\n\t *        return wtfLeave(s, 123); // Return value 123\r\n\t *     }\r\n\t *\r\n\t * Note, adding try-finally block around the work to ensure that `wtfLeave` gets called can\r\n\t * negatively impact the performance of your application. For this reason we recommend that\r\n\t * you don't add them to ensure that `wtfLeave` gets called. In production `wtfLeave` is a noop and\r\n\t * so try-finally block has no value. When debugging perf issues, skipping `wtfLeave`, do to\r\n\t * exception, will produce incorrect trace, but presence of exception signifies logic error which\r\n\t * needs to be fixed before the app should be profiled. Add try-finally only when you expect that\r\n\t * an exception is expected during normal execution while profiling.\r\n\t *\r\n\t */\r\n\texports.wtfCreateScope = exports.wtfEnabled ? impl.createScope : function (signature, flags) { return noopScope; };\r\n\t/**\r\n\t * Used to mark end of Scope.\r\n\t *\r\n\t * - `scope` to end.\r\n\t * - `returnValue` (optional) to be passed to the WTF.\r\n\t *\r\n\t * Returns the `returnValue for easy chaining.\r\n\t */\r\n\texports.wtfLeave = exports.wtfEnabled ? impl.leave : function (s, r) { return r; };\r\n\t/**\r\n\t * Used to mark Async start. Async are similar to scope but they don't have to be strictly nested.\r\n\t * The return value is used in the call to [endAsync]. Async ranges only work if WTF has been\r\n\t * enabled.\r\n\t *\r\n\t *     someMethod() {\r\n\t *        var s = wtfStartTimeRange('HTTP:GET', 'some.url');\r\n\t *        var future = new Future.delay(5).then((_) {\r\n\t *          wtfEndTimeRange(s);\r\n\t *        });\r\n\t *     }\r\n\t */\r\n\texports.wtfStartTimeRange = exports.wtfEnabled ? impl.startTimeRange : function (rangeType, action) { return null; };\r\n\t/**\r\n\t * Ends a async time range operation.\r\n\t * [range] is the return value from [wtfStartTimeRange] Async ranges only work if WTF has been\r\n\t * enabled.\r\n\t */\r\n\texports.wtfEndTimeRange = exports.wtfEnabled ? impl.endTimeRange : function (r) {\r\n\t    return null;\r\n\t};\r\n\n\n/***/ },\n/* 206 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar base_wrapped_exception_1 = __webpack_require__(313);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar _ArrayLogger = (function () {\r\n\t    function _ArrayLogger() {\r\n\t        this.res = [];\r\n\t    }\r\n\t    _ArrayLogger.prototype.log = function (s) { this.res.push(s); };\r\n\t    _ArrayLogger.prototype.logError = function (s) { this.res.push(s); };\r\n\t    _ArrayLogger.prototype.logGroup = function (s) { this.res.push(s); };\r\n\t    _ArrayLogger.prototype.logGroupEnd = function () { };\r\n\t    ;\r\n\t    return _ArrayLogger;\r\n\t})();\r\n\t/**\r\n\t * Provides a hook for centralized exception handling.\r\n\t *\r\n\t * The default implementation of `ExceptionHandler` prints error messages to the `Console`. To\r\n\t * intercept error handling,\r\n\t * write a custom exception handler that replaces this default as appropriate for your app.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```javascript\r\n\t *\r\n\t * class MyExceptionHandler implements ExceptionHandler {\r\n\t *   call(error, stackTrace = null, reason = null) {\r\n\t *     // do something with the exception\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(MyApp, [provide(ExceptionHandler, {useClass: MyExceptionHandler})])\r\n\t *\r\n\t * ```\r\n\t */\r\n\tvar ExceptionHandler = (function () {\r\n\t    function ExceptionHandler(_logger, _rethrowException) {\r\n\t        if (_rethrowException === void 0) { _rethrowException = true; }\r\n\t        this._logger = _logger;\r\n\t        this._rethrowException = _rethrowException;\r\n\t    }\r\n\t    ExceptionHandler.exceptionToString = function (exception, stackTrace, reason) {\r\n\t        if (stackTrace === void 0) { stackTrace = null; }\r\n\t        if (reason === void 0) { reason = null; }\r\n\t        var l = new _ArrayLogger();\r\n\t        var e = new ExceptionHandler(l, false);\r\n\t        e.call(exception, stackTrace, reason);\r\n\t        return l.res.join(\"\\n\");\r\n\t    };\r\n\t    ExceptionHandler.prototype.call = function (exception, stackTrace, reason) {\r\n\t        if (stackTrace === void 0) { stackTrace = null; }\r\n\t        if (reason === void 0) { reason = null; }\r\n\t        var originalException = this._findOriginalException(exception);\r\n\t        var originalStack = this._findOriginalStack(exception);\r\n\t        var context = this._findContext(exception);\r\n\t        this._logger.logGroup(\"EXCEPTION: \" + this._extractMessage(exception));\r\n\t        if (lang_1.isPresent(stackTrace) && lang_1.isBlank(originalStack)) {\r\n\t            this._logger.logError(\"STACKTRACE:\");\r\n\t            this._logger.logError(this._longStackTrace(stackTrace));\r\n\t        }\r\n\t        if (lang_1.isPresent(reason)) {\r\n\t            this._logger.logError(\"REASON: \" + reason);\r\n\t        }\r\n\t        if (lang_1.isPresent(originalException)) {\r\n\t            this._logger.logError(\"ORIGINAL EXCEPTION: \" + this._extractMessage(originalException));\r\n\t        }\r\n\t        if (lang_1.isPresent(originalStack)) {\r\n\t            this._logger.logError(\"ORIGINAL STACKTRACE:\");\r\n\t            this._logger.logError(this._longStackTrace(originalStack));\r\n\t        }\r\n\t        if (lang_1.isPresent(context)) {\r\n\t            this._logger.logError(\"ERROR CONTEXT:\");\r\n\t            this._logger.logError(context);\r\n\t        }\r\n\t        this._logger.logGroupEnd();\r\n\t        // We rethrow exceptions, so operations like 'bootstrap' will result in an error\r\n\t        // when an exception happens. If we do not rethrow, bootstrap will always succeed.\r\n\t        if (this._rethrowException)\r\n\t            throw exception;\r\n\t    };\r\n\t    /** @internal */\r\n\t    ExceptionHandler.prototype._extractMessage = function (exception) {\r\n\t        return exception instanceof base_wrapped_exception_1.BaseWrappedException ? exception.wrapperMessage :\r\n\t            exception.toString();\r\n\t    };\r\n\t    /** @internal */\r\n\t    ExceptionHandler.prototype._longStackTrace = function (stackTrace) {\r\n\t        return collection_1.isListLikeIterable(stackTrace) ? stackTrace.join(\"\\n\\n-----async gap-----\\n\") :\r\n\t            stackTrace.toString();\r\n\t    };\r\n\t    /** @internal */\r\n\t    ExceptionHandler.prototype._findContext = function (exception) {\r\n\t        try {\r\n\t            if (!(exception instanceof base_wrapped_exception_1.BaseWrappedException))\r\n\t                return null;\r\n\t            return lang_1.isPresent(exception.context) ? exception.context :\r\n\t                this._findContext(exception.originalException);\r\n\t        }\r\n\t        catch (e) {\r\n\t            // exception.context can throw an exception. if it happens, we ignore the context.\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ExceptionHandler.prototype._findOriginalException = function (exception) {\r\n\t        if (!(exception instanceof base_wrapped_exception_1.BaseWrappedException))\r\n\t            return null;\r\n\t        var e = exception.originalException;\r\n\t        while (e instanceof base_wrapped_exception_1.BaseWrappedException && lang_1.isPresent(e.originalException)) {\r\n\t            e = e.originalException;\r\n\t        }\r\n\t        return e;\r\n\t    };\r\n\t    /** @internal */\r\n\t    ExceptionHandler.prototype._findOriginalStack = function (exception) {\r\n\t        if (!(exception instanceof base_wrapped_exception_1.BaseWrappedException))\r\n\t            return null;\r\n\t        var e = exception;\r\n\t        var stack = exception.originalStack;\r\n\t        while (e instanceof base_wrapped_exception_1.BaseWrappedException && lang_1.isPresent(e.originalException)) {\r\n\t            e = e.originalException;\r\n\t            if (e instanceof base_wrapped_exception_1.BaseWrappedException && lang_1.isPresent(e.originalException)) {\r\n\t                stack = e.originalStack;\r\n\t            }\r\n\t        }\r\n\t        return stack;\r\n\t    };\r\n\t    return ExceptionHandler;\r\n\t})();\r\n\texports.ExceptionHandler = ExceptionHandler;\r\n\n\n/***/ },\n/* 207 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\t/**\r\n\t * A backend for http that uses the `XMLHttpRequest` browser API.\r\n\t *\r\n\t * Take care not to evaluate this in non-browser contexts.\r\n\t */\r\n\tvar BrowserXhr = (function () {\r\n\t    function BrowserXhr() {\r\n\t    }\r\n\t    BrowserXhr.prototype.build = function () { return (new XMLHttpRequest()); };\r\n\t    BrowserXhr = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], BrowserXhr);\r\n\t    return BrowserXhr;\r\n\t})();\r\n\texports.BrowserXhr = BrowserXhr;\r\n\n\n/***/ },\n/* 208 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar headers_1 = __webpack_require__(102);\r\n\tvar enums_1 = __webpack_require__(64);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar url_search_params_1 = __webpack_require__(321);\r\n\tvar http_utils_1 = __webpack_require__(138);\r\n\t/**\r\n\t * Creates a request options object to be optionally provided when instantiating a\r\n\t * {@link Request}.\r\n\t *\r\n\t * This class is based on the `RequestInit` description in the [Fetch\r\n\t * Spec](https://fetch.spec.whatwg.org/#requestinit).\r\n\t *\r\n\t * All values are null by default. Typical defaults can be found in the {@link BaseRequestOptions}\r\n\t * class, which sub-classes `RequestOptions`.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/7Wvi3lfLq41aQPKlxB4O?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * import {RequestOptions, Request, RequestMethod} from 'angular2/http';\r\n\t *\r\n\t * var options = new RequestOptions({\r\n\t *   method: RequestMethod.Post,\r\n\t *   url: 'https://google.com'\r\n\t * });\r\n\t * var req = new Request(options);\r\n\t * console.log('req.method:', RequestMethod[req.method]); // Post\r\n\t * console.log('options.url:', options.url); // https://google.com\r\n\t * ```\r\n\t */\r\n\tvar RequestOptions = (function () {\r\n\t    function RequestOptions(_a) {\r\n\t        var _b = _a === void 0 ? {} : _a, method = _b.method, headers = _b.headers, body = _b.body, url = _b.url, search = _b.search;\r\n\t        this.method = lang_1.isPresent(method) ? http_utils_1.normalizeMethodName(method) : null;\r\n\t        this.headers = lang_1.isPresent(headers) ? headers : null;\r\n\t        this.body = lang_1.isPresent(body) ? body : null;\r\n\t        this.url = lang_1.isPresent(url) ? url : null;\r\n\t        this.search = lang_1.isPresent(search) ? (lang_1.isString(search) ? new url_search_params_1.URLSearchParams((search)) :\r\n\t            (search)) :\r\n\t            null;\r\n\t    }\r\n\t    /**\r\n\t     * Creates a copy of the `RequestOptions` instance, using the optional input as values to override\r\n\t     * existing values. This method will not change the values of the instance on which it is being\r\n\t     * called.\r\n\t     *\r\n\t     * Note that `headers` and `search` will override existing values completely if present in\r\n\t     * the `options` object. If these values should be merged, it should be done prior to calling\r\n\t     * `merge` on the `RequestOptions` instance.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/6w8XA8YTkDRcPYpdB9dk?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * import {RequestOptions, Request, RequestMethod} from 'angular2/http';\r\n\t     *\r\n\t     * var options = new RequestOptions({\r\n\t     *   method: RequestMethod.Post\r\n\t     * });\r\n\t     * var req = new Request(options.merge({\r\n\t     *   url: 'https://google.com'\r\n\t     * }));\r\n\t     * console.log('req.method:', RequestMethod[req.method]); // Post\r\n\t     * console.log('options.url:', options.url); // null\r\n\t     * console.log('req.url:', req.url); // https://google.com\r\n\t     * ```\r\n\t     */\r\n\t    RequestOptions.prototype.merge = function (options) {\r\n\t        return new RequestOptions({\r\n\t            method: lang_1.isPresent(options) && lang_1.isPresent(options.method) ? options.method : this.method,\r\n\t            headers: lang_1.isPresent(options) && lang_1.isPresent(options.headers) ? options.headers : this.headers,\r\n\t            body: lang_1.isPresent(options) && lang_1.isPresent(options.body) ? options.body : this.body,\r\n\t            url: lang_1.isPresent(options) && lang_1.isPresent(options.url) ? options.url : this.url,\r\n\t            search: lang_1.isPresent(options) && lang_1.isPresent(options.search) ?\r\n\t                (lang_1.isString(options.search) ? new url_search_params_1.URLSearchParams((options.search)) :\r\n\t                    (options.search).clone()) :\r\n\t                this.search\r\n\t        });\r\n\t    };\r\n\t    return RequestOptions;\r\n\t})();\r\n\texports.RequestOptions = RequestOptions;\r\n\t/**\r\n\t * Subclass of {@link RequestOptions}, with default values.\r\n\t *\r\n\t * Default values:\r\n\t *  * method: {@link RequestMethod RequestMethod.Get}\r\n\t *  * headers: empty {@link Headers} object\r\n\t *\r\n\t * This class could be extended and bound to the {@link RequestOptions} class\r\n\t * when configuring an {@link Injector}, in order to override the default options\r\n\t * used by {@link Http} to create and send {@link Request Requests}.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/LEKVSx?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * import {provide} from 'angular2/core';\r\n\t * import {bootstrap} from 'angular2/platform/browser';\r\n\t * import {HTTP_PROVIDERS, Http, BaseRequestOptions, RequestOptions} from 'angular2/http';\r\n\t * import {App} from './myapp';\r\n\t *\r\n\t * class MyOptions extends BaseRequestOptions {\r\n\t *   search: string = 'coreTeam=true';\r\n\t * }\r\n\t *\r\n\t * bootstrap(App, [HTTP_PROVIDERS, provide(RequestOptions, {useClass: MyOptions})]);\r\n\t * ```\r\n\t *\r\n\t * The options could also be extended when manually creating a {@link Request}\r\n\t * object.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/oyBoEvNtDhOSfi9YxaVb?p=preview))\r\n\t *\r\n\t * ```\r\n\t * import {BaseRequestOptions, Request, RequestMethod} from 'angular2/http';\r\n\t *\r\n\t * var options = new BaseRequestOptions();\r\n\t * var req = new Request(options.merge({\r\n\t *   method: RequestMethod.Post,\r\n\t *   url: 'https://google.com'\r\n\t * }));\r\n\t * console.log('req.method:', RequestMethod[req.method]); // Post\r\n\t * console.log('options.url:', options.url); // null\r\n\t * console.log('req.url:', req.url); // https://google.com\r\n\t * ```\r\n\t */\r\n\tvar BaseRequestOptions = (function (_super) {\r\n\t    __extends(BaseRequestOptions, _super);\r\n\t    function BaseRequestOptions() {\r\n\t        _super.call(this, { method: enums_1.RequestMethod.Get, headers: new headers_1.Headers() });\r\n\t    }\r\n\t    BaseRequestOptions = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], BaseRequestOptions);\r\n\t    return BaseRequestOptions;\r\n\t})(RequestOptions);\r\n\texports.BaseRequestOptions = BaseRequestOptions;\r\n\n\n/***/ },\n/* 209 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * Abstract class from which real backends are derived.\r\n\t *\r\n\t * The primary purpose of a `ConnectionBackend` is to create new connections to fulfill a given\r\n\t * {@link Request}.\r\n\t */\r\n\tvar ConnectionBackend = (function () {\r\n\t    function ConnectionBackend() {\r\n\t    }\r\n\t    return ConnectionBackend;\r\n\t})();\r\n\texports.ConnectionBackend = ConnectionBackend;\r\n\t/**\r\n\t * Abstract class from which real connections are derived.\r\n\t */\r\n\tvar Connection = (function () {\r\n\t    function Connection() {\r\n\t    }\r\n\t    return Connection;\r\n\t})();\r\n\texports.Connection = Connection;\r\n\n\n/***/ },\n/* 210 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar http_utils_1 = __webpack_require__(138);\r\n\t/**\r\n\t * Creates `Response` instances from provided values.\r\n\t *\r\n\t * Though this object isn't\r\n\t * usually instantiated by end-users, it is the primary object interacted with when it comes time to\r\n\t * add data to a view.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * http.request('my-friends.txt').subscribe(response => this.friends = response.text());\r\n\t * ```\r\n\t *\r\n\t * The Response's interface is inspired by the Response constructor defined in the [Fetch\r\n\t * Spec](https://fetch.spec.whatwg.org/#response-class), but is considered a static value whose body\r\n\t * can be accessed many times. There are other differences in the implementation, but this is the\r\n\t * most significant.\r\n\t */\r\n\tvar Response = (function () {\r\n\t    function Response(responseOptions) {\r\n\t        this._body = responseOptions.body;\r\n\t        this.status = responseOptions.status;\r\n\t        this.statusText = responseOptions.statusText;\r\n\t        this.headers = responseOptions.headers;\r\n\t        this.type = responseOptions.type;\r\n\t        this.url = responseOptions.url;\r\n\t    }\r\n\t    /**\r\n\t     * Not yet implemented\r\n\t     */\r\n\t    // TODO: Blob return type\r\n\t    Response.prototype.blob = function () { throw new exceptions_1.BaseException('\"blob()\" method not implemented on Response superclass'); };\r\n\t    /**\r\n\t     * Attempts to return body as parsed `JSON` object, or raises an exception.\r\n\t     */\r\n\t    Response.prototype.json = function () {\r\n\t        var jsonResponse;\r\n\t        if (http_utils_1.isJsObject(this._body)) {\r\n\t            jsonResponse = this._body;\r\n\t        }\r\n\t        else if (lang_1.isString(this._body)) {\r\n\t            jsonResponse = lang_1.Json.parse(this._body);\r\n\t        }\r\n\t        return jsonResponse;\r\n\t    };\r\n\t    /**\r\n\t     * Returns the body as a string, presuming `toString()` can be called on the response body.\r\n\t     */\r\n\t    Response.prototype.text = function () { return this._body.toString(); };\r\n\t    /**\r\n\t     * Not yet implemented\r\n\t     */\r\n\t    // TODO: ArrayBuffer return type\r\n\t    Response.prototype.arrayBuffer = function () {\r\n\t        throw new exceptions_1.BaseException('\"arrayBuffer()\" method not implemented on Response superclass');\r\n\t    };\r\n\t    return Response;\r\n\t})();\r\n\texports.Response = Response;\r\n\n\n/***/ },\n/* 211 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar animation_builder_1 = __webpack_require__(260);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar shared_styles_host_1 = __webpack_require__(139);\r\n\tvar event_manager_1 = __webpack_require__(82);\r\n\tvar dom_tokens_1 = __webpack_require__(103);\r\n\tvar metadata_1 = __webpack_require__(133);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar util_1 = __webpack_require__(326);\r\n\tvar NAMESPACE_URIS = lang_1.CONST_EXPR({ 'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg' });\r\n\tvar TEMPLATE_COMMENT_TEXT = 'template bindings={}';\r\n\tvar TEMPLATE_BINDINGS_EXP = /^template bindings=(.*)$/g;\r\n\tvar DomRootRenderer = (function () {\r\n\t    function DomRootRenderer(document, eventManager, sharedStylesHost, animate) {\r\n\t        this.document = document;\r\n\t        this.eventManager = eventManager;\r\n\t        this.sharedStylesHost = sharedStylesHost;\r\n\t        this.animate = animate;\r\n\t        this._registeredComponents = new Map();\r\n\t    }\r\n\t    DomRootRenderer.prototype.renderComponent = function (componentProto) {\r\n\t        var renderer = this._registeredComponents.get(componentProto.id);\r\n\t        if (lang_1.isBlank(renderer)) {\r\n\t            renderer = new DomRenderer(this, componentProto);\r\n\t            this._registeredComponents.set(componentProto.id, renderer);\r\n\t        }\r\n\t        return renderer;\r\n\t    };\r\n\t    return DomRootRenderer;\r\n\t})();\r\n\texports.DomRootRenderer = DomRootRenderer;\r\n\tvar DomRootRenderer_ = (function (_super) {\r\n\t    __extends(DomRootRenderer_, _super);\r\n\t    function DomRootRenderer_(_document, _eventManager, sharedStylesHost, animate) {\r\n\t        _super.call(this, _document, _eventManager, sharedStylesHost, animate);\r\n\t    }\r\n\t    DomRootRenderer_ = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        __param(0, di_1.Inject(dom_tokens_1.DOCUMENT)), \r\n\t        __metadata('design:paramtypes', [Object, event_manager_1.EventManager, shared_styles_host_1.DomSharedStylesHost, animation_builder_1.AnimationBuilder])\r\n\t    ], DomRootRenderer_);\r\n\t    return DomRootRenderer_;\r\n\t})(DomRootRenderer);\r\n\texports.DomRootRenderer_ = DomRootRenderer_;\r\n\tvar DomRenderer = (function () {\r\n\t    function DomRenderer(_rootRenderer, componentProto) {\r\n\t        this._rootRenderer = _rootRenderer;\r\n\t        this.componentProto = componentProto;\r\n\t        this._styles = _flattenStyles(componentProto.id, componentProto.styles, []);\r\n\t        if (componentProto.encapsulation !== metadata_1.ViewEncapsulation.Native) {\r\n\t            this._rootRenderer.sharedStylesHost.addStyles(this._styles);\r\n\t        }\r\n\t        if (this.componentProto.encapsulation === metadata_1.ViewEncapsulation.Emulated) {\r\n\t            this._contentAttr = _shimContentAttribute(componentProto.id);\r\n\t            this._hostAttr = _shimHostAttribute(componentProto.id);\r\n\t        }\r\n\t        else {\r\n\t            this._contentAttr = null;\r\n\t            this._hostAttr = null;\r\n\t        }\r\n\t    }\r\n\t    DomRenderer.prototype.renderComponent = function (componentProto) {\r\n\t        return this._rootRenderer.renderComponent(componentProto);\r\n\t    };\r\n\t    DomRenderer.prototype.selectRootElement = function (selector) {\r\n\t        var el = dom_adapter_1.DOM.querySelector(this._rootRenderer.document, selector);\r\n\t        if (lang_1.isBlank(el)) {\r\n\t            throw new exceptions_1.BaseException(\"The selector \\\"\" + selector + \"\\\" did not match any elements\");\r\n\t        }\r\n\t        dom_adapter_1.DOM.clearNodes(el);\r\n\t        return el;\r\n\t    };\r\n\t    DomRenderer.prototype.createElement = function (parent, name) {\r\n\t        var nsAndName = splitNamespace(name);\r\n\t        var el = lang_1.isPresent(nsAndName[0]) ?\r\n\t            dom_adapter_1.DOM.createElementNS(NAMESPACE_URIS[nsAndName[0]], nsAndName[1]) :\r\n\t            dom_adapter_1.DOM.createElement(nsAndName[1]);\r\n\t        if (lang_1.isPresent(this._contentAttr)) {\r\n\t            dom_adapter_1.DOM.setAttribute(el, this._contentAttr, '');\r\n\t        }\r\n\t        if (lang_1.isPresent(parent)) {\r\n\t            dom_adapter_1.DOM.appendChild(parent, el);\r\n\t        }\r\n\t        return el;\r\n\t    };\r\n\t    DomRenderer.prototype.createViewRoot = function (hostElement) {\r\n\t        var nodesParent;\r\n\t        if (this.componentProto.encapsulation === metadata_1.ViewEncapsulation.Native) {\r\n\t            nodesParent = dom_adapter_1.DOM.createShadowRoot(hostElement);\r\n\t            this._rootRenderer.sharedStylesHost.addHost(nodesParent);\r\n\t            for (var i = 0; i < this._styles.length; i++) {\r\n\t                dom_adapter_1.DOM.appendChild(nodesParent, dom_adapter_1.DOM.createStyleElement(this._styles[i]));\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (lang_1.isPresent(this._hostAttr)) {\r\n\t                dom_adapter_1.DOM.setAttribute(hostElement, this._hostAttr, '');\r\n\t            }\r\n\t            nodesParent = hostElement;\r\n\t        }\r\n\t        return nodesParent;\r\n\t    };\r\n\t    DomRenderer.prototype.createTemplateAnchor = function (parentElement) {\r\n\t        var comment = dom_adapter_1.DOM.createComment(TEMPLATE_COMMENT_TEXT);\r\n\t        if (lang_1.isPresent(parentElement)) {\r\n\t            dom_adapter_1.DOM.appendChild(parentElement, comment);\r\n\t        }\r\n\t        return comment;\r\n\t    };\r\n\t    DomRenderer.prototype.createText = function (parentElement, value) {\r\n\t        var node = dom_adapter_1.DOM.createTextNode(value);\r\n\t        if (lang_1.isPresent(parentElement)) {\r\n\t            dom_adapter_1.DOM.appendChild(parentElement, node);\r\n\t        }\r\n\t        return node;\r\n\t    };\r\n\t    DomRenderer.prototype.projectNodes = function (parentElement, nodes) {\r\n\t        if (lang_1.isBlank(parentElement))\r\n\t            return;\r\n\t        appendNodes(parentElement, nodes);\r\n\t    };\r\n\t    DomRenderer.prototype.attachViewAfter = function (node, viewRootNodes) {\r\n\t        moveNodesAfterSibling(node, viewRootNodes);\r\n\t        for (var i = 0; i < viewRootNodes.length; i++)\r\n\t            this.animateNodeEnter(viewRootNodes[i]);\r\n\t    };\r\n\t    DomRenderer.prototype.detachView = function (viewRootNodes) {\r\n\t        for (var i = 0; i < viewRootNodes.length; i++) {\r\n\t            var node = viewRootNodes[i];\r\n\t            dom_adapter_1.DOM.remove(node);\r\n\t            this.animateNodeLeave(node);\r\n\t        }\r\n\t    };\r\n\t    DomRenderer.prototype.destroyView = function (hostElement, viewAllNodes) {\r\n\t        if (this.componentProto.encapsulation === metadata_1.ViewEncapsulation.Native && lang_1.isPresent(hostElement)) {\r\n\t            this._rootRenderer.sharedStylesHost.removeHost(dom_adapter_1.DOM.getShadowRoot(hostElement));\r\n\t        }\r\n\t    };\r\n\t    DomRenderer.prototype.listen = function (renderElement, name, callback) {\r\n\t        return this._rootRenderer.eventManager.addEventListener(renderElement, name, decoratePreventDefault(callback));\r\n\t    };\r\n\t    DomRenderer.prototype.listenGlobal = function (target, name, callback) {\r\n\t        return this._rootRenderer.eventManager.addGlobalEventListener(target, name, decoratePreventDefault(callback));\r\n\t    };\r\n\t    DomRenderer.prototype.setElementProperty = function (renderElement, propertyName, propertyValue) {\r\n\t        dom_adapter_1.DOM.setProperty(renderElement, propertyName, propertyValue);\r\n\t    };\r\n\t    DomRenderer.prototype.setElementAttribute = function (renderElement, attributeName, attributeValue) {\r\n\t        var attrNs;\r\n\t        var nsAndName = splitNamespace(attributeName);\r\n\t        if (lang_1.isPresent(nsAndName[0])) {\r\n\t            attributeName = nsAndName[0] + ':' + nsAndName[1];\r\n\t            attrNs = NAMESPACE_URIS[nsAndName[0]];\r\n\t        }\r\n\t        if (lang_1.isPresent(attributeValue)) {\r\n\t            if (lang_1.isPresent(attrNs)) {\r\n\t                dom_adapter_1.DOM.setAttributeNS(renderElement, attrNs, attributeName, attributeValue);\r\n\t            }\r\n\t            else {\r\n\t                dom_adapter_1.DOM.setAttribute(renderElement, attributeName, attributeValue);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (lang_1.isPresent(attrNs)) {\r\n\t                dom_adapter_1.DOM.removeAttributeNS(renderElement, attrNs, nsAndName[1]);\r\n\t            }\r\n\t            else {\r\n\t                dom_adapter_1.DOM.removeAttribute(renderElement, attributeName);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DomRenderer.prototype.setBindingDebugInfo = function (renderElement, propertyName, propertyValue) {\r\n\t        var dashCasedPropertyName = util_1.camelCaseToDashCase(propertyName);\r\n\t        if (dom_adapter_1.DOM.isCommentNode(renderElement)) {\r\n\t            var existingBindings = lang_1.RegExpWrapper.firstMatch(TEMPLATE_BINDINGS_EXP, lang_1.StringWrapper.replaceAll(dom_adapter_1.DOM.getText(renderElement), /\\n/g, ''));\r\n\t            var parsedBindings = lang_1.Json.parse(existingBindings[1]);\r\n\t            parsedBindings[dashCasedPropertyName] = propertyValue;\r\n\t            dom_adapter_1.DOM.setText(renderElement, lang_1.StringWrapper.replace(TEMPLATE_COMMENT_TEXT, '{}', lang_1.Json.stringify(parsedBindings)));\r\n\t        }\r\n\t        else {\r\n\t            this.setElementAttribute(renderElement, propertyName, propertyValue);\r\n\t        }\r\n\t    };\r\n\t    DomRenderer.prototype.setElementDebugInfo = function (renderElement, info) { };\r\n\t    DomRenderer.prototype.setElementClass = function (renderElement, className, isAdd) {\r\n\t        if (isAdd) {\r\n\t            dom_adapter_1.DOM.addClass(renderElement, className);\r\n\t        }\r\n\t        else {\r\n\t            dom_adapter_1.DOM.removeClass(renderElement, className);\r\n\t        }\r\n\t    };\r\n\t    DomRenderer.prototype.setElementStyle = function (renderElement, styleName, styleValue) {\r\n\t        if (lang_1.isPresent(styleValue)) {\r\n\t            dom_adapter_1.DOM.setStyle(renderElement, styleName, lang_1.stringify(styleValue));\r\n\t        }\r\n\t        else {\r\n\t            dom_adapter_1.DOM.removeStyle(renderElement, styleName);\r\n\t        }\r\n\t    };\r\n\t    DomRenderer.prototype.invokeElementMethod = function (renderElement, methodName, args) {\r\n\t        dom_adapter_1.DOM.invoke(renderElement, methodName, args);\r\n\t    };\r\n\t    DomRenderer.prototype.setText = function (renderNode, text) { dom_adapter_1.DOM.setText(renderNode, text); };\r\n\t    /**\r\n\t     * Performs animations if necessary\r\n\t     * @param node\r\n\t     */\r\n\t    DomRenderer.prototype.animateNodeEnter = function (node) {\r\n\t        if (dom_adapter_1.DOM.isElementNode(node) && dom_adapter_1.DOM.hasClass(node, 'ng-animate')) {\r\n\t            dom_adapter_1.DOM.addClass(node, 'ng-enter');\r\n\t            this._rootRenderer.animate.css()\r\n\t                .addAnimationClass('ng-enter-active')\r\n\t                .start(node)\r\n\t                .onComplete(function () { dom_adapter_1.DOM.removeClass(node, 'ng-enter'); });\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * If animations are necessary, performs animations then removes the element; otherwise, it just\r\n\t     * removes the element.\r\n\t     * @param node\r\n\t     */\r\n\t    DomRenderer.prototype.animateNodeLeave = function (node) {\r\n\t        if (dom_adapter_1.DOM.isElementNode(node) && dom_adapter_1.DOM.hasClass(node, 'ng-animate')) {\r\n\t            dom_adapter_1.DOM.addClass(node, 'ng-leave');\r\n\t            this._rootRenderer.animate.css()\r\n\t                .addAnimationClass('ng-leave-active')\r\n\t                .start(node)\r\n\t                .onComplete(function () {\r\n\t                dom_adapter_1.DOM.removeClass(node, 'ng-leave');\r\n\t                dom_adapter_1.DOM.remove(node);\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            dom_adapter_1.DOM.remove(node);\r\n\t        }\r\n\t    };\r\n\t    return DomRenderer;\r\n\t})();\r\n\texports.DomRenderer = DomRenderer;\r\n\tfunction moveNodesAfterSibling(sibling, nodes) {\r\n\t    var parent = dom_adapter_1.DOM.parentElement(sibling);\r\n\t    if (nodes.length > 0 && lang_1.isPresent(parent)) {\r\n\t        var nextSibling = dom_adapter_1.DOM.nextSibling(sibling);\r\n\t        if (lang_1.isPresent(nextSibling)) {\r\n\t            for (var i = 0; i < nodes.length; i++) {\r\n\t                dom_adapter_1.DOM.insertBefore(nextSibling, nodes[i]);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            for (var i = 0; i < nodes.length; i++) {\r\n\t                dom_adapter_1.DOM.appendChild(parent, nodes[i]);\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t}\r\n\tfunction appendNodes(parent, nodes) {\r\n\t    for (var i = 0; i < nodes.length; i++) {\r\n\t        dom_adapter_1.DOM.appendChild(parent, nodes[i]);\r\n\t    }\r\n\t}\r\n\tfunction decoratePreventDefault(eventHandler) {\r\n\t    return function (event) {\r\n\t        var allowDefaultBehavior = eventHandler(event);\r\n\t        if (allowDefaultBehavior === false) {\r\n\t            // TODO(tbosch): move preventDefault into event plugins...\r\n\t            dom_adapter_1.DOM.preventDefault(event);\r\n\t        }\r\n\t    };\r\n\t}\r\n\tvar COMPONENT_REGEX = /%COMP%/g;\r\n\texports.COMPONENT_VARIABLE = '%COMP%';\r\n\texports.HOST_ATTR = \"_nghost-\" + exports.COMPONENT_VARIABLE;\r\n\texports.CONTENT_ATTR = \"_ngcontent-\" + exports.COMPONENT_VARIABLE;\r\n\tfunction _shimContentAttribute(componentShortId) {\r\n\t    return lang_1.StringWrapper.replaceAll(exports.CONTENT_ATTR, COMPONENT_REGEX, componentShortId);\r\n\t}\r\n\tfunction _shimHostAttribute(componentShortId) {\r\n\t    return lang_1.StringWrapper.replaceAll(exports.HOST_ATTR, COMPONENT_REGEX, componentShortId);\r\n\t}\r\n\tfunction _flattenStyles(compId, styles, target) {\r\n\t    for (var i = 0; i < styles.length; i++) {\r\n\t        var style = styles[i];\r\n\t        if (lang_1.isArray(style)) {\r\n\t            _flattenStyles(compId, style, target);\r\n\t        }\r\n\t        else {\r\n\t            style = lang_1.StringWrapper.replaceAll(style, COMPONENT_REGEX, compId);\r\n\t            target.push(style);\r\n\t        }\r\n\t    }\r\n\t    return target;\r\n\t}\r\n\tvar NS_PREFIX_RE = /^@([^:]+):(.+)/g;\r\n\tfunction splitNamespace(name) {\r\n\t    if (name[0] != '@') {\r\n\t        return [null, name];\r\n\t    }\r\n\t    var match = lang_1.RegExpWrapper.firstMatch(NS_PREFIX_RE, name);\r\n\t    return [match[1], match[2]];\r\n\t}\r\n\n\n/***/ },\n/* 212 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar RouteLifecycleHook = (function () {\r\n\t    function RouteLifecycleHook(name) {\r\n\t        this.name = name;\r\n\t    }\r\n\t    RouteLifecycleHook = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], RouteLifecycleHook);\r\n\t    return RouteLifecycleHook;\r\n\t})();\r\n\texports.RouteLifecycleHook = RouteLifecycleHook;\r\n\tvar CanActivate = (function () {\r\n\t    function CanActivate(fn) {\r\n\t        this.fn = fn;\r\n\t    }\r\n\t    CanActivate = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Function])\r\n\t    ], CanActivate);\r\n\t    return CanActivate;\r\n\t})();\r\n\texports.CanActivate = CanActivate;\r\n\texports.routerCanReuse = lang_1.CONST_EXPR(new RouteLifecycleHook(\"routerCanReuse\"));\r\n\texports.routerCanDeactivate = lang_1.CONST_EXPR(new RouteLifecycleHook(\"routerCanDeactivate\"));\r\n\texports.routerOnActivate = lang_1.CONST_EXPR(new RouteLifecycleHook(\"routerOnActivate\"));\r\n\texports.routerOnReuse = lang_1.CONST_EXPR(new RouteLifecycleHook(\"routerOnReuse\"));\r\n\texports.routerOnDeactivate = lang_1.CONST_EXPR(new RouteLifecycleHook(\"routerOnDeactivate\"));\r\n\n\n/***/ },\n/* 213 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar route_config_impl_1 = __webpack_require__(141);\r\n\tvar rules_1 = __webpack_require__(335);\r\n\tvar rule_set_1 = __webpack_require__(645);\r\n\tvar instruction_1 = __webpack_require__(65);\r\n\tvar route_config_normalizer_1 = __webpack_require__(638);\r\n\tvar url_parser_1 = __webpack_require__(214);\r\n\tvar _resolveToNull = async_1.PromiseWrapper.resolve(null);\r\n\t// A LinkItemArray is an array, which describes a set of routes\r\n\t// The items in the array are found in groups:\r\n\t// - the first item is the name of the route\r\n\t// - the next items are:\r\n\t//   - an object containing parameters\r\n\t//   - or an array describing an aux route\r\n\t// export type LinkRouteItem = string | Object;\r\n\t// export type LinkItem = LinkRouteItem | Array<LinkRouteItem>;\r\n\t// export type LinkItemArray = Array<LinkItem>;\r\n\t/**\r\n\t * Token used to bind the component with the top-level {@link RouteConfig}s for the\r\n\t * application.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {\r\n\t *   ROUTER_DIRECTIVES,\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   RouteConfig\r\n\t * } from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   // ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\r\n\t * ```\r\n\t */\r\n\texports.ROUTER_PRIMARY_COMPONENT = lang_1.CONST_EXPR(new core_1.OpaqueToken('RouterPrimaryComponent'));\r\n\t/**\r\n\t * The RouteRegistry holds route configurations for each component in an Angular app.\r\n\t * It is responsible for creating Instructions from URLs, and generating URLs based on route and\r\n\t * parameters.\r\n\t */\r\n\tvar RouteRegistry = (function () {\r\n\t    function RouteRegistry(_rootComponent) {\r\n\t        this._rootComponent = _rootComponent;\r\n\t        this._rules = new collection_1.Map();\r\n\t    }\r\n\t    /**\r\n\t     * Given a component and a configuration object, add the route to this registry\r\n\t     */\r\n\t    RouteRegistry.prototype.config = function (parentComponent, config) {\r\n\t        config = route_config_normalizer_1.normalizeRouteConfig(config, this);\r\n\t        // this is here because Dart type guard reasons\r\n\t        if (config instanceof route_config_impl_1.Route) {\r\n\t            route_config_normalizer_1.assertComponentExists(config.component, config.path);\r\n\t        }\r\n\t        else if (config instanceof route_config_impl_1.AuxRoute) {\r\n\t            route_config_normalizer_1.assertComponentExists(config.component, config.path);\r\n\t        }\r\n\t        var rules = this._rules.get(parentComponent);\r\n\t        if (lang_1.isBlank(rules)) {\r\n\t            rules = new rule_set_1.RuleSet();\r\n\t            this._rules.set(parentComponent, rules);\r\n\t        }\r\n\t        var terminal = rules.config(config);\r\n\t        if (config instanceof route_config_impl_1.Route) {\r\n\t            if (terminal) {\r\n\t                assertTerminalComponent(config.component, config.path);\r\n\t            }\r\n\t            else {\r\n\t                this.configFromComponent(config.component);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Reads the annotations of a component and configures the registry based on them\r\n\t     */\r\n\t    RouteRegistry.prototype.configFromComponent = function (component) {\r\n\t        var _this = this;\r\n\t        if (!lang_1.isType(component)) {\r\n\t            return;\r\n\t        }\r\n\t        // Don't read the annotations from a type more than once –\r\n\t        // this prevents an infinite loop if a component routes recursively.\r\n\t        if (this._rules.has(component)) {\r\n\t            return;\r\n\t        }\r\n\t        var annotations = reflection_1.reflector.annotations(component);\r\n\t        if (lang_1.isPresent(annotations)) {\r\n\t            for (var i = 0; i < annotations.length; i++) {\r\n\t                var annotation = annotations[i];\r\n\t                if (annotation instanceof route_config_impl_1.RouteConfig) {\r\n\t                    var routeCfgs = annotation.configs;\r\n\t                    routeCfgs.forEach(function (config) { return _this.config(component, config); });\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Given a URL and a parent component, return the most specific instruction for navigating\r\n\t     * the application into the state specified by the url\r\n\t     */\r\n\t    RouteRegistry.prototype.recognize = function (url, ancestorInstructions) {\r\n\t        var parsedUrl = url_parser_1.parser.parse(url);\r\n\t        return this._recognize(parsedUrl, []);\r\n\t    };\r\n\t    /**\r\n\t     * Recognizes all parent-child routes, but creates unresolved auxiliary routes\r\n\t     */\r\n\t    RouteRegistry.prototype._recognize = function (parsedUrl, ancestorInstructions, _aux) {\r\n\t        var _this = this;\r\n\t        if (_aux === void 0) { _aux = false; }\r\n\t        var parentInstruction = collection_1.ListWrapper.last(ancestorInstructions);\r\n\t        var parentComponent = lang_1.isPresent(parentInstruction) ? parentInstruction.component.componentType :\r\n\t            this._rootComponent;\r\n\t        var rules = this._rules.get(parentComponent);\r\n\t        if (lang_1.isBlank(rules)) {\r\n\t            return _resolveToNull;\r\n\t        }\r\n\t        // Matches some beginning part of the given URL\r\n\t        var possibleMatches = _aux ? rules.recognizeAuxiliary(parsedUrl) : rules.recognize(parsedUrl);\r\n\t        var matchPromises = possibleMatches.map(function (candidate) { return candidate.then(function (candidate) {\r\n\t            if (candidate instanceof rules_1.PathMatch) {\r\n\t                var auxParentInstructions = ancestorInstructions.length > 0 ? [collection_1.ListWrapper.last(ancestorInstructions)] : [];\r\n\t                var auxInstructions = _this._auxRoutesToUnresolved(candidate.remainingAux, auxParentInstructions);\r\n\t                var instruction = new instruction_1.ResolvedInstruction(candidate.instruction, null, auxInstructions);\r\n\t                if (lang_1.isBlank(candidate.instruction) || candidate.instruction.terminal) {\r\n\t                    return instruction;\r\n\t                }\r\n\t                var newAncestorInstructions = ancestorInstructions.concat([instruction]);\r\n\t                return _this._recognize(candidate.remaining, newAncestorInstructions)\r\n\t                    .then(function (childInstruction) {\r\n\t                    if (lang_1.isBlank(childInstruction)) {\r\n\t                        return null;\r\n\t                    }\r\n\t                    // redirect instructions are already absolute\r\n\t                    if (childInstruction instanceof instruction_1.RedirectInstruction) {\r\n\t                        return childInstruction;\r\n\t                    }\r\n\t                    instruction.child = childInstruction;\r\n\t                    return instruction;\r\n\t                });\r\n\t            }\r\n\t            if (candidate instanceof rules_1.RedirectMatch) {\r\n\t                var instruction = _this.generate(candidate.redirectTo, ancestorInstructions.concat([null]));\r\n\t                return new instruction_1.RedirectInstruction(instruction.component, instruction.child, instruction.auxInstruction, candidate.specificity);\r\n\t            }\r\n\t        }); });\r\n\t        if ((lang_1.isBlank(parsedUrl) || parsedUrl.path == '') && possibleMatches.length == 0) {\r\n\t            return async_1.PromiseWrapper.resolve(this.generateDefault(parentComponent));\r\n\t        }\r\n\t        return async_1.PromiseWrapper.all(matchPromises).then(mostSpecific);\r\n\t    };\r\n\t    RouteRegistry.prototype._auxRoutesToUnresolved = function (auxRoutes, parentInstructions) {\r\n\t        var _this = this;\r\n\t        var unresolvedAuxInstructions = {};\r\n\t        auxRoutes.forEach(function (auxUrl) {\r\n\t            unresolvedAuxInstructions[auxUrl.path] = new instruction_1.UnresolvedInstruction(function () { return _this._recognize(auxUrl, parentInstructions, true); });\r\n\t        });\r\n\t        return unresolvedAuxInstructions;\r\n\t    };\r\n\t    /**\r\n\t     * Given a normalized list with component names and params like: `['user', {id: 3 }]`\r\n\t     * generates a url with a leading slash relative to the provided `parentComponent`.\r\n\t     *\r\n\t     * If the optional param `_aux` is `true`, then we generate starting at an auxiliary\r\n\t     * route boundary.\r\n\t     */\r\n\t    RouteRegistry.prototype.generate = function (linkParams, ancestorInstructions, _aux) {\r\n\t        if (_aux === void 0) { _aux = false; }\r\n\t        var params = splitAndFlattenLinkParams(linkParams);\r\n\t        var prevInstruction;\r\n\t        // The first segment should be either '.' (generate from parent) or '' (generate from root).\r\n\t        // When we normalize above, we strip all the slashes, './' becomes '.' and '/' becomes ''.\r\n\t        if (collection_1.ListWrapper.first(params) == '') {\r\n\t            params.shift();\r\n\t            prevInstruction = collection_1.ListWrapper.first(ancestorInstructions);\r\n\t            ancestorInstructions = [];\r\n\t        }\r\n\t        else {\r\n\t            prevInstruction = ancestorInstructions.length > 0 ? ancestorInstructions.pop() : null;\r\n\t            if (collection_1.ListWrapper.first(params) == '.') {\r\n\t                params.shift();\r\n\t            }\r\n\t            else if (collection_1.ListWrapper.first(params) == '..') {\r\n\t                while (collection_1.ListWrapper.first(params) == '..') {\r\n\t                    if (ancestorInstructions.length <= 0) {\r\n\t                        throw new exceptions_1.BaseException(\"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" has too many \\\"../\\\" segments.\");\r\n\t                    }\r\n\t                    prevInstruction = ancestorInstructions.pop();\r\n\t                    params = collection_1.ListWrapper.slice(params, 1);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                // we must only peak at the link param, and not consume it\r\n\t                var routeName = collection_1.ListWrapper.first(params);\r\n\t                var parentComponentType = this._rootComponent;\r\n\t                var grandparentComponentType = null;\r\n\t                if (ancestorInstructions.length > 1) {\r\n\t                    var parentComponentInstruction = ancestorInstructions[ancestorInstructions.length - 1];\r\n\t                    var grandComponentInstruction = ancestorInstructions[ancestorInstructions.length - 2];\r\n\t                    parentComponentType = parentComponentInstruction.component.componentType;\r\n\t                    grandparentComponentType = grandComponentInstruction.component.componentType;\r\n\t                }\r\n\t                else if (ancestorInstructions.length == 1) {\r\n\t                    parentComponentType = ancestorInstructions[0].component.componentType;\r\n\t                    grandparentComponentType = this._rootComponent;\r\n\t                }\r\n\t                // For a link with no leading `./`, `/`, or `../`, we look for a sibling and child.\r\n\t                // If both exist, we throw. Otherwise, we prefer whichever exists.\r\n\t                var childRouteExists = this.hasRoute(routeName, parentComponentType);\r\n\t                var parentRouteExists = lang_1.isPresent(grandparentComponentType) &&\r\n\t                    this.hasRoute(routeName, grandparentComponentType);\r\n\t                if (parentRouteExists && childRouteExists) {\r\n\t                    var msg = \"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" is ambiguous, use \\\"./\\\" or \\\"../\\\" to disambiguate.\";\r\n\t                    throw new exceptions_1.BaseException(msg);\r\n\t                }\r\n\t                if (parentRouteExists) {\r\n\t                    prevInstruction = ancestorInstructions.pop();\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (params[params.length - 1] == '') {\r\n\t            params.pop();\r\n\t        }\r\n\t        if (params.length > 0 && params[0] == '') {\r\n\t            params.shift();\r\n\t        }\r\n\t        if (params.length < 1) {\r\n\t            var msg = \"Link \\\"\" + collection_1.ListWrapper.toJSON(linkParams) + \"\\\" must include a route name.\";\r\n\t            throw new exceptions_1.BaseException(msg);\r\n\t        }\r\n\t        var generatedInstruction = this._generate(params, ancestorInstructions, prevInstruction, _aux, linkParams);\r\n\t        // we don't clone the first (root) element\r\n\t        for (var i = ancestorInstructions.length - 1; i >= 0; i--) {\r\n\t            var ancestorInstruction = ancestorInstructions[i];\r\n\t            if (lang_1.isBlank(ancestorInstruction)) {\r\n\t                break;\r\n\t            }\r\n\t            generatedInstruction = ancestorInstruction.replaceChild(generatedInstruction);\r\n\t        }\r\n\t        return generatedInstruction;\r\n\t    };\r\n\t    /*\r\n\t     * Internal helper that does not make any assertions about the beginning of the link DSL.\r\n\t     * `ancestorInstructions` are parents that will be cloned.\r\n\t     * `prevInstruction` is the existing instruction that would be replaced, but which might have\r\n\t     * aux routes that need to be cloned.\r\n\t     */\r\n\t    RouteRegistry.prototype._generate = function (linkParams, ancestorInstructions, prevInstruction, _aux, _originalLink) {\r\n\t        var _this = this;\r\n\t        if (_aux === void 0) { _aux = false; }\r\n\t        var parentComponentType = this._rootComponent;\r\n\t        var componentInstruction = null;\r\n\t        var auxInstructions = {};\r\n\t        var parentInstruction = collection_1.ListWrapper.last(ancestorInstructions);\r\n\t        if (lang_1.isPresent(parentInstruction) && lang_1.isPresent(parentInstruction.component)) {\r\n\t            parentComponentType = parentInstruction.component.componentType;\r\n\t        }\r\n\t        if (linkParams.length == 0) {\r\n\t            var defaultInstruction = this.generateDefault(parentComponentType);\r\n\t            if (lang_1.isBlank(defaultInstruction)) {\r\n\t                throw new exceptions_1.BaseException(\"Link \\\"\" + collection_1.ListWrapper.toJSON(_originalLink) + \"\\\" does not resolve to a terminal instruction.\");\r\n\t            }\r\n\t            return defaultInstruction;\r\n\t        }\r\n\t        // for non-aux routes, we want to reuse the predecessor's existing primary and aux routes\r\n\t        // and only override routes for which the given link DSL provides\r\n\t        if (lang_1.isPresent(prevInstruction) && !_aux) {\r\n\t            auxInstructions = collection_1.StringMapWrapper.merge(prevInstruction.auxInstruction, auxInstructions);\r\n\t            componentInstruction = prevInstruction.component;\r\n\t        }\r\n\t        var rules = this._rules.get(parentComponentType);\r\n\t        if (lang_1.isBlank(rules)) {\r\n\t            throw new exceptions_1.BaseException(\"Component \\\"\" + lang_1.getTypeNameForDebugging(parentComponentType) + \"\\\" has no route config.\");\r\n\t        }\r\n\t        var linkParamIndex = 0;\r\n\t        var routeParams = {};\r\n\t        // first, recognize the primary route if one is provided\r\n\t        if (linkParamIndex < linkParams.length && lang_1.isString(linkParams[linkParamIndex])) {\r\n\t            var routeName = linkParams[linkParamIndex];\r\n\t            if (routeName == '' || routeName == '.' || routeName == '..') {\r\n\t                throw new exceptions_1.BaseException(\"\\\"\" + routeName + \"/\\\" is only allowed at the beginning of a link DSL.\");\r\n\t            }\r\n\t            linkParamIndex += 1;\r\n\t            if (linkParamIndex < linkParams.length) {\r\n\t                var linkParam = linkParams[linkParamIndex];\r\n\t                if (lang_1.isStringMap(linkParam) && !lang_1.isArray(linkParam)) {\r\n\t                    routeParams = linkParam;\r\n\t                    linkParamIndex += 1;\r\n\t                }\r\n\t            }\r\n\t            var routeRecognizer = (_aux ? rules.auxRulesByName : rules.rulesByName).get(routeName);\r\n\t            if (lang_1.isBlank(routeRecognizer)) {\r\n\t                throw new exceptions_1.BaseException(\"Component \\\"\" + lang_1.getTypeNameForDebugging(parentComponentType) + \"\\\" has no route named \\\"\" + routeName + \"\\\".\");\r\n\t            }\r\n\t            // Create an \"unresolved instruction\" for async routes\r\n\t            // we'll figure out the rest of the route when we resolve the instruction and\r\n\t            // perform a navigation\r\n\t            if (lang_1.isBlank(routeRecognizer.handler.componentType)) {\r\n\t                var generatedUrl = routeRecognizer.generateComponentPathValues(routeParams);\r\n\t                return new instruction_1.UnresolvedInstruction(function () {\r\n\t                    return routeRecognizer.handler.resolveComponentType().then(function (_) {\r\n\t                        return _this._generate(linkParams, ancestorInstructions, prevInstruction, _aux, _originalLink);\r\n\t                    });\r\n\t                }, generatedUrl.urlPath, url_parser_1.convertUrlParamsToArray(generatedUrl.urlParams));\r\n\t            }\r\n\t            componentInstruction = _aux ? rules.generateAuxiliary(routeName, routeParams) :\r\n\t                rules.generate(routeName, routeParams);\r\n\t        }\r\n\t        // Next, recognize auxiliary instructions.\r\n\t        // If we have an ancestor instruction, we preserve whatever aux routes are active from it.\r\n\t        while (linkParamIndex < linkParams.length && lang_1.isArray(linkParams[linkParamIndex])) {\r\n\t            var auxParentInstruction = [parentInstruction];\r\n\t            var auxInstruction = this._generate(linkParams[linkParamIndex], auxParentInstruction, null, true, _originalLink);\r\n\t            // TODO: this will not work for aux routes with parameters or multiple segments\r\n\t            auxInstructions[auxInstruction.component.urlPath] = auxInstruction;\r\n\t            linkParamIndex += 1;\r\n\t        }\r\n\t        var instruction = new instruction_1.ResolvedInstruction(componentInstruction, null, auxInstructions);\r\n\t        // If the component is sync, we can generate resolved child route instructions\r\n\t        // If not, we'll resolve the instructions at navigation time\r\n\t        if (lang_1.isPresent(componentInstruction) && lang_1.isPresent(componentInstruction.componentType)) {\r\n\t            var childInstruction = null;\r\n\t            if (componentInstruction.terminal) {\r\n\t                if (linkParamIndex >= linkParams.length) {\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                var childAncestorComponents = ancestorInstructions.concat([instruction]);\r\n\t                var remainingLinkParams = linkParams.slice(linkParamIndex);\r\n\t                childInstruction = this._generate(remainingLinkParams, childAncestorComponents, null, false, _originalLink);\r\n\t            }\r\n\t            instruction.child = childInstruction;\r\n\t        }\r\n\t        return instruction;\r\n\t    };\r\n\t    RouteRegistry.prototype.hasRoute = function (name, parentComponent) {\r\n\t        var rules = this._rules.get(parentComponent);\r\n\t        if (lang_1.isBlank(rules)) {\r\n\t            return false;\r\n\t        }\r\n\t        return rules.hasRoute(name);\r\n\t    };\r\n\t    RouteRegistry.prototype.generateDefault = function (componentCursor) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isBlank(componentCursor)) {\r\n\t            return null;\r\n\t        }\r\n\t        var rules = this._rules.get(componentCursor);\r\n\t        if (lang_1.isBlank(rules) || lang_1.isBlank(rules.defaultRule)) {\r\n\t            return null;\r\n\t        }\r\n\t        var defaultChild = null;\r\n\t        if (lang_1.isPresent(rules.defaultRule.handler.componentType)) {\r\n\t            var componentInstruction = rules.defaultRule.generate({});\r\n\t            if (!rules.defaultRule.terminal) {\r\n\t                defaultChild = this.generateDefault(rules.defaultRule.handler.componentType);\r\n\t            }\r\n\t            return new instruction_1.DefaultInstruction(componentInstruction, defaultChild);\r\n\t        }\r\n\t        return new instruction_1.UnresolvedInstruction(function () {\r\n\t            return rules.defaultRule.handler.resolveComponentType().then(function (_) { return _this.generateDefault(componentCursor); });\r\n\t        });\r\n\t    };\r\n\t    RouteRegistry = __decorate([\r\n\t        core_1.Injectable(),\r\n\t        __param(0, core_1.Inject(exports.ROUTER_PRIMARY_COMPONENT)), \r\n\t        __metadata('design:paramtypes', [lang_1.Type])\r\n\t    ], RouteRegistry);\r\n\t    return RouteRegistry;\r\n\t})();\r\n\texports.RouteRegistry = RouteRegistry;\r\n\t/*\r\n\t * Given: ['/a/b', {c: 2}]\r\n\t * Returns: ['', 'a', 'b', {c: 2}]\r\n\t */\r\n\tfunction splitAndFlattenLinkParams(linkParams) {\r\n\t    var accumulation = [];\r\n\t    linkParams.forEach(function (item) {\r\n\t        if (lang_1.isString(item)) {\r\n\t            var strItem = item;\r\n\t            accumulation = accumulation.concat(strItem.split('/'));\r\n\t        }\r\n\t        else {\r\n\t            accumulation.push(item);\r\n\t        }\r\n\t    });\r\n\t    return accumulation;\r\n\t}\r\n\t/*\r\n\t * Given a list of instructions, returns the most specific instruction\r\n\t */\r\n\tfunction mostSpecific(instructions) {\r\n\t    instructions = instructions.filter(function (instruction) { return lang_1.isPresent(instruction); });\r\n\t    if (instructions.length == 0) {\r\n\t        return null;\r\n\t    }\r\n\t    if (instructions.length == 1) {\r\n\t        return instructions[0];\r\n\t    }\r\n\t    var first = instructions[0];\r\n\t    var rest = instructions.slice(1);\r\n\t    return rest.reduce(function (instruction, contender) {\r\n\t        if (compareSpecificityStrings(contender.specificity, instruction.specificity) == -1) {\r\n\t            return contender;\r\n\t        }\r\n\t        return instruction;\r\n\t    }, first);\r\n\t}\r\n\t/*\r\n\t * Expects strings to be in the form of \"[0-2]+\"\r\n\t * Returns -1 if string A should be sorted above string B, 1 if it should be sorted after,\r\n\t * or 0 if they are the same.\r\n\t */\r\n\tfunction compareSpecificityStrings(a, b) {\r\n\t    var l = lang_1.Math.min(a.length, b.length);\r\n\t    for (var i = 0; i < l; i += 1) {\r\n\t        var ai = lang_1.StringWrapper.charCodeAt(a, i);\r\n\t        var bi = lang_1.StringWrapper.charCodeAt(b, i);\r\n\t        var difference = bi - ai;\r\n\t        if (difference != 0) {\r\n\t            return difference;\r\n\t        }\r\n\t    }\r\n\t    return a.length - b.length;\r\n\t}\r\n\tfunction assertTerminalComponent(component, path) {\r\n\t    if (!lang_1.isType(component)) {\r\n\t        return;\r\n\t    }\r\n\t    var annotations = reflection_1.reflector.annotations(component);\r\n\t    if (lang_1.isPresent(annotations)) {\r\n\t        for (var i = 0; i < annotations.length; i++) {\r\n\t            var annotation = annotations[i];\r\n\t            if (annotation instanceof route_config_impl_1.RouteConfig) {\r\n\t                throw new exceptions_1.BaseException(\"Child routes are not allowed for \\\"\" + path + \"\\\". Use \\\"...\\\" on the parent's route path.\");\r\n\t            }\r\n\t        }\r\n\t    }\r\n\t}\r\n\n\n/***/ },\n/* 214 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tfunction convertUrlParamsToArray(urlParams) {\r\n\t    var paramsArray = [];\r\n\t    if (lang_1.isBlank(urlParams)) {\r\n\t        return [];\r\n\t    }\r\n\t    collection_1.StringMapWrapper.forEach(urlParams, function (value, key) { paramsArray.push((value === true) ? key : key + '=' + value); });\r\n\t    return paramsArray;\r\n\t}\r\n\texports.convertUrlParamsToArray = convertUrlParamsToArray;\r\n\t// Convert an object of url parameters into a string that can be used in an URL\r\n\tfunction serializeParams(urlParams, joiner) {\r\n\t    if (joiner === void 0) { joiner = '&'; }\r\n\t    return convertUrlParamsToArray(urlParams).join(joiner);\r\n\t}\r\n\texports.serializeParams = serializeParams;\r\n\t/**\r\n\t * This class represents a parsed URL\r\n\t */\r\n\tvar Url = (function () {\r\n\t    function Url(path, child, auxiliary, params) {\r\n\t        if (child === void 0) { child = null; }\r\n\t        if (auxiliary === void 0) { auxiliary = lang_1.CONST_EXPR([]); }\r\n\t        if (params === void 0) { params = lang_1.CONST_EXPR({}); }\r\n\t        this.path = path;\r\n\t        this.child = child;\r\n\t        this.auxiliary = auxiliary;\r\n\t        this.params = params;\r\n\t    }\r\n\t    Url.prototype.toString = function () {\r\n\t        return this.path + this._matrixParamsToString() + this._auxToString() + this._childString();\r\n\t    };\r\n\t    Url.prototype.segmentToString = function () { return this.path + this._matrixParamsToString(); };\r\n\t    /** @internal */\r\n\t    Url.prototype._auxToString = function () {\r\n\t        return this.auxiliary.length > 0 ?\r\n\t            ('(' + this.auxiliary.map(function (sibling) { return sibling.toString(); }).join('//') + ')') :\r\n\t            '';\r\n\t    };\r\n\t    Url.prototype._matrixParamsToString = function () {\r\n\t        var paramString = serializeParams(this.params, ';');\r\n\t        if (paramString.length > 0) {\r\n\t            return ';' + paramString;\r\n\t        }\r\n\t        return '';\r\n\t    };\r\n\t    /** @internal */\r\n\t    Url.prototype._childString = function () { return lang_1.isPresent(this.child) ? ('/' + this.child.toString()) : ''; };\r\n\t    return Url;\r\n\t})();\r\n\texports.Url = Url;\r\n\tvar RootUrl = (function (_super) {\r\n\t    __extends(RootUrl, _super);\r\n\t    function RootUrl(path, child, auxiliary, params) {\r\n\t        if (child === void 0) { child = null; }\r\n\t        if (auxiliary === void 0) { auxiliary = lang_1.CONST_EXPR([]); }\r\n\t        if (params === void 0) { params = null; }\r\n\t        _super.call(this, path, child, auxiliary, params);\r\n\t    }\r\n\t    RootUrl.prototype.toString = function () {\r\n\t        return this.path + this._auxToString() + this._childString() + this._queryParamsToString();\r\n\t    };\r\n\t    RootUrl.prototype.segmentToString = function () { return this.path + this._queryParamsToString(); };\r\n\t    RootUrl.prototype._queryParamsToString = function () {\r\n\t        if (lang_1.isBlank(this.params)) {\r\n\t            return '';\r\n\t        }\r\n\t        return '?' + serializeParams(this.params);\r\n\t    };\r\n\t    return RootUrl;\r\n\t})(Url);\r\n\texports.RootUrl = RootUrl;\r\n\tfunction pathSegmentsToUrl(pathSegments) {\r\n\t    var url = new Url(pathSegments[pathSegments.length - 1]);\r\n\t    for (var i = pathSegments.length - 2; i >= 0; i -= 1) {\r\n\t        url = new Url(pathSegments[i], url);\r\n\t    }\r\n\t    return url;\r\n\t}\r\n\texports.pathSegmentsToUrl = pathSegmentsToUrl;\r\n\tvar SEGMENT_RE = lang_1.RegExpWrapper.create('^[^\\\\/\\\\(\\\\)\\\\?;=&#]+');\r\n\tfunction matchUrlSegment(str) {\r\n\t    var match = lang_1.RegExpWrapper.firstMatch(SEGMENT_RE, str);\r\n\t    return lang_1.isPresent(match) ? match[0] : '';\r\n\t}\r\n\tvar UrlParser = (function () {\r\n\t    function UrlParser() {\r\n\t    }\r\n\t    UrlParser.prototype.peekStartsWith = function (str) { return this._remaining.startsWith(str); };\r\n\t    UrlParser.prototype.capture = function (str) {\r\n\t        if (!this._remaining.startsWith(str)) {\r\n\t            throw new exceptions_1.BaseException(\"Expected \\\"\" + str + \"\\\".\");\r\n\t        }\r\n\t        this._remaining = this._remaining.substring(str.length);\r\n\t    };\r\n\t    UrlParser.prototype.parse = function (url) {\r\n\t        this._remaining = url;\r\n\t        if (url == '' || url == '/') {\r\n\t            return new Url('');\r\n\t        }\r\n\t        return this.parseRoot();\r\n\t    };\r\n\t    // segment + (aux segments) + (query params)\r\n\t    UrlParser.prototype.parseRoot = function () {\r\n\t        if (this.peekStartsWith('/')) {\r\n\t            this.capture('/');\r\n\t        }\r\n\t        var path = matchUrlSegment(this._remaining);\r\n\t        this.capture(path);\r\n\t        var aux = [];\r\n\t        if (this.peekStartsWith('(')) {\r\n\t            aux = this.parseAuxiliaryRoutes();\r\n\t        }\r\n\t        if (this.peekStartsWith(';')) {\r\n\t            // TODO: should these params just be dropped?\r\n\t            this.parseMatrixParams();\r\n\t        }\r\n\t        var child = null;\r\n\t        if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\r\n\t            this.capture('/');\r\n\t            child = this.parseSegment();\r\n\t        }\r\n\t        var queryParams = null;\r\n\t        if (this.peekStartsWith('?')) {\r\n\t            queryParams = this.parseQueryParams();\r\n\t        }\r\n\t        return new RootUrl(path, child, aux, queryParams);\r\n\t    };\r\n\t    // segment + (matrix params) + (aux segments)\r\n\t    UrlParser.prototype.parseSegment = function () {\r\n\t        if (this._remaining.length == 0) {\r\n\t            return null;\r\n\t        }\r\n\t        if (this.peekStartsWith('/')) {\r\n\t            this.capture('/');\r\n\t        }\r\n\t        var path = matchUrlSegment(this._remaining);\r\n\t        this.capture(path);\r\n\t        var matrixParams = null;\r\n\t        if (this.peekStartsWith(';')) {\r\n\t            matrixParams = this.parseMatrixParams();\r\n\t        }\r\n\t        var aux = [];\r\n\t        if (this.peekStartsWith('(')) {\r\n\t            aux = this.parseAuxiliaryRoutes();\r\n\t        }\r\n\t        var child = null;\r\n\t        if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\r\n\t            this.capture('/');\r\n\t            child = this.parseSegment();\r\n\t        }\r\n\t        return new Url(path, child, aux, matrixParams);\r\n\t    };\r\n\t    UrlParser.prototype.parseQueryParams = function () {\r\n\t        var params = {};\r\n\t        this.capture('?');\r\n\t        this.parseParam(params);\r\n\t        while (this._remaining.length > 0 && this.peekStartsWith('&')) {\r\n\t            this.capture('&');\r\n\t            this.parseParam(params);\r\n\t        }\r\n\t        return params;\r\n\t    };\r\n\t    UrlParser.prototype.parseMatrixParams = function () {\r\n\t        var params = {};\r\n\t        while (this._remaining.length > 0 && this.peekStartsWith(';')) {\r\n\t            this.capture(';');\r\n\t            this.parseParam(params);\r\n\t        }\r\n\t        return params;\r\n\t    };\r\n\t    UrlParser.prototype.parseParam = function (params) {\r\n\t        var key = matchUrlSegment(this._remaining);\r\n\t        if (lang_1.isBlank(key)) {\r\n\t            return;\r\n\t        }\r\n\t        this.capture(key);\r\n\t        var value = true;\r\n\t        if (this.peekStartsWith('=')) {\r\n\t            this.capture('=');\r\n\t            var valueMatch = matchUrlSegment(this._remaining);\r\n\t            if (lang_1.isPresent(valueMatch)) {\r\n\t                value = valueMatch;\r\n\t                this.capture(value);\r\n\t            }\r\n\t        }\r\n\t        params[key] = value;\r\n\t    };\r\n\t    UrlParser.prototype.parseAuxiliaryRoutes = function () {\r\n\t        var routes = [];\r\n\t        this.capture('(');\r\n\t        while (!this.peekStartsWith(')') && this._remaining.length > 0) {\r\n\t            routes.push(this.parseSegment());\r\n\t            if (this.peekStartsWith('//')) {\r\n\t                this.capture('//');\r\n\t            }\r\n\t        }\r\n\t        this.capture(')');\r\n\t        return routes;\r\n\t    };\r\n\t    return UrlParser;\r\n\t})();\r\n\texports.UrlParser = UrlParser;\r\n\texports.parser = new UrlParser();\r\n\n\n/***/ },\n/* 215 */,\n/* 216 */,\n/* 217 */,\n/* 218 */,\n/* 219 */,\n/* 220 */,\n/* 221 */,\n/* 222 */,\n/* 223 */,\n/* 224 */,\n/* 225 */,\n/* 226 */,\n/* 227 */,\n/* 228 */,\n/* 229 */,\n/* 230 */,\n/* 231 */,\n/* 232 */,\n/* 233 */,\n/* 234 */,\n/* 235 */,\n/* 236 */,\n/* 237 */,\n/* 238 */,\n/* 239 */,\n/* 240 */,\n/* 241 */,\n/* 242 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar Observable_1 = __webpack_require__(2);\n\tvar map_1 = __webpack_require__(246);\n\tObservable_1.Observable.prototype.map = map_1.map;\n\t//# sourceMappingURL=map.js.map\n\n/***/ },\n/* 243 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar Observable_1 = __webpack_require__(2);\n\tvar mergeMap_1 = __webpack_require__(248);\n\tObservable_1.Observable.prototype.mergeMap = mergeMap_1.mergeMap;\n\tObservable_1.Observable.prototype.flatMap = mergeMap_1.mergeMap;\n\t//# sourceMappingURL=mergeMap.js.map\n\n/***/ },\n/* 244 */,\n/* 245 */,\n/* 246 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar Subscriber_1 = __webpack_require__(7);\n\t/**\n\t * Similar to the well known `Array.prototype.map` function, this operator\n\t * applies a projection to each value and emits that projection in the returned observable\n\t *\n\t * <img src=\"./img/map.png\" width=\"100%\">\n\t *\n\t * @param {Function} project the function to create projection\n\t * @param {any} [thisArg] an optional argument to define what `this` is in the project function\n\t * @returns {Observable} a observable of projected values\n\t */\n\tfunction map(project, thisArg) {\n\t    if (typeof project !== 'function') {\n\t        throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n\t    }\n\t    return this.lift(new MapOperator(project, thisArg));\n\t}\n\texports.map = map;\n\tvar MapOperator = (function () {\n\t    function MapOperator(project, thisArg) {\n\t        this.project = project;\n\t        this.thisArg = thisArg;\n\t    }\n\t    MapOperator.prototype.call = function (subscriber) {\n\t        return new MapSubscriber(subscriber, this.project, this.thisArg);\n\t    };\n\t    return MapOperator;\n\t}());\n\tvar MapSubscriber = (function (_super) {\n\t    __extends(MapSubscriber, _super);\n\t    function MapSubscriber(destination, project, thisArg) {\n\t        _super.call(this, destination);\n\t        this.project = project;\n\t        this.count = 0;\n\t        this.thisArg = thisArg || this;\n\t    }\n\t    // NOTE: This looks unoptimized, but it's actually purposefully NOT\n\t    // using try/catch optimizations.\n\t    MapSubscriber.prototype._next = function (value) {\n\t        var result;\n\t        try {\n\t            result = this.project.call(this.thisArg, value, this.count++);\n\t        }\n\t        catch (err) {\n\t            this.destination.error(err);\n\t            return;\n\t        }\n\t        this.destination.next(result);\n\t    };\n\t    return MapSubscriber;\n\t}(Subscriber_1.Subscriber));\n\t//# sourceMappingURL=map.js.map\n\n/***/ },\n/* 247 */,\n/* 248 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar subscribeToResult_1 = __webpack_require__(15);\n\tvar OuterSubscriber_1 = __webpack_require__(14);\n\t/**\n\t * Returns an Observable that emits items based on applying a function that you supply to each item emitted by the\n\t * source Observable, where that function returns an Observable, and then merging those resulting Observables and\n\t * emitting the results of this merger.\n\t *\n\t * <img src=\"./img/mergeMap.png\" width=\"100%\">\n\t *\n\t * @param {Function} a function that, when applied to an item emitted by the source Observable, returns an Observable.\n\t * @returns {Observable} an Observable that emits the result of applying the transformation function to each item\n\t * emitted by the source Observable and merging the results of the Observables obtained from this transformation\n\t */\n\tfunction mergeMap(project, resultSelector, concurrent) {\n\t    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n\t    return this.lift(new MergeMapOperator(project, resultSelector, concurrent));\n\t}\n\texports.mergeMap = mergeMap;\n\tvar MergeMapOperator = (function () {\n\t    function MergeMapOperator(project, resultSelector, concurrent) {\n\t        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n\t        this.project = project;\n\t        this.resultSelector = resultSelector;\n\t        this.concurrent = concurrent;\n\t    }\n\t    MergeMapOperator.prototype.call = function (observer) {\n\t        return new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent);\n\t    };\n\t    return MergeMapOperator;\n\t}());\n\texports.MergeMapOperator = MergeMapOperator;\n\tvar MergeMapSubscriber = (function (_super) {\n\t    __extends(MergeMapSubscriber, _super);\n\t    function MergeMapSubscriber(destination, project, resultSelector, concurrent) {\n\t        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n\t        _super.call(this, destination);\n\t        this.project = project;\n\t        this.resultSelector = resultSelector;\n\t        this.concurrent = concurrent;\n\t        this.hasCompleted = false;\n\t        this.buffer = [];\n\t        this.active = 0;\n\t        this.index = 0;\n\t    }\n\t    MergeMapSubscriber.prototype._next = function (value) {\n\t        if (this.active < this.concurrent) {\n\t            this._tryNext(value);\n\t        }\n\t        else {\n\t            this.buffer.push(value);\n\t        }\n\t    };\n\t    MergeMapSubscriber.prototype._tryNext = function (value) {\n\t        var result;\n\t        var index = this.index++;\n\t        try {\n\t            result = this.project(value, index);\n\t        }\n\t        catch (err) {\n\t            this.destination.error(err);\n\t            return;\n\t        }\n\t        this.active++;\n\t        this._innerSub(result, value, index);\n\t    };\n\t    MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {\n\t        this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));\n\t    };\n\t    MergeMapSubscriber.prototype._complete = function () {\n\t        this.hasCompleted = true;\n\t        if (this.active === 0 && this.buffer.length === 0) {\n\t            this.destination.complete();\n\t        }\n\t    };\n\t    MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n\t        if (this.resultSelector) {\n\t            this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);\n\t        }\n\t        else {\n\t            this.destination.next(innerValue);\n\t        }\n\t    };\n\t    MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {\n\t        var result;\n\t        try {\n\t            result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n\t        }\n\t        catch (err) {\n\t            this.destination.error(err);\n\t            return;\n\t        }\n\t        this.destination.next(result);\n\t    };\n\t    MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {\n\t        var buffer = this.buffer;\n\t        this.remove(innerSub);\n\t        this.active--;\n\t        if (buffer.length > 0) {\n\t            this._next(buffer.shift());\n\t        }\n\t        else if (this.active === 0 && this.hasCompleted) {\n\t            this.destination.complete();\n\t        }\n\t    };\n\t    return MergeMapSubscriber;\n\t}(OuterSubscriber_1.OuterSubscriber));\n\texports.MergeMapSubscriber = MergeMapSubscriber;\n\t//# sourceMappingURL=mergeMap.js.map\n\n/***/ },\n/* 249 */,\n/* 250 */,\n/* 251 */,\n/* 252 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar root_1 = __webpack_require__(45);\n\tfunction toPromise(PromiseCtor) {\n\t    var _this = this;\n\t    if (!PromiseCtor) {\n\t        if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {\n\t            PromiseCtor = root_1.root.Rx.config.Promise;\n\t        }\n\t        else if (root_1.root.Promise) {\n\t            PromiseCtor = root_1.root.Promise;\n\t        }\n\t    }\n\t    if (!PromiseCtor) {\n\t        throw new Error('no Promise impl found');\n\t    }\n\t    return new PromiseCtor(function (resolve, reject) {\n\t        var value;\n\t        _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });\n\t    });\n\t}\n\texports.toPromise = toPromise;\n\t//# sourceMappingURL=toPromise.js.map\n\n/***/ },\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */,\n/* 257 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tfunction isObject(x) {\n\t    return x != null && typeof x === 'object';\n\t}\n\texports.isObject = isObject;\n\t//# sourceMappingURL=isObject.js.map\n\n/***/ },\n/* 258 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tfunction throwError(e) { throw e; }\n\texports.throwError = throwError;\n\t//# sourceMappingURL=throwError.js.map\n\n/***/ },\n/* 259 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';function __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\t/**\r\n\t * @module\r\n\t * @description\r\n\t * Starting point to import all compiler APIs.\r\n\t */\r\n\t__export(__webpack_require__(92));\r\n\t__export(__webpack_require__(126));\r\n\t__export(__webpack_require__(598));\r\n\n\n/***/ },\n/* 260 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar css_animation_builder_1 = __webpack_require__(588);\r\n\tvar browser_details_1 = __webpack_require__(261);\r\n\tvar AnimationBuilder = (function () {\r\n\t    /**\r\n\t     * Used for DI\r\n\t     * @param browserDetails\r\n\t     */\r\n\t    function AnimationBuilder(browserDetails) {\r\n\t        this.browserDetails = browserDetails;\r\n\t    }\r\n\t    /**\r\n\t     * Creates a new CSS Animation\r\n\t     * @returns {CssAnimationBuilder}\r\n\t     */\r\n\t    AnimationBuilder.prototype.css = function () { return new css_animation_builder_1.CssAnimationBuilder(this.browserDetails); };\r\n\t    AnimationBuilder = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [browser_details_1.BrowserDetails])\r\n\t    ], AnimationBuilder);\r\n\t    return AnimationBuilder;\r\n\t})();\r\n\texports.AnimationBuilder = AnimationBuilder;\r\n\n\n/***/ },\n/* 261 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar math_1 = __webpack_require__(315);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar BrowserDetails = (function () {\r\n\t    function BrowserDetails() {\r\n\t        this.elapsedTimeIncludesDelay = false;\r\n\t        this.doesElapsedTimeIncludesDelay();\r\n\t    }\r\n\t    /**\r\n\t     * Determines if `event.elapsedTime` includes transition delay in the current browser.  At this\r\n\t     * time, Chrome and Opera seem to be the only browsers that include this.\r\n\t     */\r\n\t    BrowserDetails.prototype.doesElapsedTimeIncludesDelay = function () {\r\n\t        var _this = this;\r\n\t        var div = dom_adapter_1.DOM.createElement('div');\r\n\t        dom_adapter_1.DOM.setAttribute(div, 'style', \"position: absolute; top: -9999px; left: -9999px; width: 1px;\\n      height: 1px; transition: all 1ms linear 1ms;\");\r\n\t        // Firefox requires that we wait for 2 frames for some reason\r\n\t        this.raf(function (timestamp) {\r\n\t            dom_adapter_1.DOM.on(div, 'transitionend', function (event) {\r\n\t                var elapsed = math_1.Math.round(event.elapsedTime * 1000);\r\n\t                _this.elapsedTimeIncludesDelay = elapsed == 2;\r\n\t                dom_adapter_1.DOM.remove(div);\r\n\t            });\r\n\t            dom_adapter_1.DOM.setStyle(div, 'width', '2px');\r\n\t        }, 2);\r\n\t    };\r\n\t    BrowserDetails.prototype.raf = function (callback, frames) {\r\n\t        if (frames === void 0) { frames = 1; }\r\n\t        var queue = new RafQueue(callback, frames);\r\n\t        return function () { return queue.cancel(); };\r\n\t    };\r\n\t    BrowserDetails = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], BrowserDetails);\r\n\t    return BrowserDetails;\r\n\t})();\r\n\texports.BrowserDetails = BrowserDetails;\r\n\tvar RafQueue = (function () {\r\n\t    function RafQueue(callback, frames) {\r\n\t        this.callback = callback;\r\n\t        this.frames = frames;\r\n\t        this._raf();\r\n\t    }\r\n\t    RafQueue.prototype._raf = function () {\r\n\t        var _this = this;\r\n\t        this.currentFrameId =\r\n\t            dom_adapter_1.DOM.requestAnimationFrame(function (timestamp) { return _this._nextFrame(timestamp); });\r\n\t    };\r\n\t    RafQueue.prototype._nextFrame = function (timestamp) {\r\n\t        this.frames--;\r\n\t        if (this.frames > 0) {\r\n\t            this._raf();\r\n\t        }\r\n\t        else {\r\n\t            this.callback(timestamp);\r\n\t        }\r\n\t    };\r\n\t    RafQueue.prototype.cancel = function () {\r\n\t        dom_adapter_1.DOM.cancelAnimationFrame(this.currentFrameId);\r\n\t        this.currentFrameId = null;\r\n\t    };\r\n\t    return RafQueue;\r\n\t})();\r\n\n\n/***/ },\n/* 262 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';function __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\t/**\r\n\t * @module\r\n\t * @description\r\n\t * Common directives shipped with Angular.\r\n\t */\r\n\tvar ng_class_1 = __webpack_require__(263);\r\n\texports.NgClass = ng_class_1.NgClass;\r\n\tvar ng_for_1 = __webpack_require__(264);\r\n\texports.NgFor = ng_for_1.NgFor;\r\n\tvar ng_if_1 = __webpack_require__(265);\r\n\texports.NgIf = ng_if_1.NgIf;\r\n\tvar ng_style_1 = __webpack_require__(267);\r\n\texports.NgStyle = ng_style_1.NgStyle;\r\n\tvar ng_switch_1 = __webpack_require__(172);\r\n\texports.NgSwitch = ng_switch_1.NgSwitch;\r\n\texports.NgSwitchWhen = ng_switch_1.NgSwitchWhen;\r\n\texports.NgSwitchDefault = ng_switch_1.NgSwitchDefault;\r\n\tvar ng_plural_1 = __webpack_require__(266);\r\n\texports.NgPlural = ng_plural_1.NgPlural;\r\n\texports.NgPluralCase = ng_plural_1.NgPluralCase;\r\n\texports.NgLocalization = ng_plural_1.NgLocalization;\r\n\t__export(__webpack_require__(592));\r\n\tvar core_directives_1 = __webpack_require__(591);\r\n\texports.CORE_DIRECTIVES = core_directives_1.CORE_DIRECTIVES;\r\n\n\n/***/ },\n/* 263 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\t/**\r\n\t * The `NgClass` directive conditionally adds and removes CSS classes on an HTML element based on\r\n\t * an expression's evaluation result.\r\n\t *\r\n\t * The result of an expression evaluation is interpreted differently depending on type of\r\n\t * the expression evaluation result:\r\n\t * - `string` - all the CSS classes listed in a string (space delimited) are added\r\n\t * - `Array` - all the CSS classes (Array elements) are added\r\n\t * - `Object` - each key corresponds to a CSS class name while values are interpreted as expressions\r\n\t * evaluating to `Boolean`. If a given expression evaluates to `true` a corresponding CSS class\r\n\t * is added - otherwise it is removed.\r\n\t *\r\n\t * While the `NgClass` directive can interpret expressions evaluating to `string`, `Array`\r\n\t * or `Object`, the `Object`-based version is the most often used and has an advantage of keeping\r\n\t * all the CSS class names in a template.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/a4YdtmWywhJ33uqfpPPn?p=preview)):\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {NgClass} from 'angular2/common';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'toggle-button',\r\n\t *   inputs: ['isDisabled'],\r\n\t *   template: `\r\n\t *      <div class=\"button\" [ngClass]=\"{active: isOn, disabled: isDisabled}\"\r\n\t *          (click)=\"toggle(!isOn)\">\r\n\t *          Click me!\r\n\t *      </div>`,\r\n\t *   styles: [`\r\n\t *     .button {\r\n\t *       width: 120px;\r\n\t *       border: medium solid black;\r\n\t *     }\r\n\t *\r\n\t *     .active {\r\n\t *       background-color: red;\r\n\t *    }\r\n\t *\r\n\t *     .disabled {\r\n\t *       color: gray;\r\n\t *       border: medium solid gray;\r\n\t *     }\r\n\t *   `]\r\n\t *   directives: [NgClass]\r\n\t * })\r\n\t * class ToggleButton {\r\n\t *   isOn = false;\r\n\t *   isDisabled = false;\r\n\t *\r\n\t *   toggle(newState) {\r\n\t *     if (!this.isDisabled) {\r\n\t *       this.isOn = newState;\r\n\t *     }\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar NgClass = (function () {\r\n\t    function NgClass(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {\r\n\t        this._iterableDiffers = _iterableDiffers;\r\n\t        this._keyValueDiffers = _keyValueDiffers;\r\n\t        this._ngEl = _ngEl;\r\n\t        this._renderer = _renderer;\r\n\t        this._initialClasses = [];\r\n\t    }\r\n\t    Object.defineProperty(NgClass.prototype, \"initialClasses\", {\r\n\t        set: function (v) {\r\n\t            this._applyInitialClasses(true);\r\n\t            this._initialClasses = lang_1.isPresent(v) && lang_1.isString(v) ? v.split(' ') : [];\r\n\t            this._applyInitialClasses(false);\r\n\t            this._applyClasses(this._rawClass, false);\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgClass.prototype, \"rawClass\", {\r\n\t        set: function (v) {\r\n\t            this._cleanupClasses(this._rawClass);\r\n\t            if (lang_1.isString(v)) {\r\n\t                v = v.split(' ');\r\n\t            }\r\n\t            this._rawClass = v;\r\n\t            this._iterableDiffer = null;\r\n\t            this._keyValueDiffer = null;\r\n\t            if (lang_1.isPresent(v)) {\r\n\t                if (collection_1.isListLikeIterable(v)) {\r\n\t                    this._iterableDiffer = this._iterableDiffers.find(v).create(null);\r\n\t                }\r\n\t                else {\r\n\t                    this._keyValueDiffer = this._keyValueDiffers.find(v).create(null);\r\n\t                }\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgClass.prototype.ngDoCheck = function () {\r\n\t        if (lang_1.isPresent(this._iterableDiffer)) {\r\n\t            var changes = this._iterableDiffer.diff(this._rawClass);\r\n\t            if (lang_1.isPresent(changes)) {\r\n\t                this._applyIterableChanges(changes);\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(this._keyValueDiffer)) {\r\n\t            var changes = this._keyValueDiffer.diff(this._rawClass);\r\n\t            if (lang_1.isPresent(changes)) {\r\n\t                this._applyKeyValueChanges(changes);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    NgClass.prototype.ngOnDestroy = function () { this._cleanupClasses(this._rawClass); };\r\n\t    NgClass.prototype._cleanupClasses = function (rawClassVal) {\r\n\t        this._applyClasses(rawClassVal, true);\r\n\t        this._applyInitialClasses(false);\r\n\t    };\r\n\t    NgClass.prototype._applyKeyValueChanges = function (changes) {\r\n\t        var _this = this;\r\n\t        changes.forEachAddedItem(function (record) { _this._toggleClass(record.key, record.currentValue); });\r\n\t        changes.forEachChangedItem(function (record) { _this._toggleClass(record.key, record.currentValue); });\r\n\t        changes.forEachRemovedItem(function (record) {\r\n\t            if (record.previousValue) {\r\n\t                _this._toggleClass(record.key, false);\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    NgClass.prototype._applyIterableChanges = function (changes) {\r\n\t        var _this = this;\r\n\t        changes.forEachAddedItem(function (record) { _this._toggleClass(record.item, true); });\r\n\t        changes.forEachRemovedItem(function (record) { _this._toggleClass(record.item, false); });\r\n\t    };\r\n\t    NgClass.prototype._applyInitialClasses = function (isCleanup) {\r\n\t        var _this = this;\r\n\t        this._initialClasses.forEach(function (className) { return _this._toggleClass(className, !isCleanup); });\r\n\t    };\r\n\t    NgClass.prototype._applyClasses = function (rawClassVal, isCleanup) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(rawClassVal)) {\r\n\t            if (lang_1.isArray(rawClassVal)) {\r\n\t                rawClassVal.forEach(function (className) { return _this._toggleClass(className, !isCleanup); });\r\n\t            }\r\n\t            else if (rawClassVal instanceof Set) {\r\n\t                rawClassVal.forEach(function (className) { return _this._toggleClass(className, !isCleanup); });\r\n\t            }\r\n\t            else {\r\n\t                collection_1.StringMapWrapper.forEach(rawClassVal, function (expVal, className) {\r\n\t                    if (lang_1.isPresent(expVal))\r\n\t                        _this._toggleClass(className, !isCleanup);\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    NgClass.prototype._toggleClass = function (className, enabled) {\r\n\t        className = className.trim();\r\n\t        if (className.length > 0) {\r\n\t            if (className.indexOf(' ') > -1) {\r\n\t                var classes = className.split(/\\s+/g);\r\n\t                for (var i = 0, len = classes.length; i < len; i++) {\r\n\t                    this._renderer.setElementClass(this._ngEl.nativeElement, classes[i], enabled);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._renderer.setElementClass(this._ngEl.nativeElement, className, enabled);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    NgClass = __decorate([\r\n\t        core_1.Directive({ selector: '[ngClass]', inputs: ['rawClass: ngClass', 'initialClasses: class'] }), \r\n\t        __metadata('design:paramtypes', [core_1.IterableDiffers, core_1.KeyValueDiffers, core_1.ElementRef, core_1.Renderer])\r\n\t    ], NgClass);\r\n\t    return NgClass;\r\n\t})();\r\n\texports.NgClass = NgClass;\r\n\n\n/***/ },\n/* 264 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * The `NgFor` directive instantiates a template once per item from an iterable. The context for\r\n\t * each instantiated template inherits from the outer context with the given loop variable set\r\n\t * to the current item from the iterable.\r\n\t *\r\n\t * # Local Variables\r\n\t *\r\n\t * `NgFor` provides several exported values that can be aliased to local variables:\r\n\t *\r\n\t * * `index` will be set to the current loop iteration for each template context.\r\n\t * * `last` will be set to a boolean value indicating whether the item is the last one in the\r\n\t *   iteration.\r\n\t * * `even` will be set to a boolean value indicating whether this item has an even index.\r\n\t * * `odd` will be set to a boolean value indicating whether this item has an odd index.\r\n\t *\r\n\t * # Change Propagation\r\n\t *\r\n\t * When the contents of the iterator changes, `NgFor` makes the corresponding changes to the DOM:\r\n\t *\r\n\t * * When an item is added, a new instance of the template is added to the DOM.\r\n\t * * When an item is removed, its template instance is removed from the DOM.\r\n\t * * When items are reordered, their respective templates are reordered in the DOM.\r\n\t * * Otherwise, the DOM element for that item will remain the same.\r\n\t *\r\n\t * Angular uses object identity to track insertions and deletions within the iterator and reproduce\r\n\t * those changes in the DOM. This has important implications for animations and any stateful\r\n\t * controls\r\n\t * (such as `<input>` elements which accept user input) that are present. Inserted rows can be\r\n\t * animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state such\r\n\t * as user input.\r\n\t *\r\n\t * It is possible for the identities of elements in the iterator to change while the data does not.\r\n\t * This can happen, for example, if the iterator produced from an RPC to the server, and that\r\n\t * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with\r\n\t * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old\r\n\t * elements were deleted and all new elements inserted). This is an expensive operation and should\r\n\t * be avoided if possible.\r\n\t *\r\n\t * # Syntax\r\n\t *\r\n\t * - `<li *ngFor=\"#item of items; #i = index\">...</li>`\r\n\t * - `<li template=\"ngFor #item of items; #i = index\">...</li>`\r\n\t * - `<template ngFor #item [ngForOf]=\"items\" #i=\"index\"><li>...</li></template>`\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed\r\n\t * example.\r\n\t */\r\n\tvar NgFor = (function () {\r\n\t    function NgFor(_viewContainer, _templateRef, _iterableDiffers, _cdr) {\r\n\t        this._viewContainer = _viewContainer;\r\n\t        this._templateRef = _templateRef;\r\n\t        this._iterableDiffers = _iterableDiffers;\r\n\t        this._cdr = _cdr;\r\n\t    }\r\n\t    Object.defineProperty(NgFor.prototype, \"ngForOf\", {\r\n\t        set: function (value) {\r\n\t            this._ngForOf = value;\r\n\t            if (lang_1.isBlank(this._differ) && lang_1.isPresent(value)) {\r\n\t                this._differ = this._iterableDiffers.find(value).create(this._cdr, this._ngForTrackBy);\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFor.prototype, \"ngForTemplate\", {\r\n\t        set: function (value) {\r\n\t            if (lang_1.isPresent(value)) {\r\n\t                this._templateRef = value;\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(NgFor.prototype, \"ngForTrackBy\", {\r\n\t        set: function (value) { this._ngForTrackBy = value; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgFor.prototype.ngDoCheck = function () {\r\n\t        if (lang_1.isPresent(this._differ)) {\r\n\t            var changes = this._differ.diff(this._ngForOf);\r\n\t            if (lang_1.isPresent(changes))\r\n\t                this._applyChanges(changes);\r\n\t        }\r\n\t    };\r\n\t    NgFor.prototype._applyChanges = function (changes) {\r\n\t        var _this = this;\r\n\t        // TODO(rado): check if change detection can produce a change record that is\r\n\t        // easier to consume than current.\r\n\t        var recordViewTuples = [];\r\n\t        changes.forEachRemovedItem(function (removedRecord) {\r\n\t            return recordViewTuples.push(new RecordViewTuple(removedRecord, null));\r\n\t        });\r\n\t        changes.forEachMovedItem(function (movedRecord) {\r\n\t            return recordViewTuples.push(new RecordViewTuple(movedRecord, null));\r\n\t        });\r\n\t        var insertTuples = this._bulkRemove(recordViewTuples);\r\n\t        changes.forEachAddedItem(function (addedRecord) {\r\n\t            return insertTuples.push(new RecordViewTuple(addedRecord, null));\r\n\t        });\r\n\t        this._bulkInsert(insertTuples);\r\n\t        for (var i = 0; i < insertTuples.length; i++) {\r\n\t            this._perViewChange(insertTuples[i].view, insertTuples[i].record);\r\n\t        }\r\n\t        for (var i = 0, ilen = this._viewContainer.length; i < ilen; i++) {\r\n\t            var viewRef = this._viewContainer.get(i);\r\n\t            viewRef.setLocal('last', i === ilen - 1);\r\n\t        }\r\n\t        changes.forEachIdentityChange(function (record) {\r\n\t            var viewRef = _this._viewContainer.get(record.currentIndex);\r\n\t            viewRef.setLocal('\\$implicit', record.item);\r\n\t        });\r\n\t    };\r\n\t    NgFor.prototype._perViewChange = function (view, record) {\r\n\t        view.setLocal('\\$implicit', record.item);\r\n\t        view.setLocal('index', record.currentIndex);\r\n\t        view.setLocal('even', (record.currentIndex % 2 == 0));\r\n\t        view.setLocal('odd', (record.currentIndex % 2 == 1));\r\n\t    };\r\n\t    NgFor.prototype._bulkRemove = function (tuples) {\r\n\t        tuples.sort(function (a, b) {\r\n\t            return a.record.previousIndex - b.record.previousIndex;\r\n\t        });\r\n\t        var movedTuples = [];\r\n\t        for (var i = tuples.length - 1; i >= 0; i--) {\r\n\t            var tuple = tuples[i];\r\n\t            // separate moved views from removed views.\r\n\t            if (lang_1.isPresent(tuple.record.currentIndex)) {\r\n\t                tuple.view = this._viewContainer.detach(tuple.record.previousIndex);\r\n\t                movedTuples.push(tuple);\r\n\t            }\r\n\t            else {\r\n\t                this._viewContainer.remove(tuple.record.previousIndex);\r\n\t            }\r\n\t        }\r\n\t        return movedTuples;\r\n\t    };\r\n\t    NgFor.prototype._bulkInsert = function (tuples) {\r\n\t        tuples.sort(function (a, b) { return a.record.currentIndex - b.record.currentIndex; });\r\n\t        for (var i = 0; i < tuples.length; i++) {\r\n\t            var tuple = tuples[i];\r\n\t            if (lang_1.isPresent(tuple.view)) {\r\n\t                this._viewContainer.insert(tuple.view, tuple.record.currentIndex);\r\n\t            }\r\n\t            else {\r\n\t                tuple.view =\r\n\t                    this._viewContainer.createEmbeddedView(this._templateRef, tuple.record.currentIndex);\r\n\t            }\r\n\t        }\r\n\t        return tuples;\r\n\t    };\r\n\t    NgFor = __decorate([\r\n\t        core_1.Directive({ selector: '[ngFor][ngForOf]', inputs: ['ngForTrackBy', 'ngForOf', 'ngForTemplate'] }), \r\n\t        __metadata('design:paramtypes', [core_1.ViewContainerRef, core_1.TemplateRef, core_1.IterableDiffers, core_1.ChangeDetectorRef])\r\n\t    ], NgFor);\r\n\t    return NgFor;\r\n\t})();\r\n\texports.NgFor = NgFor;\r\n\tvar RecordViewTuple = (function () {\r\n\t    function RecordViewTuple(record, view) {\r\n\t        this.record = record;\r\n\t        this.view = view;\r\n\t    }\r\n\t    return RecordViewTuple;\r\n\t})();\r\n\n\n/***/ },\n/* 265 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Removes or recreates a portion of the DOM tree based on an {expression}.\r\n\t *\r\n\t * If the expression assigned to `ngIf` evaluates to a false value then the element\r\n\t * is removed from the DOM, otherwise a clone of the element is reinserted into the DOM.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/fe0kgemFBtmQOY31b4tw?p=preview)):\r\n\t *\r\n\t * ```\r\n\t * <div *ngIf=\"errorCount > 0\" class=\"error\">\r\n\t *   <!-- Error message displayed when the errorCount property on the current context is greater\r\n\t * than 0. -->\r\n\t *   {{errorCount}} errors detected\r\n\t * </div>\r\n\t * ```\r\n\t *\r\n\t * ### Syntax\r\n\t *\r\n\t * - `<div *ngIf=\"condition\">...</div>`\r\n\t * - `<div template=\"ngIf condition\">...</div>`\r\n\t * - `<template [ngIf]=\"condition\"><div>...</div></template>`\r\n\t */\r\n\tvar NgIf = (function () {\r\n\t    function NgIf(_viewContainer, _templateRef) {\r\n\t        this._viewContainer = _viewContainer;\r\n\t        this._templateRef = _templateRef;\r\n\t        this._prevCondition = null;\r\n\t    }\r\n\t    Object.defineProperty(NgIf.prototype, \"ngIf\", {\r\n\t        set: function (newCondition /* boolean */) {\r\n\t            if (newCondition && (lang_1.isBlank(this._prevCondition) || !this._prevCondition)) {\r\n\t                this._prevCondition = true;\r\n\t                this._viewContainer.createEmbeddedView(this._templateRef);\r\n\t            }\r\n\t            else if (!newCondition && (lang_1.isBlank(this._prevCondition) || this._prevCondition)) {\r\n\t                this._prevCondition = false;\r\n\t                this._viewContainer.clear();\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgIf = __decorate([\r\n\t        core_1.Directive({ selector: '[ngIf]', inputs: ['ngIf'] }), \r\n\t        __metadata('design:paramtypes', [core_1.ViewContainerRef, core_1.TemplateRef])\r\n\t    ], NgIf);\r\n\t    return NgIf;\r\n\t})();\r\n\texports.NgIf = NgIf;\r\n\n\n/***/ },\n/* 266 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar ng_switch_1 = __webpack_require__(172);\r\n\tvar _CATEGORY_DEFAULT = 'other';\r\n\tvar NgLocalization = (function () {\r\n\t    function NgLocalization() {\r\n\t    }\r\n\t    return NgLocalization;\r\n\t})();\r\n\texports.NgLocalization = NgLocalization;\r\n\t/**\r\n\t * `ngPlural` is an i18n directive that displays DOM sub-trees that match the switch expression\r\n\t * value, or failing that, DOM sub-trees that match the switch expression's pluralization category.\r\n\t *\r\n\t * To use this directive, you must provide an extension of `NgLocalization` that maps values to\r\n\t * category names. You then define a container element that sets the `[ngPlural]` attribute to a\r\n\t * switch expression.\r\n\t *    - Inner elements defined with an `[ngPluralCase]` attribute will display based on their\r\n\t * expression.\r\n\t *    - If `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\r\n\t * matches the switch expression exactly.\r\n\t *    - Otherwise, the view will be treated as a \"category match\", and will only display if exact\r\n\t * value matches aren't found and the value maps to its category using the `getPluralCategory`\r\n\t * function provided.\r\n\t *\r\n\t * If no matching views are found for a switch expression, inner elements marked\r\n\t * `[ngPluralCase]=\"other\"` will be displayed.\r\n\t *\r\n\t * ```typescript\r\n\t * class MyLocalization extends NgLocalization {\r\n\t *    getPluralCategory(value: any) {\r\n\t *       if(value < 5) {\r\n\t *          return 'few';\r\n\t *       }\r\n\t *    }\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *    selector: 'app',\r\n\t *    providers: [provide(NgLocalization, {useClass: MyLocalization})]\r\n\t * })\r\n\t * @View({\r\n\t *   template: `\r\n\t *     <p>Value = {{value}}</p>\r\n\t *     <button (click)=\"inc()\">Increment</button>\r\n\t *\r\n\t *     <div [ngPlural]=\"value\">\r\n\t *       <template ngPluralCase=\"=0\">there is nothing</template>\r\n\t *       <template ngPluralCase=\"=1\">there is one</template>\r\n\t *       <template ngPluralCase=\"few\">there are a few</template>\r\n\t *       <template ngPluralCase=\"other\">there is some number</template>\r\n\t *     </div>\r\n\t *   `,\r\n\t *   directives: [NgPlural, NgPluralCase]\r\n\t * })\r\n\t * export class App {\r\n\t *   value = 'init';\r\n\t *\r\n\t *   inc() {\r\n\t *     this.value = this.value === 'init' ? 0 : this.value + 1;\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * ```\r\n\t */\r\n\tvar NgPluralCase = (function () {\r\n\t    function NgPluralCase(value, template, viewContainer) {\r\n\t        this.value = value;\r\n\t        this._view = new ng_switch_1.SwitchView(viewContainer, template);\r\n\t    }\r\n\t    NgPluralCase = __decorate([\r\n\t        core_1.Directive({ selector: '[ngPluralCase]' }),\r\n\t        __param(0, core_1.Attribute('ngPluralCase')), \r\n\t        __metadata('design:paramtypes', [String, core_1.TemplateRef, core_1.ViewContainerRef])\r\n\t    ], NgPluralCase);\r\n\t    return NgPluralCase;\r\n\t})();\r\n\texports.NgPluralCase = NgPluralCase;\r\n\tvar NgPlural = (function () {\r\n\t    function NgPlural(_localization) {\r\n\t        this._localization = _localization;\r\n\t        this._caseViews = new collection_1.Map();\r\n\t        this.cases = null;\r\n\t    }\r\n\t    Object.defineProperty(NgPlural.prototype, \"ngPlural\", {\r\n\t        set: function (value) {\r\n\t            this._switchValue = value;\r\n\t            this._updateView();\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgPlural.prototype.ngAfterContentInit = function () {\r\n\t        var _this = this;\r\n\t        this.cases.forEach(function (pluralCase) {\r\n\t            _this._caseViews.set(_this._formatValue(pluralCase), pluralCase._view);\r\n\t        });\r\n\t        this._updateView();\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._updateView = function () {\r\n\t        this._clearViews();\r\n\t        var view = this._caseViews.get(this._switchValue);\r\n\t        if (!lang_1.isPresent(view))\r\n\t            view = this._getCategoryView(this._switchValue);\r\n\t        this._activateView(view);\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._clearViews = function () {\r\n\t        if (lang_1.isPresent(this._activeView))\r\n\t            this._activeView.destroy();\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._activateView = function (view) {\r\n\t        if (!lang_1.isPresent(view))\r\n\t            return;\r\n\t        this._activeView = view;\r\n\t        this._activeView.create();\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._getCategoryView = function (value) {\r\n\t        var category = this._localization.getPluralCategory(value);\r\n\t        var categoryView = this._caseViews.get(category);\r\n\t        return lang_1.isPresent(categoryView) ? categoryView : this._caseViews.get(_CATEGORY_DEFAULT);\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._isValueView = function (pluralCase) { return pluralCase.value[0] === \"=\"; };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._formatValue = function (pluralCase) {\r\n\t        return this._isValueView(pluralCase) ? this._stripValue(pluralCase.value) : pluralCase.value;\r\n\t    };\r\n\t    /** @internal */\r\n\t    NgPlural.prototype._stripValue = function (value) { return lang_1.NumberWrapper.parseInt(value.substring(1), 10); };\r\n\t    __decorate([\r\n\t        core_1.ContentChildren(NgPluralCase), \r\n\t        __metadata('design:type', core_1.QueryList)\r\n\t    ], NgPlural.prototype, \"cases\", void 0);\r\n\t    __decorate([\r\n\t        core_1.Input(), \r\n\t        __metadata('design:type', Number), \r\n\t        __metadata('design:paramtypes', [Number])\r\n\t    ], NgPlural.prototype, \"ngPlural\", null);\r\n\t    NgPlural = __decorate([\r\n\t        core_1.Directive({ selector: '[ngPlural]' }), \r\n\t        __metadata('design:paramtypes', [NgLocalization])\r\n\t    ], NgPlural);\r\n\t    return NgPlural;\r\n\t})();\r\n\texports.NgPlural = NgPlural;\r\n\n\n/***/ },\n/* 267 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * The `NgStyle` directive changes styles based on a result of expression evaluation.\r\n\t *\r\n\t * An expression assigned to the `ngStyle` property must evaluate to an object and the\r\n\t * corresponding element styles are updated based on changes to this object. Style names to update\r\n\t * are taken from the object's keys, and values - from the corresponding object's values.\r\n\t *\r\n\t * ### Syntax\r\n\t *\r\n\t * - `<div [ngStyle]=\"{'font-style': style}\"></div>`\r\n\t * - `<div [ngStyle]=\"styleExp\"></div>` - here the `styleExp` must evaluate to an object\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/YamGS6GkUh9GqWNQhCyM?p=preview)):\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {NgStyle} from 'angular2/common';\r\n\t *\r\n\t * @Component({\r\n\t *  selector: 'ngStyle-example',\r\n\t *  template: `\r\n\t *    <h1 [ngStyle]=\"{'font-style': style, 'font-size': size, 'font-weight': weight}\">\r\n\t *      Change style of this text!\r\n\t *    </h1>\r\n\t *\r\n\t *    <hr>\r\n\t *\r\n\t *    <label>Italic: <input type=\"checkbox\" (change)=\"changeStyle($event)\"></label>\r\n\t *    <label>Bold: <input type=\"checkbox\" (change)=\"changeWeight($event)\"></label>\r\n\t *    <label>Size: <input type=\"text\" [value]=\"size\" (change)=\"size = $event.target.value\"></label>\r\n\t *  `,\r\n\t *  directives: [NgStyle]\r\n\t * })\r\n\t * export class NgStyleExample {\r\n\t *    style = 'normal';\r\n\t *    weight = 'normal';\r\n\t *    size = '20px';\r\n\t *\r\n\t *    changeStyle($event: any) {\r\n\t *      this.style = $event.target.checked ? 'italic' : 'normal';\r\n\t *    }\r\n\t *\r\n\t *    changeWeight($event: any) {\r\n\t *      this.weight = $event.target.checked ? 'bold' : 'normal';\r\n\t *    }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * In this example the `font-style`, `font-size` and `font-weight` styles will be updated\r\n\t * based on the `style` property's value changes.\r\n\t */\r\n\tvar NgStyle = (function () {\r\n\t    function NgStyle(_differs, _ngEl, _renderer) {\r\n\t        this._differs = _differs;\r\n\t        this._ngEl = _ngEl;\r\n\t        this._renderer = _renderer;\r\n\t    }\r\n\t    Object.defineProperty(NgStyle.prototype, \"rawStyle\", {\r\n\t        set: function (v) {\r\n\t            this._rawStyle = v;\r\n\t            if (lang_1.isBlank(this._differ) && lang_1.isPresent(v)) {\r\n\t                this._differ = this._differs.find(this._rawStyle).create(null);\r\n\t            }\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    NgStyle.prototype.ngDoCheck = function () {\r\n\t        if (lang_1.isPresent(this._differ)) {\r\n\t            var changes = this._differ.diff(this._rawStyle);\r\n\t            if (lang_1.isPresent(changes)) {\r\n\t                this._applyChanges(changes);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    NgStyle.prototype._applyChanges = function (changes) {\r\n\t        var _this = this;\r\n\t        changes.forEachAddedItem(function (record) { _this._setStyle(record.key, record.currentValue); });\r\n\t        changes.forEachChangedItem(function (record) { _this._setStyle(record.key, record.currentValue); });\r\n\t        changes.forEachRemovedItem(function (record) { _this._setStyle(record.key, null); });\r\n\t    };\r\n\t    NgStyle.prototype._setStyle = function (name, val) {\r\n\t        this._renderer.setElementStyle(this._ngEl.nativeElement, name, val);\r\n\t    };\r\n\t    NgStyle = __decorate([\r\n\t        core_1.Directive({ selector: '[ngStyle]', inputs: ['rawStyle: ngStyle'] }), \r\n\t        __metadata('design:paramtypes', [core_1.KeyValueDiffers, core_1.ElementRef, core_1.Renderer])\r\n\t    ], NgStyle);\r\n\t    return NgStyle;\r\n\t})();\r\n\texports.NgStyle = NgStyle;\r\n\n\n/***/ },\n/* 268 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * This module is used for handling user input, by defining and building a {@link ControlGroup} that\r\n\t * consists of\r\n\t * {@link Control} objects, and mapping them onto the DOM. {@link Control} objects can then be used\r\n\t * to read information\r\n\t * from the form DOM elements.\r\n\t *\r\n\t * This module is not included in the `angular2` module; you must import the forms module\r\n\t * explicitly.\r\n\t *\r\n\t */\r\n\tvar model_1 = __webpack_require__(124);\r\n\texports.AbstractControl = model_1.AbstractControl;\r\n\texports.Control = model_1.Control;\r\n\texports.ControlGroup = model_1.ControlGroup;\r\n\texports.ControlArray = model_1.ControlArray;\r\n\tvar abstract_control_directive_1 = __webpack_require__(173);\r\n\texports.AbstractControlDirective = abstract_control_directive_1.AbstractControlDirective;\r\n\tvar control_container_1 = __webpack_require__(90);\r\n\texports.ControlContainer = control_container_1.ControlContainer;\r\n\tvar ng_control_name_1 = __webpack_require__(175);\r\n\texports.NgControlName = ng_control_name_1.NgControlName;\r\n\tvar ng_form_control_1 = __webpack_require__(178);\r\n\texports.NgFormControl = ng_form_control_1.NgFormControl;\r\n\tvar ng_model_1 = __webpack_require__(180);\r\n\texports.NgModel = ng_model_1.NgModel;\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\texports.NgControl = ng_control_1.NgControl;\r\n\tvar ng_control_group_1 = __webpack_require__(174);\r\n\texports.NgControlGroup = ng_control_group_1.NgControlGroup;\r\n\tvar ng_form_model_1 = __webpack_require__(179);\r\n\texports.NgFormModel = ng_form_model_1.NgFormModel;\r\n\tvar ng_form_1 = __webpack_require__(177);\r\n\texports.NgForm = ng_form_1.NgForm;\r\n\tvar control_value_accessor_1 = __webpack_require__(46);\r\n\texports.NG_VALUE_ACCESSOR = control_value_accessor_1.NG_VALUE_ACCESSOR;\r\n\tvar default_value_accessor_1 = __webpack_require__(121);\r\n\texports.DefaultValueAccessor = default_value_accessor_1.DefaultValueAccessor;\r\n\tvar ng_control_status_1 = __webpack_require__(176);\r\n\texports.NgControlStatus = ng_control_status_1.NgControlStatus;\r\n\tvar checkbox_value_accessor_1 = __webpack_require__(120);\r\n\texports.CheckboxControlValueAccessor = checkbox_value_accessor_1.CheckboxControlValueAccessor;\r\n\tvar select_control_value_accessor_1 = __webpack_require__(123);\r\n\texports.NgSelectOption = select_control_value_accessor_1.NgSelectOption;\r\n\texports.SelectControlValueAccessor = select_control_value_accessor_1.SelectControlValueAccessor;\r\n\tvar directives_1 = __webpack_require__(593);\r\n\texports.FORM_DIRECTIVES = directives_1.FORM_DIRECTIVES;\r\n\texports.RadioButtonState = directives_1.RadioButtonState;\r\n\tvar validators_1 = __webpack_require__(47);\r\n\texports.NG_VALIDATORS = validators_1.NG_VALIDATORS;\r\n\texports.NG_ASYNC_VALIDATORS = validators_1.NG_ASYNC_VALIDATORS;\r\n\texports.Validators = validators_1.Validators;\r\n\tvar validators_2 = __webpack_require__(182);\r\n\texports.RequiredValidator = validators_2.RequiredValidator;\r\n\texports.MinLengthValidator = validators_2.MinLengthValidator;\r\n\texports.MaxLengthValidator = validators_2.MaxLengthValidator;\r\n\texports.PatternValidator = validators_2.PatternValidator;\r\n\tvar form_builder_1 = __webpack_require__(269);\r\n\texports.FormBuilder = form_builder_1.FormBuilder;\r\n\tvar form_builder_2 = __webpack_require__(269);\r\n\tvar radio_control_value_accessor_1 = __webpack_require__(122);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Shorthand set of providers used for building Angular forms.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * bootstrap(MyApp, [FORM_PROVIDERS]);\r\n\t * ```\r\n\t */\r\n\texports.FORM_PROVIDERS = lang_1.CONST_EXPR([form_builder_2.FormBuilder, radio_control_value_accessor_1.RadioControlRegistry]);\r\n\t/**\r\n\t * See {@link FORM_PROVIDERS} instead.\r\n\t *\r\n\t * @deprecated\r\n\t */\r\n\texports.FORM_BINDINGS = exports.FORM_PROVIDERS;\r\n\n\n/***/ },\n/* 269 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar modelModule = __webpack_require__(124);\r\n\t/**\r\n\t * Creates a form object from a user-specified configuration.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/ENgZo8EuIECZNensZCVr?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'my-app',\r\n\t *   viewBindings: [FORM_BINDINGS]\r\n\t *   template: `\r\n\t *     <form [ngFormModel]=\"loginForm\">\r\n\t *       <p>Login <input ngControl=\"login\"></p>\r\n\t *       <div ngControlGroup=\"passwordRetry\">\r\n\t *         <p>Password <input type=\"password\" ngControl=\"password\"></p>\r\n\t *         <p>Confirm password <input type=\"password\" ngControl=\"passwordConfirmation\"></p>\r\n\t *       </div>\r\n\t *     </form>\r\n\t *     <h3>Form value:</h3>\r\n\t *     <pre>{{value}}</pre>\r\n\t *   `,\r\n\t *   directives: [FORM_DIRECTIVES]\r\n\t * })\r\n\t * export class App {\r\n\t *   loginForm: ControlGroup;\r\n\t *\r\n\t *   constructor(builder: FormBuilder) {\r\n\t *     this.loginForm = builder.group({\r\n\t *       login: [\"\", Validators.required],\r\n\t *       passwordRetry: builder.group({\r\n\t *         password: [\"\", Validators.required],\r\n\t *         passwordConfirmation: [\"\", Validators.required, asyncValidator]\r\n\t *       })\r\n\t *     });\r\n\t *   }\r\n\t *\r\n\t *   get value(): string {\r\n\t *     return JSON.stringify(this.loginForm.value, null, 2);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar FormBuilder = (function () {\r\n\t    function FormBuilder() {\r\n\t    }\r\n\t    /**\r\n\t     * Construct a new {@link ControlGroup} with the given map of configuration.\r\n\t     * Valid keys for the `extra` parameter map are `optionals` and `validator`.\r\n\t     *\r\n\t     * See the {@link ControlGroup} constructor for more details.\r\n\t     */\r\n\t    FormBuilder.prototype.group = function (controlsConfig, extra) {\r\n\t        if (extra === void 0) { extra = null; }\r\n\t        var controls = this._reduceControls(controlsConfig);\r\n\t        var optionals = (lang_1.isPresent(extra) ? collection_1.StringMapWrapper.get(extra, \"optionals\") : null);\r\n\t        var validator = lang_1.isPresent(extra) ? collection_1.StringMapWrapper.get(extra, \"validator\") : null;\r\n\t        var asyncValidator = lang_1.isPresent(extra) ? collection_1.StringMapWrapper.get(extra, \"asyncValidator\") : null;\r\n\t        return new modelModule.ControlGroup(controls, optionals, validator, asyncValidator);\r\n\t    };\r\n\t    /**\r\n\t     * Construct a new {@link Control} with the given `value`,`validator`, and `asyncValidator`.\r\n\t     */\r\n\t    FormBuilder.prototype.control = function (value, validator, asyncValidator) {\r\n\t        if (validator === void 0) { validator = null; }\r\n\t        if (asyncValidator === void 0) { asyncValidator = null; }\r\n\t        return new modelModule.Control(value, validator, asyncValidator);\r\n\t    };\r\n\t    /**\r\n\t     * Construct an array of {@link Control}s from the given `controlsConfig` array of\r\n\t     * configuration, with the given optional `validator` and `asyncValidator`.\r\n\t     */\r\n\t    FormBuilder.prototype.array = function (controlsConfig, validator, asyncValidator) {\r\n\t        var _this = this;\r\n\t        if (validator === void 0) { validator = null; }\r\n\t        if (asyncValidator === void 0) { asyncValidator = null; }\r\n\t        var controls = controlsConfig.map(function (c) { return _this._createControl(c); });\r\n\t        return new modelModule.ControlArray(controls, validator, asyncValidator);\r\n\t    };\r\n\t    /** @internal */\r\n\t    FormBuilder.prototype._reduceControls = function (controlsConfig) {\r\n\t        var _this = this;\r\n\t        var controls = {};\r\n\t        collection_1.StringMapWrapper.forEach(controlsConfig, function (controlConfig, controlName) {\r\n\t            controls[controlName] = _this._createControl(controlConfig);\r\n\t        });\r\n\t        return controls;\r\n\t    };\r\n\t    /** @internal */\r\n\t    FormBuilder.prototype._createControl = function (controlConfig) {\r\n\t        if (controlConfig instanceof modelModule.Control ||\r\n\t            controlConfig instanceof modelModule.ControlGroup ||\r\n\t            controlConfig instanceof modelModule.ControlArray) {\r\n\t            return controlConfig;\r\n\t        }\r\n\t        else if (lang_1.isArray(controlConfig)) {\r\n\t            var value = controlConfig[0];\r\n\t            var validator = controlConfig.length > 1 ? controlConfig[1] : null;\r\n\t            var asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\r\n\t            return this.control(value, validator, asyncValidator);\r\n\t        }\r\n\t        else {\r\n\t            return this.control(controlConfig);\r\n\t        }\r\n\t    };\r\n\t    FormBuilder = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], FormBuilder);\r\n\t    return FormBuilder;\r\n\t})();\r\n\texports.FormBuilder = FormBuilder;\r\n\n\n/***/ },\n/* 270 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\tvar ObservableStrategy = (function () {\r\n\t    function ObservableStrategy() {\r\n\t    }\r\n\t    ObservableStrategy.prototype.createSubscription = function (async, updateLatestValue) {\r\n\t        return async_1.ObservableWrapper.subscribe(async, updateLatestValue, function (e) { throw e; });\r\n\t    };\r\n\t    ObservableStrategy.prototype.dispose = function (subscription) { async_1.ObservableWrapper.dispose(subscription); };\r\n\t    ObservableStrategy.prototype.onDestroy = function (subscription) { async_1.ObservableWrapper.dispose(subscription); };\r\n\t    return ObservableStrategy;\r\n\t})();\r\n\tvar PromiseStrategy = (function () {\r\n\t    function PromiseStrategy() {\r\n\t    }\r\n\t    PromiseStrategy.prototype.createSubscription = function (async, updateLatestValue) {\r\n\t        return async.then(updateLatestValue);\r\n\t    };\r\n\t    PromiseStrategy.prototype.dispose = function (subscription) { };\r\n\t    PromiseStrategy.prototype.onDestroy = function (subscription) { };\r\n\t    return PromiseStrategy;\r\n\t})();\r\n\tvar _promiseStrategy = new PromiseStrategy();\r\n\tvar _observableStrategy = new ObservableStrategy();\r\n\tvar __unused; // avoid unused import when Promise union types are erased\r\n\t/**\r\n\t * The `async` pipe subscribes to an Observable or Promise and returns the latest value it has\r\n\t * emitted.\r\n\t * When a new value is emitted, the `async` pipe marks the component to be checked for changes.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\r\n\t * promise.\r\n\t *\r\n\t * {@example core/pipes/ts/async_pipe/async_pipe_example.ts region='AsyncPipe'}\r\n\t *\r\n\t * It's also possible to use `async` with Observables. The example below binds the `time` Observable\r\n\t * to the view. Every 500ms, the `time` Observable updates the view with the current time.\r\n\t *\r\n\t * ```typescript\r\n\t * ```\r\n\t */\r\n\tvar AsyncPipe = (function () {\r\n\t    function AsyncPipe(_ref) {\r\n\t        /** @internal */\r\n\t        this._latestValue = null;\r\n\t        /** @internal */\r\n\t        this._latestReturnedValue = null;\r\n\t        /** @internal */\r\n\t        this._subscription = null;\r\n\t        /** @internal */\r\n\t        this._obj = null;\r\n\t        this._strategy = null;\r\n\t        this._ref = _ref;\r\n\t    }\r\n\t    AsyncPipe.prototype.ngOnDestroy = function () {\r\n\t        if (lang_1.isPresent(this._subscription)) {\r\n\t            this._dispose();\r\n\t        }\r\n\t    };\r\n\t    AsyncPipe.prototype.transform = function (obj, args) {\r\n\t        if (lang_1.isBlank(this._obj)) {\r\n\t            if (lang_1.isPresent(obj)) {\r\n\t                this._subscribe(obj);\r\n\t            }\r\n\t            this._latestReturnedValue = this._latestValue;\r\n\t            return this._latestValue;\r\n\t        }\r\n\t        if (obj !== this._obj) {\r\n\t            this._dispose();\r\n\t            return this.transform(obj);\r\n\t        }\r\n\t        if (this._latestValue === this._latestReturnedValue) {\r\n\t            return this._latestReturnedValue;\r\n\t        }\r\n\t        else {\r\n\t            this._latestReturnedValue = this._latestValue;\r\n\t            return core_1.WrappedValue.wrap(this._latestValue);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    AsyncPipe.prototype._subscribe = function (obj) {\r\n\t        var _this = this;\r\n\t        this._obj = obj;\r\n\t        this._strategy = this._selectStrategy(obj);\r\n\t        this._subscription = this._strategy.createSubscription(obj, function (value) { return _this._updateLatestValue(obj, value); });\r\n\t    };\r\n\t    /** @internal */\r\n\t    AsyncPipe.prototype._selectStrategy = function (obj) {\r\n\t        if (lang_1.isPromise(obj)) {\r\n\t            return _promiseStrategy;\r\n\t        }\r\n\t        else if (async_1.ObservableWrapper.isObservable(obj)) {\r\n\t            return _observableStrategy;\r\n\t        }\r\n\t        else {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(AsyncPipe, obj);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    AsyncPipe.prototype._dispose = function () {\r\n\t        this._strategy.dispose(this._subscription);\r\n\t        this._latestValue = null;\r\n\t        this._latestReturnedValue = null;\r\n\t        this._subscription = null;\r\n\t        this._obj = null;\r\n\t    };\r\n\t    /** @internal */\r\n\t    AsyncPipe.prototype._updateLatestValue = function (async, value) {\r\n\t        if (async === this._obj) {\r\n\t            this._latestValue = value;\r\n\t            this._ref.markForCheck();\r\n\t        }\r\n\t    };\r\n\t    AsyncPipe = __decorate([\r\n\t        // avoid unused import when Promise union types are erased\r\n\t        core_1.Pipe({ name: 'async', pure: false }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [core_1.ChangeDetectorRef])\r\n\t    ], AsyncPipe);\r\n\t    return AsyncPipe;\r\n\t})();\r\n\texports.AsyncPipe = AsyncPipe;\r\n\n\n/***/ },\n/* 271 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar intl_1 = __webpack_require__(314);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\t// TODO: move to a global configurable location along with other i18n components.\r\n\tvar defaultLocale = 'en-US';\r\n\t/**\r\n\t * Formats a date value to a string based on the requested format.\r\n\t *\r\n\t * WARNINGS:\r\n\t * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\r\n\t *   Instead users should treat the date as an immutable object and change the reference when the\r\n\t *   pipe needs to re-run (this is to avoid reformatting the date on every change detection run\r\n\t *   which would be an expensive operation).\r\n\t * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera\r\n\t *   browsers.\r\n\t *\r\n\t * ## Usage\r\n\t *\r\n\t *     expression | date[:format]\r\n\t *\r\n\t * where `expression` is a date object or a number (milliseconds since UTC epoch) and\r\n\t * `format` indicates which date/time components to include:\r\n\t *\r\n\t *  | Component | Symbol | Short Form   | Long Form         | Numeric   | 2-digit   |\r\n\t *  |-----------|:------:|--------------|-------------------|-----------|-----------|\r\n\t *  | era       |   G    | G (AD)       | GGGG (Anno Domini)| -         | -         |\r\n\t *  | year      |   y    | -            | -                 | y (2015)  | yy (15)   |\r\n\t *  | month     |   M    | MMM (Sep)    | MMMM (September)  | M (9)     | MM (09)   |\r\n\t *  | day       |   d    | -            | -                 | d (3)     | dd (03)   |\r\n\t *  | weekday   |   E    | EEE (Sun)    | EEEE (Sunday)     | -         | -         |\r\n\t *  | hour      |   j    | -            | -                 | j (13)    | jj (13)   |\r\n\t *  | hour12    |   h    | -            | -                 | h (1 PM)  | hh (01 PM)|\r\n\t *  | hour24    |   H    | -            | -                 | H (13)    | HH (13)   |\r\n\t *  | minute    |   m    | -            | -                 | m (5)     | mm (05)   |\r\n\t *  | second    |   s    | -            | -                 | s (9)     | ss (09)   |\r\n\t *  | timezone  |   z    | -            | z (Pacific Standard Time)| -  | -         |\r\n\t *  | timezone  |   Z    | Z (GMT-8:00) | -                 | -         | -         |\r\n\t *\r\n\t * In javascript, only the components specified will be respected (not the ordering,\r\n\t * punctuations, ...) and details of the formatting will be dependent on the locale.\r\n\t * On the other hand in Dart version, you can also include quoted text as well as some extra\r\n\t * date/time components such as quarter. For more information see:\r\n\t * https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/intl/intl.DateFormat.\r\n\t *\r\n\t * `format` can also be one of the following predefined formats:\r\n\t *\r\n\t *  - `'medium'`: equivalent to `'yMMMdjms'` (e.g. Sep 3, 2010, 12:05:08 PM for en-US)\r\n\t *  - `'short'`: equivalent to `'yMdjm'` (e.g. 9/3/2010, 12:05 PM for en-US)\r\n\t *  - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. Friday, September 3, 2010 for en-US)\r\n\t *  - `'longDate'`: equivalent to `'yMMMMd'` (e.g. September 3, 2010)\r\n\t *  - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. Sep 3, 2010 for en-US)\r\n\t *  - `'shortDate'`: equivalent to `'yMd'` (e.g. 9/3/2010 for en-US)\r\n\t *  - `'mediumTime'`: equivalent to `'jms'` (e.g. 12:05:08 PM for en-US)\r\n\t *  - `'shortTime'`: equivalent to `'jm'` (e.g. 12:05 PM for en-US)\r\n\t *\r\n\t * Timezone of the formatted text will be the local system timezone of the end-users machine.\r\n\t *\r\n\t * ### Examples\r\n\t *\r\n\t * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)\r\n\t * in the _local_ time and locale is 'en-US':\r\n\t *\r\n\t * ```\r\n\t *     {{ dateObj | date }}               // output is 'Jun 15, 2015'\r\n\t *     {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'\r\n\t *     {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'\r\n\t *     {{ dateObj | date:'mmss' }}        // output is '43:11'\r\n\t * ```\r\n\t *\r\n\t * {@example core/pipes/ts/date_pipe/date_pipe_example.ts region='DatePipe'}\r\n\t */\r\n\tvar DatePipe = (function () {\r\n\t    function DatePipe() {\r\n\t    }\r\n\t    DatePipe.prototype.transform = function (value, args) {\r\n\t        if (lang_1.isBlank(value))\r\n\t            return null;\r\n\t        if (!this.supports(value)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(DatePipe, value);\r\n\t        }\r\n\t        var pattern = lang_1.isPresent(args) && args.length > 0 ? args[0] : 'mediumDate';\r\n\t        if (lang_1.isNumber(value)) {\r\n\t            value = lang_1.DateWrapper.fromMillis(value);\r\n\t        }\r\n\t        if (collection_1.StringMapWrapper.contains(DatePipe._ALIASES, pattern)) {\r\n\t            pattern = collection_1.StringMapWrapper.get(DatePipe._ALIASES, pattern);\r\n\t        }\r\n\t        return intl_1.DateFormatter.format(value, defaultLocale, pattern);\r\n\t    };\r\n\t    DatePipe.prototype.supports = function (obj) { return lang_1.isDate(obj) || lang_1.isNumber(obj); };\r\n\t    /** @internal */\r\n\t    DatePipe._ALIASES = {\r\n\t        'medium': 'yMMMdjms',\r\n\t        'short': 'yMdjm',\r\n\t        'fullDate': 'yMMMMEEEEd',\r\n\t        'longDate': 'yMMMMd',\r\n\t        'mediumDate': 'yMMMd',\r\n\t        'shortDate': 'yMd',\r\n\t        'mediumTime': 'jms',\r\n\t        'shortTime': 'jm'\r\n\t    };\r\n\t    DatePipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'date', pure: true }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DatePipe);\r\n\t    return DatePipe;\r\n\t})();\r\n\texports.DatePipe = DatePipe;\r\n\n\n/***/ },\n/* 272 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\tvar interpolationExp = lang_1.RegExpWrapper.create('#');\r\n\t/**\r\n\t *\r\n\t *  Maps a value to a string that pluralizes the value properly.\r\n\t *\r\n\t *  ## Usage\r\n\t *\r\n\t *  expression | i18nPlural:mapping\r\n\t *\r\n\t *  where `expression` is a number and `mapping` is an object that indicates the proper text for\r\n\t *  when the `expression` evaluates to 0, 1, or some other number.  You can interpolate the actual\r\n\t *  value into the text using the `#` sign.\r\n\t *\r\n\t *  ## Example\r\n\t *\r\n\t *  ```\r\n\t *  <div>\r\n\t *    {{ messages.length | i18nPlural: messageMapping }}\r\n\t *  </div>\r\n\t *\r\n\t *  class MyApp {\r\n\t *    messages: any[];\r\n\t *    messageMapping: any = {\r\n\t *      '=0': 'No messages.',\r\n\t *      '=1': 'One message.',\r\n\t *      'other': '# messages.'\r\n\t *    }\r\n\t *    ...\r\n\t *  }\r\n\t *  ```\r\n\t *\r\n\t */\r\n\tvar I18nPluralPipe = (function () {\r\n\t    function I18nPluralPipe() {\r\n\t    }\r\n\t    I18nPluralPipe.prototype.transform = function (value, args) {\r\n\t        if (args === void 0) { args = null; }\r\n\t        var key;\r\n\t        var valueStr;\r\n\t        var pluralMap = (args[0]);\r\n\t        if (!lang_1.isStringMap(pluralMap)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(I18nPluralPipe, pluralMap);\r\n\t        }\r\n\t        key = value === 0 || value === 1 ? \"=\" + value : 'other';\r\n\t        valueStr = lang_1.isPresent(value) ? value.toString() : '';\r\n\t        return lang_1.StringWrapper.replaceAll(pluralMap[key], interpolationExp, valueStr);\r\n\t    };\r\n\t    I18nPluralPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'i18nPlural', pure: true }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], I18nPluralPipe);\r\n\t    return I18nPluralPipe;\r\n\t})();\r\n\texports.I18nPluralPipe = I18nPluralPipe;\r\n\n\n/***/ },\n/* 273 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\t/**\r\n\t *\r\n\t *  Generic selector that displays the string that matches the current value.\r\n\t *\r\n\t *  ## Usage\r\n\t *\r\n\t *  expression | i18nSelect:mapping\r\n\t *\r\n\t *  where `mapping` is an object that indicates the text that should be displayed\r\n\t *  for different values of the provided `expression`.\r\n\t *\r\n\t *  ## Example\r\n\t *\r\n\t *  ```\r\n\t *  <div>\r\n\t *    {{ gender | i18nSelect: inviteMap }}\r\n\t *  </div>\r\n\t *\r\n\t *  class MyApp {\r\n\t *    gender: string = 'male';\r\n\t *    inviteMap: any = {\r\n\t *      'male': 'Invite her.',\r\n\t *      'female': 'Invite him.',\r\n\t *      'other': 'Invite them.'\r\n\t *    }\r\n\t *    ...\r\n\t *  }\r\n\t *  ```\r\n\t */\r\n\tvar I18nSelectPipe = (function () {\r\n\t    function I18nSelectPipe() {\r\n\t    }\r\n\t    I18nSelectPipe.prototype.transform = function (value, args) {\r\n\t        if (args === void 0) { args = null; }\r\n\t        var mapping = (args[0]);\r\n\t        if (!lang_1.isStringMap(mapping)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(I18nSelectPipe, mapping);\r\n\t        }\r\n\t        return collection_1.StringMapWrapper.contains(mapping, value) ? mapping[value] : mapping['other'];\r\n\t    };\r\n\t    I18nSelectPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'i18nSelect', pure: true }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], I18nSelectPipe);\r\n\t    return I18nSelectPipe;\r\n\t})();\r\n\texports.I18nSelectPipe = I18nSelectPipe;\r\n\n\n/***/ },\n/* 274 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\t/**\r\n\t * Transforms any input value using `JSON.stringify`. Useful for debugging.\r\n\t *\r\n\t * ### Example\r\n\t * {@example core/pipes/ts/json_pipe/json_pipe_example.ts region='JsonPipe'}\r\n\t */\r\n\tvar JsonPipe = (function () {\r\n\t    function JsonPipe() {\r\n\t    }\r\n\t    JsonPipe.prototype.transform = function (value, args) {\r\n\t        if (args === void 0) { args = null; }\r\n\t        return lang_1.Json.stringify(value);\r\n\t    };\r\n\t    JsonPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'json', pure: false }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], JsonPipe);\r\n\t    return JsonPipe;\r\n\t})();\r\n\texports.JsonPipe = JsonPipe;\r\n\n\n/***/ },\n/* 275 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\t/**\r\n\t * Transforms text to lowercase.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/pipes/ts/lowerupper_pipe/lowerupper_pipe_example.ts region='LowerUpperPipe'}\r\n\t */\r\n\tvar LowerCasePipe = (function () {\r\n\t    function LowerCasePipe() {\r\n\t    }\r\n\t    LowerCasePipe.prototype.transform = function (value, args) {\r\n\t        if (args === void 0) { args = null; }\r\n\t        if (lang_1.isBlank(value))\r\n\t            return value;\r\n\t        if (!lang_1.isString(value)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(LowerCasePipe, value);\r\n\t        }\r\n\t        return value.toLowerCase();\r\n\t    };\r\n\t    LowerCasePipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'lowercase' }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], LowerCasePipe);\r\n\t    return LowerCasePipe;\r\n\t})();\r\n\texports.LowerCasePipe = LowerCasePipe;\r\n\n\n/***/ },\n/* 276 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar intl_1 = __webpack_require__(314);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\tvar defaultLocale = 'en-US';\r\n\tvar _re = lang_1.RegExpWrapper.create('^(\\\\d+)?\\\\.((\\\\d+)(\\\\-(\\\\d+))?)?$');\r\n\t/**\r\n\t * Internal base class for numeric pipes.\r\n\t */\r\n\tvar NumberPipe = (function () {\r\n\t    function NumberPipe() {\r\n\t    }\r\n\t    /** @internal */\r\n\t    NumberPipe._format = function (value, style, digits, currency, currencyAsSymbol) {\r\n\t        if (currency === void 0) { currency = null; }\r\n\t        if (currencyAsSymbol === void 0) { currencyAsSymbol = false; }\r\n\t        if (lang_1.isBlank(value))\r\n\t            return null;\r\n\t        if (!lang_1.isNumber(value)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(NumberPipe, value);\r\n\t        }\r\n\t        var minInt = 1, minFraction = 0, maxFraction = 3;\r\n\t        if (lang_1.isPresent(digits)) {\r\n\t            var parts = lang_1.RegExpWrapper.firstMatch(_re, digits);\r\n\t            if (lang_1.isBlank(parts)) {\r\n\t                throw new exceptions_1.BaseException(digits + \" is not a valid digit info for number pipes\");\r\n\t            }\r\n\t            if (lang_1.isPresent(parts[1])) {\r\n\t                minInt = lang_1.NumberWrapper.parseIntAutoRadix(parts[1]);\r\n\t            }\r\n\t            if (lang_1.isPresent(parts[3])) {\r\n\t                minFraction = lang_1.NumberWrapper.parseIntAutoRadix(parts[3]);\r\n\t            }\r\n\t            if (lang_1.isPresent(parts[5])) {\r\n\t                maxFraction = lang_1.NumberWrapper.parseIntAutoRadix(parts[5]);\r\n\t            }\r\n\t        }\r\n\t        return intl_1.NumberFormatter.format(value, defaultLocale, style, {\r\n\t            minimumIntegerDigits: minInt,\r\n\t            minimumFractionDigits: minFraction,\r\n\t            maximumFractionDigits: maxFraction,\r\n\t            currency: currency,\r\n\t            currencyAsSymbol: currencyAsSymbol\r\n\t        });\r\n\t    };\r\n\t    NumberPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], NumberPipe);\r\n\t    return NumberPipe;\r\n\t})();\r\n\texports.NumberPipe = NumberPipe;\r\n\t/**\r\n\t * WARNING: this pipe uses the Internationalization API.\r\n\t * Therefore it is only reliable in Chrome and Opera browsers.\r\n\t *\r\n\t * Formats a number as local text. i.e. group sizing and separator and other locale-specific\r\n\t * configurations are based on the active locale.\r\n\t *\r\n\t * ### Usage\r\n\t *\r\n\t *     expression | number[:digitInfo]\r\n\t *\r\n\t * where `expression` is a number and `digitInfo` has the following format:\r\n\t *\r\n\t *     {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\r\n\t *\r\n\t * - minIntegerDigits is the minimum number of integer digits to use. Defaults to 1.\r\n\t * - minFractionDigits is the minimum number of digits after fraction. Defaults to 0.\r\n\t * - maxFractionDigits is the maximum number of digits after fraction. Defaults to 3.\r\n\t *\r\n\t * For more information on the acceptable range for each of these numbers and other\r\n\t * details see your native internationalization library.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/pipes/ts/number_pipe/number_pipe_example.ts region='NumberPipe'}\r\n\t */\r\n\tvar DecimalPipe = (function (_super) {\r\n\t    __extends(DecimalPipe, _super);\r\n\t    function DecimalPipe() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    DecimalPipe.prototype.transform = function (value, args) {\r\n\t        var digits = collection_1.ListWrapper.first(args);\r\n\t        return NumberPipe._format(value, intl_1.NumberFormatStyle.Decimal, digits);\r\n\t    };\r\n\t    DecimalPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'number' }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DecimalPipe);\r\n\t    return DecimalPipe;\r\n\t})(NumberPipe);\r\n\texports.DecimalPipe = DecimalPipe;\r\n\t/**\r\n\t * WARNING: this pipe uses the Internationalization API.\r\n\t * Therefore it is only reliable in Chrome and Opera browsers.\r\n\t *\r\n\t * Formats a number as local percent.\r\n\t *\r\n\t * ### Usage\r\n\t *\r\n\t *     expression | percent[:digitInfo]\r\n\t *\r\n\t * For more information about `digitInfo` see {@link DecimalPipe}\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/pipes/ts/number_pipe/number_pipe_example.ts region='PercentPipe'}\r\n\t */\r\n\tvar PercentPipe = (function (_super) {\r\n\t    __extends(PercentPipe, _super);\r\n\t    function PercentPipe() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    PercentPipe.prototype.transform = function (value, args) {\r\n\t        var digits = collection_1.ListWrapper.first(args);\r\n\t        return NumberPipe._format(value, intl_1.NumberFormatStyle.Percent, digits);\r\n\t    };\r\n\t    PercentPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'percent' }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], PercentPipe);\r\n\t    return PercentPipe;\r\n\t})(NumberPipe);\r\n\texports.PercentPipe = PercentPipe;\r\n\t/**\r\n\t * WARNING: this pipe uses the Internationalization API.\r\n\t * Therefore it is only reliable in Chrome and Opera browsers.\r\n\t *\r\n\t * Formats a number as local currency.\r\n\t *\r\n\t * ### Usage\r\n\t *\r\n\t *     expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]\r\n\t *\r\n\t * where `currencyCode` is the ISO 4217 currency code, such as \"USD\" for the US dollar and\r\n\t * \"EUR\" for the euro. `symbolDisplay` is a boolean indicating whether to use the currency\r\n\t * symbol (e.g. $) or the currency code (e.g. USD) in the output. The default for this value\r\n\t * is `false`.\r\n\t * For more information about `digitInfo` see {@link DecimalPipe}\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/pipes/ts/number_pipe/number_pipe_example.ts region='CurrencyPipe'}\r\n\t */\r\n\tvar CurrencyPipe = (function (_super) {\r\n\t    __extends(CurrencyPipe, _super);\r\n\t    function CurrencyPipe() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    CurrencyPipe.prototype.transform = function (value, args) {\r\n\t        var currencyCode = lang_1.isPresent(args) && args.length > 0 ? args[0] : 'USD';\r\n\t        var symbolDisplay = lang_1.isPresent(args) && args.length > 1 ? args[1] : false;\r\n\t        var digits = lang_1.isPresent(args) && args.length > 2 ? args[2] : null;\r\n\t        return NumberPipe._format(value, intl_1.NumberFormatStyle.Currency, digits, currencyCode, symbolDisplay);\r\n\t    };\r\n\t    CurrencyPipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'currency' }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], CurrencyPipe);\r\n\t    return CurrencyPipe;\r\n\t})(NumberPipe);\r\n\texports.CurrencyPipe = CurrencyPipe;\r\n\n\n/***/ },\n/* 277 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\t/**\r\n\t * Creates a new String with some or all of the matches of a pattern replaced by\r\n\t * a replacement.\r\n\t *\r\n\t * The pattern to be matched is specified by the 'pattern' parameter.\r\n\t *\r\n\t * The replacement to be set is specified by the 'replacement' parameter.\r\n\t *\r\n\t * An optional 'flags' parameter can be set.\r\n\t *\r\n\t * ### Usage\r\n\t *\r\n\t *     expression | replace:pattern:replacement\r\n\t *\r\n\t * All behavior is based on the expected behavior of the JavaScript API\r\n\t * String.prototype.replace() function.\r\n\t *\r\n\t * Where the input expression is a [String] or [Number] (to be treated as a string),\r\n\t * the `pattern` is a [String] or [RegExp],\r\n\t * the 'replacement' is a [String] or [Function].\r\n\t *\r\n\t * --Note--: The 'pattern' parameter will be converted to a RegExp instance. Make sure to escape the\r\n\t * string properly if you are matching for regular expression special characters like parenthesis,\r\n\t * brackets etc.\r\n\t */\r\n\tvar ReplacePipe = (function () {\r\n\t    function ReplacePipe() {\r\n\t    }\r\n\t    ReplacePipe.prototype.transform = function (value, args) {\r\n\t        if (lang_1.isBlank(args) || args.length !== 2) {\r\n\t            throw new exceptions_1.BaseException('ReplacePipe requires two arguments');\r\n\t        }\r\n\t        if (lang_1.isBlank(value)) {\r\n\t            return value;\r\n\t        }\r\n\t        if (!this._supportedInput(value)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, value);\r\n\t        }\r\n\t        var input = value.toString();\r\n\t        var pattern = args[0];\r\n\t        var replacement = args[1];\r\n\t        if (!this._supportedPattern(pattern)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, pattern);\r\n\t        }\r\n\t        if (!this._supportedReplacement(replacement)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(ReplacePipe, replacement);\r\n\t        }\r\n\t        // template fails with literal RegExp e.g /pattern/igm\r\n\t        // var rgx = pattern instanceof RegExp ? pattern : RegExpWrapper.create(pattern);\r\n\t        if (lang_1.isFunction(replacement)) {\r\n\t            var rgxPattern = lang_1.isString(pattern) ? lang_1.RegExpWrapper.create(pattern) : pattern;\r\n\t            return lang_1.StringWrapper.replaceAllMapped(input, rgxPattern, replacement);\r\n\t        }\r\n\t        if (pattern instanceof RegExp) {\r\n\t            // use the replaceAll variant\r\n\t            return lang_1.StringWrapper.replaceAll(input, pattern, replacement);\r\n\t        }\r\n\t        return lang_1.StringWrapper.replace(input, pattern, replacement);\r\n\t    };\r\n\t    ReplacePipe.prototype._supportedInput = function (input) { return lang_1.isString(input) || lang_1.isNumber(input); };\r\n\t    ReplacePipe.prototype._supportedPattern = function (pattern) {\r\n\t        return lang_1.isString(pattern) || pattern instanceof RegExp;\r\n\t    };\r\n\t    ReplacePipe.prototype._supportedReplacement = function (replacement) {\r\n\t        return lang_1.isString(replacement) || lang_1.isFunction(replacement);\r\n\t    };\r\n\t    ReplacePipe = __decorate([\r\n\t        core_1.Pipe({ name: 'replace' }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], ReplacePipe);\r\n\t    return ReplacePipe;\r\n\t})();\r\n\texports.ReplacePipe = ReplacePipe;\r\n\n\n/***/ },\n/* 278 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\t/**\r\n\t * Creates a new List or String containing only a subset (slice) of the\r\n\t * elements.\r\n\t *\r\n\t * The starting index of the subset to return is specified by the `start` parameter.\r\n\t *\r\n\t * The ending index of the subset to return is specified by the optional `end` parameter.\r\n\t *\r\n\t * ### Usage\r\n\t *\r\n\t *     expression | slice:start[:end]\r\n\t *\r\n\t * All behavior is based on the expected behavior of the JavaScript API\r\n\t * Array.prototype.slice() and String.prototype.slice()\r\n\t *\r\n\t * Where the input expression is a [List] or [String], and `start` is:\r\n\t *\r\n\t * - **a positive integer**: return the item at _start_ index and all items after\r\n\t * in the list or string expression.\r\n\t * - **a negative integer**: return the item at _start_ index from the end and all items after\r\n\t * in the list or string expression.\r\n\t * - **`|start|` greater than the size of the expression**: return an empty list or string.\r\n\t * - **`|start|` negative greater than the size of the expression**: return entire list or\r\n\t * string expression.\r\n\t *\r\n\t * and where `end` is:\r\n\t *\r\n\t * - **omitted**: return all items until the end of the input\r\n\t * - **a positive integer**: return all items before _end_ index of the list or string\r\n\t * expression.\r\n\t * - **a negative integer**: return all items before _end_ index from the end of the list\r\n\t * or string expression.\r\n\t *\r\n\t * When operating on a [List], the returned list is always a copy even when all\r\n\t * the elements are being returned.\r\n\t *\r\n\t * ## List Example\r\n\t *\r\n\t * This `ngFor` example:\r\n\t *\r\n\t * {@example core/pipes/ts/slice_pipe/slice_pipe_example.ts region='SlicePipe_list'}\r\n\t *\r\n\t * produces the following:\r\n\t *\r\n\t *     <li>b</li>\r\n\t *     <li>c</li>\r\n\t *\r\n\t * ## String Examples\r\n\t *\r\n\t * {@example core/pipes/ts/slice_pipe/slice_pipe_example.ts region='SlicePipe_string'}\r\n\t */\r\n\tvar SlicePipe = (function () {\r\n\t    function SlicePipe() {\r\n\t    }\r\n\t    SlicePipe.prototype.transform = function (value, args) {\r\n\t        if (args === void 0) { args = null; }\r\n\t        if (lang_1.isBlank(args) || args.length == 0) {\r\n\t            throw new exceptions_1.BaseException('Slice pipe requires one argument');\r\n\t        }\r\n\t        if (!this.supports(value)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(SlicePipe, value);\r\n\t        }\r\n\t        if (lang_1.isBlank(value))\r\n\t            return value;\r\n\t        var start = args[0];\r\n\t        var end = args.length > 1 ? args[1] : null;\r\n\t        if (lang_1.isString(value)) {\r\n\t            return lang_1.StringWrapper.slice(value, start, end);\r\n\t        }\r\n\t        return collection_1.ListWrapper.slice(value, start, end);\r\n\t    };\r\n\t    SlicePipe.prototype.supports = function (obj) { return lang_1.isString(obj) || lang_1.isArray(obj); };\r\n\t    SlicePipe = __decorate([\r\n\t        core_1.Pipe({ name: 'slice', pure: false }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], SlicePipe);\r\n\t    return SlicePipe;\r\n\t})();\r\n\texports.SlicePipe = SlicePipe;\r\n\n\n/***/ },\n/* 279 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar invalid_pipe_argument_exception_1 = __webpack_require__(48);\r\n\t/**\r\n\t * Implements uppercase transforms to text.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example core/pipes/ts/lowerupper_pipe/lowerupper_pipe_example.ts region='LowerUpperPipe'}\r\n\t */\r\n\tvar UpperCasePipe = (function () {\r\n\t    function UpperCasePipe() {\r\n\t    }\r\n\t    UpperCasePipe.prototype.transform = function (value, args) {\r\n\t        if (args === void 0) { args = null; }\r\n\t        if (lang_1.isBlank(value))\r\n\t            return value;\r\n\t        if (!lang_1.isString(value)) {\r\n\t            throw new invalid_pipe_argument_exception_1.InvalidPipeArgumentException(UpperCasePipe, value);\r\n\t        }\r\n\t        return value.toUpperCase();\r\n\t    };\r\n\t    UpperCasePipe = __decorate([\r\n\t        lang_1.CONST(),\r\n\t        core_1.Pipe({ name: 'uppercase' }),\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], UpperCasePipe);\r\n\t    return UpperCasePipe;\r\n\t})();\r\n\texports.UpperCasePipe = UpperCasePipe;\r\n\n\n/***/ },\n/* 280 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar source_module_1 = __webpack_require__(77);\r\n\tvar change_detection_jit_generator_1 = __webpack_require__(291);\r\n\tvar abstract_change_detector_1 = __webpack_require__(191);\r\n\tvar change_detection_util_1 = __webpack_require__(79);\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar change_definition_factory_1 = __webpack_require__(597);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar change_detector_codegen_1 = __webpack_require__(647);\r\n\tvar util_1 = __webpack_require__(56);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar ABSTRACT_CHANGE_DETECTOR = \"AbstractChangeDetector\";\r\n\tvar UTIL = \"ChangeDetectionUtil\";\r\n\tvar CHANGE_DETECTOR_STATE = \"ChangeDetectorState\";\r\n\texports.CHANGE_DETECTION_JIT_IMPORTS = lang_1.CONST_EXPR({\r\n\t    'AbstractChangeDetector': abstract_change_detector_1.AbstractChangeDetector,\r\n\t    'ChangeDetectionUtil': change_detection_util_1.ChangeDetectionUtil,\r\n\t    'ChangeDetectorState': constants_1.ChangeDetectorState\r\n\t});\r\n\tvar ABSTRACT_CHANGE_DETECTOR_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/abstract_change_detector\" + util_1.MODULE_SUFFIX);\r\n\tvar UTIL_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/change_detection_util\" + util_1.MODULE_SUFFIX);\r\n\tvar PREGEN_PROTO_CHANGE_DETECTOR_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/pregen_proto_change_detector\" + util_1.MODULE_SUFFIX);\r\n\tvar CONSTANTS_MODULE = source_module_1.moduleRef(\"package:angular2/src/core/change_detection/constants\" + util_1.MODULE_SUFFIX);\r\n\tvar ChangeDetectionCompiler = (function () {\r\n\t    function ChangeDetectionCompiler(_genConfig) {\r\n\t        this._genConfig = _genConfig;\r\n\t    }\r\n\t    ChangeDetectionCompiler.prototype.compileComponentRuntime = function (componentType, strategy, parsedTemplate) {\r\n\t        var _this = this;\r\n\t        var changeDetectorDefinitions = change_definition_factory_1.createChangeDetectorDefinitions(componentType, strategy, this._genConfig, parsedTemplate);\r\n\t        return changeDetectorDefinitions.map(function (definition) {\r\n\t            return _this._createChangeDetectorFactory(definition);\r\n\t        });\r\n\t    };\r\n\t    ChangeDetectionCompiler.prototype._createChangeDetectorFactory = function (definition) {\r\n\t        var proto = new change_detection_1.DynamicProtoChangeDetector(definition);\r\n\t        return function () { return proto.instantiate(); };\r\n\t    };\r\n\t    ChangeDetectionCompiler.prototype.compileComponentCodeGen = function (componentType, strategy, parsedTemplate) {\r\n\t        var changeDetectorDefinitions = change_definition_factory_1.createChangeDetectorDefinitions(componentType, strategy, this._genConfig, parsedTemplate);\r\n\t        var factories = [];\r\n\t        var index = 0;\r\n\t        var sourceParts = changeDetectorDefinitions.map(function (definition) {\r\n\t            var codegen;\r\n\t            var sourcePart;\r\n\t            // TODO(tbosch): move the 2 code generators to the same place, one with .dart and one with .ts\r\n\t            // suffix\r\n\t            // and have the same API for calling them!\r\n\t            if (lang_1.IS_DART) {\r\n\t                codegen = new change_detector_codegen_1.Codegen(PREGEN_PROTO_CHANGE_DETECTOR_MODULE);\r\n\t                var className = \"_\" + definition.id;\r\n\t                var typeRef = (index === 0 && componentType.isHost) ?\r\n\t                    'dynamic' :\r\n\t                    \"\" + source_module_1.moduleRef(componentType.moduleUrl) + componentType.name;\r\n\t                codegen.generate(typeRef, className, definition);\r\n\t                factories.push(className + \".newChangeDetector\");\r\n\t                sourcePart = codegen.toString();\r\n\t            }\r\n\t            else {\r\n\t                codegen = new change_detection_jit_generator_1.ChangeDetectorJITGenerator(definition, \"\" + UTIL_MODULE + UTIL, \"\" + ABSTRACT_CHANGE_DETECTOR_MODULE + ABSTRACT_CHANGE_DETECTOR, \"\" + CONSTANTS_MODULE + CHANGE_DETECTOR_STATE);\r\n\t                factories.push(\"function() { return new \" + codegen.typeName + \"(); }\");\r\n\t                sourcePart = codegen.generateSource();\r\n\t            }\r\n\t            index++;\r\n\t            return sourcePart;\r\n\t        });\r\n\t        return new source_module_1.SourceExpressions(sourceParts, factories);\r\n\t    };\r\n\t    ChangeDetectionCompiler = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [change_detection_1.ChangeDetectorGenConfig])\r\n\t    ], ChangeDetectionCompiler);\r\n\t    return ChangeDetectionCompiler;\r\n\t})();\r\n\texports.ChangeDetectionCompiler = ChangeDetectionCompiler;\r\n\n\n/***/ },\n/* 281 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar compiler_1 = __webpack_require__(81);\r\n\tvar view_ref_1 = __webpack_require__(132);\r\n\tvar template_compiler_1 = __webpack_require__(189);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar RuntimeCompiler = (function (_super) {\r\n\t    __extends(RuntimeCompiler, _super);\r\n\t    function RuntimeCompiler() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    return RuntimeCompiler;\r\n\t})(compiler_1.Compiler);\r\n\texports.RuntimeCompiler = RuntimeCompiler;\r\n\tvar RuntimeCompiler_ = (function (_super) {\r\n\t    __extends(RuntimeCompiler_, _super);\r\n\t    function RuntimeCompiler_(_templateCompiler) {\r\n\t        _super.call(this);\r\n\t        this._templateCompiler = _templateCompiler;\r\n\t    }\r\n\t    RuntimeCompiler_.prototype.compileInHost = function (componentType) {\r\n\t        return this._templateCompiler.compileHostComponentRuntime(componentType)\r\n\t            .then(function (hostViewFactory) { return new view_ref_1.HostViewFactoryRef_(hostViewFactory); });\r\n\t    };\r\n\t    RuntimeCompiler_.prototype.clearCache = function () {\r\n\t        _super.prototype.clearCache.call(this);\r\n\t        this._templateCompiler.clearCache();\r\n\t    };\r\n\t    RuntimeCompiler_ = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [template_compiler_1.TemplateCompiler])\r\n\t    ], RuntimeCompiler_);\r\n\t    return RuntimeCompiler_;\r\n\t})(compiler_1.Compiler_);\r\n\texports.RuntimeCompiler_ = RuntimeCompiler_;\r\n\n\n/***/ },\n/* 282 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar cpl = __webpack_require__(125);\r\n\tvar md = __webpack_require__(99);\r\n\tvar directive_resolver_1 = __webpack_require__(128);\r\n\tvar pipe_resolver_1 = __webpack_require__(200);\r\n\tvar view_resolver_1 = __webpack_require__(202);\r\n\tvar directive_lifecycle_reflector_1 = __webpack_require__(615);\r\n\tvar interfaces_1 = __webpack_require__(130);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar di_2 = __webpack_require__(8);\r\n\tvar platform_directives_and_pipes_1 = __webpack_require__(204);\r\n\tvar util_1 = __webpack_require__(56);\r\n\tvar url_resolver_1 = __webpack_require__(92);\r\n\tvar RuntimeMetadataResolver = (function () {\r\n\t    function RuntimeMetadataResolver(_directiveResolver, _pipeResolver, _viewResolver, _platformDirectives, _platformPipes) {\r\n\t        this._directiveResolver = _directiveResolver;\r\n\t        this._pipeResolver = _pipeResolver;\r\n\t        this._viewResolver = _viewResolver;\r\n\t        this._platformDirectives = _platformDirectives;\r\n\t        this._platformPipes = _platformPipes;\r\n\t        this._directiveCache = new Map();\r\n\t        this._pipeCache = new Map();\r\n\t    }\r\n\t    RuntimeMetadataResolver.prototype.getDirectiveMetadata = function (directiveType) {\r\n\t        var meta = this._directiveCache.get(directiveType);\r\n\t        if (lang_1.isBlank(meta)) {\r\n\t            var dirMeta = this._directiveResolver.resolve(directiveType);\r\n\t            var moduleUrl = null;\r\n\t            var templateMeta = null;\r\n\t            var changeDetectionStrategy = null;\r\n\t            if (dirMeta instanceof md.ComponentMetadata) {\r\n\t                var cmpMeta = dirMeta;\r\n\t                moduleUrl = calcModuleUrl(directiveType, cmpMeta);\r\n\t                var viewMeta = this._viewResolver.resolve(directiveType);\r\n\t                templateMeta = new cpl.CompileTemplateMetadata({\r\n\t                    encapsulation: viewMeta.encapsulation,\r\n\t                    template: viewMeta.template,\r\n\t                    templateUrl: viewMeta.templateUrl,\r\n\t                    styles: viewMeta.styles,\r\n\t                    styleUrls: viewMeta.styleUrls\r\n\t                });\r\n\t                changeDetectionStrategy = cmpMeta.changeDetection;\r\n\t            }\r\n\t            meta = cpl.CompileDirectiveMetadata.create({\r\n\t                selector: dirMeta.selector,\r\n\t                exportAs: dirMeta.exportAs,\r\n\t                isComponent: lang_1.isPresent(templateMeta),\r\n\t                dynamicLoadable: true,\r\n\t                type: new cpl.CompileTypeMetadata({ name: lang_1.stringify(directiveType), moduleUrl: moduleUrl, runtime: directiveType }),\r\n\t                template: templateMeta,\r\n\t                changeDetection: changeDetectionStrategy,\r\n\t                inputs: dirMeta.inputs,\r\n\t                outputs: dirMeta.outputs,\r\n\t                host: dirMeta.host,\r\n\t                lifecycleHooks: interfaces_1.LIFECYCLE_HOOKS_VALUES.filter(function (hook) { return directive_lifecycle_reflector_1.hasLifecycleHook(hook, directiveType); })\r\n\t            });\r\n\t            this._directiveCache.set(directiveType, meta);\r\n\t        }\r\n\t        return meta;\r\n\t    };\r\n\t    RuntimeMetadataResolver.prototype.getPipeMetadata = function (pipeType) {\r\n\t        var meta = this._pipeCache.get(pipeType);\r\n\t        if (lang_1.isBlank(meta)) {\r\n\t            var pipeMeta = this._pipeResolver.resolve(pipeType);\r\n\t            var moduleUrl = reflection_1.reflector.importUri(pipeType);\r\n\t            meta = new cpl.CompilePipeMetadata({\r\n\t                type: new cpl.CompileTypeMetadata({ name: lang_1.stringify(pipeType), moduleUrl: moduleUrl, runtime: pipeType }),\r\n\t                name: pipeMeta.name,\r\n\t                pure: pipeMeta.pure\r\n\t            });\r\n\t            this._pipeCache.set(pipeType, meta);\r\n\t        }\r\n\t        return meta;\r\n\t    };\r\n\t    RuntimeMetadataResolver.prototype.getViewDirectivesMetadata = function (component) {\r\n\t        var _this = this;\r\n\t        var view = this._viewResolver.resolve(component);\r\n\t        var directives = flattenDirectives(view, this._platformDirectives);\r\n\t        for (var i = 0; i < directives.length; i++) {\r\n\t            if (!isValidType(directives[i])) {\r\n\t                throw new exceptions_1.BaseException(\"Unexpected directive value '\" + lang_1.stringify(directives[i]) + \"' on the View of component '\" + lang_1.stringify(component) + \"'\");\r\n\t            }\r\n\t        }\r\n\t        return directives.map(function (type) { return _this.getDirectiveMetadata(type); });\r\n\t    };\r\n\t    RuntimeMetadataResolver.prototype.getViewPipesMetadata = function (component) {\r\n\t        var _this = this;\r\n\t        var view = this._viewResolver.resolve(component);\r\n\t        var pipes = flattenPipes(view, this._platformPipes);\r\n\t        for (var i = 0; i < pipes.length; i++) {\r\n\t            if (!isValidType(pipes[i])) {\r\n\t                throw new exceptions_1.BaseException(\"Unexpected piped value '\" + lang_1.stringify(pipes[i]) + \"' on the View of component '\" + lang_1.stringify(component) + \"'\");\r\n\t            }\r\n\t        }\r\n\t        return pipes.map(function (type) { return _this.getPipeMetadata(type); });\r\n\t    };\r\n\t    RuntimeMetadataResolver = __decorate([\r\n\t        di_2.Injectable(),\r\n\t        __param(3, di_2.Optional()),\r\n\t        __param(3, di_2.Inject(platform_directives_and_pipes_1.PLATFORM_DIRECTIVES)),\r\n\t        __param(4, di_2.Optional()),\r\n\t        __param(4, di_2.Inject(platform_directives_and_pipes_1.PLATFORM_PIPES)), \r\n\t        __metadata('design:paramtypes', [directive_resolver_1.DirectiveResolver, pipe_resolver_1.PipeResolver, view_resolver_1.ViewResolver, Array, Array])\r\n\t    ], RuntimeMetadataResolver);\r\n\t    return RuntimeMetadataResolver;\r\n\t})();\r\n\texports.RuntimeMetadataResolver = RuntimeMetadataResolver;\r\n\tfunction flattenDirectives(view, platformDirectives) {\r\n\t    var directives = [];\r\n\t    if (lang_1.isPresent(platformDirectives)) {\r\n\t        flattenArray(platformDirectives, directives);\r\n\t    }\r\n\t    if (lang_1.isPresent(view.directives)) {\r\n\t        flattenArray(view.directives, directives);\r\n\t    }\r\n\t    return directives;\r\n\t}\r\n\tfunction flattenPipes(view, platformPipes) {\r\n\t    var pipes = [];\r\n\t    if (lang_1.isPresent(platformPipes)) {\r\n\t        flattenArray(platformPipes, pipes);\r\n\t    }\r\n\t    if (lang_1.isPresent(view.pipes)) {\r\n\t        flattenArray(view.pipes, pipes);\r\n\t    }\r\n\t    return pipes;\r\n\t}\r\n\tfunction flattenArray(tree, out) {\r\n\t    for (var i = 0; i < tree.length; i++) {\r\n\t        var item = di_1.resolveForwardRef(tree[i]);\r\n\t        if (lang_1.isArray(item)) {\r\n\t            flattenArray(item, out);\r\n\t        }\r\n\t        else {\r\n\t            out.push(item);\r\n\t        }\r\n\t    }\r\n\t}\r\n\tfunction isValidType(value) {\r\n\t    return lang_1.isPresent(value) && (value instanceof lang_1.Type);\r\n\t}\r\n\tfunction calcModuleUrl(type, cmpMetadata) {\r\n\t    var moduleId = cmpMetadata.moduleId;\r\n\t    if (lang_1.isPresent(moduleId)) {\r\n\t        var scheme = url_resolver_1.getUrlScheme(moduleId);\r\n\t        return lang_1.isPresent(scheme) && scheme.length > 0 ? moduleId :\r\n\t            \"package:\" + moduleId + util_1.MODULE_SUFFIX;\r\n\t    }\r\n\t    else {\r\n\t        return reflection_1.reflector.importUri(type);\r\n\t    }\r\n\t}\r\n\n\n/***/ },\n/* 283 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar _EMPTY_ATTR_VALUE = '';\r\n\t// TODO: Can't use `const` here as\r\n\t// in Dart this is not transpiled into `final` yet...\r\n\tvar _SELECTOR_REGEXP = lang_1.RegExpWrapper.create('(\\\\:not\\\\()|' +\r\n\t    '([-\\\\w]+)|' +\r\n\t    '(?:\\\\.([-\\\\w]+))|' +\r\n\t    '(?:\\\\[([-\\\\w*]+)(?:=([^\\\\]]*))?\\\\])|' +\r\n\t    '(\\\\))|' +\r\n\t    '(\\\\s*,\\\\s*)'); // \",\"\r\n\t/**\r\n\t * A css selector contains an element name,\r\n\t * css classes and attribute/value pairs with the purpose\r\n\t * of selecting subsets out of them.\r\n\t */\r\n\tvar CssSelector = (function () {\r\n\t    function CssSelector() {\r\n\t        this.element = null;\r\n\t        this.classNames = [];\r\n\t        this.attrs = [];\r\n\t        this.notSelectors = [];\r\n\t    }\r\n\t    CssSelector.parse = function (selector) {\r\n\t        var results = [];\r\n\t        var _addResult = function (res, cssSel) {\r\n\t            if (cssSel.notSelectors.length > 0 && lang_1.isBlank(cssSel.element) &&\r\n\t                collection_1.ListWrapper.isEmpty(cssSel.classNames) && collection_1.ListWrapper.isEmpty(cssSel.attrs)) {\r\n\t                cssSel.element = \"*\";\r\n\t            }\r\n\t            res.push(cssSel);\r\n\t        };\r\n\t        var cssSelector = new CssSelector();\r\n\t        var matcher = lang_1.RegExpWrapper.matcher(_SELECTOR_REGEXP, selector);\r\n\t        var match;\r\n\t        var current = cssSelector;\r\n\t        var inNot = false;\r\n\t        while (lang_1.isPresent(match = lang_1.RegExpMatcherWrapper.next(matcher))) {\r\n\t            if (lang_1.isPresent(match[1])) {\r\n\t                if (inNot) {\r\n\t                    throw new exceptions_1.BaseException('Nesting :not is not allowed in a selector');\r\n\t                }\r\n\t                inNot = true;\r\n\t                current = new CssSelector();\r\n\t                cssSelector.notSelectors.push(current);\r\n\t            }\r\n\t            if (lang_1.isPresent(match[2])) {\r\n\t                current.setElement(match[2]);\r\n\t            }\r\n\t            if (lang_1.isPresent(match[3])) {\r\n\t                current.addClassName(match[3]);\r\n\t            }\r\n\t            if (lang_1.isPresent(match[4])) {\r\n\t                current.addAttribute(match[4], match[5]);\r\n\t            }\r\n\t            if (lang_1.isPresent(match[6])) {\r\n\t                inNot = false;\r\n\t                current = cssSelector;\r\n\t            }\r\n\t            if (lang_1.isPresent(match[7])) {\r\n\t                if (inNot) {\r\n\t                    throw new exceptions_1.BaseException('Multiple selectors in :not are not supported');\r\n\t                }\r\n\t                _addResult(results, cssSelector);\r\n\t                cssSelector = current = new CssSelector();\r\n\t            }\r\n\t        }\r\n\t        _addResult(results, cssSelector);\r\n\t        return results;\r\n\t    };\r\n\t    CssSelector.prototype.isElementSelector = function () {\r\n\t        return lang_1.isPresent(this.element) && collection_1.ListWrapper.isEmpty(this.classNames) &&\r\n\t            collection_1.ListWrapper.isEmpty(this.attrs) && this.notSelectors.length === 0;\r\n\t    };\r\n\t    CssSelector.prototype.setElement = function (element) {\r\n\t        if (element === void 0) { element = null; }\r\n\t        this.element = element;\r\n\t    };\r\n\t    /** Gets a template string for an element that matches the selector. */\r\n\t    CssSelector.prototype.getMatchingElementTemplate = function () {\r\n\t        var tagName = lang_1.isPresent(this.element) ? this.element : 'div';\r\n\t        var classAttr = this.classNames.length > 0 ? \" class=\\\"\" + this.classNames.join(' ') + \"\\\"\" : '';\r\n\t        var attrs = '';\r\n\t        for (var i = 0; i < this.attrs.length; i += 2) {\r\n\t            var attrName = this.attrs[i];\r\n\t            var attrValue = this.attrs[i + 1] !== '' ? \"=\\\"\" + this.attrs[i + 1] + \"\\\"\" : '';\r\n\t            attrs += \" \" + attrName + attrValue;\r\n\t        }\r\n\t        return \"<\" + tagName + classAttr + attrs + \"></\" + tagName + \">\";\r\n\t    };\r\n\t    CssSelector.prototype.addAttribute = function (name, value) {\r\n\t        if (value === void 0) { value = _EMPTY_ATTR_VALUE; }\r\n\t        this.attrs.push(name);\r\n\t        if (lang_1.isPresent(value)) {\r\n\t            value = value.toLowerCase();\r\n\t        }\r\n\t        else {\r\n\t            value = _EMPTY_ATTR_VALUE;\r\n\t        }\r\n\t        this.attrs.push(value);\r\n\t    };\r\n\t    CssSelector.prototype.addClassName = function (name) { this.classNames.push(name.toLowerCase()); };\r\n\t    CssSelector.prototype.toString = function () {\r\n\t        var res = '';\r\n\t        if (lang_1.isPresent(this.element)) {\r\n\t            res += this.element;\r\n\t        }\r\n\t        if (lang_1.isPresent(this.classNames)) {\r\n\t            for (var i = 0; i < this.classNames.length; i++) {\r\n\t                res += '.' + this.classNames[i];\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(this.attrs)) {\r\n\t            for (var i = 0; i < this.attrs.length;) {\r\n\t                var attrName = this.attrs[i++];\r\n\t                var attrValue = this.attrs[i++];\r\n\t                res += '[' + attrName;\r\n\t                if (attrValue.length > 0) {\r\n\t                    res += '=' + attrValue;\r\n\t                }\r\n\t                res += ']';\r\n\t            }\r\n\t        }\r\n\t        this.notSelectors.forEach(function (notSelector) { return res += \":not(\" + notSelector + \")\"; });\r\n\t        return res;\r\n\t    };\r\n\t    return CssSelector;\r\n\t})();\r\n\texports.CssSelector = CssSelector;\r\n\t/**\r\n\t * Reads a list of CssSelectors and allows to calculate which ones\r\n\t * are contained in a given CssSelector.\r\n\t */\r\n\tvar SelectorMatcher = (function () {\r\n\t    function SelectorMatcher() {\r\n\t        this._elementMap = new collection_1.Map();\r\n\t        this._elementPartialMap = new collection_1.Map();\r\n\t        this._classMap = new collection_1.Map();\r\n\t        this._classPartialMap = new collection_1.Map();\r\n\t        this._attrValueMap = new collection_1.Map();\r\n\t        this._attrValuePartialMap = new collection_1.Map();\r\n\t        this._listContexts = [];\r\n\t    }\r\n\t    SelectorMatcher.createNotMatcher = function (notSelectors) {\r\n\t        var notMatcher = new SelectorMatcher();\r\n\t        notMatcher.addSelectables(notSelectors, null);\r\n\t        return notMatcher;\r\n\t    };\r\n\t    SelectorMatcher.prototype.addSelectables = function (cssSelectors, callbackCtxt) {\r\n\t        var listContext = null;\r\n\t        if (cssSelectors.length > 1) {\r\n\t            listContext = new SelectorListContext(cssSelectors);\r\n\t            this._listContexts.push(listContext);\r\n\t        }\r\n\t        for (var i = 0; i < cssSelectors.length; i++) {\r\n\t            this._addSelectable(cssSelectors[i], callbackCtxt, listContext);\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Add an object that can be found later on by calling `match`.\r\n\t     * @param cssSelector A css selector\r\n\t     * @param callbackCtxt An opaque object that will be given to the callback of the `match` function\r\n\t     */\r\n\t    SelectorMatcher.prototype._addSelectable = function (cssSelector, callbackCtxt, listContext) {\r\n\t        var matcher = this;\r\n\t        var element = cssSelector.element;\r\n\t        var classNames = cssSelector.classNames;\r\n\t        var attrs = cssSelector.attrs;\r\n\t        var selectable = new SelectorContext(cssSelector, callbackCtxt, listContext);\r\n\t        if (lang_1.isPresent(element)) {\r\n\t            var isTerminal = attrs.length === 0 && classNames.length === 0;\r\n\t            if (isTerminal) {\r\n\t                this._addTerminal(matcher._elementMap, element, selectable);\r\n\t            }\r\n\t            else {\r\n\t                matcher = this._addPartial(matcher._elementPartialMap, element);\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(classNames)) {\r\n\t            for (var index = 0; index < classNames.length; index++) {\r\n\t                var isTerminal = attrs.length === 0 && index === classNames.length - 1;\r\n\t                var className = classNames[index];\r\n\t                if (isTerminal) {\r\n\t                    this._addTerminal(matcher._classMap, className, selectable);\r\n\t                }\r\n\t                else {\r\n\t                    matcher = this._addPartial(matcher._classPartialMap, className);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(attrs)) {\r\n\t            for (var index = 0; index < attrs.length;) {\r\n\t                var isTerminal = index === attrs.length - 2;\r\n\t                var attrName = attrs[index++];\r\n\t                var attrValue = attrs[index++];\r\n\t                if (isTerminal) {\r\n\t                    var terminalMap = matcher._attrValueMap;\r\n\t                    var terminalValuesMap = terminalMap.get(attrName);\r\n\t                    if (lang_1.isBlank(terminalValuesMap)) {\r\n\t                        terminalValuesMap = new collection_1.Map();\r\n\t                        terminalMap.set(attrName, terminalValuesMap);\r\n\t                    }\r\n\t                    this._addTerminal(terminalValuesMap, attrValue, selectable);\r\n\t                }\r\n\t                else {\r\n\t                    var parttialMap = matcher._attrValuePartialMap;\r\n\t                    var partialValuesMap = parttialMap.get(attrName);\r\n\t                    if (lang_1.isBlank(partialValuesMap)) {\r\n\t                        partialValuesMap = new collection_1.Map();\r\n\t                        parttialMap.set(attrName, partialValuesMap);\r\n\t                    }\r\n\t                    matcher = this._addPartial(partialValuesMap, attrValue);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SelectorMatcher.prototype._addTerminal = function (map, name, selectable) {\r\n\t        var terminalList = map.get(name);\r\n\t        if (lang_1.isBlank(terminalList)) {\r\n\t            terminalList = [];\r\n\t            map.set(name, terminalList);\r\n\t        }\r\n\t        terminalList.push(selectable);\r\n\t    };\r\n\t    SelectorMatcher.prototype._addPartial = function (map, name) {\r\n\t        var matcher = map.get(name);\r\n\t        if (lang_1.isBlank(matcher)) {\r\n\t            matcher = new SelectorMatcher();\r\n\t            map.set(name, matcher);\r\n\t        }\r\n\t        return matcher;\r\n\t    };\r\n\t    /**\r\n\t     * Find the objects that have been added via `addSelectable`\r\n\t     * whose css selector is contained in the given css selector.\r\n\t     * @param cssSelector A css selector\r\n\t     * @param matchedCallback This callback will be called with the object handed into `addSelectable`\r\n\t     * @return boolean true if a match was found\r\n\t    */\r\n\t    SelectorMatcher.prototype.match = function (cssSelector, matchedCallback) {\r\n\t        var result = false;\r\n\t        var element = cssSelector.element;\r\n\t        var classNames = cssSelector.classNames;\r\n\t        var attrs = cssSelector.attrs;\r\n\t        for (var i = 0; i < this._listContexts.length; i++) {\r\n\t            this._listContexts[i].alreadyMatched = false;\r\n\t        }\r\n\t        result = this._matchTerminal(this._elementMap, element, cssSelector, matchedCallback) || result;\r\n\t        result = this._matchPartial(this._elementPartialMap, element, cssSelector, matchedCallback) ||\r\n\t            result;\r\n\t        if (lang_1.isPresent(classNames)) {\r\n\t            for (var index = 0; index < classNames.length; index++) {\r\n\t                var className = classNames[index];\r\n\t                result =\r\n\t                    this._matchTerminal(this._classMap, className, cssSelector, matchedCallback) || result;\r\n\t                result =\r\n\t                    this._matchPartial(this._classPartialMap, className, cssSelector, matchedCallback) ||\r\n\t                        result;\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(attrs)) {\r\n\t            for (var index = 0; index < attrs.length;) {\r\n\t                var attrName = attrs[index++];\r\n\t                var attrValue = attrs[index++];\r\n\t                var terminalValuesMap = this._attrValueMap.get(attrName);\r\n\t                if (!lang_1.StringWrapper.equals(attrValue, _EMPTY_ATTR_VALUE)) {\r\n\t                    result = this._matchTerminal(terminalValuesMap, _EMPTY_ATTR_VALUE, cssSelector, matchedCallback) ||\r\n\t                        result;\r\n\t                }\r\n\t                result = this._matchTerminal(terminalValuesMap, attrValue, cssSelector, matchedCallback) ||\r\n\t                    result;\r\n\t                var partialValuesMap = this._attrValuePartialMap.get(attrName);\r\n\t                if (!lang_1.StringWrapper.equals(attrValue, _EMPTY_ATTR_VALUE)) {\r\n\t                    result = this._matchPartial(partialValuesMap, _EMPTY_ATTR_VALUE, cssSelector, matchedCallback) ||\r\n\t                        result;\r\n\t                }\r\n\t                result =\r\n\t                    this._matchPartial(partialValuesMap, attrValue, cssSelector, matchedCallback) || result;\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    /** @internal */\r\n\t    SelectorMatcher.prototype._matchTerminal = function (map, name, cssSelector, matchedCallback) {\r\n\t        if (lang_1.isBlank(map) || lang_1.isBlank(name)) {\r\n\t            return false;\r\n\t        }\r\n\t        var selectables = map.get(name);\r\n\t        var starSelectables = map.get(\"*\");\r\n\t        if (lang_1.isPresent(starSelectables)) {\r\n\t            selectables = selectables.concat(starSelectables);\r\n\t        }\r\n\t        if (lang_1.isBlank(selectables)) {\r\n\t            return false;\r\n\t        }\r\n\t        var selectable;\r\n\t        var result = false;\r\n\t        for (var index = 0; index < selectables.length; index++) {\r\n\t            selectable = selectables[index];\r\n\t            result = selectable.finalize(cssSelector, matchedCallback) || result;\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    /** @internal */\r\n\t    SelectorMatcher.prototype._matchPartial = function (map, name, cssSelector, matchedCallback /*: (c: CssSelector, a: any) => void*/) {\r\n\t        if (lang_1.isBlank(map) || lang_1.isBlank(name)) {\r\n\t            return false;\r\n\t        }\r\n\t        var nestedSelector = map.get(name);\r\n\t        if (lang_1.isBlank(nestedSelector)) {\r\n\t            return false;\r\n\t        }\r\n\t        // TODO(perf): get rid of recursion and measure again\r\n\t        // TODO(perf): don't pass the whole selector into the recursion,\r\n\t        // but only the not processed parts\r\n\t        return nestedSelector.match(cssSelector, matchedCallback);\r\n\t    };\r\n\t    return SelectorMatcher;\r\n\t})();\r\n\texports.SelectorMatcher = SelectorMatcher;\r\n\tvar SelectorListContext = (function () {\r\n\t    function SelectorListContext(selectors) {\r\n\t        this.selectors = selectors;\r\n\t        this.alreadyMatched = false;\r\n\t    }\r\n\t    return SelectorListContext;\r\n\t})();\r\n\texports.SelectorListContext = SelectorListContext;\r\n\t// Store context to pass back selector and context when a selector is matched\r\n\tvar SelectorContext = (function () {\r\n\t    function SelectorContext(selector, cbContext, listContext) {\r\n\t        this.selector = selector;\r\n\t        this.cbContext = cbContext;\r\n\t        this.listContext = listContext;\r\n\t        this.notSelectors = selector.notSelectors;\r\n\t    }\r\n\t    SelectorContext.prototype.finalize = function (cssSelector, callback) {\r\n\t        var result = true;\r\n\t        if (this.notSelectors.length > 0 &&\r\n\t            (lang_1.isBlank(this.listContext) || !this.listContext.alreadyMatched)) {\r\n\t            var notMatcher = SelectorMatcher.createNotMatcher(this.notSelectors);\r\n\t            result = !notMatcher.match(cssSelector, null);\r\n\t        }\r\n\t        if (result && lang_1.isPresent(callback) &&\r\n\t            (lang_1.isBlank(this.listContext) || !this.listContext.alreadyMatched)) {\r\n\t            if (lang_1.isPresent(this.listContext)) {\r\n\t                this.listContext.alreadyMatched = true;\r\n\t            }\r\n\t            callback(this.selector, this.cbContext);\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    return SelectorContext;\r\n\t})();\r\n\texports.SelectorContext = SelectorContext;\r\n\n\n/***/ },\n/* 284 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar source_module_1 = __webpack_require__(77);\r\n\tvar view_1 = __webpack_require__(63);\r\n\tvar xhr_1 = __webpack_require__(126);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar shadow_css_1 = __webpack_require__(601);\r\n\tvar url_resolver_1 = __webpack_require__(92);\r\n\tvar style_url_resolver_1 = __webpack_require__(188);\r\n\tvar util_1 = __webpack_require__(56);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar COMPONENT_VARIABLE = '%COMP%';\r\n\tvar HOST_ATTR = \"_nghost-\" + COMPONENT_VARIABLE;\r\n\tvar CONTENT_ATTR = \"_ngcontent-\" + COMPONENT_VARIABLE;\r\n\tvar StyleCompiler = (function () {\r\n\t    function StyleCompiler(_xhr, _urlResolver) {\r\n\t        this._xhr = _xhr;\r\n\t        this._urlResolver = _urlResolver;\r\n\t        this._styleCache = new Map();\r\n\t        this._shadowCss = new shadow_css_1.ShadowCss();\r\n\t    }\r\n\t    StyleCompiler.prototype.compileComponentRuntime = function (template) {\r\n\t        var styles = template.styles;\r\n\t        var styleAbsUrls = template.styleUrls;\r\n\t        return this._loadStyles(styles, styleAbsUrls, template.encapsulation === view_1.ViewEncapsulation.Emulated);\r\n\t    };\r\n\t    StyleCompiler.prototype.compileComponentCodeGen = function (template) {\r\n\t        var shim = template.encapsulation === view_1.ViewEncapsulation.Emulated;\r\n\t        return this._styleCodeGen(template.styles, template.styleUrls, shim);\r\n\t    };\r\n\t    StyleCompiler.prototype.compileStylesheetCodeGen = function (stylesheetUrl, cssText) {\r\n\t        var styleWithImports = style_url_resolver_1.extractStyleUrls(this._urlResolver, stylesheetUrl, cssText);\r\n\t        return [\r\n\t            this._styleModule(stylesheetUrl, false, this._styleCodeGen([styleWithImports.style], styleWithImports.styleUrls, false)),\r\n\t            this._styleModule(stylesheetUrl, true, this._styleCodeGen([styleWithImports.style], styleWithImports.styleUrls, true))\r\n\t        ];\r\n\t    };\r\n\t    StyleCompiler.prototype.clearCache = function () { this._styleCache.clear(); };\r\n\t    StyleCompiler.prototype._loadStyles = function (plainStyles, absUrls, encapsulate) {\r\n\t        var _this = this;\r\n\t        var promises = absUrls.map(function (absUrl) {\r\n\t            var cacheKey = \"\" + absUrl + (encapsulate ? '.shim' : '');\r\n\t            var result = _this._styleCache.get(cacheKey);\r\n\t            if (lang_1.isBlank(result)) {\r\n\t                result = _this._xhr.get(absUrl).then(function (style) {\r\n\t                    var styleWithImports = style_url_resolver_1.extractStyleUrls(_this._urlResolver, absUrl, style);\r\n\t                    return _this._loadStyles([styleWithImports.style], styleWithImports.styleUrls, encapsulate);\r\n\t                });\r\n\t                _this._styleCache.set(cacheKey, result);\r\n\t            }\r\n\t            return result;\r\n\t        });\r\n\t        return async_1.PromiseWrapper.all(promises).then(function (nestedStyles) {\r\n\t            var result = plainStyles.map(function (plainStyle) { return _this._shimIfNeeded(plainStyle, encapsulate); });\r\n\t            nestedStyles.forEach(function (styles) { return result.push(styles); });\r\n\t            return result;\r\n\t        });\r\n\t    };\r\n\t    StyleCompiler.prototype._styleCodeGen = function (plainStyles, absUrls, shim) {\r\n\t        var _this = this;\r\n\t        var arrayPrefix = lang_1.IS_DART ? \"const\" : '';\r\n\t        var styleExpressions = plainStyles.map(function (plainStyle) { return util_1.escapeSingleQuoteString(_this._shimIfNeeded(plainStyle, shim)); });\r\n\t        for (var i = 0; i < absUrls.length; i++) {\r\n\t            var moduleUrl = this._createModuleUrl(absUrls[i], shim);\r\n\t            styleExpressions.push(source_module_1.moduleRef(moduleUrl) + \"STYLES\");\r\n\t        }\r\n\t        var expressionSource = arrayPrefix + \" [\" + styleExpressions.join(',') + \"]\";\r\n\t        return new source_module_1.SourceExpression([], expressionSource);\r\n\t    };\r\n\t    StyleCompiler.prototype._styleModule = function (stylesheetUrl, shim, expression) {\r\n\t        var moduleSource = \"\\n      \" + expression.declarations.join('\\n') + \"\\n      \" + util_1.codeGenExportVariable('STYLES') + expression.expression + \";\\n    \";\r\n\t        return new source_module_1.SourceModule(this._createModuleUrl(stylesheetUrl, shim), moduleSource);\r\n\t    };\r\n\t    StyleCompiler.prototype._shimIfNeeded = function (style, shim) {\r\n\t        return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style;\r\n\t    };\r\n\t    StyleCompiler.prototype._createModuleUrl = function (stylesheetUrl, shim) {\r\n\t        return shim ? stylesheetUrl + \".shim\" + util_1.MODULE_SUFFIX : \"\" + stylesheetUrl + util_1.MODULE_SUFFIX;\r\n\t    };\r\n\t    StyleCompiler = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [xhr_1.XHR, url_resolver_1.UrlResolver])\r\n\t    ], StyleCompiler);\r\n\t    return StyleCompiler;\r\n\t})();\r\n\texports.StyleCompiler = StyleCompiler;\r\n\n\n/***/ },\n/* 285 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar directive_metadata_1 = __webpack_require__(125);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar xhr_1 = __webpack_require__(126);\r\n\tvar url_resolver_1 = __webpack_require__(92);\r\n\tvar style_url_resolver_1 = __webpack_require__(188);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar view_1 = __webpack_require__(63);\r\n\tvar html_ast_1 = __webpack_require__(183);\r\n\tvar html_parser_1 = __webpack_require__(184);\r\n\tvar template_preparser_1 = __webpack_require__(286);\r\n\tvar TemplateNormalizer = (function () {\r\n\t    function TemplateNormalizer(_xhr, _urlResolver, _htmlParser) {\r\n\t        this._xhr = _xhr;\r\n\t        this._urlResolver = _urlResolver;\r\n\t        this._htmlParser = _htmlParser;\r\n\t    }\r\n\t    TemplateNormalizer.prototype.normalizeTemplate = function (directiveType, template) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(template.template)) {\r\n\t            return async_1.PromiseWrapper.resolve(this.normalizeLoadedTemplate(directiveType, template, template.template, directiveType.moduleUrl));\r\n\t        }\r\n\t        else if (lang_1.isPresent(template.templateUrl)) {\r\n\t            var sourceAbsUrl = this._urlResolver.resolve(directiveType.moduleUrl, template.templateUrl);\r\n\t            return this._xhr.get(sourceAbsUrl)\r\n\t                .then(function (templateContent) { return _this.normalizeLoadedTemplate(directiveType, template, templateContent, sourceAbsUrl); });\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.BaseException(\"No template specified for component \" + directiveType.name);\r\n\t        }\r\n\t    };\r\n\t    TemplateNormalizer.prototype.normalizeLoadedTemplate = function (directiveType, templateMeta, template, templateAbsUrl) {\r\n\t        var _this = this;\r\n\t        var rootNodesAndErrors = this._htmlParser.parse(template, directiveType.name);\r\n\t        if (rootNodesAndErrors.errors.length > 0) {\r\n\t            var errorString = rootNodesAndErrors.errors.join('\\n');\r\n\t            throw new exceptions_1.BaseException(\"Template parse errors:\\n\" + errorString);\r\n\t        }\r\n\t        var visitor = new TemplatePreparseVisitor();\r\n\t        html_ast_1.htmlVisitAll(visitor, rootNodesAndErrors.rootNodes);\r\n\t        var allStyles = templateMeta.styles.concat(visitor.styles);\r\n\t        var allStyleAbsUrls = visitor.styleUrls.filter(style_url_resolver_1.isStyleUrlResolvable)\r\n\t            .map(function (url) { return _this._urlResolver.resolve(templateAbsUrl, url); })\r\n\t            .concat(templateMeta.styleUrls.filter(style_url_resolver_1.isStyleUrlResolvable)\r\n\t            .map(function (url) { return _this._urlResolver.resolve(directiveType.moduleUrl, url); }));\r\n\t        var allResolvedStyles = allStyles.map(function (style) {\r\n\t            var styleWithImports = style_url_resolver_1.extractStyleUrls(_this._urlResolver, templateAbsUrl, style);\r\n\t            styleWithImports.styleUrls.forEach(function (styleUrl) { return allStyleAbsUrls.push(styleUrl); });\r\n\t            return styleWithImports.style;\r\n\t        });\r\n\t        var encapsulation = templateMeta.encapsulation;\r\n\t        if (encapsulation === view_1.ViewEncapsulation.Emulated && allResolvedStyles.length === 0 &&\r\n\t            allStyleAbsUrls.length === 0) {\r\n\t            encapsulation = view_1.ViewEncapsulation.None;\r\n\t        }\r\n\t        return new directive_metadata_1.CompileTemplateMetadata({\r\n\t            encapsulation: encapsulation,\r\n\t            template: template,\r\n\t            templateUrl: templateAbsUrl,\r\n\t            styles: allResolvedStyles,\r\n\t            styleUrls: allStyleAbsUrls,\r\n\t            ngContentSelectors: visitor.ngContentSelectors\r\n\t        });\r\n\t    };\r\n\t    TemplateNormalizer = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [xhr_1.XHR, url_resolver_1.UrlResolver, html_parser_1.HtmlParser])\r\n\t    ], TemplateNormalizer);\r\n\t    return TemplateNormalizer;\r\n\t})();\r\n\texports.TemplateNormalizer = TemplateNormalizer;\r\n\tvar TemplatePreparseVisitor = (function () {\r\n\t    function TemplatePreparseVisitor() {\r\n\t        this.ngContentSelectors = [];\r\n\t        this.styles = [];\r\n\t        this.styleUrls = [];\r\n\t        this.ngNonBindableStackCount = 0;\r\n\t    }\r\n\t    TemplatePreparseVisitor.prototype.visitElement = function (ast, context) {\r\n\t        var preparsedElement = template_preparser_1.preparseElement(ast);\r\n\t        switch (preparsedElement.type) {\r\n\t            case template_preparser_1.PreparsedElementType.NG_CONTENT:\r\n\t                if (this.ngNonBindableStackCount === 0) {\r\n\t                    this.ngContentSelectors.push(preparsedElement.selectAttr);\r\n\t                }\r\n\t                break;\r\n\t            case template_preparser_1.PreparsedElementType.STYLE:\r\n\t                var textContent = '';\r\n\t                ast.children.forEach(function (child) {\r\n\t                    if (child instanceof html_ast_1.HtmlTextAst) {\r\n\t                        textContent += child.value;\r\n\t                    }\r\n\t                });\r\n\t                this.styles.push(textContent);\r\n\t                break;\r\n\t            case template_preparser_1.PreparsedElementType.STYLESHEET:\r\n\t                this.styleUrls.push(preparsedElement.hrefAttr);\r\n\t                break;\r\n\t            default:\r\n\t                // DDC reports this as error. See:\r\n\t                // https://github.com/dart-lang/dev_compiler/issues/428\r\n\t                break;\r\n\t        }\r\n\t        if (preparsedElement.nonBindable) {\r\n\t            this.ngNonBindableStackCount++;\r\n\t        }\r\n\t        html_ast_1.htmlVisitAll(this, ast.children);\r\n\t        if (preparsedElement.nonBindable) {\r\n\t            this.ngNonBindableStackCount--;\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    TemplatePreparseVisitor.prototype.visitComment = function (ast, context) { return null; };\r\n\t    TemplatePreparseVisitor.prototype.visitAttr = function (ast, context) { return null; };\r\n\t    TemplatePreparseVisitor.prototype.visitText = function (ast, context) { return null; };\r\n\t    return TemplatePreparseVisitor;\r\n\t})();\r\n\n\n/***/ },\n/* 286 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar html_tags_1 = __webpack_require__(91);\r\n\tvar NG_CONTENT_SELECT_ATTR = 'select';\r\n\tvar NG_CONTENT_ELEMENT = 'ng-content';\r\n\tvar LINK_ELEMENT = 'link';\r\n\tvar LINK_STYLE_REL_ATTR = 'rel';\r\n\tvar LINK_STYLE_HREF_ATTR = 'href';\r\n\tvar LINK_STYLE_REL_VALUE = 'stylesheet';\r\n\tvar STYLE_ELEMENT = 'style';\r\n\tvar SCRIPT_ELEMENT = 'script';\r\n\tvar NG_NON_BINDABLE_ATTR = 'ngNonBindable';\r\n\tfunction preparseElement(ast) {\r\n\t    var selectAttr = null;\r\n\t    var hrefAttr = null;\r\n\t    var relAttr = null;\r\n\t    var nonBindable = false;\r\n\t    ast.attrs.forEach(function (attr) {\r\n\t        var lcAttrName = attr.name.toLowerCase();\r\n\t        if (lcAttrName == NG_CONTENT_SELECT_ATTR) {\r\n\t            selectAttr = attr.value;\r\n\t        }\r\n\t        else if (lcAttrName == LINK_STYLE_HREF_ATTR) {\r\n\t            hrefAttr = attr.value;\r\n\t        }\r\n\t        else if (lcAttrName == LINK_STYLE_REL_ATTR) {\r\n\t            relAttr = attr.value;\r\n\t        }\r\n\t        else if (attr.name == NG_NON_BINDABLE_ATTR) {\r\n\t            nonBindable = true;\r\n\t        }\r\n\t    });\r\n\t    selectAttr = normalizeNgContentSelect(selectAttr);\r\n\t    var nodeName = ast.name.toLowerCase();\r\n\t    var type = PreparsedElementType.OTHER;\r\n\t    if (html_tags_1.splitNsName(nodeName)[1] == NG_CONTENT_ELEMENT) {\r\n\t        type = PreparsedElementType.NG_CONTENT;\r\n\t    }\r\n\t    else if (nodeName == STYLE_ELEMENT) {\r\n\t        type = PreparsedElementType.STYLE;\r\n\t    }\r\n\t    else if (nodeName == SCRIPT_ELEMENT) {\r\n\t        type = PreparsedElementType.SCRIPT;\r\n\t    }\r\n\t    else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {\r\n\t        type = PreparsedElementType.STYLESHEET;\r\n\t    }\r\n\t    return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable);\r\n\t}\r\n\texports.preparseElement = preparseElement;\r\n\t(function (PreparsedElementType) {\r\n\t    PreparsedElementType[PreparsedElementType[\"NG_CONTENT\"] = 0] = \"NG_CONTENT\";\r\n\t    PreparsedElementType[PreparsedElementType[\"STYLE\"] = 1] = \"STYLE\";\r\n\t    PreparsedElementType[PreparsedElementType[\"STYLESHEET\"] = 2] = \"STYLESHEET\";\r\n\t    PreparsedElementType[PreparsedElementType[\"SCRIPT\"] = 3] = \"SCRIPT\";\r\n\t    PreparsedElementType[PreparsedElementType[\"OTHER\"] = 4] = \"OTHER\";\r\n\t})(exports.PreparsedElementType || (exports.PreparsedElementType = {}));\r\n\tvar PreparsedElementType = exports.PreparsedElementType;\r\n\tvar PreparsedElement = (function () {\r\n\t    function PreparsedElement(type, selectAttr, hrefAttr, nonBindable) {\r\n\t        this.type = type;\r\n\t        this.selectAttr = selectAttr;\r\n\t        this.hrefAttr = hrefAttr;\r\n\t        this.nonBindable = nonBindable;\r\n\t    }\r\n\t    return PreparsedElement;\r\n\t})();\r\n\texports.PreparsedElement = PreparsedElement;\r\n\tfunction normalizeNgContentSelect(selectAttr) {\r\n\t    if (lang_1.isBlank(selectAttr) || selectAttr.length === 0) {\r\n\t        return '*';\r\n\t    }\r\n\t    return selectAttr;\r\n\t}\r\n\n\n/***/ },\n/* 287 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar template_ast_1 = __webpack_require__(78);\r\n\tvar source_module_1 = __webpack_require__(77);\r\n\tvar view_1 = __webpack_require__(97);\r\n\tvar view_type_1 = __webpack_require__(98);\r\n\tvar element_1 = __webpack_require__(129);\r\n\tvar view_2 = __webpack_require__(63);\r\n\tvar util_1 = __webpack_require__(56);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar proto_view_compiler_1 = __webpack_require__(186);\r\n\texports.VIEW_JIT_IMPORTS = lang_1.CONST_EXPR({\r\n\t    'AppView': view_1.AppView,\r\n\t    'AppElement': element_1.AppElement,\r\n\t    'flattenNestedViewRenderNodes': view_1.flattenNestedViewRenderNodes,\r\n\t    'checkSlotCount': view_1.checkSlotCount\r\n\t});\r\n\tvar ViewCompiler = (function () {\r\n\t    function ViewCompiler() {\r\n\t    }\r\n\t    ViewCompiler.prototype.compileComponentRuntime = function (component, template, styles, protoViews, changeDetectorFactories, componentViewFactory) {\r\n\t        var viewFactory = new RuntimeViewFactory(component, styles, protoViews, changeDetectorFactories, componentViewFactory);\r\n\t        return viewFactory.createViewFactory(template, 0, []);\r\n\t    };\r\n\t    ViewCompiler.prototype.compileComponentCodeGen = function (component, template, styles, protoViews, changeDetectorFactoryExpressions, componentViewFactory) {\r\n\t        var viewFactory = new CodeGenViewFactory(component, styles, protoViews, changeDetectorFactoryExpressions, componentViewFactory);\r\n\t        var targetStatements = [];\r\n\t        var viewFactoryExpression = viewFactory.createViewFactory(template, 0, targetStatements);\r\n\t        return new source_module_1.SourceExpression(targetStatements.map(function (stmt) { return stmt.statement; }), viewFactoryExpression.expression);\r\n\t    };\r\n\t    ViewCompiler = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], ViewCompiler);\r\n\t    return ViewCompiler;\r\n\t})();\r\n\texports.ViewCompiler = ViewCompiler;\r\n\tvar CodeGenViewFactory = (function () {\r\n\t    function CodeGenViewFactory(component, styles, protoViews, changeDetectorExpressions, componentViewFactory) {\r\n\t        this.component = component;\r\n\t        this.styles = styles;\r\n\t        this.protoViews = protoViews;\r\n\t        this.changeDetectorExpressions = changeDetectorExpressions;\r\n\t        this.componentViewFactory = componentViewFactory;\r\n\t        this._nextVarId = 0;\r\n\t    }\r\n\t    CodeGenViewFactory.prototype._nextVar = function (prefix) {\r\n\t        return \"\" + prefix + this._nextVarId++ + \"_\" + this.component.type.name;\r\n\t    };\r\n\t    CodeGenViewFactory.prototype._nextRenderVar = function () { return this._nextVar('render'); };\r\n\t    CodeGenViewFactory.prototype._nextAppVar = function () { return this._nextVar('app'); };\r\n\t    CodeGenViewFactory.prototype._nextDisposableVar = function () {\r\n\t        return \"disposable\" + this._nextVarId++ + \"_\" + this.component.type.name;\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createText = function (renderer, parent, text, targetStatements) {\r\n\t        var varName = this._nextRenderVar();\r\n\t        var statement = \"var \" + varName + \" = \" + renderer.expression + \".createText(\" + (lang_1.isPresent(parent) ? parent.expression : null) + \", \" + util_1.escapeSingleQuoteString(text) + \");\";\r\n\t        targetStatements.push(new util_1.Statement(statement));\r\n\t        return new util_1.Expression(varName);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createElement = function (renderer, parentRenderNode, name, rootSelector, targetStatements) {\r\n\t        var varName = this._nextRenderVar();\r\n\t        var valueExpr;\r\n\t        if (lang_1.isPresent(rootSelector)) {\r\n\t            valueExpr = rootSelector.expression + \" == null ?\\n        \" + renderer.expression + \".createElement(\" + (lang_1.isPresent(parentRenderNode) ? parentRenderNode.expression : null) + \", \" + util_1.escapeSingleQuoteString(name) + \") :\\n        \" + renderer.expression + \".selectRootElement(\" + rootSelector.expression + \");\";\r\n\t        }\r\n\t        else {\r\n\t            valueExpr =\r\n\t                renderer.expression + \".createElement(\" + (lang_1.isPresent(parentRenderNode) ? parentRenderNode.expression : null) + \", \" + util_1.escapeSingleQuoteString(name) + \")\";\r\n\t        }\r\n\t        var statement = \"var \" + varName + \" = \" + valueExpr + \";\";\r\n\t        targetStatements.push(new util_1.Statement(statement));\r\n\t        return new util_1.Expression(varName);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createTemplateAnchor = function (renderer, parentRenderNode, targetStatements) {\r\n\t        var varName = this._nextRenderVar();\r\n\t        var valueExpr = renderer.expression + \".createTemplateAnchor(\" + (lang_1.isPresent(parentRenderNode) ? parentRenderNode.expression : null) + \");\";\r\n\t        targetStatements.push(new util_1.Statement(\"var \" + varName + \" = \" + valueExpr));\r\n\t        return new util_1.Expression(varName);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createGlobalEventListener = function (renderer, appView, boundElementIndex, eventAst, targetStatements) {\r\n\t        var disposableVar = this._nextDisposableVar();\r\n\t        var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);\r\n\t        targetStatements.push(new util_1.Statement(\"var \" + disposableVar + \" = \" + renderer.expression + \".listenGlobal(\" + util_1.escapeValue(eventAst.target) + \", \" + util_1.escapeValue(eventAst.name) + \", \" + eventHandlerExpr + \");\"));\r\n\t        return new util_1.Expression(disposableVar);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createElementEventListener = function (renderer, appView, boundElementIndex, renderNode, eventAst, targetStatements) {\r\n\t        var disposableVar = this._nextDisposableVar();\r\n\t        var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);\r\n\t        targetStatements.push(new util_1.Statement(\"var \" + disposableVar + \" = \" + renderer.expression + \".listen(\" + renderNode.expression + \", \" + util_1.escapeValue(eventAst.name) + \", \" + eventHandlerExpr + \");\"));\r\n\t        return new util_1.Expression(disposableVar);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.setElementAttribute = function (renderer, renderNode, attrName, attrValue, targetStatements) {\r\n\t        targetStatements.push(new util_1.Statement(renderer.expression + \".setElementAttribute(\" + renderNode.expression + \", \" + util_1.escapeSingleQuoteString(attrName) + \", \" + util_1.escapeSingleQuoteString(attrValue) + \");\"));\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createAppElement = function (appProtoEl, appView, renderNode, parentAppEl, embeddedViewFactory, targetStatements) {\r\n\t        var appVar = this._nextAppVar();\r\n\t        var varValue = \"new \" + proto_view_compiler_1.APP_EL_MODULE_REF + \"AppElement(\" + appProtoEl.expression + \", \" + appView.expression + \",\\n      \" + (lang_1.isPresent(parentAppEl) ? parentAppEl.expression : null) + \", \" + renderNode.expression + \", \" + (lang_1.isPresent(embeddedViewFactory) ? embeddedViewFactory.expression : null) + \")\";\r\n\t        targetStatements.push(new util_1.Statement(\"var \" + appVar + \" = \" + varValue + \";\"));\r\n\t        return new util_1.Expression(appVar);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createAndSetComponentView = function (renderer, viewManager, view, appEl, component, contentNodesByNgContentIndex, targetStatements) {\r\n\t        var codeGenContentNodes;\r\n\t        if (this.component.type.isHost) {\r\n\t            codeGenContentNodes = view.expression + \".projectableNodes\";\r\n\t        }\r\n\t        else {\r\n\t            codeGenContentNodes =\r\n\t                \"[\" + contentNodesByNgContentIndex.map(function (nodes) { return util_1.codeGenFlatArray(nodes); }).join(',') + \"]\";\r\n\t        }\r\n\t        targetStatements.push(new util_1.Statement(this.componentViewFactory(component) + \"(\" + renderer.expression + \", \" + viewManager.expression + \", \" + appEl.expression + \", \" + codeGenContentNodes + \", null, null, null);\"));\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.getProjectedNodes = function (projectableNodes, ngContentIndex) {\r\n\t        return new util_1.Expression(projectableNodes.expression + \"[\" + ngContentIndex + \"]\", true);\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.appendProjectedNodes = function (renderer, parent, nodes, targetStatements) {\r\n\t        targetStatements.push(new util_1.Statement(renderer.expression + \".projectNodes(\" + parent.expression + \", \" + proto_view_compiler_1.APP_VIEW_MODULE_REF + \"flattenNestedViewRenderNodes(\" + nodes.expression + \"));\"));\r\n\t    };\r\n\t    CodeGenViewFactory.prototype.createViewFactory = function (asts, embeddedTemplateIndex, targetStatements) {\r\n\t        var compileProtoView = this.protoViews[embeddedTemplateIndex];\r\n\t        var isHostView = this.component.type.isHost;\r\n\t        var isComponentView = embeddedTemplateIndex === 0 && !isHostView;\r\n\t        var visitor = new ViewBuilderVisitor(new util_1.Expression('renderer'), new util_1.Expression('viewManager'), new util_1.Expression('projectableNodes'), isHostView ? new util_1.Expression('rootSelector') : null, new util_1.Expression('view'), compileProtoView, targetStatements, this);\r\n\t        template_ast_1.templateVisitAll(visitor, asts, new ParentElement(isComponentView ? new util_1.Expression('parentRenderNode') : null, null, null));\r\n\t        var appProtoView = compileProtoView.protoView.expression;\r\n\t        var viewFactoryName = codeGenViewFactoryName(this.component, embeddedTemplateIndex);\r\n\t        var changeDetectorFactory = this.changeDetectorExpressions.expressions[embeddedTemplateIndex];\r\n\t        var factoryArgs = [\r\n\t            'parentRenderer',\r\n\t            'viewManager',\r\n\t            'containerEl',\r\n\t            'projectableNodes',\r\n\t            'rootSelector',\r\n\t            'dynamicallyCreatedProviders',\r\n\t            'rootInjector'\r\n\t        ];\r\n\t        var initRendererStmts = [];\r\n\t        var rendererExpr = \"parentRenderer\";\r\n\t        if (embeddedTemplateIndex === 0) {\r\n\t            var renderCompTypeVar = this._nextVar('renderType');\r\n\t            targetStatements.push(new util_1.Statement(\"var \" + renderCompTypeVar + \" = null;\"));\r\n\t            var stylesVar = this._nextVar('styles');\r\n\t            targetStatements.push(new util_1.Statement(util_1.CONST_VAR + \" \" + stylesVar + \" = \" + this.styles.expression + \";\"));\r\n\t            var encapsulation = this.component.template.encapsulation;\r\n\t            initRendererStmts.push(\"if (\" + renderCompTypeVar + \" == null) {\\n        \" + renderCompTypeVar + \" = viewManager.createRenderComponentType(\" + codeGenViewEncapsulation(encapsulation) + \", \" + stylesVar + \");\\n      }\");\r\n\t            rendererExpr = \"parentRenderer.renderComponent(\" + renderCompTypeVar + \")\";\r\n\t        }\r\n\t        var statement = \"\\n\" + util_1.codeGenFnHeader(factoryArgs, viewFactoryName) + \"{\\n  \" + initRendererStmts.join('\\n') + \"\\n  var renderer = \" + rendererExpr + \";\\n  var view = new \" + proto_view_compiler_1.APP_VIEW_MODULE_REF + \"AppView(\\n    \" + appProtoView + \", renderer, viewManager,\\n    projectableNodes,\\n    containerEl,\\n    dynamicallyCreatedProviders, rootInjector,\\n    \" + changeDetectorFactory + \"()\\n  );\\n  \" + proto_view_compiler_1.APP_VIEW_MODULE_REF + \"checkSlotCount(\" + util_1.escapeValue(this.component.type.name) + \", \" + this.component.template.ngContentSelectors.length + \", projectableNodes);\\n  \" + (isComponentView ? 'var parentRenderNode = renderer.createViewRoot(view.containerAppElement.nativeElement);' : '') + \"\\n  \" + visitor.renderStmts.map(function (stmt) { return stmt.statement; }).join('\\n') + \"\\n  \" + visitor.appStmts.map(function (stmt) { return stmt.statement; }).join('\\n') + \"\\n\\n  view.init(\" + util_1.codeGenFlatArray(visitor.rootNodesOrAppElements) + \", \" + util_1.codeGenArray(visitor.renderNodes) + \", \" + util_1.codeGenArray(visitor.appDisposables) + \",\\n            \" + util_1.codeGenArray(visitor.appElements) + \");\\n  return view;\\n}\";\r\n\t        targetStatements.push(new util_1.Statement(statement));\r\n\t        return new util_1.Expression(viewFactoryName);\r\n\t    };\r\n\t    return CodeGenViewFactory;\r\n\t})();\r\n\tvar RuntimeViewFactory = (function () {\r\n\t    function RuntimeViewFactory(component, styles, protoViews, changeDetectorFactories, componentViewFactory) {\r\n\t        this.component = component;\r\n\t        this.styles = styles;\r\n\t        this.protoViews = protoViews;\r\n\t        this.changeDetectorFactories = changeDetectorFactories;\r\n\t        this.componentViewFactory = componentViewFactory;\r\n\t    }\r\n\t    RuntimeViewFactory.prototype.createText = function (renderer, parent, text, targetStatements) {\r\n\t        return renderer.createText(parent, text);\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createElement = function (renderer, parent, name, rootSelector, targetStatements) {\r\n\t        var el;\r\n\t        if (lang_1.isPresent(rootSelector)) {\r\n\t            el = renderer.selectRootElement(rootSelector);\r\n\t        }\r\n\t        else {\r\n\t            el = renderer.createElement(parent, name);\r\n\t        }\r\n\t        return el;\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createTemplateAnchor = function (renderer, parent, targetStatements) {\r\n\t        return renderer.createTemplateAnchor(parent);\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createGlobalEventListener = function (renderer, appView, boundElementIndex, eventAst, targetStatements) {\r\n\t        return renderer.listenGlobal(eventAst.target, eventAst.name, function (event) { return appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex); });\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createElementEventListener = function (renderer, appView, boundElementIndex, renderNode, eventAst, targetStatements) {\r\n\t        return renderer.listen(renderNode, eventAst.name, function (event) { return appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex); });\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.setElementAttribute = function (renderer, renderNode, attrName, attrValue, targetStatements) {\r\n\t        renderer.setElementAttribute(renderNode, attrName, attrValue);\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createAppElement = function (appProtoEl, appView, renderNode, parentAppEl, embeddedViewFactory, targetStatements) {\r\n\t        return new element_1.AppElement(appProtoEl, appView, parentAppEl, renderNode, embeddedViewFactory);\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createAndSetComponentView = function (renderer, viewManager, appView, appEl, component, contentNodesByNgContentIndex, targetStatements) {\r\n\t        var flattenedContentNodes;\r\n\t        if (this.component.type.isHost) {\r\n\t            flattenedContentNodes = appView.projectableNodes;\r\n\t        }\r\n\t        else {\r\n\t            flattenedContentNodes = collection_1.ListWrapper.createFixedSize(contentNodesByNgContentIndex.length);\r\n\t            for (var i = 0; i < contentNodesByNgContentIndex.length; i++) {\r\n\t                flattenedContentNodes[i] = util_1.flattenArray(contentNodesByNgContentIndex[i], []);\r\n\t            }\r\n\t        }\r\n\t        this.componentViewFactory(component)(renderer, viewManager, appEl, flattenedContentNodes);\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.getProjectedNodes = function (projectableNodes, ngContentIndex) {\r\n\t        return projectableNodes[ngContentIndex];\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.appendProjectedNodes = function (renderer, parent, nodes, targetStatements) {\r\n\t        renderer.projectNodes(parent, view_1.flattenNestedViewRenderNodes(nodes));\r\n\t    };\r\n\t    RuntimeViewFactory.prototype.createViewFactory = function (asts, embeddedTemplateIndex, targetStatements) {\r\n\t        var _this = this;\r\n\t        var compileProtoView = this.protoViews[embeddedTemplateIndex];\r\n\t        var isComponentView = compileProtoView.protoView.type === view_type_1.ViewType.COMPONENT;\r\n\t        var renderComponentType = null;\r\n\t        return function (parentRenderer, viewManager, containerEl, projectableNodes, rootSelector, dynamicallyCreatedProviders, rootInjector) {\r\n\t            if (rootSelector === void 0) { rootSelector = null; }\r\n\t            if (dynamicallyCreatedProviders === void 0) { dynamicallyCreatedProviders = null; }\r\n\t            if (rootInjector === void 0) { rootInjector = null; }\r\n\t            view_1.checkSlotCount(_this.component.type.name, _this.component.template.ngContentSelectors.length, projectableNodes);\r\n\t            var renderer;\r\n\t            if (embeddedTemplateIndex === 0) {\r\n\t                if (lang_1.isBlank(renderComponentType)) {\r\n\t                    renderComponentType = viewManager.createRenderComponentType(_this.component.template.encapsulation, _this.styles);\r\n\t                }\r\n\t                renderer = parentRenderer.renderComponent(renderComponentType);\r\n\t            }\r\n\t            else {\r\n\t                renderer = parentRenderer;\r\n\t            }\r\n\t            var changeDetector = _this.changeDetectorFactories[embeddedTemplateIndex]();\r\n\t            var view = new view_1.AppView(compileProtoView.protoView, renderer, viewManager, projectableNodes, containerEl, dynamicallyCreatedProviders, rootInjector, changeDetector);\r\n\t            var visitor = new ViewBuilderVisitor(renderer, viewManager, projectableNodes, rootSelector, view, compileProtoView, [], _this);\r\n\t            var parentRenderNode = isComponentView ? renderer.createViewRoot(containerEl.nativeElement) : null;\r\n\t            template_ast_1.templateVisitAll(visitor, asts, new ParentElement(parentRenderNode, null, null));\r\n\t            view.init(util_1.flattenArray(visitor.rootNodesOrAppElements, []), visitor.renderNodes, visitor.appDisposables, visitor.appElements);\r\n\t            return view;\r\n\t        };\r\n\t    };\r\n\t    return RuntimeViewFactory;\r\n\t})();\r\n\tvar ParentElement = (function () {\r\n\t    function ParentElement(renderNode, appEl, component) {\r\n\t        this.renderNode = renderNode;\r\n\t        this.appEl = appEl;\r\n\t        this.component = component;\r\n\t        if (lang_1.isPresent(component)) {\r\n\t            this.contentNodesByNgContentIndex =\r\n\t                collection_1.ListWrapper.createFixedSize(component.template.ngContentSelectors.length);\r\n\t            for (var i = 0; i < this.contentNodesByNgContentIndex.length; i++) {\r\n\t                this.contentNodesByNgContentIndex[i] = [];\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.contentNodesByNgContentIndex = null;\r\n\t        }\r\n\t    }\r\n\t    ParentElement.prototype.addContentNode = function (ngContentIndex, nodeExpr) {\r\n\t        this.contentNodesByNgContentIndex[ngContentIndex].push(nodeExpr);\r\n\t    };\r\n\t    return ParentElement;\r\n\t})();\r\n\tvar ViewBuilderVisitor = (function () {\r\n\t    function ViewBuilderVisitor(renderer, viewManager, projectableNodes, rootSelector, view, protoView, targetStatements, factory) {\r\n\t        this.renderer = renderer;\r\n\t        this.viewManager = viewManager;\r\n\t        this.projectableNodes = projectableNodes;\r\n\t        this.rootSelector = rootSelector;\r\n\t        this.view = view;\r\n\t        this.protoView = protoView;\r\n\t        this.targetStatements = targetStatements;\r\n\t        this.factory = factory;\r\n\t        this.renderStmts = [];\r\n\t        this.renderNodes = [];\r\n\t        this.appStmts = [];\r\n\t        this.appElements = [];\r\n\t        this.appDisposables = [];\r\n\t        this.rootNodesOrAppElements = [];\r\n\t        this.elementCount = 0;\r\n\t    }\r\n\t    ViewBuilderVisitor.prototype._addRenderNode = function (renderNode, appEl, ngContentIndex, parent) {\r\n\t        this.renderNodes.push(renderNode);\r\n\t        if (lang_1.isPresent(parent.component)) {\r\n\t            if (lang_1.isPresent(ngContentIndex)) {\r\n\t                parent.addContentNode(ngContentIndex, lang_1.isPresent(appEl) ? appEl : renderNode);\r\n\t            }\r\n\t        }\r\n\t        else if (lang_1.isBlank(parent.renderNode)) {\r\n\t            this.rootNodesOrAppElements.push(lang_1.isPresent(appEl) ? appEl : renderNode);\r\n\t        }\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype._getParentRenderNode = function (ngContentIndex, parent) {\r\n\t        return lang_1.isPresent(parent.component) &&\r\n\t            parent.component.template.encapsulation !== view_2.ViewEncapsulation.Native ?\r\n\t            null :\r\n\t            parent.renderNode;\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype.visitBoundText = function (ast, parent) {\r\n\t        return this._visitText('', ast.ngContentIndex, parent);\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype.visitText = function (ast, parent) {\r\n\t        return this._visitText(ast.value, ast.ngContentIndex, parent);\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype._visitText = function (value, ngContentIndex, parent) {\r\n\t        var renderNode = this.factory.createText(this.renderer, this._getParentRenderNode(ngContentIndex, parent), value, this.renderStmts);\r\n\t        this._addRenderNode(renderNode, null, ngContentIndex, parent);\r\n\t        return null;\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype.visitNgContent = function (ast, parent) {\r\n\t        var nodesExpression = this.factory.getProjectedNodes(this.projectableNodes, ast.index);\r\n\t        if (lang_1.isPresent(parent.component)) {\r\n\t            if (lang_1.isPresent(ast.ngContentIndex)) {\r\n\t                parent.addContentNode(ast.ngContentIndex, nodesExpression);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (lang_1.isPresent(parent.renderNode)) {\r\n\t                this.factory.appendProjectedNodes(this.renderer, parent.renderNode, nodesExpression, this.renderStmts);\r\n\t            }\r\n\t            else {\r\n\t                this.rootNodesOrAppElements.push(nodesExpression);\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype.visitElement = function (ast, parent) {\r\n\t        var _this = this;\r\n\t        var renderNode = this.factory.createElement(this.renderer, this._getParentRenderNode(ast.ngContentIndex, parent), ast.name, this.rootSelector, this.renderStmts);\r\n\t        var component = ast.getComponent();\r\n\t        var elementIndex = this.elementCount++;\r\n\t        var protoEl = this.protoView.protoElements[elementIndex];\r\n\t        protoEl.renderEvents.forEach(function (eventAst) {\r\n\t            var disposable;\r\n\t            if (lang_1.isPresent(eventAst.target)) {\r\n\t                disposable = _this.factory.createGlobalEventListener(_this.renderer, _this.view, protoEl.boundElementIndex, eventAst, _this.renderStmts);\r\n\t            }\r\n\t            else {\r\n\t                disposable = _this.factory.createElementEventListener(_this.renderer, _this.view, protoEl.boundElementIndex, renderNode, eventAst, _this.renderStmts);\r\n\t            }\r\n\t            _this.appDisposables.push(disposable);\r\n\t        });\r\n\t        for (var i = 0; i < protoEl.attrNameAndValues.length; i++) {\r\n\t            var attrName = protoEl.attrNameAndValues[i][0];\r\n\t            var attrValue = protoEl.attrNameAndValues[i][1];\r\n\t            this.factory.setElementAttribute(this.renderer, renderNode, attrName, attrValue, this.renderStmts);\r\n\t        }\r\n\t        var appEl = null;\r\n\t        if (lang_1.isPresent(protoEl.appProtoEl)) {\r\n\t            appEl = this.factory.createAppElement(protoEl.appProtoEl, this.view, renderNode, parent.appEl, null, this.appStmts);\r\n\t            this.appElements.push(appEl);\r\n\t        }\r\n\t        this._addRenderNode(renderNode, appEl, ast.ngContentIndex, parent);\r\n\t        var newParent = new ParentElement(renderNode, lang_1.isPresent(appEl) ? appEl : parent.appEl, component);\r\n\t        template_ast_1.templateVisitAll(this, ast.children, newParent);\r\n\t        if (lang_1.isPresent(appEl) && lang_1.isPresent(component)) {\r\n\t            this.factory.createAndSetComponentView(this.renderer, this.viewManager, this.view, appEl, component, newParent.contentNodesByNgContentIndex, this.appStmts);\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype.visitEmbeddedTemplate = function (ast, parent) {\r\n\t        var renderNode = this.factory.createTemplateAnchor(this.renderer, this._getParentRenderNode(ast.ngContentIndex, parent), this.renderStmts);\r\n\t        var elementIndex = this.elementCount++;\r\n\t        var protoEl = this.protoView.protoElements[elementIndex];\r\n\t        var embeddedViewFactory = this.factory.createViewFactory(ast.children, protoEl.embeddedTemplateIndex, this.targetStatements);\r\n\t        var appEl = this.factory.createAppElement(protoEl.appProtoEl, this.view, renderNode, parent.appEl, embeddedViewFactory, this.appStmts);\r\n\t        this._addRenderNode(renderNode, appEl, ast.ngContentIndex, parent);\r\n\t        this.appElements.push(appEl);\r\n\t        return null;\r\n\t    };\r\n\t    ViewBuilderVisitor.prototype.visitVariable = function (ast, ctx) { return null; };\r\n\t    ViewBuilderVisitor.prototype.visitAttr = function (ast, ctx) { return null; };\r\n\t    ViewBuilderVisitor.prototype.visitDirective = function (ast, ctx) { return null; };\r\n\t    ViewBuilderVisitor.prototype.visitEvent = function (ast, ctx) { return null; };\r\n\t    ViewBuilderVisitor.prototype.visitDirectiveProperty = function (ast, context) { return null; };\r\n\t    ViewBuilderVisitor.prototype.visitElementProperty = function (ast, context) { return null; };\r\n\t    return ViewBuilderVisitor;\r\n\t})();\r\n\tfunction codeGenEventHandler(view, boundElementIndex, eventName) {\r\n\t    return util_1.codeGenValueFn(['event'], view.expression + \".triggerEventHandlers(\" + util_1.escapeValue(eventName) + \", event, \" + boundElementIndex + \")\");\r\n\t}\r\n\tfunction codeGenViewFactoryName(component, embeddedTemplateIndex) {\r\n\t    return \"viewFactory_\" + component.type.name + embeddedTemplateIndex;\r\n\t}\r\n\tfunction codeGenViewEncapsulation(value) {\r\n\t    if (lang_1.IS_DART) {\r\n\t        return \"\" + proto_view_compiler_1.METADATA_MODULE_REF + value;\r\n\t    }\r\n\t    else {\r\n\t        return \"\" + value;\r\n\t    }\r\n\t}\r\n\n\n/***/ },\n/* 288 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar ng_zone_1 = __webpack_require__(136);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar application_tokens_1 = __webpack_require__(93);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar testability_1 = __webpack_require__(135);\r\n\tvar dynamic_component_loader_1 = __webpack_require__(96);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar console_1 = __webpack_require__(303);\r\n\tvar profile_1 = __webpack_require__(205);\r\n\tvar lang_2 = __webpack_require__(1);\r\n\t/**\r\n\t * Construct providers specific to an individual root component.\r\n\t */\r\n\tfunction _componentProviders(appComponentType) {\r\n\t    return [\r\n\t        di_1.provide(application_tokens_1.APP_COMPONENT, { useValue: appComponentType }),\r\n\t        di_1.provide(application_tokens_1.APP_COMPONENT_REF_PROMISE, {\r\n\t            useFactory: function (dynamicComponentLoader, appRef, injector) {\r\n\t                // Save the ComponentRef for disposal later.\r\n\t                var ref;\r\n\t                // TODO(rado): investigate whether to support providers on root component.\r\n\t                return dynamicComponentLoader.loadAsRoot(appComponentType, null, injector, function () { appRef._unloadComponent(ref); })\r\n\t                    .then(function (componentRef) {\r\n\t                    ref = componentRef;\r\n\t                    var testability = injector.getOptional(testability_1.Testability);\r\n\t                    if (lang_1.isPresent(testability)) {\r\n\t                        injector.get(testability_1.TestabilityRegistry)\r\n\t                            .registerApplication(componentRef.location.nativeElement, testability);\r\n\t                    }\r\n\t                    return componentRef;\r\n\t                });\r\n\t            },\r\n\t            deps: [dynamic_component_loader_1.DynamicComponentLoader, ApplicationRef, di_1.Injector]\r\n\t        }),\r\n\t        di_1.provide(appComponentType, {\r\n\t            useFactory: function (p) { return p.then(function (ref) { return ref.instance; }); },\r\n\t            deps: [application_tokens_1.APP_COMPONENT_REF_PROMISE]\r\n\t        }),\r\n\t    ];\r\n\t}\r\n\t/**\r\n\t * Create an Angular zone.\r\n\t */\r\n\tfunction createNgZone() {\r\n\t    return new ng_zone_1.NgZone({ enableLongStackTrace: lang_1.assertionsEnabled() });\r\n\t}\r\n\texports.createNgZone = createNgZone;\r\n\tvar _platform;\r\n\tvar _platformProviders;\r\n\t/**\r\n\t * Initialize the Angular 'platform' on the page.\r\n\t *\r\n\t * See {@link PlatformRef} for details on the Angular platform.\r\n\t *\r\n\t * It is also possible to specify providers to be made in the new platform. These providers\r\n\t * will be shared between all applications on the page. For example, an abstraction for\r\n\t * the browser cookie jar should be bound at the platform level, because there is only one\r\n\t * cookie jar regardless of how many applications on the page will be accessing it.\r\n\t *\r\n\t * The platform function can be called multiple times as long as the same list of providers\r\n\t * is passed into each call. If the platform function is called with a different set of\r\n\t * provides, Angular will throw an exception.\r\n\t */\r\n\tfunction platform(providers) {\r\n\t    lang_2.lockMode();\r\n\t    if (lang_1.isPresent(_platform)) {\r\n\t        if (collection_1.ListWrapper.equals(_platformProviders, providers)) {\r\n\t            return _platform;\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.BaseException(\"platform cannot be initialized with different sets of providers.\");\r\n\t        }\r\n\t    }\r\n\t    else {\r\n\t        return _createPlatform(providers);\r\n\t    }\r\n\t}\r\n\texports.platform = platform;\r\n\t/**\r\n\t * Dispose the existing platform.\r\n\t */\r\n\tfunction disposePlatform() {\r\n\t    if (lang_1.isPresent(_platform)) {\r\n\t        _platform.dispose();\r\n\t        _platform = null;\r\n\t    }\r\n\t}\r\n\texports.disposePlatform = disposePlatform;\r\n\tfunction _createPlatform(providers) {\r\n\t    _platformProviders = providers;\r\n\t    var injector = di_1.Injector.resolveAndCreate(providers);\r\n\t    _platform = new PlatformRef_(injector, function () {\r\n\t        _platform = null;\r\n\t        _platformProviders = null;\r\n\t    });\r\n\t    _runPlatformInitializers(injector);\r\n\t    return _platform;\r\n\t}\r\n\tfunction _runPlatformInitializers(injector) {\r\n\t    var inits = injector.getOptional(application_tokens_1.PLATFORM_INITIALIZER);\r\n\t    if (lang_1.isPresent(inits))\r\n\t        inits.forEach(function (init) { return init(); });\r\n\t}\r\n\t/**\r\n\t * The Angular platform is the entry point for Angular on a web page. Each page\r\n\t * has exactly one platform, and services (such as reflection) which are common\r\n\t * to every Angular application running on the page are bound in its scope.\r\n\t *\r\n\t * A page's platform is initialized implicitly when {@link bootstrap}() is called, or\r\n\t * explicitly by calling {@link platform}().\r\n\t */\r\n\tvar PlatformRef = (function () {\r\n\t    function PlatformRef() {\r\n\t    }\r\n\t    Object.defineProperty(PlatformRef.prototype, \"injector\", {\r\n\t        /**\r\n\t         * Retrieve the platform {@link Injector}, which is the parent injector for\r\n\t         * every Angular application on the page and provides singleton providers.\r\n\t         */\r\n\t        get: function () { throw exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    return PlatformRef;\r\n\t})();\r\n\texports.PlatformRef = PlatformRef;\r\n\tvar PlatformRef_ = (function (_super) {\r\n\t    __extends(PlatformRef_, _super);\r\n\t    function PlatformRef_(_injector, _dispose) {\r\n\t        _super.call(this);\r\n\t        this._injector = _injector;\r\n\t        this._dispose = _dispose;\r\n\t        /** @internal */\r\n\t        this._applications = [];\r\n\t        /** @internal */\r\n\t        this._disposeListeners = [];\r\n\t    }\r\n\t    PlatformRef_.prototype.registerDisposeListener = function (dispose) { this._disposeListeners.push(dispose); };\r\n\t    Object.defineProperty(PlatformRef_.prototype, \"injector\", {\r\n\t        get: function () { return this._injector; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    PlatformRef_.prototype.application = function (providers) {\r\n\t        var app = this._initApp(createNgZone(), providers);\r\n\t        if (async_1.PromiseWrapper.isPromise(app)) {\r\n\t            throw new exceptions_1.BaseException(\"Cannot use asyncronous app initializers with application. Use asyncApplication instead.\");\r\n\t        }\r\n\t        return app;\r\n\t    };\r\n\t    PlatformRef_.prototype.asyncApplication = function (bindingFn, additionalProviders) {\r\n\t        var _this = this;\r\n\t        var zone = createNgZone();\r\n\t        var completer = async_1.PromiseWrapper.completer();\r\n\t        if (bindingFn === null) {\r\n\t            completer.resolve(this._initApp(zone, additionalProviders));\r\n\t        }\r\n\t        else {\r\n\t            zone.run(function () {\r\n\t                async_1.PromiseWrapper.then(bindingFn(zone), function (providers) {\r\n\t                    if (lang_1.isPresent(additionalProviders)) {\r\n\t                        providers = collection_1.ListWrapper.concat(providers, additionalProviders);\r\n\t                    }\r\n\t                    var promise = _this._initApp(zone, providers);\r\n\t                    completer.resolve(promise);\r\n\t                });\r\n\t            });\r\n\t        }\r\n\t        return completer.promise;\r\n\t    };\r\n\t    PlatformRef_.prototype._initApp = function (zone, providers) {\r\n\t        var _this = this;\r\n\t        var injector;\r\n\t        var app;\r\n\t        zone.run(function () {\r\n\t            providers = collection_1.ListWrapper.concat(providers, [\r\n\t                di_1.provide(ng_zone_1.NgZone, { useValue: zone }),\r\n\t                di_1.provide(ApplicationRef, { useFactory: function () { return app; }, deps: [] })\r\n\t            ]);\r\n\t            var exceptionHandler;\r\n\t            try {\r\n\t                injector = _this.injector.resolveAndCreateChild(providers);\r\n\t                exceptionHandler = injector.get(exceptions_1.ExceptionHandler);\r\n\t                async_1.ObservableWrapper.subscribe(zone.onError, function (error) {\r\n\t                    exceptionHandler.call(error.error, error.stackTrace);\r\n\t                });\r\n\t            }\r\n\t            catch (e) {\r\n\t                if (lang_1.isPresent(exceptionHandler)) {\r\n\t                    exceptionHandler.call(e, e.stack);\r\n\t                }\r\n\t                else {\r\n\t                    lang_1.print(e.toString());\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t        app = new ApplicationRef_(this, zone, injector);\r\n\t        this._applications.push(app);\r\n\t        var promise = _runAppInitializers(injector);\r\n\t        if (promise !== null) {\r\n\t            return async_1.PromiseWrapper.then(promise, function (_) { return app; });\r\n\t        }\r\n\t        else {\r\n\t            return app;\r\n\t        }\r\n\t    };\r\n\t    PlatformRef_.prototype.dispose = function () {\r\n\t        collection_1.ListWrapper.clone(this._applications).forEach(function (app) { return app.dispose(); });\r\n\t        this._disposeListeners.forEach(function (dispose) { return dispose(); });\r\n\t        this._dispose();\r\n\t    };\r\n\t    /** @internal */\r\n\t    PlatformRef_.prototype._applicationDisposed = function (app) { collection_1.ListWrapper.remove(this._applications, app); };\r\n\t    return PlatformRef_;\r\n\t})(PlatformRef);\r\n\texports.PlatformRef_ = PlatformRef_;\r\n\tfunction _runAppInitializers(injector) {\r\n\t    var inits = injector.getOptional(application_tokens_1.APP_INITIALIZER);\r\n\t    var promises = [];\r\n\t    if (lang_1.isPresent(inits)) {\r\n\t        inits.forEach(function (init) {\r\n\t            var retVal = init();\r\n\t            if (async_1.PromiseWrapper.isPromise(retVal)) {\r\n\t                promises.push(retVal);\r\n\t            }\r\n\t        });\r\n\t    }\r\n\t    if (promises.length > 0) {\r\n\t        return async_1.PromiseWrapper.all(promises);\r\n\t    }\r\n\t    else {\r\n\t        return null;\r\n\t    }\r\n\t}\r\n\t/**\r\n\t * A reference to an Angular application running on a page.\r\n\t *\r\n\t * For more about Angular applications, see the documentation for {@link bootstrap}.\r\n\t */\r\n\tvar ApplicationRef = (function () {\r\n\t    function ApplicationRef() {\r\n\t    }\r\n\t    Object.defineProperty(ApplicationRef.prototype, \"injector\", {\r\n\t        /**\r\n\t         * Retrieve the application {@link Injector}.\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    Object.defineProperty(ApplicationRef.prototype, \"zone\", {\r\n\t        /**\r\n\t         * Retrieve the application {@link NgZone}.\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    Object.defineProperty(ApplicationRef.prototype, \"componentTypes\", {\r\n\t        /**\r\n\t         * Get a list of component types registered to this application.\r\n\t         */\r\n\t        get: function () { return exceptions_1.unimplemented(); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ;\r\n\t    return ApplicationRef;\r\n\t})();\r\n\texports.ApplicationRef = ApplicationRef;\r\n\tvar ApplicationRef_ = (function (_super) {\r\n\t    __extends(ApplicationRef_, _super);\r\n\t    function ApplicationRef_(_platform, _zone, _injector) {\r\n\t        var _this = this;\r\n\t        _super.call(this);\r\n\t        this._platform = _platform;\r\n\t        this._zone = _zone;\r\n\t        this._injector = _injector;\r\n\t        /** @internal */\r\n\t        this._bootstrapListeners = [];\r\n\t        /** @internal */\r\n\t        this._disposeListeners = [];\r\n\t        /** @internal */\r\n\t        this._rootComponents = [];\r\n\t        /** @internal */\r\n\t        this._rootComponentTypes = [];\r\n\t        /** @internal */\r\n\t        this._changeDetectorRefs = [];\r\n\t        /** @internal */\r\n\t        this._runningTick = false;\r\n\t        /** @internal */\r\n\t        this._enforceNoNewChanges = false;\r\n\t        if (lang_1.isPresent(this._zone)) {\r\n\t            async_1.ObservableWrapper.subscribe(this._zone.onMicrotaskEmpty, function (_) { _this._zone.run(function () { _this.tick(); }); });\r\n\t        }\r\n\t        this._enforceNoNewChanges = lang_1.assertionsEnabled();\r\n\t    }\r\n\t    ApplicationRef_.prototype.registerBootstrapListener = function (listener) {\r\n\t        this._bootstrapListeners.push(listener);\r\n\t    };\r\n\t    ApplicationRef_.prototype.registerDisposeListener = function (dispose) { this._disposeListeners.push(dispose); };\r\n\t    ApplicationRef_.prototype.registerChangeDetector = function (changeDetector) {\r\n\t        this._changeDetectorRefs.push(changeDetector);\r\n\t    };\r\n\t    ApplicationRef_.prototype.unregisterChangeDetector = function (changeDetector) {\r\n\t        collection_1.ListWrapper.remove(this._changeDetectorRefs, changeDetector);\r\n\t    };\r\n\t    ApplicationRef_.prototype.bootstrap = function (componentType, providers) {\r\n\t        var _this = this;\r\n\t        var completer = async_1.PromiseWrapper.completer();\r\n\t        this._zone.run(function () {\r\n\t            var componentProviders = _componentProviders(componentType);\r\n\t            if (lang_1.isPresent(providers)) {\r\n\t                componentProviders.push(providers);\r\n\t            }\r\n\t            var exceptionHandler = _this._injector.get(exceptions_1.ExceptionHandler);\r\n\t            _this._rootComponentTypes.push(componentType);\r\n\t            try {\r\n\t                var injector = _this._injector.resolveAndCreateChild(componentProviders);\r\n\t                var compRefToken = injector.get(application_tokens_1.APP_COMPONENT_REF_PROMISE);\r\n\t                var tick = function (componentRef) {\r\n\t                    _this._loadComponent(componentRef);\r\n\t                    completer.resolve(componentRef);\r\n\t                };\r\n\t                var tickResult = async_1.PromiseWrapper.then(compRefToken, tick);\r\n\t                async_1.PromiseWrapper.then(tickResult, null, function (err, stackTrace) {\r\n\t                    completer.reject(err, stackTrace);\r\n\t                    exceptionHandler.call(err, stackTrace);\r\n\t                });\r\n\t            }\r\n\t            catch (e) {\r\n\t                exceptionHandler.call(e, e.stack);\r\n\t                completer.reject(e, e.stack);\r\n\t            }\r\n\t        });\r\n\t        return completer.promise.then(function (ref) {\r\n\t            var c = _this._injector.get(console_1.Console);\r\n\t            if (lang_1.assertionsEnabled()) {\r\n\t                c.log(\"Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode.\");\r\n\t            }\r\n\t            return ref;\r\n\t        });\r\n\t    };\r\n\t    /** @internal */\r\n\t    ApplicationRef_.prototype._loadComponent = function (componentRef) {\r\n\t        var appChangeDetector = componentRef.location.internalElement.parentView.changeDetector;\r\n\t        this._changeDetectorRefs.push(appChangeDetector.ref);\r\n\t        this.tick();\r\n\t        this._rootComponents.push(componentRef);\r\n\t        this._bootstrapListeners.forEach(function (listener) { return listener(componentRef); });\r\n\t    };\r\n\t    /** @internal */\r\n\t    ApplicationRef_.prototype._unloadComponent = function (componentRef) {\r\n\t        if (!collection_1.ListWrapper.contains(this._rootComponents, componentRef)) {\r\n\t            return;\r\n\t        }\r\n\t        this.unregisterChangeDetector(componentRef.location.internalElement.parentView.changeDetector.ref);\r\n\t        collection_1.ListWrapper.remove(this._rootComponents, componentRef);\r\n\t    };\r\n\t    Object.defineProperty(ApplicationRef_.prototype, \"injector\", {\r\n\t        get: function () { return this._injector; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(ApplicationRef_.prototype, \"zone\", {\r\n\t        get: function () { return this._zone; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    ApplicationRef_.prototype.tick = function () {\r\n\t        if (this._runningTick) {\r\n\t            throw new exceptions_1.BaseException(\"ApplicationRef.tick is called recursively\");\r\n\t        }\r\n\t        var s = ApplicationRef_._tickScope();\r\n\t        try {\r\n\t            this._runningTick = true;\r\n\t            this._changeDetectorRefs.forEach(function (detector) { return detector.detectChanges(); });\r\n\t            if (this._enforceNoNewChanges) {\r\n\t                this._changeDetectorRefs.forEach(function (detector) { return detector.checkNoChanges(); });\r\n\t            }\r\n\t        }\r\n\t        finally {\r\n\t            this._runningTick = false;\r\n\t            profile_1.wtfLeave(s);\r\n\t        }\r\n\t    };\r\n\t    ApplicationRef_.prototype.dispose = function () {\r\n\t        // TODO(alxhub): Dispose of the NgZone.\r\n\t        collection_1.ListWrapper.clone(this._rootComponents).forEach(function (ref) { return ref.dispose(); });\r\n\t        this._disposeListeners.forEach(function (dispose) { return dispose(); });\r\n\t        this._platform._applicationDisposed(this);\r\n\t    };\r\n\t    Object.defineProperty(ApplicationRef_.prototype, \"componentTypes\", {\r\n\t        get: function () { return this._rootComponentTypes; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /** @internal */\r\n\t    ApplicationRef_._tickScope = profile_1.wtfCreateScope('ApplicationRef#tick()');\r\n\t    return ApplicationRef_;\r\n\t})(ApplicationRef);\r\n\texports.ApplicationRef_ = ApplicationRef_;\r\n\n\n/***/ },\n/* 289 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * Change detection enables data binding in Angular.\r\n\t */\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\texports.ChangeDetectionStrategy = change_detection_1.ChangeDetectionStrategy;\r\n\texports.ExpressionChangedAfterItHasBeenCheckedException = change_detection_1.ExpressionChangedAfterItHasBeenCheckedException;\r\n\texports.ChangeDetectionError = change_detection_1.ChangeDetectionError;\r\n\texports.ChangeDetectorRef = change_detection_1.ChangeDetectorRef;\r\n\texports.WrappedValue = change_detection_1.WrappedValue;\r\n\texports.SimpleChange = change_detection_1.SimpleChange;\r\n\texports.IterableDiffers = change_detection_1.IterableDiffers;\r\n\texports.KeyValueDiffers = change_detection_1.KeyValueDiffers;\r\n\texports.CollectionChangeRecord = change_detection_1.CollectionChangeRecord;\r\n\texports.KeyValueChangeRecord = change_detection_1.KeyValueChangeRecord;\r\n\n\n/***/ },\n/* 290 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar DIRECTIVE_LIFECYCLE = \"directiveLifecycle\";\r\n\tvar BINDING = \"native\";\r\n\tvar DIRECTIVE = \"directive\";\r\n\tvar ELEMENT_PROPERTY = \"elementProperty\";\r\n\tvar ELEMENT_ATTRIBUTE = \"elementAttribute\";\r\n\tvar ELEMENT_CLASS = \"elementClass\";\r\n\tvar ELEMENT_STYLE = \"elementStyle\";\r\n\tvar TEXT_NODE = \"textNode\";\r\n\tvar EVENT = \"event\";\r\n\tvar HOST_EVENT = \"hostEvent\";\r\n\tvar BindingTarget = (function () {\r\n\t    function BindingTarget(mode, elementIndex, name, unit, debug) {\r\n\t        this.mode = mode;\r\n\t        this.elementIndex = elementIndex;\r\n\t        this.name = name;\r\n\t        this.unit = unit;\r\n\t        this.debug = debug;\r\n\t    }\r\n\t    BindingTarget.prototype.isDirective = function () { return this.mode === DIRECTIVE; };\r\n\t    BindingTarget.prototype.isElementProperty = function () { return this.mode === ELEMENT_PROPERTY; };\r\n\t    BindingTarget.prototype.isElementAttribute = function () { return this.mode === ELEMENT_ATTRIBUTE; };\r\n\t    BindingTarget.prototype.isElementClass = function () { return this.mode === ELEMENT_CLASS; };\r\n\t    BindingTarget.prototype.isElementStyle = function () { return this.mode === ELEMENT_STYLE; };\r\n\t    BindingTarget.prototype.isTextNode = function () { return this.mode === TEXT_NODE; };\r\n\t    return BindingTarget;\r\n\t})();\r\n\texports.BindingTarget = BindingTarget;\r\n\tvar BindingRecord = (function () {\r\n\t    function BindingRecord(mode, target, implicitReceiver, ast, setter, lifecycleEvent, directiveRecord) {\r\n\t        this.mode = mode;\r\n\t        this.target = target;\r\n\t        this.implicitReceiver = implicitReceiver;\r\n\t        this.ast = ast;\r\n\t        this.setter = setter;\r\n\t        this.lifecycleEvent = lifecycleEvent;\r\n\t        this.directiveRecord = directiveRecord;\r\n\t    }\r\n\t    BindingRecord.prototype.isDirectiveLifecycle = function () { return this.mode === DIRECTIVE_LIFECYCLE; };\r\n\t    BindingRecord.prototype.callOnChanges = function () {\r\n\t        return lang_1.isPresent(this.directiveRecord) && this.directiveRecord.callOnChanges;\r\n\t    };\r\n\t    BindingRecord.prototype.isDefaultChangeDetection = function () {\r\n\t        return lang_1.isBlank(this.directiveRecord) || this.directiveRecord.isDefaultChangeDetection();\r\n\t    };\r\n\t    BindingRecord.createDirectiveDoCheck = function (directiveRecord) {\r\n\t        return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"DoCheck\", directiveRecord);\r\n\t    };\r\n\t    BindingRecord.createDirectiveOnInit = function (directiveRecord) {\r\n\t        return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"OnInit\", directiveRecord);\r\n\t    };\r\n\t    BindingRecord.createDirectiveOnChanges = function (directiveRecord) {\r\n\t        return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"OnChanges\", directiveRecord);\r\n\t    };\r\n\t    BindingRecord.createForDirective = function (ast, propertyName, setter, directiveRecord) {\r\n\t        var elementIndex = directiveRecord.directiveIndex.elementIndex;\r\n\t        var t = new BindingTarget(DIRECTIVE, elementIndex, propertyName, null, ast.toString());\r\n\t        return new BindingRecord(DIRECTIVE, t, 0, ast, setter, null, directiveRecord);\r\n\t    };\r\n\t    BindingRecord.createForElementProperty = function (ast, elementIndex, propertyName) {\r\n\t        var t = new BindingTarget(ELEMENT_PROPERTY, elementIndex, propertyName, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, 0, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForElementAttribute = function (ast, elementIndex, attributeName) {\r\n\t        var t = new BindingTarget(ELEMENT_ATTRIBUTE, elementIndex, attributeName, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, 0, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForElementClass = function (ast, elementIndex, className) {\r\n\t        var t = new BindingTarget(ELEMENT_CLASS, elementIndex, className, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, 0, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForElementStyle = function (ast, elementIndex, styleName, unit) {\r\n\t        var t = new BindingTarget(ELEMENT_STYLE, elementIndex, styleName, unit, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, 0, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForHostProperty = function (directiveIndex, ast, propertyName) {\r\n\t        var t = new BindingTarget(ELEMENT_PROPERTY, directiveIndex.elementIndex, propertyName, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForHostAttribute = function (directiveIndex, ast, attributeName) {\r\n\t        var t = new BindingTarget(ELEMENT_ATTRIBUTE, directiveIndex.elementIndex, attributeName, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForHostClass = function (directiveIndex, ast, className) {\r\n\t        var t = new BindingTarget(ELEMENT_CLASS, directiveIndex.elementIndex, className, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForHostStyle = function (directiveIndex, ast, styleName, unit) {\r\n\t        var t = new BindingTarget(ELEMENT_STYLE, directiveIndex.elementIndex, styleName, unit, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForTextNode = function (ast, elementIndex) {\r\n\t        var t = new BindingTarget(TEXT_NODE, elementIndex, null, null, ast.toString());\r\n\t        return new BindingRecord(BINDING, t, 0, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForEvent = function (ast, eventName, elementIndex) {\r\n\t        var t = new BindingTarget(EVENT, elementIndex, eventName, null, ast.toString());\r\n\t        return new BindingRecord(EVENT, t, 0, ast, null, null, null);\r\n\t    };\r\n\t    BindingRecord.createForHostEvent = function (ast, eventName, directiveRecord) {\r\n\t        var directiveIndex = directiveRecord.directiveIndex;\r\n\t        var t = new BindingTarget(HOST_EVENT, directiveIndex.elementIndex, eventName, null, ast.toString());\r\n\t        return new BindingRecord(HOST_EVENT, t, directiveIndex, ast, null, null, directiveRecord);\r\n\t    };\r\n\t    return BindingRecord;\r\n\t})();\r\n\texports.BindingRecord = BindingRecord;\r\n\n\n/***/ },\n/* 291 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar abstract_change_detector_1 = __webpack_require__(191);\r\n\tvar change_detection_util_1 = __webpack_require__(79);\r\n\tvar proto_record_1 = __webpack_require__(94);\r\n\tvar codegen_name_util_1 = __webpack_require__(606);\r\n\tvar codegen_logic_util_1 = __webpack_require__(605);\r\n\tvar codegen_facade_1 = __webpack_require__(293);\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar proto_change_detector_1 = __webpack_require__(302);\r\n\t/**\r\n\t * The code generator takes a list of proto records and creates a function/class\r\n\t * that \"emulates\" what the developer would write by hand to implement the same\r\n\t * kind of behaviour.\r\n\t *\r\n\t * This code should be kept in sync with the Dart transformer's\r\n\t * `angular2.transform.template_compiler.change_detector_codegen` library. If you make updates\r\n\t * here, please make equivalent changes there.\r\n\t*/\r\n\tvar IS_CHANGED_LOCAL = \"isChanged\";\r\n\tvar CHANGES_LOCAL = \"changes\";\r\n\tvar ChangeDetectorJITGenerator = (function () {\r\n\t    function ChangeDetectorJITGenerator(definition, changeDetectionUtilVarName, abstractChangeDetectorVarName, changeDetectorStateVarName) {\r\n\t        this.changeDetectionUtilVarName = changeDetectionUtilVarName;\r\n\t        this.abstractChangeDetectorVarName = abstractChangeDetectorVarName;\r\n\t        this.changeDetectorStateVarName = changeDetectorStateVarName;\r\n\t        var propertyBindingRecords = proto_change_detector_1.createPropertyRecords(definition);\r\n\t        var eventBindingRecords = proto_change_detector_1.createEventRecords(definition);\r\n\t        var propertyBindingTargets = definition.bindingRecords.map(function (b) { return b.target; });\r\n\t        this.id = definition.id;\r\n\t        this.changeDetectionStrategy = definition.strategy;\r\n\t        this.genConfig = definition.genConfig;\r\n\t        this.records = propertyBindingRecords;\r\n\t        this.propertyBindingTargets = propertyBindingTargets;\r\n\t        this.eventBindings = eventBindingRecords;\r\n\t        this.directiveRecords = definition.directiveRecords;\r\n\t        this._names = new codegen_name_util_1.CodegenNameUtil(this.records, this.eventBindings, this.directiveRecords, this.changeDetectionUtilVarName);\r\n\t        this._logic = new codegen_logic_util_1.CodegenLogicUtil(this._names, this.changeDetectionUtilVarName, this.changeDetectorStateVarName);\r\n\t        this.typeName = codegen_name_util_1.sanitizeName(\"ChangeDetector_\" + this.id);\r\n\t    }\r\n\t    ChangeDetectorJITGenerator.prototype.generate = function () {\r\n\t        var factorySource = \"\\n      \" + this.generateSource() + \"\\n      return function() {\\n        return new \" + this.typeName + \"();\\n      }\\n    \";\r\n\t        return new Function(this.abstractChangeDetectorVarName, this.changeDetectionUtilVarName, this.changeDetectorStateVarName, factorySource)(abstract_change_detector_1.AbstractChangeDetector, change_detection_util_1.ChangeDetectionUtil, constants_1.ChangeDetectorState);\r\n\t    };\r\n\t    ChangeDetectorJITGenerator.prototype.generateSource = function () {\r\n\t        return \"\\n      var \" + this.typeName + \" = function \" + this.typeName + \"() {\\n        \" + this.abstractChangeDetectorVarName + \".call(\\n            this, \" + JSON.stringify(this.id) + \", \" + this.records.length + \",\\n            \" + this.typeName + \".gen_propertyBindingTargets, \" + this.typeName + \".gen_directiveIndices,\\n            \" + codegen_facade_1.codify(this.changeDetectionStrategy) + \");\\n        this.dehydrateDirectives(false);\\n      }\\n\\n      \" + this.typeName + \".prototype = Object.create(\" + this.abstractChangeDetectorVarName + \".prototype);\\n\\n      \" + this.typeName + \".prototype.detectChangesInRecordsInternal = function(throwOnChange) {\\n        \" + this._names.genInitLocals() + \"\\n        var \" + IS_CHANGED_LOCAL + \" = false;\\n        var \" + CHANGES_LOCAL + \" = null;\\n\\n        \" + this._genAllRecords(this.records) + \"\\n      }\\n\\n      \" + this._maybeGenHandleEventInternal() + \"\\n\\n      \" + this._maybeGenAfterContentLifecycleCallbacks() + \"\\n\\n      \" + this._maybeGenAfterViewLifecycleCallbacks() + \"\\n\\n      \" + this._maybeGenHydrateDirectives() + \"\\n\\n      \" + this._maybeGenDehydrateDirectives() + \"\\n\\n      \" + this._genPropertyBindingTargets() + \"\\n\\n      \" + this._genDirectiveIndices() + \"\\n    \";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genPropertyBindingTargets = function () {\r\n\t        var targets = this._logic.genPropertyBindingTargets(this.propertyBindingTargets, this.genConfig.genDebugInfo);\r\n\t        return this.typeName + \".gen_propertyBindingTargets = \" + targets + \";\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genDirectiveIndices = function () {\r\n\t        var indices = this._logic.genDirectiveIndices(this.directiveRecords);\r\n\t        return this.typeName + \".gen_directiveIndices = \" + indices + \";\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeGenHandleEventInternal = function () {\r\n\t        var _this = this;\r\n\t        if (this.eventBindings.length > 0) {\r\n\t            var handlers = this.eventBindings.map(function (eb) { return _this._genEventBinding(eb); }).join(\"\\n\");\r\n\t            return \"\\n        \" + this.typeName + \".prototype.handleEventInternal = function(eventName, elIndex, locals) {\\n          var \" + this._names.getPreventDefaultAccesor() + \" = false;\\n          \" + this._names.genInitEventLocals() + \"\\n          \" + handlers + \"\\n          return \" + this._names.getPreventDefaultAccesor() + \";\\n        }\\n      \";\r\n\t        }\r\n\t        else {\r\n\t            return '';\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genEventBinding = function (eb) {\r\n\t        var _this = this;\r\n\t        var codes = [];\r\n\t        this._endOfBlockIdxs = [];\r\n\t        collection_1.ListWrapper.forEachWithIndex(eb.records, function (r, i) {\r\n\t            var code;\r\n\t            if (r.isConditionalSkipRecord()) {\r\n\t                code = _this._genConditionalSkip(r, _this._names.getEventLocalName(eb, i));\r\n\t            }\r\n\t            else if (r.isUnconditionalSkipRecord()) {\r\n\t                code = _this._genUnconditionalSkip(r);\r\n\t            }\r\n\t            else {\r\n\t                code = _this._genEventBindingEval(eb, r);\r\n\t            }\r\n\t            code += _this._genEndOfSkipBlock(i);\r\n\t            codes.push(code);\r\n\t        });\r\n\t        return \"\\n    if (eventName === \\\"\" + eb.eventName + \"\\\" && elIndex === \" + eb.elIndex + \") {\\n      \" + codes.join(\"\\n\") + \"\\n    }\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genEventBindingEval = function (eb, r) {\r\n\t        if (r.lastInBinding) {\r\n\t            var evalRecord = this._logic.genEventBindingEvalValue(eb, r);\r\n\t            var markPath = this._genMarkPathToRootAsCheckOnce(r);\r\n\t            var prevDefault = this._genUpdatePreventDefault(eb, r);\r\n\t            return markPath + \"\\n\" + evalRecord + \"\\n\" + prevDefault;\r\n\t        }\r\n\t        else {\r\n\t            return this._logic.genEventBindingEvalValue(eb, r);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genMarkPathToRootAsCheckOnce = function (r) {\r\n\t        var br = r.bindingRecord;\r\n\t        if (br.isDefaultChangeDetection()) {\r\n\t            return \"\";\r\n\t        }\r\n\t        else {\r\n\t            return this._names.getDetectorName(br.directiveRecord.directiveIndex) + \".markPathToRootAsCheckOnce();\";\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genUpdatePreventDefault = function (eb, r) {\r\n\t        var local = this._names.getEventLocalName(eb, r.selfIndex);\r\n\t        return \"if (\" + local + \" === false) { \" + this._names.getPreventDefaultAccesor() + \" = true};\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeGenDehydrateDirectives = function () {\r\n\t        var destroyPipesCode = this._names.genPipeOnDestroy();\r\n\t        var destroyDirectivesCode = this._logic.genDirectivesOnDestroy(this.directiveRecords);\r\n\t        var dehydrateFieldsCode = this._names.genDehydrateFields();\r\n\t        if (!destroyPipesCode && !destroyDirectivesCode && !dehydrateFieldsCode)\r\n\t            return '';\r\n\t        return this.typeName + \".prototype.dehydrateDirectives = function(destroyPipes) {\\n        if (destroyPipes) {\\n          \" + destroyPipesCode + \"\\n          \" + destroyDirectivesCode + \"\\n        }\\n        \" + dehydrateFieldsCode + \"\\n    }\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeGenHydrateDirectives = function () {\r\n\t        var hydrateDirectivesCode = this._logic.genHydrateDirectives(this.directiveRecords);\r\n\t        var hydrateDetectorsCode = this._logic.genHydrateDetectors(this.directiveRecords);\r\n\t        if (!hydrateDirectivesCode && !hydrateDetectorsCode)\r\n\t            return '';\r\n\t        return this.typeName + \".prototype.hydrateDirectives = function(directives) {\\n      \" + hydrateDirectivesCode + \"\\n      \" + hydrateDetectorsCode + \"\\n    }\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeGenAfterContentLifecycleCallbacks = function () {\r\n\t        var notifications = this._logic.genContentLifecycleCallbacks(this.directiveRecords);\r\n\t        if (notifications.length > 0) {\r\n\t            var directiveNotifications = notifications.join(\"\\n\");\r\n\t            return \"\\n        \" + this.typeName + \".prototype.afterContentLifecycleCallbacksInternal = function() {\\n          \" + directiveNotifications + \"\\n        }\\n      \";\r\n\t        }\r\n\t        else {\r\n\t            return '';\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeGenAfterViewLifecycleCallbacks = function () {\r\n\t        var notifications = this._logic.genViewLifecycleCallbacks(this.directiveRecords);\r\n\t        if (notifications.length > 0) {\r\n\t            var directiveNotifications = notifications.join(\"\\n\");\r\n\t            return \"\\n        \" + this.typeName + \".prototype.afterViewLifecycleCallbacksInternal = function() {\\n          \" + directiveNotifications + \"\\n        }\\n      \";\r\n\t        }\r\n\t        else {\r\n\t            return '';\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genAllRecords = function (rs) {\r\n\t        var codes = [];\r\n\t        this._endOfBlockIdxs = [];\r\n\t        for (var i = 0; i < rs.length; i++) {\r\n\t            var code = void 0;\r\n\t            var r = rs[i];\r\n\t            if (r.isLifeCycleRecord()) {\r\n\t                code = this._genDirectiveLifecycle(r);\r\n\t            }\r\n\t            else if (r.isPipeRecord()) {\r\n\t                code = this._genPipeCheck(r);\r\n\t            }\r\n\t            else if (r.isConditionalSkipRecord()) {\r\n\t                code = this._genConditionalSkip(r, this._names.getLocalName(r.contextIndex));\r\n\t            }\r\n\t            else if (r.isUnconditionalSkipRecord()) {\r\n\t                code = this._genUnconditionalSkip(r);\r\n\t            }\r\n\t            else {\r\n\t                code = this._genReferenceCheck(r);\r\n\t            }\r\n\t            code = \"\\n        \" + this._maybeFirstInBinding(r) + \"\\n        \" + code + \"\\n        \" + this._maybeGenLastInDirective(r) + \"\\n        \" + this._genEndOfSkipBlock(i) + \"\\n      \";\r\n\t            codes.push(code);\r\n\t        }\r\n\t        return codes.join(\"\\n\");\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genConditionalSkip = function (r, condition) {\r\n\t        var maybeNegate = r.mode === proto_record_1.RecordType.SkipRecordsIf ? '!' : '';\r\n\t        this._endOfBlockIdxs.push(r.fixedArgs[0] - 1);\r\n\t        return \"if (\" + maybeNegate + condition + \") {\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genUnconditionalSkip = function (r) {\r\n\t        this._endOfBlockIdxs.pop();\r\n\t        this._endOfBlockIdxs.push(r.fixedArgs[0] - 1);\r\n\t        return \"} else {\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genEndOfSkipBlock = function (protoIndex) {\r\n\t        if (!collection_1.ListWrapper.isEmpty(this._endOfBlockIdxs)) {\r\n\t            var endOfBlock = collection_1.ListWrapper.last(this._endOfBlockIdxs);\r\n\t            if (protoIndex === endOfBlock) {\r\n\t                this._endOfBlockIdxs.pop();\r\n\t                return '}';\r\n\t            }\r\n\t        }\r\n\t        return '';\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genDirectiveLifecycle = function (r) {\r\n\t        if (r.name === \"DoCheck\") {\r\n\t            return this._genOnCheck(r);\r\n\t        }\r\n\t        else if (r.name === \"OnInit\") {\r\n\t            return this._genOnInit(r);\r\n\t        }\r\n\t        else if (r.name === \"OnChanges\") {\r\n\t            return this._genOnChange(r);\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.BaseException(\"Unknown lifecycle event '\" + r.name + \"'\");\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genPipeCheck = function (r) {\r\n\t        var _this = this;\r\n\t        var context = this._names.getLocalName(r.contextIndex);\r\n\t        var argString = r.args.map(function (arg) { return _this._names.getLocalName(arg); }).join(\", \");\r\n\t        var oldValue = this._names.getFieldName(r.selfIndex);\r\n\t        var newValue = this._names.getLocalName(r.selfIndex);\r\n\t        var pipe = this._names.getPipeName(r.selfIndex);\r\n\t        var pipeName = r.name;\r\n\t        var init = \"\\n      if (\" + pipe + \" === \" + this.changeDetectionUtilVarName + \".uninitialized) {\\n        \" + pipe + \" = \" + this._names.getPipesAccessorName() + \".get('\" + pipeName + \"');\\n      }\\n    \";\r\n\t        var read = newValue + \" = \" + pipe + \".pipe.transform(\" + context + \", [\" + argString + \"]);\";\r\n\t        var contexOrArgCheck = r.args.map(function (a) { return _this._names.getChangeName(a); });\r\n\t        contexOrArgCheck.push(this._names.getChangeName(r.contextIndex));\r\n\t        var condition = \"!\" + pipe + \".pure || (\" + contexOrArgCheck.join(\" || \") + \")\";\r\n\t        var check = \"\\n      \" + this._genThrowOnChangeCheck(oldValue, newValue) + \"\\n      if (\" + this.changeDetectionUtilVarName + \".looseNotIdentical(\" + oldValue + \", \" + newValue + \")) {\\n        \" + newValue + \" = \" + this.changeDetectionUtilVarName + \".unwrapValue(\" + newValue + \")\\n        \" + this._genChangeMarker(r) + \"\\n        \" + this._genUpdateDirectiveOrElement(r) + \"\\n        \" + this._genAddToChanges(r) + \"\\n        \" + oldValue + \" = \" + newValue + \";\\n      }\\n    \";\r\n\t        var genCode = r.shouldBeChecked() ? \"\" + read + check : read;\r\n\t        if (r.isUsedByOtherRecord()) {\r\n\t            return init + \" if (\" + condition + \") { \" + genCode + \" } else { \" + newValue + \" = \" + oldValue + \"; }\";\r\n\t        }\r\n\t        else {\r\n\t            return init + \" if (\" + condition + \") { \" + genCode + \" }\";\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genReferenceCheck = function (r) {\r\n\t        var _this = this;\r\n\t        var oldValue = this._names.getFieldName(r.selfIndex);\r\n\t        var newValue = this._names.getLocalName(r.selfIndex);\r\n\t        var read = \"\\n      \" + this._logic.genPropertyBindingEvalValue(r) + \"\\n    \";\r\n\t        var check = \"\\n      \" + this._genThrowOnChangeCheck(oldValue, newValue) + \"\\n      if (\" + this.changeDetectionUtilVarName + \".looseNotIdentical(\" + oldValue + \", \" + newValue + \")) {\\n        \" + this._genChangeMarker(r) + \"\\n        \" + this._genUpdateDirectiveOrElement(r) + \"\\n        \" + this._genAddToChanges(r) + \"\\n        \" + oldValue + \" = \" + newValue + \";\\n      }\\n    \";\r\n\t        var genCode = r.shouldBeChecked() ? \"\" + read + check : read;\r\n\t        if (r.isPureFunction()) {\r\n\t            var condition = r.args.map(function (a) { return _this._names.getChangeName(a); }).join(\" || \");\r\n\t            if (r.isUsedByOtherRecord()) {\r\n\t                return \"if (\" + condition + \") { \" + genCode + \" } else { \" + newValue + \" = \" + oldValue + \"; }\";\r\n\t            }\r\n\t            else {\r\n\t                return \"if (\" + condition + \") { \" + genCode + \" }\";\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return genCode;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genChangeMarker = function (r) {\r\n\t        return r.argumentToPureFunction ? this._names.getChangeName(r.selfIndex) + \" = true\" : \"\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genUpdateDirectiveOrElement = function (r) {\r\n\t        if (!r.lastInBinding)\r\n\t            return \"\";\r\n\t        var newValue = this._names.getLocalName(r.selfIndex);\r\n\t        var notifyDebug = this.genConfig.logBindingUpdate ? \"this.logBindingUpdate(\" + newValue + \");\" : \"\";\r\n\t        var br = r.bindingRecord;\r\n\t        if (br.target.isDirective()) {\r\n\t            var directiveProperty = this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".\" + br.target.name;\r\n\t            return \"\\n        \" + directiveProperty + \" = \" + newValue + \";\\n        \" + notifyDebug + \"\\n        \" + IS_CHANGED_LOCAL + \" = true;\\n      \";\r\n\t        }\r\n\t        else {\r\n\t            return \"\\n        this.notifyDispatcher(\" + newValue + \");\\n        \" + notifyDebug + \"\\n      \";\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genThrowOnChangeCheck = function (oldValue, newValue) {\r\n\t        if (lang_1.assertionsEnabled()) {\r\n\t            return \"\\n        if (throwOnChange && !\" + this.changeDetectionUtilVarName + \".devModeEqual(\" + oldValue + \", \" + newValue + \")) {\\n          this.throwOnChangeError(\" + oldValue + \", \" + newValue + \");\\n        }\\n        \";\r\n\t        }\r\n\t        else {\r\n\t            return '';\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genAddToChanges = function (r) {\r\n\t        var newValue = this._names.getLocalName(r.selfIndex);\r\n\t        var oldValue = this._names.getFieldName(r.selfIndex);\r\n\t        if (!r.bindingRecord.callOnChanges())\r\n\t            return \"\";\r\n\t        return CHANGES_LOCAL + \" = this.addChange(\" + CHANGES_LOCAL + \", \" + oldValue + \", \" + newValue + \");\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeFirstInBinding = function (r) {\r\n\t        var prev = change_detection_util_1.ChangeDetectionUtil.protoByIndex(this.records, r.selfIndex - 1);\r\n\t        var firstInBinding = lang_1.isBlank(prev) || prev.bindingRecord !== r.bindingRecord;\r\n\t        return firstInBinding && !r.bindingRecord.isDirectiveLifecycle() ?\r\n\t            this._names.getPropertyBindingIndex() + \" = \" + r.propertyBindingIndex + \";\" :\r\n\t            '';\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._maybeGenLastInDirective = function (r) {\r\n\t        if (!r.lastInDirective)\r\n\t            return \"\";\r\n\t        return \"\\n      \" + CHANGES_LOCAL + \" = null;\\n      \" + this._genNotifyOnPushDetectors(r) + \"\\n      \" + IS_CHANGED_LOCAL + \" = false;\\n    \";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genOnCheck = function (r) {\r\n\t        var br = r.bindingRecord;\r\n\t        return \"if (!throwOnChange) \" + this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".ngDoCheck();\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genOnInit = function (r) {\r\n\t        var br = r.bindingRecord;\r\n\t        return \"if (!throwOnChange && \" + this._names.getStateName() + \" === \" + this.changeDetectorStateVarName + \".NeverChecked) \" + this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".ngOnInit();\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genOnChange = function (r) {\r\n\t        var br = r.bindingRecord;\r\n\t        return \"if (!throwOnChange && \" + CHANGES_LOCAL + \") \" + this._names.getDirectiveName(br.directiveRecord.directiveIndex) + \".ngOnChanges(\" + CHANGES_LOCAL + \");\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    ChangeDetectorJITGenerator.prototype._genNotifyOnPushDetectors = function (r) {\r\n\t        var br = r.bindingRecord;\r\n\t        if (!r.lastInDirective || br.isDefaultChangeDetection())\r\n\t            return \"\";\r\n\t        var retVal = \"\\n      if(\" + IS_CHANGED_LOCAL + \") {\\n        \" + this._names.getDetectorName(br.directiveRecord.directiveIndex) + \".markAsCheckOnce();\\n      }\\n    \";\r\n\t        return retVal;\r\n\t    };\r\n\t    return ChangeDetectorJITGenerator;\r\n\t})();\r\n\texports.ChangeDetectorJITGenerator = ChangeDetectorJITGenerator;\r\n\n\n/***/ },\n/* 292 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar ChangeDetectorRef = (function () {\r\n\t    function ChangeDetectorRef() {\r\n\t    }\r\n\t    return ChangeDetectorRef;\r\n\t})();\r\n\texports.ChangeDetectorRef = ChangeDetectorRef;\r\n\tvar ChangeDetectorRef_ = (function (_super) {\r\n\t    __extends(ChangeDetectorRef_, _super);\r\n\t    function ChangeDetectorRef_(_cd) {\r\n\t        _super.call(this);\r\n\t        this._cd = _cd;\r\n\t    }\r\n\t    ChangeDetectorRef_.prototype.markForCheck = function () { this._cd.markPathToRootAsCheckOnce(); };\r\n\t    ChangeDetectorRef_.prototype.detach = function () { this._cd.mode = constants_1.ChangeDetectionStrategy.Detached; };\r\n\t    ChangeDetectorRef_.prototype.detectChanges = function () { this._cd.detectChanges(); };\r\n\t    ChangeDetectorRef_.prototype.checkNoChanges = function () { this._cd.checkNoChanges(); };\r\n\t    ChangeDetectorRef_.prototype.reattach = function () {\r\n\t        this._cd.mode = constants_1.ChangeDetectionStrategy.CheckAlways;\r\n\t        this.markForCheck();\r\n\t    };\r\n\t    return ChangeDetectorRef_;\r\n\t})(ChangeDetectorRef);\r\n\texports.ChangeDetectorRef_ = ChangeDetectorRef_;\r\n\n\n/***/ },\n/* 293 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * Converts `funcOrValue` to a string which can be used in generated code.\r\n\t */\r\n\tfunction codify(obj) {\r\n\t    return JSON.stringify(obj);\r\n\t}\r\n\texports.codify = codify;\r\n\tfunction rawString(str) {\r\n\t    return \"'\" + str + \"'\";\r\n\t}\r\n\texports.rawString = rawString;\r\n\t/**\r\n\t * Combine the strings of generated code into a single interpolated string.\r\n\t * Each element of `vals` is expected to be a string literal or a codegen'd\r\n\t * call to a method returning a string.\r\n\t */\r\n\tfunction combineGeneratedStrings(vals) {\r\n\t    return vals.join(' + ');\r\n\t}\r\n\texports.combineGeneratedStrings = combineGeneratedStrings;\r\n\n\n/***/ },\n/* 294 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_2 = __webpack_require__(1);\r\n\tvar DefaultIterableDifferFactory = (function () {\r\n\t    function DefaultIterableDifferFactory() {\r\n\t    }\r\n\t    DefaultIterableDifferFactory.prototype.supports = function (obj) { return collection_1.isListLikeIterable(obj); };\r\n\t    DefaultIterableDifferFactory.prototype.create = function (cdRef, trackByFn) {\r\n\t        return new DefaultIterableDiffer(trackByFn);\r\n\t    };\r\n\t    DefaultIterableDifferFactory = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DefaultIterableDifferFactory);\r\n\t    return DefaultIterableDifferFactory;\r\n\t})();\r\n\texports.DefaultIterableDifferFactory = DefaultIterableDifferFactory;\r\n\tvar trackByIdentity = function (index, item) { return item; };\r\n\tvar DefaultIterableDiffer = (function () {\r\n\t    function DefaultIterableDiffer(_trackByFn) {\r\n\t        this._trackByFn = _trackByFn;\r\n\t        this._length = null;\r\n\t        this._collection = null;\r\n\t        // Keeps track of the used records at any point in time (during & across `_check()` calls)\r\n\t        this._linkedRecords = null;\r\n\t        // Keeps track of the removed records at any point in time during `_check()` calls.\r\n\t        this._unlinkedRecords = null;\r\n\t        this._previousItHead = null;\r\n\t        this._itHead = null;\r\n\t        this._itTail = null;\r\n\t        this._additionsHead = null;\r\n\t        this._additionsTail = null;\r\n\t        this._movesHead = null;\r\n\t        this._movesTail = null;\r\n\t        this._removalsHead = null;\r\n\t        this._removalsTail = null;\r\n\t        // Keeps track of records where custom track by is the same, but item identity has changed\r\n\t        this._identityChangesHead = null;\r\n\t        this._identityChangesTail = null;\r\n\t        this._trackByFn = lang_2.isPresent(this._trackByFn) ? this._trackByFn : trackByIdentity;\r\n\t    }\r\n\t    Object.defineProperty(DefaultIterableDiffer.prototype, \"collection\", {\r\n\t        get: function () { return this._collection; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(DefaultIterableDiffer.prototype, \"length\", {\r\n\t        get: function () { return this._length; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DefaultIterableDiffer.prototype.forEachItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._itHead; record !== null; record = record._next) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.forEachPreviousItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.forEachAddedItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._additionsHead; record !== null; record = record._nextAdded) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.forEachMovedItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._movesHead; record !== null; record = record._nextMoved) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.forEachRemovedItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.forEachIdentityChange = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.diff = function (collection) {\r\n\t        if (lang_2.isBlank(collection))\r\n\t            collection = [];\r\n\t        if (!collection_1.isListLikeIterable(collection)) {\r\n\t            throw new exceptions_1.BaseException(\"Error trying to diff '\" + collection + \"'\");\r\n\t        }\r\n\t        if (this.check(collection)) {\r\n\t            return this;\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.onDestroy = function () { };\r\n\t    DefaultIterableDiffer.prototype.check = function (collection) {\r\n\t        var _this = this;\r\n\t        this._reset();\r\n\t        var record = this._itHead;\r\n\t        var mayBeDirty = false;\r\n\t        var index;\r\n\t        var item;\r\n\t        var itemTrackBy;\r\n\t        if (lang_2.isArray(collection)) {\r\n\t            if (collection !== this._collection || !collection_1.ListWrapper.isImmutable(collection)) {\r\n\t                var list = collection;\r\n\t                this._length = collection.length;\r\n\t                for (index = 0; index < this._length; index++) {\r\n\t                    item = list[index];\r\n\t                    itemTrackBy = this._trackByFn(index, item);\r\n\t                    if (record === null || !lang_2.looseIdentical(record.trackById, itemTrackBy)) {\r\n\t                        record = this._mismatch(record, item, itemTrackBy, index);\r\n\t                        mayBeDirty = true;\r\n\t                    }\r\n\t                    else {\r\n\t                        if (mayBeDirty) {\r\n\t                            // TODO(misko): can we limit this to duplicates only?\r\n\t                            record = this._verifyReinsertion(record, item, itemTrackBy, index);\r\n\t                        }\r\n\t                        if (!lang_2.looseIdentical(record.item, item))\r\n\t                            this._addIdentityChange(record, item);\r\n\t                    }\r\n\t                    record = record._next;\r\n\t                }\r\n\t                this._truncate(record);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            index = 0;\r\n\t            collection_1.iterateListLike(collection, function (item) {\r\n\t                itemTrackBy = _this._trackByFn(index, item);\r\n\t                if (record === null || !lang_2.looseIdentical(record.trackById, itemTrackBy)) {\r\n\t                    record = _this._mismatch(record, item, itemTrackBy, index);\r\n\t                    mayBeDirty = true;\r\n\t                }\r\n\t                else {\r\n\t                    if (mayBeDirty) {\r\n\t                        // TODO(misko): can we limit this to duplicates only?\r\n\t                        record = _this._verifyReinsertion(record, item, itemTrackBy, index);\r\n\t                    }\r\n\t                    if (!lang_2.looseIdentical(record.item, item))\r\n\t                        _this._addIdentityChange(record, item);\r\n\t                }\r\n\t                record = record._next;\r\n\t                index++;\r\n\t            });\r\n\t            this._length = index;\r\n\t            this._truncate(record);\r\n\t        }\r\n\t        this._collection = collection;\r\n\t        return this.isDirty;\r\n\t    };\r\n\t    Object.defineProperty(DefaultIterableDiffer.prototype, \"isDirty\", {\r\n\t        /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity\r\n\t         * changes.\r\n\t         */\r\n\t        get: function () {\r\n\t            return this._additionsHead !== null || this._movesHead !== null ||\r\n\t                this._removalsHead !== null || this._identityChangesHead !== null;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * Reset the state of the change objects to show no changes. This means set previousKey to\r\n\t     * currentKey, and clear all of the queues (additions, moves, removals).\r\n\t     * Set the previousIndexes of moved and added items to their currentIndexes\r\n\t     * Reset the list of additions, moves and removals\r\n\t     *\r\n\t     * @internal\r\n\t     */\r\n\t    DefaultIterableDiffer.prototype._reset = function () {\r\n\t        if (this.isDirty) {\r\n\t            var record;\r\n\t            var nextRecord;\r\n\t            for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\r\n\t                record._nextPrevious = record._next;\r\n\t            }\r\n\t            for (record = this._additionsHead; record !== null; record = record._nextAdded) {\r\n\t                record.previousIndex = record.currentIndex;\r\n\t            }\r\n\t            this._additionsHead = this._additionsTail = null;\r\n\t            for (record = this._movesHead; record !== null; record = nextRecord) {\r\n\t                record.previousIndex = record.currentIndex;\r\n\t                nextRecord = record._nextMoved;\r\n\t            }\r\n\t            this._movesHead = this._movesTail = null;\r\n\t            this._removalsHead = this._removalsTail = null;\r\n\t            this._identityChangesHead = this._identityChangesTail = null;\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * This is the core function which handles differences between collections.\r\n\t     *\r\n\t     * - `record` is the record which we saw at this position last time. If null then it is a new\r\n\t     *   item.\r\n\t     * - `item` is the current item in the collection\r\n\t     * - `index` is the position of the item in the collection\r\n\t     *\r\n\t     * @internal\r\n\t     */\r\n\t    DefaultIterableDiffer.prototype._mismatch = function (record, item, itemTrackBy, index) {\r\n\t        // The previous record after which we will append the current one.\r\n\t        var previousRecord;\r\n\t        if (record === null) {\r\n\t            previousRecord = this._itTail;\r\n\t        }\r\n\t        else {\r\n\t            previousRecord = record._prev;\r\n\t            // Remove the record from the collection since we know it does not match the item.\r\n\t            this._remove(record);\r\n\t        }\r\n\t        // Attempt to see if we have seen the item before.\r\n\t        record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\r\n\t        if (record !== null) {\r\n\t            // We have seen this before, we need to move it forward in the collection.\r\n\t            // But first we need to check if identity changed, so we can update in view if necessary\r\n\t            if (!lang_2.looseIdentical(record.item, item))\r\n\t                this._addIdentityChange(record, item);\r\n\t            this._moveAfter(record, previousRecord, index);\r\n\t        }\r\n\t        else {\r\n\t            // Never seen it, check evicted list.\r\n\t            record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy);\r\n\t            if (record !== null) {\r\n\t                // It is an item which we have evicted earlier: reinsert it back into the list.\r\n\t                // But first we need to check if identity changed, so we can update in view if necessary\r\n\t                if (!lang_2.looseIdentical(record.item, item))\r\n\t                    this._addIdentityChange(record, item);\r\n\t                this._reinsertAfter(record, previousRecord, index);\r\n\t            }\r\n\t            else {\r\n\t                // It is a new item: add it.\r\n\t                record =\r\n\t                    this._addAfter(new CollectionChangeRecord(item, itemTrackBy), previousRecord, index);\r\n\t            }\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    /**\r\n\t     * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)\r\n\t     *\r\n\t     * Use case: `[a, a]` => `[b, a, a]`\r\n\t     *\r\n\t     * If we did not have this check then the insertion of `b` would:\r\n\t     *   1) evict first `a`\r\n\t     *   2) insert `b` at `0` index.\r\n\t     *   3) leave `a` at index `1` as is. <-- this is wrong!\r\n\t     *   3) reinsert `a` at index 2. <-- this is wrong!\r\n\t     *\r\n\t     * The correct behavior is:\r\n\t     *   1) evict first `a`\r\n\t     *   2) insert `b` at `0` index.\r\n\t     *   3) reinsert `a` at index 1.\r\n\t     *   3) move `a` at from `1` to `2`.\r\n\t     *\r\n\t     *\r\n\t     * Double check that we have not evicted a duplicate item. We need to check if the item type may\r\n\t     * have already been removed:\r\n\t     * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted\r\n\t     * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a\r\n\t     * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'\r\n\t     * at the end.\r\n\t     *\r\n\t     * @internal\r\n\t     */\r\n\t    DefaultIterableDiffer.prototype._verifyReinsertion = function (record, item, itemTrackBy, index) {\r\n\t        var reinsertRecord = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy);\r\n\t        if (reinsertRecord !== null) {\r\n\t            record = this._reinsertAfter(reinsertRecord, record._prev, index);\r\n\t        }\r\n\t        else if (record.currentIndex != index) {\r\n\t            record.currentIndex = index;\r\n\t            this._addToMoves(record, index);\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    /**\r\n\t     * Get rid of any excess {@link CollectionChangeRecord}s from the previous collection\r\n\t     *\r\n\t     * - `record` The first excess {@link CollectionChangeRecord}.\r\n\t     *\r\n\t     * @internal\r\n\t     */\r\n\t    DefaultIterableDiffer.prototype._truncate = function (record) {\r\n\t        // Anything after that needs to be removed;\r\n\t        while (record !== null) {\r\n\t            var nextRecord = record._next;\r\n\t            this._addToRemovals(this._unlink(record));\r\n\t            record = nextRecord;\r\n\t        }\r\n\t        if (this._unlinkedRecords !== null) {\r\n\t            this._unlinkedRecords.clear();\r\n\t        }\r\n\t        if (this._additionsTail !== null) {\r\n\t            this._additionsTail._nextAdded = null;\r\n\t        }\r\n\t        if (this._movesTail !== null) {\r\n\t            this._movesTail._nextMoved = null;\r\n\t        }\r\n\t        if (this._itTail !== null) {\r\n\t            this._itTail._next = null;\r\n\t        }\r\n\t        if (this._removalsTail !== null) {\r\n\t            this._removalsTail._nextRemoved = null;\r\n\t        }\r\n\t        if (this._identityChangesTail !== null) {\r\n\t            this._identityChangesTail._nextIdentityChange = null;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._reinsertAfter = function (record, prevRecord, index) {\r\n\t        if (this._unlinkedRecords !== null) {\r\n\t            this._unlinkedRecords.remove(record);\r\n\t        }\r\n\t        var prev = record._prevRemoved;\r\n\t        var next = record._nextRemoved;\r\n\t        if (prev === null) {\r\n\t            this._removalsHead = next;\r\n\t        }\r\n\t        else {\r\n\t            prev._nextRemoved = next;\r\n\t        }\r\n\t        if (next === null) {\r\n\t            this._removalsTail = prev;\r\n\t        }\r\n\t        else {\r\n\t            next._prevRemoved = prev;\r\n\t        }\r\n\t        this._insertAfter(record, prevRecord, index);\r\n\t        this._addToMoves(record, index);\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._moveAfter = function (record, prevRecord, index) {\r\n\t        this._unlink(record);\r\n\t        this._insertAfter(record, prevRecord, index);\r\n\t        this._addToMoves(record, index);\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._addAfter = function (record, prevRecord, index) {\r\n\t        this._insertAfter(record, prevRecord, index);\r\n\t        if (this._additionsTail === null) {\r\n\t            // todo(vicb)\r\n\t            // assert(this._additionsHead === null);\r\n\t            this._additionsTail = this._additionsHead = record;\r\n\t        }\r\n\t        else {\r\n\t            // todo(vicb)\r\n\t            // assert(_additionsTail._nextAdded === null);\r\n\t            // assert(record._nextAdded === null);\r\n\t            this._additionsTail = this._additionsTail._nextAdded = record;\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._insertAfter = function (record, prevRecord, index) {\r\n\t        // todo(vicb)\r\n\t        // assert(record != prevRecord);\r\n\t        // assert(record._next === null);\r\n\t        // assert(record._prev === null);\r\n\t        var next = prevRecord === null ? this._itHead : prevRecord._next;\r\n\t        // todo(vicb)\r\n\t        // assert(next != record);\r\n\t        // assert(prevRecord != record);\r\n\t        record._next = next;\r\n\t        record._prev = prevRecord;\r\n\t        if (next === null) {\r\n\t            this._itTail = record;\r\n\t        }\r\n\t        else {\r\n\t            next._prev = record;\r\n\t        }\r\n\t        if (prevRecord === null) {\r\n\t            this._itHead = record;\r\n\t        }\r\n\t        else {\r\n\t            prevRecord._next = record;\r\n\t        }\r\n\t        if (this._linkedRecords === null) {\r\n\t            this._linkedRecords = new _DuplicateMap();\r\n\t        }\r\n\t        this._linkedRecords.put(record);\r\n\t        record.currentIndex = index;\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._remove = function (record) {\r\n\t        return this._addToRemovals(this._unlink(record));\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._unlink = function (record) {\r\n\t        if (this._linkedRecords !== null) {\r\n\t            this._linkedRecords.remove(record);\r\n\t        }\r\n\t        var prev = record._prev;\r\n\t        var next = record._next;\r\n\t        // todo(vicb)\r\n\t        // assert((record._prev = null) === null);\r\n\t        // assert((record._next = null) === null);\r\n\t        if (prev === null) {\r\n\t            this._itHead = next;\r\n\t        }\r\n\t        else {\r\n\t            prev._next = next;\r\n\t        }\r\n\t        if (next === null) {\r\n\t            this._itTail = prev;\r\n\t        }\r\n\t        else {\r\n\t            next._prev = prev;\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._addToMoves = function (record, toIndex) {\r\n\t        // todo(vicb)\r\n\t        // assert(record._nextMoved === null);\r\n\t        if (record.previousIndex === toIndex) {\r\n\t            return record;\r\n\t        }\r\n\t        if (this._movesTail === null) {\r\n\t            // todo(vicb)\r\n\t            // assert(_movesHead === null);\r\n\t            this._movesTail = this._movesHead = record;\r\n\t        }\r\n\t        else {\r\n\t            // todo(vicb)\r\n\t            // assert(_movesTail._nextMoved === null);\r\n\t            this._movesTail = this._movesTail._nextMoved = record;\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._addToRemovals = function (record) {\r\n\t        if (this._unlinkedRecords === null) {\r\n\t            this._unlinkedRecords = new _DuplicateMap();\r\n\t        }\r\n\t        this._unlinkedRecords.put(record);\r\n\t        record.currentIndex = null;\r\n\t        record._nextRemoved = null;\r\n\t        if (this._removalsTail === null) {\r\n\t            // todo(vicb)\r\n\t            // assert(_removalsHead === null);\r\n\t            this._removalsTail = this._removalsHead = record;\r\n\t            record._prevRemoved = null;\r\n\t        }\r\n\t        else {\r\n\t            // todo(vicb)\r\n\t            // assert(_removalsTail._nextRemoved === null);\r\n\t            // assert(record._nextRemoved === null);\r\n\t            record._prevRemoved = this._removalsTail;\r\n\t            this._removalsTail = this._removalsTail._nextRemoved = record;\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultIterableDiffer.prototype._addIdentityChange = function (record, item) {\r\n\t        record.item = item;\r\n\t        if (this._identityChangesTail === null) {\r\n\t            this._identityChangesTail = this._identityChangesHead = record;\r\n\t        }\r\n\t        else {\r\n\t            this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    DefaultIterableDiffer.prototype.toString = function () {\r\n\t        var list = [];\r\n\t        this.forEachItem(function (record) { return list.push(record); });\r\n\t        var previous = [];\r\n\t        this.forEachPreviousItem(function (record) { return previous.push(record); });\r\n\t        var additions = [];\r\n\t        this.forEachAddedItem(function (record) { return additions.push(record); });\r\n\t        var moves = [];\r\n\t        this.forEachMovedItem(function (record) { return moves.push(record); });\r\n\t        var removals = [];\r\n\t        this.forEachRemovedItem(function (record) { return removals.push(record); });\r\n\t        var identityChanges = [];\r\n\t        this.forEachIdentityChange(function (record) { return identityChanges.push(record); });\r\n\t        return \"collection: \" + list.join(', ') + \"\\n\" + \"previous: \" + previous.join(', ') + \"\\n\" +\r\n\t            \"additions: \" + additions.join(', ') + \"\\n\" + \"moves: \" + moves.join(', ') + \"\\n\" +\r\n\t            \"removals: \" + removals.join(', ') + \"\\n\" + \"identityChanges: \" +\r\n\t            identityChanges.join(', ') + \"\\n\";\r\n\t    };\r\n\t    return DefaultIterableDiffer;\r\n\t})();\r\n\texports.DefaultIterableDiffer = DefaultIterableDiffer;\r\n\tvar CollectionChangeRecord = (function () {\r\n\t    function CollectionChangeRecord(item, trackById) {\r\n\t        this.item = item;\r\n\t        this.trackById = trackById;\r\n\t        this.currentIndex = null;\r\n\t        this.previousIndex = null;\r\n\t        /** @internal */\r\n\t        this._nextPrevious = null;\r\n\t        /** @internal */\r\n\t        this._prev = null;\r\n\t        /** @internal */\r\n\t        this._next = null;\r\n\t        /** @internal */\r\n\t        this._prevDup = null;\r\n\t        /** @internal */\r\n\t        this._nextDup = null;\r\n\t        /** @internal */\r\n\t        this._prevRemoved = null;\r\n\t        /** @internal */\r\n\t        this._nextRemoved = null;\r\n\t        /** @internal */\r\n\t        this._nextAdded = null;\r\n\t        /** @internal */\r\n\t        this._nextMoved = null;\r\n\t        /** @internal */\r\n\t        this._nextIdentityChange = null;\r\n\t    }\r\n\t    CollectionChangeRecord.prototype.toString = function () {\r\n\t        return this.previousIndex === this.currentIndex ?\r\n\t            lang_2.stringify(this.item) :\r\n\t            lang_2.stringify(this.item) + '[' + lang_2.stringify(this.previousIndex) + '->' +\r\n\t                lang_2.stringify(this.currentIndex) + ']';\r\n\t    };\r\n\t    return CollectionChangeRecord;\r\n\t})();\r\n\texports.CollectionChangeRecord = CollectionChangeRecord;\r\n\t// A linked list of CollectionChangeRecords with the same CollectionChangeRecord.item\r\n\tvar _DuplicateItemRecordList = (function () {\r\n\t    function _DuplicateItemRecordList() {\r\n\t        /** @internal */\r\n\t        this._head = null;\r\n\t        /** @internal */\r\n\t        this._tail = null;\r\n\t    }\r\n\t    /**\r\n\t     * Append the record to the list of duplicates.\r\n\t     *\r\n\t     * Note: by design all records in the list of duplicates hold the same value in record.item.\r\n\t     */\r\n\t    _DuplicateItemRecordList.prototype.add = function (record) {\r\n\t        if (this._head === null) {\r\n\t            this._head = this._tail = record;\r\n\t            record._nextDup = null;\r\n\t            record._prevDup = null;\r\n\t        }\r\n\t        else {\r\n\t            // todo(vicb)\r\n\t            // assert(record.item ==  _head.item ||\r\n\t            //       record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);\r\n\t            this._tail._nextDup = record;\r\n\t            record._prevDup = this._tail;\r\n\t            record._nextDup = null;\r\n\t            this._tail = record;\r\n\t        }\r\n\t    };\r\n\t    // Returns a CollectionChangeRecord having CollectionChangeRecord.trackById == trackById and\r\n\t    // CollectionChangeRecord.currentIndex >= afterIndex\r\n\t    _DuplicateItemRecordList.prototype.get = function (trackById, afterIndex) {\r\n\t        var record;\r\n\t        for (record = this._head; record !== null; record = record._nextDup) {\r\n\t            if ((afterIndex === null || afterIndex < record.currentIndex) &&\r\n\t                lang_2.looseIdentical(record.trackById, trackById)) {\r\n\t                return record;\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    /**\r\n\t     * Remove one {@link CollectionChangeRecord} from the list of duplicates.\r\n\t     *\r\n\t     * Returns whether the list of duplicates is empty.\r\n\t     */\r\n\t    _DuplicateItemRecordList.prototype.remove = function (record) {\r\n\t        // todo(vicb)\r\n\t        // assert(() {\r\n\t        //  // verify that the record being removed is in the list.\r\n\t        //  for (CollectionChangeRecord cursor = _head; cursor != null; cursor = cursor._nextDup) {\r\n\t        //    if (identical(cursor, record)) return true;\r\n\t        //  }\r\n\t        //  return false;\r\n\t        //});\r\n\t        var prev = record._prevDup;\r\n\t        var next = record._nextDup;\r\n\t        if (prev === null) {\r\n\t            this._head = next;\r\n\t        }\r\n\t        else {\r\n\t            prev._nextDup = next;\r\n\t        }\r\n\t        if (next === null) {\r\n\t            this._tail = prev;\r\n\t        }\r\n\t        else {\r\n\t            next._prevDup = prev;\r\n\t        }\r\n\t        return this._head === null;\r\n\t    };\r\n\t    return _DuplicateItemRecordList;\r\n\t})();\r\n\tvar _DuplicateMap = (function () {\r\n\t    function _DuplicateMap() {\r\n\t        this.map = new Map();\r\n\t    }\r\n\t    _DuplicateMap.prototype.put = function (record) {\r\n\t        // todo(vicb) handle corner cases\r\n\t        var key = lang_2.getMapKey(record.trackById);\r\n\t        var duplicates = this.map.get(key);\r\n\t        if (!lang_2.isPresent(duplicates)) {\r\n\t            duplicates = new _DuplicateItemRecordList();\r\n\t            this.map.set(key, duplicates);\r\n\t        }\r\n\t        duplicates.add(record);\r\n\t    };\r\n\t    /**\r\n\t     * Retrieve the `value` using key. Because the CollectionChangeRecord value may be one which we\r\n\t     * have already iterated over, we use the afterIndex to pretend it is not there.\r\n\t     *\r\n\t     * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we\r\n\t     * have any more `a`s needs to return the last `a` not the first or second.\r\n\t     */\r\n\t    _DuplicateMap.prototype.get = function (trackById, afterIndex) {\r\n\t        if (afterIndex === void 0) { afterIndex = null; }\r\n\t        var key = lang_2.getMapKey(trackById);\r\n\t        var recordList = this.map.get(key);\r\n\t        return lang_2.isBlank(recordList) ? null : recordList.get(trackById, afterIndex);\r\n\t    };\r\n\t    /**\r\n\t     * Removes a {@link CollectionChangeRecord} from the list of duplicates.\r\n\t     *\r\n\t     * The list of duplicates also is removed from the map if it gets empty.\r\n\t     */\r\n\t    _DuplicateMap.prototype.remove = function (record) {\r\n\t        var key = lang_2.getMapKey(record.trackById);\r\n\t        // todo(vicb)\r\n\t        // assert(this.map.containsKey(key));\r\n\t        var recordList = this.map.get(key);\r\n\t        // Remove the list of duplicates when it gets empty\r\n\t        if (recordList.remove(record)) {\r\n\t            this.map.delete(key);\r\n\t        }\r\n\t        return record;\r\n\t    };\r\n\t    Object.defineProperty(_DuplicateMap.prototype, \"isEmpty\", {\r\n\t        get: function () { return this.map.size === 0; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    _DuplicateMap.prototype.clear = function () { this.map.clear(); };\r\n\t    _DuplicateMap.prototype.toString = function () { return '_DuplicateMap(' + lang_2.stringify(this.map) + ')'; };\r\n\t    return _DuplicateMap;\r\n\t})();\r\n\n\n/***/ },\n/* 295 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar DefaultKeyValueDifferFactory = (function () {\r\n\t    function DefaultKeyValueDifferFactory() {\r\n\t    }\r\n\t    DefaultKeyValueDifferFactory.prototype.supports = function (obj) { return obj instanceof Map || lang_1.isJsObject(obj); };\r\n\t    DefaultKeyValueDifferFactory.prototype.create = function (cdRef) { return new DefaultKeyValueDiffer(); };\r\n\t    DefaultKeyValueDifferFactory = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DefaultKeyValueDifferFactory);\r\n\t    return DefaultKeyValueDifferFactory;\r\n\t})();\r\n\texports.DefaultKeyValueDifferFactory = DefaultKeyValueDifferFactory;\r\n\tvar DefaultKeyValueDiffer = (function () {\r\n\t    function DefaultKeyValueDiffer() {\r\n\t        this._records = new Map();\r\n\t        this._mapHead = null;\r\n\t        this._previousMapHead = null;\r\n\t        this._changesHead = null;\r\n\t        this._changesTail = null;\r\n\t        this._additionsHead = null;\r\n\t        this._additionsTail = null;\r\n\t        this._removalsHead = null;\r\n\t        this._removalsTail = null;\r\n\t    }\r\n\t    Object.defineProperty(DefaultKeyValueDiffer.prototype, \"isDirty\", {\r\n\t        get: function () {\r\n\t            return this._additionsHead !== null || this._changesHead !== null ||\r\n\t                this._removalsHead !== null;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    DefaultKeyValueDiffer.prototype.forEachItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._mapHead; record !== null; record = record._next) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.forEachPreviousItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.forEachChangedItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._changesHead; record !== null; record = record._nextChanged) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.forEachAddedItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._additionsHead; record !== null; record = record._nextAdded) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.forEachRemovedItem = function (fn) {\r\n\t        var record;\r\n\t        for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\r\n\t            fn(record);\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.diff = function (map) {\r\n\t        if (lang_1.isBlank(map))\r\n\t            map = collection_1.MapWrapper.createFromPairs([]);\r\n\t        if (!(map instanceof Map || lang_1.isJsObject(map))) {\r\n\t            throw new exceptions_1.BaseException(\"Error trying to diff '\" + map + \"'\");\r\n\t        }\r\n\t        if (this.check(map)) {\r\n\t            return this;\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.onDestroy = function () { };\r\n\t    DefaultKeyValueDiffer.prototype.check = function (map) {\r\n\t        var _this = this;\r\n\t        this._reset();\r\n\t        var records = this._records;\r\n\t        var oldSeqRecord = this._mapHead;\r\n\t        var lastOldSeqRecord = null;\r\n\t        var lastNewSeqRecord = null;\r\n\t        var seqChanged = false;\r\n\t        this._forEach(map, function (value, key) {\r\n\t            var newSeqRecord;\r\n\t            if (oldSeqRecord !== null && key === oldSeqRecord.key) {\r\n\t                newSeqRecord = oldSeqRecord;\r\n\t                if (!lang_1.looseIdentical(value, oldSeqRecord.currentValue)) {\r\n\t                    oldSeqRecord.previousValue = oldSeqRecord.currentValue;\r\n\t                    oldSeqRecord.currentValue = value;\r\n\t                    _this._addToChanges(oldSeqRecord);\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                seqChanged = true;\r\n\t                if (oldSeqRecord !== null) {\r\n\t                    oldSeqRecord._next = null;\r\n\t                    _this._removeFromSeq(lastOldSeqRecord, oldSeqRecord);\r\n\t                    _this._addToRemovals(oldSeqRecord);\r\n\t                }\r\n\t                if (records.has(key)) {\r\n\t                    newSeqRecord = records.get(key);\r\n\t                }\r\n\t                else {\r\n\t                    newSeqRecord = new KeyValueChangeRecord(key);\r\n\t                    records.set(key, newSeqRecord);\r\n\t                    newSeqRecord.currentValue = value;\r\n\t                    _this._addToAdditions(newSeqRecord);\r\n\t                }\r\n\t            }\r\n\t            if (seqChanged) {\r\n\t                if (_this._isInRemovals(newSeqRecord)) {\r\n\t                    _this._removeFromRemovals(newSeqRecord);\r\n\t                }\r\n\t                if (lastNewSeqRecord == null) {\r\n\t                    _this._mapHead = newSeqRecord;\r\n\t                }\r\n\t                else {\r\n\t                    lastNewSeqRecord._next = newSeqRecord;\r\n\t                }\r\n\t            }\r\n\t            lastOldSeqRecord = oldSeqRecord;\r\n\t            lastNewSeqRecord = newSeqRecord;\r\n\t            oldSeqRecord = oldSeqRecord === null ? null : oldSeqRecord._next;\r\n\t        });\r\n\t        this._truncate(lastOldSeqRecord, oldSeqRecord);\r\n\t        return this.isDirty;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._reset = function () {\r\n\t        if (this.isDirty) {\r\n\t            var record;\r\n\t            // Record the state of the mapping\r\n\t            for (record = this._previousMapHead = this._mapHead; record !== null; record = record._next) {\r\n\t                record._nextPrevious = record._next;\r\n\t            }\r\n\t            for (record = this._changesHead; record !== null; record = record._nextChanged) {\r\n\t                record.previousValue = record.currentValue;\r\n\t            }\r\n\t            for (record = this._additionsHead; record != null; record = record._nextAdded) {\r\n\t                record.previousValue = record.currentValue;\r\n\t            }\r\n\t            // todo(vicb) once assert is supported\r\n\t            // assert(() {\r\n\t            //  var r = _changesHead;\r\n\t            //  while (r != null) {\r\n\t            //    var nextRecord = r._nextChanged;\r\n\t            //    r._nextChanged = null;\r\n\t            //    r = nextRecord;\r\n\t            //  }\r\n\t            //\r\n\t            //  r = _additionsHead;\r\n\t            //  while (r != null) {\r\n\t            //    var nextRecord = r._nextAdded;\r\n\t            //    r._nextAdded = null;\r\n\t            //    r = nextRecord;\r\n\t            //  }\r\n\t            //\r\n\t            //  r = _removalsHead;\r\n\t            //  while (r != null) {\r\n\t            //    var nextRecord = r._nextRemoved;\r\n\t            //    r._nextRemoved = null;\r\n\t            //    r = nextRecord;\r\n\t            //  }\r\n\t            //\r\n\t            //  return true;\r\n\t            //});\r\n\t            this._changesHead = this._changesTail = null;\r\n\t            this._additionsHead = this._additionsTail = null;\r\n\t            this._removalsHead = this._removalsTail = null;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._truncate = function (lastRecord, record) {\r\n\t        while (record !== null) {\r\n\t            if (lastRecord === null) {\r\n\t                this._mapHead = null;\r\n\t            }\r\n\t            else {\r\n\t                lastRecord._next = null;\r\n\t            }\r\n\t            var nextRecord = record._next;\r\n\t            // todo(vicb) assert\r\n\t            // assert((() {\r\n\t            //  record._next = null;\r\n\t            //  return true;\r\n\t            //}));\r\n\t            this._addToRemovals(record);\r\n\t            lastRecord = record;\r\n\t            record = nextRecord;\r\n\t        }\r\n\t        for (var rec = this._removalsHead; rec !== null; rec = rec._nextRemoved) {\r\n\t            rec.previousValue = rec.currentValue;\r\n\t            rec.currentValue = null;\r\n\t            this._records.delete(rec.key);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._isInRemovals = function (record) {\r\n\t        return record === this._removalsHead || record._nextRemoved !== null ||\r\n\t            record._prevRemoved !== null;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._addToRemovals = function (record) {\r\n\t        // todo(vicb) assert\r\n\t        // assert(record._next == null);\r\n\t        // assert(record._nextAdded == null);\r\n\t        // assert(record._nextChanged == null);\r\n\t        // assert(record._nextRemoved == null);\r\n\t        // assert(record._prevRemoved == null);\r\n\t        if (this._removalsHead === null) {\r\n\t            this._removalsHead = this._removalsTail = record;\r\n\t        }\r\n\t        else {\r\n\t            this._removalsTail._nextRemoved = record;\r\n\t            record._prevRemoved = this._removalsTail;\r\n\t            this._removalsTail = record;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._removeFromSeq = function (prev, record) {\r\n\t        var next = record._next;\r\n\t        if (prev === null) {\r\n\t            this._mapHead = next;\r\n\t        }\r\n\t        else {\r\n\t            prev._next = next;\r\n\t        }\r\n\t        // todo(vicb) assert\r\n\t        // assert((() {\r\n\t        //  record._next = null;\r\n\t        //  return true;\r\n\t        //})());\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._removeFromRemovals = function (record) {\r\n\t        // todo(vicb) assert\r\n\t        // assert(record._next == null);\r\n\t        // assert(record._nextAdded == null);\r\n\t        // assert(record._nextChanged == null);\r\n\t        var prev = record._prevRemoved;\r\n\t        var next = record._nextRemoved;\r\n\t        if (prev === null) {\r\n\t            this._removalsHead = next;\r\n\t        }\r\n\t        else {\r\n\t            prev._nextRemoved = next;\r\n\t        }\r\n\t        if (next === null) {\r\n\t            this._removalsTail = prev;\r\n\t        }\r\n\t        else {\r\n\t            next._prevRemoved = prev;\r\n\t        }\r\n\t        record._prevRemoved = record._nextRemoved = null;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._addToAdditions = function (record) {\r\n\t        // todo(vicb): assert\r\n\t        // assert(record._next == null);\r\n\t        // assert(record._nextAdded == null);\r\n\t        // assert(record._nextChanged == null);\r\n\t        // assert(record._nextRemoved == null);\r\n\t        // assert(record._prevRemoved == null);\r\n\t        if (this._additionsHead === null) {\r\n\t            this._additionsHead = this._additionsTail = record;\r\n\t        }\r\n\t        else {\r\n\t            this._additionsTail._nextAdded = record;\r\n\t            this._additionsTail = record;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._addToChanges = function (record) {\r\n\t        // todo(vicb) assert\r\n\t        // assert(record._nextAdded == null);\r\n\t        // assert(record._nextChanged == null);\r\n\t        // assert(record._nextRemoved == null);\r\n\t        // assert(record._prevRemoved == null);\r\n\t        if (this._changesHead === null) {\r\n\t            this._changesHead = this._changesTail = record;\r\n\t        }\r\n\t        else {\r\n\t            this._changesTail._nextChanged = record;\r\n\t            this._changesTail = record;\r\n\t        }\r\n\t    };\r\n\t    DefaultKeyValueDiffer.prototype.toString = function () {\r\n\t        var items = [];\r\n\t        var previous = [];\r\n\t        var changes = [];\r\n\t        var additions = [];\r\n\t        var removals = [];\r\n\t        var record;\r\n\t        for (record = this._mapHead; record !== null; record = record._next) {\r\n\t            items.push(lang_1.stringify(record));\r\n\t        }\r\n\t        for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\r\n\t            previous.push(lang_1.stringify(record));\r\n\t        }\r\n\t        for (record = this._changesHead; record !== null; record = record._nextChanged) {\r\n\t            changes.push(lang_1.stringify(record));\r\n\t        }\r\n\t        for (record = this._additionsHead; record !== null; record = record._nextAdded) {\r\n\t            additions.push(lang_1.stringify(record));\r\n\t        }\r\n\t        for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\r\n\t            removals.push(lang_1.stringify(record));\r\n\t        }\r\n\t        return \"map: \" + items.join(', ') + \"\\n\" + \"previous: \" + previous.join(', ') + \"\\n\" +\r\n\t            \"additions: \" + additions.join(', ') + \"\\n\" + \"changes: \" + changes.join(', ') + \"\\n\" +\r\n\t            \"removals: \" + removals.join(', ') + \"\\n\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    DefaultKeyValueDiffer.prototype._forEach = function (obj, fn) {\r\n\t        if (obj instanceof Map) {\r\n\t            obj.forEach(fn);\r\n\t        }\r\n\t        else {\r\n\t            collection_1.StringMapWrapper.forEach(obj, fn);\r\n\t        }\r\n\t    };\r\n\t    return DefaultKeyValueDiffer;\r\n\t})();\r\n\texports.DefaultKeyValueDiffer = DefaultKeyValueDiffer;\r\n\tvar KeyValueChangeRecord = (function () {\r\n\t    function KeyValueChangeRecord(key) {\r\n\t        this.key = key;\r\n\t        this.previousValue = null;\r\n\t        this.currentValue = null;\r\n\t        /** @internal */\r\n\t        this._nextPrevious = null;\r\n\t        /** @internal */\r\n\t        this._next = null;\r\n\t        /** @internal */\r\n\t        this._nextAdded = null;\r\n\t        /** @internal */\r\n\t        this._nextRemoved = null;\r\n\t        /** @internal */\r\n\t        this._prevRemoved = null;\r\n\t        /** @internal */\r\n\t        this._nextChanged = null;\r\n\t    }\r\n\t    KeyValueChangeRecord.prototype.toString = function () {\r\n\t        return lang_1.looseIdentical(this.previousValue, this.currentValue) ?\r\n\t            lang_1.stringify(this.key) :\r\n\t            (lang_1.stringify(this.key) + '[' + lang_1.stringify(this.previousValue) + '->' +\r\n\t                lang_1.stringify(this.currentValue) + ']');\r\n\t    };\r\n\t    return KeyValueChangeRecord;\r\n\t})();\r\n\texports.KeyValueChangeRecord = KeyValueChangeRecord;\r\n\n\n/***/ },\n/* 296 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar di_1 = __webpack_require__(8);\r\n\t/**\r\n\t * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.\r\n\t */\r\n\tvar IterableDiffers = (function () {\r\n\t    function IterableDiffers(factories) {\r\n\t        this.factories = factories;\r\n\t    }\r\n\t    IterableDiffers.create = function (factories, parent) {\r\n\t        if (lang_1.isPresent(parent)) {\r\n\t            var copied = collection_1.ListWrapper.clone(parent.factories);\r\n\t            factories = factories.concat(copied);\r\n\t            return new IterableDiffers(factories);\r\n\t        }\r\n\t        else {\r\n\t            return new IterableDiffers(factories);\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the\r\n\t     * inherited {@link IterableDiffers} instance with the provided factories and return a new\r\n\t     * {@link IterableDiffers} instance.\r\n\t     *\r\n\t     * The following example shows how to extend an existing list of factories,\r\n\t           * which will only be applied to the injector for this component and its children.\r\n\t           * This step is all that's required to make a new {@link IterableDiffer} available.\r\n\t     *\r\n\t     * ### Example\r\n\t     *\r\n\t     * ```\r\n\t     * @Component({\r\n\t     *   viewProviders: [\r\n\t     *     IterableDiffers.extend([new ImmutableListDiffer()])\r\n\t     *   ]\r\n\t     * })\r\n\t     * ```\r\n\t     */\r\n\t    IterableDiffers.extend = function (factories) {\r\n\t        return new di_1.Provider(IterableDiffers, {\r\n\t            useFactory: function (parent) {\r\n\t                if (lang_1.isBlank(parent)) {\r\n\t                    // Typically would occur when calling IterableDiffers.extend inside of dependencies passed\r\n\t                    // to\r\n\t                    // bootstrap(), which would override default pipes instead of extending them.\r\n\t                    throw new exceptions_1.BaseException('Cannot extend IterableDiffers without a parent injector');\r\n\t                }\r\n\t                return IterableDiffers.create(factories, parent);\r\n\t            },\r\n\t            // Dependency technically isn't optional, but we can provide a better error message this way.\r\n\t            deps: [[IterableDiffers, new di_1.SkipSelfMetadata(), new di_1.OptionalMetadata()]]\r\n\t        });\r\n\t    };\r\n\t    IterableDiffers.prototype.find = function (iterable) {\r\n\t        var factory = this.factories.find(function (f) { return f.supports(iterable); });\r\n\t        if (lang_1.isPresent(factory)) {\r\n\t            return factory;\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.BaseException(\"Cannot find a differ supporting object '\" + iterable + \"'\");\r\n\t        }\r\n\t    };\r\n\t    IterableDiffers = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Array])\r\n\t    ], IterableDiffers);\r\n\t    return IterableDiffers;\r\n\t})();\r\n\texports.IterableDiffers = IterableDiffers;\r\n\n\n/***/ },\n/* 297 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar di_1 = __webpack_require__(8);\r\n\t/**\r\n\t * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.\r\n\t */\r\n\tvar KeyValueDiffers = (function () {\r\n\t    function KeyValueDiffers(factories) {\r\n\t        this.factories = factories;\r\n\t    }\r\n\t    KeyValueDiffers.create = function (factories, parent) {\r\n\t        if (lang_1.isPresent(parent)) {\r\n\t            var copied = collection_1.ListWrapper.clone(parent.factories);\r\n\t            factories = factories.concat(copied);\r\n\t            return new KeyValueDiffers(factories);\r\n\t        }\r\n\t        else {\r\n\t            return new KeyValueDiffers(factories);\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the\r\n\t     * inherited {@link KeyValueDiffers} instance with the provided factories and return a new\r\n\t     * {@link KeyValueDiffers} instance.\r\n\t     *\r\n\t     * The following example shows how to extend an existing list of factories,\r\n\t           * which will only be applied to the injector for this component and its children.\r\n\t           * This step is all that's required to make a new {@link KeyValueDiffer} available.\r\n\t     *\r\n\t     * ### Example\r\n\t     *\r\n\t     * ```\r\n\t     * @Component({\r\n\t     *   viewProviders: [\r\n\t     *     KeyValueDiffers.extend([new ImmutableMapDiffer()])\r\n\t     *   ]\r\n\t     * })\r\n\t     * ```\r\n\t     */\r\n\t    KeyValueDiffers.extend = function (factories) {\r\n\t        return new di_1.Provider(KeyValueDiffers, {\r\n\t            useFactory: function (parent) {\r\n\t                if (lang_1.isBlank(parent)) {\r\n\t                    // Typically would occur when calling KeyValueDiffers.extend inside of dependencies passed\r\n\t                    // to\r\n\t                    // bootstrap(), which would override default pipes instead of extending them.\r\n\t                    throw new exceptions_1.BaseException('Cannot extend KeyValueDiffers without a parent injector');\r\n\t                }\r\n\t                return KeyValueDiffers.create(factories, parent);\r\n\t            },\r\n\t            // Dependency technically isn't optional, but we can provide a better error message this way.\r\n\t            deps: [[KeyValueDiffers, new di_1.SkipSelfMetadata(), new di_1.OptionalMetadata()]]\r\n\t        });\r\n\t    };\r\n\t    KeyValueDiffers.prototype.find = function (kv) {\r\n\t        var factory = this.factories.find(function (f) { return f.supports(kv); });\r\n\t        if (lang_1.isPresent(factory)) {\r\n\t            return factory;\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.BaseException(\"Cannot find a differ supporting object '\" + kv + \"'\");\r\n\t        }\r\n\t    };\r\n\t    KeyValueDiffers = __decorate([\r\n\t        di_1.Injectable(),\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [Array])\r\n\t    ], KeyValueDiffers);\r\n\t    return KeyValueDiffers;\r\n\t})();\r\n\texports.KeyValueDiffers = KeyValueDiffers;\r\n\n\n/***/ },\n/* 298 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar abstract_change_detector_1 = __webpack_require__(191);\r\n\tvar change_detection_util_1 = __webpack_require__(79);\r\n\tvar constants_1 = __webpack_require__(57);\r\n\tvar proto_record_1 = __webpack_require__(94);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar DynamicChangeDetector = (function (_super) {\r\n\t    __extends(DynamicChangeDetector, _super);\r\n\t    function DynamicChangeDetector(id, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices, strategy, _records, _eventBindings, _directiveRecords, _genConfig) {\r\n\t        _super.call(this, id, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices, strategy);\r\n\t        this._records = _records;\r\n\t        this._eventBindings = _eventBindings;\r\n\t        this._directiveRecords = _directiveRecords;\r\n\t        this._genConfig = _genConfig;\r\n\t        var len = _records.length + 1;\r\n\t        this.values = collection_1.ListWrapper.createFixedSize(len);\r\n\t        this.localPipes = collection_1.ListWrapper.createFixedSize(len);\r\n\t        this.prevContexts = collection_1.ListWrapper.createFixedSize(len);\r\n\t        this.changes = collection_1.ListWrapper.createFixedSize(len);\r\n\t        this.dehydrateDirectives(false);\r\n\t    }\r\n\t    DynamicChangeDetector.prototype.handleEventInternal = function (eventName, elIndex, locals) {\r\n\t        var _this = this;\r\n\t        var preventDefault = false;\r\n\t        this._matchingEventBindings(eventName, elIndex)\r\n\t            .forEach(function (rec) {\r\n\t            var res = _this._processEventBinding(rec, locals);\r\n\t            if (res === false) {\r\n\t                preventDefault = true;\r\n\t            }\r\n\t        });\r\n\t        return preventDefault;\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._processEventBinding = function (eb, locals) {\r\n\t        var values = collection_1.ListWrapper.createFixedSize(eb.records.length);\r\n\t        values[0] = this.values[0];\r\n\t        for (var protoIdx = 0; protoIdx < eb.records.length; ++protoIdx) {\r\n\t            var proto = eb.records[protoIdx];\r\n\t            if (proto.isSkipRecord()) {\r\n\t                protoIdx += this._computeSkipLength(protoIdx, proto, values);\r\n\t            }\r\n\t            else {\r\n\t                if (proto.lastInBinding) {\r\n\t                    this._markPathAsCheckOnce(proto);\r\n\t                }\r\n\t                var res = this._calculateCurrValue(proto, values, locals);\r\n\t                if (proto.lastInBinding) {\r\n\t                    return res;\r\n\t                }\r\n\t                else {\r\n\t                    this._writeSelf(proto, res, values);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"Cannot be reached\");\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._computeSkipLength = function (protoIndex, proto, values) {\r\n\t        if (proto.mode === proto_record_1.RecordType.SkipRecords) {\r\n\t            return proto.fixedArgs[0] - protoIndex - 1;\r\n\t        }\r\n\t        if (proto.mode === proto_record_1.RecordType.SkipRecordsIf) {\r\n\t            var condition = this._readContext(proto, values);\r\n\t            return condition ? proto.fixedArgs[0] - protoIndex - 1 : 0;\r\n\t        }\r\n\t        if (proto.mode === proto_record_1.RecordType.SkipRecordsIfNot) {\r\n\t            var condition = this._readContext(proto, values);\r\n\t            return condition ? 0 : proto.fixedArgs[0] - protoIndex - 1;\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"Cannot be reached\");\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._markPathAsCheckOnce = function (proto) {\r\n\t        if (!proto.bindingRecord.isDefaultChangeDetection()) {\r\n\t            var dir = proto.bindingRecord.directiveRecord;\r\n\t            this._getDetectorFor(dir.directiveIndex).markPathToRootAsCheckOnce();\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._matchingEventBindings = function (eventName, elIndex) {\r\n\t        return this._eventBindings.filter(function (eb) { return eb.eventName == eventName && eb.elIndex === elIndex; });\r\n\t    };\r\n\t    DynamicChangeDetector.prototype.hydrateDirectives = function (dispatcher) {\r\n\t        var _this = this;\r\n\t        this.values[0] = this.context;\r\n\t        this.dispatcher = dispatcher;\r\n\t        this.outputSubscriptions = [];\r\n\t        for (var i = 0; i < this._directiveRecords.length; ++i) {\r\n\t            var r = this._directiveRecords[i];\r\n\t            if (lang_1.isPresent(r.outputs)) {\r\n\t                r.outputs.forEach(function (output) {\r\n\t                    var eventHandler = _this._createEventHandler(r.directiveIndex.elementIndex, output[1]);\r\n\t                    var directive = _this._getDirectiveFor(r.directiveIndex);\r\n\t                    var getter = reflection_1.reflector.getter(output[0]);\r\n\t                    _this.outputSubscriptions.push(async_1.ObservableWrapper.subscribe(getter(directive), eventHandler));\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._createEventHandler = function (boundElementIndex, eventName) {\r\n\t        var _this = this;\r\n\t        return function (event) { return _this.handleEvent(eventName, boundElementIndex, event); };\r\n\t    };\r\n\t    DynamicChangeDetector.prototype.dehydrateDirectives = function (destroyPipes) {\r\n\t        if (destroyPipes) {\r\n\t            this._destroyPipes();\r\n\t            this._destroyDirectives();\r\n\t        }\r\n\t        this.values[0] = null;\r\n\t        collection_1.ListWrapper.fill(this.values, change_detection_util_1.ChangeDetectionUtil.uninitialized, 1);\r\n\t        collection_1.ListWrapper.fill(this.changes, false);\r\n\t        collection_1.ListWrapper.fill(this.localPipes, null);\r\n\t        collection_1.ListWrapper.fill(this.prevContexts, change_detection_util_1.ChangeDetectionUtil.uninitialized);\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._destroyPipes = function () {\r\n\t        for (var i = 0; i < this.localPipes.length; ++i) {\r\n\t            if (lang_1.isPresent(this.localPipes[i])) {\r\n\t                change_detection_util_1.ChangeDetectionUtil.callPipeOnDestroy(this.localPipes[i]);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._destroyDirectives = function () {\r\n\t        for (var i = 0; i < this._directiveRecords.length; ++i) {\r\n\t            var record = this._directiveRecords[i];\r\n\t            if (record.callOnDestroy) {\r\n\t                this._getDirectiveFor(record.directiveIndex).ngOnDestroy();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DynamicChangeDetector.prototype.checkNoChanges = function () { this.runDetectChanges(true); };\r\n\t    DynamicChangeDetector.prototype.detectChangesInRecordsInternal = function (throwOnChange) {\r\n\t        var protos = this._records;\r\n\t        var changes = null;\r\n\t        var isChanged = false;\r\n\t        for (var protoIdx = 0; protoIdx < protos.length; ++protoIdx) {\r\n\t            var proto = protos[protoIdx];\r\n\t            var bindingRecord = proto.bindingRecord;\r\n\t            var directiveRecord = bindingRecord.directiveRecord;\r\n\t            if (this._firstInBinding(proto)) {\r\n\t                this.propertyBindingIndex = proto.propertyBindingIndex;\r\n\t            }\r\n\t            if (proto.isLifeCycleRecord()) {\r\n\t                if (proto.name === \"DoCheck\" && !throwOnChange) {\r\n\t                    this._getDirectiveFor(directiveRecord.directiveIndex).ngDoCheck();\r\n\t                }\r\n\t                else if (proto.name === \"OnInit\" && !throwOnChange &&\r\n\t                    this.state == constants_1.ChangeDetectorState.NeverChecked) {\r\n\t                    this._getDirectiveFor(directiveRecord.directiveIndex).ngOnInit();\r\n\t                }\r\n\t                else if (proto.name === \"OnChanges\" && lang_1.isPresent(changes) && !throwOnChange) {\r\n\t                    this._getDirectiveFor(directiveRecord.directiveIndex).ngOnChanges(changes);\r\n\t                }\r\n\t            }\r\n\t            else if (proto.isSkipRecord()) {\r\n\t                protoIdx += this._computeSkipLength(protoIdx, proto, this.values);\r\n\t            }\r\n\t            else {\r\n\t                var change = this._check(proto, throwOnChange, this.values, this.locals);\r\n\t                if (lang_1.isPresent(change)) {\r\n\t                    this._updateDirectiveOrElement(change, bindingRecord);\r\n\t                    isChanged = true;\r\n\t                    changes = this._addChange(bindingRecord, change, changes);\r\n\t                }\r\n\t            }\r\n\t            if (proto.lastInDirective) {\r\n\t                changes = null;\r\n\t                if (isChanged && !bindingRecord.isDefaultChangeDetection()) {\r\n\t                    this._getDetectorFor(directiveRecord.directiveIndex).markAsCheckOnce();\r\n\t                }\r\n\t                isChanged = false;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._firstInBinding = function (r) {\r\n\t        var prev = change_detection_util_1.ChangeDetectionUtil.protoByIndex(this._records, r.selfIndex - 1);\r\n\t        return lang_1.isBlank(prev) || prev.bindingRecord !== r.bindingRecord;\r\n\t    };\r\n\t    DynamicChangeDetector.prototype.afterContentLifecycleCallbacksInternal = function () {\r\n\t        var dirs = this._directiveRecords;\r\n\t        for (var i = dirs.length - 1; i >= 0; --i) {\r\n\t            var dir = dirs[i];\r\n\t            if (dir.callAfterContentInit && this.state == constants_1.ChangeDetectorState.NeverChecked) {\r\n\t                this._getDirectiveFor(dir.directiveIndex).ngAfterContentInit();\r\n\t            }\r\n\t            if (dir.callAfterContentChecked) {\r\n\t                this._getDirectiveFor(dir.directiveIndex).ngAfterContentChecked();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DynamicChangeDetector.prototype.afterViewLifecycleCallbacksInternal = function () {\r\n\t        var dirs = this._directiveRecords;\r\n\t        for (var i = dirs.length - 1; i >= 0; --i) {\r\n\t            var dir = dirs[i];\r\n\t            if (dir.callAfterViewInit && this.state == constants_1.ChangeDetectorState.NeverChecked) {\r\n\t                this._getDirectiveFor(dir.directiveIndex).ngAfterViewInit();\r\n\t            }\r\n\t            if (dir.callAfterViewChecked) {\r\n\t                this._getDirectiveFor(dir.directiveIndex).ngAfterViewChecked();\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._updateDirectiveOrElement = function (change, bindingRecord) {\r\n\t        if (lang_1.isBlank(bindingRecord.directiveRecord)) {\r\n\t            _super.prototype.notifyDispatcher.call(this, change.currentValue);\r\n\t        }\r\n\t        else {\r\n\t            var directiveIndex = bindingRecord.directiveRecord.directiveIndex;\r\n\t            bindingRecord.setter(this._getDirectiveFor(directiveIndex), change.currentValue);\r\n\t        }\r\n\t        if (this._genConfig.logBindingUpdate) {\r\n\t            _super.prototype.logBindingUpdate.call(this, change.currentValue);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._addChange = function (bindingRecord, change, changes) {\r\n\t        if (bindingRecord.callOnChanges()) {\r\n\t            return _super.prototype.addChange.call(this, changes, change.previousValue, change.currentValue);\r\n\t        }\r\n\t        else {\r\n\t            return changes;\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._getDirectiveFor = function (directiveIndex) {\r\n\t        return this.dispatcher.getDirectiveFor(directiveIndex);\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._getDetectorFor = function (directiveIndex) {\r\n\t        return this.dispatcher.getDetectorFor(directiveIndex);\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._check = function (proto, throwOnChange, values, locals) {\r\n\t        if (proto.isPipeRecord()) {\r\n\t            return this._pipeCheck(proto, throwOnChange, values);\r\n\t        }\r\n\t        else {\r\n\t            return this._referenceCheck(proto, throwOnChange, values, locals);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    DynamicChangeDetector.prototype._referenceCheck = function (proto, throwOnChange, values, locals) {\r\n\t        if (this._pureFuncAndArgsDidNotChange(proto)) {\r\n\t            this._setChanged(proto, false);\r\n\t            return null;\r\n\t        }\r\n\t        var currValue = this._calculateCurrValue(proto, values, locals);\r\n\t        if (proto.shouldBeChecked()) {\r\n\t            var prevValue = this._readSelf(proto, values);\r\n\t            var detectedChange = throwOnChange ?\r\n\t                !change_detection_util_1.ChangeDetectionUtil.devModeEqual(prevValue, currValue) :\r\n\t                change_detection_util_1.ChangeDetectionUtil.looseNotIdentical(prevValue, currValue);\r\n\t            if (detectedChange) {\r\n\t                if (proto.lastInBinding) {\r\n\t                    var change = change_detection_util_1.ChangeDetectionUtil.simpleChange(prevValue, currValue);\r\n\t                    if (throwOnChange)\r\n\t                        this.throwOnChangeError(prevValue, currValue);\r\n\t                    this._writeSelf(proto, currValue, values);\r\n\t                    this._setChanged(proto, true);\r\n\t                    return change;\r\n\t                }\r\n\t                else {\r\n\t                    this._writeSelf(proto, currValue, values);\r\n\t                    this._setChanged(proto, true);\r\n\t                    return null;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._setChanged(proto, false);\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this._writeSelf(proto, currValue, values);\r\n\t            this._setChanged(proto, true);\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._calculateCurrValue = function (proto, values, locals) {\r\n\t        switch (proto.mode) {\r\n\t            case proto_record_1.RecordType.Self:\r\n\t                return this._readContext(proto, values);\r\n\t            case proto_record_1.RecordType.Const:\r\n\t                return proto.funcOrValue;\r\n\t            case proto_record_1.RecordType.PropertyRead:\r\n\t                var context = this._readContext(proto, values);\r\n\t                return proto.funcOrValue(context);\r\n\t            case proto_record_1.RecordType.SafeProperty:\r\n\t                var context = this._readContext(proto, values);\r\n\t                return lang_1.isBlank(context) ? null : proto.funcOrValue(context);\r\n\t            case proto_record_1.RecordType.PropertyWrite:\r\n\t                var context = this._readContext(proto, values);\r\n\t                var value = this._readArgs(proto, values)[0];\r\n\t                proto.funcOrValue(context, value);\r\n\t                return value;\r\n\t            case proto_record_1.RecordType.KeyedWrite:\r\n\t                var context = this._readContext(proto, values);\r\n\t                var key = this._readArgs(proto, values)[0];\r\n\t                var value = this._readArgs(proto, values)[1];\r\n\t                context[key] = value;\r\n\t                return value;\r\n\t            case proto_record_1.RecordType.Local:\r\n\t                return locals.get(proto.name);\r\n\t            case proto_record_1.RecordType.InvokeMethod:\r\n\t                var context = this._readContext(proto, values);\r\n\t                var args = this._readArgs(proto, values);\r\n\t                return proto.funcOrValue(context, args);\r\n\t            case proto_record_1.RecordType.SafeMethodInvoke:\r\n\t                var context = this._readContext(proto, values);\r\n\t                if (lang_1.isBlank(context)) {\r\n\t                    return null;\r\n\t                }\r\n\t                var args = this._readArgs(proto, values);\r\n\t                return proto.funcOrValue(context, args);\r\n\t            case proto_record_1.RecordType.KeyedRead:\r\n\t                var arg = this._readArgs(proto, values)[0];\r\n\t                return this._readContext(proto, values)[arg];\r\n\t            case proto_record_1.RecordType.Chain:\r\n\t                var args = this._readArgs(proto, values);\r\n\t                return args[args.length - 1];\r\n\t            case proto_record_1.RecordType.InvokeClosure:\r\n\t                return lang_1.FunctionWrapper.apply(this._readContext(proto, values), this._readArgs(proto, values));\r\n\t            case proto_record_1.RecordType.Interpolate:\r\n\t            case proto_record_1.RecordType.PrimitiveOp:\r\n\t            case proto_record_1.RecordType.CollectionLiteral:\r\n\t                return lang_1.FunctionWrapper.apply(proto.funcOrValue, this._readArgs(proto, values));\r\n\t            default:\r\n\t                throw new exceptions_1.BaseException(\"Unknown operation \" + proto.mode);\r\n\t        }\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._pipeCheck = function (proto, throwOnChange, values) {\r\n\t        var context = this._readContext(proto, values);\r\n\t        var selectedPipe = this._pipeFor(proto, context);\r\n\t        if (!selectedPipe.pure || this._argsOrContextChanged(proto)) {\r\n\t            var args = this._readArgs(proto, values);\r\n\t            var currValue = selectedPipe.pipe.transform(context, args);\r\n\t            if (proto.shouldBeChecked()) {\r\n\t                var prevValue = this._readSelf(proto, values);\r\n\t                var detectedChange = throwOnChange ?\r\n\t                    !change_detection_util_1.ChangeDetectionUtil.devModeEqual(prevValue, currValue) :\r\n\t                    change_detection_util_1.ChangeDetectionUtil.looseNotIdentical(prevValue, currValue);\r\n\t                if (detectedChange) {\r\n\t                    currValue = change_detection_util_1.ChangeDetectionUtil.unwrapValue(currValue);\r\n\t                    if (proto.lastInBinding) {\r\n\t                        var change = change_detection_util_1.ChangeDetectionUtil.simpleChange(prevValue, currValue);\r\n\t                        if (throwOnChange)\r\n\t                            this.throwOnChangeError(prevValue, currValue);\r\n\t                        this._writeSelf(proto, currValue, values);\r\n\t                        this._setChanged(proto, true);\r\n\t                        return change;\r\n\t                    }\r\n\t                    else {\r\n\t                        this._writeSelf(proto, currValue, values);\r\n\t                        this._setChanged(proto, true);\r\n\t                        return null;\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    this._setChanged(proto, false);\r\n\t                    return null;\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                this._writeSelf(proto, currValue, values);\r\n\t                this._setChanged(proto, true);\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._pipeFor = function (proto, context) {\r\n\t        var storedPipe = this._readPipe(proto);\r\n\t        if (lang_1.isPresent(storedPipe))\r\n\t            return storedPipe;\r\n\t        var pipe = this.pipes.get(proto.name);\r\n\t        this._writePipe(proto, pipe);\r\n\t        return pipe;\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._readContext = function (proto, values) {\r\n\t        if (proto.contextIndex == -1) {\r\n\t            return this._getDirectiveFor(proto.directiveIndex);\r\n\t        }\r\n\t        return values[proto.contextIndex];\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._readSelf = function (proto, values) { return values[proto.selfIndex]; };\r\n\t    DynamicChangeDetector.prototype._writeSelf = function (proto, value, values) { values[proto.selfIndex] = value; };\r\n\t    DynamicChangeDetector.prototype._readPipe = function (proto) { return this.localPipes[proto.selfIndex]; };\r\n\t    DynamicChangeDetector.prototype._writePipe = function (proto, value) { this.localPipes[proto.selfIndex] = value; };\r\n\t    DynamicChangeDetector.prototype._setChanged = function (proto, value) {\r\n\t        if (proto.argumentToPureFunction)\r\n\t            this.changes[proto.selfIndex] = value;\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._pureFuncAndArgsDidNotChange = function (proto) {\r\n\t        return proto.isPureFunction() && !this._argsChanged(proto);\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._argsChanged = function (proto) {\r\n\t        var args = proto.args;\r\n\t        for (var i = 0; i < args.length; ++i) {\r\n\t            if (this.changes[args[i]]) {\r\n\t                return true;\r\n\t            }\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._argsOrContextChanged = function (proto) {\r\n\t        return this._argsChanged(proto) || this.changes[proto.contextIndex];\r\n\t    };\r\n\t    DynamicChangeDetector.prototype._readArgs = function (proto, values) {\r\n\t        var res = collection_1.ListWrapper.createFixedSize(proto.args.length);\r\n\t        var args = proto.args;\r\n\t        for (var i = 0; i < args.length; ++i) {\r\n\t            res[i] = values[args[i]];\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    return DynamicChangeDetector;\r\n\t})(abstract_change_detector_1.AbstractChangeDetector);\r\n\texports.DynamicChangeDetector = DynamicChangeDetector;\r\n\n\n/***/ },\n/* 299 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * An error thrown if application changes model breaking the top-down data flow.\r\n\t *\r\n\t * This exception is only thrown in dev mode.\r\n\t *\r\n\t * <!-- TODO: Add a link once the dev mode option is configurable -->\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'parent',\r\n\t *   template: `\r\n\t *     <child [prop]=\"parentProp\"></child>\r\n\t *   `,\r\n\t *   directives: [forwardRef(() => Child)]\r\n\t * })\r\n\t * class Parent {\r\n\t *   parentProp = \"init\";\r\n\t * }\r\n\t *\r\n\t * @Directive({selector: 'child', inputs: ['prop']})\r\n\t * class Child {\r\n\t *   constructor(public parent: Parent) {}\r\n\t *\r\n\t *   set prop(v) {\r\n\t *     // this updates the parent property, which is disallowed during change detection\r\n\t *     // this will result in ExpressionChangedAfterItHasBeenCheckedException\r\n\t *     this.parent.parentProp = \"updated\";\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar ExpressionChangedAfterItHasBeenCheckedException = (function (_super) {\r\n\t    __extends(ExpressionChangedAfterItHasBeenCheckedException, _super);\r\n\t    function ExpressionChangedAfterItHasBeenCheckedException(exp, oldValue, currValue, context) {\r\n\t        _super.call(this, (\"Expression '\" + exp + \"' has changed after it was checked. \") +\r\n\t            (\"Previous value: '\" + oldValue + \"'. Current value: '\" + currValue + \"'\"));\r\n\t    }\r\n\t    return ExpressionChangedAfterItHasBeenCheckedException;\r\n\t})(exceptions_1.BaseException);\r\n\texports.ExpressionChangedAfterItHasBeenCheckedException = ExpressionChangedAfterItHasBeenCheckedException;\r\n\t/**\r\n\t * Thrown when an expression evaluation raises an exception.\r\n\t *\r\n\t * This error wraps the original exception to attach additional contextual information that can\r\n\t * be useful for debugging.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/2Kywoz?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * @Directive({selector: 'child', inputs: ['prop']})\r\n\t * class Child {\r\n\t *   prop;\r\n\t * }\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'app',\r\n\t *   template: `\r\n\t *     <child [prop]=\"field.first\"></child>\r\n\t *   `,\r\n\t *   directives: [Child]\r\n\t * })\r\n\t * class App {\r\n\t *   field = null;\r\n\t * }\r\n\t *\r\n\t * bootstrap(App);\r\n\t * ```\r\n\t *\r\n\t * You can access the original exception and stack through the `originalException` and\r\n\t * `originalStack` properties.\r\n\t */\r\n\tvar ChangeDetectionError = (function (_super) {\r\n\t    __extends(ChangeDetectionError, _super);\r\n\t    function ChangeDetectionError(exp, originalException, originalStack, context) {\r\n\t        _super.call(this, originalException + \" in [\" + exp + \"]\", originalException, originalStack, context);\r\n\t        this.location = exp;\r\n\t    }\r\n\t    return ChangeDetectionError;\r\n\t})(exceptions_1.WrappedException);\r\n\texports.ChangeDetectionError = ChangeDetectionError;\r\n\t/**\r\n\t * Thrown when change detector executes on dehydrated view.\r\n\t *\r\n\t * This error indicates a bug in the framework.\r\n\t *\r\n\t * This is an internal Angular error.\r\n\t */\r\n\tvar DehydratedException = (function (_super) {\r\n\t    __extends(DehydratedException, _super);\r\n\t    function DehydratedException(details) {\r\n\t        _super.call(this, \"Attempt to use a dehydrated detector: \" + details);\r\n\t    }\r\n\t    return DehydratedException;\r\n\t})(exceptions_1.BaseException);\r\n\texports.DehydratedException = DehydratedException;\r\n\t/**\r\n\t * Wraps an exception thrown by an event handler.\r\n\t */\r\n\tvar EventEvaluationError = (function (_super) {\r\n\t    __extends(EventEvaluationError, _super);\r\n\t    function EventEvaluationError(eventName, originalException, originalStack, context) {\r\n\t        _super.call(this, \"Error during evaluation of \\\"\" + eventName + \"\\\"\", originalException, originalStack, context);\r\n\t    }\r\n\t    return EventEvaluationError;\r\n\t})(exceptions_1.WrappedException);\r\n\texports.EventEvaluationError = EventEvaluationError;\r\n\t/**\r\n\t * Error context included when an event handler throws an exception.\r\n\t */\r\n\tvar EventEvaluationErrorContext = (function () {\r\n\t    function EventEvaluationErrorContext(element, componentElement, context, locals, injector) {\r\n\t        this.element = element;\r\n\t        this.componentElement = componentElement;\r\n\t        this.context = context;\r\n\t        this.locals = locals;\r\n\t        this.injector = injector;\r\n\t    }\r\n\t    return EventEvaluationErrorContext;\r\n\t})();\r\n\texports.EventEvaluationErrorContext = EventEvaluationErrorContext;\r\n\n\n/***/ },\n/* 300 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar decorators_1 = __webpack_require__(195);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t(function (TokenType) {\r\n\t    TokenType[TokenType[\"Character\"] = 0] = \"Character\";\r\n\t    TokenType[TokenType[\"Identifier\"] = 1] = \"Identifier\";\r\n\t    TokenType[TokenType[\"Keyword\"] = 2] = \"Keyword\";\r\n\t    TokenType[TokenType[\"String\"] = 3] = \"String\";\r\n\t    TokenType[TokenType[\"Operator\"] = 4] = \"Operator\";\r\n\t    TokenType[TokenType[\"Number\"] = 5] = \"Number\";\r\n\t})(exports.TokenType || (exports.TokenType = {}));\r\n\tvar TokenType = exports.TokenType;\r\n\tvar Lexer = (function () {\r\n\t    function Lexer() {\r\n\t    }\r\n\t    Lexer.prototype.tokenize = function (text) {\r\n\t        var scanner = new _Scanner(text);\r\n\t        var tokens = [];\r\n\t        var token = scanner.scanToken();\r\n\t        while (token != null) {\r\n\t            tokens.push(token);\r\n\t            token = scanner.scanToken();\r\n\t        }\r\n\t        return tokens;\r\n\t    };\r\n\t    Lexer = __decorate([\r\n\t        decorators_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], Lexer);\r\n\t    return Lexer;\r\n\t})();\r\n\texports.Lexer = Lexer;\r\n\tvar Token = (function () {\r\n\t    function Token(index, type, numValue, strValue) {\r\n\t        this.index = index;\r\n\t        this.type = type;\r\n\t        this.numValue = numValue;\r\n\t        this.strValue = strValue;\r\n\t    }\r\n\t    Token.prototype.isCharacter = function (code) {\r\n\t        return (this.type == TokenType.Character && this.numValue == code);\r\n\t    };\r\n\t    Token.prototype.isNumber = function () { return (this.type == TokenType.Number); };\r\n\t    Token.prototype.isString = function () { return (this.type == TokenType.String); };\r\n\t    Token.prototype.isOperator = function (operater) {\r\n\t        return (this.type == TokenType.Operator && this.strValue == operater);\r\n\t    };\r\n\t    Token.prototype.isIdentifier = function () { return (this.type == TokenType.Identifier); };\r\n\t    Token.prototype.isKeyword = function () { return (this.type == TokenType.Keyword); };\r\n\t    Token.prototype.isKeywordVar = function () { return (this.type == TokenType.Keyword && this.strValue == \"var\"); };\r\n\t    Token.prototype.isKeywordNull = function () { return (this.type == TokenType.Keyword && this.strValue == \"null\"); };\r\n\t    Token.prototype.isKeywordUndefined = function () {\r\n\t        return (this.type == TokenType.Keyword && this.strValue == \"undefined\");\r\n\t    };\r\n\t    Token.prototype.isKeywordTrue = function () { return (this.type == TokenType.Keyword && this.strValue == \"true\"); };\r\n\t    Token.prototype.isKeywordFalse = function () { return (this.type == TokenType.Keyword && this.strValue == \"false\"); };\r\n\t    Token.prototype.toNumber = function () {\r\n\t        // -1 instead of NULL ok?\r\n\t        return (this.type == TokenType.Number) ? this.numValue : -1;\r\n\t    };\r\n\t    Token.prototype.toString = function () {\r\n\t        switch (this.type) {\r\n\t            case TokenType.Character:\r\n\t            case TokenType.Identifier:\r\n\t            case TokenType.Keyword:\r\n\t            case TokenType.Operator:\r\n\t            case TokenType.String:\r\n\t                return this.strValue;\r\n\t            case TokenType.Number:\r\n\t                return this.numValue.toString();\r\n\t            default:\r\n\t                return null;\r\n\t        }\r\n\t    };\r\n\t    return Token;\r\n\t})();\r\n\texports.Token = Token;\r\n\tfunction newCharacterToken(index, code) {\r\n\t    return new Token(index, TokenType.Character, code, lang_1.StringWrapper.fromCharCode(code));\r\n\t}\r\n\tfunction newIdentifierToken(index, text) {\r\n\t    return new Token(index, TokenType.Identifier, 0, text);\r\n\t}\r\n\tfunction newKeywordToken(index, text) {\r\n\t    return new Token(index, TokenType.Keyword, 0, text);\r\n\t}\r\n\tfunction newOperatorToken(index, text) {\r\n\t    return new Token(index, TokenType.Operator, 0, text);\r\n\t}\r\n\tfunction newStringToken(index, text) {\r\n\t    return new Token(index, TokenType.String, 0, text);\r\n\t}\r\n\tfunction newNumberToken(index, n) {\r\n\t    return new Token(index, TokenType.Number, n, \"\");\r\n\t}\r\n\texports.EOF = new Token(-1, TokenType.Character, 0, \"\");\r\n\texports.$EOF = 0;\r\n\texports.$TAB = 9;\r\n\texports.$LF = 10;\r\n\texports.$VTAB = 11;\r\n\texports.$FF = 12;\r\n\texports.$CR = 13;\r\n\texports.$SPACE = 32;\r\n\texports.$BANG = 33;\r\n\texports.$DQ = 34;\r\n\texports.$HASH = 35;\r\n\texports.$$ = 36;\r\n\texports.$PERCENT = 37;\r\n\texports.$AMPERSAND = 38;\r\n\texports.$SQ = 39;\r\n\texports.$LPAREN = 40;\r\n\texports.$RPAREN = 41;\r\n\texports.$STAR = 42;\r\n\texports.$PLUS = 43;\r\n\texports.$COMMA = 44;\r\n\texports.$MINUS = 45;\r\n\texports.$PERIOD = 46;\r\n\texports.$SLASH = 47;\r\n\texports.$COLON = 58;\r\n\texports.$SEMICOLON = 59;\r\n\texports.$LT = 60;\r\n\texports.$EQ = 61;\r\n\texports.$GT = 62;\r\n\texports.$QUESTION = 63;\r\n\tvar $0 = 48;\r\n\tvar $9 = 57;\r\n\tvar $A = 65, $E = 69, $Z = 90;\r\n\texports.$LBRACKET = 91;\r\n\texports.$BACKSLASH = 92;\r\n\texports.$RBRACKET = 93;\r\n\tvar $CARET = 94;\r\n\tvar $_ = 95;\r\n\tvar $a = 97, $e = 101, $f = 102, $n = 110, $r = 114, $t = 116, $u = 117, $v = 118, $z = 122;\r\n\texports.$LBRACE = 123;\r\n\texports.$BAR = 124;\r\n\texports.$RBRACE = 125;\r\n\tvar $NBSP = 160;\r\n\tvar ScannerError = (function (_super) {\r\n\t    __extends(ScannerError, _super);\r\n\t    function ScannerError(message) {\r\n\t        _super.call(this);\r\n\t        this.message = message;\r\n\t    }\r\n\t    ScannerError.prototype.toString = function () { return this.message; };\r\n\t    return ScannerError;\r\n\t})(exceptions_1.BaseException);\r\n\texports.ScannerError = ScannerError;\r\n\tvar _Scanner = (function () {\r\n\t    function _Scanner(input) {\r\n\t        this.input = input;\r\n\t        this.peek = 0;\r\n\t        this.index = -1;\r\n\t        this.length = input.length;\r\n\t        this.advance();\r\n\t    }\r\n\t    _Scanner.prototype.advance = function () {\r\n\t        this.peek =\r\n\t            ++this.index >= this.length ? exports.$EOF : lang_1.StringWrapper.charCodeAt(this.input, this.index);\r\n\t    };\r\n\t    _Scanner.prototype.scanToken = function () {\r\n\t        var input = this.input, length = this.length, peek = this.peek, index = this.index;\r\n\t        // Skip whitespace.\r\n\t        while (peek <= exports.$SPACE) {\r\n\t            if (++index >= length) {\r\n\t                peek = exports.$EOF;\r\n\t                break;\r\n\t            }\r\n\t            else {\r\n\t                peek = lang_1.StringWrapper.charCodeAt(input, index);\r\n\t            }\r\n\t        }\r\n\t        this.peek = peek;\r\n\t        this.index = index;\r\n\t        if (index >= length) {\r\n\t            return null;\r\n\t        }\r\n\t        // Handle identifiers and numbers.\r\n\t        if (isIdentifierStart(peek))\r\n\t            return this.scanIdentifier();\r\n\t        if (isDigit(peek))\r\n\t            return this.scanNumber(index);\r\n\t        var start = index;\r\n\t        switch (peek) {\r\n\t            case exports.$PERIOD:\r\n\t                this.advance();\r\n\t                return isDigit(this.peek) ? this.scanNumber(start) : newCharacterToken(start, exports.$PERIOD);\r\n\t            case exports.$LPAREN:\r\n\t            case exports.$RPAREN:\r\n\t            case exports.$LBRACE:\r\n\t            case exports.$RBRACE:\r\n\t            case exports.$LBRACKET:\r\n\t            case exports.$RBRACKET:\r\n\t            case exports.$COMMA:\r\n\t            case exports.$COLON:\r\n\t            case exports.$SEMICOLON:\r\n\t                return this.scanCharacter(start, peek);\r\n\t            case exports.$SQ:\r\n\t            case exports.$DQ:\r\n\t                return this.scanString();\r\n\t            case exports.$HASH:\r\n\t            case exports.$PLUS:\r\n\t            case exports.$MINUS:\r\n\t            case exports.$STAR:\r\n\t            case exports.$SLASH:\r\n\t            case exports.$PERCENT:\r\n\t            case $CARET:\r\n\t                return this.scanOperator(start, lang_1.StringWrapper.fromCharCode(peek));\r\n\t            case exports.$QUESTION:\r\n\t                return this.scanComplexOperator(start, '?', exports.$PERIOD, '.');\r\n\t            case exports.$LT:\r\n\t            case exports.$GT:\r\n\t                return this.scanComplexOperator(start, lang_1.StringWrapper.fromCharCode(peek), exports.$EQ, '=');\r\n\t            case exports.$BANG:\r\n\t            case exports.$EQ:\r\n\t                return this.scanComplexOperator(start, lang_1.StringWrapper.fromCharCode(peek), exports.$EQ, '=', exports.$EQ, '=');\r\n\t            case exports.$AMPERSAND:\r\n\t                return this.scanComplexOperator(start, '&', exports.$AMPERSAND, '&');\r\n\t            case exports.$BAR:\r\n\t                return this.scanComplexOperator(start, '|', exports.$BAR, '|');\r\n\t            case $NBSP:\r\n\t                while (isWhitespace(this.peek))\r\n\t                    this.advance();\r\n\t                return this.scanToken();\r\n\t        }\r\n\t        this.error(\"Unexpected character [\" + lang_1.StringWrapper.fromCharCode(peek) + \"]\", 0);\r\n\t        return null;\r\n\t    };\r\n\t    _Scanner.prototype.scanCharacter = function (start, code) {\r\n\t        this.advance();\r\n\t        return newCharacterToken(start, code);\r\n\t    };\r\n\t    _Scanner.prototype.scanOperator = function (start, str) {\r\n\t        this.advance();\r\n\t        return newOperatorToken(start, str);\r\n\t    };\r\n\t    /**\r\n\t     * Tokenize a 2/3 char long operator\r\n\t     *\r\n\t     * @param start start index in the expression\r\n\t     * @param one first symbol (always part of the operator)\r\n\t     * @param twoCode code point for the second symbol\r\n\t     * @param two second symbol (part of the operator when the second code point matches)\r\n\t     * @param threeCode code point for the third symbol\r\n\t     * @param three third symbol (part of the operator when provided and matches source expression)\r\n\t     * @returns {Token}\r\n\t     */\r\n\t    _Scanner.prototype.scanComplexOperator = function (start, one, twoCode, two, threeCode, three) {\r\n\t        this.advance();\r\n\t        var str = one;\r\n\t        if (this.peek == twoCode) {\r\n\t            this.advance();\r\n\t            str += two;\r\n\t        }\r\n\t        if (lang_1.isPresent(threeCode) && this.peek == threeCode) {\r\n\t            this.advance();\r\n\t            str += three;\r\n\t        }\r\n\t        return newOperatorToken(start, str);\r\n\t    };\r\n\t    _Scanner.prototype.scanIdentifier = function () {\r\n\t        var start = this.index;\r\n\t        this.advance();\r\n\t        while (isIdentifierPart(this.peek))\r\n\t            this.advance();\r\n\t        var str = this.input.substring(start, this.index);\r\n\t        if (collection_1.SetWrapper.has(KEYWORDS, str)) {\r\n\t            return newKeywordToken(start, str);\r\n\t        }\r\n\t        else {\r\n\t            return newIdentifierToken(start, str);\r\n\t        }\r\n\t    };\r\n\t    _Scanner.prototype.scanNumber = function (start) {\r\n\t        var simple = (this.index === start);\r\n\t        this.advance(); // Skip initial digit.\r\n\t        while (true) {\r\n\t            if (isDigit(this.peek)) {\r\n\t            }\r\n\t            else if (this.peek == exports.$PERIOD) {\r\n\t                simple = false;\r\n\t            }\r\n\t            else if (isExponentStart(this.peek)) {\r\n\t                this.advance();\r\n\t                if (isExponentSign(this.peek))\r\n\t                    this.advance();\r\n\t                if (!isDigit(this.peek))\r\n\t                    this.error('Invalid exponent', -1);\r\n\t                simple = false;\r\n\t            }\r\n\t            else {\r\n\t                break;\r\n\t            }\r\n\t            this.advance();\r\n\t        }\r\n\t        var str = this.input.substring(start, this.index);\r\n\t        // TODO\r\n\t        var value = simple ? lang_1.NumberWrapper.parseIntAutoRadix(str) : lang_1.NumberWrapper.parseFloat(str);\r\n\t        return newNumberToken(start, value);\r\n\t    };\r\n\t    _Scanner.prototype.scanString = function () {\r\n\t        var start = this.index;\r\n\t        var quote = this.peek;\r\n\t        this.advance(); // Skip initial quote.\r\n\t        var buffer;\r\n\t        var marker = this.index;\r\n\t        var input = this.input;\r\n\t        while (this.peek != quote) {\r\n\t            if (this.peek == exports.$BACKSLASH) {\r\n\t                if (buffer == null)\r\n\t                    buffer = new lang_1.StringJoiner();\r\n\t                buffer.add(input.substring(marker, this.index));\r\n\t                this.advance();\r\n\t                var unescapedCode;\r\n\t                if (this.peek == $u) {\r\n\t                    // 4 character hex code for unicode character.\r\n\t                    var hex = input.substring(this.index + 1, this.index + 5);\r\n\t                    try {\r\n\t                        unescapedCode = lang_1.NumberWrapper.parseInt(hex, 16);\r\n\t                    }\r\n\t                    catch (e) {\r\n\t                        this.error(\"Invalid unicode escape [\\\\u\" + hex + \"]\", 0);\r\n\t                    }\r\n\t                    for (var i = 0; i < 5; i++) {\r\n\t                        this.advance();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    unescapedCode = unescape(this.peek);\r\n\t                    this.advance();\r\n\t                }\r\n\t                buffer.add(lang_1.StringWrapper.fromCharCode(unescapedCode));\r\n\t                marker = this.index;\r\n\t            }\r\n\t            else if (this.peek == exports.$EOF) {\r\n\t                this.error('Unterminated quote', 0);\r\n\t            }\r\n\t            else {\r\n\t                this.advance();\r\n\t            }\r\n\t        }\r\n\t        var last = input.substring(marker, this.index);\r\n\t        this.advance(); // Skip terminating quote.\r\n\t        // Compute the unescaped string value.\r\n\t        var unescaped = last;\r\n\t        if (buffer != null) {\r\n\t            buffer.add(last);\r\n\t            unescaped = buffer.toString();\r\n\t        }\r\n\t        return newStringToken(start, unescaped);\r\n\t    };\r\n\t    _Scanner.prototype.error = function (message, offset) {\r\n\t        var position = this.index + offset;\r\n\t        throw new ScannerError(\"Lexer Error: \" + message + \" at column \" + position + \" in expression [\" + this.input + \"]\");\r\n\t    };\r\n\t    return _Scanner;\r\n\t})();\r\n\tfunction isWhitespace(code) {\r\n\t    return (code >= exports.$TAB && code <= exports.$SPACE) || (code == $NBSP);\r\n\t}\r\n\tfunction isIdentifierStart(code) {\r\n\t    return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || (code == $_) || (code == exports.$$);\r\n\t}\r\n\tfunction isIdentifier(input) {\r\n\t    if (input.length == 0)\r\n\t        return false;\r\n\t    var scanner = new _Scanner(input);\r\n\t    if (!isIdentifierStart(scanner.peek))\r\n\t        return false;\r\n\t    scanner.advance();\r\n\t    while (scanner.peek !== exports.$EOF) {\r\n\t        if (!isIdentifierPart(scanner.peek))\r\n\t            return false;\r\n\t        scanner.advance();\r\n\t    }\r\n\t    return true;\r\n\t}\r\n\texports.isIdentifier = isIdentifier;\r\n\tfunction isIdentifierPart(code) {\r\n\t    return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || ($0 <= code && code <= $9) ||\r\n\t        (code == $_) || (code == exports.$$);\r\n\t}\r\n\tfunction isDigit(code) {\r\n\t    return $0 <= code && code <= $9;\r\n\t}\r\n\tfunction isExponentStart(code) {\r\n\t    return code == $e || code == $E;\r\n\t}\r\n\tfunction isExponentSign(code) {\r\n\t    return code == exports.$MINUS || code == exports.$PLUS;\r\n\t}\r\n\tfunction unescape(code) {\r\n\t    switch (code) {\r\n\t        case $n:\r\n\t            return exports.$LF;\r\n\t        case $f:\r\n\t            return exports.$FF;\r\n\t        case $r:\r\n\t            return exports.$CR;\r\n\t        case $t:\r\n\t            return exports.$TAB;\r\n\t        case $v:\r\n\t            return exports.$VTAB;\r\n\t        default:\r\n\t            return code;\r\n\t    }\r\n\t}\r\n\tvar OPERATORS = collection_1.SetWrapper.createFromList([\r\n\t    '+',\r\n\t    '-',\r\n\t    '*',\r\n\t    '/',\r\n\t    '%',\r\n\t    '^',\r\n\t    '=',\r\n\t    '==',\r\n\t    '!=',\r\n\t    '===',\r\n\t    '!==',\r\n\t    '<',\r\n\t    '>',\r\n\t    '<=',\r\n\t    '>=',\r\n\t    '&&',\r\n\t    '||',\r\n\t    '&',\r\n\t    '|',\r\n\t    '!',\r\n\t    '?',\r\n\t    '#',\r\n\t    '?.'\r\n\t]);\r\n\tvar KEYWORDS = collection_1.SetWrapper.createFromList(['var', 'null', 'undefined', 'true', 'false', 'if', 'else']);\r\n\n\n/***/ },\n/* 301 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar Locals = (function () {\r\n\t    function Locals(parent, current) {\r\n\t        this.parent = parent;\r\n\t        this.current = current;\r\n\t    }\r\n\t    Locals.prototype.contains = function (name) {\r\n\t        if (this.current.has(name)) {\r\n\t            return true;\r\n\t        }\r\n\t        if (lang_1.isPresent(this.parent)) {\r\n\t            return this.parent.contains(name);\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    Locals.prototype.get = function (name) {\r\n\t        if (this.current.has(name)) {\r\n\t            return this.current.get(name);\r\n\t        }\r\n\t        if (lang_1.isPresent(this.parent)) {\r\n\t            return this.parent.get(name);\r\n\t        }\r\n\t        throw new exceptions_1.BaseException(\"Cannot find '\" + name + \"'\");\r\n\t    };\r\n\t    Locals.prototype.set = function (name, value) {\r\n\t        // TODO(rado): consider removing this check if we can guarantee this is not\r\n\t        // exposed to the public API.\r\n\t        // TODO: vsavkin maybe it should check only the local map\r\n\t        if (this.current.has(name)) {\r\n\t            this.current.set(name, value);\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.BaseException(\"Setting of new keys post-construction is not supported. Key: \" + name + \".\");\r\n\t        }\r\n\t    };\r\n\t    Locals.prototype.clearLocalValues = function () { collection_1.MapWrapper.clearValues(this.current); };\r\n\t    return Locals;\r\n\t})();\r\n\texports.Locals = Locals;\r\n\n\n/***/ },\n/* 302 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar ast_1 = __webpack_require__(127);\r\n\tvar change_detection_util_1 = __webpack_require__(79);\r\n\tvar dynamic_change_detector_1 = __webpack_require__(298);\r\n\tvar directive_record_1 = __webpack_require__(192);\r\n\tvar event_binding_1 = __webpack_require__(607);\r\n\tvar coalesce_1 = __webpack_require__(604);\r\n\tvar proto_record_1 = __webpack_require__(94);\r\n\tvar DynamicProtoChangeDetector = (function () {\r\n\t    function DynamicProtoChangeDetector(_definition) {\r\n\t        this._definition = _definition;\r\n\t        this._propertyBindingRecords = createPropertyRecords(_definition);\r\n\t        this._eventBindingRecords = createEventRecords(_definition);\r\n\t        this._propertyBindingTargets = this._definition.bindingRecords.map(function (b) { return b.target; });\r\n\t        this._directiveIndices = this._definition.directiveRecords.map(function (d) { return d.directiveIndex; });\r\n\t    }\r\n\t    DynamicProtoChangeDetector.prototype.instantiate = function () {\r\n\t        return new dynamic_change_detector_1.DynamicChangeDetector(this._definition.id, this._propertyBindingRecords.length, this._propertyBindingTargets, this._directiveIndices, this._definition.strategy, this._propertyBindingRecords, this._eventBindingRecords, this._definition.directiveRecords, this._definition.genConfig);\r\n\t    };\r\n\t    return DynamicProtoChangeDetector;\r\n\t})();\r\n\texports.DynamicProtoChangeDetector = DynamicProtoChangeDetector;\r\n\tfunction createPropertyRecords(definition) {\r\n\t    var recordBuilder = new ProtoRecordBuilder();\r\n\t    collection_1.ListWrapper.forEachWithIndex(definition.bindingRecords, function (b, index) { return recordBuilder.add(b, definition.variableNames, index); });\r\n\t    return coalesce_1.coalesce(recordBuilder.records);\r\n\t}\r\n\texports.createPropertyRecords = createPropertyRecords;\r\n\tfunction createEventRecords(definition) {\r\n\t    // TODO: vsavkin: remove $event when the compiler handles render-side variables properly\r\n\t    var varNames = collection_1.ListWrapper.concat(['$event'], definition.variableNames);\r\n\t    return definition.eventRecords.map(function (er) {\r\n\t        var records = _ConvertAstIntoProtoRecords.create(er, varNames);\r\n\t        var dirIndex = er.implicitReceiver instanceof directive_record_1.DirectiveIndex ? er.implicitReceiver : null;\r\n\t        return new event_binding_1.EventBinding(er.target.name, er.target.elementIndex, dirIndex, records);\r\n\t    });\r\n\t}\r\n\texports.createEventRecords = createEventRecords;\r\n\tvar ProtoRecordBuilder = (function () {\r\n\t    function ProtoRecordBuilder() {\r\n\t        this.records = [];\r\n\t    }\r\n\t    ProtoRecordBuilder.prototype.add = function (b, variableNames, bindingIndex) {\r\n\t        var oldLast = collection_1.ListWrapper.last(this.records);\r\n\t        if (lang_1.isPresent(oldLast) && oldLast.bindingRecord.directiveRecord == b.directiveRecord) {\r\n\t            oldLast.lastInDirective = false;\r\n\t        }\r\n\t        var numberOfRecordsBefore = this.records.length;\r\n\t        this._appendRecords(b, variableNames, bindingIndex);\r\n\t        var newLast = collection_1.ListWrapper.last(this.records);\r\n\t        if (lang_1.isPresent(newLast) && newLast !== oldLast) {\r\n\t            newLast.lastInBinding = true;\r\n\t            newLast.lastInDirective = true;\r\n\t            this._setArgumentToPureFunction(numberOfRecordsBefore);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ProtoRecordBuilder.prototype._setArgumentToPureFunction = function (startIndex) {\r\n\t        var _this = this;\r\n\t        for (var i = startIndex; i < this.records.length; ++i) {\r\n\t            var rec = this.records[i];\r\n\t            if (rec.isPureFunction()) {\r\n\t                rec.args.forEach(function (recordIndex) { return _this.records[recordIndex - 1].argumentToPureFunction =\r\n\t                    true; });\r\n\t            }\r\n\t            if (rec.mode === proto_record_1.RecordType.Pipe) {\r\n\t                rec.args.forEach(function (recordIndex) { return _this.records[recordIndex - 1].argumentToPureFunction =\r\n\t                    true; });\r\n\t                this.records[rec.contextIndex - 1].argumentToPureFunction = true;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    ProtoRecordBuilder.prototype._appendRecords = function (b, variableNames, bindingIndex) {\r\n\t        if (b.isDirectiveLifecycle()) {\r\n\t            this.records.push(new proto_record_1.ProtoRecord(proto_record_1.RecordType.DirectiveLifecycle, b.lifecycleEvent, null, [], [], -1, null, this.records.length + 1, b, false, false, false, false, null));\r\n\t        }\r\n\t        else {\r\n\t            _ConvertAstIntoProtoRecords.append(this.records, b, variableNames, bindingIndex);\r\n\t        }\r\n\t    };\r\n\t    return ProtoRecordBuilder;\r\n\t})();\r\n\texports.ProtoRecordBuilder = ProtoRecordBuilder;\r\n\tvar _ConvertAstIntoProtoRecords = (function () {\r\n\t    function _ConvertAstIntoProtoRecords(_records, _bindingRecord, _variableNames, _bindingIndex) {\r\n\t        this._records = _records;\r\n\t        this._bindingRecord = _bindingRecord;\r\n\t        this._variableNames = _variableNames;\r\n\t        this._bindingIndex = _bindingIndex;\r\n\t    }\r\n\t    _ConvertAstIntoProtoRecords.append = function (records, b, variableNames, bindingIndex) {\r\n\t        var c = new _ConvertAstIntoProtoRecords(records, b, variableNames, bindingIndex);\r\n\t        b.ast.visit(c);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.create = function (b, variableNames) {\r\n\t        var rec = [];\r\n\t        _ConvertAstIntoProtoRecords.append(rec, b, variableNames, null);\r\n\t        rec[rec.length - 1].lastInBinding = true;\r\n\t        return rec;\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitImplicitReceiver = function (ast) { return this._bindingRecord.implicitReceiver; };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitInterpolation = function (ast) {\r\n\t        var args = this._visitAll(ast.expressions);\r\n\t        return this._addRecord(proto_record_1.RecordType.Interpolate, \"interpolate\", _interpolationFn(ast.strings), args, ast.strings, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitLiteralPrimitive = function (ast) {\r\n\t        return this._addRecord(proto_record_1.RecordType.Const, \"literal\", ast.value, [], null, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitPropertyRead = function (ast) {\r\n\t        var receiver = ast.receiver.visit(this);\r\n\t        if (lang_1.isPresent(this._variableNames) && collection_1.ListWrapper.contains(this._variableNames, ast.name) &&\r\n\t            ast.receiver instanceof ast_1.ImplicitReceiver) {\r\n\t            return this._addRecord(proto_record_1.RecordType.Local, ast.name, ast.name, [], null, receiver);\r\n\t        }\r\n\t        else {\r\n\t            return this._addRecord(proto_record_1.RecordType.PropertyRead, ast.name, ast.getter, [], null, receiver);\r\n\t        }\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitPropertyWrite = function (ast) {\r\n\t        if (lang_1.isPresent(this._variableNames) && collection_1.ListWrapper.contains(this._variableNames, ast.name) &&\r\n\t            ast.receiver instanceof ast_1.ImplicitReceiver) {\r\n\t            throw new exceptions_1.BaseException(\"Cannot reassign a variable binding \" + ast.name);\r\n\t        }\r\n\t        else {\r\n\t            var receiver = ast.receiver.visit(this);\r\n\t            var value = ast.value.visit(this);\r\n\t            return this._addRecord(proto_record_1.RecordType.PropertyWrite, ast.name, ast.setter, [value], null, receiver);\r\n\t        }\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitKeyedWrite = function (ast) {\r\n\t        var obj = ast.obj.visit(this);\r\n\t        var key = ast.key.visit(this);\r\n\t        var value = ast.value.visit(this);\r\n\t        return this._addRecord(proto_record_1.RecordType.KeyedWrite, null, null, [key, value], null, obj);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitSafePropertyRead = function (ast) {\r\n\t        var receiver = ast.receiver.visit(this);\r\n\t        return this._addRecord(proto_record_1.RecordType.SafeProperty, ast.name, ast.getter, [], null, receiver);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitMethodCall = function (ast) {\r\n\t        var receiver = ast.receiver.visit(this);\r\n\t        var args = this._visitAll(ast.args);\r\n\t        if (lang_1.isPresent(this._variableNames) && collection_1.ListWrapper.contains(this._variableNames, ast.name)) {\r\n\t            var target = this._addRecord(proto_record_1.RecordType.Local, ast.name, ast.name, [], null, receiver);\r\n\t            return this._addRecord(proto_record_1.RecordType.InvokeClosure, \"closure\", null, args, null, target);\r\n\t        }\r\n\t        else {\r\n\t            return this._addRecord(proto_record_1.RecordType.InvokeMethod, ast.name, ast.fn, args, null, receiver);\r\n\t        }\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitSafeMethodCall = function (ast) {\r\n\t        var receiver = ast.receiver.visit(this);\r\n\t        var args = this._visitAll(ast.args);\r\n\t        return this._addRecord(proto_record_1.RecordType.SafeMethodInvoke, ast.name, ast.fn, args, null, receiver);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitFunctionCall = function (ast) {\r\n\t        var target = ast.target.visit(this);\r\n\t        var args = this._visitAll(ast.args);\r\n\t        return this._addRecord(proto_record_1.RecordType.InvokeClosure, \"closure\", null, args, null, target);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitLiteralArray = function (ast) {\r\n\t        var primitiveName = \"arrayFn\" + ast.expressions.length;\r\n\t        return this._addRecord(proto_record_1.RecordType.CollectionLiteral, primitiveName, _arrayFn(ast.expressions.length), this._visitAll(ast.expressions), null, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitLiteralMap = function (ast) {\r\n\t        return this._addRecord(proto_record_1.RecordType.CollectionLiteral, _mapPrimitiveName(ast.keys), change_detection_util_1.ChangeDetectionUtil.mapFn(ast.keys), this._visitAll(ast.values), null, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitBinary = function (ast) {\r\n\t        var left = ast.left.visit(this);\r\n\t        switch (ast.operation) {\r\n\t            case '&&':\r\n\t                var branchEnd = [null];\r\n\t                this._addRecord(proto_record_1.RecordType.SkipRecordsIfNot, \"SkipRecordsIfNot\", null, [], branchEnd, left);\r\n\t                var right = ast.right.visit(this);\r\n\t                branchEnd[0] = right;\r\n\t                return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"cond\", change_detection_util_1.ChangeDetectionUtil.cond, [left, right, left], null, 0);\r\n\t            case '||':\r\n\t                var branchEnd = [null];\r\n\t                this._addRecord(proto_record_1.RecordType.SkipRecordsIf, \"SkipRecordsIf\", null, [], branchEnd, left);\r\n\t                var right = ast.right.visit(this);\r\n\t                branchEnd[0] = right;\r\n\t                return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"cond\", change_detection_util_1.ChangeDetectionUtil.cond, [left, left, right], null, 0);\r\n\t            default:\r\n\t                var right = ast.right.visit(this);\r\n\t                return this._addRecord(proto_record_1.RecordType.PrimitiveOp, _operationToPrimitiveName(ast.operation), _operationToFunction(ast.operation), [left, right], null, 0);\r\n\t        }\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitPrefixNot = function (ast) {\r\n\t        var exp = ast.expression.visit(this);\r\n\t        return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"operation_negate\", change_detection_util_1.ChangeDetectionUtil.operation_negate, [exp], null, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitConditional = function (ast) {\r\n\t        var condition = ast.condition.visit(this);\r\n\t        var startOfFalseBranch = [null];\r\n\t        var endOfFalseBranch = [null];\r\n\t        this._addRecord(proto_record_1.RecordType.SkipRecordsIfNot, \"SkipRecordsIfNot\", null, [], startOfFalseBranch, condition);\r\n\t        var whenTrue = ast.trueExp.visit(this);\r\n\t        var skip = this._addRecord(proto_record_1.RecordType.SkipRecords, \"SkipRecords\", null, [], endOfFalseBranch, 0);\r\n\t        var whenFalse = ast.falseExp.visit(this);\r\n\t        startOfFalseBranch[0] = skip;\r\n\t        endOfFalseBranch[0] = whenFalse;\r\n\t        return this._addRecord(proto_record_1.RecordType.PrimitiveOp, \"cond\", change_detection_util_1.ChangeDetectionUtil.cond, [condition, whenTrue, whenFalse], null, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitPipe = function (ast) {\r\n\t        var value = ast.exp.visit(this);\r\n\t        var args = this._visitAll(ast.args);\r\n\t        return this._addRecord(proto_record_1.RecordType.Pipe, ast.name, ast.name, args, null, value);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitKeyedRead = function (ast) {\r\n\t        var obj = ast.obj.visit(this);\r\n\t        var key = ast.key.visit(this);\r\n\t        return this._addRecord(proto_record_1.RecordType.KeyedRead, \"keyedAccess\", change_detection_util_1.ChangeDetectionUtil.keyedAccess, [key], null, obj);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitChain = function (ast) {\r\n\t        var _this = this;\r\n\t        var args = ast.expressions.map(function (e) { return e.visit(_this); });\r\n\t        return this._addRecord(proto_record_1.RecordType.Chain, \"chain\", null, args, null, 0);\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype.visitQuote = function (ast) {\r\n\t        throw new exceptions_1.BaseException((\"Caught uninterpreted expression at \" + ast.location + \": \" + ast.uninterpretedExpression + \". \") +\r\n\t            (\"Expression prefix \" + ast.prefix + \" did not match a template transformer to interpret the expression.\"));\r\n\t    };\r\n\t    _ConvertAstIntoProtoRecords.prototype._visitAll = function (asts) {\r\n\t        var res = collection_1.ListWrapper.createFixedSize(asts.length);\r\n\t        for (var i = 0; i < asts.length; ++i) {\r\n\t            res[i] = asts[i].visit(this);\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    /**\r\n\t     * Adds a `ProtoRecord` and returns its selfIndex.\r\n\t     */\r\n\t    _ConvertAstIntoProtoRecords.prototype._addRecord = function (type, name, funcOrValue, args, fixedArgs, context) {\r\n\t        var selfIndex = this._records.length + 1;\r\n\t        if (context instanceof directive_record_1.DirectiveIndex) {\r\n\t            this._records.push(new proto_record_1.ProtoRecord(type, name, funcOrValue, args, fixedArgs, -1, context, selfIndex, this._bindingRecord, false, false, false, false, this._bindingIndex));\r\n\t        }\r\n\t        else {\r\n\t            this._records.push(new proto_record_1.ProtoRecord(type, name, funcOrValue, args, fixedArgs, context, null, selfIndex, this._bindingRecord, false, false, false, false, this._bindingIndex));\r\n\t        }\r\n\t        return selfIndex;\r\n\t    };\r\n\t    return _ConvertAstIntoProtoRecords;\r\n\t})();\r\n\tfunction _arrayFn(length) {\r\n\t    switch (length) {\r\n\t        case 0:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn0;\r\n\t        case 1:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn1;\r\n\t        case 2:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn2;\r\n\t        case 3:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn3;\r\n\t        case 4:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn4;\r\n\t        case 5:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn5;\r\n\t        case 6:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn6;\r\n\t        case 7:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn7;\r\n\t        case 8:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn8;\r\n\t        case 9:\r\n\t            return change_detection_util_1.ChangeDetectionUtil.arrayFn9;\r\n\t        default:\r\n\t            throw new exceptions_1.BaseException(\"Does not support literal maps with more than 9 elements\");\r\n\t    }\r\n\t}\r\n\tfunction _mapPrimitiveName(keys) {\r\n\t    var stringifiedKeys = keys.map(function (k) { return lang_1.isString(k) ? \"\\\"\" + k + \"\\\"\" : \"\" + k; }).join(', ');\r\n\t    return \"mapFn([\" + stringifiedKeys + \"])\";\r\n\t}\r\n\tfunction _operationToPrimitiveName(operation) {\r\n\t    switch (operation) {\r\n\t        case '+':\r\n\t            return \"operation_add\";\r\n\t        case '-':\r\n\t            return \"operation_subtract\";\r\n\t        case '*':\r\n\t            return \"operation_multiply\";\r\n\t        case '/':\r\n\t            return \"operation_divide\";\r\n\t        case '%':\r\n\t            return \"operation_remainder\";\r\n\t        case '==':\r\n\t            return \"operation_equals\";\r\n\t        case '!=':\r\n\t            return \"operation_not_equals\";\r\n\t        case '===':\r\n\t            return \"operation_identical\";\r\n\t        case '!==':\r\n\t            return \"operation_not_identical\";\r\n\t        case '<':\r\n\t            return \"operation_less_then\";\r\n\t        case '>':\r\n\t            return \"operation_greater_then\";\r\n\t        case '<=':\r\n\t            return \"operation_less_or_equals_then\";\r\n\t        case '>=':\r\n\t            return \"operation_greater_or_equals_then\";\r\n\t        default:\r\n\t            throw new exceptions_1.BaseException(\"Unsupported operation \" + operation);\r\n\t    }\r\n\t}\r\n\tfunction _operationToFunction(operation) {\r\n\t    switch (operation) {\r\n\t        case '+':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_add;\r\n\t        case '-':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_subtract;\r\n\t        case '*':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_multiply;\r\n\t        case '/':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_divide;\r\n\t        case '%':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_remainder;\r\n\t        case '==':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_equals;\r\n\t        case '!=':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_not_equals;\r\n\t        case '===':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_identical;\r\n\t        case '!==':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_not_identical;\r\n\t        case '<':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_less_then;\r\n\t        case '>':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_greater_then;\r\n\t        case '<=':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_less_or_equals_then;\r\n\t        case '>=':\r\n\t            return change_detection_util_1.ChangeDetectionUtil.operation_greater_or_equals_then;\r\n\t        default:\r\n\t            throw new exceptions_1.BaseException(\"Unsupported operation \" + operation);\r\n\t    }\r\n\t}\r\n\tfunction s(v) {\r\n\t    return lang_1.isPresent(v) ? \"\" + v : '';\r\n\t}\r\n\tfunction _interpolationFn(strings) {\r\n\t    var length = strings.length;\r\n\t    var c0 = length > 0 ? strings[0] : null;\r\n\t    var c1 = length > 1 ? strings[1] : null;\r\n\t    var c2 = length > 2 ? strings[2] : null;\r\n\t    var c3 = length > 3 ? strings[3] : null;\r\n\t    var c4 = length > 4 ? strings[4] : null;\r\n\t    var c5 = length > 5 ? strings[5] : null;\r\n\t    var c6 = length > 6 ? strings[6] : null;\r\n\t    var c7 = length > 7 ? strings[7] : null;\r\n\t    var c8 = length > 8 ? strings[8] : null;\r\n\t    var c9 = length > 9 ? strings[9] : null;\r\n\t    switch (length - 1) {\r\n\t        case 1:\r\n\t            return function (a1) { return c0 + s(a1) + c1; };\r\n\t        case 2:\r\n\t            return function (a1, a2) { return c0 + s(a1) + c1 + s(a2) + c2; };\r\n\t        case 3:\r\n\t            return function (a1, a2, a3) { return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3; };\r\n\t        case 4:\r\n\t            return function (a1, a2, a3, a4) { return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4; };\r\n\t        case 5:\r\n\t            return function (a1, a2, a3, a4, a5) {\r\n\t                return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5;\r\n\t            };\r\n\t        case 6:\r\n\t            return function (a1, a2, a3, a4, a5, a6) {\r\n\t                return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5 + s(a6) + c6;\r\n\t            };\r\n\t        case 7:\r\n\t            return function (a1, a2, a3, a4, a5, a6, a7) { return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) +\r\n\t                c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7; };\r\n\t        case 8:\r\n\t            return function (a1, a2, a3, a4, a5, a6, a7, a8) { return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) +\r\n\t                c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7 + s(a8) +\r\n\t                c8; };\r\n\t        case 9:\r\n\t            return function (a1, a2, a3, a4, a5, a6, a7, a8, a9) { return c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 +\r\n\t                s(a4) + c4 + s(a5) + c5 + s(a6) + c6 + s(a7) +\r\n\t                c7 + s(a8) + c8 + s(a9) + c9; };\r\n\t        default:\r\n\t            throw new exceptions_1.BaseException(\"Does not support more than 9 expressions\");\r\n\t    }\r\n\t}\r\n\n\n/***/ },\n/* 303 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar Console = (function () {\r\n\t    function Console() {\r\n\t    }\r\n\t    Console.prototype.log = function (message) { lang_1.print(message); };\r\n\t    Console = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], Console);\r\n\t    return Console;\r\n\t})();\r\n\texports.Console = Console;\r\n\n\n/***/ },\n/* 304 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar provider_1 = __webpack_require__(95);\r\n\tvar exceptions_1 = __webpack_require__(196);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_2 = __webpack_require__(6);\r\n\tvar key_1 = __webpack_require__(198);\r\n\tvar metadata_1 = __webpack_require__(80);\r\n\t// Threshold for the dynamic version\r\n\tvar _MAX_CONSTRUCTION_COUNTER = 10;\r\n\texports.UNDEFINED = lang_1.CONST_EXPR(new Object());\r\n\t/**\r\n\t * Visibility of a {@link Provider}.\r\n\t */\r\n\t(function (Visibility) {\r\n\t    /**\r\n\t     * A `Public` {@link Provider} is only visible to regular (as opposed to host) child injectors.\r\n\t     */\r\n\t    Visibility[Visibility[\"Public\"] = 0] = \"Public\";\r\n\t    /**\r\n\t     * A `Private` {@link Provider} is only visible to host (as opposed to regular) child injectors.\r\n\t     */\r\n\t    Visibility[Visibility[\"Private\"] = 1] = \"Private\";\r\n\t    /**\r\n\t     * A `PublicAndPrivate` {@link Provider} is visible to both host and regular child injectors.\r\n\t     */\r\n\t    Visibility[Visibility[\"PublicAndPrivate\"] = 2] = \"PublicAndPrivate\";\r\n\t})(exports.Visibility || (exports.Visibility = {}));\r\n\tvar Visibility = exports.Visibility;\r\n\tfunction canSee(src, dst) {\r\n\t    return (src === dst) ||\r\n\t        (dst === Visibility.PublicAndPrivate || src === Visibility.PublicAndPrivate);\r\n\t}\r\n\tvar ProtoInjectorInlineStrategy = (function () {\r\n\t    function ProtoInjectorInlineStrategy(protoEI, bwv) {\r\n\t        this.provider0 = null;\r\n\t        this.provider1 = null;\r\n\t        this.provider2 = null;\r\n\t        this.provider3 = null;\r\n\t        this.provider4 = null;\r\n\t        this.provider5 = null;\r\n\t        this.provider6 = null;\r\n\t        this.provider7 = null;\r\n\t        this.provider8 = null;\r\n\t        this.provider9 = null;\r\n\t        this.keyId0 = null;\r\n\t        this.keyId1 = null;\r\n\t        this.keyId2 = null;\r\n\t        this.keyId3 = null;\r\n\t        this.keyId4 = null;\r\n\t        this.keyId5 = null;\r\n\t        this.keyId6 = null;\r\n\t        this.keyId7 = null;\r\n\t        this.keyId8 = null;\r\n\t        this.keyId9 = null;\r\n\t        this.visibility0 = null;\r\n\t        this.visibility1 = null;\r\n\t        this.visibility2 = null;\r\n\t        this.visibility3 = null;\r\n\t        this.visibility4 = null;\r\n\t        this.visibility5 = null;\r\n\t        this.visibility6 = null;\r\n\t        this.visibility7 = null;\r\n\t        this.visibility8 = null;\r\n\t        this.visibility9 = null;\r\n\t        var length = bwv.length;\r\n\t        if (length > 0) {\r\n\t            this.provider0 = bwv[0].provider;\r\n\t            this.keyId0 = bwv[0].getKeyId();\r\n\t            this.visibility0 = bwv[0].visibility;\r\n\t        }\r\n\t        if (length > 1) {\r\n\t            this.provider1 = bwv[1].provider;\r\n\t            this.keyId1 = bwv[1].getKeyId();\r\n\t            this.visibility1 = bwv[1].visibility;\r\n\t        }\r\n\t        if (length > 2) {\r\n\t            this.provider2 = bwv[2].provider;\r\n\t            this.keyId2 = bwv[2].getKeyId();\r\n\t            this.visibility2 = bwv[2].visibility;\r\n\t        }\r\n\t        if (length > 3) {\r\n\t            this.provider3 = bwv[3].provider;\r\n\t            this.keyId3 = bwv[3].getKeyId();\r\n\t            this.visibility3 = bwv[3].visibility;\r\n\t        }\r\n\t        if (length > 4) {\r\n\t            this.provider4 = bwv[4].provider;\r\n\t            this.keyId4 = bwv[4].getKeyId();\r\n\t            this.visibility4 = bwv[4].visibility;\r\n\t        }\r\n\t        if (length > 5) {\r\n\t            this.provider5 = bwv[5].provider;\r\n\t            this.keyId5 = bwv[5].getKeyId();\r\n\t            this.visibility5 = bwv[5].visibility;\r\n\t        }\r\n\t        if (length > 6) {\r\n\t            this.provider6 = bwv[6].provider;\r\n\t            this.keyId6 = bwv[6].getKeyId();\r\n\t            this.visibility6 = bwv[6].visibility;\r\n\t        }\r\n\t        if (length > 7) {\r\n\t            this.provider7 = bwv[7].provider;\r\n\t            this.keyId7 = bwv[7].getKeyId();\r\n\t            this.visibility7 = bwv[7].visibility;\r\n\t        }\r\n\t        if (length > 8) {\r\n\t            this.provider8 = bwv[8].provider;\r\n\t            this.keyId8 = bwv[8].getKeyId();\r\n\t            this.visibility8 = bwv[8].visibility;\r\n\t        }\r\n\t        if (length > 9) {\r\n\t            this.provider9 = bwv[9].provider;\r\n\t            this.keyId9 = bwv[9].getKeyId();\r\n\t            this.visibility9 = bwv[9].visibility;\r\n\t        }\r\n\t    }\r\n\t    ProtoInjectorInlineStrategy.prototype.getProviderAtIndex = function (index) {\r\n\t        if (index == 0)\r\n\t            return this.provider0;\r\n\t        if (index == 1)\r\n\t            return this.provider1;\r\n\t        if (index == 2)\r\n\t            return this.provider2;\r\n\t        if (index == 3)\r\n\t            return this.provider3;\r\n\t        if (index == 4)\r\n\t            return this.provider4;\r\n\t        if (index == 5)\r\n\t            return this.provider5;\r\n\t        if (index == 6)\r\n\t            return this.provider6;\r\n\t        if (index == 7)\r\n\t            return this.provider7;\r\n\t        if (index == 8)\r\n\t            return this.provider8;\r\n\t        if (index == 9)\r\n\t            return this.provider9;\r\n\t        throw new exceptions_1.OutOfBoundsError(index);\r\n\t    };\r\n\t    ProtoInjectorInlineStrategy.prototype.createInjectorStrategy = function (injector) {\r\n\t        return new InjectorInlineStrategy(injector, this);\r\n\t    };\r\n\t    return ProtoInjectorInlineStrategy;\r\n\t})();\r\n\texports.ProtoInjectorInlineStrategy = ProtoInjectorInlineStrategy;\r\n\tvar ProtoInjectorDynamicStrategy = (function () {\r\n\t    function ProtoInjectorDynamicStrategy(protoInj, bwv) {\r\n\t        var len = bwv.length;\r\n\t        this.providers = collection_1.ListWrapper.createFixedSize(len);\r\n\t        this.keyIds = collection_1.ListWrapper.createFixedSize(len);\r\n\t        this.visibilities = collection_1.ListWrapper.createFixedSize(len);\r\n\t        for (var i = 0; i < len; i++) {\r\n\t            this.providers[i] = bwv[i].provider;\r\n\t            this.keyIds[i] = bwv[i].getKeyId();\r\n\t            this.visibilities[i] = bwv[i].visibility;\r\n\t        }\r\n\t    }\r\n\t    ProtoInjectorDynamicStrategy.prototype.getProviderAtIndex = function (index) {\r\n\t        if (index < 0 || index >= this.providers.length) {\r\n\t            throw new exceptions_1.OutOfBoundsError(index);\r\n\t        }\r\n\t        return this.providers[index];\r\n\t    };\r\n\t    ProtoInjectorDynamicStrategy.prototype.createInjectorStrategy = function (ei) {\r\n\t        return new InjectorDynamicStrategy(this, ei);\r\n\t    };\r\n\t    return ProtoInjectorDynamicStrategy;\r\n\t})();\r\n\texports.ProtoInjectorDynamicStrategy = ProtoInjectorDynamicStrategy;\r\n\tvar ProtoInjector = (function () {\r\n\t    function ProtoInjector(bwv) {\r\n\t        this.numberOfProviders = bwv.length;\r\n\t        this._strategy = bwv.length > _MAX_CONSTRUCTION_COUNTER ?\r\n\t            new ProtoInjectorDynamicStrategy(this, bwv) :\r\n\t            new ProtoInjectorInlineStrategy(this, bwv);\r\n\t    }\r\n\t    ProtoInjector.fromResolvedProviders = function (providers) {\r\n\t        var bd = providers.map(function (b) { return new ProviderWithVisibility(b, Visibility.Public); });\r\n\t        return new ProtoInjector(bd);\r\n\t    };\r\n\t    ProtoInjector.prototype.getProviderAtIndex = function (index) {\r\n\t        return this._strategy.getProviderAtIndex(index);\r\n\t    };\r\n\t    return ProtoInjector;\r\n\t})();\r\n\texports.ProtoInjector = ProtoInjector;\r\n\tvar InjectorInlineStrategy = (function () {\r\n\t    function InjectorInlineStrategy(injector, protoStrategy) {\r\n\t        this.injector = injector;\r\n\t        this.protoStrategy = protoStrategy;\r\n\t        this.obj0 = exports.UNDEFINED;\r\n\t        this.obj1 = exports.UNDEFINED;\r\n\t        this.obj2 = exports.UNDEFINED;\r\n\t        this.obj3 = exports.UNDEFINED;\r\n\t        this.obj4 = exports.UNDEFINED;\r\n\t        this.obj5 = exports.UNDEFINED;\r\n\t        this.obj6 = exports.UNDEFINED;\r\n\t        this.obj7 = exports.UNDEFINED;\r\n\t        this.obj8 = exports.UNDEFINED;\r\n\t        this.obj9 = exports.UNDEFINED;\r\n\t    }\r\n\t    InjectorInlineStrategy.prototype.resetConstructionCounter = function () { this.injector._constructionCounter = 0; };\r\n\t    InjectorInlineStrategy.prototype.instantiateProvider = function (provider, visibility) {\r\n\t        return this.injector._new(provider, visibility);\r\n\t    };\r\n\t    InjectorInlineStrategy.prototype.getObjByKeyId = function (keyId, visibility) {\r\n\t        var p = this.protoStrategy;\r\n\t        var inj = this.injector;\r\n\t        if (p.keyId0 === keyId && canSee(p.visibility0, visibility)) {\r\n\t            if (this.obj0 === exports.UNDEFINED) {\r\n\t                this.obj0 = inj._new(p.provider0, p.visibility0);\r\n\t            }\r\n\t            return this.obj0;\r\n\t        }\r\n\t        if (p.keyId1 === keyId && canSee(p.visibility1, visibility)) {\r\n\t            if (this.obj1 === exports.UNDEFINED) {\r\n\t                this.obj1 = inj._new(p.provider1, p.visibility1);\r\n\t            }\r\n\t            return this.obj1;\r\n\t        }\r\n\t        if (p.keyId2 === keyId && canSee(p.visibility2, visibility)) {\r\n\t            if (this.obj2 === exports.UNDEFINED) {\r\n\t                this.obj2 = inj._new(p.provider2, p.visibility2);\r\n\t            }\r\n\t            return this.obj2;\r\n\t        }\r\n\t        if (p.keyId3 === keyId && canSee(p.visibility3, visibility)) {\r\n\t            if (this.obj3 === exports.UNDEFINED) {\r\n\t                this.obj3 = inj._new(p.provider3, p.visibility3);\r\n\t            }\r\n\t            return this.obj3;\r\n\t        }\r\n\t        if (p.keyId4 === keyId && canSee(p.visibility4, visibility)) {\r\n\t            if (this.obj4 === exports.UNDEFINED) {\r\n\t                this.obj4 = inj._new(p.provider4, p.visibility4);\r\n\t            }\r\n\t            return this.obj4;\r\n\t        }\r\n\t        if (p.keyId5 === keyId && canSee(p.visibility5, visibility)) {\r\n\t            if (this.obj5 === exports.UNDEFINED) {\r\n\t                this.obj5 = inj._new(p.provider5, p.visibility5);\r\n\t            }\r\n\t            return this.obj5;\r\n\t        }\r\n\t        if (p.keyId6 === keyId && canSee(p.visibility6, visibility)) {\r\n\t            if (this.obj6 === exports.UNDEFINED) {\r\n\t                this.obj6 = inj._new(p.provider6, p.visibility6);\r\n\t            }\r\n\t            return this.obj6;\r\n\t        }\r\n\t        if (p.keyId7 === keyId && canSee(p.visibility7, visibility)) {\r\n\t            if (this.obj7 === exports.UNDEFINED) {\r\n\t                this.obj7 = inj._new(p.provider7, p.visibility7);\r\n\t            }\r\n\t            return this.obj7;\r\n\t        }\r\n\t        if (p.keyId8 === keyId && canSee(p.visibility8, visibility)) {\r\n\t            if (this.obj8 === exports.UNDEFINED) {\r\n\t                this.obj8 = inj._new(p.provider8, p.visibility8);\r\n\t            }\r\n\t            return this.obj8;\r\n\t        }\r\n\t        if (p.keyId9 === keyId && canSee(p.visibility9, visibility)) {\r\n\t            if (this.obj9 === exports.UNDEFINED) {\r\n\t                this.obj9 = inj._new(p.provider9, p.visibility9);\r\n\t            }\r\n\t            return this.obj9;\r\n\t        }\r\n\t        return exports.UNDEFINED;\r\n\t    };\r\n\t    InjectorInlineStrategy.prototype.getObjAtIndex = function (index) {\r\n\t        if (index == 0)\r\n\t            return this.obj0;\r\n\t        if (index == 1)\r\n\t            return this.obj1;\r\n\t        if (index == 2)\r\n\t            return this.obj2;\r\n\t        if (index == 3)\r\n\t            return this.obj3;\r\n\t        if (index == 4)\r\n\t            return this.obj4;\r\n\t        if (index == 5)\r\n\t            return this.obj5;\r\n\t        if (index == 6)\r\n\t            return this.obj6;\r\n\t        if (index == 7)\r\n\t            return this.obj7;\r\n\t        if (index == 8)\r\n\t            return this.obj8;\r\n\t        if (index == 9)\r\n\t            return this.obj9;\r\n\t        throw new exceptions_1.OutOfBoundsError(index);\r\n\t    };\r\n\t    InjectorInlineStrategy.prototype.getMaxNumberOfObjects = function () { return _MAX_CONSTRUCTION_COUNTER; };\r\n\t    return InjectorInlineStrategy;\r\n\t})();\r\n\texports.InjectorInlineStrategy = InjectorInlineStrategy;\r\n\tvar InjectorDynamicStrategy = (function () {\r\n\t    function InjectorDynamicStrategy(protoStrategy, injector) {\r\n\t        this.protoStrategy = protoStrategy;\r\n\t        this.injector = injector;\r\n\t        this.objs = collection_1.ListWrapper.createFixedSize(protoStrategy.providers.length);\r\n\t        collection_1.ListWrapper.fill(this.objs, exports.UNDEFINED);\r\n\t    }\r\n\t    InjectorDynamicStrategy.prototype.resetConstructionCounter = function () { this.injector._constructionCounter = 0; };\r\n\t    InjectorDynamicStrategy.prototype.instantiateProvider = function (provider, visibility) {\r\n\t        return this.injector._new(provider, visibility);\r\n\t    };\r\n\t    InjectorDynamicStrategy.prototype.getObjByKeyId = function (keyId, visibility) {\r\n\t        var p = this.protoStrategy;\r\n\t        for (var i = 0; i < p.keyIds.length; i++) {\r\n\t            if (p.keyIds[i] === keyId && canSee(p.visibilities[i], visibility)) {\r\n\t                if (this.objs[i] === exports.UNDEFINED) {\r\n\t                    this.objs[i] = this.injector._new(p.providers[i], p.visibilities[i]);\r\n\t                }\r\n\t                return this.objs[i];\r\n\t            }\r\n\t        }\r\n\t        return exports.UNDEFINED;\r\n\t    };\r\n\t    InjectorDynamicStrategy.prototype.getObjAtIndex = function (index) {\r\n\t        if (index < 0 || index >= this.objs.length) {\r\n\t            throw new exceptions_1.OutOfBoundsError(index);\r\n\t        }\r\n\t        return this.objs[index];\r\n\t    };\r\n\t    InjectorDynamicStrategy.prototype.getMaxNumberOfObjects = function () { return this.objs.length; };\r\n\t    return InjectorDynamicStrategy;\r\n\t})();\r\n\texports.InjectorDynamicStrategy = InjectorDynamicStrategy;\r\n\tvar ProviderWithVisibility = (function () {\r\n\t    function ProviderWithVisibility(provider, visibility) {\r\n\t        this.provider = provider;\r\n\t        this.visibility = visibility;\r\n\t    }\r\n\t    ;\r\n\t    ProviderWithVisibility.prototype.getKeyId = function () { return this.provider.key.id; };\r\n\t    return ProviderWithVisibility;\r\n\t})();\r\n\texports.ProviderWithVisibility = ProviderWithVisibility;\r\n\t/**\r\n\t * A dependency injection container used for instantiating objects and resolving dependencies.\r\n\t *\r\n\t * An `Injector` is a replacement for a `new` operator, which can automatically resolve the\r\n\t * constructor dependencies.\r\n\t *\r\n\t * In typical use, application code asks for the dependencies in the constructor and they are\r\n\t * resolved by the `Injector`.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/jzjec0?p=preview))\r\n\t *\r\n\t * The following example creates an `Injector` configured to create `Engine` and `Car`.\r\n\t *\r\n\t * ```typescript\r\n\t * @Injectable()\r\n\t * class Engine {\r\n\t * }\r\n\t *\r\n\t * @Injectable()\r\n\t * class Car {\r\n\t *   constructor(public engine:Engine) {}\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([Car, Engine]);\r\n\t * var car = injector.get(Car);\r\n\t * expect(car instanceof Car).toBe(true);\r\n\t * expect(car.engine instanceof Engine).toBe(true);\r\n\t * ```\r\n\t *\r\n\t * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`\r\n\t * resolve all of the object's dependencies automatically.\r\n\t */\r\n\tvar Injector = (function () {\r\n\t    /**\r\n\t     * Private\r\n\t     */\r\n\t    function Injector(_proto /* ProtoInjector */, _parent, _isHostBoundary, _depProvider, _debugContext) {\r\n\t        if (_parent === void 0) { _parent = null; }\r\n\t        if (_isHostBoundary === void 0) { _isHostBoundary = false; }\r\n\t        if (_depProvider === void 0) { _depProvider = null; }\r\n\t        if (_debugContext === void 0) { _debugContext = null; }\r\n\t        this._isHostBoundary = _isHostBoundary;\r\n\t        this._depProvider = _depProvider;\r\n\t        this._debugContext = _debugContext;\r\n\t        /** @internal */\r\n\t        this._constructionCounter = 0;\r\n\t        this._proto = _proto;\r\n\t        this._parent = _parent;\r\n\t        this._strategy = _proto._strategy.createInjectorStrategy(this);\r\n\t    }\r\n\t    /**\r\n\t     * Turns an array of provider definitions into an array of resolved providers.\r\n\t     *\r\n\t     * A resolution is a process of flattening multiple nested arrays and converting individual\r\n\t     * providers into an array of {@link ResolvedProvider}s.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/AiXTHi?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * @Injectable()\r\n\t     * class Engine {\r\n\t     * }\r\n\t     *\r\n\t     * @Injectable()\r\n\t     * class Car {\r\n\t     *   constructor(public engine:Engine) {}\r\n\t     * }\r\n\t     *\r\n\t     * var providers = Injector.resolve([Car, [[Engine]]]);\r\n\t     *\r\n\t     * expect(providers.length).toEqual(2);\r\n\t     *\r\n\t     * expect(providers[0] instanceof ResolvedProvider).toBe(true);\r\n\t     * expect(providers[0].key.displayName).toBe(\"Car\");\r\n\t     * expect(providers[0].dependencies.length).toEqual(1);\r\n\t     * expect(providers[0].factory).toBeDefined();\r\n\t     *\r\n\t     * expect(providers[1].key.displayName).toBe(\"Engine\");\r\n\t     * });\r\n\t     * ```\r\n\t     *\r\n\t     * See {@link Injector#fromResolvedProviders} for more info.\r\n\t     */\r\n\t    Injector.resolve = function (providers) {\r\n\t        return provider_1.resolveProviders(providers);\r\n\t    };\r\n\t    /**\r\n\t     * Resolves an array of providers and creates an injector from those providers.\r\n\t     *\r\n\t     * The passed-in providers can be an array of `Type`, {@link Provider},\r\n\t     * or a recursive array of more providers.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/ePOccA?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * @Injectable()\r\n\t     * class Engine {\r\n\t     * }\r\n\t     *\r\n\t     * @Injectable()\r\n\t     * class Car {\r\n\t     *   constructor(public engine:Engine) {}\r\n\t     * }\r\n\t     *\r\n\t     * var injector = Injector.resolveAndCreate([Car, Engine]);\r\n\t     * expect(injector.get(Car) instanceof Car).toBe(true);\r\n\t     * ```\r\n\t     *\r\n\t     * This function is slower than the corresponding `fromResolvedProviders`\r\n\t     * because it needs to resolve the passed-in providers first.\r\n\t     * See {@link Injector#resolve} and {@link Injector#fromResolvedProviders}.\r\n\t     */\r\n\t    Injector.resolveAndCreate = function (providers) {\r\n\t        var resolvedProviders = Injector.resolve(providers);\r\n\t        return Injector.fromResolvedProviders(resolvedProviders);\r\n\t    };\r\n\t    /**\r\n\t     * Creates an injector from previously resolved providers.\r\n\t     *\r\n\t     * This API is the recommended way to construct injectors in performance-sensitive parts.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/KrSMci?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * @Injectable()\r\n\t     * class Engine {\r\n\t     * }\r\n\t     *\r\n\t     * @Injectable()\r\n\t     * class Car {\r\n\t     *   constructor(public engine:Engine) {}\r\n\t     * }\r\n\t     *\r\n\t     * var providers = Injector.resolve([Car, Engine]);\r\n\t     * var injector = Injector.fromResolvedProviders(providers);\r\n\t     * expect(injector.get(Car) instanceof Car).toBe(true);\r\n\t     * ```\r\n\t     */\r\n\t    Injector.fromResolvedProviders = function (providers) {\r\n\t        return new Injector(ProtoInjector.fromResolvedProviders(providers));\r\n\t    };\r\n\t    /**\r\n\t     * @deprecated\r\n\t     */\r\n\t    Injector.fromResolvedBindings = function (providers) {\r\n\t        return Injector.fromResolvedProviders(providers);\r\n\t    };\r\n\t    Object.defineProperty(Injector.prototype, \"hostBoundary\", {\r\n\t        /**\r\n\t         * Whether this injector is a boundary to a host.\r\n\t         * @internal\r\n\t         */\r\n\t        get: function () { return this._isHostBoundary; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * @internal\r\n\t     */\r\n\t    Injector.prototype.debugContext = function () { return this._debugContext(); };\r\n\t    /**\r\n\t     * Retrieves an instance from the injector based on the provided token.\r\n\t     * Throws {@link NoProviderError} if not found.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/HeXSHg?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * var injector = Injector.resolveAndCreate([\r\n\t     *   provide(\"validToken\", {useValue: \"Value\"})\r\n\t     * ]);\r\n\t     * expect(injector.get(\"validToken\")).toEqual(\"Value\");\r\n\t     * expect(() => injector.get(\"invalidToken\")).toThrowError();\r\n\t     * ```\r\n\t     *\r\n\t     * `Injector` returns itself when given `Injector` as a token.\r\n\t     *\r\n\t     * ```typescript\r\n\t     * var injector = Injector.resolveAndCreate([]);\r\n\t     * expect(injector.get(Injector)).toBe(injector);\r\n\t     * ```\r\n\t     */\r\n\t    Injector.prototype.get = function (token) {\r\n\t        return this._getByKey(key_1.Key.get(token), null, null, false, Visibility.PublicAndPrivate);\r\n\t    };\r\n\t    /**\r\n\t     * Retrieves an instance from the injector based on the provided token.\r\n\t     * Returns null if not found.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/tpEbEy?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * var injector = Injector.resolveAndCreate([\r\n\t     *   provide(\"validToken\", {useValue: \"Value\"})\r\n\t     * ]);\r\n\t     * expect(injector.getOptional(\"validToken\")).toEqual(\"Value\");\r\n\t     * expect(injector.getOptional(\"invalidToken\")).toBe(null);\r\n\t     * ```\r\n\t     *\r\n\t     * `Injector` returns itself when given `Injector` as a token.\r\n\t     *\r\n\t     * ```typescript\r\n\t     * var injector = Injector.resolveAndCreate([]);\r\n\t     * expect(injector.getOptional(Injector)).toBe(injector);\r\n\t     * ```\r\n\t     */\r\n\t    Injector.prototype.getOptional = function (token) {\r\n\t        return this._getByKey(key_1.Key.get(token), null, null, true, Visibility.PublicAndPrivate);\r\n\t    };\r\n\t    /**\r\n\t     * @internal\r\n\t     */\r\n\t    Injector.prototype.getAt = function (index) { return this._strategy.getObjAtIndex(index); };\r\n\t    Object.defineProperty(Injector.prototype, \"parent\", {\r\n\t        /**\r\n\t         * Parent of this injector.\r\n\t         *\r\n\t         * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\r\n\t         * -->\r\n\t         *\r\n\t         * ### Example ([live demo](http://plnkr.co/edit/eosMGo?p=preview))\r\n\t         *\r\n\t         * ```typescript\r\n\t         * var parent = Injector.resolveAndCreate([]);\r\n\t         * var child = parent.resolveAndCreateChild([]);\r\n\t         * expect(child.parent).toBe(parent);\r\n\t         * ```\r\n\t         */\r\n\t        get: function () { return this._parent; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(Injector.prototype, \"internalStrategy\", {\r\n\t        /**\r\n\t         * @internal\r\n\t         * Internal. Do not use.\r\n\t         * We return `any` not to export the InjectorStrategy type.\r\n\t         */\r\n\t        get: function () { return this._strategy; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * Resolves an array of providers and creates a child injector from those providers.\r\n\t     *\r\n\t     * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\r\n\t     * -->\r\n\t     *\r\n\t     * The passed-in providers can be an array of `Type`, {@link Provider},\r\n\t     * or a recursive array of more providers.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/opB3T4?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * class ParentProvider {}\r\n\t     * class ChildProvider {}\r\n\t     *\r\n\t     * var parent = Injector.resolveAndCreate([ParentProvider]);\r\n\t     * var child = parent.resolveAndCreateChild([ChildProvider]);\r\n\t     *\r\n\t     * expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);\r\n\t     * expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);\r\n\t     * expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));\r\n\t     * ```\r\n\t     *\r\n\t     * This function is slower than the corresponding `createChildFromResolved`\r\n\t     * because it needs to resolve the passed-in providers first.\r\n\t     * See {@link Injector#resolve} and {@link Injector#createChildFromResolved}.\r\n\t     */\r\n\t    Injector.prototype.resolveAndCreateChild = function (providers) {\r\n\t        var resolvedProviders = Injector.resolve(providers);\r\n\t        return this.createChildFromResolved(resolvedProviders);\r\n\t    };\r\n\t    /**\r\n\t     * Creates a child injector from previously resolved providers.\r\n\t     *\r\n\t     * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\r\n\t     * -->\r\n\t     *\r\n\t     * This API is the recommended way to construct injectors in performance-sensitive parts.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/VhyfjN?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * class ParentProvider {}\r\n\t     * class ChildProvider {}\r\n\t     *\r\n\t     * var parentProviders = Injector.resolve([ParentProvider]);\r\n\t     * var childProviders = Injector.resolve([ChildProvider]);\r\n\t     *\r\n\t     * var parent = Injector.fromResolvedProviders(parentProviders);\r\n\t     * var child = parent.createChildFromResolved(childProviders);\r\n\t     *\r\n\t     * expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);\r\n\t     * expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);\r\n\t     * expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));\r\n\t     * ```\r\n\t     */\r\n\t    Injector.prototype.createChildFromResolved = function (providers) {\r\n\t        var bd = providers.map(function (b) { return new ProviderWithVisibility(b, Visibility.Public); });\r\n\t        var proto = new ProtoInjector(bd);\r\n\t        var inj = new Injector(proto);\r\n\t        inj._parent = this;\r\n\t        return inj;\r\n\t    };\r\n\t    /**\r\n\t     * Resolves a provider and instantiates an object in the context of the injector.\r\n\t     *\r\n\t     * The created object does not get cached by the injector.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/yvVXoB?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * @Injectable()\r\n\t     * class Engine {\r\n\t     * }\r\n\t     *\r\n\t     * @Injectable()\r\n\t     * class Car {\r\n\t     *   constructor(public engine:Engine) {}\r\n\t     * }\r\n\t     *\r\n\t     * var injector = Injector.resolveAndCreate([Engine]);\r\n\t     *\r\n\t     * var car = injector.resolveAndInstantiate(Car);\r\n\t     * expect(car.engine).toBe(injector.get(Engine));\r\n\t     * expect(car).not.toBe(injector.resolveAndInstantiate(Car));\r\n\t     * ```\r\n\t     */\r\n\t    Injector.prototype.resolveAndInstantiate = function (provider) {\r\n\t        return this.instantiateResolved(Injector.resolve([provider])[0]);\r\n\t    };\r\n\t    /**\r\n\t     * Instantiates an object using a resolved provider in the context of the injector.\r\n\t     *\r\n\t     * The created object does not get cached by the injector.\r\n\t     *\r\n\t     * ### Example ([live demo](http://plnkr.co/edit/ptCImQ?p=preview))\r\n\t     *\r\n\t     * ```typescript\r\n\t     * @Injectable()\r\n\t     * class Engine {\r\n\t     * }\r\n\t     *\r\n\t     * @Injectable()\r\n\t     * class Car {\r\n\t     *   constructor(public engine:Engine) {}\r\n\t     * }\r\n\t     *\r\n\t     * var injector = Injector.resolveAndCreate([Engine]);\r\n\t     * var carProvider = Injector.resolve([Car])[0];\r\n\t     * var car = injector.instantiateResolved(carProvider);\r\n\t     * expect(car.engine).toBe(injector.get(Engine));\r\n\t     * expect(car).not.toBe(injector.instantiateResolved(carProvider));\r\n\t     * ```\r\n\t     */\r\n\t    Injector.prototype.instantiateResolved = function (provider) {\r\n\t        return this._instantiateProvider(provider, Visibility.PublicAndPrivate);\r\n\t    };\r\n\t    /** @internal */\r\n\t    Injector.prototype._new = function (provider, visibility) {\r\n\t        if (this._constructionCounter++ > this._strategy.getMaxNumberOfObjects()) {\r\n\t            throw new exceptions_1.CyclicDependencyError(this, provider.key);\r\n\t        }\r\n\t        return this._instantiateProvider(provider, visibility);\r\n\t    };\r\n\t    Injector.prototype._instantiateProvider = function (provider, visibility) {\r\n\t        if (provider.multiProvider) {\r\n\t            var res = collection_1.ListWrapper.createFixedSize(provider.resolvedFactories.length);\r\n\t            for (var i = 0; i < provider.resolvedFactories.length; ++i) {\r\n\t                res[i] = this._instantiate(provider, provider.resolvedFactories[i], visibility);\r\n\t            }\r\n\t            return res;\r\n\t        }\r\n\t        else {\r\n\t            return this._instantiate(provider, provider.resolvedFactories[0], visibility);\r\n\t        }\r\n\t    };\r\n\t    Injector.prototype._instantiate = function (provider, resolvedFactory, visibility) {\r\n\t        var factory = resolvedFactory.factory;\r\n\t        var deps = resolvedFactory.dependencies;\r\n\t        var length = deps.length;\r\n\t        var d0;\r\n\t        var d1;\r\n\t        var d2;\r\n\t        var d3;\r\n\t        var d4;\r\n\t        var d5;\r\n\t        var d6;\r\n\t        var d7;\r\n\t        var d8;\r\n\t        var d9;\r\n\t        var d10;\r\n\t        var d11;\r\n\t        var d12;\r\n\t        var d13;\r\n\t        var d14;\r\n\t        var d15;\r\n\t        var d16;\r\n\t        var d17;\r\n\t        var d18;\r\n\t        var d19;\r\n\t        try {\r\n\t            d0 = length > 0 ? this._getByDependency(provider, deps[0], visibility) : null;\r\n\t            d1 = length > 1 ? this._getByDependency(provider, deps[1], visibility) : null;\r\n\t            d2 = length > 2 ? this._getByDependency(provider, deps[2], visibility) : null;\r\n\t            d3 = length > 3 ? this._getByDependency(provider, deps[3], visibility) : null;\r\n\t            d4 = length > 4 ? this._getByDependency(provider, deps[4], visibility) : null;\r\n\t            d5 = length > 5 ? this._getByDependency(provider, deps[5], visibility) : null;\r\n\t            d6 = length > 6 ? this._getByDependency(provider, deps[6], visibility) : null;\r\n\t            d7 = length > 7 ? this._getByDependency(provider, deps[7], visibility) : null;\r\n\t            d8 = length > 8 ? this._getByDependency(provider, deps[8], visibility) : null;\r\n\t            d9 = length > 9 ? this._getByDependency(provider, deps[9], visibility) : null;\r\n\t            d10 = length > 10 ? this._getByDependency(provider, deps[10], visibility) : null;\r\n\t            d11 = length > 11 ? this._getByDependency(provider, deps[11], visibility) : null;\r\n\t            d12 = length > 12 ? this._getByDependency(provider, deps[12], visibility) : null;\r\n\t            d13 = length > 13 ? this._getByDependency(provider, deps[13], visibility) : null;\r\n\t            d14 = length > 14 ? this._getByDependency(provider, deps[14], visibility) : null;\r\n\t            d15 = length > 15 ? this._getByDependency(provider, deps[15], visibility) : null;\r\n\t            d16 = length > 16 ? this._getByDependency(provider, deps[16], visibility) : null;\r\n\t            d17 = length > 17 ? this._getByDependency(provider, deps[17], visibility) : null;\r\n\t            d18 = length > 18 ? this._getByDependency(provider, deps[18], visibility) : null;\r\n\t            d19 = length > 19 ? this._getByDependency(provider, deps[19], visibility) : null;\r\n\t        }\r\n\t        catch (e) {\r\n\t            if (e instanceof exceptions_1.AbstractProviderError || e instanceof exceptions_1.InstantiationError) {\r\n\t                e.addKey(this, provider.key);\r\n\t            }\r\n\t            throw e;\r\n\t        }\r\n\t        var obj;\r\n\t        try {\r\n\t            switch (length) {\r\n\t                case 0:\r\n\t                    obj = factory();\r\n\t                    break;\r\n\t                case 1:\r\n\t                    obj = factory(d0);\r\n\t                    break;\r\n\t                case 2:\r\n\t                    obj = factory(d0, d1);\r\n\t                    break;\r\n\t                case 3:\r\n\t                    obj = factory(d0, d1, d2);\r\n\t                    break;\r\n\t                case 4:\r\n\t                    obj = factory(d0, d1, d2, d3);\r\n\t                    break;\r\n\t                case 5:\r\n\t                    obj = factory(d0, d1, d2, d3, d4);\r\n\t                    break;\r\n\t                case 6:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5);\r\n\t                    break;\r\n\t                case 7:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6);\r\n\t                    break;\r\n\t                case 8:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7);\r\n\t                    break;\r\n\t                case 9:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8);\r\n\t                    break;\r\n\t                case 10:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9);\r\n\t                    break;\r\n\t                case 11:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10);\r\n\t                    break;\r\n\t                case 12:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11);\r\n\t                    break;\r\n\t                case 13:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12);\r\n\t                    break;\r\n\t                case 14:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13);\r\n\t                    break;\r\n\t                case 15:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14);\r\n\t                    break;\r\n\t                case 16:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15);\r\n\t                    break;\r\n\t                case 17:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16);\r\n\t                    break;\r\n\t                case 18:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17);\r\n\t                    break;\r\n\t                case 19:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18);\r\n\t                    break;\r\n\t                case 20:\r\n\t                    obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16, d17, d18, d19);\r\n\t                    break;\r\n\t                default:\r\n\t                    throw new exceptions_2.BaseException(\"Cannot instantiate '\" + provider.key.displayName + \"' because it has more than 20 dependencies\");\r\n\t            }\r\n\t        }\r\n\t        catch (e) {\r\n\t            throw new exceptions_1.InstantiationError(this, e, e.stack, provider.key);\r\n\t        }\r\n\t        return obj;\r\n\t    };\r\n\t    Injector.prototype._getByDependency = function (provider, dep, providerVisibility) {\r\n\t        var special = lang_1.isPresent(this._depProvider) ?\r\n\t            this._depProvider.getDependency(this, provider, dep) :\r\n\t            exports.UNDEFINED;\r\n\t        if (special !== exports.UNDEFINED) {\r\n\t            return special;\r\n\t        }\r\n\t        else {\r\n\t            return this._getByKey(dep.key, dep.lowerBoundVisibility, dep.upperBoundVisibility, dep.optional, providerVisibility);\r\n\t        }\r\n\t    };\r\n\t    Injector.prototype._getByKey = function (key, lowerBoundVisibility, upperBoundVisibility, optional, providerVisibility) {\r\n\t        if (key === INJECTOR_KEY) {\r\n\t            return this;\r\n\t        }\r\n\t        if (upperBoundVisibility instanceof metadata_1.SelfMetadata) {\r\n\t            return this._getByKeySelf(key, optional, providerVisibility);\r\n\t        }\r\n\t        else if (upperBoundVisibility instanceof metadata_1.HostMetadata) {\r\n\t            return this._getByKeyHost(key, optional, providerVisibility, lowerBoundVisibility);\r\n\t        }\r\n\t        else {\r\n\t            return this._getByKeyDefault(key, optional, providerVisibility, lowerBoundVisibility);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    Injector.prototype._throwOrNull = function (key, optional) {\r\n\t        if (optional) {\r\n\t            return null;\r\n\t        }\r\n\t        else {\r\n\t            throw new exceptions_1.NoProviderError(this, key);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    Injector.prototype._getByKeySelf = function (key, optional, providerVisibility) {\r\n\t        var obj = this._strategy.getObjByKeyId(key.id, providerVisibility);\r\n\t        return (obj !== exports.UNDEFINED) ? obj : this._throwOrNull(key, optional);\r\n\t    };\r\n\t    /** @internal */\r\n\t    Injector.prototype._getByKeyHost = function (key, optional, providerVisibility, lowerBoundVisibility) {\r\n\t        var inj = this;\r\n\t        if (lowerBoundVisibility instanceof metadata_1.SkipSelfMetadata) {\r\n\t            if (inj._isHostBoundary) {\r\n\t                return this._getPrivateDependency(key, optional, inj);\r\n\t            }\r\n\t            else {\r\n\t                inj = inj._parent;\r\n\t            }\r\n\t        }\r\n\t        while (inj != null) {\r\n\t            var obj = inj._strategy.getObjByKeyId(key.id, providerVisibility);\r\n\t            if (obj !== exports.UNDEFINED)\r\n\t                return obj;\r\n\t            if (lang_1.isPresent(inj._parent) && inj._isHostBoundary) {\r\n\t                return this._getPrivateDependency(key, optional, inj);\r\n\t            }\r\n\t            else {\r\n\t                inj = inj._parent;\r\n\t            }\r\n\t        }\r\n\t        return this._throwOrNull(key, optional);\r\n\t    };\r\n\t    /** @internal */\r\n\t    Injector.prototype._getPrivateDependency = function (key, optional, inj) {\r\n\t        var obj = inj._parent._strategy.getObjByKeyId(key.id, Visibility.Private);\r\n\t        return (obj !== exports.UNDEFINED) ? obj : this._throwOrNull(key, optional);\r\n\t    };\r\n\t    /** @internal */\r\n\t    Injector.prototype._getByKeyDefault = function (key, optional, providerVisibility, lowerBoundVisibility) {\r\n\t        var inj = this;\r\n\t        if (lowerBoundVisibility instanceof metadata_1.SkipSelfMetadata) {\r\n\t            providerVisibility = inj._isHostBoundary ? Visibility.PublicAndPrivate : Visibility.Public;\r\n\t            inj = inj._parent;\r\n\t        }\r\n\t        while (inj != null) {\r\n\t            var obj = inj._strategy.getObjByKeyId(key.id, providerVisibility);\r\n\t            if (obj !== exports.UNDEFINED)\r\n\t                return obj;\r\n\t            providerVisibility = inj._isHostBoundary ? Visibility.PublicAndPrivate : Visibility.Public;\r\n\t            inj = inj._parent;\r\n\t        }\r\n\t        return this._throwOrNull(key, optional);\r\n\t    };\r\n\t    Object.defineProperty(Injector.prototype, \"displayName\", {\r\n\t        get: function () {\r\n\t            return \"Injector(providers: [\" + _mapProviders(this, function (b) { return (\" \\\"\" + b.key.displayName + \"\\\" \"); }).join(\", \") + \"])\";\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Injector.prototype.toString = function () { return this.displayName; };\r\n\t    return Injector;\r\n\t})();\r\n\texports.Injector = Injector;\r\n\tvar INJECTOR_KEY = key_1.Key.get(Injector);\r\n\tfunction _mapProviders(injector, fn) {\r\n\t    var res = [];\r\n\t    for (var i = 0; i < injector._proto.numberOfProviders; ++i) {\r\n\t        res.push(fn(injector._proto.getProviderAtIndex(i)));\r\n\t    }\r\n\t    return res;\r\n\t}\r\n\n\n/***/ },\n/* 305 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar async_1 = __webpack_require__(13);\r\n\t/**\r\n\t * An unmodifiable list of items that Angular keeps up to date when the state\r\n\t * of the application changes.\r\n\t *\r\n\t * The type of object that {@link QueryMetadata} and {@link ViewQueryMetadata} provide.\r\n\t *\r\n\t * Implements an iterable interface, therefore it can be used in both ES6\r\n\t * javascript `for (var i of items)` loops as well as in Angular templates with\r\n\t * `*ngFor=\"#i of myList\"`.\r\n\t *\r\n\t * Changes can be observed by subscribing to the changes `Observable`.\r\n\t *\r\n\t * NOTE: In the future this class will implement an `Observable` interface.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/RX8sJnQYl9FWuSCWme5z?p=preview))\r\n\t * ```typescript\r\n\t * @Component({...})\r\n\t * class Container {\r\n\t *   constructor(@Query(Item) items: QueryList<Item>) {\r\n\t *     items.changes.subscribe(_ => console.log(items.length));\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar QueryList = (function () {\r\n\t    function QueryList() {\r\n\t        this._results = [];\r\n\t        this._emitter = new async_1.EventEmitter();\r\n\t    }\r\n\t    Object.defineProperty(QueryList.prototype, \"changes\", {\r\n\t        get: function () { return this._emitter; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(QueryList.prototype, \"length\", {\r\n\t        get: function () { return this._results.length; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(QueryList.prototype, \"first\", {\r\n\t        get: function () { return collection_1.ListWrapper.first(this._results); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(QueryList.prototype, \"last\", {\r\n\t        get: function () { return collection_1.ListWrapper.last(this._results); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * returns a new array with the passed in function applied to each element.\r\n\t     */\r\n\t    QueryList.prototype.map = function (fn) { return this._results.map(fn); };\r\n\t    /**\r\n\t     * returns a filtered array.\r\n\t     */\r\n\t    QueryList.prototype.filter = function (fn) { return this._results.filter(fn); };\r\n\t    /**\r\n\t     * returns a reduced value.\r\n\t     */\r\n\t    QueryList.prototype.reduce = function (fn, init) { return this._results.reduce(fn, init); };\r\n\t    /**\r\n\t     * executes function for each element in a query.\r\n\t     */\r\n\t    QueryList.prototype.forEach = function (fn) { this._results.forEach(fn); };\r\n\t    /**\r\n\t     * converts QueryList into an array\r\n\t     */\r\n\t    QueryList.prototype.toArray = function () { return collection_1.ListWrapper.clone(this._results); };\r\n\t    QueryList.prototype[lang_1.getSymbolIterator()] = function () { return this._results[lang_1.getSymbolIterator()](); };\r\n\t    QueryList.prototype.toString = function () { return this._results.toString(); };\r\n\t    /**\r\n\t     * @internal\r\n\t     */\r\n\t    QueryList.prototype.reset = function (res) { this._results = res; };\r\n\t    /** @internal */\r\n\t    QueryList.prototype.notifyOnChanges = function () { this._emitter.emit(this); };\r\n\t    return QueryList;\r\n\t})();\r\n\texports.QueryList = QueryList;\r\n\n\n/***/ },\n/* 306 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar element_1 = __webpack_require__(129);\r\n\tvar directive_resolver_1 = __webpack_require__(128);\r\n\tvar pipe_provider_1 = __webpack_require__(308);\r\n\tvar pipe_resolver_1 = __webpack_require__(200);\r\n\tvar ResolvedMetadataCache = (function () {\r\n\t    function ResolvedMetadataCache(_directiveResolver, _pipeResolver) {\r\n\t        this._directiveResolver = _directiveResolver;\r\n\t        this._pipeResolver = _pipeResolver;\r\n\t        this._directiveCache = new Map();\r\n\t        this._pipeCache = new Map();\r\n\t    }\r\n\t    ResolvedMetadataCache.prototype.getResolvedDirectiveMetadata = function (type) {\r\n\t        var result = this._directiveCache.get(type);\r\n\t        if (lang_1.isBlank(result)) {\r\n\t            result = element_1.DirectiveProvider.createFromType(type, this._directiveResolver.resolve(type));\r\n\t            this._directiveCache.set(type, result);\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    ResolvedMetadataCache.prototype.getResolvedPipeMetadata = function (type) {\r\n\t        var result = this._pipeCache.get(type);\r\n\t        if (lang_1.isBlank(result)) {\r\n\t            result = pipe_provider_1.PipeProvider.createFromType(type, this._pipeResolver.resolve(type));\r\n\t            this._pipeCache.set(type, result);\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    ResolvedMetadataCache = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [directive_resolver_1.DirectiveResolver, pipe_resolver_1.PipeResolver])\r\n\t    ], ResolvedMetadataCache);\r\n\t    return ResolvedMetadataCache;\r\n\t})();\r\n\texports.ResolvedMetadataCache = ResolvedMetadataCache;\r\n\texports.CODEGEN_RESOLVED_METADATA_CACHE = new ResolvedMetadataCache(directive_resolver_1.CODEGEN_DIRECTIVE_RESOLVER, pipe_resolver_1.CODEGEN_PIPE_RESOLVER);\r\n\n\n/***/ },\n/* 307 */\n/***/ function(module, exports) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\t/**\r\n\t * Represents an Embedded Template that can be used to instantiate Embedded Views.\r\n\t *\r\n\t * You can access a `TemplateRef`, in two ways. Via a directive placed on a `<template>` element (or\r\n\t * directive prefixed with `*`) and have the `TemplateRef` for this Embedded View injected into the\r\n\t * constructor of the directive using the `TemplateRef` Token. Alternatively you can query for the\r\n\t * `TemplateRef` from a Component or a Directive via {@link Query}.\r\n\t *\r\n\t * To instantiate Embedded Views based on a Template, use\r\n\t * {@link ViewContainerRef#createEmbeddedView}, which will create the View and attach it to the\r\n\t * View Container.\r\n\t */\r\n\tvar TemplateRef = (function () {\r\n\t    function TemplateRef() {\r\n\t    }\r\n\t    Object.defineProperty(TemplateRef.prototype, \"elementRef\", {\r\n\t        /**\r\n\t         * The location in the View where the Embedded View logically belongs to.\r\n\t         *\r\n\t         * The data-binding and injection contexts of Embedded Views created from this `TemplateRef`\r\n\t         * inherit from the contexts of this location.\r\n\t         *\r\n\t         * Typically new Embedded Views are attached to the View Container of this location, but in\r\n\t         * advanced use-cases, the View can be attached to a different container while keeping the\r\n\t         * data-binding and injection context from the original location.\r\n\t         *\r\n\t         */\r\n\t        // TODO(i): rename to anchor or location\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return TemplateRef;\r\n\t})();\r\n\texports.TemplateRef = TemplateRef;\r\n\tvar TemplateRef_ = (function (_super) {\r\n\t    __extends(TemplateRef_, _super);\r\n\t    function TemplateRef_(_elementRef) {\r\n\t        _super.call(this);\r\n\t        this._elementRef = _elementRef;\r\n\t    }\r\n\t    Object.defineProperty(TemplateRef_.prototype, \"elementRef\", {\r\n\t        get: function () { return this._elementRef; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return TemplateRef_;\r\n\t})(TemplateRef);\r\n\texports.TemplateRef_ = TemplateRef_;\r\n\n\n/***/ },\n/* 308 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar provider_1 = __webpack_require__(95);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar PipeProvider = (function (_super) {\r\n\t    __extends(PipeProvider, _super);\r\n\t    function PipeProvider(name, pure, key, resolvedFactories, multiBinding) {\r\n\t        _super.call(this, key, resolvedFactories, multiBinding);\r\n\t        this.name = name;\r\n\t        this.pure = pure;\r\n\t    }\r\n\t    PipeProvider.createFromType = function (type, metadata) {\r\n\t        var provider = new di_1.Provider(type, { useClass: type });\r\n\t        var rb = provider_1.resolveProvider(provider);\r\n\t        return new PipeProvider(metadata.name, metadata.pure, rb.key, rb.resolvedFactories, rb.multiProvider);\r\n\t    };\r\n\t    return PipeProvider;\r\n\t})(provider_1.ResolvedProvider_);\r\n\texports.PipeProvider = PipeProvider;\r\n\n\n/***/ },\n/* 309 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar cd = __webpack_require__(611);\r\n\tvar ProtoPipes = (function () {\r\n\t    function ProtoPipes(\r\n\t        /**\r\n\t        * Map of {@link PipeMetadata} names to {@link PipeMetadata} implementations.\r\n\t        */\r\n\t        config) {\r\n\t        this.config = config;\r\n\t        this.config = config;\r\n\t    }\r\n\t    ProtoPipes.fromProviders = function (providers) {\r\n\t        var config = {};\r\n\t        providers.forEach(function (b) { return config[b.name] = b; });\r\n\t        return new ProtoPipes(config);\r\n\t    };\r\n\t    ProtoPipes.prototype.get = function (name) {\r\n\t        var provider = this.config[name];\r\n\t        if (lang_1.isBlank(provider))\r\n\t            throw new exceptions_1.BaseException(\"Cannot find pipe '\" + name + \"'.\");\r\n\t        return provider;\r\n\t    };\r\n\t    return ProtoPipes;\r\n\t})();\r\n\texports.ProtoPipes = ProtoPipes;\r\n\tvar Pipes = (function () {\r\n\t    function Pipes(proto, injector) {\r\n\t        this.proto = proto;\r\n\t        this.injector = injector;\r\n\t        /** @internal */\r\n\t        this._config = {};\r\n\t    }\r\n\t    Pipes.prototype.get = function (name) {\r\n\t        var cached = collection_1.StringMapWrapper.get(this._config, name);\r\n\t        if (lang_1.isPresent(cached))\r\n\t            return cached;\r\n\t        var p = this.proto.get(name);\r\n\t        var transform = this.injector.instantiateResolved(p);\r\n\t        var res = new cd.SelectedPipe(transform, p.pure);\r\n\t        if (p.pure) {\r\n\t            collection_1.StringMapWrapper.set(this._config, name, res);\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    return Pipes;\r\n\t})();\r\n\texports.Pipes = Pipes;\r\n\n\n/***/ },\n/* 310 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar ReflectionCapabilities = (function () {\r\n\t    function ReflectionCapabilities(reflect) {\r\n\t        this._reflect = lang_1.isPresent(reflect) ? reflect : lang_1.global.Reflect;\r\n\t    }\r\n\t    ReflectionCapabilities.prototype.isReflectionEnabled = function () { return true; };\r\n\t    ReflectionCapabilities.prototype.factory = function (t) {\r\n\t        switch (t.length) {\r\n\t            case 0:\r\n\t                return function () { return new t(); };\r\n\t            case 1:\r\n\t                return function (a1) { return new t(a1); };\r\n\t            case 2:\r\n\t                return function (a1, a2) { return new t(a1, a2); };\r\n\t            case 3:\r\n\t                return function (a1, a2, a3) { return new t(a1, a2, a3); };\r\n\t            case 4:\r\n\t                return function (a1, a2, a3, a4) { return new t(a1, a2, a3, a4); };\r\n\t            case 5:\r\n\t                return function (a1, a2, a3, a4, a5) { return new t(a1, a2, a3, a4, a5); };\r\n\t            case 6:\r\n\t                return function (a1, a2, a3, a4, a5, a6) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6);\r\n\t                };\r\n\t            case 7:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7);\r\n\t                };\r\n\t            case 8:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8);\r\n\t                };\r\n\t            case 9:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9);\r\n\t                };\r\n\t            case 10:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\r\n\t                };\r\n\t            case 11:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\r\n\t                };\r\n\t            case 12:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);\r\n\t                };\r\n\t            case 13:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);\r\n\t                };\r\n\t            case 14:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);\r\n\t                };\r\n\t            case 15:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);\r\n\t                };\r\n\t            case 16:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);\r\n\t                };\r\n\t            case 17:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);\r\n\t                };\r\n\t            case 18:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);\r\n\t                };\r\n\t            case 19:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);\r\n\t                };\r\n\t            case 20:\r\n\t                return function (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) {\r\n\t                    return new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);\r\n\t                };\r\n\t        }\r\n\t        ;\r\n\t        throw new Error(\"Cannot create a factory for '\" + lang_1.stringify(t) + \"' because its constructor has more than 20 arguments\");\r\n\t    };\r\n\t    /** @internal */\r\n\t    ReflectionCapabilities.prototype._zipTypesAndAnnotations = function (paramTypes, paramAnnotations) {\r\n\t        var result;\r\n\t        if (typeof paramTypes === 'undefined') {\r\n\t            result = new Array(paramAnnotations.length);\r\n\t        }\r\n\t        else {\r\n\t            result = new Array(paramTypes.length);\r\n\t        }\r\n\t        for (var i = 0; i < result.length; i++) {\r\n\t            // TS outputs Object for parameters without types, while Traceur omits\r\n\t            // the annotations. For now we preserve the Traceur behavior to aid\r\n\t            // migration, but this can be revisited.\r\n\t            if (typeof paramTypes === 'undefined') {\r\n\t                result[i] = [];\r\n\t            }\r\n\t            else if (paramTypes[i] != Object) {\r\n\t                result[i] = [paramTypes[i]];\r\n\t            }\r\n\t            else {\r\n\t                result[i] = [];\r\n\t            }\r\n\t            if (lang_1.isPresent(paramAnnotations) && lang_1.isPresent(paramAnnotations[i])) {\r\n\t                result[i] = result[i].concat(paramAnnotations[i]);\r\n\t            }\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    ReflectionCapabilities.prototype.parameters = function (typeOrFunc) {\r\n\t        // Prefer the direct API.\r\n\t        if (lang_1.isPresent(typeOrFunc.parameters)) {\r\n\t            return typeOrFunc.parameters;\r\n\t        }\r\n\t        if (lang_1.isPresent(this._reflect) && lang_1.isPresent(this._reflect.getMetadata)) {\r\n\t            var paramAnnotations = this._reflect.getMetadata('parameters', typeOrFunc);\r\n\t            var paramTypes = this._reflect.getMetadata('design:paramtypes', typeOrFunc);\r\n\t            if (lang_1.isPresent(paramTypes) || lang_1.isPresent(paramAnnotations)) {\r\n\t                return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\r\n\t            }\r\n\t        }\r\n\t        // The array has to be filled with `undefined` because holes would be skipped by `some`\r\n\t        var parameters = new Array(typeOrFunc.length);\r\n\t        parameters.fill(undefined);\r\n\t        return parameters;\r\n\t    };\r\n\t    ReflectionCapabilities.prototype.annotations = function (typeOrFunc) {\r\n\t        // Prefer the direct API.\r\n\t        if (lang_1.isPresent(typeOrFunc.annotations)) {\r\n\t            var annotations = typeOrFunc.annotations;\r\n\t            if (lang_1.isFunction(annotations) && annotations.annotations) {\r\n\t                annotations = annotations.annotations;\r\n\t            }\r\n\t            return annotations;\r\n\t        }\r\n\t        if (lang_1.isPresent(this._reflect) && lang_1.isPresent(this._reflect.getMetadata)) {\r\n\t            var annotations = this._reflect.getMetadata('annotations', typeOrFunc);\r\n\t            if (lang_1.isPresent(annotations))\r\n\t                return annotations;\r\n\t        }\r\n\t        return [];\r\n\t    };\r\n\t    ReflectionCapabilities.prototype.propMetadata = function (typeOrFunc) {\r\n\t        // Prefer the direct API.\r\n\t        if (lang_1.isPresent(typeOrFunc.propMetadata)) {\r\n\t            var propMetadata = typeOrFunc.propMetadata;\r\n\t            if (lang_1.isFunction(propMetadata) && propMetadata.propMetadata) {\r\n\t                propMetadata = propMetadata.propMetadata;\r\n\t            }\r\n\t            return propMetadata;\r\n\t        }\r\n\t        if (lang_1.isPresent(this._reflect) && lang_1.isPresent(this._reflect.getMetadata)) {\r\n\t            var propMetadata = this._reflect.getMetadata('propMetadata', typeOrFunc);\r\n\t            if (lang_1.isPresent(propMetadata))\r\n\t                return propMetadata;\r\n\t        }\r\n\t        return {};\r\n\t    };\r\n\t    ReflectionCapabilities.prototype.interfaces = function (type) {\r\n\t        throw new exceptions_1.BaseException(\"JavaScript does not support interfaces\");\r\n\t    };\r\n\t    ReflectionCapabilities.prototype.getter = function (name) { return new Function('o', 'return o.' + name + ';'); };\r\n\t    ReflectionCapabilities.prototype.setter = function (name) {\r\n\t        return new Function('o', 'v', 'return o.' + name + ' = v;');\r\n\t    };\r\n\t    ReflectionCapabilities.prototype.method = function (name) {\r\n\t        var functionBody = \"if (!o.\" + name + \") throw new Error('\\\"\" + name + \"\\\" is undefined');\\n        return o.\" + name + \".apply(o, args);\";\r\n\t        return new Function('o', 'args', functionBody);\r\n\t    };\r\n\t    // There is not a concept of import uri in Js, but this is useful in developing Dart applications.\r\n\t    ReflectionCapabilities.prototype.importUri = function (type) { return './'; };\r\n\t    return ReflectionCapabilities;\r\n\t})();\r\n\texports.ReflectionCapabilities = ReflectionCapabilities;\r\n\n\n/***/ },\n/* 311 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\t/**\r\n\t * Reflective information about a symbol, including annotations, interfaces, and other metadata.\r\n\t */\r\n\tvar ReflectionInfo = (function () {\r\n\t    function ReflectionInfo(annotations, parameters, factory, interfaces, propMetadata) {\r\n\t        this.annotations = annotations;\r\n\t        this.parameters = parameters;\r\n\t        this.factory = factory;\r\n\t        this.interfaces = interfaces;\r\n\t        this.propMetadata = propMetadata;\r\n\t    }\r\n\t    return ReflectionInfo;\r\n\t})();\r\n\texports.ReflectionInfo = ReflectionInfo;\r\n\t/**\r\n\t * Provides access to reflection data about symbols. Used internally by Angular\r\n\t * to power dependency injection and compilation.\r\n\t */\r\n\tvar Reflector = (function () {\r\n\t    function Reflector(reflectionCapabilities) {\r\n\t        /** @internal */\r\n\t        this._injectableInfo = new collection_1.Map();\r\n\t        /** @internal */\r\n\t        this._getters = new collection_1.Map();\r\n\t        /** @internal */\r\n\t        this._setters = new collection_1.Map();\r\n\t        /** @internal */\r\n\t        this._methods = new collection_1.Map();\r\n\t        this._usedKeys = null;\r\n\t        this.reflectionCapabilities = reflectionCapabilities;\r\n\t    }\r\n\t    Reflector.prototype.isReflectionEnabled = function () { return this.reflectionCapabilities.isReflectionEnabled(); };\r\n\t    /**\r\n\t     * Causes `this` reflector to track keys used to access\r\n\t     * {@link ReflectionInfo} objects.\r\n\t     */\r\n\t    Reflector.prototype.trackUsage = function () { this._usedKeys = new collection_1.Set(); };\r\n\t    /**\r\n\t     * Lists types for which reflection information was not requested since\r\n\t     * {@link #trackUsage} was called. This list could later be audited as\r\n\t     * potential dead code.\r\n\t     */\r\n\t    Reflector.prototype.listUnusedKeys = function () {\r\n\t        var _this = this;\r\n\t        if (this._usedKeys == null) {\r\n\t            throw new exceptions_1.BaseException('Usage tracking is disabled');\r\n\t        }\r\n\t        var allTypes = collection_1.MapWrapper.keys(this._injectableInfo);\r\n\t        return allTypes.filter(function (key) { return !collection_1.SetWrapper.has(_this._usedKeys, key); });\r\n\t    };\r\n\t    Reflector.prototype.registerFunction = function (func, funcInfo) {\r\n\t        this._injectableInfo.set(func, funcInfo);\r\n\t    };\r\n\t    Reflector.prototype.registerType = function (type, typeInfo) {\r\n\t        this._injectableInfo.set(type, typeInfo);\r\n\t    };\r\n\t    Reflector.prototype.registerGetters = function (getters) { _mergeMaps(this._getters, getters); };\r\n\t    Reflector.prototype.registerSetters = function (setters) { _mergeMaps(this._setters, setters); };\r\n\t    Reflector.prototype.registerMethods = function (methods) { _mergeMaps(this._methods, methods); };\r\n\t    Reflector.prototype.factory = function (type) {\r\n\t        if (this._containsReflectionInfo(type)) {\r\n\t            var res = this._getReflectionInfo(type).factory;\r\n\t            return lang_1.isPresent(res) ? res : null;\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.factory(type);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.parameters = function (typeOrFunc) {\r\n\t        if (this._injectableInfo.has(typeOrFunc)) {\r\n\t            var res = this._getReflectionInfo(typeOrFunc).parameters;\r\n\t            return lang_1.isPresent(res) ? res : [];\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.parameters(typeOrFunc);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.annotations = function (typeOrFunc) {\r\n\t        if (this._injectableInfo.has(typeOrFunc)) {\r\n\t            var res = this._getReflectionInfo(typeOrFunc).annotations;\r\n\t            return lang_1.isPresent(res) ? res : [];\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.annotations(typeOrFunc);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.propMetadata = function (typeOrFunc) {\r\n\t        if (this._injectableInfo.has(typeOrFunc)) {\r\n\t            var res = this._getReflectionInfo(typeOrFunc).propMetadata;\r\n\t            return lang_1.isPresent(res) ? res : {};\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.propMetadata(typeOrFunc);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.interfaces = function (type) {\r\n\t        if (this._injectableInfo.has(type)) {\r\n\t            var res = this._getReflectionInfo(type).interfaces;\r\n\t            return lang_1.isPresent(res) ? res : [];\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.interfaces(type);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.getter = function (name) {\r\n\t        if (this._getters.has(name)) {\r\n\t            return this._getters.get(name);\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.getter(name);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.setter = function (name) {\r\n\t        if (this._setters.has(name)) {\r\n\t            return this._setters.get(name);\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.setter(name);\r\n\t        }\r\n\t    };\r\n\t    Reflector.prototype.method = function (name) {\r\n\t        if (this._methods.has(name)) {\r\n\t            return this._methods.get(name);\r\n\t        }\r\n\t        else {\r\n\t            return this.reflectionCapabilities.method(name);\r\n\t        }\r\n\t    };\r\n\t    /** @internal */\r\n\t    Reflector.prototype._getReflectionInfo = function (typeOrFunc) {\r\n\t        if (lang_1.isPresent(this._usedKeys)) {\r\n\t            this._usedKeys.add(typeOrFunc);\r\n\t        }\r\n\t        return this._injectableInfo.get(typeOrFunc);\r\n\t    };\r\n\t    /** @internal */\r\n\t    Reflector.prototype._containsReflectionInfo = function (typeOrFunc) { return this._injectableInfo.has(typeOrFunc); };\r\n\t    Reflector.prototype.importUri = function (type) { return this.reflectionCapabilities.importUri(type); };\r\n\t    return Reflector;\r\n\t})();\r\n\texports.Reflector = Reflector;\r\n\tfunction _mergeMaps(target, config) {\r\n\t    collection_1.StringMapWrapper.forEach(config, function (v, k) { return target.set(k, v); });\r\n\t}\r\n\n\n/***/ },\n/* 312 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * Stores error information; delivered via [NgZone.onError] stream.\r\n\t */\r\n\tvar NgZoneError = (function () {\r\n\t    function NgZoneError(error, stackTrace) {\r\n\t        this.error = error;\r\n\t        this.stackTrace = stackTrace;\r\n\t    }\r\n\t    return NgZoneError;\r\n\t})();\r\n\texports.NgZoneError = NgZoneError;\r\n\tvar NgZoneImpl = (function () {\r\n\t    function NgZoneImpl(_a) {\r\n\t        var _this = this;\r\n\t        var trace = _a.trace, onEnter = _a.onEnter, onLeave = _a.onLeave, setMicrotask = _a.setMicrotask, setMacrotask = _a.setMacrotask, onError = _a.onError;\r\n\t        this.onEnter = onEnter;\r\n\t        this.onLeave = onLeave;\r\n\t        this.setMicrotask = setMicrotask;\r\n\t        this.setMacrotask = setMacrotask;\r\n\t        this.onError = onError;\r\n\t        if (Zone) {\r\n\t            this.outer = this.inner = Zone.current;\r\n\t            if (Zone['wtfZoneSpec']) {\r\n\t                this.inner = this.inner.fork(Zone['wtfZoneSpec']);\r\n\t            }\r\n\t            if (trace && Zone['longStackTraceZoneSpec']) {\r\n\t                this.inner = this.inner.fork(Zone['longStackTraceZoneSpec']);\r\n\t            }\r\n\t            this.inner = this.inner.fork({\r\n\t                name: 'angular',\r\n\t                properties: { 'isAngularZone': true },\r\n\t                onInvokeTask: function (delegate, current, target, task, applyThis, applyArgs) {\r\n\t                    try {\r\n\t                        _this.onEnter();\r\n\t                        return delegate.invokeTask(target, task, applyThis, applyArgs);\r\n\t                    }\r\n\t                    finally {\r\n\t                        _this.onLeave();\r\n\t                    }\r\n\t                },\r\n\t                onInvoke: function (delegate, current, target, callback, applyThis, applyArgs, source) {\r\n\t                    try {\r\n\t                        _this.onEnter();\r\n\t                        return delegate.invoke(target, callback, applyThis, applyArgs, source);\r\n\t                    }\r\n\t                    finally {\r\n\t                        _this.onLeave();\r\n\t                    }\r\n\t                },\r\n\t                onHasTask: function (delegate, current, target, hasTaskState) {\r\n\t                    delegate.hasTask(target, hasTaskState);\r\n\t                    if (current == target) {\r\n\t                        // We are only interested in hasTask events which originate from our zone\r\n\t                        // (A child hasTask event is not interesting to us)\r\n\t                        if (hasTaskState.change == 'microTask') {\r\n\t                            _this.setMicrotask(hasTaskState.microTask);\r\n\t                        }\r\n\t                        else if (hasTaskState.change == 'macroTask') {\r\n\t                            _this.setMacrotask(hasTaskState.macroTask);\r\n\t                        }\r\n\t                    }\r\n\t                },\r\n\t                onHandleError: function (delegate, current, target, error) {\r\n\t                    delegate.handleError(target, error);\r\n\t                    _this.onError(new NgZoneError(error, error.stack));\r\n\t                    return false;\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            throw new Error('Angular2 needs to be run with Zone.js polyfill.');\r\n\t        }\r\n\t    }\r\n\t    NgZoneImpl.isInAngularZone = function () { return Zone.current.get('isAngularZone') === true; };\r\n\t    NgZoneImpl.prototype.runInner = function (fn) { return this.inner.runGuarded(fn); };\r\n\t    ;\r\n\t    NgZoneImpl.prototype.runOuter = function (fn) { return this.outer.run(fn); };\r\n\t    ;\r\n\t    return NgZoneImpl;\r\n\t})();\r\n\texports.NgZoneImpl = NgZoneImpl;\r\n\n\n/***/ },\n/* 313 */\n/***/ function(module, exports) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\t/**\r\n\t * A base class for the WrappedException that can be used to identify\r\n\t * a WrappedException from ExceptionHandler without adding circular\r\n\t * dependency.\r\n\t */\r\n\tvar BaseWrappedException = (function (_super) {\r\n\t    __extends(BaseWrappedException, _super);\r\n\t    function BaseWrappedException(message) {\r\n\t        _super.call(this, message);\r\n\t    }\r\n\t    Object.defineProperty(BaseWrappedException.prototype, \"wrapperMessage\", {\r\n\t        get: function () { return ''; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseWrappedException.prototype, \"wrapperStack\", {\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseWrappedException.prototype, \"originalException\", {\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseWrappedException.prototype, \"originalStack\", {\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseWrappedException.prototype, \"context\", {\r\n\t        get: function () { return null; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BaseWrappedException.prototype, \"message\", {\r\n\t        get: function () { return ''; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    return BaseWrappedException;\r\n\t})(Error);\r\n\texports.BaseWrappedException = BaseWrappedException;\r\n\n\n/***/ },\n/* 314 */\n/***/ function(module, exports) {\n\n\t'use strict';(function (NumberFormatStyle) {\r\n\t    NumberFormatStyle[NumberFormatStyle[\"Decimal\"] = 0] = \"Decimal\";\r\n\t    NumberFormatStyle[NumberFormatStyle[\"Percent\"] = 1] = \"Percent\";\r\n\t    NumberFormatStyle[NumberFormatStyle[\"Currency\"] = 2] = \"Currency\";\r\n\t})(exports.NumberFormatStyle || (exports.NumberFormatStyle = {}));\r\n\tvar NumberFormatStyle = exports.NumberFormatStyle;\r\n\tvar NumberFormatter = (function () {\r\n\t    function NumberFormatter() {\r\n\t    }\r\n\t    NumberFormatter.format = function (num, locale, style, _a) {\r\n\t        var _b = _a === void 0 ? {} : _a, _c = _b.minimumIntegerDigits, minimumIntegerDigits = _c === void 0 ? 1 : _c, _d = _b.minimumFractionDigits, minimumFractionDigits = _d === void 0 ? 0 : _d, _e = _b.maximumFractionDigits, maximumFractionDigits = _e === void 0 ? 3 : _e, currency = _b.currency, _f = _b.currencyAsSymbol, currencyAsSymbol = _f === void 0 ? false : _f;\r\n\t        var intlOptions = {\r\n\t            minimumIntegerDigits: minimumIntegerDigits,\r\n\t            minimumFractionDigits: minimumFractionDigits,\r\n\t            maximumFractionDigits: maximumFractionDigits\r\n\t        };\r\n\t        intlOptions.style = NumberFormatStyle[style].toLowerCase();\r\n\t        if (style == NumberFormatStyle.Currency) {\r\n\t            intlOptions.currency = currency;\r\n\t            intlOptions.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\r\n\t        }\r\n\t        return new Intl.NumberFormat(locale, intlOptions).format(num);\r\n\t    };\r\n\t    return NumberFormatter;\r\n\t})();\r\n\texports.NumberFormatter = NumberFormatter;\r\n\tfunction digitCondition(len) {\r\n\t    return len == 2 ? '2-digit' : 'numeric';\r\n\t}\r\n\tfunction nameCondition(len) {\r\n\t    return len < 4 ? 'short' : 'long';\r\n\t}\r\n\tfunction extractComponents(pattern) {\r\n\t    var ret = {};\r\n\t    var i = 0, j;\r\n\t    while (i < pattern.length) {\r\n\t        j = i;\r\n\t        while (j < pattern.length && pattern[j] == pattern[i])\r\n\t            j++;\r\n\t        var len = j - i;\r\n\t        switch (pattern[i]) {\r\n\t            case 'G':\r\n\t                ret.era = nameCondition(len);\r\n\t                break;\r\n\t            case 'y':\r\n\t                ret.year = digitCondition(len);\r\n\t                break;\r\n\t            case 'M':\r\n\t                if (len >= 3)\r\n\t                    ret.month = nameCondition(len);\r\n\t                else\r\n\t                    ret.month = digitCondition(len);\r\n\t                break;\r\n\t            case 'd':\r\n\t                ret.day = digitCondition(len);\r\n\t                break;\r\n\t            case 'E':\r\n\t                ret.weekday = nameCondition(len);\r\n\t                break;\r\n\t            case 'j':\r\n\t                ret.hour = digitCondition(len);\r\n\t                break;\r\n\t            case 'h':\r\n\t                ret.hour = digitCondition(len);\r\n\t                ret.hour12 = true;\r\n\t                break;\r\n\t            case 'H':\r\n\t                ret.hour = digitCondition(len);\r\n\t                ret.hour12 = false;\r\n\t                break;\r\n\t            case 'm':\r\n\t                ret.minute = digitCondition(len);\r\n\t                break;\r\n\t            case 's':\r\n\t                ret.second = digitCondition(len);\r\n\t                break;\r\n\t            case 'z':\r\n\t                ret.timeZoneName = 'long';\r\n\t                break;\r\n\t            case 'Z':\r\n\t                ret.timeZoneName = 'short';\r\n\t                break;\r\n\t        }\r\n\t        i = j;\r\n\t    }\r\n\t    return ret;\r\n\t}\r\n\tvar dateFormatterCache = new Map();\r\n\tvar DateFormatter = (function () {\r\n\t    function DateFormatter() {\r\n\t    }\r\n\t    DateFormatter.format = function (date, locale, pattern) {\r\n\t        var key = locale + pattern;\r\n\t        if (dateFormatterCache.has(key)) {\r\n\t            return dateFormatterCache.get(key).format(date);\r\n\t        }\r\n\t        var formatter = new Intl.DateTimeFormat(locale, extractComponents(pattern));\r\n\t        dateFormatterCache.set(key, formatter);\r\n\t        return formatter.format(date);\r\n\t    };\r\n\t    return DateFormatter;\r\n\t})();\r\n\texports.DateFormatter = DateFormatter;\r\n\n\n/***/ },\n/* 315 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\texports.Math = lang_1.global.Math;\r\n\texports.NaN = typeof exports.NaN;\r\n\n\n/***/ },\n/* 316 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar _nextRequestId = 0;\r\n\texports.JSONP_HOME = '__ng_jsonp__';\r\n\tvar _jsonpConnections = null;\r\n\tfunction _getJsonpConnections() {\r\n\t    if (_jsonpConnections === null) {\r\n\t        _jsonpConnections = lang_1.global[exports.JSONP_HOME] = {};\r\n\t    }\r\n\t    return _jsonpConnections;\r\n\t}\r\n\t// Make sure not to evaluate this in a non-browser environment!\r\n\tvar BrowserJsonp = (function () {\r\n\t    function BrowserJsonp() {\r\n\t    }\r\n\t    // Construct a <script> element with the specified URL\r\n\t    BrowserJsonp.prototype.build = function (url) {\r\n\t        var node = document.createElement('script');\r\n\t        node.src = url;\r\n\t        return node;\r\n\t    };\r\n\t    BrowserJsonp.prototype.nextRequestID = function () { return \"__req\" + _nextRequestId++; };\r\n\t    BrowserJsonp.prototype.requestCallback = function (id) { return exports.JSONP_HOME + \".\" + id + \".finished\"; };\r\n\t    BrowserJsonp.prototype.exposeConnection = function (id, connection) {\r\n\t        var connections = _getJsonpConnections();\r\n\t        connections[id] = connection;\r\n\t    };\r\n\t    BrowserJsonp.prototype.removeConnection = function (id) {\r\n\t        var connections = _getJsonpConnections();\r\n\t        connections[id] = null;\r\n\t    };\r\n\t    // Attach the <script> element to the DOM\r\n\t    BrowserJsonp.prototype.send = function (node) { document.body.appendChild((node)); };\r\n\t    // Remove <script> element from the DOM\r\n\t    BrowserJsonp.prototype.cleanup = function (node) {\r\n\t        if (node.parentNode) {\r\n\t            node.parentNode.removeChild((node));\r\n\t        }\r\n\t    };\r\n\t    BrowserJsonp = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], BrowserJsonp);\r\n\t    return BrowserJsonp;\r\n\t})();\r\n\texports.BrowserJsonp = BrowserJsonp;\r\n\n\n/***/ },\n/* 317 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar interfaces_1 = __webpack_require__(209);\r\n\tvar enums_1 = __webpack_require__(64);\r\n\tvar static_response_1 = __webpack_require__(210);\r\n\tvar base_response_options_1 = __webpack_require__(137);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar browser_jsonp_1 = __webpack_require__(316);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar Observable_1 = __webpack_require__(2);\r\n\tvar JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\r\n\tvar JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';\r\n\t/**\r\n\t * Abstract base class for an in-flight JSONP request.\r\n\t */\r\n\tvar JSONPConnection = (function () {\r\n\t    function JSONPConnection() {\r\n\t    }\r\n\t    return JSONPConnection;\r\n\t})();\r\n\texports.JSONPConnection = JSONPConnection;\r\n\tvar JSONPConnection_ = (function (_super) {\r\n\t    __extends(JSONPConnection_, _super);\r\n\t    function JSONPConnection_(req, _dom, baseResponseOptions) {\r\n\t        var _this = this;\r\n\t        _super.call(this);\r\n\t        this._dom = _dom;\r\n\t        this.baseResponseOptions = baseResponseOptions;\r\n\t        this._finished = false;\r\n\t        if (req.method !== enums_1.RequestMethod.Get) {\r\n\t            throw exceptions_1.makeTypeError(JSONP_ERR_WRONG_METHOD);\r\n\t        }\r\n\t        this.request = req;\r\n\t        this.response = new Observable_1.Observable(function (responseObserver) {\r\n\t            _this.readyState = enums_1.ReadyState.Loading;\r\n\t            var id = _this._id = _dom.nextRequestID();\r\n\t            _dom.exposeConnection(id, _this);\r\n\t            // Workaround Dart\r\n\t            // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`);\r\n\t            var callback = _dom.requestCallback(_this._id);\r\n\t            var url = req.url;\r\n\t            if (url.indexOf('=JSONP_CALLBACK&') > -1) {\r\n\t                url = lang_1.StringWrapper.replace(url, '=JSONP_CALLBACK&', \"=\" + callback + \"&\");\r\n\t            }\r\n\t            else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {\r\n\t                url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + (\"=\" + callback);\r\n\t            }\r\n\t            var script = _this._script = _dom.build(url);\r\n\t            var onLoad = function (event) {\r\n\t                if (_this.readyState === enums_1.ReadyState.Cancelled)\r\n\t                    return;\r\n\t                _this.readyState = enums_1.ReadyState.Done;\r\n\t                _dom.cleanup(script);\r\n\t                if (!_this._finished) {\r\n\t                    var responseOptions_1 = new base_response_options_1.ResponseOptions({ body: JSONP_ERR_NO_CALLBACK, type: enums_1.ResponseType.Error, url: url });\r\n\t                    if (lang_1.isPresent(baseResponseOptions)) {\r\n\t                        responseOptions_1 = baseResponseOptions.merge(responseOptions_1);\r\n\t                    }\r\n\t                    responseObserver.error(new static_response_1.Response(responseOptions_1));\r\n\t                    return;\r\n\t                }\r\n\t                var responseOptions = new base_response_options_1.ResponseOptions({ body: _this._responseData, url: url });\r\n\t                if (lang_1.isPresent(_this.baseResponseOptions)) {\r\n\t                    responseOptions = _this.baseResponseOptions.merge(responseOptions);\r\n\t                }\r\n\t                responseObserver.next(new static_response_1.Response(responseOptions));\r\n\t                responseObserver.complete();\r\n\t            };\r\n\t            var onError = function (error) {\r\n\t                if (_this.readyState === enums_1.ReadyState.Cancelled)\r\n\t                    return;\r\n\t                _this.readyState = enums_1.ReadyState.Done;\r\n\t                _dom.cleanup(script);\r\n\t                var responseOptions = new base_response_options_1.ResponseOptions({ body: error.message, type: enums_1.ResponseType.Error });\r\n\t                if (lang_1.isPresent(baseResponseOptions)) {\r\n\t                    responseOptions = baseResponseOptions.merge(responseOptions);\r\n\t                }\r\n\t                responseObserver.error(new static_response_1.Response(responseOptions));\r\n\t            };\r\n\t            script.addEventListener('load', onLoad);\r\n\t            script.addEventListener('error', onError);\r\n\t            _dom.send(script);\r\n\t            return function () {\r\n\t                _this.readyState = enums_1.ReadyState.Cancelled;\r\n\t                script.removeEventListener('load', onLoad);\r\n\t                script.removeEventListener('error', onError);\r\n\t                if (lang_1.isPresent(script)) {\r\n\t                    _this._dom.cleanup(script);\r\n\t                }\r\n\t            };\r\n\t        });\r\n\t    }\r\n\t    JSONPConnection_.prototype.finished = function (data) {\r\n\t        // Don't leak connections\r\n\t        this._finished = true;\r\n\t        this._dom.removeConnection(this._id);\r\n\t        if (this.readyState === enums_1.ReadyState.Cancelled)\r\n\t            return;\r\n\t        this._responseData = data;\r\n\t    };\r\n\t    return JSONPConnection_;\r\n\t})(JSONPConnection);\r\n\texports.JSONPConnection_ = JSONPConnection_;\r\n\t/**\r\n\t * A {@link ConnectionBackend} that uses the JSONP strategy of making requests.\r\n\t */\r\n\tvar JSONPBackend = (function (_super) {\r\n\t    __extends(JSONPBackend, _super);\r\n\t    function JSONPBackend() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    return JSONPBackend;\r\n\t})(interfaces_1.ConnectionBackend);\r\n\texports.JSONPBackend = JSONPBackend;\r\n\tvar JSONPBackend_ = (function (_super) {\r\n\t    __extends(JSONPBackend_, _super);\r\n\t    function JSONPBackend_(_browserJSONP, _baseResponseOptions) {\r\n\t        _super.call(this);\r\n\t        this._browserJSONP = _browserJSONP;\r\n\t        this._baseResponseOptions = _baseResponseOptions;\r\n\t    }\r\n\t    JSONPBackend_.prototype.createConnection = function (request) {\r\n\t        return new JSONPConnection_(request, this._browserJSONP, this._baseResponseOptions);\r\n\t    };\r\n\t    JSONPBackend_ = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [browser_jsonp_1.BrowserJsonp, base_response_options_1.ResponseOptions])\r\n\t    ], JSONPBackend_);\r\n\t    return JSONPBackend_;\r\n\t})(JSONPBackend);\r\n\texports.JSONPBackend_ = JSONPBackend_;\r\n\n\n/***/ },\n/* 318 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar enums_1 = __webpack_require__(64);\r\n\tvar static_response_1 = __webpack_require__(210);\r\n\tvar headers_1 = __webpack_require__(102);\r\n\tvar base_response_options_1 = __webpack_require__(137);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar browser_xhr_1 = __webpack_require__(207);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar Observable_1 = __webpack_require__(2);\r\n\tvar http_utils_1 = __webpack_require__(138);\r\n\t/**\r\n\t* Creates connections using `XMLHttpRequest`. Given a fully-qualified\r\n\t* request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the\r\n\t* request.\r\n\t*\r\n\t* This class would typically not be created or interacted with directly inside applications, though\r\n\t* the {@link MockConnection} may be interacted with in tests.\r\n\t*/\r\n\tvar XHRConnection = (function () {\r\n\t    function XHRConnection(req, browserXHR, baseResponseOptions) {\r\n\t        var _this = this;\r\n\t        this.request = req;\r\n\t        this.response = new Observable_1.Observable(function (responseObserver) {\r\n\t            var _xhr = browserXHR.build();\r\n\t            _xhr.open(enums_1.RequestMethod[req.method].toUpperCase(), req.url);\r\n\t            // load event handler\r\n\t            var onLoad = function () {\r\n\t                // responseText is the old-school way of retrieving response (supported by IE8 & 9)\r\n\t                // response/responseType properties were introduced in XHR Level2 spec (supported by\r\n\t                // IE10)\r\n\t                var body = lang_1.isPresent(_xhr.response) ? _xhr.response : _xhr.responseText;\r\n\t                var headers = headers_1.Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders());\r\n\t                var url = http_utils_1.getResponseURL(_xhr);\r\n\t                // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\r\n\t                var status = _xhr.status === 1223 ? 204 : _xhr.status;\r\n\t                // fix status code when it is 0 (0 status is undocumented).\r\n\t                // Occurs when accessing file resources or on Android 4.1 stock browser\r\n\t                // while retrieving files from application cache.\r\n\t                if (status === 0) {\r\n\t                    status = body ? 200 : 0;\r\n\t                }\r\n\t                var responseOptions = new base_response_options_1.ResponseOptions({ body: body, status: status, headers: headers, url: url });\r\n\t                if (lang_1.isPresent(baseResponseOptions)) {\r\n\t                    responseOptions = baseResponseOptions.merge(responseOptions);\r\n\t                }\r\n\t                var response = new static_response_1.Response(responseOptions);\r\n\t                if (http_utils_1.isSuccess(status)) {\r\n\t                    responseObserver.next(response);\r\n\t                    // TODO(gdi2290): defer complete if array buffer until done\r\n\t                    responseObserver.complete();\r\n\t                    return;\r\n\t                }\r\n\t                responseObserver.error(response);\r\n\t            };\r\n\t            // error event handler\r\n\t            var onError = function (err) {\r\n\t                var responseOptions = new base_response_options_1.ResponseOptions({ body: err, type: enums_1.ResponseType.Error });\r\n\t                if (lang_1.isPresent(baseResponseOptions)) {\r\n\t                    responseOptions = baseResponseOptions.merge(responseOptions);\r\n\t                }\r\n\t                responseObserver.error(new static_response_1.Response(responseOptions));\r\n\t            };\r\n\t            if (lang_1.isPresent(req.headers)) {\r\n\t                req.headers.forEach(function (values, name) { return _xhr.setRequestHeader(name, values.join(',')); });\r\n\t            }\r\n\t            _xhr.addEventListener('load', onLoad);\r\n\t            _xhr.addEventListener('error', onError);\r\n\t            _xhr.send(_this.request.text());\r\n\t            return function () {\r\n\t                _xhr.removeEventListener('load', onLoad);\r\n\t                _xhr.removeEventListener('error', onError);\r\n\t                _xhr.abort();\r\n\t            };\r\n\t        });\r\n\t    }\r\n\t    return XHRConnection;\r\n\t})();\r\n\texports.XHRConnection = XHRConnection;\r\n\t/**\r\n\t * Creates {@link XHRConnection} instances.\r\n\t *\r\n\t * This class would typically not be used by end users, but could be\r\n\t * overridden if a different backend implementation should be used,\r\n\t * such as in a node backend.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Http, MyNodeBackend, HTTP_PROVIDERS, BaseRequestOptions} from 'angular2/http';\r\n\t * @Component({\r\n\t *   viewProviders: [\r\n\t *     HTTP_PROVIDERS,\r\n\t *     provide(Http, {useFactory: (backend, options) => {\r\n\t *       return new Http(backend, options);\r\n\t *     }, deps: [MyNodeBackend, BaseRequestOptions]})]\r\n\t * })\r\n\t * class MyComponent {\r\n\t *   constructor(http:Http) {\r\n\t *     http.request('people.json').subscribe(res => this.people = res.json());\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t **/\r\n\tvar XHRBackend = (function () {\r\n\t    function XHRBackend(_browserXHR, _baseResponseOptions) {\r\n\t        this._browserXHR = _browserXHR;\r\n\t        this._baseResponseOptions = _baseResponseOptions;\r\n\t    }\r\n\t    XHRBackend.prototype.createConnection = function (request) {\r\n\t        return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);\r\n\t    };\r\n\t    XHRBackend = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [browser_xhr_1.BrowserXhr, base_response_options_1.ResponseOptions])\r\n\t    ], XHRBackend);\r\n\t    return XHRBackend;\r\n\t})();\r\n\texports.XHRBackend = XHRBackend;\r\n\n\n/***/ },\n/* 319 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar interfaces_1 = __webpack_require__(209);\r\n\tvar static_request_1 = __webpack_require__(320);\r\n\tvar base_request_options_1 = __webpack_require__(208);\r\n\tvar enums_1 = __webpack_require__(64);\r\n\tfunction httpRequest(backend, request) {\r\n\t    return backend.createConnection(request).response;\r\n\t}\r\n\tfunction mergeOptions(defaultOpts, providedOpts, method, url) {\r\n\t    var newOptions = defaultOpts;\r\n\t    if (lang_1.isPresent(providedOpts)) {\r\n\t        // Hack so Dart can used named parameters\r\n\t        return newOptions.merge(new base_request_options_1.RequestOptions({\r\n\t            method: providedOpts.method || method,\r\n\t            url: providedOpts.url || url,\r\n\t            search: providedOpts.search,\r\n\t            headers: providedOpts.headers,\r\n\t            body: providedOpts.body\r\n\t        }));\r\n\t    }\r\n\t    if (lang_1.isPresent(method)) {\r\n\t        return newOptions.merge(new base_request_options_1.RequestOptions({ method: method, url: url }));\r\n\t    }\r\n\t    else {\r\n\t        return newOptions.merge(new base_request_options_1.RequestOptions({ url: url }));\r\n\t    }\r\n\t}\r\n\t/**\r\n\t * Performs http requests using `XMLHttpRequest` as the default backend.\r\n\t *\r\n\t * `Http` is available as an injectable class, with methods to perform http requests. Calling\r\n\t * `request` returns an `Observable` which will emit a single {@link Response} when a\r\n\t * response is received.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * import {Http, HTTP_PROVIDERS} from 'angular2/http';\r\n\t * @Component({\r\n\t *   selector: 'http-app',\r\n\t *   viewProviders: [HTTP_PROVIDERS],\r\n\t *   templateUrl: 'people.html'\r\n\t * })\r\n\t * class PeopleComponent {\r\n\t *   constructor(http: Http) {\r\n\t *     http.get('people.json')\r\n\t *       // Call map on the response observable to get the parsed people object\r\n\t *       .map(res => res.json())\r\n\t *       // Subscribe to the observable to get the parsed people object and attach it to the\r\n\t *       // component\r\n\t *       .subscribe(people => this.people = people);\r\n\t *   }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * http.get('people.json').observer({next: (value) => this.people = value});\r\n\t * ```\r\n\t *\r\n\t * The default construct used to perform requests, `XMLHttpRequest`, is abstracted as a \"Backend\" (\r\n\t * {@link XHRBackend} in this case), which could be mocked with dependency injection by replacing\r\n\t * the {@link XHRBackend} provider, as in the following example:\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * import {BaseRequestOptions, Http} from 'angular2/http';\r\n\t * import {MockBackend} from 'angular2/http/testing';\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *   BaseRequestOptions,\r\n\t *   MockBackend,\r\n\t *   provide(Http, {useFactory:\r\n\t *       function(backend, defaultOptions) {\r\n\t *         return new Http(backend, defaultOptions);\r\n\t *       },\r\n\t *       deps: [MockBackend, BaseRequestOptions]})\r\n\t * ]);\r\n\t * var http = injector.get(Http);\r\n\t * http.get('request-from-mock-backend.json').subscribe((res:Response) => doSomething(res));\r\n\t * ```\r\n\t *\r\n\t **/\r\n\tvar Http = (function () {\r\n\t    function Http(_backend, _defaultOptions) {\r\n\t        this._backend = _backend;\r\n\t        this._defaultOptions = _defaultOptions;\r\n\t    }\r\n\t    /**\r\n\t     * Performs any type of http request. First argument is required, and can either be a url or\r\n\t     * a {@link Request} instance. If the first argument is a url, an optional {@link RequestOptions}\r\n\t     * object can be provided as the 2nd argument. The options object will be merged with the values\r\n\t     * of {@link BaseRequestOptions} before performing the request.\r\n\t     */\r\n\t    Http.prototype.request = function (url, options) {\r\n\t        var responseObservable;\r\n\t        if (lang_1.isString(url)) {\r\n\t            responseObservable = httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Get, url)));\r\n\t        }\r\n\t        else if (url instanceof static_request_1.Request) {\r\n\t            responseObservable = httpRequest(this._backend, url);\r\n\t        }\r\n\t        else {\r\n\t            throw exceptions_1.makeTypeError('First argument must be a url string or Request instance.');\r\n\t        }\r\n\t        return responseObservable;\r\n\t    };\r\n\t    /**\r\n\t     * Performs a request with `get` http method.\r\n\t     */\r\n\t    Http.prototype.get = function (url, options) {\r\n\t        return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Get, url)));\r\n\t    };\r\n\t    /**\r\n\t     * Performs a request with `post` http method.\r\n\t     */\r\n\t    Http.prototype.post = function (url, body, options) {\r\n\t        return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({ body: body })), options, enums_1.RequestMethod.Post, url)));\r\n\t    };\r\n\t    /**\r\n\t     * Performs a request with `put` http method.\r\n\t     */\r\n\t    Http.prototype.put = function (url, body, options) {\r\n\t        return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({ body: body })), options, enums_1.RequestMethod.Put, url)));\r\n\t    };\r\n\t    /**\r\n\t     * Performs a request with `delete` http method.\r\n\t     */\r\n\t    Http.prototype.delete = function (url, options) {\r\n\t        return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Delete, url)));\r\n\t    };\r\n\t    /**\r\n\t     * Performs a request with `patch` http method.\r\n\t     */\r\n\t    Http.prototype.patch = function (url, body, options) {\r\n\t        return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions.merge(new base_request_options_1.RequestOptions({ body: body })), options, enums_1.RequestMethod.Patch, url)));\r\n\t    };\r\n\t    /**\r\n\t     * Performs a request with `head` http method.\r\n\t     */\r\n\t    Http.prototype.head = function (url, options) {\r\n\t        return httpRequest(this._backend, new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Head, url)));\r\n\t    };\r\n\t    Http = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [interfaces_1.ConnectionBackend, base_request_options_1.RequestOptions])\r\n\t    ], Http);\r\n\t    return Http;\r\n\t})();\r\n\texports.Http = Http;\r\n\tvar Jsonp = (function (_super) {\r\n\t    __extends(Jsonp, _super);\r\n\t    function Jsonp(backend, defaultOptions) {\r\n\t        _super.call(this, backend, defaultOptions);\r\n\t    }\r\n\t    /**\r\n\t     * Performs any type of http request. First argument is required, and can either be a url or\r\n\t     * a {@link Request} instance. If the first argument is a url, an optional {@link RequestOptions}\r\n\t     * object can be provided as the 2nd argument. The options object will be merged with the values\r\n\t     * of {@link BaseRequestOptions} before performing the request.\r\n\t     */\r\n\t    Jsonp.prototype.request = function (url, options) {\r\n\t        var responseObservable;\r\n\t        if (lang_1.isString(url)) {\r\n\t            url =\r\n\t                new static_request_1.Request(mergeOptions(this._defaultOptions, options, enums_1.RequestMethod.Get, url));\r\n\t        }\r\n\t        if (url instanceof static_request_1.Request) {\r\n\t            if (url.method !== enums_1.RequestMethod.Get) {\r\n\t                exceptions_1.makeTypeError('JSONP requests must use GET request method.');\r\n\t            }\r\n\t            responseObservable = httpRequest(this._backend, url);\r\n\t        }\r\n\t        else {\r\n\t            throw exceptions_1.makeTypeError('First argument must be a url string or Request instance.');\r\n\t        }\r\n\t        return responseObservable;\r\n\t    };\r\n\t    Jsonp = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [interfaces_1.ConnectionBackend, base_request_options_1.RequestOptions])\r\n\t    ], Jsonp);\r\n\t    return Jsonp;\r\n\t})(Http);\r\n\texports.Jsonp = Jsonp;\r\n\n\n/***/ },\n/* 320 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var headers_1 = __webpack_require__(102);\r\n\tvar http_utils_1 = __webpack_require__(138);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t// TODO(jeffbcross): properly implement body accessors\r\n\t/**\r\n\t * Creates `Request` instances from provided values.\r\n\t *\r\n\t * The Request's interface is inspired by the Request constructor defined in the [Fetch\r\n\t * Spec](https://fetch.spec.whatwg.org/#request-class),\r\n\t * but is considered a static value whose body can be accessed many times. There are other\r\n\t * differences in the implementation, but this is the most significant.\r\n\t *\r\n\t * `Request` instances are typically created by higher-level classes, like {@link Http} and\r\n\t * {@link Jsonp}, but it may occasionally be useful to explicitly create `Request` instances.\r\n\t * One such example is when creating services that wrap higher-level services, like {@link Http},\r\n\t * where it may be useful to generate a `Request` with arbitrary headers and search params.\r\n\t *\r\n\t * ```typescript\r\n\t * import {Injectable, Injector} from 'angular2/core';\r\n\t * import {HTTP_PROVIDERS, Http, Request, RequestMethod} from 'angular2/http';\r\n\t *\r\n\t * @Injectable()\r\n\t * class AutoAuthenticator {\r\n\t *   constructor(public http:Http) {}\r\n\t *   request(url:string) {\r\n\t *     return this.http.request(new Request({\r\n\t *       method: RequestMethod.Get,\r\n\t *       url: url,\r\n\t *       search: 'password=123'\r\n\t *     }));\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([HTTP_PROVIDERS, AutoAuthenticator]);\r\n\t * var authenticator = injector.get(AutoAuthenticator);\r\n\t * authenticator.request('people.json').subscribe(res => {\r\n\t *   //URL should have included '?password=123'\r\n\t *   console.log('people', res.json());\r\n\t * });\r\n\t * ```\r\n\t */\r\n\tvar Request = (function () {\r\n\t    function Request(requestOptions) {\r\n\t        // TODO: assert that url is present\r\n\t        var url = requestOptions.url;\r\n\t        this.url = requestOptions.url;\r\n\t        if (lang_1.isPresent(requestOptions.search)) {\r\n\t            var search = requestOptions.search.toString();\r\n\t            if (search.length > 0) {\r\n\t                var prefix = '?';\r\n\t                if (lang_1.StringWrapper.contains(this.url, '?')) {\r\n\t                    prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';\r\n\t                }\r\n\t                // TODO: just delete search-query-looking string in url?\r\n\t                this.url = url + prefix + search;\r\n\t            }\r\n\t        }\r\n\t        this._body = requestOptions.body;\r\n\t        this.method = http_utils_1.normalizeMethodName(requestOptions.method);\r\n\t        // TODO(jeffbcross): implement behavior\r\n\t        // Defaults to 'omit', consistent with browser\r\n\t        // TODO(jeffbcross): implement behavior\r\n\t        this.headers = new headers_1.Headers(requestOptions.headers);\r\n\t    }\r\n\t    /**\r\n\t     * Returns the request's body as string, assuming that body exists. If body is undefined, return\r\n\t     * empty\r\n\t     * string.\r\n\t     */\r\n\t    Request.prototype.text = function () { return lang_1.isPresent(this._body) ? this._body.toString() : ''; };\r\n\t    return Request;\r\n\t})();\r\n\texports.Request = Request;\r\n\n\n/***/ },\n/* 321 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tfunction paramParser(rawParams) {\r\n\t    if (rawParams === void 0) { rawParams = ''; }\r\n\t    var map = new collection_1.Map();\r\n\t    if (rawParams.length > 0) {\r\n\t        var params = rawParams.split('&');\r\n\t        params.forEach(function (param) {\r\n\t            var split = param.split('=');\r\n\t            var key = split[0];\r\n\t            var val = split[1];\r\n\t            var list = lang_1.isPresent(map.get(key)) ? map.get(key) : [];\r\n\t            list.push(val);\r\n\t            map.set(key, list);\r\n\t        });\r\n\t    }\r\n\t    return map;\r\n\t}\r\n\t/**\r\n\t * Map-like representation of url search parameters, based on\r\n\t * [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,\r\n\t * with several extensions for merging URLSearchParams objects:\r\n\t *   - setAll()\r\n\t *   - appendAll()\r\n\t *   - replaceAll()\r\n\t */\r\n\tvar URLSearchParams = (function () {\r\n\t    function URLSearchParams(rawParams) {\r\n\t        if (rawParams === void 0) { rawParams = ''; }\r\n\t        this.rawParams = rawParams;\r\n\t        this.paramsMap = paramParser(rawParams);\r\n\t    }\r\n\t    URLSearchParams.prototype.clone = function () {\r\n\t        var clone = new URLSearchParams();\r\n\t        clone.appendAll(this);\r\n\t        return clone;\r\n\t    };\r\n\t    URLSearchParams.prototype.has = function (param) { return this.paramsMap.has(param); };\r\n\t    URLSearchParams.prototype.get = function (param) {\r\n\t        var storedParam = this.paramsMap.get(param);\r\n\t        if (collection_1.isListLikeIterable(storedParam)) {\r\n\t            return collection_1.ListWrapper.first(storedParam);\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t    };\r\n\t    URLSearchParams.prototype.getAll = function (param) {\r\n\t        var mapParam = this.paramsMap.get(param);\r\n\t        return lang_1.isPresent(mapParam) ? mapParam : [];\r\n\t    };\r\n\t    URLSearchParams.prototype.set = function (param, val) {\r\n\t        var mapParam = this.paramsMap.get(param);\r\n\t        var list = lang_1.isPresent(mapParam) ? mapParam : [];\r\n\t        collection_1.ListWrapper.clear(list);\r\n\t        list.push(val);\r\n\t        this.paramsMap.set(param, list);\r\n\t    };\r\n\t    // A merge operation\r\n\t    // For each name-values pair in `searchParams`, perform `set(name, values[0])`\r\n\t    //\r\n\t    // E.g: \"a=[1,2,3], c=[8]\" + \"a=[4,5,6], b=[7]\" = \"a=[4], c=[8], b=[7]\"\r\n\t    //\r\n\t    // TODO(@caitp): document this better\r\n\t    URLSearchParams.prototype.setAll = function (searchParams) {\r\n\t        var _this = this;\r\n\t        searchParams.paramsMap.forEach(function (value, param) {\r\n\t            var mapParam = _this.paramsMap.get(param);\r\n\t            var list = lang_1.isPresent(mapParam) ? mapParam : [];\r\n\t            collection_1.ListWrapper.clear(list);\r\n\t            list.push(value[0]);\r\n\t            _this.paramsMap.set(param, list);\r\n\t        });\r\n\t    };\r\n\t    URLSearchParams.prototype.append = function (param, val) {\r\n\t        var mapParam = this.paramsMap.get(param);\r\n\t        var list = lang_1.isPresent(mapParam) ? mapParam : [];\r\n\t        list.push(val);\r\n\t        this.paramsMap.set(param, list);\r\n\t    };\r\n\t    // A merge operation\r\n\t    // For each name-values pair in `searchParams`, perform `append(name, value)`\r\n\t    // for each value in `values`.\r\n\t    //\r\n\t    // E.g: \"a=[1,2], c=[8]\" + \"a=[3,4], b=[7]\" = \"a=[1,2,3,4], c=[8], b=[7]\"\r\n\t    //\r\n\t    // TODO(@caitp): document this better\r\n\t    URLSearchParams.prototype.appendAll = function (searchParams) {\r\n\t        var _this = this;\r\n\t        searchParams.paramsMap.forEach(function (value, param) {\r\n\t            var mapParam = _this.paramsMap.get(param);\r\n\t            var list = lang_1.isPresent(mapParam) ? mapParam : [];\r\n\t            for (var i = 0; i < value.length; ++i) {\r\n\t                list.push(value[i]);\r\n\t            }\r\n\t            _this.paramsMap.set(param, list);\r\n\t        });\r\n\t    };\r\n\t    // A merge operation\r\n\t    // For each name-values pair in `searchParams`, perform `delete(name)`,\r\n\t    // followed by `set(name, values)`\r\n\t    //\r\n\t    // E.g: \"a=[1,2,3], c=[8]\" + \"a=[4,5,6], b=[7]\" = \"a=[4,5,6], c=[8], b=[7]\"\r\n\t    //\r\n\t    // TODO(@caitp): document this better\r\n\t    URLSearchParams.prototype.replaceAll = function (searchParams) {\r\n\t        var _this = this;\r\n\t        searchParams.paramsMap.forEach(function (value, param) {\r\n\t            var mapParam = _this.paramsMap.get(param);\r\n\t            var list = lang_1.isPresent(mapParam) ? mapParam : [];\r\n\t            collection_1.ListWrapper.clear(list);\r\n\t            for (var i = 0; i < value.length; ++i) {\r\n\t                list.push(value[i]);\r\n\t            }\r\n\t            _this.paramsMap.set(param, list);\r\n\t        });\r\n\t    };\r\n\t    URLSearchParams.prototype.toString = function () {\r\n\t        var paramsList = [];\r\n\t        this.paramsMap.forEach(function (values, k) { values.forEach(function (v) { return paramsList.push(k + '=' + v); }); });\r\n\t        return paramsList.join('&');\r\n\t    };\r\n\t    URLSearchParams.prototype.delete = function (param) { this.paramsMap.delete(param); };\r\n\t    return URLSearchParams;\r\n\t})();\r\n\texports.URLSearchParams = URLSearchParams;\r\n\n\n/***/ },\n/* 322 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar generic_browser_adapter_1 = __webpack_require__(626);\r\n\tvar _attrToPropMap = {\r\n\t    'class': 'className',\r\n\t    'innerHtml': 'innerHTML',\r\n\t    'readonly': 'readOnly',\r\n\t    'tabindex': 'tabIndex'\r\n\t};\r\n\tvar DOM_KEY_LOCATION_NUMPAD = 3;\r\n\t// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\r\n\tvar _keyMap = {\r\n\t    // The following values are here for cross-browser compatibility and to match the W3C standard\r\n\t    // cf http://www.w3.org/TR/DOM-Level-3-Events-key/\r\n\t    '\\b': 'Backspace',\r\n\t    '\\t': 'Tab',\r\n\t    '\\x7F': 'Delete',\r\n\t    '\\x1B': 'Escape',\r\n\t    'Del': 'Delete',\r\n\t    'Esc': 'Escape',\r\n\t    'Left': 'ArrowLeft',\r\n\t    'Right': 'ArrowRight',\r\n\t    'Up': 'ArrowUp',\r\n\t    'Down': 'ArrowDown',\r\n\t    'Menu': 'ContextMenu',\r\n\t    'Scroll': 'ScrollLock',\r\n\t    'Win': 'OS'\r\n\t};\r\n\t// There is a bug in Chrome for numeric keypad keys:\r\n\t// https://code.google.com/p/chromium/issues/detail?id=155654\r\n\t// 1, 2, 3 ... are reported as A, B, C ...\r\n\tvar _chromeNumKeyPadMap = {\r\n\t    'A': '1',\r\n\t    'B': '2',\r\n\t    'C': '3',\r\n\t    'D': '4',\r\n\t    'E': '5',\r\n\t    'F': '6',\r\n\t    'G': '7',\r\n\t    'H': '8',\r\n\t    'I': '9',\r\n\t    'J': '*',\r\n\t    'K': '+',\r\n\t    'M': '-',\r\n\t    'N': '.',\r\n\t    'O': '/',\r\n\t    '\\x60': '0',\r\n\t    '\\x90': 'NumLock'\r\n\t};\r\n\t/**\r\n\t * A `DomAdapter` powered by full browser DOM APIs.\r\n\t */\r\n\t/* tslint:disable:requireParameterType */\r\n\tvar BrowserDomAdapter = (function (_super) {\r\n\t    __extends(BrowserDomAdapter, _super);\r\n\t    function BrowserDomAdapter() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    BrowserDomAdapter.prototype.parse = function (templateHtml) { throw new Error(\"parse not implemented\"); };\r\n\t    BrowserDomAdapter.makeCurrent = function () { dom_adapter_1.setRootDomAdapter(new BrowserDomAdapter()); };\r\n\t    BrowserDomAdapter.prototype.hasProperty = function (element, name) { return name in element; };\r\n\t    BrowserDomAdapter.prototype.setProperty = function (el, name, value) { el[name] = value; };\r\n\t    BrowserDomAdapter.prototype.getProperty = function (el, name) { return el[name]; };\r\n\t    BrowserDomAdapter.prototype.invoke = function (el, methodName, args) {\r\n\t        el[methodName].apply(el, args);\r\n\t    };\r\n\t    // TODO(tbosch): move this into a separate environment class once we have it\r\n\t    BrowserDomAdapter.prototype.logError = function (error) {\r\n\t        if (window.console.error) {\r\n\t            window.console.error(error);\r\n\t        }\r\n\t        else {\r\n\t            window.console.log(error);\r\n\t        }\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.log = function (error) { window.console.log(error); };\r\n\t    BrowserDomAdapter.prototype.logGroup = function (error) {\r\n\t        if (window.console.group) {\r\n\t            window.console.group(error);\r\n\t            this.logError(error);\r\n\t        }\r\n\t        else {\r\n\t            window.console.log(error);\r\n\t        }\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.logGroupEnd = function () {\r\n\t        if (window.console.groupEnd) {\r\n\t            window.console.groupEnd();\r\n\t        }\r\n\t    };\r\n\t    Object.defineProperty(BrowserDomAdapter.prototype, \"attrToPropMap\", {\r\n\t        get: function () { return _attrToPropMap; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BrowserDomAdapter.prototype.query = function (selector) { return document.querySelector(selector); };\r\n\t    BrowserDomAdapter.prototype.querySelector = function (el, selector) { return el.querySelector(selector); };\r\n\t    BrowserDomAdapter.prototype.querySelectorAll = function (el, selector) { return el.querySelectorAll(selector); };\r\n\t    BrowserDomAdapter.prototype.on = function (el, evt, listener) { el.addEventListener(evt, listener, false); };\r\n\t    BrowserDomAdapter.prototype.onAndCancel = function (el, evt, listener) {\r\n\t        el.addEventListener(evt, listener, false);\r\n\t        // Needed to follow Dart's subscription semantic, until fix of\r\n\t        // https://code.google.com/p/dart/issues/detail?id=17406\r\n\t        return function () { el.removeEventListener(evt, listener, false); };\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.dispatchEvent = function (el, evt) { el.dispatchEvent(evt); };\r\n\t    BrowserDomAdapter.prototype.createMouseEvent = function (eventType) {\r\n\t        var evt = document.createEvent('MouseEvent');\r\n\t        evt.initEvent(eventType, true, true);\r\n\t        return evt;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createEvent = function (eventType) {\r\n\t        var evt = document.createEvent('Event');\r\n\t        evt.initEvent(eventType, true, true);\r\n\t        return evt;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.preventDefault = function (evt) {\r\n\t        evt.preventDefault();\r\n\t        evt.returnValue = false;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.isPrevented = function (evt) {\r\n\t        return evt.defaultPrevented || lang_1.isPresent(evt.returnValue) && !evt.returnValue;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getInnerHTML = function (el) { return el.innerHTML; };\r\n\t    BrowserDomAdapter.prototype.getOuterHTML = function (el) { return el.outerHTML; };\r\n\t    BrowserDomAdapter.prototype.nodeName = function (node) { return node.nodeName; };\r\n\t    BrowserDomAdapter.prototype.nodeValue = function (node) { return node.nodeValue; };\r\n\t    BrowserDomAdapter.prototype.type = function (node) { return node.type; };\r\n\t    BrowserDomAdapter.prototype.content = function (node) {\r\n\t        if (this.hasProperty(node, \"content\")) {\r\n\t            return node.content;\r\n\t        }\r\n\t        else {\r\n\t            return node;\r\n\t        }\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.firstChild = function (el) { return el.firstChild; };\r\n\t    BrowserDomAdapter.prototype.nextSibling = function (el) { return el.nextSibling; };\r\n\t    BrowserDomAdapter.prototype.parentElement = function (el) { return el.parentNode; };\r\n\t    BrowserDomAdapter.prototype.childNodes = function (el) { return el.childNodes; };\r\n\t    BrowserDomAdapter.prototype.childNodesAsList = function (el) {\r\n\t        var childNodes = el.childNodes;\r\n\t        var res = collection_1.ListWrapper.createFixedSize(childNodes.length);\r\n\t        for (var i = 0; i < childNodes.length; i++) {\r\n\t            res[i] = childNodes[i];\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.clearNodes = function (el) {\r\n\t        while (el.firstChild) {\r\n\t            el.removeChild(el.firstChild);\r\n\t        }\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.appendChild = function (el, node) { el.appendChild(node); };\r\n\t    BrowserDomAdapter.prototype.removeChild = function (el, node) { el.removeChild(node); };\r\n\t    BrowserDomAdapter.prototype.replaceChild = function (el, newChild, oldChild) { el.replaceChild(newChild, oldChild); };\r\n\t    BrowserDomAdapter.prototype.remove = function (node) {\r\n\t        if (node.parentNode) {\r\n\t            node.parentNode.removeChild(node);\r\n\t        }\r\n\t        return node;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.insertBefore = function (el, node) { el.parentNode.insertBefore(node, el); };\r\n\t    BrowserDomAdapter.prototype.insertAllBefore = function (el, nodes) { nodes.forEach(function (n) { return el.parentNode.insertBefore(n, el); }); };\r\n\t    BrowserDomAdapter.prototype.insertAfter = function (el, node) { el.parentNode.insertBefore(node, el.nextSibling); };\r\n\t    BrowserDomAdapter.prototype.setInnerHTML = function (el, value) { el.innerHTML = value; };\r\n\t    BrowserDomAdapter.prototype.getText = function (el) { return el.textContent; };\r\n\t    // TODO(vicb): removed Element type because it does not support StyleElement\r\n\t    BrowserDomAdapter.prototype.setText = function (el, value) { el.textContent = value; };\r\n\t    BrowserDomAdapter.prototype.getValue = function (el) { return el.value; };\r\n\t    BrowserDomAdapter.prototype.setValue = function (el, value) { el.value = value; };\r\n\t    BrowserDomAdapter.prototype.getChecked = function (el) { return el.checked; };\r\n\t    BrowserDomAdapter.prototype.setChecked = function (el, value) { el.checked = value; };\r\n\t    BrowserDomAdapter.prototype.createComment = function (text) { return document.createComment(text); };\r\n\t    BrowserDomAdapter.prototype.createTemplate = function (html) {\r\n\t        var t = document.createElement('template');\r\n\t        t.innerHTML = html;\r\n\t        return t;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createElement = function (tagName, doc) {\r\n\t        if (doc === void 0) { doc = document; }\r\n\t        return doc.createElement(tagName);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createElementNS = function (ns, tagName, doc) {\r\n\t        if (doc === void 0) { doc = document; }\r\n\t        return doc.createElementNS(ns, tagName);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createTextNode = function (text, doc) {\r\n\t        if (doc === void 0) { doc = document; }\r\n\t        return doc.createTextNode(text);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createScriptTag = function (attrName, attrValue, doc) {\r\n\t        if (doc === void 0) { doc = document; }\r\n\t        var el = doc.createElement('SCRIPT');\r\n\t        el.setAttribute(attrName, attrValue);\r\n\t        return el;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createStyleElement = function (css, doc) {\r\n\t        if (doc === void 0) { doc = document; }\r\n\t        var style = doc.createElement('style');\r\n\t        this.appendChild(style, this.createTextNode(css));\r\n\t        return style;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.createShadowRoot = function (el) { return el.createShadowRoot(); };\r\n\t    BrowserDomAdapter.prototype.getShadowRoot = function (el) { return el.shadowRoot; };\r\n\t    BrowserDomAdapter.prototype.getHost = function (el) { return el.host; };\r\n\t    BrowserDomAdapter.prototype.clone = function (node) { return node.cloneNode(true); };\r\n\t    BrowserDomAdapter.prototype.getElementsByClassName = function (element, name) {\r\n\t        return element.getElementsByClassName(name);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getElementsByTagName = function (element, name) {\r\n\t        return element.getElementsByTagName(name);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.classList = function (element) { return Array.prototype.slice.call(element.classList, 0); };\r\n\t    BrowserDomAdapter.prototype.addClass = function (element, className) { element.classList.add(className); };\r\n\t    BrowserDomAdapter.prototype.removeClass = function (element, className) { element.classList.remove(className); };\r\n\t    BrowserDomAdapter.prototype.hasClass = function (element, className) { return element.classList.contains(className); };\r\n\t    BrowserDomAdapter.prototype.setStyle = function (element, styleName, styleValue) {\r\n\t        element.style[styleName] = styleValue;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.removeStyle = function (element, stylename) { element.style[stylename] = null; };\r\n\t    BrowserDomAdapter.prototype.getStyle = function (element, stylename) { return element.style[stylename]; };\r\n\t    BrowserDomAdapter.prototype.hasStyle = function (element, styleName, styleValue) {\r\n\t        if (styleValue === void 0) { styleValue = null; }\r\n\t        var value = this.getStyle(element, styleName) || '';\r\n\t        return styleValue ? value == styleValue : value.length > 0;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.tagName = function (element) { return element.tagName; };\r\n\t    BrowserDomAdapter.prototype.attributeMap = function (element) {\r\n\t        var res = new Map();\r\n\t        var elAttrs = element.attributes;\r\n\t        for (var i = 0; i < elAttrs.length; i++) {\r\n\t            var attrib = elAttrs[i];\r\n\t            res.set(attrib.name, attrib.value);\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.hasAttribute = function (element, attribute) { return element.hasAttribute(attribute); };\r\n\t    BrowserDomAdapter.prototype.hasAttributeNS = function (element, ns, attribute) {\r\n\t        return element.hasAttributeNS(ns, attribute);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getAttribute = function (element, attribute) { return element.getAttribute(attribute); };\r\n\t    BrowserDomAdapter.prototype.getAttributeNS = function (element, ns, name) {\r\n\t        return element.getAttributeNS(ns, name);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.setAttribute = function (element, name, value) { element.setAttribute(name, value); };\r\n\t    BrowserDomAdapter.prototype.setAttributeNS = function (element, ns, name, value) {\r\n\t        element.setAttributeNS(ns, name, value);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.removeAttribute = function (element, attribute) { element.removeAttribute(attribute); };\r\n\t    BrowserDomAdapter.prototype.removeAttributeNS = function (element, ns, name) { element.removeAttributeNS(ns, name); };\r\n\t    BrowserDomAdapter.prototype.templateAwareRoot = function (el) { return this.isTemplateElement(el) ? this.content(el) : el; };\r\n\t    BrowserDomAdapter.prototype.createHtmlDocument = function () {\r\n\t        return document.implementation.createHTMLDocument('fakeTitle');\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.defaultDoc = function () { return document; };\r\n\t    BrowserDomAdapter.prototype.getBoundingClientRect = function (el) {\r\n\t        try {\r\n\t            return el.getBoundingClientRect();\r\n\t        }\r\n\t        catch (e) {\r\n\t            return { top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0 };\r\n\t        }\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getTitle = function () { return document.title; };\r\n\t    BrowserDomAdapter.prototype.setTitle = function (newTitle) { document.title = newTitle || ''; };\r\n\t    BrowserDomAdapter.prototype.elementMatches = function (n, selector) {\r\n\t        var matches = false;\r\n\t        if (n instanceof HTMLElement) {\r\n\t            if (n.matches) {\r\n\t                matches = n.matches(selector);\r\n\t            }\r\n\t            else if (n.msMatchesSelector) {\r\n\t                matches = n.msMatchesSelector(selector);\r\n\t            }\r\n\t            else if (n.webkitMatchesSelector) {\r\n\t                matches = n.webkitMatchesSelector(selector);\r\n\t            }\r\n\t        }\r\n\t        return matches;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.isTemplateElement = function (el) {\r\n\t        return el instanceof HTMLElement && el.nodeName == \"TEMPLATE\";\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };\r\n\t    BrowserDomAdapter.prototype.isCommentNode = function (node) { return node.nodeType === Node.COMMENT_NODE; };\r\n\t    BrowserDomAdapter.prototype.isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };\r\n\t    BrowserDomAdapter.prototype.hasShadowRoot = function (node) { return node instanceof HTMLElement && lang_1.isPresent(node.shadowRoot); };\r\n\t    BrowserDomAdapter.prototype.isShadowRoot = function (node) { return node instanceof DocumentFragment; };\r\n\t    BrowserDomAdapter.prototype.importIntoDoc = function (node) {\r\n\t        var toImport = node;\r\n\t        if (this.isTemplateElement(node)) {\r\n\t            toImport = this.content(node);\r\n\t        }\r\n\t        return document.importNode(toImport, true);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.adoptNode = function (node) { return document.adoptNode(node); };\r\n\t    BrowserDomAdapter.prototype.getHref = function (el) { return el.href; };\r\n\t    BrowserDomAdapter.prototype.getEventKey = function (event) {\r\n\t        var key = event.key;\r\n\t        if (lang_1.isBlank(key)) {\r\n\t            key = event.keyIdentifier;\r\n\t            // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and\r\n\t            // Safari\r\n\t            // cf\r\n\t            // http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces\r\n\t            if (lang_1.isBlank(key)) {\r\n\t                return 'Unidentified';\r\n\t            }\r\n\t            if (key.startsWith('U+')) {\r\n\t                key = String.fromCharCode(parseInt(key.substring(2), 16));\r\n\t                if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {\r\n\t                    // There is a bug in Chrome for numeric keypad keys:\r\n\t                    // https://code.google.com/p/chromium/issues/detail?id=155654\r\n\t                    // 1, 2, 3 ... are reported as A, B, C ...\r\n\t                    key = _chromeNumKeyPadMap[key];\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (_keyMap.hasOwnProperty(key)) {\r\n\t            key = _keyMap[key];\r\n\t        }\r\n\t        return key;\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getGlobalEventTarget = function (target) {\r\n\t        if (target == \"window\") {\r\n\t            return window;\r\n\t        }\r\n\t        else if (target == \"document\") {\r\n\t            return document;\r\n\t        }\r\n\t        else if (target == \"body\") {\r\n\t            return document.body;\r\n\t        }\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getHistory = function () { return window.history; };\r\n\t    BrowserDomAdapter.prototype.getLocation = function () { return window.location; };\r\n\t    BrowserDomAdapter.prototype.getBaseHref = function () {\r\n\t        var href = getBaseElementHref();\r\n\t        if (lang_1.isBlank(href)) {\r\n\t            return null;\r\n\t        }\r\n\t        return relativePath(href);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.resetBaseElement = function () { baseElement = null; };\r\n\t    BrowserDomAdapter.prototype.getUserAgent = function () { return window.navigator.userAgent; };\r\n\t    BrowserDomAdapter.prototype.setData = function (element, name, value) {\r\n\t        this.setAttribute(element, 'data-' + name, value);\r\n\t    };\r\n\t    BrowserDomAdapter.prototype.getData = function (element, name) { return this.getAttribute(element, 'data-' + name); };\r\n\t    BrowserDomAdapter.prototype.getComputedStyle = function (element) { return getComputedStyle(element); };\r\n\t    // TODO(tbosch): move this into a separate environment class once we have it\r\n\t    BrowserDomAdapter.prototype.setGlobalVar = function (path, value) { lang_1.setValueOnPath(lang_1.global, path, value); };\r\n\t    BrowserDomAdapter.prototype.requestAnimationFrame = function (callback) { return window.requestAnimationFrame(callback); };\r\n\t    BrowserDomAdapter.prototype.cancelAnimationFrame = function (id) { window.cancelAnimationFrame(id); };\r\n\t    BrowserDomAdapter.prototype.performanceNow = function () {\r\n\t        // performance.now() is not available in all browsers, see\r\n\t        // http://caniuse.com/#search=performance.now\r\n\t        if (lang_1.isPresent(window.performance) && lang_1.isPresent(window.performance.now)) {\r\n\t            return window.performance.now();\r\n\t        }\r\n\t        else {\r\n\t            return lang_1.DateWrapper.toMillis(lang_1.DateWrapper.now());\r\n\t        }\r\n\t    };\r\n\t    return BrowserDomAdapter;\r\n\t})(generic_browser_adapter_1.GenericBrowserDomAdapter);\r\n\texports.BrowserDomAdapter = BrowserDomAdapter;\r\n\tvar baseElement = null;\r\n\tfunction getBaseElementHref() {\r\n\t    if (lang_1.isBlank(baseElement)) {\r\n\t        baseElement = document.querySelector('base');\r\n\t        if (lang_1.isBlank(baseElement)) {\r\n\t            return null;\r\n\t        }\r\n\t    }\r\n\t    return baseElement.getAttribute('href');\r\n\t}\r\n\t// based on urlUtils.js in AngularJS 1\r\n\tvar urlParsingNode = null;\r\n\tfunction relativePath(url) {\r\n\t    if (lang_1.isBlank(urlParsingNode)) {\r\n\t        urlParsingNode = document.createElement(\"a\");\r\n\t    }\r\n\t    urlParsingNode.setAttribute('href', url);\r\n\t    return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :\r\n\t        '/' + urlParsingNode.pathname;\r\n\t}\r\n\n\n/***/ },\n/* 323 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar promise_1 = __webpack_require__(101);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar xhr_1 = __webpack_require__(126);\r\n\tvar XHRImpl = (function (_super) {\r\n\t    __extends(XHRImpl, _super);\r\n\t    function XHRImpl() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    XHRImpl.prototype.get = function (url) {\r\n\t        var completer = promise_1.PromiseWrapper.completer();\r\n\t        var xhr = new XMLHttpRequest();\r\n\t        xhr.open('GET', url, true);\r\n\t        xhr.responseType = 'text';\r\n\t        xhr.onload = function () {\r\n\t            // responseText is the old-school way of retrieving response (supported by IE8 & 9)\r\n\t            // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\r\n\t            var response = lang_1.isPresent(xhr.response) ? xhr.response : xhr.responseText;\r\n\t            // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\r\n\t            var status = xhr.status === 1223 ? 204 : xhr.status;\r\n\t            // fix status code when it is 0 (0 status is undocumented).\r\n\t            // Occurs when accessing file resources or on Android 4.1 stock browser\r\n\t            // while retrieving files from application cache.\r\n\t            if (status === 0) {\r\n\t                status = response ? 200 : 0;\r\n\t            }\r\n\t            if (200 <= status && status <= 300) {\r\n\t                completer.resolve(response);\r\n\t            }\r\n\t            else {\r\n\t                completer.reject(\"Failed to load \" + url, null);\r\n\t            }\r\n\t        };\r\n\t        xhr.onerror = function () { completer.reject(\"Failed to load \" + url, null); };\r\n\t        xhr.send();\r\n\t        return completer.promise;\r\n\t    };\r\n\t    return XHRImpl;\r\n\t})(xhr_1.XHR);\r\n\texports.XHRImpl = XHRImpl;\r\n\n\n/***/ },\n/* 324 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar common_1 = __webpack_require__(118);\r\n\tvar testability_1 = __webpack_require__(135);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar dom_events_1 = __webpack_require__(325);\r\n\tvar key_events_1 = __webpack_require__(635);\r\n\tvar hammer_gestures_1 = __webpack_require__(634);\r\n\tvar dom_tokens_1 = __webpack_require__(103);\r\n\tvar dom_renderer_1 = __webpack_require__(211);\r\n\tvar shared_styles_host_1 = __webpack_require__(139);\r\n\tvar shared_styles_host_2 = __webpack_require__(139);\r\n\tvar browser_details_1 = __webpack_require__(261);\r\n\tvar animation_builder_1 = __webpack_require__(260);\r\n\tvar browser_adapter_1 = __webpack_require__(322);\r\n\tvar testability_2 = __webpack_require__(627);\r\n\tvar wtf_init_1 = __webpack_require__(619);\r\n\tvar event_manager_1 = __webpack_require__(82);\r\n\tvar common_dom_1 = __webpack_require__(171);\r\n\tvar dom_tokens_2 = __webpack_require__(103);\r\n\texports.DOCUMENT = dom_tokens_2.DOCUMENT;\r\n\tvar title_1 = __webpack_require__(628);\r\n\texports.Title = title_1.Title;\r\n\tvar common_dom_2 = __webpack_require__(171);\r\n\texports.ELEMENT_PROBE_PROVIDERS = common_dom_2.ELEMENT_PROBE_PROVIDERS;\r\n\texports.ELEMENT_PROBE_PROVIDERS_PROD_MODE = common_dom_2.ELEMENT_PROBE_PROVIDERS_PROD_MODE;\r\n\texports.inspectNativeElement = common_dom_2.inspectNativeElement;\r\n\texports.By = common_dom_2.By;\r\n\tvar browser_adapter_2 = __webpack_require__(322);\r\n\texports.BrowserDomAdapter = browser_adapter_2.BrowserDomAdapter;\r\n\tvar tools_1 = __webpack_require__(630);\r\n\texports.enableDebugTools = tools_1.enableDebugTools;\r\n\texports.disableDebugTools = tools_1.disableDebugTools;\r\n\t/**\r\n\t * A set of providers to initialize the Angular platform in a web browser.\r\n\t *\r\n\t * Used automatically by `bootstrap`, or can be passed to {@link platform}.\r\n\t */\r\n\texports.BROWSER_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    core_1.PLATFORM_COMMON_PROVIDERS,\r\n\t    new di_1.Provider(core_1.PLATFORM_INITIALIZER, { useValue: initDomAdapter, multi: true }),\r\n\t]);\r\n\tfunction _exceptionHandler() {\r\n\t    // !IS_DART is required because we must rethrow exceptions in JS,\r\n\t    // but must not rethrow exceptions in Dart\r\n\t    return new core_1.ExceptionHandler(dom_adapter_1.DOM, !lang_1.IS_DART);\r\n\t}\r\n\tfunction _document() {\r\n\t    return dom_adapter_1.DOM.defaultDoc();\r\n\t}\r\n\t/**\r\n\t * A set of providers to initialize an Angular application in a web browser.\r\n\t *\r\n\t * Used automatically by `bootstrap`, or can be passed to {@link PlatformRef.application}.\r\n\t */\r\n\texports.BROWSER_APP_COMMON_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    core_1.APPLICATION_COMMON_PROVIDERS,\r\n\t    common_1.FORM_PROVIDERS,\r\n\t    new di_1.Provider(core_1.PLATFORM_PIPES, { useValue: common_1.COMMON_PIPES, multi: true }),\r\n\t    new di_1.Provider(core_1.PLATFORM_DIRECTIVES, { useValue: common_1.COMMON_DIRECTIVES, multi: true }),\r\n\t    new di_1.Provider(core_1.ExceptionHandler, { useFactory: _exceptionHandler, deps: [] }),\r\n\t    new di_1.Provider(dom_tokens_1.DOCUMENT, { useFactory: _document, deps: [] }),\r\n\t    new di_1.Provider(event_manager_1.EVENT_MANAGER_PLUGINS, { useClass: dom_events_1.DomEventsPlugin, multi: true }),\r\n\t    new di_1.Provider(event_manager_1.EVENT_MANAGER_PLUGINS, { useClass: key_events_1.KeyEventsPlugin, multi: true }),\r\n\t    new di_1.Provider(event_manager_1.EVENT_MANAGER_PLUGINS, { useClass: hammer_gestures_1.HammerGesturesPlugin, multi: true }),\r\n\t    new di_1.Provider(dom_renderer_1.DomRootRenderer, { useClass: dom_renderer_1.DomRootRenderer_ }),\r\n\t    new di_1.Provider(core_1.RootRenderer, { useExisting: dom_renderer_1.DomRootRenderer }),\r\n\t    new di_1.Provider(shared_styles_host_2.SharedStylesHost, { useExisting: shared_styles_host_1.DomSharedStylesHost }),\r\n\t    shared_styles_host_1.DomSharedStylesHost,\r\n\t    testability_1.Testability,\r\n\t    browser_details_1.BrowserDetails,\r\n\t    animation_builder_1.AnimationBuilder,\r\n\t    event_manager_1.EventManager,\r\n\t    common_dom_1.ELEMENT_PROBE_PROVIDERS\r\n\t]);\r\n\tfunction initDomAdapter() {\r\n\t    browser_adapter_1.BrowserDomAdapter.makeCurrent();\r\n\t    wtf_init_1.wtfInit();\r\n\t    testability_2.BrowserGetTestability.init();\r\n\t}\r\n\texports.initDomAdapter = initDomAdapter;\r\n\n\n/***/ },\n/* 325 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar event_manager_1 = __webpack_require__(82);\r\n\tvar DomEventsPlugin = (function (_super) {\r\n\t    __extends(DomEventsPlugin, _super);\r\n\t    function DomEventsPlugin() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    // This plugin should come last in the list of plugins, because it accepts all\r\n\t    // events.\r\n\t    DomEventsPlugin.prototype.supports = function (eventName) { return true; };\r\n\t    DomEventsPlugin.prototype.addEventListener = function (element, eventName, handler) {\r\n\t        var zone = this.manager.getZone();\r\n\t        var outsideHandler = function (event) { return zone.run(function () { return handler(event); }); };\r\n\t        return this.manager.getZone().runOutsideAngular(function () { return dom_adapter_1.DOM.onAndCancel(element, eventName, outsideHandler); });\r\n\t    };\r\n\t    DomEventsPlugin.prototype.addGlobalEventListener = function (target, eventName, handler) {\r\n\t        var element = dom_adapter_1.DOM.getGlobalEventTarget(target);\r\n\t        var zone = this.manager.getZone();\r\n\t        var outsideHandler = function (event) { return zone.run(function () { return handler(event); }); };\r\n\t        return this.manager.getZone().runOutsideAngular(function () { return dom_adapter_1.DOM.onAndCancel(element, eventName, outsideHandler); });\r\n\t    };\r\n\t    DomEventsPlugin = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DomEventsPlugin);\r\n\t    return DomEventsPlugin;\r\n\t})(event_manager_1.EventManagerPlugin);\r\n\texports.DomEventsPlugin = DomEventsPlugin;\r\n\n\n/***/ },\n/* 326 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar CAMEL_CASE_REGEXP = /([A-Z])/g;\r\n\tvar DASH_CASE_REGEXP = /-([a-z])/g;\r\n\tfunction camelCaseToDashCase(input) {\r\n\t    return lang_1.StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP, function (m) { return '-' + m[1].toLowerCase(); });\r\n\t}\r\n\texports.camelCaseToDashCase = camelCaseToDashCase;\r\n\tfunction dashCaseToCamelCase(input) {\r\n\t    return lang_1.StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP, function (m) { return m[1].toUpperCase(); });\r\n\t}\r\n\texports.dashCaseToCamelCase = dashCaseToCamelCase;\r\n\n\n/***/ },\n/* 327 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar router_1 = __webpack_require__(142);\r\n\tvar location_1 = __webpack_require__(140);\r\n\t/**\r\n\t * The RouterLink directive lets you link to specific parts of your app.\r\n\t *\r\n\t * Consider the following route configuration:\r\n\t\r\n\t * ```\r\n\t * @RouteConfig([\r\n\t *   { path: '/user', component: UserCmp, as: 'User' }\r\n\t * ]);\r\n\t * class MyComp {}\r\n\t * ```\r\n\t *\r\n\t * When linking to this `User` route, you can write:\r\n\t *\r\n\t * ```\r\n\t * <a [routerLink]=\"['./User']\">link to user component</a>\r\n\t * ```\r\n\t *\r\n\t * RouterLink expects the value to be an array of route names, followed by the params\r\n\t * for that level of routing. For instance `['/Team', {teamId: 1}, 'User', {userId: 2}]`\r\n\t * means that we want to generate a link for the `Team` route with params `{teamId: 1}`,\r\n\t * and with a child route `User` with params `{userId: 2}`.\r\n\t *\r\n\t * The first route name should be prepended with `/`, `./`, or `../`.\r\n\t * If the route begins with `/`, the router will look up the route from the root of the app.\r\n\t * If the route begins with `./`, the router will instead look in the current component's\r\n\t * children for the route. And if the route begins with `../`, the router will look at the\r\n\t * current component's parent.\r\n\t */\r\n\tvar RouterLink = (function () {\r\n\t    function RouterLink(_router, _location) {\r\n\t        var _this = this;\r\n\t        this._router = _router;\r\n\t        this._location = _location;\r\n\t        // we need to update the link whenever a route changes to account for aux routes\r\n\t        this._router.subscribe(function (_) { return _this._updateLink(); });\r\n\t    }\r\n\t    // because auxiliary links take existing primary and auxiliary routes into account,\r\n\t    // we need to update the link whenever params or other routes change.\r\n\t    RouterLink.prototype._updateLink = function () {\r\n\t        this._navigationInstruction = this._router.generate(this._routeParams);\r\n\t        var navigationHref = this._navigationInstruction.toLinkUrl();\r\n\t        this.visibleHref = this._location.prepareExternalUrl(navigationHref);\r\n\t    };\r\n\t    Object.defineProperty(RouterLink.prototype, \"isRouteActive\", {\r\n\t        get: function () { return this._router.isRouteActive(this._navigationInstruction); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(RouterLink.prototype, \"routeParams\", {\r\n\t        set: function (changes) {\r\n\t            this._routeParams = changes;\r\n\t            this._updateLink();\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    RouterLink.prototype.onClick = function () {\r\n\t        // If no target, or if target is _self, prevent default browser behavior\r\n\t        if (!lang_1.isString(this.target) || this.target == '_self') {\r\n\t            this._router.navigateByInstruction(this._navigationInstruction);\r\n\t            return false;\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    RouterLink = __decorate([\r\n\t        core_1.Directive({\r\n\t            selector: '[routerLink]',\r\n\t            inputs: ['routeParams: routerLink', 'target: target'],\r\n\t            host: {\r\n\t                '(click)': 'onClick()',\r\n\t                '[attr.href]': 'visibleHref',\r\n\t                '[class.router-link-active]': 'isRouteActive'\r\n\t            }\r\n\t        }), \r\n\t        __metadata('design:paramtypes', [router_1.Router, location_1.Location])\r\n\t    ], RouterLink);\r\n\t    return RouterLink;\r\n\t})();\r\n\texports.RouterLink = RouterLink;\r\n\n\n/***/ },\n/* 328 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar routerMod = __webpack_require__(142);\r\n\tvar instruction_1 = __webpack_require__(65);\r\n\tvar hookMod = __webpack_require__(329);\r\n\tvar route_lifecycle_reflector_1 = __webpack_require__(330);\r\n\tvar _resolveToTrue = async_1.PromiseWrapper.resolve(true);\r\n\t/**\r\n\t * A router outlet is a placeholder that Angular dynamically fills based on the application's route.\r\n\t *\r\n\t * ## Use\r\n\t *\r\n\t * ```\r\n\t * <router-outlet></router-outlet>\r\n\t * ```\r\n\t */\r\n\tvar RouterOutlet = (function () {\r\n\t    function RouterOutlet(_elementRef, _loader, _parentRouter, nameAttr) {\r\n\t        this._elementRef = _elementRef;\r\n\t        this._loader = _loader;\r\n\t        this._parentRouter = _parentRouter;\r\n\t        this.name = null;\r\n\t        this._componentRef = null;\r\n\t        this._currentInstruction = null;\r\n\t        if (lang_1.isPresent(nameAttr)) {\r\n\t            this.name = nameAttr;\r\n\t            this._parentRouter.registerAuxOutlet(this);\r\n\t        }\r\n\t        else {\r\n\t            this._parentRouter.registerPrimaryOutlet(this);\r\n\t        }\r\n\t    }\r\n\t    /**\r\n\t     * Called by the Router to instantiate a new component during the commit phase of a navigation.\r\n\t     * This method in turn is responsible for calling the `routerOnActivate` hook of its child.\r\n\t     */\r\n\t    RouterOutlet.prototype.activate = function (nextInstruction) {\r\n\t        var _this = this;\r\n\t        var previousInstruction = this._currentInstruction;\r\n\t        this._currentInstruction = nextInstruction;\r\n\t        var componentType = nextInstruction.componentType;\r\n\t        var childRouter = this._parentRouter.childRouter(componentType);\r\n\t        var providers = core_1.Injector.resolve([\r\n\t            core_1.provide(instruction_1.RouteData, { useValue: nextInstruction.routeData }),\r\n\t            core_1.provide(instruction_1.RouteParams, { useValue: new instruction_1.RouteParams(nextInstruction.params) }),\r\n\t            core_1.provide(routerMod.Router, { useValue: childRouter })\r\n\t        ]);\r\n\t        this._componentRef =\r\n\t            this._loader.loadNextToLocation(componentType, this._elementRef, providers);\r\n\t        return this._componentRef.then(function (componentRef) {\r\n\t            if (route_lifecycle_reflector_1.hasLifecycleHook(hookMod.routerOnActivate, componentType)) {\r\n\t                return _this._componentRef.then(function (ref) {\r\n\t                    return ref.instance.routerOnActivate(nextInstruction, previousInstruction);\r\n\t                });\r\n\t            }\r\n\t            else {\r\n\t                return componentRef;\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    /**\r\n\t     * Called by the {@link Router} during the commit phase of a navigation when an outlet\r\n\t     * reuses a component between different routes.\r\n\t     * This method in turn is responsible for calling the `routerOnReuse` hook of its child.\r\n\t     */\r\n\t    RouterOutlet.prototype.reuse = function (nextInstruction) {\r\n\t        var previousInstruction = this._currentInstruction;\r\n\t        this._currentInstruction = nextInstruction;\r\n\t        // it's possible the component is removed before it can be reactivated (if nested withing\r\n\t        // another dynamically loaded component, for instance). In that case, we simply activate\r\n\t        // a new one.\r\n\t        if (lang_1.isBlank(this._componentRef)) {\r\n\t            return this.activate(nextInstruction);\r\n\t        }\r\n\t        else {\r\n\t            return async_1.PromiseWrapper.resolve(route_lifecycle_reflector_1.hasLifecycleHook(hookMod.routerOnReuse, this._currentInstruction.componentType) ?\r\n\t                this._componentRef.then(function (ref) {\r\n\t                    return ref.instance.routerOnReuse(nextInstruction, previousInstruction);\r\n\t                }) :\r\n\t                true);\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Called by the {@link Router} when an outlet disposes of a component's contents.\r\n\t     * This method in turn is responsible for calling the `routerOnDeactivate` hook of its child.\r\n\t     */\r\n\t    RouterOutlet.prototype.deactivate = function (nextInstruction) {\r\n\t        var _this = this;\r\n\t        var next = _resolveToTrue;\r\n\t        if (lang_1.isPresent(this._componentRef) && lang_1.isPresent(this._currentInstruction) &&\r\n\t            route_lifecycle_reflector_1.hasLifecycleHook(hookMod.routerOnDeactivate, this._currentInstruction.componentType)) {\r\n\t            next = this._componentRef.then(function (ref) {\r\n\t                return ref.instance\r\n\t                    .routerOnDeactivate(nextInstruction, _this._currentInstruction);\r\n\t            });\r\n\t        }\r\n\t        return next.then(function (_) {\r\n\t            if (lang_1.isPresent(_this._componentRef)) {\r\n\t                var onDispose = _this._componentRef.then(function (ref) { return ref.dispose(); });\r\n\t                _this._componentRef = null;\r\n\t                return onDispose;\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    /**\r\n\t     * Called by the {@link Router} during recognition phase of a navigation.\r\n\t     *\r\n\t     * If this resolves to `false`, the given navigation is cancelled.\r\n\t     *\r\n\t     * This method delegates to the child component's `routerCanDeactivate` hook if it exists,\r\n\t     * and otherwise resolves to true.\r\n\t     */\r\n\t    RouterOutlet.prototype.routerCanDeactivate = function (nextInstruction) {\r\n\t        var _this = this;\r\n\t        if (lang_1.isBlank(this._currentInstruction)) {\r\n\t            return _resolveToTrue;\r\n\t        }\r\n\t        if (route_lifecycle_reflector_1.hasLifecycleHook(hookMod.routerCanDeactivate, this._currentInstruction.componentType)) {\r\n\t            return this._componentRef.then(function (ref) {\r\n\t                return ref.instance\r\n\t                    .routerCanDeactivate(nextInstruction, _this._currentInstruction);\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            return _resolveToTrue;\r\n\t        }\r\n\t    };\r\n\t    /**\r\n\t     * Called by the {@link Router} during recognition phase of a navigation.\r\n\t     *\r\n\t     * If the new child component has a different Type than the existing child component,\r\n\t     * this will resolve to `false`. You can't reuse an old component when the new component\r\n\t     * is of a different Type.\r\n\t     *\r\n\t     * Otherwise, this method delegates to the child component's `routerCanReuse` hook if it exists,\r\n\t     * or resolves to true if the hook is not present.\r\n\t     */\r\n\t    RouterOutlet.prototype.routerCanReuse = function (nextInstruction) {\r\n\t        var _this = this;\r\n\t        var result;\r\n\t        if (lang_1.isBlank(this._currentInstruction) ||\r\n\t            this._currentInstruction.componentType != nextInstruction.componentType) {\r\n\t            result = false;\r\n\t        }\r\n\t        else if (route_lifecycle_reflector_1.hasLifecycleHook(hookMod.routerCanReuse, this._currentInstruction.componentType)) {\r\n\t            result = this._componentRef.then(function (ref) {\r\n\t                return ref.instance.routerCanReuse(nextInstruction, _this._currentInstruction);\r\n\t            });\r\n\t        }\r\n\t        else {\r\n\t            result = nextInstruction == this._currentInstruction ||\r\n\t                (lang_1.isPresent(nextInstruction.params) && lang_1.isPresent(this._currentInstruction.params) &&\r\n\t                    collection_1.StringMapWrapper.equals(nextInstruction.params, this._currentInstruction.params));\r\n\t        }\r\n\t        return async_1.PromiseWrapper.resolve(result);\r\n\t    };\r\n\t    RouterOutlet.prototype.ngOnDestroy = function () { this._parentRouter.unregisterPrimaryOutlet(this); };\r\n\t    RouterOutlet = __decorate([\r\n\t        core_1.Directive({ selector: 'router-outlet' }),\r\n\t        __param(3, core_1.Attribute('name')), \r\n\t        __metadata('design:paramtypes', [core_1.ElementRef, core_1.DynamicComponentLoader, routerMod.Router, String])\r\n\t    ], RouterOutlet);\r\n\t    return RouterOutlet;\r\n\t})();\r\n\texports.RouterOutlet = RouterOutlet;\r\n\n\n/***/ },\n/* 329 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * This indirection is needed to free up Component, etc symbols in the public API\r\n\t * to be used by the decorator versions of these annotations.\r\n\t */\r\n\tvar decorators_1 = __webpack_require__(100);\r\n\tvar lifecycle_annotations_impl_1 = __webpack_require__(212);\r\n\tvar lifecycle_annotations_impl_2 = __webpack_require__(212);\r\n\texports.routerCanReuse = lifecycle_annotations_impl_2.routerCanReuse;\r\n\texports.routerCanDeactivate = lifecycle_annotations_impl_2.routerCanDeactivate;\r\n\texports.routerOnActivate = lifecycle_annotations_impl_2.routerOnActivate;\r\n\texports.routerOnReuse = lifecycle_annotations_impl_2.routerOnReuse;\r\n\texports.routerOnDeactivate = lifecycle_annotations_impl_2.routerOnDeactivate;\r\n\t/**\r\n\t * Defines route lifecycle hook `CanActivate`, which is called by the router to determine\r\n\t * if a component can be instantiated as part of a navigation.\r\n\t *\r\n\t * <aside class=\"is-right\">\r\n\t * Note that unlike other lifecycle hooks, this one uses an annotation rather than an interface.\r\n\t * This is because the `CanActivate` function is called before the component is instantiated.\r\n\t * </aside>\r\n\t *\r\n\t * The `CanActivate` hook is called with two {@link ComponentInstruction}s as parameters, the first\r\n\t * representing the current route being navigated to, and the second parameter representing the\r\n\t * previous route or `null`.\r\n\t *\r\n\t * ```typescript\r\n\t * @CanActivate((next, prev) => boolean | Promise<boolean>)\r\n\t * ```\r\n\t *\r\n\t * If `CanActivate` returns or resolves to `false`, the navigation is cancelled.\r\n\t * If `CanActivate` throws or rejects, the navigation is also cancelled.\r\n\t * If `CanActivate` returns or resolves to `true`, navigation continues, the component is\r\n\t * instantiated, and the {@link OnActivate} hook of that component is called if implemented.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * {@example router/ts/can_activate/can_activate_example.ts region='canActivate' }\r\n\t */\r\n\texports.CanActivate = decorators_1.makeDecorator(lifecycle_annotations_impl_1.CanActivate);\r\n\n\n/***/ },\n/* 330 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar lifecycle_annotations_impl_1 = __webpack_require__(212);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tfunction hasLifecycleHook(e, type) {\r\n\t    if (!(type instanceof lang_1.Type))\r\n\t        return false;\r\n\t    return e.name in type.prototype;\r\n\t}\r\n\texports.hasLifecycleHook = hasLifecycleHook;\r\n\tfunction getCanActivateHook(type) {\r\n\t    var annotations = reflection_1.reflector.annotations(type);\r\n\t    for (var i = 0; i < annotations.length; i += 1) {\r\n\t        var annotation = annotations[i];\r\n\t        if (annotation instanceof lifecycle_annotations_impl_1.CanActivate) {\r\n\t            return annotation.fn;\r\n\t        }\r\n\t    }\r\n\t    return null;\r\n\t}\r\n\texports.getCanActivateHook = getCanActivateHook;\r\n\n\n/***/ },\n/* 331 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar location_strategy_1 = __webpack_require__(104);\r\n\tvar platform_location_1 = __webpack_require__(105);\r\n\t/**\r\n\t * `PathLocationStrategy` is a {@link LocationStrategy} used to configure the\r\n\t * {@link Location} service to represent its state in the\r\n\t * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\r\n\t * browser's URL.\r\n\t *\r\n\t * `PathLocationStrategy` is the default binding for {@link LocationStrategy}\r\n\t * provided in {@link ROUTER_PROVIDERS}.\r\n\t *\r\n\t * If you're using `PathLocationStrategy`, you must provide a provider for\r\n\t * {@link APP_BASE_HREF} to a string representing the URL prefix that should\r\n\t * be preserved when generating and recognizing URLs.\r\n\t *\r\n\t * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call\r\n\t * `location.go('/foo')`, the browser's URL will become\r\n\t * `example.com/my/app/foo`.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component, provide} from 'angular2/core';\r\n\t * import {\r\n\t *   APP_BASE_HREF\r\n\t *   ROUTER_DIRECTIVES,\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   RouteConfig,\r\n\t *   Location\r\n\t * } from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   constructor(location: Location) {\r\n\t *     location.go('/foo');\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [\r\n\t *   ROUTER_PROVIDERS, // includes binding to PathLocationStrategy\r\n\t *   provide(APP_BASE_HREF, {useValue: '/my/app'})\r\n\t * ]);\r\n\t * ```\r\n\t */\r\n\tvar PathLocationStrategy = (function (_super) {\r\n\t    __extends(PathLocationStrategy, _super);\r\n\t    function PathLocationStrategy(_platformLocation, href) {\r\n\t        _super.call(this);\r\n\t        this._platformLocation = _platformLocation;\r\n\t        if (lang_1.isBlank(href)) {\r\n\t            href = this._platformLocation.getBaseHrefFromDOM();\r\n\t        }\r\n\t        if (lang_1.isBlank(href)) {\r\n\t            throw new exceptions_1.BaseException(\"No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.\");\r\n\t        }\r\n\t        this._baseHref = href;\r\n\t    }\r\n\t    PathLocationStrategy.prototype.onPopState = function (fn) {\r\n\t        this._platformLocation.onPopState(fn);\r\n\t        this._platformLocation.onHashChange(fn);\r\n\t    };\r\n\t    PathLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };\r\n\t    PathLocationStrategy.prototype.prepareExternalUrl = function (internal) { return location_strategy_1.joinWithSlash(this._baseHref, internal); };\r\n\t    PathLocationStrategy.prototype.path = function () {\r\n\t        return this._platformLocation.pathname + location_strategy_1.normalizeQueryParams(this._platformLocation.search);\r\n\t    };\r\n\t    PathLocationStrategy.prototype.pushState = function (state, title, url, queryParams) {\r\n\t        var externalUrl = this.prepareExternalUrl(url + location_strategy_1.normalizeQueryParams(queryParams));\r\n\t        this._platformLocation.pushState(state, title, externalUrl);\r\n\t    };\r\n\t    PathLocationStrategy.prototype.replaceState = function (state, title, url, queryParams) {\r\n\t        var externalUrl = this.prepareExternalUrl(url + location_strategy_1.normalizeQueryParams(queryParams));\r\n\t        this._platformLocation.replaceState(state, title, externalUrl);\r\n\t    };\r\n\t    PathLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };\r\n\t    PathLocationStrategy.prototype.back = function () { this._platformLocation.back(); };\r\n\t    PathLocationStrategy = __decorate([\r\n\t        core_1.Injectable(),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Inject(location_strategy_1.APP_BASE_HREF)), \r\n\t        __metadata('design:paramtypes', [platform_location_1.PlatformLocation, String])\r\n\t    ], PathLocationStrategy);\r\n\t    return PathLocationStrategy;\r\n\t})(location_strategy_1.LocationStrategy);\r\n\texports.PathLocationStrategy = PathLocationStrategy;\r\n\n\n/***/ },\n/* 332 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var route_config_impl_1 = __webpack_require__(141);\r\n\tvar decorators_1 = __webpack_require__(100);\r\n\tvar route_config_impl_2 = __webpack_require__(141);\r\n\texports.Route = route_config_impl_2.Route;\r\n\texports.Redirect = route_config_impl_2.Redirect;\r\n\texports.AuxRoute = route_config_impl_2.AuxRoute;\r\n\texports.AsyncRoute = route_config_impl_2.AsyncRoute;\r\n\t// Copied from RouteConfig in route_config_impl.\r\n\t/**\r\n\t * The `RouteConfig` decorator defines routes for a given component.\r\n\t *\r\n\t * It takes an array of {@link RouteDefinition}s.\r\n\t */\r\n\texports.RouteConfig = decorators_1.makeDecorator(route_config_impl_1.RouteConfig);\r\n\n\n/***/ },\n/* 333 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var location_strategy_1 = __webpack_require__(104);\r\n\tvar path_location_strategy_1 = __webpack_require__(331);\r\n\tvar router_1 = __webpack_require__(142);\r\n\tvar route_registry_1 = __webpack_require__(213);\r\n\tvar location_1 = __webpack_require__(140);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * The Platform agnostic ROUTER PROVIDERS\r\n\t */\r\n\texports.ROUTER_PROVIDERS_COMMON = lang_1.CONST_EXPR([\r\n\t    route_registry_1.RouteRegistry,\r\n\t    lang_1.CONST_EXPR(new core_1.Provider(location_strategy_1.LocationStrategy, { useClass: path_location_strategy_1.PathLocationStrategy })),\r\n\t    location_1.Location,\r\n\t    lang_1.CONST_EXPR(new core_1.Provider(router_1.Router, {\r\n\t        useFactory: routerFactory,\r\n\t        deps: lang_1.CONST_EXPR([route_registry_1.RouteRegistry, location_1.Location, route_registry_1.ROUTER_PRIMARY_COMPONENT, core_1.ApplicationRef])\r\n\t    })),\r\n\t    lang_1.CONST_EXPR(new core_1.Provider(route_registry_1.ROUTER_PRIMARY_COMPONENT, { useFactory: routerPrimaryComponentFactory, deps: lang_1.CONST_EXPR([core_1.ApplicationRef]) }))\r\n\t]);\r\n\tfunction routerFactory(registry, location, primaryComponent, appRef) {\r\n\t    var rootRouter = new router_1.RootRouter(registry, location, primaryComponent);\r\n\t    appRef.registerDisposeListener(function () { return rootRouter.dispose(); });\r\n\t    return rootRouter;\r\n\t}\r\n\tfunction routerPrimaryComponentFactory(app) {\r\n\t    if (app.componentTypes.length == 0) {\r\n\t        throw new exceptions_1.BaseException(\"Bootstrap at least one component before injecting Router.\");\r\n\t    }\r\n\t    return app.componentTypes[0];\r\n\t}\r\n\n\n/***/ },\n/* 334 */\n/***/ function(module, exports) {\n\n\t'use strict';var MatchedUrl = (function () {\r\n\t    function MatchedUrl(urlPath, urlParams, allParams, auxiliary, rest) {\r\n\t        this.urlPath = urlPath;\r\n\t        this.urlParams = urlParams;\r\n\t        this.allParams = allParams;\r\n\t        this.auxiliary = auxiliary;\r\n\t        this.rest = rest;\r\n\t    }\r\n\t    return MatchedUrl;\r\n\t})();\r\n\texports.MatchedUrl = MatchedUrl;\r\n\tvar GeneratedUrl = (function () {\r\n\t    function GeneratedUrl(urlPath, urlParams) {\r\n\t        this.urlPath = urlPath;\r\n\t        this.urlParams = urlParams;\r\n\t    }\r\n\t    return GeneratedUrl;\r\n\t})();\r\n\texports.GeneratedUrl = GeneratedUrl;\r\n\n\n/***/ },\n/* 335 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar promise_1 = __webpack_require__(101);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar url_parser_1 = __webpack_require__(214);\r\n\tvar instruction_1 = __webpack_require__(65);\r\n\t// RouteMatch objects hold information about a match between a rule and a URL\r\n\tvar RouteMatch = (function () {\r\n\t    function RouteMatch() {\r\n\t    }\r\n\t    return RouteMatch;\r\n\t})();\r\n\texports.RouteMatch = RouteMatch;\r\n\tvar PathMatch = (function (_super) {\r\n\t    __extends(PathMatch, _super);\r\n\t    function PathMatch(instruction, remaining, remainingAux) {\r\n\t        _super.call(this);\r\n\t        this.instruction = instruction;\r\n\t        this.remaining = remaining;\r\n\t        this.remainingAux = remainingAux;\r\n\t    }\r\n\t    return PathMatch;\r\n\t})(RouteMatch);\r\n\texports.PathMatch = PathMatch;\r\n\tvar RedirectMatch = (function (_super) {\r\n\t    __extends(RedirectMatch, _super);\r\n\t    function RedirectMatch(redirectTo, specificity) {\r\n\t        _super.call(this);\r\n\t        this.redirectTo = redirectTo;\r\n\t        this.specificity = specificity;\r\n\t    }\r\n\t    return RedirectMatch;\r\n\t})(RouteMatch);\r\n\texports.RedirectMatch = RedirectMatch;\r\n\tvar RedirectRule = (function () {\r\n\t    function RedirectRule(_pathRecognizer, redirectTo) {\r\n\t        this._pathRecognizer = _pathRecognizer;\r\n\t        this.redirectTo = redirectTo;\r\n\t        this.hash = this._pathRecognizer.hash;\r\n\t    }\r\n\t    Object.defineProperty(RedirectRule.prototype, \"path\", {\r\n\t        get: function () { return this._pathRecognizer.toString(); },\r\n\t        set: function (val) { throw new exceptions_1.BaseException('you cannot set the path of a RedirectRule directly'); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    /**\r\n\t     * Returns `null` or a `ParsedUrl` representing the new path to match\r\n\t     */\r\n\t    RedirectRule.prototype.recognize = function (beginningSegment) {\r\n\t        var match = null;\r\n\t        if (lang_1.isPresent(this._pathRecognizer.matchUrl(beginningSegment))) {\r\n\t            match = new RedirectMatch(this.redirectTo, this._pathRecognizer.specificity);\r\n\t        }\r\n\t        return promise_1.PromiseWrapper.resolve(match);\r\n\t    };\r\n\t    RedirectRule.prototype.generate = function (params) {\r\n\t        throw new exceptions_1.BaseException(\"Tried to generate a redirect.\");\r\n\t    };\r\n\t    return RedirectRule;\r\n\t})();\r\n\texports.RedirectRule = RedirectRule;\r\n\t// represents something like '/foo/:bar'\r\n\tvar RouteRule = (function () {\r\n\t    // TODO: cache component instruction instances by params and by ParsedUrl instance\r\n\t    function RouteRule(_routePath, handler) {\r\n\t        this._routePath = _routePath;\r\n\t        this.handler = handler;\r\n\t        this._cache = new collection_1.Map();\r\n\t        this.specificity = this._routePath.specificity;\r\n\t        this.hash = this._routePath.hash;\r\n\t        this.terminal = this._routePath.terminal;\r\n\t    }\r\n\t    Object.defineProperty(RouteRule.prototype, \"path\", {\r\n\t        get: function () { return this._routePath.toString(); },\r\n\t        set: function (val) { throw new exceptions_1.BaseException('you cannot set the path of a RouteRule directly'); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    RouteRule.prototype.recognize = function (beginningSegment) {\r\n\t        var _this = this;\r\n\t        var res = this._routePath.matchUrl(beginningSegment);\r\n\t        if (lang_1.isBlank(res)) {\r\n\t            return null;\r\n\t        }\r\n\t        return this.handler.resolveComponentType().then(function (_) {\r\n\t            var componentInstruction = _this._getInstruction(res.urlPath, res.urlParams, res.allParams);\r\n\t            return new PathMatch(componentInstruction, res.rest, res.auxiliary);\r\n\t        });\r\n\t    };\r\n\t    RouteRule.prototype.generate = function (params) {\r\n\t        var generated = this._routePath.generateUrl(params);\r\n\t        var urlPath = generated.urlPath;\r\n\t        var urlParams = generated.urlParams;\r\n\t        return this._getInstruction(urlPath, url_parser_1.convertUrlParamsToArray(urlParams), params);\r\n\t    };\r\n\t    RouteRule.prototype.generateComponentPathValues = function (params) {\r\n\t        return this._routePath.generateUrl(params);\r\n\t    };\r\n\t    RouteRule.prototype._getInstruction = function (urlPath, urlParams, params) {\r\n\t        if (lang_1.isBlank(this.handler.componentType)) {\r\n\t            throw new exceptions_1.BaseException(\"Tried to get instruction before the type was loaded.\");\r\n\t        }\r\n\t        var hashKey = urlPath + '?' + urlParams.join('&');\r\n\t        if (this._cache.has(hashKey)) {\r\n\t            return this._cache.get(hashKey);\r\n\t        }\r\n\t        var instruction = new instruction_1.ComponentInstruction(urlPath, urlParams, this.handler.data, this.handler.componentType, this.terminal, this.specificity, params);\r\n\t        this._cache.set(hashKey, instruction);\r\n\t        return instruction;\r\n\t    };\r\n\t    return RouteRule;\r\n\t})();\r\n\texports.RouteRule = RouteRule;\r\n\n\n/***/ },\n/* 336 */,\n/* 337 */,\n/* 338 */,\n/* 339 */,\n/* 340 */,\n/* 341 */,\n/* 342 */,\n/* 343 */,\n/* 344 */,\n/* 345 */,\n/* 346 */,\n/* 347 */,\n/* 348 */,\n/* 349 */,\n/* 350 */,\n/* 351 */,\n/* 352 */,\n/* 353 */,\n/* 354 */,\n/* 355 */,\n/* 356 */,\n/* 357 */,\n/* 358 */,\n/* 359 */,\n/* 360 */,\n/* 361 */,\n/* 362 */,\n/* 363 */,\n/* 364 */,\n/* 365 */,\n/* 366 */,\n/* 367 */,\n/* 368 */,\n/* 369 */,\n/* 370 */,\n/* 371 */,\n/* 372 */,\n/* 373 */,\n/* 374 */,\n/* 375 */,\n/* 376 */,\n/* 377 */,\n/* 378 */,\n/* 379 */,\n/* 380 */,\n/* 381 */,\n/* 382 */,\n/* 383 */,\n/* 384 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar Subscriber_1 = __webpack_require__(7);\n\tvar InnerSubscriber = (function (_super) {\n\t    __extends(InnerSubscriber, _super);\n\t    function InnerSubscriber(parent, outerValue, outerIndex) {\n\t        _super.call(this);\n\t        this.parent = parent;\n\t        this.outerValue = outerValue;\n\t        this.outerIndex = outerIndex;\n\t        this.index = 0;\n\t    }\n\t    InnerSubscriber.prototype._next = function (value) {\n\t        this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n\t    };\n\t    InnerSubscriber.prototype._error = function (error) {\n\t        this.parent.notifyError(error, this);\n\t        this.unsubscribe();\n\t    };\n\t    InnerSubscriber.prototype._complete = function () {\n\t        this.parent.notifyComplete(this);\n\t        this.unsubscribe();\n\t    };\n\t    return InnerSubscriber;\n\t}(Subscriber_1.Subscriber));\n\texports.InnerSubscriber = InnerSubscriber;\n\t//# sourceMappingURL=InnerSubscriber.js.map\n\n/***/ },\n/* 385 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\texports.empty = {\n\t    isUnsubscribed: true,\n\t    next: function (value) { },\n\t    error: function (err) { throw err; },\n\t    complete: function () { }\n\t};\n\t//# sourceMappingURL=Observer.js.map\n\n/***/ },\n/* 386 */,\n/* 387 */,\n/* 388 */,\n/* 389 */,\n/* 390 */,\n/* 391 */,\n/* 392 */,\n/* 393 */,\n/* 394 */,\n/* 395 */,\n/* 396 */,\n/* 397 */,\n/* 398 */,\n/* 399 */,\n/* 400 */,\n/* 401 */,\n/* 402 */,\n/* 403 */,\n/* 404 */,\n/* 405 */,\n/* 406 */,\n/* 407 */,\n/* 408 */,\n/* 409 */,\n/* 410 */,\n/* 411 */,\n/* 412 */,\n/* 413 */,\n/* 414 */,\n/* 415 */,\n/* 416 */,\n/* 417 */,\n/* 418 */,\n/* 419 */,\n/* 420 */,\n/* 421 */,\n/* 422 */,\n/* 423 */,\n/* 424 */,\n/* 425 */,\n/* 426 */,\n/* 427 */,\n/* 428 */,\n/* 429 */,\n/* 430 */,\n/* 431 */,\n/* 432 */,\n/* 433 */,\n/* 434 */,\n/* 435 */,\n/* 436 */,\n/* 437 */,\n/* 438 */,\n/* 439 */,\n/* 440 */,\n/* 441 */,\n/* 442 */,\n/* 443 */,\n/* 444 */,\n/* 445 */,\n/* 446 */,\n/* 447 */,\n/* 448 */,\n/* 449 */,\n/* 450 */,\n/* 451 */,\n/* 452 */,\n/* 453 */,\n/* 454 */,\n/* 455 */,\n/* 456 */,\n/* 457 */,\n/* 458 */,\n/* 459 */,\n/* 460 */,\n/* 461 */,\n/* 462 */,\n/* 463 */,\n/* 464 */,\n/* 465 */,\n/* 466 */,\n/* 467 */,\n/* 468 */,\n/* 469 */,\n/* 470 */,\n/* 471 */,\n/* 472 */,\n/* 473 */,\n/* 474 */,\n/* 475 */,\n/* 476 */,\n/* 477 */,\n/* 478 */,\n/* 479 */,\n/* 480 */,\n/* 481 */,\n/* 482 */,\n/* 483 */,\n/* 484 */,\n/* 485 */,\n/* 486 */,\n/* 487 */,\n/* 488 */,\n/* 489 */,\n/* 490 */,\n/* 491 */,\n/* 492 */,\n/* 493 */,\n/* 494 */,\n/* 495 */,\n/* 496 */,\n/* 497 */,\n/* 498 */,\n/* 499 */,\n/* 500 */,\n/* 501 */,\n/* 502 */,\n/* 503 */,\n/* 504 */,\n/* 505 */,\n/* 506 */,\n/* 507 */,\n/* 508 */,\n/* 509 */,\n/* 510 */,\n/* 511 */,\n/* 512 */,\n/* 513 */,\n/* 514 */,\n/* 515 */,\n/* 516 */,\n/* 517 */,\n/* 518 */,\n/* 519 */,\n/* 520 */,\n/* 521 */,\n/* 522 */,\n/* 523 */,\n/* 524 */,\n/* 525 */,\n/* 526 */,\n/* 527 */,\n/* 528 */,\n/* 529 */,\n/* 530 */,\n/* 531 */,\n/* 532 */,\n/* 533 */,\n/* 534 */,\n/* 535 */,\n/* 536 */,\n/* 537 */,\n/* 538 */,\n/* 539 */,\n/* 540 */,\n/* 541 */,\n/* 542 */,\n/* 543 */,\n/* 544 */,\n/* 545 */,\n/* 546 */,\n/* 547 */,\n/* 548 */,\n/* 549 */,\n/* 550 */,\n/* 551 */,\n/* 552 */,\n/* 553 */,\n/* 554 */,\n/* 555 */,\n/* 556 */,\n/* 557 */,\n/* 558 */,\n/* 559 */,\n/* 560 */,\n/* 561 */,\n/* 562 */,\n/* 563 */,\n/* 564 */,\n/* 565 */,\n/* 566 */,\n/* 567 */,\n/* 568 */,\n/* 569 */,\n/* 570 */,\n/* 571 */,\n/* 572 */,\n/* 573 */,\n/* 574 */,\n/* 575 */,\n/* 576 */,\n/* 577 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar __extends = (this && this.__extends) || function (d, b) {\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n\t    function __() { this.constructor = d; }\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t};\n\tvar Subscription_1 = __webpack_require__(28);\n\tvar SubjectSubscription = (function (_super) {\n\t    __extends(SubjectSubscription, _super);\n\t    function SubjectSubscription(subject, observer) {\n\t        _super.call(this);\n\t        this.subject = subject;\n\t        this.observer = observer;\n\t        this.isUnsubscribed = false;\n\t    }\n\t    SubjectSubscription.prototype.unsubscribe = function () {\n\t        if (this.isUnsubscribed) {\n\t            return;\n\t        }\n\t        this.isUnsubscribed = true;\n\t        var subject = this.subject;\n\t        var observers = subject.observers;\n\t        this.subject = null;\n\t        if (!observers || observers.length === 0 || subject.isUnsubscribed) {\n\t            return;\n\t        }\n\t        var subscriberIndex = observers.indexOf(this.observer);\n\t        if (subscriberIndex !== -1) {\n\t            observers.splice(subscriberIndex, 1);\n\t        }\n\t    };\n\t    return SubjectSubscription;\n\t}(Subscription_1.Subscription));\n\texports.SubjectSubscription = SubjectSubscription;\n\t//# sourceMappingURL=SubjectSubscription.js.map\n\n/***/ },\n/* 578 */,\n/* 579 */,\n/* 580 */,\n/* 581 */,\n/* 582 */,\n/* 583 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\tvar Subscriber_1 = __webpack_require__(7);\n\tvar rxSubscriber_1 = __webpack_require__(113);\n\tfunction toSubscriber(nextOrObserver, error, complete) {\n\t    if (nextOrObserver && typeof nextOrObserver === 'object') {\n\t        if (nextOrObserver instanceof Subscriber_1.Subscriber) {\n\t            return nextOrObserver;\n\t        }\n\t        else if (typeof nextOrObserver[rxSubscriber_1.rxSubscriber] === 'function') {\n\t            return nextOrObserver[rxSubscriber_1.rxSubscriber]();\n\t        }\n\t    }\n\t    return new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n\t}\n\texports.toSubscriber = toSubscriber;\n\t//# sourceMappingURL=toSubscriber.js.map\n\n/***/ },\n/* 584 */,\n/* 585 */,\n/* 586 */,\n/* 587 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar math_1 = __webpack_require__(315);\r\n\tvar util_1 = __webpack_require__(326);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar Animation = (function () {\r\n\t    /**\r\n\t     * Stores the start time and starts the animation\r\n\t     * @param element\r\n\t     * @param data\r\n\t     * @param browserDetails\r\n\t     */\r\n\t    function Animation(element, data, browserDetails) {\r\n\t        var _this = this;\r\n\t        this.element = element;\r\n\t        this.data = data;\r\n\t        this.browserDetails = browserDetails;\r\n\t        /** functions to be called upon completion */\r\n\t        this.callbacks = [];\r\n\t        /** functions for removing event listeners */\r\n\t        this.eventClearFunctions = [];\r\n\t        /** flag used to track whether or not the animation has finished */\r\n\t        this.completed = false;\r\n\t        this._stringPrefix = '';\r\n\t        this.startTime = lang_1.DateWrapper.toMillis(lang_1.DateWrapper.now());\r\n\t        this._stringPrefix = dom_adapter_1.DOM.getAnimationPrefix();\r\n\t        this.setup();\r\n\t        this.wait(function (timestamp) { return _this.start(); });\r\n\t    }\r\n\t    Object.defineProperty(Animation.prototype, \"totalTime\", {\r\n\t        /** total amount of time that the animation should take including delay */\r\n\t        get: function () {\r\n\t            var delay = this.computedDelay != null ? this.computedDelay : 0;\r\n\t            var duration = this.computedDuration != null ? this.computedDuration : 0;\r\n\t            return delay + duration;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Animation.prototype.wait = function (callback) {\r\n\t        // Firefox requires 2 frames for some reason\r\n\t        this.browserDetails.raf(callback, 2);\r\n\t    };\r\n\t    /**\r\n\t     * Sets up the initial styles before the animation is started\r\n\t     */\r\n\t    Animation.prototype.setup = function () {\r\n\t        if (this.data.fromStyles != null)\r\n\t            this.applyStyles(this.data.fromStyles);\r\n\t        if (this.data.duration != null)\r\n\t            this.applyStyles({ 'transitionDuration': this.data.duration.toString() + 'ms' });\r\n\t        if (this.data.delay != null)\r\n\t            this.applyStyles({ 'transitionDelay': this.data.delay.toString() + 'ms' });\r\n\t    };\r\n\t    /**\r\n\t     * After the initial setup has occurred, this method adds the animation styles\r\n\t     */\r\n\t    Animation.prototype.start = function () {\r\n\t        this.addClasses(this.data.classesToAdd);\r\n\t        this.addClasses(this.data.animationClasses);\r\n\t        this.removeClasses(this.data.classesToRemove);\r\n\t        if (this.data.toStyles != null)\r\n\t            this.applyStyles(this.data.toStyles);\r\n\t        var computedStyles = dom_adapter_1.DOM.getComputedStyle(this.element);\r\n\t        this.computedDelay =\r\n\t            math_1.Math.max(this.parseDurationString(computedStyles.getPropertyValue(this._stringPrefix + 'transition-delay')), this.parseDurationString(this.element.style.getPropertyValue(this._stringPrefix + 'transition-delay')));\r\n\t        this.computedDuration = math_1.Math.max(this.parseDurationString(computedStyles.getPropertyValue(this._stringPrefix + 'transition-duration')), this.parseDurationString(this.element.style.getPropertyValue(this._stringPrefix + 'transition-duration')));\r\n\t        this.addEvents();\r\n\t    };\r\n\t    /**\r\n\t     * Applies the provided styles to the element\r\n\t     * @param styles\r\n\t     */\r\n\t    Animation.prototype.applyStyles = function (styles) {\r\n\t        var _this = this;\r\n\t        collection_1.StringMapWrapper.forEach(styles, function (value, key) {\r\n\t            var dashCaseKey = util_1.camelCaseToDashCase(key);\r\n\t            if (lang_1.isPresent(dom_adapter_1.DOM.getStyle(_this.element, dashCaseKey))) {\r\n\t                dom_adapter_1.DOM.setStyle(_this.element, dashCaseKey, value.toString());\r\n\t            }\r\n\t            else {\r\n\t                dom_adapter_1.DOM.setStyle(_this.element, _this._stringPrefix + dashCaseKey, value.toString());\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    /**\r\n\t     * Adds the provided classes to the element\r\n\t     * @param classes\r\n\t     */\r\n\t    Animation.prototype.addClasses = function (classes) {\r\n\t        for (var i = 0, len = classes.length; i < len; i++)\r\n\t            dom_adapter_1.DOM.addClass(this.element, classes[i]);\r\n\t    };\r\n\t    /**\r\n\t     * Removes the provided classes from the element\r\n\t     * @param classes\r\n\t     */\r\n\t    Animation.prototype.removeClasses = function (classes) {\r\n\t        for (var i = 0, len = classes.length; i < len; i++)\r\n\t            dom_adapter_1.DOM.removeClass(this.element, classes[i]);\r\n\t    };\r\n\t    /**\r\n\t     * Adds events to track when animations have finished\r\n\t     */\r\n\t    Animation.prototype.addEvents = function () {\r\n\t        var _this = this;\r\n\t        if (this.totalTime > 0) {\r\n\t            this.eventClearFunctions.push(dom_adapter_1.DOM.onAndCancel(this.element, dom_adapter_1.DOM.getTransitionEnd(), function (event) { return _this.handleAnimationEvent(event); }));\r\n\t        }\r\n\t        else {\r\n\t            this.handleAnimationCompleted();\r\n\t        }\r\n\t    };\r\n\t    Animation.prototype.handleAnimationEvent = function (event) {\r\n\t        var elapsedTime = math_1.Math.round(event.elapsedTime * 1000);\r\n\t        if (!this.browserDetails.elapsedTimeIncludesDelay)\r\n\t            elapsedTime += this.computedDelay;\r\n\t        event.stopPropagation();\r\n\t        if (elapsedTime >= this.totalTime)\r\n\t            this.handleAnimationCompleted();\r\n\t    };\r\n\t    /**\r\n\t     * Runs all animation callbacks and removes temporary classes\r\n\t     */\r\n\t    Animation.prototype.handleAnimationCompleted = function () {\r\n\t        this.removeClasses(this.data.animationClasses);\r\n\t        this.callbacks.forEach(function (callback) { return callback(); });\r\n\t        this.callbacks = [];\r\n\t        this.eventClearFunctions.forEach(function (fn) { return fn(); });\r\n\t        this.eventClearFunctions = [];\r\n\t        this.completed = true;\r\n\t    };\r\n\t    /**\r\n\t     * Adds animation callbacks to be called upon completion\r\n\t     * @param callback\r\n\t     * @returns {Animation}\r\n\t     */\r\n\t    Animation.prototype.onComplete = function (callback) {\r\n\t        if (this.completed) {\r\n\t            callback();\r\n\t        }\r\n\t        else {\r\n\t            this.callbacks.push(callback);\r\n\t        }\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Converts the duration string to the number of milliseconds\r\n\t     * @param duration\r\n\t     * @returns {number}\r\n\t     */\r\n\t    Animation.prototype.parseDurationString = function (duration) {\r\n\t        var maxValue = 0;\r\n\t        // duration must have at least 2 characters to be valid. (number + type)\r\n\t        if (duration == null || duration.length < 2) {\r\n\t            return maxValue;\r\n\t        }\r\n\t        else if (duration.substring(duration.length - 2) == 'ms') {\r\n\t            var value = lang_1.NumberWrapper.parseInt(this.stripLetters(duration), 10);\r\n\t            if (value > maxValue)\r\n\t                maxValue = value;\r\n\t        }\r\n\t        else if (duration.substring(duration.length - 1) == 's') {\r\n\t            var ms = lang_1.NumberWrapper.parseFloat(this.stripLetters(duration)) * 1000;\r\n\t            var value = math_1.Math.floor(ms);\r\n\t            if (value > maxValue)\r\n\t                maxValue = value;\r\n\t        }\r\n\t        return maxValue;\r\n\t    };\r\n\t    /**\r\n\t     * Strips the letters from the duration string\r\n\t     * @param str\r\n\t     * @returns {string}\r\n\t     */\r\n\t    Animation.prototype.stripLetters = function (str) {\r\n\t        return lang_1.StringWrapper.replaceAll(str, lang_1.RegExpWrapper.create('[^0-9]+$', ''), '');\r\n\t    };\r\n\t    return Animation;\r\n\t})();\r\n\texports.Animation = Animation;\r\n\n\n/***/ },\n/* 588 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var css_animation_options_1 = __webpack_require__(589);\r\n\tvar animation_1 = __webpack_require__(587);\r\n\tvar CssAnimationBuilder = (function () {\r\n\t    /**\r\n\t     * Accepts public properties for CssAnimationBuilder\r\n\t     */\r\n\t    function CssAnimationBuilder(browserDetails) {\r\n\t        this.browserDetails = browserDetails;\r\n\t        /** @type {CssAnimationOptions} */\r\n\t        this.data = new css_animation_options_1.CssAnimationOptions();\r\n\t    }\r\n\t    /**\r\n\t     * Adds a temporary class that will be removed at the end of the animation\r\n\t     * @param className\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.addAnimationClass = function (className) {\r\n\t        this.data.animationClasses.push(className);\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Adds a class that will remain on the element after the animation has finished\r\n\t     * @param className\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.addClass = function (className) {\r\n\t        this.data.classesToAdd.push(className);\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Removes a class from the element\r\n\t     * @param className\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.removeClass = function (className) {\r\n\t        this.data.classesToRemove.push(className);\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Sets the animation duration (and overrides any defined through CSS)\r\n\t     * @param duration\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.setDuration = function (duration) {\r\n\t        this.data.duration = duration;\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Sets the animation delay (and overrides any defined through CSS)\r\n\t     * @param delay\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.setDelay = function (delay) {\r\n\t        this.data.delay = delay;\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Sets styles for both the initial state and the destination state\r\n\t     * @param from\r\n\t     * @param to\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.setStyles = function (from, to) {\r\n\t        return this.setFromStyles(from).setToStyles(to);\r\n\t    };\r\n\t    /**\r\n\t     * Sets the initial styles for the animation\r\n\t     * @param from\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.setFromStyles = function (from) {\r\n\t        this.data.fromStyles = from;\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Sets the destination styles for the animation\r\n\t     * @param to\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.setToStyles = function (to) {\r\n\t        this.data.toStyles = to;\r\n\t        return this;\r\n\t    };\r\n\t    /**\r\n\t     * Starts the animation and returns a promise\r\n\t     * @param element\r\n\t     */\r\n\t    CssAnimationBuilder.prototype.start = function (element) {\r\n\t        return new animation_1.Animation(element, this.data, this.browserDetails);\r\n\t    };\r\n\t    return CssAnimationBuilder;\r\n\t})();\r\n\texports.CssAnimationBuilder = CssAnimationBuilder;\r\n\n\n/***/ },\n/* 589 */\n/***/ function(module, exports) {\n\n\t'use strict';var CssAnimationOptions = (function () {\r\n\t    function CssAnimationOptions() {\r\n\t        /** classes to be added to the element */\r\n\t        this.classesToAdd = [];\r\n\t        /** classes to be removed from the element */\r\n\t        this.classesToRemove = [];\r\n\t        /** classes to be added for the duration of the animation */\r\n\t        this.animationClasses = [];\r\n\t    }\r\n\t    return CssAnimationOptions;\r\n\t})();\r\n\texports.CssAnimationOptions = CssAnimationOptions;\r\n\n\n/***/ },\n/* 590 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar forms_1 = __webpack_require__(268);\r\n\tvar directives_1 = __webpack_require__(262);\r\n\t/**\r\n\t * A collection of Angular core directives that are likely to be used in each and every Angular\r\n\t * application. This includes core directives (e.g., NgIf and NgFor), and forms directives (e.g.,\r\n\t * NgModel).\r\n\t *\r\n\t * This collection can be used to quickly enumerate all the built-in directives in the `directives`\r\n\t * property of the `@Component` decorator.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * Instead of writing:\r\n\t *\r\n\t * ```typescript\r\n\t * import {NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, NgModel, NgForm} from\r\n\t * 'angular2/common';\r\n\t * import {OtherDirective} from './myDirectives';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'my-component',\r\n\t *   templateUrl: 'myComponent.html',\r\n\t *   directives: [NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, NgModel, NgForm,\r\n\t * OtherDirective]\r\n\t * })\r\n\t * export class MyComponent {\r\n\t *   ...\r\n\t * }\r\n\t * ```\r\n\t * one could import all the common directives at once:\r\n\t *\r\n\t * ```typescript\r\n\t * import {COMMON_DIRECTIVES} from 'angular2/common';\r\n\t * import {OtherDirective} from './myDirectives';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'my-component',\r\n\t *   templateUrl: 'myComponent.html',\r\n\t *   directives: [COMMON_DIRECTIVES, OtherDirective]\r\n\t * })\r\n\t * export class MyComponent {\r\n\t *   ...\r\n\t * }\r\n\t * ```\r\n\t */\r\n\texports.COMMON_DIRECTIVES = lang_1.CONST_EXPR([directives_1.CORE_DIRECTIVES, forms_1.FORM_DIRECTIVES]);\r\n\n\n/***/ },\n/* 591 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar ng_class_1 = __webpack_require__(263);\r\n\tvar ng_for_1 = __webpack_require__(264);\r\n\tvar ng_if_1 = __webpack_require__(265);\r\n\tvar ng_style_1 = __webpack_require__(267);\r\n\tvar ng_switch_1 = __webpack_require__(172);\r\n\tvar ng_plural_1 = __webpack_require__(266);\r\n\t/**\r\n\t * A collection of Angular core directives that are likely to be used in each and every Angular\r\n\t * application.\r\n\t *\r\n\t * This collection can be used to quickly enumerate all the built-in directives in the `directives`\r\n\t * property of the `@Component` annotation.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/yakGwpCdUkg0qfzX5m8g?p=preview))\r\n\t *\r\n\t * Instead of writing:\r\n\t *\r\n\t * ```typescript\r\n\t * import {NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault} from 'angular2/common';\r\n\t * import {OtherDirective} from './myDirectives';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'my-component',\r\n\t *   templateUrl: 'myComponent.html',\r\n\t *   directives: [NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, OtherDirective]\r\n\t * })\r\n\t * export class MyComponent {\r\n\t *   ...\r\n\t * }\r\n\t * ```\r\n\t * one could import all the core directives at once:\r\n\t *\r\n\t * ```typescript\r\n\t * import {CORE_DIRECTIVES} from 'angular2/common';\r\n\t * import {OtherDirective} from './myDirectives';\r\n\t *\r\n\t * @Component({\r\n\t *   selector: 'my-component',\r\n\t *   templateUrl: 'myComponent.html',\r\n\t *   directives: [CORE_DIRECTIVES, OtherDirective]\r\n\t * })\r\n\t * export class MyComponent {\r\n\t *   ...\r\n\t * }\r\n\t * ```\r\n\t */\r\n\texports.CORE_DIRECTIVES = lang_1.CONST_EXPR([\r\n\t    ng_class_1.NgClass,\r\n\t    ng_for_1.NgFor,\r\n\t    ng_if_1.NgIf,\r\n\t    ng_style_1.NgStyle,\r\n\t    ng_switch_1.NgSwitch,\r\n\t    ng_switch_1.NgSwitchWhen,\r\n\t    ng_switch_1.NgSwitchDefault,\r\n\t    ng_plural_1.NgPlural,\r\n\t    ng_plural_1.NgPluralCase\r\n\t]);\r\n\n\n/***/ },\n/* 592 */\n/***/ function(module, exports) {\n\n\t'use strict';// TS does not have Observables\r\n\n\n/***/ },\n/* 593 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar ng_control_name_1 = __webpack_require__(175);\r\n\tvar ng_form_control_1 = __webpack_require__(178);\r\n\tvar ng_model_1 = __webpack_require__(180);\r\n\tvar ng_control_group_1 = __webpack_require__(174);\r\n\tvar ng_form_model_1 = __webpack_require__(179);\r\n\tvar ng_form_1 = __webpack_require__(177);\r\n\tvar default_value_accessor_1 = __webpack_require__(121);\r\n\tvar checkbox_value_accessor_1 = __webpack_require__(120);\r\n\tvar number_value_accessor_1 = __webpack_require__(181);\r\n\tvar radio_control_value_accessor_1 = __webpack_require__(122);\r\n\tvar ng_control_status_1 = __webpack_require__(176);\r\n\tvar select_control_value_accessor_1 = __webpack_require__(123);\r\n\tvar validators_1 = __webpack_require__(182);\r\n\tvar ng_control_name_2 = __webpack_require__(175);\r\n\texports.NgControlName = ng_control_name_2.NgControlName;\r\n\tvar ng_form_control_2 = __webpack_require__(178);\r\n\texports.NgFormControl = ng_form_control_2.NgFormControl;\r\n\tvar ng_model_2 = __webpack_require__(180);\r\n\texports.NgModel = ng_model_2.NgModel;\r\n\tvar ng_control_group_2 = __webpack_require__(174);\r\n\texports.NgControlGroup = ng_control_group_2.NgControlGroup;\r\n\tvar ng_form_model_2 = __webpack_require__(179);\r\n\texports.NgFormModel = ng_form_model_2.NgFormModel;\r\n\tvar ng_form_2 = __webpack_require__(177);\r\n\texports.NgForm = ng_form_2.NgForm;\r\n\tvar default_value_accessor_2 = __webpack_require__(121);\r\n\texports.DefaultValueAccessor = default_value_accessor_2.DefaultValueAccessor;\r\n\tvar checkbox_value_accessor_2 = __webpack_require__(120);\r\n\texports.CheckboxControlValueAccessor = checkbox_value_accessor_2.CheckboxControlValueAccessor;\r\n\tvar radio_control_value_accessor_2 = __webpack_require__(122);\r\n\texports.RadioControlValueAccessor = radio_control_value_accessor_2.RadioControlValueAccessor;\r\n\texports.RadioButtonState = radio_control_value_accessor_2.RadioButtonState;\r\n\tvar number_value_accessor_2 = __webpack_require__(181);\r\n\texports.NumberValueAccessor = number_value_accessor_2.NumberValueAccessor;\r\n\tvar ng_control_status_2 = __webpack_require__(176);\r\n\texports.NgControlStatus = ng_control_status_2.NgControlStatus;\r\n\tvar select_control_value_accessor_2 = __webpack_require__(123);\r\n\texports.SelectControlValueAccessor = select_control_value_accessor_2.SelectControlValueAccessor;\r\n\texports.NgSelectOption = select_control_value_accessor_2.NgSelectOption;\r\n\tvar validators_2 = __webpack_require__(182);\r\n\texports.RequiredValidator = validators_2.RequiredValidator;\r\n\texports.MinLengthValidator = validators_2.MinLengthValidator;\r\n\texports.MaxLengthValidator = validators_2.MaxLengthValidator;\r\n\texports.PatternValidator = validators_2.PatternValidator;\r\n\tvar ng_control_1 = __webpack_require__(62);\r\n\texports.NgControl = ng_control_1.NgControl;\r\n\t/**\r\n\t *\r\n\t * A list of all the form directives used as part of a `@Component` annotation.\r\n\t *\r\n\t *  This is a shorthand for importing them each individually.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```typescript\r\n\t * @Component({\r\n\t *   selector: 'my-app',\r\n\t *   directives: [FORM_DIRECTIVES]\r\n\t * })\r\n\t * class MyApp {}\r\n\t * ```\r\n\t */\r\n\texports.FORM_DIRECTIVES = lang_1.CONST_EXPR([\r\n\t    ng_control_name_1.NgControlName,\r\n\t    ng_control_group_1.NgControlGroup,\r\n\t    ng_form_control_1.NgFormControl,\r\n\t    ng_model_1.NgModel,\r\n\t    ng_form_model_1.NgFormModel,\r\n\t    ng_form_1.NgForm,\r\n\t    select_control_value_accessor_1.NgSelectOption,\r\n\t    default_value_accessor_1.DefaultValueAccessor,\r\n\t    number_value_accessor_1.NumberValueAccessor,\r\n\t    checkbox_value_accessor_1.CheckboxControlValueAccessor,\r\n\t    select_control_value_accessor_1.SelectControlValueAccessor,\r\n\t    radio_control_value_accessor_1.RadioControlValueAccessor,\r\n\t    ng_control_status_1.NgControlStatus,\r\n\t    validators_1.RequiredValidator,\r\n\t    validators_1.MinLengthValidator,\r\n\t    validators_1.MaxLengthValidator,\r\n\t    validators_1.PatternValidator\r\n\t]);\r\n\n\n/***/ },\n/* 594 */\n/***/ function(module, exports) {\n\n\t'use strict';function normalizeValidator(validator) {\r\n\t    if (validator.validate !== undefined) {\r\n\t        return function (c) { return validator.validate(c); };\r\n\t    }\r\n\t    else {\r\n\t        return validator;\r\n\t    }\r\n\t}\r\n\texports.normalizeValidator = normalizeValidator;\r\n\tfunction normalizeAsyncValidator(validator) {\r\n\t    if (validator.validate !== undefined) {\r\n\t        return function (c) { return Promise.resolve(validator.validate(c)); };\r\n\t    }\r\n\t    else {\r\n\t        return validator;\r\n\t    }\r\n\t}\r\n\texports.normalizeAsyncValidator = normalizeAsyncValidator;\r\n\n\n/***/ },\n/* 595 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * This module provides a set of common Pipes.\r\n\t */\r\n\tvar async_pipe_1 = __webpack_require__(270);\r\n\texports.AsyncPipe = async_pipe_1.AsyncPipe;\r\n\tvar date_pipe_1 = __webpack_require__(271);\r\n\texports.DatePipe = date_pipe_1.DatePipe;\r\n\tvar json_pipe_1 = __webpack_require__(274);\r\n\texports.JsonPipe = json_pipe_1.JsonPipe;\r\n\tvar slice_pipe_1 = __webpack_require__(278);\r\n\texports.SlicePipe = slice_pipe_1.SlicePipe;\r\n\tvar lowercase_pipe_1 = __webpack_require__(275);\r\n\texports.LowerCasePipe = lowercase_pipe_1.LowerCasePipe;\r\n\tvar number_pipe_1 = __webpack_require__(276);\r\n\texports.NumberPipe = number_pipe_1.NumberPipe;\r\n\texports.DecimalPipe = number_pipe_1.DecimalPipe;\r\n\texports.PercentPipe = number_pipe_1.PercentPipe;\r\n\texports.CurrencyPipe = number_pipe_1.CurrencyPipe;\r\n\tvar uppercase_pipe_1 = __webpack_require__(279);\r\n\texports.UpperCasePipe = uppercase_pipe_1.UpperCasePipe;\r\n\tvar replace_pipe_1 = __webpack_require__(277);\r\n\texports.ReplacePipe = replace_pipe_1.ReplacePipe;\r\n\tvar i18n_plural_pipe_1 = __webpack_require__(272);\r\n\texports.I18nPluralPipe = i18n_plural_pipe_1.I18nPluralPipe;\r\n\tvar i18n_select_pipe_1 = __webpack_require__(273);\r\n\texports.I18nSelectPipe = i18n_select_pipe_1.I18nSelectPipe;\r\n\tvar common_pipes_1 = __webpack_require__(596);\r\n\texports.COMMON_PIPES = common_pipes_1.COMMON_PIPES;\r\n\n\n/***/ },\n/* 596 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';/**\r\n\t * @module\r\n\t * @description\r\n\t * This module provides a set of common Pipes.\r\n\t */\r\n\tvar async_pipe_1 = __webpack_require__(270);\r\n\tvar uppercase_pipe_1 = __webpack_require__(279);\r\n\tvar lowercase_pipe_1 = __webpack_require__(275);\r\n\tvar json_pipe_1 = __webpack_require__(274);\r\n\tvar slice_pipe_1 = __webpack_require__(278);\r\n\tvar date_pipe_1 = __webpack_require__(271);\r\n\tvar number_pipe_1 = __webpack_require__(276);\r\n\tvar replace_pipe_1 = __webpack_require__(277);\r\n\tvar i18n_plural_pipe_1 = __webpack_require__(272);\r\n\tvar i18n_select_pipe_1 = __webpack_require__(273);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * A collection of Angular core pipes that are likely to be used in each and every\r\n\t * application.\r\n\t *\r\n\t * This collection can be used to quickly enumerate all the built-in pipes in the `pipes`\r\n\t * property of the `@Component` decorator.\r\n\t */\r\n\texports.COMMON_PIPES = lang_1.CONST_EXPR([\r\n\t    async_pipe_1.AsyncPipe,\r\n\t    uppercase_pipe_1.UpperCasePipe,\r\n\t    lowercase_pipe_1.LowerCasePipe,\r\n\t    json_pipe_1.JsonPipe,\r\n\t    slice_pipe_1.SlicePipe,\r\n\t    number_pipe_1.DecimalPipe,\r\n\t    number_pipe_1.PercentPipe,\r\n\t    number_pipe_1.CurrencyPipe,\r\n\t    date_pipe_1.DatePipe,\r\n\t    replace_pipe_1.ReplacePipe,\r\n\t    i18n_plural_pipe_1.I18nPluralPipe,\r\n\t    i18n_select_pipe_1.I18nSelectPipe\r\n\t]);\r\n\n\n/***/ },\n/* 597 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar template_ast_1 = __webpack_require__(78);\r\n\tvar interfaces_1 = __webpack_require__(130);\r\n\tfunction createChangeDetectorDefinitions(componentType, componentStrategy, genConfig, parsedTemplate) {\r\n\t    var pvVisitors = [];\r\n\t    var visitor = new ProtoViewVisitor(null, pvVisitors, componentStrategy);\r\n\t    template_ast_1.templateVisitAll(visitor, parsedTemplate);\r\n\t    return createChangeDefinitions(pvVisitors, componentType, genConfig);\r\n\t}\r\n\texports.createChangeDetectorDefinitions = createChangeDetectorDefinitions;\r\n\tvar ProtoViewVisitor = (function () {\r\n\t    function ProtoViewVisitor(parent, allVisitors, strategy) {\r\n\t        this.parent = parent;\r\n\t        this.allVisitors = allVisitors;\r\n\t        this.strategy = strategy;\r\n\t        this.nodeCount = 0;\r\n\t        this.boundElementCount = 0;\r\n\t        this.variableNames = [];\r\n\t        this.bindingRecords = [];\r\n\t        this.eventRecords = [];\r\n\t        this.directiveRecords = [];\r\n\t        this.viewIndex = allVisitors.length;\r\n\t        allVisitors.push(this);\r\n\t    }\r\n\t    ProtoViewVisitor.prototype.visitEmbeddedTemplate = function (ast, context) {\r\n\t        this.nodeCount++;\r\n\t        this.boundElementCount++;\r\n\t        template_ast_1.templateVisitAll(this, ast.outputs);\r\n\t        for (var i = 0; i < ast.directives.length; i++) {\r\n\t            ast.directives[i].visit(this, i);\r\n\t        }\r\n\t        var childVisitor = new ProtoViewVisitor(this, this.allVisitors, change_detection_1.ChangeDetectionStrategy.Default);\r\n\t        // Attention: variables present on an embedded template count towards\r\n\t        // the embedded template and not the template anchor!\r\n\t        template_ast_1.templateVisitAll(childVisitor, ast.vars);\r\n\t        template_ast_1.templateVisitAll(childVisitor, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitElement = function (ast, context) {\r\n\t        this.nodeCount++;\r\n\t        if (ast.isBound()) {\r\n\t            this.boundElementCount++;\r\n\t        }\r\n\t        template_ast_1.templateVisitAll(this, ast.inputs, null);\r\n\t        template_ast_1.templateVisitAll(this, ast.outputs);\r\n\t        template_ast_1.templateVisitAll(this, ast.exportAsVars);\r\n\t        for (var i = 0; i < ast.directives.length; i++) {\r\n\t            ast.directives[i].visit(this, i);\r\n\t        }\r\n\t        template_ast_1.templateVisitAll(this, ast.children);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitNgContent = function (ast, context) { return null; };\r\n\t    ProtoViewVisitor.prototype.visitVariable = function (ast, context) {\r\n\t        this.variableNames.push(ast.name);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitEvent = function (ast, directiveRecord) {\r\n\t        var bindingRecord = lang_1.isPresent(directiveRecord) ?\r\n\t            change_detection_1.BindingRecord.createForHostEvent(ast.handler, ast.fullName, directiveRecord) :\r\n\t            change_detection_1.BindingRecord.createForEvent(ast.handler, ast.fullName, this.boundElementCount - 1);\r\n\t        this.eventRecords.push(bindingRecord);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitElementProperty = function (ast, directiveRecord) {\r\n\t        var boundElementIndex = this.boundElementCount - 1;\r\n\t        var dirIndex = lang_1.isPresent(directiveRecord) ? directiveRecord.directiveIndex : null;\r\n\t        var bindingRecord;\r\n\t        if (ast.type === template_ast_1.PropertyBindingType.Property) {\r\n\t            bindingRecord =\r\n\t                lang_1.isPresent(dirIndex) ?\r\n\t                    change_detection_1.BindingRecord.createForHostProperty(dirIndex, ast.value, ast.name) :\r\n\t                    change_detection_1.BindingRecord.createForElementProperty(ast.value, boundElementIndex, ast.name);\r\n\t        }\r\n\t        else if (ast.type === template_ast_1.PropertyBindingType.Attribute) {\r\n\t            bindingRecord =\r\n\t                lang_1.isPresent(dirIndex) ?\r\n\t                    change_detection_1.BindingRecord.createForHostAttribute(dirIndex, ast.value, ast.name) :\r\n\t                    change_detection_1.BindingRecord.createForElementAttribute(ast.value, boundElementIndex, ast.name);\r\n\t        }\r\n\t        else if (ast.type === template_ast_1.PropertyBindingType.Class) {\r\n\t            bindingRecord =\r\n\t                lang_1.isPresent(dirIndex) ?\r\n\t                    change_detection_1.BindingRecord.createForHostClass(dirIndex, ast.value, ast.name) :\r\n\t                    change_detection_1.BindingRecord.createForElementClass(ast.value, boundElementIndex, ast.name);\r\n\t        }\r\n\t        else if (ast.type === template_ast_1.PropertyBindingType.Style) {\r\n\t            bindingRecord =\r\n\t                lang_1.isPresent(dirIndex) ?\r\n\t                    change_detection_1.BindingRecord.createForHostStyle(dirIndex, ast.value, ast.name, ast.unit) :\r\n\t                    change_detection_1.BindingRecord.createForElementStyle(ast.value, boundElementIndex, ast.name, ast.unit);\r\n\t        }\r\n\t        this.bindingRecords.push(bindingRecord);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitAttr = function (ast, context) { return null; };\r\n\t    ProtoViewVisitor.prototype.visitBoundText = function (ast, context) {\r\n\t        var nodeIndex = this.nodeCount++;\r\n\t        this.bindingRecords.push(change_detection_1.BindingRecord.createForTextNode(ast.value, nodeIndex));\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitText = function (ast, context) {\r\n\t        this.nodeCount++;\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitDirective = function (ast, directiveIndexAsNumber) {\r\n\t        var directiveIndex = new change_detection_1.DirectiveIndex(this.boundElementCount - 1, directiveIndexAsNumber);\r\n\t        var directiveMetadata = ast.directive;\r\n\t        var outputsArray = [];\r\n\t        collection_1.StringMapWrapper.forEach(ast.directive.outputs, function (eventName, dirProperty) { return outputsArray.push([dirProperty, eventName]); });\r\n\t        var directiveRecord = new change_detection_1.DirectiveRecord({\r\n\t            directiveIndex: directiveIndex,\r\n\t            callAfterContentInit: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterContentInit) !== -1,\r\n\t            callAfterContentChecked: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterContentChecked) !== -1,\r\n\t            callAfterViewInit: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterViewInit) !== -1,\r\n\t            callAfterViewChecked: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.AfterViewChecked) !== -1,\r\n\t            callOnChanges: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.OnChanges) !== -1,\r\n\t            callDoCheck: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.DoCheck) !== -1,\r\n\t            callOnInit: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.OnInit) !== -1,\r\n\t            callOnDestroy: directiveMetadata.lifecycleHooks.indexOf(interfaces_1.LifecycleHooks.OnDestroy) !== -1,\r\n\t            changeDetection: directiveMetadata.changeDetection,\r\n\t            outputs: outputsArray\r\n\t        });\r\n\t        this.directiveRecords.push(directiveRecord);\r\n\t        template_ast_1.templateVisitAll(this, ast.inputs, directiveRecord);\r\n\t        var bindingRecords = this.bindingRecords;\r\n\t        if (directiveRecord.callOnChanges) {\r\n\t            bindingRecords.push(change_detection_1.BindingRecord.createDirectiveOnChanges(directiveRecord));\r\n\t        }\r\n\t        if (directiveRecord.callOnInit) {\r\n\t            bindingRecords.push(change_detection_1.BindingRecord.createDirectiveOnInit(directiveRecord));\r\n\t        }\r\n\t        if (directiveRecord.callDoCheck) {\r\n\t            bindingRecords.push(change_detection_1.BindingRecord.createDirectiveDoCheck(directiveRecord));\r\n\t        }\r\n\t        template_ast_1.templateVisitAll(this, ast.hostProperties, directiveRecord);\r\n\t        template_ast_1.templateVisitAll(this, ast.hostEvents, directiveRecord);\r\n\t        template_ast_1.templateVisitAll(this, ast.exportAsVars);\r\n\t        return null;\r\n\t    };\r\n\t    ProtoViewVisitor.prototype.visitDirectiveProperty = function (ast, directiveRecord) {\r\n\t        // TODO: these setters should eventually be created by change detection, to make\r\n\t        // it monomorphic!\r\n\t        var setter = reflection_1.reflector.setter(ast.directiveName);\r\n\t        this.bindingRecords.push(change_detection_1.BindingRecord.createForDirective(ast.value, ast.directiveName, setter, directiveRecord));\r\n\t        return null;\r\n\t    };\r\n\t    return ProtoViewVisitor;\r\n\t})();\r\n\tfunction createChangeDefinitions(pvVisitors, componentType, genConfig) {\r\n\t    var pvVariableNames = _collectNestedProtoViewsVariableNames(pvVisitors);\r\n\t    return pvVisitors.map(function (pvVisitor) {\r\n\t        var id = componentType.name + \"_\" + pvVisitor.viewIndex;\r\n\t        return new change_detection_1.ChangeDetectorDefinition(id, pvVisitor.strategy, pvVariableNames[pvVisitor.viewIndex], pvVisitor.bindingRecords, pvVisitor.eventRecords, pvVisitor.directiveRecords, genConfig);\r\n\t    });\r\n\t}\r\n\tfunction _collectNestedProtoViewsVariableNames(pvVisitors) {\r\n\t    var nestedPvVariableNames = collection_1.ListWrapper.createFixedSize(pvVisitors.length);\r\n\t    pvVisitors.forEach(function (pv) {\r\n\t        var parentVariableNames = lang_1.isPresent(pv.parent) ? nestedPvVariableNames[pv.parent.viewIndex] : [];\r\n\t        nestedPvVariableNames[pv.viewIndex] = parentVariableNames.concat(pv.variableNames);\r\n\t    });\r\n\t    return nestedPvVariableNames;\r\n\t}\r\n\n\n/***/ },\n/* 598 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';function __export(m) {\r\n\t    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n\t}\r\n\tvar runtime_compiler_1 = __webpack_require__(281);\r\n\tvar template_compiler_1 = __webpack_require__(189);\r\n\texports.TemplateCompiler = template_compiler_1.TemplateCompiler;\r\n\tvar directive_metadata_1 = __webpack_require__(125);\r\n\texports.CompileDirectiveMetadata = directive_metadata_1.CompileDirectiveMetadata;\r\n\texports.CompileTypeMetadata = directive_metadata_1.CompileTypeMetadata;\r\n\texports.CompileTemplateMetadata = directive_metadata_1.CompileTemplateMetadata;\r\n\tvar source_module_1 = __webpack_require__(77);\r\n\texports.SourceModule = source_module_1.SourceModule;\r\n\texports.SourceWithImports = source_module_1.SourceWithImports;\r\n\tvar platform_directives_and_pipes_1 = __webpack_require__(204);\r\n\texports.PLATFORM_DIRECTIVES = platform_directives_and_pipes_1.PLATFORM_DIRECTIVES;\r\n\texports.PLATFORM_PIPES = platform_directives_and_pipes_1.PLATFORM_PIPES;\r\n\t__export(__webpack_require__(78));\r\n\tvar template_parser_1 = __webpack_require__(190);\r\n\texports.TEMPLATE_TRANSFORMS = template_parser_1.TEMPLATE_TRANSFORMS;\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar template_parser_2 = __webpack_require__(190);\r\n\tvar html_parser_1 = __webpack_require__(184);\r\n\tvar template_normalizer_1 = __webpack_require__(285);\r\n\tvar runtime_metadata_1 = __webpack_require__(282);\r\n\tvar change_detector_compiler_1 = __webpack_require__(280);\r\n\tvar style_compiler_1 = __webpack_require__(284);\r\n\tvar view_compiler_1 = __webpack_require__(287);\r\n\tvar proto_view_compiler_1 = __webpack_require__(186);\r\n\tvar template_compiler_2 = __webpack_require__(189);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar compiler_1 = __webpack_require__(81);\r\n\tvar runtime_compiler_2 = __webpack_require__(281);\r\n\tvar element_schema_registry_1 = __webpack_require__(187);\r\n\tvar dom_element_schema_registry_1 = __webpack_require__(600);\r\n\tvar url_resolver_1 = __webpack_require__(92);\r\n\tvar change_detection_2 = __webpack_require__(37);\r\n\tfunction _createChangeDetectorGenConfig() {\r\n\t    return new change_detection_1.ChangeDetectorGenConfig(lang_1.assertionsEnabled(), false, true);\r\n\t}\r\n\t/**\r\n\t * A set of providers that provide `RuntimeCompiler` and its dependencies to use for\r\n\t * template compilation.\r\n\t */\r\n\texports.COMPILER_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    change_detection_2.Lexer,\r\n\t    change_detection_2.Parser,\r\n\t    html_parser_1.HtmlParser,\r\n\t    template_parser_2.TemplateParser,\r\n\t    template_normalizer_1.TemplateNormalizer,\r\n\t    runtime_metadata_1.RuntimeMetadataResolver,\r\n\t    url_resolver_1.DEFAULT_PACKAGE_URL_PROVIDER,\r\n\t    style_compiler_1.StyleCompiler,\r\n\t    proto_view_compiler_1.ProtoViewCompiler,\r\n\t    view_compiler_1.ViewCompiler,\r\n\t    change_detector_compiler_1.ChangeDetectionCompiler,\r\n\t    new di_1.Provider(change_detection_1.ChangeDetectorGenConfig, { useFactory: _createChangeDetectorGenConfig, deps: [] }),\r\n\t    template_compiler_2.TemplateCompiler,\r\n\t    new di_1.Provider(runtime_compiler_2.RuntimeCompiler, { useClass: runtime_compiler_1.RuntimeCompiler_ }),\r\n\t    new di_1.Provider(compiler_1.Compiler, { useExisting: runtime_compiler_2.RuntimeCompiler }),\r\n\t    dom_element_schema_registry_1.DomElementSchemaRegistry,\r\n\t    new di_1.Provider(element_schema_registry_1.ElementSchemaRegistry, { useExisting: dom_element_schema_registry_1.DomElementSchemaRegistry }),\r\n\t    url_resolver_1.UrlResolver\r\n\t]);\r\n\n\n/***/ },\n/* 599 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar parse_util_1 = __webpack_require__(185);\r\n\tvar html_tags_1 = __webpack_require__(91);\r\n\t(function (HtmlTokenType) {\r\n\t    HtmlTokenType[HtmlTokenType[\"TAG_OPEN_START\"] = 0] = \"TAG_OPEN_START\";\r\n\t    HtmlTokenType[HtmlTokenType[\"TAG_OPEN_END\"] = 1] = \"TAG_OPEN_END\";\r\n\t    HtmlTokenType[HtmlTokenType[\"TAG_OPEN_END_VOID\"] = 2] = \"TAG_OPEN_END_VOID\";\r\n\t    HtmlTokenType[HtmlTokenType[\"TAG_CLOSE\"] = 3] = \"TAG_CLOSE\";\r\n\t    HtmlTokenType[HtmlTokenType[\"TEXT\"] = 4] = \"TEXT\";\r\n\t    HtmlTokenType[HtmlTokenType[\"ESCAPABLE_RAW_TEXT\"] = 5] = \"ESCAPABLE_RAW_TEXT\";\r\n\t    HtmlTokenType[HtmlTokenType[\"RAW_TEXT\"] = 6] = \"RAW_TEXT\";\r\n\t    HtmlTokenType[HtmlTokenType[\"COMMENT_START\"] = 7] = \"COMMENT_START\";\r\n\t    HtmlTokenType[HtmlTokenType[\"COMMENT_END\"] = 8] = \"COMMENT_END\";\r\n\t    HtmlTokenType[HtmlTokenType[\"CDATA_START\"] = 9] = \"CDATA_START\";\r\n\t    HtmlTokenType[HtmlTokenType[\"CDATA_END\"] = 10] = \"CDATA_END\";\r\n\t    HtmlTokenType[HtmlTokenType[\"ATTR_NAME\"] = 11] = \"ATTR_NAME\";\r\n\t    HtmlTokenType[HtmlTokenType[\"ATTR_VALUE\"] = 12] = \"ATTR_VALUE\";\r\n\t    HtmlTokenType[HtmlTokenType[\"DOC_TYPE\"] = 13] = \"DOC_TYPE\";\r\n\t    HtmlTokenType[HtmlTokenType[\"EOF\"] = 14] = \"EOF\";\r\n\t})(exports.HtmlTokenType || (exports.HtmlTokenType = {}));\r\n\tvar HtmlTokenType = exports.HtmlTokenType;\r\n\tvar HtmlToken = (function () {\r\n\t    function HtmlToken(type, parts, sourceSpan) {\r\n\t        this.type = type;\r\n\t        this.parts = parts;\r\n\t        this.sourceSpan = sourceSpan;\r\n\t    }\r\n\t    return HtmlToken;\r\n\t})();\r\n\texports.HtmlToken = HtmlToken;\r\n\tvar HtmlTokenError = (function (_super) {\r\n\t    __extends(HtmlTokenError, _super);\r\n\t    function HtmlTokenError(errorMsg, tokenType, span) {\r\n\t        _super.call(this, span, errorMsg);\r\n\t        this.tokenType = tokenType;\r\n\t    }\r\n\t    return HtmlTokenError;\r\n\t})(parse_util_1.ParseError);\r\n\texports.HtmlTokenError = HtmlTokenError;\r\n\tvar HtmlTokenizeResult = (function () {\r\n\t    function HtmlTokenizeResult(tokens, errors) {\r\n\t        this.tokens = tokens;\r\n\t        this.errors = errors;\r\n\t    }\r\n\t    return HtmlTokenizeResult;\r\n\t})();\r\n\texports.HtmlTokenizeResult = HtmlTokenizeResult;\r\n\tfunction tokenizeHtml(sourceContent, sourceUrl) {\r\n\t    return new _HtmlTokenizer(new parse_util_1.ParseSourceFile(sourceContent, sourceUrl)).tokenize();\r\n\t}\r\n\texports.tokenizeHtml = tokenizeHtml;\r\n\tvar $EOF = 0;\r\n\tvar $TAB = 9;\r\n\tvar $LF = 10;\r\n\tvar $FF = 12;\r\n\tvar $CR = 13;\r\n\tvar $SPACE = 32;\r\n\tvar $BANG = 33;\r\n\tvar $DQ = 34;\r\n\tvar $HASH = 35;\r\n\tvar $$ = 36;\r\n\tvar $AMPERSAND = 38;\r\n\tvar $SQ = 39;\r\n\tvar $MINUS = 45;\r\n\tvar $SLASH = 47;\r\n\tvar $0 = 48;\r\n\tvar $SEMICOLON = 59;\r\n\tvar $9 = 57;\r\n\tvar $COLON = 58;\r\n\tvar $LT = 60;\r\n\tvar $EQ = 61;\r\n\tvar $GT = 62;\r\n\tvar $QUESTION = 63;\r\n\tvar $LBRACKET = 91;\r\n\tvar $RBRACKET = 93;\r\n\tvar $A = 65;\r\n\tvar $F = 70;\r\n\tvar $X = 88;\r\n\tvar $Z = 90;\r\n\tvar $a = 97;\r\n\tvar $f = 102;\r\n\tvar $z = 122;\r\n\tvar $x = 120;\r\n\tvar $NBSP = 160;\r\n\tvar CR_OR_CRLF_REGEXP = /\\r\\n?/g;\r\n\tfunction unexpectedCharacterErrorMsg(charCode) {\r\n\t    var char = charCode === $EOF ? 'EOF' : lang_1.StringWrapper.fromCharCode(charCode);\r\n\t    return \"Unexpected character \\\"\" + char + \"\\\"\";\r\n\t}\r\n\tfunction unknownEntityErrorMsg(entitySrc) {\r\n\t    return \"Unknown entity \\\"\" + entitySrc + \"\\\" - use the \\\"&#<decimal>;\\\" or  \\\"&#x<hex>;\\\" syntax\";\r\n\t}\r\n\tvar ControlFlowError = (function () {\r\n\t    function ControlFlowError(error) {\r\n\t        this.error = error;\r\n\t    }\r\n\t    return ControlFlowError;\r\n\t})();\r\n\t// See http://www.w3.org/TR/html51/syntax.html#writing\r\n\tvar _HtmlTokenizer = (function () {\r\n\t    function _HtmlTokenizer(file) {\r\n\t        this.file = file;\r\n\t        // Note: this is always lowercase!\r\n\t        this.peek = -1;\r\n\t        this.index = -1;\r\n\t        this.line = 0;\r\n\t        this.column = -1;\r\n\t        this.tokens = [];\r\n\t        this.errors = [];\r\n\t        this.input = file.content;\r\n\t        this.length = file.content.length;\r\n\t        this._advance();\r\n\t    }\r\n\t    _HtmlTokenizer.prototype._processCarriageReturns = function (content) {\r\n\t        // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream\r\n\t        // In order to keep the original position in the source, we can not\r\n\t        // pre-process it.\r\n\t        // Instead CRs are processed right before instantiating the tokens.\r\n\t        return lang_1.StringWrapper.replaceAll(content, CR_OR_CRLF_REGEXP, '\\n');\r\n\t    };\r\n\t    _HtmlTokenizer.prototype.tokenize = function () {\r\n\t        while (this.peek !== $EOF) {\r\n\t            var start = this._getLocation();\r\n\t            try {\r\n\t                if (this._attemptCharCode($LT)) {\r\n\t                    if (this._attemptCharCode($BANG)) {\r\n\t                        if (this._attemptCharCode($LBRACKET)) {\r\n\t                            this._consumeCdata(start);\r\n\t                        }\r\n\t                        else if (this._attemptCharCode($MINUS)) {\r\n\t                            this._consumeComment(start);\r\n\t                        }\r\n\t                        else {\r\n\t                            this._consumeDocType(start);\r\n\t                        }\r\n\t                    }\r\n\t                    else if (this._attemptCharCode($SLASH)) {\r\n\t                        this._consumeTagClose(start);\r\n\t                    }\r\n\t                    else {\r\n\t                        this._consumeTagOpen(start);\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    this._consumeText();\r\n\t                }\r\n\t            }\r\n\t            catch (e) {\r\n\t                if (e instanceof ControlFlowError) {\r\n\t                    this.errors.push(e.error);\r\n\t                }\r\n\t                else {\r\n\t                    throw e;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this._beginToken(HtmlTokenType.EOF);\r\n\t        this._endToken([]);\r\n\t        return new HtmlTokenizeResult(mergeTextTokens(this.tokens), this.errors);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._getLocation = function () {\r\n\t        return new parse_util_1.ParseLocation(this.file, this.index, this.line, this.column);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._getSpan = function (start, end) {\r\n\t        if (lang_1.isBlank(start)) {\r\n\t            start = this._getLocation();\r\n\t        }\r\n\t        if (lang_1.isBlank(end)) {\r\n\t            end = this._getLocation();\r\n\t        }\r\n\t        return new parse_util_1.ParseSourceSpan(start, end);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._beginToken = function (type, start) {\r\n\t        if (start === void 0) { start = null; }\r\n\t        if (lang_1.isBlank(start)) {\r\n\t            start = this._getLocation();\r\n\t        }\r\n\t        this.currentTokenStart = start;\r\n\t        this.currentTokenType = type;\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._endToken = function (parts, end) {\r\n\t        if (end === void 0) { end = null; }\r\n\t        if (lang_1.isBlank(end)) {\r\n\t            end = this._getLocation();\r\n\t        }\r\n\t        var token = new HtmlToken(this.currentTokenType, parts, new parse_util_1.ParseSourceSpan(this.currentTokenStart, end));\r\n\t        this.tokens.push(token);\r\n\t        this.currentTokenStart = null;\r\n\t        this.currentTokenType = null;\r\n\t        return token;\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._createError = function (msg, span) {\r\n\t        var error = new HtmlTokenError(msg, this.currentTokenType, span);\r\n\t        this.currentTokenStart = null;\r\n\t        this.currentTokenType = null;\r\n\t        return new ControlFlowError(error);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._advance = function () {\r\n\t        if (this.index >= this.length) {\r\n\t            throw this._createError(unexpectedCharacterErrorMsg($EOF), this._getSpan());\r\n\t        }\r\n\t        if (this.peek === $LF) {\r\n\t            this.line++;\r\n\t            this.column = 0;\r\n\t        }\r\n\t        else if (this.peek !== $LF && this.peek !== $CR) {\r\n\t            this.column++;\r\n\t        }\r\n\t        this.index++;\r\n\t        this.peek = this.index >= this.length ? $EOF : lang_1.StringWrapper.charCodeAt(this.input, this.index);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._attemptCharCode = function (charCode) {\r\n\t        if (this.peek === charCode) {\r\n\t            this._advance();\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._attemptCharCodeCaseInsensitive = function (charCode) {\r\n\t        if (compareCharCodeCaseInsensitive(this.peek, charCode)) {\r\n\t            this._advance();\r\n\t            return true;\r\n\t        }\r\n\t        return false;\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._requireCharCode = function (charCode) {\r\n\t        var location = this._getLocation();\r\n\t        if (!this._attemptCharCode(charCode)) {\r\n\t            throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan(location, location));\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._attemptStr = function (chars) {\r\n\t        for (var i = 0; i < chars.length; i++) {\r\n\t            if (!this._attemptCharCode(lang_1.StringWrapper.charCodeAt(chars, i))) {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._attemptStrCaseInsensitive = function (chars) {\r\n\t        for (var i = 0; i < chars.length; i++) {\r\n\t            if (!this._attemptCharCodeCaseInsensitive(lang_1.StringWrapper.charCodeAt(chars, i))) {\r\n\t                return false;\r\n\t            }\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._requireStr = function (chars) {\r\n\t        var location = this._getLocation();\r\n\t        if (!this._attemptStr(chars)) {\r\n\t            throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan(location));\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._attemptCharCodeUntilFn = function (predicate) {\r\n\t        while (!predicate(this.peek)) {\r\n\t            this._advance();\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._requireCharCodeUntilFn = function (predicate, len) {\r\n\t        var start = this._getLocation();\r\n\t        this._attemptCharCodeUntilFn(predicate);\r\n\t        if (this.index - start.offset < len) {\r\n\t            throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan(start, start));\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._attemptUntilChar = function (char) {\r\n\t        while (this.peek !== char) {\r\n\t            this._advance();\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._readChar = function (decodeEntities) {\r\n\t        if (decodeEntities && this.peek === $AMPERSAND) {\r\n\t            return this._decodeEntity();\r\n\t        }\r\n\t        else {\r\n\t            var index = this.index;\r\n\t            this._advance();\r\n\t            return this.input[index];\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._decodeEntity = function () {\r\n\t        var start = this._getLocation();\r\n\t        this._advance();\r\n\t        if (this._attemptCharCode($HASH)) {\r\n\t            var isHex = this._attemptCharCode($x) || this._attemptCharCode($X);\r\n\t            var numberStart = this._getLocation().offset;\r\n\t            this._attemptCharCodeUntilFn(isDigitEntityEnd);\r\n\t            if (this.peek != $SEMICOLON) {\r\n\t                throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan());\r\n\t            }\r\n\t            this._advance();\r\n\t            var strNum = this.input.substring(numberStart, this.index - 1);\r\n\t            try {\r\n\t                var charCode = lang_1.NumberWrapper.parseInt(strNum, isHex ? 16 : 10);\r\n\t                return lang_1.StringWrapper.fromCharCode(charCode);\r\n\t            }\r\n\t            catch (e) {\r\n\t                var entity = this.input.substring(start.offset + 1, this.index - 1);\r\n\t                throw this._createError(unknownEntityErrorMsg(entity), this._getSpan(start));\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            var startPosition = this._savePosition();\r\n\t            this._attemptCharCodeUntilFn(isNamedEntityEnd);\r\n\t            if (this.peek != $SEMICOLON) {\r\n\t                this._restorePosition(startPosition);\r\n\t                return '&';\r\n\t            }\r\n\t            this._advance();\r\n\t            var name_1 = this.input.substring(start.offset + 1, this.index - 1);\r\n\t            var char = html_tags_1.NAMED_ENTITIES[name_1];\r\n\t            if (lang_1.isBlank(char)) {\r\n\t                throw this._createError(unknownEntityErrorMsg(name_1), this._getSpan(start));\r\n\t            }\r\n\t            return char;\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeRawText = function (decodeEntities, firstCharOfEnd, attemptEndRest) {\r\n\t        var tagCloseStart;\r\n\t        var textStart = this._getLocation();\r\n\t        this._beginToken(decodeEntities ? HtmlTokenType.ESCAPABLE_RAW_TEXT : HtmlTokenType.RAW_TEXT, textStart);\r\n\t        var parts = [];\r\n\t        while (true) {\r\n\t            tagCloseStart = this._getLocation();\r\n\t            if (this._attemptCharCode(firstCharOfEnd) && attemptEndRest()) {\r\n\t                break;\r\n\t            }\r\n\t            if (this.index > tagCloseStart.offset) {\r\n\t                parts.push(this.input.substring(tagCloseStart.offset, this.index));\r\n\t            }\r\n\t            while (this.peek !== firstCharOfEnd) {\r\n\t                parts.push(this._readChar(decodeEntities));\r\n\t            }\r\n\t        }\r\n\t        return this._endToken([this._processCarriageReturns(parts.join(''))], tagCloseStart);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeComment = function (start) {\r\n\t        var _this = this;\r\n\t        this._beginToken(HtmlTokenType.COMMENT_START, start);\r\n\t        this._requireCharCode($MINUS);\r\n\t        this._endToken([]);\r\n\t        var textToken = this._consumeRawText(false, $MINUS, function () { return _this._attemptStr('->'); });\r\n\t        this._beginToken(HtmlTokenType.COMMENT_END, textToken.sourceSpan.end);\r\n\t        this._endToken([]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeCdata = function (start) {\r\n\t        var _this = this;\r\n\t        this._beginToken(HtmlTokenType.CDATA_START, start);\r\n\t        this._requireStr('CDATA[');\r\n\t        this._endToken([]);\r\n\t        var textToken = this._consumeRawText(false, $RBRACKET, function () { return _this._attemptStr(']>'); });\r\n\t        this._beginToken(HtmlTokenType.CDATA_END, textToken.sourceSpan.end);\r\n\t        this._endToken([]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeDocType = function (start) {\r\n\t        this._beginToken(HtmlTokenType.DOC_TYPE, start);\r\n\t        this._attemptUntilChar($GT);\r\n\t        this._advance();\r\n\t        this._endToken([this.input.substring(start.offset + 2, this.index - 1)]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumePrefixAndName = function () {\r\n\t        var nameOrPrefixStart = this.index;\r\n\t        var prefix = null;\r\n\t        while (this.peek !== $COLON && !isPrefixEnd(this.peek)) {\r\n\t            this._advance();\r\n\t        }\r\n\t        var nameStart;\r\n\t        if (this.peek === $COLON) {\r\n\t            this._advance();\r\n\t            prefix = this.input.substring(nameOrPrefixStart, this.index - 1);\r\n\t            nameStart = this.index;\r\n\t        }\r\n\t        else {\r\n\t            nameStart = nameOrPrefixStart;\r\n\t        }\r\n\t        this._requireCharCodeUntilFn(isNameEnd, this.index === nameStart ? 1 : 0);\r\n\t        var name = this.input.substring(nameStart, this.index);\r\n\t        return [prefix, name];\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeTagOpen = function (start) {\r\n\t        var savedPos = this._savePosition();\r\n\t        var lowercaseTagName;\r\n\t        try {\r\n\t            if (!isAsciiLetter(this.peek)) {\r\n\t                throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan());\r\n\t            }\r\n\t            var nameStart = this.index;\r\n\t            this._consumeTagOpenStart(start);\r\n\t            lowercaseTagName = this.input.substring(nameStart, this.index).toLowerCase();\r\n\t            this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t            while (this.peek !== $SLASH && this.peek !== $GT) {\r\n\t                this._consumeAttributeName();\r\n\t                this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t                if (this._attemptCharCode($EQ)) {\r\n\t                    this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t                    this._consumeAttributeValue();\r\n\t                }\r\n\t                this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t            }\r\n\t            this._consumeTagOpenEnd();\r\n\t        }\r\n\t        catch (e) {\r\n\t            if (e instanceof ControlFlowError) {\r\n\t                // When the start tag is invalid, assume we want a \"<\"\r\n\t                this._restorePosition(savedPos);\r\n\t                // Back to back text tokens are merged at the end\r\n\t                this._beginToken(HtmlTokenType.TEXT, start);\r\n\t                this._endToken(['<']);\r\n\t                return;\r\n\t            }\r\n\t            throw e;\r\n\t        }\r\n\t        var contentTokenType = html_tags_1.getHtmlTagDefinition(lowercaseTagName).contentType;\r\n\t        if (contentTokenType === html_tags_1.HtmlTagContentType.RAW_TEXT) {\r\n\t            this._consumeRawTextWithTagClose(lowercaseTagName, false);\r\n\t        }\r\n\t        else if (contentTokenType === html_tags_1.HtmlTagContentType.ESCAPABLE_RAW_TEXT) {\r\n\t            this._consumeRawTextWithTagClose(lowercaseTagName, true);\r\n\t        }\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeRawTextWithTagClose = function (lowercaseTagName, decodeEntities) {\r\n\t        var _this = this;\r\n\t        var textToken = this._consumeRawText(decodeEntities, $LT, function () {\r\n\t            if (!_this._attemptCharCode($SLASH))\r\n\t                return false;\r\n\t            _this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t            if (!_this._attemptStrCaseInsensitive(lowercaseTagName))\r\n\t                return false;\r\n\t            _this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t            if (!_this._attemptCharCode($GT))\r\n\t                return false;\r\n\t            return true;\r\n\t        });\r\n\t        this._beginToken(HtmlTokenType.TAG_CLOSE, textToken.sourceSpan.end);\r\n\t        this._endToken([null, lowercaseTagName]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeTagOpenStart = function (start) {\r\n\t        this._beginToken(HtmlTokenType.TAG_OPEN_START, start);\r\n\t        var parts = this._consumePrefixAndName();\r\n\t        this._endToken(parts);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeAttributeName = function () {\r\n\t        this._beginToken(HtmlTokenType.ATTR_NAME);\r\n\t        var prefixAndName = this._consumePrefixAndName();\r\n\t        this._endToken(prefixAndName);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeAttributeValue = function () {\r\n\t        this._beginToken(HtmlTokenType.ATTR_VALUE);\r\n\t        var value;\r\n\t        if (this.peek === $SQ || this.peek === $DQ) {\r\n\t            var quoteChar = this.peek;\r\n\t            this._advance();\r\n\t            var parts = [];\r\n\t            while (this.peek !== quoteChar) {\r\n\t                parts.push(this._readChar(true));\r\n\t            }\r\n\t            value = parts.join('');\r\n\t            this._advance();\r\n\t        }\r\n\t        else {\r\n\t            var valueStart = this.index;\r\n\t            this._requireCharCodeUntilFn(isNameEnd, 1);\r\n\t            value = this.input.substring(valueStart, this.index);\r\n\t        }\r\n\t        this._endToken([this._processCarriageReturns(value)]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeTagOpenEnd = function () {\r\n\t        var tokenType = this._attemptCharCode($SLASH) ? HtmlTokenType.TAG_OPEN_END_VOID :\r\n\t            HtmlTokenType.TAG_OPEN_END;\r\n\t        this._beginToken(tokenType);\r\n\t        this._requireCharCode($GT);\r\n\t        this._endToken([]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeTagClose = function (start) {\r\n\t        this._beginToken(HtmlTokenType.TAG_CLOSE, start);\r\n\t        this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t        var prefixAndName;\r\n\t        prefixAndName = this._consumePrefixAndName();\r\n\t        this._attemptCharCodeUntilFn(isNotWhitespace);\r\n\t        this._requireCharCode($GT);\r\n\t        this._endToken(prefixAndName);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._consumeText = function () {\r\n\t        var start = this._getLocation();\r\n\t        this._beginToken(HtmlTokenType.TEXT, start);\r\n\t        var parts = [this._readChar(true)];\r\n\t        while (!isTextEnd(this.peek)) {\r\n\t            parts.push(this._readChar(true));\r\n\t        }\r\n\t        this._endToken([this._processCarriageReturns(parts.join(''))]);\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._savePosition = function () {\r\n\t        return [this.peek, this.index, this.column, this.line, this.tokens.length];\r\n\t    };\r\n\t    _HtmlTokenizer.prototype._restorePosition = function (position) {\r\n\t        this.peek = position[0];\r\n\t        this.index = position[1];\r\n\t        this.column = position[2];\r\n\t        this.line = position[3];\r\n\t        var nbTokens = position[4];\r\n\t        if (nbTokens < this.tokens.length) {\r\n\t            // remove any extra tokens\r\n\t            this.tokens = collection_1.ListWrapper.slice(this.tokens, 0, nbTokens);\r\n\t        }\r\n\t    };\r\n\t    return _HtmlTokenizer;\r\n\t})();\r\n\tfunction isNotWhitespace(code) {\r\n\t    return !isWhitespace(code) || code === $EOF;\r\n\t}\r\n\tfunction isWhitespace(code) {\r\n\t    return (code >= $TAB && code <= $SPACE) || (code === $NBSP);\r\n\t}\r\n\tfunction isNameEnd(code) {\r\n\t    return isWhitespace(code) || code === $GT || code === $SLASH || code === $SQ || code === $DQ ||\r\n\t        code === $EQ;\r\n\t}\r\n\tfunction isPrefixEnd(code) {\r\n\t    return (code < $a || $z < code) && (code < $A || $Z < code) && (code < $0 || code > $9);\r\n\t}\r\n\tfunction isDigitEntityEnd(code) {\r\n\t    return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code);\r\n\t}\r\n\tfunction isNamedEntityEnd(code) {\r\n\t    return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code);\r\n\t}\r\n\tfunction isTextEnd(code) {\r\n\t    return code === $LT || code === $EOF;\r\n\t}\r\n\tfunction isAsciiLetter(code) {\r\n\t    return code >= $a && code <= $z || code >= $A && code <= $Z;\r\n\t}\r\n\tfunction isAsciiHexDigit(code) {\r\n\t    return code >= $a && code <= $f || code >= $A && code <= $F || code >= $0 && code <= $9;\r\n\t}\r\n\tfunction compareCharCodeCaseInsensitive(code1, code2) {\r\n\t    return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2);\r\n\t}\r\n\tfunction toUpperCaseCharCode(code) {\r\n\t    return code >= $a && code <= $z ? code - $a + $A : code;\r\n\t}\r\n\tfunction mergeTextTokens(srcTokens) {\r\n\t    var dstTokens = [];\r\n\t    var lastDstToken;\r\n\t    for (var i = 0; i < srcTokens.length; i++) {\r\n\t        var token = srcTokens[i];\r\n\t        if (lang_1.isPresent(lastDstToken) && lastDstToken.type == HtmlTokenType.TEXT &&\r\n\t            token.type == HtmlTokenType.TEXT) {\r\n\t            lastDstToken.parts[0] += token.parts[0];\r\n\t            lastDstToken.sourceSpan.end = token.sourceSpan.end;\r\n\t        }\r\n\t        else {\r\n\t            lastDstToken = token;\r\n\t            dstTokens.push(lastDstToken);\r\n\t        }\r\n\t    }\r\n\t    return dstTokens;\r\n\t}\r\n\n\n/***/ },\n/* 600 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar html_tags_1 = __webpack_require__(91);\r\n\tvar element_schema_registry_1 = __webpack_require__(187);\r\n\tvar NAMESPACE_URIS = lang_1.CONST_EXPR({ 'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg' });\r\n\tvar DomElementSchemaRegistry = (function (_super) {\r\n\t    __extends(DomElementSchemaRegistry, _super);\r\n\t    function DomElementSchemaRegistry() {\r\n\t        _super.apply(this, arguments);\r\n\t        this._protoElements = new Map();\r\n\t    }\r\n\t    DomElementSchemaRegistry.prototype._getProtoElement = function (tagName) {\r\n\t        var element = this._protoElements.get(tagName);\r\n\t        if (lang_1.isBlank(element)) {\r\n\t            var nsAndName = html_tags_1.splitNsName(tagName);\r\n\t            element = lang_1.isPresent(nsAndName[0]) ?\r\n\t                dom_adapter_1.DOM.createElementNS(NAMESPACE_URIS[nsAndName[0]], nsAndName[1]) :\r\n\t                dom_adapter_1.DOM.createElement(nsAndName[1]);\r\n\t            this._protoElements.set(tagName, element);\r\n\t        }\r\n\t        return element;\r\n\t    };\r\n\t    DomElementSchemaRegistry.prototype.hasProperty = function (tagName, propName) {\r\n\t        if (tagName.indexOf('-') !== -1) {\r\n\t            // can't tell now as we don't know which properties a custom element will get\r\n\t            // once it is instantiated\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            var elm = this._getProtoElement(tagName);\r\n\t            return dom_adapter_1.DOM.hasProperty(elm, propName);\r\n\t        }\r\n\t    };\r\n\t    DomElementSchemaRegistry.prototype.getMappedPropName = function (propName) {\r\n\t        var mappedPropName = collection_1.StringMapWrapper.get(dom_adapter_1.DOM.attrToPropMap, propName);\r\n\t        return lang_1.isPresent(mappedPropName) ? mappedPropName : propName;\r\n\t    };\r\n\t    DomElementSchemaRegistry = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], DomElementSchemaRegistry);\r\n\t    return DomElementSchemaRegistry;\r\n\t})(element_schema_registry_1.ElementSchemaRegistry);\r\n\texports.DomElementSchemaRegistry = DomElementSchemaRegistry;\r\n\n\n/***/ },\n/* 601 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * This file is a port of shadowCSS from webcomponents.js to TypeScript.\r\n\t *\r\n\t * Please make sure to keep to edits in sync with the source file.\r\n\t *\r\n\t * Source:\r\n\t * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js\r\n\t *\r\n\t * The original file level comment is reproduced below\r\n\t */\r\n\t/*\r\n\t  This is a limited shim for ShadowDOM css styling.\r\n\t  https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles\r\n\t\r\n\t  The intention here is to support only the styling features which can be\r\n\t  relatively simply implemented. The goal is to allow users to avoid the\r\n\t  most obvious pitfalls and do so without compromising performance significantly.\r\n\t  For ShadowDOM styling that's not covered here, a set of best practices\r\n\t  can be provided that should allow users to accomplish more complex styling.\r\n\t\r\n\t  The following is a list of specific ShadowDOM styling features and a brief\r\n\t  discussion of the approach used to shim.\r\n\t\r\n\t  Shimmed features:\r\n\t\r\n\t  * :host, :host-context: ShadowDOM allows styling of the shadowRoot's host\r\n\t  element using the :host rule. To shim this feature, the :host styles are\r\n\t  reformatted and prefixed with a given scope name and promoted to a\r\n\t  document level stylesheet.\r\n\t  For example, given a scope name of .foo, a rule like this:\r\n\t\r\n\t    :host {\r\n\t        background: red;\r\n\t      }\r\n\t    }\r\n\t\r\n\t  becomes:\r\n\t\r\n\t    .foo {\r\n\t      background: red;\r\n\t    }\r\n\t\r\n\t  * encapsultion: Styles defined within ShadowDOM, apply only to\r\n\t  dom inside the ShadowDOM. Polymer uses one of two techniques to implement\r\n\t  this feature.\r\n\t\r\n\t  By default, rules are prefixed with the host element tag name\r\n\t  as a descendant selector. This ensures styling does not leak out of the 'top'\r\n\t  of the element's ShadowDOM. For example,\r\n\t\r\n\t  div {\r\n\t      font-weight: bold;\r\n\t    }\r\n\t\r\n\t  becomes:\r\n\t\r\n\t  x-foo div {\r\n\t      font-weight: bold;\r\n\t    }\r\n\t\r\n\t  becomes:\r\n\t\r\n\t\r\n\t  Alternatively, if WebComponents.ShadowCSS.strictStyling is set to true then\r\n\t  selectors are scoped by adding an attribute selector suffix to each\r\n\t  simple selector that contains the host element tag name. Each element\r\n\t  in the element's ShadowDOM template is also given the scope attribute.\r\n\t  Thus, these rules match only elements that have the scope attribute.\r\n\t  For example, given a scope name of x-foo, a rule like this:\r\n\t\r\n\t    div {\r\n\t      font-weight: bold;\r\n\t    }\r\n\t\r\n\t  becomes:\r\n\t\r\n\t    div[x-foo] {\r\n\t      font-weight: bold;\r\n\t    }\r\n\t\r\n\t  Note that elements that are dynamically added to a scope must have the scope\r\n\t  selector added to them manually.\r\n\t\r\n\t  * upper/lower bound encapsulation: Styles which are defined outside a\r\n\t  shadowRoot should not cross the ShadowDOM boundary and should not apply\r\n\t  inside a shadowRoot.\r\n\t\r\n\t  This styling behavior is not emulated. Some possible ways to do this that\r\n\t  were rejected due to complexity and/or performance concerns include: (1) reset\r\n\t  every possible property for every possible selector for a given scope name;\r\n\t  (2) re-implement css in javascript.\r\n\t\r\n\t  As an alternative, users should make sure to use selectors\r\n\t  specific to the scope in which they are working.\r\n\t\r\n\t  * ::distributed: This behavior is not emulated. It's often not necessary\r\n\t  to style the contents of a specific insertion point and instead, descendants\r\n\t  of the host element can be styled selectively. Users can also create an\r\n\t  extra node around an insertion point and style that node's contents\r\n\t  via descendent selectors. For example, with a shadowRoot like this:\r\n\t\r\n\t    <style>\r\n\t      ::content(div) {\r\n\t        background: red;\r\n\t      }\r\n\t    </style>\r\n\t    <content></content>\r\n\t\r\n\t  could become:\r\n\t\r\n\t    <style>\r\n\t      / *@polyfill .content-container div * /\r\n\t      ::content(div) {\r\n\t        background: red;\r\n\t      }\r\n\t    </style>\r\n\t    <div class=\"content-container\">\r\n\t      <content></content>\r\n\t    </div>\r\n\t\r\n\t  Note the use of @polyfill in the comment above a ShadowDOM specific style\r\n\t  declaration. This is a directive to the styling shim to use the selector\r\n\t  in comments in lieu of the next selector when running under polyfill.\r\n\t*/\r\n\tvar ShadowCss = (function () {\r\n\t    function ShadowCss() {\r\n\t        this.strictStyling = true;\r\n\t    }\r\n\t    /*\r\n\t    * Shim some cssText with the given selector. Returns cssText that can\r\n\t    * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css).\r\n\t    *\r\n\t    * When strictStyling is true:\r\n\t    * - selector is the attribute added to all elements inside the host,\r\n\t    * - hostSelector is the attribute added to the host itself.\r\n\t    */\r\n\t    ShadowCss.prototype.shimCssText = function (cssText, selector, hostSelector) {\r\n\t        if (hostSelector === void 0) { hostSelector = ''; }\r\n\t        cssText = stripComments(cssText);\r\n\t        cssText = this._insertDirectives(cssText);\r\n\t        return this._scopeCssText(cssText, selector, hostSelector);\r\n\t    };\r\n\t    ShadowCss.prototype._insertDirectives = function (cssText) {\r\n\t        cssText = this._insertPolyfillDirectivesInCssText(cssText);\r\n\t        return this._insertPolyfillRulesInCssText(cssText);\r\n\t    };\r\n\t    /*\r\n\t     * Process styles to convert native ShadowDOM rules that will trip\r\n\t     * up the css parser; we rely on decorating the stylesheet with inert rules.\r\n\t     *\r\n\t     * For example, we convert this rule:\r\n\t     *\r\n\t     * polyfill-next-selector { content: ':host menu-item'; }\r\n\t     * ::content menu-item {\r\n\t     *\r\n\t     * to this:\r\n\t     *\r\n\t     * scopeName menu-item {\r\n\t     *\r\n\t    **/\r\n\t    ShadowCss.prototype._insertPolyfillDirectivesInCssText = function (cssText) {\r\n\t        // Difference with webcomponents.js: does not handle comments\r\n\t        return lang_1.StringWrapper.replaceAllMapped(cssText, _cssContentNextSelectorRe, function (m) { return m[1] + '{'; });\r\n\t    };\r\n\t    /*\r\n\t     * Process styles to add rules which will only apply under the polyfill\r\n\t     *\r\n\t     * For example, we convert this rule:\r\n\t     *\r\n\t     * polyfill-rule {\r\n\t     *   content: ':host menu-item';\r\n\t     * ...\r\n\t     * }\r\n\t     *\r\n\t     * to this:\r\n\t     *\r\n\t     * scopeName menu-item {...}\r\n\t     *\r\n\t    **/\r\n\t    ShadowCss.prototype._insertPolyfillRulesInCssText = function (cssText) {\r\n\t        // Difference with webcomponents.js: does not handle comments\r\n\t        return lang_1.StringWrapper.replaceAllMapped(cssText, _cssContentRuleRe, function (m) {\r\n\t            var rule = m[0];\r\n\t            rule = lang_1.StringWrapper.replace(rule, m[1], '');\r\n\t            rule = lang_1.StringWrapper.replace(rule, m[2], '');\r\n\t            return m[3] + rule;\r\n\t        });\r\n\t    };\r\n\t    /* Ensure styles are scoped. Pseudo-scoping takes a rule like:\r\n\t     *\r\n\t     *  .foo {... }\r\n\t     *\r\n\t     *  and converts this to\r\n\t     *\r\n\t     *  scopeName .foo { ... }\r\n\t    */\r\n\t    ShadowCss.prototype._scopeCssText = function (cssText, scopeSelector, hostSelector) {\r\n\t        var unscoped = this._extractUnscopedRulesFromCssText(cssText);\r\n\t        cssText = this._insertPolyfillHostInCssText(cssText);\r\n\t        cssText = this._convertColonHost(cssText);\r\n\t        cssText = this._convertColonHostContext(cssText);\r\n\t        cssText = this._convertShadowDOMSelectors(cssText);\r\n\t        if (lang_1.isPresent(scopeSelector)) {\r\n\t            cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);\r\n\t        }\r\n\t        cssText = cssText + '\\n' + unscoped;\r\n\t        return cssText.trim();\r\n\t    };\r\n\t    /*\r\n\t     * Process styles to add rules which will only apply under the polyfill\r\n\t     * and do not process via CSSOM. (CSSOM is destructive to rules on rare\r\n\t     * occasions, e.g. -webkit-calc on Safari.)\r\n\t     * For example, we convert this rule:\r\n\t     *\r\n\t     * @polyfill-unscoped-rule {\r\n\t     *   content: 'menu-item';\r\n\t     * ... }\r\n\t     *\r\n\t     * to this:\r\n\t     *\r\n\t     * menu-item {...}\r\n\t     *\r\n\t    **/\r\n\t    ShadowCss.prototype._extractUnscopedRulesFromCssText = function (cssText) {\r\n\t        // Difference with webcomponents.js: does not handle comments\r\n\t        var r = '', m;\r\n\t        var matcher = lang_1.RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText);\r\n\t        while (lang_1.isPresent(m = lang_1.RegExpMatcherWrapper.next(matcher))) {\r\n\t            var rule = m[0];\r\n\t            rule = lang_1.StringWrapper.replace(rule, m[2], '');\r\n\t            rule = lang_1.StringWrapper.replace(rule, m[1], m[3]);\r\n\t            r += rule + '\\n\\n';\r\n\t        }\r\n\t        return r;\r\n\t    };\r\n\t    /*\r\n\t     * convert a rule like :host(.foo) > .bar { }\r\n\t     *\r\n\t     * to\r\n\t     *\r\n\t     * scopeName.foo > .bar\r\n\t    */\r\n\t    ShadowCss.prototype._convertColonHost = function (cssText) {\r\n\t        return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer);\r\n\t    };\r\n\t    /*\r\n\t     * convert a rule like :host-context(.foo) > .bar { }\r\n\t     *\r\n\t     * to\r\n\t     *\r\n\t     * scopeName.foo > .bar, .foo scopeName > .bar { }\r\n\t     *\r\n\t     * and\r\n\t     *\r\n\t     * :host-context(.foo:host) .bar { ... }\r\n\t     *\r\n\t     * to\r\n\t     *\r\n\t     * scopeName.foo .bar { ... }\r\n\t    */\r\n\t    ShadowCss.prototype._convertColonHostContext = function (cssText) {\r\n\t        return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer);\r\n\t    };\r\n\t    ShadowCss.prototype._convertColonRule = function (cssText, regExp, partReplacer) {\r\n\t        // p1 = :host, p2 = contents of (), p3 rest of rule\r\n\t        return lang_1.StringWrapper.replaceAllMapped(cssText, regExp, function (m) {\r\n\t            if (lang_1.isPresent(m[2])) {\r\n\t                var parts = m[2].split(','), r = [];\r\n\t                for (var i = 0; i < parts.length; i++) {\r\n\t                    var p = parts[i];\r\n\t                    if (lang_1.isBlank(p))\r\n\t                        break;\r\n\t                    p = p.trim();\r\n\t                    r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));\r\n\t                }\r\n\t                return r.join(',');\r\n\t            }\r\n\t            else {\r\n\t                return _polyfillHostNoCombinator + m[3];\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    ShadowCss.prototype._colonHostContextPartReplacer = function (host, part, suffix) {\r\n\t        if (lang_1.StringWrapper.contains(part, _polyfillHost)) {\r\n\t            return this._colonHostPartReplacer(host, part, suffix);\r\n\t        }\r\n\t        else {\r\n\t            return host + part + suffix + ', ' + part + ' ' + host + suffix;\r\n\t        }\r\n\t    };\r\n\t    ShadowCss.prototype._colonHostPartReplacer = function (host, part, suffix) {\r\n\t        return host + lang_1.StringWrapper.replace(part, _polyfillHost, '') + suffix;\r\n\t    };\r\n\t    /*\r\n\t     * Convert combinators like ::shadow and pseudo-elements like ::content\r\n\t     * by replacing with space.\r\n\t    */\r\n\t    ShadowCss.prototype._convertShadowDOMSelectors = function (cssText) {\r\n\t        for (var i = 0; i < _shadowDOMSelectorsRe.length; i++) {\r\n\t            cssText = lang_1.StringWrapper.replaceAll(cssText, _shadowDOMSelectorsRe[i], ' ');\r\n\t        }\r\n\t        return cssText;\r\n\t    };\r\n\t    // change a selector like 'div' to 'name div'\r\n\t    ShadowCss.prototype._scopeSelectors = function (cssText, scopeSelector, hostSelector) {\r\n\t        var _this = this;\r\n\t        return processRules(cssText, function (rule) {\r\n\t            var selector = rule.selector;\r\n\t            var content = rule.content;\r\n\t            if (rule.selector[0] != '@' || rule.selector.startsWith('@page')) {\r\n\t                selector =\r\n\t                    _this._scopeSelector(rule.selector, scopeSelector, hostSelector, _this.strictStyling);\r\n\t            }\r\n\t            else if (rule.selector.startsWith('@media')) {\r\n\t                content = _this._scopeSelectors(rule.content, scopeSelector, hostSelector);\r\n\t            }\r\n\t            return new CssRule(selector, content);\r\n\t        });\r\n\t    };\r\n\t    ShadowCss.prototype._scopeSelector = function (selector, scopeSelector, hostSelector, strict) {\r\n\t        var r = [], parts = selector.split(',');\r\n\t        for (var i = 0; i < parts.length; i++) {\r\n\t            var p = parts[i].trim();\r\n\t            var deepParts = lang_1.StringWrapper.split(p, _shadowDeepSelectors);\r\n\t            var shallowPart = deepParts[0];\r\n\t            if (this._selectorNeedsScoping(shallowPart, scopeSelector)) {\r\n\t                deepParts[0] = strict && !lang_1.StringWrapper.contains(shallowPart, _polyfillHostNoCombinator) ?\r\n\t                    this._applyStrictSelectorScope(shallowPart, scopeSelector) :\r\n\t                    this._applySelectorScope(shallowPart, scopeSelector, hostSelector);\r\n\t            }\r\n\t            // replace /deep/ with a space for child selectors\r\n\t            r.push(deepParts.join(' '));\r\n\t        }\r\n\t        return r.join(', ');\r\n\t    };\r\n\t    ShadowCss.prototype._selectorNeedsScoping = function (selector, scopeSelector) {\r\n\t        var re = this._makeScopeMatcher(scopeSelector);\r\n\t        return !lang_1.isPresent(lang_1.RegExpWrapper.firstMatch(re, selector));\r\n\t    };\r\n\t    ShadowCss.prototype._makeScopeMatcher = function (scopeSelector) {\r\n\t        var lre = /\\[/g;\r\n\t        var rre = /\\]/g;\r\n\t        scopeSelector = lang_1.StringWrapper.replaceAll(scopeSelector, lre, '\\\\[');\r\n\t        scopeSelector = lang_1.StringWrapper.replaceAll(scopeSelector, rre, '\\\\]');\r\n\t        return lang_1.RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');\r\n\t    };\r\n\t    ShadowCss.prototype._applySelectorScope = function (selector, scopeSelector, hostSelector) {\r\n\t        // Difference from webcomponentsjs: scopeSelector could not be an array\r\n\t        return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);\r\n\t    };\r\n\t    // scope via name and [is=name]\r\n\t    ShadowCss.prototype._applySimpleSelectorScope = function (selector, scopeSelector, hostSelector) {\r\n\t        if (lang_1.isPresent(lang_1.RegExpWrapper.firstMatch(_polyfillHostRe, selector))) {\r\n\t            var replaceBy = this.strictStyling ? \"[\" + hostSelector + \"]\" : scopeSelector;\r\n\t            selector = lang_1.StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy);\r\n\t            return lang_1.StringWrapper.replaceAll(selector, _polyfillHostRe, replaceBy + ' ');\r\n\t        }\r\n\t        else {\r\n\t            return scopeSelector + ' ' + selector;\r\n\t        }\r\n\t    };\r\n\t    // return a selector with [name] suffix on each simple selector\r\n\t    // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]  /** @internal */\r\n\t    ShadowCss.prototype._applyStrictSelectorScope = function (selector, scopeSelector) {\r\n\t        var isRe = /\\[is=([^\\]]*)\\]/g;\r\n\t        scopeSelector = lang_1.StringWrapper.replaceAllMapped(scopeSelector, isRe, function (m) { return m[1]; });\r\n\t        var splits = [' ', '>', '+', '~'], scoped = selector, attrName = '[' + scopeSelector + ']';\r\n\t        for (var i = 0; i < splits.length; i++) {\r\n\t            var sep = splits[i];\r\n\t            var parts = scoped.split(sep);\r\n\t            scoped = parts.map(function (p) {\r\n\t                // remove :host since it should be unnecessary\r\n\t                var t = lang_1.StringWrapper.replaceAll(p.trim(), _polyfillHostRe, '');\r\n\t                if (t.length > 0 && !collection_1.ListWrapper.contains(splits, t) &&\r\n\t                    !lang_1.StringWrapper.contains(t, attrName)) {\r\n\t                    var re = /([^:]*)(:*)(.*)/g;\r\n\t                    var m = lang_1.RegExpWrapper.firstMatch(re, t);\r\n\t                    if (lang_1.isPresent(m)) {\r\n\t                        p = m[1] + attrName + m[2] + m[3];\r\n\t                    }\r\n\t                }\r\n\t                return p;\r\n\t            })\r\n\t                .join(sep);\r\n\t        }\r\n\t        return scoped;\r\n\t    };\r\n\t    ShadowCss.prototype._insertPolyfillHostInCssText = function (selector) {\r\n\t        selector = lang_1.StringWrapper.replaceAll(selector, _colonHostContextRe, _polyfillHostContext);\r\n\t        selector = lang_1.StringWrapper.replaceAll(selector, _colonHostRe, _polyfillHost);\r\n\t        return selector;\r\n\t    };\r\n\t    return ShadowCss;\r\n\t})();\r\n\texports.ShadowCss = ShadowCss;\r\n\tvar _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim;\r\n\tvar _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim;\r\n\tvar _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim;\r\n\tvar _polyfillHost = '-shadowcsshost';\r\n\t// note: :host-context pre-processed to -shadowcsshostcontext.\r\n\tvar _polyfillHostContext = '-shadowcsscontext';\r\n\tvar _parenSuffix = ')(?:\\\\((' +\r\n\t    '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\r\n\t    ')\\\\))?([^,{]*)';\r\n\tvar _cssColonHostRe = lang_1.RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, 'im');\r\n\tvar _cssColonHostContextRe = lang_1.RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');\r\n\tvar _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';\r\n\tvar _shadowDOMSelectorsRe = [\r\n\t    /::shadow/g,\r\n\t    /::content/g,\r\n\t    // Deprecated selectors\r\n\t    // TODO(vicb): see https://github.com/angular/clang-format/issues/16\r\n\t    // clang-format off\r\n\t    /\\/shadow-deep\\//g,\r\n\t    /\\/shadow\\//g,\r\n\t];\r\n\tvar _shadowDeepSelectors = /(?:>>>)|(?:\\/deep\\/)/g;\r\n\tvar _selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$';\r\n\tvar _polyfillHostRe = lang_1.RegExpWrapper.create(_polyfillHost, 'im');\r\n\tvar _colonHostRe = /:host/gim;\r\n\tvar _colonHostContextRe = /:host-context/gim;\r\n\tvar _commentRe = /\\/\\*[\\s\\S]*?\\*\\//g;\r\n\tfunction stripComments(input) {\r\n\t    return lang_1.StringWrapper.replaceAllMapped(input, _commentRe, function (_) { return ''; });\r\n\t}\r\n\tvar _ruleRe = /(\\s*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))/g;\r\n\tvar _curlyRe = /([{}])/g;\r\n\tvar OPEN_CURLY = '{';\r\n\tvar CLOSE_CURLY = '}';\r\n\tvar BLOCK_PLACEHOLDER = '%BLOCK%';\r\n\tvar CssRule = (function () {\r\n\t    function CssRule(selector, content) {\r\n\t        this.selector = selector;\r\n\t        this.content = content;\r\n\t    }\r\n\t    return CssRule;\r\n\t})();\r\n\texports.CssRule = CssRule;\r\n\tfunction processRules(input, ruleCallback) {\r\n\t    var inputWithEscapedBlocks = escapeBlocks(input);\r\n\t    var nextBlockIndex = 0;\r\n\t    return lang_1.StringWrapper.replaceAllMapped(inputWithEscapedBlocks.escapedString, _ruleRe, function (m) {\r\n\t        var selector = m[2];\r\n\t        var content = '';\r\n\t        var suffix = m[4];\r\n\t        var contentPrefix = '';\r\n\t        if (lang_1.isPresent(m[4]) && m[4].startsWith('{' + BLOCK_PLACEHOLDER)) {\r\n\t            content = inputWithEscapedBlocks.blocks[nextBlockIndex++];\r\n\t            suffix = m[4].substring(BLOCK_PLACEHOLDER.length + 1);\r\n\t            contentPrefix = '{';\r\n\t        }\r\n\t        var rule = ruleCallback(new CssRule(selector, content));\r\n\t        return \"\" + m[1] + rule.selector + m[3] + contentPrefix + rule.content + suffix;\r\n\t    });\r\n\t}\r\n\texports.processRules = processRules;\r\n\tvar StringWithEscapedBlocks = (function () {\r\n\t    function StringWithEscapedBlocks(escapedString, blocks) {\r\n\t        this.escapedString = escapedString;\r\n\t        this.blocks = blocks;\r\n\t    }\r\n\t    return StringWithEscapedBlocks;\r\n\t})();\r\n\tfunction escapeBlocks(input) {\r\n\t    var inputParts = lang_1.StringWrapper.split(input, _curlyRe);\r\n\t    var resultParts = [];\r\n\t    var escapedBlocks = [];\r\n\t    var bracketCount = 0;\r\n\t    var currentBlockParts = [];\r\n\t    for (var partIndex = 0; partIndex < inputParts.length; partIndex++) {\r\n\t        var part = inputParts[partIndex];\r\n\t        if (part == CLOSE_CURLY) {\r\n\t            bracketCount--;\r\n\t        }\r\n\t        if (bracketCount > 0) {\r\n\t            currentBlockParts.push(part);\r\n\t        }\r\n\t        else {\r\n\t            if (currentBlockParts.length > 0) {\r\n\t                escapedBlocks.push(currentBlockParts.join(''));\r\n\t                resultParts.push(BLOCK_PLACEHOLDER);\r\n\t                currentBlockParts = [];\r\n\t            }\r\n\t            resultParts.push(part);\r\n\t        }\r\n\t        if (part == OPEN_CURLY) {\r\n\t            bracketCount++;\r\n\t        }\r\n\t    }\r\n\t    if (currentBlockParts.length > 0) {\r\n\t        escapedBlocks.push(currentBlockParts.join(''));\r\n\t        resultParts.push(BLOCK_PLACEHOLDER);\r\n\t    }\r\n\t    return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);\r\n\t}\r\n\n\n/***/ },\n/* 602 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Marks a function or method as an Angular 2 entrypoint. Only necessary in Dart code.\r\n\t *\r\n\t * The optional `name` parameter will be reflected in logs when the entry point is processed.\r\n\t *\r\n\t * See [the wiki][] for detailed documentation.\r\n\t * [the wiki]: https://github.com/angular/angular/wiki/Angular-2-Dart-Transformer#entry_points\r\n\t *\r\n\t * ## Example\r\n\t *\r\n\t * ```\r\n\t * @AngularEntrypoint(\"name-for-debug\")\r\n\t * void main() {\r\n\t *   bootstrap(MyComponent);\r\n\t * }\r\n\t * ```\r\n\t */\r\n\tvar AngularEntrypoint = (function () {\r\n\t    function AngularEntrypoint(name) {\r\n\t        this.name = name;\r\n\t    }\r\n\t    AngularEntrypoint = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], AngularEntrypoint);\r\n\t    return AngularEntrypoint;\r\n\t})();\r\n\texports.AngularEntrypoint = AngularEntrypoint;\r\n\n\n/***/ },\n/* 603 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar application_tokens_1 = __webpack_require__(93);\r\n\tvar change_detection_1 = __webpack_require__(37);\r\n\tvar resolved_metadata_cache_1 = __webpack_require__(306);\r\n\tvar view_manager_1 = __webpack_require__(131);\r\n\tvar view_manager_2 = __webpack_require__(131);\r\n\tvar view_resolver_1 = __webpack_require__(202);\r\n\tvar directive_resolver_1 = __webpack_require__(128);\r\n\tvar pipe_resolver_1 = __webpack_require__(200);\r\n\tvar compiler_1 = __webpack_require__(81);\r\n\tvar compiler_2 = __webpack_require__(81);\r\n\tvar dynamic_component_loader_1 = __webpack_require__(96);\r\n\tvar dynamic_component_loader_2 = __webpack_require__(96);\r\n\t/**\r\n\t * A default set of providers which should be included in any Angular\r\n\t * application, regardless of the platform it runs onto.\r\n\t */\r\n\texports.APPLICATION_COMMON_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    new di_1.Provider(compiler_1.Compiler, { useClass: compiler_2.Compiler_ }),\r\n\t    application_tokens_1.APP_ID_RANDOM_PROVIDER,\r\n\t    resolved_metadata_cache_1.ResolvedMetadataCache,\r\n\t    new di_1.Provider(view_manager_1.AppViewManager, { useClass: view_manager_2.AppViewManager_ }),\r\n\t    view_resolver_1.ViewResolver,\r\n\t    new di_1.Provider(change_detection_1.IterableDiffers, { useValue: change_detection_1.defaultIterableDiffers }),\r\n\t    new di_1.Provider(change_detection_1.KeyValueDiffers, { useValue: change_detection_1.defaultKeyValueDiffers }),\r\n\t    directive_resolver_1.DirectiveResolver,\r\n\t    pipe_resolver_1.PipeResolver,\r\n\t    new di_1.Provider(dynamic_component_loader_1.DynamicComponentLoader, { useClass: dynamic_component_loader_2.DynamicComponentLoader_ })\r\n\t]);\r\n\n\n/***/ },\n/* 604 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar proto_record_1 = __webpack_require__(94);\r\n\t/**\r\n\t * Removes \"duplicate\" records. It assumes that record evaluation does not have side-effects.\r\n\t *\r\n\t * Records that are not last in bindings are removed and all the indices of the records that depend\r\n\t * on them are updated.\r\n\t *\r\n\t * Records that are last in bindings CANNOT be removed, and instead are replaced with very cheap\r\n\t * SELF records.\r\n\t *\r\n\t * @internal\r\n\t */\r\n\tfunction coalesce(srcRecords) {\r\n\t    var dstRecords = [];\r\n\t    var excludedIdxs = [];\r\n\t    var indexMap = new collection_1.Map();\r\n\t    var skipDepth = 0;\r\n\t    var skipSources = collection_1.ListWrapper.createFixedSize(srcRecords.length);\r\n\t    for (var protoIndex = 0; protoIndex < srcRecords.length; protoIndex++) {\r\n\t        var skipRecord = skipSources[protoIndex];\r\n\t        if (lang_1.isPresent(skipRecord)) {\r\n\t            skipDepth--;\r\n\t            skipRecord.fixedArgs[0] = dstRecords.length;\r\n\t        }\r\n\t        var src = srcRecords[protoIndex];\r\n\t        var dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\r\n\t        if (dst.isSkipRecord()) {\r\n\t            dstRecords.push(dst);\r\n\t            skipDepth++;\r\n\t            skipSources[dst.fixedArgs[0]] = dst;\r\n\t        }\r\n\t        else {\r\n\t            var record = _mayBeAddRecord(dst, dstRecords, excludedIdxs, skipDepth > 0);\r\n\t            indexMap.set(src.selfIndex, record.selfIndex);\r\n\t        }\r\n\t    }\r\n\t    return _optimizeSkips(dstRecords);\r\n\t}\r\n\texports.coalesce = coalesce;\r\n\t/**\r\n\t * - Conditional skip of 1 record followed by an unconditional skip of N are replaced by  a\r\n\t *   conditional skip of N with the negated condition,\r\n\t * - Skips of 0 records are removed\r\n\t */\r\n\tfunction _optimizeSkips(srcRecords) {\r\n\t    var dstRecords = [];\r\n\t    var skipSources = collection_1.ListWrapper.createFixedSize(srcRecords.length);\r\n\t    var indexMap = new collection_1.Map();\r\n\t    for (var protoIndex = 0; protoIndex < srcRecords.length; protoIndex++) {\r\n\t        var skipRecord = skipSources[protoIndex];\r\n\t        if (lang_1.isPresent(skipRecord)) {\r\n\t            skipRecord.fixedArgs[0] = dstRecords.length;\r\n\t        }\r\n\t        var src = srcRecords[protoIndex];\r\n\t        if (src.isSkipRecord()) {\r\n\t            if (src.isConditionalSkipRecord() && src.fixedArgs[0] === protoIndex + 2 &&\r\n\t                protoIndex < srcRecords.length - 1 &&\r\n\t                srcRecords[protoIndex + 1].mode === proto_record_1.RecordType.SkipRecords) {\r\n\t                src.mode = src.mode === proto_record_1.RecordType.SkipRecordsIf ? proto_record_1.RecordType.SkipRecordsIfNot :\r\n\t                    proto_record_1.RecordType.SkipRecordsIf;\r\n\t                src.fixedArgs[0] = srcRecords[protoIndex + 1].fixedArgs[0];\r\n\t                protoIndex++;\r\n\t            }\r\n\t            if (src.fixedArgs[0] > protoIndex + 1) {\r\n\t                var dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\r\n\t                dstRecords.push(dst);\r\n\t                skipSources[dst.fixedArgs[0]] = dst;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            var dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\r\n\t            dstRecords.push(dst);\r\n\t            indexMap.set(src.selfIndex, dst.selfIndex);\r\n\t        }\r\n\t    }\r\n\t    return dstRecords;\r\n\t}\r\n\t/**\r\n\t * Add a new record or re-use one of the existing records.\r\n\t */\r\n\tfunction _mayBeAddRecord(record, dstRecords, excludedIdxs, excluded) {\r\n\t    var match = _findFirstMatch(record, dstRecords, excludedIdxs);\r\n\t    if (lang_1.isPresent(match)) {\r\n\t        if (record.lastInBinding) {\r\n\t            dstRecords.push(_createSelfRecord(record, match.selfIndex, dstRecords.length + 1));\r\n\t            match.referencedBySelf = true;\r\n\t        }\r\n\t        else {\r\n\t            if (record.argumentToPureFunction) {\r\n\t                match.argumentToPureFunction = true;\r\n\t            }\r\n\t        }\r\n\t        return match;\r\n\t    }\r\n\t    if (excluded) {\r\n\t        excludedIdxs.push(record.selfIndex);\r\n\t    }\r\n\t    dstRecords.push(record);\r\n\t    return record;\r\n\t}\r\n\t/**\r\n\t * Returns the first `ProtoRecord` that matches the record.\r\n\t */\r\n\tfunction _findFirstMatch(record, dstRecords, excludedIdxs) {\r\n\t    return dstRecords.find(\r\n\t    // TODO(vicb): optimize excludedIdxs.indexOf (sorted array)\r\n\t    function (rr) { return excludedIdxs.indexOf(rr.selfIndex) == -1 && rr.mode !== proto_record_1.RecordType.DirectiveLifecycle &&\r\n\t        _haveSameDirIndex(rr, record) && rr.mode === record.mode &&\r\n\t        lang_1.looseIdentical(rr.funcOrValue, record.funcOrValue) &&\r\n\t        rr.contextIndex === record.contextIndex && lang_1.looseIdentical(rr.name, record.name) &&\r\n\t        collection_1.ListWrapper.equals(rr.args, record.args); });\r\n\t}\r\n\t/**\r\n\t * Clone the `ProtoRecord` and changes the indexes for the ones in the destination array for:\r\n\t * - the arguments,\r\n\t * - the context,\r\n\t * - self\r\n\t */\r\n\tfunction _cloneAndUpdateIndexes(record, dstRecords, indexMap) {\r\n\t    var args = record.args.map(function (src) { return _srcToDstSelfIndex(indexMap, src); });\r\n\t    var contextIndex = _srcToDstSelfIndex(indexMap, record.contextIndex);\r\n\t    var selfIndex = dstRecords.length + 1;\r\n\t    return new proto_record_1.ProtoRecord(record.mode, record.name, record.funcOrValue, args, record.fixedArgs, contextIndex, record.directiveIndex, selfIndex, record.bindingRecord, record.lastInBinding, record.lastInDirective, record.argumentToPureFunction, record.referencedBySelf, record.propertyBindingIndex);\r\n\t}\r\n\t/**\r\n\t * Returns the index in the destination array corresponding to the index in the src array.\r\n\t * When the element is not present in the destination array, return the source index.\r\n\t */\r\n\tfunction _srcToDstSelfIndex(indexMap, srcIdx) {\r\n\t    var dstIdx = indexMap.get(srcIdx);\r\n\t    return lang_1.isPresent(dstIdx) ? dstIdx : srcIdx;\r\n\t}\r\n\tfunction _createSelfRecord(r, contextIndex, selfIndex) {\r\n\t    return new proto_record_1.ProtoRecord(proto_record_1.RecordType.Self, \"self\", null, [], r.fixedArgs, contextIndex, r.directiveIndex, selfIndex, r.bindingRecord, r.lastInBinding, r.lastInDirective, false, false, r.propertyBindingIndex);\r\n\t}\r\n\tfunction _haveSameDirIndex(a, b) {\r\n\t    var di1 = lang_1.isBlank(a.directiveIndex) ? null : a.directiveIndex.directiveIndex;\r\n\t    var ei1 = lang_1.isBlank(a.directiveIndex) ? null : a.directiveIndex.elementIndex;\r\n\t    var di2 = lang_1.isBlank(b.directiveIndex) ? null : b.directiveIndex.directiveIndex;\r\n\t    var ei2 = lang_1.isBlank(b.directiveIndex) ? null : b.directiveIndex.elementIndex;\r\n\t    return di1 === di2 && ei1 === ei2;\r\n\t}\r\n\n\n/***/ },\n/* 605 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar codegen_facade_1 = __webpack_require__(293);\r\n\tvar proto_record_1 = __webpack_require__(94);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * Class responsible for providing change detection logic for change detector classes.\r\n\t */\r\n\tvar CodegenLogicUtil = (function () {\r\n\t    function CodegenLogicUtil(_names, _utilName, _changeDetectorStateName) {\r\n\t        this._names = _names;\r\n\t        this._utilName = _utilName;\r\n\t        this._changeDetectorStateName = _changeDetectorStateName;\r\n\t    }\r\n\t    /**\r\n\t     * Generates a statement which updates the local variable representing `protoRec` with the current\r\n\t     * value of the record. Used by property bindings.\r\n\t     */\r\n\t    CodegenLogicUtil.prototype.genPropertyBindingEvalValue = function (protoRec) {\r\n\t        var _this = this;\r\n\t        return this._genEvalValue(protoRec, function (idx) { return _this._names.getLocalName(idx); }, this._names.getLocalsAccessorName());\r\n\t    };\r\n\t    /**\r\n\t     * Generates a statement which updates the local variable representing `protoRec` with the current\r\n\t     * value of the record. Used by event bindings.\r\n\t     */\r\n\t    CodegenLogicUtil.prototype.genEventBindingEvalValue = function (eventRecord, protoRec) {\r\n\t        var _this = this;\r\n\t        return this._genEvalValue(protoRec, function (idx) { return _this._names.getEventLocalName(eventRecord, idx); }, \"locals\");\r\n\t    };\r\n\t    CodegenLogicUtil.prototype._genEvalValue = function (protoRec, getLocalName, localsAccessor) {\r\n\t        var context = (protoRec.contextIndex == -1) ?\r\n\t            this._names.getDirectiveName(protoRec.directiveIndex) :\r\n\t            getLocalName(protoRec.contextIndex);\r\n\t        var argString = protoRec.args.map(function (arg) { return getLocalName(arg); }).join(\", \");\r\n\t        var rhs;\r\n\t        switch (protoRec.mode) {\r\n\t            case proto_record_1.RecordType.Self:\r\n\t                rhs = context;\r\n\t                break;\r\n\t            case proto_record_1.RecordType.Const:\r\n\t                rhs = codegen_facade_1.codify(protoRec.funcOrValue);\r\n\t                break;\r\n\t            case proto_record_1.RecordType.PropertyRead:\r\n\t                rhs = context + \".\" + protoRec.name;\r\n\t                break;\r\n\t            case proto_record_1.RecordType.SafeProperty:\r\n\t                var read = context + \".\" + protoRec.name;\r\n\t                rhs = this._utilName + \".isValueBlank(\" + context + \") ? null : \" + read;\r\n\t                break;\r\n\t            case proto_record_1.RecordType.PropertyWrite:\r\n\t                rhs = context + \".\" + protoRec.name + \" = \" + getLocalName(protoRec.args[0]);\r\n\t                break;\r\n\t            case proto_record_1.RecordType.Local:\r\n\t                rhs = localsAccessor + \".get(\" + codegen_facade_1.rawString(protoRec.name) + \")\";\r\n\t                break;\r\n\t            case proto_record_1.RecordType.InvokeMethod:\r\n\t                rhs = context + \".\" + protoRec.name + \"(\" + argString + \")\";\r\n\t                break;\r\n\t            case proto_record_1.RecordType.SafeMethodInvoke:\r\n\t                var invoke = context + \".\" + protoRec.name + \"(\" + argString + \")\";\r\n\t                rhs = this._utilName + \".isValueBlank(\" + context + \") ? null : \" + invoke;\r\n\t                break;\r\n\t            case proto_record_1.RecordType.InvokeClosure:\r\n\t                rhs = context + \"(\" + argString + \")\";\r\n\t                break;\r\n\t            case proto_record_1.RecordType.PrimitiveOp:\r\n\t                rhs = this._utilName + \".\" + protoRec.name + \"(\" + argString + \")\";\r\n\t                break;\r\n\t            case proto_record_1.RecordType.CollectionLiteral:\r\n\t                rhs = this._utilName + \".\" + protoRec.name + \"(\" + argString + \")\";\r\n\t                break;\r\n\t            case proto_record_1.RecordType.Interpolate:\r\n\t                rhs = this._genInterpolation(protoRec);\r\n\t                break;\r\n\t            case proto_record_1.RecordType.KeyedRead:\r\n\t                rhs = context + \"[\" + getLocalName(protoRec.args[0]) + \"]\";\r\n\t                break;\r\n\t            case proto_record_1.RecordType.KeyedWrite:\r\n\t                rhs = context + \"[\" + getLocalName(protoRec.args[0]) + \"] = \" + getLocalName(protoRec.args[1]);\r\n\t                break;\r\n\t            case proto_record_1.RecordType.Chain:\r\n\t                rhs = \"\" + getLocalName(protoRec.args[protoRec.args.length - 1]);\r\n\t                break;\r\n\t            default:\r\n\t                throw new exceptions_1.BaseException(\"Unknown operation \" + protoRec.mode);\r\n\t        }\r\n\t        return getLocalName(protoRec.selfIndex) + \" = \" + rhs + \";\";\r\n\t    };\r\n\t    CodegenLogicUtil.prototype.genPropertyBindingTargets = function (propertyBindingTargets, genDebugInfo) {\r\n\t        var _this = this;\r\n\t        var bs = propertyBindingTargets.map(function (b) {\r\n\t            if (lang_1.isBlank(b))\r\n\t                return \"null\";\r\n\t            var debug = genDebugInfo ? codegen_facade_1.codify(b.debug) : \"null\";\r\n\t            return _this._utilName + \".bindingTarget(\" + codegen_facade_1.codify(b.mode) + \", \" + b.elementIndex + \", \" + codegen_facade_1.codify(b.name) + \", \" + codegen_facade_1.codify(b.unit) + \", \" + debug + \")\";\r\n\t        });\r\n\t        return \"[\" + bs.join(\", \") + \"]\";\r\n\t    };\r\n\t    CodegenLogicUtil.prototype.genDirectiveIndices = function (directiveRecords) {\r\n\t        var _this = this;\r\n\t        var bs = directiveRecords.map(function (b) {\r\n\t            return (_this._utilName + \".directiveIndex(\" + b.directiveIndex.elementIndex + \", \" + b.directiveIndex.directiveIndex + \")\");\r\n\t        });\r\n\t        return \"[\" + bs.join(\", \") + \"]\";\r\n\t    };\r\n\t    /** @internal */\r\n\t    CodegenLogicUtil.prototype._genInterpolation = function (protoRec) {\r\n\t        var iVals = [];\r\n\t        for (var i = 0; i < protoRec.args.length; ++i) {\r\n\t            iVals.push(codegen_facade_1.codify(protoRec.fixedArgs[i]));\r\n\t            iVals.push(this._utilName + \".s(\" + this._names.getLocalName(protoRec.args[i]) + \")\");\r\n\t        }\r\n\t        iVals.push(codegen_facade_1.codify(protoRec.fixedArgs[protoRec.args.length]));\r\n\t        return codegen_facade_1.combineGeneratedStrings(iVals);\r\n\t    };\r\n\t    CodegenLogicUtil.prototype.genHydrateDirectives = function (directiveRecords) {\r\n\t        var _this = this;\r\n\t        var res = [];\r\n\t        var outputCount = 0;\r\n\t        for (var i = 0; i < directiveRecords.length; ++i) {\r\n\t            var r = directiveRecords[i];\r\n\t            var dirVarName = this._names.getDirectiveName(r.directiveIndex);\r\n\t            res.push(dirVarName + \" = \" + this._genReadDirective(i) + \";\");\r\n\t            if (lang_1.isPresent(r.outputs)) {\r\n\t                r.outputs.forEach(function (output) {\r\n\t                    var eventHandlerExpr = _this._genEventHandler(r.directiveIndex.elementIndex, output[1]);\r\n\t                    var statementStart = \"this.outputSubscriptions[\" + outputCount++ + \"] = \" + dirVarName + \".\" + output[0];\r\n\t                    if (lang_1.IS_DART) {\r\n\t                        res.push(statementStart + \".listen(\" + eventHandlerExpr + \");\");\r\n\t                    }\r\n\t                    else {\r\n\t                        res.push(statementStart + \".subscribe({next: \" + eventHandlerExpr + \"});\");\r\n\t                    }\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        if (outputCount > 0) {\r\n\t            var statementStart = 'this.outputSubscriptions';\r\n\t            if (lang_1.IS_DART) {\r\n\t                res.unshift(statementStart + \" = new List(\" + outputCount + \");\");\r\n\t            }\r\n\t            else {\r\n\t                res.unshift(statementStart + \" = new Array(\" + outputCount + \");\");\r\n\t            }\r\n\t        }\r\n\t        return res.join(\"\\n\");\r\n\t    };\r\n\t    CodegenLogicUtil.prototype.genDirectivesOnDestroy = function (directiveRecords) {\r\n\t        var res = [];\r\n\t        for (var i = 0; i < directiveRecords.length; ++i) {\r\n\t            var r = directiveRecords[i];\r\n\t            if (r.callOnDestroy) {\r\n\t                var dirVarName = this._names.getDirectiveName(r.directiveIndex);\r\n\t                res.push(dirVarName + \".ngOnDestroy();\");\r\n\t            }\r\n\t        }\r\n\t        return res.join(\"\\n\");\r\n\t    };\r\n\t    CodegenLogicUtil.prototype._genEventHandler = function (boundElementIndex, eventName) {\r\n\t        if (lang_1.IS_DART) {\r\n\t            return \"(event) => this.handleEvent('\" + eventName + \"', \" + boundElementIndex + \", event)\";\r\n\t        }\r\n\t        else {\r\n\t            return \"(function(event) { return this.handleEvent('\" + eventName + \"', \" + boundElementIndex + \", event); }).bind(this)\";\r\n\t        }\r\n\t    };\r\n\t    CodegenLogicUtil.prototype._genReadDirective = function (index) { return \"this.getDirectiveFor(directives, \" + index + \")\"; };\r\n\t    CodegenLogicUtil.prototype.genHydrateDetectors = function (directiveRecords) {\r\n\t        var res = [];\r\n\t        for (var i = 0; i < directiveRecords.length; ++i) {\r\n\t            var r = directiveRecords[i];\r\n\t            if (!r.isDefaultChangeDetection()) {\r\n\t                res.push(this._names.getDetectorName(r.directiveIndex) + \" = this.getDetectorFor(directives, \" + i + \");\");\r\n\t            }\r\n\t        }\r\n\t        return res.join(\"\\n\");\r\n\t    };\r\n\t    CodegenLogicUtil.prototype.genContentLifecycleCallbacks = function (directiveRecords) {\r\n\t        var res = [];\r\n\t        var eq = lang_1.IS_DART ? '==' : '===';\r\n\t        // NOTE(kegluneq): Order is important!\r\n\t        for (var i = directiveRecords.length - 1; i >= 0; --i) {\r\n\t            var dir = directiveRecords[i];\r\n\t            if (dir.callAfterContentInit) {\r\n\t                res.push(\"if(\" + this._names.getStateName() + \" \" + eq + \" \" + this._changeDetectorStateName + \".NeverChecked) \" + this._names.getDirectiveName(dir.directiveIndex) + \".ngAfterContentInit();\");\r\n\t            }\r\n\t            if (dir.callAfterContentChecked) {\r\n\t                res.push(this._names.getDirectiveName(dir.directiveIndex) + \".ngAfterContentChecked();\");\r\n\t            }\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    CodegenLogicUtil.prototype.genViewLifecycleCallbacks = function (directiveRecords) {\r\n\t        var res = [];\r\n\t        var eq = lang_1.IS_DART ? '==' : '===';\r\n\t        // NOTE(kegluneq): Order is important!\r\n\t        for (var i = directiveRecords.length - 1; i >= 0; --i) {\r\n\t            var dir = directiveRecords[i];\r\n\t            if (dir.callAfterViewInit) {\r\n\t                res.push(\"if(\" + this._names.getStateName() + \" \" + eq + \" \" + this._changeDetectorStateName + \".NeverChecked) \" + this._names.getDirectiveName(dir.directiveIndex) + \".ngAfterViewInit();\");\r\n\t            }\r\n\t            if (dir.callAfterViewChecked) {\r\n\t                res.push(this._names.getDirectiveName(dir.directiveIndex) + \".ngAfterViewChecked();\");\r\n\t            }\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    return CodegenLogicUtil;\r\n\t})();\r\n\texports.CodegenLogicUtil = CodegenLogicUtil;\r\n\n\n/***/ },\n/* 606 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\t// The names of these fields must be kept in sync with abstract_change_detector.ts or change\r\n\t// detection will fail.\r\n\tvar _STATE_ACCESSOR = \"state\";\r\n\tvar _CONTEXT_ACCESSOR = \"context\";\r\n\tvar _PROP_BINDING_INDEX = \"propertyBindingIndex\";\r\n\tvar _DIRECTIVES_ACCESSOR = \"directiveIndices\";\r\n\tvar _DISPATCHER_ACCESSOR = \"dispatcher\";\r\n\tvar _LOCALS_ACCESSOR = \"locals\";\r\n\tvar _MODE_ACCESSOR = \"mode\";\r\n\tvar _PIPES_ACCESSOR = \"pipes\";\r\n\tvar _PROTOS_ACCESSOR = \"protos\";\r\n\texports.CONTEXT_ACCESSOR = \"context\";\r\n\t// `context` is always first.\r\n\texports.CONTEXT_INDEX = 0;\r\n\tvar _FIELD_PREFIX = 'this.';\r\n\tvar _whiteSpaceRegExp = /\\W/g;\r\n\t/**\r\n\t * Returns `s` with all non-identifier characters removed.\r\n\t */\r\n\tfunction sanitizeName(s) {\r\n\t    return lang_1.StringWrapper.replaceAll(s, _whiteSpaceRegExp, '');\r\n\t}\r\n\texports.sanitizeName = sanitizeName;\r\n\t/**\r\n\t * Class responsible for providing field and local variable names for change detector classes.\r\n\t * Also provides some convenience functions, for example, declaring variables, destroying pipes,\r\n\t * and dehydrating the detector.\r\n\t */\r\n\tvar CodegenNameUtil = (function () {\r\n\t    function CodegenNameUtil(_records, _eventBindings, _directiveRecords, _utilName) {\r\n\t        this._records = _records;\r\n\t        this._eventBindings = _eventBindings;\r\n\t        this._directiveRecords = _directiveRecords;\r\n\t        this._utilName = _utilName;\r\n\t        /** @internal */\r\n\t        this._sanitizedEventNames = new collection_1.Map();\r\n\t        this._sanitizedNames = collection_1.ListWrapper.createFixedSize(this._records.length + 1);\r\n\t        this._sanitizedNames[exports.CONTEXT_INDEX] = exports.CONTEXT_ACCESSOR;\r\n\t        for (var i = 0, iLen = this._records.length; i < iLen; ++i) {\r\n\t            this._sanitizedNames[i + 1] = sanitizeName(\"\" + this._records[i].name + i);\r\n\t        }\r\n\t        for (var ebIndex = 0; ebIndex < _eventBindings.length; ++ebIndex) {\r\n\t            var eb = _eventBindings[ebIndex];\r\n\t            var names = [exports.CONTEXT_ACCESSOR];\r\n\t            for (var i = 0, iLen = eb.records.length; i < iLen; ++i) {\r\n\t                names.push(sanitizeName(\"\" + eb.records[i].name + i + \"_\" + ebIndex));\r\n\t            }\r\n\t            this._sanitizedEventNames.set(eb, names);\r\n\t        }\r\n\t    }\r\n\t    /** @internal */\r\n\t    CodegenNameUtil.prototype._addFieldPrefix = function (name) { return \"\" + _FIELD_PREFIX + name; };\r\n\t    CodegenNameUtil.prototype.getDispatcherName = function () { return this._addFieldPrefix(_DISPATCHER_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getPipesAccessorName = function () { return this._addFieldPrefix(_PIPES_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getProtosName = function () { return this._addFieldPrefix(_PROTOS_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getDirectivesAccessorName = function () { return this._addFieldPrefix(_DIRECTIVES_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getLocalsAccessorName = function () { return this._addFieldPrefix(_LOCALS_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getStateName = function () { return this._addFieldPrefix(_STATE_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getModeName = function () { return this._addFieldPrefix(_MODE_ACCESSOR); };\r\n\t    CodegenNameUtil.prototype.getPropertyBindingIndex = function () { return this._addFieldPrefix(_PROP_BINDING_INDEX); };\r\n\t    CodegenNameUtil.prototype.getLocalName = function (idx) { return \"l_\" + this._sanitizedNames[idx]; };\r\n\t    CodegenNameUtil.prototype.getEventLocalName = function (eb, idx) {\r\n\t        return \"l_\" + this._sanitizedEventNames.get(eb)[idx];\r\n\t    };\r\n\t    CodegenNameUtil.prototype.getChangeName = function (idx) { return \"c_\" + this._sanitizedNames[idx]; };\r\n\t    /**\r\n\t     * Generate a statement initializing local variables used when detecting changes.\r\n\t     */\r\n\t    CodegenNameUtil.prototype.genInitLocals = function () {\r\n\t        var declarations = [];\r\n\t        var assignments = [];\r\n\t        for (var i = 0, iLen = this.getFieldCount(); i < iLen; ++i) {\r\n\t            if (i == exports.CONTEXT_INDEX) {\r\n\t                declarations.push(this.getLocalName(i) + \" = \" + this.getFieldName(i));\r\n\t            }\r\n\t            else {\r\n\t                var rec = this._records[i - 1];\r\n\t                if (rec.argumentToPureFunction) {\r\n\t                    var changeName = this.getChangeName(i);\r\n\t                    declarations.push(this.getLocalName(i) + \",\" + changeName);\r\n\t                    assignments.push(changeName);\r\n\t                }\r\n\t                else {\r\n\t                    declarations.push(\"\" + this.getLocalName(i));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        var assignmentsCode = collection_1.ListWrapper.isEmpty(assignments) ? '' : assignments.join('=') + \" = false;\";\r\n\t        return \"var \" + declarations.join(',') + \";\" + assignmentsCode;\r\n\t    };\r\n\t    /**\r\n\t     * Generate a statement initializing local variables for event handlers.\r\n\t     */\r\n\t    CodegenNameUtil.prototype.genInitEventLocals = function () {\r\n\t        var _this = this;\r\n\t        var res = [(this.getLocalName(exports.CONTEXT_INDEX) + \" = \" + this.getFieldName(exports.CONTEXT_INDEX))];\r\n\t        this._sanitizedEventNames.forEach(function (names, eb) {\r\n\t            for (var i = 0; i < names.length; ++i) {\r\n\t                if (i !== exports.CONTEXT_INDEX) {\r\n\t                    res.push(\"\" + _this.getEventLocalName(eb, i));\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t        return res.length > 1 ? \"var \" + res.join(',') + \";\" : '';\r\n\t    };\r\n\t    CodegenNameUtil.prototype.getPreventDefaultAccesor = function () { return \"preventDefault\"; };\r\n\t    CodegenNameUtil.prototype.getFieldCount = function () { return this._sanitizedNames.length; };\r\n\t    CodegenNameUtil.prototype.getFieldName = function (idx) { return this._addFieldPrefix(this._sanitizedNames[idx]); };\r\n\t    CodegenNameUtil.prototype.getAllFieldNames = function () {\r\n\t        var fieldList = [];\r\n\t        for (var k = 0, kLen = this.getFieldCount(); k < kLen; ++k) {\r\n\t            if (k === 0 || this._records[k - 1].shouldBeChecked()) {\r\n\t                fieldList.push(this.getFieldName(k));\r\n\t            }\r\n\t        }\r\n\t        for (var i = 0, iLen = this._records.length; i < iLen; ++i) {\r\n\t            var rec = this._records[i];\r\n\t            if (rec.isPipeRecord()) {\r\n\t                fieldList.push(this.getPipeName(rec.selfIndex));\r\n\t            }\r\n\t        }\r\n\t        for (var j = 0, jLen = this._directiveRecords.length; j < jLen; ++j) {\r\n\t            var dRec = this._directiveRecords[j];\r\n\t            fieldList.push(this.getDirectiveName(dRec.directiveIndex));\r\n\t            if (!dRec.isDefaultChangeDetection()) {\r\n\t                fieldList.push(this.getDetectorName(dRec.directiveIndex));\r\n\t            }\r\n\t        }\r\n\t        return fieldList;\r\n\t    };\r\n\t    /**\r\n\t     * Generates statements which clear all fields so that the change detector is dehydrated.\r\n\t     */\r\n\t    CodegenNameUtil.prototype.genDehydrateFields = function () {\r\n\t        var fields = this.getAllFieldNames();\r\n\t        collection_1.ListWrapper.removeAt(fields, exports.CONTEXT_INDEX);\r\n\t        if (collection_1.ListWrapper.isEmpty(fields))\r\n\t            return '';\r\n\t        // At least one assignment.\r\n\t        fields.push(this._utilName + \".uninitialized;\");\r\n\t        return fields.join(' = ');\r\n\t    };\r\n\t    /**\r\n\t     * Generates statements destroying all pipe variables.\r\n\t     */\r\n\t    CodegenNameUtil.prototype.genPipeOnDestroy = function () {\r\n\t        var _this = this;\r\n\t        return this._records.filter(function (r) { return r.isPipeRecord(); })\r\n\t            .map(function (r) { return (_this._utilName + \".callPipeOnDestroy(\" + _this.getPipeName(r.selfIndex) + \");\"); })\r\n\t            .join('\\n');\r\n\t    };\r\n\t    CodegenNameUtil.prototype.getPipeName = function (idx) {\r\n\t        return this._addFieldPrefix(this._sanitizedNames[idx] + \"_pipe\");\r\n\t    };\r\n\t    CodegenNameUtil.prototype.getDirectiveName = function (d) {\r\n\t        return this._addFieldPrefix(\"directive_\" + d.name);\r\n\t    };\r\n\t    CodegenNameUtil.prototype.getDetectorName = function (d) { return this._addFieldPrefix(\"detector_\" + d.name); };\r\n\t    return CodegenNameUtil;\r\n\t})();\r\n\texports.CodegenNameUtil = CodegenNameUtil;\r\n\n\n/***/ },\n/* 607 */\n/***/ function(module, exports) {\n\n\t'use strict';var EventBinding = (function () {\r\n\t    function EventBinding(eventName, elIndex, dirIndex, records) {\r\n\t        this.eventName = eventName;\r\n\t        this.elIndex = elIndex;\r\n\t        this.dirIndex = dirIndex;\r\n\t        this.records = records;\r\n\t    }\r\n\t    return EventBinding;\r\n\t})();\r\n\texports.EventBinding = EventBinding;\r\n\n\n/***/ },\n/* 608 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var change_detection_jit_generator_1 = __webpack_require__(291);\r\n\tvar JitProtoChangeDetector = (function () {\r\n\t    function JitProtoChangeDetector(definition) {\r\n\t        this.definition = definition;\r\n\t        this._factory = this._createFactory(definition);\r\n\t    }\r\n\t    JitProtoChangeDetector.isSupported = function () { return true; };\r\n\t    JitProtoChangeDetector.prototype.instantiate = function () { return this._factory(); };\r\n\t    /** @internal */\r\n\t    JitProtoChangeDetector.prototype._createFactory = function (definition) {\r\n\t        return new change_detection_jit_generator_1.ChangeDetectorJITGenerator(definition, 'util', 'AbstractChangeDetector', 'ChangeDetectorStatus')\r\n\t            .generate();\r\n\t    };\r\n\t    return JitProtoChangeDetector;\r\n\t})();\r\n\texports.JitProtoChangeDetector = JitProtoChangeDetector;\r\n\n\n/***/ },\n/* 609 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar decorators_1 = __webpack_require__(195);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lexer_1 = __webpack_require__(300);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar ast_1 = __webpack_require__(127);\r\n\tvar _implicitReceiver = new ast_1.ImplicitReceiver();\r\n\t// TODO(tbosch): Cannot make this const/final right now because of the transpiler...\r\n\tvar INTERPOLATION_REGEXP = /\\{\\{([\\s\\S]*?)\\}\\}/g;\r\n\tvar ParseException = (function (_super) {\r\n\t    __extends(ParseException, _super);\r\n\t    function ParseException(message, input, errLocation, ctxLocation) {\r\n\t        _super.call(this, \"Parser Error: \" + message + \" \" + errLocation + \" [\" + input + \"] in \" + ctxLocation);\r\n\t    }\r\n\t    return ParseException;\r\n\t})(exceptions_1.BaseException);\r\n\tvar Parser = (function () {\r\n\t    function Parser(/** @internal */ _lexer, providedReflector) {\r\n\t        if (providedReflector === void 0) { providedReflector = null; }\r\n\t        this._lexer = _lexer;\r\n\t        this._reflector = lang_1.isPresent(providedReflector) ? providedReflector : reflection_1.reflector;\r\n\t    }\r\n\t    Parser.prototype.parseAction = function (input, location) {\r\n\t        this._checkNoInterpolation(input, location);\r\n\t        var tokens = this._lexer.tokenize(input);\r\n\t        var ast = new _ParseAST(input, location, tokens, this._reflector, true).parseChain();\r\n\t        return new ast_1.ASTWithSource(ast, input, location);\r\n\t    };\r\n\t    Parser.prototype.parseBinding = function (input, location) {\r\n\t        var ast = this._parseBindingAst(input, location);\r\n\t        return new ast_1.ASTWithSource(ast, input, location);\r\n\t    };\r\n\t    Parser.prototype.parseSimpleBinding = function (input, location) {\r\n\t        var ast = this._parseBindingAst(input, location);\r\n\t        if (!SimpleExpressionChecker.check(ast)) {\r\n\t            throw new ParseException('Host binding expression can only contain field access and constants', input, location);\r\n\t        }\r\n\t        return new ast_1.ASTWithSource(ast, input, location);\r\n\t    };\r\n\t    Parser.prototype._parseBindingAst = function (input, location) {\r\n\t        // Quotes expressions use 3rd-party expression language. We don't want to use\r\n\t        // our lexer or parser for that, so we check for that ahead of time.\r\n\t        var quote = this._parseQuote(input, location);\r\n\t        if (lang_1.isPresent(quote)) {\r\n\t            return quote;\r\n\t        }\r\n\t        this._checkNoInterpolation(input, location);\r\n\t        var tokens = this._lexer.tokenize(input);\r\n\t        return new _ParseAST(input, location, tokens, this._reflector, false).parseChain();\r\n\t    };\r\n\t    Parser.prototype._parseQuote = function (input, location) {\r\n\t        if (lang_1.isBlank(input))\r\n\t            return null;\r\n\t        var prefixSeparatorIndex = input.indexOf(':');\r\n\t        if (prefixSeparatorIndex == -1)\r\n\t            return null;\r\n\t        var prefix = input.substring(0, prefixSeparatorIndex).trim();\r\n\t        if (!lexer_1.isIdentifier(prefix))\r\n\t            return null;\r\n\t        var uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);\r\n\t        return new ast_1.Quote(prefix, uninterpretedExpression, location);\r\n\t    };\r\n\t    Parser.prototype.parseTemplateBindings = function (input, location) {\r\n\t        var tokens = this._lexer.tokenize(input);\r\n\t        return new _ParseAST(input, location, tokens, this._reflector, false).parseTemplateBindings();\r\n\t    };\r\n\t    Parser.prototype.parseInterpolation = function (input, location) {\r\n\t        var parts = lang_1.StringWrapper.split(input, INTERPOLATION_REGEXP);\r\n\t        if (parts.length <= 1) {\r\n\t            return null;\r\n\t        }\r\n\t        var strings = [];\r\n\t        var expressions = [];\r\n\t        for (var i = 0; i < parts.length; i++) {\r\n\t            var part = parts[i];\r\n\t            if (i % 2 === 0) {\r\n\t                // fixed string\r\n\t                strings.push(part);\r\n\t            }\r\n\t            else if (part.trim().length > 0) {\r\n\t                var tokens = this._lexer.tokenize(part);\r\n\t                var ast = new _ParseAST(input, location, tokens, this._reflector, false).parseChain();\r\n\t                expressions.push(ast);\r\n\t            }\r\n\t            else {\r\n\t                throw new ParseException('Blank expressions are not allowed in interpolated strings', input, \"at column \" + this._findInterpolationErrorColumn(parts, i) + \" in\", location);\r\n\t            }\r\n\t        }\r\n\t        return new ast_1.ASTWithSource(new ast_1.Interpolation(strings, expressions), input, location);\r\n\t    };\r\n\t    Parser.prototype.wrapLiteralPrimitive = function (input, location) {\r\n\t        return new ast_1.ASTWithSource(new ast_1.LiteralPrimitive(input), input, location);\r\n\t    };\r\n\t    Parser.prototype._checkNoInterpolation = function (input, location) {\r\n\t        var parts = lang_1.StringWrapper.split(input, INTERPOLATION_REGEXP);\r\n\t        if (parts.length > 1) {\r\n\t            throw new ParseException('Got interpolation ({{}}) where expression was expected', input, \"at column \" + this._findInterpolationErrorColumn(parts, 1) + \" in\", location);\r\n\t        }\r\n\t    };\r\n\t    Parser.prototype._findInterpolationErrorColumn = function (parts, partInErrIdx) {\r\n\t        var errLocation = '';\r\n\t        for (var j = 0; j < partInErrIdx; j++) {\r\n\t            errLocation += j % 2 === 0 ? parts[j] : \"{{\" + parts[j] + \"}}\";\r\n\t        }\r\n\t        return errLocation.length;\r\n\t    };\r\n\t    Parser = __decorate([\r\n\t        decorators_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [lexer_1.Lexer, reflection_1.Reflector])\r\n\t    ], Parser);\r\n\t    return Parser;\r\n\t})();\r\n\texports.Parser = Parser;\r\n\tvar _ParseAST = (function () {\r\n\t    function _ParseAST(input, location, tokens, reflector, parseAction) {\r\n\t        this.input = input;\r\n\t        this.location = location;\r\n\t        this.tokens = tokens;\r\n\t        this.reflector = reflector;\r\n\t        this.parseAction = parseAction;\r\n\t        this.index = 0;\r\n\t    }\r\n\t    _ParseAST.prototype.peek = function (offset) {\r\n\t        var i = this.index + offset;\r\n\t        return i < this.tokens.length ? this.tokens[i] : lexer_1.EOF;\r\n\t    };\r\n\t    Object.defineProperty(_ParseAST.prototype, \"next\", {\r\n\t        get: function () { return this.peek(0); },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(_ParseAST.prototype, \"inputIndex\", {\r\n\t        get: function () {\r\n\t            return (this.index < this.tokens.length) ? this.next.index : this.input.length;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    _ParseAST.prototype.advance = function () { this.index++; };\r\n\t    _ParseAST.prototype.optionalCharacter = function (code) {\r\n\t        if (this.next.isCharacter(code)) {\r\n\t            this.advance();\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.optionalKeywordVar = function () {\r\n\t        if (this.peekKeywordVar()) {\r\n\t            this.advance();\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.peekKeywordVar = function () { return this.next.isKeywordVar() || this.next.isOperator('#'); };\r\n\t    _ParseAST.prototype.expectCharacter = function (code) {\r\n\t        if (this.optionalCharacter(code))\r\n\t            return;\r\n\t        this.error(\"Missing expected \" + lang_1.StringWrapper.fromCharCode(code));\r\n\t    };\r\n\t    _ParseAST.prototype.optionalOperator = function (op) {\r\n\t        if (this.next.isOperator(op)) {\r\n\t            this.advance();\r\n\t            return true;\r\n\t        }\r\n\t        else {\r\n\t            return false;\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.expectOperator = function (operator) {\r\n\t        if (this.optionalOperator(operator))\r\n\t            return;\r\n\t        this.error(\"Missing expected operator \" + operator);\r\n\t    };\r\n\t    _ParseAST.prototype.expectIdentifierOrKeyword = function () {\r\n\t        var n = this.next;\r\n\t        if (!n.isIdentifier() && !n.isKeyword()) {\r\n\t            this.error(\"Unexpected token \" + n + \", expected identifier or keyword\");\r\n\t        }\r\n\t        this.advance();\r\n\t        return n.toString();\r\n\t    };\r\n\t    _ParseAST.prototype.expectIdentifierOrKeywordOrString = function () {\r\n\t        var n = this.next;\r\n\t        if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {\r\n\t            this.error(\"Unexpected token \" + n + \", expected identifier, keyword, or string\");\r\n\t        }\r\n\t        this.advance();\r\n\t        return n.toString();\r\n\t    };\r\n\t    _ParseAST.prototype.parseChain = function () {\r\n\t        var exprs = [];\r\n\t        while (this.index < this.tokens.length) {\r\n\t            var expr = this.parsePipe();\r\n\t            exprs.push(expr);\r\n\t            if (this.optionalCharacter(lexer_1.$SEMICOLON)) {\r\n\t                if (!this.parseAction) {\r\n\t                    this.error(\"Binding expression cannot contain chained expression\");\r\n\t                }\r\n\t                while (this.optionalCharacter(lexer_1.$SEMICOLON)) {\r\n\t                } // read all semicolons\r\n\t            }\r\n\t            else if (this.index < this.tokens.length) {\r\n\t                this.error(\"Unexpected token '\" + this.next + \"'\");\r\n\t            }\r\n\t        }\r\n\t        if (exprs.length == 0)\r\n\t            return new ast_1.EmptyExpr();\r\n\t        if (exprs.length == 1)\r\n\t            return exprs[0];\r\n\t        return new ast_1.Chain(exprs);\r\n\t    };\r\n\t    _ParseAST.prototype.parsePipe = function () {\r\n\t        var result = this.parseExpression();\r\n\t        if (this.optionalOperator(\"|\")) {\r\n\t            if (this.parseAction) {\r\n\t                this.error(\"Cannot have a pipe in an action expression\");\r\n\t            }\r\n\t            do {\r\n\t                var name = this.expectIdentifierOrKeyword();\r\n\t                var args = [];\r\n\t                while (this.optionalCharacter(lexer_1.$COLON)) {\r\n\t                    args.push(this.parseExpression());\r\n\t                }\r\n\t                result = new ast_1.BindingPipe(result, name, args);\r\n\t            } while (this.optionalOperator(\"|\"));\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    _ParseAST.prototype.parseExpression = function () { return this.parseConditional(); };\r\n\t    _ParseAST.prototype.parseConditional = function () {\r\n\t        var start = this.inputIndex;\r\n\t        var result = this.parseLogicalOr();\r\n\t        if (this.optionalOperator('?')) {\r\n\t            var yes = this.parsePipe();\r\n\t            if (!this.optionalCharacter(lexer_1.$COLON)) {\r\n\t                var end = this.inputIndex;\r\n\t                var expression = this.input.substring(start, end);\r\n\t                this.error(\"Conditional expression \" + expression + \" requires all 3 expressions\");\r\n\t            }\r\n\t            var no = this.parsePipe();\r\n\t            return new ast_1.Conditional(result, yes, no);\r\n\t        }\r\n\t        else {\r\n\t            return result;\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parseLogicalOr = function () {\r\n\t        // '||'\r\n\t        var result = this.parseLogicalAnd();\r\n\t        while (this.optionalOperator('||')) {\r\n\t            result = new ast_1.Binary('||', result, this.parseLogicalAnd());\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    _ParseAST.prototype.parseLogicalAnd = function () {\r\n\t        // '&&'\r\n\t        var result = this.parseEquality();\r\n\t        while (this.optionalOperator('&&')) {\r\n\t            result = new ast_1.Binary('&&', result, this.parseEquality());\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    _ParseAST.prototype.parseEquality = function () {\r\n\t        // '==','!=','===','!=='\r\n\t        var result = this.parseRelational();\r\n\t        while (true) {\r\n\t            if (this.optionalOperator('==')) {\r\n\t                result = new ast_1.Binary('==', result, this.parseRelational());\r\n\t            }\r\n\t            else if (this.optionalOperator('===')) {\r\n\t                result = new ast_1.Binary('===', result, this.parseRelational());\r\n\t            }\r\n\t            else if (this.optionalOperator('!=')) {\r\n\t                result = new ast_1.Binary('!=', result, this.parseRelational());\r\n\t            }\r\n\t            else if (this.optionalOperator('!==')) {\r\n\t                result = new ast_1.Binary('!==', result, this.parseRelational());\r\n\t            }\r\n\t            else {\r\n\t                return result;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parseRelational = function () {\r\n\t        // '<', '>', '<=', '>='\r\n\t        var result = this.parseAdditive();\r\n\t        while (true) {\r\n\t            if (this.optionalOperator('<')) {\r\n\t                result = new ast_1.Binary('<', result, this.parseAdditive());\r\n\t            }\r\n\t            else if (this.optionalOperator('>')) {\r\n\t                result = new ast_1.Binary('>', result, this.parseAdditive());\r\n\t            }\r\n\t            else if (this.optionalOperator('<=')) {\r\n\t                result = new ast_1.Binary('<=', result, this.parseAdditive());\r\n\t            }\r\n\t            else if (this.optionalOperator('>=')) {\r\n\t                result = new ast_1.Binary('>=', result, this.parseAdditive());\r\n\t            }\r\n\t            else {\r\n\t                return result;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parseAdditive = function () {\r\n\t        // '+', '-'\r\n\t        var result = this.parseMultiplicative();\r\n\t        while (true) {\r\n\t            if (this.optionalOperator('+')) {\r\n\t                result = new ast_1.Binary('+', result, this.parseMultiplicative());\r\n\t            }\r\n\t            else if (this.optionalOperator('-')) {\r\n\t                result = new ast_1.Binary('-', result, this.parseMultiplicative());\r\n\t            }\r\n\t            else {\r\n\t                return result;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parseMultiplicative = function () {\r\n\t        // '*', '%', '/'\r\n\t        var result = this.parsePrefix();\r\n\t        while (true) {\r\n\t            if (this.optionalOperator('*')) {\r\n\t                result = new ast_1.Binary('*', result, this.parsePrefix());\r\n\t            }\r\n\t            else if (this.optionalOperator('%')) {\r\n\t                result = new ast_1.Binary('%', result, this.parsePrefix());\r\n\t            }\r\n\t            else if (this.optionalOperator('/')) {\r\n\t                result = new ast_1.Binary('/', result, this.parsePrefix());\r\n\t            }\r\n\t            else {\r\n\t                return result;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parsePrefix = function () {\r\n\t        if (this.optionalOperator('+')) {\r\n\t            return this.parsePrefix();\r\n\t        }\r\n\t        else if (this.optionalOperator('-')) {\r\n\t            return new ast_1.Binary('-', new ast_1.LiteralPrimitive(0), this.parsePrefix());\r\n\t        }\r\n\t        else if (this.optionalOperator('!')) {\r\n\t            return new ast_1.PrefixNot(this.parsePrefix());\r\n\t        }\r\n\t        else {\r\n\t            return this.parseCallChain();\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parseCallChain = function () {\r\n\t        var result = this.parsePrimary();\r\n\t        while (true) {\r\n\t            if (this.optionalCharacter(lexer_1.$PERIOD)) {\r\n\t                result = this.parseAccessMemberOrMethodCall(result, false);\r\n\t            }\r\n\t            else if (this.optionalOperator('?.')) {\r\n\t                result = this.parseAccessMemberOrMethodCall(result, true);\r\n\t            }\r\n\t            else if (this.optionalCharacter(lexer_1.$LBRACKET)) {\r\n\t                var key = this.parsePipe();\r\n\t                this.expectCharacter(lexer_1.$RBRACKET);\r\n\t                if (this.optionalOperator(\"=\")) {\r\n\t                    var value = this.parseConditional();\r\n\t                    result = new ast_1.KeyedWrite(result, key, value);\r\n\t                }\r\n\t                else {\r\n\t                    result = new ast_1.KeyedRead(result, key);\r\n\t                }\r\n\t            }\r\n\t            else if (this.optionalCharacter(lexer_1.$LPAREN)) {\r\n\t                var args = this.parseCallArguments();\r\n\t                this.expectCharacter(lexer_1.$RPAREN);\r\n\t                result = new ast_1.FunctionCall(result, args);\r\n\t            }\r\n\t            else {\r\n\t                return result;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    _ParseAST.prototype.parsePrimary = function () {\r\n\t        if (this.optionalCharacter(lexer_1.$LPAREN)) {\r\n\t            var result = this.parsePipe();\r\n\t            this.expectCharacter(lexer_1.$RPAREN);\r\n\t            return result;\r\n\t        }\r\n\t        else if (this.next.isKeywordNull() || this.next.isKeywordUndefined()) {\r\n\t            this.advance();\r\n\t            return new ast_1.LiteralPrimitive(null);\r\n\t        }\r\n\t        else if (this.next.isKeywordTrue()) {\r\n\t            this.advance();\r\n\t            return new ast_1.LiteralPrimitive(true);\r\n\t        }\r\n\t        else if (this.next.isKeywordFalse()) {\r\n\t            this.advance();\r\n\t            return new ast_1.LiteralPrimitive(false);\r\n\t        }\r\n\t        else if (this.optionalCharacter(lexer_1.$LBRACKET)) {\r\n\t            var elements = this.parseExpressionList(lexer_1.$RBRACKET);\r\n\t            this.expectCharacter(lexer_1.$RBRACKET);\r\n\t            return new ast_1.LiteralArray(elements);\r\n\t        }\r\n\t        else if (this.next.isCharacter(lexer_1.$LBRACE)) {\r\n\t            return this.parseLiteralMap();\r\n\t        }\r\n\t        else if (this.next.isIdentifier()) {\r\n\t            return this.parseAccessMemberOrMethodCall(_implicitReceiver, false);\r\n\t        }\r\n\t        else if (this.next.isNumber()) {\r\n\t            var value = this.next.toNumber();\r\n\t            this.advance();\r\n\t            return new ast_1.LiteralPrimitive(value);\r\n\t        }\r\n\t        else if (this.next.isString()) {\r\n\t            var literalValue = this.next.toString();\r\n\t            this.advance();\r\n\t            return new ast_1.LiteralPrimitive(literalValue);\r\n\t        }\r\n\t        else if (this.index >= this.tokens.length) {\r\n\t            this.error(\"Unexpected end of expression: \" + this.input);\r\n\t        }\r\n\t        else {\r\n\t            this.error(\"Unexpected token \" + this.next);\r\n\t        }\r\n\t        // error() throws, so we don't reach here.\r\n\t        throw new exceptions_1.BaseException(\"Fell through all cases in parsePrimary\");\r\n\t    };\r\n\t    _ParseAST.prototype.parseExpressionList = function (terminator) {\r\n\t        var result = [];\r\n\t        if (!this.next.isCharacter(terminator)) {\r\n\t            do {\r\n\t                result.push(this.parsePipe());\r\n\t            } while (this.optionalCharacter(lexer_1.$COMMA));\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    _ParseAST.prototype.parseLiteralMap = function () {\r\n\t        var keys = [];\r\n\t        var values = [];\r\n\t        this.expectCharacter(lexer_1.$LBRACE);\r\n\t        if (!this.optionalCharacter(lexer_1.$RBRACE)) {\r\n\t            do {\r\n\t                var key = this.expectIdentifierOrKeywordOrString();\r\n\t                keys.push(key);\r\n\t                this.expectCharacter(lexer_1.$COLON);\r\n\t                values.push(this.parsePipe());\r\n\t            } while (this.optionalCharacter(lexer_1.$COMMA));\r\n\t            this.expectCharacter(lexer_1.$RBRACE);\r\n\t        }\r\n\t        return new ast_1.LiteralMap(keys, values);\r\n\t    };\r\n\t    _ParseAST.prototype.parseAccessMemberOrMethodCall = function (receiver, isSafe) {\r\n\t        if (isSafe === void 0) { isSafe = false; }\r\n\t        var id = this.expectIdentifierOrKeyword();\r\n\t        if (this.optionalCharacter(lexer_1.$LPAREN)) {\r\n\t            var args = this.parseCallArguments();\r\n\t            this.expectCharacter(lexer_1.$RPAREN);\r\n\t            var fn = this.reflector.method(id);\r\n\t            return isSafe ? new ast_1.SafeMethodCall(receiver, id, fn, args) :\r\n\t                new ast_1.MethodCall(receiver, id, fn, args);\r\n\t        }\r\n\t        else {\r\n\t            if (isSafe) {\r\n\t                if (this.optionalOperator(\"=\")) {\r\n\t                    this.error(\"The '?.' operator cannot be used in the assignment\");\r\n\t                }\r\n\t                else {\r\n\t                    return new ast_1.SafePropertyRead(receiver, id, this.reflector.getter(id));\r\n\t                }\r\n\t            }\r\n\t            else {\r\n\t                if (this.optionalOperator(\"=\")) {\r\n\t                    if (!this.parseAction) {\r\n\t                        this.error(\"Bindings cannot contain assignments\");\r\n\t                    }\r\n\t                    var value = this.parseConditional();\r\n\t                    return new ast_1.PropertyWrite(receiver, id, this.reflector.setter(id), value);\r\n\t                }\r\n\t                else {\r\n\t                    return new ast_1.PropertyRead(receiver, id, this.reflector.getter(id));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        return null;\r\n\t    };\r\n\t    _ParseAST.prototype.parseCallArguments = function () {\r\n\t        if (this.next.isCharacter(lexer_1.$RPAREN))\r\n\t            return [];\r\n\t        var positionals = [];\r\n\t        do {\r\n\t            positionals.push(this.parsePipe());\r\n\t        } while (this.optionalCharacter(lexer_1.$COMMA));\r\n\t        return positionals;\r\n\t    };\r\n\t    _ParseAST.prototype.parseBlockContent = function () {\r\n\t        if (!this.parseAction) {\r\n\t            this.error(\"Binding expression cannot contain chained expression\");\r\n\t        }\r\n\t        var exprs = [];\r\n\t        while (this.index < this.tokens.length && !this.next.isCharacter(lexer_1.$RBRACE)) {\r\n\t            var expr = this.parseExpression();\r\n\t            exprs.push(expr);\r\n\t            if (this.optionalCharacter(lexer_1.$SEMICOLON)) {\r\n\t                while (this.optionalCharacter(lexer_1.$SEMICOLON)) {\r\n\t                } // read all semicolons\r\n\t            }\r\n\t        }\r\n\t        if (exprs.length == 0)\r\n\t            return new ast_1.EmptyExpr();\r\n\t        if (exprs.length == 1)\r\n\t            return exprs[0];\r\n\t        return new ast_1.Chain(exprs);\r\n\t    };\r\n\t    /**\r\n\t     * An identifier, a keyword, a string with an optional `-` inbetween.\r\n\t     */\r\n\t    _ParseAST.prototype.expectTemplateBindingKey = function () {\r\n\t        var result = '';\r\n\t        var operatorFound = false;\r\n\t        do {\r\n\t            result += this.expectIdentifierOrKeywordOrString();\r\n\t            operatorFound = this.optionalOperator('-');\r\n\t            if (operatorFound) {\r\n\t                result += '-';\r\n\t            }\r\n\t        } while (operatorFound);\r\n\t        return result.toString();\r\n\t    };\r\n\t    _ParseAST.prototype.parseTemplateBindings = function () {\r\n\t        var bindings = [];\r\n\t        var prefix = null;\r\n\t        while (this.index < this.tokens.length) {\r\n\t            var keyIsVar = this.optionalKeywordVar();\r\n\t            var key = this.expectTemplateBindingKey();\r\n\t            if (!keyIsVar) {\r\n\t                if (prefix == null) {\r\n\t                    prefix = key;\r\n\t                }\r\n\t                else {\r\n\t                    key = prefix + key[0].toUpperCase() + key.substring(1);\r\n\t                }\r\n\t            }\r\n\t            this.optionalCharacter(lexer_1.$COLON);\r\n\t            var name = null;\r\n\t            var expression = null;\r\n\t            if (keyIsVar) {\r\n\t                if (this.optionalOperator(\"=\")) {\r\n\t                    name = this.expectTemplateBindingKey();\r\n\t                }\r\n\t                else {\r\n\t                    name = '\\$implicit';\r\n\t                }\r\n\t            }\r\n\t            else if (this.next !== lexer_1.EOF && !this.peekKeywordVar()) {\r\n\t                var start = this.inputIndex;\r\n\t                var ast = this.parsePipe();\r\n\t                var source = this.input.substring(start, this.inputIndex);\r\n\t                expression = new ast_1.ASTWithSource(ast, source, this.location);\r\n\t            }\r\n\t            bindings.push(new ast_1.TemplateBinding(key, keyIsVar, name, expression));\r\n\t            if (!this.optionalCharacter(lexer_1.$SEMICOLON)) {\r\n\t                this.optionalCharacter(lexer_1.$COMMA);\r\n\t            }\r\n\t        }\r\n\t        return bindings;\r\n\t    };\r\n\t    _ParseAST.prototype.error = function (message, index) {\r\n\t        if (index === void 0) { index = null; }\r\n\t        if (lang_1.isBlank(index))\r\n\t            index = this.index;\r\n\t        var location = (index < this.tokens.length) ? \"at column \" + (this.tokens[index].index + 1) + \" in\" :\r\n\t            \"at the end of the expression\";\r\n\t        throw new ParseException(message, this.input, location, this.location);\r\n\t    };\r\n\t    return _ParseAST;\r\n\t})();\r\n\texports._ParseAST = _ParseAST;\r\n\tvar SimpleExpressionChecker = (function () {\r\n\t    function SimpleExpressionChecker() {\r\n\t        this.simple = true;\r\n\t    }\r\n\t    SimpleExpressionChecker.check = function (ast) {\r\n\t        var s = new SimpleExpressionChecker();\r\n\t        ast.visit(s);\r\n\t        return s.simple;\r\n\t    };\r\n\t    SimpleExpressionChecker.prototype.visitImplicitReceiver = function (ast) { };\r\n\t    SimpleExpressionChecker.prototype.visitInterpolation = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitLiteralPrimitive = function (ast) { };\r\n\t    SimpleExpressionChecker.prototype.visitPropertyRead = function (ast) { };\r\n\t    SimpleExpressionChecker.prototype.visitPropertyWrite = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitSafePropertyRead = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitMethodCall = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitSafeMethodCall = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitFunctionCall = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitLiteralArray = function (ast) { this.visitAll(ast.expressions); };\r\n\t    SimpleExpressionChecker.prototype.visitLiteralMap = function (ast) { this.visitAll(ast.values); };\r\n\t    SimpleExpressionChecker.prototype.visitBinary = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitPrefixNot = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitConditional = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitPipe = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitKeyedRead = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitKeyedWrite = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitAll = function (asts) {\r\n\t        var res = collection_1.ListWrapper.createFixedSize(asts.length);\r\n\t        for (var i = 0; i < asts.length; ++i) {\r\n\t            res[i] = asts[i].visit(this);\r\n\t        }\r\n\t        return res;\r\n\t    };\r\n\t    SimpleExpressionChecker.prototype.visitChain = function (ast) { this.simple = false; };\r\n\t    SimpleExpressionChecker.prototype.visitQuote = function (ast) { this.simple = false; };\r\n\t    return SimpleExpressionChecker;\r\n\t})();\r\n\n\n/***/ },\n/* 610 */\n/***/ function(module, exports) {\n\n\t'use strict';function implementsOnDestroy(pipe) {\r\n\t    return pipe.constructor.prototype.ngOnDestroy;\r\n\t}\r\n\texports.implementsOnDestroy = implementsOnDestroy;\r\n\n\n/***/ },\n/* 611 */\n/***/ function(module, exports) {\n\n\t'use strict';var SelectedPipe = (function () {\r\n\t    function SelectedPipe(pipe, pure) {\r\n\t        this.pipe = pipe;\r\n\t        this.pure = pure;\r\n\t    }\r\n\t    return SelectedPipe;\r\n\t})();\r\n\texports.SelectedPipe = SelectedPipe;\r\n\n\n/***/ },\n/* 612 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar debug_node_1 = __webpack_require__(194);\r\n\tvar DebugDomRootRenderer = (function () {\r\n\t    function DebugDomRootRenderer(_delegate) {\r\n\t        this._delegate = _delegate;\r\n\t    }\r\n\t    DebugDomRootRenderer.prototype.renderComponent = function (componentProto) {\r\n\t        return new DebugDomRenderer(this, this._delegate.renderComponent(componentProto));\r\n\t    };\r\n\t    return DebugDomRootRenderer;\r\n\t})();\r\n\texports.DebugDomRootRenderer = DebugDomRootRenderer;\r\n\tvar DebugDomRenderer = (function () {\r\n\t    function DebugDomRenderer(_rootRenderer, _delegate) {\r\n\t        this._rootRenderer = _rootRenderer;\r\n\t        this._delegate = _delegate;\r\n\t    }\r\n\t    DebugDomRenderer.prototype.renderComponent = function (componentType) {\r\n\t        return this._rootRenderer.renderComponent(componentType);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.selectRootElement = function (selector) {\r\n\t        var nativeEl = this._delegate.selectRootElement(selector);\r\n\t        var debugEl = new debug_node_1.DebugElement(nativeEl, null);\r\n\t        debug_node_1.indexDebugNode(debugEl);\r\n\t        return nativeEl;\r\n\t    };\r\n\t    DebugDomRenderer.prototype.createElement = function (parentElement, name) {\r\n\t        var nativeEl = this._delegate.createElement(parentElement, name);\r\n\t        var debugEl = new debug_node_1.DebugElement(nativeEl, debug_node_1.getDebugNode(parentElement));\r\n\t        debugEl.name = name;\r\n\t        debug_node_1.indexDebugNode(debugEl);\r\n\t        return nativeEl;\r\n\t    };\r\n\t    DebugDomRenderer.prototype.createViewRoot = function (hostElement) { return this._delegate.createViewRoot(hostElement); };\r\n\t    DebugDomRenderer.prototype.createTemplateAnchor = function (parentElement) {\r\n\t        var comment = this._delegate.createTemplateAnchor(parentElement);\r\n\t        var debugEl = new debug_node_1.DebugNode(comment, debug_node_1.getDebugNode(parentElement));\r\n\t        debug_node_1.indexDebugNode(debugEl);\r\n\t        return comment;\r\n\t    };\r\n\t    DebugDomRenderer.prototype.createText = function (parentElement, value) {\r\n\t        var text = this._delegate.createText(parentElement, value);\r\n\t        var debugEl = new debug_node_1.DebugNode(text, debug_node_1.getDebugNode(parentElement));\r\n\t        debug_node_1.indexDebugNode(debugEl);\r\n\t        return text;\r\n\t    };\r\n\t    DebugDomRenderer.prototype.projectNodes = function (parentElement, nodes) {\r\n\t        var debugParent = debug_node_1.getDebugNode(parentElement);\r\n\t        if (lang_1.isPresent(debugParent) && debugParent instanceof debug_node_1.DebugElement) {\r\n\t            nodes.forEach(function (node) { debugParent.addChild(debug_node_1.getDebugNode(node)); });\r\n\t        }\r\n\t        return this._delegate.projectNodes(parentElement, nodes);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.attachViewAfter = function (node, viewRootNodes) {\r\n\t        var debugNode = debug_node_1.getDebugNode(node);\r\n\t        if (lang_1.isPresent(debugNode)) {\r\n\t            var debugParent = debugNode.parent;\r\n\t            if (viewRootNodes.length > 0 && lang_1.isPresent(debugParent)) {\r\n\t                var debugViewRootNodes = [];\r\n\t                viewRootNodes.forEach(function (rootNode) { return debugViewRootNodes.push(debug_node_1.getDebugNode(rootNode)); });\r\n\t                debugParent.insertChildrenAfter(debugNode, debugViewRootNodes);\r\n\t            }\r\n\t        }\r\n\t        return this._delegate.attachViewAfter(node, viewRootNodes);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.detachView = function (viewRootNodes) {\r\n\t        viewRootNodes.forEach(function (node) {\r\n\t            var debugNode = debug_node_1.getDebugNode(node);\r\n\t            if (lang_1.isPresent(debugNode) && lang_1.isPresent(debugNode.parent)) {\r\n\t                debugNode.parent.removeChild(debugNode);\r\n\t            }\r\n\t        });\r\n\t        return this._delegate.detachView(viewRootNodes);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.destroyView = function (hostElement, viewAllNodes) {\r\n\t        viewAllNodes.forEach(function (node) { debug_node_1.removeDebugNodeFromIndex(debug_node_1.getDebugNode(node)); });\r\n\t        return this._delegate.destroyView(hostElement, viewAllNodes);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.listen = function (renderElement, name, callback) {\r\n\t        var debugEl = debug_node_1.getDebugNode(renderElement);\r\n\t        if (lang_1.isPresent(debugEl)) {\r\n\t            debugEl.listeners.push(new debug_node_1.EventListener(name, callback));\r\n\t        }\r\n\t        return this._delegate.listen(renderElement, name, callback);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.listenGlobal = function (target, name, callback) {\r\n\t        return this._delegate.listenGlobal(target, name, callback);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.setElementProperty = function (renderElement, propertyName, propertyValue) {\r\n\t        var debugEl = debug_node_1.getDebugNode(renderElement);\r\n\t        if (lang_1.isPresent(debugEl) && debugEl instanceof debug_node_1.DebugElement) {\r\n\t            debugEl.properties.set(propertyName, propertyValue);\r\n\t        }\r\n\t        return this._delegate.setElementProperty(renderElement, propertyName, propertyValue);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.setElementAttribute = function (renderElement, attributeName, attributeValue) {\r\n\t        var debugEl = debug_node_1.getDebugNode(renderElement);\r\n\t        if (lang_1.isPresent(debugEl) && debugEl instanceof debug_node_1.DebugElement) {\r\n\t            debugEl.attributes.set(attributeName, attributeValue);\r\n\t        }\r\n\t        return this._delegate.setElementAttribute(renderElement, attributeName, attributeValue);\r\n\t    };\r\n\t    /**\r\n\t     * Used only in debug mode to serialize property changes to comment nodes,\r\n\t     * such as <template> placeholders.\r\n\t     */\r\n\t    DebugDomRenderer.prototype.setBindingDebugInfo = function (renderElement, propertyName, propertyValue) {\r\n\t        return this._delegate.setBindingDebugInfo(renderElement, propertyName, propertyValue);\r\n\t    };\r\n\t    /**\r\n\t     * Used only in development mode to set information needed by the DebugNode for this element.\r\n\t     */\r\n\t    DebugDomRenderer.prototype.setElementDebugInfo = function (renderElement, info) {\r\n\t        var debugEl = debug_node_1.getDebugNode(renderElement);\r\n\t        debugEl.setDebugInfo(info);\r\n\t        return this._delegate.setElementDebugInfo(renderElement, info);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.setElementClass = function (renderElement, className, isAdd) {\r\n\t        return this._delegate.setElementClass(renderElement, className, isAdd);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.setElementStyle = function (renderElement, styleName, styleValue) {\r\n\t        return this._delegate.setElementStyle(renderElement, styleName, styleValue);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.invokeElementMethod = function (renderElement, methodName, args) {\r\n\t        return this._delegate.invokeElementMethod(renderElement, methodName, args);\r\n\t    };\r\n\t    DebugDomRenderer.prototype.setText = function (renderNode, text) { return this._delegate.setText(renderNode, text); };\r\n\t    return DebugDomRenderer;\r\n\t})();\r\n\texports.DebugDomRenderer = DebugDomRenderer;\r\n\n\n/***/ },\n/* 613 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar lang_1 = __webpack_require__(1);\r\n\t/**\r\n\t * Creates a token that can be used in a DI Provider.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/Ys9ezXpj2Mnoy3Uc8KBp?p=preview))\r\n\t *\r\n\t * ```typescript\r\n\t * var t = new OpaqueToken(\"value\");\r\n\t *\r\n\t * var injector = Injector.resolveAndCreate([\r\n\t *   provide(t, {useValue: \"bindingValue\"})\r\n\t * ]);\r\n\t *\r\n\t * expect(injector.get(t)).toEqual(\"bindingValue\");\r\n\t * ```\r\n\t *\r\n\t * Using an `OpaqueToken` is preferable to using strings as tokens because of possible collisions\r\n\t * caused by multiple providers using the same string as two different tokens.\r\n\t *\r\n\t * Using an `OpaqueToken` is preferable to using an `Object` as tokens because it provides better\r\n\t * error messages.\r\n\t */\r\n\tvar OpaqueToken = (function () {\r\n\t    function OpaqueToken(_desc) {\r\n\t        this._desc = _desc;\r\n\t    }\r\n\t    OpaqueToken.prototype.toString = function () { return \"Token \" + this._desc; };\r\n\t    OpaqueToken = __decorate([\r\n\t        lang_1.CONST(), \r\n\t        __metadata('design:paramtypes', [String])\r\n\t    ], OpaqueToken);\r\n\t    return OpaqueToken;\r\n\t})();\r\n\texports.OpaqueToken = OpaqueToken;\r\n\n\n/***/ },\n/* 614 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';// Public API for compiler\r\n\tvar directive_resolver_1 = __webpack_require__(128);\r\n\texports.DirectiveResolver = directive_resolver_1.DirectiveResolver;\r\n\tvar view_resolver_1 = __webpack_require__(202);\r\n\texports.ViewResolver = view_resolver_1.ViewResolver;\r\n\tvar compiler_1 = __webpack_require__(81);\r\n\texports.Compiler = compiler_1.Compiler;\r\n\tvar view_manager_1 = __webpack_require__(131);\r\n\texports.AppViewManager = view_manager_1.AppViewManager;\r\n\tvar query_list_1 = __webpack_require__(305);\r\n\texports.QueryList = query_list_1.QueryList;\r\n\tvar dynamic_component_loader_1 = __webpack_require__(96);\r\n\texports.DynamicComponentLoader = dynamic_component_loader_1.DynamicComponentLoader;\r\n\tvar element_ref_1 = __webpack_require__(199);\r\n\texports.ElementRef = element_ref_1.ElementRef;\r\n\tvar template_ref_1 = __webpack_require__(307);\r\n\texports.TemplateRef = template_ref_1.TemplateRef;\r\n\tvar view_ref_1 = __webpack_require__(132);\r\n\texports.EmbeddedViewRef = view_ref_1.EmbeddedViewRef;\r\n\texports.HostViewRef = view_ref_1.HostViewRef;\r\n\texports.ViewRef = view_ref_1.ViewRef;\r\n\texports.HostViewFactoryRef = view_ref_1.HostViewFactoryRef;\r\n\tvar view_container_ref_1 = __webpack_require__(201);\r\n\texports.ViewContainerRef = view_container_ref_1.ViewContainerRef;\r\n\tvar dynamic_component_loader_2 = __webpack_require__(96);\r\n\texports.ComponentRef = dynamic_component_loader_2.ComponentRef;\r\n\n\n/***/ },\n/* 615 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar interfaces_1 = __webpack_require__(130);\r\n\tfunction hasLifecycleHook(lcInterface, token) {\r\n\t    if (!(token instanceof lang_1.Type))\r\n\t        return false;\r\n\t    var proto = token.prototype;\r\n\t    switch (lcInterface) {\r\n\t        case interfaces_1.LifecycleHooks.AfterContentInit:\r\n\t            return !!proto.ngAfterContentInit;\r\n\t        case interfaces_1.LifecycleHooks.AfterContentChecked:\r\n\t            return !!proto.ngAfterContentChecked;\r\n\t        case interfaces_1.LifecycleHooks.AfterViewInit:\r\n\t            return !!proto.ngAfterViewInit;\r\n\t        case interfaces_1.LifecycleHooks.AfterViewChecked:\r\n\t            return !!proto.ngAfterViewChecked;\r\n\t        case interfaces_1.LifecycleHooks.OnChanges:\r\n\t            return !!proto.ngOnChanges;\r\n\t        case interfaces_1.LifecycleHooks.DoCheck:\r\n\t            return !!proto.ngDoCheck;\r\n\t        case interfaces_1.LifecycleHooks.OnDestroy:\r\n\t            return !!proto.ngOnDestroy;\r\n\t        case interfaces_1.LifecycleHooks.OnInit:\r\n\t            return !!proto.ngOnInit;\r\n\t        default:\r\n\t            return false;\r\n\t    }\r\n\t}\r\n\texports.hasLifecycleHook = hasLifecycleHook;\r\n\n\n/***/ },\n/* 616 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar console_1 = __webpack_require__(303);\r\n\tvar reflection_1 = __webpack_require__(27);\r\n\tvar testability_1 = __webpack_require__(135);\r\n\tfunction _reflector() {\r\n\t    return reflection_1.reflector;\r\n\t}\r\n\t/**\r\n\t * A default set of providers which should be included in any Angular platform.\r\n\t */\r\n\texports.PLATFORM_COMMON_PROVIDERS = lang_1.CONST_EXPR([new di_1.Provider(reflection_1.Reflector, { useFactory: _reflector, deps: [] }), testability_1.TestabilityRegistry, console_1.Console]);\r\n\n\n/***/ },\n/* 617 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\texports.enableProdMode = lang_1.enableProdMode;\r\n\n\n/***/ },\n/* 618 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar trace;\r\n\tvar events;\r\n\tfunction detectWTF() {\r\n\t    var wtf = lang_1.global['wtf'];\r\n\t    if (wtf) {\r\n\t        trace = wtf['trace'];\r\n\t        if (trace) {\r\n\t            events = trace['events'];\r\n\t            return true;\r\n\t        }\r\n\t    }\r\n\t    return false;\r\n\t}\r\n\texports.detectWTF = detectWTF;\r\n\tfunction createScope(signature, flags) {\r\n\t    if (flags === void 0) { flags = null; }\r\n\t    return events.createScope(signature, flags);\r\n\t}\r\n\texports.createScope = createScope;\r\n\tfunction leave(scope, returnValue) {\r\n\t    trace.leaveScope(scope, returnValue);\r\n\t    return returnValue;\r\n\t}\r\n\texports.leave = leave;\r\n\tfunction startTimeRange(rangeType, action) {\r\n\t    return trace.beginTimeRange(rangeType, action);\r\n\t}\r\n\texports.startTimeRange = startTimeRange;\r\n\tfunction endTimeRange(range) {\r\n\t    trace.endTimeRange(range);\r\n\t}\r\n\texports.endTimeRange = endTimeRange;\r\n\n\n/***/ },\n/* 619 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * This is here because DART requires it. It is noop in JS.\r\n\t */\r\n\tfunction wtfInit() { }\r\n\texports.wtfInit = wtfInit;\r\n\n\n/***/ },\n/* 620 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';// Public API for render\r\n\tvar api_1 = __webpack_require__(134);\r\n\texports.RootRenderer = api_1.RootRenderer;\r\n\texports.Renderer = api_1.Renderer;\r\n\texports.RenderComponentType = api_1.RenderComponentType;\r\n\n\n/***/ },\n/* 621 */\n326,\n/* 622 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';// Public API for util\r\n\tvar decorators_1 = __webpack_require__(100);\r\n\texports.Class = decorators_1.Class;\r\n\n\n/***/ },\n/* 623 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';// Public API for Zone\r\n\tvar ng_zone_1 = __webpack_require__(136);\r\n\texports.NgZone = ng_zone_1.NgZone;\r\n\texports.NgZoneError = ng_zone_1.NgZoneError;\r\n\n\n/***/ },\n/* 624 */\n/***/ function(module, exports) {\n\n\t'use strict';/**\r\n\t * JS version of browser APIs. This library can only run in the browser.\r\n\t */\r\n\tvar win = window;\r\n\texports.window = win;\r\n\texports.document = window.document;\r\n\texports.location = window.location;\r\n\texports.gc = window['gc'] ? function () { return window['gc'](); } : function () { return null; };\r\n\texports.performance = window['performance'] ? window['performance'] : null;\r\n\texports.Event = window['Event'];\r\n\texports.MouseEvent = window['MouseEvent'];\r\n\texports.KeyboardEvent = window['KeyboardEvent'];\r\n\texports.EventTarget = window['EventTarget'];\r\n\texports.History = window['History'];\r\n\texports.Location = window['Location'];\r\n\texports.EventListener = window['EventListener'];\r\n\n\n/***/ },\n/* 625 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';// Public API for Facade\r\n\tvar lang_1 = __webpack_require__(1);\r\n\texports.Type = lang_1.Type;\r\n\tvar async_1 = __webpack_require__(13);\r\n\texports.EventEmitter = async_1.EventEmitter;\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\texports.WrappedException = exceptions_1.WrappedException;\r\n\tvar exception_handler_1 = __webpack_require__(206);\r\n\texports.ExceptionHandler = exception_handler_1.ExceptionHandler;\r\n\n\n/***/ },\n/* 626 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar xhr_impl_1 = __webpack_require__(323);\r\n\t/**\r\n\t * Provides DOM operations in any browser environment.\r\n\t */\r\n\tvar GenericBrowserDomAdapter = (function (_super) {\r\n\t    __extends(GenericBrowserDomAdapter, _super);\r\n\t    function GenericBrowserDomAdapter() {\r\n\t        var _this = this;\r\n\t        _super.call(this);\r\n\t        this._animationPrefix = null;\r\n\t        this._transitionEnd = null;\r\n\t        try {\r\n\t            var element = this.createElement('div', this.defaultDoc());\r\n\t            if (lang_1.isPresent(this.getStyle(element, 'animationName'))) {\r\n\t                this._animationPrefix = '';\r\n\t            }\r\n\t            else {\r\n\t                var domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\r\n\t                for (var i = 0; i < domPrefixes.length; i++) {\r\n\t                    if (lang_1.isPresent(this.getStyle(element, domPrefixes[i] + 'AnimationName'))) {\r\n\t                        this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\r\n\t                        break;\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            var transEndEventNames = {\r\n\t                WebkitTransition: 'webkitTransitionEnd',\r\n\t                MozTransition: 'transitionend',\r\n\t                OTransition: 'oTransitionEnd otransitionend',\r\n\t                transition: 'transitionend'\r\n\t            };\r\n\t            collection_1.StringMapWrapper.forEach(transEndEventNames, function (value, key) {\r\n\t                if (lang_1.isPresent(_this.getStyle(element, key))) {\r\n\t                    _this._transitionEnd = value;\r\n\t                }\r\n\t            });\r\n\t        }\r\n\t        catch (e) {\r\n\t            this._animationPrefix = null;\r\n\t            this._transitionEnd = null;\r\n\t        }\r\n\t    }\r\n\t    GenericBrowserDomAdapter.prototype.getXHR = function () { return xhr_impl_1.XHRImpl; };\r\n\t    GenericBrowserDomAdapter.prototype.getDistributedNodes = function (el) { return el.getDistributedNodes(); };\r\n\t    GenericBrowserDomAdapter.prototype.resolveAndSetHref = function (el, baseUrl, href) {\r\n\t        el.href = href == null ? baseUrl : baseUrl + '/../' + href;\r\n\t    };\r\n\t    GenericBrowserDomAdapter.prototype.supportsDOMEvents = function () { return true; };\r\n\t    GenericBrowserDomAdapter.prototype.supportsNativeShadowDOM = function () {\r\n\t        return lang_1.isFunction(this.defaultDoc().body.createShadowRoot);\r\n\t    };\r\n\t    GenericBrowserDomAdapter.prototype.getAnimationPrefix = function () {\r\n\t        return lang_1.isPresent(this._animationPrefix) ? this._animationPrefix : \"\";\r\n\t    };\r\n\t    GenericBrowserDomAdapter.prototype.getTransitionEnd = function () { return lang_1.isPresent(this._transitionEnd) ? this._transitionEnd : \"\"; };\r\n\t    GenericBrowserDomAdapter.prototype.supportsAnimation = function () {\r\n\t        return lang_1.isPresent(this._animationPrefix) && lang_1.isPresent(this._transitionEnd);\r\n\t    };\r\n\t    return GenericBrowserDomAdapter;\r\n\t})(dom_adapter_1.DomAdapter);\r\n\texports.GenericBrowserDomAdapter = GenericBrowserDomAdapter;\r\n\n\n/***/ },\n/* 627 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var collection_1 = __webpack_require__(5);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar PublicTestability = (function () {\r\n\t    function PublicTestability(testability) {\r\n\t        this._testability = testability;\r\n\t    }\r\n\t    PublicTestability.prototype.isStable = function () { return this._testability.isStable(); };\r\n\t    PublicTestability.prototype.whenStable = function (callback) { this._testability.whenStable(callback); };\r\n\t    PublicTestability.prototype.findBindings = function (using, provider, exactMatch) {\r\n\t        return this.findProviders(using, provider, exactMatch);\r\n\t    };\r\n\t    PublicTestability.prototype.findProviders = function (using, provider, exactMatch) {\r\n\t        return this._testability.findBindings(using, provider, exactMatch);\r\n\t    };\r\n\t    return PublicTestability;\r\n\t})();\r\n\tvar BrowserGetTestability = (function () {\r\n\t    function BrowserGetTestability() {\r\n\t    }\r\n\t    BrowserGetTestability.init = function () { core_1.setTestabilityGetter(new BrowserGetTestability()); };\r\n\t    BrowserGetTestability.prototype.addToWindow = function (registry) {\r\n\t        lang_1.global.getAngularTestability = function (elem, findInAncestors) {\r\n\t            if (findInAncestors === void 0) { findInAncestors = true; }\r\n\t            var testability = registry.findTestabilityInTree(elem, findInAncestors);\r\n\t            if (testability == null) {\r\n\t                throw new Error('Could not find testability for element.');\r\n\t            }\r\n\t            return new PublicTestability(testability);\r\n\t        };\r\n\t        lang_1.global.getAllAngularTestabilities = function () {\r\n\t            var testabilities = registry.getAllTestabilities();\r\n\t            return testabilities.map(function (testability) { return new PublicTestability(testability); });\r\n\t        };\r\n\t        lang_1.global.getAllAngularRootElements = function () { return registry.getAllRootElements(); };\r\n\t        var whenAllStable = function (callback) {\r\n\t            var testabilities = lang_1.global.getAllAngularTestabilities();\r\n\t            var count = testabilities.length;\r\n\t            var didWork = false;\r\n\t            var decrement = function (didWork_) {\r\n\t                didWork = didWork || didWork_;\r\n\t                count--;\r\n\t                if (count == 0) {\r\n\t                    callback(didWork);\r\n\t                }\r\n\t            };\r\n\t            testabilities.forEach(function (testability) { testability.whenStable(decrement); });\r\n\t        };\r\n\t        if (!lang_1.global.frameworkStabilizers) {\r\n\t            lang_1.global.frameworkStabilizers = collection_1.ListWrapper.createGrowableSize(0);\r\n\t        }\r\n\t        lang_1.global.frameworkStabilizers.push(whenAllStable);\r\n\t    };\r\n\t    BrowserGetTestability.prototype.findTestabilityInTree = function (registry, elem, findInAncestors) {\r\n\t        if (elem == null) {\r\n\t            return null;\r\n\t        }\r\n\t        var t = registry.getTestability(elem);\r\n\t        if (lang_1.isPresent(t)) {\r\n\t            return t;\r\n\t        }\r\n\t        else if (!findInAncestors) {\r\n\t            return null;\r\n\t        }\r\n\t        if (dom_adapter_1.DOM.isShadowRoot(elem)) {\r\n\t            return this.findTestabilityInTree(registry, dom_adapter_1.DOM.getHost(elem), true);\r\n\t        }\r\n\t        return this.findTestabilityInTree(registry, dom_adapter_1.DOM.parentElement(elem), true);\r\n\t    };\r\n\t    return BrowserGetTestability;\r\n\t})();\r\n\texports.BrowserGetTestability = BrowserGetTestability;\r\n\n\n/***/ },\n/* 628 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var dom_adapter_1 = __webpack_require__(20);\r\n\t/**\r\n\t * A service that can be used to get and set the title of a current HTML document.\r\n\t *\r\n\t * Since an Angular 2 application can't be bootstrapped on the entire HTML document (`<html>` tag)\r\n\t * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\r\n\t * (representing the `<title>` tag). Instead, this service can be used to set and get the current\r\n\t * title value.\r\n\t */\r\n\tvar Title = (function () {\r\n\t    function Title() {\r\n\t    }\r\n\t    /**\r\n\t     * Get the title of the current HTML document.\r\n\t     * @returns {string}\r\n\t     */\r\n\t    Title.prototype.getTitle = function () { return dom_adapter_1.DOM.getTitle(); };\r\n\t    /**\r\n\t     * Set the title of the current HTML document.\r\n\t     * @param newTitle\r\n\t     */\r\n\t    Title.prototype.setTitle = function (newTitle) { dom_adapter_1.DOM.setTitle(newTitle); };\r\n\t    return Title;\r\n\t})();\r\n\texports.Title = Title;\r\n\n\n/***/ },\n/* 629 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var application_ref_1 = __webpack_require__(288);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar browser_1 = __webpack_require__(624);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\t/**\r\n\t * Entry point for all Angular debug tools. This object corresponds to the `ng`\r\n\t * global variable accessible in the dev console.\r\n\t */\r\n\tvar AngularTools = (function () {\r\n\t    function AngularTools(ref) {\r\n\t        this.profiler = new AngularProfiler(ref);\r\n\t    }\r\n\t    return AngularTools;\r\n\t})();\r\n\texports.AngularTools = AngularTools;\r\n\t/**\r\n\t * Entry point for all Angular profiling-related debug tools. This object\r\n\t * corresponds to the `ng.profiler` in the dev console.\r\n\t */\r\n\tvar AngularProfiler = (function () {\r\n\t    function AngularProfiler(ref) {\r\n\t        this.appRef = ref.injector.get(application_ref_1.ApplicationRef);\r\n\t    }\r\n\t    /**\r\n\t     * Exercises change detection in a loop and then prints the average amount of\r\n\t     * time in milliseconds how long a single round of change detection takes for\r\n\t     * the current state of the UI. It runs a minimum of 5 rounds for a minimum\r\n\t     * of 500 milliseconds.\r\n\t     *\r\n\t     * Optionally, a user may pass a `config` parameter containing a map of\r\n\t     * options. Supported options are:\r\n\t     *\r\n\t     * `record` (boolean) - causes the profiler to record a CPU profile while\r\n\t     * it exercises the change detector. Example:\r\n\t     *\r\n\t     * ```\r\n\t     * ng.profiler.timeChangeDetection({record: true})\r\n\t     * ```\r\n\t     */\r\n\t    AngularProfiler.prototype.timeChangeDetection = function (config) {\r\n\t        var record = lang_1.isPresent(config) && config['record'];\r\n\t        var profileName = 'Change Detection';\r\n\t        // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\r\n\t        var isProfilerAvailable = lang_1.isPresent(browser_1.window.console.profile);\r\n\t        if (record && isProfilerAvailable) {\r\n\t            browser_1.window.console.profile(profileName);\r\n\t        }\r\n\t        var start = dom_adapter_1.DOM.performanceNow();\r\n\t        var numTicks = 0;\r\n\t        while (numTicks < 5 || (dom_adapter_1.DOM.performanceNow() - start) < 500) {\r\n\t            this.appRef.tick();\r\n\t            numTicks++;\r\n\t        }\r\n\t        var end = dom_adapter_1.DOM.performanceNow();\r\n\t        if (record && isProfilerAvailable) {\r\n\t            // need to cast to <any> because type checker thinks there's no argument\r\n\t            // while in fact there is:\r\n\t            //\r\n\t            // https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd\r\n\t            browser_1.window.console.profileEnd(profileName);\r\n\t        }\r\n\t        var msPerTick = (end - start) / numTicks;\r\n\t        browser_1.window.console.log(\"ran \" + numTicks + \" change detection cycles\");\r\n\t        browser_1.window.console.log(lang_1.NumberWrapper.toFixed(msPerTick, 2) + \" ms per check\");\r\n\t    };\r\n\t    return AngularProfiler;\r\n\t})();\r\n\texports.AngularProfiler = AngularProfiler;\r\n\n\n/***/ },\n/* 630 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar common_tools_1 = __webpack_require__(629);\r\n\tvar context = lang_1.global;\r\n\t/**\r\n\t * Enabled Angular 2 debug tools that are accessible via your browser's\r\n\t * developer console.\r\n\t *\r\n\t * Usage:\r\n\t *\r\n\t * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\r\n\t * 1. Type `ng.` (usually the console will show auto-complete suggestion)\r\n\t * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\r\n\t *    then hit Enter.\r\n\t */\r\n\tfunction enableDebugTools(ref) {\r\n\t    context.ng = new common_tools_1.AngularTools(ref);\r\n\t}\r\n\texports.enableDebugTools = enableDebugTools;\r\n\t/**\r\n\t * Disables Angular 2 tools.\r\n\t */\r\n\tfunction disableDebugTools() {\r\n\t    delete context.ng;\r\n\t}\r\n\texports.disableDebugTools = disableDebugTools;\r\n\n\n/***/ },\n/* 631 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\t/**\r\n\t * Predicates for use with {@link DebugElement}'s query functions.\r\n\t */\r\n\tvar By = (function () {\r\n\t    function By() {\r\n\t    }\r\n\t    /**\r\n\t     * Match all elements.\r\n\t     *\r\n\t     * ## Example\r\n\t     *\r\n\t     * {@example platform/dom/debug/ts/by/by.ts region='by_all'}\r\n\t     */\r\n\t    By.all = function () { return function (debugElement) { return true; }; };\r\n\t    /**\r\n\t     * Match elements by the given CSS selector.\r\n\t     *\r\n\t     * ## Example\r\n\t     *\r\n\t     * {@example platform/dom/debug/ts/by/by.ts region='by_css'}\r\n\t     */\r\n\t    By.css = function (selector) {\r\n\t        return function (debugElement) {\r\n\t            return lang_1.isPresent(debugElement.nativeElement) ?\r\n\t                dom_adapter_1.DOM.elementMatches(debugElement.nativeElement, selector) :\r\n\t                false;\r\n\t        };\r\n\t    };\r\n\t    /**\r\n\t     * Match elements that have the given directive present.\r\n\t     *\r\n\t     * ## Example\r\n\t     *\r\n\t     * {@example platform/dom/debug/ts/by/by.ts region='by_directive'}\r\n\t     */\r\n\t    By.directive = function (type) {\r\n\t        return function (debugElement) { return debugElement.providerTokens.indexOf(type) !== -1; };\r\n\t    };\r\n\t    return By;\r\n\t})();\r\n\texports.By = By;\r\n\n\n/***/ },\n/* 632 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar debug_node_1 = __webpack_require__(194);\r\n\tvar dom_renderer_1 = __webpack_require__(211);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar debug_renderer_1 = __webpack_require__(612);\r\n\tvar CORE_TOKENS = lang_1.CONST_EXPR({ 'ApplicationRef': core_1.ApplicationRef, 'NgZone': core_1.NgZone });\r\n\tvar INSPECT_GLOBAL_NAME = 'ng.probe';\r\n\tvar CORE_TOKENS_GLOBAL_NAME = 'ng.coreTokens';\r\n\t/**\r\n\t * Returns a {@link DebugElement} for the given native DOM element, or\r\n\t * null if the given native element does not have an Angular view associated\r\n\t * with it.\r\n\t */\r\n\tfunction inspectNativeElement(element) {\r\n\t    return debug_node_1.getDebugNode(element);\r\n\t}\r\n\texports.inspectNativeElement = inspectNativeElement;\r\n\tfunction _createConditionalRootRenderer(rootRenderer) {\r\n\t    if (lang_1.assertionsEnabled()) {\r\n\t        return _createRootRenderer(rootRenderer);\r\n\t    }\r\n\t    return rootRenderer;\r\n\t}\r\n\tfunction _createRootRenderer(rootRenderer) {\r\n\t    dom_adapter_1.DOM.setGlobalVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\r\n\t    dom_adapter_1.DOM.setGlobalVar(CORE_TOKENS_GLOBAL_NAME, CORE_TOKENS);\r\n\t    return new debug_renderer_1.DebugDomRootRenderer(rootRenderer);\r\n\t}\r\n\t/**\r\n\t * Providers which support debugging Angular applications (e.g. via `ng.probe`).\r\n\t */\r\n\texports.ELEMENT_PROBE_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    new di_1.Provider(core_1.RootRenderer, { useFactory: _createConditionalRootRenderer, deps: [dom_renderer_1.DomRootRenderer] })\r\n\t]);\r\n\texports.ELEMENT_PROBE_PROVIDERS_PROD_MODE = lang_1.CONST_EXPR([new di_1.Provider(core_1.RootRenderer, { useFactory: _createRootRenderer, deps: [dom_renderer_1.DomRootRenderer] })]);\r\n\n\n/***/ },\n/* 633 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar event_manager_1 = __webpack_require__(82);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar _eventNames = {\r\n\t    // pan\r\n\t    'pan': true,\r\n\t    'panstart': true,\r\n\t    'panmove': true,\r\n\t    'panend': true,\r\n\t    'pancancel': true,\r\n\t    'panleft': true,\r\n\t    'panright': true,\r\n\t    'panup': true,\r\n\t    'pandown': true,\r\n\t    // pinch\r\n\t    'pinch': true,\r\n\t    'pinchstart': true,\r\n\t    'pinchmove': true,\r\n\t    'pinchend': true,\r\n\t    'pinchcancel': true,\r\n\t    'pinchin': true,\r\n\t    'pinchout': true,\r\n\t    // press\r\n\t    'press': true,\r\n\t    'pressup': true,\r\n\t    // rotate\r\n\t    'rotate': true,\r\n\t    'rotatestart': true,\r\n\t    'rotatemove': true,\r\n\t    'rotateend': true,\r\n\t    'rotatecancel': true,\r\n\t    // swipe\r\n\t    'swipe': true,\r\n\t    'swipeleft': true,\r\n\t    'swiperight': true,\r\n\t    'swipeup': true,\r\n\t    'swipedown': true,\r\n\t    // tap\r\n\t    'tap': true,\r\n\t};\r\n\tvar HammerGesturesPluginCommon = (function (_super) {\r\n\t    __extends(HammerGesturesPluginCommon, _super);\r\n\t    function HammerGesturesPluginCommon() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    HammerGesturesPluginCommon.prototype.supports = function (eventName) {\r\n\t        eventName = eventName.toLowerCase();\r\n\t        return collection_1.StringMapWrapper.contains(_eventNames, eventName);\r\n\t    };\r\n\t    return HammerGesturesPluginCommon;\r\n\t})(event_manager_1.EventManagerPlugin);\r\n\texports.HammerGesturesPluginCommon = HammerGesturesPluginCommon;\r\n\n\n/***/ },\n/* 634 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar hammer_common_1 = __webpack_require__(633);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar HammerGesturesPlugin = (function (_super) {\r\n\t    __extends(HammerGesturesPlugin, _super);\r\n\t    function HammerGesturesPlugin() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    HammerGesturesPlugin.prototype.supports = function (eventName) {\r\n\t        if (!_super.prototype.supports.call(this, eventName))\r\n\t            return false;\r\n\t        if (!lang_1.isPresent(window['Hammer'])) {\r\n\t            throw new exceptions_1.BaseException(\"Hammer.js is not loaded, can not bind \" + eventName + \" event\");\r\n\t        }\r\n\t        return true;\r\n\t    };\r\n\t    HammerGesturesPlugin.prototype.addEventListener = function (element, eventName, handler) {\r\n\t        var zone = this.manager.getZone();\r\n\t        eventName = eventName.toLowerCase();\r\n\t        return zone.runOutsideAngular(function () {\r\n\t            // Creating the manager bind events, must be done outside of angular\r\n\t            var mc = new Hammer(element);\r\n\t            mc.get('pinch').set({ enable: true });\r\n\t            mc.get('rotate').set({ enable: true });\r\n\t            var callback = function (eventObj) { zone.run(function () { handler(eventObj); }); };\r\n\t            mc.on(eventName, callback);\r\n\t            return function () { mc.off(eventName, callback); };\r\n\t        });\r\n\t    };\r\n\t    HammerGesturesPlugin = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], HammerGesturesPlugin);\r\n\t    return HammerGesturesPlugin;\r\n\t})(hammer_common_1.HammerGesturesPluginCommon);\r\n\texports.HammerGesturesPlugin = HammerGesturesPlugin;\r\n\n\n/***/ },\n/* 635 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar event_manager_1 = __webpack_require__(82);\r\n\tvar di_1 = __webpack_require__(8);\r\n\tvar modifierKeys = ['alt', 'control', 'meta', 'shift'];\r\n\tvar modifierKeyGetters = {\r\n\t    'alt': function (event) { return event.altKey; },\r\n\t    'control': function (event) { return event.ctrlKey; },\r\n\t    'meta': function (event) { return event.metaKey; },\r\n\t    'shift': function (event) { return event.shiftKey; }\r\n\t};\r\n\tvar KeyEventsPlugin = (function (_super) {\r\n\t    __extends(KeyEventsPlugin, _super);\r\n\t    function KeyEventsPlugin() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    KeyEventsPlugin.prototype.supports = function (eventName) {\r\n\t        return lang_1.isPresent(KeyEventsPlugin.parseEventName(eventName));\r\n\t    };\r\n\t    KeyEventsPlugin.prototype.addEventListener = function (element, eventName, handler) {\r\n\t        var parsedEvent = KeyEventsPlugin.parseEventName(eventName);\r\n\t        var outsideHandler = KeyEventsPlugin.eventCallback(element, collection_1.StringMapWrapper.get(parsedEvent, 'fullKey'), handler, this.manager.getZone());\r\n\t        return this.manager.getZone().runOutsideAngular(function () {\r\n\t            return dom_adapter_1.DOM.onAndCancel(element, collection_1.StringMapWrapper.get(parsedEvent, 'domEventName'), outsideHandler);\r\n\t        });\r\n\t    };\r\n\t    KeyEventsPlugin.parseEventName = function (eventName) {\r\n\t        var parts = eventName.toLowerCase().split('.');\r\n\t        var domEventName = parts.shift();\r\n\t        if ((parts.length === 0) ||\r\n\t            !(lang_1.StringWrapper.equals(domEventName, 'keydown') ||\r\n\t                lang_1.StringWrapper.equals(domEventName, 'keyup'))) {\r\n\t            return null;\r\n\t        }\r\n\t        var key = KeyEventsPlugin._normalizeKey(parts.pop());\r\n\t        var fullKey = '';\r\n\t        modifierKeys.forEach(function (modifierName) {\r\n\t            if (collection_1.ListWrapper.contains(parts, modifierName)) {\r\n\t                collection_1.ListWrapper.remove(parts, modifierName);\r\n\t                fullKey += modifierName + '.';\r\n\t            }\r\n\t        });\r\n\t        fullKey += key;\r\n\t        if (parts.length != 0 || key.length === 0) {\r\n\t            // returning null instead of throwing to let another plugin process the event\r\n\t            return null;\r\n\t        }\r\n\t        var result = collection_1.StringMapWrapper.create();\r\n\t        collection_1.StringMapWrapper.set(result, 'domEventName', domEventName);\r\n\t        collection_1.StringMapWrapper.set(result, 'fullKey', fullKey);\r\n\t        return result;\r\n\t    };\r\n\t    KeyEventsPlugin.getEventFullKey = function (event) {\r\n\t        var fullKey = '';\r\n\t        var key = dom_adapter_1.DOM.getEventKey(event);\r\n\t        key = key.toLowerCase();\r\n\t        if (lang_1.StringWrapper.equals(key, ' ')) {\r\n\t            key = 'space'; // for readability\r\n\t        }\r\n\t        else if (lang_1.StringWrapper.equals(key, '.')) {\r\n\t            key = 'dot'; // because '.' is used as a separator in event names\r\n\t        }\r\n\t        modifierKeys.forEach(function (modifierName) {\r\n\t            if (modifierName != key) {\r\n\t                var modifierGetter = collection_1.StringMapWrapper.get(modifierKeyGetters, modifierName);\r\n\t                if (modifierGetter(event)) {\r\n\t                    fullKey += modifierName + '.';\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t        fullKey += key;\r\n\t        return fullKey;\r\n\t    };\r\n\t    KeyEventsPlugin.eventCallback = function (element, fullKey, handler, zone) {\r\n\t        return function (event) {\r\n\t            if (lang_1.StringWrapper.equals(KeyEventsPlugin.getEventFullKey(event), fullKey)) {\r\n\t                zone.run(function () { return handler(event); });\r\n\t            }\r\n\t        };\r\n\t    };\r\n\t    /** @internal */\r\n\t    KeyEventsPlugin._normalizeKey = function (keyName) {\r\n\t        // TODO: switch to a StringMap if the mapping grows too much\r\n\t        switch (keyName) {\r\n\t            case 'esc':\r\n\t                return 'escape';\r\n\t            default:\r\n\t                return keyName;\r\n\t        }\r\n\t    };\r\n\t    KeyEventsPlugin = __decorate([\r\n\t        di_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], KeyEventsPlugin);\r\n\t    return KeyEventsPlugin;\r\n\t})(event_manager_1.EventManagerPlugin);\r\n\texports.KeyEventsPlugin = KeyEventsPlugin;\r\n\n\n/***/ },\n/* 636 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar platform_location_1 = __webpack_require__(105);\r\n\tvar dom_adapter_1 = __webpack_require__(20);\r\n\t/**\r\n\t * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\r\n\t * This class should not be used directly by an application developer. Instead, use\r\n\t * {@link Location}.\r\n\t */\r\n\tvar BrowserPlatformLocation = (function (_super) {\r\n\t    __extends(BrowserPlatformLocation, _super);\r\n\t    function BrowserPlatformLocation() {\r\n\t        _super.call(this);\r\n\t        this._init();\r\n\t    }\r\n\t    // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it\r\n\t    /** @internal */\r\n\t    BrowserPlatformLocation.prototype._init = function () {\r\n\t        this._location = dom_adapter_1.DOM.getLocation();\r\n\t        this._history = dom_adapter_1.DOM.getHistory();\r\n\t    };\r\n\t    Object.defineProperty(BrowserPlatformLocation.prototype, \"location\", {\r\n\t        /** @internal */\r\n\t        get: function () { return this._location; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BrowserPlatformLocation.prototype.getBaseHrefFromDOM = function () { return dom_adapter_1.DOM.getBaseHref(); };\r\n\t    BrowserPlatformLocation.prototype.onPopState = function (fn) {\r\n\t        dom_adapter_1.DOM.getGlobalEventTarget('window').addEventListener('popstate', fn, false);\r\n\t    };\r\n\t    BrowserPlatformLocation.prototype.onHashChange = function (fn) {\r\n\t        dom_adapter_1.DOM.getGlobalEventTarget('window').addEventListener('hashchange', fn, false);\r\n\t    };\r\n\t    Object.defineProperty(BrowserPlatformLocation.prototype, \"pathname\", {\r\n\t        get: function () { return this._location.pathname; },\r\n\t        set: function (newPath) { this._location.pathname = newPath; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BrowserPlatformLocation.prototype, \"search\", {\r\n\t        get: function () { return this._location.search; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(BrowserPlatformLocation.prototype, \"hash\", {\r\n\t        get: function () { return this._location.hash; },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    BrowserPlatformLocation.prototype.pushState = function (state, title, url) {\r\n\t        this._history.pushState(state, title, url);\r\n\t    };\r\n\t    BrowserPlatformLocation.prototype.replaceState = function (state, title, url) {\r\n\t        this._history.replaceState(state, title, url);\r\n\t    };\r\n\t    BrowserPlatformLocation.prototype.forward = function () { this._history.forward(); };\r\n\t    BrowserPlatformLocation.prototype.back = function () { this._history.back(); };\r\n\t    BrowserPlatformLocation = __decorate([\r\n\t        core_1.Injectable(), \r\n\t        __metadata('design:paramtypes', [])\r\n\t    ], BrowserPlatformLocation);\r\n\t    return BrowserPlatformLocation;\r\n\t})(platform_location_1.PlatformLocation);\r\n\texports.BrowserPlatformLocation = BrowserPlatformLocation;\r\n\n\n/***/ },\n/* 637 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var __extends = (this && this.__extends) || function (d, b) {\r\n\t    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n\t    function __() { this.constructor = d; }\r\n\t    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n\t};\r\n\tvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\r\n\t    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n\t    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n\t    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n\t};\r\n\tvar __metadata = (this && this.__metadata) || function (k, v) {\r\n\t    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\r\n\t};\r\n\tvar __param = (this && this.__param) || function (paramIndex, decorator) {\r\n\t    return function (target, key) { decorator(target, key, paramIndex); }\r\n\t};\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar location_strategy_1 = __webpack_require__(104);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar platform_location_1 = __webpack_require__(105);\r\n\t/**\r\n\t * `HashLocationStrategy` is a {@link LocationStrategy} used to configure the\r\n\t * {@link Location} service to represent its state in the\r\n\t * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\r\n\t * of the browser's URL.\r\n\t *\r\n\t * For instance, if you call `location.go('/foo')`, the browser's URL will become\r\n\t * `example.com#/foo`.\r\n\t *\r\n\t * ### Example\r\n\t *\r\n\t * ```\r\n\t * import {Component, provide} from 'angular2/core';\r\n\t * import {\r\n\t *   ROUTER_DIRECTIVES,\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   RouteConfig,\r\n\t *   Location,\r\n\t *   LocationStrategy,\r\n\t *   HashLocationStrategy\r\n\t * } from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   constructor(location: Location) {\r\n\t *     location.go('/foo');\r\n\t *   }\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   provide(LocationStrategy, {useClass: HashLocationStrategy})\r\n\t * ]);\r\n\t * ```\r\n\t */\r\n\tvar HashLocationStrategy = (function (_super) {\r\n\t    __extends(HashLocationStrategy, _super);\r\n\t    function HashLocationStrategy(_platformLocation, _baseHref) {\r\n\t        _super.call(this);\r\n\t        this._platformLocation = _platformLocation;\r\n\t        this._baseHref = '';\r\n\t        if (lang_1.isPresent(_baseHref)) {\r\n\t            this._baseHref = _baseHref;\r\n\t        }\r\n\t    }\r\n\t    HashLocationStrategy.prototype.onPopState = function (fn) {\r\n\t        this._platformLocation.onPopState(fn);\r\n\t        this._platformLocation.onHashChange(fn);\r\n\t    };\r\n\t    HashLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };\r\n\t    HashLocationStrategy.prototype.path = function () {\r\n\t        // the hash value is always prefixed with a `#`\r\n\t        // and if it is empty then it will stay empty\r\n\t        var path = this._platformLocation.hash;\r\n\t        if (!lang_1.isPresent(path))\r\n\t            path = '#';\r\n\t        // Dart will complain if a call to substring is\r\n\t        // executed with a position value that extends the\r\n\t        // length of string.\r\n\t        return (path.length > 0 ? path.substring(1) : path);\r\n\t    };\r\n\t    HashLocationStrategy.prototype.prepareExternalUrl = function (internal) {\r\n\t        var url = location_strategy_1.joinWithSlash(this._baseHref, internal);\r\n\t        return url.length > 0 ? ('#' + url) : url;\r\n\t    };\r\n\t    HashLocationStrategy.prototype.pushState = function (state, title, path, queryParams) {\r\n\t        var url = this.prepareExternalUrl(path + location_strategy_1.normalizeQueryParams(queryParams));\r\n\t        if (url.length == 0) {\r\n\t            url = this._platformLocation.pathname;\r\n\t        }\r\n\t        this._platformLocation.pushState(state, title, url);\r\n\t    };\r\n\t    HashLocationStrategy.prototype.replaceState = function (state, title, path, queryParams) {\r\n\t        var url = this.prepareExternalUrl(path + location_strategy_1.normalizeQueryParams(queryParams));\r\n\t        if (url.length == 0) {\r\n\t            url = this._platformLocation.pathname;\r\n\t        }\r\n\t        this._platformLocation.replaceState(state, title, url);\r\n\t    };\r\n\t    HashLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };\r\n\t    HashLocationStrategy.prototype.back = function () { this._platformLocation.back(); };\r\n\t    HashLocationStrategy = __decorate([\r\n\t        core_1.Injectable(),\r\n\t        __param(1, core_1.Optional()),\r\n\t        __param(1, core_1.Inject(location_strategy_1.APP_BASE_HREF)), \r\n\t        __metadata('design:paramtypes', [platform_location_1.PlatformLocation, String])\r\n\t    ], HashLocationStrategy);\r\n\t    return HashLocationStrategy;\r\n\t})(location_strategy_1.LocationStrategy);\r\n\texports.HashLocationStrategy = HashLocationStrategy;\r\n\n\n/***/ },\n/* 638 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var route_config_decorator_1 = __webpack_require__(332);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\t/**\r\n\t * Given a JS Object that represents a route config, returns a corresponding Route, AsyncRoute,\r\n\t * AuxRoute or Redirect object.\r\n\t *\r\n\t * Also wraps an AsyncRoute's loader function to add the loaded component's route config to the\r\n\t * `RouteRegistry`.\r\n\t */\r\n\tfunction normalizeRouteConfig(config, registry) {\r\n\t    if (config instanceof route_config_decorator_1.AsyncRoute) {\r\n\t        var wrappedLoader = wrapLoaderToReconfigureRegistry(config.loader, registry);\r\n\t        return new route_config_decorator_1.AsyncRoute({\r\n\t            path: config.path,\r\n\t            loader: wrappedLoader,\r\n\t            name: config.name,\r\n\t            data: config.data,\r\n\t            useAsDefault: config.useAsDefault\r\n\t        });\r\n\t    }\r\n\t    if (config instanceof route_config_decorator_1.Route || config instanceof route_config_decorator_1.Redirect || config instanceof route_config_decorator_1.AuxRoute) {\r\n\t        return config;\r\n\t    }\r\n\t    if ((+!!config.component) + (+!!config.redirectTo) + (+!!config.loader) != 1) {\r\n\t        throw new exceptions_1.BaseException(\"Route config should contain exactly one \\\"component\\\", \\\"loader\\\", or \\\"redirectTo\\\" property.\");\r\n\t    }\r\n\t    if (config.as && config.name) {\r\n\t        throw new exceptions_1.BaseException(\"Route config should contain exactly one \\\"as\\\" or \\\"name\\\" property.\");\r\n\t    }\r\n\t    if (config.as) {\r\n\t        config.name = config.as;\r\n\t    }\r\n\t    if (config.loader) {\r\n\t        var wrappedLoader = wrapLoaderToReconfigureRegistry(config.loader, registry);\r\n\t        return new route_config_decorator_1.AsyncRoute({\r\n\t            path: config.path,\r\n\t            loader: wrappedLoader,\r\n\t            name: config.name,\r\n\t            data: config.data,\r\n\t            useAsDefault: config.useAsDefault\r\n\t        });\r\n\t    }\r\n\t    if (config.aux) {\r\n\t        return new route_config_decorator_1.AuxRoute({ path: config.aux, component: config.component, name: config.name });\r\n\t    }\r\n\t    if (config.component) {\r\n\t        if (typeof config.component == 'object') {\r\n\t            var componentDefinitionObject = config.component;\r\n\t            if (componentDefinitionObject.type == 'constructor') {\r\n\t                return new route_config_decorator_1.Route({\r\n\t                    path: config.path,\r\n\t                    component: componentDefinitionObject.constructor,\r\n\t                    name: config.name,\r\n\t                    data: config.data,\r\n\t                    useAsDefault: config.useAsDefault\r\n\t                });\r\n\t            }\r\n\t            else if (componentDefinitionObject.type == 'loader') {\r\n\t                return new route_config_decorator_1.AsyncRoute({\r\n\t                    path: config.path,\r\n\t                    loader: componentDefinitionObject.loader,\r\n\t                    name: config.name,\r\n\t                    data: config.data,\r\n\t                    useAsDefault: config.useAsDefault\r\n\t                });\r\n\t            }\r\n\t            else {\r\n\t                throw new exceptions_1.BaseException(\"Invalid component type \\\"\" + componentDefinitionObject.type + \"\\\". Valid types are \\\"constructor\\\" and \\\"loader\\\".\");\r\n\t            }\r\n\t        }\r\n\t        return new route_config_decorator_1.Route(config);\r\n\t    }\r\n\t    if (config.redirectTo) {\r\n\t        return new route_config_decorator_1.Redirect({ path: config.path, redirectTo: config.redirectTo });\r\n\t    }\r\n\t    return config;\r\n\t}\r\n\texports.normalizeRouteConfig = normalizeRouteConfig;\r\n\tfunction wrapLoaderToReconfigureRegistry(loader, registry) {\r\n\t    return function () {\r\n\t        return loader().then(function (componentType) {\r\n\t            registry.configFromComponent(componentType);\r\n\t            return componentType;\r\n\t        });\r\n\t    };\r\n\t}\r\n\tfunction assertComponentExists(component, path) {\r\n\t    if (!lang_1.isType(component)) {\r\n\t        throw new exceptions_1.BaseException(\"Component for route \\\"\" + path + \"\\\" is not defined, or is not a class.\");\r\n\t    }\r\n\t}\r\n\texports.assertComponentExists = assertComponentExists;\r\n\n\n/***/ },\n/* 639 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n/***/ },\n/* 640 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var router_providers_common_1 = __webpack_require__(333);\r\n\tvar core_1 = __webpack_require__(4);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar browser_platform_location_1 = __webpack_require__(636);\r\n\tvar platform_location_1 = __webpack_require__(105);\r\n\t/**\r\n\t * A list of {@link Provider}s. To use the router, you must add this to your application.\r\n\t *\r\n\t * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\r\n\t *\r\n\t * ```\r\n\t * import {Component} from 'angular2/core';\r\n\t * import {\r\n\t *   ROUTER_DIRECTIVES,\r\n\t *   ROUTER_PROVIDERS,\r\n\t *   RouteConfig\r\n\t * } from 'angular2/router';\r\n\t *\r\n\t * @Component({directives: [ROUTER_DIRECTIVES]})\r\n\t * @RouteConfig([\r\n\t *  {...},\r\n\t * ])\r\n\t * class AppCmp {\r\n\t *   // ...\r\n\t * }\r\n\t *\r\n\t * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\r\n\t * ```\r\n\t */\r\n\texports.ROUTER_PROVIDERS = lang_1.CONST_EXPR([\r\n\t    router_providers_common_1.ROUTER_PROVIDERS_COMMON,\r\n\t    lang_1.CONST_EXPR(new core_1.Provider(platform_location_1.PlatformLocation, { useClass: browser_platform_location_1.BrowserPlatformLocation })),\r\n\t]);\r\n\t/**\r\n\t * Use {@link ROUTER_PROVIDERS} instead.\r\n\t *\r\n\t * @deprecated\r\n\t */\r\n\texports.ROUTER_BINDINGS = exports.ROUTER_PROVIDERS;\r\n\n\n/***/ },\n/* 641 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar instruction_1 = __webpack_require__(65);\r\n\tvar AsyncRouteHandler = (function () {\r\n\t    function AsyncRouteHandler(_loader, data) {\r\n\t        if (data === void 0) { data = null; }\r\n\t        this._loader = _loader;\r\n\t        /** @internal */\r\n\t        this._resolvedComponent = null;\r\n\t        this.data = lang_1.isPresent(data) ? new instruction_1.RouteData(data) : instruction_1.BLANK_ROUTE_DATA;\r\n\t    }\r\n\t    AsyncRouteHandler.prototype.resolveComponentType = function () {\r\n\t        var _this = this;\r\n\t        if (lang_1.isPresent(this._resolvedComponent)) {\r\n\t            return this._resolvedComponent;\r\n\t        }\r\n\t        return this._resolvedComponent = this._loader().then(function (componentType) {\r\n\t            _this.componentType = componentType;\r\n\t            return componentType;\r\n\t        });\r\n\t    };\r\n\t    return AsyncRouteHandler;\r\n\t})();\r\n\texports.AsyncRouteHandler = AsyncRouteHandler;\r\n\n\n/***/ },\n/* 642 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var async_1 = __webpack_require__(13);\r\n\tvar lang_1 = __webpack_require__(1);\r\n\tvar instruction_1 = __webpack_require__(65);\r\n\tvar SyncRouteHandler = (function () {\r\n\t    function SyncRouteHandler(componentType, data) {\r\n\t        this.componentType = componentType;\r\n\t        /** @internal */\r\n\t        this._resolvedComponent = null;\r\n\t        this._resolvedComponent = async_1.PromiseWrapper.resolve(componentType);\r\n\t        this.data = lang_1.isPresent(data) ? new instruction_1.RouteData(data) : instruction_1.BLANK_ROUTE_DATA;\r\n\t    }\r\n\t    SyncRouteHandler.prototype.resolveComponentType = function () { return this._resolvedComponent; };\r\n\t    return SyncRouteHandler;\r\n\t})();\r\n\texports.SyncRouteHandler = SyncRouteHandler;\r\n\n\n/***/ },\n/* 643 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar utils_1 = __webpack_require__(646);\r\n\tvar url_parser_1 = __webpack_require__(214);\r\n\tvar route_path_1 = __webpack_require__(334);\r\n\t/**\r\n\t * Identified by a `...` URL segment. This indicates that the\r\n\t * Route will continue to be matched by child `Router`s.\r\n\t */\r\n\tvar ContinuationPathSegment = (function () {\r\n\t    function ContinuationPathSegment() {\r\n\t        this.name = '';\r\n\t        this.specificity = '';\r\n\t        this.hash = '...';\r\n\t    }\r\n\t    ContinuationPathSegment.prototype.generate = function (params) { return ''; };\r\n\t    ContinuationPathSegment.prototype.match = function (path) { return true; };\r\n\t    return ContinuationPathSegment;\r\n\t})();\r\n\t/**\r\n\t * Identified by a string not starting with a `:` or `*`.\r\n\t * Only matches the URL segments that equal the segment path\r\n\t */\r\n\tvar StaticPathSegment = (function () {\r\n\t    function StaticPathSegment(path) {\r\n\t        this.path = path;\r\n\t        this.name = '';\r\n\t        this.specificity = '2';\r\n\t        this.hash = path;\r\n\t    }\r\n\t    StaticPathSegment.prototype.match = function (path) { return path == this.path; };\r\n\t    StaticPathSegment.prototype.generate = function (params) { return this.path; };\r\n\t    return StaticPathSegment;\r\n\t})();\r\n\t/**\r\n\t * Identified by a string starting with `:`. Indicates a segment\r\n\t * that can contain a value that will be extracted and provided to\r\n\t * a matching `Instruction`.\r\n\t */\r\n\tvar DynamicPathSegment = (function () {\r\n\t    function DynamicPathSegment(name) {\r\n\t        this.name = name;\r\n\t        this.specificity = '1';\r\n\t        this.hash = ':';\r\n\t    }\r\n\t    DynamicPathSegment.prototype.match = function (path) { return path.length > 0; };\r\n\t    DynamicPathSegment.prototype.generate = function (params) {\r\n\t        if (!collection_1.StringMapWrapper.contains(params.map, this.name)) {\r\n\t            throw new exceptions_1.BaseException(\"Route generator for '\" + this.name + \"' was not included in parameters passed.\");\r\n\t        }\r\n\t        return utils_1.normalizeString(params.get(this.name));\r\n\t    };\r\n\t    DynamicPathSegment.paramMatcher = /^:([^\\/]+)$/g;\r\n\t    return DynamicPathSegment;\r\n\t})();\r\n\t/**\r\n\t * Identified by a string starting with `*` Indicates that all the following\r\n\t * segments match this route and that the value of these segments should\r\n\t * be provided to a matching `Instruction`.\r\n\t */\r\n\tvar StarPathSegment = (function () {\r\n\t    function StarPathSegment(name) {\r\n\t        this.name = name;\r\n\t        this.specificity = '0';\r\n\t        this.hash = '*';\r\n\t    }\r\n\t    StarPathSegment.prototype.match = function (path) { return true; };\r\n\t    StarPathSegment.prototype.generate = function (params) { return utils_1.normalizeString(params.get(this.name)); };\r\n\t    StarPathSegment.wildcardMatcher = /^\\*([^\\/]+)$/g;\r\n\t    return StarPathSegment;\r\n\t})();\r\n\t/**\r\n\t * Parses a URL string using a given matcher DSL, and generates URLs from param maps\r\n\t */\r\n\tvar ParamRoutePath = (function () {\r\n\t    /**\r\n\t     * Takes a string representing the matcher DSL\r\n\t     */\r\n\t    function ParamRoutePath(routePath) {\r\n\t        this.routePath = routePath;\r\n\t        this.terminal = true;\r\n\t        this._assertValidPath(routePath);\r\n\t        this._parsePathString(routePath);\r\n\t        this.specificity = this._calculateSpecificity();\r\n\t        this.hash = this._calculateHash();\r\n\t        var lastSegment = this._segments[this._segments.length - 1];\r\n\t        this.terminal = !(lastSegment instanceof ContinuationPathSegment);\r\n\t    }\r\n\t    ParamRoutePath.prototype.matchUrl = function (url) {\r\n\t        var nextUrlSegment = url;\r\n\t        var currentUrlSegment;\r\n\t        var positionalParams = {};\r\n\t        var captured = [];\r\n\t        for (var i = 0; i < this._segments.length; i += 1) {\r\n\t            var pathSegment = this._segments[i];\r\n\t            currentUrlSegment = nextUrlSegment;\r\n\t            if (pathSegment instanceof ContinuationPathSegment) {\r\n\t                break;\r\n\t            }\r\n\t            if (lang_1.isPresent(currentUrlSegment)) {\r\n\t                // the star segment consumes all of the remaining URL, including matrix params\r\n\t                if (pathSegment instanceof StarPathSegment) {\r\n\t                    positionalParams[pathSegment.name] = currentUrlSegment.toString();\r\n\t                    captured.push(currentUrlSegment.toString());\r\n\t                    nextUrlSegment = null;\r\n\t                    break;\r\n\t                }\r\n\t                captured.push(currentUrlSegment.path);\r\n\t                if (pathSegment instanceof DynamicPathSegment) {\r\n\t                    positionalParams[pathSegment.name] = currentUrlSegment.path;\r\n\t                }\r\n\t                else if (!pathSegment.match(currentUrlSegment.path)) {\r\n\t                    return null;\r\n\t                }\r\n\t                nextUrlSegment = currentUrlSegment.child;\r\n\t            }\r\n\t            else if (!pathSegment.match('')) {\r\n\t                return null;\r\n\t            }\r\n\t        }\r\n\t        if (this.terminal && lang_1.isPresent(nextUrlSegment)) {\r\n\t            return null;\r\n\t        }\r\n\t        var urlPath = captured.join('/');\r\n\t        var auxiliary = [];\r\n\t        var urlParams = [];\r\n\t        var allParams = positionalParams;\r\n\t        if (lang_1.isPresent(currentUrlSegment)) {\r\n\t            // If this is the root component, read query params. Otherwise, read matrix params.\r\n\t            var paramsSegment = url instanceof url_parser_1.RootUrl ? url : currentUrlSegment;\r\n\t            if (lang_1.isPresent(paramsSegment.params)) {\r\n\t                allParams = collection_1.StringMapWrapper.merge(paramsSegment.params, positionalParams);\r\n\t                urlParams = url_parser_1.convertUrlParamsToArray(paramsSegment.params);\r\n\t            }\r\n\t            else {\r\n\t                allParams = positionalParams;\r\n\t            }\r\n\t            auxiliary = currentUrlSegment.auxiliary;\r\n\t        }\r\n\t        return new route_path_1.MatchedUrl(urlPath, urlParams, allParams, auxiliary, nextUrlSegment);\r\n\t    };\r\n\t    ParamRoutePath.prototype.generateUrl = function (params) {\r\n\t        var paramTokens = new utils_1.TouchMap(params);\r\n\t        var path = [];\r\n\t        for (var i = 0; i < this._segments.length; i++) {\r\n\t            var segment = this._segments[i];\r\n\t            if (!(segment instanceof ContinuationPathSegment)) {\r\n\t                path.push(segment.generate(paramTokens));\r\n\t            }\r\n\t        }\r\n\t        var urlPath = path.join('/');\r\n\t        var nonPositionalParams = paramTokens.getUnused();\r\n\t        var urlParams = nonPositionalParams;\r\n\t        return new route_path_1.GeneratedUrl(urlPath, urlParams);\r\n\t    };\r\n\t    ParamRoutePath.prototype.toString = function () { return this.routePath; };\r\n\t    ParamRoutePath.prototype._parsePathString = function (routePath) {\r\n\t        // normalize route as not starting with a \"/\". Recognition will\r\n\t        // also normalize.\r\n\t        if (routePath.startsWith(\"/\")) {\r\n\t            routePath = routePath.substring(1);\r\n\t        }\r\n\t        var segmentStrings = routePath.split('/');\r\n\t        this._segments = [];\r\n\t        var limit = segmentStrings.length - 1;\r\n\t        for (var i = 0; i <= limit; i++) {\r\n\t            var segment = segmentStrings[i], match;\r\n\t            if (lang_1.isPresent(match = lang_1.RegExpWrapper.firstMatch(DynamicPathSegment.paramMatcher, segment))) {\r\n\t                this._segments.push(new DynamicPathSegment(match[1]));\r\n\t            }\r\n\t            else if (lang_1.isPresent(match = lang_1.RegExpWrapper.firstMatch(StarPathSegment.wildcardMatcher, segment))) {\r\n\t                this._segments.push(new StarPathSegment(match[1]));\r\n\t            }\r\n\t            else if (segment == '...') {\r\n\t                if (i < limit) {\r\n\t                    throw new exceptions_1.BaseException(\"Unexpected \\\"...\\\" before the end of the path for \\\"\" + routePath + \"\\\".\");\r\n\t                }\r\n\t                this._segments.push(new ContinuationPathSegment());\r\n\t            }\r\n\t            else {\r\n\t                this._segments.push(new StaticPathSegment(segment));\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ParamRoutePath.prototype._calculateSpecificity = function () {\r\n\t        // The \"specificity\" of a path is used to determine which route is used when multiple routes\r\n\t        // match\r\n\t        // a URL. Static segments (like \"/foo\") are the most specific, followed by dynamic segments\r\n\t        // (like\r\n\t        // \"/:id\"). Star segments add no specificity. Segments at the start of the path are more\r\n\t        // specific\r\n\t        // than proceeding ones.\r\n\t        //\r\n\t        // The code below uses place values to combine the different types of segments into a single\r\n\t        // string that we can sort later. Each static segment is marked as a specificity of \"2,\" each\r\n\t        // dynamic segment is worth \"1\" specificity, and stars are worth \"0\" specificity.\r\n\t        var i, length = this._segments.length, specificity;\r\n\t        if (length == 0) {\r\n\t            // a single slash (or \"empty segment\" is as specific as a static segment\r\n\t            specificity += '2';\r\n\t        }\r\n\t        else {\r\n\t            specificity = '';\r\n\t            for (i = 0; i < length; i++) {\r\n\t                specificity += this._segments[i].specificity;\r\n\t            }\r\n\t        }\r\n\t        return specificity;\r\n\t    };\r\n\t    ParamRoutePath.prototype._calculateHash = function () {\r\n\t        // this function is used to determine whether a route config path like `/foo/:id` collides with\r\n\t        // `/foo/:name`\r\n\t        var i, length = this._segments.length;\r\n\t        var hashParts = [];\r\n\t        for (i = 0; i < length; i++) {\r\n\t            hashParts.push(this._segments[i].hash);\r\n\t        }\r\n\t        return hashParts.join('/');\r\n\t    };\r\n\t    ParamRoutePath.prototype._assertValidPath = function (path) {\r\n\t        if (lang_1.StringWrapper.contains(path, '#')) {\r\n\t            throw new exceptions_1.BaseException(\"Path \\\"\" + path + \"\\\" should not include \\\"#\\\". Use \\\"HashLocationStrategy\\\" instead.\");\r\n\t        }\r\n\t        var illegalCharacter = lang_1.RegExpWrapper.firstMatch(ParamRoutePath.RESERVED_CHARS, path);\r\n\t        if (lang_1.isPresent(illegalCharacter)) {\r\n\t            throw new exceptions_1.BaseException(\"Path \\\"\" + path + \"\\\" contains \\\"\" + illegalCharacter[0] + \"\\\" which is not allowed in a route config.\");\r\n\t        }\r\n\t    };\r\n\t    ParamRoutePath.RESERVED_CHARS = lang_1.RegExpWrapper.create('//|\\\\(|\\\\)|;|\\\\?|=');\r\n\t    return ParamRoutePath;\r\n\t})();\r\n\texports.ParamRoutePath = ParamRoutePath;\r\n\n\n/***/ },\n/* 644 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar route_path_1 = __webpack_require__(334);\r\n\tvar RegexRoutePath = (function () {\r\n\t    function RegexRoutePath(_reString, _serializer) {\r\n\t        this._reString = _reString;\r\n\t        this._serializer = _serializer;\r\n\t        this.terminal = true;\r\n\t        this.specificity = '2';\r\n\t        this.hash = this._reString;\r\n\t        this._regex = lang_1.RegExpWrapper.create(this._reString);\r\n\t    }\r\n\t    RegexRoutePath.prototype.matchUrl = function (url) {\r\n\t        var urlPath = url.toString();\r\n\t        var params = {};\r\n\t        var matcher = lang_1.RegExpWrapper.matcher(this._regex, urlPath);\r\n\t        var match = lang_1.RegExpMatcherWrapper.next(matcher);\r\n\t        if (lang_1.isBlank(match)) {\r\n\t            return null;\r\n\t        }\r\n\t        for (var i = 0; i < match.length; i += 1) {\r\n\t            params[i.toString()] = match[i];\r\n\t        }\r\n\t        return new route_path_1.MatchedUrl(urlPath, [], params, [], null);\r\n\t    };\r\n\t    RegexRoutePath.prototype.generateUrl = function (params) { return this._serializer(params); };\r\n\t    RegexRoutePath.prototype.toString = function () { return this._reString; };\r\n\t    return RegexRoutePath;\r\n\t})();\r\n\texports.RegexRoutePath = RegexRoutePath;\r\n\n\n/***/ },\n/* 645 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar exceptions_1 = __webpack_require__(6);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar async_1 = __webpack_require__(13);\r\n\tvar rules_1 = __webpack_require__(335);\r\n\tvar route_config_impl_1 = __webpack_require__(141);\r\n\tvar async_route_handler_1 = __webpack_require__(641);\r\n\tvar sync_route_handler_1 = __webpack_require__(642);\r\n\tvar param_route_path_1 = __webpack_require__(643);\r\n\tvar regex_route_path_1 = __webpack_require__(644);\r\n\t/**\r\n\t * A `RuleSet` is responsible for recognizing routes for a particular component.\r\n\t * It is consumed by `RouteRegistry`, which knows how to recognize an entire hierarchy of\r\n\t * components.\r\n\t */\r\n\tvar RuleSet = (function () {\r\n\t    function RuleSet() {\r\n\t        this.rulesByName = new collection_1.Map();\r\n\t        // map from name to rule\r\n\t        this.auxRulesByName = new collection_1.Map();\r\n\t        // map from starting path to rule\r\n\t        this.auxRulesByPath = new collection_1.Map();\r\n\t        // TODO: optimize this into a trie\r\n\t        this.rules = [];\r\n\t        // the rule to use automatically when recognizing or generating from this rule set\r\n\t        this.defaultRule = null;\r\n\t    }\r\n\t    /**\r\n\t     * Configure additional rules in this rule set from a route definition\r\n\t     * @returns {boolean} true if the config is terminal\r\n\t     */\r\n\t    RuleSet.prototype.config = function (config) {\r\n\t        var handler;\r\n\t        if (lang_1.isPresent(config.name) && config.name[0].toUpperCase() != config.name[0]) {\r\n\t            var suggestedName = config.name[0].toUpperCase() + config.name.substring(1);\r\n\t            throw new exceptions_1.BaseException(\"Route \\\"\" + config.path + \"\\\" with name \\\"\" + config.name + \"\\\" does not begin with an uppercase letter. Route names should be CamelCase like \\\"\" + suggestedName + \"\\\".\");\r\n\t        }\r\n\t        if (config instanceof route_config_impl_1.AuxRoute) {\r\n\t            handler = new sync_route_handler_1.SyncRouteHandler(config.component, config.data);\r\n\t            var routePath_1 = this._getRoutePath(config);\r\n\t            var auxRule = new rules_1.RouteRule(routePath_1, handler);\r\n\t            this.auxRulesByPath.set(routePath_1.toString(), auxRule);\r\n\t            if (lang_1.isPresent(config.name)) {\r\n\t                this.auxRulesByName.set(config.name, auxRule);\r\n\t            }\r\n\t            return auxRule.terminal;\r\n\t        }\r\n\t        var useAsDefault = false;\r\n\t        if (config instanceof route_config_impl_1.Redirect) {\r\n\t            var routePath_2 = this._getRoutePath(config);\r\n\t            var redirector = new rules_1.RedirectRule(routePath_2, config.redirectTo);\r\n\t            this._assertNoHashCollision(redirector.hash, config.path);\r\n\t            this.rules.push(redirector);\r\n\t            return true;\r\n\t        }\r\n\t        if (config instanceof route_config_impl_1.Route) {\r\n\t            handler = new sync_route_handler_1.SyncRouteHandler(config.component, config.data);\r\n\t            useAsDefault = lang_1.isPresent(config.useAsDefault) && config.useAsDefault;\r\n\t        }\r\n\t        else if (config instanceof route_config_impl_1.AsyncRoute) {\r\n\t            handler = new async_route_handler_1.AsyncRouteHandler(config.loader, config.data);\r\n\t            useAsDefault = lang_1.isPresent(config.useAsDefault) && config.useAsDefault;\r\n\t        }\r\n\t        var routePath = this._getRoutePath(config);\r\n\t        var newRule = new rules_1.RouteRule(routePath, handler);\r\n\t        this._assertNoHashCollision(newRule.hash, config.path);\r\n\t        if (useAsDefault) {\r\n\t            if (lang_1.isPresent(this.defaultRule)) {\r\n\t                throw new exceptions_1.BaseException(\"Only one route can be default\");\r\n\t            }\r\n\t            this.defaultRule = newRule;\r\n\t        }\r\n\t        this.rules.push(newRule);\r\n\t        if (lang_1.isPresent(config.name)) {\r\n\t            this.rulesByName.set(config.name, newRule);\r\n\t        }\r\n\t        return newRule.terminal;\r\n\t    };\r\n\t    /**\r\n\t     * Given a URL, returns a list of `RouteMatch`es, which are partial recognitions for some route.\r\n\t     */\r\n\t    RuleSet.prototype.recognize = function (urlParse) {\r\n\t        var solutions = [];\r\n\t        this.rules.forEach(function (routeRecognizer) {\r\n\t            var pathMatch = routeRecognizer.recognize(urlParse);\r\n\t            if (lang_1.isPresent(pathMatch)) {\r\n\t                solutions.push(pathMatch);\r\n\t            }\r\n\t        });\r\n\t        // handle cases where we are routing just to an aux route\r\n\t        if (solutions.length == 0 && lang_1.isPresent(urlParse) && urlParse.auxiliary.length > 0) {\r\n\t            return [async_1.PromiseWrapper.resolve(new rules_1.PathMatch(null, null, urlParse.auxiliary))];\r\n\t        }\r\n\t        return solutions;\r\n\t    };\r\n\t    RuleSet.prototype.recognizeAuxiliary = function (urlParse) {\r\n\t        var routeRecognizer = this.auxRulesByPath.get(urlParse.path);\r\n\t        if (lang_1.isPresent(routeRecognizer)) {\r\n\t            return [routeRecognizer.recognize(urlParse)];\r\n\t        }\r\n\t        return [async_1.PromiseWrapper.resolve(null)];\r\n\t    };\r\n\t    RuleSet.prototype.hasRoute = function (name) { return this.rulesByName.has(name); };\r\n\t    RuleSet.prototype.componentLoaded = function (name) {\r\n\t        return this.hasRoute(name) && lang_1.isPresent(this.rulesByName.get(name).handler.componentType);\r\n\t    };\r\n\t    RuleSet.prototype.loadComponent = function (name) {\r\n\t        return this.rulesByName.get(name).handler.resolveComponentType();\r\n\t    };\r\n\t    RuleSet.prototype.generate = function (name, params) {\r\n\t        var rule = this.rulesByName.get(name);\r\n\t        if (lang_1.isBlank(rule)) {\r\n\t            return null;\r\n\t        }\r\n\t        return rule.generate(params);\r\n\t    };\r\n\t    RuleSet.prototype.generateAuxiliary = function (name, params) {\r\n\t        var rule = this.auxRulesByName.get(name);\r\n\t        if (lang_1.isBlank(rule)) {\r\n\t            return null;\r\n\t        }\r\n\t        return rule.generate(params);\r\n\t    };\r\n\t    RuleSet.prototype._assertNoHashCollision = function (hash, path) {\r\n\t        this.rules.forEach(function (rule) {\r\n\t            if (hash == rule.hash) {\r\n\t                throw new exceptions_1.BaseException(\"Configuration '\" + path + \"' conflicts with existing route '\" + rule.path + \"'\");\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    RuleSet.prototype._getRoutePath = function (config) {\r\n\t        if (lang_1.isPresent(config.regex)) {\r\n\t            if (lang_1.isFunction(config.serializer)) {\r\n\t                return new regex_route_path_1.RegexRoutePath(config.regex, config.serializer);\r\n\t            }\r\n\t            else {\r\n\t                throw new exceptions_1.BaseException(\"Route provides a regex property, '\" + config.regex + \"', but no serializer property\");\r\n\t            }\r\n\t        }\r\n\t        if (lang_1.isPresent(config.path)) {\r\n\t            // Auxiliary routes do not have a slash at the start\r\n\t            var path = (config instanceof route_config_impl_1.AuxRoute && config.path.startsWith('/')) ?\r\n\t                config.path.substring(1) :\r\n\t                config.path;\r\n\t            return new param_route_path_1.ParamRoutePath(path);\r\n\t        }\r\n\t        throw new exceptions_1.BaseException('Route must provide either a path or regex property');\r\n\t    };\r\n\t    return RuleSet;\r\n\t})();\r\n\texports.RuleSet = RuleSet;\r\n\n\n/***/ },\n/* 646 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';var lang_1 = __webpack_require__(1);\r\n\tvar collection_1 = __webpack_require__(5);\r\n\tvar TouchMap = (function () {\r\n\t    function TouchMap(map) {\r\n\t        var _this = this;\r\n\t        this.map = {};\r\n\t        this.keys = {};\r\n\t        if (lang_1.isPresent(map)) {\r\n\t            collection_1.StringMapWrapper.forEach(map, function (value, key) {\r\n\t                _this.map[key] = lang_1.isPresent(value) ? value.toString() : null;\r\n\t                _this.keys[key] = true;\r\n\t            });\r\n\t        }\r\n\t    }\r\n\t    TouchMap.prototype.get = function (key) {\r\n\t        collection_1.StringMapWrapper.delete(this.keys, key);\r\n\t        return this.map[key];\r\n\t    };\r\n\t    TouchMap.prototype.getUnused = function () {\r\n\t        var _this = this;\r\n\t        var unused = {};\r\n\t        var keys = collection_1.StringMapWrapper.keys(this.keys);\r\n\t        keys.forEach(function (key) { return unused[key] = collection_1.StringMapWrapper.get(_this.map, key); });\r\n\t        return unused;\r\n\t    };\r\n\t    return TouchMap;\r\n\t})();\r\n\texports.TouchMap = TouchMap;\r\n\tfunction normalizeString(obj) {\r\n\t    if (lang_1.isBlank(obj)) {\r\n\t        return null;\r\n\t    }\r\n\t    else {\r\n\t        return obj.toString();\r\n\t    }\r\n\t}\r\n\texports.normalizeString = normalizeString;\r\n\n\n/***/ },\n/* 647 */\n/***/ function(module, exports) {\n\n\t'use strict';// Note: This class is only here so that we can reference it from TypeScript code.\r\n\t// The actual implementation lives under modules_dart.\r\n\t// TODO(tbosch): Move the corresponding code into angular2/src/compiler once\r\n\t// the new compiler is done.\r\n\tvar Codegen = (function () {\r\n\t    function Codegen(moduleAlias) {\r\n\t    }\r\n\t    Codegen.prototype.generate = function (typeName, changeDetectorTypeName, def) {\r\n\t        throw \"Not implemented in JS\";\r\n\t    };\r\n\t    Codegen.prototype.toString = function () { throw \"Not implemented in JS\"; };\r\n\t    return Codegen;\r\n\t})();\r\n\texports.Codegen = Codegen;\r\n\n\n/***/ },\n/* 648 */,\n/* 649 */,\n/* 650 */,\n/* 651 */,\n/* 652 */,\n/* 653 */,\n/* 654 */,\n/* 655 */,\n/* 656 */,\n/* 657 */,\n/* 658 */,\n/* 659 */,\n/* 660 */,\n/* 661 */,\n/* 662 */,\n/* 663 */,\n/* 664 */,\n/* 665 */,\n/* 666 */,\n/* 667 */,\n/* 668 */,\n/* 669 */,\n/* 670 */,\n/* 671 */,\n/* 672 */,\n/* 673 */,\n/* 674 */,\n/* 675 */,\n/* 676 */,\n/* 677 */,\n/* 678 */,\n/* 679 */,\n/* 680 */,\n/* 681 */,\n/* 682 */,\n/* 683 */,\n/* 684 */,\n/* 685 */,\n/* 686 */,\n/* 687 */,\n/* 688 */,\n/* 689 */,\n/* 690 */,\n/* 691 */,\n/* 692 */,\n/* 693 */,\n/* 694 */,\n/* 695 */,\n/* 696 */,\n/* 697 */,\n/* 698 */,\n/* 699 */,\n/* 700 */,\n/* 701 */,\n/* 702 */,\n/* 703 */,\n/* 704 */,\n/* 705 */,\n/* 706 */,\n/* 707 */,\n/* 708 */,\n/* 709 */,\n/* 710 */,\n/* 711 */,\n/* 712 */,\n/* 713 */,\n/* 714 */,\n/* 715 */,\n/* 716 */,\n/* 717 */,\n/* 718 */,\n/* 719 */,\n/* 720 */,\n/* 721 */,\n/* 722 */,\n/* 723 */,\n/* 724 */,\n/* 725 */,\n/* 726 */,\n/* 727 */,\n/* 728 */,\n/* 729 */,\n/* 730 */,\n/* 731 */,\n/* 732 */,\n/* 733 */,\n/* 734 */,\n/* 735 */,\n/* 736 */,\n/* 737 */,\n/* 738 */,\n/* 739 */,\n/* 740 */,\n/* 741 */,\n/* 742 */,\n/* 743 */,\n/* 744 */,\n/* 745 */,\n/* 746 */,\n/* 747 */,\n/* 748 */,\n/* 749 */,\n/* 750 */,\n/* 751 */,\n/* 752 */,\n/* 753 */,\n/* 754 */,\n/* 755 */,\n/* 756 */,\n/* 757 */,\n/* 758 */,\n/* 759 */,\n/* 760 */,\n/* 761 */,\n/* 762 */,\n/* 763 */,\n/* 764 */,\n/* 765 */,\n/* 766 */,\n/* 767 */,\n/* 768 */,\n/* 769 */,\n/* 770 */,\n/* 771 */,\n/* 772 */,\n/* 773 */,\n/* 774 */,\n/* 775 */,\n/* 776 */,\n/* 777 */,\n/* 778 */,\n/* 779 */,\n/* 780 */,\n/* 781 */,\n/* 782 */,\n/* 783 */,\n/* 784 */,\n/* 785 */,\n/* 786 */,\n/* 787 */,\n/* 788 */,\n/* 789 */,\n/* 790 */,\n/* 791 */,\n/* 792 */,\n/* 793 */,\n/* 794 */,\n/* 795 */,\n/* 796 */,\n/* 797 */,\n/* 798 */,\n/* 799 */,\n/* 800 */,\n/* 801 */,\n/* 802 */,\n/* 803 */,\n/* 804 */,\n/* 805 */,\n/* 806 */,\n/* 807 */,\n/* 808 */,\n/* 809 */,\n/* 810 */,\n/* 811 */,\n/* 812 */,\n/* 813 */,\n/* 814 */,\n/* 815 */,\n/* 816 */,\n/* 817 */,\n/* 818 */,\n/* 819 */,\n/* 820 */,\n/* 821 */,\n/* 822 */,\n/* 823 */,\n/* 824 */,\n/* 825 */,\n/* 826 */,\n/* 827 */,\n/* 828 */,\n/* 829 */,\n/* 830 */,\n/* 831 */,\n/* 832 */\n/***/ function(module, exports) {\n\n\t/**\n\t * material-design-lite - Material Design Components in CSS, JS and HTML\n\t * @version v1.1.3\n\t * @license Apache-2.0\n\t * @copyright 2015 Google, Inc.\n\t * @link https://github.com/google/material-design-lite\n\t */\n\t!function(){\"use strict\";function e(e,t){if(e){if(t.element_.classList.contains(t.CssClasses_.MDL_JS_RIPPLE_EFFECT)){var s=document.createElement(\"span\");s.classList.add(t.CssClasses_.MDL_RIPPLE_CONTAINER),s.classList.add(t.CssClasses_.MDL_JS_RIPPLE_EFFECT);var i=document.createElement(\"span\");i.classList.add(t.CssClasses_.MDL_RIPPLE),s.appendChild(i),e.appendChild(s)}e.addEventListener(\"click\",function(s){s.preventDefault();var i=e.href.split(\"#\")[1],n=t.element_.querySelector(\"#\"+i);t.resetTabState_(),t.resetPanelState_(),e.classList.add(t.CssClasses_.ACTIVE_CLASS),n.classList.add(t.CssClasses_.ACTIVE_CLASS)})}}function t(e,t,s,i){function n(){var n=e.href.split(\"#\")[1],a=i.content_.querySelector(\"#\"+n);i.resetTabState_(t),i.resetPanelState_(s),e.classList.add(i.CssClasses_.IS_ACTIVE),a.classList.add(i.CssClasses_.IS_ACTIVE)}if(i.tabBar_.classList.contains(i.CssClasses_.JS_RIPPLE_EFFECT)){var a=document.createElement(\"span\");a.classList.add(i.CssClasses_.RIPPLE_CONTAINER),a.classList.add(i.CssClasses_.JS_RIPPLE_EFFECT);var l=document.createElement(\"span\");l.classList.add(i.CssClasses_.RIPPLE),a.appendChild(l),e.appendChild(a)}e.addEventListener(\"click\",function(t){\"#\"===e.getAttribute(\"href\").charAt(0)&&(t.preventDefault(),n())}),e.show=n}var s={upgradeDom:function(e,t){},upgradeElement:function(e,t){},upgradeElements:function(e){},upgradeAllRegistered:function(){},registerUpgradedCallback:function(e,t){},register:function(e){},downgradeElements:function(e){}};s=function(){function e(e,t){for(var s=0;s<h.length;s++)if(h[s].className===e)return\"undefined\"!=typeof t&&(h[s]=t),h[s];return!1}function t(e){var t=e.getAttribute(\"data-upgraded\");return null===t?[\"\"]:t.split(\",\")}function s(e,s){var i=t(e);return-1!==i.indexOf(s)}function i(t,s){if(\"undefined\"==typeof t&&\"undefined\"==typeof s)for(var a=0;a<h.length;a++)i(h[a].className,h[a].cssClass);else{var l=t;if(\"undefined\"==typeof s){var o=e(l);o&&(s=o.cssClass)}for(var r=document.querySelectorAll(\".\"+s),_=0;_<r.length;_++)n(r[_],l)}}function n(i,n){if(!(\"object\"==typeof i&&i instanceof Element))throw new Error(\"Invalid argument provided to upgrade MDL element.\");var a=t(i),l=[];if(n)s(i,n)||l.push(e(n));else{var o=i.classList;h.forEach(function(e){o.contains(e.cssClass)&&-1===l.indexOf(e)&&!s(i,e.className)&&l.push(e)})}for(var r,_=0,d=l.length;d>_;_++){if(r=l[_],!r)throw new Error(\"Unable to find a registered component for the given class.\");a.push(r.className),i.setAttribute(\"data-upgraded\",a.join(\",\"));var C=new r.classConstructor(i);C[p]=r,c.push(C);for(var u=0,E=r.callbacks.length;E>u;u++)r.callbacks[u](i);r.widget&&(i[r.className]=C);var m;\"CustomEvent\"in window&&\"function\"==typeof window.CustomEvent?m=new Event(\"mdl-componentupgraded\",{bubbles:!0,cancelable:!1}):(m=document.createEvent(\"Events\"),m.initEvent(\"mdl-componentupgraded\",!0,!0)),i.dispatchEvent(m)}}function a(e){Array.isArray(e)||(e=\"function\"==typeof e.item?Array.prototype.slice.call(e):[e]);for(var t,s=0,i=e.length;i>s;s++)t=e[s],t instanceof HTMLElement&&(n(t),t.children.length>0&&a(t.children))}function l(t){var s=\"undefined\"==typeof t.widget&&\"undefined\"==typeof t.widget,i=!0;s||(i=t.widget||t.widget);var n={classConstructor:t.constructor||t.constructor,className:t.classAsString||t.classAsString,cssClass:t.cssClass||t.cssClass,widget:i,callbacks:[]};if(h.forEach(function(e){if(e.cssClass===n.cssClass)throw new Error(\"The provided cssClass has already been registered: \"+e.cssClass);if(e.className===n.className)throw new Error(\"The provided className has already been registered\")}),t.constructor.prototype.hasOwnProperty(p))throw new Error(\"MDL component classes must not have \"+p+\" defined as a property.\");var a=e(t.classAsString,n);a||h.push(n)}function o(t,s){var i=e(t);i&&i.callbacks.push(s)}function r(){for(var e=0;e<h.length;e++)i(h[e].className)}function _(e){if(e){var t=c.indexOf(e);c.splice(t,1);var s=e.element_.getAttribute(\"data-upgraded\").split(\",\"),i=s.indexOf(e[p].classAsString);s.splice(i,1),e.element_.setAttribute(\"data-upgraded\",s.join(\",\"));var n;\"CustomEvent\"in window&&\"function\"==typeof window.CustomEvent?n=new Event(\"mdl-componentdowngraded\",{bubbles:!0,cancelable:!1}):(n=document.createEvent(\"Events\"),n.initEvent(\"mdl-componentdowngraded\",!0,!0))}}function d(e){var t=function(e){c.filter(function(t){return t.element_===e}).forEach(_)};if(e instanceof Array||e instanceof NodeList)for(var s=0;s<e.length;s++)t(e[s]);else{if(!(e instanceof Node))throw new Error(\"Invalid argument provided to downgrade MDL nodes.\");t(e)}}var h=[],c=[],p=\"mdlComponentConfigInternal_\";return{upgradeDom:i,upgradeElement:n,upgradeElements:a,upgradeAllRegistered:r,registerUpgradedCallback:o,register:l,downgradeElements:d}}(),s.ComponentConfigPublic,s.ComponentConfig,s.Component,s.upgradeDom=s.upgradeDom,s.upgradeElement=s.upgradeElement,s.upgradeElements=s.upgradeElements,s.upgradeAllRegistered=s.upgradeAllRegistered,s.registerUpgradedCallback=s.registerUpgradedCallback,s.register=s.register,s.downgradeElements=s.downgradeElements,window.componentHandler=s,window.componentHandler=s,window.addEventListener(\"load\",function(){\"classList\"in document.createElement(\"div\")&&\"querySelector\"in document&&\"addEventListener\"in window&&Array.prototype.forEach?(document.documentElement.classList.add(\"mdl-js\"),s.upgradeAllRegistered()):(s.upgradeElement=function(){},s.register=function(){})}),Date.now||(Date.now=function(){return(new Date).getTime()},Date.now=Date.now);for(var i=[\"webkit\",\"moz\"],n=0;n<i.length&&!window.requestAnimationFrame;++n){var a=i[n];window.requestAnimationFrame=window[a+\"RequestAnimationFrame\"],window.cancelAnimationFrame=window[a+\"CancelAnimationFrame\"]||window[a+\"CancelRequestAnimationFrame\"],window.requestAnimationFrame=window.requestAnimationFrame,window.cancelAnimationFrame=window.cancelAnimationFrame}if(/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent)||!window.requestAnimationFrame||!window.cancelAnimationFrame){var l=0;window.requestAnimationFrame=function(e){var t=Date.now(),s=Math.max(l+16,t);return setTimeout(function(){e(l=s)},s-t)},window.cancelAnimationFrame=clearTimeout,window.requestAnimationFrame=window.requestAnimationFrame,window.cancelAnimationFrame=window.cancelAnimationFrame}var o=function(e){this.element_=e,this.init()};window.MaterialButton=o,o.prototype.Constant_={},o.prototype.CssClasses_={RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_CONTAINER:\"mdl-button__ripple-container\",RIPPLE:\"mdl-ripple\"},o.prototype.blurHandler_=function(e){e&&this.element_.blur()},o.prototype.disable=function(){this.element_.disabled=!0},o.prototype.disable=o.prototype.disable,o.prototype.enable=function(){this.element_.disabled=!1},o.prototype.enable=o.prototype.enable,o.prototype.init=function(){if(this.element_){if(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){var e=document.createElement(\"span\");e.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleElement_=document.createElement(\"span\"),this.rippleElement_.classList.add(this.CssClasses_.RIPPLE),e.appendChild(this.rippleElement_),this.boundRippleBlurHandler=this.blurHandler_.bind(this),this.rippleElement_.addEventListener(\"mouseup\",this.boundRippleBlurHandler),this.element_.appendChild(e)}this.boundButtonBlurHandler=this.blurHandler_.bind(this),this.element_.addEventListener(\"mouseup\",this.boundButtonBlurHandler),this.element_.addEventListener(\"mouseleave\",this.boundButtonBlurHandler)}},s.register({constructor:o,classAsString:\"MaterialButton\",cssClass:\"mdl-js-button\",widget:!0});var r=function(e){this.element_=e,this.init()};window.MaterialCheckbox=r,r.prototype.Constant_={TINY_TIMEOUT:.001},r.prototype.CssClasses_={INPUT:\"mdl-checkbox__input\",BOX_OUTLINE:\"mdl-checkbox__box-outline\",FOCUS_HELPER:\"mdl-checkbox__focus-helper\",TICK_OUTLINE:\"mdl-checkbox__tick-outline\",RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",RIPPLE_CONTAINER:\"mdl-checkbox__ripple-container\",RIPPLE_CENTER:\"mdl-ripple--center\",RIPPLE:\"mdl-ripple\",IS_FOCUSED:\"is-focused\",IS_DISABLED:\"is-disabled\",IS_CHECKED:\"is-checked\",IS_UPGRADED:\"is-upgraded\"},r.prototype.onChange_=function(e){this.updateClasses_()},r.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},r.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},r.prototype.onMouseUp_=function(e){this.blur_()},r.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},r.prototype.blur_=function(){window.setTimeout(function(){this.inputElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},r.prototype.checkToggleState=function(){this.inputElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},r.prototype.checkToggleState=r.prototype.checkToggleState,r.prototype.checkDisabled=function(){this.inputElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},r.prototype.checkDisabled=r.prototype.checkDisabled,r.prototype.disable=function(){this.inputElement_.disabled=!0,this.updateClasses_()},r.prototype.disable=r.prototype.disable,r.prototype.enable=function(){this.inputElement_.disabled=!1,this.updateClasses_()},r.prototype.enable=r.prototype.enable,r.prototype.check=function(){this.inputElement_.checked=!0,this.updateClasses_()},r.prototype.check=r.prototype.check,r.prototype.uncheck=function(){this.inputElement_.checked=!1,this.updateClasses_()},r.prototype.uncheck=r.prototype.uncheck,r.prototype.init=function(){if(this.element_){this.inputElement_=this.element_.querySelector(\".\"+this.CssClasses_.INPUT);var e=document.createElement(\"span\");e.classList.add(this.CssClasses_.BOX_OUTLINE);var t=document.createElement(\"span\");t.classList.add(this.CssClasses_.FOCUS_HELPER);var s=document.createElement(\"span\");if(s.classList.add(this.CssClasses_.TICK_OUTLINE),e.appendChild(s),this.element_.appendChild(t),this.element_.appendChild(e),this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),this.rippleContainerElement_=document.createElement(\"span\"),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER),this.boundRippleMouseUp=this.onMouseUp_.bind(this),this.rippleContainerElement_.addEventListener(\"mouseup\",this.boundRippleMouseUp);var i=document.createElement(\"span\");i.classList.add(this.CssClasses_.RIPPLE),this.rippleContainerElement_.appendChild(i),this.element_.appendChild(this.rippleContainerElement_)}this.boundInputOnChange=this.onChange_.bind(this),this.boundInputOnFocus=this.onFocus_.bind(this),this.boundInputOnBlur=this.onBlur_.bind(this),this.boundElementMouseUp=this.onMouseUp_.bind(this),this.inputElement_.addEventListener(\"change\",this.boundInputOnChange),this.inputElement_.addEventListener(\"focus\",this.boundInputOnFocus),this.inputElement_.addEventListener(\"blur\",this.boundInputOnBlur),this.element_.addEventListener(\"mouseup\",this.boundElementMouseUp),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},s.register({constructor:r,classAsString:\"MaterialCheckbox\",cssClass:\"mdl-js-checkbox\",widget:!0});var _=function(e){this.element_=e,this.init()};window.MaterialIconToggle=_,_.prototype.Constant_={TINY_TIMEOUT:.001},_.prototype.CssClasses_={INPUT:\"mdl-icon-toggle__input\",JS_RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",RIPPLE_CONTAINER:\"mdl-icon-toggle__ripple-container\",RIPPLE_CENTER:\"mdl-ripple--center\",RIPPLE:\"mdl-ripple\",IS_FOCUSED:\"is-focused\",IS_DISABLED:\"is-disabled\",IS_CHECKED:\"is-checked\"},_.prototype.onChange_=function(e){this.updateClasses_()},_.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},_.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},_.prototype.onMouseUp_=function(e){this.blur_()},_.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},_.prototype.blur_=function(){window.setTimeout(function(){this.inputElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},_.prototype.checkToggleState=function(){this.inputElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},_.prototype.checkToggleState=_.prototype.checkToggleState,_.prototype.checkDisabled=function(){this.inputElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},_.prototype.checkDisabled=_.prototype.checkDisabled,_.prototype.disable=function(){this.inputElement_.disabled=!0,this.updateClasses_()},_.prototype.disable=_.prototype.disable,_.prototype.enable=function(){this.inputElement_.disabled=!1,this.updateClasses_()},_.prototype.enable=_.prototype.enable,_.prototype.check=function(){this.inputElement_.checked=!0,this.updateClasses_()},_.prototype.check=_.prototype.check,_.prototype.uncheck=function(){this.inputElement_.checked=!1,this.updateClasses_()},_.prototype.uncheck=_.prototype.uncheck,_.prototype.init=function(){if(this.element_){if(this.inputElement_=this.element_.querySelector(\".\"+this.CssClasses_.INPUT),this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),this.rippleContainerElement_=document.createElement(\"span\"),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER),this.boundRippleMouseUp=this.onMouseUp_.bind(this),this.rippleContainerElement_.addEventListener(\"mouseup\",this.boundRippleMouseUp);var e=document.createElement(\"span\");e.classList.add(this.CssClasses_.RIPPLE),this.rippleContainerElement_.appendChild(e),this.element_.appendChild(this.rippleContainerElement_)}this.boundInputOnChange=this.onChange_.bind(this),this.boundInputOnFocus=this.onFocus_.bind(this),this.boundInputOnBlur=this.onBlur_.bind(this),this.boundElementOnMouseUp=this.onMouseUp_.bind(this),this.inputElement_.addEventListener(\"change\",this.boundInputOnChange),this.inputElement_.addEventListener(\"focus\",this.boundInputOnFocus),this.inputElement_.addEventListener(\"blur\",this.boundInputOnBlur),this.element_.addEventListener(\"mouseup\",this.boundElementOnMouseUp),this.updateClasses_(),this.element_.classList.add(\"is-upgraded\")}},s.register({constructor:_,classAsString:\"MaterialIconToggle\",cssClass:\"mdl-js-icon-toggle\",widget:!0});var d=function(e){this.element_=e,this.init()};window.MaterialMenu=d,d.prototype.Constant_={TRANSITION_DURATION_SECONDS:.3,TRANSITION_DURATION_FRACTION:.8,CLOSE_TIMEOUT:150},d.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32,UP_ARROW:38,DOWN_ARROW:40},d.prototype.CssClasses_={CONTAINER:\"mdl-menu__container\",OUTLINE:\"mdl-menu__outline\",ITEM:\"mdl-menu__item\",ITEM_RIPPLE_CONTAINER:\"mdl-menu__item-ripple-container\",RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",RIPPLE:\"mdl-ripple\",IS_UPGRADED:\"is-upgraded\",IS_VISIBLE:\"is-visible\",IS_ANIMATING:\"is-animating\",BOTTOM_LEFT:\"mdl-menu--bottom-left\",BOTTOM_RIGHT:\"mdl-menu--bottom-right\",TOP_LEFT:\"mdl-menu--top-left\",TOP_RIGHT:\"mdl-menu--top-right\",UNALIGNED:\"mdl-menu--unaligned\"},d.prototype.init=function(){if(this.element_){var e=document.createElement(\"div\");e.classList.add(this.CssClasses_.CONTAINER),this.element_.parentElement.insertBefore(e,this.element_),this.element_.parentElement.removeChild(this.element_),e.appendChild(this.element_),this.container_=e;var t=document.createElement(\"div\");t.classList.add(this.CssClasses_.OUTLINE),this.outline_=t,e.insertBefore(t,this.element_);var s=this.element_.getAttribute(\"for\")||this.element_.getAttribute(\"data-mdl-for\"),i=null;s&&(i=document.getElementById(s),i&&(this.forElement_=i,i.addEventListener(\"click\",this.handleForClick_.bind(this)),i.addEventListener(\"keydown\",this.handleForKeyboardEvent_.bind(this))));var n=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM);this.boundItemKeydown_=this.handleItemKeyboardEvent_.bind(this),this.boundItemClick_=this.handleItemClick_.bind(this);for(var a=0;a<n.length;a++)n[a].addEventListener(\"click\",this.boundItemClick_),n[a].tabIndex=\"-1\",n[a].addEventListener(\"keydown\",this.boundItemKeydown_);if(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT))for(this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),a=0;a<n.length;a++){var l=n[a],o=document.createElement(\"span\");o.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);var r=document.createElement(\"span\");r.classList.add(this.CssClasses_.RIPPLE),o.appendChild(r),l.appendChild(o),l.classList.add(this.CssClasses_.RIPPLE_EFFECT)}this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)&&this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT),this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)&&this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT),this.element_.classList.contains(this.CssClasses_.TOP_LEFT)&&this.outline_.classList.add(this.CssClasses_.TOP_LEFT),this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)&&this.outline_.classList.add(this.CssClasses_.TOP_RIGHT),this.element_.classList.contains(this.CssClasses_.UNALIGNED)&&this.outline_.classList.add(this.CssClasses_.UNALIGNED),e.classList.add(this.CssClasses_.IS_UPGRADED)}},d.prototype.handleForClick_=function(e){if(this.element_&&this.forElement_){var t=this.forElement_.getBoundingClientRect(),s=this.forElement_.parentElement.getBoundingClientRect();this.element_.classList.contains(this.CssClasses_.UNALIGNED)||(this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?(this.container_.style.right=s.right-t.right+\"px\",this.container_.style.top=this.forElement_.offsetTop+this.forElement_.offsetHeight+\"px\"):this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?(this.container_.style.left=this.forElement_.offsetLeft+\"px\",this.container_.style.bottom=s.bottom-t.top+\"px\"):this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?(this.container_.style.right=s.right-t.right+\"px\",this.container_.style.bottom=s.bottom-t.top+\"px\"):(this.container_.style.left=this.forElement_.offsetLeft+\"px\",this.container_.style.top=this.forElement_.offsetTop+this.forElement_.offsetHeight+\"px\"))}this.toggle(e)},d.prototype.handleForKeyboardEvent_=function(e){if(this.element_&&this.container_&&this.forElement_){var t=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM+\":not([disabled])\");t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)&&(e.keyCode===this.Keycodes_.UP_ARROW?(e.preventDefault(),t[t.length-1].focus()):e.keyCode===this.Keycodes_.DOWN_ARROW&&(e.preventDefault(),t[0].focus()))}},d.prototype.handleItemKeyboardEvent_=function(e){if(this.element_&&this.container_){var t=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM+\":not([disabled])\");if(t&&t.length>0&&this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)){var s=Array.prototype.slice.call(t).indexOf(e.target);if(e.keyCode===this.Keycodes_.UP_ARROW)e.preventDefault(),s>0?t[s-1].focus():t[t.length-1].focus();else if(e.keyCode===this.Keycodes_.DOWN_ARROW)e.preventDefault(),t.length>s+1?t[s+1].focus():t[0].focus();else if(e.keyCode===this.Keycodes_.SPACE||e.keyCode===this.Keycodes_.ENTER){e.preventDefault();var i=new MouseEvent(\"mousedown\");e.target.dispatchEvent(i),i=new MouseEvent(\"mouseup\"),e.target.dispatchEvent(i),e.target.click()}else e.keyCode===this.Keycodes_.ESCAPE&&(e.preventDefault(),this.hide())}}},d.prototype.handleItemClick_=function(e){e.target.hasAttribute(\"disabled\")?e.stopPropagation():(this.closing_=!0,window.setTimeout(function(e){this.hide(),this.closing_=!1}.bind(this),this.Constant_.CLOSE_TIMEOUT))},d.prototype.applyClip_=function(e,t){this.element_.classList.contains(this.CssClasses_.UNALIGNED)?this.element_.style.clip=\"\":this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)?this.element_.style.clip=\"rect(0 \"+t+\"px 0 \"+t+\"px)\":this.element_.classList.contains(this.CssClasses_.TOP_LEFT)?this.element_.style.clip=\"rect(\"+e+\"px 0 \"+e+\"px 0)\":this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?this.element_.style.clip=\"rect(\"+e+\"px \"+t+\"px \"+e+\"px \"+t+\"px)\":this.element_.style.clip=\"\"},d.prototype.removeAnimationEndListener_=function(e){e.target.classList.remove(d.prototype.CssClasses_.IS_ANIMATING)},d.prototype.addAnimationEndListener_=function(){this.element_.addEventListener(\"transitionend\",this.removeAnimationEndListener_),this.element_.addEventListener(\"webkitTransitionEnd\",this.removeAnimationEndListener_)},d.prototype.show=function(e){if(this.element_&&this.container_&&this.outline_){var t=this.element_.getBoundingClientRect().height,s=this.element_.getBoundingClientRect().width;this.container_.style.width=s+\"px\",this.container_.style.height=t+\"px\",this.outline_.style.width=s+\"px\",this.outline_.style.height=t+\"px\";for(var i=this.Constant_.TRANSITION_DURATION_SECONDS*this.Constant_.TRANSITION_DURATION_FRACTION,n=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM),a=0;a<n.length;a++){var l=null;l=this.element_.classList.contains(this.CssClasses_.TOP_LEFT)||this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)?(t-n[a].offsetTop-n[a].offsetHeight)/t*i+\"s\":n[a].offsetTop/t*i+\"s\",n[a].style.transitionDelay=l}this.applyClip_(t,s),window.requestAnimationFrame(function(){this.element_.classList.add(this.CssClasses_.IS_ANIMATING),this.element_.style.clip=\"rect(0 \"+s+\"px \"+t+\"px 0)\",this.container_.classList.add(this.CssClasses_.IS_VISIBLE)}.bind(this)),this.addAnimationEndListener_();var o=function(t){t===e||this.closing_||t.target.parentNode===this.element_||(document.removeEventListener(\"click\",o),this.hide())}.bind(this);document.addEventListener(\"click\",o)}},d.prototype.show=d.prototype.show,d.prototype.hide=function(){if(this.element_&&this.container_&&this.outline_){for(var e=this.element_.querySelectorAll(\".\"+this.CssClasses_.ITEM),t=0;t<e.length;t++)e[t].style.removeProperty(\"transition-delay\");var s=this.element_.getBoundingClientRect(),i=s.height,n=s.width;this.element_.classList.add(this.CssClasses_.IS_ANIMATING),this.applyClip_(i,n),this.container_.classList.remove(this.CssClasses_.IS_VISIBLE),this.addAnimationEndListener_()}},d.prototype.hide=d.prototype.hide,d.prototype.toggle=function(e){this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)?this.hide():this.show(e)},d.prototype.toggle=d.prototype.toggle,s.register({constructor:d,classAsString:\"MaterialMenu\",cssClass:\"mdl-js-menu\",widget:!0});var h=function(e){this.element_=e,this.init()};window.MaterialProgress=h,h.prototype.Constant_={},h.prototype.CssClasses_={INDETERMINATE_CLASS:\"mdl-progress__indeterminate\"},h.prototype.setProgress=function(e){this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)||(this.progressbar_.style.width=e+\"%\")},h.prototype.setProgress=h.prototype.setProgress,h.prototype.setBuffer=function(e){this.bufferbar_.style.width=e+\"%\",this.auxbar_.style.width=100-e+\"%\"},h.prototype.setBuffer=h.prototype.setBuffer,h.prototype.init=function(){if(this.element_){var e=document.createElement(\"div\");e.className=\"progressbar bar bar1\",this.element_.appendChild(e),this.progressbar_=e,e=document.createElement(\"div\"),e.className=\"bufferbar bar bar2\",this.element_.appendChild(e),this.bufferbar_=e,e=document.createElement(\"div\"),e.className=\"auxbar bar bar3\",this.element_.appendChild(e),this.auxbar_=e,this.progressbar_.style.width=\"0%\",this.bufferbar_.style.width=\"100%\",this.auxbar_.style.width=\"0%\",this.element_.classList.add(\"is-upgraded\")}},s.register({constructor:h,classAsString:\"MaterialProgress\",cssClass:\"mdl-js-progress\",widget:!0});var c=function(e){this.element_=e,this.init()};window.MaterialRadio=c,c.prototype.Constant_={TINY_TIMEOUT:.001},c.prototype.CssClasses_={IS_FOCUSED:\"is-focused\",IS_DISABLED:\"is-disabled\",IS_CHECKED:\"is-checked\",IS_UPGRADED:\"is-upgraded\",JS_RADIO:\"mdl-js-radio\",RADIO_BTN:\"mdl-radio__button\",RADIO_OUTER_CIRCLE:\"mdl-radio__outer-circle\",RADIO_INNER_CIRCLE:\"mdl-radio__inner-circle\",RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",RIPPLE_CONTAINER:\"mdl-radio__ripple-container\",RIPPLE_CENTER:\"mdl-ripple--center\",RIPPLE:\"mdl-ripple\"},c.prototype.onChange_=function(e){for(var t=document.getElementsByClassName(this.CssClasses_.JS_RADIO),s=0;s<t.length;s++){var i=t[s].querySelector(\".\"+this.CssClasses_.RADIO_BTN);i.getAttribute(\"name\")===this.btnElement_.getAttribute(\"name\")&&t[s].MaterialRadio.updateClasses_()}},c.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},c.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},c.prototype.onMouseup_=function(e){this.blur_()},c.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},c.prototype.blur_=function(){window.setTimeout(function(){this.btnElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},c.prototype.checkDisabled=function(){this.btnElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},c.prototype.checkDisabled=c.prototype.checkDisabled,c.prototype.checkToggleState=function(){this.btnElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},c.prototype.checkToggleState=c.prototype.checkToggleState,c.prototype.disable=function(){this.btnElement_.disabled=!0,this.updateClasses_()},c.prototype.disable=c.prototype.disable,c.prototype.enable=function(){this.btnElement_.disabled=!1,this.updateClasses_()},c.prototype.enable=c.prototype.enable,c.prototype.check=function(){this.btnElement_.checked=!0,this.updateClasses_()},c.prototype.check=c.prototype.check,c.prototype.uncheck=function(){this.btnElement_.checked=!1,this.updateClasses_()},c.prototype.uncheck=c.prototype.uncheck,c.prototype.init=function(){if(this.element_){this.btnElement_=this.element_.querySelector(\".\"+this.CssClasses_.RADIO_BTN),this.boundChangeHandler_=this.onChange_.bind(this),this.boundFocusHandler_=this.onChange_.bind(this),this.boundBlurHandler_=this.onBlur_.bind(this),this.boundMouseUpHandler_=this.onMouseup_.bind(this);var e=document.createElement(\"span\");e.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);var t=document.createElement(\"span\");t.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE),this.element_.appendChild(e),this.element_.appendChild(t);var s;if(this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),s=document.createElement(\"span\"),s.classList.add(this.CssClasses_.RIPPLE_CONTAINER),s.classList.add(this.CssClasses_.RIPPLE_EFFECT),s.classList.add(this.CssClasses_.RIPPLE_CENTER),s.addEventListener(\"mouseup\",this.boundMouseUpHandler_);var i=document.createElement(\"span\");i.classList.add(this.CssClasses_.RIPPLE),s.appendChild(i),this.element_.appendChild(s)}this.btnElement_.addEventListener(\"change\",this.boundChangeHandler_),this.btnElement_.addEventListener(\"focus\",this.boundFocusHandler_),this.btnElement_.addEventListener(\"blur\",this.boundBlurHandler_),this.element_.addEventListener(\"mouseup\",this.boundMouseUpHandler_),this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},s.register({constructor:c,classAsString:\"MaterialRadio\",cssClass:\"mdl-js-radio\",widget:!0});var p=function(e){this.element_=e,this.isIE_=window.navigator.msPointerEnabled,this.init()};window.MaterialSlider=p,p.prototype.Constant_={},p.prototype.CssClasses_={IE_CONTAINER:\"mdl-slider__ie-container\",SLIDER_CONTAINER:\"mdl-slider__container\",BACKGROUND_FLEX:\"mdl-slider__background-flex\",BACKGROUND_LOWER:\"mdl-slider__background-lower\",BACKGROUND_UPPER:\"mdl-slider__background-upper\",IS_LOWEST_VALUE:\"is-lowest-value\",IS_UPGRADED:\"is-upgraded\"},p.prototype.onInput_=function(e){this.updateValueStyles_()},p.prototype.onChange_=function(e){this.updateValueStyles_()},p.prototype.onMouseUp_=function(e){e.target.blur()},p.prototype.onContainerMouseDown_=function(e){if(e.target===this.element_.parentElement){e.preventDefault();var t=new MouseEvent(\"mousedown\",{target:e.target,buttons:e.buttons,clientX:e.clientX,clientY:this.element_.getBoundingClientRect().y});this.element_.dispatchEvent(t)}},p.prototype.updateValueStyles_=function(){var e=(this.element_.value-this.element_.min)/(this.element_.max-this.element_.min);0===e?this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE):this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE),this.isIE_||(this.backgroundLower_.style.flex=e,this.backgroundLower_.style.webkitFlex=e,this.backgroundUpper_.style.flex=1-e,this.backgroundUpper_.style.webkitFlex=1-e)},p.prototype.disable=function(){this.element_.disabled=!0},p.prototype.disable=p.prototype.disable,p.prototype.enable=function(){this.element_.disabled=!1},p.prototype.enable=p.prototype.enable,p.prototype.change=function(e){\"undefined\"!=typeof e&&(this.element_.value=e),this.updateValueStyles_()},p.prototype.change=p.prototype.change,p.prototype.init=function(){if(this.element_){if(this.isIE_){var e=document.createElement(\"div\");e.classList.add(this.CssClasses_.IE_CONTAINER),this.element_.parentElement.insertBefore(e,this.element_),this.element_.parentElement.removeChild(this.element_),e.appendChild(this.element_)}else{var t=document.createElement(\"div\");t.classList.add(this.CssClasses_.SLIDER_CONTAINER),this.element_.parentElement.insertBefore(t,this.element_),this.element_.parentElement.removeChild(this.element_),t.appendChild(this.element_);var s=document.createElement(\"div\");s.classList.add(this.CssClasses_.BACKGROUND_FLEX),t.appendChild(s),this.backgroundLower_=document.createElement(\"div\"),this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER),s.appendChild(this.backgroundLower_),this.backgroundUpper_=document.createElement(\"div\"),this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER),s.appendChild(this.backgroundUpper_)}this.boundInputHandler=this.onInput_.bind(this),this.boundChangeHandler=this.onChange_.bind(this),this.boundMouseUpHandler=this.onMouseUp_.bind(this),this.boundContainerMouseDownHandler=this.onContainerMouseDown_.bind(this),this.element_.addEventListener(\"input\",this.boundInputHandler),this.element_.addEventListener(\"change\",this.boundChangeHandler),this.element_.addEventListener(\"mouseup\",this.boundMouseUpHandler),this.element_.parentElement.addEventListener(\"mousedown\",this.boundContainerMouseDownHandler),this.updateValueStyles_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},s.register({constructor:p,classAsString:\"MaterialSlider\",cssClass:\"mdl-js-slider\",widget:!0});var C=function(e){if(this.element_=e,this.textElement_=this.element_.querySelector(\".\"+this.cssClasses_.MESSAGE),this.actionElement_=this.element_.querySelector(\".\"+this.cssClasses_.ACTION),!this.textElement_)throw new Error(\"There must be a message element for a snackbar.\");if(!this.actionElement_)throw new Error(\"There must be an action element for a snackbar.\");this.active=!1,this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.queuedNotifications_=[],this.setActionHidden_(!0)};window.MaterialSnackbar=C,C.prototype.Constant_={ANIMATION_LENGTH:250},C.prototype.cssClasses_={SNACKBAR:\"mdl-snackbar\",MESSAGE:\"mdl-snackbar__text\",ACTION:\"mdl-snackbar__action\",ACTIVE:\"mdl-snackbar--active\"},C.prototype.displaySnackbar_=function(){this.element_.setAttribute(\"aria-hidden\",\"true\"),this.actionHandler_&&(this.actionElement_.textContent=this.actionText_,this.actionElement_.addEventListener(\"click\",this.actionHandler_),\n\tthis.setActionHidden_(!1)),this.textElement_.textContent=this.message_,this.element_.classList.add(this.cssClasses_.ACTIVE),this.element_.setAttribute(\"aria-hidden\",\"false\"),setTimeout(this.cleanup_.bind(this),this.timeout_)},C.prototype.showSnackbar=function(e){if(void 0===e)throw new Error(\"Please provide a data object with at least a message to display.\");if(void 0===e.message)throw new Error(\"Please provide a message to be displayed.\");if(e.actionHandler&&!e.actionText)throw new Error(\"Please provide action text with the handler.\");this.active?this.queuedNotifications_.push(e):(this.active=!0,this.message_=e.message,e.timeout?this.timeout_=e.timeout:this.timeout_=2750,e.actionHandler&&(this.actionHandler_=e.actionHandler),e.actionText&&(this.actionText_=e.actionText),this.displaySnackbar_())},C.prototype.showSnackbar=C.prototype.showSnackbar,C.prototype.checkQueue_=function(){this.queuedNotifications_.length>0&&this.showSnackbar(this.queuedNotifications_.shift())},C.prototype.cleanup_=function(){this.element_.classList.remove(this.cssClasses_.ACTIVE),setTimeout(function(){this.element_.setAttribute(\"aria-hidden\",\"true\"),this.textElement_.textContent=\"\",Boolean(this.actionElement_.getAttribute(\"aria-hidden\"))||(this.setActionHidden_(!0),this.actionElement_.textContent=\"\",this.actionElement_.removeEventListener(\"click\",this.actionHandler_)),this.actionHandler_=void 0,this.message_=void 0,this.actionText_=void 0,this.active=!1,this.checkQueue_()}.bind(this),this.Constant_.ANIMATION_LENGTH)},C.prototype.setActionHidden_=function(e){e?this.actionElement_.setAttribute(\"aria-hidden\",\"true\"):this.actionElement_.removeAttribute(\"aria-hidden\")},s.register({constructor:C,classAsString:\"MaterialSnackbar\",cssClass:\"mdl-js-snackbar\",widget:!0});var u=function(e){this.element_=e,this.init()};window.MaterialSpinner=u,u.prototype.Constant_={MDL_SPINNER_LAYER_COUNT:4},u.prototype.CssClasses_={MDL_SPINNER_LAYER:\"mdl-spinner__layer\",MDL_SPINNER_CIRCLE_CLIPPER:\"mdl-spinner__circle-clipper\",MDL_SPINNER_CIRCLE:\"mdl-spinner__circle\",MDL_SPINNER_GAP_PATCH:\"mdl-spinner__gap-patch\",MDL_SPINNER_LEFT:\"mdl-spinner__left\",MDL_SPINNER_RIGHT:\"mdl-spinner__right\"},u.prototype.createLayer=function(e){var t=document.createElement(\"div\");t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER),t.classList.add(this.CssClasses_.MDL_SPINNER_LAYER+\"-\"+e);var s=document.createElement(\"div\");s.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),s.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);var i=document.createElement(\"div\");i.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);var n=document.createElement(\"div\");n.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER),n.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);for(var a=[s,i,n],l=0;l<a.length;l++){var o=document.createElement(\"div\");o.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE),a[l].appendChild(o)}t.appendChild(s),t.appendChild(i),t.appendChild(n),this.element_.appendChild(t)},u.prototype.createLayer=u.prototype.createLayer,u.prototype.stop=function(){this.element_.classList.remove(\"is-active\")},u.prototype.stop=u.prototype.stop,u.prototype.start=function(){this.element_.classList.add(\"is-active\")},u.prototype.start=u.prototype.start,u.prototype.init=function(){if(this.element_){for(var e=1;e<=this.Constant_.MDL_SPINNER_LAYER_COUNT;e++)this.createLayer(e);this.element_.classList.add(\"is-upgraded\")}},s.register({constructor:u,classAsString:\"MaterialSpinner\",cssClass:\"mdl-js-spinner\",widget:!0});var E=function(e){this.element_=e,this.init()};window.MaterialSwitch=E,E.prototype.Constant_={TINY_TIMEOUT:.001},E.prototype.CssClasses_={INPUT:\"mdl-switch__input\",TRACK:\"mdl-switch__track\",THUMB:\"mdl-switch__thumb\",FOCUS_HELPER:\"mdl-switch__focus-helper\",RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",RIPPLE_CONTAINER:\"mdl-switch__ripple-container\",RIPPLE_CENTER:\"mdl-ripple--center\",RIPPLE:\"mdl-ripple\",IS_FOCUSED:\"is-focused\",IS_DISABLED:\"is-disabled\",IS_CHECKED:\"is-checked\"},E.prototype.onChange_=function(e){this.updateClasses_()},E.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},E.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},E.prototype.onMouseUp_=function(e){this.blur_()},E.prototype.updateClasses_=function(){this.checkDisabled(),this.checkToggleState()},E.prototype.blur_=function(){window.setTimeout(function(){this.inputElement_.blur()}.bind(this),this.Constant_.TINY_TIMEOUT)},E.prototype.checkDisabled=function(){this.inputElement_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},E.prototype.checkDisabled=E.prototype.checkDisabled,E.prototype.checkToggleState=function(){this.inputElement_.checked?this.element_.classList.add(this.CssClasses_.IS_CHECKED):this.element_.classList.remove(this.CssClasses_.IS_CHECKED)},E.prototype.checkToggleState=E.prototype.checkToggleState,E.prototype.disable=function(){this.inputElement_.disabled=!0,this.updateClasses_()},E.prototype.disable=E.prototype.disable,E.prototype.enable=function(){this.inputElement_.disabled=!1,this.updateClasses_()},E.prototype.enable=E.prototype.enable,E.prototype.on=function(){this.inputElement_.checked=!0,this.updateClasses_()},E.prototype.on=E.prototype.on,E.prototype.off=function(){this.inputElement_.checked=!1,this.updateClasses_()},E.prototype.off=E.prototype.off,E.prototype.init=function(){if(this.element_){this.inputElement_=this.element_.querySelector(\".\"+this.CssClasses_.INPUT);var e=document.createElement(\"div\");e.classList.add(this.CssClasses_.TRACK);var t=document.createElement(\"div\");t.classList.add(this.CssClasses_.THUMB);var s=document.createElement(\"span\");if(s.classList.add(this.CssClasses_.FOCUS_HELPER),t.appendChild(s),this.element_.appendChild(e),this.element_.appendChild(t),this.boundMouseUpHandler=this.onMouseUp_.bind(this),this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)){this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS),this.rippleContainerElement_=document.createElement(\"span\"),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT),this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER),this.rippleContainerElement_.addEventListener(\"mouseup\",this.boundMouseUpHandler);var i=document.createElement(\"span\");i.classList.add(this.CssClasses_.RIPPLE),this.rippleContainerElement_.appendChild(i),this.element_.appendChild(this.rippleContainerElement_)}this.boundChangeHandler=this.onChange_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.inputElement_.addEventListener(\"change\",this.boundChangeHandler),this.inputElement_.addEventListener(\"focus\",this.boundFocusHandler),this.inputElement_.addEventListener(\"blur\",this.boundBlurHandler),this.element_.addEventListener(\"mouseup\",this.boundMouseUpHandler),this.updateClasses_(),this.element_.classList.add(\"is-upgraded\")}},s.register({constructor:E,classAsString:\"MaterialSwitch\",cssClass:\"mdl-js-switch\",widget:!0});var m=function(e){this.element_=e,this.init()};window.MaterialTabs=m,m.prototype.Constant_={},m.prototype.CssClasses_={TAB_CLASS:\"mdl-tabs__tab\",PANEL_CLASS:\"mdl-tabs__panel\",ACTIVE_CLASS:\"is-active\",UPGRADED_CLASS:\"is-upgraded\",MDL_JS_RIPPLE_EFFECT:\"mdl-js-ripple-effect\",MDL_RIPPLE_CONTAINER:\"mdl-tabs__ripple-container\",MDL_RIPPLE:\"mdl-ripple\",MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\"},m.prototype.initTabs_=function(){this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)&&this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS),this.tabs_=this.element_.querySelectorAll(\".\"+this.CssClasses_.TAB_CLASS),this.panels_=this.element_.querySelectorAll(\".\"+this.CssClasses_.PANEL_CLASS);for(var t=0;t<this.tabs_.length;t++)new e(this.tabs_[t],this);this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS)},m.prototype.resetTabState_=function(){for(var e=0;e<this.tabs_.length;e++)this.tabs_[e].classList.remove(this.CssClasses_.ACTIVE_CLASS)},m.prototype.resetPanelState_=function(){for(var e=0;e<this.panels_.length;e++)this.panels_[e].classList.remove(this.CssClasses_.ACTIVE_CLASS)},m.prototype.init=function(){this.element_&&this.initTabs_()},s.register({constructor:m,classAsString:\"MaterialTabs\",cssClass:\"mdl-js-tabs\"});var L=function(e){this.element_=e,this.maxRows=this.Constant_.NO_MAX_ROWS,this.init()};window.MaterialTextfield=L,L.prototype.Constant_={NO_MAX_ROWS:-1,MAX_ROWS_ATTRIBUTE:\"maxrows\"},L.prototype.CssClasses_={LABEL:\"mdl-textfield__label\",INPUT:\"mdl-textfield__input\",IS_DIRTY:\"is-dirty\",IS_FOCUSED:\"is-focused\",IS_DISABLED:\"is-disabled\",IS_INVALID:\"is-invalid\",IS_UPGRADED:\"is-upgraded\",HAS_PLACEHOLDER:\"has-placeholder\"},L.prototype.onKeyDown_=function(e){var t=e.target.value.split(\"\\n\").length;13===e.keyCode&&t>=this.maxRows&&e.preventDefault()},L.prototype.onFocus_=function(e){this.element_.classList.add(this.CssClasses_.IS_FOCUSED)},L.prototype.onBlur_=function(e){this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.onReset_=function(e){this.updateClasses_()},L.prototype.updateClasses_=function(){this.checkDisabled(),this.checkValidity(),this.checkDirty(),this.checkFocus()},L.prototype.checkDisabled=function(){this.input_.disabled?this.element_.classList.add(this.CssClasses_.IS_DISABLED):this.element_.classList.remove(this.CssClasses_.IS_DISABLED)},L.prototype.checkDisabled=L.prototype.checkDisabled,L.prototype.checkFocus=function(){Boolean(this.element_.querySelector(\":focus\"))?this.element_.classList.add(this.CssClasses_.IS_FOCUSED):this.element_.classList.remove(this.CssClasses_.IS_FOCUSED)},L.prototype.checkFocus=L.prototype.checkFocus,L.prototype.checkValidity=function(){this.input_.validity&&(this.input_.validity.valid?this.element_.classList.remove(this.CssClasses_.IS_INVALID):this.element_.classList.add(this.CssClasses_.IS_INVALID))},L.prototype.checkValidity=L.prototype.checkValidity,L.prototype.checkDirty=function(){this.input_.value&&this.input_.value.length>0?this.element_.classList.add(this.CssClasses_.IS_DIRTY):this.element_.classList.remove(this.CssClasses_.IS_DIRTY)},L.prototype.checkDirty=L.prototype.checkDirty,L.prototype.disable=function(){this.input_.disabled=!0,this.updateClasses_()},L.prototype.disable=L.prototype.disable,L.prototype.enable=function(){this.input_.disabled=!1,this.updateClasses_()},L.prototype.enable=L.prototype.enable,L.prototype.change=function(e){this.input_.value=e||\"\",this.updateClasses_()},L.prototype.change=L.prototype.change,L.prototype.init=function(){if(this.element_&&(this.label_=this.element_.querySelector(\".\"+this.CssClasses_.LABEL),this.input_=this.element_.querySelector(\".\"+this.CssClasses_.INPUT),this.input_)){this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)&&(this.maxRows=parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE),10),isNaN(this.maxRows)&&(this.maxRows=this.Constant_.NO_MAX_ROWS)),this.input_.hasAttribute(\"placeholder\")&&this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER),this.boundUpdateClassesHandler=this.updateClasses_.bind(this),this.boundFocusHandler=this.onFocus_.bind(this),this.boundBlurHandler=this.onBlur_.bind(this),this.boundResetHandler=this.onReset_.bind(this),this.input_.addEventListener(\"input\",this.boundUpdateClassesHandler),this.input_.addEventListener(\"focus\",this.boundFocusHandler),this.input_.addEventListener(\"blur\",this.boundBlurHandler),this.input_.addEventListener(\"reset\",this.boundResetHandler),this.maxRows!==this.Constant_.NO_MAX_ROWS&&(this.boundKeyDownHandler=this.onKeyDown_.bind(this),this.input_.addEventListener(\"keydown\",this.boundKeyDownHandler));var e=this.element_.classList.contains(this.CssClasses_.IS_INVALID);this.updateClasses_(),this.element_.classList.add(this.CssClasses_.IS_UPGRADED),e&&this.element_.classList.add(this.CssClasses_.IS_INVALID),this.input_.hasAttribute(\"autofocus\")&&(this.element_.focus(),this.checkFocus())}},s.register({constructor:L,classAsString:\"MaterialTextfield\",cssClass:\"mdl-js-textfield\",widget:!0});var I=function(e){this.element_=e,this.init()};window.MaterialTooltip=I,I.prototype.Constant_={},I.prototype.CssClasses_={IS_ACTIVE:\"is-active\",BOTTOM:\"mdl-tooltip--bottom\",LEFT:\"mdl-tooltip--left\",RIGHT:\"mdl-tooltip--right\",TOP:\"mdl-tooltip--top\"},I.prototype.handleMouseEnter_=function(e){var t=e.target.getBoundingClientRect(),s=t.left+t.width/2,i=t.top+t.height/2,n=-1*(this.element_.offsetWidth/2),a=-1*(this.element_.offsetHeight/2);this.element_.classList.contains(this.CssClasses_.LEFT)||this.element_.classList.contains(this.CssClasses_.RIGHT)?(s=t.width/2,0>i+a?(this.element_.style.top=0,this.element_.style.marginTop=0):(this.element_.style.top=i+\"px\",this.element_.style.marginTop=a+\"px\")):0>s+n?(this.element_.style.left=0,this.element_.style.marginLeft=0):(this.element_.style.left=s+\"px\",this.element_.style.marginLeft=n+\"px\"),this.element_.classList.contains(this.CssClasses_.TOP)?this.element_.style.top=t.top-this.element_.offsetHeight-10+\"px\":this.element_.classList.contains(this.CssClasses_.RIGHT)?this.element_.style.left=t.left+t.width+10+\"px\":this.element_.classList.contains(this.CssClasses_.LEFT)?this.element_.style.left=t.left-this.element_.offsetWidth-10+\"px\":this.element_.style.top=t.top+t.height+10+\"px\",this.element_.classList.add(this.CssClasses_.IS_ACTIVE)},I.prototype.handleMouseLeave_=function(){this.element_.classList.remove(this.CssClasses_.IS_ACTIVE)},I.prototype.init=function(){if(this.element_){var e=this.element_.getAttribute(\"for\");e&&(this.forElement_=document.getElementById(e)),this.forElement_&&(this.forElement_.hasAttribute(\"tabindex\")||this.forElement_.setAttribute(\"tabindex\",\"0\"),this.boundMouseEnterHandler=this.handleMouseEnter_.bind(this),this.boundMouseLeaveHandler=this.handleMouseLeave_.bind(this),this.forElement_.addEventListener(\"mouseenter\",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener(\"touchend\",this.boundMouseEnterHandler,!1),this.forElement_.addEventListener(\"mouseleave\",this.boundMouseLeaveHandler,!1),window.addEventListener(\"touchstart\",this.boundMouseLeaveHandler))}},s.register({constructor:I,classAsString:\"MaterialTooltip\",cssClass:\"mdl-tooltip\"});var f=function(e){this.element_=e,this.init()};window.MaterialLayout=f,f.prototype.Constant_={MAX_WIDTH:\"(max-width: 1024px)\",TAB_SCROLL_PIXELS:100,RESIZE_TIMEOUT:100,MENU_ICON:\"&#xE5D2;\",CHEVRON_LEFT:\"chevron_left\",CHEVRON_RIGHT:\"chevron_right\"},f.prototype.Keycodes_={ENTER:13,ESCAPE:27,SPACE:32},f.prototype.Mode_={STANDARD:0,SEAMED:1,WATERFALL:2,SCROLL:3},f.prototype.CssClasses_={CONTAINER:\"mdl-layout__container\",HEADER:\"mdl-layout__header\",DRAWER:\"mdl-layout__drawer\",CONTENT:\"mdl-layout__content\",DRAWER_BTN:\"mdl-layout__drawer-button\",ICON:\"material-icons\",JS_RIPPLE_EFFECT:\"mdl-js-ripple-effect\",RIPPLE_CONTAINER:\"mdl-layout__tab-ripple-container\",RIPPLE:\"mdl-ripple\",RIPPLE_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",HEADER_SEAMED:\"mdl-layout__header--seamed\",HEADER_WATERFALL:\"mdl-layout__header--waterfall\",HEADER_SCROLL:\"mdl-layout__header--scroll\",FIXED_HEADER:\"mdl-layout--fixed-header\",OBFUSCATOR:\"mdl-layout__obfuscator\",TAB_BAR:\"mdl-layout__tab-bar\",TAB_CONTAINER:\"mdl-layout__tab-bar-container\",TAB:\"mdl-layout__tab\",TAB_BAR_BUTTON:\"mdl-layout__tab-bar-button\",TAB_BAR_LEFT_BUTTON:\"mdl-layout__tab-bar-left-button\",TAB_BAR_RIGHT_BUTTON:\"mdl-layout__tab-bar-right-button\",PANEL:\"mdl-layout__tab-panel\",HAS_DRAWER:\"has-drawer\",HAS_TABS:\"has-tabs\",HAS_SCROLLING_HEADER:\"has-scrolling-header\",CASTING_SHADOW:\"is-casting-shadow\",IS_COMPACT:\"is-compact\",IS_SMALL_SCREEN:\"is-small-screen\",IS_DRAWER_OPEN:\"is-visible\",IS_ACTIVE:\"is-active\",IS_UPGRADED:\"is-upgraded\",IS_ANIMATING:\"is-animating\",ON_LARGE_SCREEN:\"mdl-layout--large-screen-only\",ON_SMALL_SCREEN:\"mdl-layout--small-screen-only\"},f.prototype.contentScrollHandler_=function(){if(!this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)){var e=!this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN)||this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);this.content_.scrollTop>0&&!this.header_.classList.contains(this.CssClasses_.IS_COMPACT)?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.header_.classList.add(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING)):this.content_.scrollTop<=0&&this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.header_.classList.remove(this.CssClasses_.IS_COMPACT),e&&this.header_.classList.add(this.CssClasses_.IS_ANIMATING))}},f.prototype.keyboardEventHandler_=function(e){e.keyCode===this.Keycodes_.ESCAPE&&this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)&&this.toggleDrawer()},f.prototype.screenSizeHandler_=function(){this.screenSizeMediaQuery_.matches?this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN):(this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN),this.drawer_&&(this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN)))},f.prototype.drawerToggleHandler_=function(e){if(e&&\"keydown\"===e.type){if(e.keyCode!==this.Keycodes_.SPACE&&e.keyCode!==this.Keycodes_.ENTER)return;e.preventDefault()}this.toggleDrawer()},f.prototype.headerTransitionEndHandler_=function(){this.header_.classList.remove(this.CssClasses_.IS_ANIMATING)},f.prototype.headerClickHandler_=function(){this.header_.classList.contains(this.CssClasses_.IS_COMPACT)&&(this.header_.classList.remove(this.CssClasses_.IS_COMPACT),this.header_.classList.add(this.CssClasses_.IS_ANIMATING))},f.prototype.resetTabState_=function(e){for(var t=0;t<e.length;t++)e[t].classList.remove(this.CssClasses_.IS_ACTIVE)},f.prototype.resetPanelState_=function(e){for(var t=0;t<e.length;t++)e[t].classList.remove(this.CssClasses_.IS_ACTIVE)},f.prototype.toggleDrawer=function(){var e=this.element_.querySelector(\".\"+this.CssClasses_.DRAWER_BTN);this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN),this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN),this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)?(this.drawer_.setAttribute(\"aria-hidden\",\"false\"),e.setAttribute(\"aria-expanded\",\"true\")):(this.drawer_.setAttribute(\"aria-hidden\",\"true\"),e.setAttribute(\"aria-expanded\",\"false\"))},f.prototype.toggleDrawer=f.prototype.toggleDrawer,f.prototype.init=function(){if(this.element_){var e=document.createElement(\"div\");e.classList.add(this.CssClasses_.CONTAINER);var s=this.element_.querySelector(\":focus\");this.element_.parentElement.insertBefore(e,this.element_),this.element_.parentElement.removeChild(this.element_),e.appendChild(this.element_),s&&s.focus();for(var i=this.element_.childNodes,n=i.length,a=0;n>a;a++){var l=i[a];l.classList&&l.classList.contains(this.CssClasses_.HEADER)&&(this.header_=l),l.classList&&l.classList.contains(this.CssClasses_.DRAWER)&&(this.drawer_=l),l.classList&&l.classList.contains(this.CssClasses_.CONTENT)&&(this.content_=l)}window.addEventListener(\"pageshow\",function(e){e.persisted&&(this.element_.style.overflowY=\"hidden\",requestAnimationFrame(function(){this.element_.style.overflowY=\"\"}.bind(this)))}.bind(this),!1),this.header_&&(this.tabBar_=this.header_.querySelector(\".\"+this.CssClasses_.TAB_BAR));var o=this.Mode_.STANDARD;if(this.header_&&(this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)?o=this.Mode_.SEAMED:this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)?(o=this.Mode_.WATERFALL,this.header_.addEventListener(\"transitionend\",this.headerTransitionEndHandler_.bind(this)),this.header_.addEventListener(\"click\",this.headerClickHandler_.bind(this))):this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)&&(o=this.Mode_.SCROLL,e.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER)),o===this.Mode_.STANDARD?(this.header_.classList.add(this.CssClasses_.CASTING_SHADOW),this.tabBar_&&this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW)):o===this.Mode_.SEAMED||o===this.Mode_.SCROLL?(this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW),this.tabBar_&&this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW)):o===this.Mode_.WATERFALL&&(this.content_.addEventListener(\"scroll\",this.contentScrollHandler_.bind(this)),this.contentScrollHandler_())),this.drawer_){var r=this.element_.querySelector(\".\"+this.CssClasses_.DRAWER_BTN);if(!r){r=document.createElement(\"div\"),r.setAttribute(\"aria-expanded\",\"false\"),r.setAttribute(\"role\",\"button\"),r.setAttribute(\"tabindex\",\"0\"),r.classList.add(this.CssClasses_.DRAWER_BTN);var _=document.createElement(\"i\");_.classList.add(this.CssClasses_.ICON),_.innerHTML=this.Constant_.MENU_ICON,r.appendChild(_)}this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)?r.classList.add(this.CssClasses_.ON_LARGE_SCREEN):this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)&&r.classList.add(this.CssClasses_.ON_SMALL_SCREEN),r.addEventListener(\"click\",this.drawerToggleHandler_.bind(this)),r.addEventListener(\"keydown\",this.drawerToggleHandler_.bind(this)),this.element_.classList.add(this.CssClasses_.HAS_DRAWER),this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)?this.header_.insertBefore(r,this.header_.firstChild):this.element_.insertBefore(r,this.content_);var d=document.createElement(\"div\");d.classList.add(this.CssClasses_.OBFUSCATOR),this.element_.appendChild(d),d.addEventListener(\"click\",this.drawerToggleHandler_.bind(this)),this.obfuscator_=d,this.drawer_.addEventListener(\"keydown\",this.keyboardEventHandler_.bind(this)),this.drawer_.setAttribute(\"aria-hidden\",\"true\")}if(this.screenSizeMediaQuery_=window.matchMedia(this.Constant_.MAX_WIDTH),this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this)),this.screenSizeHandler_(),this.header_&&this.tabBar_){this.element_.classList.add(this.CssClasses_.HAS_TABS);var h=document.createElement(\"div\");h.classList.add(this.CssClasses_.TAB_CONTAINER),this.header_.insertBefore(h,this.tabBar_),this.header_.removeChild(this.tabBar_);var c=document.createElement(\"div\");c.classList.add(this.CssClasses_.TAB_BAR_BUTTON),c.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);var p=document.createElement(\"i\");p.classList.add(this.CssClasses_.ICON),p.textContent=this.Constant_.CHEVRON_LEFT,c.appendChild(p),c.addEventListener(\"click\",function(){this.tabBar_.scrollLeft-=this.Constant_.TAB_SCROLL_PIXELS}.bind(this));var C=document.createElement(\"div\");C.classList.add(this.CssClasses_.TAB_BAR_BUTTON),C.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);var u=document.createElement(\"i\");u.classList.add(this.CssClasses_.ICON),u.textContent=this.Constant_.CHEVRON_RIGHT,C.appendChild(u),C.addEventListener(\"click\",function(){this.tabBar_.scrollLeft+=this.Constant_.TAB_SCROLL_PIXELS}.bind(this)),h.appendChild(c),h.appendChild(this.tabBar_),h.appendChild(C);var E=function(){this.tabBar_.scrollLeft>0?c.classList.add(this.CssClasses_.IS_ACTIVE):c.classList.remove(this.CssClasses_.IS_ACTIVE),this.tabBar_.scrollLeft<this.tabBar_.scrollWidth-this.tabBar_.offsetWidth?C.classList.add(this.CssClasses_.IS_ACTIVE):C.classList.remove(this.CssClasses_.IS_ACTIVE)}.bind(this);this.tabBar_.addEventListener(\"scroll\",E),E();var m=function(){this.resizeTimeoutId_&&clearTimeout(this.resizeTimeoutId_),this.resizeTimeoutId_=setTimeout(function(){E(),this.resizeTimeoutId_=null}.bind(this),this.Constant_.RESIZE_TIMEOUT)}.bind(this);window.addEventListener(\"resize\",m),this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)&&this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);for(var L=this.tabBar_.querySelectorAll(\".\"+this.CssClasses_.TAB),I=this.content_.querySelectorAll(\".\"+this.CssClasses_.PANEL),f=0;f<L.length;f++)new t(L[f],L,I,this)}this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}},window.MaterialLayoutTab=t,s.register({constructor:f,classAsString:\"MaterialLayout\",cssClass:\"mdl-js-layout\"});var b=function(e){this.element_=e,this.init()};window.MaterialDataTable=b,b.prototype.Constant_={},b.prototype.CssClasses_={DATA_TABLE:\"mdl-data-table\",SELECTABLE:\"mdl-data-table--selectable\",SELECT_ELEMENT:\"mdl-data-table__select\",IS_SELECTED:\"is-selected\",IS_UPGRADED:\"is-upgraded\"},b.prototype.selectRow_=function(e,t,s){return t?function(){e.checked?t.classList.add(this.CssClasses_.IS_SELECTED):t.classList.remove(this.CssClasses_.IS_SELECTED)}.bind(this):s?function(){var t,i;if(e.checked)for(t=0;t<s.length;t++)i=s[t].querySelector(\"td\").querySelector(\".mdl-checkbox\"),i.MaterialCheckbox.check(),s[t].classList.add(this.CssClasses_.IS_SELECTED);else for(t=0;t<s.length;t++)i=s[t].querySelector(\"td\").querySelector(\".mdl-checkbox\"),i.MaterialCheckbox.uncheck(),s[t].classList.remove(this.CssClasses_.IS_SELECTED)}.bind(this):void 0},b.prototype.createCheckbox_=function(e,t){var i=document.createElement(\"label\"),n=[\"mdl-checkbox\",\"mdl-js-checkbox\",\"mdl-js-ripple-effect\",this.CssClasses_.SELECT_ELEMENT];i.className=n.join(\" \");var a=document.createElement(\"input\");return a.type=\"checkbox\",a.classList.add(\"mdl-checkbox__input\"),e?(a.checked=e.classList.contains(this.CssClasses_.IS_SELECTED),a.addEventListener(\"change\",this.selectRow_(a,e))):t&&a.addEventListener(\"change\",this.selectRow_(a,null,t)),i.appendChild(a),s.upgradeElement(i,\"MaterialCheckbox\"),i},b.prototype.init=function(){if(this.element_){var e=this.element_.querySelector(\"th\"),t=Array.prototype.slice.call(this.element_.querySelectorAll(\"tbody tr\")),s=Array.prototype.slice.call(this.element_.querySelectorAll(\"tfoot tr\")),i=t.concat(s);if(this.element_.classList.contains(this.CssClasses_.SELECTABLE)){var n=document.createElement(\"th\"),a=this.createCheckbox_(null,i);n.appendChild(a),e.parentElement.insertBefore(n,e);for(var l=0;l<i.length;l++){var o=i[l].querySelector(\"td\");if(o){var r=document.createElement(\"td\");if(\"TBODY\"===i[l].parentNode.nodeName.toUpperCase()){var _=this.createCheckbox_(i[l]);r.appendChild(_)}i[l].insertBefore(r,o)}}this.element_.classList.add(this.CssClasses_.IS_UPGRADED)}}},s.register({constructor:b,classAsString:\"MaterialDataTable\",cssClass:\"mdl-js-data-table\"});var y=function(e){this.element_=e,this.init()};window.MaterialRipple=y,y.prototype.Constant_={INITIAL_SCALE:\"scale(0.0001, 0.0001)\",INITIAL_SIZE:\"1px\",INITIAL_OPACITY:\"0.4\",FINAL_OPACITY:\"0\",FINAL_SCALE:\"\"},y.prototype.CssClasses_={RIPPLE_CENTER:\"mdl-ripple--center\",RIPPLE_EFFECT_IGNORE_EVENTS:\"mdl-js-ripple-effect--ignore-events\",RIPPLE:\"mdl-ripple\",IS_ANIMATING:\"is-animating\",IS_VISIBLE:\"is-visible\"},y.prototype.downHandler_=function(e){if(!this.rippleElement_.style.width&&!this.rippleElement_.style.height){var t=this.element_.getBoundingClientRect();this.boundHeight=t.height,this.boundWidth=t.width,this.rippleSize_=2*Math.sqrt(t.width*t.width+t.height*t.height)+2,this.rippleElement_.style.width=this.rippleSize_+\"px\",this.rippleElement_.style.height=this.rippleSize_+\"px\"}if(this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE),\"mousedown\"===e.type&&this.ignoringMouseDown_)this.ignoringMouseDown_=!1;else{\"touchstart\"===e.type&&(this.ignoringMouseDown_=!0);var s=this.getFrameCount();if(s>0)return;this.setFrameCount(1);var i,n,a=e.currentTarget.getBoundingClientRect();if(0===e.clientX&&0===e.clientY)i=Math.round(a.width/2),n=Math.round(a.height/2);else{var l=e.clientX?e.clientX:e.touches[0].clientX,o=e.clientY?e.clientY:e.touches[0].clientY;i=Math.round(l-a.left),n=Math.round(o-a.top)}this.setRippleXY(i,n),this.setRippleStyles(!0),window.requestAnimationFrame(this.animFrameHandler.bind(this))}},y.prototype.upHandler_=function(e){e&&2!==e.detail&&window.setTimeout(function(){this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE)}.bind(this),0)},y.prototype.init=function(){if(this.element_){var e=this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)||(this.rippleElement_=this.element_.querySelector(\".\"+this.CssClasses_.RIPPLE),this.frameCount_=0,this.rippleSize_=0,this.x_=0,this.y_=0,this.ignoringMouseDown_=!1,this.boundDownHandler=this.downHandler_.bind(this),this.element_.addEventListener(\"mousedown\",this.boundDownHandler),this.element_.addEventListener(\"touchstart\",this.boundDownHandler),this.boundUpHandler=this.upHandler_.bind(this),this.element_.addEventListener(\"mouseup\",this.boundUpHandler),this.element_.addEventListener(\"mouseleave\",this.boundUpHandler),this.element_.addEventListener(\"touchend\",this.boundUpHandler),this.element_.addEventListener(\"blur\",this.boundUpHandler),this.getFrameCount=function(){return this.frameCount_},this.setFrameCount=function(e){this.frameCount_=e},this.getRippleElement=function(){return this.rippleElement_},this.setRippleXY=function(e,t){this.x_=e,this.y_=t},this.setRippleStyles=function(t){if(null!==this.rippleElement_){var s,i,n,a=\"translate(\"+this.x_+\"px, \"+this.y_+\"px)\";t?(i=this.Constant_.INITIAL_SCALE,n=this.Constant_.INITIAL_SIZE):(i=this.Constant_.FINAL_SCALE,n=this.rippleSize_+\"px\",e&&(a=\"translate(\"+this.boundWidth/2+\"px, \"+this.boundHeight/2+\"px)\")),s=\"translate(-50%, -50%) \"+a+i,this.rippleElement_.style.webkitTransform=s,this.rippleElement_.style.msTransform=s,this.rippleElement_.style.transform=s,t?this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING):this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING)}},this.animFrameHandler=function(){this.frameCount_-- >0?window.requestAnimationFrame(this.animFrameHandler.bind(this)):this.setRippleStyles(!1)})}},s.register({constructor:y,classAsString:\"MaterialRipple\",cssClass:\"mdl-js-ripple-effect\",widget:!1})}();\n\n\n/***/ },\n/* 833 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ }\n]);\n\n\n/** WEBPACK FOOTER **\n ** vendor.c6beacf4ff958d611fa9.bundle.js\n **/","// For vendors for example jQuery, Lodash, angular2-jwt just import them here unless you plan on\r\n// chunking vendors files for async loading. You would need to import the async loaded vendors\r\n// at the entry point of the async loaded file. Also see custom-typings.d.ts as you also need to\r\n// run `typings install x` where `x` is your module\r\n\r\n// Angular 2\r\nimport 'angular2/platform/browser';\r\nimport 'angular2/platform/common_dom';\r\nimport 'angular2/core';\r\nimport 'angular2/common';\r\nimport 'angular2/http';\r\nimport 'angular2/router';\r\nimport 'material-design-lite';\r\n\r\n// RxJS\r\nimport 'rxjs/add/operator/map';\r\nimport 'rxjs/add/operator/mergeMap';\r\n\r\n// Angular 2 Material 2\r\n// TODO(gdi2290): uncomment when material is fixed\r\n// import '@angular2-material/sidenav';\r\n// import '@angular2-material/toolbar';\r\n// import '@angular2-material/button';\r\n// import '@angular2-material/checkbox';\r\n// import '@angular2-material/radio';\r\n// import '@angular2-material/progress-circle';\r\n// import '@angular2-material/card';\r\n// look in platform/directives and platform/providers\r\n\r\nif ('production' === ENV) {\r\n  // Production\r\n\r\n\r\n} else {\r\n  // Development\r\n\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/vendor.ts\n **/","export interface BrowserNodeGlobal {\n  Object: typeof Object;\n  Array: typeof Array;\n  Map: typeof Map;\n  Set: typeof Set;\n  Date: DateConstructor;\n  RegExp: RegExpConstructor;\n  JSON: typeof JSON;\n  Math: any;  // typeof Math;\n  assert(condition: any): void;\n  Reflect: any;\n  getAngularTestability: Function;\n  getAllAngularTestabilities: Function;\n  getAllAngularRootElements: Function;\n  frameworkStabilizers: Array<Function>;\n  setTimeout: Function;\n  clearTimeout: Function;\n  setInterval: Function;\n  clearInterval: Function;\n  encodeURI: Function;\n}\n\n// TODO(jteplitz602): Load WorkerGlobalScope from lib.webworker.d.ts file #3492\ndeclare var WorkerGlobalScope;\nvar globalScope: BrowserNodeGlobal;\nif (typeof window === 'undefined') {\n  if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n    // TODO: Replace any with WorkerGlobalScope from lib.webworker.d.ts #3492\n    globalScope = <any>self;\n  } else {\n    globalScope = <any>global;\n  }\n} else {\n  globalScope = <any>window;\n}\n\nexport function scheduleMicroTask(fn: Function) {\n  Zone.current.scheduleMicroTask('scheduleMicrotask', fn);\n}\n\nexport const IS_DART = false;\n\n// Need to declare a new variable for global here since TypeScript\n// exports the original value of the symbol.\nvar _global: BrowserNodeGlobal = globalScope;\n\nexport {_global as global};\n\nexport var Type = Function;\n\n/**\n * Runtime representation a type that a Component or other object is instances of.\n *\n * An example of a `Type` is `MyCustomComponent` class, which in JavaScript is be represented by\n * the `MyCustomComponent` constructor function.\n */\nexport interface Type extends Function {}\n\n/**\n * Runtime representation of a type that is constructable (non-abstract).\n */\nexport interface ConcreteType extends Type { new (...args): any; }\n\nexport function getTypeNameForDebugging(type: Type): string {\n  return type['name'];\n}\n\n\nexport var Math = _global.Math;\nexport var Date = _global.Date;\n\nvar _devMode: boolean = true;\nvar _modeLocked: boolean = false;\n\nexport function lockMode() {\n  _modeLocked = true;\n}\n\n/**\n * Disable Angular's development mode, which turns off assertions and other\n * checks within the framework.\n *\n * One important assertion this disables verifies that a change detection pass\n * does not result in additional changes to any bindings (also known as\n * unidirectional data flow).\n */\nexport function enableProdMode() {\n  if (_modeLocked) {\n    // Cannot use BaseException as that ends up importing from facade/lang.\n    throw 'Cannot enable prod mode after platform setup.';\n  }\n  _devMode = false;\n}\n\nexport function assertionsEnabled(): boolean {\n  return _devMode;\n}\n\n// TODO: remove calls to assert in production environment\n// Note: Can't just export this and import in in other files\n// as `assert` is a reserved keyword in Dart\n_global.assert = function assert(condition) {\n  // TODO: to be fixed properly via #2830, noop for now\n};\n\n// This function is needed only to properly support Dart's const expressions\n// see https://github.com/angular/ts2dart/pull/151 for more info\nexport function CONST_EXPR<T>(expr: T): T {\n  return expr;\n}\n\nexport function CONST(): ClassDecorator & PropertyDecorator {\n  return (target) => target;\n}\n\nexport function isPresent(obj: any): boolean {\n  return obj !== undefined && obj !== null;\n}\n\nexport function isBlank(obj: any): boolean {\n  return obj === undefined || obj === null;\n}\n\nexport function isString(obj: any): boolean {\n  return typeof obj === \"string\";\n}\n\nexport function isFunction(obj: any): boolean {\n  return typeof obj === \"function\";\n}\n\nexport function isType(obj: any): boolean {\n  return isFunction(obj);\n}\n\nexport function isStringMap(obj: any): boolean {\n  return typeof obj === 'object' && obj !== null;\n}\n\nexport function isPromise(obj: any): boolean {\n  return obj instanceof (<any>_global).Promise;\n}\n\nexport function isArray(obj: any): boolean {\n  return Array.isArray(obj);\n}\n\nexport function isNumber(obj): boolean {\n  return typeof obj === 'number';\n}\n\nexport function isDate(obj): boolean {\n  return obj instanceof Date && !isNaN(obj.valueOf());\n}\n\nexport function noop() {}\n\nexport function stringify(token): string {\n  if (typeof token === 'string') {\n    return token;\n  }\n\n  if (token === undefined || token === null) {\n    return '' + token;\n  }\n\n  if (token.name) {\n    return token.name;\n  }\n  if (token.overriddenName) {\n    return token.overriddenName;\n  }\n\n  var res = token.toString();\n  var newLineIndex = res.indexOf(\"\\n\");\n  return (newLineIndex === -1) ? res : res.substring(0, newLineIndex);\n}\n\n// serialize / deserialize enum exist only for consistency with dart API\n// enums in typescript don't need to be serialized\n\nexport function serializeEnum(val): number {\n  return val;\n}\n\nexport function deserializeEnum(val, values: Map<number, any>): any {\n  return val;\n}\n\nexport function resolveEnumToken(enumValue, val): string {\n  return enumValue[val];\n}\n\nexport class StringWrapper {\n  static fromCharCode(code: number): string { return String.fromCharCode(code); }\n\n  static charCodeAt(s: string, index: number): number { return s.charCodeAt(index); }\n\n  static split(s: string, regExp: RegExp): string[] { return s.split(regExp); }\n\n  static equals(s: string, s2: string): boolean { return s === s2; }\n\n  static stripLeft(s: string, charVal: string): string {\n    if (s && s.length) {\n      var pos = 0;\n      for (var i = 0; i < s.length; i++) {\n        if (s[i] != charVal) break;\n        pos++;\n      }\n      s = s.substring(pos);\n    }\n    return s;\n  }\n\n  static stripRight(s: string, charVal: string): string {\n    if (s && s.length) {\n      var pos = s.length;\n      for (var i = s.length - 1; i >= 0; i--) {\n        if (s[i] != charVal) break;\n        pos--;\n      }\n      s = s.substring(0, pos);\n    }\n    return s;\n  }\n\n  static replace(s: string, from: string, replace: string): string {\n    return s.replace(from, replace);\n  }\n\n  static replaceAll(s: string, from: RegExp, replace: string): string {\n    return s.replace(from, replace);\n  }\n\n  static slice<T>(s: string, from: number = 0, to: number = null): string {\n    return s.slice(from, to === null ? undefined : to);\n  }\n\n  static replaceAllMapped(s: string, from: RegExp, cb: Function): string {\n    return s.replace(from, function(...matches) {\n      // Remove offset & string from the result array\n      matches.splice(-2, 2);\n      // The callback receives match, p1, ..., pn\n      return cb(matches);\n    });\n  }\n\n  static contains(s: string, substr: string): boolean { return s.indexOf(substr) != -1; }\n\n  static compare(a: string, b: string): number {\n    if (a < b) {\n      return -1;\n    } else if (a > b) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n}\n\nexport class StringJoiner {\n  constructor(public parts = []) {}\n\n  add(part: string): void { this.parts.push(part); }\n\n  toString(): string { return this.parts.join(\"\"); }\n}\n\nexport class NumberParseError extends Error {\n  name: string;\n\n  constructor(public message: string) { super(); }\n\n  toString(): string { return this.message; }\n}\n\n\nexport class NumberWrapper {\n  static toFixed(n: number, fractionDigits: number): string { return n.toFixed(fractionDigits); }\n\n  static equal(a: number, b: number): boolean { return a === b; }\n\n  static parseIntAutoRadix(text: string): number {\n    var result: number = parseInt(text);\n    if (isNaN(result)) {\n      throw new NumberParseError(\"Invalid integer literal when parsing \" + text);\n    }\n    return result;\n  }\n\n  static parseInt(text: string, radix: number): number {\n    if (radix == 10) {\n      if (/^(\\-|\\+)?[0-9]+$/.test(text)) {\n        return parseInt(text, radix);\n      }\n    } else if (radix == 16) {\n      if (/^(\\-|\\+)?[0-9ABCDEFabcdef]+$/.test(text)) {\n        return parseInt(text, radix);\n      }\n    } else {\n      var result: number = parseInt(text, radix);\n      if (!isNaN(result)) {\n        return result;\n      }\n    }\n    throw new NumberParseError(\"Invalid integer literal when parsing \" + text + \" in base \" +\n                               radix);\n  }\n\n  // TODO: NaN is a valid literal but is returned by parseFloat to indicate an error.\n  static parseFloat(text: string): number { return parseFloat(text); }\n\n  static get NaN(): number { return NaN; }\n\n  static isNaN(value: any): boolean { return isNaN(value); }\n\n  static isInteger(value: any): boolean { return Number.isInteger(value); }\n}\n\nexport var RegExp = _global.RegExp;\n\nexport class RegExpWrapper {\n  static create(regExpStr: string, flags: string = ''): RegExp {\n    flags = flags.replace(/g/g, '');\n    return new _global.RegExp(regExpStr, flags + 'g');\n  }\n  static firstMatch(regExp: RegExp, input: string): RegExpExecArray {\n    // Reset multimatch regex state\n    regExp.lastIndex = 0;\n    return regExp.exec(input);\n  }\n  static test(regExp: RegExp, input: string): boolean {\n    regExp.lastIndex = 0;\n    return regExp.test(input);\n  }\n  static matcher(regExp: RegExp, input: string): {\n    re: RegExp;\n    input: string\n  }\n  {\n    // Reset regex state for the case\n    // someone did not loop over all matches\n    // last time.\n    regExp.lastIndex = 0;\n    return {re: regExp, input: input};\n  }\n}\n\nexport class RegExpMatcherWrapper {\n  static next(matcher: {\n    re: RegExp;\n    input: string\n  }): RegExpExecArray {\n    return matcher.re.exec(matcher.input);\n  }\n}\n\nexport class FunctionWrapper {\n  static apply(fn: Function, posArgs: any): any { return fn.apply(null, posArgs); }\n}\n\n// JS has NaN !== NaN\nexport function looseIdentical(a, b): boolean {\n  return a === b || typeof a === \"number\" && typeof b === \"number\" && isNaN(a) && isNaN(b);\n}\n\n// JS considers NaN is the same as NaN for map Key (while NaN !== NaN otherwise)\n// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\nexport function getMapKey<T>(value: T): T {\n  return value;\n}\n\nexport function normalizeBlank(obj: Object): any {\n  return isBlank(obj) ? null : obj;\n}\n\nexport function normalizeBool(obj: boolean): boolean {\n  return isBlank(obj) ? false : obj;\n}\n\nexport function isJsObject(o: any): boolean {\n  return o !== null && (typeof o === \"function\" || typeof o === \"object\");\n}\n\nexport function print(obj: Error | Object) {\n  console.log(obj);\n}\n\n// Can't be all uppercase as our transpiler would think it is a special directive...\nexport class Json {\n  static parse(s: string): Object { return _global.JSON.parse(s); }\n  static stringify(data: Object): string {\n    // Dart doesn't take 3 arguments\n    return _global.JSON.stringify(data, null, 2);\n  }\n}\n\nexport class DateWrapper {\n  static create(year: number, month: number = 1, day: number = 1, hour: number = 0,\n                minutes: number = 0, seconds: number = 0, milliseconds: number = 0): Date {\n    return new Date(year, month - 1, day, hour, minutes, seconds, milliseconds);\n  }\n  static fromISOString(str: string): Date { return new Date(str); }\n  static fromMillis(ms: number): Date { return new Date(ms); }\n  static toMillis(date: Date): number { return date.getTime(); }\n  static now(): Date { return new Date(); }\n  static toJson(date: Date): string { return date.toJSON(); }\n}\n\nexport function setValueOnPath(global: any, path: string, value: any) {\n  var parts = path.split('.');\n  var obj: any = global;\n  while (parts.length > 1) {\n    var name = parts.shift();\n    if (obj.hasOwnProperty(name) && isPresent(obj[name])) {\n      obj = obj[name];\n    } else {\n      obj = obj[name] = {};\n    }\n  }\n  if (obj === undefined || obj === null) {\n    obj = {};\n  }\n  obj[parts.shift()] = value;\n}\n\n// When Symbol.iterator doesn't exist, retrieves the key used in es6-shim\ndeclare var Symbol;\nvar _symbolIterator = null;\nexport function getSymbolIterator(): string | symbol {\n  if (isBlank(_symbolIterator)) {\n    if (isPresent(Symbol) && isPresent(Symbol.iterator)) {\n      _symbolIterator = Symbol.iterator;\n    } else {\n      // es6-shim specific logic\n      var keys = Object.getOwnPropertyNames(Map.prototype);\n      for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (key !== 'entries' && key !== 'size' &&\n            Map.prototype[key] === Map.prototype['entries']) {\n          _symbolIterator = key;\n        }\n      }\n    }\n  }\n  return _symbolIterator;\n}\n\nexport function evalExpression(sourceUrl: string, expr: string, declarations: string,\n                               vars: {[key: string]: any}): any {\n  var fnBody = `${declarations}\\nreturn ${expr}\\n//# sourceURL=${sourceUrl}`;\n  var fnArgNames = [];\n  var fnArgValues = [];\n  for (var argName in vars) {\n    fnArgNames.push(argName);\n    fnArgValues.push(vars[argName]);\n  }\n  return new Function(...fnArgNames.concat(fnBody))(...fnArgValues);\n}\n\nexport function isPrimitive(obj: any): boolean {\n  return !isJsObject(obj);\n}\n\nexport function hasConstructor(value: Object, type: Type): boolean {\n  return value.constructor === type;\n}\n\nexport function bitWiseOr(values: number[]): number {\n  return values.reduce((a, b) => { return a | b; });\n}\n\nexport function bitWiseAnd(values: number[]): number {\n  return values.reduce((a, b) => { return a & b; });\n}\n\nexport function escape(s: string): string {\n  return _global.encodeURI(s);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/lang.ts\n **/","\"use strict\";\nvar root_1 = require('./util/root');\nvar SymbolShim_1 = require('./util/SymbolShim');\nvar toSubscriber_1 = require('./util/toSubscriber');\nvar tryCatch_1 = require('./util/tryCatch');\nvar errorObject_1 = require('./util/errorObject');\n/**\n * A representation of any set of values over any amount of time. This the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nvar Observable = (function () {\n    /**\n     * @constructor\n     * @param {Function} subscribe the function that is\n     * called when the Observable is initially subscribed to. This function is given a Subscriber, to which new values\n     * can be `next`ed, or an `error` method can be called to raise an error, or `complete` can be called to notify\n     * of a successful completion.\n     */\n    function Observable(subscribe) {\n        this._isScalar = false;\n        if (subscribe) {\n            this._subscribe = subscribe;\n        }\n    }\n    /**\n     * @method lift\n     * @param {Operator} operator the operator defining the operation to take on the observable\n     * @returns {Observable} a new observable with the Operator applied\n     * @description creates a new Observable, with this Observable as the source, and the passed\n     * operator defined as the new observable's operator.\n     */\n    Observable.prototype.lift = function (operator) {\n        var observable = new Observable();\n        observable.source = this;\n        observable.operator = operator;\n        return observable;\n    };\n    /**\n     * @method subscribe\n     * @param {PartialObserver|Function} observerOrNext (optional) either an observer defining all functions to be called,\n     *  or the first of three possible handlers, which is the handler for each value emitted from the observable.\n     * @param {Function} error (optional) a handler for a terminal event resulting from an error. If no error handler is provided,\n     *  the error will be thrown as unhandled\n     * @param {Function} complete (optional) a handler for a terminal event resulting from successful completion.\n     * @returns {Subscription} a subscription reference to the registered handlers\n     * @description registers handlers for handling emitted values, error and completions from the observable, and\n     *  executes the observable's subscriber function, which will take action to set up the underlying data stream\n     */\n    Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n        var operator = this.operator;\n        var subscriber = toSubscriber_1.toSubscriber(observerOrNext, error, complete);\n        if (operator) {\n            subscriber.add(this._subscribe(operator.call(subscriber)));\n        }\n        else {\n            subscriber.add(this._subscribe(subscriber));\n        }\n        if (subscriber.syncErrorThrowable) {\n            subscriber.syncErrorThrowable = false;\n            if (subscriber.syncErrorThrown) {\n                throw subscriber.syncErrorValue;\n            }\n        }\n        return subscriber;\n    };\n    /**\n     * @method forEach\n     * @param {Function} next a handler for each value emitted by the observable\n     * @param {any} [thisArg] a `this` context for the `next` handler function\n     * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n     * @returns {Promise} a promise that either resolves on observable completion or\n     *  rejects with the handled error\n     */\n    Observable.prototype.forEach = function (next, thisArg, PromiseCtor) {\n        if (!PromiseCtor) {\n            if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {\n                PromiseCtor = root_1.root.Rx.config.Promise;\n            }\n            else if (root_1.root.Promise) {\n                PromiseCtor = root_1.root.Promise;\n            }\n        }\n        if (!PromiseCtor) {\n            throw new Error('no Promise impl found');\n        }\n        var source = this;\n        return new PromiseCtor(function (resolve, reject) {\n            source.subscribe(function (value) {\n                var result = tryCatch_1.tryCatch(next).call(thisArg, value);\n                if (result === errorObject_1.errorObject) {\n                    reject(errorObject_1.errorObject.e);\n                }\n            }, reject, resolve);\n        });\n    };\n    Observable.prototype._subscribe = function (subscriber) {\n        return this.source.subscribe(subscriber);\n    };\n    /**\n     * @method Symbol.observable\n     * @returns {Observable} this instance of the observable\n     * @description an interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n     */\n    Observable.prototype[SymbolShim_1.SymbolShim.observable] = function () {\n        return this;\n    };\n    // HACK: Since TypeScript inherits static properties too, we have to\n    // fight against TypeScript here so Subject can have a different static create signature\n    /**\n     * @static\n     * @method create\n     * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n     * @returns {Observable} a new cold observable\n     * @description creates a new cold Observable by calling the Observable constructor\n     */\n    Observable.create = function (subscribe) {\n        return new Observable(subscribe);\n    };\n    return Observable;\n}());\nexports.Observable = Observable;\n//# sourceMappingURL=Observable.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/Observable.js\n ** module id = 2\n ** module chunks = 1\n **/","/**\n * @module\n * @description\n * Starting point to import all public core APIs.\n */\nexport * from './src/core/metadata';\nexport * from './src/core/util';\nexport * from './src/core/prod_mode';\nexport * from './src/core/di';\nexport * from './src/facade/facade';\nexport {enableProdMode} from 'angular2/src/facade/lang';\nexport {platform, createNgZone, PlatformRef, ApplicationRef} from './src/core/application_ref';\nexport {\n  APP_ID,\n  APP_COMPONENT,\n  APP_INITIALIZER,\n  PACKAGE_ROOT_URL,\n  PLATFORM_INITIALIZER\n} from './src/core/application_tokens';\nexport * from './src/core/zone';\nexport * from './src/core/render';\nexport * from './src/core/linker';\nexport {DebugElement, DebugNode, asNativeElements} from './src/core/debug/debug_node';\nexport * from './src/core/testability/testability';\nexport * from './src/core/change_detection';\nexport * from './src/core/platform_directives_and_pipes';\nexport * from './src/core/platform_common_providers';\nexport * from './src/core/application_common_providers';\nexport * from './src/core/reflection/reflection';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/core.ts\n **/","import {\n  isJsObject,\n  global,\n  isPresent,\n  isBlank,\n  isArray,\n  getSymbolIterator\n} from 'angular2/src/facade/lang';\n\nexport var Map = global.Map;\nexport var Set = global.Set;\n\n// Safari and Internet Explorer do not support the iterable parameter to the\n// Map constructor.  We work around that by manually adding the items.\nvar createMapFromPairs: {(pairs: any[]): Map<any, any>} = (function() {\n  try {\n    if (new Map(<any>[[1, 2]]).size === 1) {\n      return function createMapFromPairs(pairs: any[]): Map<any, any> { return new Map(pairs); };\n    }\n  } catch (e) {\n  }\n  return function createMapAndPopulateFromPairs(pairs: any[]): Map<any, any> {\n    var map = new Map();\n    for (var i = 0; i < pairs.length; i++) {\n      var pair = pairs[i];\n      map.set(pair[0], pair[1]);\n    }\n    return map;\n  };\n})();\nvar createMapFromMap: {(m: Map<any, any>): Map<any, any>} = (function() {\n  try {\n    if (new Map(<any>new Map())) {\n      return function createMapFromMap(m: Map<any, any>): Map<any, any> { return new Map(<any>m); };\n    }\n  } catch (e) {\n  }\n  return function createMapAndPopulateFromMap(m: Map<any, any>): Map<any, any> {\n    var map = new Map();\n    m.forEach((v, k) => { map.set(k, v); });\n    return map;\n  };\n})();\nvar _clearValues: {(m: Map<any, any>)} = (function() {\n  if ((<any>(new Map()).keys()).next) {\n    return function _clearValues(m: Map<any, any>) {\n      var keyIterator = m.keys();\n      var k;\n      while (!((k = (<any>keyIterator).next()).done)) {\n        m.set(k.value, null);\n      }\n    };\n  } else {\n    return function _clearValuesWithForeEach(m: Map<any, any>) {\n      m.forEach((v, k) => { m.set(k, null); });\n    };\n  }\n})();\n// Safari doesn't implement MapIterator.next(), which is used is Traceur's polyfill of Array.from\n// TODO(mlaval): remove the work around once we have a working polyfill of Array.from\nvar _arrayFromMap: {(m: Map<any, any>, getValues: boolean): any[]} = (function() {\n  try {\n    if ((<any>(new Map()).values()).next) {\n      return function createArrayFromMap(m: Map<any, any>, getValues: boolean): any[] {\n        return getValues ? (<any>Array).from(m.values()) : (<any>Array).from(m.keys());\n      };\n    }\n  } catch (e) {\n  }\n  return function createArrayFromMapWithForeach(m: Map<any, any>, getValues: boolean): any[] {\n    var res = ListWrapper.createFixedSize(m.size), i = 0;\n    m.forEach((v, k) => {\n      res[i] = getValues ? v : k;\n      i++;\n    });\n    return res;\n  };\n})();\n\nexport class MapWrapper {\n  static clone<K, V>(m: Map<K, V>): Map<K, V> { return createMapFromMap(m); }\n  static createFromStringMap<T>(stringMap: {[key: string]: T}): Map<string, T> {\n    var result = new Map<string, T>();\n    for (var prop in stringMap) {\n      result.set(prop, stringMap[prop]);\n    }\n    return result;\n  }\n  static toStringMap<T>(m: Map<string, T>): {[key: string]: T} {\n    var r: {[key: string]: T} = {};\n    m.forEach((v, k) => r[k] = v);\n    return r;\n  }\n  static createFromPairs(pairs: any[]): Map<any, any> { return createMapFromPairs(pairs); }\n  static clearValues(m: Map<any, any>) { _clearValues(m); }\n  static iterable<T>(m: T): T { return m; }\n  static keys<K>(m: Map<K, any>): K[] { return _arrayFromMap(m, false); }\n  static values<V>(m: Map<any, V>): V[] { return _arrayFromMap(m, true); }\n}\n\n/**\n * Wraps Javascript Objects\n */\nexport class StringMapWrapper {\n  static create(): {[k: /*any*/ string]: any} {\n    // Note: We are not using Object.create(null) here due to\n    // performance!\n    // http://jsperf.com/ng2-object-create-null\n    return {};\n  }\n  static contains(map: {[key: string]: any}, key: string): boolean {\n    return map.hasOwnProperty(key);\n  }\n  static get<V>(map: {[key: string]: V}, key: string): V {\n    return map.hasOwnProperty(key) ? map[key] : undefined;\n  }\n  static set<V>(map: {[key: string]: V}, key: string, value: V) { map[key] = value; }\n  static keys(map: {[key: string]: any}): string[] { return Object.keys(map); }\n  static values<T>(map: {[key: string]: T}): T[] {\n    return Object.keys(map).reduce((r, a) => {\n      r.push(map[a]);\n      return r;\n    }, []);\n  }\n  static isEmpty(map: {[key: string]: any}): boolean {\n    for (var prop in map) {\n      return false;\n    }\n    return true;\n  }\n  static delete (map: {[key: string]: any}, key: string) { delete map[key]; }\n  static forEach<K, V>(map: {[key: string]: V}, callback: /*(V, K) => void*/ Function) {\n    for (var prop in map) {\n      if (map.hasOwnProperty(prop)) {\n        callback(map[prop], prop);\n      }\n    }\n  }\n\n  static merge<V>(m1: {[key: string]: V}, m2: {[key: string]: V}): {[key: string]: V} {\n    var m: {[key: string]: V} = {};\n\n    for (var attr in m1) {\n      if (m1.hasOwnProperty(attr)) {\n        m[attr] = m1[attr];\n      }\n    }\n\n    for (var attr in m2) {\n      if (m2.hasOwnProperty(attr)) {\n        m[attr] = m2[attr];\n      }\n    }\n\n    return m;\n  }\n\n  static equals<V>(m1: {[key: string]: V}, m2: {[key: string]: V}): boolean {\n    var k1 = Object.keys(m1);\n    var k2 = Object.keys(m2);\n    if (k1.length != k2.length) {\n      return false;\n    }\n    var key;\n    for (var i = 0; i < k1.length; i++) {\n      key = k1[i];\n      if (m1[key] !== m2[key]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\n/**\n * A boolean-valued function over a value, possibly including context information\n * regarding that value's position in an array.\n */\nexport interface Predicate<T> { (value: T, index?: number, array?: T[]): boolean; }\n\nexport class ListWrapper {\n  // JS has no way to express a statically fixed size list, but dart does so we\n  // keep both methods.\n  static createFixedSize(size: number): any[] { return new Array(size); }\n  static createGrowableSize(size: number): any[] { return new Array(size); }\n  static clone<T>(array: T[]): T[] { return array.slice(0); }\n  static createImmutable<T>(array: T[]): T[] {\n    var result = ListWrapper.clone(array);\n    Object.seal(result);\n    return result;\n  }\n  static forEachWithIndex<T>(array: T[], fn: (t: T, n: number) => void) {\n    for (var i = 0; i < array.length; i++) {\n      fn(array[i], i);\n    }\n  }\n  static first<T>(array: T[]): T {\n    if (!array) return null;\n    return array[0];\n  }\n  static last<T>(array: T[]): T {\n    if (!array || array.length == 0) return null;\n    return array[array.length - 1];\n  }\n  static indexOf<T>(array: T[], value: T, startIndex: number = 0): number {\n    return array.indexOf(value, startIndex);\n  }\n  static contains<T>(list: T[], el: T): boolean { return list.indexOf(el) !== -1; }\n  static reversed<T>(array: T[]): T[] {\n    var a = ListWrapper.clone(array);\n    return a.reverse();\n  }\n  static concat(a: any[], b: any[]): any[] { return a.concat(b); }\n  static insert<T>(list: T[], index: number, value: T) { list.splice(index, 0, value); }\n  static removeAt<T>(list: T[], index: number): T {\n    var res = list[index];\n    list.splice(index, 1);\n    return res;\n  }\n  static removeAll<T>(list: T[], items: T[]) {\n    for (var i = 0; i < items.length; ++i) {\n      var index = list.indexOf(items[i]);\n      list.splice(index, 1);\n    }\n  }\n  static remove<T>(list: T[], el: T): boolean {\n    var index = list.indexOf(el);\n    if (index > -1) {\n      list.splice(index, 1);\n      return true;\n    }\n    return false;\n  }\n  static clear(list: any[]) { list.length = 0; }\n  static isEmpty(list: any[]): boolean { return list.length == 0; }\n  static fill(list: any[], value: any, start: number = 0, end: number = null) {\n    list.fill(value, start, end === null ? list.length : end);\n  }\n  static equals(a: any[], b: any[]): boolean {\n    if (a.length != b.length) return false;\n    for (var i = 0; i < a.length; ++i) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  static slice<T>(l: T[], from: number = 0, to: number = null): T[] {\n    return l.slice(from, to === null ? undefined : to);\n  }\n  static splice<T>(l: T[], from: number, length: number): T[] { return l.splice(from, length); }\n  static sort<T>(l: T[], compareFn?: (a: T, b: T) => number) {\n    if (isPresent(compareFn)) {\n      l.sort(compareFn);\n    } else {\n      l.sort();\n    }\n  }\n  static toString<T>(l: T[]): string { return l.toString(); }\n  static toJSON<T>(l: T[]): string { return JSON.stringify(l); }\n\n  static maximum<T>(list: T[], predicate: (t: T) => number): T {\n    if (list.length == 0) {\n      return null;\n    }\n    var solution = null;\n    var maxValue = -Infinity;\n    for (var index = 0; index < list.length; index++) {\n      var candidate = list[index];\n      if (isBlank(candidate)) {\n        continue;\n      }\n      var candidateValue = predicate(candidate);\n      if (candidateValue > maxValue) {\n        solution = candidate;\n        maxValue = candidateValue;\n      }\n    }\n    return solution;\n  }\n\n  static isImmutable(list: any[]): boolean { return Object.isSealed(list); }\n}\n\nexport function isListLikeIterable(obj: any): boolean {\n  if (!isJsObject(obj)) return false;\n  return isArray(obj) ||\n         (!(obj instanceof Map) &&      // JS Map are iterables but return entries as [k, v]\n          getSymbolIterator() in obj);  // JS Iterable have a Symbol.iterator prop\n}\n\nexport function areIterablesEqual(a: any, b: any, comparator: Function): boolean {\n  var iterator1 = a[getSymbolIterator()]();\n  var iterator2 = b[getSymbolIterator()]();\n\n  while (true) {\n    let item1 = iterator1.next();\n    let item2 = iterator2.next();\n    if (item1.done && item2.done) return true;\n    if (item1.done || item2.done) return false;\n    if (!comparator(item1.value, item2.value)) return false;\n  }\n}\n\nexport function iterateListLike(obj: any, fn: Function) {\n  if (isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      fn(obj[i]);\n    }\n  } else {\n    var iterator = obj[getSymbolIterator()]();\n    var item;\n    while (!((item = iterator.next()).done)) {\n      fn(item.value);\n    }\n  }\n}\n\n// Safari and Internet Explorer do not support the iterable parameter to the\n// Set constructor.  We work around that by manually adding the items.\nvar createSetFromList: {(lst: any[]): Set<any>} = (function() {\n  var test = new Set([1, 2, 3]);\n  if (test.size === 3) {\n    return function createSetFromList(lst: any[]): Set<any> { return new Set(lst); };\n  } else {\n    return function createSetAndPopulateFromList(lst: any[]): Set<any> {\n      var res = new Set(lst);\n      if (res.size !== lst.length) {\n        for (var i = 0; i < lst.length; i++) {\n          res.add(lst[i]);\n        }\n      }\n      return res;\n    };\n  }\n})();\nexport class SetWrapper {\n  static createFromList<T>(lst: T[]): Set<T> { return createSetFromList(lst); }\n  static has<T>(s: Set<T>, key: T): boolean { return s.has(key); }\n  static delete<K>(m: Set<K>, k: K) { m.delete(k); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/collection.ts\n **/","import {BaseWrappedException} from './base_wrapped_exception';\nimport {ExceptionHandler} from './exception_handler';\n\nexport {ExceptionHandler} from './exception_handler';\n\nexport class BaseException extends Error {\n  public stack: any;\n  constructor(public message: string = \"--\") {\n    super(message);\n    this.stack = (<any>new Error(message)).stack;\n  }\n\n  toString(): string { return this.message; }\n}\n\n/**\n * Wraps an exception and provides additional context or information.\n */\nexport class WrappedException extends BaseWrappedException {\n  private _wrapperStack: any;\n\n  constructor(private _wrapperMessage: string, private _originalException, private _originalStack?,\n              private _context?) {\n    super(_wrapperMessage);\n    this._wrapperStack = (<any>new Error(_wrapperMessage)).stack;\n  }\n\n  get wrapperMessage(): string { return this._wrapperMessage; }\n\n  get wrapperStack(): any { return this._wrapperStack; }\n\n\n  get originalException(): any { return this._originalException; }\n\n  get originalStack(): any { return this._originalStack; }\n\n\n  get context(): any { return this._context; }\n\n  get message(): string { return ExceptionHandler.exceptionToString(this); }\n\n  toString(): string { return this.message; }\n}\n\nexport function makeTypeError(message?: string): Error {\n  return new TypeError(message);\n}\n\nexport function unimplemented(): any {\n  throw new BaseException('unimplemented');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/exceptions.ts\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isFunction_1 = require('./util/isFunction');\nvar Subscription_1 = require('./Subscription');\nvar rxSubscriber_1 = require('./symbol/rxSubscriber');\nvar Observer_1 = require('./Observer');\nvar Subscriber = (function (_super) {\n    __extends(Subscriber, _super);\n    function Subscriber(destinationOrNext, error, complete) {\n        _super.call(this);\n        this.syncErrorValue = null;\n        this.syncErrorThrown = false;\n        this.syncErrorThrowable = false;\n        this.isStopped = false;\n        switch (arguments.length) {\n            case 0:\n                this.destination = Observer_1.empty;\n                break;\n            case 1:\n                if (!destinationOrNext) {\n                    this.destination = Observer_1.empty;\n                    break;\n                }\n                if (typeof destinationOrNext === 'object') {\n                    if (destinationOrNext instanceof Subscriber) {\n                        this.destination = destinationOrNext;\n                    }\n                    else {\n                        this.syncErrorThrowable = true;\n                        this.destination = new SafeSubscriber(this, destinationOrNext);\n                    }\n                    break;\n                }\n            default:\n                this.syncErrorThrowable = true;\n                this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);\n                break;\n        }\n    }\n    Subscriber.create = function (next, error, complete) {\n        var subscriber = new Subscriber(next, error, complete);\n        subscriber.syncErrorThrowable = false;\n        return subscriber;\n    };\n    Subscriber.prototype.next = function (value) {\n        if (!this.isStopped) {\n            this._next(value);\n        }\n    };\n    Subscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._error(err);\n        }\n    };\n    Subscriber.prototype.complete = function () {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._complete();\n        }\n    };\n    Subscriber.prototype.unsubscribe = function () {\n        if (this.isUnsubscribed) {\n            return;\n        }\n        this.isStopped = true;\n        _super.prototype.unsubscribe.call(this);\n    };\n    Subscriber.prototype._next = function (value) {\n        this.destination.next(value);\n    };\n    Subscriber.prototype._error = function (err) {\n        this.destination.error(err);\n        this.unsubscribe();\n    };\n    Subscriber.prototype._complete = function () {\n        this.destination.complete();\n        this.unsubscribe();\n    };\n    Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () {\n        return this;\n    };\n    return Subscriber;\n}(Subscription_1.Subscription));\nexports.Subscriber = Subscriber;\nvar SafeSubscriber = (function (_super) {\n    __extends(SafeSubscriber, _super);\n    function SafeSubscriber(_parent, observerOrNext, error, complete) {\n        _super.call(this);\n        this._parent = _parent;\n        var next;\n        var context = this;\n        if (isFunction_1.isFunction(observerOrNext)) {\n            next = observerOrNext;\n        }\n        else if (observerOrNext) {\n            context = observerOrNext;\n            next = observerOrNext.next;\n            error = observerOrNext.error;\n            complete = observerOrNext.complete;\n        }\n        this._context = context;\n        this._next = next;\n        this._error = error;\n        this._complete = complete;\n    }\n    SafeSubscriber.prototype.next = function (value) {\n        if (!this.isStopped && this._next) {\n            var _parent = this._parent;\n            if (!_parent.syncErrorThrowable) {\n                this.__tryOrUnsub(this._next, value);\n            }\n            else if (this.__tryOrSetError(_parent, this._next, value)) {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            var _parent = this._parent;\n            if (this._error) {\n                if (!_parent.syncErrorThrowable) {\n                    this.__tryOrUnsub(this._error, err);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parent, this._error, err);\n                    this.unsubscribe();\n                }\n            }\n            else if (!_parent.syncErrorThrowable) {\n                this.unsubscribe();\n                throw err;\n            }\n            else {\n                _parent.syncErrorValue = err;\n                _parent.syncErrorThrown = true;\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.complete = function () {\n        if (!this.isStopped) {\n            var _parent = this._parent;\n            if (this._complete) {\n                if (!_parent.syncErrorThrowable) {\n                    this.__tryOrUnsub(this._complete);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parent, this._complete);\n                    this.unsubscribe();\n                }\n            }\n            else {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            this.unsubscribe();\n            throw err;\n        }\n    };\n    SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            parent.syncErrorValue = err;\n            parent.syncErrorThrown = true;\n            return true;\n        }\n        return false;\n    };\n    SafeSubscriber.prototype._unsubscribe = function () {\n        var _parent = this._parent;\n        this._context = null;\n        this._parent = null;\n        _parent.unsubscribe();\n    };\n    return SafeSubscriber;\n}(Subscriber));\n//# sourceMappingURL=Subscriber.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/Subscriber.js\n ** module id = 7\n ** module chunks = 1\n **/","/**\n * @module\n * @description\n * The `di` module provides dependency injection container services.\n */\n\nexport {\n  InjectMetadata,\n  OptionalMetadata,\n  InjectableMetadata,\n  SelfMetadata,\n  HostMetadata,\n  SkipSelfMetadata,\n  DependencyMetadata\n} from './di/metadata';\n\n// we have to reexport * because Dart and TS export two different sets of types\nexport * from './di/decorators';\n\nexport {forwardRef, resolveForwardRef, ForwardRefFn} from './di/forward_ref';\nexport {Injector} from './di/injector';\nexport {\n  Binding,\n  ProviderBuilder,\n  ResolvedBinding,\n  ResolvedFactory,\n  Dependency,\n  bind,\n\n  Provider,\n  ResolvedProvider,\n  provide\n} from './di/provider';\nexport {Key} from './di/key';\nexport {\n  NoProviderError,\n  AbstractProviderError,\n  CyclicDependencyError,\n  InstantiationError,\n  InvalidProviderError,\n  NoAnnotationError,\n  OutOfBoundsError\n} from './di/exceptions';\nexport {OpaqueToken} from './di/opaque_token';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di.ts\n **/","import {global, noop} from 'angular2/src/facade/lang';\nexport {PromiseWrapper, PromiseCompleter} from 'angular2/src/facade/promise';\n\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\n\nimport {PromiseObservable} from 'rxjs/observable/PromiseObservable';\nimport {toPromise} from 'rxjs/operator/toPromise';\n\nexport {Observable} from 'rxjs/Observable';\nexport {Subject} from 'rxjs/Subject';\n\nexport class TimerWrapper {\n  static setTimeout(fn: (...args: any[]) => void, millis: number): number {\n    return global.setTimeout(fn, millis);\n  }\n  static clearTimeout(id: number): void { global.clearTimeout(id); }\n\n  static setInterval(fn: (...args: any[]) => void, millis: number): number {\n    return global.setInterval(fn, millis);\n  }\n  static clearInterval(id: number): void { global.clearInterval(id); }\n}\n\nexport class ObservableWrapper {\n  // TODO(vsavkin): when we use rxnext, try inferring the generic type from the first arg\n  static subscribe<T>(emitter: any, onNext: (value: T) => void, onError?: (exception: any) => void,\n                      onComplete: () => void = () => {}): Object {\n    onError = (typeof onError === \"function\") && onError || noop;\n    onComplete = (typeof onComplete === \"function\") && onComplete || noop;\n    return emitter.subscribe({next: onNext, error: onError, complete: onComplete});\n  }\n\n  static isObservable(obs: any): boolean { return !!obs.subscribe; }\n\n  /**\n   * Returns whether `obs` has any subscribers listening to events.\n   */\n  static hasSubscribers(obs: EventEmitter<any>): boolean { return obs.observers.length > 0; }\n\n  static dispose(subscription: any) { subscription.unsubscribe(); }\n\n  /**\n   * @deprecated - use callEmit() instead\n   */\n  static callNext(emitter: EventEmitter<any>, value: any) { emitter.next(value); }\n\n  static callEmit(emitter: EventEmitter<any>, value: any) { emitter.emit(value); }\n\n  static callError(emitter: EventEmitter<any>, error: any) { emitter.error(error); }\n\n  static callComplete(emitter: EventEmitter<any>) { emitter.complete(); }\n\n  static fromPromise(promise: Promise<any>): Observable<any> {\n    return PromiseObservable.create(promise);\n  }\n\n  static toPromise(obj: Observable<any>): Promise<any> { return toPromise.call(obj); }\n}\n\n/**\n * Use by directives and components to emit custom Events.\n *\n * ### Examples\n *\n * In the following example, `Zippy` alternatively emits `open` and `close` events when its\n * title gets clicked:\n *\n * ```\n * @Component({\n *   selector: 'zippy',\n *   template: `\n *   <div class=\"zippy\">\n *     <div (click)=\"toggle()\">Toggle</div>\n *     <div [hidden]=\"!visible\">\n *       <ng-content></ng-content>\n *     </div>\n *  </div>`})\n * export class Zippy {\n *   visible: boolean = true;\n *   @Output() open: EventEmitter<any> = new EventEmitter();\n *   @Output() close: EventEmitter<any> = new EventEmitter();\n *\n *   toggle() {\n *     this.visible = !this.visible;\n *     if (this.visible) {\n *       this.open.emit(null);\n *     } else {\n *       this.close.emit(null);\n *     }\n *   }\n * }\n * ```\n *\n * Use Rx.Observable but provides an adapter to make it work as specified here:\n * https://github.com/jhusain/observable-spec\n *\n * Once a reference implementation of the spec is available, switch to it.\n */\nexport class EventEmitter<T> extends Subject<T> {\n  /** @internal */\n  _isAsync: boolean;\n\n  /**\n   * Creates an instance of [EventEmitter], which depending on [isAsync],\n   * delivers events synchronously or asynchronously.\n   */\n  constructor(isAsync: boolean = true) {\n    super();\n    this._isAsync = isAsync;\n  }\n\n  emit(value: T) { super.next(value); }\n\n  /**\n   * @deprecated - use .emit(value) instead\n   */\n  next(value: any) { super.next(value); }\n\n  subscribe(generatorOrNext?: any, error?: any, complete?: any): any {\n    let schedulerFn;\n    let errorFn = (err: any) => null;\n    let completeFn = () => null;\n\n    if (generatorOrNext && typeof generatorOrNext === 'object') {\n      schedulerFn = this._isAsync ? (value) => { setTimeout(() => generatorOrNext.next(value)); } :\n                                    (value) => { generatorOrNext.next(value); };\n\n      if (generatorOrNext.error) {\n        errorFn = this._isAsync ? (err) => { setTimeout(() => generatorOrNext.error(err)); } :\n                                  (err) => { generatorOrNext.error(err); };\n      }\n\n      if (generatorOrNext.complete) {\n        completeFn = this._isAsync ? () => { setTimeout(() => generatorOrNext.complete()); } :\n                                     () => { generatorOrNext.complete(); };\n      }\n    } else {\n      schedulerFn = this._isAsync ? (value) => { setTimeout(() => generatorOrNext(value)); } :\n                                    (value) => { generatorOrNext(value); };\n\n      if (error) {\n        errorFn =\n            this._isAsync ? (err) => { setTimeout(() => error(err)); } : (err) => { error(err); };\n      }\n\n      if (complete) {\n        completeFn =\n            this._isAsync ? () => { setTimeout(() => complete()); } : () => { complete(); };\n      }\n    }\n\n    return super.subscribe(schedulerFn, errorFn, completeFn);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/async.ts\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('./Subscriber');\nvar OuterSubscriber = (function (_super) {\n    __extends(OuterSubscriber, _super);\n    function OuterSubscriber() {\n        _super.apply(this, arguments);\n    }\n    OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.destination.next(innerValue);\n    };\n    OuterSubscriber.prototype.notifyError = function (error, innerSub) {\n        this.destination.error(error);\n    };\n    OuterSubscriber.prototype.notifyComplete = function (innerSub) {\n        this.destination.complete();\n    };\n    return OuterSubscriber;\n}(Subscriber_1.Subscriber));\nexports.OuterSubscriber = OuterSubscriber;\n//# sourceMappingURL=OuterSubscriber.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/OuterSubscriber.js\n ** module id = 14\n ** module chunks = 1\n **/","\"use strict\";\nvar root_1 = require('./root');\nvar isArray_1 = require('./isArray');\nvar isPromise_1 = require('./isPromise');\nvar Observable_1 = require('../Observable');\nvar SymbolShim_1 = require('../util/SymbolShim');\nvar InnerSubscriber_1 = require('../InnerSubscriber');\nfunction subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {\n    var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n    if (destination.isUnsubscribed) {\n        return;\n    }\n    if (result instanceof Observable_1.Observable) {\n        if (result._isScalar) {\n            destination.next(result.value);\n            destination.complete();\n            return;\n        }\n        else {\n            return result.subscribe(destination);\n        }\n    }\n    if (isArray_1.isArray(result)) {\n        for (var i = 0, len = result.length; i < len && !destination.isUnsubscribed; i++) {\n            destination.next(result[i]);\n        }\n        if (!destination.isUnsubscribed) {\n            destination.complete();\n        }\n    }\n    else if (isPromise_1.isPromise(result)) {\n        result.then(function (value) {\n            if (!destination.isUnsubscribed) {\n                destination.next(value);\n                destination.complete();\n            }\n        }, function (err) { return destination.error(err); })\n            .then(null, function (err) {\n            // Escaping the Promise trap: globally throw unhandled errors\n            root_1.root.setTimeout(function () { throw err; });\n        });\n        return destination;\n    }\n    else if (typeof result[SymbolShim_1.SymbolShim.iterator] === 'function') {\n        for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n            var item = result_1[_i];\n            destination.next(item);\n            if (destination.isUnsubscribed) {\n                break;\n            }\n        }\n        if (!destination.isUnsubscribed) {\n            destination.complete();\n        }\n    }\n    else if (typeof result[SymbolShim_1.SymbolShim.observable] === 'function') {\n        var obs = result[SymbolShim_1.SymbolShim.observable]();\n        if (typeof obs.subscribe !== 'function') {\n            destination.error('invalid observable');\n        }\n        else {\n            return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));\n        }\n    }\n    else {\n        destination.error(new TypeError('unknown type returned'));\n    }\n}\nexports.subscribeToResult = subscribeToResult;\n//# sourceMappingURL=subscribeToResult.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/subscribeToResult.js\n ** module id = 15\n ** module chunks = 1\n **/","\"use strict\";\n// typeof any so that it we don't have to cast when comparing a result to the error object\nexports.errorObject = { e: {} };\n//# sourceMappingURL=errorObject.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/errorObject.js\n ** module id = 19\n ** module chunks = 1\n **/","import {isBlank, Type} from 'angular2/src/facade/lang';\n\nexport var DOM: DomAdapter = null;\n\nexport function setRootDomAdapter(adapter: DomAdapter) {\n  if (isBlank(DOM)) {\n    DOM = adapter;\n  }\n}\n\n/* tslint:disable:requireParameterType */\n/**\n * Provides DOM operations in an environment-agnostic way.\n */\nexport abstract class DomAdapter {\n  abstract hasProperty(element, name: string): boolean;\n  abstract setProperty(el: Element, name: string, value: any);\n  abstract getProperty(el: Element, name: string): any;\n  abstract invoke(el: Element, methodName: string, args: any[]): any;\n\n  abstract logError(error);\n  abstract log(error);\n  abstract logGroup(error);\n  abstract logGroupEnd();\n\n  /** @deprecated */\n  abstract getXHR(): Type;\n\n  /**\n   * Maps attribute names to their corresponding property names for cases\n   * where attribute name doesn't match property name.\n   */\n  get attrToPropMap(): {[key: string]: string} { return this._attrToPropMap; };\n  set attrToPropMap(value: {[key: string]: string}) { this._attrToPropMap = value; };\n  /** @internal */\n  _attrToPropMap: {[key: string]: string};\n\n  abstract parse(templateHtml: string);\n  abstract query(selector: string): any;\n  abstract querySelector(el, selector: string): HTMLElement;\n  abstract querySelectorAll(el, selector: string): any[];\n  abstract on(el, evt, listener);\n  abstract onAndCancel(el, evt, listener): Function;\n  abstract dispatchEvent(el, evt);\n  abstract createMouseEvent(eventType): any;\n  abstract createEvent(eventType: string): any;\n  abstract preventDefault(evt);\n  abstract isPrevented(evt): boolean;\n  abstract getInnerHTML(el): string;\n  abstract getOuterHTML(el): string;\n  abstract nodeName(node): string;\n  abstract nodeValue(node): string;\n  abstract type(node): string;\n  abstract content(node): any;\n  abstract firstChild(el): Node;\n  abstract nextSibling(el): Node;\n  abstract parentElement(el): Node;\n  abstract childNodes(el): Node[];\n  abstract childNodesAsList(el): Node[];\n  abstract clearNodes(el);\n  abstract appendChild(el, node);\n  abstract removeChild(el, node);\n  abstract replaceChild(el, newNode, oldNode);\n  abstract remove(el): Node;\n  abstract insertBefore(el, node);\n  abstract insertAllBefore(el, nodes);\n  abstract insertAfter(el, node);\n  abstract setInnerHTML(el, value);\n  abstract getText(el): string;\n  abstract setText(el, value: string);\n  abstract getValue(el): string;\n  abstract setValue(el, value: string);\n  abstract getChecked(el): boolean;\n  abstract setChecked(el, value: boolean);\n  abstract createComment(text: string): any;\n  abstract createTemplate(html): HTMLElement;\n  abstract createElement(tagName, doc?): HTMLElement;\n  abstract createElementNS(ns: string, tagName: string, doc?): Element;\n  abstract createTextNode(text: string, doc?): Text;\n  abstract createScriptTag(attrName: string, attrValue: string, doc?): HTMLElement;\n  abstract createStyleElement(css: string, doc?): HTMLStyleElement;\n  abstract createShadowRoot(el): any;\n  abstract getShadowRoot(el): any;\n  abstract getHost(el): any;\n  abstract getDistributedNodes(el): Node[];\n  abstract clone /*<T extends Node>*/ (node: Node /*T*/): Node /*T*/;\n  abstract getElementsByClassName(element, name: string): HTMLElement[];\n  abstract getElementsByTagName(element, name: string): HTMLElement[];\n  abstract classList(element): any[];\n  abstract addClass(element, className: string);\n  abstract removeClass(element, className: string);\n  abstract hasClass(element, className: string): boolean;\n  abstract setStyle(element, styleName: string, styleValue: string);\n  abstract removeStyle(element, styleName: string);\n  abstract getStyle(element, styleName: string): string;\n  abstract hasStyle(element, styleName: string, styleValue?: string): boolean;\n  abstract tagName(element): string;\n  abstract attributeMap(element): Map<string, string>;\n  abstract hasAttribute(element, attribute: string): boolean;\n  abstract hasAttributeNS(element, ns: string, attribute: string): boolean;\n  abstract getAttribute(element, attribute: string): string;\n  abstract getAttributeNS(element, ns: string, attribute: string): string;\n  abstract setAttribute(element, name: string, value: string);\n  abstract setAttributeNS(element, ns: string, name: string, value: string);\n  abstract removeAttribute(element, attribute: string);\n  abstract removeAttributeNS(element, ns: string, attribute: string);\n  abstract templateAwareRoot(el);\n  abstract createHtmlDocument(): HTMLDocument;\n  abstract defaultDoc(): HTMLDocument;\n  abstract getBoundingClientRect(el);\n  abstract getTitle(): string;\n  abstract setTitle(newTitle: string);\n  abstract elementMatches(n, selector: string): boolean;\n  abstract isTemplateElement(el: any): boolean;\n  abstract isTextNode(node): boolean;\n  abstract isCommentNode(node): boolean;\n  abstract isElementNode(node): boolean;\n  abstract hasShadowRoot(node): boolean;\n  abstract isShadowRoot(node): boolean;\n  abstract importIntoDoc /*<T extends Node>*/ (node: Node /*T*/): Node /*T*/;\n  abstract adoptNode /*<T extends Node>*/ (node: Node /*T*/): Node /*T*/;\n  abstract getHref(element): string;\n  abstract getEventKey(event): string;\n  abstract resolveAndSetHref(element, baseUrl: string, href: string);\n  abstract supportsDOMEvents(): boolean;\n  abstract supportsNativeShadowDOM(): boolean;\n  abstract getGlobalEventTarget(target: string): any;\n  abstract getHistory(): History;\n  abstract getLocation(): Location;\n  abstract getBaseHref(): string;\n  abstract resetBaseElement(): void;\n  abstract getUserAgent(): string;\n  abstract setData(element, name: string, value: string);\n  abstract getComputedStyle(element): any;\n  abstract getData(element, name: string): string;\n  abstract setGlobalVar(name: string, value: any);\n  abstract requestAnimationFrame(callback): number;\n  abstract cancelAnimationFrame(id);\n  abstract performanceNow(): number;\n  abstract getAnimationPrefix(): string;\n  abstract getTransitionEnd(): string;\n  abstract supportsAnimation(): boolean;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/dom_adapter.ts\n **/","\"use strict\";\nvar errorObject_1 = require('./errorObject');\nvar tryCatchTarget;\nfunction tryCatcher() {\n    try {\n        return tryCatchTarget.apply(this, arguments);\n    }\n    catch (e) {\n        errorObject_1.errorObject.e = e;\n        return errorObject_1.errorObject;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\nexports.tryCatch = tryCatch;\n;\n//# sourceMappingURL=tryCatch.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/tryCatch.js\n ** module id = 22\n ** module chunks = 1\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('./Observable');\nvar Subscriber_1 = require('./Subscriber');\nvar Subscription_1 = require('./Subscription');\nvar SubjectSubscription_1 = require('./subject/SubjectSubscription');\nvar rxSubscriber_1 = require('./symbol/rxSubscriber');\nvar throwError_1 = require('./util/throwError');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\nvar Subject = (function (_super) {\n    __extends(Subject, _super);\n    function Subject(destination, source) {\n        _super.call(this);\n        this.destination = destination;\n        this.source = source;\n        this.observers = [];\n        this.isUnsubscribed = false;\n        this.isStopped = false;\n        this.hasErrored = false;\n        this.dispatching = false;\n        this.hasCompleted = false;\n    }\n    Subject.prototype.lift = function (operator) {\n        var subject = new Subject(this.destination || this, this);\n        subject.operator = operator;\n        return subject;\n    };\n    Subject.prototype.add = function (subscription) {\n        Subscription_1.Subscription.prototype.add.call(this, subscription);\n    };\n    Subject.prototype.remove = function (subscription) {\n        Subscription_1.Subscription.prototype.remove.call(this, subscription);\n    };\n    Subject.prototype.unsubscribe = function () {\n        Subscription_1.Subscription.prototype.unsubscribe.call(this);\n    };\n    Subject.prototype._subscribe = function (subscriber) {\n        if (this.source) {\n            return this.source.subscribe(subscriber);\n        }\n        else {\n            if (subscriber.isUnsubscribed) {\n                return;\n            }\n            else if (this.hasErrored) {\n                return subscriber.error(this.errorValue);\n            }\n            else if (this.hasCompleted) {\n                return subscriber.complete();\n            }\n            this.throwIfUnsubscribed();\n            var subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n            this.observers.push(subscriber);\n            return subscription;\n        }\n    };\n    Subject.prototype._unsubscribe = function () {\n        this.source = null;\n        this.isStopped = true;\n        this.observers = null;\n        this.destination = null;\n    };\n    Subject.prototype.next = function (value) {\n        this.throwIfUnsubscribed();\n        if (this.isStopped) {\n            return;\n        }\n        this.dispatching = true;\n        this._next(value);\n        this.dispatching = false;\n        if (this.hasErrored) {\n            this._error(this.errorValue);\n        }\n        else if (this.hasCompleted) {\n            this._complete();\n        }\n    };\n    Subject.prototype.error = function (err) {\n        this.throwIfUnsubscribed();\n        if (this.isStopped) {\n            return;\n        }\n        this.isStopped = true;\n        this.hasErrored = true;\n        this.errorValue = err;\n        if (this.dispatching) {\n            return;\n        }\n        this._error(err);\n    };\n    Subject.prototype.complete = function () {\n        this.throwIfUnsubscribed();\n        if (this.isStopped) {\n            return;\n        }\n        this.isStopped = true;\n        this.hasCompleted = true;\n        if (this.dispatching) {\n            return;\n        }\n        this._complete();\n    };\n    Subject.prototype.asObservable = function () {\n        var observable = new SubjectObservable(this);\n        return observable;\n    };\n    Subject.prototype._next = function (value) {\n        if (this.destination) {\n            this.destination.next(value);\n        }\n        else {\n            this._finalNext(value);\n        }\n    };\n    Subject.prototype._finalNext = function (value) {\n        var index = -1;\n        var observers = this.observers.slice(0);\n        var len = observers.length;\n        while (++index < len) {\n            observers[index].next(value);\n        }\n    };\n    Subject.prototype._error = function (err) {\n        if (this.destination) {\n            this.destination.error(err);\n        }\n        else {\n            this._finalError(err);\n        }\n    };\n    Subject.prototype._finalError = function (err) {\n        var index = -1;\n        var observers = this.observers;\n        // optimization to block our SubjectSubscriptions from\n        // splicing themselves out of the observers list one by one.\n        this.observers = null;\n        this.isUnsubscribed = true;\n        if (observers) {\n            var len = observers.length;\n            while (++index < len) {\n                observers[index].error(err);\n            }\n        }\n        this.isUnsubscribed = false;\n        this.unsubscribe();\n    };\n    Subject.prototype._complete = function () {\n        if (this.destination) {\n            this.destination.complete();\n        }\n        else {\n            this._finalComplete();\n        }\n    };\n    Subject.prototype._finalComplete = function () {\n        var index = -1;\n        var observers = this.observers;\n        // optimization to block our SubjectSubscriptions from\n        // splicing themselves out of the observers list one by one.\n        this.observers = null;\n        this.isUnsubscribed = true;\n        if (observers) {\n            var len = observers.length;\n            while (++index < len) {\n                observers[index].complete();\n            }\n        }\n        this.isUnsubscribed = false;\n        this.unsubscribe();\n    };\n    Subject.prototype.throwIfUnsubscribed = function () {\n        if (this.isUnsubscribed) {\n            throwError_1.throwError(new ObjectUnsubscribedError_1.ObjectUnsubscribedError());\n        }\n    };\n    Subject.prototype[rxSubscriber_1.rxSubscriber] = function () {\n        return new Subscriber_1.Subscriber(this);\n    };\n    Subject.create = function (destination, source) {\n        return new Subject(destination, source);\n    };\n    return Subject;\n}(Observable_1.Observable));\nexports.Subject = Subject;\nvar SubjectObservable = (function (_super) {\n    __extends(SubjectObservable, _super);\n    function SubjectObservable(source) {\n        _super.call(this);\n        this.source = source;\n    }\n    return SubjectObservable;\n}(Observable_1.Observable));\n//# sourceMappingURL=Subject.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/Subject.js\n ** module id = 25\n ** module chunks = 1\n **/","import {Type, isPresent} from 'angular2/src/facade/lang';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {Reflector} from './reflector';\nexport {Reflector, ReflectionInfo} from './reflector';\nimport {ReflectionCapabilities} from './reflection_capabilities';\n\n/**\n * The {@link Reflector} used internally in Angular to access metadata\n * about symbols.\n */\nexport var reflector = new Reflector(new ReflectionCapabilities());\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/reflection/reflection.ts\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isArray_1 = require('./util/isArray');\nvar isObject_1 = require('./util/isObject');\nvar isFunction_1 = require('./util/isFunction');\nvar tryCatch_1 = require('./util/tryCatch');\nvar errorObject_1 = require('./util/errorObject');\nvar Subscription = (function () {\n    function Subscription(_unsubscribe) {\n        this.isUnsubscribed = false;\n        if (_unsubscribe) {\n            this._unsubscribe = _unsubscribe;\n        }\n    }\n    Subscription.prototype.unsubscribe = function () {\n        var hasErrors = false;\n        var errors;\n        if (this.isUnsubscribed) {\n            return;\n        }\n        this.isUnsubscribed = true;\n        var _a = this, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n        this._subscriptions = null;\n        if (isFunction_1.isFunction(_unsubscribe)) {\n            var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);\n            if (trial === errorObject_1.errorObject) {\n                hasErrors = true;\n                (errors = errors || []).push(errorObject_1.errorObject.e);\n            }\n        }\n        if (isArray_1.isArray(_subscriptions)) {\n            var index = -1;\n            var len = _subscriptions.length;\n            while (++index < len) {\n                var sub = _subscriptions[index];\n                if (isObject_1.isObject(sub)) {\n                    var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);\n                    if (trial === errorObject_1.errorObject) {\n                        hasErrors = true;\n                        errors = errors || [];\n                        var err = errorObject_1.errorObject.e;\n                        if (err instanceof UnsubscriptionError) {\n                            errors = errors.concat(err.errors);\n                        }\n                        else {\n                            errors.push(err);\n                        }\n                    }\n                }\n            }\n        }\n        if (hasErrors) {\n            throw new UnsubscriptionError(errors);\n        }\n    };\n    Subscription.prototype.add = function (subscription) {\n        // return early if:\n        //  1. the subscription is null\n        //  2. we're attempting to add our this\n        //  3. we're attempting to add the static `empty` Subscription\n        if (!subscription || (subscription === this) || (subscription === Subscription.EMPTY)) {\n            return;\n        }\n        var sub = subscription;\n        switch (typeof subscription) {\n            case 'function':\n                sub = new Subscription(subscription);\n            case 'object':\n                if (sub.isUnsubscribed || typeof sub.unsubscribe !== 'function') {\n                    break;\n                }\n                else if (this.isUnsubscribed) {\n                    sub.unsubscribe();\n                }\n                else {\n                    (this._subscriptions || (this._subscriptions = [])).push(sub);\n                }\n                break;\n            default:\n                throw new Error('Unrecognized subscription ' + subscription + ' added to Subscription.');\n        }\n    };\n    Subscription.prototype.remove = function (subscription) {\n        // return early if:\n        //  1. the subscription is null\n        //  2. we're attempting to remove ourthis\n        //  3. we're attempting to remove the static `empty` Subscription\n        if (subscription == null || (subscription === this) || (subscription === Subscription.EMPTY)) {\n            return;\n        }\n        var subscriptions = this._subscriptions;\n        if (subscriptions) {\n            var subscriptionIndex = subscriptions.indexOf(subscription);\n            if (subscriptionIndex !== -1) {\n                subscriptions.splice(subscriptionIndex, 1);\n            }\n        }\n    };\n    Subscription.EMPTY = (function (empty) {\n        empty.isUnsubscribed = true;\n        return empty;\n    }(new Subscription()));\n    return Subscription;\n}());\nexports.Subscription = Subscription;\nvar UnsubscriptionError = (function (_super) {\n    __extends(UnsubscriptionError, _super);\n    function UnsubscriptionError(errors) {\n        _super.call(this, 'unsubscriptoin error(s)');\n        this.errors = errors;\n        this.name = 'UnsubscriptionError';\n    }\n    return UnsubscriptionError;\n}(Error));\nexports.UnsubscriptionError = UnsubscriptionError;\n//# sourceMappingURL=Subscription.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/Subscription.js\n ** module id = 28\n ** module chunks = 1\n **/","import {IterableDiffers, IterableDifferFactory} from './differs/iterable_differs';\nimport {DefaultIterableDifferFactory} from './differs/default_iterable_differ';\nimport {KeyValueDiffers, KeyValueDifferFactory} from './differs/keyvalue_differs';\nimport {\n  DefaultKeyValueDifferFactory,\n  KeyValueChangeRecord\n} from './differs/default_keyvalue_differ';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\nexport {\n  DefaultKeyValueDifferFactory,\n  KeyValueChangeRecord\n} from './differs/default_keyvalue_differ';\nexport {\n  DefaultIterableDifferFactory,\n  CollectionChangeRecord\n} from './differs/default_iterable_differ';\nexport {\n  ASTWithSource,\n  AST,\n  AstTransformer,\n  PropertyRead,\n  LiteralArray,\n  ImplicitReceiver\n} from './parser/ast';\n\nexport {Lexer} from './parser/lexer';\nexport {Parser} from './parser/parser';\nexport {Locals} from './parser/locals';\n\nexport {\n  DehydratedException,\n  ExpressionChangedAfterItHasBeenCheckedException,\n  ChangeDetectionError\n} from './exceptions';\nexport {\n  ProtoChangeDetector,\n  ChangeDetector,\n  ChangeDispatcher,\n  ChangeDetectorDefinition,\n  DebugContext,\n  ChangeDetectorGenConfig\n} from './interfaces';\nexport {ChangeDetectionStrategy, CHANGE_DETECTION_STRATEGY_VALUES} from './constants';\nexport {DynamicProtoChangeDetector} from './proto_change_detector';\nexport {JitProtoChangeDetector} from './jit_proto_change_detector';\nexport {BindingRecord, BindingTarget} from './binding_record';\nexport {DirectiveIndex, DirectiveRecord} from './directive_record';\nexport {DynamicChangeDetector} from './dynamic_change_detector';\nexport {ChangeDetectorRef} from './change_detector_ref';\nexport {\n  IterableDiffers,\n  IterableDiffer,\n  IterableDifferFactory,\n  TrackByFn\n} from './differs/iterable_differs';\nexport {KeyValueDiffers, KeyValueDiffer, KeyValueDifferFactory} from './differs/keyvalue_differs';\nexport {PipeTransform} from './pipe_transform';\nexport {WrappedValue, SimpleChange} from './change_detection_util';\n\n/**\n * Structural diffing for `Object`s and `Map`s.\n */\nexport const keyValDiff: KeyValueDifferFactory[] =\n    CONST_EXPR([CONST_EXPR(new DefaultKeyValueDifferFactory())]);\n\n/**\n * Structural diffing for `Iterable` types such as `Array`s.\n */\nexport const iterableDiff: IterableDifferFactory[] =\n    CONST_EXPR([CONST_EXPR(new DefaultIterableDifferFactory())]);\n\nexport const defaultIterableDiffers = CONST_EXPR(new IterableDiffers(iterableDiff));\n\nexport const defaultKeyValueDiffers = CONST_EXPR(new KeyValueDiffers(keyValDiff));\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/change_detection.ts\n **/","\"use strict\";\nvar objectTypes = {\n    'boolean': false,\n    'function': true,\n    'object': true,\n    'number': false,\n    'string': false,\n    'undefined': false\n};\nexports.root = (objectTypes[typeof self] && self) || (objectTypes[typeof window] && window);\n/* tslint:disable:no-unused-variable */\nvar freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\nvar freeModule = objectTypes[typeof module] && module && !module.nodeType && module;\nvar freeGlobal = objectTypes[typeof global] && global;\nif (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) {\n    exports.root = freeGlobal;\n}\n//# sourceMappingURL=root.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/root.js\n ** module id = 45\n ** module chunks = 1\n **/","import {OpaqueToken} from 'angular2/core';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\n/**\n * A bridge between a control and a native element.\n *\n * A `ControlValueAccessor` abstracts the operations of writing a new value to a\n * DOM element representing an input control.\n *\n * Please see {@link DefaultValueAccessor} for more information.\n */\nexport interface ControlValueAccessor {\n  /**\n   * Write a new value to the element.\n   */\n  writeValue(obj: any): void;\n\n  /**\n   * Set the function to be called when the control receives a change event.\n   */\n  registerOnChange(fn: any): void;\n\n  /**\n   * Set the function to be called when the control receives a touch event.\n   */\n  registerOnTouched(fn: any): void;\n}\n\n/**\n * Used to provide a {@link ControlValueAccessor} for form controls.\n *\n * See {@link DefaultValueAccessor} for how to implement one.\n */\nexport const NG_VALUE_ACCESSOR: OpaqueToken = CONST_EXPR(new OpaqueToken(\"NgValueAccessor\"));\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/control_value_accessor.ts\n **/","import {isBlank, isPresent, CONST_EXPR, isString} from 'angular2/src/facade/lang';\nimport {PromiseWrapper} from 'angular2/src/facade/promise';\nimport {ObservableWrapper} from 'angular2/src/facade/async';\nimport {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {OpaqueToken} from 'angular2/core';\n\nimport * as modelModule from './model';\nimport {ValidatorFn, AsyncValidatorFn} from './directives/validators';\n\n/**\n * Providers for validators to be used for {@link Control}s in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * ### Example\n *\n * {@example core/forms/ts/ng_validators/ng_validators.ts region='ng_validators'}\n */\nexport const NG_VALIDATORS: OpaqueToken = CONST_EXPR(new OpaqueToken(\"NgValidators\"));\n\n/**\n * Providers for asynchronous validators to be used for {@link Control}s\n * in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * See {@link NG_VALIDATORS} for more details.\n */\nexport const NG_ASYNC_VALIDATORS: OpaqueToken = CONST_EXPR(new OpaqueToken(\"NgAsyncValidators\"));\n\n/**\n * Provides a set of validators used by form controls.\n *\n * A validator is a function that processes a {@link Control} or collection of\n * controls and returns a map of errors. A null map means that validation has passed.\n *\n * ### Example\n *\n * ```typescript\n * var loginControl = new Control(\"\", Validators.required)\n * ```\n */\nexport class Validators {\n  /**\n   * Validator that requires controls to have a non-empty value.\n   */\n  static required(control: modelModule.AbstractControl): {[key: string]: boolean} {\n    return isBlank(control.value) || (isString(control.value) && control.value == \"\") ?\n               {\"required\": true} :\n               null;\n  }\n\n  /**\n   * Validator that requires controls to have a value of a minimum length.\n   */\n  static minLength(minLength: number): ValidatorFn {\n    return (control: modelModule.AbstractControl): {[key: string]: any} => {\n      if (isPresent(Validators.required(control))) return null;\n      var v: string = control.value;\n      return v.length < minLength ?\n                 {\"minlength\": {\"requiredLength\": minLength, \"actualLength\": v.length}} :\n                 null;\n    };\n  }\n\n  /**\n   * Validator that requires controls to have a value of a maximum length.\n   */\n  static maxLength(maxLength: number): ValidatorFn {\n    return (control: modelModule.AbstractControl): {[key: string]: any} => {\n      if (isPresent(Validators.required(control))) return null;\n      var v: string = control.value;\n      return v.length > maxLength ?\n                 {\"maxlength\": {\"requiredLength\": maxLength, \"actualLength\": v.length}} :\n                 null;\n    };\n  }\n\n  /**\n   * Validator that requires a control to match a regex to its value.\n   */\n  static pattern(pattern: string): ValidatorFn {\n    return (control: modelModule.AbstractControl): {[key: string]: any} => {\n      if (isPresent(Validators.required(control))) return null;\n      let regex = new RegExp(`^${pattern}$`);\n      let v: string = control.value;\n      return regex.test(v) ? null :\n                             {\"pattern\": {\"requiredPattern\": `^${pattern}$`, \"actualValue\": v}};\n    };\n  }\n\n  /**\n   * No-op validator.\n   */\n  static nullValidator(c: modelModule.AbstractControl): {[key: string]: boolean} { return null; }\n\n  /**\n   * Compose multiple validators into a single function that returns the union\n   * of the individual error maps.\n   */\n  static compose(validators: ValidatorFn[]): ValidatorFn {\n    if (isBlank(validators)) return null;\n    var presentValidators = validators.filter(isPresent);\n    if (presentValidators.length == 0) return null;\n\n    return function(control: modelModule.AbstractControl) {\n      return _mergeErrors(_executeValidators(control, presentValidators));\n    };\n  }\n\n  static composeAsync(validators: AsyncValidatorFn[]): AsyncValidatorFn {\n    if (isBlank(validators)) return null;\n    var presentValidators = validators.filter(isPresent);\n    if (presentValidators.length == 0) return null;\n\n    return function(control: modelModule.AbstractControl) {\n      let promises = _executeAsyncValidators(control, presentValidators).map(_convertToPromise);\n      return PromiseWrapper.all(promises).then(_mergeErrors);\n    };\n  }\n}\n\nfunction _convertToPromise(obj: any): any {\n  return PromiseWrapper.isPromise(obj) ? obj : ObservableWrapper.toPromise(obj);\n}\n\nfunction _executeValidators(control: modelModule.AbstractControl,\n                            validators: ValidatorFn[]): any[] {\n  return validators.map(v => v(control));\n}\n\nfunction _executeAsyncValidators(control: modelModule.AbstractControl,\n                                 validators: AsyncValidatorFn[]): any[] {\n  return validators.map(v => v(control));\n}\n\nfunction _mergeErrors(arrayOfErrors: any[]): {[key: string]: any} {\n  var res: {[key: string]: any} =\n      arrayOfErrors.reduce((res: {[key: string]: any}, errors: {[key: string]: any}) => {\n        return isPresent(errors) ? StringMapWrapper.merge(res, errors) : res;\n      }, {});\n  return StringMapWrapper.isEmpty(res) ? null : res;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/validators.ts\n **/","import {CONST, Type, stringify} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\n\nexport class InvalidPipeArgumentException extends BaseException {\n  constructor(type: Type, value: Object) {\n    super(`Invalid argument '${value}' for pipe '${stringify(type)}'`);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/invalid_pipe_argument_exception.ts\n **/","\"use strict\";\nexports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });\n//# sourceMappingURL=isArray.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/isArray.js\n ** module id = 55\n ** module chunks = 1\n **/","import {\n  IS_DART,\n  StringWrapper,\n  isBlank,\n  isPresent,\n  isString,\n  isArray\n} from 'angular2/src/facade/lang';\n\nvar CAMEL_CASE_REGEXP = /([A-Z])/g;\nvar DASH_CASE_REGEXP = /-([a-z])/g;\nvar SINGLE_QUOTE_ESCAPE_STRING_RE = /'|\\\\|\\n|\\r|\\$/g;\nvar DOUBLE_QUOTE_ESCAPE_STRING_RE = /\"|\\\\|\\n|\\r|\\$/g;\n\nexport var MODULE_SUFFIX = IS_DART ? '.dart' : '.js';\n\nexport var CONST_VAR = IS_DART ? 'const' : 'var';\n\nexport function camelCaseToDashCase(input: string): string {\n  return StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP,\n                                        (m) => { return '-' + m[1].toLowerCase(); });\n}\n\nexport function dashCaseToCamelCase(input: string): string {\n  return StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP,\n                                        (m) => { return m[1].toUpperCase(); });\n}\n\nexport function escapeSingleQuoteString(input: string): string {\n  if (isBlank(input)) {\n    return null;\n  }\n  return `'${escapeString(input, SINGLE_QUOTE_ESCAPE_STRING_RE)}'`;\n}\n\nexport function escapeDoubleQuoteString(input: string): string {\n  if (isBlank(input)) {\n    return null;\n  }\n  return `\"${escapeString(input, DOUBLE_QUOTE_ESCAPE_STRING_RE)}\"`;\n}\n\nfunction escapeString(input: string, re: RegExp): string {\n  return StringWrapper.replaceAllMapped(input, re, (match) => {\n    if (match[0] == '$') {\n      return IS_DART ? '\\\\$' : '$';\n    } else if (match[0] == '\\n') {\n      return '\\\\n';\n    } else if (match[0] == '\\r') {\n      return '\\\\r';\n    } else {\n      return `\\\\${match[0]}`;\n    }\n  });\n}\n\nexport function codeGenExportVariable(name: string): string {\n  if (IS_DART) {\n    return `const ${name} = `;\n  } else {\n    return `var ${name} = exports['${name}'] = `;\n  }\n}\n\nexport function codeGenConstConstructorCall(name: string): string {\n  if (IS_DART) {\n    return `const ${name}`;\n  } else {\n    return `new ${name}`;\n  }\n}\n\nexport function codeGenValueFn(params: string[], value: string, fnName: string = ''): string {\n  if (IS_DART) {\n    return `${codeGenFnHeader(params, fnName)} => ${value}`;\n  } else {\n    return `${codeGenFnHeader(params, fnName)} { return ${value}; }`;\n  }\n}\n\nexport function codeGenFnHeader(params: string[], fnName: string = ''): string {\n  if (IS_DART) {\n    return `${fnName}(${params.join(',')})`;\n  } else {\n    return `function ${fnName}(${params.join(',')})`;\n  }\n}\nexport function codeGenToString(expr: string): string {\n  if (IS_DART) {\n    return `'\\${${expr}}'`;\n  } else {\n    // JS automatically converts to string...\n    return expr;\n  }\n}\n\nexport function splitAtColon(input: string, defaultValues: string[]): string[] {\n  var parts = StringWrapper.split(input.trim(), /\\s*:\\s*/g);\n  if (parts.length > 1) {\n    return parts;\n  } else {\n    return defaultValues;\n  }\n}\n\n\nexport class Statement {\n  constructor(public statement: string) {}\n}\n\nexport class Expression {\n  constructor(public expression: string, public isArray = false) {}\n}\n\nexport function escapeValue(value: any): string {\n  if (value instanceof Expression) {\n    return value.expression;\n  } else if (isString(value)) {\n    return escapeSingleQuoteString(value);\n  } else if (isBlank(value)) {\n    return 'null';\n  } else {\n    return `${value}`;\n  }\n}\n\nexport function codeGenArray(data: any[]): string {\n  return `[${data.map(escapeValue).join(',')}]`;\n}\n\nexport function codeGenFlatArray(values: any[]): string {\n  var result = '([';\n  var isFirstArrayEntry = true;\n  var concatFn = IS_DART ? '.addAll' : 'concat';\n  for (var i = 0; i < values.length; i++) {\n    var value = values[i];\n    if (value instanceof Expression && (<Expression>value).isArray) {\n      result += `]).${concatFn}(${value.expression}).${concatFn}([`;\n      isFirstArrayEntry = true;\n    } else {\n      if (!isFirstArrayEntry) {\n        result += ',';\n      }\n      isFirstArrayEntry = false;\n      result += escapeValue(value);\n    }\n  }\n  result += '])';\n  return result;\n}\n\nexport function codeGenStringMap(keyValueArray: any[][]): string {\n  return `{${keyValueArray.map(codeGenKeyValue).join(',')}}`;\n}\n\nfunction codeGenKeyValue(keyValue: any[]): string {\n  return `${escapeValue(keyValue[0])}:${escapeValue(keyValue[1])}`;\n}\n\nexport function addAll(source: any[], target: any[]) {\n  for (var i = 0; i < source.length; i++) {\n    target.push(source[i]);\n  }\n}\n\nexport function flattenArray(source: any[], target: any[]): any[] {\n  if (isPresent(source)) {\n    for (var i = 0; i < source.length; i++) {\n      var item = source[i];\n      if (isArray(item)) {\n        flattenArray(item, target);\n      } else {\n        target.push(item);\n      }\n    }\n  }\n  return target;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/util.ts\n **/","import {StringWrapper, normalizeBool, isBlank} from 'angular2/src/facade/lang';\n\n/**\n * Describes the current state of the change detector.\n */\nexport enum ChangeDetectorState {\n  /**\n   * `NeverChecked` means that the change detector has not been checked yet, and\n   * initialization methods should be called during detection.\n   */\n  NeverChecked,\n\n  /**\n   * `CheckedBefore` means that the change detector has successfully completed at least\n   * one detection previously.\n   */\n  CheckedBefore,\n\n  /**\n   * `Errored` means that the change detector encountered an error checking a binding\n   * or calling a directive lifecycle method and is now in an inconsistent state. Change\n   * detectors in this state will no longer detect changes.\n   */\n  Errored\n}\n\n/**\n * Describes within the change detector which strategy will be used the next time change\n * detection is triggered.\n */\nexport enum ChangeDetectionStrategy {\n  /**\n   * `CheckedOnce` means that after calling detectChanges the mode of the change detector\n   * will become `Checked`.\n   */\n  CheckOnce,\n\n  /**\n   * `Checked` means that the change detector should be skipped until its mode changes to\n   * `CheckOnce`.\n   */\n  Checked,\n\n  /**\n   * `CheckAlways` means that after calling detectChanges the mode of the change detector\n   * will remain `CheckAlways`.\n   */\n  CheckAlways,\n\n  /**\n   * `Detached` means that the change detector sub tree is not a part of the main tree and\n   * should be skipped.\n   */\n  Detached,\n\n  /**\n   * `OnPush` means that the change detector's mode will be set to `CheckOnce` during hydration.\n   */\n  OnPush,\n\n  /**\n   * `Default` means that the change detector's mode will be set to `CheckAlways` during hydration.\n   */\n  Default,\n}\n\n/**\n * List of possible {@link ChangeDetectionStrategy} values.\n */\nexport var CHANGE_DETECTION_STRATEGY_VALUES = [\n  ChangeDetectionStrategy.CheckOnce,\n  ChangeDetectionStrategy.Checked,\n  ChangeDetectionStrategy.CheckAlways,\n  ChangeDetectionStrategy.Detached,\n  ChangeDetectionStrategy.OnPush,\n  ChangeDetectionStrategy.Default\n];\n\n/**\n * List of possible {@link ChangeDetectorState} values.\n */\nexport var CHANGE_DETECTOR_STATE_VALUES = [\n  ChangeDetectorState.NeverChecked,\n  ChangeDetectorState.CheckedBefore,\n  ChangeDetectorState.Errored\n];\n\nexport function isDefaultChangeDetectionStrategy(\n    changeDetectionStrategy: ChangeDetectionStrategy): boolean {\n  return isBlank(changeDetectionStrategy) ||\n         changeDetectionStrategy === ChangeDetectionStrategy.Default;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/constants.ts\n **/","import {ControlValueAccessor} from './control_value_accessor';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {unimplemented} from 'angular2/src/facade/exceptions';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\n/**\n * A base class that all control directive extend.\n * It binds a {@link Control} object to a DOM element.\n *\n * Used internally by Angular forms.\n */\nexport abstract class NgControl extends AbstractControlDirective {\n  name: string = null;\n  valueAccessor: ControlValueAccessor = null;\n\n  get validator(): ValidatorFn { return <ValidatorFn>unimplemented(); }\n  get asyncValidator(): AsyncValidatorFn { return <AsyncValidatorFn>unimplemented(); }\n\n  abstract viewToModelUpdate(newValue: any): void;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_control.ts\n **/","import {CONST, Type} from 'angular2/src/facade/lang';\n\n/**\n * Defines template and style encapsulation options available for Component's {@link View}.\n *\n * See {@link ViewMetadata#encapsulation}.\n */\nexport enum ViewEncapsulation {\n  /**\n   * Emulate `Native` scoping of styles by adding an attribute containing surrogate id to the Host\n   * Element and pre-processing the style rules provided via\n   * {@link ViewMetadata#styles} or {@link ViewMetadata#stylesUrls}, and adding the new Host Element\n   * attribute to all selectors.\n   *\n   * This is the default option.\n   */\n  Emulated,\n  /**\n   * Use the native encapsulation mechanism of the renderer.\n   *\n   * For the DOM this means using [Shadow DOM](https://w3c.github.io/webcomponents/spec/shadow/) and\n   * creating a ShadowRoot for Component's Host Element.\n   */\n  Native,\n  /**\n   * Don't provide any template or style encapsulation.\n   */\n  None\n}\n\nexport var VIEW_ENCAPSULATION_VALUES =\n    [ViewEncapsulation.Emulated, ViewEncapsulation.Native, ViewEncapsulation.None];\n\n\n/**\n * Metadata properties available for configuring Views.\n *\n * Each Angular component requires a single `@Component` and at least one `@View` annotation. The\n * `@View` annotation specifies the HTML template to use, and lists the directives that are active\n * within the template.\n *\n * When a component is instantiated, the template is loaded into the component's shadow root, and\n * the expressions and statements in the template are evaluated against the component.\n *\n * For details on the `@Component` annotation, see {@link ComponentMetadata}.\n *\n * ### Example\n *\n * ```\n * @Component({\n *   selector: 'greet',\n *   template: 'Hello {{name}}!',\n *   directives: [GreetUser, Bold]\n * })\n * class Greet {\n *   name: string;\n *\n *   constructor() {\n *     this.name = 'World';\n *   }\n * }\n * ```\n */\n@CONST()\nexport class ViewMetadata {\n  /**\n   * Specifies a template URL for an Angular component.\n   *\n   * NOTE: Only one of `templateUrl` or `template` can be defined per View.\n   *\n   * <!-- TODO: what's the url relative to? -->\n   */\n  templateUrl: string;\n\n  /**\n   * Specifies an inline template for an Angular component.\n   *\n   * NOTE: Only one of `templateUrl` or `template` can be defined per View.\n   */\n  template: string;\n\n  /**\n   * Specifies stylesheet URLs for an Angular component.\n   *\n   * <!-- TODO: what's the url relative to? -->\n   */\n  styleUrls: string[];\n\n  /**\n   * Specifies an inline stylesheet for an Angular component.\n   */\n  styles: string[];\n\n  /**\n   * Specifies a list of directives that can be used within a template.\n   *\n   * Directives must be listed explicitly to provide proper component encapsulation.\n   *\n   * ### Example\n   *\n   * ```javascript\n   * @Component({\n   *   selector: 'my-component',\n   *   directives: [NgFor]\n   *   template: '\n   *   <ul>\n   *     <li *ngFor=\"#item of items\">{{item}}</li>\n   *   </ul>'\n   * })\n   * class MyComponent {\n   * }\n   * ```\n   */\n  directives: Array<Type | any[]>;\n\n  pipes: Array<Type | any[]>;\n\n  /**\n   * Specify how the template and the styles should be encapsulated.\n   * The default is {@link ViewEncapsulation#Emulated `ViewEncapsulation.Emulated`} if the view\n   * has styles,\n   * otherwise {@link ViewEncapsulation#None `ViewEncapsulation.None`}.\n   */\n  encapsulation: ViewEncapsulation;\n\n  constructor({templateUrl, template, directives, pipes, encapsulation, styles, styleUrls}: {\n    templateUrl?: string,\n    template?: string,\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    encapsulation?: ViewEncapsulation,\n    styles?: string[],\n    styleUrls?: string[],\n  } = {}) {\n    this.templateUrl = templateUrl;\n    this.template = template;\n    this.styleUrls = styleUrls;\n    this.styles = styles;\n    this.directives = directives;\n    this.pipes = pipes;\n    this.encapsulation = encapsulation;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/metadata/view.ts\n **/","import {StringMapWrapper} from 'angular2/src/facade/collection';\n\n/**\n * Supported http methods.\n */\nexport enum RequestMethod {\n  Get,\n  Post,\n  Put,\n  Delete,\n  Options,\n  Head,\n  Patch\n}\n\n/**\n * All possible states in which a connection can be, based on\n * [States](http://www.w3.org/TR/XMLHttpRequest/#states) from the `XMLHttpRequest` spec, but with an\n * additional \"CANCELLED\" state.\n */\nexport enum ReadyState {\n  Unsent,\n  Open,\n  HeadersReceived,\n  Loading,\n  Done,\n  Cancelled\n}\n\n/**\n * Acceptable response types to be associated with a {@link Response}, based on\n * [ResponseType](https://fetch.spec.whatwg.org/#responsetype) from the Fetch spec.\n */\nexport enum ResponseType {\n  Basic,\n  Cors,\n  Default,\n  Error,\n  Opaque\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/enums.ts\n **/","import {Map, MapWrapper, StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {isPresent, isBlank, normalizeBlank, Type, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\n\n\n/**\n * `RouteParams` is an immutable map of parameters for the given route\n * based on the url matcher and optional parameters for that route.\n *\n * You can inject `RouteParams` into the constructor of a component to use it.\n *\n * ### Example\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteParams} from\n * 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {path: '/user/:id', component: UserCmp, name: 'UserCmp'},\n * ])\n * class AppCmp {}\n *\n * @Component({ template: 'user: {{id}}' })\n * class UserCmp {\n *   id: string;\n *   constructor(params: RouteParams) {\n *     this.id = params.get('id');\n *   }\n * }\n *\n * bootstrap(AppCmp, ROUTER_PROVIDERS);\n * ```\n */\nexport class RouteParams {\n  constructor(public params: {[key: string]: string}) {}\n\n  get(param: string): string { return normalizeBlank(StringMapWrapper.get(this.params, param)); }\n}\n\n/**\n * `RouteData` is an immutable map of additional data you can configure in your {@link Route}.\n *\n * You can inject `RouteData` into the constructor of a component to use it.\n *\n * ### Example\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig, RouteData} from\n * 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {path: '/user/:id', component: UserCmp, name: 'UserCmp', data: {isAdmin: true}},\n * ])\n * class AppCmp {}\n *\n * @Component({\n *   ...,\n *   template: 'user: {{isAdmin}}'\n * })\n * class UserCmp {\n *   string: isAdmin;\n *   constructor(data: RouteData) {\n *     this.isAdmin = data.get('isAdmin');\n *   }\n * }\n *\n * bootstrap(AppCmp, ROUTER_PROVIDERS);\n * ```\n */\nexport class RouteData {\n  constructor(public data: {[key: string]: any} = CONST_EXPR({})) {}\n\n  get(key: string): any { return normalizeBlank(StringMapWrapper.get(this.data, key)); }\n}\n\nexport var BLANK_ROUTE_DATA = new RouteData();\n\n/**\n * `Instruction` is a tree of {@link ComponentInstruction}s with all the information needed\n * to transition each component in the app to a given route, including all auxiliary routes.\n *\n * `Instruction`s can be created using {@link Router#generate}, and can be used to\n * perform route changes with {@link Router#navigateByInstruction}.\n *\n * ### Example\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {Router, ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   constructor(router: Router) {\n *     var instruction = router.generate(['/MyRoute']);\n *     router.navigateByInstruction(instruction);\n *   }\n * }\n *\n * bootstrap(AppCmp, ROUTER_PROVIDERS);\n * ```\n */\nexport abstract class Instruction {\n  constructor(public component: ComponentInstruction, public child: Instruction,\n              public auxInstruction: {[key: string]: Instruction}) {}\n\n  get urlPath(): string { return isPresent(this.component) ? this.component.urlPath : ''; }\n\n  get urlParams(): string[] { return isPresent(this.component) ? this.component.urlParams : []; }\n\n  get specificity(): string {\n    var total = '';\n    if (isPresent(this.component)) {\n      total += this.component.specificity;\n    }\n    if (isPresent(this.child)) {\n      total += this.child.specificity;\n    }\n    return total;\n  }\n\n  abstract resolveComponent(): Promise<ComponentInstruction>;\n\n  /**\n   * converts the instruction into a URL string\n   */\n  toRootUrl(): string { return this.toUrlPath() + this.toUrlQuery(); }\n\n  /** @internal */\n  _toNonRootUrl(): string {\n    return this._stringifyPathMatrixAuxPrefixed() +\n           (isPresent(this.child) ? this.child._toNonRootUrl() : '');\n  }\n\n  toUrlQuery(): string { return this.urlParams.length > 0 ? ('?' + this.urlParams.join('&')) : ''; }\n\n  /**\n   * Returns a new instruction that shares the state of the existing instruction, but with\n   * the given child {@link Instruction} replacing the existing child.\n   */\n  replaceChild(child: Instruction): Instruction {\n    return new ResolvedInstruction(this.component, child, this.auxInstruction);\n  }\n\n  /**\n   * If the final URL for the instruction is ``\n   */\n  toUrlPath(): string {\n    return this.urlPath + this._stringifyAux() +\n           (isPresent(this.child) ? this.child._toNonRootUrl() : '');\n  }\n\n  // default instructions override these\n  toLinkUrl(): string {\n    return this.urlPath + this._stringifyAux() +\n           (isPresent(this.child) ? this.child._toLinkUrl() : '') + this.toUrlQuery();\n  }\n\n  // this is the non-root version (called recursively)\n  /** @internal */\n  _toLinkUrl(): string {\n    return this._stringifyPathMatrixAuxPrefixed() +\n           (isPresent(this.child) ? this.child._toLinkUrl() : '');\n  }\n\n  /** @internal */\n  _stringifyPathMatrixAuxPrefixed(): string {\n    var primary = this._stringifyPathMatrixAux();\n    if (primary.length > 0) {\n      primary = '/' + primary;\n    }\n    return primary;\n  }\n\n  /** @internal */\n  _stringifyMatrixParams(): string {\n    return this.urlParams.length > 0 ? (';' + this.urlParams.join(';')) : '';\n  }\n\n  /** @internal */\n  _stringifyPathMatrixAux(): string {\n    if (isBlank(this.component)) {\n      return '';\n    }\n    return this.urlPath + this._stringifyMatrixParams() + this._stringifyAux();\n  }\n\n  /** @internal */\n  _stringifyAux(): string {\n    var routes = [];\n    StringMapWrapper.forEach(this.auxInstruction, (auxInstruction: Instruction, _: string) => {\n      routes.push(auxInstruction._stringifyPathMatrixAux());\n    });\n    if (routes.length > 0) {\n      return '(' + routes.join('//') + ')';\n    }\n    return '';\n  }\n}\n\n\n/**\n * a resolved instruction has an outlet instruction for itself, but maybe not for...\n */\nexport class ResolvedInstruction extends Instruction {\n  constructor(component: ComponentInstruction, child: Instruction,\n              auxInstruction: {[key: string]: Instruction}) {\n    super(component, child, auxInstruction);\n  }\n\n  resolveComponent(): Promise<ComponentInstruction> {\n    return PromiseWrapper.resolve(this.component);\n  }\n}\n\n\n/**\n * Represents a resolved default route\n */\nexport class DefaultInstruction extends ResolvedInstruction {\n  constructor(component: ComponentInstruction, child: DefaultInstruction) {\n    super(component, child, {});\n  }\n\n  toLinkUrl(): string { return ''; }\n\n  /** @internal */\n  _toLinkUrl(): string { return ''; }\n}\n\n\n/**\n * Represents a component that may need to do some redirection or lazy loading at a later time.\n */\nexport class UnresolvedInstruction extends Instruction {\n  constructor(private _resolver: () => Promise<Instruction>, private _urlPath: string = '',\n              private _urlParams: string[] = CONST_EXPR([])) {\n    super(null, null, {});\n  }\n\n  get urlPath(): string {\n    if (isPresent(this.component)) {\n      return this.component.urlPath;\n    }\n    if (isPresent(this._urlPath)) {\n      return this._urlPath;\n    }\n    return '';\n  }\n\n  get urlParams(): string[] {\n    if (isPresent(this.component)) {\n      return this.component.urlParams;\n    }\n    if (isPresent(this._urlParams)) {\n      return this._urlParams;\n    }\n    return [];\n  }\n\n  resolveComponent(): Promise<ComponentInstruction> {\n    if (isPresent(this.component)) {\n      return PromiseWrapper.resolve(this.component);\n    }\n    return this._resolver().then((instruction: Instruction) => {\n      this.child = isPresent(instruction) ? instruction.child : null;\n      return this.component = isPresent(instruction) ? instruction.component : null;\n    });\n  }\n}\n\n\nexport class RedirectInstruction extends ResolvedInstruction {\n  constructor(component: ComponentInstruction, child: Instruction,\n              auxInstruction: {[key: string]: Instruction}, private _specificity: string) {\n    super(component, child, auxInstruction);\n  }\n\n  get specificity(): string { return this._specificity; }\n}\n\n\n/**\n * A `ComponentInstruction` represents the route state for a single component.\n *\n * `ComponentInstructions` is a public API. Instances of `ComponentInstruction` are passed\n * to route lifecycle hooks, like {@link CanActivate}.\n *\n * `ComponentInstruction`s are [hash consed](https://en.wikipedia.org/wiki/Hash_consing). You should\n * never construct one yourself with \"new.\" Instead, rely on {@link Router/RouteRecognizer} to\n * construct `ComponentInstruction`s.\n *\n * You should not modify this object. It should be treated as immutable.\n */\nexport class ComponentInstruction {\n  reuse: boolean = false;\n  public routeData: RouteData;\n\n  /**\n   * @internal\n   */\n  constructor(public urlPath: string, public urlParams: string[], data: RouteData,\n              public componentType, public terminal: boolean, public specificity: string,\n              public params: {[key: string]: string} = null) {\n    this.routeData = isPresent(data) ? data : BLANK_ROUTE_DATA;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/instruction.ts\n **/","\"use strict\";\nvar root_1 = require('./root');\nfunction polyfillSymbol(root) {\n    var Symbol = ensureSymbol(root);\n    ensureIterator(Symbol, root);\n    ensureObservable(Symbol);\n    ensureFor(Symbol);\n    return Symbol;\n}\nexports.polyfillSymbol = polyfillSymbol;\nfunction ensureFor(Symbol) {\n    if (!Symbol.for) {\n        Symbol.for = symbolForPolyfill;\n    }\n}\nexports.ensureFor = ensureFor;\nvar id = 0;\nfunction ensureSymbol(root) {\n    if (!root.Symbol) {\n        root.Symbol = function symbolFuncPolyfill(description) {\n            return \"@@Symbol(\" + description + \"):\" + id++;\n        };\n    }\n    return root.Symbol;\n}\nexports.ensureSymbol = ensureSymbol;\nfunction symbolForPolyfill(key) {\n    return '@@' + key;\n}\nexports.symbolForPolyfill = symbolForPolyfill;\nfunction ensureIterator(Symbol, root) {\n    if (!Symbol.iterator) {\n        if (typeof Symbol.for === 'function') {\n            Symbol.iterator = Symbol.for('iterator');\n        }\n        else if (root.Set && typeof new root.Set()['@@iterator'] === 'function') {\n            // Bug for mozilla version\n            Symbol.iterator = '@@iterator';\n        }\n        else if (root.Map) {\n            // es6-shim specific logic\n            var keys = Object.getOwnPropertyNames(root.Map.prototype);\n            for (var i = 0; i < keys.length; ++i) {\n                var key = keys[i];\n                if (key !== 'entries' && key !== 'size' && root.Map.prototype[key] === root.Map.prototype['entries']) {\n                    Symbol.iterator = key;\n                    break;\n                }\n            }\n        }\n        else {\n            Symbol.iterator = '@@iterator';\n        }\n    }\n}\nexports.ensureIterator = ensureIterator;\nfunction ensureObservable(Symbol) {\n    if (!Symbol.observable) {\n        if (typeof Symbol.for === 'function') {\n            Symbol.observable = Symbol.for('observable');\n        }\n        else {\n            Symbol.observable = '@@observable';\n        }\n    }\n}\nexports.ensureObservable = ensureObservable;\nexports.SymbolShim = polyfillSymbol(root_1.root);\n//# sourceMappingURL=SymbolShim.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/SymbolShim.js\n ** module id = 74\n ** module chunks = 1\n **/","/**\n * @module\n * @description\n * Maps application URLs into application states, to support deep-linking and navigation.\n */\n\nexport {Router} from './src/router/router';\nexport {RouterOutlet} from './src/router/directives/router_outlet';\nexport {RouterLink} from './src/router/directives/router_link';\nexport {RouteParams, RouteData} from './src/router/instruction';\nexport {PlatformLocation} from './src/router/location/platform_location';\nexport {RouteRegistry, ROUTER_PRIMARY_COMPONENT} from './src/router/route_registry';\nexport {LocationStrategy, APP_BASE_HREF} from './src/router/location/location_strategy';\nexport {HashLocationStrategy} from './src/router/location/hash_location_strategy';\nexport {PathLocationStrategy} from './src/router/location/path_location_strategy';\nexport {Location} from './src/router/location/location';\nexport * from './src/router/route_config/route_config_decorator';\nexport * from './src/router/route_definition';\nexport {OnActivate, OnDeactivate, OnReuse, CanDeactivate, CanReuse} from './src/router/interfaces';\nexport {CanActivate} from './src/router/lifecycle/lifecycle_annotations';\nexport {Instruction, ComponentInstruction} from './src/router/instruction';\nexport {OpaqueToken} from 'angular2/core';\nexport {ROUTER_PROVIDERS_COMMON} from 'angular2/src/router/router_providers_common';\nexport {ROUTER_PROVIDERS, ROUTER_BINDINGS} from 'angular2/src/router/router_providers';\n\nimport {RouterOutlet} from './src/router/directives/router_outlet';\nimport {RouterLink} from './src/router/directives/router_link';\nimport {CONST_EXPR} from './src/facade/lang';\n\n/**\n * A list of directives. To use the router directives like {@link RouterOutlet} and\n * {@link RouterLink}, add this to your `directives` array in the {@link View} decorator of your\n * component.\n *\n * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *    // ...\n * }\n *\n * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\n * ```\n */\nexport const ROUTER_DIRECTIVES: any[] = CONST_EXPR([RouterOutlet, RouterLink]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/router.ts\n **/","import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {isBlank, isPresent, looseIdentical, hasConstructor} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\n\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\nimport {AbstractControlDirective} from './abstract_control_directive';\nimport {NgControlGroup} from './ng_control_group';\nimport {Control, ControlGroup} from '../model';\nimport {Validators} from '../validators';\nimport {ControlValueAccessor} from './control_value_accessor';\nimport {DefaultValueAccessor} from './default_value_accessor';\nimport {NumberValueAccessor} from './number_value_accessor';\nimport {CheckboxControlValueAccessor} from './checkbox_value_accessor';\nimport {SelectControlValueAccessor} from './select_control_value_accessor';\nimport {RadioControlValueAccessor} from './radio_control_value_accessor';\nimport {normalizeValidator, normalizeAsyncValidator} from './normalize_validator';\nimport {ValidatorFn, AsyncValidatorFn} from './validators';\n\n\nexport function controlPath(name: string, parent: ControlContainer): string[] {\n  var p = ListWrapper.clone(parent.path);\n  p.push(name);\n  return p;\n}\n\nexport function setUpControl(control: Control, dir: NgControl): void {\n  if (isBlank(control)) _throwError(dir, \"Cannot find control\");\n  if (isBlank(dir.valueAccessor)) _throwError(dir, \"No value accessor for\");\n\n  control.validator = Validators.compose([control.validator, dir.validator]);\n  control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n  dir.valueAccessor.writeValue(control.value);\n\n  // view -> model\n  dir.valueAccessor.registerOnChange((newValue: any) => {\n    dir.viewToModelUpdate(newValue);\n    control.updateValue(newValue, {emitModelToViewChange: false});\n    control.markAsDirty();\n  });\n\n  // model -> view\n  control.registerOnChange((newValue: any) => dir.valueAccessor.writeValue(newValue));\n\n  // touched\n  dir.valueAccessor.registerOnTouched(() => control.markAsTouched());\n}\n\nexport function setUpControlGroup(control: ControlGroup, dir: NgControlGroup) {\n  if (isBlank(control)) _throwError(dir, \"Cannot find control\");\n  control.validator = Validators.compose([control.validator, dir.validator]);\n  control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n\nfunction _throwError(dir: AbstractControlDirective, message: string): void {\n  var path = dir.path.join(\" -> \");\n  throw new BaseException(`${message} '${path}'`);\n}\n\nexport function composeValidators(validators: /* Array<Validator|Function> */ any[]): ValidatorFn {\n  return isPresent(validators) ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n\nexport function composeAsyncValidators(\n    validators: /* Array<Validator|Function> */ any[]): AsyncValidatorFn {\n  return isPresent(validators) ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n                                 null;\n}\n\nexport function isPropertyUpdated(changes: {[key: string]: any}, viewModel: any): boolean {\n  if (!StringMapWrapper.contains(changes, \"model\")) return false;\n  var change = changes[\"model\"];\n\n  if (change.isFirstChange()) return true;\n  return !looseIdentical(viewModel, change.currentValue);\n}\n\n// TODO: vsavkin remove it once https://github.com/angular/angular/issues/3011 is implemented\nexport function selectValueAccessor(dir: NgControl,\n                                    valueAccessors: ControlValueAccessor[]): ControlValueAccessor {\n  if (isBlank(valueAccessors)) return null;\n\n  var defaultAccessor: ControlValueAccessor;\n  var builtinAccessor: ControlValueAccessor;\n  var customAccessor: ControlValueAccessor;\n  valueAccessors.forEach((v: ControlValueAccessor) => {\n    if (hasConstructor(v, DefaultValueAccessor)) {\n      defaultAccessor = v;\n\n    } else if (hasConstructor(v, CheckboxControlValueAccessor) ||\n               hasConstructor(v, NumberValueAccessor) ||\n               hasConstructor(v, SelectControlValueAccessor) ||\n               hasConstructor(v, RadioControlValueAccessor)) {\n      if (isPresent(builtinAccessor))\n        _throwError(dir, \"More than one built-in value accessor matches\");\n      builtinAccessor = v;\n\n    } else {\n      if (isPresent(customAccessor))\n        _throwError(dir, \"More than one custom value accessor matches\");\n      customAccessor = v;\n    }\n  });\n\n  if (isPresent(customAccessor)) return customAccessor;\n  if (isPresent(builtinAccessor)) return builtinAccessor;\n  if (isPresent(defaultAccessor)) return defaultAccessor;\n\n  _throwError(dir, \"No valid value accessor for\");\n  return null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/shared.ts\n **/","import {StringWrapper, isBlank} from 'angular2/src/facade/lang';\n\nvar MODULE_REGEXP = /#MODULE\\[([^\\]]*)\\]/g;\n\nexport function moduleRef(moduleUrl): string {\n  return `#MODULE[${moduleUrl}]`;\n}\n\n/**\n * Represents generated source code with module references. Internal to the Angular compiler.\n */\nexport class SourceModule {\n  static getSourceWithoutImports(sourceWithModuleRefs: string): string {\n    return StringWrapper.replaceAllMapped(sourceWithModuleRefs, MODULE_REGEXP, (match) => '');\n  }\n\n  constructor(public moduleUrl: string, public sourceWithModuleRefs: string) {}\n\n  getSourceWithImports(): SourceWithImports {\n    var moduleAliases = {};\n    var imports: string[][] = [];\n    var newSource =\n        StringWrapper.replaceAllMapped(this.sourceWithModuleRefs, MODULE_REGEXP, (match) => {\n          var moduleUrl = match[1];\n          var alias = moduleAliases[moduleUrl];\n          if (isBlank(alias)) {\n            if (moduleUrl == this.moduleUrl) {\n              alias = '';\n            } else {\n              alias = `import${imports.length}`;\n              imports.push([moduleUrl, alias]);\n            }\n            moduleAliases[moduleUrl] = alias;\n          }\n          return alias.length > 0 ? `${alias}.` : '';\n        });\n    return new SourceWithImports(newSource, imports);\n  }\n}\n\nexport class SourceExpression {\n  constructor(public declarations: string[], public expression: string) {}\n}\n\nexport class SourceExpressions {\n  constructor(public declarations: string[], public expressions: string[]) {}\n}\n\n/**\n * Represents generated source code with imports. Internal to the Angular compiler.\n */\nexport class SourceWithImports {\n  constructor(public source: string, public imports: string[][]) {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/source_module.ts\n **/","import {AST} from 'angular2/src/core/change_detection/change_detection';\nimport {isPresent} from 'angular2/src/facade/lang';\nimport {CompileDirectiveMetadata} from './directive_metadata';\nimport {ParseSourceSpan} from './parse_util';\n\n/**\n * An Abstract Syntax Tree node representing part of a parsed Angular template.\n */\nexport interface TemplateAst {\n  /**\n   * The source span from which this node was parsed.\n   */\n  sourceSpan: ParseSourceSpan;\n\n  /**\n   * Visit this node and possibly transform it.\n   */\n  visit(visitor: TemplateAstVisitor, context: any): any;\n}\n\n/**\n * A segment of text within the template.\n */\nexport class TextAst implements TemplateAst {\n  constructor(public value: string, public ngContentIndex: number,\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any { return visitor.visitText(this, context); }\n}\n\n/**\n * A bound expression within the text of a template.\n */\nexport class BoundTextAst implements TemplateAst {\n  constructor(public value: AST, public ngContentIndex: number,\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitBoundText(this, context);\n  }\n}\n\n/**\n * A plain attribute on an element.\n */\nexport class AttrAst implements TemplateAst {\n  constructor(public name: string, public value: string, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any { return visitor.visitAttr(this, context); }\n}\n\n/**\n * A binding for an element property (e.g. `[property]=\"expression\"`).\n */\nexport class BoundElementPropertyAst implements TemplateAst {\n  constructor(public name: string, public type: PropertyBindingType, public value: AST,\n              public unit: string, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitElementProperty(this, context);\n  }\n}\n\n/**\n * A binding for an element event (e.g. `(event)=\"handler()\"`).\n */\nexport class BoundEventAst implements TemplateAst {\n  constructor(public name: string, public target: string, public handler: AST,\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitEvent(this, context);\n  }\n  get fullName() {\n    if (isPresent(this.target)) {\n      return `${this.target}:${this.name}`;\n    } else {\n      return this.name;\n    }\n  }\n}\n\n/**\n * A variable declaration on an element (e.g. `#var=\"expression\"`).\n */\nexport class VariableAst implements TemplateAst {\n  constructor(public name: string, public value: string, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitVariable(this, context);\n  }\n}\n\n/**\n * An element declaration in a template.\n */\nexport class ElementAst implements TemplateAst {\n  constructor(public name: string, public attrs: AttrAst[],\n              public inputs: BoundElementPropertyAst[], public outputs: BoundEventAst[],\n              public exportAsVars: VariableAst[], public directives: DirectiveAst[],\n              public children: TemplateAst[], public ngContentIndex: number,\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitElement(this, context);\n  }\n\n  /**\n   * Whether the element has any active bindings (inputs, outputs, vars, or directives).\n   */\n  isBound(): boolean {\n    return (this.inputs.length > 0 || this.outputs.length > 0 || this.exportAsVars.length > 0 ||\n            this.directives.length > 0);\n  }\n\n  /**\n   * Get the component associated with this element, if any.\n   */\n  getComponent(): CompileDirectiveMetadata {\n    return this.directives.length > 0 && this.directives[0].directive.isComponent ?\n               this.directives[0].directive :\n               null;\n  }\n}\n\n/**\n * A `<template>` element included in an Angular template.\n */\nexport class EmbeddedTemplateAst implements TemplateAst {\n  constructor(public attrs: AttrAst[], public outputs: BoundEventAst[], public vars: VariableAst[],\n              public directives: DirectiveAst[], public children: TemplateAst[],\n              public ngContentIndex: number, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitEmbeddedTemplate(this, context);\n  }\n}\n\n/**\n * A directive property with a bound value (e.g. `*ngIf=\"condition\").\n */\nexport class BoundDirectivePropertyAst implements TemplateAst {\n  constructor(public directiveName: string, public templateName: string, public value: AST,\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitDirectiveProperty(this, context);\n  }\n}\n\n/**\n * A directive declared on an element.\n */\nexport class DirectiveAst implements TemplateAst {\n  constructor(public directive: CompileDirectiveMetadata,\n              public inputs: BoundDirectivePropertyAst[],\n              public hostProperties: BoundElementPropertyAst[], public hostEvents: BoundEventAst[],\n              public exportAsVars: VariableAst[], public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitDirective(this, context);\n  }\n}\n\n/**\n * Position where content is to be projected (instance of `<ng-content>` in a template).\n */\nexport class NgContentAst implements TemplateAst {\n  constructor(public index: number, public ngContentIndex: number,\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: TemplateAstVisitor, context: any): any {\n    return visitor.visitNgContent(this, context);\n  }\n}\n\n/**\n * Enumeration of types of property bindings.\n */\nexport enum PropertyBindingType {\n\n  /**\n   * A normal binding to a property (e.g. `[property]=\"expression\"`).\n   */\n  Property,\n\n  /**\n   * A binding to an element attribute (e.g. `[attr.name]=\"expression\"`).\n   */\n  Attribute,\n\n  /**\n   * A binding to a CSS class (e.g. `[class.name]=\"condition\"`).\n   */\n  Class,\n\n  /**\n   * A binding to a style rule (e.g. `[style.rule]=\"expression\"`).\n   */\n  Style\n}\n\n/**\n * A visitor for {@link TemplateAst} trees that will process each node.\n */\nexport interface TemplateAstVisitor {\n  visitNgContent(ast: NgContentAst, context: any): any;\n  visitEmbeddedTemplate(ast: EmbeddedTemplateAst, context: any): any;\n  visitElement(ast: ElementAst, context: any): any;\n  visitVariable(ast: VariableAst, context: any): any;\n  visitEvent(ast: BoundEventAst, context: any): any;\n  visitElementProperty(ast: BoundElementPropertyAst, context: any): any;\n  visitAttr(ast: AttrAst, context: any): any;\n  visitBoundText(ast: BoundTextAst, context: any): any;\n  visitText(ast: TextAst, context: any): any;\n  visitDirective(ast: DirectiveAst, context: any): any;\n  visitDirectiveProperty(ast: BoundDirectivePropertyAst, context: any): any;\n}\n\n/**\n * Visit every node in a list of {@link TemplateAst}s with the given {@link TemplateAstVisitor}.\n */\nexport function templateVisitAll(visitor: TemplateAstVisitor, asts: TemplateAst[],\n                                 context: any = null): any[] {\n  var result = [];\n  asts.forEach(ast => {\n    var astResult = ast.visit(visitor, context);\n    if (isPresent(astResult)) {\n      result.push(astResult);\n    }\n  });\n  return result;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/template_ast.ts\n **/","import {\n  CONST_EXPR,\n  isPresent,\n  isBlank,\n  Type,\n  StringWrapper,\n  looseIdentical,\n  isPrimitive\n} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {\n  ListWrapper,\n  MapWrapper,\n  StringMapWrapper,\n  isListLikeIterable,\n  areIterablesEqual\n} from 'angular2/src/facade/collection';\nimport {ProtoRecord} from './proto_record';\nimport {ChangeDetectionStrategy, isDefaultChangeDetectionStrategy} from './constants';\nimport {implementsOnDestroy} from './pipe_lifecycle_reflector';\nimport {BindingTarget} from './binding_record';\nimport {DirectiveIndex} from './directive_record';\nimport {SelectedPipe} from './pipes';\n\n\n/**\n * Indicates that the result of a {@link PipeMetadata} transformation has changed even though the\n * reference\n * has not changed.\n *\n * The wrapped value will be unwrapped by change detection, and the unwrapped value will be stored.\n *\n * Example:\n *\n * ```\n * if (this._latestValue === this._latestReturnedValue) {\n *    return this._latestReturnedValue;\n *  } else {\n *    this._latestReturnedValue = this._latestValue;\n *    return WrappedValue.wrap(this._latestValue); // this will force update\n *  }\n * ```\n */\nexport class WrappedValue {\n  constructor(public wrapped: any) {}\n\n  static wrap(value: any): WrappedValue {\n    var w = _wrappedValues[_wrappedIndex++ % 5];\n    w.wrapped = value;\n    return w;\n  }\n}\n\nvar _wrappedValues = [\n  new WrappedValue(null),\n  new WrappedValue(null),\n  new WrappedValue(null),\n  new WrappedValue(null),\n  new WrappedValue(null)\n];\n\nvar _wrappedIndex = 0;\n\n/**\n * Represents a basic change from a previous to a new value.\n */\nexport class SimpleChange {\n  constructor(public previousValue: any, public currentValue: any) {}\n\n  /**\n   * Check whether the new value is the first value assigned.\n   */\n  isFirstChange(): boolean { return this.previousValue === ChangeDetectionUtil.uninitialized; }\n}\n\nfunction _simpleChange(previousValue, currentValue): SimpleChange {\n  return new SimpleChange(previousValue, currentValue);\n}\n\n/* tslint:disable:requireParameterType */\nexport class ChangeDetectionUtil {\n  static uninitialized: Object = CONST_EXPR<Object>(new Object());\n\n  static arrayFn0(): any[] { return []; }\n  static arrayFn1(a1): any[] { return [a1]; }\n  static arrayFn2(a1, a2): any[] { return [a1, a2]; }\n  static arrayFn3(a1, a2, a3): any[] { return [a1, a2, a3]; }\n  static arrayFn4(a1, a2, a3, a4): any[] { return [a1, a2, a3, a4]; }\n  static arrayFn5(a1, a2, a3, a4, a5): any[] { return [a1, a2, a3, a4, a5]; }\n  static arrayFn6(a1, a2, a3, a4, a5, a6): any[] { return [a1, a2, a3, a4, a5, a6]; }\n  static arrayFn7(a1, a2, a3, a4, a5, a6, a7): any[] { return [a1, a2, a3, a4, a5, a6, a7]; }\n  static arrayFn8(a1, a2, a3, a4, a5, a6, a7, a8): any[] {\n    return [a1, a2, a3, a4, a5, a6, a7, a8];\n  }\n  static arrayFn9(a1, a2, a3, a4, a5, a6, a7, a8, a9): any[] {\n    return [a1, a2, a3, a4, a5, a6, a7, a8, a9];\n  }\n\n  static operation_negate(value): any { return !value; }\n  static operation_add(left, right): any { return left + right; }\n  static operation_subtract(left, right): any { return left - right; }\n  static operation_multiply(left, right): any { return left * right; }\n  static operation_divide(left, right): any { return left / right; }\n  static operation_remainder(left, right): any { return left % right; }\n  static operation_equals(left, right): any { return left == right; }\n  static operation_not_equals(left, right): any { return left != right; }\n  static operation_identical(left, right): any { return left === right; }\n  static operation_not_identical(left, right): any { return left !== right; }\n  static operation_less_then(left, right): any { return left < right; }\n  static operation_greater_then(left, right): any { return left > right; }\n  static operation_less_or_equals_then(left, right): any { return left <= right; }\n  static operation_greater_or_equals_then(left, right): any { return left >= right; }\n  static cond(cond, trueVal, falseVal): any { return cond ? trueVal : falseVal; }\n\n  static mapFn(keys: any[]): any {\n    function buildMap(values): {[k: /*any*/ string]: any} {\n      var res = StringMapWrapper.create();\n      for (var i = 0; i < keys.length; ++i) {\n        StringMapWrapper.set(res, keys[i], values[i]);\n      }\n      return res;\n    }\n\n    switch (keys.length) {\n      case 0:\n        return () => [];\n      case 1:\n        return (a1) => buildMap([a1]);\n      case 2:\n        return (a1, a2) => buildMap([a1, a2]);\n      case 3:\n        return (a1, a2, a3) => buildMap([a1, a2, a3]);\n      case 4:\n        return (a1, a2, a3, a4) => buildMap([a1, a2, a3, a4]);\n      case 5:\n        return (a1, a2, a3, a4, a5) => buildMap([a1, a2, a3, a4, a5]);\n      case 6:\n        return (a1, a2, a3, a4, a5, a6) => buildMap([a1, a2, a3, a4, a5, a6]);\n      case 7:\n        return (a1, a2, a3, a4, a5, a6, a7) => buildMap([a1, a2, a3, a4, a5, a6, a7]);\n      case 8:\n        return (a1, a2, a3, a4, a5, a6, a7, a8) => buildMap([a1, a2, a3, a4, a5, a6, a7, a8]);\n      case 9:\n        return (a1, a2, a3, a4, a5, a6, a7, a8, a9) =>\n                   buildMap([a1, a2, a3, a4, a5, a6, a7, a8, a9]);\n      default:\n        throw new BaseException(`Does not support literal maps with more than 9 elements`);\n    }\n  }\n\n  static keyedAccess(obj, args): any { return obj[args[0]]; }\n\n  static unwrapValue(value: any): any {\n    if (value instanceof WrappedValue) {\n      return value.wrapped;\n    } else {\n      return value;\n    }\n  }\n\n  static changeDetectionMode(strategy: ChangeDetectionStrategy): ChangeDetectionStrategy {\n    return isDefaultChangeDetectionStrategy(strategy) ? ChangeDetectionStrategy.CheckAlways :\n                                                        ChangeDetectionStrategy.CheckOnce;\n  }\n\n  static simpleChange(previousValue: any, currentValue: any): SimpleChange {\n    return _simpleChange(previousValue, currentValue);\n  }\n\n  static isValueBlank(value: any): boolean { return isBlank(value); }\n\n  static s(value: any): string { return isPresent(value) ? `${value}` : ''; }\n\n  static protoByIndex(protos: ProtoRecord[], selfIndex: number): ProtoRecord {\n    return selfIndex < 1 ?\n               null :\n               protos[selfIndex - 1];  // self index is shifted by one because of context\n  }\n\n  static callPipeOnDestroy(selectedPipe: SelectedPipe): void {\n    if (implementsOnDestroy(selectedPipe.pipe)) {\n      (<any>selectedPipe.pipe).ngOnDestroy();\n    }\n  }\n\n  static bindingTarget(mode: string, elementIndex: number, name: string, unit: string,\n                       debug: string): BindingTarget {\n    return new BindingTarget(mode, elementIndex, name, unit, debug);\n  }\n\n  static directiveIndex(elementIndex: number, directiveIndex: number): DirectiveIndex {\n    return new DirectiveIndex(elementIndex, directiveIndex);\n  }\n\n  static looseNotIdentical(a: any, b: any): boolean { return !looseIdentical(a, b); }\n\n  static devModeEqual(a: any, b: any): boolean {\n    if (isListLikeIterable(a) && isListLikeIterable(b)) {\n      return areIterablesEqual(a, b, ChangeDetectionUtil.devModeEqual);\n\n    } else if (!isListLikeIterable(a) && !isPrimitive(a) && !isListLikeIterable(b) &&\n               !isPrimitive(b)) {\n      return true;\n\n    } else {\n      return looseIdentical(a, b);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/change_detection_util.ts\n **/","import {CONST, CONST_EXPR, stringify, isBlank, isPresent} from \"angular2/src/facade/lang\";\n\n/**\n * A parameter metadata that specifies a dependency.\n *\n * ### Example ([live demo](http://plnkr.co/edit/6uHYJK?p=preview))\n *\n * ```typescript\n * class Engine {}\n *\n * @Injectable()\n * class Car {\n *   engine;\n *   constructor(@Inject(\"MyEngine\") engine:Engine) {\n *     this.engine = engine;\n *   }\n * }\n *\n * var injector = Injector.resolveAndCreate([\n *  provide(\"MyEngine\", {useClass: Engine}),\n *  Car\n * ]);\n *\n * expect(injector.get(Car).engine instanceof Engine).toBe(true);\n * ```\n *\n * When `@Inject()` is not present, {@link Injector} will use the type annotation of the parameter.\n *\n * ### Example\n *\n * ```typescript\n * class Engine {}\n *\n * @Injectable()\n * class Car {\n *   constructor(public engine: Engine) {} //same as constructor(@Inject(Engine) engine:Engine)\n * }\n *\n * var injector = Injector.resolveAndCreate([Engine, Car]);\n * expect(injector.get(Car).engine instanceof Engine).toBe(true);\n * ```\n */\n@CONST()\nexport class InjectMetadata {\n  constructor(public token) {}\n  toString(): string { return `@Inject(${stringify(this.token)})`; }\n}\n\n/**\n * A parameter metadata that marks a dependency as optional. {@link Injector} provides `null` if\n * the dependency is not found.\n *\n * ### Example ([live demo](http://plnkr.co/edit/AsryOm?p=preview))\n *\n * ```typescript\n * class Engine {}\n *\n * @Injectable()\n * class Car {\n *   engine;\n *   constructor(@Optional() engine:Engine) {\n *     this.engine = engine;\n *   }\n * }\n *\n * var injector = Injector.resolveAndCreate([Car]);\n * expect(injector.get(Car).engine).toBeNull();\n * ```\n */\n@CONST()\nexport class OptionalMetadata {\n  toString(): string { return `@Optional()`; }\n}\n\n/**\n * `DependencyMetadata` is used by the framework to extend DI.\n * This is internal to Angular and should not be used directly.\n */\n@CONST()\nexport class DependencyMetadata {\n  get token() { return null; }\n}\n\n/**\n * A marker metadata that marks a class as available to {@link Injector} for creation.\n *\n * ### Example ([live demo](http://plnkr.co/edit/Wk4DMQ?p=preview))\n *\n * ```typescript\n * @Injectable()\n * class UsefulService {}\n *\n * @Injectable()\n * class NeedsService {\n *   constructor(public service:UsefulService) {}\n * }\n *\n * var injector = Injector.resolveAndCreate([NeedsService, UsefulService]);\n * expect(injector.get(NeedsService).service instanceof UsefulService).toBe(true);\n * ```\n * {@link Injector} will throw {@link NoAnnotationError} when trying to instantiate a class that\n * does not have `@Injectable` marker, as shown in the example below.\n *\n * ```typescript\n * class UsefulService {}\n *\n * class NeedsService {\n *   constructor(public service:UsefulService) {}\n * }\n *\n * var injector = Injector.resolveAndCreate([NeedsService, UsefulService]);\n * expect(() => injector.get(NeedsService)).toThrowError();\n * ```\n */\n@CONST()\nexport class InjectableMetadata {\n  constructor() {}\n}\n\n/**\n * Specifies that an {@link Injector} should retrieve a dependency only from itself.\n *\n * ### Example ([live demo](http://plnkr.co/edit/NeagAg?p=preview))\n *\n * ```typescript\n * class Dependency {\n * }\n *\n * @Injectable()\n * class NeedsDependency {\n *   dependency;\n *   constructor(@Self() dependency:Dependency) {\n *     this.dependency = dependency;\n *   }\n * }\n *\n * var inj = Injector.resolveAndCreate([Dependency, NeedsDependency]);\n * var nd = inj.get(NeedsDependency);\n *\n * expect(nd.dependency instanceof Dependency).toBe(true);\n *\n * var inj = Injector.resolveAndCreate([Dependency]);\n * var child = inj.resolveAndCreateChild([NeedsDependency]);\n * expect(() => child.get(NeedsDependency)).toThrowError();\n * ```\n */\n@CONST()\nexport class SelfMetadata {\n  toString(): string { return `@Self()`; }\n}\n\n/**\n * Specifies that the dependency resolution should start from the parent injector.\n *\n * ### Example ([live demo](http://plnkr.co/edit/Wchdzb?p=preview))\n *\n * ```typescript\n * class Dependency {\n * }\n *\n * @Injectable()\n * class NeedsDependency {\n *   dependency;\n *   constructor(@SkipSelf() dependency:Dependency) {\n *     this.dependency = dependency;\n *   }\n * }\n *\n * var parent = Injector.resolveAndCreate([Dependency]);\n * var child = parent.resolveAndCreateChild([NeedsDependency]);\n * expect(child.get(NeedsDependency).dependency instanceof Depedency).toBe(true);\n *\n * var inj = Injector.resolveAndCreate([Dependency, NeedsDependency]);\n * expect(() => inj.get(NeedsDependency)).toThrowError();\n * ```\n */\n@CONST()\nexport class SkipSelfMetadata {\n  toString(): string { return `@SkipSelf()`; }\n}\n\n/**\n * Specifies that an injector should retrieve a dependency from any injector until reaching the\n * closest host.\n *\n * In Angular, a component element is automatically declared as a host for all the injectors in\n * its view.\n *\n * ### Example ([live demo](http://plnkr.co/edit/GX79pV?p=preview))\n *\n * In the following example `App` contains `ParentCmp`, which contains `ChildDirective`.\n * So `ParentCmp` is the host of `ChildDirective`.\n *\n * `ChildDirective` depends on two services: `HostService` and `OtherService`.\n * `HostService` is defined at `ParentCmp`, and `OtherService` is defined at `App`.\n *\n *```typescript\n * class OtherService {}\n * class HostService {}\n *\n * @Directive({\n *   selector: 'child-directive'\n * })\n * class ChildDirective {\n *   constructor(@Optional() @Host() os:OtherService, @Optional() @Host() hs:HostService){\n *     console.log(\"os is null\", os);\n *     console.log(\"hs is NOT null\", hs);\n *   }\n * }\n *\n * @Component({\n *   selector: 'parent-cmp',\n *   providers: [HostService],\n *   template: `\n *     Dir: <child-directive></child-directive>\n *   `,\n *   directives: [ChildDirective]\n * })\n * class ParentCmp {\n * }\n *\n * @Component({\n *   selector: 'app',\n *   providers: [OtherService],\n *   template: `\n *     Parent: <parent-cmp></parent-cmp>\n *   `,\n *   directives: [ParentCmp]\n * })\n * class App {\n * }\n *\n * bootstrap(App);\n *```\n */\n@CONST()\nexport class HostMetadata {\n  toString(): string { return `@Host()`; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/metadata.ts\n **/","import {HostViewFactoryRef} from 'angular2/src/core/linker/view_ref';\n\nimport {Injectable} from 'angular2/src/core/di';\nimport {Type, isBlank, stringify} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\nimport {HostViewFactory} from 'angular2/src/core/linker/view';\nimport {HostViewFactoryRef_} from 'angular2/src/core/linker/view_ref';\n\n/**\n * Low-level service for compiling {@link Component}s into {@link ProtoViewRef ProtoViews}s, which\n * can later be used to create and render a Component instance.\n *\n * Most applications should instead use higher-level {@link DynamicComponentLoader} service, which\n * both compiles and instantiates a Component.\n */\nexport abstract class Compiler {\n  abstract compileInHost(componentType: Type): Promise<HostViewFactoryRef>;\n  abstract clearCache();\n}\n\nfunction isHostViewFactory(type: any): boolean {\n  return type instanceof HostViewFactory;\n}\n\n@Injectable()\nexport class Compiler_ extends Compiler {\n  compileInHost(componentType: Type): Promise<HostViewFactoryRef_> {\n    var metadatas = reflector.annotations(componentType);\n    var hostViewFactory = metadatas.find(isHostViewFactory);\n\n    if (isBlank(hostViewFactory)) {\n      throw new BaseException(`No precompiled component ${stringify(componentType)} found`);\n    }\n    return PromiseWrapper.resolve(new HostViewFactoryRef_(hostViewFactory));\n  }\n\n  clearCache() {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/compiler.ts\n **/","import {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {Injectable, Inject, OpaqueToken} from 'angular2/src/core/di';\nimport {NgZone} from 'angular2/src/core/zone/ng_zone';\nimport {ListWrapper} from 'angular2/src/facade/collection';\n\nexport const EVENT_MANAGER_PLUGINS: OpaqueToken =\n    CONST_EXPR(new OpaqueToken(\"EventManagerPlugins\"));\n\n@Injectable()\nexport class EventManager {\n  private _plugins: EventManagerPlugin[];\n\n  constructor(@Inject(EVENT_MANAGER_PLUGINS) plugins: EventManagerPlugin[], private _zone: NgZone) {\n    plugins.forEach(p => p.manager = this);\n    this._plugins = ListWrapper.reversed(plugins);\n  }\n\n  addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n    var plugin = this._findPluginFor(eventName);\n    return plugin.addEventListener(element, eventName, handler);\n  }\n\n  addGlobalEventListener(target: string, eventName: string, handler: Function): Function {\n    var plugin = this._findPluginFor(eventName);\n    return plugin.addGlobalEventListener(target, eventName, handler);\n  }\n\n  getZone(): NgZone { return this._zone; }\n\n  /** @internal */\n  _findPluginFor(eventName: string): EventManagerPlugin {\n    var plugins = this._plugins;\n    for (var i = 0; i < plugins.length; i++) {\n      var plugin = plugins[i];\n      if (plugin.supports(eventName)) {\n        return plugin;\n      }\n    }\n    throw new BaseException(`No event manager plugin found for event ${eventName}`);\n  }\n}\n\nexport class EventManagerPlugin {\n  manager: EventManager;\n\n  // That is equivalent to having supporting $event.target\n  supports(eventName: string): boolean { return false; }\n\n  addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n    throw \"not implemented\";\n  }\n\n  addGlobalEventListener(element: string, eventName: string, handler: Function): Function {\n    throw \"not implemented\";\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/events/event_manager.ts\n **/","import {Form} from './form_interface';\nimport {AbstractControlDirective} from './abstract_control_directive';\n\n/**\n * A directive that contains multiple {@link NgControl}s.\n *\n * Only used by the forms module.\n */\nexport class ControlContainer extends AbstractControlDirective {\n  name: string;\n\n  /**\n   * Get the form to which this container belongs.\n   */\n  get formDirective(): Form { return null; }\n\n  /**\n   * Get the path to this container.\n   */\n  get path(): string[] { return null; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/control_container.ts\n **/","import {\n  isPresent,\n  isBlank,\n  normalizeBool,\n  RegExpWrapper,\n  CONST_EXPR\n} from 'angular2/src/facade/lang';\n\n// see http://www.w3.org/TR/html51/syntax.html#named-character-references\n// see https://html.spec.whatwg.org/multipage/entities.json\n// This list is not exhaustive to keep the compiler footprint low.\n// The `&#123;` / `&#x1ab;` syntax should be used when the named character reference does not exist.\nexport const NAMED_ENTITIES = CONST_EXPR({\n  'Aacute': '\\u00C1',\n  'aacute': '\\u00E1',\n  'Acirc': '\\u00C2',\n  'acirc': '\\u00E2',\n  'acute': '\\u00B4',\n  'AElig': '\\u00C6',\n  'aelig': '\\u00E6',\n  'Agrave': '\\u00C0',\n  'agrave': '\\u00E0',\n  'alefsym': '\\u2135',\n  'Alpha': '\\u0391',\n  'alpha': '\\u03B1',\n  'amp': '&',\n  'and': '\\u2227',\n  'ang': '\\u2220',\n  'apos': '\\u0027',\n  'Aring': '\\u00C5',\n  'aring': '\\u00E5',\n  'asymp': '\\u2248',\n  'Atilde': '\\u00C3',\n  'atilde': '\\u00E3',\n  'Auml': '\\u00C4',\n  'auml': '\\u00E4',\n  'bdquo': '\\u201E',\n  'Beta': '\\u0392',\n  'beta': '\\u03B2',\n  'brvbar': '\\u00A6',\n  'bull': '\\u2022',\n  'cap': '\\u2229',\n  'Ccedil': '\\u00C7',\n  'ccedil': '\\u00E7',\n  'cedil': '\\u00B8',\n  'cent': '\\u00A2',\n  'Chi': '\\u03A7',\n  'chi': '\\u03C7',\n  'circ': '\\u02C6',\n  'clubs': '\\u2663',\n  'cong': '\\u2245',\n  'copy': '\\u00A9',\n  'crarr': '\\u21B5',\n  'cup': '\\u222A',\n  'curren': '\\u00A4',\n  'dagger': '\\u2020',\n  'Dagger': '\\u2021',\n  'darr': '\\u2193',\n  'dArr': '\\u21D3',\n  'deg': '\\u00B0',\n  'Delta': '\\u0394',\n  'delta': '\\u03B4',\n  'diams': '\\u2666',\n  'divide': '\\u00F7',\n  'Eacute': '\\u00C9',\n  'eacute': '\\u00E9',\n  'Ecirc': '\\u00CA',\n  'ecirc': '\\u00EA',\n  'Egrave': '\\u00C8',\n  'egrave': '\\u00E8',\n  'empty': '\\u2205',\n  'emsp': '\\u2003',\n  'ensp': '\\u2002',\n  'Epsilon': '\\u0395',\n  'epsilon': '\\u03B5',\n  'equiv': '\\u2261',\n  'Eta': '\\u0397',\n  'eta': '\\u03B7',\n  'ETH': '\\u00D0',\n  'eth': '\\u00F0',\n  'Euml': '\\u00CB',\n  'euml': '\\u00EB',\n  'euro': '\\u20AC',\n  'exist': '\\u2203',\n  'fnof': '\\u0192',\n  'forall': '\\u2200',\n  'frac12': '\\u00BD',\n  'frac14': '\\u00BC',\n  'frac34': '\\u00BE',\n  'frasl': '\\u2044',\n  'Gamma': '\\u0393',\n  'gamma': '\\u03B3',\n  'ge': '\\u2265',\n  'gt': '>',\n  'harr': '\\u2194',\n  'hArr': '\\u21D4',\n  'hearts': '\\u2665',\n  'hellip': '\\u2026',\n  'Iacute': '\\u00CD',\n  'iacute': '\\u00ED',\n  'Icirc': '\\u00CE',\n  'icirc': '\\u00EE',\n  'iexcl': '\\u00A1',\n  'Igrave': '\\u00CC',\n  'igrave': '\\u00EC',\n  'image': '\\u2111',\n  'infin': '\\u221E',\n  'int': '\\u222B',\n  'Iota': '\\u0399',\n  'iota': '\\u03B9',\n  'iquest': '\\u00BF',\n  'isin': '\\u2208',\n  'Iuml': '\\u00CF',\n  'iuml': '\\u00EF',\n  'Kappa': '\\u039A',\n  'kappa': '\\u03BA',\n  'Lambda': '\\u039B',\n  'lambda': '\\u03BB',\n  'lang': '\\u27E8',\n  'laquo': '\\u00AB',\n  'larr': '\\u2190',\n  'lArr': '\\u21D0',\n  'lceil': '\\u2308',\n  'ldquo': '\\u201C',\n  'le': '\\u2264',\n  'lfloor': '\\u230A',\n  'lowast': '\\u2217',\n  'loz': '\\u25CA',\n  'lrm': '\\u200E',\n  'lsaquo': '\\u2039',\n  'lsquo': '\\u2018',\n  'lt': '<',\n  'macr': '\\u00AF',\n  'mdash': '\\u2014',\n  'micro': '\\u00B5',\n  'middot': '\\u00B7',\n  'minus': '\\u2212',\n  'Mu': '\\u039C',\n  'mu': '\\u03BC',\n  'nabla': '\\u2207',\n  'nbsp': '\\u00A0',\n  'ndash': '\\u2013',\n  'ne': '\\u2260',\n  'ni': '\\u220B',\n  'not': '\\u00AC',\n  'notin': '\\u2209',\n  'nsub': '\\u2284',\n  'Ntilde': '\\u00D1',\n  'ntilde': '\\u00F1',\n  'Nu': '\\u039D',\n  'nu': '\\u03BD',\n  'Oacute': '\\u00D3',\n  'oacute': '\\u00F3',\n  'Ocirc': '\\u00D4',\n  'ocirc': '\\u00F4',\n  'OElig': '\\u0152',\n  'oelig': '\\u0153',\n  'Ograve': '\\u00D2',\n  'ograve': '\\u00F2',\n  'oline': '\\u203E',\n  'Omega': '\\u03A9',\n  'omega': '\\u03C9',\n  'Omicron': '\\u039F',\n  'omicron': '\\u03BF',\n  'oplus': '\\u2295',\n  'or': '\\u2228',\n  'ordf': '\\u00AA',\n  'ordm': '\\u00BA',\n  'Oslash': '\\u00D8',\n  'oslash': '\\u00F8',\n  'Otilde': '\\u00D5',\n  'otilde': '\\u00F5',\n  'otimes': '\\u2297',\n  'Ouml': '\\u00D6',\n  'ouml': '\\u00F6',\n  'para': '\\u00B6',\n  'permil': '\\u2030',\n  'perp': '\\u22A5',\n  'Phi': '\\u03A6',\n  'phi': '\\u03C6',\n  'Pi': '\\u03A0',\n  'pi': '\\u03C0',\n  'piv': '\\u03D6',\n  'plusmn': '\\u00B1',\n  'pound': '\\u00A3',\n  'prime': '\\u2032',\n  'Prime': '\\u2033',\n  'prod': '\\u220F',\n  'prop': '\\u221D',\n  'Psi': '\\u03A8',\n  'psi': '\\u03C8',\n  'quot': '\\u0022',\n  'radic': '\\u221A',\n  'rang': '\\u27E9',\n  'raquo': '\\u00BB',\n  'rarr': '\\u2192',\n  'rArr': '\\u21D2',\n  'rceil': '\\u2309',\n  'rdquo': '\\u201D',\n  'real': '\\u211C',\n  'reg': '\\u00AE',\n  'rfloor': '\\u230B',\n  'Rho': '\\u03A1',\n  'rho': '\\u03C1',\n  'rlm': '\\u200F',\n  'rsaquo': '\\u203A',\n  'rsquo': '\\u2019',\n  'sbquo': '\\u201A',\n  'Scaron': '\\u0160',\n  'scaron': '\\u0161',\n  'sdot': '\\u22C5',\n  'sect': '\\u00A7',\n  'shy': '\\u00AD',\n  'Sigma': '\\u03A3',\n  'sigma': '\\u03C3',\n  'sigmaf': '\\u03C2',\n  'sim': '\\u223C',\n  'spades': '\\u2660',\n  'sub': '\\u2282',\n  'sube': '\\u2286',\n  'sum': '\\u2211',\n  'sup': '\\u2283',\n  'sup1': '\\u00B9',\n  'sup2': '\\u00B2',\n  'sup3': '\\u00B3',\n  'supe': '\\u2287',\n  'szlig': '\\u00DF',\n  'Tau': '\\u03A4',\n  'tau': '\\u03C4',\n  'there4': '\\u2234',\n  'Theta': '\\u0398',\n  'theta': '\\u03B8',\n  'thetasym': '\\u03D1',\n  'thinsp': '\\u2009',\n  'THORN': '\\u00DE',\n  'thorn': '\\u00FE',\n  'tilde': '\\u02DC',\n  'times': '\\u00D7',\n  'trade': '\\u2122',\n  'Uacute': '\\u00DA',\n  'uacute': '\\u00FA',\n  'uarr': '\\u2191',\n  'uArr': '\\u21D1',\n  'Ucirc': '\\u00DB',\n  'ucirc': '\\u00FB',\n  'Ugrave': '\\u00D9',\n  'ugrave': '\\u00F9',\n  'uml': '\\u00A8',\n  'upsih': '\\u03D2',\n  'Upsilon': '\\u03A5',\n  'upsilon': '\\u03C5',\n  'Uuml': '\\u00DC',\n  'uuml': '\\u00FC',\n  'weierp': '\\u2118',\n  'Xi': '\\u039E',\n  'xi': '\\u03BE',\n  'Yacute': '\\u00DD',\n  'yacute': '\\u00FD',\n  'yen': '\\u00A5',\n  'yuml': '\\u00FF',\n  'Yuml': '\\u0178',\n  'Zeta': '\\u0396',\n  'zeta': '\\u03B6',\n  'zwj': '\\u200D',\n  'zwnj': '\\u200C',\n});\n\nexport enum HtmlTagContentType {\n  RAW_TEXT,\n  ESCAPABLE_RAW_TEXT,\n  PARSABLE_DATA\n}\n\nexport class HtmlTagDefinition {\n  private closedByChildren: {[key: string]: boolean} = {};\n  public closedByParent: boolean = false;\n  public requiredParents: {[key: string]: boolean};\n  public parentToAdd: string;\n  public implicitNamespacePrefix: string;\n  public contentType: HtmlTagContentType;\n  public isVoid: boolean;\n  public ignoreFirstLf: boolean;\n\n  constructor({closedByChildren, requiredParents, implicitNamespacePrefix, contentType,\n               closedByParent, isVoid, ignoreFirstLf}: {\n    closedByChildren?: string[],\n    closedByParent?: boolean,\n    requiredParents?: string[],\n    implicitNamespacePrefix?: string,\n    contentType?: HtmlTagContentType,\n    isVoid?: boolean,\n    ignoreFirstLf?: boolean\n  } = {}) {\n    if (isPresent(closedByChildren) && closedByChildren.length > 0) {\n      closedByChildren.forEach(tagName => this.closedByChildren[tagName] = true);\n    }\n    this.isVoid = normalizeBool(isVoid);\n    this.closedByParent = normalizeBool(closedByParent) || this.isVoid;\n    if (isPresent(requiredParents) && requiredParents.length > 0) {\n      this.requiredParents = {};\n      this.parentToAdd = requiredParents[0];\n      requiredParents.forEach(tagName => this.requiredParents[tagName] = true);\n    }\n    this.implicitNamespacePrefix = implicitNamespacePrefix;\n    this.contentType = isPresent(contentType) ? contentType : HtmlTagContentType.PARSABLE_DATA;\n    this.ignoreFirstLf = normalizeBool(ignoreFirstLf);\n  }\n\n  requireExtraParent(currentParent: string): boolean {\n    if (isBlank(this.requiredParents)) {\n      return false;\n    }\n\n    if (isBlank(currentParent)) {\n      return true;\n    }\n\n    let lcParent = currentParent.toLowerCase();\n    return this.requiredParents[lcParent] != true && lcParent != 'template';\n  }\n\n  isClosedByChild(name: string): boolean {\n    return this.isVoid || normalizeBool(this.closedByChildren[name.toLowerCase()]);\n  }\n}\n\n// see http://www.w3.org/TR/html51/syntax.html#optional-tags\n// This implementation does not fully conform to the HTML5 spec.\nvar TAG_DEFINITIONS: {[key: string]: HtmlTagDefinition} = {\n  'base': new HtmlTagDefinition({isVoid: true}),\n  'meta': new HtmlTagDefinition({isVoid: true}),\n  'area': new HtmlTagDefinition({isVoid: true}),\n  'embed': new HtmlTagDefinition({isVoid: true}),\n  'link': new HtmlTagDefinition({isVoid: true}),\n  'img': new HtmlTagDefinition({isVoid: true}),\n  'input': new HtmlTagDefinition({isVoid: true}),\n  'param': new HtmlTagDefinition({isVoid: true}),\n  'hr': new HtmlTagDefinition({isVoid: true}),\n  'br': new HtmlTagDefinition({isVoid: true}),\n  'source': new HtmlTagDefinition({isVoid: true}),\n  'track': new HtmlTagDefinition({isVoid: true}),\n  'wbr': new HtmlTagDefinition({isVoid: true}),\n  'p': new HtmlTagDefinition({\n    closedByChildren: [\n      'address',\n      'article',\n      'aside',\n      'blockquote',\n      'div',\n      'dl',\n      'fieldset',\n      'footer',\n      'form',\n      'h1',\n      'h2',\n      'h3',\n      'h4',\n      'h5',\n      'h6',\n      'header',\n      'hgroup',\n      'hr',\n      'main',\n      'nav',\n      'ol',\n      'p',\n      'pre',\n      'section',\n      'table',\n      'ul'\n    ],\n    closedByParent: true\n  }),\n  'thead': new HtmlTagDefinition({closedByChildren: ['tbody', 'tfoot']}),\n  'tbody': new HtmlTagDefinition({closedByChildren: ['tbody', 'tfoot'], closedByParent: true}),\n  'tfoot': new HtmlTagDefinition({closedByChildren: ['tbody'], closedByParent: true}),\n  'tr': new HtmlTagDefinition({\n    closedByChildren: ['tr'],\n    requiredParents: ['tbody', 'tfoot', 'thead'],\n    closedByParent: true\n  }),\n  'td': new HtmlTagDefinition({closedByChildren: ['td', 'th'], closedByParent: true}),\n  'th': new HtmlTagDefinition({closedByChildren: ['td', 'th'], closedByParent: true}),\n  'col': new HtmlTagDefinition({requiredParents: ['colgroup'], isVoid: true}),\n  'svg': new HtmlTagDefinition({implicitNamespacePrefix: 'svg'}),\n  'math': new HtmlTagDefinition({implicitNamespacePrefix: 'math'}),\n  'li': new HtmlTagDefinition({closedByChildren: ['li'], closedByParent: true}),\n  'dt': new HtmlTagDefinition({closedByChildren: ['dt', 'dd']}),\n  'dd': new HtmlTagDefinition({closedByChildren: ['dt', 'dd'], closedByParent: true}),\n  'rb': new HtmlTagDefinition({closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true}),\n  'rt': new HtmlTagDefinition({closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true}),\n  'rtc': new HtmlTagDefinition({closedByChildren: ['rb', 'rtc', 'rp'], closedByParent: true}),\n  'rp': new HtmlTagDefinition({closedByChildren: ['rb', 'rt', 'rtc', 'rp'], closedByParent: true}),\n  'optgroup': new HtmlTagDefinition({closedByChildren: ['optgroup'], closedByParent: true}),\n  'option': new HtmlTagDefinition({closedByChildren: ['option', 'optgroup'], closedByParent: true}),\n  'pre': new HtmlTagDefinition({ignoreFirstLf: true}),\n  'listing': new HtmlTagDefinition({ignoreFirstLf: true}),\n  'style': new HtmlTagDefinition({contentType: HtmlTagContentType.RAW_TEXT}),\n  'script': new HtmlTagDefinition({contentType: HtmlTagContentType.RAW_TEXT}),\n  'title': new HtmlTagDefinition({contentType: HtmlTagContentType.ESCAPABLE_RAW_TEXT}),\n  'textarea': new HtmlTagDefinition(\n      {contentType: HtmlTagContentType.ESCAPABLE_RAW_TEXT, ignoreFirstLf: true}),\n};\n\nvar DEFAULT_TAG_DEFINITION = new HtmlTagDefinition();\n\nexport function getHtmlTagDefinition(tagName: string): HtmlTagDefinition {\n  var result = TAG_DEFINITIONS[tagName.toLowerCase()];\n  return isPresent(result) ? result : DEFAULT_TAG_DEFINITION;\n}\n\nvar NS_PREFIX_RE = /^@([^:]+):(.+)/g;\n\nexport function splitNsName(elementName: string): string[] {\n  if (elementName[0] != '@') {\n    return [null, elementName];\n  }\n  let match = RegExpWrapper.firstMatch(NS_PREFIX_RE, elementName);\n  return [match[1], match[2]];\n}\n\nexport function getNsPrefix(elementName: string): string {\n  return splitNsName(elementName)[0];\n}\n\nexport function mergeNsAndName(prefix: string, localName: string): string {\n  return isPresent(prefix) ? `@${prefix}:${localName}` : localName;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/html_tags.ts\n **/","import {Injectable, Inject} from 'angular2/src/core/di';\nimport {\n  StringWrapper,\n  isPresent,\n  isBlank,\n  RegExpWrapper,\n  normalizeBlank\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {PACKAGE_ROOT_URL} from 'angular2/src/core/application_tokens';\nimport {Provider} from 'angular2/src/core/di';\n\n/**\n * Create a {@link UrlResolver} with no package prefix.\n */\nexport function createWithoutPackagePrefix(): UrlResolver {\n  return new UrlResolver();\n}\n\n/**\n * A default provider for {@link PACKAGE_ROOT_URL} that maps to '/'.\n */\nexport var DEFAULT_PACKAGE_URL_PROVIDER = new Provider(PACKAGE_ROOT_URL, {useValue: \"/\"});\n\n/**\n * Used by the {@link Compiler} when resolving HTML and CSS template URLs.\n *\n * This class can be overridden by the application developer to create custom behavior.\n *\n * See {@link Compiler}\n *\n * ## Example\n *\n * {@example compiler/ts/url_resolver/url_resolver.ts region='url_resolver'}\n */\n@Injectable()\nexport class UrlResolver {\n  private _packagePrefix: string;\n\n  constructor(@Inject(PACKAGE_ROOT_URL) packagePrefix: string = null) {\n    if (isPresent(packagePrefix)) {\n      this._packagePrefix = StringWrapper.stripRight(packagePrefix, \"/\") + \"/\";\n    }\n  }\n\n  /**\n   * Resolves the `url` given the `baseUrl`:\n   * - when the `url` is null, the `baseUrl` is returned,\n   * - if `url` is relative ('path/to/here', './path/to/here'), the resolved url is a combination of\n   * `baseUrl` and `url`,\n   * - if `url` is absolute (it has a scheme: 'http://', 'https://' or start with '/'), the `url` is\n   * returned as is (ignoring the `baseUrl`)\n   *\n   * @param {string} baseUrl\n   * @param {string} url\n   * @returns {string} the resolved URL\n   */\n  resolve(baseUrl: string, url: string): string {\n    var resolvedUrl = url;\n    if (isPresent(baseUrl) && baseUrl.length > 0) {\n      resolvedUrl = _resolveUrl(baseUrl, resolvedUrl);\n    }\n    if (isPresent(this._packagePrefix) && getUrlScheme(resolvedUrl) == \"package\") {\n      resolvedUrl = resolvedUrl.replace(\"package:\", this._packagePrefix);\n    }\n    return resolvedUrl;\n  }\n}\n\n/**\n * Extract the scheme of a URL.\n */\nexport function getUrlScheme(url: string): string {\n  var match = _split(url);\n  return (match && match[_ComponentIndex.Scheme]) || \"\";\n}\n\n// The code below is adapted from Traceur:\n// https://github.com/google/traceur-compiler/blob/9511c1dafa972bf0de1202a8a863bad02f0f95a8/src/runtime/url.js\n\n/**\n * Builds a URI string from already-encoded parts.\n *\n * No encoding is performed.  Any component may be omitted as either null or\n * undefined.\n *\n * @param {?string=} opt_scheme The scheme such as 'http'.\n * @param {?string=} opt_userInfo The user name before the '@'.\n * @param {?string=} opt_domain The domain such as 'www.google.com', already\n *     URI-encoded.\n * @param {(string|null)=} opt_port The port number.\n * @param {?string=} opt_path The path, already URI-encoded.  If it is not\n *     empty, it must begin with a slash.\n * @param {?string=} opt_queryData The URI-encoded query data.\n * @param {?string=} opt_fragment The URI-encoded fragment identifier.\n * @return {string} The fully combined URI.\n */\nfunction _buildFromEncodedParts(opt_scheme?: string, opt_userInfo?: string, opt_domain?: string,\n                                opt_port?: string, opt_path?: string, opt_queryData?: string,\n                                opt_fragment?: string): string {\n  var out = [];\n\n  if (isPresent(opt_scheme)) {\n    out.push(opt_scheme + ':');\n  }\n\n  if (isPresent(opt_domain)) {\n    out.push('//');\n\n    if (isPresent(opt_userInfo)) {\n      out.push(opt_userInfo + '@');\n    }\n\n    out.push(opt_domain);\n\n    if (isPresent(opt_port)) {\n      out.push(':' + opt_port);\n    }\n  }\n\n  if (isPresent(opt_path)) {\n    out.push(opt_path);\n  }\n\n  if (isPresent(opt_queryData)) {\n    out.push('?' + opt_queryData);\n  }\n\n  if (isPresent(opt_fragment)) {\n    out.push('#' + opt_fragment);\n  }\n\n  return out.join('');\n}\n\n/**\n * A regular expression for breaking a URI into its component parts.\n *\n * {@link http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#RFC2234} says\n * As the \"first-match-wins\" algorithm is identical to the \"greedy\"\n * disambiguation method used by POSIX regular expressions, it is natural and\n * commonplace to use a regular expression for parsing the potential five\n * components of a URI reference.\n *\n * The following line is the regular expression for breaking-down a\n * well-formed URI reference into its components.\n *\n * <pre>\n * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\n *  12            3  4          5       6  7        8 9\n * </pre>\n *\n * The numbers in the second line above are only to assist readability; they\n * indicate the reference points for each subexpression (i.e., each paired\n * parenthesis). We refer to the value matched for subexpression <n> as $<n>.\n * For example, matching the above expression to\n * <pre>\n *     http://www.ics.uci.edu/pub/ietf/uri/#Related\n * </pre>\n * results in the following subexpression matches:\n * <pre>\n *    $1 = http:\n *    $2 = http\n *    $3 = //www.ics.uci.edu\n *    $4 = www.ics.uci.edu\n *    $5 = /pub/ietf/uri/\n *    $6 = <undefined>\n *    $7 = <undefined>\n *    $8 = #Related\n *    $9 = Related\n * </pre>\n * where <undefined> indicates that the component is not present, as is the\n * case for the query component in the above example. Therefore, we can\n * determine the value of the five components as\n * <pre>\n *    scheme    = $2\n *    authority = $4\n *    path      = $5\n *    query     = $7\n *    fragment  = $9\n * </pre>\n *\n * The regular expression has been modified slightly to expose the\n * userInfo, domain, and port separately from the authority.\n * The modified version yields\n * <pre>\n *    $1 = http              scheme\n *    $2 = <undefined>       userInfo -\\\n *    $3 = www.ics.uci.edu   domain     | authority\n *    $4 = <undefined>       port     -/\n *    $5 = /pub/ietf/uri/    path\n *    $6 = <undefined>       query without ?\n *    $7 = Related           fragment without #\n * </pre>\n * @type {!RegExp}\n * @internal\n */\nvar _splitRe =\n    RegExpWrapper.create('^' +\n                         '(?:' +\n                         '([^:/?#.]+)' +  // scheme - ignore special characters\n                                          // used by other URL parts such as :,\n                                          // ?, /, #, and .\n                         ':)?' +\n                         '(?://' +\n                         '(?:([^/?#]*)@)?' +                  // userInfo\n                         '([\\\\w\\\\d\\\\-\\\\u0100-\\\\uffff.%]*)' +  // domain - restrict to letters,\n                                                              // digits, dashes, dots, percent\n                                                              // escapes, and unicode characters.\n                         '(?::([0-9]+))?' +                   // port\n                         ')?' +\n                         '([^?#]+)?' +        // path\n                         '(?:\\\\?([^#]*))?' +  // query\n                         '(?:#(.*))?' +       // fragment\n                         '$');\n\n/**\n * The index of each URI component in the return value of goog.uri.utils.split.\n * @enum {number}\n */\nenum _ComponentIndex {\n  Scheme = 1,\n  UserInfo,\n  Domain,\n  Port,\n  Path,\n  QueryData,\n  Fragment\n}\n\n/**\n * Splits a URI into its component parts.\n *\n * Each component can be accessed via the component indices; for example:\n * <pre>\n * goog.uri.utils.split(someStr)[goog.uri.utils.CompontentIndex.QUERY_DATA];\n * </pre>\n *\n * @param {string} uri The URI string to examine.\n * @return {!Array.<string|undefined>} Each component still URI-encoded.\n *     Each component that is present will contain the encoded value, whereas\n *     components that are not present will be undefined or empty, depending\n *     on the browser's regular expression implementation.  Never null, since\n *     arbitrary strings may still look like path names.\n */\nfunction _split(uri: string): Array<string | any> {\n  return RegExpWrapper.firstMatch(_splitRe, uri);\n}\n\n/**\n  * Removes dot segments in given path component, as described in\n  * RFC 3986, section 5.2.4.\n  *\n  * @param {string} path A non-empty path component.\n  * @return {string} Path component with removed dot segments.\n  */\nfunction _removeDotSegments(path: string): string {\n  if (path == '/') return '/';\n\n  var leadingSlash = path[0] == '/' ? '/' : '';\n  var trailingSlash = path[path.length - 1] === '/' ? '/' : '';\n  var segments = path.split('/');\n\n  var out: string[] = [];\n  var up = 0;\n  for (var pos = 0; pos < segments.length; pos++) {\n    var segment = segments[pos];\n    switch (segment) {\n      case '':\n      case '.':\n        break;\n      case '..':\n        if (out.length > 0) {\n          out.pop();\n        } else {\n          up++;\n        }\n        break;\n      default:\n        out.push(segment);\n    }\n  }\n\n  if (leadingSlash == '') {\n    while (up-- > 0) {\n      out.unshift('..');\n    }\n\n    if (out.length === 0) out.push('.');\n  }\n\n  return leadingSlash + out.join('/') + trailingSlash;\n}\n\n/**\n * Takes an array of the parts from split and canonicalizes the path part\n * and then joins all the parts.\n * @param {Array.<string?>} parts\n * @return {string}\n */\nfunction _joinAndCanonicalizePath(parts: any[]): string {\n  var path = parts[_ComponentIndex.Path];\n  path = isBlank(path) ? '' : _removeDotSegments(path);\n  parts[_ComponentIndex.Path] = path;\n\n  return _buildFromEncodedParts(parts[_ComponentIndex.Scheme], parts[_ComponentIndex.UserInfo],\n                                parts[_ComponentIndex.Domain], parts[_ComponentIndex.Port], path,\n                                parts[_ComponentIndex.QueryData], parts[_ComponentIndex.Fragment]);\n}\n\n/**\n * Resolves a URL.\n * @param {string} base The URL acting as the base URL.\n * @param {string} to The URL to resolve.\n * @return {string}\n */\nfunction _resolveUrl(base: string, url: string): string {\n  var parts = _split(encodeURI(url));\n  var baseParts = _split(base);\n\n  if (isPresent(parts[_ComponentIndex.Scheme])) {\n    return _joinAndCanonicalizePath(parts);\n  } else {\n    parts[_ComponentIndex.Scheme] = baseParts[_ComponentIndex.Scheme];\n  }\n\n  for (var i = _ComponentIndex.Scheme; i <= _ComponentIndex.Port; i++) {\n    if (isBlank(parts[i])) {\n      parts[i] = baseParts[i];\n    }\n  }\n\n  if (parts[_ComponentIndex.Path][0] == '/') {\n    return _joinAndCanonicalizePath(parts);\n  }\n\n  var path = baseParts[_ComponentIndex.Path];\n  if (isBlank(path)) path = '/';\n  var index = path.lastIndexOf('/');\n  path = path.substring(0, index + 1) + parts[_ComponentIndex.Path];\n  parts[_ComponentIndex.Path] = path;\n  return _joinAndCanonicalizePath(parts);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/url_resolver.ts\n **/","import {OpaqueToken, Provider} from 'angular2/src/core/di';\nimport {CONST_EXPR, Math, StringWrapper} from 'angular2/src/facade/lang';\n\n/**\n *  @internal\n */\nexport const APP_COMPONENT_REF_PROMISE = CONST_EXPR(new OpaqueToken('Promise<ComponentRef>'));\n\n/**\n * An {@link angular2/di/OpaqueToken} representing the application root type in the {@link\n * Injector}.\n *\n * ```\n * @Component(...)\n * class MyApp {\n *   ...\n * }\n *\n * bootstrap(MyApp).then((appRef:ApplicationRef) {\n *   expect(appRef.injector.get(appComponentTypeToken)).toEqual(MyApp);\n * });\n *\n * ```\n */\nexport const APP_COMPONENT: OpaqueToken = CONST_EXPR(new OpaqueToken('AppComponent'));\n\n/**\n * A DI Token representing a unique string id assigned to the application by Angular and used\n * primarily for prefixing application attributes and CSS styles when\n * {@link ViewEncapsulation#Emulated} is being used.\n *\n * If you need to avoid randomly generated value to be used as an application id, you can provide\n * a custom value via a DI provider <!-- TODO: provider --> configuring the root {@link Injector}\n * using this token.\n */\nexport const APP_ID: OpaqueToken = CONST_EXPR(new OpaqueToken('AppId'));\n\nfunction _appIdRandomProviderFactory() {\n  return `${_randomChar()}${_randomChar()}${_randomChar()}`;\n}\n\n/**\n * Providers that will generate a random APP_ID_TOKEN.\n */\nexport const APP_ID_RANDOM_PROVIDER: Provider =\n    CONST_EXPR(new Provider(APP_ID, {useFactory: _appIdRandomProviderFactory, deps: []}));\n\nfunction _randomChar(): string {\n  return StringWrapper.fromCharCode(97 + Math.floor(Math.random() * 25));\n}\n\n/**\n * A function that will be executed when a platform is initialized.\n */\nexport const PLATFORM_INITIALIZER: OpaqueToken =\n    CONST_EXPR(new OpaqueToken(\"Platform Initializer\"));\n\n/**\n * A function that will be executed when an application is initialized.\n */\nexport const APP_INITIALIZER: OpaqueToken = CONST_EXPR(new OpaqueToken(\"Application Initializer\"));\n\n/**\n * A token which indicates the root directory of the application\n */\nexport const PACKAGE_ROOT_URL: OpaqueToken =\n    CONST_EXPR(new OpaqueToken(\"Application Packages Root URL\"));\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/application_tokens.ts\n **/","import {BindingRecord} from './binding_record';\nimport {DirectiveIndex} from './directive_record';\n\nexport enum RecordType {\n  Self,\n  Const,\n  PrimitiveOp,\n  PropertyRead,\n  PropertyWrite,\n  Local,\n  InvokeMethod,\n  InvokeClosure,\n  KeyedRead,\n  KeyedWrite,\n  Pipe,\n  Interpolate,\n  SafeProperty,\n  CollectionLiteral,\n  SafeMethodInvoke,\n  DirectiveLifecycle,\n  Chain,\n  SkipRecordsIf,     // Skip records when the condition is true\n  SkipRecordsIfNot,  // Skip records when the condition is false\n  SkipRecords        // Skip records unconditionally\n}\n\nexport class ProtoRecord {\n  constructor(public mode: RecordType, public name: string, public funcOrValue, public args: any[],\n              public fixedArgs: any[], public contextIndex: number,\n              public directiveIndex: DirectiveIndex, public selfIndex: number,\n              public bindingRecord: BindingRecord, public lastInBinding: boolean,\n              public lastInDirective: boolean, public argumentToPureFunction: boolean,\n              public referencedBySelf: boolean, public propertyBindingIndex: number) {}\n\n  isPureFunction(): boolean {\n    return this.mode === RecordType.Interpolate || this.mode === RecordType.CollectionLiteral;\n  }\n\n  isUsedByOtherRecord(): boolean { return !this.lastInBinding || this.referencedBySelf; }\n\n  shouldBeChecked(): boolean {\n    return this.argumentToPureFunction || this.lastInBinding || this.isPureFunction() ||\n           this.isPipeRecord();\n  }\n\n  isPipeRecord(): boolean { return this.mode === RecordType.Pipe; }\n\n  isConditionalSkipRecord(): boolean {\n    return this.mode === RecordType.SkipRecordsIfNot || this.mode === RecordType.SkipRecordsIf;\n  }\n\n  isUnconditionalSkipRecord(): boolean { return this.mode === RecordType.SkipRecords; }\n\n  isSkipRecord(): boolean {\n    return this.isConditionalSkipRecord() || this.isUnconditionalSkipRecord();\n  }\n\n  isLifeCycleRecord(): boolean { return this.mode === RecordType.DirectiveLifecycle; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/proto_record.ts\n **/","import {\n  Type,\n  isBlank,\n  isPresent,\n  CONST,\n  CONST_EXPR,\n  stringify,\n  isArray,\n  isType,\n  isFunction,\n  normalizeBool\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\nimport {Key} from './key';\nimport {\n  InjectMetadata,\n  InjectableMetadata,\n  OptionalMetadata,\n  SelfMetadata,\n  HostMetadata,\n  SkipSelfMetadata,\n  DependencyMetadata\n} from './metadata';\nimport {\n  NoAnnotationError,\n  MixingMultiProvidersWithRegularProvidersError,\n  InvalidProviderError\n} from './exceptions';\nimport {resolveForwardRef} from './forward_ref';\n\n/**\n * `Dependency` is used by the framework to extend DI.\n * This is internal to Angular and should not be used directly.\n */\nexport class Dependency {\n  constructor(public key: Key, public optional: boolean, public lowerBoundVisibility: any,\n              public upperBoundVisibility: any, public properties: any[]) {}\n\n  static fromKey(key: Key): Dependency { return new Dependency(key, false, null, null, []); }\n}\n\nconst _EMPTY_LIST = CONST_EXPR([]);\n\n/**\n * Describes how the {@link Injector} should instantiate a given token.\n *\n * See {@link provide}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/GNAyj6K6PfYg2NBzgwZ5?p%3Dpreview&p=preview))\n *\n * ```javascript\n * var injector = Injector.resolveAndCreate([\n *   new Provider(\"message\", { useValue: 'Hello' })\n * ]);\n *\n * expect(injector.get(\"message\")).toEqual('Hello');\n * ```\n */\n@CONST()\nexport class Provider {\n  /**\n   * Token used when retrieving this provider. Usually, it is a type {@link Type}.\n   */\n  token;\n\n  /**\n   * Binds a DI token to an implementation class.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/RSTG86qgmoxCyj9SWPwY?p=preview))\n   *\n   * Because `useExisting` and `useClass` are often confused, the example contains\n   * both use cases for easy comparison.\n   *\n   * ```typescript\n   * class Vehicle {}\n   *\n   * class Car extends Vehicle {}\n   *\n   * var injectorClass = Injector.resolveAndCreate([\n   *   Car,\n   *   new Provider(Vehicle, { useClass: Car })\n   * ]);\n   * var injectorAlias = Injector.resolveAndCreate([\n   *   Car,\n   *   new Provider(Vehicle, { useExisting: Car })\n   * ]);\n   *\n   * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));\n   * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);\n   *\n   * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));\n   * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);\n   * ```\n   */\n  useClass: Type;\n\n  /**\n   * Binds a DI token to a value.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/UFVsMVQIDe7l4waWziES?p=preview))\n   *\n   * ```javascript\n   * var injector = Injector.resolveAndCreate([\n   *   new Provider(\"message\", { useValue: 'Hello' })\n   * ]);\n   *\n   * expect(injector.get(\"message\")).toEqual('Hello');\n   * ```\n   */\n  useValue;\n\n  /**\n   * Binds a DI token to an existing token.\n   *\n   * {@link Injector} returns the same instance as if the provided token was used.\n   * This is in contrast to `useClass` where a separate instance of `useClass` is returned.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/QsatsOJJ6P8T2fMe9gr8?p=preview))\n   *\n   * Because `useExisting` and `useClass` are often confused the example contains\n   * both use cases for easy comparison.\n   *\n   * ```typescript\n   * class Vehicle {}\n   *\n   * class Car extends Vehicle {}\n   *\n   * var injectorAlias = Injector.resolveAndCreate([\n   *   Car,\n   *   new Provider(Vehicle, { useExisting: Car })\n   * ]);\n   * var injectorClass = Injector.resolveAndCreate([\n   *   Car,\n   *   new Provider(Vehicle, { useClass: Car })\n   * ]);\n   *\n   * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));\n   * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);\n   *\n   * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));\n   * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);\n   * ```\n   */\n  useExisting;\n\n  /**\n   * Binds a DI token to a function which computes the value.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/Scoxy0pJNqKGAPZY1VVC?p=preview))\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   new Provider(Number, { useFactory: () => { return 1+2; }}),\n   *   new Provider(String, { useFactory: (value) => { return \"Value: \" + value; },\n   *                       deps: [Number] })\n   * ]);\n   *\n   * expect(injector.get(Number)).toEqual(3);\n   * expect(injector.get(String)).toEqual('Value: 3');\n   * ```\n   *\n   * Used in conjunction with dependencies.\n   */\n  useFactory: Function;\n\n  /**\n   * Specifies a set of dependencies\n   * (as `token`s) which should be injected into the factory function.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/Scoxy0pJNqKGAPZY1VVC?p=preview))\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   new Provider(Number, { useFactory: () => { return 1+2; }}),\n   *   new Provider(String, { useFactory: (value) => { return \"Value: \" + value; },\n   *                       deps: [Number] })\n   * ]);\n   *\n   * expect(injector.get(Number)).toEqual(3);\n   * expect(injector.get(String)).toEqual('Value: 3');\n   * ```\n   *\n   * Used in conjunction with `useFactory`.\n   */\n  dependencies: Object[];\n\n  /** @internal */\n  _multi: boolean;\n\n  constructor(token, {useClass, useValue, useExisting, useFactory, deps, multi}: {\n    useClass?: Type,\n    useValue?: any,\n    useExisting?: any,\n    useFactory?: Function,\n    deps?: Object[],\n    multi?: boolean\n  }) {\n    this.token = token;\n    this.useClass = useClass;\n    this.useValue = useValue;\n    this.useExisting = useExisting;\n    this.useFactory = useFactory;\n    this.dependencies = deps;\n    this._multi = multi;\n  }\n\n  // TODO: Provide a full working example after alpha38 is released.\n  /**\n   * Creates multiple providers matching the same token (a multi-provider).\n   *\n   * Multi-providers are used for creating pluggable service, where the system comes\n   * with some default providers, and the user can register additional providers.\n   * The combination of the default providers and the additional providers will be\n   * used to drive the behavior of the system.\n   *\n   * ### Example\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   new Provider(\"Strings\", { useValue: \"String1\", multi: true}),\n   *   new Provider(\"Strings\", { useValue: \"String2\", multi: true})\n   * ]);\n   *\n   * expect(injector.get(\"Strings\")).toEqual([\"String1\", \"String2\"]);\n   * ```\n   *\n   * Multi-providers and regular providers cannot be mixed. The following\n   * will throw an exception:\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   new Provider(\"Strings\", { useValue: \"String1\", multi: true }),\n   *   new Provider(\"Strings\", { useValue: \"String2\"})\n   * ]);\n   * ```\n   */\n  get multi(): boolean { return normalizeBool(this._multi); }\n}\n\n/**\n * See {@link Provider} instead.\n *\n * @deprecated\n */\n@CONST()\nexport class Binding extends Provider {\n  constructor(token, {toClass, toValue, toAlias, toFactory, deps, multi}: {\n    toClass?: Type,\n    toValue?: any,\n    toAlias?: any,\n    toFactory: Function, deps?: Object[], multi?: boolean\n  }) {\n    super(token, {\n      useClass: toClass,\n      useValue: toValue,\n      useExisting: toAlias,\n      useFactory: toFactory,\n      deps: deps,\n      multi: multi\n    });\n  }\n\n  /**\n   * @deprecated\n   */\n  get toClass() { return this.useClass; }\n\n  /**\n   * @deprecated\n   */\n  get toAlias() { return this.useExisting; }\n\n  /**\n   * @deprecated\n   */\n  get toFactory() { return this.useFactory; }\n\n  /**\n   * @deprecated\n   */\n  get toValue() { return this.useValue; }\n}\n\n/**\n * An internal resolved representation of a {@link Provider} used by the {@link Injector}.\n *\n * It is usually created automatically by `Injector.resolveAndCreate`.\n *\n * It can be created manually, as follows:\n *\n * ### Example ([live demo](http://plnkr.co/edit/RfEnhh8kUEI0G3qsnIeT?p%3Dpreview&p=preview))\n *\n * ```typescript\n * var resolvedProviders = Injector.resolve([new Provider('message', {useValue: 'Hello'})]);\n * var injector = Injector.fromResolvedProviders(resolvedProviders);\n *\n * expect(injector.get('message')).toEqual('Hello');\n * ```\n */\nexport interface ResolvedProvider {\n  /**\n   * A key, usually a `Type`.\n   */\n  key: Key;\n\n  /**\n   * Factory function which can return an instance of an object represented by a key.\n   */\n  resolvedFactories: ResolvedFactory[];\n\n  /**\n   * Indicates if the provider is a multi-provider or a regular provider.\n   */\n  multiProvider: boolean;\n}\n\n/**\n * See {@link ResolvedProvider} instead.\n *\n * @deprecated\n */\nexport interface ResolvedBinding extends ResolvedProvider {}\n\nexport class ResolvedProvider_ implements ResolvedBinding {\n  constructor(public key: Key, public resolvedFactories: ResolvedFactory[],\n              public multiProvider: boolean) {}\n\n  get resolvedFactory(): ResolvedFactory { return this.resolvedFactories[0]; }\n}\n\n/**\n * An internal resolved representation of a factory function created by resolving {@link Provider}.\n */\nexport class ResolvedFactory {\n  constructor(\n      /**\n       * Factory function which can return an instance of an object represented by a key.\n       */\n      public factory: Function,\n\n      /**\n       * Arguments (dependencies) to the `factory` function.\n       */\n      public dependencies: Dependency[]) {}\n}\n\n/**\n * Creates a {@link Provider}.\n *\n * To construct a {@link Provider}, bind a `token` to either a class, a value, a factory function,\n * or\n * to an existing `token`.\n * See {@link ProviderBuilder} for more details.\n *\n * The `token` is most commonly a class or {@link angular2/di/OpaqueToken}.\n *\n * @deprecated\n */\nexport function bind(token): ProviderBuilder {\n  return new ProviderBuilder(token);\n}\n\n/**\n * Creates a {@link Provider}.\n *\n * See {@link Provider} for more details.\n *\n * <!-- TODO: improve the docs -->\n */\nexport function provide(token, {useClass, useValue, useExisting, useFactory, deps, multi}: {\n  useClass?: Type,\n  useValue?: any,\n  useExisting?: any,\n  useFactory?: Function,\n  deps?: Object[],\n  multi?: boolean\n}): Provider {\n  return new Provider(token, {\n    useClass: useClass,\n    useValue: useValue,\n    useExisting: useExisting,\n    useFactory: useFactory,\n    deps: deps,\n    multi: multi\n  });\n}\n\n/**\n * Helper class for the {@link bind} function.\n */\nexport class ProviderBuilder {\n  constructor(public token) {}\n\n  /**\n   * Binds a DI token to a class.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/ZpBCSYqv6e2ud5KXLdxQ?p=preview))\n   *\n   * Because `toAlias` and `toClass` are often confused, the example contains\n   * both use cases for easy comparison.\n   *\n   * ```typescript\n   * class Vehicle {}\n   *\n   * class Car extends Vehicle {}\n   *\n   * var injectorClass = Injector.resolveAndCreate([\n   *   Car,\n   *   provide(Vehicle, {useClass: Car})\n   * ]);\n   * var injectorAlias = Injector.resolveAndCreate([\n   *   Car,\n   *   provide(Vehicle, {useExisting: Car})\n   * ]);\n   *\n   * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));\n   * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);\n   *\n   * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));\n   * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);\n   * ```\n   */\n  toClass(type: Type): Provider {\n    if (!isType(type)) {\n      throw new BaseException(\n          `Trying to create a class provider but \"${stringify(type)}\" is not a class!`);\n    }\n    return new Provider(this.token, {useClass: type});\n  }\n\n  /**\n   * Binds a DI token to a value.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/G024PFHmDL0cJFgfZK8O?p=preview))\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   provide('message', {useValue: 'Hello'})\n   * ]);\n   *\n   * expect(injector.get('message')).toEqual('Hello');\n   * ```\n   */\n  toValue(value: any): Provider { return new Provider(this.token, {useValue: value}); }\n\n  /**\n   * Binds a DI token to an existing token.\n   *\n   * Angular will return the same instance as if the provided token was used. (This is\n   * in contrast to `useClass` where a separate instance of `useClass` will be returned.)\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/uBaoF2pN5cfc5AfZapNw?p=preview))\n   *\n   * Because `toAlias` and `toClass` are often confused, the example contains\n   * both use cases for easy comparison.\n   *\n   * ```typescript\n   * class Vehicle {}\n   *\n   * class Car extends Vehicle {}\n   *\n   * var injectorAlias = Injector.resolveAndCreate([\n   *   Car,\n   *   provide(Vehicle, {useExisting: Car})\n   * ]);\n   * var injectorClass = Injector.resolveAndCreate([\n   *   Car,\n   *   provide(Vehicle, {useClass: Car})\n   * ]);\n   *\n   * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car));\n   * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true);\n   *\n   * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car));\n   * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true);\n   * ```\n   */\n  toAlias(aliasToken: /*Type*/ any): Provider {\n    if (isBlank(aliasToken)) {\n      throw new BaseException(`Can not alias ${stringify(this.token)} to a blank value!`);\n    }\n    return new Provider(this.token, {useExisting: aliasToken});\n  }\n\n  /**\n   * Binds a DI token to a function which computes the value.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/OejNIfTT3zb1iBxaIYOb?p=preview))\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   provide(Number, {useFactory: () => { return 1+2; }}),\n   *   provide(String, {useFactory: (v) => { return \"Value: \" + v; }, deps: [Number]})\n   * ]);\n   *\n   * expect(injector.get(Number)).toEqual(3);\n   * expect(injector.get(String)).toEqual('Value: 3');\n   * ```\n   */\n  toFactory(factory: Function, dependencies?: any[]): Provider {\n    if (!isFunction(factory)) {\n      throw new BaseException(\n          `Trying to create a factory provider but \"${stringify(factory)}\" is not a function!`);\n    }\n    return new Provider(this.token, {useFactory: factory, deps: dependencies});\n  }\n}\n\n/**\n * Resolve a single provider.\n */\nexport function resolveFactory(provider: Provider): ResolvedFactory {\n  var factoryFn: Function;\n  var resolvedDeps: Dependency[];\n  if (isPresent(provider.useClass)) {\n    var useClass = resolveForwardRef(provider.useClass);\n    factoryFn = reflector.factory(useClass);\n    resolvedDeps = _dependenciesFor(useClass);\n  } else if (isPresent(provider.useExisting)) {\n    factoryFn = (aliasInstance) => aliasInstance;\n    resolvedDeps = [Dependency.fromKey(Key.get(provider.useExisting))];\n  } else if (isPresent(provider.useFactory)) {\n    factoryFn = provider.useFactory;\n    resolvedDeps = _constructDependencies(provider.useFactory, provider.dependencies);\n  } else {\n    factoryFn = () => provider.useValue;\n    resolvedDeps = _EMPTY_LIST;\n  }\n  return new ResolvedFactory(factoryFn, resolvedDeps);\n}\n\n/**\n * Converts the {@link Provider} into {@link ResolvedProvider}.\n *\n * {@link Injector} internally only uses {@link ResolvedProvider}, {@link Provider} contains\n * convenience provider syntax.\n */\nexport function resolveProvider(provider: Provider): ResolvedProvider {\n  return new ResolvedProvider_(Key.get(provider.token), [resolveFactory(provider)], provider.multi);\n}\n\n/**\n * Resolve a list of Providers.\n */\nexport function resolveProviders(providers: Array<Type | Provider | any[]>): ResolvedProvider[] {\n  var normalized = _normalizeProviders(providers, []);\n  var resolved = normalized.map(resolveProvider);\n  return MapWrapper.values(mergeResolvedProviders(resolved, new Map<number, ResolvedProvider>()));\n}\n\n/**\n * Merges a list of ResolvedProviders into a list where\n * each key is contained exactly once and multi providers\n * have been merged.\n */\nexport function mergeResolvedProviders(\n    providers: ResolvedProvider[],\n    normalizedProvidersMap: Map<number, ResolvedProvider>): Map<number, ResolvedProvider> {\n  for (var i = 0; i < providers.length; i++) {\n    var provider = providers[i];\n    var existing = normalizedProvidersMap.get(provider.key.id);\n    if (isPresent(existing)) {\n      if (provider.multiProvider !== existing.multiProvider) {\n        throw new MixingMultiProvidersWithRegularProvidersError(existing, provider);\n      }\n      if (provider.multiProvider) {\n        for (var j = 0; j < provider.resolvedFactories.length; j++) {\n          existing.resolvedFactories.push(provider.resolvedFactories[j]);\n        }\n      } else {\n        normalizedProvidersMap.set(provider.key.id, provider);\n      }\n    } else {\n      var resolvedProvider;\n      if (provider.multiProvider) {\n        resolvedProvider = new ResolvedProvider_(\n            provider.key, ListWrapper.clone(provider.resolvedFactories), provider.multiProvider);\n      } else {\n        resolvedProvider = provider;\n      }\n      normalizedProvidersMap.set(provider.key.id, resolvedProvider);\n    }\n  }\n  return normalizedProvidersMap;\n}\n\nfunction _normalizeProviders(providers: Array<Type | Provider | ProviderBuilder | any[]>,\n                             res: Provider[]): Provider[] {\n  providers.forEach(b => {\n    if (b instanceof Type) {\n      res.push(provide(b, {useClass: b}));\n\n    } else if (b instanceof Provider) {\n      res.push(b);\n\n    } else if (b instanceof Array) {\n      _normalizeProviders(b, res);\n\n    } else if (b instanceof ProviderBuilder) {\n      throw new InvalidProviderError(b.token);\n\n    } else {\n      throw new InvalidProviderError(b);\n    }\n  });\n\n  return res;\n}\n\nfunction _constructDependencies(factoryFunction: Function, dependencies: any[]): Dependency[] {\n  if (isBlank(dependencies)) {\n    return _dependenciesFor(factoryFunction);\n  } else {\n    var params: any[][] = dependencies.map(t => [t]);\n    return dependencies.map(t => _extractToken(factoryFunction, t, params));\n  }\n}\n\nfunction _dependenciesFor(typeOrFunc): Dependency[] {\n  var params: any[][] = reflector.parameters(typeOrFunc);\n  if (isBlank(params)) return [];\n  if (params.some(isBlank)) {\n    throw new NoAnnotationError(typeOrFunc, params);\n  }\n  return params.map((p: any[]) => _extractToken(typeOrFunc, p, params));\n}\n\nfunction _extractToken(typeOrFunc, metadata /*any[] | any*/, params: any[][]): Dependency {\n  var depProps = [];\n  var token = null;\n  var optional = false;\n\n  if (!isArray(metadata)) {\n    if (metadata instanceof InjectMetadata) {\n      return _createDependency(metadata.token, optional, null, null, depProps);\n    } else {\n      return _createDependency(metadata, optional, null, null, depProps);\n    }\n  }\n\n  var lowerBoundVisibility = null;\n  var upperBoundVisibility = null;\n\n  for (var i = 0; i < metadata.length; ++i) {\n    var paramMetadata = metadata[i];\n\n    if (paramMetadata instanceof Type) {\n      token = paramMetadata;\n\n    } else if (paramMetadata instanceof InjectMetadata) {\n      token = paramMetadata.token;\n\n    } else if (paramMetadata instanceof OptionalMetadata) {\n      optional = true;\n\n    } else if (paramMetadata instanceof SelfMetadata) {\n      upperBoundVisibility = paramMetadata;\n\n    } else if (paramMetadata instanceof HostMetadata) {\n      upperBoundVisibility = paramMetadata;\n\n    } else if (paramMetadata instanceof SkipSelfMetadata) {\n      lowerBoundVisibility = paramMetadata;\n\n    } else if (paramMetadata instanceof DependencyMetadata) {\n      if (isPresent(paramMetadata.token)) {\n        token = paramMetadata.token;\n      }\n      depProps.push(paramMetadata);\n    }\n  }\n\n  token = resolveForwardRef(token);\n\n  if (isPresent(token)) {\n    return _createDependency(token, optional, lowerBoundVisibility, upperBoundVisibility, depProps);\n  } else {\n    throw new NoAnnotationError(typeOrFunc, params);\n  }\n}\n\nfunction _createDependency(token, optional, lowerBoundVisibility, upperBoundVisibility,\n                           depProps): Dependency {\n  return new Dependency(Key.get(token), optional, lowerBoundVisibility, upperBoundVisibility,\n                        depProps);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/provider.ts\n **/","import {Key, Injector, ResolvedProvider, Provider, provide, Injectable} from 'angular2/src/core/di';\nimport {Compiler} from './compiler';\nimport {isType, Type, stringify, isPresent} from 'angular2/src/facade/lang';\nimport {AppViewManager} from 'angular2/src/core/linker/view_manager';\nimport {ElementRef, ElementRef_} from './element_ref';\nimport {HostViewRef} from './view_ref';\n\n/**\n * Represents an instance of a Component created via {@link DynamicComponentLoader}.\n *\n * `ComponentRef` provides access to the Component Instance as well other objects related to this\n * Component Instance and allows you to destroy the Component Instance via the {@link #dispose}\n * method.\n */\nexport abstract class ComponentRef {\n  /**\n   * The injector provided {@link DynamicComponentLoader#loadAsRoot}.\n   *\n   * TODO(i): this api is useless and should be replaced by an injector retrieved from\n   *     the HostElementRef, which is currently not possible.\n   */\n  injector: Injector;\n\n  /**\n   * Location of the Host Element of this Component Instance.\n   */\n  location: ElementRef;\n\n  /**\n   * The instance of the Component.\n   */\n  instance: any;\n\n  /**\n   * The user defined component type, represented via the constructor function.\n   *\n   * <!-- TODO: customize wording for Dart docs -->\n   */\n  componentType: Type;\n\n  /**\n   * The {@link ViewRef} of the Host View of this Component instance.\n   */\n  get hostView(): HostViewRef {\n    return (<ElementRef_>this.location).internalElement.parentView.ref;\n  }\n\n  /**\n   * @internal\n   *\n   * The instance of the component.\n   *\n   * TODO(i): this api should be removed\n   */\n  get hostComponent(): any { return this.instance; }\n\n  /**\n   * Destroys the component instance and all of the data structures associated with it.\n   *\n   * TODO(i): rename to destroy to be consistent with AppViewManager and ViewContainerRef\n   */\n  abstract dispose(): void;\n}\n\nexport class ComponentRef_ extends ComponentRef {\n  /**\n   * TODO(i): refactor into public/private fields\n   */\n  constructor(location: ElementRef, instance: any, componentType: Type, injector: Injector,\n              private _dispose: () => void) {\n    super();\n    this.location = location;\n    this.instance = instance;\n    this.componentType = componentType;\n    this.injector = injector;\n  }\n\n  /**\n   * @internal\n   *\n   * Returns the type of this Component instance.\n   *\n   * TODO(i): this api should be removed\n   */\n  get hostComponentType(): Type { return this.componentType; }\n\n  dispose(): void { this._dispose(); }\n}\n\n/**\n * Service for instantiating a Component and attaching it to a View at a specified location.\n */\nexport abstract class DynamicComponentLoader {\n  /**\n   * Creates an instance of a Component `type` and attaches it to the first element in the\n   * platform-specific global view that matches the component's selector.\n   *\n   * In a browser the platform-specific global view is the main DOM Document.\n   *\n   * If needed, the component's selector can be overridden via `overrideSelector`.\n   *\n   * You can optionally provide `injector` and this {@link Injector} will be used to instantiate the\n   * Component.\n   *\n   * To be notified when this Component instance is destroyed, you can also optionally provide\n   * `onDispose` callback.\n   *\n   * Returns a promise for the {@link ComponentRef} representing the newly created Component.\n   *\n   * ### Example\n   *\n   * ```\n   * @Component({\n   *   selector: 'child-component',\n   *   template: 'Child'\n   * })\n   * class ChildComponent {\n   * }\n   *\n   * @Component({\n   *   selector: 'my-app',\n   *   template: 'Parent (<child id=\"child\"></child>)'\n   * })\n   * class MyApp {\n   *   constructor(dcl: DynamicComponentLoader, injector: Injector) {\n   *     dcl.loadAsRoot(ChildComponent, '#child', injector);\n   *   }\n   * }\n   *\n   * bootstrap(MyApp);\n   * ```\n   *\n   * Resulting DOM:\n   *\n   * ```\n   * <my-app>\n   *   Parent (\n   *     <child id=\"child\">Child</child>\n   *   )\n   * </my-app>\n   * ```\n   */\n  abstract loadAsRoot(type: Type, overrideSelector: string, injector: Injector,\n                      onDispose?: () => void, projectableNodes?: any[][]): Promise<ComponentRef>;\n\n  /**\n   * Creates an instance of a Component and attaches it to a View Container located inside of the\n   * Component View of another Component instance.\n   *\n   * The targeted Component Instance is specified via its `hostLocation` {@link ElementRef}. The\n   * location within the Component View of this Component Instance is specified via `anchorName`\n   * Template Variable Name.\n   *\n   * You can optionally provide `providers` to configure the {@link Injector} provisioned for this\n   * Component Instance.\n   *\n   * Returns a promise for the {@link ComponentRef} representing the newly created Component.\n   *\n   * ### Example\n   *\n   * ```\n   * @Component({\n   *   selector: 'child-component',\n   *   template: 'Child'\n   * })\n   * class ChildComponent {\n   * }\n   *\n   * @Component({\n   *   selector: 'my-app',\n   *   template: 'Parent (<div #child></div>)'\n   * })\n   * class MyApp {\n   *   constructor(dcl: DynamicComponentLoader, elementRef: ElementRef) {\n   *     dcl.loadIntoLocation(ChildComponent, elementRef, 'child');\n   *   }\n   * }\n   *\n   * bootstrap(MyApp);\n   * ```\n   *\n   * Resulting DOM:\n   *\n   * ```\n   * <my-app>\n   *    Parent (\n   *      <div #child=\"\" class=\"ng-binding\"></div>\n   *      <child-component class=\"ng-binding\">Child</child-component>\n   *    )\n   * </my-app>\n   * ```\n   */\n  abstract loadIntoLocation(type: Type, hostLocation: ElementRef, anchorName: string,\n                            providers?: ResolvedProvider[],\n                            projectableNodes?: any[][]): Promise<ComponentRef>;\n\n  /**\n   * Creates an instance of a Component and attaches it to the View Container found at the\n   * `location` specified as {@link ElementRef}.\n   *\n   * You can optionally provide `providers` to configure the {@link Injector} provisioned for this\n   * Component Instance.\n   *\n   * Returns a promise for the {@link ComponentRef} representing the newly created Component.\n   *\n   *\n   * ### Example\n   *\n   * ```\n   * @Component({\n   *   selector: 'child-component',\n   *   template: 'Child'\n   * })\n   * class ChildComponent {\n   * }\n   *\n   * @Component({\n   *   selector: 'my-app',\n   *   template: 'Parent'\n   * })\n   * class MyApp {\n   *   constructor(dcl: DynamicComponentLoader, elementRef: ElementRef) {\n   *     dcl.loadNextToLocation(ChildComponent, elementRef);\n   *   }\n   * }\n   *\n   * bootstrap(MyApp);\n   * ```\n   *\n   * Resulting DOM:\n   *\n   * ```\n   * <my-app>Parent</my-app>\n   * <child-component>Child</child-component>\n   * ```\n   */\n  abstract loadNextToLocation(type: Type, location: ElementRef, providers?: ResolvedProvider[],\n                              projectableNodes?: any[][]): Promise<ComponentRef>;\n}\n\n@Injectable()\nexport class DynamicComponentLoader_ extends DynamicComponentLoader {\n  constructor(private _compiler: Compiler, private _viewManager: AppViewManager) { super(); }\n\n  loadAsRoot(type: Type, overrideSelector: string, injector: Injector, onDispose?: () => void,\n             projectableNodes?: any[][]): Promise<ComponentRef> {\n    return this._compiler.compileInHost(type).then(hostProtoViewRef => {\n      var hostViewRef = this._viewManager.createRootHostView(hostProtoViewRef, overrideSelector,\n                                                             injector, projectableNodes);\n      var newLocation = this._viewManager.getHostElement(hostViewRef);\n      var component = this._viewManager.getComponent(newLocation);\n\n      var dispose = () => {\n        if (isPresent(onDispose)) {\n          onDispose();\n        }\n        this._viewManager.destroyRootHostView(hostViewRef);\n      };\n      return new ComponentRef_(newLocation, component, type, injector, dispose);\n    });\n  }\n\n  loadIntoLocation(type: Type, hostLocation: ElementRef, anchorName: string,\n                   providers: ResolvedProvider[] = null,\n                   projectableNodes: any[][] = null): Promise<ComponentRef> {\n    return this.loadNextToLocation(\n        type, this._viewManager.getNamedElementInComponentView(hostLocation, anchorName), providers,\n        projectableNodes);\n  }\n\n  loadNextToLocation(type: Type, location: ElementRef, providers: ResolvedProvider[] = null,\n                     projectableNodes: any[][] = null): Promise<ComponentRef> {\n    return this._compiler.compileInHost(type).then(hostProtoViewRef => {\n      var viewContainer = this._viewManager.getViewContainer(location);\n      var hostViewRef = viewContainer.createHostView(hostProtoViewRef, viewContainer.length,\n                                                     providers, projectableNodes);\n      var newLocation = this._viewManager.getHostElement(hostViewRef);\n      var component = this._viewManager.getComponent(newLocation);\n\n      var dispose = () => {\n        var index = viewContainer.indexOf(hostViewRef);\n        if (!hostViewRef.destroyed && index !== -1) {\n          viewContainer.remove(index);\n        }\n      };\n      return new ComponentRef_(newLocation, component, type, null, dispose);\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/dynamic_component_loader.ts\n **/","import {\n  ListWrapper,\n  MapWrapper,\n  Map,\n  StringMapWrapper,\n} from 'angular2/src/facade/collection';\nimport {\n  ChangeDetector,\n  ChangeDispatcher,\n  DirectiveIndex,\n  BindingTarget,\n  Locals,\n  ProtoChangeDetector,\n  ChangeDetectorRef\n} from 'angular2/src/core/change_detection/change_detection';\nimport {ResolvedProvider, Injectable, Injector} from 'angular2/src/core/di';\nimport {DebugContext} from 'angular2/src/core/change_detection/interfaces';\n\nimport {AppProtoElement, AppElement, DirectiveProvider} from './element';\nimport {\n  isPresent,\n  isBlank,\n  Type,\n  isArray,\n  isNumber,\n  CONST,\n  CONST_EXPR\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {Renderer, RootRenderer, RenderDebugInfo} from 'angular2/src/core/render/api';\nimport {ViewRef_, HostViewFactoryRef} from './view_ref';\nimport {ProtoPipes} from 'angular2/src/core/pipes/pipes';\nimport {camelCaseToDashCase} from 'angular2/src/core/render/util';\n\nexport {DebugContext} from 'angular2/src/core/change_detection/interfaces';\nimport {Pipes} from 'angular2/src/core/pipes/pipes';\nimport {AppViewManager_, AppViewManager} from './view_manager';\nimport {ResolvedMetadataCache} from './resolved_metadata_cache';\nimport {ViewType} from './view_type';\n\nconst REFLECT_PREFIX: string = 'ng-reflect-';\n\nconst EMPTY_CONTEXT = CONST_EXPR(new Object());\n\n/**\n * Cost of making objects: http://jsperf.com/instantiate-size-of-object\n *\n */\nexport class AppView implements ChangeDispatcher {\n  ref: ViewRef_;\n  rootNodesOrAppElements: any[];\n  allNodes: any[];\n  disposables: Function[];\n  appElements: AppElement[];\n\n  /**\n   * The context against which data-binding expressions in this view are evaluated against.\n   * This is always a component instance.\n   */\n  context: any = null;\n\n  /**\n   * Variables, local to this view, that can be used in binding expressions (in addition to the\n   * context). This is used for thing like `<video #player>` or\n   * `<li template=\"for #item of items\">`, where \"player\" and \"item\" are locals, respectively.\n   */\n  locals: Locals;\n\n  pipes: Pipes;\n\n  parentInjector: Injector;\n\n  /**\n   * Whether root injectors of this view\n   * have a hostBoundary.\n   */\n  hostInjectorBoundary: boolean;\n\n  destroyed: boolean = false;\n\n  constructor(public proto: AppProtoView, public renderer: Renderer,\n              public viewManager: AppViewManager_, public projectableNodes: Array<any | any[]>,\n              public containerAppElement: AppElement,\n              imperativelyCreatedProviders: ResolvedProvider[], rootInjector: Injector,\n              public changeDetector: ChangeDetector) {\n    this.ref = new ViewRef_(this);\n    var injectorWithHostBoundary = AppElement.getViewParentInjector(\n        this.proto.type, containerAppElement, imperativelyCreatedProviders, rootInjector);\n    this.parentInjector = injectorWithHostBoundary.injector;\n    this.hostInjectorBoundary = injectorWithHostBoundary.hostInjectorBoundary;\n    var pipes;\n    var context;\n    switch (proto.type) {\n      case ViewType.COMPONENT:\n        pipes = new Pipes(proto.protoPipes, containerAppElement.getInjector());\n        context = containerAppElement.getComponent();\n        break;\n      case ViewType.EMBEDDED:\n        pipes = containerAppElement.parentView.pipes;\n        context = containerAppElement.parentView.context;\n        break;\n      case ViewType.HOST:\n        pipes = null;\n        context = EMPTY_CONTEXT;\n        break;\n    }\n    this.pipes = pipes;\n    this.context = context;\n  }\n\n  init(rootNodesOrAppElements: any[], allNodes: any[], disposables: Function[],\n       appElements: AppElement[]) {\n    this.rootNodesOrAppElements = rootNodesOrAppElements;\n    this.allNodes = allNodes;\n    this.disposables = disposables;\n    this.appElements = appElements;\n    var localsMap = new Map<string, any>();\n    StringMapWrapper.forEach(\n        this.proto.templateVariableBindings,\n        (templateName: string, _: string) => { localsMap.set(templateName, null); });\n    for (var i = 0; i < appElements.length; i++) {\n      var appEl = appElements[i];\n      var providerTokens = [];\n      if (isPresent(appEl.proto.protoInjector)) {\n        for (var j = 0; j < appEl.proto.protoInjector.numberOfProviders; j++) {\n          providerTokens.push(appEl.proto.protoInjector.getProviderAtIndex(j).key.token);\n        }\n      }\n      StringMapWrapper.forEach(appEl.proto.directiveVariableBindings,\n                               (directiveIndex: number, name: string) => {\n                                 if (isBlank(directiveIndex)) {\n                                   localsMap.set(name, appEl.nativeElement);\n                                 } else {\n                                   localsMap.set(name, appEl.getDirectiveAtIndex(directiveIndex));\n                                 }\n                               });\n      this.renderer.setElementDebugInfo(\n          appEl.nativeElement, new RenderDebugInfo(appEl.getInjector(), appEl.getComponent(),\n                                                   providerTokens, localsMap));\n    }\n    var parentLocals = null;\n    if (this.proto.type !== ViewType.COMPONENT) {\n      parentLocals =\n          isPresent(this.containerAppElement) ? this.containerAppElement.parentView.locals : null;\n    }\n    if (this.proto.type === ViewType.COMPONENT) {\n      // Note: the render nodes have been attached to their host element\n      // in the ViewFactory already.\n      this.containerAppElement.attachComponentView(this);\n      this.containerAppElement.parentView.changeDetector.addViewChild(this.changeDetector);\n    }\n    this.locals = new Locals(parentLocals, localsMap);\n    this.changeDetector.hydrate(this.context, this.locals, this, this.pipes);\n    this.viewManager.onViewCreated(this);\n  }\n\n  destroy() {\n    if (this.destroyed) {\n      throw new BaseException('This view has already been destroyed!');\n    }\n    this.changeDetector.destroyRecursive();\n  }\n\n  notifyOnDestroy() {\n    this.destroyed = true;\n    var hostElement =\n        this.proto.type === ViewType.COMPONENT ? this.containerAppElement.nativeElement : null;\n    this.renderer.destroyView(hostElement, this.allNodes);\n    for (var i = 0; i < this.disposables.length; i++) {\n      this.disposables[i]();\n    }\n    this.viewManager.onViewDestroyed(this);\n  }\n\n  get changeDetectorRef(): ChangeDetectorRef { return this.changeDetector.ref; }\n\n  get flatRootNodes(): any[] { return flattenNestedViewRenderNodes(this.rootNodesOrAppElements); }\n\n  hasLocal(contextName: string): boolean {\n    return StringMapWrapper.contains(this.proto.templateVariableBindings, contextName);\n  }\n\n  setLocal(contextName: string, value: any): void {\n    if (!this.hasLocal(contextName)) {\n      return;\n    }\n    var templateName = this.proto.templateVariableBindings[contextName];\n    this.locals.set(templateName, value);\n  }\n\n  // dispatch to element injector or text nodes based on context\n  notifyOnBinding(b: BindingTarget, currentValue: any): void {\n    if (b.isTextNode()) {\n      this.renderer.setText(this.allNodes[b.elementIndex], currentValue);\n    } else {\n      var nativeElement = this.appElements[b.elementIndex].nativeElement;\n      if (b.isElementProperty()) {\n        this.renderer.setElementProperty(nativeElement, b.name, currentValue);\n      } else if (b.isElementAttribute()) {\n        this.renderer.setElementAttribute(nativeElement, b.name,\n                                          isPresent(currentValue) ? `${currentValue}` : null);\n      } else if (b.isElementClass()) {\n        this.renderer.setElementClass(nativeElement, b.name, currentValue);\n      } else if (b.isElementStyle()) {\n        var unit = isPresent(b.unit) ? b.unit : '';\n        this.renderer.setElementStyle(nativeElement, b.name,\n                                      isPresent(currentValue) ? `${currentValue}${unit}` : null);\n      } else {\n        throw new BaseException('Unsupported directive record');\n      }\n    }\n  }\n\n  logBindingUpdate(b: BindingTarget, value: any): void {\n    if (b.isDirective() || b.isElementProperty()) {\n      var nativeElement = this.appElements[b.elementIndex].nativeElement;\n      this.renderer.setBindingDebugInfo(\n          nativeElement, `${REFLECT_PREFIX}${camelCaseToDashCase(b.name)}`, `${value}`);\n    }\n  }\n\n  notifyAfterContentChecked(): void {\n    var count = this.appElements.length;\n    for (var i = count - 1; i >= 0; i--) {\n      this.appElements[i].ngAfterContentChecked();\n    }\n  }\n\n  notifyAfterViewChecked(): void {\n    var count = this.appElements.length;\n    for (var i = count - 1; i >= 0; i--) {\n      this.appElements[i].ngAfterViewChecked();\n    }\n  }\n\n  getDebugContext(appElement: AppElement, elementIndex: number,\n                  directiveIndex: number): DebugContext {\n    try {\n      if (isBlank(appElement) && elementIndex < this.appElements.length) {\n        appElement = this.appElements[elementIndex];\n      }\n      var container = this.containerAppElement;\n\n      var element = isPresent(appElement) ? appElement.nativeElement : null;\n      var componentElement = isPresent(container) ? container.nativeElement : null;\n      var directive =\n          isPresent(directiveIndex) ? appElement.getDirectiveAtIndex(directiveIndex) : null;\n      var injector = isPresent(appElement) ? appElement.getInjector() : null;\n\n      return new DebugContext(element, componentElement, directive, this.context,\n                              _localsToStringMap(this.locals), injector);\n\n    } catch (e) {\n      // TODO: vsavkin log the exception once we have a good way to log errors and warnings\n      // if an error happens during getting the debug context, we return null.\n      return null;\n    }\n  }\n\n  getDirectiveFor(directive: DirectiveIndex): any {\n    return this.appElements[directive.elementIndex].getDirectiveAtIndex(directive.directiveIndex);\n  }\n\n  getDetectorFor(directive: DirectiveIndex): ChangeDetector {\n    var componentView = this.appElements[directive.elementIndex].componentView;\n    return isPresent(componentView) ? componentView.changeDetector : null;\n  }\n\n  /**\n   * Triggers the event handlers for the element and the directives.\n   *\n   * This method is intended to be called from directive EventEmitters.\n   *\n   * @param {string} eventName\n   * @param {*} eventObj\n   * @param {number} boundElementIndex\n   * @return false if preventDefault must be applied to the DOM event\n   */\n  triggerEventHandlers(eventName: string, eventObj: Event, boundElementIndex: number): boolean {\n    return this.changeDetector.handleEvent(eventName, boundElementIndex, eventObj);\n  }\n}\n\nfunction _localsToStringMap(locals: Locals): {[key: string]: any} {\n  var res = {};\n  var c = locals;\n  while (isPresent(c)) {\n    res = StringMapWrapper.merge(res, MapWrapper.toStringMap(c.current));\n    c = c.parent;\n  }\n  return res;\n}\n\n/**\n *\n */\nexport class AppProtoView {\n  static create(metadataCache: ResolvedMetadataCache, type: ViewType, pipes: Type[],\n                templateVariableBindings: {[key: string]: string}): AppProtoView {\n    var protoPipes = null;\n    if (isPresent(pipes) && pipes.length > 0) {\n      var boundPipes = ListWrapper.createFixedSize(pipes.length);\n      for (var i = 0; i < pipes.length; i++) {\n        boundPipes[i] = metadataCache.getResolvedPipeMetadata(pipes[i]);\n      }\n      protoPipes = ProtoPipes.fromProviders(boundPipes);\n    }\n    return new AppProtoView(type, protoPipes, templateVariableBindings);\n  }\n\n  constructor(public type: ViewType, public protoPipes: ProtoPipes,\n              public templateVariableBindings: {[key: string]: string}) {}\n}\n\n\n@CONST()\nexport class HostViewFactory {\n  constructor(public selector: string, public viewFactory: Function) {}\n}\n\nexport function flattenNestedViewRenderNodes(nodes: any[]): any[] {\n  return _flattenNestedViewRenderNodes(nodes, []);\n}\n\nfunction _flattenNestedViewRenderNodes(nodes: any[], renderNodes: any[]): any[] {\n  for (var i = 0; i < nodes.length; i++) {\n    var node = nodes[i];\n    if (node instanceof AppElement) {\n      var appEl = <AppElement>node;\n      renderNodes.push(appEl.nativeElement);\n      if (isPresent(appEl.nestedViews)) {\n        for (var k = 0; k < appEl.nestedViews.length; k++) {\n          _flattenNestedViewRenderNodes(appEl.nestedViews[k].rootNodesOrAppElements, renderNodes);\n        }\n      }\n    } else {\n      renderNodes.push(node);\n    }\n  }\n  return renderNodes;\n}\n\nexport function findLastRenderNode(node: any): any {\n  var lastNode;\n  if (node instanceof AppElement) {\n    var appEl = <AppElement>node;\n    lastNode = appEl.nativeElement;\n    if (isPresent(appEl.nestedViews)) {\n      // Note: Views might have no root nodes at all!\n      for (var i = appEl.nestedViews.length - 1; i >= 0; i--) {\n        var nestedView = appEl.nestedViews[i];\n        if (nestedView.rootNodesOrAppElements.length > 0) {\n          lastNode = findLastRenderNode(\n              nestedView.rootNodesOrAppElements[nestedView.rootNodesOrAppElements.length - 1]);\n        }\n      }\n    }\n  } else {\n    lastNode = node;\n  }\n  return lastNode;\n}\n\nexport function checkSlotCount(componentName: string, expectedSlotCount: number,\n                               projectableNodes: any[][]): void {\n  var givenSlotCount = isPresent(projectableNodes) ? projectableNodes.length : 0;\n  if (givenSlotCount < expectedSlotCount) {\n    throw new BaseException(\n        `The component ${componentName} has ${expectedSlotCount} <ng-content> elements,` +\n        ` but only ${givenSlotCount} slots were provided.`);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/view.ts\n **/","export enum ViewType {\n  // A view that contains the host element with bound component directive.\n  // Contains a COMPONENT view\n  HOST,\n  // The view of the component\n  // Can contain 0 to n EMBEDDED views\n  COMPONENT,\n  // A view that is embedded into another View via a <template> element\n  // inside of a COMPONENT view\n  EMBEDDED\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/view_type.ts\n **/","import {isPresent, CONST, CONST_EXPR, Type} from 'angular2/src/facade/lang';\nimport {InjectableMetadata} from 'angular2/src/core/di/metadata';\nimport {ChangeDetectionStrategy} from 'angular2/src/core/change_detection';\nimport {ViewEncapsulation} from 'angular2/src/core/metadata/view';\n\n/**\n * Directives allow you to attach behavior to elements in the DOM.\n *\n * {@link DirectiveMetadata}s with an embedded view are called {@link ComponentMetadata}s.\n *\n * A directive consists of a single directive annotation and a controller class. When the\n * directive's `selector` matches\n * elements in the DOM, the following steps occur:\n *\n * 1. For each directive, the `ElementInjector` attempts to resolve the directive's constructor\n * arguments.\n * 2. Angular instantiates directives for each matched element using `ElementInjector` in a\n * depth-first order,\n *    as declared in the HTML.\n *\n * ## Understanding How Injection Works\n *\n * There are three stages of injection resolution.\n * - *Pre-existing Injectors*:\n *   - The terminal {@link Injector} cannot resolve dependencies. It either throws an error or, if\n * the dependency was\n *     specified as `@Optional`, returns `null`.\n *   - The platform injector resolves browser singleton resources, such as: cookies, title,\n * location, and others.\n * - *Component Injectors*: Each component instance has its own {@link Injector}, and they follow\n * the same parent-child hierarchy\n *     as the component instances in the DOM.\n * - *Element Injectors*: Each component instance has a Shadow DOM. Within the Shadow DOM each\n * element has an `ElementInjector`\n *     which follow the same parent-child hierarchy as the DOM elements themselves.\n *\n * When a template is instantiated, it also must instantiate the corresponding directives in a\n * depth-first order. The\n * current `ElementInjector` resolves the constructor dependencies for each directive.\n *\n * Angular then resolves dependencies as follows, according to the order in which they appear in the\n * {@link ViewMetadata}:\n *\n * 1. Dependencies on the current element\n * 2. Dependencies on element injectors and their parents until it encounters a Shadow DOM boundary\n * 3. Dependencies on component injectors and their parents until it encounters the root component\n * 4. Dependencies on pre-existing injectors\n *\n *\n * The `ElementInjector` can inject other directives, element-specific special objects, or it can\n * delegate to the parent\n * injector.\n *\n * To inject other directives, declare the constructor parameter as:\n * - `directive:DirectiveType`: a directive on the current element only\n * - `@Host() directive:DirectiveType`: any directive that matches the type between the current\n * element and the\n *    Shadow DOM root.\n * - `@Query(DirectiveType) query:QueryList<DirectiveType>`: A live collection of direct child\n * directives.\n * - `@QueryDescendants(DirectiveType) query:QueryList<DirectiveType>`: A live collection of any\n * child directives.\n *\n * To inject element-specific special objects, declare the constructor parameter as:\n * - `element: ElementRef` to obtain a reference to logical element in the view.\n * - `viewContainer: ViewContainerRef` to control child template instantiation, for\n * {@link DirectiveMetadata} directives only\n * - `bindingPropagation: BindingPropagation` to control change detection in a more granular way.\n *\n * ### Example\n *\n * The following example demonstrates how dependency injection resolves constructor arguments in\n * practice.\n *\n *\n * Assume this HTML template:\n *\n * ```\n * <div dependency=\"1\">\n *   <div dependency=\"2\">\n *     <div dependency=\"3\" my-directive>\n *       <div dependency=\"4\">\n *         <div dependency=\"5\"></div>\n *       </div>\n *       <div dependency=\"6\"></div>\n *     </div>\n *   </div>\n * </div>\n * ```\n *\n * With the following `dependency` decorator and `SomeService` injectable class.\n *\n * ```\n * @Injectable()\n * class SomeService {\n * }\n *\n * @Directive({\n *   selector: '[dependency]',\n *   inputs: [\n *     'id: dependency'\n *   ]\n * })\n * class Dependency {\n *   id:string;\n * }\n * ```\n *\n * Let's step through the different ways in which `MyDirective` could be declared...\n *\n *\n * ### No injection\n *\n * Here the constructor is declared with no arguments, therefore nothing is injected into\n * `MyDirective`.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor() {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with no dependencies.\n *\n *\n * ### Component-level injection\n *\n * Directives can inject any injectable instance from the closest component injector or any of its\n * parents.\n *\n * Here, the constructor declares a parameter, `someService`, and injects the `SomeService` type\n * from the parent\n * component's injector.\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(someService: SomeService) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a dependency on `SomeService`.\n *\n *\n * ### Injecting a directive from the current element\n *\n * Directives can inject other directives declared on the current element.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(dependency: Dependency) {\n *     expect(dependency.id).toEqual(3);\n *   }\n * }\n * ```\n * This directive would be instantiated with `Dependency` declared at the same element, in this case\n * `dependency=\"3\"`.\n *\n * ### Injecting a directive from any ancestor elements\n *\n * Directives can inject other directives declared on any ancestor element (in the current Shadow\n * DOM), i.e. on the current element, the\n * parent element, or its parents.\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Host() dependency: Dependency) {\n *     expect(dependency.id).toEqual(2);\n *   }\n * }\n * ```\n *\n * `@Host` checks the current element, the parent, as well as its parents recursively. If\n * `dependency=\"2\"` didn't\n * exist on the direct parent, this injection would\n * have returned\n * `dependency=\"1\"`.\n *\n *\n * ### Injecting a live collection of direct child directives\n *\n *\n * A directive can also query for other child directives. Since parent directives are instantiated\n * before child directives, a directive can't simply inject the list of child directives. Instead,\n * the directive injects a {@link QueryList}, which updates its contents as children are added,\n * removed, or moved by a directive that uses a {@link ViewContainerRef} such as a `ngFor`, an\n * `ngIf`, or an `ngSwitch`.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Query(Dependency) dependencies:QueryList<Dependency>) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a {@link QueryList} which contains `Dependency` 4 and\n * `Dependency` 6. Here, `Dependency` 5 would not be included, because it is not a direct child.\n *\n * ### Injecting a live collection of descendant directives\n *\n * By passing the descendant flag to `@Query` above, we can include the children of the child\n * elements.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Query(Dependency, {descendants: true}) dependencies:QueryList<Dependency>) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a Query which would contain `Dependency` 4, 5 and 6.\n *\n * ### Optional injection\n *\n * The normal behavior of directives is to return an error when a specified dependency cannot be\n * resolved. If you\n * would like to inject `null` on unresolved dependency instead, you can annotate that dependency\n * with `@Optional()`.\n * This explicitly permits the author of a template to treat some of the surrounding directives as\n * optional.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Optional() dependency:Dependency) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a `Dependency` directive found on the current element.\n * If none can be\n * found, the injector supplies `null` instead of throwing an error.\n *\n * ### Example\n *\n * Here we use a decorator directive to simply define basic tool-tip behavior.\n *\n * ```\n * @Directive({\n *   selector: '[tooltip]',\n *   inputs: [\n *     'text: tooltip'\n *   ],\n *   host: {\n *     '(mouseenter)': 'onMouseEnter()',\n *     '(mouseleave)': 'onMouseLeave()'\n *   }\n * })\n * class Tooltip{\n *   text:string;\n *   overlay:Overlay; // NOT YET IMPLEMENTED\n *   overlayManager:OverlayManager; // NOT YET IMPLEMENTED\n *\n *   constructor(overlayManager:OverlayManager) {\n *     this.overlay = overlay;\n *   }\n *\n *   onMouseEnter() {\n *     // exact signature to be determined\n *     this.overlay = this.overlayManager.open(text, ...);\n *   }\n *\n *   onMouseLeave() {\n *     this.overlay.close();\n *     this.overlay = null;\n *   }\n * }\n * ```\n * In our HTML template, we can then add this behavior to a `<div>` or any other element with the\n * `tooltip` selector,\n * like so:\n *\n * ```\n * <div tooltip=\"some text here\"></div>\n * ```\n *\n * Directives can also control the instantiation, destruction, and positioning of inline template\n * elements:\n *\n * A directive uses a {@link ViewContainerRef} to instantiate, insert, move, and destroy views at\n * runtime.\n * The {@link ViewContainerRef} is created as a result of `<template>` element, and represents a\n * location in the current view\n * where these actions are performed.\n *\n * Views are always created as children of the current {@link ViewMetadata}, and as siblings of the\n * `<template>` element. Thus a\n * directive in a child view cannot inject the directive that created it.\n *\n * Since directives that create views via ViewContainers are common in Angular, and using the full\n * `<template>` element syntax is wordy, Angular\n * also supports a shorthand notation: `<li *foo=\"bar\">` and `<li template=\"foo: bar\">` are\n * equivalent.\n *\n * Thus,\n *\n * ```\n * <ul>\n *   <li *foo=\"bar\" title=\"text\"></li>\n * </ul>\n * ```\n *\n * Expands in use to:\n *\n * ```\n * <ul>\n *   <template [foo]=\"bar\">\n *     <li title=\"text\"></li>\n *   </template>\n * </ul>\n * ```\n *\n * Notice that although the shorthand places `*foo=\"bar\"` within the `<li>` element, the binding for\n * the directive\n * controller is correctly instantiated on the `<template>` element rather than the `<li>` element.\n *\n * ## Lifecycle hooks\n *\n * When the directive class implements some {@link angular2/lifecycle_hooks} the callbacks are\n * called by the change detection at defined points in time during the life of the directive.\n *\n * ### Example\n *\n * Let's suppose we want to implement the `unless` behavior, to conditionally include a template.\n *\n * Here is a simple directive that triggers on an `unless` selector:\n *\n * ```\n * @Directive({\n *   selector: '[unless]',\n *   inputs: ['unless']\n * })\n * export class Unless {\n *   viewContainer: ViewContainerRef;\n *   templateRef: TemplateRef;\n *   prevCondition: boolean;\n *\n *   constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef) {\n *     this.viewContainer = viewContainer;\n *     this.templateRef = templateRef;\n *     this.prevCondition = null;\n *   }\n *\n *   set unless(newCondition) {\n *     if (newCondition && (isBlank(this.prevCondition) || !this.prevCondition)) {\n *       this.prevCondition = true;\n *       this.viewContainer.clear();\n *     } else if (!newCondition && (isBlank(this.prevCondition) || this.prevCondition)) {\n *       this.prevCondition = false;\n *       this.viewContainer.create(this.templateRef);\n *     }\n *   }\n * }\n * ```\n *\n * We can then use this `unless` selector in a template:\n * ```\n * <ul>\n *   <li *unless=\"expr\"></li>\n * </ul>\n * ```\n *\n * Once the directive instantiates the child view, the shorthand notation for the template expands\n * and the result is:\n *\n * ```\n * <ul>\n *   <template [unless]=\"exp\">\n *     <li></li>\n *   </template>\n *   <li></li>\n * </ul>\n * ```\n *\n * Note also that although the `<li></li>` template still exists inside the `<template></template>`,\n * the instantiated\n * view occurs on the second `<li></li>` which is a sibling to the `<template>` element.\n */\n@CONST()\nexport class DirectiveMetadata extends InjectableMetadata {\n  /**\n   * The CSS selector that triggers the instantiation of a directive.\n   *\n   * Angular only allows directives to trigger on CSS selectors that do not cross element\n   * boundaries.\n   *\n   * `selector` may be declared as one of the following:\n   *\n   * - `element-name`: select by element name.\n   * - `.class`: select by class name.\n   * - `[attribute]`: select by attribute name.\n   * - `[attribute=value]`: select by attribute name and value.\n   * - `:not(sub_selector)`: select only if the element does not match the `sub_selector`.\n   * - `selector1, selector2`: select if either `selector1` or `selector2` matches.\n   *\n   *\n   * ### Example\n   *\n   * Suppose we have a directive with an `input[type=text]` selector.\n   *\n   * And the following HTML:\n   *\n   * ```html\n   * <form>\n   *   <input type=\"text\">\n   *   <input type=\"radio\">\n   * <form>\n   * ```\n   *\n   * The directive would only be instantiated on the `<input type=\"text\">` element.\n   *\n   */\n  selector: string;\n\n  /**\n   * Enumerates the set of data-bound input properties for a directive\n   *\n   * Angular automatically updates input properties during change detection.\n   *\n   * The `inputs` property defines a set of `directiveProperty` to `bindingProperty`\n   * configuration:\n   *\n   * - `directiveProperty` specifies the component property where the value is written.\n   * - `bindingProperty` specifies the DOM property where the value is read from.\n   *\n   * When `bindingProperty` is not provided, it is assumed to be equal to `directiveProperty`.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/ivhfXY?p=preview))\n   *\n   * The following example creates a component with two data-bound properties.\n   *\n   * ```typescript\n   * @Component({\n   *   selector: 'bank-account',\n   *   inputs: ['bankName', 'id: account-id'],\n   *   template: `\n   *     Bank Name: {{bankName}}\n   *     Account Id: {{id}}\n   *   `\n   * })\n   * class BankAccount {\n   *   bankName: string;\n   *   id: string;\n   *\n   *   // this property is not bound, and won't be automatically updated by Angular\n   *   normalizedBankName: string;\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   template: `\n   *     <bank-account bank-name=\"RBC\" account-id=\"4747\"></bank-account>\n   *   `,\n   *   directives: [BankAccount]\n   * })\n   * class App {}\n   *\n   * bootstrap(App);\n   * ```\n   *\n   */\n  get inputs(): string[] {\n    return isPresent(this._properties) && this._properties.length > 0 ? this._properties :\n                                                                        this._inputs;\n  }\n  get properties(): string[] { return this.inputs; }\n  private _inputs: string[];\n  private _properties: string[];\n\n  /**\n   * Enumerates the set of event-bound output properties.\n   *\n   * When an output property emits an event, an event handler attached to that event\n   * the template is invoked.\n   *\n   * The `outputs` property defines a set of `directiveProperty` to `bindingProperty`\n   * configuration:\n   *\n   * - `directiveProperty` specifies the component property that emits events.\n   * - `bindingProperty` specifies the DOM property the event handler is attached to.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/d5CNq7?p=preview))\n   *\n   * ```typescript\n   * @Directive({\n   *   selector: 'interval-dir',\n   *   outputs: ['everySecond', 'five5Secs: everyFiveSeconds']\n   * })\n   * class IntervalDir {\n   *   everySecond = new EventEmitter();\n   *   five5Secs = new EventEmitter();\n   *\n   *   constructor() {\n   *     setInterval(() => this.everySecond.emit(\"event\"), 1000);\n   *     setInterval(() => this.five5Secs.emit(\"event\"), 5000);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   template: `\n   *     <interval-dir (everySecond)=\"everySecond()\" (everyFiveSeconds)=\"everyFiveSeconds()\">\n   *     </interval-dir>\n   *   `,\n   *   directives: [IntervalDir]\n   * })\n   * class App {\n   *   everySecond() { console.log('second'); }\n   *   everyFiveSeconds() { console.log('five seconds'); }\n   * }\n   * bootstrap(App);\n   * ```\n   *\n   */\n  get outputs(): string[] {\n    return isPresent(this._events) && this._events.length > 0 ? this._events : this._outputs;\n  }\n  get events(): string[] { return this.outputs; }\n  private _outputs: string[];\n  private _events: string[];\n\n  /**\n   * Specify the events, actions, properties and attributes related to the host element.\n   *\n   * ## Host Listeners\n   *\n   * Specifies which DOM events a directive listens to via a set of `(event)` to `method`\n   * key-value pairs:\n   *\n   * - `event`: the DOM event that the directive listens to.\n   * - `statement`: the statement to execute when the event occurs.\n   * If the evaluation of the statement returns `false`, then `preventDefault`is applied on the DOM\n   * event.\n   *\n   * To listen to global events, a target must be added to the event name.\n   * The target can be `window`, `document` or `body`.\n   *\n   * When writing a directive event binding, you can also refer to the $event local variable.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/DlA5KU?p=preview))\n   *\n   * The following example declares a directive that attaches a click listener to the button and\n   * counts clicks.\n   *\n   * ```typescript\n   * @Directive({\n   *   selector: 'button[counting]',\n   *   host: {\n   *     '(click)': 'onClick($event.target)'\n   *   }\n   * })\n   * class CountClicks {\n   *   numberOfClicks = 0;\n   *\n   *   onClick(btn) {\n   *     console.log(\"button\", btn, \"number of clicks:\", this.numberOfClicks++);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   template: `<button counting>Increment</button>`,\n   *   directives: [CountClicks]\n   * })\n   * class App {}\n   *\n   * bootstrap(App);\n   * ```\n   *\n   * ## Host Property Bindings\n   *\n   * Specifies which DOM properties a directive updates.\n   *\n   * Angular automatically checks host property bindings during change detection.\n   * If a binding changes, it will update the host element of the directive.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/gNg0ED?p=preview))\n   *\n   * The following example creates a directive that sets the `valid` and `invalid` classes\n   * on the DOM element that has ngModel directive on it.\n   *\n   * ```typescript\n   * @Directive({\n   *   selector: '[ngModel]',\n   *   host: {\n   *     '[class.valid]': 'valid',\n   *     '[class.invalid]': 'invalid'\n   *   }\n   * })\n   * class NgModelStatus {\n   *   constructor(public control:NgModel) {}\n   *   get valid { return this.control.valid; }\n   *   get invalid { return this.control.invalid; }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   template: `<input [(ngModel)]=\"prop\">`,\n   *   directives: [FORM_DIRECTIVES, NgModelStatus]\n   * })\n   * class App {\n   *   prop;\n   * }\n   *\n   * bootstrap(App);\n   * ```\n   *\n   * ## Attributes\n   *\n   * Specifies static attributes that should be propagated to a host element.\n   *\n   * ### Example\n   *\n   * In this example using `my-button` directive (ex.: `<div my-button></div>`) on a host element\n   * (here: `<div>` ) will ensure that this element will get the \"button\" role.\n   *\n   * ```typescript\n   * @Directive({\n   *   selector: '[my-button]',\n   *   host: {\n   *     'role': 'button'\n   *   }\n   * })\n   * class MyButton {\n   * }\n   * ```\n   */\n  host: {[key: string]: string};\n\n  /**\n   * Defines the set of injectable objects that are visible to a Directive and its light DOM\n   * children.\n   *\n   * ## Simple Example\n   *\n   * Here is an example of a class that can be injected:\n   *\n   * ```\n   * class Greeter {\n   *    greet(name:string) {\n   *      return 'Hello ' + name + '!';\n   *    }\n   * }\n   *\n   * @Directive({\n   *   selector: 'greet',\n   *   bindings: [\n   *     Greeter\n   *   ]\n   * })\n   * class HelloWorld {\n   *   greeter:Greeter;\n   *\n   *   constructor(greeter:Greeter) {\n   *     this.greeter = greeter;\n   *   }\n   * }\n   * ```\n   */\n  get providers(): any[] {\n    return isPresent(this._bindings) && this._bindings.length > 0 ? this._bindings :\n                                                                    this._providers;\n  }\n  /** @deprecated */\n  get bindings(): any[] { return this.providers; }\n  private _providers: any[];\n  private _bindings: any[];\n\n  /**\n   * Defines the name that can be used in the template to assign this directive to a variable.\n   *\n   * ## Simple Example\n   *\n   * ```\n   * @Directive({\n   *   selector: 'child-dir',\n   *   exportAs: 'child'\n   * })\n   * class ChildDir {\n   * }\n   *\n   * @Component({\n   *   selector: 'main',\n   *   template: `<child-dir #c=\"child\"></child-dir>`,\n   *   directives: [ChildDir]\n   * })\n   * class MainComponent {\n   * }\n   *\n   * ```\n   */\n  exportAs: string;\n\n  // TODO: add an example after ContentChildren and ViewChildren are in master\n  /**\n   * Configures the queries that will be injected into the directive.\n   *\n   * Content queries are set before the `ngAfterContentInit` callback is called.\n   * View queries are set before the `ngAfterViewInit` callback is called.\n   *\n   * ### Example\n   *\n   * ```\n   * @Component({\n   *   selector: 'someDir',\n   *   queries: {\n   *     contentChildren: new ContentChildren(ChildDirective),\n   *     viewChildren: new ViewChildren(ChildDirective)\n   *   },\n   *   template: '<child-directive></child-directive>',\n   *   directives: [ChildDirective]\n   * })\n   * class SomeDir {\n   *   contentChildren: QueryList<ChildDirective>,\n   *   viewChildren: QueryList<ChildDirective>\n   *\n   *   ngAfterContentInit() {\n   *     // contentChildren is set\n   *   }\n   *\n   *   ngAfterViewInit() {\n   *     // viewChildren is set\n   *   }\n   * }\n   * ```\n   */\n  queries: {[key: string]: any};\n\n  constructor({selector, inputs, outputs, properties, events, host, bindings, providers, exportAs,\n               queries}: {\n    selector?: string,\n    inputs?: string[],\n    outputs?: string[],\n    properties?: string[],\n    events?: string[],\n    host?: {[key: string]: string},\n    providers?: any[],\n    /** @deprecated */ bindings?: any[],\n    exportAs?: string,\n    queries?: {[key: string]: any}\n  } = {}) {\n    super();\n    this.selector = selector;\n    this._inputs = inputs;\n    this._properties = properties;\n    this._outputs = outputs;\n    this._events = events;\n    this.host = host;\n    this.exportAs = exportAs;\n    this.queries = queries;\n    this._providers = providers;\n    this._bindings = bindings;\n  }\n}\n\n/**\n * Declare reusable UI building blocks for an application.\n *\n * Each Angular component requires a single `@Component` annotation. The\n * `@Component`\n * annotation specifies when a component is instantiated, and which properties and hostListeners it\n * binds to.\n *\n * When a component is instantiated, Angular\n * - creates a shadow DOM for the component.\n * - loads the selected template into the shadow DOM.\n * - creates all the injectable objects configured with `providers` and `viewProviders`.\n *\n * All template expressions and statements are then evaluated against the component instance.\n *\n * For details on the `@View` annotation, see {@link ViewMetadata}.\n *\n * ## Lifecycle hooks\n *\n * When the component class implements some {@link angular2/lifecycle_hooks} the callbacks are\n * called by the change detection at defined points in time during the life of the component.\n *\n * ### Example\n *\n * {@example core/ts/metadata/metadata.ts region='component'}\n */\n@CONST()\nexport class ComponentMetadata extends DirectiveMetadata {\n  /**\n   * Defines the used change detection strategy.\n   *\n   * When a component is instantiated, Angular creates a change detector, which is responsible for\n   * propagating the component's bindings.\n   *\n   * The `changeDetection` property defines, whether the change detection will be checked every time\n   * or only when the component tells it to do so.\n   */\n  changeDetection: ChangeDetectionStrategy;\n\n  /**\n   * Defines the set of injectable objects that are visible to its view DOM children.\n   *\n   * ## Simple Example\n   *\n   * Here is an example of a class that can be injected:\n   *\n   * ```\n   * class Greeter {\n   *    greet(name:string) {\n   *      return 'Hello ' + name + '!';\n   *    }\n   * }\n   *\n   * @Directive({\n   *   selector: 'needs-greeter'\n   * })\n   * class NeedsGreeter {\n   *   greeter:Greeter;\n   *\n   *   constructor(greeter:Greeter) {\n   *     this.greeter = greeter;\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'greet',\n   *   viewProviders: [\n   *     Greeter\n   *   ],\n   *   template: `<needs-greeter></needs-greeter>`,\n   *   directives: [NeedsGreeter]\n   * })\n   * class HelloWorld {\n   * }\n   *\n   * ```\n   */\n  get viewProviders(): any[] {\n    return isPresent(this._viewBindings) && this._viewBindings.length > 0 ? this._viewBindings :\n                                                                            this._viewProviders;\n  }\n  get viewBindings(): any[] { return this.viewProviders; }\n  private _viewProviders: any[];\n  private _viewBindings: any[];\n\n  /**\n   * The module id of the module that contains the component.\n   * Needed to be able to resolve relative urls for templates and styles.\n   * In Dart, this can be determined automatically and does not need to be set.\n   * In CommonJS, this can always be set to `module.id`.\n   *\n   * ## Simple Example\n   *\n   * ```\n   * @Directive({\n   *   selector: 'someDir',\n   *   moduleId: module.id\n   * })\n   * class SomeDir {\n   * }\n   *\n   * ```\n   */\n  moduleId: string;\n\n  templateUrl: string;\n\n  template: string;\n\n  styleUrls: string[];\n\n  styles: string[];\n\n  directives: Array<Type | any[]>;\n\n  pipes: Array<Type | any[]>;\n\n  encapsulation: ViewEncapsulation;\n\n  constructor({selector, inputs, outputs, properties, events, host, exportAs, moduleId, bindings,\n               providers, viewBindings, viewProviders,\n               changeDetection = ChangeDetectionStrategy.Default, queries, templateUrl, template,\n               styleUrls, styles, directives, pipes, encapsulation}: {\n    selector?: string,\n    inputs?: string[],\n    outputs?: string[],\n    properties?: string[],\n    events?: string[],\n    host?: {[key: string]: string},\n    /** @deprecated */ bindings?: any[],\n    providers?: any[],\n    exportAs?: string,\n    moduleId?: string,\n    /** @deprecated */ viewBindings?: any[],\n    viewProviders?: any[],\n    queries?: {[key: string]: any},\n    changeDetection?: ChangeDetectionStrategy,\n    templateUrl?: string,\n    template?: string,\n    styleUrls?: string[],\n    styles?: string[],\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    encapsulation?: ViewEncapsulation\n  } = {}) {\n    super({\n      selector: selector,\n      inputs: inputs,\n      outputs: outputs,\n      properties: properties,\n      events: events,\n      host: host,\n      exportAs: exportAs,\n      bindings: bindings,\n      providers: providers,\n      queries: queries\n    });\n\n    this.changeDetection = changeDetection;\n    this._viewProviders = viewProviders;\n    this._viewBindings = viewBindings;\n    this.templateUrl = templateUrl;\n    this.template = template;\n    this.styleUrls = styleUrls;\n    this.styles = styles;\n    this.directives = directives;\n    this.pipes = pipes;\n    this.encapsulation = encapsulation;\n    this.moduleId = moduleId;\n  }\n}\n\n/**\n * Declare reusable pipe function.\n *\n * A \"pure\" pipe is only re-evaluated when either the input or any of the arguments change.\n *\n * When not specified, pipes default to being pure.\n *\n * ### Example\n *\n * {@example core/ts/metadata/metadata.ts region='pipe'}\n */\n@CONST()\nexport class PipeMetadata extends InjectableMetadata {\n  name: string;\n  /** @internal */\n  _pure: boolean;\n\n  constructor({name, pure}: {name: string, pure?: boolean}) {\n    super();\n    this.name = name;\n    this._pure = pure;\n  }\n\n  get pure(): boolean { return isPresent(this._pure) ? this._pure : true; }\n}\n\n/**\n * Declares a data-bound input property.\n *\n * Angular automatically updates data-bound properties during change detection.\n *\n * `InputMetadata` takes an optional parameter that specifies the name\n * used when instantiating a component in the template. When not provided,\n * the name of the decorated property is used.\n *\n * ### Example\n *\n * The following example creates a component with two input properties.\n *\n * ```typescript\n * @Component({\n *   selector: 'bank-account',\n *   template: `\n *     Bank Name: {{bankName}}\n *     Account Id: {{id}}\n *   `\n * })\n * class BankAccount {\n *   @Input() bankName: string;\n *   @Input('account-id') id: string;\n *\n *   // this property is not bound, and won't be automatically updated by Angular\n *   normalizedBankName: string;\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <bank-account bank-name=\"RBC\" account-id=\"4747\"></bank-account>\n *   `,\n *   directives: [BankAccount]\n * })\n * class App {}\n *\n * bootstrap(App);\n * ```\n */\n@CONST()\nexport class InputMetadata {\n  constructor(\n      /**\n       * Name used when instantiating a component in the template.\n       */\n      public bindingPropertyName?: string) {}\n}\n\n/**\n * Declares an event-bound output property.\n *\n * When an output property emits an event, an event handler attached to that event\n * the template is invoked.\n *\n * `OutputMetadata` takes an optional parameter that specifies the name\n * used when instantiating a component in the template. When not provided,\n * the name of the decorated property is used.\n *\n * ### Example\n *\n * ```typescript\n * @Directive({\n *   selector: 'interval-dir',\n * })\n * class IntervalDir {\n *   @Output() everySecond = new EventEmitter();\n *   @Output('everyFiveSeconds') five5Secs = new EventEmitter();\n *\n *   constructor() {\n *     setInterval(() => this.everySecond.emit(\"event\"), 1000);\n *     setInterval(() => this.five5Secs.emit(\"event\"), 5000);\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <interval-dir (everySecond)=\"everySecond()\" (everyFiveSeconds)=\"everyFiveSeconds()\">\n *     </interval-dir>\n *   `,\n *   directives: [IntervalDir]\n * })\n * class App {\n *   everySecond() { console.log('second'); }\n *   everyFiveSeconds() { console.log('five seconds'); }\n * }\n * bootstrap(App);\n * ```\n */\n@CONST()\nexport class OutputMetadata {\n  constructor(public bindingPropertyName?: string) {}\n}\n\n/**\n * Declares a host property binding.\n *\n * Angular automatically checks host property bindings during change detection.\n * If a binding changes, it will update the host element of the directive.\n *\n * `HostBindingMetadata` takes an optional parameter that specifies the property\n * name of the host element that will be updated. When not provided,\n * the class property name is used.\n *\n * ### Example\n *\n * The following example creates a directive that sets the `valid` and `invalid` classes\n * on the DOM element that has ngModel directive on it.\n *\n * ```typescript\n * @Directive({selector: '[ngModel]'})\n * class NgModelStatus {\n *   constructor(public control:NgModel) {}\n *   @HostBinding('class.valid') get valid { return this.control.valid; }\n *   @HostBinding('class.invalid') get invalid { return this.control.invalid; }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `<input [(ngModel)]=\"prop\">`,\n *   directives: [FORM_DIRECTIVES, NgModelStatus]\n * })\n * class App {\n *   prop;\n * }\n *\n * bootstrap(App);\n * ```\n */\n@CONST()\nexport class HostBindingMetadata {\n  constructor(public hostPropertyName?: string) {}\n}\n\n/**\n * Declares a host listener.\n *\n * Angular will invoke the decorated method when the host element emits the specified event.\n *\n * If the decorated method returns `false`, then `preventDefault` is applied on the DOM\n * event.\n *\n * ### Example\n *\n * The following example declares a directive that attaches a click listener to the button and\n * counts clicks.\n *\n * ```typescript\n * @Directive({selector: 'button[counting]'})\n * class CountClicks {\n *   numberOfClicks = 0;\n *\n *   @HostListener('click', ['$event.target'])\n *   onClick(btn) {\n *     console.log(\"button\", btn, \"number of clicks:\", this.numberOfClicks++);\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `<button counting>Increment</button>`,\n *   directives: [CountClicks]\n * })\n * class App {}\n *\n * bootstrap(App);\n * ```\n */\n@CONST()\nexport class HostListenerMetadata {\n  constructor(public eventName: string, public args?: string[]) {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/metadata/directives.ts\n **/","import {ConcreteType, global, Type, isFunction, stringify} from 'angular2/src/facade/lang';\n\nvar _nextClassId = 0;\n\n/**\n * Declares the interface to be used with {@link Class}.\n */\nexport interface ClassDefinition {\n  /**\n   * Optional argument for specifying the superclass.\n   */\n  extends?: Type;\n\n  /**\n   * Required constructor function for a class.\n   *\n   * The function may be optionally wrapped in an `Array`, in which case additional parameter\n   * annotations may be specified.\n   * The number of arguments and the number of parameter annotations must match.\n   *\n   * See {@link Class} for example of usage.\n   */\n  constructor: Function | any[];\n\n  /**\n   * Other methods on the class. Note that values should have type 'Function' but TS requires\n   * all properties to have a narrower type than the index signature.\n   */\n  [x: string]: Type | Function | any[];\n}\n\n/**\n * An interface implemented by all Angular type decorators, which allows them to be used as ES7\n * decorators as well as\n * Angular DSL syntax.\n *\n * DSL syntax:\n *\n * ```\n * var MyClass = ng\n *   .Component({...})\n *   .View({...})\n *   .Class({...});\n * ```\n *\n * ES7 syntax:\n *\n * ```\n * @ng.Component({...})\n * @ng.View({...})\n * class MyClass {...}\n * ```\n */\nexport interface TypeDecorator {\n  /**\n   * Invoke as ES7 decorator.\n   */\n  <T extends Type>(type: T): T;\n\n  // Make TypeDecorator assignable to built-in ParameterDecorator type.\n  // ParameterDecorator is declared in lib.d.ts as a `declare type`\n  // so we cannot declare this interface as a subtype.\n  // see https://github.com/angular/angular/issues/3379#issuecomment-126169417\n  (target: Object, propertyKey?: string | symbol, parameterIndex?: number): void;\n\n  /**\n   * Storage for the accumulated annotations so far used by the DSL syntax.\n   *\n   * Used by {@link Class} to annotate the generated class.\n   */\n  annotations: any[];\n\n  /**\n   * Generate a class from the definition and annotate it with {@link TypeDecorator#annotations}.\n   */\n  Class(obj: ClassDefinition): ConcreteType;\n}\n\nfunction extractAnnotation(annotation: any): any {\n  if (isFunction(annotation) && annotation.hasOwnProperty('annotation')) {\n    // it is a decorator, extract annotation\n    annotation = annotation.annotation;\n  }\n  return annotation;\n}\n\nfunction applyParams(fnOrArray: (Function | any[]), key: string): Function {\n  if (fnOrArray === Object || fnOrArray === String || fnOrArray === Function ||\n      fnOrArray === Number || fnOrArray === Array) {\n    throw new Error(`Can not use native ${stringify(fnOrArray)} as constructor`);\n  }\n  if (isFunction(fnOrArray)) {\n    return <Function>fnOrArray;\n  } else if (fnOrArray instanceof Array) {\n    var annotations: any[] = fnOrArray;\n    var fn: Function = fnOrArray[fnOrArray.length - 1];\n    if (!isFunction(fn)) {\n      throw new Error(\n          `Last position of Class method array must be Function in key ${key} was '${stringify(fn)}'`);\n    }\n    var annoLength = annotations.length - 1;\n    if (annoLength != fn.length) {\n      throw new Error(\n          `Number of annotations (${annoLength}) does not match number of arguments (${fn.length}) in the function: ${stringify(fn)}`);\n    }\n    var paramsAnnotations: any[][] = [];\n    for (var i = 0, ii = annotations.length - 1; i < ii; i++) {\n      var paramAnnotations: any[] = [];\n      paramsAnnotations.push(paramAnnotations);\n      var annotation = annotations[i];\n      if (annotation instanceof Array) {\n        for (var j = 0; j < annotation.length; j++) {\n          paramAnnotations.push(extractAnnotation(annotation[j]));\n        }\n      } else if (isFunction(annotation)) {\n        paramAnnotations.push(extractAnnotation(annotation));\n      } else {\n        paramAnnotations.push(annotation);\n      }\n    }\n    Reflect.defineMetadata('parameters', paramsAnnotations, fn);\n    return fn;\n  } else {\n    throw new Error(\n        `Only Function or Array is supported in Class definition for key '${key}' is '${stringify(fnOrArray)}'`);\n  }\n}\n\n/**\n * Provides a way for expressing ES6 classes with parameter annotations in ES5.\n *\n * ## Basic Example\n *\n * ```\n * var Greeter = ng.Class({\n *   constructor: function(name) {\n *     this.name = name;\n *   },\n *\n *   greet: function() {\n *     alert('Hello ' + this.name + '!');\n *   }\n * });\n * ```\n *\n * is equivalent to ES6:\n *\n * ```\n * class Greeter {\n *   constructor(name) {\n *     this.name = name;\n *   }\n *\n *   greet() {\n *     alert('Hello ' + this.name + '!');\n *   }\n * }\n * ```\n *\n * or equivalent to ES5:\n *\n * ```\n * var Greeter = function (name) {\n *   this.name = name;\n * }\n *\n * Greeter.prototype.greet = function () {\n *   alert('Hello ' + this.name + '!');\n * }\n * ```\n *\n * ### Example with parameter annotations\n *\n * ```\n * var MyService = ng.Class({\n *   constructor: [String, [new Query(), QueryList], function(name, queryList) {\n *     ...\n *   }]\n * });\n * ```\n *\n * is equivalent to ES6:\n *\n * ```\n * class MyService {\n *   constructor(name: string, @Query() queryList: QueryList) {\n *     ...\n *   }\n * }\n * ```\n *\n * ### Example with inheritance\n *\n * ```\n * var Shape = ng.Class({\n *   constructor: (color) {\n *     this.color = color;\n *   }\n * });\n *\n * var Square = ng.Class({\n *   extends: Shape,\n *   constructor: function(color, size) {\n *     Shape.call(this, color);\n *     this.size = size;\n *   }\n * });\n * ```\n */\nexport function Class(clsDef: ClassDefinition): ConcreteType {\n  var constructor = applyParams(\n      clsDef.hasOwnProperty('constructor') ? clsDef.constructor : undefined, 'constructor');\n  var proto = constructor.prototype;\n  if (clsDef.hasOwnProperty('extends')) {\n    if (isFunction(clsDef.extends)) {\n      (<Function>constructor).prototype = proto =\n          Object.create((<Function>clsDef.extends).prototype);\n    } else {\n      throw new Error(\n          `Class definition 'extends' property must be a constructor function was: ${stringify(clsDef.extends)}`);\n    }\n  }\n  for (var key in clsDef) {\n    if (key != 'extends' && key != 'prototype' && clsDef.hasOwnProperty(key)) {\n      proto[key] = applyParams(clsDef[key], key);\n    }\n  }\n\n  if (this && this.annotations instanceof Array) {\n    Reflect.defineMetadata('annotations', this.annotations, constructor);\n  }\n\n  if (!constructor['name']) {\n    constructor['overriddenName'] = `class${_nextClassId++}`;\n  }\n\n  return <ConcreteType>constructor;\n}\n\nvar Reflect = global.Reflect;\n// Throw statement at top-level is disallowed by closure compiler in ES6 input.\n// Wrap in an IIFE as a work-around.\n(function checkReflect() {\n  if (!(Reflect && Reflect.getMetadata)) {\n    throw 'reflect-metadata shim is required when using class decorators';\n  }\n})();\n\nexport function makeDecorator(\n    annotationCls, chainFn: (fn: Function) => void = null): (...args: any[]) => (cls: any) => any {\n  function DecoratorFactory(objOrType): (cls: any) => any {\n    var annotationInstance = new (<any>annotationCls)(objOrType);\n    if (this instanceof annotationCls) {\n      return annotationInstance;\n    } else {\n      var chainAnnotation =\n          isFunction(this) && this.annotations instanceof Array ? this.annotations : [];\n      chainAnnotation.push(annotationInstance);\n      var TypeDecorator: TypeDecorator = <TypeDecorator>function TypeDecorator(cls) {\n        var annotations = Reflect.getOwnMetadata('annotations', cls);\n        annotations = annotations || [];\n        annotations.push(annotationInstance);\n        Reflect.defineMetadata('annotations', annotations, cls);\n        return cls;\n      };\n      TypeDecorator.annotations = chainAnnotation;\n      TypeDecorator.Class = Class;\n      if (chainFn) chainFn(TypeDecorator);\n      return TypeDecorator;\n    }\n  }\n  DecoratorFactory.prototype = Object.create(annotationCls.prototype);\n  return DecoratorFactory;\n}\n\nexport function makeParamDecorator(annotationCls): any {\n  function ParamDecoratorFactory(...args): any {\n    var annotationInstance = Object.create(annotationCls.prototype);\n    annotationCls.apply(annotationInstance, args);\n    if (this instanceof annotationCls) {\n      return annotationInstance;\n    } else {\n      (<any>ParamDecorator).annotation = annotationInstance;\n      return ParamDecorator;\n    }\n\n\n    function ParamDecorator(cls, unusedKey, index): any {\n      var parameters: any[][] = Reflect.getMetadata('parameters', cls);\n      parameters = parameters || [];\n\n      // there might be gaps if some in between parameters do not have annotations.\n      // we pad with nulls.\n      while (parameters.length <= index) {\n        parameters.push(null);\n      }\n\n      parameters[index] = parameters[index] || [];\n      var annotationsForParam: any[] = parameters[index];\n      annotationsForParam.push(annotationInstance);\n\n      Reflect.defineMetadata('parameters', parameters, cls);\n      return cls;\n    }\n  }\n  ParamDecoratorFactory.prototype = Object.create(annotationCls.prototype);\n  return ParamDecoratorFactory;\n}\n\nexport function makePropDecorator(decoratorCls): any {\n  function PropDecoratorFactory(...args): any {\n    var decoratorInstance = Object.create(decoratorCls.prototype);\n    decoratorCls.apply(decoratorInstance, args);\n\n    if (this instanceof decoratorCls) {\n      return decoratorInstance;\n    } else {\n      return function PropDecorator(target: any, name: string) {\n        var meta = Reflect.getOwnMetadata('propMetadata', target.constructor);\n        meta = meta || {};\n        meta[name] = meta[name] || [];\n        meta[name].unshift(decoratorInstance);\n        Reflect.defineMetadata('propMetadata', meta, target.constructor);\n      };\n    }\n  }\n  PropDecoratorFactory.prototype = Object.create(decoratorCls.prototype);\n  return PropDecoratorFactory;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/util/decorators.ts\n **/","\nexport class PromiseCompleter<R> {\n  promise: Promise<R>;\n  resolve: (value?: R | PromiseLike<R>) => void;\n  reject: (error?: any, stackTrace?: string) => void;\n\n  constructor() {\n    this.promise = new Promise((res, rej) => {\n      this.resolve = res;\n      this.reject = rej;\n    });\n  }\n}\n\nexport class PromiseWrapper {\n  static resolve<T>(obj: T): Promise<T> { return Promise.resolve(obj); }\n\n  static reject(obj: any, _): Promise<any> { return Promise.reject(obj); }\n\n  // Note: We can't rename this method into `catch`, as this is not a valid\n  // method name in Dart.\n  static catchError<T>(promise: Promise<T>,\n                       onError: (error: any) => T | PromiseLike<T>): Promise<T> {\n    return promise.catch(onError);\n  }\n\n  static all<T>(promises: (T | Promise<T>)[]): Promise<T[]> {\n    if (promises.length == 0) return Promise.resolve([]);\n    return Promise.all(promises);\n  }\n\n  static then<T, U>(promise: Promise<T>, success: (value: T) => U | PromiseLike<U>,\n                    rejection?: (error: any, stack?: any) => U | PromiseLike<U>): Promise<U> {\n    return promise.then(success, rejection);\n  }\n\n  static wrap<T>(computation: () => T): Promise<T> {\n    return new Promise((res, rej) => {\n      try {\n        res(computation());\n      } catch (e) {\n        rej(e);\n      }\n    });\n  }\n\n  static scheduleMicrotask(computation: () => any): void {\n    PromiseWrapper.then(PromiseWrapper.resolve(null), computation, (_) => {});\n  }\n\n  static isPromise(obj: any): boolean { return obj instanceof Promise; }\n\n  static completer<T>(): PromiseCompleter<T> { return new PromiseCompleter<T>(); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/promise.ts\n **/","import {\n  isPresent,\n  isBlank,\n  isJsObject,\n  isType,\n  StringWrapper,\n  Json\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {\n  isListLikeIterable,\n  iterateListLike,\n  Map,\n  MapWrapper,\n  StringMapWrapper,\n  ListWrapper,\n} from 'angular2/src/facade/collection';\n\n/**\n * Polyfill for [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers/Headers), as\n * specified in the [Fetch Spec](https://fetch.spec.whatwg.org/#headers-class).\n *\n * The only known difference between this `Headers` implementation and the spec is the\n * lack of an `entries` method.\n *\n * ### Example ([live demo](http://plnkr.co/edit/MTdwT6?p=preview))\n *\n * ```\n * import {Headers} from 'angular2/http';\n *\n * var firstHeaders = new Headers();\n * firstHeaders.append('Content-Type', 'image/jpeg');\n * console.log(firstHeaders.get('Content-Type')) //'image/jpeg'\n *\n * // Create headers from Plain Old JavaScript Object\n * var secondHeaders = new Headers({\n *   'X-My-Custom-Header': 'Angular'\n * });\n * console.log(secondHeaders.get('X-My-Custom-Header')); //'Angular'\n *\n * var thirdHeaders = new Headers(secondHeaders);\n * console.log(thirdHeaders.get('X-My-Custom-Header')); //'Angular'\n * ```\n */\nexport class Headers {\n  /** @internal */\n  _headersMap: Map<string, string[]>;\n  constructor(headers?: Headers | {[key: string]: any}) {\n    if (headers instanceof Headers) {\n      this._headersMap = (<Headers>headers)._headersMap;\n      return;\n    }\n\n    this._headersMap = new Map<string, string[]>();\n\n    if (isBlank(headers)) {\n      return;\n    }\n\n    // headers instanceof StringMap\n    StringMapWrapper.forEach(headers, (v: any, k: string) => {\n      this._headersMap.set(k, isListLikeIterable(v) ? v : [v]);\n    });\n  }\n\n  /**\n   * Returns a new Headers instance from the given DOMString of Response Headers\n   */\n  static fromResponseHeaderString(headersString: string): Headers {\n    return headersString.trim()\n        .split('\\n')\n        .map(val => val.split(':'))\n        .map(([key, ...parts]) => ([key.trim(), parts.join(':').trim()]))\n        .reduce((headers, [key, value]) => !headers.set(key, value) && headers, new Headers());\n  }\n\n  /**\n   * Appends a header to existing list of header values for a given header name.\n   */\n  append(name: string, value: string): void {\n    var mapName = this._headersMap.get(name);\n    var list = isListLikeIterable(mapName) ? mapName : [];\n    list.push(value);\n    this._headersMap.set(name, list);\n  }\n\n  /**\n   * Deletes all header values for the given name.\n   */\n  delete (name: string): void { this._headersMap.delete(name); }\n\n  forEach(fn: (values: string[], name: string, headers: Map<string, string[]>) => void): void {\n    this._headersMap.forEach(fn);\n  }\n\n  /**\n   * Returns first header that matches given name.\n   */\n  get(header: string): string { return ListWrapper.first(this._headersMap.get(header)); }\n\n  /**\n   * Check for existence of header by given name.\n   */\n  has(header: string): boolean { return this._headersMap.has(header); }\n\n  /**\n   * Provides names of set headers\n   */\n  keys(): string[] { return MapWrapper.keys(this._headersMap); }\n\n  /**\n   * Sets or overrides header value for given name.\n   */\n  set(header: string, value: string | string[]): void {\n    var list: string[] = [];\n\n    if (isListLikeIterable(value)) {\n      var pushValue = (<string[]>value).join(',');\n      list.push(pushValue);\n    } else {\n      list.push(<string>value);\n    }\n\n    this._headersMap.set(header, list);\n  }\n\n  /**\n   * Returns values of all headers.\n   */\n  values(): string[][] { return MapWrapper.values(this._headersMap); }\n\n  /**\n   * Returns string of all headers.\n   */\n  toJSON(): {[key: string]: any} {\n    let serializableHeaders = {};\n    this._headersMap.forEach((values: string[], name: string) => {\n      let list = [];\n\n      iterateListLike(values, val => list = ListWrapper.concat(list, val.split(',')));\n\n      serializableHeaders[name] = list;\n    });\n    return serializableHeaders;\n  }\n\n  /**\n   * Returns list of header values for a given name.\n   */\n  getAll(header: string): string[] {\n    var headers = this._headersMap.get(header);\n    return isListLikeIterable(headers) ? headers : [];\n  }\n\n  /**\n   * This method is not implemented.\n   */\n  entries() { throw new BaseException('\"entries\" method is not implemented on Headers class'); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/headers.ts\n **/","import {OpaqueToken} from 'angular2/src/core/di';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\n/**\n * A DI Token representing the main rendering context. In a browser this is the DOM Document.\n *\n * Note: Document might not be available in the Application Context when Application and Rendering\n * Contexts are not the same (e.g. when running the application into a Web Worker).\n */\nexport const DOCUMENT: OpaqueToken = CONST_EXPR(new OpaqueToken('DocumentToken'));\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/dom_tokens.ts\n **/","import {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {OpaqueToken} from 'angular2/core';\nimport {UrlChangeListener} from './platform_location';\n\n/**\n * `LocationStrategy` is responsible for representing and reading route state\n * from the browser's URL. Angular provides two strategies:\n * {@link HashLocationStrategy} and {@link PathLocationStrategy} (default).\n *\n * This is used under the hood of the {@link Location} service.\n *\n * Applications should use the {@link Router} or {@link Location} services to\n * interact with application route state.\n *\n * For instance, {@link HashLocationStrategy} produces URLs like\n * `http://example.com#/foo`, and {@link PathLocationStrategy} produces\n * `http://example.com/foo` as an equivalent URL.\n *\n * See these two classes for more.\n */\nexport abstract class LocationStrategy {\n  abstract path(): string;\n  abstract prepareExternalUrl(internal: string): string;\n  abstract pushState(state: any, title: string, url: string, queryParams: string): void;\n  abstract replaceState(state: any, title: string, url: string, queryParams: string): void;\n  abstract forward(): void;\n  abstract back(): void;\n  abstract onPopState(fn: UrlChangeListener): void;\n  abstract getBaseHref(): string;\n}\n\n\n/**\n * The `APP_BASE_HREF` token represents the base href to be used with the\n * {@link PathLocationStrategy}.\n *\n * If you're using {@link PathLocationStrategy}, you must provide a provider to a string\n * representing the URL prefix that should be preserved when generating and recognizing\n * URLs.\n *\n * ### Example\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   // ...\n * }\n *\n * bootstrap(AppCmp, [\n *   ROUTER_PROVIDERS,\n *   provide(APP_BASE_HREF, {useValue: '/my/app'})\n * ]);\n * ```\n */\nexport const APP_BASE_HREF: OpaqueToken = CONST_EXPR(new OpaqueToken('appBaseHref'));\n\nexport function normalizeQueryParams(params: string): string {\n  return (params.length > 0 && params.substring(0, 1) != '?') ? ('?' + params) : params;\n}\n\nexport function joinWithSlash(start: string, end: string): string {\n  if (start.length == 0) {\n    return end;\n  }\n  if (end.length == 0) {\n    return start;\n  }\n  var slashes = 0;\n  if (start.endsWith('/')) {\n    slashes++;\n  }\n  if (end.startsWith('/')) {\n    slashes++;\n  }\n  if (slashes == 2) {\n    return start + end.substring(1);\n  }\n  if (slashes == 1) {\n    return start + end;\n  }\n  return start + '/' + end;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/location/location_strategy.ts\n **/","/**\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n *\n * `PlatformLocation` encapsulates all calls to DOM apis, which allows the Router to be platform\n * agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms\n * that angular supports. For example, the default `PlatformLocation` is {@link\n * BrowserPlatformLocation},\n * however when you run your app in a WebWorker you use {@link WebWorkerPlatformLocation}.\n *\n * The `PlatformLocation` class is used directly by all implementations of {@link LocationStrategy}\n * when\n * they need to interact with the DOM apis like pushState, popState, etc...\n *\n * {@link LocationStrategy} in turn is used by the {@link Location} service which is used directly\n * by\n * the {@link Router} in order to navigate between routes. Since all interactions between {@link\n * Router} /\n * {@link Location} / {@link LocationStrategy} and DOM apis flow through the `PlatformLocation`\n * class\n * they are all platform independent.\n */\nexport abstract class PlatformLocation {\n  abstract getBaseHrefFromDOM(): string;\n  abstract onPopState(fn: UrlChangeListener): void;\n  abstract onHashChange(fn: UrlChangeListener): void;\n\n  /* abstract */ get pathname(): string { return null; }\n  /* abstract */ get search(): string { return null; }\n  /* abstract */ get hash(): string { return null; }\n\n  abstract replaceState(state: any, title: string, url: string): void;\n\n  abstract pushState(state: any, title: string, url: string): void;\n\n  abstract forward(): void;\n\n  abstract back(): void;\n}\n\n/**\n * A serializable version of the event from onPopState or onHashChange\n */\nexport interface UrlChangeEvent { type: string; }\n\nexport interface UrlChangeListener { (e: UrlChangeEvent): any; }\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/location/platform_location.ts\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Observable_1 = require('../Observable');\nvar PromiseObservable = (function (_super) {\n    __extends(PromiseObservable, _super);\n    function PromiseObservable(promise, scheduler) {\n        if (scheduler === void 0) { scheduler = null; }\n        _super.call(this);\n        this.promise = promise;\n        this.scheduler = scheduler;\n    }\n    PromiseObservable.create = function (promise, scheduler) {\n        if (scheduler === void 0) { scheduler = null; }\n        return new PromiseObservable(promise, scheduler);\n    };\n    PromiseObservable.prototype._subscribe = function (subscriber) {\n        var _this = this;\n        var promise = this.promise;\n        var scheduler = this.scheduler;\n        if (scheduler == null) {\n            if (this._isScalar) {\n                if (!subscriber.isUnsubscribed) {\n                    subscriber.next(this.value);\n                    subscriber.complete();\n                }\n            }\n            else {\n                promise.then(function (value) {\n                    _this.value = value;\n                    _this._isScalar = true;\n                    if (!subscriber.isUnsubscribed) {\n                        subscriber.next(value);\n                        subscriber.complete();\n                    }\n                }, function (err) {\n                    if (!subscriber.isUnsubscribed) {\n                        subscriber.error(err);\n                    }\n                })\n                    .then(null, function (err) {\n                    // escape the promise trap, throw unhandled errors\n                    root_1.root.setTimeout(function () { throw err; });\n                });\n            }\n        }\n        else {\n            if (this._isScalar) {\n                if (!subscriber.isUnsubscribed) {\n                    return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });\n                }\n            }\n            else {\n                promise.then(function (value) {\n                    _this.value = value;\n                    _this._isScalar = true;\n                    if (!subscriber.isUnsubscribed) {\n                        subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));\n                    }\n                }, function (err) {\n                    if (!subscriber.isUnsubscribed) {\n                        subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));\n                    }\n                })\n                    .then(null, function (err) {\n                    // escape the promise trap, throw unhandled errors\n                    root_1.root.setTimeout(function () { throw err; });\n                });\n            }\n        }\n    };\n    return PromiseObservable;\n}(Observable_1.Observable));\nexports.PromiseObservable = PromiseObservable;\nfunction dispatchNext(_a) {\n    var value = _a.value, subscriber = _a.subscriber;\n    if (!subscriber.isUnsubscribed) {\n        subscriber.next(value);\n        subscriber.complete();\n    }\n}\nfunction dispatchError(_a) {\n    var err = _a.err, subscriber = _a.subscriber;\n    if (!subscriber.isUnsubscribed) {\n        subscriber.error(err);\n    }\n}\n//# sourceMappingURL=PromiseObservable.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/observable/PromiseObservable.js\n ** module id = 110\n ** module chunks = 1\n **/","\"use strict\";\nvar SymbolShim_1 = require('../util/SymbolShim');\n/**\n * rxSubscriber symbol is a symbol for retreiving an \"Rx safe\" Observer from an object\n * \"Rx safety\" can be defined as an object that has all of the traits of an Rx Subscriber,\n * including the ability to add and remove subscriptions to the subscription chain and\n * guarantees involving event triggering (can't \"next\" after unsubscription, etc).\n */\nexports.rxSubscriber = SymbolShim_1.SymbolShim.for('rxSubscriber');\n//# sourceMappingURL=rxSubscriber.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/symbol/rxSubscriber.js\n ** module id = 113\n ** module chunks = 1\n **/","\"use strict\";\nfunction isFunction(x) {\n    return typeof x === 'function';\n}\nexports.isFunction = isFunction;\n//# sourceMappingURL=isFunction.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/isFunction.js\n ** module id = 116\n ** module chunks = 1\n **/","export * from './src/common/pipes';\nexport * from './src/common/directives';\nexport * from './src/common/forms';\nexport * from './src/common/common_directives';\n\n\n/** WEBPACK FOOTER **\n ** angular2/common.ts\n **/","/**\n * @module\n * @description\n * The http module provides services to perform http requests. To get started, see the {@link Http}\n * class.\n */\nimport {provide, Provider} from 'angular2/core';\nimport {Http, Jsonp} from './src/http/http';\nimport {XHRBackend, XHRConnection} from './src/http/backends/xhr_backend';\nimport {JSONPBackend, JSONPBackend_, JSONPConnection} from './src/http/backends/jsonp_backend';\nimport {BrowserXhr} from './src/http/backends/browser_xhr';\nimport {BrowserJsonp} from './src/http/backends/browser_jsonp';\nimport {BaseRequestOptions, RequestOptions} from './src/http/base_request_options';\nimport {ConnectionBackend} from './src/http/interfaces';\nimport {BaseResponseOptions, ResponseOptions} from './src/http/base_response_options';\nexport {Request} from './src/http/static_request';\nexport {Response} from './src/http/static_response';\n\nexport {\n  RequestOptionsArgs,\n  ResponseOptionsArgs,\n  Connection,\n  ConnectionBackend\n} from './src/http/interfaces';\n\nexport {BrowserXhr} from './src/http/backends/browser_xhr';\nexport {BaseRequestOptions, RequestOptions} from './src/http/base_request_options';\nexport {BaseResponseOptions, ResponseOptions} from './src/http/base_response_options';\nexport {XHRBackend, XHRConnection} from './src/http/backends/xhr_backend';\nexport {JSONPBackend, JSONPConnection} from './src/http/backends/jsonp_backend';\nexport {Http, Jsonp} from './src/http/http';\n\nexport {Headers} from './src/http/headers';\n\nexport {ResponseType, ReadyState, RequestMethod} from './src/http/enums';\nexport {URLSearchParams} from './src/http/url_search_params';\n\n/**\n * Provides a basic set of injectables to use the {@link Http} service in any application.\n *\n * The `HTTP_PROVIDERS` should be included either in a component's injector,\n * or in the root injector when bootstrapping an application.\n *\n * ### Example ([live demo](http://plnkr.co/edit/snj7Nv?p=preview))\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {NgFor} from 'angular2/common';\n * import {HTTP_PROVIDERS, Http} from 'angular2/http';\n *\n * @Component({\n *   selector: 'app',\n *   providers: [HTTP_PROVIDERS],\n *   template: `\n *     <div>\n *       <h1>People</h1>\n *       <ul>\n *         <li *ngFor=\"#person of people\">\n *           {{person.name}}\n *         </li>\n *       </ul>\n *     </div>\n *   `,\n *   directives: [NgFor]\n * })\n * export class App {\n *   people: Object[];\n *   constructor(http:Http) {\n *     http.get('people.json').subscribe(res => {\n *       this.people = res.json();\n *     });\n *   }\n *   active:boolean = false;\n *   toggleActiveState() {\n *     this.active = !this.active;\n *   }\n * }\n *\n * bootstrap(App)\n *   .catch(err => console.error(err));\n * ```\n *\n * The primary public API included in `HTTP_PROVIDERS` is the {@link Http} class.\n * However, other providers required by `Http` are included,\n * which may be beneficial to override in certain cases.\n *\n * The providers included in `HTTP_PROVIDERS` include:\n *  * {@link Http}\n *  * {@link XHRBackend}\n *  * `BrowserXHR` - Private factory to create `XMLHttpRequest` instances\n *  * {@link RequestOptions} - Bound to {@link BaseRequestOptions} class\n *  * {@link ResponseOptions} - Bound to {@link BaseResponseOptions} class\n *\n * There may be cases where it makes sense to extend the base request options,\n * such as to add a search string to be appended to all URLs.\n * To accomplish this, a new provider for {@link RequestOptions} should\n * be added in the same injector as `HTTP_PROVIDERS`.\n *\n * ### Example ([live demo](http://plnkr.co/edit/aCMEXi?p=preview))\n *\n * ```\n * import {provide} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {HTTP_PROVIDERS, BaseRequestOptions, RequestOptions} from 'angular2/http';\n *\n * class MyOptions extends BaseRequestOptions {\n *   search: string = 'coreTeam=true';\n * }\n *\n * bootstrap(App, [HTTP_PROVIDERS, provide(RequestOptions, {useClass: MyOptions})])\n *   .catch(err => console.error(err));\n * ```\n *\n * Likewise, to use a mock backend for unit tests, the {@link XHRBackend}\n * provider should be bound to {@link MockBackend}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/7LWALD?p=preview))\n *\n * ```\n * import {provide} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {HTTP_PROVIDERS, Http, Response, XHRBackend} from 'angular2/http';\n * import {MockBackend} from 'angular2/http/testing';\n *\n * var people = [{name: 'Jeff'}, {name: 'Tobias'}];\n *\n * var injector = Injector.resolveAndCreate([\n *   HTTP_PROVIDERS,\n *   MockBackend,\n *   provide(XHRBackend, {useExisting: MockBackend})\n * ]);\n * var http = injector.get(Http);\n * var backend = injector.get(MockBackend);\n *\n * // Listen for any new requests\n * backend.connections.observer({\n *   next: connection => {\n *     var response = new Response({body: people});\n *     setTimeout(() => {\n *       // Send a response to the request\n *       connection.mockRespond(response);\n *     });\n *   }\n * });\n *\n * http.get('people.json').observer({\n *   next: res => {\n *     // Response came from mock backend\n *     console.log('first person', res.json()[0].name);\n *   }\n * });\n * ```\n */\nexport const HTTP_PROVIDERS: any[] = [\n  // TODO(pascal): use factory type annotations once supported in DI\n  // issue: https://github.com/angular/angular/issues/3183\n  provide(Http,\n          {\n            useFactory: (xhrBackend: XHRBackend, requestOptions: RequestOptions) =>\n                            new Http(xhrBackend, requestOptions),\n            deps: [XHRBackend, RequestOptions]\n          }),\n  BrowserXhr,\n  provide(RequestOptions, {useClass: BaseRequestOptions}),\n  provide(ResponseOptions, {useClass: BaseResponseOptions}),\n  XHRBackend\n];\n\n/**\n * See {@link HTTP_PROVIDERS} instead.\n *\n * @deprecated\n */\nexport const HTTP_BINDINGS = HTTP_PROVIDERS;\n\n/**\n * Provides a basic set of providers to use the {@link Jsonp} service in any application.\n *\n * The `JSONP_PROVIDERS` should be included either in a component's injector,\n * or in the root injector when bootstrapping an application.\n *\n * ### Example ([live demo](http://plnkr.co/edit/vmeN4F?p=preview))\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {NgFor} from 'angular2/common';\n * import {JSONP_PROVIDERS, Jsonp} from 'angular2/http';\n *\n * @Component({\n *   selector: 'app',\n *   providers: [JSONP_PROVIDERS],\n *   template: `\n *     <div>\n *       <h1>People</h1>\n *       <ul>\n *         <li *ngFor=\"#person of people\">\n *           {{person.name}}\n *         </li>\n *       </ul>\n *     </div>\n *   `,\n *   directives: [NgFor]\n * })\n * export class App {\n *   people: Array<Object>;\n *   constructor(jsonp:Jsonp) {\n *     jsonp.request('people.json').subscribe(res => {\n *       this.people = res.json();\n *     })\n *   }\n * }\n * ```\n *\n * The primary public API included in `JSONP_PROVIDERS` is the {@link Jsonp} class.\n * However, other providers required by `Jsonp` are included,\n * which may be beneficial to override in certain cases.\n *\n * The providers included in `JSONP_PROVIDERS` include:\n *  * {@link Jsonp}\n *  * {@link JSONPBackend}\n *  * `BrowserJsonp` - Private factory\n *  * {@link RequestOptions} - Bound to {@link BaseRequestOptions} class\n *  * {@link ResponseOptions} - Bound to {@link BaseResponseOptions} class\n *\n * There may be cases where it makes sense to extend the base request options,\n * such as to add a search string to be appended to all URLs.\n * To accomplish this, a new provider for {@link RequestOptions} should\n * be added in the same injector as `JSONP_PROVIDERS`.\n *\n * ### Example ([live demo](http://plnkr.co/edit/TFug7x?p=preview))\n *\n * ```\n * import {provide} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {JSONP_PROVIDERS, BaseRequestOptions, RequestOptions} from 'angular2/http';\n *\n * class MyOptions extends BaseRequestOptions {\n *   search: string = 'coreTeam=true';\n * }\n *\n * bootstrap(App, [JSONP_PROVIDERS, provide(RequestOptions, {useClass: MyOptions})])\n *   .catch(err => console.error(err));\n * ```\n *\n * Likewise, to use a mock backend for unit tests, the {@link JSONPBackend}\n * provider should be bound to {@link MockBackend}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/HDqZWL?p=preview))\n *\n * ```\n * import {provide, Injector} from 'angular2/core';\n * import {JSONP_PROVIDERS, Jsonp, Response, JSONPBackend} from 'angular2/http';\n * import {MockBackend} from 'angular2/http/testing';\n *\n * var people = [{name: 'Jeff'}, {name: 'Tobias'}];\n * var injector = Injector.resolveAndCreate([\n *   JSONP_PROVIDERS,\n *   MockBackend,\n *   provide(JSONPBackend, {useExisting: MockBackend})\n * ]);\n * var jsonp = injector.get(Jsonp);\n * var backend = injector.get(MockBackend);\n *\n * // Listen for any new requests\n * backend.connections.observer({\n *   next: connection => {\n *     var response = new Response({body: people});\n *     setTimeout(() => {\n *       // Send a response to the request\n *       connection.mockRespond(response);\n *     });\n *   }\n * });\n\n * jsonp.get('people.json').observer({\n *   next: res => {\n *     // Response came from mock backend\n *     console.log('first person', res.json()[0].name);\n *   }\n * });\n * ```\n */\nexport const JSONP_PROVIDERS: any[] = [\n  // TODO(pascal): use factory type annotations once supported in DI\n  // issue: https://github.com/angular/angular/issues/3183\n  provide(Jsonp,\n          {\n            useFactory: (jsonpBackend: JSONPBackend, requestOptions: RequestOptions) =>\n                            new Jsonp(jsonpBackend, requestOptions),\n            deps: [JSONPBackend, RequestOptions]\n          }),\n  BrowserJsonp,\n  provide(RequestOptions, {useClass: BaseRequestOptions}),\n  provide(ResponseOptions, {useClass: BaseResponseOptions}),\n  provide(JSONPBackend, {useClass: JSONPBackend_})\n];\n\n/**\n * See {@link JSONP_PROVIDERS} instead.\n *\n * @deprecated\n */\nexport const JSON_BINDINGS = JSONP_PROVIDERS;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/http.ts\n **/","import {Directive, Renderer, ElementRef, Self, forwardRef, Provider} from 'angular2/core';\n\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from './control_value_accessor';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\nconst CHECKBOX_VALUE_ACCESSOR = CONST_EXPR(new Provider(\n    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => CheckboxControlValueAccessor), multi: true}));\n\n/**\n * The accessor for writing a value and listening to changes on a checkbox input element.\n *\n *  ### Example\n *  ```\n *  <input type=\"checkbox\" ngControl=\"rememberLogin\">\n *  ```\n */\n@Directive({\n  selector:\n      'input[type=checkbox][ngControl],input[type=checkbox][ngFormControl],input[type=checkbox][ngModel]',\n  host: {'(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()'},\n  providers: [CHECKBOX_VALUE_ACCESSOR]\n})\nexport class CheckboxControlValueAccessor implements ControlValueAccessor {\n  onChange = (_: any) => {};\n  onTouched = () => {};\n\n  constructor(private _renderer: Renderer, private _elementRef: ElementRef) {}\n\n  writeValue(value: any): void {\n    this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', value);\n  }\n  registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }\n  registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/checkbox_value_accessor.ts\n **/","import {Directive, ElementRef, Renderer, Self, forwardRef, Provider} from 'angular2/core';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from './control_value_accessor';\nimport {isBlank, CONST_EXPR} from 'angular2/src/facade/lang';\n\nconst DEFAULT_VALUE_ACCESSOR = CONST_EXPR(new Provider(\n    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => DefaultValueAccessor), multi: true}));\n\n/**\n * The default accessor for writing a value and listening to changes that is used by the\n * {@link NgModel}, {@link NgFormControl}, and {@link NgControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"text\" ngControl=\"searchQuery\">\n *  ```\n */\n@Directive({\n  selector:\n      'input:not([type=checkbox])[ngControl],textarea[ngControl],input:not([type=checkbox])[ngFormControl],textarea[ngFormControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n  // TODO: vsavkin replace the above selector with the one below it once\n  // https://github.com/angular/angular/issues/3011 is implemented\n  // selector: '[ngControl],[ngModel],[ngFormControl]',\n  host: {'(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n  bindings: [DEFAULT_VALUE_ACCESSOR]\n})\nexport class DefaultValueAccessor implements ControlValueAccessor {\n  onChange = (_: any) => {};\n  onTouched = () => {};\n\n  constructor(private _renderer: Renderer, private _elementRef: ElementRef) {}\n\n  writeValue(value: any): void {\n    var normalizedValue = isBlank(value) ? '' : value;\n    this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n  }\n\n  registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }\n  registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/default_value_accessor.ts\n **/","import {\n  Directive,\n  ElementRef,\n  Renderer,\n  Self,\n  forwardRef,\n  Provider,\n  Attribute,\n  Input,\n  OnInit,\n  OnDestroy,\n  Injector,\n  Injectable\n} from 'angular2/core';\nimport {\n  NG_VALUE_ACCESSOR,\n  ControlValueAccessor\n} from 'angular2/src/common/forms/directives/control_value_accessor';\nimport {NgControl} from 'angular2/src/common/forms/directives/ng_control';\nimport {CONST_EXPR, looseIdentical, isPresent} from 'angular2/src/facade/lang';\nimport {ListWrapper} from 'angular2/src/facade/collection';\n\nconst RADIO_VALUE_ACCESSOR = CONST_EXPR(new Provider(\n    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => RadioControlValueAccessor), multi: true}));\n\n\n/**\n * Internal class used by Angular to uncheck radio buttons with the matching name.\n */\n@Injectable()\nexport class RadioControlRegistry {\n  private _accessors: any[] = [];\n\n  add(control: NgControl, accessor: RadioControlValueAccessor) {\n    this._accessors.push([control, accessor]);\n  }\n\n  remove(accessor: RadioControlValueAccessor) {\n    var indexToRemove = -1;\n    for (var i = 0; i < this._accessors.length; ++i) {\n      if (this._accessors[i][1] === accessor) {\n        indexToRemove = i;\n      }\n    }\n    ListWrapper.removeAt(this._accessors, indexToRemove);\n  }\n\n  select(accessor: RadioControlValueAccessor) {\n    this._accessors.forEach((c) => {\n      if (c[0].control.root === accessor._control.control.root && c[1] !== accessor) {\n        c[1].fireUncheck();\n      }\n    });\n  }\n}\n\n/**\n * The value provided by the forms API for radio buttons.\n */\nexport class RadioButtonState {\n  constructor(public checked: boolean, public value: string) {}\n}\n\n\n/**\n * The accessor for writing a radio control value and listening to changes that is used by the\n * {@link NgModel}, {@link NgFormControl}, and {@link NgControlName} directives.\n *\n *  ### Example\n *  ```\n *  @Component({\n *    template: `\n *      <input type=\"radio\" name=\"food\" [(ngModel)]=\"foodChicken\">\n *      <input type=\"radio\" name=\"food\" [(ngModel)]=\"foodFish\">\n *    `\n *  })\n *  class FoodCmp {\n *    foodChicken = new RadioButtonState(true, \"chicken\");\n *    foodFish = new RadioButtonState(false, \"fish\");\n *  }\n *  ```\n */\n@Directive({\n  selector:\n      'input[type=radio][ngControl],input[type=radio][ngFormControl],input[type=radio][ngModel]',\n  host: {'(change)': 'onChange()', '(blur)': 'onTouched()'},\n  providers: [RADIO_VALUE_ACCESSOR]\n})\nexport class RadioControlValueAccessor implements ControlValueAccessor,\n    OnDestroy, OnInit {\n  _state: RadioButtonState;\n  _control: NgControl;\n  @Input() name: string;\n  _fn: Function;\n  onChange = () => {};\n  onTouched = () => {};\n\n  constructor(private _renderer: Renderer, private _elementRef: ElementRef,\n              private _registry: RadioControlRegistry, private _injector: Injector) {}\n\n  ngOnInit(): void {\n    this._control = this._injector.get(NgControl);\n    this._registry.add(this._control, this);\n  }\n\n  ngOnDestroy(): void { this._registry.remove(this); }\n\n  writeValue(value: any): void {\n    this._state = value;\n    if (isPresent(value) && value.checked) {\n      this._renderer.setElementProperty(this._elementRef.nativeElement, 'checked', true);\n    }\n  }\n\n  registerOnChange(fn: (_: any) => {}): void {\n    this._fn = fn;\n    this.onChange = () => {\n      fn(new RadioButtonState(true, this._state.value));\n      this._registry.select(this);\n    };\n  }\n\n  fireUncheck(): void { this._fn(new RadioButtonState(false, this._state.value)); }\n\n  registerOnTouched(fn: () => {}): void { this.onTouched = fn; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/radio_control_value_accessor.ts\n **/","import {\n  Query,\n  Directive,\n  Renderer,\n  Self,\n  forwardRef,\n  Provider,\n  ElementRef,\n  QueryList\n} from 'angular2/core';\n\nimport {ObservableWrapper} from 'angular2/src/facade/async';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from './control_value_accessor';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\nconst SELECT_VALUE_ACCESSOR = CONST_EXPR(new Provider(\n    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => SelectControlValueAccessor), multi: true}));\n\n/**\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * ### Example\n *\n * ```\n * <select ngControl=\"city\">\n *   <option *ngFor=\"#c of cities\" [value]=\"c\"></option>\n * </select>\n * ```\n */\n@Directive({selector: 'option'})\nexport class NgSelectOption {\n}\n\n/**\n * The accessor for writing a value and listening to changes on a select element.\n */\n@Directive({\n  selector: 'select[ngControl],select[ngFormControl],select[ngModel]',\n  host: {'(input)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},\n  bindings: [SELECT_VALUE_ACCESSOR]\n})\nexport class SelectControlValueAccessor implements ControlValueAccessor {\n  value: string;\n  onChange = (_: any) => {};\n  onTouched = () => {};\n\n  constructor(private _renderer: Renderer, private _elementRef: ElementRef,\n              @Query(NgSelectOption, {descendants: true}) query: QueryList<NgSelectOption>) {\n    this._updateValueWhenListOfOptionsChanges(query);\n  }\n\n  writeValue(value: any): void {\n    this.value = value;\n    this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', value);\n  }\n\n  registerOnChange(fn: () => any): void { this.onChange = fn; }\n  registerOnTouched(fn: () => any): void { this.onTouched = fn; }\n\n  private _updateValueWhenListOfOptionsChanges(query: QueryList<NgSelectOption>) {\n    ObservableWrapper.subscribe(query.changes, (_) => this.writeValue(this.value));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/select_control_value_accessor.ts\n **/","import {isPresent, isBlank, normalizeBool} from 'angular2/src/facade/lang';\nimport {Observable, EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';\nimport {PromiseWrapper} from 'angular2/src/facade/promise';\nimport {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {ValidatorFn, AsyncValidatorFn} from './directives/validators';\n\n/**\n * Indicates that a Control is valid, i.e. that no errors exist in the input value.\n */\nexport const VALID = \"VALID\";\n\n/**\n * Indicates that a Control is invalid, i.e. that an error exists in the input value.\n */\nexport const INVALID = \"INVALID\";\n\n/**\n * Indicates that a Control is pending, i.e. that async validation is occurring and\n * errors are not yet available for the input value.\n */\nexport const PENDING = \"PENDING\";\n\nexport function isControl(control: Object): boolean {\n  return control instanceof AbstractControl;\n}\n\nfunction _find(control: AbstractControl, path: Array<string | number>| string) {\n  if (isBlank(path)) return null;\n\n  if (!(path instanceof Array)) {\n    path = (<string>path).split(\"/\");\n  }\n  if (path instanceof Array && ListWrapper.isEmpty(path)) return null;\n\n  return (<Array<string | number>>path)\n      .reduce((v, name) => {\n        if (v instanceof ControlGroup) {\n          return isPresent(v.controls[name]) ? v.controls[name] : null;\n        } else if (v instanceof ControlArray) {\n          var index = <number>name;\n          return isPresent(v.at(index)) ? v.at(index) : null;\n        } else {\n          return null;\n        }\n      }, control);\n}\n\nfunction toObservable(r: any): Observable<any> {\n  return PromiseWrapper.isPromise(r) ? ObservableWrapper.fromPromise(r) : r;\n}\n\n/**\n *\n */\nexport abstract class AbstractControl {\n  /** @internal */\n  _value: any;\n\n  private _valueChanges: EventEmitter<any>;\n  private _statusChanges: EventEmitter<any>;\n  private _status: string;\n  private _errors: {[key: string]: any};\n  private _pristine: boolean = true;\n  private _touched: boolean = false;\n  private _parent: ControlGroup | ControlArray;\n  private _asyncValidationSubscription: any;\n\n  constructor(public validator: ValidatorFn, public asyncValidator: AsyncValidatorFn) {}\n\n  get value(): any { return this._value; }\n\n  get status(): string { return this._status; }\n\n  get valid(): boolean { return this._status === VALID; }\n\n  /**\n   * Returns the errors of this control.\n   */\n  get errors(): {[key: string]: any} { return this._errors; }\n\n  get pristine(): boolean { return this._pristine; }\n\n  get dirty(): boolean { return !this.pristine; }\n\n  get touched(): boolean { return this._touched; }\n\n  get untouched(): boolean { return !this._touched; }\n\n  get valueChanges(): Observable<any> { return this._valueChanges; }\n\n  get statusChanges(): Observable<any> { return this._statusChanges; }\n\n  get pending(): boolean { return this._status == PENDING; }\n\n  markAsTouched(): void { this._touched = true; }\n\n  markAsDirty({onlySelf}: {onlySelf?: boolean} = {}): void {\n    onlySelf = normalizeBool(onlySelf);\n    this._pristine = false;\n\n    if (isPresent(this._parent) && !onlySelf) {\n      this._parent.markAsDirty({onlySelf: onlySelf});\n    }\n  }\n\n  markAsPending({onlySelf}: {onlySelf?: boolean} = {}): void {\n    onlySelf = normalizeBool(onlySelf);\n    this._status = PENDING;\n\n    if (isPresent(this._parent) && !onlySelf) {\n      this._parent.markAsPending({onlySelf: onlySelf});\n    }\n  }\n\n  setParent(parent: ControlGroup | ControlArray): void { this._parent = parent; }\n\n  updateValueAndValidity(\n      {onlySelf, emitEvent}: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {\n    onlySelf = normalizeBool(onlySelf);\n    emitEvent = isPresent(emitEvent) ? emitEvent : true;\n\n    this._updateValue();\n\n    this._errors = this._runValidator();\n    this._status = this._calculateStatus();\n\n    if (this._status == VALID || this._status == PENDING) {\n      this._runAsyncValidator(emitEvent);\n    }\n\n    if (emitEvent) {\n      ObservableWrapper.callEmit(this._valueChanges, this._value);\n      ObservableWrapper.callEmit(this._statusChanges, this._status);\n    }\n\n    if (isPresent(this._parent) && !onlySelf) {\n      this._parent.updateValueAndValidity({onlySelf: onlySelf, emitEvent: emitEvent});\n    }\n  }\n\n  private _runValidator(): {[key: string]: any} {\n    return isPresent(this.validator) ? this.validator(this) : null;\n  }\n\n  private _runAsyncValidator(emitEvent: boolean): void {\n    if (isPresent(this.asyncValidator)) {\n      this._status = PENDING;\n      this._cancelExistingSubscription();\n      var obs = toObservable(this.asyncValidator(this));\n      this._asyncValidationSubscription = ObservableWrapper.subscribe(\n          obs, (res: {[key: string]: any}) => this.setErrors(res, {emitEvent: emitEvent}));\n    }\n  }\n\n  private _cancelExistingSubscription(): void {\n    if (isPresent(this._asyncValidationSubscription)) {\n      ObservableWrapper.dispose(this._asyncValidationSubscription);\n    }\n  }\n\n  /**\n   * Sets errors on a control.\n   *\n   * This is used when validations are run not automatically, but manually by the user.\n   *\n   * Calling `setErrors` will also update the validity of the parent control.\n   *\n   * ## Usage\n   *\n   * ```\n   * var login = new Control(\"someLogin\");\n   * login.setErrors({\n   *   \"notUnique\": true\n   * });\n   *\n   * expect(login.valid).toEqual(false);\n   * expect(login.errors).toEqual({\"notUnique\": true});\n   *\n   * login.updateValue(\"someOtherLogin\");\n   *\n   * expect(login.valid).toEqual(true);\n   * ```\n   */\n  setErrors(errors: {[key: string]: any}, {emitEvent}: {emitEvent?: boolean} = {}): void {\n    emitEvent = isPresent(emitEvent) ? emitEvent : true;\n\n    this._errors = errors;\n    this._status = this._calculateStatus();\n\n    if (emitEvent) {\n      ObservableWrapper.callEmit(this._statusChanges, this._status);\n    }\n\n    if (isPresent(this._parent)) {\n      this._parent._updateControlsErrors();\n    }\n  }\n\n  find(path: Array<string | number>| string): AbstractControl { return _find(this, path); }\n\n  getError(errorCode: string, path: string[] = null): any {\n    var control = isPresent(path) && !ListWrapper.isEmpty(path) ? this.find(path) : this;\n    if (isPresent(control) && isPresent(control._errors)) {\n      return StringMapWrapper.get(control._errors, errorCode);\n    } else {\n      return null;\n    }\n  }\n\n  hasError(errorCode: string, path: string[] = null): boolean {\n    return isPresent(this.getError(errorCode, path));\n  }\n\n  get root(): AbstractControl {\n    let x: AbstractControl = this;\n\n    while (isPresent(x._parent)) {\n      x = x._parent;\n    }\n\n    return x;\n  }\n\n  /** @internal */\n  _updateControlsErrors(): void {\n    this._status = this._calculateStatus();\n\n    if (isPresent(this._parent)) {\n      this._parent._updateControlsErrors();\n    }\n  }\n\n  /** @internal */\n  _initObservables() {\n    this._valueChanges = new EventEmitter();\n    this._statusChanges = new EventEmitter();\n  }\n\n\n  private _calculateStatus(): string {\n    if (isPresent(this._errors)) return INVALID;\n    if (this._anyControlsHaveStatus(PENDING)) return PENDING;\n    if (this._anyControlsHaveStatus(INVALID)) return INVALID;\n    return VALID;\n  }\n\n  /** @internal */\n  abstract _updateValue(): void;\n\n  /** @internal */\n  abstract _anyControlsHaveStatus(status: string): boolean;\n}\n\n/**\n * Defines a part of a form that cannot be divided into other controls. `Control`s have values and\n * validation state, which is determined by an optional validation function.\n *\n * `Control` is one of the three fundamental building blocks used to define forms in Angular, along\n * with {@link ControlGroup} and {@link ControlArray}.\n *\n * ## Usage\n *\n * By default, a `Control` is created for every `<input>` or other form component.\n * With {@link NgFormControl} or {@link NgFormModel} an existing {@link Control} can be\n * bound to a DOM element instead. This `Control` can be configured with a custom\n * validation function.\n *\n * ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))\n */\nexport class Control extends AbstractControl {\n  /** @internal */\n  _onChange: Function;\n\n  constructor(value: any = null, validator: ValidatorFn = null,\n              asyncValidator: AsyncValidatorFn = null) {\n    super(validator, asyncValidator);\n    this._value = value;\n    this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n    this._initObservables();\n  }\n\n  /**\n   * Set the value of the control to `value`.\n   *\n   * If `onlySelf` is `true`, this change will only affect the validation of this `Control`\n   * and not its parent component. If `emitEvent` is `true`, this change will cause a\n   * `valueChanges` event on the `Control` to be emitted. Both of these options default to\n   * `false`.\n   *\n   * If `emitModelToViewChange` is `true`, the view will be notified about the new value\n   * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not\n   * specified.\n   */\n  updateValue(value: any, {onlySelf, emitEvent, emitModelToViewChange}: {\n    onlySelf?: boolean,\n    emitEvent?: boolean,\n    emitModelToViewChange?: boolean\n  } = {}): void {\n    emitModelToViewChange = isPresent(emitModelToViewChange) ? emitModelToViewChange : true;\n    this._value = value;\n    if (isPresent(this._onChange) && emitModelToViewChange) this._onChange(this._value);\n    this.updateValueAndValidity({onlySelf: onlySelf, emitEvent: emitEvent});\n  }\n\n  /**\n   * @internal\n   */\n  _updateValue() {}\n\n  /**\n   * @internal\n   */\n  _anyControlsHaveStatus(status: string): boolean { return false; }\n\n  /**\n   * Register a listener for change events.\n   */\n  registerOnChange(fn: Function): void { this._onChange = fn; }\n}\n\n/**\n * Defines a part of a form, of fixed length, that can contain other controls.\n *\n * A `ControlGroup` aggregates the values and errors of each {@link Control} in the group. Thus, if\n * one of the controls in a group is invalid, the entire group is invalid. Similarly, if a control\n * changes its value, the entire group changes as well.\n *\n * `ControlGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {@link Control} and {@link ControlArray}. {@link ControlArray} can also contain other\n * controls, but is of variable length.\n *\n * ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))\n */\nexport class ControlGroup extends AbstractControl {\n  private _optionals: {[key: string]: boolean};\n\n  constructor(public controls: {[key: string]: AbstractControl},\n              optionals: {[key: string]: boolean} = null, validator: ValidatorFn = null,\n              asyncValidator: AsyncValidatorFn = null) {\n    super(validator, asyncValidator);\n    this._optionals = isPresent(optionals) ? optionals : {};\n    this._initObservables();\n    this._setParentForControls();\n    this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n  }\n\n  /**\n   * Add a control to this group.\n   */\n  addControl(name: string, control: AbstractControl): void {\n    this.controls[name] = control;\n    control.setParent(this);\n  }\n\n  /**\n   * Remove a control from this group.\n   */\n  removeControl(name: string): void { StringMapWrapper.delete(this.controls, name); }\n\n  /**\n   * Mark the named control as non-optional.\n   */\n  include(controlName: string): void {\n    StringMapWrapper.set(this._optionals, controlName, true);\n    this.updateValueAndValidity();\n  }\n\n  /**\n   * Mark the named control as optional.\n   */\n  exclude(controlName: string): void {\n    StringMapWrapper.set(this._optionals, controlName, false);\n    this.updateValueAndValidity();\n  }\n\n  /**\n   * Check whether there is a control with the given name in the group.\n   */\n  contains(controlName: string): boolean {\n    var c = StringMapWrapper.contains(this.controls, controlName);\n    return c && this._included(controlName);\n  }\n\n  /** @internal */\n  _setParentForControls() {\n    StringMapWrapper.forEach(\n        this.controls, (control: AbstractControl, name: string) => { control.setParent(this); });\n  }\n\n  /** @internal */\n  _updateValue() { this._value = this._reduceValue(); }\n\n  /** @internal */\n  _anyControlsHaveStatus(status: string): boolean {\n    var res = false;\n    StringMapWrapper.forEach(this.controls, (control: AbstractControl, name: string) => {\n      res = res || (this.contains(name) && control.status == status);\n    });\n    return res;\n  }\n\n  /** @internal */\n  _reduceValue() {\n    return this._reduceChildren(\n        {}, (acc: {[k: string]: AbstractControl}, control: AbstractControl, name: string) => {\n          acc[name] = control.value;\n          return acc;\n        });\n  }\n\n  /** @internal */\n  _reduceChildren(initValue: any, fn: Function) {\n    var res = initValue;\n    StringMapWrapper.forEach(this.controls, (control: AbstractControl, name: string) => {\n      if (this._included(name)) {\n        res = fn(res, control, name);\n      }\n    });\n    return res;\n  }\n\n  /** @internal */\n  _included(controlName: string): boolean {\n    var isOptional = StringMapWrapper.contains(this._optionals, controlName);\n    return !isOptional || StringMapWrapper.get(this._optionals, controlName);\n  }\n}\n\n/**\n * Defines a part of a form, of variable length, that can contain other controls.\n *\n * A `ControlArray` aggregates the values and errors of each {@link Control} in the group. Thus, if\n * one of the controls in a group is invalid, the entire group is invalid. Similarly, if a control\n * changes its value, the entire group changes as well.\n *\n * `ControlArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {@link Control} and {@link ControlGroup}. {@link ControlGroup} can also contain\n * other controls, but is of fixed length.\n *\n * ## Adding or removing controls\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `ControlArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `ControlArray` directly, as that will result in strange and unexpected behavior such\n * as broken change detection.\n *\n * ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))\n */\nexport class ControlArray extends AbstractControl {\n  constructor(public controls: AbstractControl[], validator: ValidatorFn = null,\n              asyncValidator: AsyncValidatorFn = null) {\n    super(validator, asyncValidator);\n    this._initObservables();\n    this._setParentForControls();\n    this.updateValueAndValidity({onlySelf: true, emitEvent: false});\n  }\n\n  /**\n   * Get the {@link AbstractControl} at the given `index` in the array.\n   */\n  at(index: number): AbstractControl { return this.controls[index]; }\n\n  /**\n   * Insert a new {@link AbstractControl} at the end of the array.\n   */\n  push(control: AbstractControl): void {\n    this.controls.push(control);\n    control.setParent(this);\n    this.updateValueAndValidity();\n  }\n\n  /**\n   * Insert a new {@link AbstractControl} at the given `index` in the array.\n   */\n  insert(index: number, control: AbstractControl): void {\n    ListWrapper.insert(this.controls, index, control);\n    control.setParent(this);\n    this.updateValueAndValidity();\n  }\n\n  /**\n   * Remove the control at the given `index` in the array.\n   */\n  removeAt(index: number): void {\n    ListWrapper.removeAt(this.controls, index);\n    this.updateValueAndValidity();\n  }\n\n  /**\n   * Length of the control array.\n   */\n  get length(): number { return this.controls.length; }\n\n  /** @internal */\n  _updateValue(): void { this._value = this.controls.map((control) => control.value); }\n\n  /** @internal */\n  _anyControlsHaveStatus(status: string): boolean {\n    return this.controls.some(c => c.status == status);\n  }\n\n\n  /** @internal */\n  _setParentForControls(): void {\n    this.controls.forEach((control) => { control.setParent(this); });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/model.ts\n **/","import {\n  isPresent,\n  isBlank,\n  normalizeBool,\n  normalizeBlank,\n  serializeEnum,\n  Type,\n  isString,\n  RegExpWrapper,\n  StringWrapper\n} from 'angular2/src/facade/lang';\nimport {unimplemented} from 'angular2/src/facade/exceptions';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {\n  ChangeDetectionStrategy,\n  CHANGE_DETECTION_STRATEGY_VALUES\n} from 'angular2/src/core/change_detection/change_detection';\nimport {ViewEncapsulation, VIEW_ENCAPSULATION_VALUES} from 'angular2/src/core/metadata/view';\nimport {CssSelector} from 'angular2/src/compiler/selector';\nimport {splitAtColon} from './util';\nimport {LifecycleHooks, LIFECYCLE_HOOKS_VALUES} from 'angular2/src/core/linker/interfaces';\n\n// group 1: \"property\" from \"[property]\"\n// group 2: \"event\" from \"(event)\"\nvar HOST_REG_EXP = /^(?:(?:\\[([^\\]]+)\\])|(?:\\(([^\\)]+)\\)))$/g;\n\nexport abstract class CompileMetadataWithIdentifier {\n  static fromJson(data: {[key: string]: any}): CompileMetadataWithIdentifier {\n    return _COMPILE_METADATA_FROM_JSON[data['class']](data);\n  }\n\n  abstract toJson(): {[key: string]: any};\n\n  get identifier(): CompileIdentifierMetadata { return <CompileIdentifierMetadata>unimplemented(); }\n}\n\nexport abstract class CompileMetadataWithType extends CompileMetadataWithIdentifier {\n  static fromJson(data: {[key: string]: any}): CompileMetadataWithType {\n    return _COMPILE_METADATA_FROM_JSON[data['class']](data);\n  }\n\n  abstract toJson(): {[key: string]: any};\n\n  get type(): CompileTypeMetadata { return <CompileTypeMetadata>unimplemented(); }\n\n  get identifier(): CompileIdentifierMetadata { return <CompileIdentifierMetadata>unimplemented(); }\n}\n\nexport class CompileIdentifierMetadata implements CompileMetadataWithIdentifier {\n  runtime: any;\n  name: string;\n  prefix: string;\n  moduleUrl: string;\n  constConstructor: boolean;\n  constructor({runtime, name, moduleUrl, prefix, constConstructor}: {\n    runtime?: any,\n    name?: string,\n    moduleUrl?: string,\n    prefix?: string,\n    constConstructor?: boolean\n  } = {}) {\n    this.runtime = runtime;\n    this.name = name;\n    this.prefix = prefix;\n    this.moduleUrl = moduleUrl;\n    this.constConstructor = constConstructor;\n  }\n\n  static fromJson(data: {[key: string]: any}): CompileIdentifierMetadata {\n    return new CompileIdentifierMetadata({\n      name: data['name'],\n      prefix: data['prefix'],\n      moduleUrl: data['moduleUrl'],\n      constConstructor: data['constConstructor']\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      // Note: Runtime type can't be serialized...\n      'class': 'Identifier',\n      'name': this.name,\n      'moduleUrl': this.moduleUrl,\n      'prefix': this.prefix,\n      'constConstructor': this.constConstructor\n    };\n  }\n\n  get identifier(): CompileIdentifierMetadata { return this; }\n}\n\nexport class CompileDiDependencyMetadata {\n  isAttribute: boolean;\n  isSelf: boolean;\n  isHost: boolean;\n  isSkipSelf: boolean;\n  isOptional: boolean;\n  query: CompileQueryMetadata;\n  viewQuery: CompileQueryMetadata;\n  token: CompileIdentifierMetadata | string;\n\n  constructor({isAttribute, isSelf, isHost, isSkipSelf, isOptional, query, viewQuery, token}: {\n    isAttribute?: boolean,\n    isSelf?: boolean,\n    isHost?: boolean,\n    isSkipSelf?: boolean,\n    isOptional?: boolean,\n    query?: CompileQueryMetadata,\n    viewQuery?: CompileQueryMetadata,\n    token?: CompileIdentifierMetadata | string\n  } = {}) {\n    this.isAttribute = normalizeBool(isAttribute);\n    this.isSelf = normalizeBool(isSelf);\n    this.isHost = normalizeBool(isHost);\n    this.isSkipSelf = normalizeBool(isSkipSelf);\n    this.isOptional = normalizeBool(isOptional);\n    this.query = query;\n    this.viewQuery = viewQuery;\n    this.token = token;\n  }\n\n  static fromJson(data: {[key: string]: any}): CompileDiDependencyMetadata {\n    return new CompileDiDependencyMetadata({\n      token: objFromJson(data['token'], CompileIdentifierMetadata.fromJson),\n      query: objFromJson(data['query'], CompileQueryMetadata.fromJson),\n      viewQuery: objFromJson(data['viewQuery'], CompileQueryMetadata.fromJson),\n      isAttribute: data['isAttribute'],\n      isSelf: data['isSelf'],\n      isHost: data['isHost'],\n      isSkipSelf: data['isSkipSelf'],\n      isOptional: data['isOptional']\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      // Note: Runtime type can't be serialized...\n      'token': objToJson(this.token),\n      'query': objToJson(this.query),\n      'viewQuery': objToJson(this.viewQuery),\n      'isAttribute': this.isAttribute,\n      'isSelf': this.isSelf,\n      'isHost': this.isHost,\n      'isSkipSelf': this.isSkipSelf,\n      'isOptional': this.isOptional\n    };\n  }\n}\n\nexport class CompileProviderMetadata {\n  token: CompileIdentifierMetadata | string;\n  useClass: CompileTypeMetadata;\n  useValue: any;\n  useExisting: CompileIdentifierMetadata | string;\n  useFactory: CompileFactoryMetadata;\n  deps: CompileDiDependencyMetadata[];\n  multi: boolean;\n\n  constructor({token, useClass, useValue, useExisting, useFactory, deps, multi}: {\n    token?: CompileIdentifierMetadata | string,\n    useClass?: CompileTypeMetadata,\n    useValue?: any,\n    useExisting?: CompileIdentifierMetadata | string,\n    useFactory?: CompileFactoryMetadata,\n    deps?: CompileDiDependencyMetadata[],\n    multi?: boolean\n  }) {\n    this.token = token;\n    this.useClass = useClass;\n    this.useValue = useValue;\n    this.useExisting = useExisting;\n    this.useFactory = useFactory;\n    this.deps = deps;\n    this.multi = multi;\n  }\n\n  static fromJson(data: {[key: string]: any}): CompileProviderMetadata {\n    return new CompileProviderMetadata({\n      token: objFromJson(data['token'], CompileIdentifierMetadata.fromJson),\n      useClass: objFromJson(data['useClass'], CompileTypeMetadata.fromJson)\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      // Note: Runtime type can't be serialized...\n      'token': objToJson(this.token),\n      'useClass': objToJson(this.useClass)\n    };\n  }\n}\n\nexport class CompileFactoryMetadata implements CompileIdentifierMetadata {\n  runtime: Function;\n  name: string;\n  prefix: string;\n  moduleUrl: string;\n  constConstructor: boolean;\n  diDeps: CompileDiDependencyMetadata[];\n\n  constructor({runtime, name, moduleUrl, constConstructor, diDeps}: {\n    runtime?: Function,\n    name?: string,\n    moduleUrl?: string,\n    constConstructor?: boolean,\n    diDeps?: CompileDiDependencyMetadata[]\n  }) {\n    this.runtime = runtime;\n    this.name = name;\n    this.moduleUrl = moduleUrl;\n    this.diDeps = diDeps;\n    this.constConstructor = constConstructor;\n  }\n\n  get identifier(): CompileIdentifierMetadata { return this; }\n\n  toJson() { return null; }\n}\n\n/**\n * Metadata regarding compilation of a type.\n */\nexport class CompileTypeMetadata implements CompileIdentifierMetadata, CompileMetadataWithType {\n  runtime: Type;\n  name: string;\n  prefix: string;\n  moduleUrl: string;\n  isHost: boolean;\n  constConstructor: boolean;\n  diDeps: CompileDiDependencyMetadata[];\n\n  constructor({runtime, name, moduleUrl, prefix, isHost, constConstructor, diDeps}: {\n    runtime?: Type,\n    name?: string,\n    moduleUrl?: string,\n    prefix?: string,\n    isHost?: boolean,\n    constConstructor?: boolean,\n    diDeps?: CompileDiDependencyMetadata[]\n  } = {}) {\n    this.runtime = runtime;\n    this.name = name;\n    this.moduleUrl = moduleUrl;\n    this.prefix = prefix;\n    this.isHost = normalizeBool(isHost);\n    this.constConstructor = constConstructor;\n    this.diDeps = normalizeBlank(diDeps);\n  }\n\n  static fromJson(data: {[key: string]: any}): CompileTypeMetadata {\n    return new CompileTypeMetadata({\n      name: data['name'],\n      moduleUrl: data['moduleUrl'],\n      prefix: data['prefix'],\n      isHost: data['isHost'],\n      constConstructor: data['constConstructor'],\n      diDeps: arrayFromJson(data['diDeps'], CompileDiDependencyMetadata.fromJson)\n    });\n  }\n\n  get identifier(): CompileIdentifierMetadata { return this; }\n  get type(): CompileTypeMetadata { return this; }\n\n  toJson(): {[key: string]: any} {\n    return {\n      // Note: Runtime type can't be serialized...\n      'class': 'Type',\n      'name': this.name,\n      'moduleUrl': this.moduleUrl,\n      'prefix': this.prefix,\n      'isHost': this.isHost,\n      'constConstructor': this.constConstructor,\n      'diDeps': arrayToJson(this.diDeps)\n    };\n  }\n}\n\nexport class CompileQueryMetadata {\n  selectors: Array<CompileIdentifierMetadata | string>;\n  descendants: boolean;\n  first: boolean;\n  propertyName: string;\n\n  constructor({selectors, descendants, first, propertyName}: {\n    selectors?: Array<CompileIdentifierMetadata | string>,\n    descendants?: boolean,\n    first?: boolean,\n    propertyName?: string\n  } = {}) {\n    this.selectors = selectors;\n    this.descendants = descendants;\n    this.first = normalizeBool(first);\n    this.propertyName = propertyName;\n  }\n\n  static fromJson(data: {[key: string]: any}): CompileQueryMetadata {\n    return new CompileQueryMetadata({\n      selectors: arrayFromJson(data['selectors'], CompileIdentifierMetadata.fromJson),\n      descendants: data['descendants'],\n      first: data['first'],\n      propertyName: data['propertyName']\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      // Note: Runtime type can't be serialized...\n      'selectors': arrayToJson(this.selectors),\n      'descendants': this.descendants,\n      'first': this.first,\n      'propertyName': this.propertyName\n    };\n  }\n}\n\n/**\n * Metadata regarding compilation of a template.\n */\nexport class CompileTemplateMetadata {\n  encapsulation: ViewEncapsulation;\n  template: string;\n  templateUrl: string;\n  styles: string[];\n  styleUrls: string[];\n  ngContentSelectors: string[];\n  constructor({encapsulation, template, templateUrl, styles, styleUrls, ngContentSelectors}: {\n    encapsulation?: ViewEncapsulation,\n    template?: string,\n    templateUrl?: string,\n    styles?: string[],\n    styleUrls?: string[],\n    ngContentSelectors?: string[]\n  } = {}) {\n    this.encapsulation = isPresent(encapsulation) ? encapsulation : ViewEncapsulation.Emulated;\n    this.template = template;\n    this.templateUrl = templateUrl;\n    this.styles = isPresent(styles) ? styles : [];\n    this.styleUrls = isPresent(styleUrls) ? styleUrls : [];\n    this.ngContentSelectors = isPresent(ngContentSelectors) ? ngContentSelectors : [];\n  }\n\n  static fromJson(data: {[key: string]: any}): CompileTemplateMetadata {\n    return new CompileTemplateMetadata({\n      encapsulation: isPresent(data['encapsulation']) ?\n                         VIEW_ENCAPSULATION_VALUES[data['encapsulation']] :\n                         data['encapsulation'],\n      template: data['template'],\n      templateUrl: data['templateUrl'],\n      styles: data['styles'],\n      styleUrls: data['styleUrls'],\n      ngContentSelectors: data['ngContentSelectors']\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      'encapsulation':\n          isPresent(this.encapsulation) ? serializeEnum(this.encapsulation) : this.encapsulation,\n      'template': this.template,\n      'templateUrl': this.templateUrl,\n      'styles': this.styles,\n      'styleUrls': this.styleUrls,\n      'ngContentSelectors': this.ngContentSelectors\n    };\n  }\n}\n\n/**\n * Metadata regarding compilation of a directive.\n */\nexport class CompileDirectiveMetadata implements CompileMetadataWithType {\n  static create({type, isComponent, dynamicLoadable, selector, exportAs, changeDetection, inputs,\n                 outputs, host, lifecycleHooks, providers, viewProviders, queries, viewQueries,\n                 template}: {\n    type?: CompileTypeMetadata,\n    isComponent?: boolean,\n    dynamicLoadable?: boolean,\n    selector?: string,\n    exportAs?: string,\n    changeDetection?: ChangeDetectionStrategy,\n    inputs?: string[],\n    outputs?: string[],\n    host?: {[key: string]: string},\n    lifecycleHooks?: LifecycleHooks[],\n    providers?: Array<CompileProviderMetadata | CompileTypeMetadata | any[]>,\n    viewProviders?: Array<CompileProviderMetadata | CompileTypeMetadata | any[]>,\n    queries?: CompileQueryMetadata[],\n    viewQueries?: CompileQueryMetadata[],\n    template?: CompileTemplateMetadata\n  } = {}): CompileDirectiveMetadata {\n    var hostListeners: {[key: string]: string} = {};\n    var hostProperties: {[key: string]: string} = {};\n    var hostAttributes: {[key: string]: string} = {};\n    if (isPresent(host)) {\n      StringMapWrapper.forEach(host, (value: string, key: string) => {\n        var matches = RegExpWrapper.firstMatch(HOST_REG_EXP, key);\n        if (isBlank(matches)) {\n          hostAttributes[key] = value;\n        } else if (isPresent(matches[1])) {\n          hostProperties[matches[1]] = value;\n        } else if (isPresent(matches[2])) {\n          hostListeners[matches[2]] = value;\n        }\n      });\n    }\n    var inputsMap: {[key: string]: string} = {};\n    if (isPresent(inputs)) {\n      inputs.forEach((bindConfig: string) => {\n        // canonical syntax: `dirProp: elProp`\n        // if there is no `:`, use dirProp = elProp\n        var parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);\n        inputsMap[parts[0]] = parts[1];\n      });\n    }\n    var outputsMap: {[key: string]: string} = {};\n    if (isPresent(outputs)) {\n      outputs.forEach((bindConfig: string) => {\n        // canonical syntax: `dirProp: elProp`\n        // if there is no `:`, use dirProp = elProp\n        var parts = splitAtColon(bindConfig, [bindConfig, bindConfig]);\n        outputsMap[parts[0]] = parts[1];\n      });\n    }\n\n    return new CompileDirectiveMetadata({\n      type: type,\n      isComponent: normalizeBool(isComponent),\n      dynamicLoadable: normalizeBool(dynamicLoadable),\n      selector: selector,\n      exportAs: exportAs,\n      changeDetection: changeDetection,\n      inputs: inputsMap,\n      outputs: outputsMap,\n      hostListeners: hostListeners,\n      hostProperties: hostProperties,\n      hostAttributes: hostAttributes,\n      lifecycleHooks: isPresent(lifecycleHooks) ? lifecycleHooks : [],\n      providers: providers,\n      viewProviders: viewProviders,\n      queries: queries,\n      viewQueries: viewQueries,\n      template: template\n    });\n  }\n  type: CompileTypeMetadata;\n  isComponent: boolean;\n  dynamicLoadable: boolean;\n  selector: string;\n  exportAs: string;\n  changeDetection: ChangeDetectionStrategy;\n  inputs: {[key: string]: string};\n  outputs: {[key: string]: string};\n  hostListeners: {[key: string]: string};\n  hostProperties: {[key: string]: string};\n  hostAttributes: {[key: string]: string};\n  lifecycleHooks: LifecycleHooks[];\n  providers: Array<CompileProviderMetadata | CompileTypeMetadata | any[]>;\n  viewProviders: Array<CompileProviderMetadata | CompileTypeMetadata | any[]>;\n  queries: CompileQueryMetadata[];\n  viewQueries: CompileQueryMetadata[];\n  template: CompileTemplateMetadata;\n  constructor({type, isComponent, dynamicLoadable, selector, exportAs, changeDetection, inputs,\n               outputs, hostListeners, hostProperties, hostAttributes, lifecycleHooks, providers,\n               viewProviders, queries, viewQueries, template}: {\n    type?: CompileTypeMetadata,\n    isComponent?: boolean,\n    dynamicLoadable?: boolean,\n    selector?: string,\n    exportAs?: string,\n    changeDetection?: ChangeDetectionStrategy,\n    inputs?: {[key: string]: string},\n    outputs?: {[key: string]: string},\n    hostListeners?: {[key: string]: string},\n    hostProperties?: {[key: string]: string},\n    hostAttributes?: {[key: string]: string},\n    lifecycleHooks?: LifecycleHooks[],\n    providers?: Array<CompileProviderMetadata | CompileTypeMetadata | any[]>,\n    viewProviders?: Array<CompileProviderMetadata | CompileTypeMetadata | any[]>,\n    queries?: CompileQueryMetadata[],\n    viewQueries?: CompileQueryMetadata[],\n    template?: CompileTemplateMetadata\n  } = {}) {\n    this.type = type;\n    this.isComponent = isComponent;\n    this.dynamicLoadable = dynamicLoadable;\n    this.selector = selector;\n    this.exportAs = exportAs;\n    this.changeDetection = changeDetection;\n    this.inputs = inputs;\n    this.outputs = outputs;\n    this.hostListeners = hostListeners;\n    this.hostProperties = hostProperties;\n    this.hostAttributes = hostAttributes;\n    this.lifecycleHooks = lifecycleHooks;\n    this.providers = normalizeBlank(providers);\n    this.viewProviders = normalizeBlank(viewProviders);\n    this.queries = queries;\n    this.viewQueries = viewQueries;\n    this.template = template;\n  }\n\n  get identifier(): CompileIdentifierMetadata { return this.type; }\n\n  static fromJson(data: {[key: string]: any}): CompileDirectiveMetadata {\n    return new CompileDirectiveMetadata({\n      isComponent: data['isComponent'],\n      dynamicLoadable: data['dynamicLoadable'],\n      selector: data['selector'],\n      exportAs: data['exportAs'],\n      type: isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],\n      changeDetection: isPresent(data['changeDetection']) ?\n                           CHANGE_DETECTION_STRATEGY_VALUES[data['changeDetection']] :\n                           data['changeDetection'],\n      inputs: data['inputs'],\n      outputs: data['outputs'],\n      hostListeners: data['hostListeners'],\n      hostProperties: data['hostProperties'],\n      hostAttributes: data['hostAttributes'],\n      lifecycleHooks:\n          (<any[]>data['lifecycleHooks']).map(hookValue => LIFECYCLE_HOOKS_VALUES[hookValue]),\n      template: isPresent(data['template']) ? CompileTemplateMetadata.fromJson(data['template']) :\n                                              data['template'],\n      providers: arrayFromJson(data['providers'], CompileProviderMetadata.fromJson)\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      'class': 'Directive',\n      'isComponent': this.isComponent,\n      'dynamicLoadable': this.dynamicLoadable,\n      'selector': this.selector,\n      'exportAs': this.exportAs,\n      'type': isPresent(this.type) ? this.type.toJson() : this.type,\n      'changeDetection': isPresent(this.changeDetection) ? serializeEnum(this.changeDetection) :\n                                                           this.changeDetection,\n      'inputs': this.inputs,\n      'outputs': this.outputs,\n      'hostListeners': this.hostListeners,\n      'hostProperties': this.hostProperties,\n      'hostAttributes': this.hostAttributes,\n      'lifecycleHooks': this.lifecycleHooks.map(hook => serializeEnum(hook)),\n      'template': isPresent(this.template) ? this.template.toJson() : this.template,\n      'providers': arrayToJson(this.providers)\n    };\n  }\n}\n\n/**\n * Construct {@link CompileDirectiveMetadata} from {@link ComponentTypeMetadata} and a selector.\n */\nexport function createHostComponentMeta(componentType: CompileTypeMetadata,\n                                        componentSelector: string): CompileDirectiveMetadata {\n  var template = CssSelector.parse(componentSelector)[0].getMatchingElementTemplate();\n  return CompileDirectiveMetadata.create({\n    type: new CompileTypeMetadata({\n      runtime: Object,\n      name: `Host${componentType.name}`,\n      moduleUrl: componentType.moduleUrl,\n      isHost: true\n    }),\n    template: new CompileTemplateMetadata(\n        {template: template, templateUrl: '', styles: [], styleUrls: [], ngContentSelectors: []}),\n    changeDetection: ChangeDetectionStrategy.Default,\n    inputs: [],\n    outputs: [],\n    host: {},\n    lifecycleHooks: [],\n    isComponent: true,\n    dynamicLoadable: false,\n    selector: '*',\n    providers: [],\n    viewProviders: [],\n    queries: [],\n    viewQueries: []\n  });\n}\n\n\nexport class CompilePipeMetadata implements CompileMetadataWithType {\n  type: CompileTypeMetadata;\n  name: string;\n  pure: boolean;\n  constructor({type, name,\n               pure}: {type?: CompileTypeMetadata, name?: string, pure?: boolean} = {}) {\n    this.type = type;\n    this.name = name;\n    this.pure = normalizeBool(pure);\n  }\n  get identifier(): CompileIdentifierMetadata { return this.type; }\n\n  static fromJson(data: {[key: string]: any}): CompilePipeMetadata {\n    return new CompilePipeMetadata({\n      type: isPresent(data['type']) ? CompileTypeMetadata.fromJson(data['type']) : data['type'],\n      name: data['name'],\n      pure: data['pure']\n    });\n  }\n\n  toJson(): {[key: string]: any} {\n    return {\n      'class': 'Pipe',\n      'type': isPresent(this.type) ? this.type.toJson() : null,\n      'name': this.name,\n      'pure': this.pure\n    };\n  }\n}\n\nvar _COMPILE_METADATA_FROM_JSON = {\n  'Directive': CompileDirectiveMetadata.fromJson,\n  'Pipe': CompilePipeMetadata.fromJson,\n  'Type': CompileTypeMetadata.fromJson,\n  'Identifier': CompileIdentifierMetadata.fromJson\n};\n\nfunction arrayFromJson(obj: any[], fn: (a: {[key: string]: any}) => any): any {\n  return isBlank(obj) ? null : obj.map(o => objFromJson(o, fn));\n}\n\nfunction arrayToJson(obj: any[]): string | {[key: string]: any} {\n  return isBlank(obj) ? null : obj.map(objToJson);\n}\n\nfunction objFromJson(obj: any, fn: (a: {[key: string]: any}) => any): any {\n  return (isString(obj) || isBlank(obj)) ? obj : fn(obj);\n}\n\nfunction objToJson(obj: any): string | {[key: string]: any} {\n  return (isString(obj) || isBlank(obj)) ? obj : obj.toJson();\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/directive_metadata.ts\n **/","// TODO: vsavkin rename it into TemplateLoader\n/**\n * An interface for retrieving documents by URL that the compiler uses\n * to load templates.\n */\nexport class XHR {\n  get(url: string): Promise<string> { return null; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/xhr.ts\n **/","import {ListWrapper} from \"angular2/src/facade/collection\";\n\nexport class AST {\n  visit(visitor: AstVisitor): any { return null; }\n  toString(): string { return \"AST\"; }\n}\n\n/**\n * Represents a quoted expression of the form:\n *\n * quote = prefix `:` uninterpretedExpression\n * prefix = identifier\n * uninterpretedExpression = arbitrary string\n *\n * A quoted expression is meant to be pre-processed by an AST transformer that\n * converts it into another AST that no longer contains quoted expressions.\n * It is meant to allow third-party developers to extend Angular template\n * expression language. The `uninterpretedExpression` part of the quote is\n * therefore not interpreted by the Angular's own expression parser.\n */\nexport class Quote extends AST {\n  constructor(public prefix: string, public uninterpretedExpression: string, public location: any) {\n    super();\n  }\n  visit(visitor: AstVisitor): any { return visitor.visitQuote(this); }\n  toString(): string { return \"Quote\"; }\n}\n\nexport class EmptyExpr extends AST {\n  visit(visitor: AstVisitor) {\n    // do nothing\n  }\n}\n\nexport class ImplicitReceiver extends AST {\n  visit(visitor: AstVisitor): any { return visitor.visitImplicitReceiver(this); }\n}\n\n/**\n * Multiple expressions separated by a semicolon.\n */\nexport class Chain extends AST {\n  constructor(public expressions: any[]) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitChain(this); }\n}\n\nexport class Conditional extends AST {\n  constructor(public condition: AST, public trueExp: AST, public falseExp: AST) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitConditional(this); }\n}\n\nexport class PropertyRead extends AST {\n  constructor(public receiver: AST, public name: string, public getter: Function) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitPropertyRead(this); }\n}\n\nexport class PropertyWrite extends AST {\n  constructor(public receiver: AST, public name: string, public setter: Function,\n              public value: AST) {\n    super();\n  }\n  visit(visitor: AstVisitor): any { return visitor.visitPropertyWrite(this); }\n}\n\nexport class SafePropertyRead extends AST {\n  constructor(public receiver: AST, public name: string, public getter: Function) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitSafePropertyRead(this); }\n}\n\nexport class KeyedRead extends AST {\n  constructor(public obj: AST, public key: AST) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitKeyedRead(this); }\n}\n\nexport class KeyedWrite extends AST {\n  constructor(public obj: AST, public key: AST, public value: AST) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitKeyedWrite(this); }\n}\n\nexport class BindingPipe extends AST {\n  constructor(public exp: AST, public name: string, public args: any[]) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitPipe(this); }\n}\n\nexport class LiteralPrimitive extends AST {\n  constructor(public value) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitLiteralPrimitive(this); }\n}\n\nexport class LiteralArray extends AST {\n  constructor(public expressions: any[]) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitLiteralArray(this); }\n}\n\nexport class LiteralMap extends AST {\n  constructor(public keys: any[], public values: any[]) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitLiteralMap(this); }\n}\n\nexport class Interpolation extends AST {\n  constructor(public strings: any[], public expressions: any[]) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitInterpolation(this); }\n}\n\nexport class Binary extends AST {\n  constructor(public operation: string, public left: AST, public right: AST) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitBinary(this); }\n}\n\nexport class PrefixNot extends AST {\n  constructor(public expression: AST) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitPrefixNot(this); }\n}\n\nexport class MethodCall extends AST {\n  constructor(public receiver: AST, public name: string, public fn: Function, public args: any[]) {\n    super();\n  }\n  visit(visitor: AstVisitor): any { return visitor.visitMethodCall(this); }\n}\n\nexport class SafeMethodCall extends AST {\n  constructor(public receiver: AST, public name: string, public fn: Function, public args: any[]) {\n    super();\n  }\n  visit(visitor: AstVisitor): any { return visitor.visitSafeMethodCall(this); }\n}\n\nexport class FunctionCall extends AST {\n  constructor(public target: AST, public args: any[]) { super(); }\n  visit(visitor: AstVisitor): any { return visitor.visitFunctionCall(this); }\n}\n\nexport class ASTWithSource extends AST {\n  constructor(public ast: AST, public source: string, public location: string) { super(); }\n  visit(visitor: AstVisitor): any { return this.ast.visit(visitor); }\n  toString(): string { return `${this.source} in ${this.location}`; }\n}\n\nexport class TemplateBinding {\n  constructor(public key: string, public keyIsVar: boolean, public name: string,\n              public expression: ASTWithSource) {}\n}\n\nexport interface AstVisitor {\n  visitBinary(ast: Binary): any;\n  visitChain(ast: Chain): any;\n  visitConditional(ast: Conditional): any;\n  visitFunctionCall(ast: FunctionCall): any;\n  visitImplicitReceiver(ast: ImplicitReceiver): any;\n  visitInterpolation(ast: Interpolation): any;\n  visitKeyedRead(ast: KeyedRead): any;\n  visitKeyedWrite(ast: KeyedWrite): any;\n  visitLiteralArray(ast: LiteralArray): any;\n  visitLiteralMap(ast: LiteralMap): any;\n  visitLiteralPrimitive(ast: LiteralPrimitive): any;\n  visitMethodCall(ast: MethodCall): any;\n  visitPipe(ast: BindingPipe): any;\n  visitPrefixNot(ast: PrefixNot): any;\n  visitPropertyRead(ast: PropertyRead): any;\n  visitPropertyWrite(ast: PropertyWrite): any;\n  visitQuote(ast: Quote): any;\n  visitSafeMethodCall(ast: SafeMethodCall): any;\n  visitSafePropertyRead(ast: SafePropertyRead): any;\n}\n\nexport class RecursiveAstVisitor implements AstVisitor {\n  visitBinary(ast: Binary): any {\n    ast.left.visit(this);\n    ast.right.visit(this);\n    return null;\n  }\n  visitChain(ast: Chain): any { return this.visitAll(ast.expressions); }\n  visitConditional(ast: Conditional): any {\n    ast.condition.visit(this);\n    ast.trueExp.visit(this);\n    ast.falseExp.visit(this);\n    return null;\n  }\n  visitPipe(ast: BindingPipe): any {\n    ast.exp.visit(this);\n    this.visitAll(ast.args);\n    return null;\n  }\n  visitFunctionCall(ast: FunctionCall): any {\n    ast.target.visit(this);\n    this.visitAll(ast.args);\n    return null;\n  }\n  visitImplicitReceiver(ast: ImplicitReceiver): any { return null; }\n  visitInterpolation(ast: Interpolation): any { return this.visitAll(ast.expressions); }\n  visitKeyedRead(ast: KeyedRead): any {\n    ast.obj.visit(this);\n    ast.key.visit(this);\n    return null;\n  }\n  visitKeyedWrite(ast: KeyedWrite): any {\n    ast.obj.visit(this);\n    ast.key.visit(this);\n    ast.value.visit(this);\n    return null;\n  }\n  visitLiteralArray(ast: LiteralArray): any { return this.visitAll(ast.expressions); }\n  visitLiteralMap(ast: LiteralMap): any { return this.visitAll(ast.values); }\n  visitLiteralPrimitive(ast: LiteralPrimitive): any { return null; }\n  visitMethodCall(ast: MethodCall): any {\n    ast.receiver.visit(this);\n    return this.visitAll(ast.args);\n  }\n  visitPrefixNot(ast: PrefixNot): any {\n    ast.expression.visit(this);\n    return null;\n  }\n  visitPropertyRead(ast: PropertyRead): any {\n    ast.receiver.visit(this);\n    return null;\n  }\n  visitPropertyWrite(ast: PropertyWrite): any {\n    ast.receiver.visit(this);\n    ast.value.visit(this);\n    return null;\n  }\n  visitSafePropertyRead(ast: SafePropertyRead): any {\n    ast.receiver.visit(this);\n    return null;\n  }\n  visitSafeMethodCall(ast: SafeMethodCall): any {\n    ast.receiver.visit(this);\n    return this.visitAll(ast.args);\n  }\n  visitAll(asts: AST[]): any {\n    asts.forEach(ast => ast.visit(this));\n    return null;\n  }\n  visitQuote(ast: Quote): any { return null; }\n}\n\nexport class AstTransformer implements AstVisitor {\n  visitImplicitReceiver(ast: ImplicitReceiver): AST { return ast; }\n\n  visitInterpolation(ast: Interpolation): AST {\n    return new Interpolation(ast.strings, this.visitAll(ast.expressions));\n  }\n\n  visitLiteralPrimitive(ast: LiteralPrimitive): AST { return new LiteralPrimitive(ast.value); }\n\n  visitPropertyRead(ast: PropertyRead): AST {\n    return new PropertyRead(ast.receiver.visit(this), ast.name, ast.getter);\n  }\n\n  visitPropertyWrite(ast: PropertyWrite): AST {\n    return new PropertyWrite(ast.receiver.visit(this), ast.name, ast.setter, ast.value);\n  }\n\n  visitSafePropertyRead(ast: SafePropertyRead): AST {\n    return new SafePropertyRead(ast.receiver.visit(this), ast.name, ast.getter);\n  }\n\n  visitMethodCall(ast: MethodCall): AST {\n    return new MethodCall(ast.receiver.visit(this), ast.name, ast.fn, this.visitAll(ast.args));\n  }\n\n  visitSafeMethodCall(ast: SafeMethodCall): AST {\n    return new SafeMethodCall(ast.receiver.visit(this), ast.name, ast.fn, this.visitAll(ast.args));\n  }\n\n  visitFunctionCall(ast: FunctionCall): AST {\n    return new FunctionCall(ast.target.visit(this), this.visitAll(ast.args));\n  }\n\n  visitLiteralArray(ast: LiteralArray): AST {\n    return new LiteralArray(this.visitAll(ast.expressions));\n  }\n\n  visitLiteralMap(ast: LiteralMap): AST {\n    return new LiteralMap(ast.keys, this.visitAll(ast.values));\n  }\n\n  visitBinary(ast: Binary): AST {\n    return new Binary(ast.operation, ast.left.visit(this), ast.right.visit(this));\n  }\n\n  visitPrefixNot(ast: PrefixNot): AST { return new PrefixNot(ast.expression.visit(this)); }\n\n  visitConditional(ast: Conditional): AST {\n    return new Conditional(ast.condition.visit(this), ast.trueExp.visit(this),\n                           ast.falseExp.visit(this));\n  }\n\n  visitPipe(ast: BindingPipe): AST {\n    return new BindingPipe(ast.exp.visit(this), ast.name, this.visitAll(ast.args));\n  }\n\n  visitKeyedRead(ast: KeyedRead): AST {\n    return new KeyedRead(ast.obj.visit(this), ast.key.visit(this));\n  }\n\n  visitKeyedWrite(ast: KeyedWrite): AST {\n    return new KeyedWrite(ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));\n  }\n\n  visitAll(asts: any[]): any[] {\n    var res = ListWrapper.createFixedSize(asts.length);\n    for (var i = 0; i < asts.length; ++i) {\n      res[i] = asts[i].visit(this);\n    }\n    return res;\n  }\n\n  visitChain(ast: Chain): AST { return new Chain(this.visitAll(ast.expressions)); }\n\n  visitQuote(ast: Quote): AST {\n    return new Quote(ast.prefix, ast.uninterpretedExpression, ast.location);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/parser/ast.ts\n **/","import {resolveForwardRef, Injectable} from 'angular2/src/core/di';\nimport {Type, isPresent, isBlank, stringify} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\n\nimport {\n  DirectiveMetadata,\n  ComponentMetadata,\n  InputMetadata,\n  OutputMetadata,\n  HostBindingMetadata,\n  HostListenerMetadata,\n  ContentChildrenMetadata,\n  ViewChildrenMetadata,\n  ContentChildMetadata,\n  ViewChildMetadata\n} from 'angular2/src/core/metadata';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\n\nfunction _isDirectiveMetadata(type: any): boolean {\n  return type instanceof DirectiveMetadata;\n}\n\n/*\n * Resolve a `Type` for {@link DirectiveMetadata}.\n *\n * This interface can be overridden by the application developer to create custom behavior.\n *\n * See {@link Compiler}\n */\n@Injectable()\nexport class DirectiveResolver {\n  /**\n   * Return {@link DirectiveMetadata} for a given `Type`.\n   */\n  resolve(type: Type): DirectiveMetadata {\n    var typeMetadata = reflector.annotations(resolveForwardRef(type));\n    if (isPresent(typeMetadata)) {\n      var metadata = typeMetadata.find(_isDirectiveMetadata);\n      if (isPresent(metadata)) {\n        var propertyMetadata = reflector.propMetadata(type);\n        return this._mergeWithPropertyMetadata(metadata, propertyMetadata, type);\n      }\n    }\n\n    throw new BaseException(`No Directive annotation found on ${stringify(type)}`);\n  }\n\n  private _mergeWithPropertyMetadata(dm: DirectiveMetadata,\n                                     propertyMetadata: {[key: string]: any[]},\n                                     directiveType: Type): DirectiveMetadata {\n    var inputs = [];\n    var outputs = [];\n    var host: {[key: string]: string} = {};\n    var queries: {[key: string]: any} = {};\n\n    StringMapWrapper.forEach(propertyMetadata, (metadata: any[], propName: string) => {\n      metadata.forEach(a => {\n        if (a instanceof InputMetadata) {\n          if (isPresent(a.bindingPropertyName)) {\n            inputs.push(`${propName}: ${a.bindingPropertyName}`);\n          } else {\n            inputs.push(propName);\n          }\n        }\n\n        if (a instanceof OutputMetadata) {\n          if (isPresent(a.bindingPropertyName)) {\n            outputs.push(`${propName}: ${a.bindingPropertyName}`);\n          } else {\n            outputs.push(propName);\n          }\n        }\n\n        if (a instanceof HostBindingMetadata) {\n          if (isPresent(a.hostPropertyName)) {\n            host[`[${a.hostPropertyName}]`] = propName;\n          } else {\n            host[`[${propName}]`] = propName;\n          }\n        }\n\n        if (a instanceof HostListenerMetadata) {\n          var args = isPresent(a.args) ? (<any[]>a.args).join(', ') : '';\n          host[`(${a.eventName})`] = `${propName}(${args})`;\n        }\n\n        if (a instanceof ContentChildrenMetadata) {\n          queries[propName] = a;\n        }\n\n        if (a instanceof ViewChildrenMetadata) {\n          queries[propName] = a;\n        }\n\n        if (a instanceof ContentChildMetadata) {\n          queries[propName] = a;\n        }\n\n        if (a instanceof ViewChildMetadata) {\n          queries[propName] = a;\n        }\n      });\n    });\n    return this._merge(dm, inputs, outputs, host, queries, directiveType);\n  }\n\n  private _merge(dm: DirectiveMetadata, inputs: string[], outputs: string[],\n                 host: {[key: string]: string}, queries: {[key: string]: any},\n                 directiveType: Type): DirectiveMetadata {\n    var mergedInputs = isPresent(dm.inputs) ? ListWrapper.concat(dm.inputs, inputs) : inputs;\n\n    var mergedOutputs;\n    if (isPresent(dm.outputs)) {\n      dm.outputs.forEach((propName: string) => {\n        if (ListWrapper.contains(outputs, propName)) {\n          throw new BaseException(\n              `Output event '${propName}' defined multiple times in '${stringify(directiveType)}'`);\n        }\n      });\n      mergedOutputs = ListWrapper.concat(dm.outputs, outputs);\n    } else {\n      mergedOutputs = outputs;\n    }\n\n    var mergedHost = isPresent(dm.host) ? StringMapWrapper.merge(dm.host, host) : host;\n    var mergedQueries =\n        isPresent(dm.queries) ? StringMapWrapper.merge(dm.queries, queries) : queries;\n\n    if (dm instanceof ComponentMetadata) {\n      return new ComponentMetadata({\n        selector: dm.selector,\n        inputs: mergedInputs,\n        outputs: mergedOutputs,\n        host: mergedHost,\n        exportAs: dm.exportAs,\n        moduleId: dm.moduleId,\n        queries: mergedQueries,\n        changeDetection: dm.changeDetection,\n        providers: dm.providers,\n        viewProviders: dm.viewProviders\n      });\n\n    } else {\n      return new DirectiveMetadata({\n        selector: dm.selector,\n        inputs: mergedInputs,\n        outputs: mergedOutputs,\n        host: mergedHost,\n        exportAs: dm.exportAs,\n        queries: mergedQueries,\n        providers: dm.providers\n      });\n    }\n  }\n}\n\nexport var CODEGEN_DIRECTIVE_RESOLVER = new DirectiveResolver();\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/directive_resolver.ts\n **/","import {\n  isPresent,\n  isBlank,\n  Type,\n  stringify,\n  CONST_EXPR,\n  StringWrapper\n} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {\n  Injector,\n  Key,\n  Dependency,\n  provide,\n  Provider,\n  ResolvedProvider,\n  NoProviderError,\n  AbstractProviderError,\n  CyclicDependencyError,\n  resolveForwardRef,\n  Injectable\n} from 'angular2/src/core/di';\nimport {mergeResolvedProviders} from 'angular2/src/core/di/provider';\nimport {\n  UNDEFINED,\n  ProtoInjector,\n  Visibility,\n  InjectorInlineStrategy,\n  InjectorDynamicStrategy,\n  ProviderWithVisibility,\n  DependencyProvider\n} from 'angular2/src/core/di/injector';\nimport {resolveProvider, ResolvedFactory, ResolvedProvider_} from 'angular2/src/core/di/provider';\n\nimport {AttributeMetadata, QueryMetadata} from '../metadata/di';\n\nimport {AppView} from './view';\nimport {ViewType} from './view_type';\nimport {ElementRef_} from './element_ref';\n\nimport {ViewContainerRef} from './view_container_ref';\nimport {ElementRef} from './element_ref';\nimport {Renderer} from 'angular2/src/core/render/api';\nimport {TemplateRef, TemplateRef_} from './template_ref';\nimport {DirectiveMetadata, ComponentMetadata} from '../metadata/directives';\nimport {\n  ChangeDetector,\n  ChangeDetectorRef\n} from 'angular2/src/core/change_detection/change_detection';\nimport {QueryList} from './query_list';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\nimport {SetterFn} from 'angular2/src/core/reflection/types';\nimport {AfterViewChecked} from 'angular2/src/core/linker/interfaces';\nimport {PipeProvider} from 'angular2/src/core/pipes/pipe_provider';\n\nimport {ViewContainerRef_} from \"./view_container_ref\";\nimport {ResolvedMetadataCache} from './resolved_metadata_cache';\n\nvar _staticKeys;\n\nexport class StaticKeys {\n  templateRefId: number;\n  viewContainerId: number;\n  changeDetectorRefId: number;\n  elementRefId: number;\n  rendererId: number;\n\n  constructor() {\n    this.templateRefId = Key.get(TemplateRef).id;\n    this.viewContainerId = Key.get(ViewContainerRef).id;\n    this.changeDetectorRefId = Key.get(ChangeDetectorRef).id;\n    this.elementRefId = Key.get(ElementRef).id;\n    this.rendererId = Key.get(Renderer).id;\n  }\n\n  static instance(): StaticKeys {\n    if (isBlank(_staticKeys)) _staticKeys = new StaticKeys();\n    return _staticKeys;\n  }\n}\n\nexport class DirectiveDependency extends Dependency {\n  constructor(key: Key, optional: boolean, lowerBoundVisibility: Object,\n              upperBoundVisibility: Object, properties: any[], public attributeName: string,\n              public queryDecorator: QueryMetadata) {\n    super(key, optional, lowerBoundVisibility, upperBoundVisibility, properties);\n    this._verify();\n  }\n\n  /** @internal */\n  _verify(): void {\n    var count = 0;\n    if (isPresent(this.queryDecorator)) count++;\n    if (isPresent(this.attributeName)) count++;\n    if (count > 1)\n      throw new BaseException(\n          'A directive injectable can contain only one of the following @Attribute or @Query.');\n  }\n\n  static createFrom(d: Dependency): DirectiveDependency {\n    return new DirectiveDependency(\n        d.key, d.optional, d.lowerBoundVisibility, d.upperBoundVisibility, d.properties,\n        DirectiveDependency._attributeName(d.properties), DirectiveDependency._query(d.properties));\n  }\n\n  /** @internal */\n  static _attributeName(properties: any[]): string {\n    var p = <AttributeMetadata>properties.find(p => p instanceof AttributeMetadata);\n    return isPresent(p) ? p.attributeName : null;\n  }\n\n  /** @internal */\n  static _query(properties: any[]): QueryMetadata {\n    return <QueryMetadata>properties.find(p => p instanceof QueryMetadata);\n  }\n}\n\nexport class DirectiveProvider extends ResolvedProvider_ {\n  constructor(key: Key, factory: Function, deps: Dependency[], public isComponent: boolean,\n              public providers: ResolvedProvider[], public viewProviders: ResolvedProvider[],\n              public queries: QueryMetadataWithSetter[]) {\n    super(key, [new ResolvedFactory(factory, deps)], false);\n  }\n\n  get displayName(): string { return this.key.displayName; }\n\n  static createFromType(type: Type, meta: DirectiveMetadata): DirectiveProvider {\n    var provider = new Provider(type, {useClass: type});\n    if (isBlank(meta)) {\n      meta = new DirectiveMetadata();\n    }\n    var rb = resolveProvider(provider);\n    var rf = rb.resolvedFactories[0];\n    var deps: DirectiveDependency[] = rf.dependencies.map(DirectiveDependency.createFrom);\n    var isComponent = meta instanceof ComponentMetadata;\n    var resolvedProviders = isPresent(meta.providers) ? Injector.resolve(meta.providers) : null;\n    var resolvedViewProviders = meta instanceof ComponentMetadata && isPresent(meta.viewProviders) ?\n                                    Injector.resolve(meta.viewProviders) :\n                                    null;\n    var queries = [];\n    if (isPresent(meta.queries)) {\n      StringMapWrapper.forEach(meta.queries, (meta, fieldName) => {\n        var setter = reflector.setter(fieldName);\n        queries.push(new QueryMetadataWithSetter(setter, meta));\n      });\n    }\n    // queries passed into the constructor.\n    // TODO: remove this after constructor queries are no longer supported\n    deps.forEach(d => {\n      if (isPresent(d.queryDecorator)) {\n        queries.push(new QueryMetadataWithSetter(null, d.queryDecorator));\n      }\n    });\n    return new DirectiveProvider(rb.key, rf.factory, deps, isComponent, resolvedProviders,\n                                 resolvedViewProviders, queries);\n  }\n}\n\nexport class QueryMetadataWithSetter {\n  constructor(public setter: SetterFn, public metadata: QueryMetadata) {}\n}\n\n\nfunction setProvidersVisibility(providers: ResolvedProvider[], visibility: Visibility,\n                                result: Map<number, Visibility>) {\n  for (var i = 0; i < providers.length; i++) {\n    result.set(providers[i].key.id, visibility);\n  }\n}\n\nexport class AppProtoElement {\n  protoInjector: ProtoInjector;\n\n  static create(metadataCache: ResolvedMetadataCache, index: number,\n                attributes: {[key: string]: string}, directiveTypes: Type[],\n                directiveVariableBindings: {[key: string]: number}): AppProtoElement {\n    var componentDirProvider = null;\n    var mergedProvidersMap: Map<number, ResolvedProvider> = new Map<number, ResolvedProvider>();\n    var providerVisibilityMap: Map<number, Visibility> = new Map<number, Visibility>();\n    var providers = ListWrapper.createGrowableSize(directiveTypes.length);\n\n    var protoQueryRefs = [];\n    for (var i = 0; i < directiveTypes.length; i++) {\n      var dirProvider = metadataCache.getResolvedDirectiveMetadata(directiveTypes[i]);\n      providers[i] = new ProviderWithVisibility(\n          dirProvider, dirProvider.isComponent ? Visibility.PublicAndPrivate : Visibility.Public);\n\n      if (dirProvider.isComponent) {\n        componentDirProvider = dirProvider;\n      } else {\n        if (isPresent(dirProvider.providers)) {\n          mergeResolvedProviders(dirProvider.providers, mergedProvidersMap);\n          setProvidersVisibility(dirProvider.providers, Visibility.Public, providerVisibilityMap);\n        }\n      }\n      if (isPresent(dirProvider.viewProviders)) {\n        mergeResolvedProviders(dirProvider.viewProviders, mergedProvidersMap);\n        setProvidersVisibility(dirProvider.viewProviders, Visibility.Private,\n                               providerVisibilityMap);\n      }\n      for (var queryIdx = 0; queryIdx < dirProvider.queries.length; queryIdx++) {\n        var q = dirProvider.queries[queryIdx];\n        protoQueryRefs.push(new ProtoQueryRef(i, q.setter, q.metadata));\n      }\n    }\n    if (isPresent(componentDirProvider) && isPresent(componentDirProvider.providers)) {\n      // directive providers need to be prioritized over component providers\n      mergeResolvedProviders(componentDirProvider.providers, mergedProvidersMap);\n      setProvidersVisibility(componentDirProvider.providers, Visibility.Public,\n                             providerVisibilityMap);\n    }\n    mergedProvidersMap.forEach((provider, _) => {\n      providers.push(\n          new ProviderWithVisibility(provider, providerVisibilityMap.get(provider.key.id)));\n    });\n\n    return new AppProtoElement(isPresent(componentDirProvider), index, attributes, providers,\n                               protoQueryRefs, directiveVariableBindings);\n  }\n\n  constructor(public firstProviderIsComponent: boolean, public index: number,\n              public attributes: {[key: string]: string}, pwvs: ProviderWithVisibility[],\n              public protoQueryRefs: ProtoQueryRef[],\n              public directiveVariableBindings: {[key: string]: number}) {\n    var length = pwvs.length;\n    if (length > 0) {\n      this.protoInjector = new ProtoInjector(pwvs);\n    } else {\n      this.protoInjector = null;\n      this.protoQueryRefs = [];\n    }\n  }\n\n  getProviderAtIndex(index: number): any { return this.protoInjector.getProviderAtIndex(index); }\n}\n\nclass _Context {\n  constructor(public element: any, public componentElement: any, public injector: any) {}\n}\n\nexport class InjectorWithHostBoundary {\n  constructor(public injector: Injector, public hostInjectorBoundary: boolean) {}\n}\n\nexport class AppElement implements DependencyProvider, ElementRef, AfterViewChecked {\n  static getViewParentInjector(parentViewType: ViewType, containerAppElement: AppElement,\n                               imperativelyCreatedProviders: ResolvedProvider[],\n                               rootInjector: Injector): InjectorWithHostBoundary {\n    var parentInjector;\n    var hostInjectorBoundary;\n    switch (parentViewType) {\n      case ViewType.COMPONENT:\n        parentInjector = containerAppElement._injector;\n        hostInjectorBoundary = true;\n        break;\n      case ViewType.EMBEDDED:\n        parentInjector = isPresent(containerAppElement.proto.protoInjector) ?\n                             containerAppElement._injector.parent :\n                             containerAppElement._injector;\n        hostInjectorBoundary = containerAppElement._injector.hostBoundary;\n        break;\n      case ViewType.HOST:\n        if (isPresent(containerAppElement)) {\n          // host view is attached to a container\n          parentInjector = isPresent(containerAppElement.proto.protoInjector) ?\n                               containerAppElement._injector.parent :\n                               containerAppElement._injector;\n          if (isPresent(imperativelyCreatedProviders)) {\n            var imperativeProvidersWithVisibility = imperativelyCreatedProviders.map(\n                p => new ProviderWithVisibility(p, Visibility.Public));\n            // The imperative injector is similar to having an element between\n            // the dynamic-loaded component and its parent => no boundary between\n            // the component and imperativelyCreatedInjector.\n            parentInjector = new Injector(new ProtoInjector(imperativeProvidersWithVisibility),\n                                          parentInjector, true, null, null);\n            hostInjectorBoundary = false;\n          } else {\n            hostInjectorBoundary = containerAppElement._injector.hostBoundary;\n          }\n        } else {\n          // bootstrap\n          parentInjector = rootInjector;\n          hostInjectorBoundary = true;\n        }\n        break;\n    }\n    return new InjectorWithHostBoundary(parentInjector, hostInjectorBoundary);\n  }\n\n  public nestedViews: AppView[] = null;\n  public componentView: AppView = null;\n\n  private _queryStrategy: _QueryStrategy;\n  private _injector: Injector;\n  private _strategy: _ElementDirectiveStrategy;\n  public ref: ElementRef_;\n\n  constructor(public proto: AppProtoElement, public parentView: AppView, public parent: AppElement,\n              public nativeElement: any, public embeddedViewFactory: Function) {\n    this.ref = new ElementRef_(this);\n    var parentInjector = isPresent(parent) ? parent._injector : parentView.parentInjector;\n    if (isPresent(this.proto.protoInjector)) {\n      var isBoundary;\n      if (isPresent(parent) && isPresent(parent.proto.protoInjector)) {\n        isBoundary = false;\n      } else {\n        isBoundary = parentView.hostInjectorBoundary;\n      }\n      this._queryStrategy = this._buildQueryStrategy();\n      this._injector = new Injector(this.proto.protoInjector, parentInjector, isBoundary, this,\n                                    () => this._debugContext());\n\n      // we couple ourselves to the injector strategy to avoid polymorphic calls\n      var injectorStrategy = <any>this._injector.internalStrategy;\n      this._strategy = injectorStrategy instanceof InjectorInlineStrategy ?\n                           new ElementDirectiveInlineStrategy(injectorStrategy, this) :\n                           new ElementDirectiveDynamicStrategy(injectorStrategy, this);\n      this._strategy.init();\n    } else {\n      this._queryStrategy = null;\n      this._injector = parentInjector;\n      this._strategy = null;\n    }\n  }\n\n  attachComponentView(componentView: AppView) { this.componentView = componentView; }\n\n  private _debugContext(): any {\n    var c = this.parentView.getDebugContext(this, null, null);\n    return isPresent(c) ? new _Context(c.element, c.componentElement, c.injector) : null;\n  }\n\n  hasVariableBinding(name: string): boolean {\n    var vb = this.proto.directiveVariableBindings;\n    return isPresent(vb) && StringMapWrapper.contains(vb, name);\n  }\n\n  getVariableBinding(name: string): any {\n    var index = this.proto.directiveVariableBindings[name];\n    return isPresent(index) ? this.getDirectiveAtIndex(<number>index) : this.getElementRef();\n  }\n\n  get(token: any): any { return this._injector.get(token); }\n\n  hasDirective(type: Type): boolean { return isPresent(this._injector.getOptional(type)); }\n\n  getComponent(): any { return isPresent(this._strategy) ? this._strategy.getComponent() : null; }\n\n  getInjector(): Injector { return this._injector; }\n\n  getElementRef(): ElementRef { return this.ref; }\n\n  getViewContainerRef(): ViewContainerRef { return new ViewContainerRef_(this); }\n\n  getTemplateRef(): TemplateRef {\n    if (isPresent(this.embeddedViewFactory)) {\n      return new TemplateRef_(this.ref);\n    }\n    return null;\n  }\n\n  getDependency(injector: Injector, provider: ResolvedProvider, dep: Dependency): any {\n    if (provider instanceof DirectiveProvider) {\n      var dirDep = <DirectiveDependency>dep;\n\n      if (isPresent(dirDep.attributeName)) return this._buildAttribute(dirDep);\n\n      if (isPresent(dirDep.queryDecorator))\n        return this._queryStrategy.findQuery(dirDep.queryDecorator).list;\n\n      if (dirDep.key.id === StaticKeys.instance().changeDetectorRefId) {\n        // We provide the component's view change detector to components and\n        // the surrounding component's change detector to directives.\n        if (this.proto.firstProviderIsComponent) {\n          // Note: The component view is not yet created when\n          // this method is called!\n          return new _ComponentViewChangeDetectorRef(this);\n        } else {\n          return this.parentView.changeDetector.ref;\n        }\n      }\n\n      if (dirDep.key.id === StaticKeys.instance().elementRefId) {\n        return this.getElementRef();\n      }\n\n      if (dirDep.key.id === StaticKeys.instance().viewContainerId) {\n        return this.getViewContainerRef();\n      }\n\n      if (dirDep.key.id === StaticKeys.instance().templateRefId) {\n        var tr = this.getTemplateRef();\n        if (isBlank(tr) && !dirDep.optional) {\n          throw new NoProviderError(null, dirDep.key);\n        }\n        return tr;\n      }\n\n      if (dirDep.key.id === StaticKeys.instance().rendererId) {\n        return this.parentView.renderer;\n      }\n\n    } else if (provider instanceof PipeProvider) {\n      if (dep.key.id === StaticKeys.instance().changeDetectorRefId) {\n        // We provide the component's view change detector to components and\n        // the surrounding component's change detector to directives.\n        if (this.proto.firstProviderIsComponent) {\n          // Note: The component view is not yet created when\n          // this method is called!\n          return new _ComponentViewChangeDetectorRef(this);\n        } else {\n          return this.parentView.changeDetector;\n        }\n      }\n    }\n\n    return UNDEFINED;\n  }\n\n  private _buildAttribute(dep: DirectiveDependency): string {\n    var attributes = this.proto.attributes;\n    if (isPresent(attributes) && StringMapWrapper.contains(attributes, dep.attributeName)) {\n      return attributes[dep.attributeName];\n    } else {\n      return null;\n    }\n  }\n\n  addDirectivesMatchingQuery(query: QueryMetadata, list: any[]): void {\n    var templateRef = this.getTemplateRef();\n    if (query.selector === TemplateRef && isPresent(templateRef)) {\n      list.push(templateRef);\n    }\n    if (this._strategy != null) {\n      this._strategy.addDirectivesMatchingQuery(query, list);\n    }\n  }\n\n  private _buildQueryStrategy(): _QueryStrategy {\n    if (this.proto.protoQueryRefs.length === 0) {\n      return _emptyQueryStrategy;\n    } else if (this.proto.protoQueryRefs.length <=\n               InlineQueryStrategy.NUMBER_OF_SUPPORTED_QUERIES) {\n      return new InlineQueryStrategy(this);\n    } else {\n      return new DynamicQueryStrategy(this);\n    }\n  }\n\n\n  getDirectiveAtIndex(index: number): any { return this._injector.getAt(index); }\n\n  ngAfterViewChecked(): void {\n    if (isPresent(this._queryStrategy)) this._queryStrategy.updateViewQueries();\n  }\n\n  ngAfterContentChecked(): void {\n    if (isPresent(this._queryStrategy)) this._queryStrategy.updateContentQueries();\n  }\n\n  traverseAndSetQueriesAsDirty(): void {\n    var inj: AppElement = this;\n    while (isPresent(inj)) {\n      inj._setQueriesAsDirty();\n      if (isBlank(inj.parent) && inj.parentView.proto.type === ViewType.EMBEDDED) {\n        inj = inj.parentView.containerAppElement;\n      } else {\n        inj = inj.parent;\n      }\n    }\n  }\n\n  private _setQueriesAsDirty(): void {\n    if (isPresent(this._queryStrategy)) {\n      this._queryStrategy.setContentQueriesAsDirty();\n    }\n    if (this.parentView.proto.type === ViewType.COMPONENT) {\n      this.parentView.containerAppElement._queryStrategy.setViewQueriesAsDirty();\n    }\n  }\n}\n\ninterface _QueryStrategy {\n  setContentQueriesAsDirty(): void;\n  setViewQueriesAsDirty(): void;\n  updateContentQueries(): void;\n  updateViewQueries(): void;\n  findQuery(query: QueryMetadata): QueryRef;\n}\n\nclass _EmptyQueryStrategy implements _QueryStrategy {\n  setContentQueriesAsDirty(): void {}\n  setViewQueriesAsDirty(): void {}\n  updateContentQueries(): void {}\n  updateViewQueries(): void {}\n  findQuery(query: QueryMetadata): QueryRef {\n    throw new BaseException(`Cannot find query for directive ${query}.`);\n  }\n}\n\nvar _emptyQueryStrategy = new _EmptyQueryStrategy();\n\nclass InlineQueryStrategy implements _QueryStrategy {\n  static NUMBER_OF_SUPPORTED_QUERIES = 3;\n\n  query0: QueryRef;\n  query1: QueryRef;\n  query2: QueryRef;\n\n  constructor(ei: AppElement) {\n    var protoRefs = ei.proto.protoQueryRefs;\n    if (protoRefs.length > 0) this.query0 = new QueryRef(protoRefs[0], ei);\n    if (protoRefs.length > 1) this.query1 = new QueryRef(protoRefs[1], ei);\n    if (protoRefs.length > 2) this.query2 = new QueryRef(protoRefs[2], ei);\n  }\n\n  setContentQueriesAsDirty(): void {\n    if (isPresent(this.query0) && !this.query0.isViewQuery) this.query0.dirty = true;\n    if (isPresent(this.query1) && !this.query1.isViewQuery) this.query1.dirty = true;\n    if (isPresent(this.query2) && !this.query2.isViewQuery) this.query2.dirty = true;\n  }\n\n  setViewQueriesAsDirty(): void {\n    if (isPresent(this.query0) && this.query0.isViewQuery) this.query0.dirty = true;\n    if (isPresent(this.query1) && this.query1.isViewQuery) this.query1.dirty = true;\n    if (isPresent(this.query2) && this.query2.isViewQuery) this.query2.dirty = true;\n  }\n\n  updateContentQueries() {\n    if (isPresent(this.query0) && !this.query0.isViewQuery) {\n      this.query0.update();\n    }\n    if (isPresent(this.query1) && !this.query1.isViewQuery) {\n      this.query1.update();\n    }\n    if (isPresent(this.query2) && !this.query2.isViewQuery) {\n      this.query2.update();\n    }\n  }\n\n  updateViewQueries() {\n    if (isPresent(this.query0) && this.query0.isViewQuery) {\n      this.query0.update();\n    }\n    if (isPresent(this.query1) && this.query1.isViewQuery) {\n      this.query1.update();\n    }\n    if (isPresent(this.query2) && this.query2.isViewQuery) {\n      this.query2.update();\n    }\n  }\n\n  findQuery(query: QueryMetadata): QueryRef {\n    if (isPresent(this.query0) && this.query0.protoQueryRef.query === query) {\n      return this.query0;\n    }\n    if (isPresent(this.query1) && this.query1.protoQueryRef.query === query) {\n      return this.query1;\n    }\n    if (isPresent(this.query2) && this.query2.protoQueryRef.query === query) {\n      return this.query2;\n    }\n    throw new BaseException(`Cannot find query for directive ${query}.`);\n  }\n}\n\nclass DynamicQueryStrategy implements _QueryStrategy {\n  queries: QueryRef[];\n\n  constructor(ei: AppElement) {\n    this.queries = ei.proto.protoQueryRefs.map(p => new QueryRef(p, ei));\n  }\n\n  setContentQueriesAsDirty(): void {\n    for (var i = 0; i < this.queries.length; ++i) {\n      var q = this.queries[i];\n      if (!q.isViewQuery) q.dirty = true;\n    }\n  }\n\n  setViewQueriesAsDirty(): void {\n    for (var i = 0; i < this.queries.length; ++i) {\n      var q = this.queries[i];\n      if (q.isViewQuery) q.dirty = true;\n    }\n  }\n\n  updateContentQueries() {\n    for (var i = 0; i < this.queries.length; ++i) {\n      var q = this.queries[i];\n      if (!q.isViewQuery) {\n        q.update();\n      }\n    }\n  }\n\n  updateViewQueries() {\n    for (var i = 0; i < this.queries.length; ++i) {\n      var q = this.queries[i];\n      if (q.isViewQuery) {\n        q.update();\n      }\n    }\n  }\n\n  findQuery(query: QueryMetadata): QueryRef {\n    for (var i = 0; i < this.queries.length; ++i) {\n      var q = this.queries[i];\n      if (q.protoQueryRef.query === query) {\n        return q;\n      }\n    }\n    throw new BaseException(`Cannot find query for directive ${query}.`);\n  }\n}\n\ninterface _ElementDirectiveStrategy {\n  getComponent(): any;\n  isComponentKey(key: Key): boolean;\n  addDirectivesMatchingQuery(q: QueryMetadata, res: any[]): void;\n  init(): void;\n}\n\n/**\n * Strategy used by the `ElementInjector` when the number of providers is 10 or less.\n * In such a case, inlining fields is beneficial for performances.\n */\nclass ElementDirectiveInlineStrategy implements _ElementDirectiveStrategy {\n  constructor(public injectorStrategy: InjectorInlineStrategy, public _ei: AppElement) {}\n\n  init(): void {\n    var i = this.injectorStrategy;\n    var p = i.protoStrategy;\n    i.resetConstructionCounter();\n\n    if (p.provider0 instanceof DirectiveProvider && isPresent(p.keyId0) && i.obj0 === UNDEFINED)\n      i.obj0 = i.instantiateProvider(p.provider0, p.visibility0);\n    if (p.provider1 instanceof DirectiveProvider && isPresent(p.keyId1) && i.obj1 === UNDEFINED)\n      i.obj1 = i.instantiateProvider(p.provider1, p.visibility1);\n    if (p.provider2 instanceof DirectiveProvider && isPresent(p.keyId2) && i.obj2 === UNDEFINED)\n      i.obj2 = i.instantiateProvider(p.provider2, p.visibility2);\n    if (p.provider3 instanceof DirectiveProvider && isPresent(p.keyId3) && i.obj3 === UNDEFINED)\n      i.obj3 = i.instantiateProvider(p.provider3, p.visibility3);\n    if (p.provider4 instanceof DirectiveProvider && isPresent(p.keyId4) && i.obj4 === UNDEFINED)\n      i.obj4 = i.instantiateProvider(p.provider4, p.visibility4);\n    if (p.provider5 instanceof DirectiveProvider && isPresent(p.keyId5) && i.obj5 === UNDEFINED)\n      i.obj5 = i.instantiateProvider(p.provider5, p.visibility5);\n    if (p.provider6 instanceof DirectiveProvider && isPresent(p.keyId6) && i.obj6 === UNDEFINED)\n      i.obj6 = i.instantiateProvider(p.provider6, p.visibility6);\n    if (p.provider7 instanceof DirectiveProvider && isPresent(p.keyId7) && i.obj7 === UNDEFINED)\n      i.obj7 = i.instantiateProvider(p.provider7, p.visibility7);\n    if (p.provider8 instanceof DirectiveProvider && isPresent(p.keyId8) && i.obj8 === UNDEFINED)\n      i.obj8 = i.instantiateProvider(p.provider8, p.visibility8);\n    if (p.provider9 instanceof DirectiveProvider && isPresent(p.keyId9) && i.obj9 === UNDEFINED)\n      i.obj9 = i.instantiateProvider(p.provider9, p.visibility9);\n  }\n\n  getComponent(): any { return this.injectorStrategy.obj0; }\n\n  isComponentKey(key: Key): boolean {\n    return this._ei.proto.firstProviderIsComponent && isPresent(key) &&\n           key.id === this.injectorStrategy.protoStrategy.keyId0;\n  }\n\n  addDirectivesMatchingQuery(query: QueryMetadata, list: any[]): void {\n    var i = this.injectorStrategy;\n    var p = i.protoStrategy;\n    if (isPresent(p.provider0) && p.provider0.key.token === query.selector) {\n      if (i.obj0 === UNDEFINED) i.obj0 = i.instantiateProvider(p.provider0, p.visibility0);\n      list.push(i.obj0);\n    }\n    if (isPresent(p.provider1) && p.provider1.key.token === query.selector) {\n      if (i.obj1 === UNDEFINED) i.obj1 = i.instantiateProvider(p.provider1, p.visibility1);\n      list.push(i.obj1);\n    }\n    if (isPresent(p.provider2) && p.provider2.key.token === query.selector) {\n      if (i.obj2 === UNDEFINED) i.obj2 = i.instantiateProvider(p.provider2, p.visibility2);\n      list.push(i.obj2);\n    }\n    if (isPresent(p.provider3) && p.provider3.key.token === query.selector) {\n      if (i.obj3 === UNDEFINED) i.obj3 = i.instantiateProvider(p.provider3, p.visibility3);\n      list.push(i.obj3);\n    }\n    if (isPresent(p.provider4) && p.provider4.key.token === query.selector) {\n      if (i.obj4 === UNDEFINED) i.obj4 = i.instantiateProvider(p.provider4, p.visibility4);\n      list.push(i.obj4);\n    }\n    if (isPresent(p.provider5) && p.provider5.key.token === query.selector) {\n      if (i.obj5 === UNDEFINED) i.obj5 = i.instantiateProvider(p.provider5, p.visibility5);\n      list.push(i.obj5);\n    }\n    if (isPresent(p.provider6) && p.provider6.key.token === query.selector) {\n      if (i.obj6 === UNDEFINED) i.obj6 = i.instantiateProvider(p.provider6, p.visibility6);\n      list.push(i.obj6);\n    }\n    if (isPresent(p.provider7) && p.provider7.key.token === query.selector) {\n      if (i.obj7 === UNDEFINED) i.obj7 = i.instantiateProvider(p.provider7, p.visibility7);\n      list.push(i.obj7);\n    }\n    if (isPresent(p.provider8) && p.provider8.key.token === query.selector) {\n      if (i.obj8 === UNDEFINED) i.obj8 = i.instantiateProvider(p.provider8, p.visibility8);\n      list.push(i.obj8);\n    }\n    if (isPresent(p.provider9) && p.provider9.key.token === query.selector) {\n      if (i.obj9 === UNDEFINED) i.obj9 = i.instantiateProvider(p.provider9, p.visibility9);\n      list.push(i.obj9);\n    }\n  }\n}\n\n/**\n * Strategy used by the `ElementInjector` when the number of bindings is 11 or more.\n * In such a case, there are too many fields to inline (see ElementInjectorInlineStrategy).\n */\nclass ElementDirectiveDynamicStrategy implements _ElementDirectiveStrategy {\n  constructor(public injectorStrategy: InjectorDynamicStrategy, public _ei: AppElement) {}\n\n  init(): void {\n    var inj = this.injectorStrategy;\n    var p = inj.protoStrategy;\n    inj.resetConstructionCounter();\n\n    for (var i = 0; i < p.keyIds.length; i++) {\n      if (p.providers[i] instanceof DirectiveProvider && isPresent(p.keyIds[i]) &&\n          inj.objs[i] === UNDEFINED) {\n        inj.objs[i] = inj.instantiateProvider(p.providers[i], p.visibilities[i]);\n      }\n    }\n  }\n\n  getComponent(): any { return this.injectorStrategy.objs[0]; }\n\n  isComponentKey(key: Key): boolean {\n    var p = this.injectorStrategy.protoStrategy;\n    return this._ei.proto.firstProviderIsComponent && isPresent(key) && key.id === p.keyIds[0];\n  }\n\n  addDirectivesMatchingQuery(query: QueryMetadata, list: any[]): void {\n    var ist = this.injectorStrategy;\n    var p = ist.protoStrategy;\n\n    for (var i = 0; i < p.providers.length; i++) {\n      if (p.providers[i].key.token === query.selector) {\n        if (ist.objs[i] === UNDEFINED) {\n          ist.objs[i] = ist.instantiateProvider(p.providers[i], p.visibilities[i]);\n        }\n        list.push(ist.objs[i]);\n      }\n    }\n  }\n}\n\nexport class ProtoQueryRef {\n  constructor(public dirIndex: number, public setter: SetterFn, public query: QueryMetadata) {}\n\n  get usesPropertySyntax(): boolean { return isPresent(this.setter); }\n}\n\nexport class QueryRef {\n  public list: QueryList<any>;\n  public dirty: boolean;\n\n  constructor(public protoQueryRef: ProtoQueryRef, private originator: AppElement) {\n    this.list = new QueryList<any>();\n    this.dirty = true;\n  }\n\n  get isViewQuery(): boolean { return this.protoQueryRef.query.isViewQuery; }\n\n  update(): void {\n    if (!this.dirty) return;\n    this._update();\n    this.dirty = false;\n\n    // TODO delete the check once only field queries are supported\n    if (this.protoQueryRef.usesPropertySyntax) {\n      var dir = this.originator.getDirectiveAtIndex(this.protoQueryRef.dirIndex);\n      if (this.protoQueryRef.query.first) {\n        this.protoQueryRef.setter(dir, this.list.length > 0 ? this.list.first : null);\n      } else {\n        this.protoQueryRef.setter(dir, this.list);\n      }\n    }\n\n    this.list.notifyOnChanges();\n  }\n\n  private _update(): void {\n    var aggregator = [];\n    if (this.protoQueryRef.query.isViewQuery) {\n      // intentionally skipping originator for view queries.\n      var nestedView = this.originator.componentView;\n      if (isPresent(nestedView)) this._visitView(nestedView, aggregator);\n    } else {\n      this._visit(this.originator, aggregator);\n    }\n    this.list.reset(aggregator);\n  };\n\n  private _visit(inj: AppElement, aggregator: any[]): void {\n    var view = inj.parentView;\n    var startIdx = inj.proto.index;\n    for (var i = startIdx; i < view.appElements.length; i++) {\n      var curInj = view.appElements[i];\n      // The first injector after inj, that is outside the subtree rooted at\n      // inj has to have a null parent or a parent that is an ancestor of inj.\n      if (i > startIdx && (isBlank(curInj.parent) || curInj.parent.proto.index < startIdx)) {\n        break;\n      }\n\n      if (!this.protoQueryRef.query.descendants &&\n          !(curInj.parent == this.originator || curInj == this.originator))\n        continue;\n\n      // We visit the view container(VC) views right after the injector that contains\n      // the VC. Theoretically, that might not be the right order if there are\n      // child injectors of said injector. Not clear whether if such case can\n      // even be constructed with the current apis.\n      this._visitInjector(curInj, aggregator);\n      this._visitViewContainerViews(curInj.nestedViews, aggregator);\n    }\n  }\n\n  private _visitInjector(inj: AppElement, aggregator: any[]) {\n    if (this.protoQueryRef.query.isVarBindingQuery) {\n      this._aggregateVariableBinding(inj, aggregator);\n    } else {\n      this._aggregateDirective(inj, aggregator);\n    }\n  }\n\n  private _visitViewContainerViews(views: AppView[], aggregator: any[]) {\n    if (isPresent(views)) {\n      for (var j = 0; j < views.length; j++) {\n        this._visitView(views[j], aggregator);\n      }\n    }\n  }\n\n  private _visitView(view: AppView, aggregator: any[]) {\n    for (var i = 0; i < view.appElements.length; i++) {\n      var inj = view.appElements[i];\n      this._visitInjector(inj, aggregator);\n      this._visitViewContainerViews(inj.nestedViews, aggregator);\n    }\n  }\n\n  private _aggregateVariableBinding(inj: AppElement, aggregator: any[]): void {\n    var vb = this.protoQueryRef.query.varBindings;\n    for (var i = 0; i < vb.length; ++i) {\n      if (inj.hasVariableBinding(vb[i])) {\n        aggregator.push(inj.getVariableBinding(vb[i]));\n      }\n    }\n  }\n\n  private _aggregateDirective(inj: AppElement, aggregator: any[]): void {\n    inj.addDirectivesMatchingQuery(this.protoQueryRef.query, aggregator);\n  }\n}\n\nclass _ComponentViewChangeDetectorRef extends ChangeDetectorRef {\n  constructor(private _appElement: AppElement) { super(); }\n\n  markForCheck(): void { this._appElement.componentView.changeDetector.ref.markForCheck(); }\n  detach(): void { this._appElement.componentView.changeDetector.ref.detach(); }\n  detectChanges(): void { this._appElement.componentView.changeDetector.ref.detectChanges(); }\n  checkNoChanges(): void { this._appElement.componentView.changeDetector.ref.checkNoChanges(); }\n  reattach(): void { this._appElement.componentView.changeDetector.ref.reattach(); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/element.ts\n **/","import {MapWrapper} from 'angular2/src/facade/collection';\nimport {SimpleChange} from 'angular2/src/core/change_detection/change_detection_util';\n\nexport enum LifecycleHooks {\n  OnInit,\n  OnDestroy,\n  DoCheck,\n  OnChanges,\n  AfterContentInit,\n  AfterContentChecked,\n  AfterViewInit,\n  AfterViewChecked\n}\n\n/**\n * @internal\n */\nexport var LIFECYCLE_HOOKS_VALUES = [\n  LifecycleHooks.OnInit,\n  LifecycleHooks.OnDestroy,\n  LifecycleHooks.DoCheck,\n  LifecycleHooks.OnChanges,\n  LifecycleHooks.AfterContentInit,\n  LifecycleHooks.AfterContentChecked,\n  LifecycleHooks.AfterViewInit,\n  LifecycleHooks.AfterViewChecked\n];\n\n/**\n * Lifecycle hooks are guaranteed to be called in the following order:\n * - `OnChanges` (if any bindings have changed),\n * - `OnInit` (after the first check only),\n * - `DoCheck`,\n * - `AfterContentInit`,\n * - `AfterContentChecked`,\n * - `AfterViewInit`,\n * - `AfterViewChecked`,\n * - `OnDestroy` (at the very end before destruction)\n */\n\n/**\n * Implement this interface to get notified when any data-bound property of your directive changes.\n *\n * `ngOnChanges` is called right after the data-bound properties have been checked and before view\n * and content children are checked if at least one of them has changed.\n *\n * The `changes` parameter contains an entry for each of the changed data-bound property. The key is\n * the property name and the value is an instance of {@link SimpleChange}.\n *\n * ### Example ([live example](http://plnkr.co/edit/AHrB6opLqHDBPkt4KpdT?p=preview)):\n *\n * ```typescript\n * @Component({\n *   selector: 'my-cmp',\n *   template: `<p>myProp = {{myProp}}</p>`\n * })\n * class MyComponent implements OnChanges {\n *   @Input() myProp: any;\n *\n *   ngOnChanges(changes: {[propName: string]: SimpleChange}) {\n *     console.log('ngOnChanges - myProp = ' + changes['myProp'].currentValue);\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <button (click)=\"value = value + 1\">Change MyComponent</button>\n *     <my-cmp [my-prop]=\"value\"></my-cmp>`,\n *   directives: [MyComponent]\n * })\n * export class App {\n *   value = 0;\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n */\nexport interface OnChanges { ngOnChanges(changes: {[key: string]: SimpleChange}); }\n\n/**\n * Implement this interface to execute custom initialization logic after your directive's\n * data-bound properties have been initialized.\n *\n * `ngOnInit` is called right after the directive's data-bound properties have been checked for the\n * first time, and before any of its children have been checked. It is invoked only once when the\n * directive is instantiated.\n *\n * ### Example ([live example](http://plnkr.co/edit/1MBypRryXd64v4pV03Yn?p=preview))\n *\n * ```typescript\n * @Component({\n *   selector: 'my-cmp',\n *   template: `<p>my-component</p>`\n * })\n * class MyComponent implements OnInit, OnDestroy {\n *   ngOnInit() {\n *     console.log('ngOnInit');\n *   }\n *\n *   ngOnDestroy() {\n *     console.log('ngOnDestroy');\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <button (click)=\"hasChild = !hasChild\">\n *       {{hasChild ? 'Destroy' : 'Create'}} MyComponent\n *     </button>\n *     <my-cmp *ngIf=\"hasChild\"></my-cmp>`,\n *   directives: [MyComponent, NgIf]\n * })\n * export class App {\n *   hasChild = true;\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n *  ```\n */\nexport interface OnInit { ngOnInit(); }\n\n/**\n * Implement this interface to override the default change detection algorithm for your directive.\n *\n * `ngDoCheck` gets called to check the changes in the directives instead of the default algorithm.\n *\n * The default change detection algorithm looks for differences by comparing bound-property values\n * by reference across change detection runs. When `DoCheck` is implemented, the default algorithm\n * is disabled and `ngDoCheck` is responsible for checking for changes.\n *\n * Implementing this interface allows improving performance by using insights about the component,\n * its implementation and data types of its properties.\n *\n * Note that a directive should not implement both `DoCheck` and {@link OnChanges} at the same time.\n * `ngOnChanges` would not be called when a directive implements `DoCheck`. Reaction to the changes\n * have to be handled from within the `ngDoCheck` callback.\n *\n * Use {@link KeyValueDiffers} and {@link IterableDiffers} to add your custom check mechanisms.\n *\n * ### Example ([live demo](http://plnkr.co/edit/QpnIlF0CR2i5bcYbHEUJ?p=preview))\n *\n * In the following example `ngDoCheck` uses an {@link IterableDiffers} to detect the updates to the\n * array `list`:\n *\n * ```typescript\n * @Component({\n *   selector: 'custom-check',\n *   template: `\n *     <p>Changes:</p>\n *     <ul>\n *       <li *ngFor=\"#line of logs\">{{line}}</li>\n *     </ul>`,\n *   directives: [NgFor]\n * })\n * class CustomCheckComponent implements DoCheck {\n *   @Input() list: any[];\n *   differ: any;\n *   logs = [];\n *\n *   constructor(differs: IterableDiffers) {\n *     this.differ = differs.find([]).create(null);\n *   }\n *\n *   ngDoCheck() {\n *     var changes = this.differ.diff(this.list);\n *\n *     if (changes) {\n *       changes.forEachAddedItem(r => this.logs.push('added ' + r.item));\n *       changes.forEachRemovedItem(r => this.logs.push('removed ' + r.item))\n *     }\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <button (click)=\"list.push(list.length)\">Push</button>\n *     <button (click)=\"list.pop()\">Pop</button>\n *     <custom-check [list]=\"list\"></custom-check>`,\n *   directives: [CustomCheckComponent]\n * })\n * export class App {\n *   list = [];\n * }\n * ```\n */\nexport interface DoCheck { ngDoCheck(); }\n\n/**\n * Implement this interface to get notified when your directive is destroyed.\n *\n * `ngOnDestroy` callback is typically used for any custom cleanup that needs to occur when the\n * instance is destroyed\n *\n * ### Example ([live example](http://plnkr.co/edit/1MBypRryXd64v4pV03Yn?p=preview))\n *\n * ```typesript\n * @Component({\n *   selector: 'my-cmp',\n *   template: `<p>my-component</p>`\n * })\n * class MyComponent implements OnInit, OnDestroy {\n *   ngOnInit() {\n *     console.log('ngOnInit');\n *   }\n *\n *   ngOnDestroy() {\n *     console.log('ngOnDestroy');\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <button (click)=\"hasChild = !hasChild\">\n *       {{hasChild ? 'Destroy' : 'Create'}} MyComponent\n *     </button>\n *     <my-cmp *ngIf=\"hasChild\"></my-cmp>`,\n *   directives: [MyComponent, NgIf]\n * })\n * export class App {\n *   hasChild = true;\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n *\n *\n * To create a stateful Pipe, you should implement this interface and set the `pure`\n * parameter to `false` in the {@link PipeMetadata}.\n *\n * A stateful pipe may produce different output, given the same input. It is\n * likely that a stateful pipe may contain state that should be cleaned up when\n * a binding is destroyed. For example, a subscription to a stream of data may need to\n * be disposed, or an interval may need to be cleared.\n *\n * ### Example ([live demo](http://plnkr.co/edit/i8pm5brO4sPaLxBx56MR?p=preview))\n *\n * In this example, a pipe is created to countdown its input value, updating it every\n * 50ms. Because it maintains an internal interval, it automatically clears\n * the interval when the binding is destroyed or the countdown completes.\n *\n * ```\n * import {OnDestroy, Pipe, PipeTransform} from 'angular2/core'\n * @Pipe({name: 'countdown', pure: false})\n * class CountDown implements PipeTransform, OnDestroy {\n *   remainingTime:Number;\n *   interval:SetInterval;\n *   ngOnDestroy() {\n *     if (this.interval) {\n *       clearInterval(this.interval);\n *     }\n *   }\n *   transform(value: any, args: any[] = []) {\n *     if (!parseInt(value, 10)) return null;\n *     if (typeof this.remainingTime !== 'number') {\n *       this.remainingTime = parseInt(value, 10);\n *     }\n *     if (!this.interval) {\n *       this.interval = setInterval(() => {\n *         this.remainingTime-=50;\n *         if (this.remainingTime <= 0) {\n *           this.remainingTime = 0;\n *           clearInterval(this.interval);\n *           delete this.interval;\n *         }\n *       }, 50);\n *     }\n *     return this.remainingTime;\n *   }\n * }\n * ```\n *\n * Invoking `{{ 10000 | countdown }}` would cause the value to be decremented by 50,\n * every 50ms, until it reaches 0.\n *\n */\nexport interface OnDestroy { ngOnDestroy(); }\n\n/**\n * Implement this interface to get notified when your directive's content has been fully\n * initialized.\n *\n * ### Example ([live demo](http://plnkr.co/edit/plamXUpsLQbIXpViZhUO?p=preview))\n *\n * ```typescript\n * @Component({\n *   selector: 'child-cmp',\n *   template: `{{where}} child`\n * })\n * class ChildComponent {\n *   @Input() where: string;\n * }\n *\n * @Component({\n *   selector: 'parent-cmp',\n *   template: `<ng-content></ng-content>`\n * })\n * class ParentComponent implements AfterContentInit {\n *   @ContentChild(ChildComponent) contentChild: ChildComponent;\n *\n *   constructor() {\n *     // contentChild is not initialized yet\n *     console.log(this.getMessage(this.contentChild));\n *   }\n *\n *   ngAfterContentInit() {\n *     // contentChild is updated after the content has been checked\n *     console.log('AfterContentInit: ' + this.getMessage(this.contentChild));\n *   }\n *\n *   private getMessage(cmp: ChildComponent): string {\n *     return cmp ? cmp.where + ' child' : 'no child';\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <parent-cmp>\n *       <child-cmp where=\"content\"></child-cmp>\n *     </parent-cmp>`,\n *   directives: [ParentComponent, ChildComponent]\n * })\n * export class App {\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n */\nexport interface AfterContentInit { ngAfterContentInit(); }\n\n/**\n * Implement this interface to get notified after every check of your directive's content.\n *\n * ### Example ([live demo](http://plnkr.co/edit/tGdrytNEKQnecIPkD7NU?p=preview))\n *\n * ```typescript\n * @Component({selector: 'child-cmp', template: `{{where}} child`})\n * class ChildComponent {\n *   @Input() where: string;\n * }\n *\n * @Component({selector: 'parent-cmp', template: `<ng-content></ng-content>`})\n * class ParentComponent implements AfterContentChecked {\n *   @ContentChild(ChildComponent) contentChild: ChildComponent;\n *\n *   constructor() {\n *     // contentChild is not initialized yet\n *     console.log(this.getMessage(this.contentChild));\n *   }\n *\n *   ngAfterContentChecked() {\n *     // contentChild is updated after the content has been checked\n *     console.log('AfterContentChecked: ' + this.getMessage(this.contentChild));\n *   }\n *\n *   private getMessage(cmp: ChildComponent): string {\n *     return cmp ? cmp.where + ' child' : 'no child';\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <parent-cmp>\n *       <button (click)=\"hasContent = !hasContent\">Toggle content child</button>\n *       <child-cmp *ngIf=\"hasContent\" where=\"content\"></child-cmp>\n *     </parent-cmp>`,\n *   directives: [NgIf, ParentComponent, ChildComponent]\n * })\n * export class App {\n *   hasContent = true;\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n */\nexport interface AfterContentChecked { ngAfterContentChecked(); }\n\n/**\n * Implement this interface to get notified when your component's view has been fully initialized.\n *\n * ### Example ([live demo](http://plnkr.co/edit/LhTKVMEM0fkJgyp4CI1W?p=preview))\n *\n * ```typescript\n * @Component({selector: 'child-cmp', template: `{{where}} child`})\n * class ChildComponent {\n *   @Input() where: string;\n * }\n *\n * @Component({\n *   selector: 'parent-cmp',\n *   template: `<child-cmp where=\"view\"></child-cmp>`,\n *   directives: [ChildComponent]\n * })\n * class ParentComponent implements AfterViewInit {\n *   @ViewChild(ChildComponent) viewChild: ChildComponent;\n *\n *   constructor() {\n *     // viewChild is not initialized yet\n *     console.log(this.getMessage(this.viewChild));\n *   }\n *\n *   ngAfterViewInit() {\n *     // viewChild is updated after the view has been initialized\n *     console.log('ngAfterViewInit: ' + this.getMessage(this.viewChild));\n *   }\n *\n *   private getMessage(cmp: ChildComponent): string {\n *     return cmp ? cmp.where + ' child' : 'no child';\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `<parent-cmp></parent-cmp>`,\n *   directives: [ParentComponent]\n * })\n * export class App {\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n */\nexport interface AfterViewInit { ngAfterViewInit(); }\n\n/**\n * Implement this interface to get notified after every check of your component's view.\n *\n * ### Example ([live demo](http://plnkr.co/edit/0qDGHcPQkc25CXhTNzKU?p=preview))\n *\n * ```typescript\n * @Component({selector: 'child-cmp', template: `{{where}} child`})\n * class ChildComponent {\n *   @Input() where: string;\n * }\n *\n * @Component({\n *   selector: 'parent-cmp',\n *   template: `\n *     <button (click)=\"showView = !showView\">Toggle view child</button>\n *     <child-cmp *ngIf=\"showView\" where=\"view\"></child-cmp>`,\n *   directives: [NgIf, ChildComponent]\n * })\n * class ParentComponent implements AfterViewChecked {\n *   @ViewChild(ChildComponent) viewChild: ChildComponent;\n *   showView = true;\n *\n *   constructor() {\n *     // viewChild is not initialized yet\n *     console.log(this.getMessage(this.viewChild));\n *   }\n *\n *   ngAfterViewChecked() {\n *     // viewChild is updated after the view has been checked\n *     console.log('AfterViewChecked: ' + this.getMessage(this.viewChild));\n *   }\n *\n *   private getMessage(cmp: ChildComponent): string {\n *     return cmp ? cmp.where + ' child' : 'no child';\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `<parent-cmp></parent-cmp>`,\n *   directives: [ParentComponent]\n * })\n * export class App {\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n */\nexport interface AfterViewChecked { ngAfterViewChecked(); }\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/interfaces.ts\n **/","import {\n  Injector,\n  Inject,\n  Provider,\n  Injectable,\n  ResolvedProvider,\n  forwardRef\n} from 'angular2/src/core/di';\nimport {isPresent, isBlank, isArray} from 'angular2/src/facade/lang';\nimport {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {AppView, HostViewFactory, flattenNestedViewRenderNodes, findLastRenderNode} from './view';\nimport {AppElement} from './element';\nimport {ElementRef, ElementRef_} from './element_ref';\nimport {\n  HostViewFactoryRef,\n  HostViewFactoryRef_,\n  EmbeddedViewRef,\n  HostViewRef,\n  ViewRef,\n  ViewRef_\n} from './view_ref';\nimport {ViewContainerRef} from './view_container_ref';\nimport {TemplateRef, TemplateRef_} from './template_ref';\nimport {RootRenderer, RenderComponentType} from 'angular2/src/core/render/api';\nimport {wtfCreateScope, wtfLeave, WtfScopeFn} from '../profile/profile';\nimport {APP_ID} from 'angular2/src/core/application_tokens';\nimport {ViewEncapsulation} from 'angular2/src/core/metadata/view';\nimport {ViewType} from './view_type';\n\n/**\n * Service exposing low level API for creating, moving and destroying Views.\n *\n * Most applications should use higher-level abstractions like {@link DynamicComponentLoader} and\n * {@link ViewContainerRef} instead.\n */\nexport abstract class AppViewManager {\n  /**\n   * Returns a {@link ViewContainerRef} of the View Container at the specified location.\n   */\n  abstract getViewContainer(location: ElementRef): ViewContainerRef;\n\n  /**\n   * Returns the {@link ElementRef} that makes up the specified Host View.\n   */\n  abstract getHostElement(hostViewRef: HostViewRef): ElementRef;\n\n  /**\n   * Searches the Component View of the Component specified via `hostLocation` and returns the\n   * {@link ElementRef} for the Element identified via a Variable Name `variableName`.\n   *\n   * Throws an exception if the specified `hostLocation` is not a Host Element of a Component, or if\n   * variable `variableName` couldn't be found in the Component View of this Component.\n   */\n  abstract getNamedElementInComponentView(hostLocation: ElementRef,\n                                          variableName: string): ElementRef;\n\n  /**\n   * Returns the component instance for the provided Host Element.\n   */\n  abstract getComponent(hostLocation: ElementRef): any;\n\n  /**\n   * Creates an instance of a Component and attaches it to the first element in the global View\n   * (usually DOM Document) that matches the component's selector or `overrideSelector`.\n   *\n   * This as a low-level way to bootstrap an application and upgrade an existing Element to a\n   * Host Element. Most applications should use {@link DynamicComponentLoader#loadAsRoot} instead.\n   *\n   * The Component and its View are created based on the `hostProtoComponentRef` which can be\n   * obtained\n   * by compiling the component with {@link Compiler#compileInHost}.\n   *\n   * Use {@link AppViewManager#destroyRootHostView} to destroy the created Component and it's Host\n   * View.\n   *\n   * ### Example\n   *\n   * ```\n   * @ng.Component({\n   *   selector: 'child-component'\n   * })\n   * @ng.View({\n   *   template: 'Child'\n   * })\n   * class ChildComponent {\n   *\n   * }\n   *\n   * @ng.Component({\n   *   selector: 'my-app'\n   * })\n   * @ng.View({\n   *   template: `\n   *     Parent (<some-component></some-component>)\n   *   `\n   * })\n   * class MyApp implements OnDestroy {\n   *   viewRef: ng.ViewRef;\n   *\n   *   constructor(public appViewManager: ng.AppViewManager, compiler: ng.Compiler) {\n   *     compiler.compileInHost(ChildComponent).then((protoView: ng.ProtoComponentRef) => {\n   *       this.viewRef = appViewManager.createRootHostView(protoView, 'some-component', null);\n   *     })\n   *   }\n   *\n   *   ngOnDestroy() {\n   *     this.appViewManager.destroyRootHostView(this.viewRef);\n   *     this.viewRef = null;\n   *   }\n   * }\n   *\n   * ng.bootstrap(MyApp);\n   * ```\n   */\n  abstract createRootHostView(hostViewFactoryRef: HostViewFactoryRef, overrideSelector: string,\n                              injector: Injector, projectableNodes?: any[][]): HostViewRef;\n\n  /**\n   * Destroys the Host View created via {@link AppViewManager#createRootHostView}.\n   *\n   * Along with the Host View, the Component Instance as well as all nested View and Components are\n   * destroyed as well.\n   */\n  abstract destroyRootHostView(hostViewRef: HostViewRef);\n\n  /**\n   * Instantiates an Embedded View based on the {@link TemplateRef `templateRef`} and inserts it\n   * into the View Container specified via `viewContainerLocation` at the specified `index`.\n   *\n   * Returns the {@link ViewRef} for the newly created View.\n   *\n   * This as a low-level way to create and attach an Embedded via to a View Container. Most\n   * applications should used {@link ViewContainerRef#createEmbeddedView} instead.\n   *\n   * Use {@link AppViewManager#destroyViewInContainer} to destroy the created Embedded View.\n   */\n  // TODO(i): this low-level version of ViewContainerRef#createEmbeddedView doesn't add anything new\n  //    we should make it private, otherwise we have two apis to do the same thing.\n  abstract createEmbeddedViewInContainer(viewContainerLocation: ElementRef, index: number,\n                                         templateRef: TemplateRef): EmbeddedViewRef;\n\n  /**\n   * Instantiates a single {@link Component} and inserts its Host View into the View Container\n   * found at `viewContainerLocation`. Within the container, the view will be inserted at position\n   * specified via `index`.\n   *\n   * The component is instantiated using its {@link ProtoViewRef `protoViewRef`} which can be\n   * obtained via {@link Compiler#compileInHost}.\n   *\n   * You can optionally specify `dynamicallyCreatedProviders`, which configure the {@link Injector}\n   * that will be created for the Host View.\n   *\n   * Returns the {@link HostViewRef} of the Host View created for the newly instantiated Component.\n   *\n   * Use {@link AppViewManager#destroyViewInContainer} to destroy the created Host View.\n   */\n  abstract createHostViewInContainer(\n      viewContainerLocation: ElementRef, index: number, hostViewFactoryRef: HostViewFactoryRef,\n      dynamicallyCreatedProviders: ResolvedProvider[], projectableNodes: any[][]): HostViewRef;\n\n  /**\n   * Destroys an Embedded or Host View attached to a View Container at the specified `index`.\n   *\n   * The View Container is located via `viewContainerLocation`.\n   */\n  abstract destroyViewInContainer(viewContainerLocation: ElementRef, index: number);\n\n  /**\n   *\n   * See {@link AppViewManager#detachViewInContainer}.\n   */\n  // TODO(i): refactor detachViewInContainer+attachViewInContainer to moveViewInContainer\n  abstract attachViewInContainer(viewContainerLocation: ElementRef, index: number,\n                                 viewRef: EmbeddedViewRef): EmbeddedViewRef;\n\n  /**\n   * See {@link AppViewManager#attachViewInContainer}.\n   */\n  abstract detachViewInContainer(viewContainerLocation: ElementRef, index: number): EmbeddedViewRef;\n}\n\n@Injectable()\nexport class AppViewManager_ extends AppViewManager {\n  private _nextCompTypeId: number = 0;\n\n  constructor(private _renderer: RootRenderer, @Inject(APP_ID) private _appId: string) { super(); }\n\n  getViewContainer(location: ElementRef): ViewContainerRef {\n    return (<ElementRef_>location).internalElement.getViewContainerRef();\n  }\n\n  getHostElement(hostViewRef: ViewRef): ElementRef {\n    var hostView = (<ViewRef_>hostViewRef).internalView;\n    if (hostView.proto.type !== ViewType.HOST) {\n      throw new BaseException('This operation is only allowed on host views');\n    }\n    return hostView.appElements[0].ref;\n  }\n\n  getNamedElementInComponentView(hostLocation: ElementRef, variableName: string): ElementRef {\n    var appEl = (<ElementRef_>hostLocation).internalElement;\n    var componentView = appEl.componentView;\n    if (isBlank(componentView)) {\n      throw new BaseException(`There is no component directive at element ${hostLocation}`);\n    }\n    for (var i = 0; i < componentView.appElements.length; i++) {\n      var compAppEl = componentView.appElements[i];\n      if (StringMapWrapper.contains(compAppEl.proto.directiveVariableBindings, variableName)) {\n        return compAppEl.ref;\n      }\n    }\n    throw new BaseException(`Could not find variable ${variableName}`);\n  }\n\n  getComponent(hostLocation: ElementRef): any {\n    return (<ElementRef_>hostLocation).internalElement.getComponent();\n  }\n\n  /** @internal */\n  _createRootHostViewScope: WtfScopeFn = wtfCreateScope('AppViewManager#createRootHostView()');\n\n  createRootHostView(hostViewFactoryRef: HostViewFactoryRef, overrideSelector: string,\n                     injector: Injector, projectableNodes: any[][] = null): HostViewRef {\n    var s = this._createRootHostViewScope();\n    var hostViewFactory = (<HostViewFactoryRef_>hostViewFactoryRef).internalHostViewFactory;\n    var selector = isPresent(overrideSelector) ? overrideSelector : hostViewFactory.selector;\n    var view = hostViewFactory.viewFactory(this._renderer, this, null, projectableNodes, selector,\n                                           null, injector);\n    return wtfLeave(s, view.ref);\n  }\n\n  /** @internal */\n  _destroyRootHostViewScope: WtfScopeFn = wtfCreateScope('AppViewManager#destroyRootHostView()');\n\n  destroyRootHostView(hostViewRef: ViewRef) {\n    var s = this._destroyRootHostViewScope();\n    var hostView = (<ViewRef_>hostViewRef).internalView;\n    hostView.renderer.detachView(flattenNestedViewRenderNodes(hostView.rootNodesOrAppElements));\n    hostView.destroy();\n    wtfLeave(s);\n  }\n\n  /** @internal */\n  _createEmbeddedViewInContainerScope: WtfScopeFn =\n      wtfCreateScope('AppViewManager#createEmbeddedViewInContainer()');\n\n  createEmbeddedViewInContainer(viewContainerLocation: ElementRef, index: number,\n                                templateRef: TemplateRef): EmbeddedViewRef {\n    var s = this._createEmbeddedViewInContainerScope();\n    var contextEl = (<TemplateRef_>templateRef).elementRef.internalElement;\n    var view: AppView =\n        contextEl.embeddedViewFactory(contextEl.parentView.renderer, this, contextEl,\n                                      contextEl.parentView.projectableNodes, null, null, null);\n    this._attachViewToContainer(view, (<ElementRef_>viewContainerLocation).internalElement, index);\n    return wtfLeave(s, view.ref);\n  }\n\n  /** @internal */\n  _createHostViewInContainerScope: WtfScopeFn =\n      wtfCreateScope('AppViewManager#createHostViewInContainer()');\n\n  createHostViewInContainer(viewContainerLocation: ElementRef, index: number,\n                            hostViewFactoryRef: HostViewFactoryRef,\n                            dynamicallyCreatedProviders: ResolvedProvider[],\n                            projectableNodes: any[][]): HostViewRef {\n    var s = this._createHostViewInContainerScope();\n    // TODO(tbosch): This should be specifiable via an additional argument!\n    var viewContainerLocation_ = <ElementRef_>viewContainerLocation;\n    var contextEl = viewContainerLocation_.internalElement;\n    var hostViewFactory = (<HostViewFactoryRef_>hostViewFactoryRef).internalHostViewFactory;\n    var view = hostViewFactory.viewFactory(\n        contextEl.parentView.renderer, contextEl.parentView.viewManager, contextEl,\n        projectableNodes, null, dynamicallyCreatedProviders, null);\n    this._attachViewToContainer(view, viewContainerLocation_.internalElement, index);\n    return wtfLeave(s, view.ref);\n  }\n\n  /** @internal */\n  _destroyViewInContainerScope = wtfCreateScope('AppViewMananger#destroyViewInContainer()');\n\n  destroyViewInContainer(viewContainerLocation: ElementRef, index: number) {\n    var s = this._destroyViewInContainerScope();\n    var view =\n        this._detachViewInContainer((<ElementRef_>viewContainerLocation).internalElement, index);\n    view.destroy();\n    wtfLeave(s);\n  }\n\n  /** @internal */\n  _attachViewInContainerScope = wtfCreateScope('AppViewMananger#attachViewInContainer()');\n\n  // TODO(i): refactor detachViewInContainer+attachViewInContainer to moveViewInContainer\n  attachViewInContainer(viewContainerLocation: ElementRef, index: number,\n                        viewRef: ViewRef): EmbeddedViewRef {\n    var viewRef_ = <ViewRef_>viewRef;\n    var s = this._attachViewInContainerScope();\n    this._attachViewToContainer(viewRef_.internalView,\n                                (<ElementRef_>viewContainerLocation).internalElement, index);\n    return wtfLeave(s, viewRef_);\n  }\n\n  /** @internal */\n  _detachViewInContainerScope = wtfCreateScope('AppViewMananger#detachViewInContainer()');\n\n  // TODO(i): refactor detachViewInContainer+attachViewInContainer to moveViewInContainer\n  detachViewInContainer(viewContainerLocation: ElementRef, index: number): EmbeddedViewRef {\n    var s = this._detachViewInContainerScope();\n    var view =\n        this._detachViewInContainer((<ElementRef_>viewContainerLocation).internalElement, index);\n    return wtfLeave(s, view.ref);\n  }\n\n  /** @internal */\n  onViewCreated(view: AppView) {}\n\n  /** @internal */\n  onViewDestroyed(view: AppView) {}\n\n  /** @internal */\n  createRenderComponentType(encapsulation: ViewEncapsulation,\n                            styles: Array<string | any[]>): RenderComponentType {\n    return new RenderComponentType(`${this._appId}-${this._nextCompTypeId++}`, encapsulation,\n                                   styles);\n  }\n\n  private _attachViewToContainer(view: AppView, vcAppElement: AppElement, viewIndex: number) {\n    if (view.proto.type === ViewType.COMPONENT) {\n      throw new BaseException(`Component views can't be moved!`);\n    }\n    var nestedViews = vcAppElement.nestedViews;\n    if (nestedViews == null) {\n      nestedViews = [];\n      vcAppElement.nestedViews = nestedViews;\n    }\n    ListWrapper.insert(nestedViews, viewIndex, view);\n    var refNode;\n    if (viewIndex > 0) {\n      var prevView = nestedViews[viewIndex - 1];\n      refNode = prevView.rootNodesOrAppElements.length > 0 ?\n                    prevView.rootNodesOrAppElements[prevView.rootNodesOrAppElements.length - 1] :\n                    null;\n    } else {\n      refNode = vcAppElement.nativeElement;\n    }\n    if (isPresent(refNode)) {\n      var refRenderNode = findLastRenderNode(refNode);\n      view.renderer.attachViewAfter(refRenderNode,\n                                    flattenNestedViewRenderNodes(view.rootNodesOrAppElements));\n    }\n    // TODO: This is only needed when a view is destroyed,\n    // not when it is detached for reordering with ng-for...\n    vcAppElement.parentView.changeDetector.addContentChild(view.changeDetector);\n    vcAppElement.traverseAndSetQueriesAsDirty();\n  }\n\n  private _detachViewInContainer(vcAppElement: AppElement, viewIndex: number): AppView {\n    var view = ListWrapper.removeAt(vcAppElement.nestedViews, viewIndex);\n    if (view.proto.type === ViewType.COMPONENT) {\n      throw new BaseException(`Component views can't be moved!`);\n    }\n    vcAppElement.traverseAndSetQueriesAsDirty();\n\n    view.renderer.detachView(flattenNestedViewRenderNodes(view.rootNodesOrAppElements));\n\n    // TODO: This is only needed when a view is destroyed,\n    // not when it is detached for reordering with ng-for...\n    view.changeDetector.remove();\n    return view;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/view_manager.ts\n **/","import {unimplemented} from 'angular2/src/facade/exceptions';\nimport {ChangeDetectorRef} from '../change_detection/change_detector_ref';\nimport {AppView, HostViewFactory} from './view';\n\nexport abstract class ViewRef {\n  /**\n   * @internal\n   */\n  get changeDetectorRef(): ChangeDetectorRef { return <ChangeDetectorRef>unimplemented(); };\n\n  get destroyed(): boolean { return <boolean>unimplemented(); }\n}\n\n/**\n * Represents a View containing a single Element that is the Host Element of a {@link Component}\n * instance.\n *\n * A Host View is created for every dynamically created Component that was compiled on its own (as\n * opposed to as a part of another Component's Template) via {@link Compiler#compileInHost} or one\n * of the higher-level APIs: {@link AppViewManager#createRootHostView},\n * {@link AppViewManager#createHostViewInContainer}, {@link ViewContainerRef#createHostView}.\n */\nexport abstract class HostViewRef extends ViewRef {\n  get rootNodes(): any[] { return <any[]>unimplemented(); };\n}\n\n/**\n * Represents an Angular View.\n *\n * <!-- TODO: move the next two paragraphs to the dev guide -->\n * A View is a fundamental building block of the application UI. It is the smallest grouping of\n * Elements which are created and destroyed together.\n *\n * Properties of elements in a View can change, but the structure (number and order) of elements in\n * a View cannot. Changing the structure of Elements can only be done by inserting, moving or\n * removing nested Views via a {@link ViewContainerRef}. Each View can contain many View Containers.\n * <!-- /TODO -->\n *\n * ### Example\n *\n * Given this template...\n *\n * ```\n * Count: {{items.length}}\n * <ul>\n *   <li *ngFor=\"var item of items\">{{item}}</li>\n * </ul>\n * ```\n *\n * ... we have two {@link ProtoViewRef}s:\n *\n * Outer {@link ProtoViewRef}:\n * ```\n * Count: {{items.length}}\n * <ul>\n *   <template ngFor var-item [ngForOf]=\"items\"></template>\n * </ul>\n * ```\n *\n * Inner {@link ProtoViewRef}:\n * ```\n *   <li>{{item}}</li>\n * ```\n *\n * Notice that the original template is broken down into two separate {@link ProtoViewRef}s.\n *\n * The outer/inner {@link ProtoViewRef}s are then assembled into views like so:\n *\n * ```\n * <!-- ViewRef: outer-0 -->\n * Count: 2\n * <ul>\n *   <template view-container-ref></template>\n *   <!-- ViewRef: inner-1 --><li>first</li><!-- /ViewRef: inner-1 -->\n *   <!-- ViewRef: inner-2 --><li>second</li><!-- /ViewRef: inner-2 -->\n * </ul>\n * <!-- /ViewRef: outer-0 -->\n * ```\n */\nexport abstract class EmbeddedViewRef extends ViewRef {\n  /**\n   * Sets `value` of local variable called `variableName` in this View.\n   */\n  abstract setLocal(variableName: string, value: any): void;\n\n  /**\n   * Checks whether this view has a local variable called `variableName`.\n   */\n  abstract hasLocal(variableName: string): boolean;\n\n  get rootNodes(): any[] { return <any[]>unimplemented(); };\n}\n\nexport class ViewRef_ implements EmbeddedViewRef, HostViewRef {\n  constructor(private _view: AppView) { this._view = _view; }\n\n  get internalView(): AppView { return this._view; }\n\n  /**\n   * Return `ChangeDetectorRef`\n   */\n  get changeDetectorRef(): ChangeDetectorRef { return this._view.changeDetector.ref; }\n\n  get rootNodes(): any[] { return this._view.flatRootNodes; }\n\n  setLocal(variableName: string, value: any): void { this._view.setLocal(variableName, value); }\n\n  hasLocal(variableName: string): boolean { return this._view.hasLocal(variableName); }\n\n  get destroyed(): boolean { return this._view.destroyed; }\n}\n\nexport abstract class HostViewFactoryRef {}\n\nexport class HostViewFactoryRef_ implements HostViewFactoryRef {\n  constructor(private _hostViewFactory: HostViewFactory) {}\n\n  get internalHostViewFactory(): HostViewFactory { return this._hostViewFactory; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/view_ref.ts\n **/","/**\n * This indirection is needed to free up Component, etc symbols in the public API\n * to be used by the decorator versions of these annotations.\n */\n\nexport {\n  QueryMetadata,\n  ContentChildrenMetadata,\n  ContentChildMetadata,\n  ViewChildrenMetadata,\n  ViewQueryMetadata,\n  ViewChildMetadata,\n  AttributeMetadata\n} from './metadata/di';\n\nexport {\n  ComponentMetadata,\n  DirectiveMetadata,\n  PipeMetadata,\n  InputMetadata,\n  OutputMetadata,\n  HostBindingMetadata,\n  HostListenerMetadata\n} from './metadata/directives';\n\nexport {ViewMetadata, ViewEncapsulation} from './metadata/view';\n\nimport {\n  QueryMetadata,\n  ContentChildrenMetadata,\n  ContentChildMetadata,\n  ViewChildrenMetadata,\n  ViewChildMetadata,\n  ViewQueryMetadata,\n  AttributeMetadata\n} from './metadata/di';\n\nimport {\n  ComponentMetadata,\n  DirectiveMetadata,\n  PipeMetadata,\n  InputMetadata,\n  OutputMetadata,\n  HostBindingMetadata,\n  HostListenerMetadata\n} from './metadata/directives';\n\nimport {ViewMetadata, ViewEncapsulation} from './metadata/view';\nimport {ChangeDetectionStrategy} from 'angular2/src/core/change_detection/change_detection';\n\nimport {\n  makeDecorator,\n  makeParamDecorator,\n  makePropDecorator,\n  TypeDecorator,\n  Class\n} from './util/decorators';\nimport {Type} from 'angular2/src/facade/lang';\n\n/**\n * Interface for the {@link DirectiveMetadata} decorator function.\n *\n * See {@link DirectiveFactory}.\n */\nexport interface DirectiveDecorator extends TypeDecorator {}\n\n/**\n * Interface for the {@link ComponentMetadata} decorator function.\n *\n * See {@link ComponentFactory}.\n */\nexport interface ComponentDecorator extends TypeDecorator {\n  /**\n   * Chain {@link ViewMetadata} annotation.\n   */\n  View(obj: {\n    templateUrl?: string,\n    template?: string,\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    renderer?: string,\n    styles?: string[],\n    styleUrls?: string[],\n  }): ViewDecorator;\n}\n\n/**\n * Interface for the {@link ViewMetadata} decorator function.\n *\n * See {@link ViewFactory}.\n */\nexport interface ViewDecorator extends TypeDecorator {\n  /**\n   * Chain {@link ViewMetadata} annotation.\n   */\n  View(obj: {\n    templateUrl?: string,\n    template?: string,\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    renderer?: string,\n    styles?: string[],\n    styleUrls?: string[],\n  }): ViewDecorator;\n}\n\n/**\n * {@link DirectiveMetadata} factory for creating annotations, decorators or DSL.\n *\n * ### Example as TypeScript Decorator\n *\n * {@example core/ts/metadata/metadata.ts region='directive'}\n *\n * ### Example as ES5 DSL\n *\n * ```\n * var MyDirective = ng\n *   .Directive({...})\n *   .Class({\n *     constructor: function() {\n *       ...\n *     }\n *   })\n * ```\n *\n * ### Example as ES5 annotation\n *\n * ```\n * var MyDirective = function() {\n *   ...\n * };\n *\n * MyDirective.annotations = [\n *   new ng.Directive({...})\n * ]\n * ```\n */\nexport interface DirectiveFactory {\n  (obj: {\n    selector?: string,\n    inputs?: string[],\n    outputs?: string[],\n    properties?: string[],\n    events?: string[],\n    host?: {[key: string]: string},\n    bindings?: any[],\n    providers?: any[],\n    exportAs?: string,\n    queries?: {[key: string]: any}\n  }): DirectiveDecorator;\n  new (obj: {\n    selector?: string,\n    inputs?: string[],\n    outputs?: string[],\n    properties?: string[],\n    events?: string[],\n    host?: {[key: string]: string},\n    bindings?: any[],\n    providers?: any[],\n    exportAs?: string,\n    queries?: {[key: string]: any}\n  }): DirectiveMetadata;\n}\n\n/**\n * {@link ComponentMetadata} factory for creating annotations, decorators or DSL.\n *\n * ### Example as TypeScript Decorator\n *\n * {@example core/ts/metadata/metadata.ts region='component'}\n *\n * ### Example as ES5 DSL\n *\n * ```\n * var MyComponent = ng\n *   .Component({...})\n *   .Class({\n *     constructor: function() {\n *       ...\n *     }\n *   })\n * ```\n *\n * ### Example as ES5 annotation\n *\n * ```\n * var MyComponent = function() {\n *   ...\n * };\n *\n * MyComponent.annotations = [\n *   new ng.Component({...})\n * ]\n * ```\n */\nexport interface ComponentFactory {\n  (obj: {\n    selector?: string,\n    inputs?: string[],\n    outputs?: string[],\n    properties?: string[],\n    events?: string[],\n    host?: {[key: string]: string},\n    /* @deprecated */\n    bindings?: any[],\n    providers?: any[],\n    exportAs?: string,\n    moduleId?: string,\n    queries?: {[key: string]: any},\n    viewBindings?: any[],\n    viewProviders?: any[],\n    changeDetection?: ChangeDetectionStrategy,\n    templateUrl?: string,\n    template?: string,\n    styleUrls?: string[],\n    styles?: string[],\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    encapsulation?: ViewEncapsulation\n  }): ComponentDecorator;\n  new (obj: {\n    selector?: string,\n    inputs?: string[],\n    outputs?: string[],\n    properties?: string[],\n    events?: string[],\n    host?: {[key: string]: string},\n    /* @deprecated */\n    bindings?: any[],\n    providers?: any[],\n    exportAs?: string,\n    moduleId?: string,\n    queries?: {[key: string]: any},\n    /* @deprecated */\n    viewBindings?: any[],\n    viewProviders?: any[],\n    changeDetection?: ChangeDetectionStrategy,\n    templateUrl?: string,\n    template?: string,\n    styleUrls?: string[],\n    styles?: string[],\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    encapsulation?: ViewEncapsulation\n  }): ComponentMetadata;\n}\n\n/**\n * {@link ViewMetadata} factory for creating annotations, decorators or DSL.\n *\n * ### Example as TypeScript Decorator\n *\n * ```\n * import {Component, View} from \"angular2/core\";\n *\n * @Component({...})\n * class MyComponent {\n *   constructor() {\n *     ...\n *   }\n * }\n * ```\n *\n * ### Example as ES5 DSL\n *\n * ```\n * var MyComponent = ng\n *   .Component({...})\n *   .View({...})\n *   .Class({\n *     constructor: function() {\n *       ...\n *     }\n *   })\n * ```\n *\n * ### Example as ES5 annotation\n *\n * ```\n * var MyComponent = function() {\n *   ...\n * };\n *\n * MyComponent.annotations = [\n *   new ng.Component({...}),\n *   new ng.View({...})\n * ]\n * ```\n */\nexport interface ViewFactory {\n  (obj: {\n    templateUrl?: string,\n    template?: string,\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    encapsulation?: ViewEncapsulation,\n    styles?: string[],\n    styleUrls?: string[],\n  }): ViewDecorator;\n  new (obj: {\n    templateUrl?: string,\n    template?: string,\n    directives?: Array<Type | any[]>,\n    pipes?: Array<Type | any[]>,\n    encapsulation?: ViewEncapsulation,\n    styles?: string[],\n    styleUrls?: string[],\n  }): ViewMetadata;\n}\n\n/**\n * {@link AttributeMetadata} factory for creating annotations, decorators or DSL.\n *\n * ### Example as TypeScript Decorator\n *\n * {@example core/ts/metadata/metadata.ts region='attributeFactory'}\n *\n * ### Example as ES5 DSL\n *\n * ```\n * var MyComponent = ng\n *   .Component({...})\n *   .Class({\n *     constructor: [new ng.Attribute('title'), function(title) {\n *       ...\n *     }]\n *   })\n * ```\n *\n * ### Example as ES5 annotation\n *\n * ```\n * var MyComponent = function(title) {\n *   ...\n * };\n *\n * MyComponent.annotations = [\n *   new ng.Component({...})\n * ]\n * MyComponent.parameters = [\n *   [new ng.Attribute('title')]\n * ]\n * ```\n */\nexport interface AttributeFactory {\n  (name: string): TypeDecorator;\n  new (name: string): AttributeMetadata;\n}\n\n/**\n * {@link QueryMetadata} factory for creating annotations, decorators or DSL.\n *\n * ### Example as TypeScript Decorator\n *\n * ```\n * import {Query, QueryList, Component} from \"angular2/core\";\n *\n * @Component({...})\n * class MyComponent {\n *   constructor(@Query(SomeType) queryList: QueryList<SomeType>) {\n *     ...\n *   }\n * }\n * ```\n *\n * ### Example as ES5 DSL\n *\n * ```\n * var MyComponent = ng\n *   .Component({...})\n *   .Class({\n *     constructor: [new ng.Query(SomeType), function(queryList) {\n *       ...\n *     }]\n *   })\n * ```\n *\n * ### Example as ES5 annotation\n *\n * ```\n * var MyComponent = function(queryList) {\n *   ...\n * };\n *\n * MyComponent.annotations = [\n *   new ng.Component({...})\n * ]\n * MyComponent.parameters = [\n *   [new ng.Query(SomeType)]\n * ]\n * ```\n */\nexport interface QueryFactory {\n  (selector: Type | string, {descendants}?: {descendants?: boolean}): ParameterDecorator;\n  new (selector: Type | string, {descendants}?: {descendants?: boolean}): QueryMetadata;\n}\n\n/**\n * Factory for {@link ContentChildren}.\n */\nexport interface ContentChildrenFactory {\n  (selector: Type | string, {descendants}?: {descendants?: boolean}): any;\n  new (selector: Type | string, {descendants}?: {descendants?: boolean}): ContentChildrenMetadata;\n}\n\n/**\n * Factory for {@link ContentChild}.\n */\nexport interface ContentChildFactory {\n  (selector: Type | string): any;\n  new (selector: Type | string): ContentChildFactory;\n}\n\n/**\n * Factory for {@link ViewChildren}.\n */\nexport interface ViewChildrenFactory {\n  (selector: Type | string): any;\n  new (selector: Type | string): ViewChildrenMetadata;\n}\n\n/**\n * Factory for {@link ViewChild}.\n */\nexport interface ViewChildFactory {\n  (selector: Type | string): any;\n  new (selector: Type | string): ViewChildFactory;\n}\n\n\n/**\n * {@link PipeMetadata} factory for creating decorators.\n *\n * ### Example\n *\n * {@example core/ts/metadata/metadata.ts region='pipe'}\n */\nexport interface PipeFactory {\n  (obj: {name: string, pure?: boolean}): any;\n  new (obj: {name: string, pure?: boolean}): any;\n}\n\n/**\n * {@link InputMetadata} factory for creating decorators.\n *\n * See {@link InputMetadata}.\n */\nexport interface InputFactory {\n  (bindingPropertyName?: string): any;\n  new (bindingPropertyName?: string): any;\n}\n\n/**\n * {@link OutputMetadata} factory for creating decorators.\n *\n * See {@link OutputMetadata}.\n */\nexport interface OutputFactory {\n  (bindingPropertyName?: string): any;\n  new (bindingPropertyName?: string): any;\n}\n\n/**\n * {@link HostBindingMetadata} factory function.\n */\nexport interface HostBindingFactory {\n  (hostPropertyName?: string): any;\n  new (hostPropertyName?: string): any;\n}\n\n/**\n * {@link HostListenerMetadata} factory function.\n */\nexport interface HostListenerFactory {\n  (eventName: string, args?: string[]): any;\n  new (eventName: string, args?: string[]): any;\n}\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ComponentMetadata.\n/**\n * Declare reusable UI building blocks for an application.\n *\n * Each Angular component requires a single `@Component` annotation. The `@Component`\n * annotation specifies when a component is instantiated, and which properties and hostListeners it\n * binds to.\n *\n * When a component is instantiated, Angular\n * - creates a shadow DOM for the component.\n * - loads the selected template into the shadow DOM.\n * - creates all the injectable objects configured with `providers` and `viewProviders`.\n *\n * All template expressions and statements are then evaluated against the component instance.\n *\n * ## Lifecycle hooks\n *\n * When the component class implements some {@link angular2/lifecycle_hooks} the callbacks are\n * called by the change detection at defined points in time during the life of the component.\n *\n * ### Example\n *\n * {@example core/ts/metadata/metadata.ts region='component'}\n */\nexport var Component: ComponentFactory =\n    <ComponentFactory>makeDecorator(ComponentMetadata, (fn: any) => fn.View = View);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from DirectiveMetadata.\n/**\n * Directives allow you to attach behavior to elements in the DOM.\n *\n * {@link DirectiveMetadata}s with an embedded view are called {@link ComponentMetadata}s.\n *\n * A directive consists of a single directive annotation and a controller class. When the\n * directive's `selector` matches\n * elements in the DOM, the following steps occur:\n *\n * 1. For each directive, the `ElementInjector` attempts to resolve the directive's constructor\n * arguments.\n * 2. Angular instantiates directives for each matched element using `ElementInjector` in a\n * depth-first order,\n *    as declared in the HTML.\n *\n * ## Understanding How Injection Works\n *\n * There are three stages of injection resolution.\n * - *Pre-existing Injectors*:\n *   - The terminal {@link Injector} cannot resolve dependencies. It either throws an error or, if\n * the dependency was\n *     specified as `@Optional`, returns `null`.\n *   - The platform injector resolves browser singleton resources, such as: cookies, title,\n * location, and others.\n * - *Component Injectors*: Each component instance has its own {@link Injector}, and they follow\n * the same parent-child hierarchy\n *     as the component instances in the DOM.\n * - *Element Injectors*: Each component instance has a Shadow DOM. Within the Shadow DOM each\n * element has an `ElementInjector`\n *     which follow the same parent-child hierarchy as the DOM elements themselves.\n *\n * When a template is instantiated, it also must instantiate the corresponding directives in a\n * depth-first order. The\n * current `ElementInjector` resolves the constructor dependencies for each directive.\n *\n * Angular then resolves dependencies as follows, according to the order in which they appear in the\n * {@link ViewMetadata}:\n *\n * 1. Dependencies on the current element\n * 2. Dependencies on element injectors and their parents until it encounters a Shadow DOM boundary\n * 3. Dependencies on component injectors and their parents until it encounters the root component\n * 4. Dependencies on pre-existing injectors\n *\n *\n * The `ElementInjector` can inject other directives, element-specific special objects, or it can\n * delegate to the parent\n * injector.\n *\n * To inject other directives, declare the constructor parameter as:\n * - `directive:DirectiveType`: a directive on the current element only\n * - `@Host() directive:DirectiveType`: any directive that matches the type between the current\n * element and the\n *    Shadow DOM root.\n * - `@Query(DirectiveType) query:QueryList<DirectiveType>`: A live collection of direct child\n * directives.\n * - `@QueryDescendants(DirectiveType) query:QueryList<DirectiveType>`: A live collection of any\n * child directives.\n *\n * To inject element-specific special objects, declare the constructor parameter as:\n * - `element: ElementRef` to obtain a reference to logical element in the view.\n * - `viewContainer: ViewContainerRef` to control child template instantiation, for\n * {@link DirectiveMetadata} directives only\n * - `bindingPropagation: BindingPropagation` to control change detection in a more granular way.\n *\n * ### Example\n *\n * The following example demonstrates how dependency injection resolves constructor arguments in\n * practice.\n *\n *\n * Assume this HTML template:\n *\n * ```\n * <div dependency=\"1\">\n *   <div dependency=\"2\">\n *     <div dependency=\"3\" my-directive>\n *       <div dependency=\"4\">\n *         <div dependency=\"5\"></div>\n *       </div>\n *       <div dependency=\"6\"></div>\n *     </div>\n *   </div>\n * </div>\n * ```\n *\n * With the following `dependency` decorator and `SomeService` injectable class.\n *\n * ```\n * @Injectable()\n * class SomeService {\n * }\n *\n * @Directive({\n *   selector: '[dependency]',\n *   inputs: [\n *     'id: dependency'\n *   ]\n * })\n * class Dependency {\n *   id:string;\n * }\n * ```\n *\n * Let's step through the different ways in which `MyDirective` could be declared...\n *\n *\n * ### No injection\n *\n * Here the constructor is declared with no arguments, therefore nothing is injected into\n * `MyDirective`.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor() {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with no dependencies.\n *\n *\n * ### Component-level injection\n *\n * Directives can inject any injectable instance from the closest component injector or any of its\n * parents.\n *\n * Here, the constructor declares a parameter, `someService`, and injects the `SomeService` type\n * from the parent\n * component's injector.\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(someService: SomeService) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a dependency on `SomeService`.\n *\n *\n * ### Injecting a directive from the current element\n *\n * Directives can inject other directives declared on the current element.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(dependency: Dependency) {\n *     expect(dependency.id).toEqual(3);\n *   }\n * }\n * ```\n * This directive would be instantiated with `Dependency` declared at the same element, in this case\n * `dependency=\"3\"`.\n *\n * ### Injecting a directive from any ancestor elements\n *\n * Directives can inject other directives declared on any ancestor element (in the current Shadow\n * DOM), i.e. on the current element, the\n * parent element, or its parents.\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Host() dependency: Dependency) {\n *     expect(dependency.id).toEqual(2);\n *   }\n * }\n * ```\n *\n * `@Host` checks the current element, the parent, as well as its parents recursively. If\n * `dependency=\"2\"` didn't\n * exist on the direct parent, this injection would\n * have returned\n * `dependency=\"1\"`.\n *\n *\n * ### Injecting a live collection of direct child directives\n *\n *\n * A directive can also query for other child directives. Since parent directives are instantiated\n * before child directives, a directive can't simply inject the list of child directives. Instead,\n * the directive injects a {@link QueryList}, which updates its contents as children are added,\n * removed, or moved by a directive that uses a {@link ViewContainerRef} such as a `ngFor`, an\n * `ngIf`, or an `ngSwitch`.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Query(Dependency) dependencies:QueryList<Dependency>) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a {@link QueryList} which contains `Dependency` 4 and\n * 6. Here, `Dependency` 5 would not be included, because it is not a direct child.\n *\n * ### Injecting a live collection of descendant directives\n *\n * By passing the descendant flag to `@Query` above, we can include the children of the child\n * elements.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Query(Dependency, {descendants: true}) dependencies:QueryList<Dependency>) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a Query which would contain `Dependency` 4, 5 and 6.\n *\n * ### Optional injection\n *\n * The normal behavior of directives is to return an error when a specified dependency cannot be\n * resolved. If you\n * would like to inject `null` on unresolved dependency instead, you can annotate that dependency\n * with `@Optional()`.\n * This explicitly permits the author of a template to treat some of the surrounding directives as\n * optional.\n *\n * ```\n * @Directive({ selector: '[my-directive]' })\n * class MyDirective {\n *   constructor(@Optional() dependency:Dependency) {\n *   }\n * }\n * ```\n *\n * This directive would be instantiated with a `Dependency` directive found on the current element.\n * If none can be\n * found, the injector supplies `null` instead of throwing an error.\n *\n * ### Example\n *\n * Here we use a decorator directive to simply define basic tool-tip behavior.\n *\n * ```\n * @Directive({\n *   selector: '[tooltip]',\n *   inputs: [\n *     'text: tooltip'\n *   ],\n *   host: {\n *     '(mouseenter)': 'onMouseEnter()',\n *     '(mouseleave)': 'onMouseLeave()'\n *   }\n * })\n * class Tooltip{\n *   text:string;\n *   overlay:Overlay; // NOT YET IMPLEMENTED\n *   overlayManager:OverlayManager; // NOT YET IMPLEMENTED\n *\n *   constructor(overlayManager:OverlayManager) {\n *     this.overlay = overlay;\n *   }\n *\n *   onMouseEnter() {\n *     // exact signature to be determined\n *     this.overlay = this.overlayManager.open(text, ...);\n *   }\n *\n *   onMouseLeave() {\n *     this.overlay.close();\n *     this.overlay = null;\n *   }\n * }\n * ```\n * In our HTML template, we can then add this behavior to a `<div>` or any other element with the\n * `tooltip` selector,\n * like so:\n *\n * ```\n * <div tooltip=\"some text here\"></div>\n * ```\n *\n * Directives can also control the instantiation, destruction, and positioning of inline template\n * elements:\n *\n * A directive uses a {@link ViewContainerRef} to instantiate, insert, move, and destroy views at\n * runtime.\n * The {@link ViewContainerRef} is created as a result of `<template>` element, and represents a\n * location in the current view\n * where these actions are performed.\n *\n * Views are always created as children of the current {@link ViewMetadata}, and as siblings of the\n * `<template>` element. Thus a\n * directive in a child view cannot inject the directive that created it.\n *\n * Since directives that create views via ViewContainers are common in Angular, and using the full\n * `<template>` element syntax is wordy, Angular\n * also supports a shorthand notation: `<li *foo=\"bar\">` and `<li template=\"foo: bar\">` are\n * equivalent.\n *\n * Thus,\n *\n * ```\n * <ul>\n *   <li *foo=\"bar\" title=\"text\"></li>\n * </ul>\n * ```\n *\n * Expands in use to:\n *\n * ```\n * <ul>\n *   <template [foo]=\"bar\">\n *     <li title=\"text\"></li>\n *   </template>\n * </ul>\n * ```\n *\n * Notice that although the shorthand places `*foo=\"bar\"` within the `<li>` element, the binding for\n * the directive\n * controller is correctly instantiated on the `<template>` element rather than the `<li>` element.\n *\n * ## Lifecycle hooks\n *\n * When the directive class implements some {@link angular2/lifecycle_hooks} the callbacks are\n * called by the change detection at defined points in time during the life of the directive.\n *\n * ### Example\n *\n * Let's suppose we want to implement the `unless` behavior, to conditionally include a template.\n *\n * Here is a simple directive that triggers on an `unless` selector:\n *\n * ```\n * @Directive({\n *   selector: '[unless]',\n *   inputs: ['unless']\n * })\n * export class Unless {\n *   viewContainer: ViewContainerRef;\n *   templateRef: TemplateRef;\n *   prevCondition: boolean;\n *\n *   constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef) {\n *     this.viewContainer = viewContainer;\n *     this.templateRef = templateRef;\n *     this.prevCondition = null;\n *   }\n *\n *   set unless(newCondition) {\n *     if (newCondition && (isBlank(this.prevCondition) || !this.prevCondition)) {\n *       this.prevCondition = true;\n *       this.viewContainer.clear();\n *     } else if (!newCondition && (isBlank(this.prevCondition) || this.prevCondition)) {\n *       this.prevCondition = false;\n *       this.viewContainer.create(this.templateRef);\n *     }\n *   }\n * }\n * ```\n *\n * We can then use this `unless` selector in a template:\n * ```\n * <ul>\n *   <li *unless=\"expr\"></li>\n * </ul>\n * ```\n *\n * Once the directive instantiates the child view, the shorthand notation for the template expands\n * and the result is:\n *\n * ```\n * <ul>\n *   <template [unless]=\"exp\">\n *     <li></li>\n *   </template>\n *   <li></li>\n * </ul>\n * ```\n *\n * Note also that although the `<li></li>` template still exists inside the `<template></template>`,\n * the instantiated\n * view occurs on the second `<li></li>` which is a sibling to the `<template>` element.\n */\nexport var Directive: DirectiveFactory = <DirectiveFactory>makeDecorator(DirectiveMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewMetadata.\n/**\n * Metadata properties available for configuring Views.\n *\n * Each Angular component requires a single `@Component` and at least one `@View` annotation. The\n * `@View` annotation specifies the HTML template to use, and lists the directives that are active\n * within the template.\n *\n * When a component is instantiated, the template is loaded into the component's shadow root, and\n * the expressions and statements in the template are evaluated against the component.\n *\n * For details on the `@Component` annotation, see {@link ComponentMetadata}.\n *\n * ### Example\n *\n * ```\n * @Component({\n *   selector: 'greet',\n *   template: 'Hello {{name}}!',\n *   directives: [GreetUser, Bold]\n * })\n * class Greet {\n *   name: string;\n *\n *   constructor() {\n *     this.name = 'World';\n *   }\n * }\n * ```\n */\nvar View: ViewFactory = <ViewFactory>makeDecorator(ViewMetadata, (fn: any) => fn.View = View);\n\n/**\n * Specifies that a constant attribute value should be injected.\n *\n * The directive can inject constant string literals of host element attributes.\n *\n * ### Example\n *\n * Suppose we have an `<input>` element and want to know its `type`.\n *\n * ```html\n * <input type=\"text\">\n * ```\n *\n * A decorator can inject string literal `text` like so:\n *\n * {@example core/ts/metadata/metadata.ts region='attributeMetadata'}\n */\nexport var Attribute: AttributeFactory = makeParamDecorator(AttributeMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from QueryMetadata.\n/**\n * Declares an injectable parameter to be a live list of directives or variable\n * bindings from the content children of a directive.\n *\n * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\n *\n * Assume that `<tabs>` component would like to get a list its children `<pane>`\n * components as shown in this example:\n *\n * ```html\n * <tabs>\n *   <pane title=\"Overview\">...</pane>\n *   <pane *ngFor=\"#o of objects\" [title]=\"o.title\">{{o.text}}</pane>\n * </tabs>\n * ```\n *\n * The preferred solution is to query for `Pane` directives using this decorator.\n *\n * ```javascript\n * @Component({\n *   selector: 'pane',\n *   inputs: ['title']\n * })\n * class Pane {\n *   title:string;\n * }\n *\n * @Component({\n *  selector: 'tabs',\n *  template: `\n *    <ul>\n *      <li *ngFor=\"#pane of panes\">{{pane.title}}</li>\n *    </ul>\n *    <ng-content></ng-content>\n *  `\n * })\n * class Tabs {\n *   panes: QueryList<Pane>;\n *   constructor(@Query(Pane) panes:QueryList<Pane>) {\n *     this.panes = panes;\n *   }\n * }\n * ```\n *\n * A query can look for variable bindings by passing in a string with desired binding symbol.\n *\n * ### Example ([live demo](http://plnkr.co/edit/sT2j25cH1dURAyBRCKx1?p=preview))\n * ```html\n * <seeker>\n *   <div #findme>...</div>\n * </seeker>\n *\n * @Component({ selector: 'foo' })\n * class seeker {\n *   constructor(@Query('findme') elList: QueryList<ElementRef>) {...}\n * }\n * ```\n *\n * In this case the object that is injected depend on the type of the variable\n * binding. It can be an ElementRef, a directive or a component.\n *\n * Passing in a comma separated list of variable bindings will query for all of them.\n *\n * ```html\n * <seeker>\n *   <div #findMe>...</div>\n *   <div #findMeToo>...</div>\n * </seeker>\n *\n *  @Component({\n *   selector: 'foo'\n * })\n * class Seeker {\n *   constructor(@Query('findMe, findMeToo') elList: QueryList<ElementRef>) {...}\n * }\n * ```\n *\n * Configure whether query looks for direct children or all descendants\n * of the querying element, by using the `descendants` parameter.\n * It is set to `false` by default.\n *\n * ### Example ([live demo](http://plnkr.co/edit/wtGeB977bv7qvA5FTYl9?p=preview))\n * ```html\n * <container #first>\n *   <item>a</item>\n *   <item>b</item>\n *   <container #second>\n *     <item>c</item>\n *   </container>\n * </container>\n * ```\n *\n * When querying for items, the first container will see only `a` and `b` by default,\n * but with `Query(TextDirective, {descendants: true})` it will see `c` too.\n *\n * The queried directives are kept in a depth-first pre-order with respect to their\n * positions in the DOM.\n *\n * Query does not look deep into any subcomponent views.\n *\n * Query is updated as part of the change-detection cycle. Since change detection\n * happens after construction of a directive, QueryList will always be empty when observed in the\n * constructor.\n *\n * The injected object is an unmodifiable live list.\n * See {@link QueryList} for more details.\n */\nexport var Query: QueryFactory = makeParamDecorator(QueryMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ContentChildrenMetadata.\n/**\n * Configures a content query.\n *\n * Content queries are set before the `ngAfterContentInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Directive({\n *   selector: 'someDir'\n * })\n * class SomeDir {\n *   @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;\n *\n *   ngAfterContentInit() {\n *     // contentChildren is set\n *   }\n * }\n * ```\n */\nexport var ContentChildren: ContentChildrenFactory = makePropDecorator(ContentChildrenMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ContentChildMetadata.\n/**\n * Configures a content query.\n *\n * Content queries are set before the `ngAfterContentInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Directive({\n *   selector: 'someDir'\n * })\n * class SomeDir {\n *   @ContentChild(ChildDirective) contentChild;\n *\n *   ngAfterContentInit() {\n *     // contentChild is set\n *   }\n * }\n * ```\n */\nexport var ContentChild: ContentChildFactory = makePropDecorator(ContentChildMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewChildrenMetadata.\n/**\n * Configures a view query.\n *\n * View queries are set before the `ngAfterViewInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Component({\n *   selector: 'someDir',\n *   templateUrl: 'someTemplate',\n *   directives: [ItemDirective]\n * })\n * class SomeDir {\n *   @ViewChildren(ItemDirective) viewChildren: QueryList<ItemDirective>;\n *\n *   ngAfterViewInit() {\n *     // viewChildren is set\n *   }\n * }\n * ```\n */\nexport var ViewChildren: ViewChildrenFactory = makePropDecorator(ViewChildrenMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewChildMetadata.\n/**\n * Configures a view query.\n *\n * View queries are set before the `ngAfterViewInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Component({\n *   selector: 'someDir',\n *   templateUrl: 'someTemplate',\n *   directives: [ItemDirective]\n * })\n * class SomeDir {\n *   @ViewChild(ItemDirective) viewChild:ItemDirective;\n *\n *   ngAfterViewInit() {\n *     // viewChild is set\n *   }\n * }\n * ```\n */\nexport var ViewChild: ViewChildFactory = makePropDecorator(ViewChildMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from ViewQueryMetadata.\n/**\n * Similar to {@link QueryMetadata}, but querying the component view, instead of\n * the content children.\n *\n * ### Example ([live demo](http://plnkr.co/edit/eNsFHDf7YjyM6IzKxM1j?p=preview))\n *\n * ```javascript\n * @Component({\n *   ...,\n *   template: `\n *     <item> a </item>\n *     <item> b </item>\n *     <item> c </item>\n *   `\n * })\n * class MyComponent {\n *   shown: boolean;\n *\n *   constructor(private @Query(Item) items:QueryList<Item>) {\n *     items.changes.subscribe(() => console.log(items.length));\n *   }\n * }\n * ```\n *\n * Supports the same querying parameters as {@link QueryMetadata}, except\n * `descendants`. This always queries the whole view.\n *\n * As `shown` is flipped between true and false, items will contain zero of one\n * items.\n *\n * Specifies that a {@link QueryList} should be injected.\n *\n * The injected object is an iterable and observable live list.\n * See {@link QueryList} for more details.\n */\nexport var ViewQuery: QueryFactory = makeParamDecorator(ViewQueryMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from PipeMetadata.\n/**\n * Declare reusable pipe function.\n *\n * ### Example\n *\n * {@example core/ts/metadata/metadata.ts region='pipe'}\n */\nexport var Pipe: PipeFactory = <PipeFactory>makeDecorator(PipeMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from InputMetadata.\n/**\n * Declares a data-bound input property.\n *\n * Angular automatically updates data-bound properties during change detection.\n *\n * `InputMetadata` takes an optional parameter that specifies the name\n * used when instantiating a component in the template. When not provided,\n * the name of the decorated property is used.\n *\n * ### Example\n *\n * The following example creates a component with two input properties.\n *\n * ```typescript\n * @Component({\n *   selector: 'bank-account',\n *   template: `\n *     Bank Name: {{bankName}}\n *     Account Id: {{id}}\n *   `\n * })\n * class BankAccount {\n *   @Input() bankName: string;\n *   @Input('account-id') id: string;\n *\n *   // this property is not bound, and won't be automatically updated by Angular\n *   normalizedBankName: string;\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <bank-account bank-name=\"RBC\" account-id=\"4747\"></bank-account>\n *   `,\n *   directives: [BankAccount]\n * })\n * class App {}\n *\n * bootstrap(App);\n * ```\n */\nexport var Input: InputFactory = makePropDecorator(InputMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from OutputMetadata.\n/**\n * Declares an event-bound output property.\n *\n * When an output property emits an event, an event handler attached to that event\n * the template is invoked.\n *\n * `OutputMetadata` takes an optional parameter that specifies the name\n * used when instantiating a component in the template. When not provided,\n * the name of the decorated property is used.\n *\n * ### Example\n *\n * ```typescript\n * @Directive({\n *   selector: 'interval-dir',\n * })\n * class IntervalDir {\n *   @Output() everySecond = new EventEmitter();\n *   @Output('everyFiveSeconds') five5Secs = new EventEmitter();\n *\n *   constructor() {\n *     setInterval(() => this.everySecond.emit(\"event\"), 1000);\n *     setInterval(() => this.five5Secs.emit(\"event\"), 5000);\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <interval-dir (everySecond)=\"everySecond()\" (everyFiveSeconds)=\"everyFiveSeconds()\">\n *     </interval-dir>\n *   `,\n *   directives: [IntervalDir]\n * })\n * class App {\n *   everySecond() { console.log('second'); }\n *   everyFiveSeconds() { console.log('five seconds'); }\n * }\n * bootstrap(App);\n * ```\n */\nexport var Output: OutputFactory = makePropDecorator(OutputMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from HostBindingMetadata.\n/**\n * Declares a host property binding.\n *\n * Angular automatically checks host property bindings during change detection.\n * If a binding changes, it will update the host element of the directive.\n *\n * `HostBindingMetadata` takes an optional parameter that specifies the property\n * name of the host element that will be updated. When not provided,\n * the class property name is used.\n *\n * ### Example\n *\n * The following example creates a directive that sets the `valid` and `invalid` classes\n * on the DOM element that has ngModel directive on it.\n *\n * ```typescript\n * @Directive({selector: '[ngModel]'})\n * class NgModelStatus {\n *   constructor(public control:NgModel) {}\n *   @HostBinding('[class.valid]') get valid { return this.control.valid; }\n *   @HostBinding('[class.invalid]') get invalid { return this.control.invalid; }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `<input [(ngModel)]=\"prop\">`,\n *   directives: [FORM_DIRECTIVES, NgModelStatus]\n * })\n * class App {\n *   prop;\n * }\n *\n * bootstrap(App);\n * ```\n */\nexport var HostBinding: HostBindingFactory = makePropDecorator(HostBindingMetadata);\n\n// TODO(alexeagle): remove the duplication of this doc. It is copied from HostListenerMetadata.\n/**\n * Declares a host listener.\n *\n * Angular will invoke the decorated method when the host element emits the specified event.\n *\n * If the decorated method returns `false`, then `preventDefault` is applied on the DOM\n * event.\n *\n * ### Example\n *\n * The following example declares a directive that attaches a click listener to the button and\n * counts clicks.\n *\n * ```typescript\n * @Directive({selector: 'button[counting]'})\n * class CountClicks {\n *   numberOfClicks = 0;\n *\n *   @HostListener('click', ['$event.target'])\n *   onClick(btn) {\n *     console.log(\"button\", btn, \"number of clicks:\", this.numberOfClicks++);\n *   }\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `<button counting>Increment</button>`,\n *   directives: [CountClicks]\n * })\n * class App {}\n *\n * bootstrap(App);\n * ```\n */\nexport var HostListener: HostListenerFactory = makePropDecorator(HostListenerMetadata);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/metadata.ts\n **/","import {ViewEncapsulation} from 'angular2/src/core/metadata/view';\nimport {Injector, Injectable} from 'angular2/src/core/di';\n\nexport class RenderComponentType {\n  constructor(public id: string, public encapsulation: ViewEncapsulation,\n              public styles: Array<string | any[]>) {}\n}\n\nexport class RenderDebugInfo {\n  constructor(public injector: Injector, public component: any, public providerTokens: any[],\n              public locals: Map<string, any>) {}\n}\n\nexport interface ParentRenderer { renderComponent(componentType: RenderComponentType): Renderer; }\n\nexport abstract class Renderer implements ParentRenderer {\n  abstract renderComponent(componentType: RenderComponentType): Renderer;\n\n  abstract selectRootElement(selector: string): any;\n\n  abstract createElement(parentElement: any, name: string): any;\n\n  abstract createViewRoot(hostElement: any): any;\n\n  abstract createTemplateAnchor(parentElement: any): any;\n\n  abstract createText(parentElement: any, value: string): any;\n\n  abstract projectNodes(parentElement: any, nodes: any[]);\n\n  abstract attachViewAfter(node: any, viewRootNodes: any[]);\n\n  abstract detachView(viewRootNodes: any[]);\n\n  abstract destroyView(hostElement: any, viewAllNodes: any[]);\n\n  abstract listen(renderElement: any, name: string, callback: Function): Function;\n\n  abstract listenGlobal(target: string, name: string, callback: Function): Function;\n\n  abstract setElementProperty(renderElement: any, propertyName: string, propertyValue: any);\n\n  abstract setElementAttribute(renderElement: any, attributeName: string, attributeValue: string);\n\n  /**\n   * Used only in debug mode to serialize property changes to comment nodes,\n   * such as <template> placeholders.\n   */\n  abstract setBindingDebugInfo(renderElement: any, propertyName: string, propertyValue: string);\n\n  abstract setElementDebugInfo(renderElement: any, info: RenderDebugInfo);\n\n  abstract setElementClass(renderElement: any, className: string, isAdd: boolean);\n\n  abstract setElementStyle(renderElement: any, styleName: string, styleValue: string);\n\n  abstract invokeElementMethod(renderElement: any, methodName: string, args: any[]);\n\n  abstract setText(renderNode: any, text: string);\n}\n\n/**\n * Injectable service that provides a low-level interface for modifying the UI.\n *\n * Use this service to bypass Angular's templating and make custom UI changes that can't be\n * expressed declaratively. For example if you need to set a property or an attribute whose name is\n * not statically known, use {@link #setElementProperty} or {@link #setElementAttribute}\n * respectively.\n *\n * If you are implementing a custom renderer, you must implement this interface.\n *\n * The default Renderer implementation is `DomRenderer`. Also available is `WebWorkerRenderer`.\n */\n\nexport abstract class RootRenderer implements ParentRenderer {\n  abstract renderComponent(componentType: RenderComponentType): Renderer;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/render/api.ts\n **/","import {Injectable} from 'angular2/src/core/di';\nimport {Map, MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {CONST, CONST_EXPR, scheduleMicroTask} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {NgZone} from '../zone/ng_zone';\nimport {ObservableWrapper} from 'angular2/src/facade/async';\n\n\n/**\n * The Testability service provides testing hooks that can be accessed from\n * the browser and by services such as Protractor. Each bootstrapped Angular\n * application on the page will have an instance of Testability.\n */\n@Injectable()\nexport class Testability {\n  /** @internal */\n  _pendingCount: number = 0;\n  _isZoneStable: boolean = true;\n  /**\n   * Whether any work was done since the last 'whenStable' callback. This is\n   * useful to detect if this could have potentially destabilized another\n   * component while it is stabilizing.\n   * @internal\n   */\n  _didWork: boolean = false;\n  /** @internal */\n  _callbacks: Function[] = [];\n  constructor(private _ngZone: NgZone) { this._watchAngularEvents(); }\n\n  /** @internal */\n  _watchAngularEvents(): void {\n    ObservableWrapper.subscribe(this._ngZone.onUnstable, (_) => {\n      this._didWork = true;\n      this._isZoneStable = false;\n    });\n\n    this._ngZone.runOutsideAngular(() => {\n      ObservableWrapper.subscribe(this._ngZone.onStable, (_) => {\n        NgZone.assertNotInAngularZone();\n        scheduleMicroTask(() => {\n          this._isZoneStable = true;\n          this._runCallbacksIfReady();\n        });\n      });\n    });\n  }\n\n  increasePendingRequestCount(): number {\n    this._pendingCount += 1;\n    this._didWork = true;\n    return this._pendingCount;\n  }\n\n  decreasePendingRequestCount(): number {\n    this._pendingCount -= 1;\n    if (this._pendingCount < 0) {\n      throw new BaseException('pending async requests below zero');\n    }\n    this._runCallbacksIfReady();\n    return this._pendingCount;\n  }\n\n  isStable(): boolean {\n    return this._isZoneStable && this._pendingCount == 0 && !this._ngZone.hasPendingMacrotasks;\n  }\n\n  /** @internal */\n  _runCallbacksIfReady(): void {\n    if (this.isStable()) {\n      // Schedules the call backs in a new frame so that it is always async.\n      scheduleMicroTask(() => {\n        while (this._callbacks.length !== 0) {\n          (this._callbacks.pop())(this._didWork);\n        }\n        this._didWork = false;\n      });\n    } else {\n      // Not Ready\n      this._didWork = true;\n    }\n  }\n\n  whenStable(callback: Function): void {\n    this._callbacks.push(callback);\n    this._runCallbacksIfReady();\n  }\n\n  getPendingRequestCount(): number { return this._pendingCount; }\n\n  findBindings(using: any, provider: string, exactMatch: boolean): any[] {\n    // TODO(juliemr): implement.\n    return [];\n  }\n\n  findProviders(using: any, provider: string, exactMatch: boolean): any[] {\n    // TODO(juliemr): implement.\n    return [];\n  }\n}\n\n/**\n * A global registry of {@link Testability} instances for specific elements.\n */\n@Injectable()\nexport class TestabilityRegistry {\n  /** @internal */\n  _applications = new Map<any, Testability>();\n\n  constructor() { _testabilityGetter.addToWindow(this); }\n\n  registerApplication(token: any, testability: Testability) {\n    this._applications.set(token, testability);\n  }\n\n  getTestability(elem: any): Testability { return this._applications.get(elem); }\n\n  getAllTestabilities(): Testability[] { return MapWrapper.values(this._applications); }\n\n  getAllRootElements(): any[] { return MapWrapper.keys(this._applications); }\n\n  findTestabilityInTree(elem: Node, findInAncestors: boolean = true): Testability {\n    return _testabilityGetter.findTestabilityInTree(this, elem, findInAncestors);\n  }\n}\n\n/**\n * Adapter interface for retrieving the `Testability` service associated for a\n * particular context.\n */\nexport interface GetTestability {\n  addToWindow(registry: TestabilityRegistry): void;\n  findTestabilityInTree(registry: TestabilityRegistry, elem: any,\n                        findInAncestors: boolean): Testability;\n}\n\n@CONST()\nclass _NoopGetTestability implements GetTestability {\n  addToWindow(registry: TestabilityRegistry): void {}\n  findTestabilityInTree(registry: TestabilityRegistry, elem: any,\n                        findInAncestors: boolean): Testability {\n    return null;\n  }\n}\n\n/**\n * Set the {@link GetTestability} implementation used by the Angular testing framework.\n */\nexport function setTestabilityGetter(getter: GetTestability): void {\n  _testabilityGetter = getter;\n}\n\nvar _testabilityGetter: GetTestability = CONST_EXPR(new _NoopGetTestability());\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/testability/testability.ts\n **/","import {EventEmitter} from 'angular2/src/facade/async';\nimport {NgZoneImpl, NgZoneError} from './ng_zone_impl';\nimport {BaseException} from '../../facade/exceptions';\nexport {NgZoneError} from './ng_zone_impl';\n\n\n/**\n * An injectable service for executing work inside or outside of the Angular zone.\n *\n * The most common use of this service is to optimize performance when starting a work consisting of\n * one or more asynchronous tasks that don't require UI updates or error handling to be handled by\n * Angular. Such tasks can be kicked off via {@link #runOutsideAngular} and if needed, these tasks\n * can reenter the Angular zone via {@link #run}.\n *\n * <!-- TODO: add/fix links to:\n *   - docs explaining zones and the use of zones in Angular and change-detection\n *   - link to runOutsideAngular/run (throughout this file!)\n *   -->\n *\n * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\n * ```\n * import {Component, View, NgZone} from 'angular2/core';\n * import {NgIf} from 'angular2/common';\n *\n * @Component({\n *   selector: 'ng-zone-demo'.\n *   template: `\n *     <h2>Demo: NgZone</h2>\n *\n *     <p>Progress: {{progress}}%</p>\n *     <p *ngIf=\"progress >= 100\">Done processing {{label}} of Angular zone!</p>\n *\n *     <button (click)=\"processWithinAngularZone()\">Process within Angular zone</button>\n *     <button (click)=\"processOutsideOfAngularZone()\">Process outside of Angular zone</button>\n *   `,\n *   directives: [NgIf]\n * })\n * export class NgZoneDemo {\n *   progress: number = 0;\n *   label: string;\n *\n *   constructor(private _ngZone: NgZone) {}\n *\n *   // Loop inside the Angular zone\n *   // so the UI DOES refresh after each setTimeout cycle\n *   processWithinAngularZone() {\n *     this.label = 'inside';\n *     this.progress = 0;\n *     this._increaseProgress(() => console.log('Inside Done!'));\n *   }\n *\n *   // Loop outside of the Angular zone\n *   // so the UI DOES NOT refresh after each setTimeout cycle\n *   processOutsideOfAngularZone() {\n *     this.label = 'outside';\n *     this.progress = 0;\n *     this._ngZone.runOutsideAngular(() => {\n *       this._increaseProgress(() => {\n *       // reenter the Angular zone and display done\n *       this._ngZone.run(() => {console.log('Outside Done!') });\n *     }}));\n *   }\n *\n *\n *   _increaseProgress(doneCallback: () => void) {\n *     this.progress += 1;\n *     console.log(`Current progress: ${this.progress}%`);\n *\n *     if (this.progress < 100) {\n *       window.setTimeout(() => this._increaseProgress(doneCallback)), 10)\n *     } else {\n *       doneCallback();\n *     }\n *   }\n * }\n * ```\n */\nexport class NgZone {\n  static isInAngularZone(): boolean { return NgZoneImpl.isInAngularZone(); }\n  static assertInAngularZone(): void {\n    if (!NgZoneImpl.isInAngularZone()) {\n      throw new BaseException('Expected to be in Angular Zone, but it is not!');\n    }\n  }\n  static assertNotInAngularZone(): void {\n    if (NgZoneImpl.isInAngularZone()) {\n      throw new BaseException('Expected to not be in Angular Zone, but it is!');\n    }\n  }\n\n  private _zoneImpl: NgZoneImpl;\n\n  private _hasPendingMicrotasks: boolean = false;\n  private _hasPendingMacrotasks: boolean = false;\n\n  /** @internal */\n  private _isStable = true;\n  /** @internal */\n  private _nesting = 0;\n  /** @internal */\n  private _onUnstable: EventEmitter<any> = new EventEmitter(false);\n  /** @internal */\n  private _onMicrotaskEmpty: EventEmitter<any> = new EventEmitter(false);\n  /** @internal */\n  private _onStable: EventEmitter<any> = new EventEmitter(false);\n  /** @internal */\n  private _onErrorEvents: EventEmitter<any> = new EventEmitter(false);\n\n  /**\n   * @param {bool} enableLongStackTrace whether to enable long stack trace. They should only be\n   *               enabled in development mode as they significantly impact perf.\n   */\n  constructor({enableLongStackTrace = false}) {\n    this._zoneImpl = new NgZoneImpl({\n      trace: enableLongStackTrace,\n      onEnter: () => {\n        // console.log('ZONE.enter', this._nesting, this._isStable);\n        this._nesting++;\n        if (this._isStable) {\n          this._isStable = false;\n          this._onUnstable.emit(null);\n        }\n      },\n      onLeave: () => {\n        this._nesting--;\n        // console.log('ZONE.leave', this._nesting, this._isStable);\n        this._checkStable();\n      },\n      setMicrotask: (hasMicrotasks: boolean) => {\n        this._hasPendingMicrotasks = hasMicrotasks;\n        this._checkStable();\n      },\n      setMacrotask: (hasMacrotasks: boolean) => { this._hasPendingMacrotasks = hasMacrotasks; },\n      onError: (error: NgZoneError) => this._onErrorEvents.emit(error)\n    });\n  }\n\n  private _checkStable() {\n    if (this._nesting == 0) {\n      if (!this._hasPendingMicrotasks && !this._isStable) {\n        try {\n          // console.log('ZONE.microtaskEmpty');\n          this._nesting++;\n          this._onMicrotaskEmpty.emit(null);\n        } finally {\n          this._nesting--;\n          if (!this._hasPendingMicrotasks) {\n            try {\n              // console.log('ZONE.stable', this._nesting, this._isStable);\n              this.runOutsideAngular(() => this._onStable.emit(null));\n            } finally {\n              this._isStable = true;\n            }\n          }\n        }\n      }\n    }\n  };\n\n  /**\n   * Notifies when code enters Angular Zone. This gets fired first on VM Turn.\n   */\n  get onUnstable(): EventEmitter<any> { return this._onUnstable; }\n\n  /**\n   * Notifies when there is no more microtasks enqueue in the current VM Turn.\n   * This is a hint for Angular to do change detection, which may enqueue more microtasks.\n   * For this reason this event can fire multiple times per VM Turn.\n   */\n  get onMicrotaskEmpty(): EventEmitter<any> { return this._onMicrotaskEmpty; }\n\n  /**\n   * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\n   * implies we are about to relinquish VM turn.\n   * This event gets called just once.\n   */\n  get onStable(): EventEmitter<any> { return this._onStable; }\n\n  /**\n   * Notify that an error has been delivered.\n   */\n  get onError(): EventEmitter<any> { return this._onErrorEvents; }\n\n  /**\n   * Whether there are any outstanding microtasks.\n   */\n  get hasPendingMicrotasks(): boolean { return this._hasPendingMicrotasks; }\n\n  /**\n   * Whether there are any outstanding microtasks.\n   */\n  get hasPendingMacrotasks(): boolean { return this._hasPendingMacrotasks; }\n\n  /**\n   * Executes the `fn` function synchronously within the Angular zone and returns value returned by\n   * the function.\n   *\n   * Running functions via `run` allows you to reenter Angular zone from a task that was executed\n   * outside of the Angular zone (typically started via {@link #runOutsideAngular}).\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * within the Angular zone.\n   */\n  run(fn: () => any): any { return this._zoneImpl.runInner(fn); }\n\n  /**\n   * Executes the `fn` function synchronously in Angular's parent zone and returns value returned by\n   * the function.\n   *\n   * Running functions via `runOutsideAngular` allows you to escape Angular's zone and do work that\n   * doesn't trigger Angular change-detection or is subject to Angular's error handling.\n   *\n   * Any future tasks or microtasks scheduled from within this function will continue executing from\n   * outside of the Angular zone.\n   *\n   * Use {@link #run} to reenter the Angular zone and do work that updates the application model.\n   */\n  runOutsideAngular(fn: () => any): any { return this._zoneImpl.runOuter(fn); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/zone/ng_zone.ts\n **/","import {Injectable} from 'angular2/core';\nimport {isPresent, isJsObject} from 'angular2/src/facade/lang';\nimport {Headers} from './headers';\nimport {ResponseType} from './enums';\nimport {ResponseOptionsArgs} from './interfaces';\n\n/**\n * Creates a response options object to be optionally provided when instantiating a\n * {@link Response}.\n *\n * This class is based on the `ResponseInit` description in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#responseinit).\n *\n * All values are null by default. Typical defaults can be found in the\n * {@link BaseResponseOptions} class, which sub-classes `ResponseOptions`.\n *\n * This class may be used in tests to build {@link Response Responses} for\n * mock responses (see {@link MockBackend}).\n *\n * ### Example ([live demo](http://plnkr.co/edit/P9Jkk8e8cz6NVzbcxEsD?p=preview))\n *\n * ```typescript\n * import {ResponseOptions, Response} from 'angular2/http';\n *\n * var options = new ResponseOptions({\n *   body: '{\"name\":\"Jeff\"}'\n * });\n * var res = new Response(options);\n *\n * console.log('res.json():', res.json()); // Object {name: \"Jeff\"}\n * ```\n */\nexport class ResponseOptions {\n  // TODO: ArrayBuffer | FormData | Blob\n  /**\n   * String or Object representing the body of the {@link Response}.\n   */\n  body: string | Object;\n  /**\n   * Http {@link http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html status code}\n   * associated with the response.\n   */\n  status: number;\n  /**\n   * Response {@link Headers headers}\n   */\n  headers: Headers;\n  /**\n   * @internal\n   */\n  statusText: string;\n  /**\n   * @internal\n   */\n  type: ResponseType;\n  url: string;\n  constructor({body, status, headers, statusText, type, url}: ResponseOptionsArgs = {}) {\n    this.body = isPresent(body) ? body : null;\n    this.status = isPresent(status) ? status : null;\n    this.headers = isPresent(headers) ? headers : null;\n    this.statusText = isPresent(statusText) ? statusText : null;\n    this.type = isPresent(type) ? type : null;\n    this.url = isPresent(url) ? url : null;\n  }\n\n  /**\n   * Creates a copy of the `ResponseOptions` instance, using the optional input as values to\n   * override\n   * existing values. This method will not change the values of the instance on which it is being\n   * called.\n   *\n   * This may be useful when sharing a base `ResponseOptions` object inside tests,\n   * where certain properties may change from test to test.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/1lXquqFfgduTFBWjNoRE?p=preview))\n   *\n   * ```typescript\n   * import {ResponseOptions, Response} from 'angular2/http';\n   *\n   * var options = new ResponseOptions({\n   *   body: {name: 'Jeff'}\n   * });\n   * var res = new Response(options.merge({\n   *   url: 'https://google.com'\n   * }));\n   * console.log('options.url:', options.url); // null\n   * console.log('res.json():', res.json()); // Object {name: \"Jeff\"}\n   * console.log('res.url:', res.url); // https://google.com\n   * ```\n   */\n  merge(options?: ResponseOptionsArgs): ResponseOptions {\n    return new ResponseOptions({\n      body: isPresent(options) && isPresent(options.body) ? options.body : this.body,\n      status: isPresent(options) && isPresent(options.status) ? options.status : this.status,\n      headers: isPresent(options) && isPresent(options.headers) ? options.headers : this.headers,\n      statusText: isPresent(options) && isPresent(options.statusText) ? options.statusText :\n                                                                        this.statusText,\n      type: isPresent(options) && isPresent(options.type) ? options.type : this.type,\n      url: isPresent(options) && isPresent(options.url) ? options.url : this.url,\n    });\n  }\n}\n\n/**\n * Subclass of {@link ResponseOptions}, with default values.\n *\n * Default values:\n *  * status: 200\n *  * headers: empty {@link Headers} object\n *\n * This class could be extended and bound to the {@link ResponseOptions} class\n * when configuring an {@link Injector}, in order to override the default options\n * used by {@link Http} to create {@link Response Responses}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/qv8DLT?p=preview))\n *\n * ```typescript\n * import {provide} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {HTTP_PROVIDERS, Headers, Http, BaseResponseOptions, ResponseOptions} from\n * 'angular2/http';\n * import {App} from './myapp';\n *\n * class MyOptions extends BaseResponseOptions {\n *   headers:Headers = new Headers({network: 'github'});\n * }\n *\n * bootstrap(App, [HTTP_PROVIDERS, provide(ResponseOptions, {useClass: MyOptions})]);\n * ```\n *\n * The options could also be extended when manually creating a {@link Response}\n * object.\n *\n * ### Example ([live demo](http://plnkr.co/edit/VngosOWiaExEtbstDoix?p=preview))\n *\n * ```\n * import {BaseResponseOptions, Response} from 'angular2/http';\n *\n * var options = new BaseResponseOptions();\n * var res = new Response(options.merge({\n *   body: 'Angular2',\n *   headers: new Headers({framework: 'angular'})\n * }));\n * console.log('res.headers.get(\"framework\"):', res.headers.get('framework')); // angular\n * console.log('res.text():', res.text()); // Angular2;\n * ```\n */\n@Injectable()\nexport class BaseResponseOptions extends ResponseOptions {\n  constructor() {\n    super({status: 200, statusText: 'Ok', type: ResponseType.Default, headers: new Headers()});\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/base_response_options.ts\n **/","import {isString} from 'angular2/src/facade/lang';\nimport {RequestMethod} from './enums';\nimport {makeTypeError} from 'angular2/src/facade/exceptions';\nimport {Response} from './static_response';\n\nexport function normalizeMethodName(method: string | RequestMethod): RequestMethod {\n  if (isString(method)) {\n    var originalMethod = method;\n    method = (<string>method)\n                 .replace(/(\\w)(\\w*)/g, (g0: string, g1: string, g2: string) =>\n                                            g1.toUpperCase() + g2.toLowerCase());\n    method = <number>(<{[key: string]: any}>RequestMethod)[method];\n    if (typeof method !== 'number')\n      throw makeTypeError(\n          `Invalid request method. The method \"${originalMethod}\" is not supported.`);\n  }\n  return <RequestMethod>method;\n}\n\nexport const isSuccess = (status: number): boolean => (status >= 200 && status < 300);\n\nexport function getResponseURL(xhr: any): string {\n  if ('responseURL' in xhr) {\n    return xhr.responseURL;\n  }\n  if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n    return xhr.getResponseHeader('X-Request-URL');\n  }\n  return;\n}\n\nexport {isJsObject} from 'angular2/src/facade/lang';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/http_utils.ts\n **/","import {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {Inject, Injectable} from 'angular2/src/core/di';\nimport {SetWrapper} from 'angular2/src/facade/collection';\nimport {DOCUMENT} from './dom_tokens';\n\n@Injectable()\nexport class SharedStylesHost {\n  /** @internal */\n  _styles: string[] = [];\n  /** @internal */\n  _stylesSet = new Set<string>();\n\n  constructor() {}\n\n  addStyles(styles: string[]) {\n    var additions = [];\n    styles.forEach(style => {\n      if (!SetWrapper.has(this._stylesSet, style)) {\n        this._stylesSet.add(style);\n        this._styles.push(style);\n        additions.push(style);\n      }\n    });\n    this.onStylesAdded(additions);\n  }\n\n  onStylesAdded(additions: string[]) {}\n\n  getAllStyles(): string[] { return this._styles; }\n}\n\n@Injectable()\nexport class DomSharedStylesHost extends SharedStylesHost {\n  private _hostNodes = new Set<Node>();\n  constructor(@Inject(DOCUMENT) doc: any) {\n    super();\n    this._hostNodes.add(doc.head);\n  }\n  /** @internal */\n  _addStylesToHost(styles: string[], host: Node) {\n    for (var i = 0; i < styles.length; i++) {\n      var style = styles[i];\n      DOM.appendChild(host, DOM.createStyleElement(style));\n    }\n  }\n  addHost(hostNode: Node) {\n    this._addStylesToHost(this._styles, hostNode);\n    this._hostNodes.add(hostNode);\n  }\n  removeHost(hostNode: Node) { SetWrapper.delete(this._hostNodes, hostNode); }\n\n  onStylesAdded(additions: string[]) {\n    this._hostNodes.forEach((hostNode) => { this._addStylesToHost(additions, hostNode); });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/shared_styles_host.ts\n **/","import {LocationStrategy} from './location_strategy';\nimport {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';\nimport {Injectable, Inject} from 'angular2/core';\n\n/**\n * `Location` is a service that applications can use to interact with a browser's URL.\n * Depending on which {@link LocationStrategy} is used, `Location` will either persist\n * to the URL's path or the URL's hash segment.\n *\n * Note: it's better to use {@link Router#navigate} service to trigger route changes. Use\n * `Location` only if you need to interact with or create normalized URLs outside of\n * routing.\n *\n * `Location` is responsible for normalizing the URL against the application's base href.\n * A normalized URL is absolute from the URL host, includes the application's base href, and has no\n * trailing slash:\n * - `/my/app/user/123` is normalized\n * - `my/app/user/123` **is not** normalized\n * - `/my/app/user/123/` **is not** normalized\n *\n * ### Example\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {\n *   ROUTER_DIRECTIVES,\n *   ROUTER_PROVIDERS,\n *   RouteConfig,\n *   Location\n * } from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   constructor(location: Location) {\n *     location.go('/foo');\n *   }\n * }\n *\n * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\n * ```\n */\n@Injectable()\nexport class Location {\n  /** @internal */\n  _subject: EventEmitter<any> = new EventEmitter();\n  /** @internal */\n  _baseHref: string;\n\n  constructor(public platformStrategy: LocationStrategy) {\n    var browserBaseHref = this.platformStrategy.getBaseHref();\n    this._baseHref = stripTrailingSlash(stripIndexHtml(browserBaseHref));\n    this.platformStrategy.onPopState((ev) => {\n      ObservableWrapper.callEmit(this._subject, {'url': this.path(), 'pop': true, 'type': ev.type});\n    });\n  }\n\n  /**\n   * Returns the normalized URL path.\n   */\n  path(): string { return this.normalize(this.platformStrategy.path()); }\n\n  /**\n   * Given a string representing a URL, returns the normalized URL path without leading or\n   * trailing slashes\n   */\n  normalize(url: string): string {\n    return stripTrailingSlash(_stripBaseHref(this._baseHref, stripIndexHtml(url)));\n  }\n\n  /**\n   * Given a string representing a URL, returns the platform-specific external URL path.\n   * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one\n   * before normalizing. This method will also add a hash if `HashLocationStrategy` is\n   * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n   */\n  prepareExternalUrl(url: string): string {\n    if (url.length > 0 && !url.startsWith('/')) {\n      url = '/' + url;\n    }\n    return this.platformStrategy.prepareExternalUrl(url);\n  }\n\n  // TODO: rename this method to pushState\n  /**\n   * Changes the browsers URL to the normalized version of the given URL, and pushes a\n   * new item onto the platform's history.\n   */\n  go(path: string, query: string = ''): void {\n    this.platformStrategy.pushState(null, '', path, query);\n  }\n\n  /**\n   * Changes the browsers URL to the normalized version of the given URL, and replaces\n   * the top item on the platform's history stack.\n   */\n  replaceState(path: string, query: string = ''): void {\n    this.platformStrategy.replaceState(null, '', path, query);\n  }\n\n  /**\n   * Navigates forward in the platform's history.\n   */\n  forward(): void { this.platformStrategy.forward(); }\n\n  /**\n   * Navigates back in the platform's history.\n   */\n  back(): void { this.platformStrategy.back(); }\n\n  /**\n   * Subscribe to the platform's `popState` events.\n   */\n  subscribe(onNext: (value: any) => void, onThrow: (exception: any) => void = null,\n            onReturn: () => void = null): Object {\n    return ObservableWrapper.subscribe(this._subject, onNext, onThrow, onReturn);\n  }\n}\n\nfunction _stripBaseHref(baseHref: string, url: string): string {\n  if (baseHref.length > 0 && url.startsWith(baseHref)) {\n    return url.substring(baseHref.length);\n  }\n  return url;\n}\n\nfunction stripIndexHtml(url: string): string {\n  if (/\\/index.html$/g.test(url)) {\n    // '/index.html'.length == 11\n    return url.substring(0, url.length - 11);\n  }\n  return url;\n}\n\nfunction stripTrailingSlash(url: string): string {\n  if (/\\/$/g.test(url)) {\n    url = url.substring(0, url.length - 1);\n  }\n  return url;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/location/location.ts\n **/","import {CONST, Type, isPresent} from 'angular2/src/facade/lang';\nimport {RouteDefinition} from '../route_definition';\nimport {RegexSerializer} from '../rules/route_paths/regex_route_path';\n\nexport {RouteDefinition} from '../route_definition';\n\nvar __make_dart_analyzer_happy: Promise<any> = null;\n\n/**\n * The `RouteConfig` decorator defines routes for a given component.\n *\n * It takes an array of {@link RouteDefinition}s.\n */\n@CONST()\nexport class RouteConfig {\n  constructor(public configs: RouteDefinition[]) {}\n}\n\n@CONST()\nexport abstract class AbstractRoute implements RouteDefinition {\n  name: string;\n  useAsDefault: boolean;\n  path: string;\n  regex: string;\n  serializer: RegexSerializer;\n  data: {[key: string]: any};\n\n  constructor({name, useAsDefault, path, regex, serializer, data}: RouteDefinition) {\n    this.name = name;\n    this.useAsDefault = useAsDefault;\n    this.path = path;\n    this.regex = regex;\n    this.serializer = serializer;\n    this.data = data;\n  }\n}\n\n/**\n * `Route` is a type of {@link RouteDefinition} used to route a path to a component.\n *\n * It has the following properties:\n * - `path` is a string that uses the route matcher DSL.\n * - `component` a component type.\n * - `name` is an optional `CamelCase` string representing the name of the route.\n * - `data` is an optional property of any type representing arbitrary route metadata for the given\n * route. It is injectable via {@link RouteData}.\n * - `useAsDefault` is a boolean value. If `true`, the child route will be navigated to if no child\n * route is specified during the navigation.\n *\n * ### Example\n * ```\n * import {RouteConfig, Route} from 'angular2/router';\n *\n * @RouteConfig([\n *   new Route({path: '/home', component: HomeCmp, name: 'HomeCmp' })\n * ])\n * class MyApp {}\n * ```\n */\n@CONST()\nexport class Route extends AbstractRoute {\n  component: any;\n  aux: string = null;\n\n  constructor({name, useAsDefault, path, regex, serializer, data, component}: RouteDefinition) {\n    super({\n      name: name,\n      useAsDefault: useAsDefault,\n      path: path,\n      regex: regex,\n      serializer: serializer,\n      data: data\n    });\n    this.component = component;\n  }\n}\n\n/**\n * `AuxRoute` is a type of {@link RouteDefinition} used to define an auxiliary route.\n *\n * It takes an object with the following properties:\n * - `path` is a string that uses the route matcher DSL.\n * - `component` a component type.\n * - `name` is an optional `CamelCase` string representing the name of the route.\n * - `data` is an optional property of any type representing arbitrary route metadata for the given\n * route. It is injectable via {@link RouteData}.\n *\n * ### Example\n * ```\n * import {RouteConfig, AuxRoute} from 'angular2/router';\n *\n * @RouteConfig([\n *   new AuxRoute({path: '/home', component: HomeCmp})\n * ])\n * class MyApp {}\n * ```\n */\n@CONST()\nexport class AuxRoute extends AbstractRoute {\n  component: any;\n\n  constructor({name, useAsDefault, path, regex, serializer, data, component}: RouteDefinition) {\n    super({\n      name: name,\n      useAsDefault: useAsDefault,\n      path: path,\n      regex: regex,\n      serializer: serializer,\n      data: data\n    });\n    this.component = component;\n  }\n}\n\n/**\n * `AsyncRoute` is a type of {@link RouteDefinition} used to route a path to an asynchronously\n * loaded component.\n *\n * It has the following properties:\n * - `path` is a string that uses the route matcher DSL.\n * - `loader` is a function that returns a promise that resolves to a component.\n * - `name` is an optional `CamelCase` string representing the name of the route.\n * - `data` is an optional property of any type representing arbitrary route metadata for the given\n * route. It is injectable via {@link RouteData}.\n * - `useAsDefault` is a boolean value. If `true`, the child route will be navigated to if no child\n * route is specified during the navigation.\n *\n * ### Example\n * ```\n * import {RouteConfig, AsyncRoute} from 'angular2/router';\n *\n * @RouteConfig([\n *   new AsyncRoute({path: '/home', loader: () => Promise.resolve(MyLoadedCmp), name:\n * 'MyLoadedCmp'})\n * ])\n * class MyApp {}\n * ```\n */\n@CONST()\nexport class AsyncRoute extends AbstractRoute {\n  loader: () => Promise<Type>;\n  aux: string = null;\n\n  constructor({name, useAsDefault, path, regex, serializer, data, loader}: RouteDefinition) {\n    super({\n      name: name,\n      useAsDefault: useAsDefault,\n      path: path,\n      regex: regex,\n      serializer: serializer,\n      data: data\n    });\n    this.loader = loader;\n  }\n}\n\n/**\n * `Redirect` is a type of {@link RouteDefinition} used to route a path to a canonical route.\n *\n * It has the following properties:\n * - `path` is a string that uses the route matcher DSL.\n * - `redirectTo` is an array representing the link DSL.\n *\n * Note that redirects **do not** affect how links are generated. For that, see the `useAsDefault`\n * option.\n *\n * ### Example\n * ```\n * import {RouteConfig, Route, Redirect} from 'angular2/router';\n *\n * @RouteConfig([\n *   new Redirect({path: '/', redirectTo: ['/Home'] }),\n *   new Route({path: '/home', component: HomeCmp, name: 'Home'})\n * ])\n * class MyApp {}\n * ```\n */\n@CONST()\nexport class Redirect extends AbstractRoute {\n  redirectTo: any[];\n\n  constructor({name, useAsDefault, path, regex, serializer, data, redirectTo}: RouteDefinition) {\n    super({\n      name: name,\n      useAsDefault: useAsDefault,\n      path: path,\n      regex: regex,\n      serializer: serializer,\n      data: data\n    });\n    this.redirectTo = redirectTo;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/route_config/route_config_impl.ts\n **/","import {PromiseWrapper, EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';\nimport {Map, StringMapWrapper, MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {isBlank, isString, isPresent, Type, isArray} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {Inject, Injectable} from 'angular2/core';\n\nimport {RouteRegistry, ROUTER_PRIMARY_COMPONENT} from './route_registry';\nimport {\n  ComponentInstruction,\n  Instruction,\n} from './instruction';\nimport {RouterOutlet} from './directives/router_outlet';\nimport {Location} from './location/location';\nimport {getCanActivateHook} from './lifecycle/route_lifecycle_reflector';\nimport {RouteDefinition} from './route_config/route_config_impl';\n\nlet _resolveToTrue = PromiseWrapper.resolve(true);\nlet _resolveToFalse = PromiseWrapper.resolve(false);\n\n/**\n * The `Router` is responsible for mapping URLs to components.\n *\n * You can see the state of the router by inspecting the read-only field `router.navigating`.\n * This may be useful for showing a spinner, for instance.\n *\n * ## Concepts\n *\n * Routers and component instances have a 1:1 correspondence.\n *\n * The router holds reference to a number of {@link RouterOutlet}.\n * An outlet is a placeholder that the router dynamically fills in depending on the current URL.\n *\n * When the router navigates from a URL, it must first recognize it and serialize it into an\n * `Instruction`.\n * The router uses the `RouteRegistry` to get an `Instruction`.\n */\n@Injectable()\nexport class Router {\n  navigating: boolean = false;\n  lastNavigationAttempt: string;\n  /**\n   * The current `Instruction` for the router\n   */\n  public currentInstruction: Instruction = null;\n\n  private _currentNavigation: Promise<any> = _resolveToTrue;\n  private _outlet: RouterOutlet = null;\n\n  private _auxRouters = new Map<string, Router>();\n  private _childRouter: Router;\n\n  private _subject: EventEmitter<any> = new EventEmitter();\n\n\n  constructor(public registry: RouteRegistry, public parent: Router, public hostComponent: any,\n              public root?: Router) {}\n\n  /**\n   * Constructs a child router. You probably don't need to use this unless you're writing a reusable\n   * component.\n   */\n  childRouter(hostComponent: any): Router {\n    return this._childRouter = new ChildRouter(this, hostComponent);\n  }\n\n\n  /**\n   * Constructs a child router. You probably don't need to use this unless you're writing a reusable\n   * component.\n   */\n  auxRouter(hostComponent: any): Router { return new ChildRouter(this, hostComponent); }\n\n  /**\n   * Register an outlet to be notified of primary route changes.\n   *\n   * You probably don't need to use this unless you're writing a reusable component.\n   */\n  registerPrimaryOutlet(outlet: RouterOutlet): Promise<any> {\n    if (isPresent(outlet.name)) {\n      throw new BaseException(`registerPrimaryOutlet expects to be called with an unnamed outlet.`);\n    }\n\n    if (isPresent(this._outlet)) {\n      throw new BaseException(`Primary outlet is already registered.`);\n    }\n\n    this._outlet = outlet;\n    if (isPresent(this.currentInstruction)) {\n      return this.commit(this.currentInstruction, false);\n    }\n    return _resolveToTrue;\n  }\n\n  /**\n   * Unregister an outlet (because it was destroyed, etc).\n   *\n   * You probably don't need to use this unless you're writing a custom outlet implementation.\n   */\n  unregisterPrimaryOutlet(outlet: RouterOutlet): void {\n    if (isPresent(outlet.name)) {\n      throw new BaseException(`registerPrimaryOutlet expects to be called with an unnamed outlet.`);\n    }\n    this._outlet = null;\n  }\n\n\n  /**\n   * Register an outlet to notified of auxiliary route changes.\n   *\n   * You probably don't need to use this unless you're writing a reusable component.\n   */\n  registerAuxOutlet(outlet: RouterOutlet): Promise<any> {\n    var outletName = outlet.name;\n    if (isBlank(outletName)) {\n      throw new BaseException(`registerAuxOutlet expects to be called with an outlet with a name.`);\n    }\n\n    var router = this.auxRouter(this.hostComponent);\n\n    this._auxRouters.set(outletName, router);\n    router._outlet = outlet;\n\n    var auxInstruction;\n    if (isPresent(this.currentInstruction) &&\n        isPresent(auxInstruction = this.currentInstruction.auxInstruction[outletName])) {\n      return router.commit(auxInstruction);\n    }\n    return _resolveToTrue;\n  }\n\n\n  /**\n   * Given an instruction, returns `true` if the instruction is currently active,\n   * otherwise `false`.\n   */\n  isRouteActive(instruction: Instruction): boolean {\n    var router: Router = this;\n    while (isPresent(router.parent) && isPresent(instruction.child)) {\n      router = router.parent;\n      instruction = instruction.child;\n    }\n    return isPresent(this.currentInstruction) &&\n           this.currentInstruction.component == instruction.component;\n  }\n\n\n  /**\n   * Dynamically update the routing configuration and trigger a navigation.\n   *\n   * ### Usage\n   *\n   * ```\n   * router.config([\n   *   { 'path': '/', 'component': IndexComp },\n   *   { 'path': '/user/:id', 'component': UserComp },\n   * ]);\n   * ```\n   */\n  config(definitions: RouteDefinition[]): Promise<any> {\n    definitions.forEach(\n        (routeDefinition) => { this.registry.config(this.hostComponent, routeDefinition); });\n    return this.renavigate();\n  }\n\n\n  /**\n   * Navigate based on the provided Route Link DSL. It's preferred to navigate with this method\n   * over `navigateByUrl`.\n   *\n   * ### Usage\n   *\n   * This method takes an array representing the Route Link DSL:\n   * ```\n   * ['./MyCmp', {param: 3}]\n   * ```\n   * See the {@link RouterLink} directive for more.\n   */\n  navigate(linkParams: any[]): Promise<any> {\n    var instruction = this.generate(linkParams);\n    return this.navigateByInstruction(instruction, false);\n  }\n\n\n  /**\n   * Navigate to a URL. Returns a promise that resolves when navigation is complete.\n   * It's preferred to navigate with `navigate` instead of this method, since URLs are more brittle.\n   *\n   * If the given URL begins with a `/`, router will navigate absolutely.\n   * If the given URL does not begin with `/`, the router will navigate relative to this component.\n   */\n  navigateByUrl(url: string, _skipLocationChange: boolean = false): Promise<any> {\n    return this._currentNavigation = this._currentNavigation.then((_) => {\n      this.lastNavigationAttempt = url;\n      this._startNavigating();\n      return this._afterPromiseFinishNavigating(this.recognize(url).then((instruction) => {\n        if (isBlank(instruction)) {\n          return false;\n        }\n        return this._navigate(instruction, _skipLocationChange);\n      }));\n    });\n  }\n\n\n  /**\n   * Navigate via the provided instruction. Returns a promise that resolves when navigation is\n   * complete.\n   */\n  navigateByInstruction(instruction: Instruction,\n                        _skipLocationChange: boolean = false): Promise<any> {\n    if (isBlank(instruction)) {\n      return _resolveToFalse;\n    }\n    return this._currentNavigation = this._currentNavigation.then((_) => {\n      this._startNavigating();\n      return this._afterPromiseFinishNavigating(this._navigate(instruction, _skipLocationChange));\n    });\n  }\n\n  /** @internal */\n  _settleInstruction(instruction: Instruction): Promise<any> {\n    return instruction.resolveComponent().then((_) => {\n      var unsettledInstructions: Array<Promise<any>> = [];\n\n      if (isPresent(instruction.component)) {\n        instruction.component.reuse = false;\n      }\n\n      if (isPresent(instruction.child)) {\n        unsettledInstructions.push(this._settleInstruction(instruction.child));\n      }\n\n      StringMapWrapper.forEach(instruction.auxInstruction, (instruction: Instruction, _) => {\n        unsettledInstructions.push(this._settleInstruction(instruction));\n      });\n      return PromiseWrapper.all(unsettledInstructions);\n    });\n  }\n\n  /** @internal */\n  _navigate(instruction: Instruction, _skipLocationChange: boolean): Promise<any> {\n    return this._settleInstruction(instruction)\n        .then((_) => this._routerCanReuse(instruction))\n        .then((_) => this._canActivate(instruction))\n        .then((result: boolean) => {\n          if (!result) {\n            return false;\n          }\n          return this._routerCanDeactivate(instruction)\n              .then((result: boolean) => {\n                if (result) {\n                  return this.commit(instruction, _skipLocationChange)\n                      .then((_) => {\n                        this._emitNavigationFinish(instruction.toRootUrl());\n                        return true;\n                      });\n                }\n              });\n        });\n  }\n\n  private _emitNavigationFinish(url): void { ObservableWrapper.callEmit(this._subject, url); }\n  _emitNavigationFail(url): void { ObservableWrapper.callError(this._subject, url); }\n\n  private _afterPromiseFinishNavigating(promise: Promise<any>): Promise<any> {\n    return PromiseWrapper.catchError(promise.then((_) => this._finishNavigating()), (err) => {\n      this._finishNavigating();\n      throw err;\n    });\n  }\n\n  /*\n   * Recursively set reuse flags\n   */\n  /** @internal */\n  _routerCanReuse(instruction: Instruction): Promise<any> {\n    if (isBlank(this._outlet)) {\n      return _resolveToFalse;\n    }\n    if (isBlank(instruction.component)) {\n      return _resolveToTrue;\n    }\n    return this._outlet.routerCanReuse(instruction.component)\n        .then((result) => {\n          instruction.component.reuse = result;\n          if (result && isPresent(this._childRouter) && isPresent(instruction.child)) {\n            return this._childRouter._routerCanReuse(instruction.child);\n          }\n        });\n  }\n\n  private _canActivate(nextInstruction: Instruction): Promise<boolean> {\n    return canActivateOne(nextInstruction, this.currentInstruction);\n  }\n\n  private _routerCanDeactivate(instruction: Instruction): Promise<boolean> {\n    if (isBlank(this._outlet)) {\n      return _resolveToTrue;\n    }\n    var next: Promise<boolean>;\n    var childInstruction: Instruction = null;\n    var reuse: boolean = false;\n    var componentInstruction: ComponentInstruction = null;\n    if (isPresent(instruction)) {\n      childInstruction = instruction.child;\n      componentInstruction = instruction.component;\n      reuse = isBlank(instruction.component) || instruction.component.reuse;\n    }\n    if (reuse) {\n      next = _resolveToTrue;\n    } else {\n      next = this._outlet.routerCanDeactivate(componentInstruction);\n    }\n    // TODO: aux route lifecycle hooks\n    return next.then<boolean>((result): boolean | Promise<boolean> => {\n      if (result == false) {\n        return false;\n      }\n      if (isPresent(this._childRouter)) {\n        return this._childRouter._routerCanDeactivate(childInstruction);\n      }\n      return true;\n    });\n  }\n\n  /**\n   * Updates this router and all descendant routers according to the given instruction\n   */\n  commit(instruction: Instruction, _skipLocationChange: boolean = false): Promise<any> {\n    this.currentInstruction = instruction;\n\n    var next: Promise<any> = _resolveToTrue;\n    if (isPresent(this._outlet) && isPresent(instruction.component)) {\n      var componentInstruction = instruction.component;\n      if (componentInstruction.reuse) {\n        next = this._outlet.reuse(componentInstruction);\n      } else {\n        next =\n            this.deactivate(instruction).then((_) => this._outlet.activate(componentInstruction));\n      }\n      if (isPresent(instruction.child)) {\n        next = next.then((_) => {\n          if (isPresent(this._childRouter)) {\n            return this._childRouter.commit(instruction.child);\n          }\n        });\n      }\n    }\n\n    var promises: Promise<any>[] = [];\n    this._auxRouters.forEach((router, name) => {\n      if (isPresent(instruction.auxInstruction[name])) {\n        promises.push(router.commit(instruction.auxInstruction[name]));\n      }\n    });\n\n    return next.then((_) => PromiseWrapper.all(promises));\n  }\n\n\n  /** @internal */\n  _startNavigating(): void { this.navigating = true; }\n\n  /** @internal */\n  _finishNavigating(): void { this.navigating = false; }\n\n\n  /**\n   * Subscribe to URL updates from the router\n   */\n  subscribe(onNext: (value: any) => void, onError?: (value: any) => void): Object {\n    return ObservableWrapper.subscribe(this._subject, onNext, onError);\n  }\n\n\n  /**\n   * Removes the contents of this router's outlet and all descendant outlets\n   */\n  deactivate(instruction: Instruction): Promise<any> {\n    var childInstruction: Instruction = null;\n    var componentInstruction: ComponentInstruction = null;\n    if (isPresent(instruction)) {\n      childInstruction = instruction.child;\n      componentInstruction = instruction.component;\n    }\n    var next: Promise<any> = _resolveToTrue;\n    if (isPresent(this._childRouter)) {\n      next = this._childRouter.deactivate(childInstruction);\n    }\n    if (isPresent(this._outlet)) {\n      next = next.then((_) => this._outlet.deactivate(componentInstruction));\n    }\n\n    // TODO: handle aux routes\n\n    return next;\n  }\n\n\n  /**\n   * Given a URL, returns an instruction representing the component graph\n   */\n  recognize(url: string): Promise<Instruction> {\n    var ancestorComponents = this._getAncestorInstructions();\n    return this.registry.recognize(url, ancestorComponents);\n  }\n\n  private _getAncestorInstructions(): Instruction[] {\n    var ancestorInstructions: Instruction[] = [this.currentInstruction];\n    var ancestorRouter: Router = this;\n    while (isPresent(ancestorRouter = ancestorRouter.parent)) {\n      ancestorInstructions.unshift(ancestorRouter.currentInstruction);\n    }\n    return ancestorInstructions;\n  }\n\n\n  /**\n   * Navigates to either the last URL successfully navigated to, or the last URL requested if the\n   * router has yet to successfully navigate.\n   */\n  renavigate(): Promise<any> {\n    if (isBlank(this.lastNavigationAttempt)) {\n      return this._currentNavigation;\n    }\n    return this.navigateByUrl(this.lastNavigationAttempt);\n  }\n\n\n  /**\n   * Generate an `Instruction` based on the provided Route Link DSL.\n   */\n  generate(linkParams: any[]): Instruction {\n    var ancestorInstructions = this._getAncestorInstructions();\n    return this.registry.generate(linkParams, ancestorInstructions);\n  }\n}\n\n@Injectable()\nexport class RootRouter extends Router {\n  /** @internal */\n  _location: Location;\n  /** @internal */\n  _locationSub: Object;\n\n  constructor(registry: RouteRegistry, location: Location,\n              @Inject(ROUTER_PRIMARY_COMPONENT) primaryComponent: Type) {\n    super(registry, null, primaryComponent);\n    this.root = this;\n    this._location = location;\n    this._locationSub = this._location.subscribe((change) => {\n      // we call recognize ourselves\n      this.recognize(change['url'])\n          .then((instruction) => {\n            if (isPresent(instruction)) {\n              this.navigateByInstruction(instruction, isPresent(change['pop']))\n                  .then((_) => {\n                    // this is a popstate event; no need to change the URL\n                    if (isPresent(change['pop']) && change['type'] != 'hashchange') {\n                      return;\n                    }\n                    var emitPath = instruction.toUrlPath();\n                    var emitQuery = instruction.toUrlQuery();\n                    if (emitPath.length > 0 && emitPath[0] != '/') {\n                      emitPath = '/' + emitPath;\n                    }\n\n                    // Because we've opted to use All hashchange events occur outside Angular.\n                    // However, apps that are migrating might have hash links that operate outside\n                    // angular to which routing must respond.\n                    // To support these cases where we respond to hashchanges and redirect as a\n                    // result, we need to replace the top item on the stack.\n                    if (change['type'] == 'hashchange') {\n                      if (instruction.toRootUrl() != this._location.path()) {\n                        this._location.replaceState(emitPath, emitQuery);\n                      }\n                    } else {\n                      this._location.go(emitPath, emitQuery);\n                    }\n                  });\n            } else {\n              this._emitNavigationFail(change['url']);\n            }\n          });\n    });\n\n    this.registry.configFromComponent(primaryComponent);\n    this.navigateByUrl(location.path());\n  }\n\n  commit(instruction: Instruction, _skipLocationChange: boolean = false): Promise<any> {\n    var emitPath = instruction.toUrlPath();\n    var emitQuery = instruction.toUrlQuery();\n    if (emitPath.length > 0 && emitPath[0] != '/') {\n      emitPath = '/' + emitPath;\n    }\n    var promise = super.commit(instruction);\n    if (!_skipLocationChange) {\n      promise = promise.then((_) => { this._location.go(emitPath, emitQuery); });\n    }\n    return promise;\n  }\n\n  dispose(): void {\n    if (isPresent(this._locationSub)) {\n      ObservableWrapper.dispose(this._locationSub);\n      this._locationSub = null;\n    }\n  }\n}\n\nclass ChildRouter extends Router {\n  constructor(parent: Router, hostComponent) {\n    super(parent.registry, parent, hostComponent, parent.root);\n    this.parent = parent;\n  }\n\n\n  navigateByUrl(url: string, _skipLocationChange: boolean = false): Promise<any> {\n    // Delegate navigation to the root router\n    return this.parent.navigateByUrl(url, _skipLocationChange);\n  }\n\n  navigateByInstruction(instruction: Instruction,\n                        _skipLocationChange: boolean = false): Promise<any> {\n    // Delegate navigation to the root router\n    return this.parent.navigateByInstruction(instruction, _skipLocationChange);\n  }\n}\n\n\nfunction canActivateOne(nextInstruction: Instruction,\n                        prevInstruction: Instruction): Promise<boolean> {\n  var next = _resolveToTrue;\n  if (isBlank(nextInstruction.component)) {\n    return next;\n  }\n  if (isPresent(nextInstruction.child)) {\n    next = canActivateOne(nextInstruction.child,\n                          isPresent(prevInstruction) ? prevInstruction.child : null);\n  }\n  return next.then<boolean>((result: boolean): boolean => {\n    if (result == false) {\n      return false;\n    }\n    if (nextInstruction.component.reuse) {\n      return true;\n    }\n    var hook = getCanActivateHook(nextInstruction.component.componentType);\n    if (isPresent(hook)) {\n      return hook(nextInstruction.component,\n                  isPresent(prevInstruction) ? prevInstruction.component : null);\n    }\n    return true;\n  });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/router.ts\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * an error thrown when an action is invalid because the object\n * has been unsubscribed\n */\nvar ObjectUnsubscribedError = (function (_super) {\n    __extends(ObjectUnsubscribedError, _super);\n    function ObjectUnsubscribedError() {\n        _super.call(this, 'object unsubscribed');\n        this.name = 'ObjectUnsubscribedError';\n    }\n    return ObjectUnsubscribedError;\n}(Error));\nexports.ObjectUnsubscribedError = ObjectUnsubscribedError;\n//# sourceMappingURL=ObjectUnsubscribedError.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/ObjectUnsubscribedError.js\n ** module id = 166\n ** module chunks = 1\n **/","\"use strict\";\nfunction isPromise(value) {\n    return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\nexports.isPromise = isPromise;\n//# sourceMappingURL=isPromise.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/isPromise.js\n ** module id = 168\n ** module chunks = 1\n **/","export {AngularEntrypoint} from 'angular2/src/core/angular_entrypoint';\nexport {\n  BROWSER_PROVIDERS,\n  ELEMENT_PROBE_PROVIDERS,\n  ELEMENT_PROBE_PROVIDERS_PROD_MODE,\n  inspectNativeElement,\n  BrowserDomAdapter,\n  By,\n  Title,\n  DOCUMENT,\n  enableDebugTools,\n  disableDebugTools\n} from 'angular2/src/platform/browser_common';\n\nimport {Type, isPresent, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {\n  BROWSER_PROVIDERS,\n  BROWSER_APP_COMMON_PROVIDERS\n} from 'angular2/src/platform/browser_common';\nimport {COMPILER_PROVIDERS} from 'angular2/compiler';\nimport {ComponentRef, platform, reflector} from 'angular2/core';\nimport {ReflectionCapabilities} from 'angular2/src/core/reflection/reflection_capabilities';\nimport {XHRImpl} from \"angular2/src/platform/browser/xhr_impl\";\nimport {XHR} from 'angular2/compiler';\nimport {Provider} from 'angular2/src/core/di';\n\n/**\n * An array of providers that should be passed into `application()` when bootstrapping a component.\n */\nexport const BROWSER_APP_PROVIDERS: Array<any /*Type | Provider | any[]*/> = CONST_EXPR([\n  BROWSER_APP_COMMON_PROVIDERS,\n  COMPILER_PROVIDERS,\n  new Provider(XHR, {useClass: XHRImpl}),\n]);\n\n/**\n * Bootstrapping for Angular applications.\n *\n * You instantiate an Angular application by explicitly specifying a component to use\n * as the root component for your application via the `bootstrap()` method.\n *\n * ## Simple Example\n *\n * Assuming this `index.html`:\n *\n * ```html\n * <html>\n *   <!-- load Angular script tags here. -->\n *   <body>\n *     <my-app>loading...</my-app>\n *   </body>\n * </html>\n * ```\n *\n * An application is bootstrapped inside an existing browser DOM, typically `index.html`.\n * Unlike Angular 1, Angular 2 does not compile/process providers in `index.html`. This is\n * mainly for security reasons, as well as architectural changes in Angular 2. This means\n * that `index.html` can safely be processed using server-side technologies such as\n * providers. Bindings can thus use double-curly `{{ syntax }}` without collision from\n * Angular 2 component double-curly `{{ syntax }}`.\n *\n * We can use this script code:\n *\n * {@example core/ts/bootstrap/bootstrap.ts region='bootstrap'}\n *\n * When the app developer invokes `bootstrap()` with the root component `MyApp` as its\n * argument, Angular performs the following tasks:\n *\n *  1. It uses the component's `selector` property to locate the DOM element which needs\n *     to be upgraded into the angular component.\n *  2. It creates a new child injector (from the platform injector). Optionally, you can\n *     also override the injector configuration for an app by invoking `bootstrap` with the\n *     `componentInjectableBindings` argument.\n *  3. It creates a new `Zone` and connects it to the angular application's change detection\n *     domain instance.\n *  4. It creates an emulated or shadow DOM on the selected component's host element and loads the\n *     template into it.\n *  5. It instantiates the specified component.\n *  6. Finally, Angular performs change detection to apply the initial data providers for the\n *     application.\n *\n *\n * ## Bootstrapping Multiple Applications\n *\n * When working within a browser window, there are many singleton resources: cookies, title,\n * location, and others. Angular services that represent these resources must likewise be\n * shared across all Angular applications that occupy the same browser window. For this\n * reason, Angular creates exactly one global platform object which stores all shared\n * services, and each angular application injector has the platform injector as its parent.\n *\n * Each application has its own private injector as well. When there are multiple\n * applications on a page, Angular treats each application injector's services as private\n * to that application.\n *\n * ## API\n *\n * - `appComponentType`: The root component which should act as the application. This is\n *   a reference to a `Type` which is annotated with `@Component(...)`.\n * - `customProviders`: An additional set of providers that can be added to the\n *   app injector to override default injection behavior.\n *\n * Returns a `Promise` of {@link ComponentRef}.\n */\nexport function bootstrap(\n    appComponentType: Type,\n    customProviders?: Array<any /*Type | Provider | any[]*/>): Promise<ComponentRef> {\n  reflector.reflectionCapabilities = new ReflectionCapabilities();\n  let appProviders =\n      isPresent(customProviders) ? [BROWSER_APP_PROVIDERS, customProviders] : BROWSER_APP_PROVIDERS;\n  return platform(BROWSER_PROVIDERS).application(appProviders).bootstrap(appComponentType);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/platform/browser.ts\n **/","/**\n * This is a set of classes and objects that can be used both in the browser and on the server.\n */\nexport {DOM, setRootDomAdapter, DomAdapter} from 'angular2/src/platform/dom/dom_adapter';\nexport {DomRenderer} from 'angular2/src/platform/dom/dom_renderer';\nexport {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens';\nexport {SharedStylesHost, DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host';\nexport {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events';\nexport {\n  EVENT_MANAGER_PLUGINS,\n  EventManager,\n  EventManagerPlugin\n} from 'angular2/src/platform/dom/events/event_manager';\nexport * from 'angular2/src/platform/dom/debug/by';\nexport * from 'angular2/src/platform/dom/debug/ng_probe';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/platform/common_dom.ts\n **/","import {Directive, Host, ViewContainerRef, TemplateRef} from 'angular2/core';\nimport {isPresent, isBlank, normalizeBlank, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {ListWrapper, Map} from 'angular2/src/facade/collection';\n\nconst _WHEN_DEFAULT = CONST_EXPR(new Object());\n\nexport class SwitchView {\n  constructor(private _viewContainerRef: ViewContainerRef, private _templateRef: TemplateRef) {}\n\n  create(): void { this._viewContainerRef.createEmbeddedView(this._templateRef); }\n\n  destroy(): void { this._viewContainerRef.clear(); }\n}\n\n/**\n * Adds or removes DOM sub-trees when their match expressions match the switch expression.\n *\n * Elements within `NgSwitch` but without `NgSwitchWhen` or `NgSwitchDefault` directives will be\n * preserved at the location as specified in the template.\n *\n * `NgSwitch` simply inserts nested elements based on which match expression matches the value\n * obtained from the evaluated switch expression. In other words, you define a container element\n * (where you place the directive with a switch expression on the\n * **`[ngSwitch]=\"...\"` attribute**), define any inner elements inside of the directive and\n * place a `[ngSwitchWhen]` attribute per element.\n *\n * The `ngSwitchWhen` property is used to inform `NgSwitch` which element to display when the\n * expression is evaluated. If a matching expression is not found via a `ngSwitchWhen` property\n * then an element with the `ngSwitchDefault` attribute is displayed.\n *\n * ### Example ([live demo](http://plnkr.co/edit/DQMTII95CbuqWrl3lYAs?p=preview))\n *\n * ```typescript\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <p>Value = {{value}}</p>\n *     <button (click)=\"inc()\">Increment</button>\n *\n *     <div [ngSwitch]=\"value\">\n *       <p *ngSwitchWhen=\"'init'\">increment to start</p>\n *       <p *ngSwitchWhen=\"0\">0, increment again</p>\n *       <p *ngSwitchWhen=\"1\">1, increment again</p>\n *       <p *ngSwitchWhen=\"2\">2, stop incrementing</p>\n *       <p *ngSwitchDefault>&gt; 2, STOP!</p>\n *     </div>\n *\n *     <!-- alternate syntax -->\n *\n *     <p [ngSwitch]=\"value\">\n *       <template ngSwitchWhen=\"init\">increment to start</template>\n *       <template [ngSwitchWhen]=\"0\">0, increment again</template>\n *       <template [ngSwitchWhen]=\"1\">1, increment again</template>\n *       <template [ngSwitchWhen]=\"2\">2, stop incrementing</template>\n *       <template ngSwitchDefault>&gt; 2, STOP!</template>\n *     </p>\n *   `,\n *   directives: [NgSwitch, NgSwitchWhen, NgSwitchDefault]\n * })\n * export class App {\n *   value = 'init';\n *\n *   inc() {\n *     this.value = this.value === 'init' ? 0 : this.value + 1;\n *   }\n * }\n *\n * bootstrap(App).catch(err => console.error(err));\n * ```\n */\n@Directive({selector: '[ngSwitch]', inputs: ['ngSwitch']})\nexport class NgSwitch {\n  private _switchValue: any;\n  private _useDefault: boolean = false;\n  private _valueViews = new Map<any, SwitchView[]>();\n  private _activeViews: SwitchView[] = [];\n\n  set ngSwitch(value: any) {\n    // Empty the currently active ViewContainers\n    this._emptyAllActiveViews();\n\n    // Add the ViewContainers matching the value (with a fallback to default)\n    this._useDefault = false;\n    var views = this._valueViews.get(value);\n    if (isBlank(views)) {\n      this._useDefault = true;\n      views = normalizeBlank(this._valueViews.get(_WHEN_DEFAULT));\n    }\n    this._activateViews(views);\n\n    this._switchValue = value;\n  }\n\n  /** @internal */\n  _onWhenValueChanged(oldWhen: any, newWhen: any, view: SwitchView): void {\n    this._deregisterView(oldWhen, view);\n    this._registerView(newWhen, view);\n\n    if (oldWhen === this._switchValue) {\n      view.destroy();\n      ListWrapper.remove(this._activeViews, view);\n    } else if (newWhen === this._switchValue) {\n      if (this._useDefault) {\n        this._useDefault = false;\n        this._emptyAllActiveViews();\n      }\n      view.create();\n      this._activeViews.push(view);\n    }\n\n    // Switch to default when there is no more active ViewContainers\n    if (this._activeViews.length === 0 && !this._useDefault) {\n      this._useDefault = true;\n      this._activateViews(this._valueViews.get(_WHEN_DEFAULT));\n    }\n  }\n\n  /** @internal */\n  _emptyAllActiveViews(): void {\n    var activeContainers = this._activeViews;\n    for (var i = 0; i < activeContainers.length; i++) {\n      activeContainers[i].destroy();\n    }\n    this._activeViews = [];\n  }\n\n  /** @internal */\n  _activateViews(views: SwitchView[]): void {\n    // TODO(vicb): assert(this._activeViews.length === 0);\n    if (isPresent(views)) {\n      for (var i = 0; i < views.length; i++) {\n        views[i].create();\n      }\n      this._activeViews = views;\n    }\n  }\n\n  /** @internal */\n  _registerView(value: any, view: SwitchView): void {\n    var views = this._valueViews.get(value);\n    if (isBlank(views)) {\n      views = [];\n      this._valueViews.set(value, views);\n    }\n    views.push(view);\n  }\n\n  /** @internal */\n  _deregisterView(value: any, view: SwitchView): void {\n    // `_WHEN_DEFAULT` is used a marker for non-registered whens\n    if (value === _WHEN_DEFAULT) return;\n    var views = this._valueViews.get(value);\n    if (views.length == 1) {\n      this._valueViews.delete(value);\n    } else {\n      ListWrapper.remove(views, view);\n    }\n  }\n}\n\n/**\n * Insert the sub-tree when the `ngSwitchWhen` expression evaluates to the same value as the\n * enclosing switch expression.\n *\n * If multiple match expression match the switch expression value, all of them are displayed.\n *\n * See {@link NgSwitch} for more details and example.\n */\n@Directive({selector: '[ngSwitchWhen]', inputs: ['ngSwitchWhen']})\nexport class NgSwitchWhen {\n  // `_WHEN_DEFAULT` is used as a marker for a not yet initialized value\n  /** @internal */\n  _value: any = _WHEN_DEFAULT;\n  /** @internal */\n  _view: SwitchView;\n  private _switch: NgSwitch;\n\n  constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef,\n              @Host() ngSwitch: NgSwitch) {\n    this._switch = ngSwitch;\n    this._view = new SwitchView(viewContainer, templateRef);\n  }\n\n  set ngSwitchWhen(value: any) {\n    this._switch._onWhenValueChanged(this._value, value, this._view);\n    this._value = value;\n  }\n}\n\n/**\n * Default case statements are displayed when no match expression matches the switch expression\n * value.\n *\n * See {@link NgSwitch} for more details and example.\n */\n@Directive({selector: '[ngSwitchDefault]'})\nexport class NgSwitchDefault {\n  constructor(viewContainer: ViewContainerRef, templateRef: TemplateRef,\n              @Host() sswitch: NgSwitch) {\n    sswitch._registerView(_WHEN_DEFAULT, new SwitchView(viewContainer, templateRef));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/ng_switch.ts\n **/","import {AbstractControl} from '../model';\nimport {isPresent} from 'angular2/src/facade/lang';\nimport {unimplemented} from 'angular2/src/facade/exceptions';\n\n/**\n * Base class for control directives.\n *\n * Only used internally in the forms module.\n */\nexport abstract class AbstractControlDirective {\n  get control(): AbstractControl { return unimplemented(); }\n\n  get value(): any { return isPresent(this.control) ? this.control.value : null; }\n\n  get valid(): boolean { return isPresent(this.control) ? this.control.valid : null; }\n\n  get errors(): {[key: string]: any} {\n    return isPresent(this.control) ? this.control.errors : null;\n  }\n\n  get pristine(): boolean { return isPresent(this.control) ? this.control.pristine : null; }\n\n  get dirty(): boolean { return isPresent(this.control) ? this.control.dirty : null; }\n\n  get touched(): boolean { return isPresent(this.control) ? this.control.touched : null; }\n\n  get untouched(): boolean { return isPresent(this.control) ? this.control.untouched : null; }\n\n  get path(): string[] { return null; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/abstract_control_directive.ts\n **/","import {\n  OnInit,\n  OnDestroy,\n  Directive,\n  Optional,\n  Inject,\n  Host,\n  SkipSelf,\n  forwardRef,\n  Provider,\n  Self\n} from 'angular2/core';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\nimport {ControlContainer} from './control_container';\nimport {controlPath, composeValidators, composeAsyncValidators} from './shared';\nimport {ControlGroup} from '../model';\nimport {Form} from './form_interface';\nimport {NG_VALIDATORS, NG_ASYNC_VALIDATORS} from '../validators';\nimport {AsyncValidatorFn, ValidatorFn} from './validators';\n\nconst controlGroupProvider =\n    CONST_EXPR(new Provider(ControlContainer, {useExisting: forwardRef(() => NgControlGroup)}));\n\n/**\n * Creates and binds a control group to a DOM element.\n *\n * This directive can only be used as a child of {@link NgForm} or {@link NgFormModel}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/7EJ11uGeaggViYM6T5nq?p=preview))\n *\n * ```typescript\n * @Component({\n *   selector: 'my-app',\n *   directives: [FORM_DIRECTIVES],\n *   template: `\n *     <div>\n *       <h2>Angular2 Control &amp; ControlGroup Example</h2>\n *       <form #f=\"ngForm\">\n *         <div ngControlGroup=\"name\" #cg-name=\"form\">\n *           <h3>Enter your name:</h3>\n *           <p>First: <input ngControl=\"first\" required></p>\n *           <p>Middle: <input ngControl=\"middle\"></p>\n *           <p>Last: <input ngControl=\"last\" required></p>\n *         </div>\n *         <h3>Name value:</h3>\n *         <pre>{{valueOf(cgName)}}</pre>\n *         <p>Name is {{cgName?.control?.valid ? \"valid\" : \"invalid\"}}</p>\n *         <h3>What's your favorite food?</h3>\n *         <p><input ngControl=\"food\"></p>\n *         <h3>Form value</h3>\n *         <pre>{{valueOf(f)}}</pre>\n *       </form>\n *     </div>\n *   `,\n *   directives: [FORM_DIRECTIVES]\n * })\n * export class App {\n *   valueOf(cg: NgControlGroup): string {\n *     if (cg.control == null) {\n *       return null;\n *     }\n *     return JSON.stringify(cg.control.value, null, 2);\n *   }\n * }\n * ```\n *\n * This example declares a control group for a user's name. The value and validation state of\n * this group can be accessed separately from the overall form.\n */\n@Directive({\n  selector: '[ngControlGroup]',\n  providers: [controlGroupProvider],\n  inputs: ['name: ngControlGroup'],\n  exportAs: 'ngForm'\n})\nexport class NgControlGroup extends ControlContainer implements OnInit,\n    OnDestroy {\n  /** @internal */\n  _parent: ControlContainer;\n\n  constructor(@Host() @SkipSelf() parent: ControlContainer,\n              @Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n              @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n    super();\n    this._parent = parent;\n  }\n\n  ngOnInit(): void { this.formDirective.addControlGroup(this); }\n\n  ngOnDestroy(): void { this.formDirective.removeControlGroup(this); }\n\n  /**\n   * Get the {@link ControlGroup} backing this binding.\n   */\n  get control(): ControlGroup { return this.formDirective.getControlGroup(this); }\n\n  /**\n   * Get the path to this control group.\n   */\n  get path(): string[] { return controlPath(this.name, this._parent); }\n\n  /**\n   * Get the {@link Form} to which this group belongs.\n   */\n  get formDirective(): Form { return this._parent.formDirective; }\n\n  get validator(): ValidatorFn { return composeValidators(this._validators); }\n\n  get asyncValidator(): AsyncValidatorFn { return composeAsyncValidators(this._asyncValidators); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_control_group.ts\n **/","import {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';\n\nimport {\n  OnChanges,\n  OnDestroy,\n  SimpleChange,\n  Query,\n  Directive,\n  forwardRef,\n  Host,\n  SkipSelf,\n  Provider,\n  Inject,\n  Optional,\n  Self\n} from 'angular2/core';\n\nimport {ControlContainer} from './control_container';\nimport {NgControl} from './ng_control';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {\n  controlPath,\n  composeValidators,\n  composeAsyncValidators,\n  isPropertyUpdated,\n  selectValueAccessor\n} from './shared';\nimport {Control} from '../model';\nimport {NG_VALIDATORS, NG_ASYNC_VALIDATORS} from '../validators';\nimport {ValidatorFn, AsyncValidatorFn} from './validators';\n\n\nconst controlNameBinding =\n    CONST_EXPR(new Provider(NgControl, {useExisting: forwardRef(() => NgControlName)}));\n\n/**\n * Creates and binds a control with a specified name to a DOM element.\n *\n * This directive can only be used as a child of {@link NgForm} or {@link NgFormModel}.\n\n * ### Example\n *\n * In this example, we create the login and password controls.\n * We can work with each control separately: check its validity, get its value, listen to its\n * changes.\n *\n *  ```\n * @Component({\n *      selector: \"login-comp\",\n *      directives: [FORM_DIRECTIVES],\n *      template: `\n *        <form #f=\"ngForm\" (submit)='onLogIn(f.value)'>\n *          Login <input type='text' ngControl='login' #l=\"form\">\n *          <div *ngIf=\"!l.valid\">Login is invalid</div>\n *\n *          Password <input type='password' ngControl='password'>\n *          <button type='submit'>Log in!</button>\n *        </form>\n *      `})\n * class LoginComp {\n *  onLogIn(value): void {\n *    // value === {login: 'some login', password: 'some password'}\n *  }\n * }\n *  ```\n *\n * We can also use ngModel to bind a domain model to the form.\n *\n *  ```\n * @Component({\n *      selector: \"login-comp\",\n *      directives: [FORM_DIRECTIVES],\n *      template: `\n *        <form (submit)='onLogIn()'>\n *          Login <input type='text' ngControl='login' [(ngModel)]=\"credentials.login\">\n *          Password <input type='password' ngControl='password'\n *                          [(ngModel)]=\"credentials.password\">\n *          <button type='submit'>Log in!</button>\n *        </form>\n *      `})\n * class LoginComp {\n *  credentials: {login:string, password:string};\n *\n *  onLogIn(): void {\n *    // this.credentials.login === \"some login\"\n *    // this.credentials.password === \"some password\"\n *  }\n * }\n *  ```\n */\n@Directive({\n  selector: '[ngControl]',\n  bindings: [controlNameBinding],\n  inputs: ['name: ngControl', 'model: ngModel'],\n  outputs: ['update: ngModelChange'],\n  exportAs: 'ngForm'\n})\nexport class NgControlName extends NgControl implements OnChanges,\n    OnDestroy {\n  /** @internal */\n  update = new EventEmitter();\n  model: any;\n  viewModel: any;\n  private _added = false;\n\n  constructor(@Host() @SkipSelf() private _parent: ControlContainer,\n              @Optional() @Self() @Inject(NG_VALIDATORS) private _validators:\n                  /* Array<Validator|Function> */ any[],\n              @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators:\n                  /* Array<Validator|Function> */ any[],\n              @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n              valueAccessors: ControlValueAccessor[]) {\n    super();\n    this.valueAccessor = selectValueAccessor(this, valueAccessors);\n  }\n\n  ngOnChanges(changes: {[key: string]: SimpleChange}) {\n    if (!this._added) {\n      this.formDirective.addControl(this);\n      this._added = true;\n    }\n    if (isPropertyUpdated(changes, this.viewModel)) {\n      this.viewModel = this.model;\n      this.formDirective.updateModel(this, this.model);\n    }\n  }\n\n  ngOnDestroy(): void { this.formDirective.removeControl(this); }\n\n  viewToModelUpdate(newValue: any): void {\n    this.viewModel = newValue;\n    ObservableWrapper.callEmit(this.update, newValue);\n  }\n\n  get path(): string[] { return controlPath(this.name, this._parent); }\n\n  get formDirective(): any { return this._parent.formDirective; }\n\n  get validator(): ValidatorFn { return composeValidators(this._validators); }\n\n  get asyncValidator(): AsyncValidatorFn { return composeAsyncValidators(this._asyncValidators); }\n\n  get control(): Control { return this.formDirective.getControl(this); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_control_name.ts\n **/","import {Directive, Self} from 'angular2/core';\nimport {NgControl} from './ng_control';\nimport {isBlank, isPresent} from 'angular2/src/facade/lang';\n\n/**\n * Directive automatically applied to Angular forms that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n */\n@Directive({\n  selector: '[ngControl],[ngModel],[ngFormControl]',\n  host: {\n    '[class.ng-untouched]': 'ngClassUntouched',\n    '[class.ng-touched]': 'ngClassTouched',\n    '[class.ng-pristine]': 'ngClassPristine',\n    '[class.ng-dirty]': 'ngClassDirty',\n    '[class.ng-valid]': 'ngClassValid',\n    '[class.ng-invalid]': 'ngClassInvalid'\n  }\n})\nexport class NgControlStatus {\n  private _cd: NgControl;\n\n  constructor(@Self() cd: NgControl) { this._cd = cd; }\n\n  get ngClassUntouched(): boolean {\n    return isPresent(this._cd.control) ? this._cd.control.untouched : false;\n  }\n  get ngClassTouched(): boolean {\n    return isPresent(this._cd.control) ? this._cd.control.touched : false;\n  }\n  get ngClassPristine(): boolean {\n    return isPresent(this._cd.control) ? this._cd.control.pristine : false;\n  }\n  get ngClassDirty(): boolean {\n    return isPresent(this._cd.control) ? this._cd.control.dirty : false;\n  }\n  get ngClassValid(): boolean {\n    return isPresent(this._cd.control) ? this._cd.control.valid : false;\n  }\n  get ngClassInvalid(): boolean {\n    return isPresent(this._cd.control) ? !this._cd.control.valid : false;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_control_status.ts\n **/","import {\n  PromiseWrapper,\n  ObservableWrapper,\n  EventEmitter,\n  PromiseCompleter\n} from 'angular2/src/facade/async';\nimport {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {isPresent, isBlank, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {Directive, forwardRef, Provider, Optional, Inject, Self} from 'angular2/core';\nimport {NgControl} from './ng_control';\nimport {Form} from './form_interface';\nimport {NgControlGroup} from './ng_control_group';\nimport {ControlContainer} from './control_container';\nimport {AbstractControl, ControlGroup, Control} from '../model';\nimport {setUpControl, setUpControlGroup, composeValidators, composeAsyncValidators} from './shared';\nimport {Validators, NG_VALIDATORS, NG_ASYNC_VALIDATORS} from '../validators';\n\nconst formDirectiveProvider =\n    CONST_EXPR(new Provider(ControlContainer, {useExisting: forwardRef(() => NgForm)}));\n\n/**\n * If `NgForm` is bound in a component, `<form>` elements in that component will be\n * upgraded to use the Angular form system.\n *\n * ### Typical Use\n *\n * Include `FORM_DIRECTIVES` in the `directives` section of a {@link View} annotation\n * to use `NgForm` and its associated controls.\n *\n * ### Structure\n *\n * An Angular form is a collection of `Control`s in some hierarchy.\n * `Control`s can be at the top level or can be organized in `ControlGroup`s\n * or `ControlArray`s. This hierarchy is reflected in the form's `value`, a\n * JSON object that mirrors the form structure.\n *\n * ### Submission\n *\n * The `ngSubmit` event signals when the user triggers a form submission.\n *\n * ### Example ([live demo](http://plnkr.co/edit/ltdgYj4P0iY64AR71EpL?p=preview))\n *\n *  ```typescript\n * @Component({\n *   selector: 'my-app',\n *   template: `\n *     <div>\n *       <p>Submit the form to see the data object Angular builds</p>\n *       <h2>NgForm demo</h2>\n *       <form #f=\"ngForm\" (ngSubmit)=\"onSubmit(f.value)\">\n *         <h3>Control group: credentials</h3>\n *         <div ngControlGroup=\"credentials\">\n *           <p>Login: <input type=\"text\" ngControl=\"login\"></p>\n *           <p>Password: <input type=\"password\" ngControl=\"password\"></p>\n *         </div>\n *         <h3>Control group: person</h3>\n *         <div ngControlGroup=\"person\">\n *           <p>First name: <input type=\"text\" ngControl=\"firstName\"></p>\n *           <p>Last name: <input type=\"text\" ngControl=\"lastName\"></p>\n *         </div>\n *         <button type=\"submit\">Submit Form</button>\n *       <p>Form data submitted:</p>\n *       </form>\n *       <pre>{{data}}</pre>\n *     </div>\n * `,\n *   directives: [CORE_DIRECTIVES, FORM_DIRECTIVES]\n * })\n * export class App {\n *   constructor() {}\n *\n *   data: string;\n *\n *   onSubmit(data) {\n *     this.data = JSON.stringify(data, null, 2);\n *   }\n * }\n *  ```\n */\n@Directive({\n  selector: 'form:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]',\n  bindings: [formDirectiveProvider],\n  host: {\n    '(submit)': 'onSubmit()',\n  },\n  outputs: ['ngSubmit'],\n  exportAs: 'ngForm'\n})\nexport class NgForm extends ControlContainer implements Form {\n  form: ControlGroup;\n  ngSubmit = new EventEmitter();\n\n  constructor(@Optional() @Self() @Inject(NG_VALIDATORS) validators: any[],\n              @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: any[]) {\n    super();\n    this.form = new ControlGroup({}, null, composeValidators(validators),\n                                 composeAsyncValidators(asyncValidators));\n  }\n\n  get formDirective(): Form { return this; }\n\n  get control(): ControlGroup { return this.form; }\n\n  get path(): string[] { return []; }\n\n  get controls(): {[key: string]: AbstractControl} { return this.form.controls; }\n\n  addControl(dir: NgControl): void {\n    PromiseWrapper.scheduleMicrotask(() => {\n      var container = this._findContainer(dir.path);\n      var ctrl = new Control();\n      setUpControl(ctrl, dir);\n      container.addControl(dir.name, ctrl);\n      ctrl.updateValueAndValidity({emitEvent: false});\n    });\n  }\n\n  getControl(dir: NgControl): Control { return <Control>this.form.find(dir.path); }\n\n  removeControl(dir: NgControl): void {\n    PromiseWrapper.scheduleMicrotask(() => {\n      var container = this._findContainer(dir.path);\n      if (isPresent(container)) {\n        container.removeControl(dir.name);\n        container.updateValueAndValidity({emitEvent: false});\n      }\n    });\n  }\n\n  addControlGroup(dir: NgControlGroup): void {\n    PromiseWrapper.scheduleMicrotask(() => {\n      var container = this._findContainer(dir.path);\n      var group = new ControlGroup({});\n      setUpControlGroup(group, dir);\n      container.addControl(dir.name, group);\n      group.updateValueAndValidity({emitEvent: false});\n    });\n  }\n\n  removeControlGroup(dir: NgControlGroup): void {\n    PromiseWrapper.scheduleMicrotask(() => {\n      var container = this._findContainer(dir.path);\n      if (isPresent(container)) {\n        container.removeControl(dir.name);\n        container.updateValueAndValidity({emitEvent: false});\n      }\n    });\n  }\n\n  getControlGroup(dir: NgControlGroup): ControlGroup {\n    return <ControlGroup>this.form.find(dir.path);\n  }\n\n  updateModel(dir: NgControl, value: any): void {\n    PromiseWrapper.scheduleMicrotask(() => {\n      var ctrl = <Control>this.form.find(dir.path);\n      ctrl.updateValue(value);\n    });\n  }\n\n  onSubmit(): boolean {\n    ObservableWrapper.callEmit(this.ngSubmit, null);\n    return false;\n  }\n\n  /** @internal */\n  _findContainer(path: string[]): ControlGroup {\n    path.pop();\n    return ListWrapper.isEmpty(path) ? this.form : <ControlGroup>this.form.find(path);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_form.ts\n **/","import {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';\nimport {\n  OnChanges,\n  SimpleChange,\n  Query,\n  Directive,\n  forwardRef,\n  Provider,\n  Inject,\n  Optional,\n  Self\n} from 'angular2/core';\nimport {NgControl} from './ng_control';\nimport {Control} from '../model';\nimport {Validators, NG_VALIDATORS, NG_ASYNC_VALIDATORS} from '../validators';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {\n  setUpControl,\n  composeValidators,\n  composeAsyncValidators,\n  isPropertyUpdated,\n  selectValueAccessor\n} from './shared';\nimport {ValidatorFn, AsyncValidatorFn} from './validators';\n\nconst formControlBinding =\n    CONST_EXPR(new Provider(NgControl, {useExisting: forwardRef(() => NgFormControl)}));\n\n/**\n * Binds an existing {@link Control} to a DOM element.\n *\n * ### Example ([live demo](http://plnkr.co/edit/jcQlZ2tTh22BZZ2ucNAT?p=preview))\n *\n * In this example, we bind the control to an input element. When the value of the input element\n * changes, the value of the control will reflect that change. Likewise, if the value of the\n * control changes, the input element reflects that change.\n *\n *  ```typescript\n * @Component({\n *   selector: 'my-app',\n *   template: `\n *     <div>\n *       <h2>NgFormControl Example</h2>\n *       <form>\n *         <p>Element with existing control: <input type=\"text\"\n * [ngFormControl]=\"loginControl\"></p>\n *         <p>Value of existing control: {{loginControl.value}}</p>\n *       </form>\n *     </div>\n *   `,\n *   directives: [CORE_DIRECTIVES, FORM_DIRECTIVES]\n * })\n * export class App {\n *   loginControl: Control = new Control('');\n * }\n *  ```\n *\n * ###ngModel\n *\n * We can also use `ngModel` to bind a domain model to the form.\n *\n * ### Example ([live demo](http://plnkr.co/edit/yHMLuHO7DNgT8XvtjTDH?p=preview))\n *\n *  ```typescript\n * @Component({\n *      selector: \"login-comp\",\n *      directives: [FORM_DIRECTIVES],\n *      template: \"<input type='text' [ngFormControl]='loginControl' [(ngModel)]='login'>\"\n *      })\n * class LoginComp {\n *  loginControl: Control = new Control('');\n *  login:string;\n * }\n *  ```\n */\n@Directive({\n  selector: '[ngFormControl]',\n  bindings: [formControlBinding],\n  inputs: ['form: ngFormControl', 'model: ngModel'],\n  outputs: ['update: ngModelChange'],\n  exportAs: 'ngForm'\n})\nexport class NgFormControl extends NgControl implements OnChanges {\n  form: Control;\n  update = new EventEmitter();\n  model: any;\n  viewModel: any;\n\n  constructor(@Optional() @Self() @Inject(NG_VALIDATORS) private _validators:\n                  /* Array<Validator|Function> */ any[],\n              @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators:\n                  /* Array<Validator|Function> */ any[],\n              @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n              valueAccessors: ControlValueAccessor[]) {\n    super();\n    this.valueAccessor = selectValueAccessor(this, valueAccessors);\n  }\n\n  ngOnChanges(changes: {[key: string]: SimpleChange}): void {\n    if (this._isControlChanged(changes)) {\n      setUpControl(this.form, this);\n      this.form.updateValueAndValidity({emitEvent: false});\n    }\n    if (isPropertyUpdated(changes, this.viewModel)) {\n      this.form.updateValue(this.model);\n      this.viewModel = this.model;\n    }\n  }\n\n  get path(): string[] { return []; }\n\n  get validator(): ValidatorFn { return composeValidators(this._validators); }\n\n  get asyncValidator(): AsyncValidatorFn { return composeAsyncValidators(this._asyncValidators); }\n\n  get control(): Control { return this.form; }\n\n  viewToModelUpdate(newValue: any): void {\n    this.viewModel = newValue;\n    ObservableWrapper.callEmit(this.update, newValue);\n  }\n\n  private _isControlChanged(changes: {[key: string]: any}): boolean {\n    return StringMapWrapper.contains(changes, \"form\");\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_form_control.ts\n **/","import {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {ObservableWrapper, EventEmitter} from 'angular2/src/facade/async';\nimport {\n  SimpleChange,\n  OnChanges,\n  Directive,\n  forwardRef,\n  Provider,\n  Inject,\n  Optional,\n  Self\n} from 'angular2/core';\nimport {NgControl} from './ng_control';\nimport {NgControlGroup} from './ng_control_group';\nimport {ControlContainer} from './control_container';\nimport {Form} from './form_interface';\nimport {Control, ControlGroup} from '../model';\nimport {setUpControl, setUpControlGroup, composeValidators, composeAsyncValidators} from './shared';\nimport {Validators, NG_VALIDATORS, NG_ASYNC_VALIDATORS} from '../validators';\n\nconst formDirectiveProvider =\n    CONST_EXPR(new Provider(ControlContainer, {useExisting: forwardRef(() => NgFormModel)}));\n\n/**\n * Binds an existing control group to a DOM element.\n *\n * ### Example ([live demo](http://plnkr.co/edit/jqrVirudY8anJxTMUjTP?p=preview))\n *\n * In this example, we bind the control group to the form element, and we bind the login and\n * password controls to the login and password elements.\n *\n *  ```typescript\n * @Component({\n *   selector: 'my-app',\n *   template: `\n *     <div>\n *       <h2>NgFormModel Example</h2>\n *       <form [ngFormModel]=\"loginForm\">\n *         <p>Login: <input type=\"text\" ngControl=\"login\"></p>\n *         <p>Password: <input type=\"password\" ngControl=\"password\"></p>\n *       </form>\n *       <p>Value:</p>\n *       <pre>{{value}}</pre>\n *     </div>\n *   `,\n *   directives: [FORM_DIRECTIVES]\n * })\n * export class App {\n *   loginForm: ControlGroup;\n *\n *   constructor() {\n *     this.loginForm = new ControlGroup({\n *       login: new Control(\"\"),\n *       password: new Control(\"\")\n *     });\n *   }\n *\n *   get value(): string {\n *     return JSON.stringify(this.loginForm.value, null, 2);\n *   }\n * }\n *  ```\n *\n * We can also use ngModel to bind a domain model to the form.\n *\n *  ```typescript\n * @Component({\n *      selector: \"login-comp\",\n *      directives: [FORM_DIRECTIVES],\n *      template: `\n *        <form [ngFormModel]='loginForm'>\n *          Login <input type='text' ngControl='login' [(ngModel)]='credentials.login'>\n *          Password <input type='password' ngControl='password'\n *                          [(ngModel)]='credentials.password'>\n *          <button (click)=\"onLogin()\">Login</button>\n *        </form>`\n *      })\n * class LoginComp {\n *  credentials: {login: string, password: string};\n *  loginForm: ControlGroup;\n *\n *  constructor() {\n *    this.loginForm = new ControlGroup({\n *      login: new Control(\"\"),\n *      password: new Control(\"\")\n *    });\n *  }\n *\n *  onLogin(): void {\n *    // this.credentials.login === 'some login'\n *    // this.credentials.password === 'some password'\n *  }\n * }\n *  ```\n */\n@Directive({\n  selector: '[ngFormModel]',\n  bindings: [formDirectiveProvider],\n  inputs: ['form: ngFormModel'],\n  host: {'(submit)': 'onSubmit()'},\n  outputs: ['ngSubmit'],\n  exportAs: 'ngForm'\n})\nexport class NgFormModel extends ControlContainer implements Form,\n    OnChanges {\n  form: ControlGroup = null;\n  directives: NgControl[] = [];\n  ngSubmit = new EventEmitter();\n\n  constructor(@Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n              @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[]) {\n    super();\n  }\n\n  ngOnChanges(changes: {[key: string]: SimpleChange}): void {\n    if (StringMapWrapper.contains(changes, \"form\")) {\n      var sync = composeValidators(this._validators);\n      this.form.validator = Validators.compose([this.form.validator, sync]);\n\n      var async = composeAsyncValidators(this._asyncValidators);\n      this.form.asyncValidator = Validators.composeAsync([this.form.asyncValidator, async]);\n\n      this.form.updateValueAndValidity({onlySelf: true, emitEvent: false});\n    }\n\n    this._updateDomValue();\n  }\n\n  get formDirective(): Form { return this; }\n\n  get control(): ControlGroup { return this.form; }\n\n  get path(): string[] { return []; }\n\n  addControl(dir: NgControl): void {\n    var ctrl: any = this.form.find(dir.path);\n    setUpControl(ctrl, dir);\n    ctrl.updateValueAndValidity({emitEvent: false});\n    this.directives.push(dir);\n  }\n\n  getControl(dir: NgControl): Control { return <Control>this.form.find(dir.path); }\n\n  removeControl(dir: NgControl): void { ListWrapper.remove(this.directives, dir); }\n\n  addControlGroup(dir: NgControlGroup) {\n    var ctrl: any = this.form.find(dir.path);\n    setUpControlGroup(ctrl, dir);\n    ctrl.updateValueAndValidity({emitEvent: false});\n  }\n\n  removeControlGroup(dir: NgControlGroup) {}\n\n  getControlGroup(dir: NgControlGroup): ControlGroup {\n    return <ControlGroup>this.form.find(dir.path);\n  }\n\n  updateModel(dir: NgControl, value: any): void {\n    var ctrl  = <Control>this.form.find(dir.path);\n    ctrl.updateValue(value);\n  }\n\n  onSubmit(): boolean {\n    ObservableWrapper.callEmit(this.ngSubmit, null);\n    return false;\n  }\n\n  /** @internal */\n  _updateDomValue() {\n    this.directives.forEach(dir => {\n      var ctrl: any = this.form.find(dir.path);\n      dir.valueAccessor.writeValue(ctrl.value);\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_form_model.ts\n **/","import {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {EventEmitter, ObservableWrapper} from 'angular2/src/facade/async';\nimport {\n  OnChanges,\n  SimpleChange,\n  Directive,\n  forwardRef,\n  Provider,\n  Inject,\n  Optional,\n  Self\n} from 'angular2/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './control_value_accessor';\nimport {NgControl} from './ng_control';\nimport {Control} from '../model';\nimport {NG_VALIDATORS, NG_ASYNC_VALIDATORS} from '../validators';\nimport {\n  setUpControl,\n  isPropertyUpdated,\n  selectValueAccessor,\n  composeValidators,\n  composeAsyncValidators\n} from './shared';\nimport {ValidatorFn, AsyncValidatorFn} from './validators';\n\nconst formControlBinding =\n    CONST_EXPR(new Provider(NgControl, {useExisting: forwardRef(() => NgModel)}));\n\n/**\n * Binds a domain model to a form control.\n *\n * ### Usage\n *\n * `ngModel` binds an existing domain model to a form control. For a\n * two-way binding, use `[(ngModel)]` to ensure the model updates in\n * both directions.\n *\n * ### Example ([live demo](http://plnkr.co/edit/R3UX5qDaUqFO2VYR0UzH?p=preview))\n *  ```typescript\n * @Component({\n *      selector: \"search-comp\",\n *      directives: [FORM_DIRECTIVES],\n *      template: `<input type='text' [(ngModel)]=\"searchQuery\">`\n *      })\n * class SearchComp {\n *  searchQuery: string;\n * }\n *  ```\n */\n@Directive({\n  selector: '[ngModel]:not([ngControl]):not([ngFormControl])',\n  bindings: [formControlBinding],\n  inputs: ['model: ngModel'],\n  outputs: ['update: ngModelChange'],\n  exportAs: 'ngForm'\n})\nexport class NgModel extends NgControl implements OnChanges {\n  /** @internal */\n  _control = new Control();\n  /** @internal */\n  _added = false;\n  update = new EventEmitter();\n  model: any;\n  viewModel: any;\n\n  constructor(@Optional() @Self() @Inject(NG_VALIDATORS) private _validators: any[],\n              @Optional() @Self() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: any[],\n              @Optional() @Self() @Inject(NG_VALUE_ACCESSOR)\n              valueAccessors: ControlValueAccessor[]) {\n    super();\n    this.valueAccessor = selectValueAccessor(this, valueAccessors);\n  }\n\n  ngOnChanges(changes: {[key: string]: SimpleChange}) {\n    if (!this._added) {\n      setUpControl(this._control, this);\n      this._control.updateValueAndValidity({emitEvent: false});\n      this._added = true;\n    }\n\n    if (isPropertyUpdated(changes, this.viewModel)) {\n      this._control.updateValue(this.model);\n      this.viewModel = this.model;\n    }\n  }\n\n  get control(): Control { return this._control; }\n\n  get path(): string[] { return []; }\n\n  get validator(): ValidatorFn { return composeValidators(this._validators); }\n\n  get asyncValidator(): AsyncValidatorFn { return composeAsyncValidators(this._asyncValidators); }\n\n  viewToModelUpdate(newValue: any): void {\n    this.viewModel = newValue;\n    ObservableWrapper.callEmit(this.update, newValue);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/ng_model.ts\n **/","import {Directive, ElementRef, Renderer, Self, forwardRef, Provider} from 'angular2/core';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from './control_value_accessor';\nimport {isBlank, CONST_EXPR, NumberWrapper} from 'angular2/src/facade/lang';\n\nconst NUMBER_VALUE_ACCESSOR = CONST_EXPR(new Provider(\n    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => NumberValueAccessor), multi: true}));\n\n/**\n * The accessor for writing a number value and listening to changes that is used by the\n * {@link NgModel}, {@link NgFormControl}, and {@link NgControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"number\" [(ngModel)]=\"age\">\n *  ```\n */\n@Directive({\n  selector:\n      'input[type=number][ngControl],input[type=number][ngFormControl],input[type=number][ngModel]',\n  host: {\n    '(change)': 'onChange($event.target.value)',\n    '(input)': 'onChange($event.target.value)',\n    '(blur)': 'onTouched()'\n  },\n  bindings: [NUMBER_VALUE_ACCESSOR]\n})\nexport class NumberValueAccessor implements ControlValueAccessor {\n  onChange = (_: any) => {};\n  onTouched = () => {};\n\n  constructor(private _renderer: Renderer, private _elementRef: ElementRef) {}\n\n  writeValue(value: number): void {\n    this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', value);\n  }\n\n  registerOnChange(fn: (_: number) => void): void {\n    this.onChange = (value) => { fn(NumberWrapper.parseFloat(value)); };\n  }\n  registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/number_value_accessor.ts\n **/","import {forwardRef, Provider, Attribute, Directive} from 'angular2/core';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {Validators, NG_VALIDATORS} from '../validators';\nimport {AbstractControl} from '../model';\nimport * as modelModule from '../model';\nimport {NumberWrapper} from \"angular2/src/facade/lang\";\n\n\n\n/**\n * An interface that can be implemented by classes that can act as validators.\n *\n * ## Usage\n *\n * ```typescript\n * @Directive({\n *   selector: '[custom-validator]',\n *   providers: [provide(NG_VALIDATORS, {useExisting: CustomValidatorDirective, multi: true})]\n * })\n * class CustomValidatorDirective implements Validator {\n *   validate(c: Control): {[key: string]: any} {\n *     return {\"custom\": true};\n *   }\n * }\n * ```\n */\nexport interface Validator { validate(c: modelModule.AbstractControl): {[key: string]: any}; }\n\nconst REQUIRED_VALIDATOR =\n    CONST_EXPR(new Provider(NG_VALIDATORS, {useValue: Validators.required, multi: true}));\n\n/**\n * A Directive that adds the `required` validator to any controls marked with the\n * `required` attribute, via the {@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input ngControl=\"fullName\" required>\n * ```\n */\n@Directive({\n  selector: '[required][ngControl],[required][ngFormControl],[required][ngModel]',\n  providers: [REQUIRED_VALIDATOR]\n})\nexport class RequiredValidator {\n}\n\nexport interface ValidatorFn { (c: AbstractControl): {[key: string]: any}; }\nexport interface AsyncValidatorFn {\n  (c: AbstractControl): any /*Promise<{[key: string]: any}>|Observable<{[key: string]: any}>*/;\n}\n\n/**\n * Provivder which adds {@link MinLengthValidator} to {@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {@example common/forms/ts/validators/validators.ts region='min'}\n */\nconst MIN_LENGTH_VALIDATOR = CONST_EXPR(\n    new Provider(NG_VALIDATORS, {useExisting: forwardRef(() => MinLengthValidator), multi: true}));\n\n/**\n * A directive which installs the {@link MinLengthValidator} for any `ngControl`,\n * `ngFormControl`, or control with `ngModel` that also has a `minlength` attribute.\n */\n@Directive({\n  selector: '[minlength][ngControl],[minlength][ngFormControl],[minlength][ngModel]',\n  providers: [MIN_LENGTH_VALIDATOR]\n})\nexport class MinLengthValidator implements Validator {\n  private _validator: ValidatorFn;\n\n  constructor(@Attribute(\"minlength\") minLength: string) {\n    this._validator = Validators.minLength(NumberWrapper.parseInt(minLength, 10));\n  }\n\n  validate(c: AbstractControl): {[key: string]: any} { return this._validator(c); }\n}\n\n/**\n * Provider which adds {@link MaxLengthValidator} to {@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {@example common/forms/ts/validators/validators.ts region='max'}\n */\nconst MAX_LENGTH_VALIDATOR = CONST_EXPR(\n    new Provider(NG_VALIDATORS, {useExisting: forwardRef(() => MaxLengthValidator), multi: true}));\n\n/**\n * A directive which installs the {@link MaxLengthValidator} for any `ngControl, `ngFormControl`,\n * or control with `ngModel` that also has a `maxlength` attribute.\n */\n@Directive({\n  selector: '[maxlength][ngControl],[maxlength][ngFormControl],[maxlength][ngModel]',\n  providers: [MAX_LENGTH_VALIDATOR]\n})\nexport class MaxLengthValidator implements Validator {\n  private _validator: ValidatorFn;\n\n  constructor(@Attribute(\"maxlength\") maxLength: string) {\n    this._validator = Validators.maxLength(NumberWrapper.parseInt(maxLength, 10));\n  }\n\n  validate(c: AbstractControl): {[key: string]: any} { return this._validator(c); }\n}\n\n\n/**\n * A Directive that adds the `pattern` validator to any controls marked with the\n * `pattern` attribute, via the {@link NG_VALIDATORS} binding. Uses attribute value\n * as the regex to validate Control value against.  Follows pattern attribute\n * semantics; i.e. regex must match entire Control value.\n *\n * ### Example\n *\n * ```\n * <input [ngControl]=\"fullName\" pattern=\"[a-zA-Z ]*\">\n * ```\n */\nconst PATTERN_VALIDATOR = CONST_EXPR(\n    new Provider(NG_VALIDATORS, {useExisting: forwardRef(() => PatternValidator), multi: true}));\n@Directive({\n  selector: '[pattern][ngControl],[pattern][ngFormControl],[pattern][ngModel]',\n  providers: [PATTERN_VALIDATOR]\n})\nexport class PatternValidator implements Validator {\n  private _validator: ValidatorFn;\n\n  constructor(@Attribute(\"pattern\") pattern: string) {\n    this._validator = Validators.pattern(pattern);\n  }\n\n  validate(c: AbstractControl): {[key: string]: any} { return this._validator(c); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/validators.ts\n **/","import {isPresent} from 'angular2/src/facade/lang';\n\nimport {ParseSourceSpan} from './parse_util';\n\nexport interface HtmlAst {\n  sourceSpan: ParseSourceSpan;\n  visit(visitor: HtmlAstVisitor, context: any): any;\n}\n\nexport class HtmlTextAst implements HtmlAst {\n  constructor(public value: string, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: HtmlAstVisitor, context: any): any { return visitor.visitText(this, context); }\n}\n\nexport class HtmlAttrAst implements HtmlAst {\n  constructor(public name: string, public value: string, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: HtmlAstVisitor, context: any): any { return visitor.visitAttr(this, context); }\n}\n\nexport class HtmlElementAst implements HtmlAst {\n  constructor(public name: string, public attrs: HtmlAttrAst[], public children: HtmlAst[],\n              public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: HtmlAstVisitor, context: any): any { return visitor.visitElement(this, context); }\n}\n\nexport class HtmlCommentAst implements HtmlAst {\n  constructor(public value: string, public sourceSpan: ParseSourceSpan) {}\n  visit(visitor: HtmlAstVisitor, context: any): any { return visitor.visitComment(this, context); }\n}\n\nexport interface HtmlAstVisitor {\n  visitElement(ast: HtmlElementAst, context: any): any;\n  visitAttr(ast: HtmlAttrAst, context: any): any;\n  visitText(ast: HtmlTextAst, context: any): any;\n  visitComment(ast: HtmlCommentAst, context: any): any;\n}\n\nexport function htmlVisitAll(visitor: HtmlAstVisitor, asts: HtmlAst[], context: any = null): any[] {\n  var result = [];\n  asts.forEach(ast => {\n    var astResult = ast.visit(visitor, context);\n    if (isPresent(astResult)) {\n      result.push(astResult);\n    }\n  });\n  return result;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/html_ast.ts\n **/","import {\n  isPresent,\n  isBlank,\n  StringWrapper,\n  stringify,\n  assertionsEnabled,\n  StringJoiner,\n  serializeEnum,\n  CONST_EXPR\n} from 'angular2/src/facade/lang';\n\nimport {ListWrapper} from 'angular2/src/facade/collection';\n\nimport {HtmlAst, HtmlAttrAst, HtmlTextAst, HtmlCommentAst, HtmlElementAst} from './html_ast';\n\nimport {Injectable} from 'angular2/src/core/di';\nimport {HtmlToken, HtmlTokenType, tokenizeHtml} from './html_lexer';\nimport {ParseError, ParseLocation, ParseSourceSpan} from './parse_util';\nimport {HtmlTagDefinition, getHtmlTagDefinition, getNsPrefix, mergeNsAndName} from './html_tags';\n\nexport class HtmlTreeError extends ParseError {\n  static create(elementName: string, span: ParseSourceSpan, msg: string): HtmlTreeError {\n    return new HtmlTreeError(elementName, span, msg);\n  }\n\n  constructor(public elementName: string, span: ParseSourceSpan, msg: string) { super(span, msg); }\n}\n\nexport class HtmlParseTreeResult {\n  constructor(public rootNodes: HtmlAst[], public errors: ParseError[]) {}\n}\n\n@Injectable()\nexport class HtmlParser {\n  parse(sourceContent: string, sourceUrl: string): HtmlParseTreeResult {\n    var tokensAndErrors = tokenizeHtml(sourceContent, sourceUrl);\n    var treeAndErrors = new TreeBuilder(tokensAndErrors.tokens).build();\n    return new HtmlParseTreeResult(treeAndErrors.rootNodes, (<ParseError[]>tokensAndErrors.errors)\n                                                                .concat(treeAndErrors.errors));\n  }\n}\n\nclass TreeBuilder {\n  private index: number = -1;\n  private peek: HtmlToken;\n\n  private rootNodes: HtmlAst[] = [];\n  private errors: HtmlTreeError[] = [];\n\n  private elementStack: HtmlElementAst[] = [];\n\n  constructor(private tokens: HtmlToken[]) { this._advance(); }\n\n  build(): HtmlParseTreeResult {\n    while (this.peek.type !== HtmlTokenType.EOF) {\n      if (this.peek.type === HtmlTokenType.TAG_OPEN_START) {\n        this._consumeStartTag(this._advance());\n      } else if (this.peek.type === HtmlTokenType.TAG_CLOSE) {\n        this._consumeEndTag(this._advance());\n      } else if (this.peek.type === HtmlTokenType.CDATA_START) {\n        this._closeVoidElement();\n        this._consumeCdata(this._advance());\n      } else if (this.peek.type === HtmlTokenType.COMMENT_START) {\n        this._closeVoidElement();\n        this._consumeComment(this._advance());\n      } else if (this.peek.type === HtmlTokenType.TEXT ||\n                 this.peek.type === HtmlTokenType.RAW_TEXT ||\n                 this.peek.type === HtmlTokenType.ESCAPABLE_RAW_TEXT) {\n        this._closeVoidElement();\n        this._consumeText(this._advance());\n      } else {\n        // Skip all other tokens...\n        this._advance();\n      }\n    }\n    return new HtmlParseTreeResult(this.rootNodes, this.errors);\n  }\n\n  private _advance(): HtmlToken {\n    var prev = this.peek;\n    if (this.index < this.tokens.length - 1) {\n      // Note: there is always an EOF token at the end\n      this.index++;\n    }\n    this.peek = this.tokens[this.index];\n    return prev;\n  }\n\n  private _advanceIf(type: HtmlTokenType): HtmlToken {\n    if (this.peek.type === type) {\n      return this._advance();\n    }\n    return null;\n  }\n\n  private _consumeCdata(startToken: HtmlToken) {\n    this._consumeText(this._advance());\n    this._advanceIf(HtmlTokenType.CDATA_END);\n  }\n\n  private _consumeComment(token: HtmlToken) {\n    var text = this._advanceIf(HtmlTokenType.RAW_TEXT);\n    this._advanceIf(HtmlTokenType.COMMENT_END);\n    var value = isPresent(text) ? text.parts[0].trim() : null;\n    this._addToParent(new HtmlCommentAst(value, token.sourceSpan));\n  }\n\n  private _consumeText(token: HtmlToken) {\n    let text = token.parts[0];\n    if (text.length > 0 && text[0] == '\\n') {\n      let parent = this._getParentElement();\n      if (isPresent(parent) && parent.children.length == 0 &&\n          getHtmlTagDefinition(parent.name).ignoreFirstLf) {\n        text = text.substring(1);\n      }\n    }\n\n    if (text.length > 0) {\n      this._addToParent(new HtmlTextAst(text, token.sourceSpan));\n    }\n  }\n\n  private _closeVoidElement(): void {\n    if (this.elementStack.length > 0) {\n      let el = ListWrapper.last(this.elementStack);\n\n      if (getHtmlTagDefinition(el.name).isVoid) {\n        this.elementStack.pop();\n      }\n    }\n  }\n\n  private _consumeStartTag(startTagToken: HtmlToken) {\n    var prefix = startTagToken.parts[0];\n    var name = startTagToken.parts[1];\n    var attrs = [];\n    while (this.peek.type === HtmlTokenType.ATTR_NAME) {\n      attrs.push(this._consumeAttr(this._advance()));\n    }\n    var fullName = getElementFullName(prefix, name, this._getParentElement());\n    var selfClosing = false;\n    // Note: There could have been a tokenizer error\n    // so that we don't get a token for the end tag...\n    if (this.peek.type === HtmlTokenType.TAG_OPEN_END_VOID) {\n      this._advance();\n      selfClosing = true;\n      if (getNsPrefix(fullName) == null && !getHtmlTagDefinition(fullName).isVoid) {\n        this.errors.push(HtmlTreeError.create(\n            fullName, startTagToken.sourceSpan,\n            `Only void and foreign elements can be self closed \"${startTagToken.parts[1]}\"`));\n      }\n    } else if (this.peek.type === HtmlTokenType.TAG_OPEN_END) {\n      this._advance();\n      selfClosing = false;\n    }\n    var end = this.peek.sourceSpan.start;\n    var el = new HtmlElementAst(fullName, attrs, [],\n                                new ParseSourceSpan(startTagToken.sourceSpan.start, end));\n    this._pushElement(el);\n    if (selfClosing) {\n      this._popElement(fullName);\n    }\n  }\n\n  private _pushElement(el: HtmlElementAst) {\n    if (this.elementStack.length > 0) {\n      var parentEl = ListWrapper.last(this.elementStack);\n      if (getHtmlTagDefinition(parentEl.name).isClosedByChild(el.name)) {\n        this.elementStack.pop();\n      }\n    }\n\n    var tagDef = getHtmlTagDefinition(el.name);\n    var parentEl = this._getParentElement();\n    if (tagDef.requireExtraParent(isPresent(parentEl) ? parentEl.name : null)) {\n      var newParent = new HtmlElementAst(tagDef.parentToAdd, [], [el], el.sourceSpan);\n      this._addToParent(newParent);\n      this.elementStack.push(newParent);\n      this.elementStack.push(el);\n    } else {\n      this._addToParent(el);\n      this.elementStack.push(el);\n    }\n  }\n\n  private _consumeEndTag(endTagToken: HtmlToken) {\n    var fullName =\n        getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement());\n\n    if (getHtmlTagDefinition(fullName).isVoid) {\n      this.errors.push(\n          HtmlTreeError.create(fullName, endTagToken.sourceSpan,\n                               `Void elements do not have end tags \"${endTagToken.parts[1]}\"`));\n    } else if (!this._popElement(fullName)) {\n      this.errors.push(HtmlTreeError.create(fullName, endTagToken.sourceSpan,\n                                            `Unexpected closing tag \"${endTagToken.parts[1]}\"`));\n    }\n  }\n\n  private _popElement(fullName: string): boolean {\n    for (let stackIndex = this.elementStack.length - 1; stackIndex >= 0; stackIndex--) {\n      let el = this.elementStack[stackIndex];\n      if (el.name == fullName) {\n        ListWrapper.splice(this.elementStack, stackIndex, this.elementStack.length - stackIndex);\n        return true;\n      }\n\n      if (!getHtmlTagDefinition(el.name).closedByParent) {\n        return false;\n      }\n    }\n    return false;\n  }\n\n  private _consumeAttr(attrName: HtmlToken): HtmlAttrAst {\n    var fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]);\n    var end = attrName.sourceSpan.end;\n    var value = '';\n    if (this.peek.type === HtmlTokenType.ATTR_VALUE) {\n      var valueToken = this._advance();\n      value = valueToken.parts[0];\n      end = valueToken.sourceSpan.end;\n    }\n    return new HtmlAttrAst(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end));\n  }\n\n  private _getParentElement(): HtmlElementAst {\n    return this.elementStack.length > 0 ? ListWrapper.last(this.elementStack) : null;\n  }\n\n  private _addToParent(node: HtmlAst) {\n    var parent = this._getParentElement();\n    if (isPresent(parent)) {\n      parent.children.push(node);\n    } else {\n      this.rootNodes.push(node);\n    }\n  }\n}\n\nfunction getElementFullName(prefix: string, localName: string,\n                            parentElement: HtmlElementAst): string {\n  if (isBlank(prefix)) {\n    prefix = getHtmlTagDefinition(localName).implicitNamespacePrefix;\n    if (isBlank(prefix) && isPresent(parentElement)) {\n      prefix = getNsPrefix(parentElement.name);\n    }\n  }\n\n  return mergeNsAndName(prefix, localName);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/html_parser.ts\n **/","export class ParseLocation {\n  constructor(public file: ParseSourceFile, public offset: number, public line: number,\n              public col: number) {}\n\n  toString(): string { return `${this.file.url}@${this.line}:${this.col}`; }\n}\n\nexport class ParseSourceFile {\n  constructor(public content: string, public url: string) {}\n}\n\nexport class ParseSourceSpan {\n  constructor(public start: ParseLocation, public end: ParseLocation) {}\n\n  toString(): string {\n    return this.start.file.content.substring(this.start.offset, this.end.offset);\n  }\n}\n\nexport abstract class ParseError {\n  constructor(public span: ParseSourceSpan, public msg: string) {}\n\n  toString(): string {\n    var source = this.span.start.file.content;\n    var ctxStart = this.span.start.offset;\n    if (ctxStart > source.length - 1) {\n      ctxStart = source.length - 1;\n    }\n    var ctxEnd = ctxStart;\n    var ctxLen = 0;\n    var ctxLines = 0;\n\n    while (ctxLen < 100 && ctxStart > 0) {\n      ctxStart--;\n      ctxLen++;\n      if (source[ctxStart] == \"\\n\") {\n        if (++ctxLines == 3) {\n          break;\n        }\n      }\n    }\n\n    ctxLen = 0;\n    ctxLines = 0;\n    while (ctxLen < 100 && ctxEnd < source.length - 1) {\n      ctxEnd++;\n      ctxLen++;\n      if (source[ctxEnd] == \"\\n\") {\n        if (++ctxLines == 3) {\n          break;\n        }\n      }\n    }\n\n    let context = source.substring(ctxStart, this.span.start.offset) + '[ERROR ->]' +\n                  source.substring(this.span.start.offset, ctxEnd + 1);\n\n    return `${this.msg} (\"${context}\"): ${this.span.start}`;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/parse_util.ts\n **/","import {\n  isPresent,\n  isBlank,\n  Type,\n  isString,\n  StringWrapper,\n  IS_DART,\n  CONST_EXPR\n} from 'angular2/src/facade/lang';\nimport {\n  SetWrapper,\n  StringMapWrapper,\n  ListWrapper,\n  MapWrapper\n} from 'angular2/src/facade/collection';\nimport {\n  TemplateAst,\n  TemplateAstVisitor,\n  NgContentAst,\n  EmbeddedTemplateAst,\n  ElementAst,\n  VariableAst,\n  BoundEventAst,\n  BoundElementPropertyAst,\n  AttrAst,\n  BoundTextAst,\n  TextAst,\n  DirectiveAst,\n  BoundDirectivePropertyAst,\n  templateVisitAll\n} from './template_ast';\nimport {\n  CompileTypeMetadata,\n  CompileDirectiveMetadata,\n  CompilePipeMetadata\n} from './directive_metadata';\nimport {SourceExpressions, SourceExpression, moduleRef} from './source_module';\nimport {AppProtoView, AppView} from 'angular2/src/core/linker/view';\nimport {ViewType} from 'angular2/src/core/linker/view_type';\nimport {AppProtoElement, AppElement} from 'angular2/src/core/linker/element';\nimport {ResolvedMetadataCache} from 'angular2/src/core/linker/resolved_metadata_cache';\nimport {\n  escapeSingleQuoteString,\n  codeGenConstConstructorCall,\n  codeGenValueFn,\n  codeGenFnHeader,\n  MODULE_SUFFIX,\n  codeGenStringMap,\n  Expression,\n  Statement\n} from './util';\nimport {Injectable} from 'angular2/src/core/di';\n\nexport const PROTO_VIEW_JIT_IMPORTS = CONST_EXPR(\n    {'AppProtoView': AppProtoView, 'AppProtoElement': AppProtoElement, 'ViewType': ViewType});\n\n// TODO: have a single file that reexports everything needed for\n// codegen explicitly\n// - helps understanding what codegen works against\n// - less imports in codegen code\nexport var APP_VIEW_MODULE_REF = moduleRef('package:angular2/src/core/linker/view' + MODULE_SUFFIX);\nexport var VIEW_TYPE_MODULE_REF =\n    moduleRef('package:angular2/src/core/linker/view_type' + MODULE_SUFFIX);\nexport var APP_EL_MODULE_REF =\n    moduleRef('package:angular2/src/core/linker/element' + MODULE_SUFFIX);\nexport var METADATA_MODULE_REF =\n    moduleRef('package:angular2/src/core/metadata/view' + MODULE_SUFFIX);\n\nconst IMPLICIT_TEMPLATE_VAR = '\\$implicit';\nconst CLASS_ATTR = 'class';\nconst STYLE_ATTR = 'style';\n\n@Injectable()\nexport class ProtoViewCompiler {\n  constructor() {}\n\n  compileProtoViewRuntime(metadataCache: ResolvedMetadataCache, component: CompileDirectiveMetadata,\n                          template: TemplateAst[], pipes: CompilePipeMetadata[]):\n      CompileProtoViews<AppProtoView, AppProtoElement, any> {\n    var protoViewFactory = new RuntimeProtoViewFactory(metadataCache, component, pipes);\n    var allProtoViews = [];\n    protoViewFactory.createCompileProtoView(template, [], [], allProtoViews);\n    return new CompileProtoViews<AppProtoView, AppProtoElement, any>([], allProtoViews);\n  }\n\n  compileProtoViewCodeGen(resolvedMetadataCacheExpr: Expression,\n                          component: CompileDirectiveMetadata, template: TemplateAst[],\n                          pipes: CompilePipeMetadata[]):\n      CompileProtoViews<Expression, Expression, string> {\n    var protoViewFactory = new CodeGenProtoViewFactory(resolvedMetadataCacheExpr, component, pipes);\n    var allProtoViews = [];\n    var allStatements = [];\n    protoViewFactory.createCompileProtoView(template, [], allStatements, allProtoViews);\n    return new CompileProtoViews<Expression, Expression, string>(\n        allStatements.map(stmt => stmt.statement), allProtoViews);\n  }\n}\n\nexport class CompileProtoViews<APP_PROTO_VIEW, APP_PROTO_EL, STATEMENT> {\n  constructor(public declarations: STATEMENT[],\n              public protoViews: CompileProtoView<APP_PROTO_VIEW, APP_PROTO_EL>[]) {}\n}\n\n\nexport class CompileProtoView<APP_PROTO_VIEW, APP_PROTO_EL> {\n  constructor(public embeddedTemplateIndex: number,\n              public protoElements: CompileProtoElement<APP_PROTO_EL>[],\n              public protoView: APP_PROTO_VIEW) {}\n}\n\nexport class CompileProtoElement<APP_PROTO_EL> {\n  constructor(public boundElementIndex, public attrNameAndValues: string[][],\n              public variableNameAndValues: string[][], public renderEvents: BoundEventAst[],\n              public directives: CompileDirectiveMetadata[], public embeddedTemplateIndex: number,\n              public appProtoEl: APP_PROTO_EL) {}\n}\n\nfunction visitAndReturnContext(visitor: TemplateAstVisitor, asts: TemplateAst[],\n                               context: any): any {\n  templateVisitAll(visitor, asts, context);\n  return context;\n}\n\nabstract class ProtoViewFactory<APP_PROTO_VIEW, APP_PROTO_EL, STATEMENT> {\n  constructor(public component: CompileDirectiveMetadata) {}\n\n  abstract createAppProtoView(embeddedTemplateIndex: number, viewType: ViewType,\n                              templateVariableBindings: string[][],\n                              targetStatements: STATEMENT[]): APP_PROTO_VIEW;\n\n  abstract createAppProtoElement(boundElementIndex: number, attrNameAndValues: string[][],\n                                 variableNameAndValues: string[][],\n                                 directives: CompileDirectiveMetadata[],\n                                 targetStatements: STATEMENT[]): APP_PROTO_EL;\n\n  createCompileProtoView(template: TemplateAst[], templateVariableBindings: string[][],\n                         targetStatements: STATEMENT[],\n                         targetProtoViews: CompileProtoView<APP_PROTO_VIEW, APP_PROTO_EL>[]):\n      CompileProtoView<APP_PROTO_VIEW, APP_PROTO_EL> {\n    var embeddedTemplateIndex = targetProtoViews.length;\n    // Note: targetProtoViews needs to be in depth first order.\n    // So we \"reserve\" a space here that we fill after the recursion is done\n    targetProtoViews.push(null);\n    var builder = new ProtoViewBuilderVisitor<APP_PROTO_VIEW, APP_PROTO_EL, any>(\n        this, targetStatements, targetProtoViews);\n    templateVisitAll(builder, template);\n    var viewType = getViewType(this.component, embeddedTemplateIndex);\n    var appProtoView = this.createAppProtoView(embeddedTemplateIndex, viewType,\n                                               templateVariableBindings, targetStatements);\n    var cpv = new CompileProtoView<APP_PROTO_VIEW, APP_PROTO_EL>(\n        embeddedTemplateIndex, builder.protoElements, appProtoView);\n    targetProtoViews[embeddedTemplateIndex] = cpv;\n    return cpv;\n  }\n}\n\nclass CodeGenProtoViewFactory extends ProtoViewFactory<Expression, Expression, Statement> {\n  private _nextVarId: number = 0;\n\n  constructor(public resolvedMetadataCacheExpr: Expression, component: CompileDirectiveMetadata,\n              public pipes: CompilePipeMetadata[]) {\n    super(component);\n  }\n\n  private _nextProtoViewVar(embeddedTemplateIndex: number): string {\n    return `appProtoView${this._nextVarId++}_${this.component.type.name}${embeddedTemplateIndex}`;\n  }\n\n  createAppProtoView(embeddedTemplateIndex: number, viewType: ViewType,\n                     templateVariableBindings: string[][],\n                     targetStatements: Statement[]): Expression {\n    var protoViewVarName = this._nextProtoViewVar(embeddedTemplateIndex);\n    var viewTypeExpr = codeGenViewType(viewType);\n    var pipesExpr = embeddedTemplateIndex === 0 ?\n                        codeGenTypesArray(this.pipes.map(pipeMeta => pipeMeta.type)) :\n                        null;\n    var statement =\n        `var ${protoViewVarName} = ${APP_VIEW_MODULE_REF}AppProtoView.create(${this.resolvedMetadataCacheExpr.expression}, ${viewTypeExpr}, ${pipesExpr}, ${codeGenStringMap(templateVariableBindings)});`;\n    targetStatements.push(new Statement(statement));\n    return new Expression(protoViewVarName);\n  }\n\n  createAppProtoElement(boundElementIndex: number, attrNameAndValues: string[][],\n                        variableNameAndValues: string[][], directives: CompileDirectiveMetadata[],\n                        targetStatements: Statement[]): Expression {\n    var varName = `appProtoEl${this._nextVarId++}_${this.component.type.name}`;\n    var value = `${APP_EL_MODULE_REF}AppProtoElement.create(\n        ${this.resolvedMetadataCacheExpr.expression},\n        ${boundElementIndex},\n        ${codeGenStringMap(attrNameAndValues)},\n        ${codeGenDirectivesArray(directives)},\n        ${codeGenStringMap(variableNameAndValues)}\n      )`;\n    var statement = `var ${varName} = ${value};`;\n    targetStatements.push(new Statement(statement));\n    return new Expression(varName);\n  }\n}\n\nclass RuntimeProtoViewFactory extends ProtoViewFactory<AppProtoView, AppProtoElement, any> {\n  constructor(public metadataCache: ResolvedMetadataCache, component: CompileDirectiveMetadata,\n              public pipes: CompilePipeMetadata[]) {\n    super(component);\n  }\n\n  createAppProtoView(embeddedTemplateIndex: number, viewType: ViewType,\n                     templateVariableBindings: string[][], targetStatements: any[]): AppProtoView {\n    var pipes =\n        embeddedTemplateIndex === 0 ? this.pipes.map(pipeMeta => pipeMeta.type.runtime) : [];\n    var templateVars = keyValueArrayToStringMap(templateVariableBindings);\n    return AppProtoView.create(this.metadataCache, viewType, pipes, templateVars);\n  }\n\n  createAppProtoElement(boundElementIndex: number, attrNameAndValues: string[][],\n                        variableNameAndValues: string[][], directives: CompileDirectiveMetadata[],\n                        targetStatements: any[]): AppProtoElement {\n    var attrs = keyValueArrayToStringMap(attrNameAndValues);\n    return AppProtoElement.create(this.metadataCache, boundElementIndex, attrs,\n                                  directives.map(dirMeta => dirMeta.type.runtime),\n                                  keyValueArrayToStringMap(variableNameAndValues));\n  }\n}\n\nclass ProtoViewBuilderVisitor<APP_PROTO_VIEW, APP_PROTO_EL, STATEMENT> implements\n    TemplateAstVisitor {\n  protoElements: CompileProtoElement<APP_PROTO_EL>[] = [];\n  boundElementCount: number = 0;\n\n  constructor(public factory: ProtoViewFactory<APP_PROTO_VIEW, APP_PROTO_EL, STATEMENT>,\n              public allStatements: STATEMENT[],\n              public allProtoViews: CompileProtoView<APP_PROTO_VIEW, APP_PROTO_EL>[]) {}\n\n  private _readAttrNameAndValues(directives: CompileDirectiveMetadata[],\n                                 attrAsts: TemplateAst[]): string[][] {\n    var attrs = visitAndReturnContext(this, attrAsts, {});\n    directives.forEach(directiveMeta => {\n      StringMapWrapper.forEach(directiveMeta.hostAttributes, (value: string, name: string) => {\n        var prevValue = attrs[name];\n        attrs[name] = isPresent(prevValue) ? mergeAttributeValue(name, prevValue, value) : value;\n      });\n    });\n    return mapToKeyValueArray(attrs);\n  }\n\n  visitBoundText(ast: BoundTextAst, context: any): any { return null; }\n  visitText(ast: TextAst, context: any): any { return null; }\n\n  visitNgContent(ast: NgContentAst, context: any): any { return null; }\n\n  visitElement(ast: ElementAst, context: any): any {\n    var boundElementIndex = null;\n    if (ast.isBound()) {\n      boundElementIndex = this.boundElementCount++;\n    }\n    var component = ast.getComponent();\n\n    var variableNameAndValues: string[][] = [];\n    if (isBlank(component)) {\n      ast.exportAsVars.forEach((varAst) => { variableNameAndValues.push([varAst.name, null]); });\n    }\n    var directives = [];\n    var renderEvents: Map<string, BoundEventAst> =\n        visitAndReturnContext(this, ast.outputs, new Map<string, BoundEventAst>());\n    ListWrapper.forEachWithIndex(ast.directives, (directiveAst: DirectiveAst, index: number) => {\n      directiveAst.visit(this, new DirectiveContext(index, boundElementIndex, renderEvents,\n                                                    variableNameAndValues, directives));\n    });\n    var renderEventArray = [];\n    renderEvents.forEach((eventAst, _) => renderEventArray.push(eventAst));\n\n    var attrNameAndValues = this._readAttrNameAndValues(directives, ast.attrs);\n    this._addProtoElement(ast.isBound(), boundElementIndex, attrNameAndValues,\n                          variableNameAndValues, renderEventArray, directives, null);\n    templateVisitAll(this, ast.children);\n    return null;\n  }\n\n  visitEmbeddedTemplate(ast: EmbeddedTemplateAst, context: any): any {\n    var boundElementIndex = this.boundElementCount++;\n    var directives: CompileDirectiveMetadata[] = [];\n    ListWrapper.forEachWithIndex(ast.directives, (directiveAst: DirectiveAst, index: number) => {\n      directiveAst.visit(\n          this, new DirectiveContext(index, boundElementIndex, new Map<string, BoundEventAst>(), [],\n                                     directives));\n    });\n\n    var attrNameAndValues = this._readAttrNameAndValues(directives, ast.attrs);\n    var templateVariableBindings = ast.vars.map(\n        varAst => [varAst.value.length > 0 ? varAst.value : IMPLICIT_TEMPLATE_VAR, varAst.name]);\n    var nestedProtoView = this.factory.createCompileProtoView(\n        ast.children, templateVariableBindings, this.allStatements, this.allProtoViews);\n    this._addProtoElement(true, boundElementIndex, attrNameAndValues, [], [], directives,\n                          nestedProtoView.embeddedTemplateIndex);\n    return null;\n  }\n\n  private _addProtoElement(isBound: boolean, boundElementIndex, attrNameAndValues: string[][],\n                           variableNameAndValues: string[][], renderEvents: BoundEventAst[],\n                           directives: CompileDirectiveMetadata[], embeddedTemplateIndex: number) {\n    var appProtoEl = null;\n    if (isBound) {\n      appProtoEl =\n          this.factory.createAppProtoElement(boundElementIndex, attrNameAndValues,\n                                             variableNameAndValues, directives, this.allStatements);\n    }\n    var compileProtoEl = new CompileProtoElement<APP_PROTO_EL>(\n        boundElementIndex, attrNameAndValues, variableNameAndValues, renderEvents, directives,\n        embeddedTemplateIndex, appProtoEl);\n    this.protoElements.push(compileProtoEl);\n  }\n\n  visitVariable(ast: VariableAst, ctx: any): any { return null; }\n  visitAttr(ast: AttrAst, attrNameAndValues: {[key: string]: string}): any {\n    attrNameAndValues[ast.name] = ast.value;\n    return null;\n  }\n  visitDirective(ast: DirectiveAst, ctx: DirectiveContext): any {\n    ctx.targetDirectives.push(ast.directive);\n    templateVisitAll(this, ast.hostEvents, ctx.hostEventTargetAndNames);\n    ast.exportAsVars.forEach(\n        varAst => { ctx.targetVariableNameAndValues.push([varAst.name, ctx.index]); });\n    return null;\n  }\n  visitEvent(ast: BoundEventAst, eventTargetAndNames: Map<string, BoundEventAst>): any {\n    eventTargetAndNames.set(ast.fullName, ast);\n    return null;\n  }\n  visitDirectiveProperty(ast: BoundDirectivePropertyAst, context: any): any { return null; }\n  visitElementProperty(ast: BoundElementPropertyAst, context: any): any { return null; }\n}\n\nfunction mapToKeyValueArray(data: {[key: string]: string}): string[][] {\n  var entryArray: string[][] = [];\n  StringMapWrapper.forEach(data,\n                           (value: string, name: string) => { entryArray.push([name, value]); });\n  // We need to sort to get a defined output order\n  // for tests and for caching generated artifacts...\n  ListWrapper.sort<string[]>(entryArray, (entry1: string[], entry2: string[]) =>\n                                             StringWrapper.compare(entry1[0], entry2[0]));\n  var keyValueArray: string[][] = [];\n  entryArray.forEach((entry) => { keyValueArray.push([entry[0], entry[1]]); });\n  return keyValueArray;\n}\n\nfunction mergeAttributeValue(attrName: string, attrValue1: string, attrValue2: string): string {\n  if (attrName == CLASS_ATTR || attrName == STYLE_ATTR) {\n    return `${attrValue1} ${attrValue2}`;\n  } else {\n    return attrValue2;\n  }\n}\n\nclass DirectiveContext {\n  constructor(public index: number, public boundElementIndex: number,\n              public hostEventTargetAndNames: Map<string, BoundEventAst>,\n              public targetVariableNameAndValues: any[][],\n              public targetDirectives: CompileDirectiveMetadata[]) {}\n}\n\nfunction keyValueArrayToStringMap(keyValueArray: any[][]): {[key: string]: any} {\n  var stringMap: {[key: string]: string} = {};\n  for (var i = 0; i < keyValueArray.length; i++) {\n    var entry = keyValueArray[i];\n    stringMap[entry[0]] = entry[1];\n  }\n  return stringMap;\n}\n\nfunction codeGenDirectivesArray(directives: CompileDirectiveMetadata[]): string {\n  var expressions = directives.map(directiveType => typeRef(directiveType.type));\n  return `[${expressions.join(',')}]`;\n}\n\nfunction codeGenTypesArray(types: CompileTypeMetadata[]): string {\n  var expressions = types.map(typeRef);\n  return `[${expressions.join(',')}]`;\n}\n\nfunction codeGenViewType(value: ViewType): string {\n  if (IS_DART) {\n    return `${VIEW_TYPE_MODULE_REF}${value}`;\n  } else {\n    return `${value}`;\n  }\n}\n\nfunction typeRef(type: CompileTypeMetadata): string {\n  return `${moduleRef(type.moduleUrl)}${type.name}`;\n}\n\nfunction getViewType(component: CompileDirectiveMetadata, embeddedTemplateIndex: number): ViewType {\n  if (embeddedTemplateIndex > 0) {\n    return ViewType.EMBEDDED;\n  } else if (component.type.isHost) {\n    return ViewType.HOST;\n  } else {\n    return ViewType.COMPONENT;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/proto_view_compiler.ts\n **/","export class ElementSchemaRegistry {\n  hasProperty(tagName: string, propName: string): boolean { return true; }\n  getMappedPropName(propName: string): string { return propName; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/schema/element_schema_registry.ts\n **/","// Some of the code comes from WebComponents.JS\n// https://github.com/webcomponents/webcomponentsjs/blob/master/src/HTMLImports/path.js\n\nimport {RegExp, RegExpWrapper, StringWrapper, isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {UrlResolver} from 'angular2/src/compiler/url_resolver';\n\nexport class StyleWithImports {\n  constructor(public style: string, public styleUrls: string[]) {}\n}\n\nexport function isStyleUrlResolvable(url: string): boolean {\n  if (isBlank(url) || url.length === 0 || url[0] == '/') return false;\n  var schemeMatch = RegExpWrapper.firstMatch(_urlWithSchemaRe, url);\n  return isBlank(schemeMatch) || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset';\n}\n\n/**\n * Rewrites stylesheets by resolving and removing the @import urls that\n * are either relative or don't have a `package:` scheme\n */\nexport function extractStyleUrls(resolver: UrlResolver, baseUrl: string,\n                                 cssText: string): StyleWithImports {\n  var foundUrls = [];\n  var modifiedCssText = StringWrapper.replaceAllMapped(cssText, _cssImportRe, (m) => {\n    var url = isPresent(m[1]) ? m[1] : m[2];\n    if (!isStyleUrlResolvable(url)) {\n      // Do not attempt to resolve non-package absolute URLs with URI scheme\n      return m[0];\n    }\n    foundUrls.push(resolver.resolve(baseUrl, url));\n    return '';\n  });\n  return new StyleWithImports(modifiedCssText, foundUrls);\n}\n\nvar _cssImportRe = /@import\\s+(?:url\\()?\\s*(?:(?:['\"]([^'\"]*))|([^;\\)\\s]*))[^;]*;?/g;\n// TODO: can't use /^[^:/?#.]+:/g due to clang-format bug:\n//       https://github.com/angular/angular/issues/4596\nvar _urlWithSchemaRe = /^([a-zA-Z\\-\\+\\.]+):/g;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/style_url_resolver.ts\n **/","import {\n  IS_DART,\n  Type,\n  Json,\n  isBlank,\n  isPresent,\n  stringify,\n  evalExpression\n} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {\n  ListWrapper,\n  SetWrapper,\n  MapWrapper,\n  StringMapWrapper\n} from 'angular2/src/facade/collection';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\nimport {\n  createHostComponentMeta,\n  CompileDirectiveMetadata,\n  CompileTypeMetadata,\n  CompileTemplateMetadata,\n  CompilePipeMetadata,\n  CompileMetadataWithType\n} from './directive_metadata';\nimport {\n  TemplateAst,\n  TemplateAstVisitor,\n  NgContentAst,\n  EmbeddedTemplateAst,\n  ElementAst,\n  VariableAst,\n  BoundEventAst,\n  BoundElementPropertyAst,\n  AttrAst,\n  BoundTextAst,\n  TextAst,\n  DirectiveAst,\n  BoundDirectivePropertyAst,\n  templateVisitAll\n} from './template_ast';\nimport {Injectable} from 'angular2/src/core/di';\nimport {SourceModule, moduleRef, SourceExpression} from './source_module';\nimport {ChangeDetectionCompiler, CHANGE_DETECTION_JIT_IMPORTS} from './change_detector_compiler';\nimport {StyleCompiler} from './style_compiler';\nimport {ViewCompiler, VIEW_JIT_IMPORTS} from './view_compiler';\nimport {\n  ProtoViewCompiler,\n  APP_VIEW_MODULE_REF,\n  CompileProtoView,\n  PROTO_VIEW_JIT_IMPORTS\n} from './proto_view_compiler';\nimport {TemplateParser, PipeCollector} from './template_parser';\nimport {TemplateNormalizer} from './template_normalizer';\nimport {RuntimeMetadataResolver} from './runtime_metadata';\nimport {HostViewFactory} from 'angular2/src/core/linker/view';\nimport {ChangeDetectorGenConfig} from 'angular2/src/core/change_detection/change_detection';\nimport {ResolvedMetadataCache} from 'angular2/src/core/linker/resolved_metadata_cache';\n\nimport {\n  codeGenExportVariable,\n  escapeSingleQuoteString,\n  codeGenValueFn,\n  MODULE_SUFFIX,\n  addAll,\n  Expression\n} from './util';\n\nexport var METADATA_CACHE_MODULE_REF =\n    moduleRef('package:angular2/src/core/linker/resolved_metadata_cache' + MODULE_SUFFIX);\n\n/**\n * An internal module of the Angular compiler that begins with component types,\n * extracts templates, and eventually produces a compiled version of the component\n * ready for linking into an application.\n */\n@Injectable()\nexport class TemplateCompiler {\n  private _hostCacheKeys = new Map<Type, any>();\n  private _compiledTemplateCache = new Map<any, CompiledTemplate>();\n  private _compiledTemplateDone = new Map<any, Promise<CompiledTemplate>>();\n\n  constructor(private _runtimeMetadataResolver: RuntimeMetadataResolver,\n              private _templateNormalizer: TemplateNormalizer,\n              private _templateParser: TemplateParser, private _styleCompiler: StyleCompiler,\n              private _cdCompiler: ChangeDetectionCompiler,\n              private _protoViewCompiler: ProtoViewCompiler, private _viewCompiler: ViewCompiler,\n              private _resolvedMetadataCache: ResolvedMetadataCache,\n              private _genConfig: ChangeDetectorGenConfig) {}\n\n  normalizeDirectiveMetadata(directive: CompileDirectiveMetadata):\n      Promise<CompileDirectiveMetadata> {\n    if (!directive.isComponent) {\n      // For non components there is nothing to be normalized yet.\n      return PromiseWrapper.resolve(directive);\n    }\n\n    return this._templateNormalizer.normalizeTemplate(directive.type, directive.template)\n        .then((normalizedTemplate: CompileTemplateMetadata) => new CompileDirectiveMetadata({\n                type: directive.type,\n                isComponent: directive.isComponent,\n                dynamicLoadable: directive.dynamicLoadable,\n                selector: directive.selector,\n                exportAs: directive.exportAs,\n                changeDetection: directive.changeDetection,\n                inputs: directive.inputs,\n                outputs: directive.outputs,\n                hostListeners: directive.hostListeners,\n                hostProperties: directive.hostProperties,\n                hostAttributes: directive.hostAttributes,\n                lifecycleHooks: directive.lifecycleHooks,\n                providers: directive.providers,\n                template: normalizedTemplate\n              }));\n  }\n\n  compileHostComponentRuntime(type: Type): Promise<HostViewFactory> {\n    var compMeta: CompileDirectiveMetadata =\n        this._runtimeMetadataResolver.getDirectiveMetadata(type);\n    var hostCacheKey = this._hostCacheKeys.get(type);\n    if (isBlank(hostCacheKey)) {\n      hostCacheKey = new Object();\n      this._hostCacheKeys.set(type, hostCacheKey);\n      assertComponent(compMeta);\n      var hostMeta: CompileDirectiveMetadata =\n          createHostComponentMeta(compMeta.type, compMeta.selector);\n\n      this._compileComponentRuntime(hostCacheKey, hostMeta, [compMeta], [], []);\n    }\n    return this._compiledTemplateDone.get(hostCacheKey)\n        .then((compiledTemplate: CompiledTemplate) =>\n                  new HostViewFactory(compMeta.selector, compiledTemplate.viewFactory));\n  }\n\n  clearCache() {\n    this._styleCompiler.clearCache();\n    this._compiledTemplateCache.clear();\n    this._compiledTemplateDone.clear();\n    this._hostCacheKeys.clear();\n  }\n\n  compileTemplatesCodeGen(components: NormalizedComponentWithViewDirectives[]): SourceModule {\n    if (components.length === 0) {\n      throw new BaseException('No components given');\n    }\n    var declarations = [];\n    components.forEach(componentWithDirs => {\n      var compMeta = <CompileDirectiveMetadata>componentWithDirs.component;\n      assertComponent(compMeta);\n      this._compileComponentCodeGen(compMeta, componentWithDirs.directives, componentWithDirs.pipes,\n                                    declarations);\n      if (compMeta.dynamicLoadable) {\n        var hostMeta = createHostComponentMeta(compMeta.type, compMeta.selector);\n        var viewFactoryExpression =\n            this._compileComponentCodeGen(hostMeta, [compMeta], [], declarations);\n        var constructionKeyword = IS_DART ? 'const' : 'new';\n        var compiledTemplateExpr =\n            `${constructionKeyword} ${APP_VIEW_MODULE_REF}HostViewFactory('${compMeta.selector}',${viewFactoryExpression})`;\n        var varName = codeGenHostViewFactoryName(compMeta.type);\n        declarations.push(`${codeGenExportVariable(varName)}${compiledTemplateExpr};`);\n      }\n    });\n    var moduleUrl = components[0].component.type.moduleUrl;\n    return new SourceModule(`${templateModuleUrl(moduleUrl)}`, declarations.join('\\n'));\n  }\n\n  compileStylesheetCodeGen(stylesheetUrl: string, cssText: string): SourceModule[] {\n    return this._styleCompiler.compileStylesheetCodeGen(stylesheetUrl, cssText);\n  }\n\n\n\n  private _compileComponentRuntime(cacheKey: any, compMeta: CompileDirectiveMetadata,\n                                   viewDirectives: CompileDirectiveMetadata[],\n                                   pipes: CompilePipeMetadata[],\n                                   compilingComponentsPath: any[]): CompiledTemplate {\n    let uniqViewDirectives = <CompileDirectiveMetadata[]>removeDuplicates(viewDirectives);\n    let uniqViewPipes = <CompilePipeMetadata[]>removeDuplicates(pipes);\n    var compiledTemplate = this._compiledTemplateCache.get(cacheKey);\n    var done = this._compiledTemplateDone.get(cacheKey);\n    if (isBlank(compiledTemplate)) {\n      compiledTemplate = new CompiledTemplate();\n      this._compiledTemplateCache.set(cacheKey, compiledTemplate);\n      done = PromiseWrapper\n                 .all([<any>this._styleCompiler.compileComponentRuntime(compMeta.template)].concat(\n                     uniqViewDirectives.map(dirMeta => this.normalizeDirectiveMetadata(dirMeta))))\n                 .then((stylesAndNormalizedViewDirMetas: any[]) => {\n                   var normalizedViewDirMetas = stylesAndNormalizedViewDirMetas.slice(1);\n                   var styles = stylesAndNormalizedViewDirMetas[0];\n                   var parsedTemplate = this._templateParser.parse(\n                       compMeta.template.template, normalizedViewDirMetas, uniqViewPipes,\n                       compMeta.type.name);\n\n                   var childPromises = [];\n                   var usedDirectives = DirectiveCollector.findUsedDirectives(parsedTemplate);\n                   usedDirectives.components.forEach(\n                       component => this._compileNestedComponentRuntime(\n                           component, compilingComponentsPath, childPromises));\n                   return PromiseWrapper.all(childPromises)\n                       .then((_) => {\n                         var filteredPipes = filterPipes(parsedTemplate, uniqViewPipes);\n                         compiledTemplate.init(this._createViewFactoryRuntime(\n                             compMeta, parsedTemplate, usedDirectives.directives, styles,\n                             filteredPipes));\n                         return compiledTemplate;\n                       });\n                 });\n      this._compiledTemplateDone.set(cacheKey, done);\n    }\n    return compiledTemplate;\n  }\n\n  private _compileNestedComponentRuntime(childComponentDir: CompileDirectiveMetadata,\n                                         parentCompilingComponentsPath: any[],\n                                         childPromises: Promise<any>[]) {\n    var compilingComponentsPath = ListWrapper.clone(parentCompilingComponentsPath);\n\n    var childCacheKey = childComponentDir.type.runtime;\n    var childViewDirectives: CompileDirectiveMetadata[] =\n        this._runtimeMetadataResolver.getViewDirectivesMetadata(childComponentDir.type.runtime);\n    var childViewPipes: CompilePipeMetadata[] =\n        this._runtimeMetadataResolver.getViewPipesMetadata(childComponentDir.type.runtime);\n    var childIsRecursive = ListWrapper.contains(compilingComponentsPath, childCacheKey);\n    compilingComponentsPath.push(childCacheKey);\n    this._compileComponentRuntime(childCacheKey, childComponentDir, childViewDirectives,\n                                  childViewPipes, compilingComponentsPath);\n    if (!childIsRecursive) {\n      // Only wait for a child if it is not a cycle\n      childPromises.push(this._compiledTemplateDone.get(childCacheKey));\n    }\n  }\n\n  private _createViewFactoryRuntime(compMeta: CompileDirectiveMetadata,\n                                    parsedTemplate: TemplateAst[],\n                                    directives: CompileDirectiveMetadata[], styles: string[],\n                                    pipes: CompilePipeMetadata[]): Function {\n    if (IS_DART || !this._genConfig.useJit) {\n      var changeDetectorFactories = this._cdCompiler.compileComponentRuntime(\n          compMeta.type, compMeta.changeDetection, parsedTemplate);\n      var protoViews = this._protoViewCompiler.compileProtoViewRuntime(\n          this._resolvedMetadataCache, compMeta, parsedTemplate, pipes);\n      return this._viewCompiler.compileComponentRuntime(\n          compMeta, parsedTemplate, styles, protoViews.protoViews, changeDetectorFactories,\n          (compMeta) => this._getNestedComponentViewFactory(compMeta));\n    } else {\n      var declarations = [];\n      var viewFactoryExpr = this._createViewFactoryCodeGen('resolvedMetadataCache', compMeta,\n                                                           new SourceExpression([], 'styles'),\n                                                           parsedTemplate, pipes, declarations);\n      var vars: {[key: string]: any} =\n          {'exports': {}, 'styles': styles, 'resolvedMetadataCache': this._resolvedMetadataCache};\n      directives.forEach(dirMeta => {\n        vars[dirMeta.type.name] = dirMeta.type.runtime;\n        if (dirMeta.isComponent && dirMeta.type.runtime !== compMeta.type.runtime) {\n          vars[`viewFactory_${dirMeta.type.name}0`] = this._getNestedComponentViewFactory(dirMeta);\n        }\n      });\n      pipes.forEach(pipeMeta => vars[pipeMeta.type.name] = pipeMeta.type.runtime);\n      var declarationsWithoutImports =\n          SourceModule.getSourceWithoutImports(declarations.join('\\n'));\n      return evalExpression(\n          `viewFactory_${compMeta.type.name}`, viewFactoryExpr, declarationsWithoutImports,\n          mergeStringMaps(\n              [vars, CHANGE_DETECTION_JIT_IMPORTS, PROTO_VIEW_JIT_IMPORTS, VIEW_JIT_IMPORTS]));\n    }\n  }\n\n  private _getNestedComponentViewFactory(compMeta: CompileDirectiveMetadata): Function {\n    return this._compiledTemplateCache.get(compMeta.type.runtime).viewFactory;\n  }\n\n  private _compileComponentCodeGen(compMeta: CompileDirectiveMetadata,\n                                   directives: CompileDirectiveMetadata[],\n                                   pipes: CompilePipeMetadata[],\n                                   targetDeclarations: string[]): string {\n    let uniqueDirectives = <CompileDirectiveMetadata[]>removeDuplicates(directives);\n    let uniqPipes = <CompilePipeMetadata[]>removeDuplicates(pipes);\n    var styleExpr = this._styleCompiler.compileComponentCodeGen(compMeta.template);\n    var parsedTemplate = this._templateParser.parse(compMeta.template.template, uniqueDirectives,\n                                                    uniqPipes, compMeta.type.name);\n    var filteredPipes = filterPipes(parsedTemplate, uniqPipes);\n    return this._createViewFactoryCodeGen(\n        `${METADATA_CACHE_MODULE_REF}CODEGEN_RESOLVED_METADATA_CACHE`, compMeta, styleExpr,\n        parsedTemplate, filteredPipes, targetDeclarations);\n  }\n\n  private _createViewFactoryCodeGen(resolvedMetadataCacheExpr: string,\n                                    compMeta: CompileDirectiveMetadata, styleExpr: SourceExpression,\n                                    parsedTemplate: TemplateAst[], pipes: CompilePipeMetadata[],\n                                    targetDeclarations: string[]): string {\n    var changeDetectorsExprs = this._cdCompiler.compileComponentCodeGen(\n        compMeta.type, compMeta.changeDetection, parsedTemplate);\n    var protoViewExprs = this._protoViewCompiler.compileProtoViewCodeGen(\n        new Expression(resolvedMetadataCacheExpr), compMeta, parsedTemplate, pipes);\n    var viewFactoryExpr = this._viewCompiler.compileComponentCodeGen(\n        compMeta, parsedTemplate, styleExpr, protoViewExprs.protoViews, changeDetectorsExprs,\n        codeGenComponentViewFactoryName);\n\n    addAll(changeDetectorsExprs.declarations, targetDeclarations);\n    addAll(protoViewExprs.declarations, targetDeclarations);\n    addAll(viewFactoryExpr.declarations, targetDeclarations);\n\n    return viewFactoryExpr.expression;\n  }\n}\n\nexport class NormalizedComponentWithViewDirectives {\n  constructor(public component: CompileDirectiveMetadata,\n              public directives: CompileDirectiveMetadata[], public pipes: CompilePipeMetadata[]) {}\n}\n\nclass CompiledTemplate {\n  viewFactory: Function = null;\n  init(viewFactory: Function) { this.viewFactory = viewFactory; }\n}\n\nfunction assertComponent(meta: CompileDirectiveMetadata) {\n  if (!meta.isComponent) {\n    throw new BaseException(`Could not compile '${meta.type.name}' because it is not a component.`);\n  }\n}\n\nfunction templateModuleUrl(moduleUrl: string): string {\n  var urlWithoutSuffix = moduleUrl.substring(0, moduleUrl.length - MODULE_SUFFIX.length);\n  return `${urlWithoutSuffix}.template${MODULE_SUFFIX}`;\n}\n\n\nfunction codeGenHostViewFactoryName(type: CompileTypeMetadata): string {\n  return `hostViewFactory_${type.name}`;\n}\n\nfunction codeGenComponentViewFactoryName(nestedCompType: CompileDirectiveMetadata): string {\n  return `${moduleRef(templateModuleUrl(nestedCompType.type.moduleUrl))}viewFactory_${nestedCompType.type.name}0`;\n}\n\nfunction mergeStringMaps(maps: Array<{[key: string]: any}>): {[key: string]: any} {\n  var result = {};\n  maps.forEach(\n      (map) => { StringMapWrapper.forEach(map, (value, key) => { result[key] = value; }); });\n  return result;\n}\n\nfunction removeDuplicates(items: CompileMetadataWithType[]): CompileMetadataWithType[] {\n  let res = [];\n  items.forEach(item => {\n    let hasMatch =\n        res.filter(r => r.type.name == item.type.name && r.type.moduleUrl == item.type.moduleUrl &&\n                        r.type.runtime == item.type.runtime)\n            .length > 0;\n    if (!hasMatch) {\n      res.push(item);\n    }\n  });\n  return res;\n}\n\nclass DirectiveCollector implements TemplateAstVisitor {\n  static findUsedDirectives(parsedTemplate: TemplateAst[]): DirectiveCollector {\n    var collector = new DirectiveCollector();\n    templateVisitAll(collector, parsedTemplate);\n    return collector;\n  }\n\n  directives: CompileDirectiveMetadata[] = [];\n  components: CompileDirectiveMetadata[] = [];\n\n  visitBoundText(ast: BoundTextAst, context: any): any { return null; }\n  visitText(ast: TextAst, context: any): any { return null; }\n\n  visitNgContent(ast: NgContentAst, context: any): any { return null; }\n\n  visitElement(ast: ElementAst, context: any): any {\n    templateVisitAll(this, ast.directives);\n    templateVisitAll(this, ast.children);\n    return null;\n  }\n\n  visitEmbeddedTemplate(ast: EmbeddedTemplateAst, context: any): any {\n    templateVisitAll(this, ast.directives);\n    templateVisitAll(this, ast.children);\n    return null;\n  }\n  visitVariable(ast: VariableAst, ctx: any): any { return null; }\n  visitAttr(ast: AttrAst, attrNameAndValues: {[key: string]: string}): any { return null; }\n  visitDirective(ast: DirectiveAst, ctx: any): any {\n    if (ast.directive.isComponent) {\n      this.components.push(ast.directive);\n    }\n    this.directives.push(ast.directive);\n    return null;\n  }\n  visitEvent(ast: BoundEventAst, eventTargetAndNames: Map<string, BoundEventAst>): any {\n    return null;\n  }\n  visitDirectiveProperty(ast: BoundDirectivePropertyAst, context: any): any { return null; }\n  visitElementProperty(ast: BoundElementPropertyAst, context: any): any { return null; }\n}\n\n\nfunction filterPipes(template: TemplateAst[],\n                     allPipes: CompilePipeMetadata[]): CompilePipeMetadata[] {\n  var visitor = new PipeVisitor();\n  templateVisitAll(visitor, template);\n  return allPipes.filter((pipeMeta) => SetWrapper.has(visitor.collector.pipes, pipeMeta.name));\n}\n\nclass PipeVisitor implements TemplateAstVisitor {\n  collector: PipeCollector = new PipeCollector();\n\n  visitBoundText(ast: BoundTextAst, context: any): any {\n    ast.value.visit(this.collector);\n    return null;\n  }\n  visitText(ast: TextAst, context: any): any { return null; }\n\n  visitNgContent(ast: NgContentAst, context: any): any { return null; }\n\n  visitElement(ast: ElementAst, context: any): any {\n    templateVisitAll(this, ast.inputs);\n    templateVisitAll(this, ast.outputs);\n    templateVisitAll(this, ast.directives);\n    templateVisitAll(this, ast.children);\n    return null;\n  }\n\n  visitEmbeddedTemplate(ast: EmbeddedTemplateAst, context: any): any {\n    templateVisitAll(this, ast.outputs);\n    templateVisitAll(this, ast.directives);\n    templateVisitAll(this, ast.children);\n    return null;\n  }\n  visitVariable(ast: VariableAst, ctx: any): any { return null; }\n  visitAttr(ast: AttrAst, attrNameAndValues: {[key: string]: string}): any { return null; }\n  visitDirective(ast: DirectiveAst, ctx: any): any {\n    templateVisitAll(this, ast.inputs);\n    templateVisitAll(this, ast.hostEvents);\n    templateVisitAll(this, ast.hostProperties);\n    return null;\n  }\n  visitEvent(ast: BoundEventAst, eventTargetAndNames: Map<string, BoundEventAst>): any {\n    ast.handler.visit(this.collector);\n    return null;\n  }\n  visitDirectiveProperty(ast: BoundDirectivePropertyAst, context: any): any {\n    ast.value.visit(this.collector);\n    return null;\n  }\n  visitElementProperty(ast: BoundElementPropertyAst, context: any): any {\n    ast.value.visit(this.collector);\n    return null;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/template_compiler.ts\n **/","import {ListWrapper, StringMapWrapper, SetWrapper} from 'angular2/src/facade/collection';\nimport {RegExpWrapper, isPresent, StringWrapper, isBlank} from 'angular2/src/facade/lang';\nimport {Injectable, Inject, OpaqueToken, Optional} from 'angular2/core';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {Parser, AST, ASTWithSource} from 'angular2/src/core/change_detection/change_detection';\nimport {TemplateBinding} from 'angular2/src/core/change_detection/parser/ast';\nimport {CompileDirectiveMetadata, CompilePipeMetadata} from './directive_metadata';\nimport {HtmlParser} from './html_parser';\nimport {splitNsName, mergeNsAndName} from './html_tags';\nimport {ParseSourceSpan, ParseError, ParseLocation} from './parse_util';\nimport {RecursiveAstVisitor, BindingPipe} from 'angular2/src/core/change_detection/parser/ast';\n\nimport {\n  ElementAst,\n  BoundElementPropertyAst,\n  BoundEventAst,\n  VariableAst,\n  TemplateAst,\n  TemplateAstVisitor,\n  templateVisitAll,\n  TextAst,\n  BoundTextAst,\n  EmbeddedTemplateAst,\n  AttrAst,\n  NgContentAst,\n  PropertyBindingType,\n  DirectiveAst,\n  BoundDirectivePropertyAst\n} from './template_ast';\nimport {CssSelector, SelectorMatcher} from 'angular2/src/compiler/selector';\n\nimport {ElementSchemaRegistry} from 'angular2/src/compiler/schema/element_schema_registry';\nimport {preparseElement, PreparsedElement, PreparsedElementType} from './template_preparser';\n\nimport {isStyleUrlResolvable} from './style_url_resolver';\n\nimport {\n  HtmlAstVisitor,\n  HtmlAst,\n  HtmlElementAst,\n  HtmlAttrAst,\n  HtmlTextAst,\n  HtmlCommentAst,\n  htmlVisitAll\n} from './html_ast';\n\nimport {splitAtColon} from './util';\n\n// Group 1 = \"bind-\"\n// Group 2 = \"var-\" or \"#\"\n// Group 3 = \"on-\"\n// Group 4 = \"bindon-\"\n// Group 5 = the identifier after \"bind-\", \"var-/#\", or \"on-\"\n// Group 6 = identifier inside [()]\n// Group 7 = identifier inside []\n// Group 8 = identifier inside ()\nvar BIND_NAME_REGEXP =\n    /^(?:(?:(?:(bind-)|(var-|#)|(on-)|(bindon-))(.+))|\\[\\(([^\\)]+)\\)\\]|\\[([^\\]]+)\\]|\\(([^\\)]+)\\))$/g;\n\nconst TEMPLATE_ELEMENT = 'template';\nconst TEMPLATE_ATTR = 'template';\nconst TEMPLATE_ATTR_PREFIX = '*';\nconst CLASS_ATTR = 'class';\n\nvar PROPERTY_PARTS_SEPARATOR = '.';\nconst ATTRIBUTE_PREFIX = 'attr';\nconst CLASS_PREFIX = 'class';\nconst STYLE_PREFIX = 'style';\n\nvar TEXT_CSS_SELECTOR = CssSelector.parse('*')[0];\n\n/**\n * Provides an array of {@link TemplateAstVisitor}s which will be used to transform\n * parsed templates before compilation is invoked, allowing custom expression syntax\n * and other advanced transformations.\n *\n * This is currently an internal-only feature and not meant for general use.\n */\nexport const TEMPLATE_TRANSFORMS = CONST_EXPR(new OpaqueToken('TemplateTransforms'));\n\nexport class TemplateParseError extends ParseError {\n  constructor(message: string, span: ParseSourceSpan) { super(span, message); }\n}\n\n@Injectable()\nexport class TemplateParser {\n  constructor(private _exprParser: Parser, private _schemaRegistry: ElementSchemaRegistry,\n              private _htmlParser: HtmlParser,\n              @Optional() @Inject(TEMPLATE_TRANSFORMS) public transforms: TemplateAstVisitor[]) {}\n\n  parse(template: string, directives: CompileDirectiveMetadata[], pipes: CompilePipeMetadata[],\n        templateUrl: string): TemplateAst[] {\n    var parseVisitor =\n        new TemplateParseVisitor(directives, pipes, this._exprParser, this._schemaRegistry);\n    var htmlAstWithErrors = this._htmlParser.parse(template, templateUrl);\n    var result = htmlVisitAll(parseVisitor, htmlAstWithErrors.rootNodes, EMPTY_COMPONENT);\n    var errors: ParseError[] = htmlAstWithErrors.errors.concat(parseVisitor.errors);\n    if (errors.length > 0) {\n      var errorString = errors.join('\\n');\n      throw new BaseException(`Template parse errors:\\n${errorString}`);\n    }\n    if (isPresent(this.transforms)) {\n      this.transforms.forEach(\n          (transform: TemplateAstVisitor) => { result = templateVisitAll(transform, result); });\n    }\n    return result;\n  }\n}\n\nclass TemplateParseVisitor implements HtmlAstVisitor {\n  selectorMatcher: SelectorMatcher;\n  errors: TemplateParseError[] = [];\n  directivesIndex = new Map<CompileDirectiveMetadata, number>();\n  ngContentCount: number = 0;\n  pipesByName: Map<string, CompilePipeMetadata>;\n\n  constructor(directives: CompileDirectiveMetadata[], pipes: CompilePipeMetadata[],\n              private _exprParser: Parser, private _schemaRegistry: ElementSchemaRegistry) {\n    this.selectorMatcher = new SelectorMatcher();\n    ListWrapper.forEachWithIndex(directives,\n                                 (directive: CompileDirectiveMetadata, index: number) => {\n                                   var selector = CssSelector.parse(directive.selector);\n                                   this.selectorMatcher.addSelectables(selector, directive);\n                                   this.directivesIndex.set(directive, index);\n                                 });\n    this.pipesByName = new Map<string, CompilePipeMetadata>();\n    pipes.forEach(pipe => this.pipesByName.set(pipe.name, pipe));\n  }\n\n  private _reportError(message: string, sourceSpan: ParseSourceSpan) {\n    this.errors.push(new TemplateParseError(message, sourceSpan));\n  }\n\n  private _parseInterpolation(value: string, sourceSpan: ParseSourceSpan): ASTWithSource {\n    var sourceInfo = sourceSpan.start.toString();\n    try {\n      var ast = this._exprParser.parseInterpolation(value, sourceInfo);\n      this._checkPipes(ast, sourceSpan);\n      return ast;\n    } catch (e) {\n      this._reportError(`${e}`, sourceSpan);\n      return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n    }\n  }\n\n  private _parseAction(value: string, sourceSpan: ParseSourceSpan): ASTWithSource {\n    var sourceInfo = sourceSpan.start.toString();\n    try {\n      var ast = this._exprParser.parseAction(value, sourceInfo);\n      this._checkPipes(ast, sourceSpan);\n      return ast;\n    } catch (e) {\n      this._reportError(`${e}`, sourceSpan);\n      return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n    }\n  }\n\n  private _parseBinding(value: string, sourceSpan: ParseSourceSpan): ASTWithSource {\n    var sourceInfo = sourceSpan.start.toString();\n    try {\n      var ast = this._exprParser.parseBinding(value, sourceInfo);\n      this._checkPipes(ast, sourceSpan);\n      return ast;\n    } catch (e) {\n      this._reportError(`${e}`, sourceSpan);\n      return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo);\n    }\n  }\n\n  private _parseTemplateBindings(value: string, sourceSpan: ParseSourceSpan): TemplateBinding[] {\n    var sourceInfo = sourceSpan.start.toString();\n    try {\n      var bindings = this._exprParser.parseTemplateBindings(value, sourceInfo);\n      bindings.forEach((binding) => {\n        if (isPresent(binding.expression)) {\n          this._checkPipes(binding.expression, sourceSpan);\n        }\n      });\n      return bindings;\n    } catch (e) {\n      this._reportError(`${e}`, sourceSpan);\n      return [];\n    }\n  }\n\n  private _checkPipes(ast: ASTWithSource, sourceSpan: ParseSourceSpan) {\n    if (isPresent(ast)) {\n      var collector = new PipeCollector();\n      ast.visit(collector);\n      collector.pipes.forEach((pipeName) => {\n        if (!this.pipesByName.has(pipeName)) {\n          this._reportError(`The pipe '${pipeName}' could not be found`, sourceSpan);\n        }\n      });\n    }\n  }\n\n  visitText(ast: HtmlTextAst, component: Component): any {\n    var ngContentIndex = component.findNgContentIndex(TEXT_CSS_SELECTOR);\n    var expr = this._parseInterpolation(ast.value, ast.sourceSpan);\n    if (isPresent(expr)) {\n      return new BoundTextAst(expr, ngContentIndex, ast.sourceSpan);\n    } else {\n      return new TextAst(ast.value, ngContentIndex, ast.sourceSpan);\n    }\n  }\n\n  visitAttr(ast: HtmlAttrAst, contex: any): any {\n    return new AttrAst(ast.name, ast.value, ast.sourceSpan);\n  }\n\n  visitComment(ast: HtmlCommentAst, context: any): any { return null; }\n\n  visitElement(element: HtmlElementAst, component: Component): any {\n    var nodeName = element.name;\n    var preparsedElement = preparseElement(element);\n    if (preparsedElement.type === PreparsedElementType.SCRIPT ||\n        preparsedElement.type === PreparsedElementType.STYLE) {\n      // Skipping <script> for security reasons\n      // Skipping <style> as we already processed them\n      // in the StyleCompiler\n      return null;\n    }\n    if (preparsedElement.type === PreparsedElementType.STYLESHEET &&\n        isStyleUrlResolvable(preparsedElement.hrefAttr)) {\n      // Skipping stylesheets with either relative urls or package scheme as we already processed\n      // them in the StyleCompiler\n      return null;\n    }\n\n    var matchableAttrs: string[][] = [];\n    var elementOrDirectiveProps: BoundElementOrDirectiveProperty[] = [];\n    var vars: VariableAst[] = [];\n    var events: BoundEventAst[] = [];\n\n    var templateElementOrDirectiveProps: BoundElementOrDirectiveProperty[] = [];\n    var templateVars: VariableAst[] = [];\n    var templateMatchableAttrs: string[][] = [];\n    var hasInlineTemplates = false;\n    var attrs = [];\n\n    element.attrs.forEach(attr => {\n      var hasBinding = this._parseAttr(attr, matchableAttrs, elementOrDirectiveProps, events, vars);\n      var hasTemplateBinding = this._parseInlineTemplateBinding(\n          attr, templateMatchableAttrs, templateElementOrDirectiveProps, templateVars);\n      if (!hasBinding && !hasTemplateBinding) {\n        // don't include the bindings as attributes as well in the AST\n        attrs.push(this.visitAttr(attr, null));\n        matchableAttrs.push([attr.name, attr.value]);\n      }\n      if (hasTemplateBinding) {\n        hasInlineTemplates = true;\n      }\n    });\n\n    var lcElName = splitNsName(nodeName.toLowerCase())[1];\n    var isTemplateElement = lcElName == TEMPLATE_ELEMENT;\n    var elementCssSelector = createElementCssSelector(nodeName, matchableAttrs);\n    var directives = this._createDirectiveAsts(\n        element.name, this._parseDirectives(this.selectorMatcher, elementCssSelector),\n        elementOrDirectiveProps, isTemplateElement ? [] : vars, element.sourceSpan);\n    var elementProps: BoundElementPropertyAst[] =\n        this._createElementPropertyAsts(element.name, elementOrDirectiveProps, directives);\n    var children = htmlVisitAll(preparsedElement.nonBindable ? NON_BINDABLE_VISITOR : this,\n                                element.children, Component.create(directives));\n    var elementNgContentIndex =\n        hasInlineTemplates ? null : component.findNgContentIndex(elementCssSelector);\n    var parsedElement;\n    if (preparsedElement.type === PreparsedElementType.NG_CONTENT) {\n      if (isPresent(element.children) && element.children.length > 0) {\n        this._reportError(\n            `<ng-content> element cannot have content. <ng-content> must be immediately followed by </ng-content>`,\n            element.sourceSpan);\n      }\n      parsedElement =\n          new NgContentAst(this.ngContentCount++, elementNgContentIndex, element.sourceSpan);\n    } else if (isTemplateElement) {\n      this._assertAllEventsPublishedByDirectives(directives, events);\n      this._assertNoComponentsNorElementBindingsOnTemplate(directives, elementProps,\n                                                           element.sourceSpan);\n      parsedElement = new EmbeddedTemplateAst(attrs, events, vars, directives, children,\n                                              elementNgContentIndex, element.sourceSpan);\n    } else {\n      this._assertOnlyOneComponent(directives, element.sourceSpan);\n      var elementExportAsVars = vars.filter(varAst => varAst.value.length === 0);\n      parsedElement =\n          new ElementAst(nodeName, attrs, elementProps, events, elementExportAsVars, directives,\n                         children, elementNgContentIndex, element.sourceSpan);\n    }\n    if (hasInlineTemplates) {\n      var templateCssSelector = createElementCssSelector(TEMPLATE_ELEMENT, templateMatchableAttrs);\n      var templateDirectives = this._createDirectiveAsts(\n          element.name, this._parseDirectives(this.selectorMatcher, templateCssSelector),\n          templateElementOrDirectiveProps, [], element.sourceSpan);\n      var templateElementProps: BoundElementPropertyAst[] = this._createElementPropertyAsts(\n          element.name, templateElementOrDirectiveProps, templateDirectives);\n      this._assertNoComponentsNorElementBindingsOnTemplate(templateDirectives, templateElementProps,\n                                                           element.sourceSpan);\n      parsedElement = new EmbeddedTemplateAst(\n          [], [], templateVars, templateDirectives, [parsedElement],\n          component.findNgContentIndex(templateCssSelector), element.sourceSpan);\n    }\n    return parsedElement;\n  }\n\n  private _parseInlineTemplateBinding(attr: HtmlAttrAst, targetMatchableAttrs: string[][],\n                                      targetProps: BoundElementOrDirectiveProperty[],\n                                      targetVars: VariableAst[]): boolean {\n    var templateBindingsSource = null;\n    if (attr.name == TEMPLATE_ATTR) {\n      templateBindingsSource = attr.value;\n    } else if (attr.name.startsWith(TEMPLATE_ATTR_PREFIX)) {\n      var key = attr.name.substring(TEMPLATE_ATTR_PREFIX.length);  // remove the star\n      templateBindingsSource = (attr.value.length == 0) ? key : key + ' ' + attr.value;\n    }\n    if (isPresent(templateBindingsSource)) {\n      var bindings = this._parseTemplateBindings(templateBindingsSource, attr.sourceSpan);\n      for (var i = 0; i < bindings.length; i++) {\n        var binding = bindings[i];\n        if (binding.keyIsVar) {\n          targetVars.push(new VariableAst(binding.key, binding.name, attr.sourceSpan));\n          targetMatchableAttrs.push([binding.key, binding.name]);\n        } else if (isPresent(binding.expression)) {\n          this._parsePropertyAst(binding.key, binding.expression, attr.sourceSpan,\n                                 targetMatchableAttrs, targetProps);\n        } else {\n          targetMatchableAttrs.push([binding.key, '']);\n          this._parseLiteralAttr(binding.key, null, attr.sourceSpan, targetProps);\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n\n  private _parseAttr(attr: HtmlAttrAst, targetMatchableAttrs: string[][],\n                     targetProps: BoundElementOrDirectiveProperty[], targetEvents: BoundEventAst[],\n                     targetVars: VariableAst[]): boolean {\n    var attrName = this._normalizeAttributeName(attr.name);\n    var attrValue = attr.value;\n    var bindParts = RegExpWrapper.firstMatch(BIND_NAME_REGEXP, attrName);\n    var hasBinding = false;\n    if (isPresent(bindParts)) {\n      hasBinding = true;\n      if (isPresent(bindParts[1])) {  // match: bind-prop\n        this._parseProperty(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                            targetProps);\n\n      } else if (isPresent(\n                     bindParts[2])) {  // match: var-name / var-name=\"iden\" / #name / #name=\"iden\"\n        var identifier = bindParts[5];\n        this._parseVariable(identifier, attrValue, attr.sourceSpan, targetVars);\n\n      } else if (isPresent(bindParts[3])) {  // match: on-event\n        this._parseEvent(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                         targetEvents);\n\n      } else if (isPresent(bindParts[4])) {  // match: bindon-prop\n        this._parseProperty(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                            targetProps);\n        this._parseAssignmentEvent(bindParts[5], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                                   targetEvents);\n\n      } else if (isPresent(bindParts[6])) {  // match: [(expr)]\n        this._parseProperty(bindParts[6], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                            targetProps);\n        this._parseAssignmentEvent(bindParts[6], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                                   targetEvents);\n\n      } else if (isPresent(bindParts[7])) {  // match: [expr]\n        this._parseProperty(bindParts[7], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                            targetProps);\n\n      } else if (isPresent(bindParts[8])) {  // match: (event)\n        this._parseEvent(bindParts[8], attrValue, attr.sourceSpan, targetMatchableAttrs,\n                         targetEvents);\n      }\n    } else {\n      hasBinding = this._parsePropertyInterpolation(attrName, attrValue, attr.sourceSpan,\n                                                    targetMatchableAttrs, targetProps);\n    }\n    if (!hasBinding) {\n      this._parseLiteralAttr(attrName, attrValue, attr.sourceSpan, targetProps);\n    }\n    return hasBinding;\n  }\n\n  private _normalizeAttributeName(attrName: string): string {\n    return attrName.toLowerCase().startsWith('data-') ? attrName.substring(5) : attrName;\n  }\n\n  private _parseVariable(identifier: string, value: string, sourceSpan: ParseSourceSpan,\n                         targetVars: VariableAst[]) {\n    if (identifier.indexOf('-') > -1) {\n      this._reportError(`\"-\" is not allowed in variable names`, sourceSpan);\n    }\n    targetVars.push(new VariableAst(identifier, value, sourceSpan));\n  }\n\n  private _parseProperty(name: string, expression: string, sourceSpan: ParseSourceSpan,\n                         targetMatchableAttrs: string[][],\n                         targetProps: BoundElementOrDirectiveProperty[]) {\n    this._parsePropertyAst(name, this._parseBinding(expression, sourceSpan), sourceSpan,\n                           targetMatchableAttrs, targetProps);\n  }\n\n  private _parsePropertyInterpolation(name: string, value: string, sourceSpan: ParseSourceSpan,\n                                      targetMatchableAttrs: string[][],\n                                      targetProps: BoundElementOrDirectiveProperty[]): boolean {\n    var expr = this._parseInterpolation(value, sourceSpan);\n    if (isPresent(expr)) {\n      this._parsePropertyAst(name, expr, sourceSpan, targetMatchableAttrs, targetProps);\n      return true;\n    }\n    return false;\n  }\n\n  private _parsePropertyAst(name: string, ast: ASTWithSource, sourceSpan: ParseSourceSpan,\n                            targetMatchableAttrs: string[][],\n                            targetProps: BoundElementOrDirectiveProperty[]) {\n    targetMatchableAttrs.push([name, ast.source]);\n    targetProps.push(new BoundElementOrDirectiveProperty(name, ast, false, sourceSpan));\n  }\n\n  private _parseAssignmentEvent(name: string, expression: string, sourceSpan: ParseSourceSpan,\n                                targetMatchableAttrs: string[][], targetEvents: BoundEventAst[]) {\n    this._parseEvent(`${name}Change`, `${expression}=$event`, sourceSpan, targetMatchableAttrs,\n                     targetEvents);\n  }\n\n  private _parseEvent(name: string, expression: string, sourceSpan: ParseSourceSpan,\n                      targetMatchableAttrs: string[][], targetEvents: BoundEventAst[]) {\n    // long format: 'target: eventName'\n    var parts = splitAtColon(name, [null, name]);\n    var target = parts[0];\n    var eventName = parts[1];\n    var ast = this._parseAction(expression, sourceSpan);\n    targetMatchableAttrs.push([name, ast.source]);\n    targetEvents.push(new BoundEventAst(eventName, target, ast, sourceSpan));\n    // Don't detect directives for event names for now,\n    // so don't add the event name to the matchableAttrs\n  }\n\n  private _parseLiteralAttr(name: string, value: string, sourceSpan: ParseSourceSpan,\n                            targetProps: BoundElementOrDirectiveProperty[]) {\n    targetProps.push(new BoundElementOrDirectiveProperty(\n        name, this._exprParser.wrapLiteralPrimitive(value, ''), true, sourceSpan));\n  }\n\n  private _parseDirectives(selectorMatcher: SelectorMatcher,\n                           elementCssSelector: CssSelector): CompileDirectiveMetadata[] {\n    var directives = [];\n    selectorMatcher.match(elementCssSelector,\n                          (selector, directive) => { directives.push(directive); });\n    // Need to sort the directives so that we get consistent results throughout,\n    // as selectorMatcher uses Maps inside.\n    // Also need to make components the first directive in the array\n    ListWrapper.sort(directives,\n                     (dir1: CompileDirectiveMetadata, dir2: CompileDirectiveMetadata) => {\n                       var dir1Comp = dir1.isComponent;\n                       var dir2Comp = dir2.isComponent;\n                       if (dir1Comp && !dir2Comp) {\n                         return -1;\n                       } else if (!dir1Comp && dir2Comp) {\n                         return 1;\n                       } else {\n                         return this.directivesIndex.get(dir1) - this.directivesIndex.get(dir2);\n                       }\n                     });\n    return directives;\n  }\n\n  private _createDirectiveAsts(elementName: string, directives: CompileDirectiveMetadata[],\n                               props: BoundElementOrDirectiveProperty[],\n                               possibleExportAsVars: VariableAst[],\n                               sourceSpan: ParseSourceSpan): DirectiveAst[] {\n    var matchedVariables = new Set<string>();\n    var directiveAsts = directives.map((directive: CompileDirectiveMetadata) => {\n      var hostProperties: BoundElementPropertyAst[] = [];\n      var hostEvents: BoundEventAst[] = [];\n      var directiveProperties: BoundDirectivePropertyAst[] = [];\n      this._createDirectiveHostPropertyAsts(elementName, directive.hostProperties, sourceSpan,\n                                            hostProperties);\n      this._createDirectiveHostEventAsts(directive.hostListeners, sourceSpan, hostEvents);\n      this._createDirectivePropertyAsts(directive.inputs, props, directiveProperties);\n      var exportAsVars = [];\n      possibleExportAsVars.forEach((varAst) => {\n        if ((varAst.value.length === 0 && directive.isComponent) ||\n            (directive.exportAs == varAst.value)) {\n          exportAsVars.push(varAst);\n          matchedVariables.add(varAst.name);\n        }\n      });\n      return new DirectiveAst(directive, directiveProperties, hostProperties, hostEvents,\n                              exportAsVars, sourceSpan);\n    });\n    possibleExportAsVars.forEach((varAst) => {\n      if (varAst.value.length > 0 && !SetWrapper.has(matchedVariables, varAst.name)) {\n        this._reportError(`There is no directive with \"exportAs\" set to \"${varAst.value}\"`,\n                          varAst.sourceSpan);\n      }\n    });\n    return directiveAsts;\n  }\n\n  private _createDirectiveHostPropertyAsts(elementName: string, hostProps: {[key: string]: string},\n                                           sourceSpan: ParseSourceSpan,\n                                           targetPropertyAsts: BoundElementPropertyAst[]) {\n    if (isPresent(hostProps)) {\n      StringMapWrapper.forEach(hostProps, (expression: string, propName: string) => {\n        var exprAst = this._parseBinding(expression, sourceSpan);\n        targetPropertyAsts.push(\n            this._createElementPropertyAst(elementName, propName, exprAst, sourceSpan));\n      });\n    }\n  }\n\n  private _createDirectiveHostEventAsts(hostListeners: {[key: string]: string},\n                                        sourceSpan: ParseSourceSpan,\n                                        targetEventAsts: BoundEventAst[]) {\n    if (isPresent(hostListeners)) {\n      StringMapWrapper.forEach(hostListeners, (expression: string, propName: string) => {\n        this._parseEvent(propName, expression, sourceSpan, [], targetEventAsts);\n      });\n    }\n  }\n\n  private _createDirectivePropertyAsts(directiveProperties: {[key: string]: string},\n                                       boundProps: BoundElementOrDirectiveProperty[],\n                                       targetBoundDirectiveProps: BoundDirectivePropertyAst[]) {\n    if (isPresent(directiveProperties)) {\n      var boundPropsByName = new Map<string, BoundElementOrDirectiveProperty>();\n      boundProps.forEach(boundProp => {\n        var prevValue = boundPropsByName.get(boundProp.name);\n        if (isBlank(prevValue) || prevValue.isLiteral) {\n          // give [a]=\"b\" a higher precedence than a=\"b\" on the same element\n          boundPropsByName.set(boundProp.name, boundProp);\n        }\n      });\n\n      StringMapWrapper.forEach(directiveProperties, (elProp: string, dirProp: string) => {\n        var boundProp = boundPropsByName.get(elProp);\n\n        // Bindings are optional, so this binding only needs to be set up if an expression is given.\n        if (isPresent(boundProp)) {\n          targetBoundDirectiveProps.push(new BoundDirectivePropertyAst(\n              dirProp, boundProp.name, boundProp.expression, boundProp.sourceSpan));\n        }\n      });\n    }\n  }\n\n  private _createElementPropertyAsts(elementName: string, props: BoundElementOrDirectiveProperty[],\n                                     directives: DirectiveAst[]): BoundElementPropertyAst[] {\n    var boundElementProps: BoundElementPropertyAst[] = [];\n    var boundDirectivePropsIndex = new Map<string, BoundDirectivePropertyAst>();\n    directives.forEach((directive: DirectiveAst) => {\n      directive.inputs.forEach((prop: BoundDirectivePropertyAst) => {\n        boundDirectivePropsIndex.set(prop.templateName, prop);\n      });\n    });\n    props.forEach((prop: BoundElementOrDirectiveProperty) => {\n      if (!prop.isLiteral && isBlank(boundDirectivePropsIndex.get(prop.name))) {\n        boundElementProps.push(this._createElementPropertyAst(elementName, prop.name,\n                                                              prop.expression, prop.sourceSpan));\n      }\n    });\n    return boundElementProps;\n  }\n\n  private _createElementPropertyAst(elementName: string, name: string, ast: AST,\n                                    sourceSpan: ParseSourceSpan): BoundElementPropertyAst {\n    var unit = null;\n    var bindingType;\n    var boundPropertyName;\n    var parts = name.split(PROPERTY_PARTS_SEPARATOR);\n    if (parts.length === 1) {\n      boundPropertyName = this._schemaRegistry.getMappedPropName(parts[0]);\n      bindingType = PropertyBindingType.Property;\n      if (!this._schemaRegistry.hasProperty(elementName, boundPropertyName)) {\n        this._reportError(\n            `Can't bind to '${boundPropertyName}' since it isn't a known native property`,\n            sourceSpan);\n      }\n    } else {\n      if (parts[0] == ATTRIBUTE_PREFIX) {\n        boundPropertyName = parts[1];\n        let nsSeparatorIdx = boundPropertyName.indexOf(':');\n        if (nsSeparatorIdx > -1) {\n          let ns = boundPropertyName.substring(0, nsSeparatorIdx);\n          let name = boundPropertyName.substring(nsSeparatorIdx + 1);\n          boundPropertyName = mergeNsAndName(ns, name);\n        }\n        bindingType = PropertyBindingType.Attribute;\n      } else if (parts[0] == CLASS_PREFIX) {\n        boundPropertyName = parts[1];\n        bindingType = PropertyBindingType.Class;\n      } else if (parts[0] == STYLE_PREFIX) {\n        unit = parts.length > 2 ? parts[2] : null;\n        boundPropertyName = parts[1];\n        bindingType = PropertyBindingType.Style;\n      } else {\n        this._reportError(`Invalid property name '${name}'`, sourceSpan);\n        bindingType = null;\n      }\n    }\n\n    return new BoundElementPropertyAst(boundPropertyName, bindingType, ast, unit, sourceSpan);\n  }\n\n\n  private _findComponentDirectiveNames(directives: DirectiveAst[]): string[] {\n    var componentTypeNames: string[] = [];\n    directives.forEach(directive => {\n      var typeName = directive.directive.type.name;\n      if (directive.directive.isComponent) {\n        componentTypeNames.push(typeName);\n      }\n    });\n    return componentTypeNames;\n  }\n\n  private _assertOnlyOneComponent(directives: DirectiveAst[], sourceSpan: ParseSourceSpan) {\n    var componentTypeNames = this._findComponentDirectiveNames(directives);\n    if (componentTypeNames.length > 1) {\n      this._reportError(`More than one component: ${componentTypeNames.join(',')}`, sourceSpan);\n    }\n  }\n\n  private _assertNoComponentsNorElementBindingsOnTemplate(directives: DirectiveAst[],\n                                                          elementProps: BoundElementPropertyAst[],\n                                                          sourceSpan: ParseSourceSpan) {\n    var componentTypeNames: string[] = this._findComponentDirectiveNames(directives);\n    if (componentTypeNames.length > 0) {\n      this._reportError(`Components on an embedded template: ${componentTypeNames.join(',')}`,\n                        sourceSpan);\n    }\n    elementProps.forEach(prop => {\n      this._reportError(\n          `Property binding ${prop.name} not used by any directive on an embedded template`,\n          sourceSpan);\n    });\n  }\n\n  private _assertAllEventsPublishedByDirectives(directives: DirectiveAst[],\n                                                events: BoundEventAst[]) {\n    var allDirectiveEvents = new Set<string>();\n    directives.forEach(directive => {\n      StringMapWrapper.forEach(directive.directive.outputs,\n                               (eventName: string, _) => { allDirectiveEvents.add(eventName); });\n    });\n    events.forEach(event => {\n      if (isPresent(event.target) || !SetWrapper.has(allDirectiveEvents, event.name)) {\n        this._reportError(\n            `Event binding ${event.fullName} not emitted by any directive on an embedded template`,\n            event.sourceSpan);\n      }\n    });\n  }\n}\n\nclass NonBindableVisitor implements HtmlAstVisitor {\n  visitElement(ast: HtmlElementAst, component: Component): ElementAst {\n    var preparsedElement = preparseElement(ast);\n    if (preparsedElement.type === PreparsedElementType.SCRIPT ||\n        preparsedElement.type === PreparsedElementType.STYLE ||\n        preparsedElement.type === PreparsedElementType.STYLESHEET) {\n      // Skipping <script> for security reasons\n      // Skipping <style> and stylesheets as we already processed them\n      // in the StyleCompiler\n      return null;\n    }\n\n    var attrNameAndValues = ast.attrs.map(attrAst => [attrAst.name, attrAst.value]);\n    var selector = createElementCssSelector(ast.name, attrNameAndValues);\n    var ngContentIndex = component.findNgContentIndex(selector);\n    var children = htmlVisitAll(this, ast.children, EMPTY_COMPONENT);\n    return new ElementAst(ast.name, htmlVisitAll(this, ast.attrs), [], [], [], [], children,\n                          ngContentIndex, ast.sourceSpan);\n  }\n  visitComment(ast: HtmlCommentAst, context: any): any { return null; }\n  visitAttr(ast: HtmlAttrAst, context: any): AttrAst {\n    return new AttrAst(ast.name, ast.value, ast.sourceSpan);\n  }\n  visitText(ast: HtmlTextAst, component: Component): TextAst {\n    var ngContentIndex = component.findNgContentIndex(TEXT_CSS_SELECTOR);\n    return new TextAst(ast.value, ngContentIndex, ast.sourceSpan);\n  }\n}\n\nclass BoundElementOrDirectiveProperty {\n  constructor(public name: string, public expression: AST, public isLiteral: boolean,\n              public sourceSpan: ParseSourceSpan) {}\n}\n\nexport function splitClasses(classAttrValue: string): string[] {\n  return StringWrapper.split(classAttrValue.trim(), /\\s+/g);\n}\n\nclass Component {\n  static create(directives: DirectiveAst[]): Component {\n    if (directives.length === 0 || !directives[0].directive.isComponent) {\n      return EMPTY_COMPONENT;\n    }\n    var matcher = new SelectorMatcher();\n    var ngContentSelectors = directives[0].directive.template.ngContentSelectors;\n    var wildcardNgContentIndex = null;\n    for (var i = 0; i < ngContentSelectors.length; i++) {\n      var selector = ngContentSelectors[i];\n      if (StringWrapper.equals(selector, '*')) {\n        wildcardNgContentIndex = i;\n      } else {\n        matcher.addSelectables(CssSelector.parse(ngContentSelectors[i]), i);\n      }\n    }\n    return new Component(matcher, wildcardNgContentIndex);\n  }\n  constructor(public ngContentIndexMatcher: SelectorMatcher,\n              public wildcardNgContentIndex: number) {}\n\n  findNgContentIndex(selector: CssSelector): number {\n    var ngContentIndices = [];\n    this.ngContentIndexMatcher.match(\n        selector, (selector, ngContentIndex) => { ngContentIndices.push(ngContentIndex); });\n    ListWrapper.sort(ngContentIndices);\n    if (isPresent(this.wildcardNgContentIndex)) {\n      ngContentIndices.push(this.wildcardNgContentIndex);\n    }\n    return ngContentIndices.length > 0 ? ngContentIndices[0] : null;\n  }\n}\n\nfunction createElementCssSelector(elementName: string, matchableAttrs: string[][]): CssSelector {\n  var cssSelector = new CssSelector();\n  let elNameNoNs = splitNsName(elementName)[1];\n\n  cssSelector.setElement(elNameNoNs);\n\n  for (var i = 0; i < matchableAttrs.length; i++) {\n    let attrName = matchableAttrs[i][0];\n    let attrNameNoNs = splitNsName(attrName)[1];\n    let attrValue = matchableAttrs[i][1];\n\n    cssSelector.addAttribute(attrNameNoNs, attrValue);\n    if (attrName.toLowerCase() == CLASS_ATTR) {\n      var classes = splitClasses(attrValue);\n      classes.forEach(className => cssSelector.addClassName(className));\n    }\n  }\n  return cssSelector;\n}\n\nvar EMPTY_COMPONENT = new Component(new SelectorMatcher(), null);\nvar NON_BINDABLE_VISITOR = new NonBindableVisitor();\n\n\nexport class PipeCollector extends RecursiveAstVisitor {\n  pipes: Set<string> = new Set<string>();\n  visitPipe(ast: BindingPipe): any {\n    this.pipes.add(ast.name);\n    ast.exp.visit(this);\n    this.visitAll(ast.args);\n    return null;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/template_parser.ts\n **/","import {assertionsEnabled, isPresent, isBlank, StringWrapper} from 'angular2/src/facade/lang';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {ChangeDetectionUtil} from './change_detection_util';\nimport {ChangeDetectorRef, ChangeDetectorRef_} from './change_detector_ref';\nimport {DirectiveIndex} from './directive_record';\nimport {ChangeDetector, ChangeDispatcher} from './interfaces';\nimport {Pipes} from './pipes';\nimport {\n  ChangeDetectionError,\n  ExpressionChangedAfterItHasBeenCheckedException,\n  DehydratedException,\n  EventEvaluationErrorContext,\n  EventEvaluationError\n} from './exceptions';\nimport {BindingTarget} from './binding_record';\nimport {Locals} from './parser/locals';\nimport {ChangeDetectionStrategy, ChangeDetectorState} from './constants';\nimport {wtfCreateScope, wtfLeave, WtfScopeFn} from '../profile/profile';\nimport {ObservableWrapper} from 'angular2/src/facade/async';\n\nvar _scope_check: WtfScopeFn = wtfCreateScope(`ChangeDetector#check(ascii id, bool throwOnChange)`);\n\nclass _Context {\n  constructor(public element: any, public componentElement: any, public context: any,\n              public locals: any, public injector: any, public expression: any) {}\n}\n\nexport class AbstractChangeDetector<T> implements ChangeDetector {\n  contentChildren: any[] = [];\n  viewChildren: any[] = [];\n  parent: ChangeDetector;\n  ref: ChangeDetectorRef;\n\n  // The names of the below fields must be kept in sync with codegen_name_util.ts or\n  // change detection will fail.\n  state: ChangeDetectorState = ChangeDetectorState.NeverChecked;\n  context: T;\n  locals: Locals = null;\n  mode: ChangeDetectionStrategy = null;\n  pipes: Pipes = null;\n  propertyBindingIndex: number;\n  outputSubscriptions: any[];\n\n  dispatcher: ChangeDispatcher;\n\n\n  constructor(public id: string, public numberOfPropertyProtoRecords: number,\n              public bindingTargets: BindingTarget[], public directiveIndices: DirectiveIndex[],\n              public strategy: ChangeDetectionStrategy) {\n    this.ref = new ChangeDetectorRef_(this);\n  }\n\n  addContentChild(cd: ChangeDetector): void {\n    this.contentChildren.push(cd);\n    cd.parent = this;\n  }\n\n  removeContentChild(cd: ChangeDetector): void { ListWrapper.remove(this.contentChildren, cd); }\n\n  addViewChild(cd: ChangeDetector): void {\n    this.viewChildren.push(cd);\n    cd.parent = this;\n  }\n\n  removeViewChild(cd: ChangeDetector): void { ListWrapper.remove(this.viewChildren, cd); }\n\n  remove(): void { this.parent.removeContentChild(this); }\n\n  handleEvent(eventName: string, elIndex: number, event: any): boolean {\n    if (!this.hydrated()) {\n      this.throwDehydratedError(`${this.id} -> ${eventName}`);\n    }\n    try {\n      var locals = new Map<string, any>();\n      locals.set('$event', event);\n      var res = !this.handleEventInternal(eventName, elIndex, new Locals(this.locals, locals));\n      this.markPathToRootAsCheckOnce();\n      return res;\n    } catch (e) {\n      var c = this.dispatcher.getDebugContext(null, elIndex, null);\n      var context = isPresent(c) ?\n                        new EventEvaluationErrorContext(c.element, c.componentElement, c.context,\n                                                        c.locals, c.injector) :\n                        null;\n      throw new EventEvaluationError(eventName, e, e.stack, context);\n    }\n  }\n\n  handleEventInternal(eventName: string, elIndex: number, locals: Locals): boolean { return false; }\n\n  detectChanges(): void { this.runDetectChanges(false); }\n\n  checkNoChanges(): void {\n    if (assertionsEnabled()) {\n      this.runDetectChanges(true);\n    }\n  }\n\n  runDetectChanges(throwOnChange: boolean): void {\n    if (this.mode === ChangeDetectionStrategy.Detached ||\n        this.mode === ChangeDetectionStrategy.Checked || this.state === ChangeDetectorState.Errored)\n      return;\n    var s = _scope_check(this.id, throwOnChange);\n\n    this.detectChangesInRecords(throwOnChange);\n\n    this._detectChangesContentChildren(throwOnChange);\n    if (!throwOnChange) this.afterContentLifecycleCallbacks();\n\n    this._detectChangesInViewChildren(throwOnChange);\n    if (!throwOnChange) this.afterViewLifecycleCallbacks();\n\n    if (this.mode === ChangeDetectionStrategy.CheckOnce)\n      this.mode = ChangeDetectionStrategy.Checked;\n\n    this.state = ChangeDetectorState.CheckedBefore;\n    wtfLeave(s);\n  }\n\n  // This method is not intended to be overridden. Subclasses should instead provide an\n  // implementation of `detectChangesInRecordsInternal` which does the work of detecting changes\n  // and which this method will call.\n  // This method expects that `detectChangesInRecordsInternal` will set the property\n  // `this.propertyBindingIndex` to the propertyBindingIndex of the first proto record. This is to\n  // facilitate error reporting.\n  detectChangesInRecords(throwOnChange: boolean): void {\n    if (!this.hydrated()) {\n      this.throwDehydratedError(this.id);\n    }\n    try {\n      this.detectChangesInRecordsInternal(throwOnChange);\n    } catch (e) {\n      // throwOnChange errors aren't counted as fatal errors.\n      if (!(e instanceof ExpressionChangedAfterItHasBeenCheckedException)) {\n        this.state = ChangeDetectorState.Errored;\n      }\n      this._throwError(e, e.stack);\n    }\n  }\n\n  // Subclasses should override this method to perform any work necessary to detect and report\n  // changes. For example, changes should be reported via `ChangeDetectionUtil.addChange`, lifecycle\n  // methods should be called, etc.\n  // This implementation should also set `this.propertyBindingIndex` to the propertyBindingIndex of\n  // the\n  // first proto record to facilitate error reporting. See {@link #detectChangesInRecords}.\n  detectChangesInRecordsInternal(throwOnChange: boolean): void {}\n\n  // This method is not intended to be overridden. Subclasses should instead provide an\n  // implementation of `hydrateDirectives`.\n  hydrate(context: T, locals: Locals, dispatcher: ChangeDispatcher, pipes: Pipes): void {\n    this.dispatcher = dispatcher;\n    this.mode = ChangeDetectionUtil.changeDetectionMode(this.strategy);\n    this.context = context;\n\n    this.locals = locals;\n    this.pipes = pipes;\n    this.hydrateDirectives(dispatcher);\n    this.state = ChangeDetectorState.NeverChecked;\n  }\n\n  // Subclasses should override this method to hydrate any directives.\n  hydrateDirectives(dispatcher: ChangeDispatcher): void {}\n\n  // This method is not intended to be overridden. Subclasses should instead provide an\n  // implementation of `dehydrateDirectives`.\n  dehydrate(): void {\n    this.dehydrateDirectives(true);\n\n    this._unsubscribeFromOutputs();\n\n    this.dispatcher = null;\n    this.context = null;\n    this.locals = null;\n    this.pipes = null;\n  }\n\n  // Subclasses should override this method to dehydrate any directives. This method should reverse\n  // any work done in `hydrateDirectives`.\n  dehydrateDirectives(destroyPipes: boolean): void {}\n\n  hydrated(): boolean { return isPresent(this.context); }\n\n  destroyRecursive(): void {\n    this.dispatcher.notifyOnDestroy();\n    this.dehydrate();\n    var children = this.contentChildren;\n    for (var i = 0; i < children.length; i++) {\n      children[i].destroyRecursive();\n    }\n    children = this.viewChildren;\n    for (var i = 0; i < children.length; i++) {\n      children[i].destroyRecursive();\n    }\n  }\n\n  afterContentLifecycleCallbacks(): void {\n    this.dispatcher.notifyAfterContentChecked();\n    this.afterContentLifecycleCallbacksInternal();\n  }\n\n  afterContentLifecycleCallbacksInternal(): void {}\n\n  afterViewLifecycleCallbacks(): void {\n    this.dispatcher.notifyAfterViewChecked();\n    this.afterViewLifecycleCallbacksInternal();\n  }\n\n  afterViewLifecycleCallbacksInternal(): void {}\n\n  /** @internal */\n  _detectChangesContentChildren(throwOnChange: boolean): void {\n    var c = this.contentChildren;\n    for (var i = 0; i < c.length; ++i) {\n      c[i].runDetectChanges(throwOnChange);\n    }\n  }\n\n  /** @internal */\n  _detectChangesInViewChildren(throwOnChange: boolean): void {\n    var c = this.viewChildren;\n    for (var i = 0; i < c.length; ++i) {\n      c[i].runDetectChanges(throwOnChange);\n    }\n  }\n\n  markAsCheckOnce(): void { this.mode = ChangeDetectionStrategy.CheckOnce; }\n\n  markPathToRootAsCheckOnce(): void {\n    var c: ChangeDetector = this;\n    while (isPresent(c) && c.mode !== ChangeDetectionStrategy.Detached) {\n      if (c.mode === ChangeDetectionStrategy.Checked) c.mode = ChangeDetectionStrategy.CheckOnce;\n      c = c.parent;\n    }\n  }\n\n  private _unsubscribeFromOutputs(): void {\n    if (isPresent(this.outputSubscriptions)) {\n      for (var i = 0; i < this.outputSubscriptions.length; ++i) {\n        ObservableWrapper.dispose(this.outputSubscriptions[i]);\n        this.outputSubscriptions[i] = null;\n      }\n    }\n  }\n\n  getDirectiveFor(directives: any, index: number): any {\n    return directives.getDirectiveFor(this.directiveIndices[index]);\n  }\n\n  getDetectorFor(directives: any, index: number): ChangeDetector {\n    return directives.getDetectorFor(this.directiveIndices[index]);\n  }\n\n  notifyDispatcher(value: any): void {\n    this.dispatcher.notifyOnBinding(this._currentBinding(), value);\n  }\n\n  logBindingUpdate(value: any): void {\n    this.dispatcher.logBindingUpdate(this._currentBinding(), value);\n  }\n\n  addChange(changes: {[key: string]: any}, oldValue: any, newValue: any): {[key: string]: any} {\n    if (isBlank(changes)) {\n      changes = {};\n    }\n    changes[this._currentBinding().name] = ChangeDetectionUtil.simpleChange(oldValue, newValue);\n    return changes;\n  }\n\n  private _throwError(exception: any, stack: any): void {\n    var error;\n    try {\n      var c = this.dispatcher.getDebugContext(null, this._currentBinding().elementIndex, null);\n      var context = isPresent(c) ? new _Context(c.element, c.componentElement, c.context, c.locals,\n                                                c.injector, this._currentBinding().debug) :\n                                   null;\n      error = new ChangeDetectionError(this._currentBinding().debug, exception, stack, context);\n    } catch (e) {\n      // if an error happens during getting the debug context, we throw a ChangeDetectionError\n      // without the extra information.\n      error = new ChangeDetectionError(null, exception, stack, null);\n    }\n    throw error;\n  }\n\n  throwOnChangeError(oldValue: any, newValue: any): void {\n    throw new ExpressionChangedAfterItHasBeenCheckedException(this._currentBinding().debug,\n                                                              oldValue, newValue, null);\n  }\n\n  throwDehydratedError(detail: string): void { throw new DehydratedException(detail); }\n\n  private _currentBinding(): BindingTarget {\n    return this.bindingTargets[this.propertyBindingIndex];\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/abstract_change_detector.ts\n **/","import {StringWrapper, normalizeBool, isBlank} from 'angular2/src/facade/lang';\nimport {isDefaultChangeDetectionStrategy, ChangeDetectionStrategy} from './constants';\n\nexport class DirectiveIndex {\n  constructor(public elementIndex: number, public directiveIndex: number) {}\n\n  get name() { return `${this.elementIndex}_${this.directiveIndex}`; }\n}\n\nexport class DirectiveRecord {\n  directiveIndex: DirectiveIndex;\n  callAfterContentInit: boolean;\n  callAfterContentChecked: boolean;\n  callAfterViewInit: boolean;\n  callAfterViewChecked: boolean;\n  callOnChanges: boolean;\n  callDoCheck: boolean;\n  callOnInit: boolean;\n  callOnDestroy: boolean;\n  changeDetection: ChangeDetectionStrategy;\n  // array of [emitter property name, eventName]\n  outputs: string[][];\n\n  constructor({directiveIndex, callAfterContentInit, callAfterContentChecked, callAfterViewInit,\n               callAfterViewChecked, callOnChanges, callDoCheck, callOnInit, callOnDestroy,\n               changeDetection, outputs}: {\n    directiveIndex?: DirectiveIndex,\n    callAfterContentInit?: boolean,\n    callAfterContentChecked?: boolean,\n    callAfterViewInit?: boolean,\n    callAfterViewChecked?: boolean,\n    callOnChanges?: boolean,\n    callDoCheck?: boolean,\n    callOnInit?: boolean,\n    callOnDestroy?: boolean,\n    changeDetection?: ChangeDetectionStrategy,\n    outputs?: string[][]\n  } = {}) {\n    this.directiveIndex = directiveIndex;\n    this.callAfterContentInit = normalizeBool(callAfterContentInit);\n    this.callAfterContentChecked = normalizeBool(callAfterContentChecked);\n    this.callOnChanges = normalizeBool(callOnChanges);\n    this.callAfterViewInit = normalizeBool(callAfterViewInit);\n    this.callAfterViewChecked = normalizeBool(callAfterViewChecked);\n    this.callDoCheck = normalizeBool(callDoCheck);\n    this.callOnInit = normalizeBool(callOnInit);\n    this.callOnDestroy = normalizeBool(callOnDestroy);\n    this.changeDetection = changeDetection;\n    this.outputs = outputs;\n  }\n\n  isDefaultChangeDetection(): boolean {\n    return isDefaultChangeDetectionStrategy(this.changeDetection);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/directive_record.ts\n **/","import {Locals} from './parser/locals';\nimport {BindingTarget, BindingRecord} from './binding_record';\nimport {DirectiveRecord, DirectiveIndex} from './directive_record';\nimport {ChangeDetectionStrategy} from './constants';\nimport {ChangeDetectorRef} from './change_detector_ref';\n\nexport class DebugContext {\n  constructor(public element: any, public componentElement: any, public directive: any,\n              public context: any, public locals: any, public injector: any) {}\n}\n\nexport interface ChangeDispatcher {\n  getDebugContext(appElement: any, elementIndex: number, directiveIndex: number): DebugContext;\n  notifyOnBinding(bindingTarget: BindingTarget, value: any): void;\n  logBindingUpdate(bindingTarget: BindingTarget, value: any): void;\n  notifyAfterContentChecked(): void;\n  notifyAfterViewChecked(): void;\n  notifyOnDestroy(): void;\n  getDetectorFor(directiveIndex: DirectiveIndex): ChangeDetector;\n  getDirectiveFor(directiveIndex: DirectiveIndex): any;\n}\n\nexport interface ChangeDetector {\n  parent: ChangeDetector;\n  mode: ChangeDetectionStrategy;\n  ref: ChangeDetectorRef;\n\n  addContentChild(cd: ChangeDetector): void;\n  addViewChild(cd: ChangeDetector): void;\n  removeContentChild(cd: ChangeDetector): void;\n  removeViewChild(cd: ChangeDetector): void;\n  remove(): void;\n  hydrate(context: any, locals: Locals, dispatcher: ChangeDispatcher, pipes: any): void;\n  dehydrate(): void;\n  markPathToRootAsCheckOnce(): void;\n\n  handleEvent(eventName: string, elIndex: number, event: any);\n  detectChanges(): void;\n  checkNoChanges(): void;\n  destroyRecursive(): void;\n  markAsCheckOnce(): void;\n}\n\nexport interface ProtoChangeDetector { instantiate(): ChangeDetector; }\n\nexport class ChangeDetectorGenConfig {\n  constructor(public genDebugInfo: boolean, public logBindingUpdate: boolean,\n              public useJit: boolean) {}\n}\n\nexport class ChangeDetectorDefinition {\n  constructor(public id: string, public strategy: ChangeDetectionStrategy,\n              public variableNames: string[], public bindingRecords: BindingRecord[],\n              public eventRecords: BindingRecord[], public directiveRecords: DirectiveRecord[],\n              public genConfig: ChangeDetectorGenConfig) {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/interfaces.ts\n **/","import {isPresent} from 'angular2/src/facade/lang';\nimport {Predicate} from 'angular2/src/facade/collection';\nimport {Injector} from 'angular2/src/core/di';\nimport {ListWrapper, MapWrapper} from 'angular2/src/facade/collection';\nimport {RenderDebugInfo} from 'angular2/src/core/render/api';\n\nexport class EventListener { constructor(public name: string, public callback: Function){}; }\n\nexport class DebugNode {\n  nativeNode: any;\n  listeners: EventListener[];\n  parent: DebugElement;\n  providerTokens: any[];\n  locals: Map<string, any>;\n  injector: Injector;\n  componentInstance: any;\n\n  constructor(nativeNode: any, parent: DebugNode) {\n    this.nativeNode = nativeNode;\n    if (isPresent(parent) && parent instanceof DebugElement) {\n      parent.addChild(this);\n    } else {\n      this.parent = null;\n    }\n    this.listeners = [];\n    this.providerTokens = [];\n  }\n\n  setDebugInfo(info: RenderDebugInfo) {\n    this.injector = info.injector;\n    this.providerTokens = info.providerTokens;\n    this.locals = info.locals;\n    this.componentInstance = info.component;\n  }\n\n  inject(token: any): any { return this.injector.get(token); }\n\n  getLocal(name: string): any { return this.locals.get(name); }\n}\n\nexport class DebugElement extends DebugNode {\n  name: string;\n  properties: Map<string, any>;\n  attributes: Map<string, any>;\n  childNodes: DebugNode[];\n  nativeElement: any;\n\n  constructor(nativeNode: any, parent: any) {\n    super(nativeNode, parent);\n    this.properties = new Map<string, any>();\n    this.attributes = new Map<string, any>();\n    this.childNodes = [];\n    this.nativeElement = nativeNode;\n  }\n\n  addChild(child: DebugNode) {\n    if (isPresent(child)) {\n      this.childNodes.push(child);\n      child.parent = this;\n    }\n  }\n\n  removeChild(child: DebugNode) {\n    var childIndex = this.childNodes.indexOf(child);\n    if (childIndex !== -1) {\n      child.parent = null;\n      this.childNodes.splice(childIndex, 1);\n    }\n  }\n\n  insertChildrenAfter(child: DebugNode, newChildren: DebugNode[]) {\n    var siblingIndex = this.childNodes.indexOf(child);\n    if (siblingIndex !== -1) {\n      var previousChildren = this.childNodes.slice(0, siblingIndex + 1);\n      var nextChildren = this.childNodes.slice(siblingIndex + 1);\n      this.childNodes =\n          ListWrapper.concat(ListWrapper.concat(previousChildren, newChildren), nextChildren);\n      for (var i = 0; i < newChildren.length; ++i) {\n        var newChild = newChildren[i];\n        if (isPresent(newChild.parent)) {\n          newChild.parent.removeChild(newChild);\n        }\n        newChild.parent = this;\n      }\n    }\n  }\n\n  query(predicate: Predicate<DebugElement>): DebugElement {\n    var results = this.queryAll(predicate);\n    return results.length > 0 ? results[0] : null;\n  }\n\n  queryAll(predicate: Predicate<DebugElement>): DebugElement[] {\n    var matches: DebugElement[] = [];\n    _queryElementChildren(this, predicate, matches);\n    return matches;\n  }\n\n  queryAllNodes(predicate: Predicate<DebugNode>): DebugNode[] {\n    var matches: DebugNode[] = [];\n    _queryNodeChildren(this, predicate, matches);\n    return matches;\n  }\n\n  get children(): DebugElement[] {\n    var children: DebugElement[] = [];\n    this.childNodes.forEach((node) => {\n      if (node instanceof DebugElement) {\n        children.push(node);\n      }\n    });\n    return children;\n  }\n\n  triggerEventHandler(eventName: string, eventObj: Event) {\n    this.listeners.forEach((listener) => {\n      if (listener.name == eventName) {\n        listener.callback(eventObj);\n      }\n    });\n  }\n}\n\nexport function asNativeElements(debugEls: DebugElement[]): any {\n  return debugEls.map((el) => el.nativeElement);\n}\n\nfunction _queryElementChildren(element: DebugElement, predicate: Predicate<DebugElement>,\n                               matches: DebugElement[]) {\n  element.childNodes.forEach(node => {\n    if (node instanceof DebugElement) {\n      if (predicate(node)) {\n        matches.push(node);\n      }\n      _queryElementChildren(node, predicate, matches);\n    }\n  });\n}\n\nfunction _queryNodeChildren(parentNode: DebugNode, predicate: Predicate<DebugNode>,\n                            matches: DebugNode[]) {\n  if (parentNode instanceof DebugElement) {\n    parentNode.childNodes.forEach(node => {\n      if (predicate(node)) {\n        matches.push(node);\n      }\n      if (node instanceof DebugElement) {\n        _queryNodeChildren(node, predicate, matches);\n      }\n    });\n  }\n}\n\n// Need to keep the nodes in a global Map so that multiple angular apps are supported.\nvar _nativeNodeToDebugNode = new Map<any, DebugNode>();\n\nexport function getDebugNode(nativeNode: any): DebugNode {\n  return _nativeNodeToDebugNode.get(nativeNode);\n}\n\nexport function getAllDebugNodes(): DebugNode[] {\n  return MapWrapper.values(_nativeNodeToDebugNode);\n}\n\nexport function indexDebugNode(node: DebugNode) {\n  _nativeNodeToDebugNode.set(node.nativeNode, node);\n}\n\nexport function removeDebugNodeFromIndex(node: DebugNode) {\n  _nativeNodeToDebugNode.delete(node.nativeNode);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/debug/debug_node.ts\n **/","import {\n  InjectMetadata,\n  OptionalMetadata,\n  InjectableMetadata,\n  SelfMetadata,\n  HostMetadata,\n  SkipSelfMetadata\n} from './metadata';\nimport {makeDecorator, makeParamDecorator} from '../util/decorators';\n\n/**\n * Factory for creating {@link InjectMetadata}.\n */\nexport interface InjectFactory {\n  (token: any): any;\n  new (token: any): InjectMetadata;\n}\n\n/**\n * Factory for creating {@link OptionalMetadata}.\n */\nexport interface OptionalFactory {\n  (): any;\n  new (): OptionalMetadata;\n}\n\n/**\n * Factory for creating {@link InjectableMetadata}.\n */\nexport interface InjectableFactory {\n  (): any;\n  new (): InjectableMetadata;\n}\n\n/**\n * Factory for creating {@link SelfMetadata}.\n */\nexport interface SelfFactory {\n  (): any;\n  new (): SelfMetadata;\n}\n\n/**\n * Factory for creating {@link HostMetadata}.\n */\nexport interface HostFactory {\n  (): any;\n  new (): HostMetadata;\n}\n\n/**\n * Factory for creating {@link SkipSelfMetadata}.\n */\nexport interface SkipSelfFactory {\n  (): any;\n  new (): SkipSelfMetadata;\n}\n\n/**\n * Factory for creating {@link InjectMetadata}.\n */\nexport var Inject: InjectFactory = makeParamDecorator(InjectMetadata);\n\n/**\n * Factory for creating {@link OptionalMetadata}.\n */\nexport var Optional: OptionalFactory = makeParamDecorator(OptionalMetadata);\n\n/**\n * Factory for creating {@link InjectableMetadata}.\n */\nexport var Injectable: InjectableFactory = <InjectableFactory>makeDecorator(InjectableMetadata);\n\n/**\n * Factory for creating {@link SelfMetadata}.\n */\nexport var Self: SelfFactory = makeParamDecorator(SelfMetadata);\n\n/**\n * Factory for creating {@link HostMetadata}.\n */\nexport var Host: HostFactory = makeParamDecorator(HostMetadata);\n\n/**\n * Factory for creating {@link SkipSelfMetadata}.\n */\nexport var SkipSelf: SkipSelfFactory = makeParamDecorator(SkipSelfMetadata);\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/decorators.ts\n **/","import {ListWrapper} from 'angular2/src/facade/collection';\nimport {stringify, isBlank} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException, unimplemented} from 'angular2/src/facade/exceptions';\nimport {Key} from './key';\nimport {Injector} from './injector';\n\nfunction findFirstClosedCycle(keys: any[]): any[] {\n  var res = [];\n  for (var i = 0; i < keys.length; ++i) {\n    if (ListWrapper.contains(res, keys[i])) {\n      res.push(keys[i]);\n      return res;\n    } else {\n      res.push(keys[i]);\n    }\n  }\n  return res;\n}\n\nfunction constructResolvingPath(keys: any[]): string {\n  if (keys.length > 1) {\n    var reversed = findFirstClosedCycle(ListWrapper.reversed(keys));\n    var tokenStrs = reversed.map(k => stringify(k.token));\n    return \" (\" + tokenStrs.join(' -> ') + \")\";\n  } else {\n    return \"\";\n  }\n}\n\n\n/**\n * Base class for all errors arising from misconfigured providers.\n */\nexport class AbstractProviderError extends BaseException {\n  /** @internal */\n  message: string;\n\n  /** @internal */\n  keys: Key[];\n\n  /** @internal */\n  injectors: Injector[];\n\n  /** @internal */\n  constructResolvingMessage: Function;\n\n  constructor(injector: Injector, key: Key, constructResolvingMessage: Function) {\n    super(\"DI Exception\");\n    this.keys = [key];\n    this.injectors = [injector];\n    this.constructResolvingMessage = constructResolvingMessage;\n    this.message = this.constructResolvingMessage(this.keys);\n  }\n\n  addKey(injector: Injector, key: Key): void {\n    this.injectors.push(injector);\n    this.keys.push(key);\n    this.message = this.constructResolvingMessage(this.keys);\n  }\n\n  get context() { return this.injectors[this.injectors.length - 1].debugContext(); }\n}\n\n/**\n * Thrown when trying to retrieve a dependency by `Key` from {@link Injector}, but the\n * {@link Injector} does not have a {@link Provider} for {@link Key}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/vq8D3FRB9aGbnWJqtEPE?p=preview))\n *\n * ```typescript\n * class A {\n *   constructor(b:B) {}\n * }\n *\n * expect(() => Injector.resolveAndCreate([A])).toThrowError();\n * ```\n */\nexport class NoProviderError extends AbstractProviderError {\n  constructor(injector: Injector, key: Key) {\n    super(injector, key, function(keys: any[]) {\n      var first = stringify(ListWrapper.first(keys).token);\n      return `No provider for ${first}!${constructResolvingPath(keys)}`;\n    });\n  }\n}\n\n/**\n * Thrown when dependencies form a cycle.\n *\n * ### Example ([live demo](http://plnkr.co/edit/wYQdNos0Tzql3ei1EV9j?p=info))\n *\n * ```typescript\n * var injector = Injector.resolveAndCreate([\n *   provide(\"one\", {useFactory: (two) => \"two\", deps: [[new Inject(\"two\")]]}),\n *   provide(\"two\", {useFactory: (one) => \"one\", deps: [[new Inject(\"one\")]]})\n * ]);\n *\n * expect(() => injector.get(\"one\")).toThrowError();\n * ```\n *\n * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.\n */\nexport class CyclicDependencyError extends AbstractProviderError {\n  constructor(injector: Injector, key: Key) {\n    super(injector, key, function(keys: any[]) {\n      return `Cannot instantiate cyclic dependency!${constructResolvingPath(keys)}`;\n    });\n  }\n}\n\n/**\n * Thrown when a constructing type returns with an Error.\n *\n * The `InstantiationError` class contains the original error plus the dependency graph which caused\n * this object to be instantiated.\n *\n * ### Example ([live demo](http://plnkr.co/edit/7aWYdcqTQsP0eNqEdUAf?p=preview))\n *\n * ```typescript\n * class A {\n *   constructor() {\n *     throw new Error('message');\n *   }\n * }\n *\n * var injector = Injector.resolveAndCreate([A]);\n\n * try {\n *   injector.get(A);\n * } catch (e) {\n *   expect(e instanceof InstantiationError).toBe(true);\n *   expect(e.originalException.message).toEqual(\"message\");\n *   expect(e.originalStack).toBeDefined();\n * }\n * ```\n */\nexport class InstantiationError extends WrappedException {\n  /** @internal */\n  keys: Key[];\n\n  /** @internal */\n  injectors: Injector[];\n\n  constructor(injector: Injector, originalException, originalStack, key: Key) {\n    super(\"DI Exception\", originalException, originalStack, null);\n    this.keys = [key];\n    this.injectors = [injector];\n  }\n\n  addKey(injector: Injector, key: Key): void {\n    this.injectors.push(injector);\n    this.keys.push(key);\n  }\n\n  get wrapperMessage(): string {\n    var first = stringify(ListWrapper.first(this.keys).token);\n    return `Error during instantiation of ${first}!${constructResolvingPath(this.keys)}.`;\n  }\n\n  get causeKey(): Key { return this.keys[0]; }\n\n  get context() { return this.injectors[this.injectors.length - 1].debugContext(); }\n}\n\n/**\n * Thrown when an object other then {@link Provider} (or `Type`) is passed to {@link Injector}\n * creation.\n *\n * ### Example ([live demo](http://plnkr.co/edit/YatCFbPAMCL0JSSQ4mvH?p=preview))\n *\n * ```typescript\n * expect(() => Injector.resolveAndCreate([\"not a type\"])).toThrowError();\n * ```\n */\nexport class InvalidProviderError extends BaseException {\n  constructor(provider) {\n    super(\"Invalid provider - only instances of Provider and Type are allowed, got: \" +\n          provider.toString());\n  }\n}\n\n/**\n * Thrown when the class has no annotation information.\n *\n * Lack of annotation information prevents the {@link Injector} from determining which dependencies\n * need to be injected into the constructor.\n *\n * ### Example ([live demo](http://plnkr.co/edit/rHnZtlNS7vJOPQ6pcVkm?p=preview))\n *\n * ```typescript\n * class A {\n *   constructor(b) {}\n * }\n *\n * expect(() => Injector.resolveAndCreate([A])).toThrowError();\n * ```\n *\n * This error is also thrown when the class not marked with {@link Injectable} has parameter types.\n *\n * ```typescript\n * class B {}\n *\n * class A {\n *   constructor(b:B) {} // no information about the parameter types of A is available at runtime.\n * }\n *\n * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();\n * ```\n */\nexport class NoAnnotationError extends BaseException {\n  constructor(typeOrFunc, params: any[][]) {\n    super(NoAnnotationError._genMessage(typeOrFunc, params));\n  }\n\n  private static _genMessage(typeOrFunc, params: any[][]) {\n    var signature = [];\n    for (var i = 0, ii = params.length; i < ii; i++) {\n      var parameter = params[i];\n      if (isBlank(parameter) || parameter.length == 0) {\n        signature.push('?');\n      } else {\n        signature.push(parameter.map(stringify).join(' '));\n      }\n    }\n    return \"Cannot resolve all parameters for '\" + stringify(typeOrFunc) + \"'(\" +\n           signature.join(', ') + \"). \" +\n           \"Make sure that all the parameters are decorated with Inject or have valid type annotations and that '\" +\n           stringify(typeOrFunc) + \"' is decorated with Injectable.\";\n  }\n}\n\n/**\n * Thrown when getting an object by index.\n *\n * ### Example ([live demo](http://plnkr.co/edit/bRs0SX2OTQiJzqvjgl8P?p=preview))\n *\n * ```typescript\n * class A {}\n *\n * var injector = Injector.resolveAndCreate([A]);\n *\n * expect(() => injector.getAt(100)).toThrowError();\n * ```\n */\nexport class OutOfBoundsError extends BaseException {\n  constructor(index) { super(`Index ${index} is out-of-bounds.`); }\n}\n\n// TODO: add a working example after alpha38 is released\n/**\n * Thrown when a multi provider and a regular provider are bound to the same token.\n *\n * ### Example\n *\n * ```typescript\n * expect(() => Injector.resolveAndCreate([\n *   new Provider(\"Strings\", {useValue: \"string1\", multi: true}),\n *   new Provider(\"Strings\", {useValue: \"string2\", multi: false})\n * ])).toThrowError();\n * ```\n */\nexport class MixingMultiProvidersWithRegularProvidersError extends BaseException {\n  constructor(provider1, provider2) {\n    super(\"Cannot mix multi providers and regular providers, got: \" + provider1.toString() + \" \" +\n          provider2.toString());\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/exceptions.ts\n **/","import {Type, stringify, isFunction} from 'angular2/src/facade/lang';\n\n/**\n * An interface that a function passed into {@link forwardRef} has to implement.\n *\n * ### Example\n *\n * {@example core/di/ts/forward_ref/forward_ref.ts region='forward_ref_fn'}\n */\nexport interface ForwardRefFn { (): any; }\n\n/**\n * Allows to refer to references which are not yet defined.\n *\n * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of\n * DI is declared,\n * but not yet defined. It is also used when the `token` which we use when creating a query is not\n * yet defined.\n *\n * ### Example\n * {@example core/di/ts/forward_ref/forward_ref.ts region='forward_ref'}\n */\nexport function forwardRef(forwardRefFn: ForwardRefFn): Type {\n  (<any>forwardRefFn).__forward_ref__ = forwardRef;\n  (<any>forwardRefFn).toString = function() { return stringify(this()); };\n  return (<Type><any>forwardRefFn);\n}\n\n/**\n * Lazily retrieves the reference value from a forwardRef.\n *\n * Acts as the identity function when given a non-forward-ref value.\n *\n * ### Example ([live demo](http://plnkr.co/edit/GU72mJrk1fiodChcmiDR?p=preview))\n *\n * ```typescript\n * var ref = forwardRef(() => \"refValue\");\n * expect(resolveForwardRef(ref)).toEqual(\"refValue\");\n * expect(resolveForwardRef(\"regularValue\")).toEqual(\"regularValue\");\n * ```\n *\n * See: {@link forwardRef}\n */\nexport function resolveForwardRef(type: any): any {\n  if (isFunction(type) && type.hasOwnProperty('__forward_ref__') &&\n      type.__forward_ref__ === forwardRef) {\n    return (<ForwardRefFn>type)();\n  } else {\n    return type;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/forward_ref.ts\n **/","import {stringify, CONST, Type, isBlank} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {resolveForwardRef} from './forward_ref';\n\n/**\n * A unique object used for retrieving items from the {@link Injector}.\n *\n * Keys have:\n * - a system-wide unique `id`.\n * - a `token`.\n *\n * `Key` is used internally by {@link Injector} because its system-wide unique `id` allows the\n * injector to store created objects in a more efficient way.\n *\n * `Key` should not be created directly. {@link Injector} creates keys automatically when resolving\n * providers.\n */\nexport class Key {\n  /**\n   * Private\n   */\n  constructor(public token: Object, public id: number) {\n    if (isBlank(token)) {\n      throw new BaseException('Token must be defined!');\n    }\n  }\n\n  /**\n   * Returns a stringified token.\n   */\n  get displayName(): string { return stringify(this.token); }\n\n  /**\n   * Retrieves a `Key` for a token.\n   */\n  static get(token: Object): Key { return _globalKeyRegistry.get(resolveForwardRef(token)); }\n\n  /**\n   * @returns the number of keys registered in the system.\n   */\n  static get numberOfKeys(): number { return _globalKeyRegistry.numberOfKeys; }\n}\n\n/**\n * @internal\n */\nexport class KeyRegistry {\n  private _allKeys = new Map<Object, Key>();\n\n  get(token: Object): Key {\n    if (token instanceof Key) return token;\n\n    if (this._allKeys.has(token)) {\n      return this._allKeys.get(token);\n    }\n\n    var newKey = new Key(token, Key.numberOfKeys);\n    this._allKeys.set(token, newKey);\n    return newKey;\n  }\n\n  get numberOfKeys(): number { return this._allKeys.size; }\n}\n\nvar _globalKeyRegistry = new KeyRegistry();\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/key.ts\n **/","import {unimplemented} from 'angular2/src/facade/exceptions';\nimport {AppElement} from './element';\n\n/**\n * Represents a location in a View that has an injection, change-detection and render context\n * associated with it.\n *\n * An `ElementRef` is created for each element in the Template that contains a Directive, Component\n * or data-binding.\n *\n * An `ElementRef` is backed by a render-specific element. In the browser, this is usually a DOM\n * element.\n */\nexport abstract class ElementRef {\n  /**\n   * The underlying native element or `null` if direct access to native elements is not supported\n   * (e.g. when the application runs in a web worker).\n   *\n   * <div class=\"callout is-critical\">\n   *   <header>Use with caution</header>\n   *   <p>\n   *    Use this API as the last resort when direct access to DOM is needed. Use templating and\n   *    data-binding provided by Angular instead. Alternatively you take a look at {@link Renderer}\n   *    which provides API that can safely be used even when direct access to native elements is not\n   *    supported.\n   *   </p>\n   *   <p>\n   *    Relying on direct DOM access creates tight coupling between your application and rendering\n   *    layers which will make it impossible to separate the two and deploy your application into a\n   *    web worker.\n   *   </p>\n   * </div>\n   */\n  get nativeElement(): any { return unimplemented(); }\n}\n\nexport class ElementRef_ implements ElementRef {\n  constructor(private _appElement: AppElement) {}\n\n  get internalElement(): AppElement { return this._appElement; }\n\n  get nativeElement() { return this._appElement.nativeElement; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/element_ref.ts\n **/","import {resolveForwardRef, Injectable} from 'angular2/src/core/di';\nimport {Type, isPresent, stringify} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {PipeMetadata} from 'angular2/src/core/metadata';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\n\nfunction _isPipeMetadata(type: any): boolean {\n  return type instanceof PipeMetadata;\n}\n\n/**\n * Resolve a `Type` for {@link PipeMetadata}.\n *\n * This interface can be overridden by the application developer to create custom behavior.\n *\n * See {@link Compiler}\n */\n@Injectable()\nexport class PipeResolver {\n  /**\n   * Return {@link PipeMetadata} for a given `Type`.\n   */\n  resolve(type: Type): PipeMetadata {\n    var metas = reflector.annotations(resolveForwardRef(type));\n    if (isPresent(metas)) {\n      var annotation = metas.find(_isPipeMetadata);\n      if (isPresent(annotation)) {\n        return annotation;\n      }\n    }\n    throw new BaseException(`No Pipe decorator found on ${stringify(type)}`);\n  }\n}\n\nexport var CODEGEN_PIPE_RESOLVER = new PipeResolver();\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/pipe_resolver.ts\n **/","import {ListWrapper} from 'angular2/src/facade/collection';\nimport {unimplemented} from 'angular2/src/facade/exceptions';\nimport {ResolvedProvider, Injectable} from 'angular2/src/core/di';\nimport {isPresent, isBlank} from 'angular2/src/facade/lang';\n\nimport {AppElement} from './element';\n\nimport {ElementRef, ElementRef_} from './element_ref';\nimport {TemplateRef, TemplateRef_} from './template_ref';\nimport {\n  EmbeddedViewRef,\n  HostViewRef,\n  HostViewFactoryRef,\n  HostViewFactoryRef_,\n  ViewRef,\n  ViewRef_\n} from './view_ref';\n\n/**\n * Represents a container where one or more Views can be attached.\n *\n * The container can contain two kinds of Views. Host Views, created by instantiating a\n * {@link Component} via {@link #createHostView}, and Embedded Views, created by instantiating an\n * {@link TemplateRef Embedded Template} via {@link #createEmbeddedView}.\n *\n * The location of the View Container within the containing View is specified by the Anchor\n * `element`. Each View Container can have only one Anchor Element and each Anchor Element can only\n * have a single View Container.\n *\n * Root elements of Views attached to this container become siblings of the Anchor Element in\n * the Rendered View.\n *\n * To access a `ViewContainerRef` of an Element, you can either place a {@link Directive} injected\n * with `ViewContainerRef` on the Element, or you obtain it via\n * {@link AppViewManager#getViewContainer}.\n *\n * <!-- TODO(i): we are also considering ElementRef#viewContainer api -->\n */\nexport abstract class ViewContainerRef {\n  /**\n   * Anchor element that specifies the location of this container in the containing View.\n   * <!-- TODO: rename to anchorElement -->\n   */\n  get element(): ElementRef { return <ElementRef>unimplemented(); }\n\n  /**\n   * Destroys all Views in this container.\n   */\n  clear(): void {\n    for (var i = this.length - 1; i >= 0; i--) {\n      this.remove(i);\n    }\n  }\n\n  /**\n   * Returns the {@link ViewRef} for the View located in this container at the specified index.\n   */\n  abstract get(index: number): ViewRef;\n\n  /**\n   * Returns the number of Views currently attached to this container.\n   */\n  get length(): number { return <number>unimplemented(); };\n\n  /**\n   * Instantiates an Embedded View based on the {@link TemplateRef `templateRef`} and inserts it\n   * into this container at the specified `index`.\n   *\n   * If `index` is not specified, the new View will be inserted as the last View in the container.\n   *\n   * Returns the {@link ViewRef} for the newly created View.\n   */\n  abstract createEmbeddedView(templateRef: TemplateRef, index?: number): EmbeddedViewRef;\n\n  /**\n   * Instantiates a single {@link Component} and inserts its Host View into this container at the\n   * specified `index`.\n   *\n   * The component is instantiated using its {@link ProtoViewRef `protoView`} which can be\n   * obtained via {@link Compiler#compileInHost}.\n   *\n   * If `index` is not specified, the new View will be inserted as the last View in the container.\n   *\n   * You can optionally specify `dynamicallyCreatedProviders`, which configure the {@link Injector}\n   * that will be created for the Host View.\n   *\n   * Returns the {@link HostViewRef} of the Host View created for the newly instantiated Component.\n   */\n  abstract createHostView(hostViewFactoryRef: HostViewFactoryRef, index?: number,\n                          dynamicallyCreatedProviders?: ResolvedProvider[],\n                          projectableNodes?: any[][]): HostViewRef;\n\n  /**\n   * Inserts a View identified by a {@link ViewRef} into the container at the specified `index`.\n   *\n   * If `index` is not specified, the new View will be inserted as the last View in the container.\n   *\n   * Returns the inserted {@link ViewRef}.\n   */\n  abstract insert(viewRef: EmbeddedViewRef, index?: number): EmbeddedViewRef;\n\n  /**\n   * Returns the index of the View, specified via {@link ViewRef}, within the current container or\n   * `-1` if this container doesn't contain the View.\n   */\n  abstract indexOf(viewRef: ViewRef): number;\n\n  /**\n   * Destroys a View attached to this container at the specified `index`.\n   *\n   * If `index` is not specified, the last View in the container will be removed.\n   */\n  abstract remove(index?: number): void;\n\n  /**\n   * Use along with {@link #insert} to move a View within the current container.\n   *\n   * If the `index` param is omitted, the last {@link ViewRef} is detached.\n   */\n  abstract detach(index?: number): EmbeddedViewRef;\n}\n\nexport class ViewContainerRef_ extends ViewContainerRef {\n  constructor(private _element: AppElement) { super(); }\n\n  get(index: number): EmbeddedViewRef { return this._element.nestedViews[index].ref; }\n  get length(): number {\n    var views = this._element.nestedViews;\n    return isPresent(views) ? views.length : 0;\n  }\n\n  get element(): ElementRef_ { return this._element.ref; }\n\n  // TODO(rado): profile and decide whether bounds checks should be added\n  // to the methods below.\n  createEmbeddedView(templateRef: TemplateRef, index: number = -1): EmbeddedViewRef {\n    if (index == -1) index = this.length;\n    var vm = this._element.parentView.viewManager;\n    return vm.createEmbeddedViewInContainer(this._element.ref, index, templateRef);\n  }\n\n  createHostView(hostViewFactoryRef: HostViewFactoryRef, index: number = -1,\n                 dynamicallyCreatedProviders: ResolvedProvider[] = null,\n                 projectableNodes: any[][] = null): HostViewRef {\n    if (index == -1) index = this.length;\n    var vm = this._element.parentView.viewManager;\n    return vm.createHostViewInContainer(this._element.ref, index, hostViewFactoryRef,\n                                        dynamicallyCreatedProviders, projectableNodes);\n  }\n\n  // TODO(i): refactor insert+remove into move\n  insert(viewRef: ViewRef, index: number = -1): EmbeddedViewRef {\n    if (index == -1) index = this.length;\n    var vm = this._element.parentView.viewManager;\n    return vm.attachViewInContainer(this._element.ref, index, viewRef);\n  }\n\n  indexOf(viewRef: ViewRef): number {\n    return ListWrapper.indexOf(this._element.nestedViews, (<ViewRef_>viewRef).internalView);\n  }\n\n  // TODO(i): rename to destroy\n  remove(index: number = -1): void {\n    if (index == -1) index = this.length - 1;\n    var vm = this._element.parentView.viewManager;\n    return vm.destroyViewInContainer(this._element.ref, index);\n    // view is intentionally not returned to the client.\n  }\n\n  // TODO(i): refactor insert+remove into move\n  detach(index: number = -1): EmbeddedViewRef {\n    if (index == -1) index = this.length - 1;\n    var vm = this._element.parentView.viewManager;\n    return vm.detachViewInContainer(this._element.ref, index);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/view_container_ref.ts\n **/","import {Injectable} from 'angular2/src/core/di';\nimport {ViewMetadata} from '../metadata/view';\nimport {ComponentMetadata} from '../metadata/directives';\n\nimport {Type, stringify, isBlank, isPresent} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {Map} from 'angular2/src/facade/collection';\n\nimport {reflector} from 'angular2/src/core/reflection/reflection';\n\n\n/**\n * Resolves types to {@link ViewMetadata}.\n */\n@Injectable()\nexport class ViewResolver {\n  /** @internal */\n  _cache = new Map<Type, ViewMetadata>();\n\n  resolve(component: Type): ViewMetadata {\n    var view = this._cache.get(component);\n\n    if (isBlank(view)) {\n      view = this._resolve(component);\n      this._cache.set(component, view);\n    }\n\n    return view;\n  }\n\n  /** @internal */\n  _resolve(component: Type): ViewMetadata {\n    var compMeta: ComponentMetadata;\n    var viewMeta: ViewMetadata;\n\n    reflector.annotations(component).forEach(m => {\n      if (m instanceof ViewMetadata) {\n        viewMeta = m;\n      }\n      if (m instanceof ComponentMetadata) {\n        compMeta = m;\n      }\n    });\n\n    if (isPresent(compMeta)) {\n      if (isBlank(compMeta.template) && isBlank(compMeta.templateUrl) && isBlank(viewMeta)) {\n        throw new BaseException(\n            `Component '${stringify(component)}' must have either 'template' or 'templateUrl' set.`);\n\n      } else if (isPresent(compMeta.template) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"template\", component);\n\n      } else if (isPresent(compMeta.templateUrl) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"templateUrl\", component);\n\n      } else if (isPresent(compMeta.directives) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"directives\", component);\n\n      } else if (isPresent(compMeta.pipes) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"pipes\", component);\n\n      } else if (isPresent(compMeta.encapsulation) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"encapsulation\", component);\n\n      } else if (isPresent(compMeta.styles) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"styles\", component);\n\n      } else if (isPresent(compMeta.styleUrls) && isPresent(viewMeta)) {\n        this._throwMixingViewAndComponent(\"styleUrls\", component);\n\n      } else if (isPresent(viewMeta)) {\n        return viewMeta;\n\n      } else {\n        return new ViewMetadata({\n          templateUrl: compMeta.templateUrl,\n          template: compMeta.template,\n          directives: compMeta.directives,\n          pipes: compMeta.pipes,\n          encapsulation: compMeta.encapsulation,\n          styles: compMeta.styles,\n          styleUrls: compMeta.styleUrls\n        });\n      }\n    } else {\n      if (isBlank(viewMeta)) {\n        throw new BaseException(\n            `Could not compile '${stringify(component)}' because it is not a component.`);\n      } else {\n        return viewMeta;\n      }\n    }\n    return null;\n  }\n\n  /** @internal */\n  _throwMixingViewAndComponent(propertyName: string, component: Type): void {\n    throw new BaseException(\n        `Component '${stringify(component)}' cannot have both '${propertyName}' and '@View' set at the same time\"`);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/view_resolver.ts\n **/","import {CONST, Type, stringify, isPresent, isString} from 'angular2/src/facade/lang';\nimport {resolveForwardRef} from 'angular2/src/core/di';\nimport {DependencyMetadata} from 'angular2/src/core/di/metadata';\n\n/**\n * Specifies that a constant attribute value should be injected.\n *\n * The directive can inject constant string literals of host element attributes.\n *\n * ### Example\n *\n * Suppose we have an `<input>` element and want to know its `type`.\n *\n * ```html\n * <input type=\"text\">\n * ```\n *\n * A decorator can inject string literal `text` like so:\n *\n * {@example core/ts/metadata/metadata.ts region='attributeMetadata'}\n */\n@CONST()\nexport class AttributeMetadata extends DependencyMetadata {\n  constructor(public attributeName: string) { super(); }\n\n  get token(): AttributeMetadata {\n    // Normally one would default a token to a type of an injected value but here\n    // the type of a variable is \"string\" and we can't use primitive type as a return value\n    // so we use instance of Attribute instead. This doesn't matter much in practice as arguments\n    // with @Attribute annotation are injected by ElementInjector that doesn't take tokens into\n    // account.\n    return this;\n  }\n  toString(): string { return `@Attribute(${stringify(this.attributeName)})`; }\n}\n\n/**\n * Declares an injectable parameter to be a live list of directives or variable\n * bindings from the content children of a directive.\n *\n * ### Example ([live demo](http://plnkr.co/edit/lY9m8HLy7z06vDoUaSN2?p=preview))\n *\n * Assume that `<tabs>` component would like to get a list its children `<pane>`\n * components as shown in this example:\n *\n * ```html\n * <tabs>\n *   <pane title=\"Overview\">...</pane>\n *   <pane *ngFor=\"#o of objects\" [title]=\"o.title\">{{o.text}}</pane>\n * </tabs>\n * ```\n *\n * The preferred solution is to query for `Pane` directives using this decorator.\n *\n * ```javascript\n * @Component({\n *   selector: 'pane',\n *   inputs: ['title']\n * })\n * class Pane {\n *   title:string;\n * }\n *\n * @Component({\n *  selector: 'tabs',\n *  template: `\n *    <ul>\n *      <li *ngFor=\"#pane of panes\">{{pane.title}}</li>\n *    </ul>\n *    <ng-content></ng-content>\n *  `\n * })\n * class Tabs {\n *   panes: QueryList<Pane>;\n *   constructor(@Query(Pane) panes:QueryList<Pane>) {\n  *    this.panes = panes;\n  *  }\n * }\n * ```\n *\n * A query can look for variable bindings by passing in a string with desired binding symbol.\n *\n * ### Example ([live demo](http://plnkr.co/edit/sT2j25cH1dURAyBRCKx1?p=preview))\n * ```html\n * <seeker>\n *   <div #findme>...</div>\n * </seeker>\n *\n * @Component({ selector: 'seeker' })\n * class Seeker {\n *   constructor(@Query('findme') elList: QueryList<ElementRef>) {...}\n * }\n * ```\n *\n * In this case the object that is injected depend on the type of the variable\n * binding. It can be an ElementRef, a directive or a component.\n *\n * Passing in a comma separated list of variable bindings will query for all of them.\n *\n * ```html\n * <seeker>\n *   <div #find-me>...</div>\n *   <div #find-me-too>...</div>\n * </seeker>\n *\n *  @Component({\n *   selector: 'seeker'\n * })\n * class Seeker {\n *   constructor(@Query('findMe, findMeToo') elList: QueryList<ElementRef>) {...}\n * }\n * ```\n *\n * Configure whether query looks for direct children or all descendants\n * of the querying element, by using the `descendants` parameter.\n * It is set to `false` by default.\n *\n * ### Example ([live demo](http://plnkr.co/edit/wtGeB977bv7qvA5FTYl9?p=preview))\n * ```html\n * <container #first>\n *   <item>a</item>\n *   <item>b</item>\n *   <container #second>\n *     <item>c</item>\n *   </container>\n * </container>\n * ```\n *\n * When querying for items, the first container will see only `a` and `b` by default,\n * but with `Query(TextDirective, {descendants: true})` it will see `c` too.\n *\n * The queried directives are kept in a depth-first pre-order with respect to their\n * positions in the DOM.\n *\n * Query does not look deep into any subcomponent views.\n *\n * Query is updated as part of the change-detection cycle. Since change detection\n * happens after construction of a directive, QueryList will always be empty when observed in the\n * constructor.\n *\n * The injected object is an unmodifiable live list.\n * See {@link QueryList} for more details.\n */\n@CONST()\nexport class QueryMetadata extends DependencyMetadata {\n  /**\n   * whether we want to query only direct children (false) or all\n   * children (true).\n   */\n  descendants: boolean;\n  first: boolean;\n\n  constructor(private _selector: Type | string,\n              {descendants = false, first = false}: {descendants?: boolean, first?: boolean} = {}) {\n    super();\n    this.descendants = descendants;\n    this.first = first;\n  }\n\n  /**\n   * always `false` to differentiate it with {@link ViewQueryMetadata}.\n   */\n  get isViewQuery(): boolean { return false; }\n\n  /**\n   * what this is querying for.\n   */\n  get selector() { return resolveForwardRef(this._selector); }\n\n  /**\n   * whether this is querying for a variable binding or a directive.\n   */\n  get isVarBindingQuery(): boolean { return isString(this.selector); }\n\n  /**\n   * returns a list of variable bindings this is querying for.\n   * Only applicable if this is a variable bindings query.\n   */\n  get varBindings(): string[] { return this.selector.split(','); }\n\n  toString(): string { return `@Query(${stringify(this.selector)})`; }\n}\n\n// TODO: add an example after ContentChildren and ViewChildren are in master\n/**\n * Configures a content query.\n *\n * Content queries are set before the `ngAfterContentInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Directive({\n *   selector: 'someDir'\n * })\n * class SomeDir {\n *   @ContentChildren(ChildDirective) contentChildren: QueryList<ChildDirective>;\n *\n *   ngAfterContentInit() {\n *     // contentChildren is set\n *   }\n * }\n * ```\n */\n@CONST()\nexport class ContentChildrenMetadata extends QueryMetadata {\n  constructor(_selector: Type | string, {descendants = false}: {descendants?: boolean} = {}) {\n    super(_selector, {descendants: descendants});\n  }\n}\n\n// TODO: add an example after ContentChild and ViewChild are in master\n/**\n * Configures a content query.\n *\n * Content queries are set before the `ngAfterContentInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Directive({\n *   selector: 'someDir'\n * })\n * class SomeDir {\n *   @ContentChild(ChildDirective) contentChild;\n *\n *   ngAfterContentInit() {\n *     // contentChild is set\n *   }\n * }\n * ```\n */\n@CONST()\nexport class ContentChildMetadata extends QueryMetadata {\n  constructor(_selector: Type | string) { super(_selector, {descendants: true, first: true}); }\n}\n\n/**\n * Similar to {@link QueryMetadata}, but querying the component view, instead of\n * the content children.\n *\n * ### Example ([live demo](http://plnkr.co/edit/eNsFHDf7YjyM6IzKxM1j?p=preview))\n *\n * ```javascript\n * @Component({\n *   ...,\n *   template: `\n *     <item> a </item>\n *     <item> b </item>\n *     <item> c </item>\n *   `\n * })\n * class MyComponent {\n *   shown: boolean;\n *\n *   constructor(private @Query(Item) items:QueryList<Item>) {\n *     items.changes.subscribe(() => console.log(items.length));\n *   }\n * }\n * ```\n *\n * Supports the same querying parameters as {@link QueryMetadata}, except\n * `descendants`. This always queries the whole view.\n *\n * As `shown` is flipped between true and false, items will contain zero of one\n * items.\n *\n * Specifies that a {@link QueryList} should be injected.\n *\n * The injected object is an iterable and observable live list.\n * See {@link QueryList} for more details.\n */\n@CONST()\nexport class ViewQueryMetadata extends QueryMetadata {\n  constructor(_selector: Type | string,\n              {descendants = false, first = false}: {descendants?: boolean, first?: boolean} = {}) {\n    super(_selector, {descendants: descendants, first: first});\n  }\n\n  /**\n   * always `true` to differentiate it with {@link QueryMetadata}.\n   */\n  get isViewQuery() { return true; }\n  toString(): string { return `@ViewQuery(${stringify(this.selector)})`; }\n}\n\n/**\n * Configures a view query.\n *\n * View queries are set before the `ngAfterViewInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Component({\n *   selector: 'someDir',\n *   templateUrl: 'someTemplate',\n *   directives: [ItemDirective]\n * })\n * class SomeDir {\n *   @ViewChildren(ItemDirective) viewChildren: QueryList<ItemDirective>;\n *\n *   ngAfterViewInit() {\n *     // viewChildren is set\n *   }\n * }\n * ```\n */\n@CONST()\nexport class ViewChildrenMetadata extends ViewQueryMetadata {\n  constructor(_selector: Type | string) { super(_selector, {descendants: true}); }\n}\n\n/**\n * Configures a view query.\n *\n * View queries are set before the `ngAfterViewInit` callback is called.\n *\n * ### Example\n *\n * ```\n * @Component({\n *   selector: 'someDir',\n *   templateUrl: 'someTemplate',\n *   directives: [ItemDirective]\n * })\n * class SomeDir {\n *   @ViewChild(ItemDirective) viewChild:ItemDirective;\n *\n *   ngAfterViewInit() {\n *     // viewChild is set\n *   }\n * }\n * ```\n */\n@CONST()\nexport class ViewChildMetadata extends ViewQueryMetadata {\n  constructor(_selector: Type | string) { super(_selector, {descendants: true, first: true}); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/metadata/di.ts\n **/","import {OpaqueToken} from \"angular2/src/core/di\";\nimport {CONST_EXPR} from \"angular2/src/facade/lang\";\n\n/**\n * A token that can be provided when bootstraping an application to make an array of directives\n * available in every component of the application.\n *\n * ### Example\n *\n * ```typescript\n * import {PLATFORM_DIRECTIVES} from 'angular2/core';\n * import {OtherDirective} from './myDirectives';\n *\n * @Component({\n *   selector: 'my-component',\n *   template: `\n *     <!-- can use other directive even though the component does not list it in `directives` -->\n *     <other-directive></other-directive>\n *   `\n * })\n * export class MyComponent {\n *   ...\n * }\n *\n * bootstrap(MyComponent, [provide(PLATFORM_DIRECTIVES, {useValue: [OtherDirective], multi:true})]);\n * ```\n */\nexport const PLATFORM_DIRECTIVES: OpaqueToken = CONST_EXPR(new OpaqueToken(\"Platform Directives\"));\n\n/**\n * A token that can be provided when bootstraping an application to make an array of pipes\n * available in every component of the application.\n *\n * ### Example\n *\n * ```typescript\n * import {PLATFORM_PIPES} from 'angular2/core';\n * import {OtherPipe} from './myPipe';\n *\n * @Component({\n *   selector: 'my-component',\n *   template: `\n *     {{123 | other-pipe}}\n *   `\n * })\n * export class MyComponent {\n *   ...\n * }\n *\n * bootstrap(MyComponent, [provide(PLATFORM_PIPES, {useValue: [OtherPipe], multi:true})]);\n * ```\n */\nexport const PLATFORM_PIPES: OpaqueToken = CONST_EXPR(new OpaqueToken(\"Platform Pipes\"));\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/platform_directives_and_pipes.ts\n **/","export {WtfScopeFn} from './wtf_impl';\n\nimport * as impl from \"./wtf_impl\";\n\n// Change exports to const once https://github.com/angular/ts2dart/issues/150\n\n/**\n * True if WTF is enabled.\n */\nexport var wtfEnabled = impl.detectWTF();\n\nfunction noopScope(arg0?: any, arg1?: any): any {\n  return null;\n}\n\n/**\n * Create trace scope.\n *\n * Scopes must be strictly nested and are analogous to stack frames, but\n * do not have to follow the stack frames. Instead it is recommended that they follow logical\n * nesting. You may want to use\n * [Event\n * Signatures](http://google.github.io/tracing-framework/instrumenting-code.html#custom-events)\n * as they are defined in WTF.\n *\n * Used to mark scope entry. The return value is used to leave the scope.\n *\n *     var myScope = wtfCreateScope('MyClass#myMethod(ascii someVal)');\n *\n *     someMethod() {\n *        var s = myScope('Foo'); // 'Foo' gets stored in tracing UI\n *        // DO SOME WORK HERE\n *        return wtfLeave(s, 123); // Return value 123\n *     }\n *\n * Note, adding try-finally block around the work to ensure that `wtfLeave` gets called can\n * negatively impact the performance of your application. For this reason we recommend that\n * you don't add them to ensure that `wtfLeave` gets called. In production `wtfLeave` is a noop and\n * so try-finally block has no value. When debugging perf issues, skipping `wtfLeave`, do to\n * exception, will produce incorrect trace, but presence of exception signifies logic error which\n * needs to be fixed before the app should be profiled. Add try-finally only when you expect that\n * an exception is expected during normal execution while profiling.\n *\n */\nexport var wtfCreateScope: (signature: string, flags?: any) => impl.WtfScopeFn =\n    wtfEnabled ? impl.createScope : (signature: string, flags?: any) => noopScope;\n\n/**\n * Used to mark end of Scope.\n *\n * - `scope` to end.\n * - `returnValue` (optional) to be passed to the WTF.\n *\n * Returns the `returnValue for easy chaining.\n */\nexport var wtfLeave:<T>(scope: any, returnValue?: T) => T =\n    wtfEnabled ? impl.leave : (s: any, r?: any) => r;\n\n/**\n * Used to mark Async start. Async are similar to scope but they don't have to be strictly nested.\n * The return value is used in the call to [endAsync]. Async ranges only work if WTF has been\n * enabled.\n *\n *     someMethod() {\n *        var s = wtfStartTimeRange('HTTP:GET', 'some.url');\n *        var future = new Future.delay(5).then((_) {\n *          wtfEndTimeRange(s);\n *        });\n *     }\n */\nexport var wtfStartTimeRange: (rangeType: string, action: string) => any =\n    wtfEnabled ? impl.startTimeRange : (rangeType: string, action: string) => null;\n\n/**\n * Ends a async time range operation.\n * [range] is the return value from [wtfStartTimeRange] Async ranges only work if WTF has been\n * enabled.\n */\nexport var wtfEndTimeRange: (range: any) => void = wtfEnabled ? impl.endTimeRange : (r: any) =>\n                                                                                        null;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/profile/profile.ts\n **/","import {isPresent, isBlank, print} from 'angular2/src/facade/lang';\nimport {BaseWrappedException} from 'angular2/src/facade/base_wrapped_exception';\nimport {ListWrapper, isListLikeIterable} from 'angular2/src/facade/collection';\n\nclass _ArrayLogger {\n  res: any[] = [];\n  log(s: any): void { this.res.push(s); }\n  logError(s: any): void { this.res.push(s); }\n  logGroup(s: any): void { this.res.push(s); }\n  logGroupEnd(){};\n}\n\n/**\n * Provides a hook for centralized exception handling.\n *\n * The default implementation of `ExceptionHandler` prints error messages to the `Console`. To\n * intercept error handling,\n * write a custom exception handler that replaces this default as appropriate for your app.\n *\n * ### Example\n *\n * ```javascript\n *\n * class MyExceptionHandler implements ExceptionHandler {\n *   call(error, stackTrace = null, reason = null) {\n *     // do something with the exception\n *   }\n * }\n *\n * bootstrap(MyApp, [provide(ExceptionHandler, {useClass: MyExceptionHandler})])\n *\n * ```\n */\nexport class ExceptionHandler {\n  constructor(private _logger: any, private _rethrowException: boolean = true) {}\n\n  static exceptionToString(exception: any, stackTrace: any = null, reason: string = null): string {\n    var l = new _ArrayLogger();\n    var e = new ExceptionHandler(l, false);\n    e.call(exception, stackTrace, reason);\n    return l.res.join(\"\\n\");\n  }\n\n  call(exception: any, stackTrace: any = null, reason: string = null): void {\n    var originalException = this._findOriginalException(exception);\n    var originalStack = this._findOriginalStack(exception);\n    var context = this._findContext(exception);\n\n    this._logger.logGroup(`EXCEPTION: ${this._extractMessage(exception)}`);\n\n    if (isPresent(stackTrace) && isBlank(originalStack)) {\n      this._logger.logError(\"STACKTRACE:\");\n      this._logger.logError(this._longStackTrace(stackTrace));\n    }\n\n    if (isPresent(reason)) {\n      this._logger.logError(`REASON: ${reason}`);\n    }\n\n    if (isPresent(originalException)) {\n      this._logger.logError(`ORIGINAL EXCEPTION: ${this._extractMessage(originalException)}`);\n    }\n\n    if (isPresent(originalStack)) {\n      this._logger.logError(\"ORIGINAL STACKTRACE:\");\n      this._logger.logError(this._longStackTrace(originalStack));\n    }\n\n    if (isPresent(context)) {\n      this._logger.logError(\"ERROR CONTEXT:\");\n      this._logger.logError(context);\n    }\n\n    this._logger.logGroupEnd();\n\n    // We rethrow exceptions, so operations like 'bootstrap' will result in an error\n    // when an exception happens. If we do not rethrow, bootstrap will always succeed.\n    if (this._rethrowException) throw exception;\n  }\n\n  /** @internal */\n  _extractMessage(exception: any): string {\n    return exception instanceof BaseWrappedException ? exception.wrapperMessage :\n                                                       exception.toString();\n  }\n\n  /** @internal */\n  _longStackTrace(stackTrace: any): any {\n    return isListLikeIterable(stackTrace) ? (<any[]>stackTrace).join(\"\\n\\n-----async gap-----\\n\") :\n                                            stackTrace.toString();\n  }\n\n  /** @internal */\n  _findContext(exception: any): any {\n    try {\n      if (!(exception instanceof BaseWrappedException)) return null;\n      return isPresent(exception.context) ? exception.context :\n                                            this._findContext(exception.originalException);\n    } catch (e) {\n      // exception.context can throw an exception. if it happens, we ignore the context.\n      return null;\n    }\n  }\n\n  /** @internal */\n  _findOriginalException(exception: any): any {\n    if (!(exception instanceof BaseWrappedException)) return null;\n\n    var e = exception.originalException;\n    while (e instanceof BaseWrappedException && isPresent(e.originalException)) {\n      e = e.originalException;\n    }\n\n    return e;\n  }\n\n  /** @internal */\n  _findOriginalStack(exception: any): any {\n    if (!(exception instanceof BaseWrappedException)) return null;\n\n    var e = exception;\n    var stack = exception.originalStack;\n    while (e instanceof BaseWrappedException && isPresent(e.originalException)) {\n      e = e.originalException;\n      if (e instanceof BaseWrappedException && isPresent(e.originalException)) {\n        stack = e.originalStack;\n      }\n    }\n\n    return stack;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/exception_handler.ts\n **/","import {Injectable} from 'angular2/core';\n\n/**\n * A backend for http that uses the `XMLHttpRequest` browser API.\n *\n * Take care not to evaluate this in non-browser contexts.\n */\n@Injectable()\nexport class BrowserXhr {\n  constructor() {}\n  build(): any { return <any>(new XMLHttpRequest()); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/backends/browser_xhr.ts\n **/","import {isPresent, isString} from 'angular2/src/facade/lang';\nimport {Headers} from './headers';\nimport {RequestMethod} from './enums';\nimport {RequestOptionsArgs} from './interfaces';\nimport {Injectable} from 'angular2/core';\nimport {URLSearchParams} from './url_search_params';\nimport {normalizeMethodName} from './http_utils';\n\n/**\n * Creates a request options object to be optionally provided when instantiating a\n * {@link Request}.\n *\n * This class is based on the `RequestInit` description in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#requestinit).\n *\n * All values are null by default. Typical defaults can be found in the {@link BaseRequestOptions}\n * class, which sub-classes `RequestOptions`.\n *\n * ### Example ([live demo](http://plnkr.co/edit/7Wvi3lfLq41aQPKlxB4O?p=preview))\n *\n * ```typescript\n * import {RequestOptions, Request, RequestMethod} from 'angular2/http';\n *\n * var options = new RequestOptions({\n *   method: RequestMethod.Post,\n *   url: 'https://google.com'\n * });\n * var req = new Request(options);\n * console.log('req.method:', RequestMethod[req.method]); // Post\n * console.log('options.url:', options.url); // https://google.com\n * ```\n */\nexport class RequestOptions {\n  /**\n   * Http method with which to execute a {@link Request}.\n   * Acceptable methods are defined in the {@link RequestMethod} enum.\n   */\n  method: RequestMethod | string;\n  /**\n   * {@link Headers} to be attached to a {@link Request}.\n   */\n  headers: Headers;\n  /**\n   * Body to be used when creating a {@link Request}.\n   */\n  // TODO: support FormData, Blob, URLSearchParams\n  body: string;\n  /**\n   * Url with which to perform a {@link Request}.\n   */\n  url: string;\n  /**\n   * Search parameters to be included in a {@link Request}.\n   */\n  search: URLSearchParams;\n  constructor({method, headers, body, url, search}: RequestOptionsArgs = {}) {\n    this.method = isPresent(method) ? normalizeMethodName(method) : null;\n    this.headers = isPresent(headers) ? headers : null;\n    this.body = isPresent(body) ? body : null;\n    this.url = isPresent(url) ? url : null;\n    this.search = isPresent(search) ? (isString(search) ? new URLSearchParams(<string>(search)) :\n                                                          <URLSearchParams>(search)) :\n                                      null;\n  }\n\n  /**\n   * Creates a copy of the `RequestOptions` instance, using the optional input as values to override\n   * existing values. This method will not change the values of the instance on which it is being\n   * called.\n   *\n   * Note that `headers` and `search` will override existing values completely if present in\n   * the `options` object. If these values should be merged, it should be done prior to calling\n   * `merge` on the `RequestOptions` instance.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/6w8XA8YTkDRcPYpdB9dk?p=preview))\n   *\n   * ```typescript\n   * import {RequestOptions, Request, RequestMethod} from 'angular2/http';\n   *\n   * var options = new RequestOptions({\n   *   method: RequestMethod.Post\n   * });\n   * var req = new Request(options.merge({\n   *   url: 'https://google.com'\n   * }));\n   * console.log('req.method:', RequestMethod[req.method]); // Post\n   * console.log('options.url:', options.url); // null\n   * console.log('req.url:', req.url); // https://google.com\n   * ```\n   */\n  merge(options?: RequestOptionsArgs): RequestOptions {\n    return new RequestOptions({\n      method: isPresent(options) && isPresent(options.method) ? options.method : this.method,\n      headers: isPresent(options) && isPresent(options.headers) ? options.headers : this.headers,\n      body: isPresent(options) && isPresent(options.body) ? options.body : this.body,\n      url: isPresent(options) && isPresent(options.url) ? options.url : this.url,\n      search: isPresent(options) && isPresent(options.search) ?\n                  (isString(options.search) ? new URLSearchParams(<string>(options.search)) :\n                                              (<URLSearchParams>(options.search)).clone()) :\n                  this.search\n    });\n  }\n}\n\n\n/**\n * Subclass of {@link RequestOptions}, with default values.\n *\n * Default values:\n *  * method: {@link RequestMethod RequestMethod.Get}\n *  * headers: empty {@link Headers} object\n *\n * This class could be extended and bound to the {@link RequestOptions} class\n * when configuring an {@link Injector}, in order to override the default options\n * used by {@link Http} to create and send {@link Request Requests}.\n *\n * ### Example ([live demo](http://plnkr.co/edit/LEKVSx?p=preview))\n *\n * ```typescript\n * import {provide} from 'angular2/core';\n * import {bootstrap} from 'angular2/platform/browser';\n * import {HTTP_PROVIDERS, Http, BaseRequestOptions, RequestOptions} from 'angular2/http';\n * import {App} from './myapp';\n *\n * class MyOptions extends BaseRequestOptions {\n *   search: string = 'coreTeam=true';\n * }\n *\n * bootstrap(App, [HTTP_PROVIDERS, provide(RequestOptions, {useClass: MyOptions})]);\n * ```\n *\n * The options could also be extended when manually creating a {@link Request}\n * object.\n *\n * ### Example ([live demo](http://plnkr.co/edit/oyBoEvNtDhOSfi9YxaVb?p=preview))\n *\n * ```\n * import {BaseRequestOptions, Request, RequestMethod} from 'angular2/http';\n *\n * var options = new BaseRequestOptions();\n * var req = new Request(options.merge({\n *   method: RequestMethod.Post,\n *   url: 'https://google.com'\n * }));\n * console.log('req.method:', RequestMethod[req.method]); // Post\n * console.log('options.url:', options.url); // null\n * console.log('req.url:', req.url); // https://google.com\n * ```\n */\n@Injectable()\nexport class BaseRequestOptions extends RequestOptions {\n  constructor() { super({method: RequestMethod.Get, headers: new Headers()}); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/base_request_options.ts\n **/","import {ReadyState, RequestMethod, ResponseType} from './enums';\nimport {Headers} from './headers';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {EventEmitter} from 'angular2/src/facade/async';\nimport {Request} from './static_request';\nimport {URLSearchParams} from './url_search_params';\n\n/**\n * Abstract class from which real backends are derived.\n *\n * The primary purpose of a `ConnectionBackend` is to create new connections to fulfill a given\n * {@link Request}.\n */\nexport abstract class ConnectionBackend { abstract createConnection(request: any): Connection; }\n\n/**\n * Abstract class from which real connections are derived.\n */\nexport abstract class Connection {\n  readyState: ReadyState;\n  request: Request;\n  response: any;  // TODO: generic of <Response>;\n}\n\n/**\n * Interface for options to construct a RequestOptions, based on\n * [RequestInit](https://fetch.spec.whatwg.org/#requestinit) from the Fetch spec.\n */\nexport interface RequestOptionsArgs {\n  url?: string;\n  method?: string | RequestMethod;\n  search?: string | URLSearchParams;\n  headers?: Headers;\n  // TODO: Support Blob, ArrayBuffer, JSON, URLSearchParams, FormData\n  body?: string;\n}\n\n/**\n * Required structure when constructing new Request();\n */\nexport interface RequestArgs extends RequestOptionsArgs { url: string; }\n\n/**\n * Interface for options to construct a Response, based on\n * [ResponseInit](https://fetch.spec.whatwg.org/#responseinit) from the Fetch spec.\n */\nexport type ResponseOptionsArgs = {\n  // TODO: Support Blob, ArrayBuffer, JSON\n  body?: string | Object | FormData;\n  status?: number;\n  statusText?: string;\n  headers?: Headers;\n  type?: ResponseType;\n  url?: string;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/interfaces.ts\n **/","import {ResponseType} from './enums';\nimport {CONST_EXPR, isString, isPresent, Json} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {Headers} from './headers';\nimport {ResponseOptions} from './base_response_options';\nimport {isJsObject} from './http_utils';\n\n/**\n * Creates `Response` instances from provided values.\n *\n * Though this object isn't\n * usually instantiated by end-users, it is the primary object interacted with when it comes time to\n * add data to a view.\n *\n * ### Example\n *\n * ```\n * http.request('my-friends.txt').subscribe(response => this.friends = response.text());\n * ```\n *\n * The Response's interface is inspired by the Response constructor defined in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#response-class), but is considered a static value whose body\n * can be accessed many times. There are other differences in the implementation, but this is the\n * most significant.\n */\nexport class Response {\n  /**\n   * One of \"basic\", \"cors\", \"default\", \"error, or \"opaque\".\n   *\n   * Defaults to \"default\".\n   */\n  type: ResponseType;\n  /**\n   * True if the response's status is within 200-299\n   */\n  ok: boolean;\n  /**\n   * URL of response.\n   *\n   * Defaults to empty string.\n   */\n  url: string;\n  /**\n   * Status code returned by server.\n   *\n   * Defaults to 200.\n   */\n  status: number;\n  /**\n   * Text representing the corresponding reason phrase to the `status`, as defined in [ietf rfc 2616\n   * section 6.1.1](https://tools.ietf.org/html/rfc2616#section-6.1.1)\n   *\n   * Defaults to \"OK\"\n   */\n  statusText: string;\n  /**\n   * Non-standard property\n   *\n   * Denotes how many of the response body's bytes have been loaded, for example if the response is\n   * the result of a progress event.\n   */\n  bytesLoaded: number;\n  /**\n   * Non-standard property\n   *\n   * Denotes how many bytes are expected in the final response body.\n   */\n  totalBytes: number;\n  /**\n   * Headers object based on the `Headers` class in the [Fetch\n   * Spec](https://fetch.spec.whatwg.org/#headers-class).\n   */\n  headers: Headers;\n  // TODO: Support ArrayBuffer, JSON, FormData, Blob\n  private _body: string | Object;\n  constructor(responseOptions: ResponseOptions) {\n    this._body = responseOptions.body;\n    this.status = responseOptions.status;\n    this.statusText = responseOptions.statusText;\n    this.headers = responseOptions.headers;\n    this.type = responseOptions.type;\n    this.url = responseOptions.url;\n  }\n\n  /**\n   * Not yet implemented\n   */\n  // TODO: Blob return type\n  blob(): any { throw new BaseException('\"blob()\" method not implemented on Response superclass'); }\n\n  /**\n   * Attempts to return body as parsed `JSON` object, or raises an exception.\n   */\n  json(): any {\n    var jsonResponse: string | Object;\n    if (isJsObject(this._body)) {\n      jsonResponse = this._body;\n    } else if (isString(this._body)) {\n      jsonResponse = Json.parse(<string>this._body);\n    }\n    return jsonResponse;\n  }\n\n  /**\n   * Returns the body as a string, presuming `toString()` can be called on the response body.\n   */\n  text(): string { return this._body.toString(); }\n\n  /**\n   * Not yet implemented\n   */\n  // TODO: ArrayBuffer return type\n  arrayBuffer(): any {\n    throw new BaseException('\"arrayBuffer()\" method not implemented on Response superclass');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/static_response.ts\n **/","import {Inject, Injectable, OpaqueToken} from 'angular2/src/core/di';\nimport {AnimationBuilder} from 'angular2/src/animate/animation_builder';\nimport {\n  isPresent,\n  isBlank,\n  Json,\n  RegExpWrapper,\n  CONST_EXPR,\n  stringify,\n  StringWrapper,\n  isArray\n} from 'angular2/src/facade/lang';\n\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {DomSharedStylesHost} from './shared_styles_host';\n\nimport {\n  Renderer,\n  RootRenderer,\n  RenderComponentType,\n  RenderDebugInfo\n} from 'angular2/src/core/render/api';\n\nimport {EventManager} from './events/event_manager';\n\nimport {DOCUMENT} from './dom_tokens';\nimport {ViewEncapsulation} from 'angular2/src/core/metadata';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {camelCaseToDashCase} from './util';\n\nconst NAMESPACE_URIS =\n    CONST_EXPR({'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'});\nconst TEMPLATE_COMMENT_TEXT = 'template bindings={}';\nvar TEMPLATE_BINDINGS_EXP = /^template bindings=(.*)$/g;\n\nexport abstract class DomRootRenderer implements RootRenderer {\n  private _registeredComponents: Map<string, DomRenderer> = new Map<string, DomRenderer>();\n\n  constructor(public document: any, public eventManager: EventManager,\n              public sharedStylesHost: DomSharedStylesHost, public animate: AnimationBuilder) {}\n\n  renderComponent(componentProto: RenderComponentType): Renderer {\n    var renderer = this._registeredComponents.get(componentProto.id);\n    if (isBlank(renderer)) {\n      renderer = new DomRenderer(this, componentProto);\n      this._registeredComponents.set(componentProto.id, renderer);\n    }\n    return renderer;\n  }\n}\n\n@Injectable()\nexport class DomRootRenderer_ extends DomRootRenderer {\n  constructor(@Inject(DOCUMENT) _document: any, _eventManager: EventManager,\n              sharedStylesHost: DomSharedStylesHost, animate: AnimationBuilder) {\n    super(_document, _eventManager, sharedStylesHost, animate);\n  }\n}\n\nexport class DomRenderer implements Renderer {\n  private _contentAttr: string;\n  private _hostAttr: string;\n  private _styles: string[];\n\n  constructor(private _rootRenderer: DomRootRenderer, private componentProto: RenderComponentType) {\n    this._styles = _flattenStyles(componentProto.id, componentProto.styles, []);\n    if (componentProto.encapsulation !== ViewEncapsulation.Native) {\n      this._rootRenderer.sharedStylesHost.addStyles(this._styles);\n    }\n    if (this.componentProto.encapsulation === ViewEncapsulation.Emulated) {\n      this._contentAttr = _shimContentAttribute(componentProto.id);\n      this._hostAttr = _shimHostAttribute(componentProto.id);\n    } else {\n      this._contentAttr = null;\n      this._hostAttr = null;\n    }\n  }\n\n  renderComponent(componentProto: RenderComponentType): Renderer {\n    return this._rootRenderer.renderComponent(componentProto);\n  }\n\n  selectRootElement(selector: string): Element {\n    var el = DOM.querySelector(this._rootRenderer.document, selector);\n    if (isBlank(el)) {\n      throw new BaseException(`The selector \"${selector}\" did not match any elements`);\n    }\n    DOM.clearNodes(el);\n    return el;\n  }\n\n  createElement(parent: Element, name: string): Node {\n    var nsAndName = splitNamespace(name);\n    var el = isPresent(nsAndName[0]) ?\n                 DOM.createElementNS(NAMESPACE_URIS[nsAndName[0]], nsAndName[1]) :\n                 DOM.createElement(nsAndName[1]);\n    if (isPresent(this._contentAttr)) {\n      DOM.setAttribute(el, this._contentAttr, '');\n    }\n    if (isPresent(parent)) {\n      DOM.appendChild(parent, el);\n    }\n    return el;\n  }\n\n  createViewRoot(hostElement: any): any {\n    var nodesParent;\n    if (this.componentProto.encapsulation === ViewEncapsulation.Native) {\n      nodesParent = DOM.createShadowRoot(hostElement);\n      this._rootRenderer.sharedStylesHost.addHost(nodesParent);\n      for (var i = 0; i < this._styles.length; i++) {\n        DOM.appendChild(nodesParent, DOM.createStyleElement(this._styles[i]));\n      }\n    } else {\n      if (isPresent(this._hostAttr)) {\n        DOM.setAttribute(hostElement, this._hostAttr, '');\n      }\n      nodesParent = hostElement;\n    }\n    return nodesParent;\n  }\n\n  createTemplateAnchor(parentElement: any): any {\n    var comment = DOM.createComment(TEMPLATE_COMMENT_TEXT);\n    if (isPresent(parentElement)) {\n      DOM.appendChild(parentElement, comment);\n    }\n    return comment;\n  }\n\n  createText(parentElement: any, value: string): any {\n    var node = DOM.createTextNode(value);\n    if (isPresent(parentElement)) {\n      DOM.appendChild(parentElement, node);\n    }\n    return node;\n  }\n\n  projectNodes(parentElement: any, nodes: any[]) {\n    if (isBlank(parentElement)) return;\n    appendNodes(parentElement, nodes);\n  }\n\n  attachViewAfter(node: any, viewRootNodes: any[]) {\n    moveNodesAfterSibling(node, viewRootNodes);\n    for (let i = 0; i < viewRootNodes.length; i++) this.animateNodeEnter(viewRootNodes[i]);\n  }\n\n  detachView(viewRootNodes: any[]) {\n    for (var i = 0; i < viewRootNodes.length; i++) {\n      var node = viewRootNodes[i];\n      DOM.remove(node);\n      this.animateNodeLeave(node);\n    }\n  }\n\n  destroyView(hostElement: any, viewAllNodes: any[]) {\n    if (this.componentProto.encapsulation === ViewEncapsulation.Native && isPresent(hostElement)) {\n      this._rootRenderer.sharedStylesHost.removeHost(DOM.getShadowRoot(hostElement));\n    }\n  }\n\n  listen(renderElement: any, name: string, callback: Function): Function {\n    return this._rootRenderer.eventManager.addEventListener(renderElement, name,\n                                                            decoratePreventDefault(callback));\n  }\n\n  listenGlobal(target: string, name: string, callback: Function): Function {\n    return this._rootRenderer.eventManager.addGlobalEventListener(target, name,\n                                                                  decoratePreventDefault(callback));\n  }\n\n  setElementProperty(renderElement: any, propertyName: string, propertyValue: any): void {\n    DOM.setProperty(renderElement, propertyName, propertyValue);\n  }\n\n  setElementAttribute(renderElement: any, attributeName: string, attributeValue: string): void {\n    var attrNs;\n    var nsAndName = splitNamespace(attributeName);\n    if (isPresent(nsAndName[0])) {\n      attributeName = nsAndName[0] + ':' + nsAndName[1];\n      attrNs = NAMESPACE_URIS[nsAndName[0]];\n    }\n    if (isPresent(attributeValue)) {\n      if (isPresent(attrNs)) {\n        DOM.setAttributeNS(renderElement, attrNs, attributeName, attributeValue);\n      } else {\n        DOM.setAttribute(renderElement, attributeName, attributeValue);\n      }\n    } else {\n      if (isPresent(attrNs)) {\n        DOM.removeAttributeNS(renderElement, attrNs, nsAndName[1]);\n      } else {\n        DOM.removeAttribute(renderElement, attributeName);\n      }\n    }\n  }\n\n  setBindingDebugInfo(renderElement: any, propertyName: string, propertyValue: string): void {\n    var dashCasedPropertyName = camelCaseToDashCase(propertyName);\n    if (DOM.isCommentNode(renderElement)) {\n      var existingBindings = RegExpWrapper.firstMatch(\n          TEMPLATE_BINDINGS_EXP, StringWrapper.replaceAll(DOM.getText(renderElement), /\\n/g, ''));\n      var parsedBindings = Json.parse(existingBindings[1]);\n      parsedBindings[dashCasedPropertyName] = propertyValue;\n      DOM.setText(renderElement, StringWrapper.replace(TEMPLATE_COMMENT_TEXT, '{}',\n                                                       Json.stringify(parsedBindings)));\n    } else {\n      this.setElementAttribute(renderElement, propertyName, propertyValue);\n    }\n  }\n\n  setElementDebugInfo(renderElement: any, info: RenderDebugInfo) {}\n\n  setElementClass(renderElement: any, className: string, isAdd: boolean): void {\n    if (isAdd) {\n      DOM.addClass(renderElement, className);\n    } else {\n      DOM.removeClass(renderElement, className);\n    }\n  }\n\n  setElementStyle(renderElement: any, styleName: string, styleValue: string): void {\n    if (isPresent(styleValue)) {\n      DOM.setStyle(renderElement, styleName, stringify(styleValue));\n    } else {\n      DOM.removeStyle(renderElement, styleName);\n    }\n  }\n\n  invokeElementMethod(renderElement: any, methodName: string, args: any[]): void {\n    DOM.invoke(renderElement, methodName, args);\n  }\n\n  setText(renderNode: any, text: string): void { DOM.setText(renderNode, text); }\n\n  /**\n   * Performs animations if necessary\n   * @param node\n   */\n  animateNodeEnter(node: Node) {\n    if (DOM.isElementNode(node) && DOM.hasClass(node, 'ng-animate')) {\n      DOM.addClass(node, 'ng-enter');\n      this._rootRenderer.animate.css()\n          .addAnimationClass('ng-enter-active')\n          .start(<HTMLElement>node)\n          .onComplete(() => { DOM.removeClass(node, 'ng-enter'); });\n    }\n  }\n\n\n  /**\n   * If animations are necessary, performs animations then removes the element; otherwise, it just\n   * removes the element.\n   * @param node\n   */\n  animateNodeLeave(node: Node) {\n    if (DOM.isElementNode(node) && DOM.hasClass(node, 'ng-animate')) {\n      DOM.addClass(node, 'ng-leave');\n      this._rootRenderer.animate.css()\n          .addAnimationClass('ng-leave-active')\n          .start(<HTMLElement>node)\n          .onComplete(() => {\n            DOM.removeClass(node, 'ng-leave');\n            DOM.remove(node);\n          });\n    } else {\n      DOM.remove(node);\n    }\n  }\n}\n\nfunction moveNodesAfterSibling(sibling, nodes) {\n  var parent = DOM.parentElement(sibling);\n  if (nodes.length > 0 && isPresent(parent)) {\n    var nextSibling = DOM.nextSibling(sibling);\n    if (isPresent(nextSibling)) {\n      for (var i = 0; i < nodes.length; i++) {\n        DOM.insertBefore(nextSibling, nodes[i]);\n      }\n    } else {\n      for (var i = 0; i < nodes.length; i++) {\n        DOM.appendChild(parent, nodes[i]);\n      }\n    }\n  }\n}\n\nfunction appendNodes(parent, nodes) {\n  for (var i = 0; i < nodes.length; i++) {\n    DOM.appendChild(parent, nodes[i]);\n  }\n}\n\nfunction decoratePreventDefault(eventHandler: Function): Function {\n  return (event) => {\n    var allowDefaultBehavior = eventHandler(event);\n    if (allowDefaultBehavior === false) {\n      // TODO(tbosch): move preventDefault into event plugins...\n      DOM.preventDefault(event);\n    }\n  };\n}\n\nvar COMPONENT_REGEX = /%COMP%/g;\nexport const COMPONENT_VARIABLE = '%COMP%';\nexport const HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nexport const CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\n\nfunction _shimContentAttribute(componentShortId: string): string {\n  return StringWrapper.replaceAll(CONTENT_ATTR, COMPONENT_REGEX, componentShortId);\n}\n\nfunction _shimHostAttribute(componentShortId: string): string {\n  return StringWrapper.replaceAll(HOST_ATTR, COMPONENT_REGEX, componentShortId);\n}\n\nfunction _flattenStyles(compId: string, styles: Array<any | any[]>, target: string[]): string[] {\n  for (var i = 0; i < styles.length; i++) {\n    var style = styles[i];\n    if (isArray(style)) {\n      _flattenStyles(compId, style, target);\n    } else {\n      style = StringWrapper.replaceAll(style, COMPONENT_REGEX, compId);\n      target.push(style);\n    }\n  }\n  return target;\n}\n\nvar NS_PREFIX_RE = /^@([^:]+):(.+)/g;\n\nfunction splitNamespace(name: string): string[] {\n  if (name[0] != '@') {\n    return [null, name];\n  }\n  let match = RegExpWrapper.firstMatch(NS_PREFIX_RE, name);\n  return [match[1], match[2]];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/dom_renderer.ts\n **/","import {CONST, CONST_EXPR} from 'angular2/src/facade/lang';\n\n@CONST()\nexport class RouteLifecycleHook {\n  constructor(public name: string) {}\n}\n\n@CONST()\nexport class CanActivate {\n  constructor(public fn: Function) {}\n}\n\nexport const routerCanReuse: RouteLifecycleHook =\n    CONST_EXPR(new RouteLifecycleHook(\"routerCanReuse\"));\nexport const routerCanDeactivate: RouteLifecycleHook =\n    CONST_EXPR(new RouteLifecycleHook(\"routerCanDeactivate\"));\nexport const routerOnActivate: RouteLifecycleHook =\n    CONST_EXPR(new RouteLifecycleHook(\"routerOnActivate\"));\nexport const routerOnReuse: RouteLifecycleHook =\n    CONST_EXPR(new RouteLifecycleHook(\"routerOnReuse\"));\nexport const routerOnDeactivate: RouteLifecycleHook =\n    CONST_EXPR(new RouteLifecycleHook(\"routerOnDeactivate\"));\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/lifecycle/lifecycle_annotations_impl.ts\n **/","import {ListWrapper, Map, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\nimport {\n  isPresent,\n  isArray,\n  isBlank,\n  isType,\n  isString,\n  isStringMap,\n  Type,\n  StringWrapper,\n  Math,\n  getTypeNameForDebugging,\n  CONST_EXPR\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\nimport {Injectable, Inject, OpaqueToken} from 'angular2/core';\n\nimport {\n  RouteConfig,\n  AsyncRoute,\n  Route,\n  AuxRoute,\n  Redirect,\n  RouteDefinition\n} from './route_config/route_config_impl';\nimport {PathMatch, RedirectMatch, RouteMatch} from './rules/rules';\nimport {RuleSet} from './rules/rule_set';\nimport {\n  Instruction,\n  ResolvedInstruction,\n  RedirectInstruction,\n  UnresolvedInstruction,\n  DefaultInstruction\n} from './instruction';\n\nimport {normalizeRouteConfig, assertComponentExists} from './route_config/route_config_normalizer';\nimport {parser, Url, convertUrlParamsToArray, pathSegmentsToUrl} from './url_parser';\nimport {GeneratedUrl} from './rules/route_paths/route_path';\n\nvar _resolveToNull = PromiseWrapper.resolve<Instruction>(null);\n\n// A LinkItemArray is an array, which describes a set of routes\n// The items in the array are found in groups:\n// - the first item is the name of the route\n// - the next items are:\n//   - an object containing parameters\n//   - or an array describing an aux route\n// export type LinkRouteItem = string | Object;\n// export type LinkItem = LinkRouteItem | Array<LinkRouteItem>;\n// export type LinkItemArray = Array<LinkItem>;\n\n/**\n * Token used to bind the component with the top-level {@link RouteConfig}s for the\n * application.\n *\n * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {\n *   ROUTER_DIRECTIVES,\n *   ROUTER_PROVIDERS,\n *   RouteConfig\n * } from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   // ...\n * }\n *\n * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\n * ```\n */\nexport const ROUTER_PRIMARY_COMPONENT: OpaqueToken =\n    CONST_EXPR(new OpaqueToken('RouterPrimaryComponent'));\n\n\n/**\n * The RouteRegistry holds route configurations for each component in an Angular app.\n * It is responsible for creating Instructions from URLs, and generating URLs based on route and\n * parameters.\n */\n@Injectable()\nexport class RouteRegistry {\n  private _rules = new Map<any, RuleSet>();\n\n  constructor(@Inject(ROUTER_PRIMARY_COMPONENT) private _rootComponent: Type) {}\n\n  /**\n   * Given a component and a configuration object, add the route to this registry\n   */\n  config(parentComponent: any, config: RouteDefinition): void {\n    config = normalizeRouteConfig(config, this);\n\n    // this is here because Dart type guard reasons\n    if (config instanceof Route) {\n      assertComponentExists(config.component, config.path);\n    } else if (config instanceof AuxRoute) {\n      assertComponentExists(config.component, config.path);\n    }\n\n    var rules = this._rules.get(parentComponent);\n\n    if (isBlank(rules)) {\n      rules = new RuleSet();\n      this._rules.set(parentComponent, rules);\n    }\n\n    var terminal = rules.config(config);\n\n    if (config instanceof Route) {\n      if (terminal) {\n        assertTerminalComponent(config.component, config.path);\n      } else {\n        this.configFromComponent(config.component);\n      }\n    }\n  }\n\n  /**\n   * Reads the annotations of a component and configures the registry based on them\n   */\n  configFromComponent(component: any): void {\n    if (!isType(component)) {\n      return;\n    }\n\n    // Don't read the annotations from a type more than once –\n    // this prevents an infinite loop if a component routes recursively.\n    if (this._rules.has(component)) {\n      return;\n    }\n    var annotations = reflector.annotations(component);\n    if (isPresent(annotations)) {\n      for (var i = 0; i < annotations.length; i++) {\n        var annotation = annotations[i];\n\n        if (annotation instanceof RouteConfig) {\n          let routeCfgs: RouteDefinition[] = annotation.configs;\n          routeCfgs.forEach(config => this.config(component, config));\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Given a URL and a parent component, return the most specific instruction for navigating\n   * the application into the state specified by the url\n   */\n  recognize(url: string, ancestorInstructions: Instruction[]): Promise<Instruction> {\n    var parsedUrl = parser.parse(url);\n    return this._recognize(parsedUrl, []);\n  }\n\n\n  /**\n   * Recognizes all parent-child routes, but creates unresolved auxiliary routes\n   */\n  private _recognize(parsedUrl: Url, ancestorInstructions: Instruction[],\n                     _aux = false): Promise<Instruction> {\n    var parentInstruction = ListWrapper.last(ancestorInstructions);\n    var parentComponent = isPresent(parentInstruction) ? parentInstruction.component.componentType :\n                                                         this._rootComponent;\n\n    var rules = this._rules.get(parentComponent);\n    if (isBlank(rules)) {\n      return _resolveToNull;\n    }\n\n    // Matches some beginning part of the given URL\n    var possibleMatches: Promise<RouteMatch>[] =\n        _aux ? rules.recognizeAuxiliary(parsedUrl) : rules.recognize(parsedUrl);\n\n    var matchPromises: Promise<Instruction>[] = possibleMatches.map(\n        (candidate: Promise<RouteMatch>) => candidate.then((candidate: RouteMatch) => {\n\n          if (candidate instanceof PathMatch) {\n            var auxParentInstructions: Instruction[] =\n                ancestorInstructions.length > 0 ? [ListWrapper.last(ancestorInstructions)] : [];\n            var auxInstructions =\n                this._auxRoutesToUnresolved(candidate.remainingAux, auxParentInstructions);\n\n            var instruction = new ResolvedInstruction(candidate.instruction, null, auxInstructions);\n\n            if (isBlank(candidate.instruction) || candidate.instruction.terminal) {\n              return instruction;\n            }\n\n            var newAncestorInstructions: Instruction[] = ancestorInstructions.concat([instruction]);\n\n            return this._recognize(candidate.remaining, newAncestorInstructions)\n                .then((childInstruction) => {\n                  if (isBlank(childInstruction)) {\n                    return null;\n                  }\n\n                  // redirect instructions are already absolute\n                  if (childInstruction instanceof RedirectInstruction) {\n                    return childInstruction;\n                  }\n                  instruction.child = childInstruction;\n                  return instruction;\n                });\n          }\n\n          if (candidate instanceof RedirectMatch) {\n            var instruction =\n                this.generate(candidate.redirectTo, ancestorInstructions.concat([null]));\n            return new RedirectInstruction(instruction.component, instruction.child,\n                                           instruction.auxInstruction, candidate.specificity);\n          }\n        }));\n\n    if ((isBlank(parsedUrl) || parsedUrl.path == '') && possibleMatches.length == 0) {\n      return PromiseWrapper.resolve(this.generateDefault(parentComponent));\n    }\n\n    return PromiseWrapper.all<Instruction>(matchPromises).then(mostSpecific);\n  }\n\n  private _auxRoutesToUnresolved(auxRoutes: Url[],\n                                 parentInstructions: Instruction[]): {[key: string]: Instruction} {\n    var unresolvedAuxInstructions: {[key: string]: Instruction} = {};\n\n    auxRoutes.forEach((auxUrl: Url) => {\n      unresolvedAuxInstructions[auxUrl.path] = new UnresolvedInstruction(\n          () => { return this._recognize(auxUrl, parentInstructions, true); });\n    });\n\n    return unresolvedAuxInstructions;\n  }\n\n\n  /**\n   * Given a normalized list with component names and params like: `['user', {id: 3 }]`\n   * generates a url with a leading slash relative to the provided `parentComponent`.\n   *\n   * If the optional param `_aux` is `true`, then we generate starting at an auxiliary\n   * route boundary.\n   */\n  generate(linkParams: any[], ancestorInstructions: Instruction[], _aux = false): Instruction {\n    var params = splitAndFlattenLinkParams(linkParams);\n    var prevInstruction;\n\n    // The first segment should be either '.' (generate from parent) or '' (generate from root).\n    // When we normalize above, we strip all the slashes, './' becomes '.' and '/' becomes ''.\n    if (ListWrapper.first(params) == '') {\n      params.shift();\n      prevInstruction = ListWrapper.first(ancestorInstructions);\n      ancestorInstructions = [];\n    } else {\n      prevInstruction = ancestorInstructions.length > 0 ? ancestorInstructions.pop() : null;\n\n      if (ListWrapper.first(params) == '.') {\n        params.shift();\n      } else if (ListWrapper.first(params) == '..') {\n        while (ListWrapper.first(params) == '..') {\n          if (ancestorInstructions.length <= 0) {\n            throw new BaseException(\n                `Link \"${ListWrapper.toJSON(linkParams)}\" has too many \"../\" segments.`);\n          }\n          prevInstruction = ancestorInstructions.pop();\n          params = ListWrapper.slice(params, 1);\n        }\n\n        // we're on to implicit child/sibling route\n      } else {\n        // we must only peak at the link param, and not consume it\n        let routeName = ListWrapper.first(params);\n        let parentComponentType = this._rootComponent;\n        let grandparentComponentType = null;\n\n        if (ancestorInstructions.length > 1) {\n          let parentComponentInstruction = ancestorInstructions[ancestorInstructions.length - 1];\n          let grandComponentInstruction = ancestorInstructions[ancestorInstructions.length - 2];\n\n          parentComponentType = parentComponentInstruction.component.componentType;\n          grandparentComponentType = grandComponentInstruction.component.componentType;\n        } else if (ancestorInstructions.length == 1) {\n          parentComponentType = ancestorInstructions[0].component.componentType;\n          grandparentComponentType = this._rootComponent;\n        }\n\n        // For a link with no leading `./`, `/`, or `../`, we look for a sibling and child.\n        // If both exist, we throw. Otherwise, we prefer whichever exists.\n        var childRouteExists = this.hasRoute(routeName, parentComponentType);\n        var parentRouteExists = isPresent(grandparentComponentType) &&\n                                this.hasRoute(routeName, grandparentComponentType);\n\n        if (parentRouteExists && childRouteExists) {\n          let msg =\n              `Link \"${ListWrapper.toJSON(linkParams)}\" is ambiguous, use \"./\" or \"../\" to disambiguate.`;\n          throw new BaseException(msg);\n        }\n\n        if (parentRouteExists) {\n          prevInstruction = ancestorInstructions.pop();\n        }\n      }\n    }\n\n    if (params[params.length - 1] == '') {\n      params.pop();\n    }\n\n    if (params.length > 0 && params[0] == '') {\n      params.shift();\n    }\n\n    if (params.length < 1) {\n      let msg = `Link \"${ListWrapper.toJSON(linkParams)}\" must include a route name.`;\n      throw new BaseException(msg);\n    }\n\n    var generatedInstruction =\n        this._generate(params, ancestorInstructions, prevInstruction, _aux, linkParams);\n\n    // we don't clone the first (root) element\n    for (var i = ancestorInstructions.length - 1; i >= 0; i--) {\n      let ancestorInstruction = ancestorInstructions[i];\n      if (isBlank(ancestorInstruction)) {\n        break;\n      }\n      generatedInstruction = ancestorInstruction.replaceChild(generatedInstruction);\n    }\n\n    return generatedInstruction;\n  }\n\n\n  /*\n   * Internal helper that does not make any assertions about the beginning of the link DSL.\n   * `ancestorInstructions` are parents that will be cloned.\n   * `prevInstruction` is the existing instruction that would be replaced, but which might have\n   * aux routes that need to be cloned.\n   */\n  private _generate(linkParams: any[], ancestorInstructions: Instruction[],\n                    prevInstruction: Instruction, _aux = false, _originalLink: any[]): Instruction {\n    let parentComponentType = this._rootComponent;\n    let componentInstruction = null;\n    let auxInstructions: {[key: string]: Instruction} = {};\n\n    let parentInstruction: Instruction = ListWrapper.last(ancestorInstructions);\n    if (isPresent(parentInstruction) && isPresent(parentInstruction.component)) {\n      parentComponentType = parentInstruction.component.componentType;\n    }\n\n    if (linkParams.length == 0) {\n      let defaultInstruction = this.generateDefault(parentComponentType);\n      if (isBlank(defaultInstruction)) {\n        throw new BaseException(\n            `Link \"${ListWrapper.toJSON(_originalLink)}\" does not resolve to a terminal instruction.`);\n      }\n      return defaultInstruction;\n    }\n\n    // for non-aux routes, we want to reuse the predecessor's existing primary and aux routes\n    // and only override routes for which the given link DSL provides\n    if (isPresent(prevInstruction) && !_aux) {\n      auxInstructions = StringMapWrapper.merge(prevInstruction.auxInstruction, auxInstructions);\n      componentInstruction = prevInstruction.component;\n    }\n\n    var rules = this._rules.get(parentComponentType);\n    if (isBlank(rules)) {\n      throw new BaseException(\n          `Component \"${getTypeNameForDebugging(parentComponentType)}\" has no route config.`);\n    }\n\n    let linkParamIndex = 0;\n    let routeParams: {[key: string]: any} = {};\n\n    // first, recognize the primary route if one is provided\n    if (linkParamIndex < linkParams.length && isString(linkParams[linkParamIndex])) {\n      let routeName = linkParams[linkParamIndex];\n      if (routeName == '' || routeName == '.' || routeName == '..') {\n        throw new BaseException(`\"${routeName}/\" is only allowed at the beginning of a link DSL.`);\n      }\n      linkParamIndex += 1;\n      if (linkParamIndex < linkParams.length) {\n        let linkParam = linkParams[linkParamIndex];\n        if (isStringMap(linkParam) && !isArray(linkParam)) {\n          routeParams = linkParam;\n          linkParamIndex += 1;\n        }\n      }\n      var routeRecognizer = (_aux ? rules.auxRulesByName : rules.rulesByName).get(routeName);\n\n      if (isBlank(routeRecognizer)) {\n        throw new BaseException(\n            `Component \"${getTypeNameForDebugging(parentComponentType)}\" has no route named \"${routeName}\".`);\n      }\n\n      // Create an \"unresolved instruction\" for async routes\n      // we'll figure out the rest of the route when we resolve the instruction and\n      // perform a navigation\n      if (isBlank(routeRecognizer.handler.componentType)) {\n        var generatedUrl: GeneratedUrl = routeRecognizer.generateComponentPathValues(routeParams);\n        return new UnresolvedInstruction(() => {\n          return routeRecognizer.handler.resolveComponentType().then((_) => {\n            return this._generate(linkParams, ancestorInstructions, prevInstruction, _aux,\n                                  _originalLink);\n          });\n        }, generatedUrl.urlPath, convertUrlParamsToArray(generatedUrl.urlParams));\n      }\n\n      componentInstruction = _aux ? rules.generateAuxiliary(routeName, routeParams) :\n                                    rules.generate(routeName, routeParams);\n    }\n\n    // Next, recognize auxiliary instructions.\n    // If we have an ancestor instruction, we preserve whatever aux routes are active from it.\n    while (linkParamIndex < linkParams.length && isArray(linkParams[linkParamIndex])) {\n      let auxParentInstruction: Instruction[] = [parentInstruction];\n      let auxInstruction = this._generate(linkParams[linkParamIndex], auxParentInstruction, null,\n                                          true, _originalLink);\n\n      // TODO: this will not work for aux routes with parameters or multiple segments\n      auxInstructions[auxInstruction.component.urlPath] = auxInstruction;\n      linkParamIndex += 1;\n    }\n\n    var instruction = new ResolvedInstruction(componentInstruction, null, auxInstructions);\n\n    // If the component is sync, we can generate resolved child route instructions\n    // If not, we'll resolve the instructions at navigation time\n    if (isPresent(componentInstruction) && isPresent(componentInstruction.componentType)) {\n      let childInstruction: Instruction = null;\n      if (componentInstruction.terminal) {\n        if (linkParamIndex >= linkParams.length) {\n          // TODO: throw that there are extra link params beyond the terminal component\n        }\n      } else {\n        let childAncestorComponents: Instruction[] = ancestorInstructions.concat([instruction]);\n        let remainingLinkParams = linkParams.slice(linkParamIndex);\n        childInstruction = this._generate(remainingLinkParams, childAncestorComponents, null, false,\n                                          _originalLink);\n      }\n      instruction.child = childInstruction;\n    }\n\n    return instruction;\n  }\n\n  public hasRoute(name: string, parentComponent: any): boolean {\n    var rules = this._rules.get(parentComponent);\n    if (isBlank(rules)) {\n      return false;\n    }\n    return rules.hasRoute(name);\n  }\n\n  public generateDefault(componentCursor: Type): Instruction {\n    if (isBlank(componentCursor)) {\n      return null;\n    }\n\n    var rules = this._rules.get(componentCursor);\n    if (isBlank(rules) || isBlank(rules.defaultRule)) {\n      return null;\n    }\n\n    var defaultChild = null;\n    if (isPresent(rules.defaultRule.handler.componentType)) {\n      var componentInstruction = rules.defaultRule.generate({});\n      if (!rules.defaultRule.terminal) {\n        defaultChild = this.generateDefault(rules.defaultRule.handler.componentType);\n      }\n      return new DefaultInstruction(componentInstruction, defaultChild);\n    }\n\n    return new UnresolvedInstruction(() => {\n      return rules.defaultRule.handler.resolveComponentType().then(\n          (_) => this.generateDefault(componentCursor));\n    });\n  }\n}\n\n/*\n * Given: ['/a/b', {c: 2}]\n * Returns: ['', 'a', 'b', {c: 2}]\n */\nfunction splitAndFlattenLinkParams(linkParams: any[]) {\n  var accumulation = [];\n  linkParams.forEach(function(item: any) {\n    if (isString(item)) {\n      var strItem: string = <string>item;\n      accumulation = accumulation.concat(strItem.split('/'));\n    } else {\n      accumulation.push(item);\n    }\n  });\n  return accumulation;\n}\n\n\n/*\n * Given a list of instructions, returns the most specific instruction\n */\nfunction mostSpecific(instructions: Instruction[]): Instruction {\n  instructions = instructions.filter((instruction) => isPresent(instruction));\n  if (instructions.length == 0) {\n    return null;\n  }\n  if (instructions.length == 1) {\n    return instructions[0];\n  }\n  var first = instructions[0];\n  var rest = instructions.slice(1);\n  return rest.reduce((instruction: Instruction, contender: Instruction) => {\n    if (compareSpecificityStrings(contender.specificity, instruction.specificity) == -1) {\n      return contender;\n    }\n    return instruction;\n  }, first);\n}\n\n/*\n * Expects strings to be in the form of \"[0-2]+\"\n * Returns -1 if string A should be sorted above string B, 1 if it should be sorted after,\n * or 0 if they are the same.\n */\nfunction compareSpecificityStrings(a: string, b: string): number {\n  var l = Math.min(a.length, b.length);\n  for (var i = 0; i < l; i += 1) {\n    var ai = StringWrapper.charCodeAt(a, i);\n    var bi = StringWrapper.charCodeAt(b, i);\n    var difference = bi - ai;\n    if (difference != 0) {\n      return difference;\n    }\n  }\n  return a.length - b.length;\n}\n\nfunction assertTerminalComponent(component, path) {\n  if (!isType(component)) {\n    return;\n  }\n\n  var annotations = reflector.annotations(component);\n  if (isPresent(annotations)) {\n    for (var i = 0; i < annotations.length; i++) {\n      var annotation = annotations[i];\n\n      if (annotation instanceof RouteConfig) {\n        throw new BaseException(\n            `Child routes are not allowed for \"${path}\". Use \"...\" on the parent's route path.`);\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/route_registry.ts\n **/","import {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {isPresent, isBlank, RegExpWrapper, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\n\nexport function convertUrlParamsToArray(urlParams: {[key: string]: any}): string[] {\n  var paramsArray = [];\n  if (isBlank(urlParams)) {\n    return [];\n  }\n  StringMapWrapper.forEach(\n      urlParams, (value, key) => { paramsArray.push((value === true) ? key : key + '=' + value); });\n  return paramsArray;\n}\n\n// Convert an object of url parameters into a string that can be used in an URL\nexport function serializeParams(urlParams: {[key: string]: any}, joiner = '&'): string {\n  return convertUrlParamsToArray(urlParams).join(joiner);\n}\n\n/**\n * This class represents a parsed URL\n */\nexport class Url {\n  constructor(public path: string, public child: Url = null,\n              public auxiliary: Url[] = CONST_EXPR([]),\n              public params: {[key: string]: any} = CONST_EXPR({})) {}\n\n  toString(): string {\n    return this.path + this._matrixParamsToString() + this._auxToString() + this._childString();\n  }\n\n  segmentToString(): string { return this.path + this._matrixParamsToString(); }\n\n  /** @internal */\n  _auxToString(): string {\n    return this.auxiliary.length > 0 ?\n               ('(' + this.auxiliary.map(sibling => sibling.toString()).join('//') + ')') :\n               '';\n  }\n\n  private _matrixParamsToString(): string {\n    var paramString = serializeParams(this.params, ';');\n    if (paramString.length > 0) {\n      return ';' + paramString;\n    }\n    return '';\n  }\n\n  /** @internal */\n  _childString(): string { return isPresent(this.child) ? ('/' + this.child.toString()) : ''; }\n}\n\nexport class RootUrl extends Url {\n  constructor(path: string, child: Url = null, auxiliary: Url[] = CONST_EXPR([]),\n              params: {[key: string]: any} = null) {\n    super(path, child, auxiliary, params);\n  }\n\n  toString(): string {\n    return this.path + this._auxToString() + this._childString() + this._queryParamsToString();\n  }\n\n  segmentToString(): string { return this.path + this._queryParamsToString(); }\n\n  private _queryParamsToString(): string {\n    if (isBlank(this.params)) {\n      return '';\n    }\n\n    return '?' + serializeParams(this.params);\n  }\n}\n\nexport function pathSegmentsToUrl(pathSegments: string[]): Url {\n  var url = new Url(pathSegments[pathSegments.length - 1]);\n  for (var i = pathSegments.length - 2; i >= 0; i -= 1) {\n    url = new Url(pathSegments[i], url);\n  }\n  return url;\n}\n\nvar SEGMENT_RE = RegExpWrapper.create('^[^\\\\/\\\\(\\\\)\\\\?;=&#]+');\nfunction matchUrlSegment(str: string): string {\n  var match = RegExpWrapper.firstMatch(SEGMENT_RE, str);\n  return isPresent(match) ? match[0] : '';\n}\n\nexport class UrlParser {\n  private _remaining: string;\n\n  peekStartsWith(str: string): boolean { return this._remaining.startsWith(str); }\n\n  capture(str: string): void {\n    if (!this._remaining.startsWith(str)) {\n      throw new BaseException(`Expected \"${str}\".`);\n    }\n    this._remaining = this._remaining.substring(str.length);\n  }\n\n  parse(url: string): Url {\n    this._remaining = url;\n    if (url == '' || url == '/') {\n      return new Url('');\n    }\n    return this.parseRoot();\n  }\n\n  // segment + (aux segments) + (query params)\n  parseRoot(): RootUrl {\n    if (this.peekStartsWith('/')) {\n      this.capture('/');\n    }\n    var path = matchUrlSegment(this._remaining);\n    this.capture(path);\n\n    var aux: Url[] = [];\n    if (this.peekStartsWith('(')) {\n      aux = this.parseAuxiliaryRoutes();\n    }\n    if (this.peekStartsWith(';')) {\n      // TODO: should these params just be dropped?\n      this.parseMatrixParams();\n    }\n    var child = null;\n    if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\n      this.capture('/');\n      child = this.parseSegment();\n    }\n    var queryParams: {[key: string]: any} = null;\n    if (this.peekStartsWith('?')) {\n      queryParams = this.parseQueryParams();\n    }\n    return new RootUrl(path, child, aux, queryParams);\n  }\n\n  // segment + (matrix params) + (aux segments)\n  parseSegment(): Url {\n    if (this._remaining.length == 0) {\n      return null;\n    }\n    if (this.peekStartsWith('/')) {\n      this.capture('/');\n    }\n    var path = matchUrlSegment(this._remaining);\n    this.capture(path);\n\n    var matrixParams: {[key: string]: any} = null;\n    if (this.peekStartsWith(';')) {\n      matrixParams = this.parseMatrixParams();\n    }\n    var aux: Url[] = [];\n    if (this.peekStartsWith('(')) {\n      aux = this.parseAuxiliaryRoutes();\n    }\n    var child: Url = null;\n    if (this.peekStartsWith('/') && !this.peekStartsWith('//')) {\n      this.capture('/');\n      child = this.parseSegment();\n    }\n    return new Url(path, child, aux, matrixParams);\n  }\n\n  parseQueryParams(): {[key: string]: any} {\n    var params: {[key: string]: any} = {};\n    this.capture('?');\n    this.parseParam(params);\n    while (this._remaining.length > 0 && this.peekStartsWith('&')) {\n      this.capture('&');\n      this.parseParam(params);\n    }\n    return params;\n  }\n\n  parseMatrixParams(): {[key: string]: any} {\n    var params: {[key: string]: any} = {};\n    while (this._remaining.length > 0 && this.peekStartsWith(';')) {\n      this.capture(';');\n      this.parseParam(params);\n    }\n    return params;\n  }\n\n  parseParam(params: {[key: string]: any}): void {\n    var key = matchUrlSegment(this._remaining);\n    if (isBlank(key)) {\n      return;\n    }\n    this.capture(key);\n    var value: any = true;\n    if (this.peekStartsWith('=')) {\n      this.capture('=');\n      var valueMatch = matchUrlSegment(this._remaining);\n      if (isPresent(valueMatch)) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n\n    params[key] = value;\n  }\n\n  parseAuxiliaryRoutes(): Url[] {\n    var routes: Url[] = [];\n    this.capture('(');\n\n    while (!this.peekStartsWith(')') && this._remaining.length > 0) {\n      routes.push(this.parseSegment());\n      if (this.peekStartsWith('//')) {\n        this.capture('//');\n      }\n    }\n    this.capture(')');\n\n    return routes;\n  }\n}\n\nexport var parser = new UrlParser();\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/url_parser.ts\n **/","\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar map_1 = require('../../operator/map');\nObservable_1.Observable.prototype.map = map_1.map;\n//# sourceMappingURL=map.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/add/operator/map.js\n ** module id = 242\n ** module chunks = 1\n **/","\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar mergeMap_1 = require('../../operator/mergeMap');\nObservable_1.Observable.prototype.mergeMap = mergeMap_1.mergeMap;\nObservable_1.Observable.prototype.flatMap = mergeMap_1.mergeMap;\n//# sourceMappingURL=mergeMap.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/add/operator/mergeMap.js\n ** module id = 243\n ** module chunks = 1\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the returned observable\n *\n * <img src=\"./img/map.png\" width=\"100%\">\n *\n * @param {Function} project the function to create projection\n * @param {any} [thisArg] an optional argument to define what `this` is in the project function\n * @returns {Observable} a observable of projected values\n */\nfunction map(project, thisArg) {\n    if (typeof project !== 'function') {\n        throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n    }\n    return this.lift(new MapOperator(project, thisArg));\n}\nexports.map = map;\nvar MapOperator = (function () {\n    function MapOperator(project, thisArg) {\n        this.project = project;\n        this.thisArg = thisArg;\n    }\n    MapOperator.prototype.call = function (subscriber) {\n        return new MapSubscriber(subscriber, this.project, this.thisArg);\n    };\n    return MapOperator;\n}());\nvar MapSubscriber = (function (_super) {\n    __extends(MapSubscriber, _super);\n    function MapSubscriber(destination, project, thisArg) {\n        _super.call(this, destination);\n        this.project = project;\n        this.count = 0;\n        this.thisArg = thisArg || this;\n    }\n    // NOTE: This looks unoptimized, but it's actually purposefully NOT\n    // using try/catch optimizations.\n    MapSubscriber.prototype._next = function (value) {\n        var result;\n        try {\n            result = this.project.call(this.thisArg, value, this.count++);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return MapSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=map.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/operator/map.js\n ** module id = 246\n ** module chunks = 1\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\n/**\n * Returns an Observable that emits items based on applying a function that you supply to each item emitted by the\n * source Observable, where that function returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * <img src=\"./img/mergeMap.png\" width=\"100%\">\n *\n * @param {Function} a function that, when applied to an item emitted by the source Observable, returns an Observable.\n * @returns {Observable} an Observable that emits the result of applying the transformation function to each item\n * emitted by the source Observable and merging the results of the Observables obtained from this transformation\n */\nfunction mergeMap(project, resultSelector, concurrent) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    return this.lift(new MergeMapOperator(project, resultSelector, concurrent));\n}\nexports.mergeMap = mergeMap;\nvar MergeMapOperator = (function () {\n    function MergeMapOperator(project, resultSelector, concurrent) {\n        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.concurrent = concurrent;\n    }\n    MergeMapOperator.prototype.call = function (observer) {\n        return new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent);\n    };\n    return MergeMapOperator;\n}());\nexports.MergeMapOperator = MergeMapOperator;\nvar MergeMapSubscriber = (function (_super) {\n    __extends(MergeMapSubscriber, _super);\n    function MergeMapSubscriber(destination, project, resultSelector, concurrent) {\n        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n        _super.call(this, destination);\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.concurrent = concurrent;\n        this.hasCompleted = false;\n        this.buffer = [];\n        this.active = 0;\n        this.index = 0;\n    }\n    MergeMapSubscriber.prototype._next = function (value) {\n        if (this.active < this.concurrent) {\n            this._tryNext(value);\n        }\n        else {\n            this.buffer.push(value);\n        }\n    };\n    MergeMapSubscriber.prototype._tryNext = function (value) {\n        var result;\n        var index = this.index++;\n        try {\n            result = this.project(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.active++;\n        this._innerSub(result, value, index);\n    };\n    MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {\n        this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));\n    };\n    MergeMapSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.active === 0 && this.buffer.length === 0) {\n            this.destination.complete();\n        }\n    };\n    MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        if (this.resultSelector) {\n            this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        else {\n            this.destination.next(innerValue);\n        }\n    };\n    MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {\n        var result;\n        try {\n            result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        else if (this.active === 0 && this.hasCompleted) {\n            this.destination.complete();\n        }\n    };\n    return MergeMapSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.MergeMapSubscriber = MergeMapSubscriber;\n//# sourceMappingURL=mergeMap.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/operator/mergeMap.js\n ** module id = 248\n ** module chunks = 1\n **/","\"use strict\";\nvar root_1 = require('../util/root');\nfunction toPromise(PromiseCtor) {\n    var _this = this;\n    if (!PromiseCtor) {\n        if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {\n            PromiseCtor = root_1.root.Rx.config.Promise;\n        }\n        else if (root_1.root.Promise) {\n            PromiseCtor = root_1.root.Promise;\n        }\n    }\n    if (!PromiseCtor) {\n        throw new Error('no Promise impl found');\n    }\n    return new PromiseCtor(function (resolve, reject) {\n        var value;\n        _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });\n    });\n}\nexports.toPromise = toPromise;\n//# sourceMappingURL=toPromise.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/operator/toPromise.js\n ** module id = 252\n ** module chunks = 1\n **/","\"use strict\";\nfunction isObject(x) {\n    return x != null && typeof x === 'object';\n}\nexports.isObject = isObject;\n//# sourceMappingURL=isObject.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/isObject.js\n ** module id = 257\n ** module chunks = 1\n **/","\"use strict\";\nfunction throwError(e) { throw e; }\nexports.throwError = throwError;\n//# sourceMappingURL=throwError.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/throwError.js\n ** module id = 258\n ** module chunks = 1\n **/","/**\n * @module\n * @description\n * Starting point to import all compiler APIs.\n */\nexport * from './src/compiler/url_resolver';\nexport * from './src/compiler/xhr';\nexport * from './src/compiler/compiler';\n\n\n/** WEBPACK FOOTER **\n ** angular2/compiler.ts\n **/","import {Injectable} from 'angular2/src/core/di';\n\nimport {CssAnimationBuilder} from './css_animation_builder';\nimport {BrowserDetails} from './browser_details';\n\n@Injectable()\nexport class AnimationBuilder {\n  /**\n   * Used for DI\n   * @param browserDetails\n   */\n  constructor(public browserDetails: BrowserDetails) {}\n\n  /**\n   * Creates a new CSS Animation\n   * @returns {CssAnimationBuilder}\n   */\n  css(): CssAnimationBuilder { return new CssAnimationBuilder(this.browserDetails); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/animate/animation_builder.ts\n **/","import {Injectable} from 'angular2/src/core/di';\nimport {Math} from 'angular2/src/facade/math';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\n\n@Injectable()\nexport class BrowserDetails {\n  elapsedTimeIncludesDelay = false;\n\n  constructor() { this.doesElapsedTimeIncludesDelay(); }\n\n  /**\n   * Determines if `event.elapsedTime` includes transition delay in the current browser.  At this\n   * time, Chrome and Opera seem to be the only browsers that include this.\n   */\n  doesElapsedTimeIncludesDelay(): void {\n    var div = DOM.createElement('div');\n    DOM.setAttribute(div, 'style', `position: absolute; top: -9999px; left: -9999px; width: 1px;\n      height: 1px; transition: all 1ms linear 1ms;`);\n    // Firefox requires that we wait for 2 frames for some reason\n    this.raf((timestamp: any) => {\n      DOM.on(div, 'transitionend', (event: any) => {\n        var elapsed = Math.round(event.elapsedTime * 1000);\n        this.elapsedTimeIncludesDelay = elapsed == 2;\n        DOM.remove(div);\n      });\n      DOM.setStyle(div, 'width', '2px');\n    }, 2);\n  }\n\n  raf(callback: Function, frames: number = 1): Function {\n    var queue: RafQueue = new RafQueue(callback, frames);\n    return () => queue.cancel();\n  }\n}\n\nclass RafQueue {\n  currentFrameId: number;\n  constructor(public callback: Function, public frames: number) { this._raf(); }\n  private _raf() {\n    this.currentFrameId =\n        DOM.requestAnimationFrame((timestamp: number) => this._nextFrame(timestamp));\n  }\n  private _nextFrame(timestamp: number) {\n    this.frames--;\n    if (this.frames > 0) {\n      this._raf();\n    } else {\n      this.callback(timestamp);\n    }\n  }\n  cancel() {\n    DOM.cancelAnimationFrame(this.currentFrameId);\n    this.currentFrameId = null;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/animate/browser_details.ts\n **/","/**\n * @module\n * @description\n * Common directives shipped with Angular.\n */\nexport {NgClass} from './directives/ng_class';\nexport {NgFor} from './directives/ng_for';\nexport {NgIf} from './directives/ng_if';\nexport {NgStyle} from './directives/ng_style';\nexport {NgSwitch, NgSwitchWhen, NgSwitchDefault} from './directives/ng_switch';\nexport {NgPlural, NgPluralCase, NgLocalization} from './directives/ng_plural';\nexport * from './directives/observable_list_diff';\nexport {CORE_DIRECTIVES} from './directives/core_directives';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives.ts\n **/","import {isPresent, isString, isArray} from 'angular2/src/facade/lang';\nimport {\n  DoCheck,\n  OnDestroy,\n  Directive,\n  ElementRef,\n  IterableDiffers,\n  KeyValueDiffers,\n  Renderer,\n  IterableDiffer,\n  KeyValueDiffer,\n  CollectionChangeRecord,\n  KeyValueChangeRecord\n} from 'angular2/core';\nimport {StringMapWrapper, isListLikeIterable} from 'angular2/src/facade/collection';\n\n/**\n * The `NgClass` directive conditionally adds and removes CSS classes on an HTML element based on\n * an expression's evaluation result.\n *\n * The result of an expression evaluation is interpreted differently depending on type of\n * the expression evaluation result:\n * - `string` - all the CSS classes listed in a string (space delimited) are added\n * - `Array` - all the CSS classes (Array elements) are added\n * - `Object` - each key corresponds to a CSS class name while values are interpreted as expressions\n * evaluating to `Boolean`. If a given expression evaluates to `true` a corresponding CSS class\n * is added - otherwise it is removed.\n *\n * While the `NgClass` directive can interpret expressions evaluating to `string`, `Array`\n * or `Object`, the `Object`-based version is the most often used and has an advantage of keeping\n * all the CSS class names in a template.\n *\n * ### Example ([live demo](http://plnkr.co/edit/a4YdtmWywhJ33uqfpPPn?p=preview)):\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {NgClass} from 'angular2/common';\n *\n * @Component({\n *   selector: 'toggle-button',\n *   inputs: ['isDisabled'],\n *   template: `\n *      <div class=\"button\" [ngClass]=\"{active: isOn, disabled: isDisabled}\"\n *          (click)=\"toggle(!isOn)\">\n *          Click me!\n *      </div>`,\n *   styles: [`\n *     .button {\n *       width: 120px;\n *       border: medium solid black;\n *     }\n *\n *     .active {\n *       background-color: red;\n *    }\n *\n *     .disabled {\n *       color: gray;\n *       border: medium solid gray;\n *     }\n *   `]\n *   directives: [NgClass]\n * })\n * class ToggleButton {\n *   isOn = false;\n *   isDisabled = false;\n *\n *   toggle(newState) {\n *     if (!this.isDisabled) {\n *       this.isOn = newState;\n *     }\n *   }\n * }\n * ```\n */\n@Directive({selector: '[ngClass]', inputs: ['rawClass: ngClass', 'initialClasses: class']})\nexport class NgClass implements DoCheck, OnDestroy {\n  private _iterableDiffer: IterableDiffer;\n  private _keyValueDiffer: KeyValueDiffer;\n  private _initialClasses: string[] = [];\n  private _rawClass: string[] | Set<string>;\n\n  constructor(private _iterableDiffers: IterableDiffers, private _keyValueDiffers: KeyValueDiffers,\n              private _ngEl: ElementRef, private _renderer: Renderer) {}\n\n  set initialClasses(v: string) {\n    this._applyInitialClasses(true);\n    this._initialClasses = isPresent(v) && isString(v) ? v.split(' ') : [];\n    this._applyInitialClasses(false);\n    this._applyClasses(this._rawClass, false);\n  }\n\n  set rawClass(v: string | string[] | Set<string>| {[key: string]: any}) {\n    this._cleanupClasses(this._rawClass);\n\n    if (isString(v)) {\n      v = (<string>v).split(' ');\n    }\n\n    this._rawClass = <string[] | Set<string>>v;\n    this._iterableDiffer = null;\n    this._keyValueDiffer = null;\n    if (isPresent(v)) {\n      if (isListLikeIterable(v)) {\n        this._iterableDiffer = this._iterableDiffers.find(v).create(null);\n      } else {\n        this._keyValueDiffer = this._keyValueDiffers.find(v).create(null);\n      }\n    }\n  }\n\n  ngDoCheck(): void {\n    if (isPresent(this._iterableDiffer)) {\n      var changes = this._iterableDiffer.diff(this._rawClass);\n      if (isPresent(changes)) {\n        this._applyIterableChanges(changes);\n      }\n    }\n    if (isPresent(this._keyValueDiffer)) {\n      var changes = this._keyValueDiffer.diff(this._rawClass);\n      if (isPresent(changes)) {\n        this._applyKeyValueChanges(changes);\n      }\n    }\n  }\n\n  ngOnDestroy(): void { this._cleanupClasses(this._rawClass); }\n\n  private _cleanupClasses(rawClassVal: string[] | Set<string>| {[key: string]: any}): void {\n    this._applyClasses(rawClassVal, true);\n    this._applyInitialClasses(false);\n  }\n\n  private _applyKeyValueChanges(changes: any): void {\n    changes.forEachAddedItem(\n        (record: KeyValueChangeRecord) => { this._toggleClass(record.key, record.currentValue); });\n    changes.forEachChangedItem(\n        (record: KeyValueChangeRecord) => { this._toggleClass(record.key, record.currentValue); });\n    changes.forEachRemovedItem((record: KeyValueChangeRecord) => {\n      if (record.previousValue) {\n        this._toggleClass(record.key, false);\n      }\n    });\n  }\n\n  private _applyIterableChanges(changes: any): void {\n    changes.forEachAddedItem(\n        (record: CollectionChangeRecord) => { this._toggleClass(record.item, true); });\n    changes.forEachRemovedItem(\n        (record: CollectionChangeRecord) => { this._toggleClass(record.item, false); });\n  }\n\n  private _applyInitialClasses(isCleanup: boolean) {\n    this._initialClasses.forEach(className => this._toggleClass(className, !isCleanup));\n  }\n\n  private _applyClasses(rawClassVal: string[] | Set<string>| {[key: string]: any},\n                        isCleanup: boolean) {\n    if (isPresent(rawClassVal)) {\n      if (isArray(rawClassVal)) {\n        (<string[]>rawClassVal).forEach(className => this._toggleClass(className, !isCleanup));\n      } else if (rawClassVal instanceof Set) {\n        (<Set<string>>rawClassVal).forEach(className => this._toggleClass(className, !isCleanup));\n      } else {\n        StringMapWrapper.forEach(<{[k: string]: any}>rawClassVal,\n                                 (expVal: any, className: string) => {\n                                   if (isPresent(expVal)) this._toggleClass(className, !isCleanup);\n                                 });\n      }\n    }\n  }\n\n  private _toggleClass(className: string, enabled: boolean): void {\n    className = className.trim();\n    if (className.length > 0) {\n      if (className.indexOf(' ') > -1) {\n        var classes = className.split(/\\s+/g);\n        for (var i = 0, len = classes.length; i < len; i++) {\n          this._renderer.setElementClass(this._ngEl.nativeElement, classes[i], enabled);\n        }\n      } else {\n        this._renderer.setElementClass(this._ngEl.nativeElement, className, enabled);\n      }\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/ng_class.ts\n **/","import {\n  DoCheck,\n  Directive,\n  ChangeDetectorRef,\n  IterableDiffer,\n  IterableDiffers,\n  ViewContainerRef,\n  TemplateRef,\n  EmbeddedViewRef,\n  TrackByFn\n} from 'angular2/core';\nimport {isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {\n  DefaultIterableDiffer,\n  CollectionChangeRecord\n} from \"../../core/change_detection/differs/default_iterable_differ\";\n\n/**\n * The `NgFor` directive instantiates a template once per item from an iterable. The context for\n * each instantiated template inherits from the outer context with the given loop variable set\n * to the current item from the iterable.\n *\n * # Local Variables\n *\n * `NgFor` provides several exported values that can be aliased to local variables:\n *\n * * `index` will be set to the current loop iteration for each template context.\n * * `last` will be set to a boolean value indicating whether the item is the last one in the\n *   iteration.\n * * `even` will be set to a boolean value indicating whether this item has an even index.\n * * `odd` will be set to a boolean value indicating whether this item has an odd index.\n *\n * # Change Propagation\n *\n * When the contents of the iterator changes, `NgFor` makes the corresponding changes to the DOM:\n *\n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n * * Otherwise, the DOM element for that item will remain the same.\n *\n * Angular uses object identity to track insertions and deletions within the iterator and reproduce\n * those changes in the DOM. This has important implications for animations and any stateful\n * controls\n * (such as `<input>` elements which accept user input) that are present. Inserted rows can be\n * animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state such\n * as user input.\n *\n * It is possible for the identities of elements in the iterator to change while the data does not.\n * This can happen, for example, if the iterator produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with\n * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted). This is an expensive operation and should\n * be avoided if possible.\n *\n * # Syntax\n *\n * - `<li *ngFor=\"#item of items; #i = index\">...</li>`\n * - `<li template=\"ngFor #item of items; #i = index\">...</li>`\n * - `<template ngFor #item [ngForOf]=\"items\" #i=\"index\"><li>...</li></template>`\n *\n * ### Example\n *\n * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed\n * example.\n */\n@Directive({selector: '[ngFor][ngForOf]', inputs: ['ngForTrackBy', 'ngForOf', 'ngForTemplate']})\nexport class NgFor implements DoCheck {\n  /** @internal */\n  _ngForOf: any;\n  _ngForTrackBy: TrackByFn;\n  private _differ: IterableDiffer;\n\n  constructor(private _viewContainer: ViewContainerRef, private _templateRef: TemplateRef,\n              private _iterableDiffers: IterableDiffers, private _cdr: ChangeDetectorRef) {}\n\n  set ngForOf(value: any) {\n    this._ngForOf = value;\n    if (isBlank(this._differ) && isPresent(value)) {\n      this._differ = this._iterableDiffers.find(value).create(this._cdr, this._ngForTrackBy);\n    }\n  }\n\n  set ngForTemplate(value: TemplateRef) {\n    if (isPresent(value)) {\n      this._templateRef = value;\n    }\n  }\n\n  set ngForTrackBy(value: TrackByFn) { this._ngForTrackBy = value; }\n\n  ngDoCheck() {\n    if (isPresent(this._differ)) {\n      var changes = this._differ.diff(this._ngForOf);\n      if (isPresent(changes)) this._applyChanges(changes);\n    }\n  }\n\n  private _applyChanges(changes: DefaultIterableDiffer) {\n    // TODO(rado): check if change detection can produce a change record that is\n    // easier to consume than current.\n    var recordViewTuples: RecordViewTuple[] = [];\n    changes.forEachRemovedItem((removedRecord: CollectionChangeRecord) =>\n                                   recordViewTuples.push(new RecordViewTuple(removedRecord, null)));\n\n    changes.forEachMovedItem((movedRecord: CollectionChangeRecord) =>\n                                 recordViewTuples.push(new RecordViewTuple(movedRecord, null)));\n\n    var insertTuples = this._bulkRemove(recordViewTuples);\n\n    changes.forEachAddedItem((addedRecord: CollectionChangeRecord) =>\n                                 insertTuples.push(new RecordViewTuple(addedRecord, null)));\n\n    this._bulkInsert(insertTuples);\n\n    for (var i = 0; i < insertTuples.length; i++) {\n      this._perViewChange(insertTuples[i].view, insertTuples[i].record);\n    }\n\n    for (var i = 0, ilen = this._viewContainer.length; i < ilen; i++) {\n      var viewRef = <EmbeddedViewRef>this._viewContainer.get(i);\n      viewRef.setLocal('last', i === ilen - 1);\n    }\n\n    changes.forEachIdentityChange((record) => {\n      var viewRef = <EmbeddedViewRef>this._viewContainer.get(record.currentIndex);\n      viewRef.setLocal('\\$implicit', record.item);\n    });\n  }\n\n  private _perViewChange(view: EmbeddedViewRef, record: CollectionChangeRecord) {\n    view.setLocal('\\$implicit', record.item);\n    view.setLocal('index', record.currentIndex);\n    view.setLocal('even', (record.currentIndex % 2 == 0));\n    view.setLocal('odd', (record.currentIndex % 2 == 1));\n  }\n\n  private _bulkRemove(tuples: RecordViewTuple[]): RecordViewTuple[] {\n    tuples.sort((a: RecordViewTuple, b: RecordViewTuple) =>\n                    a.record.previousIndex - b.record.previousIndex);\n    var movedTuples: RecordViewTuple[] = [];\n    for (var i = tuples.length - 1; i >= 0; i--) {\n      var tuple = tuples[i];\n      // separate moved views from removed views.\n      if (isPresent(tuple.record.currentIndex)) {\n        tuple.view = this._viewContainer.detach(tuple.record.previousIndex);\n        movedTuples.push(tuple);\n      } else {\n        this._viewContainer.remove(tuple.record.previousIndex);\n      }\n    }\n    return movedTuples;\n  }\n\n  private _bulkInsert(tuples: RecordViewTuple[]): RecordViewTuple[] {\n    tuples.sort((a, b) => a.record.currentIndex - b.record.currentIndex);\n    for (var i = 0; i < tuples.length; i++) {\n      var tuple = tuples[i];\n      if (isPresent(tuple.view)) {\n        this._viewContainer.insert(tuple.view, tuple.record.currentIndex);\n      } else {\n        tuple.view =\n            this._viewContainer.createEmbeddedView(this._templateRef, tuple.record.currentIndex);\n      }\n    }\n    return tuples;\n  }\n}\n\nclass RecordViewTuple {\n  view: EmbeddedViewRef;\n  record: any;\n  constructor(record: any, view: EmbeddedViewRef) {\n    this.record = record;\n    this.view = view;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/ng_for.ts\n **/","import {Directive, ViewContainerRef, TemplateRef} from 'angular2/core';\nimport {isBlank} from 'angular2/src/facade/lang';\n\n/**\n * Removes or recreates a portion of the DOM tree based on an {expression}.\n *\n * If the expression assigned to `ngIf` evaluates to a false value then the element\n * is removed from the DOM, otherwise a clone of the element is reinserted into the DOM.\n *\n * ### Example ([live demo](http://plnkr.co/edit/fe0kgemFBtmQOY31b4tw?p=preview)):\n *\n * ```\n * <div *ngIf=\"errorCount > 0\" class=\"error\">\n *   <!-- Error message displayed when the errorCount property on the current context is greater\n * than 0. -->\n *   {{errorCount}} errors detected\n * </div>\n * ```\n *\n * ### Syntax\n *\n * - `<div *ngIf=\"condition\">...</div>`\n * - `<div template=\"ngIf condition\">...</div>`\n * - `<template [ngIf]=\"condition\"><div>...</div></template>`\n */\n@Directive({selector: '[ngIf]', inputs: ['ngIf']})\nexport class NgIf {\n  private _prevCondition: boolean = null;\n\n  constructor(private _viewContainer: ViewContainerRef, private _templateRef: TemplateRef) {}\n\n  set ngIf(newCondition: any /* boolean */) {\n    if (newCondition && (isBlank(this._prevCondition) || !this._prevCondition)) {\n      this._prevCondition = true;\n      this._viewContainer.createEmbeddedView(this._templateRef);\n    } else if (!newCondition && (isBlank(this._prevCondition) || this._prevCondition)) {\n      this._prevCondition = false;\n      this._viewContainer.clear();\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/ng_if.ts\n **/","import {\n  Directive,\n  ViewContainerRef,\n  TemplateRef,\n  ContentChildren,\n  QueryList,\n  Attribute,\n  AfterContentInit,\n  Input\n} from 'angular2/core';\nimport {isPresent, NumberWrapper} from 'angular2/src/facade/lang';\nimport {Map} from 'angular2/src/facade/collection';\nimport {SwitchView} from './ng_switch';\n\nconst _CATEGORY_DEFAULT = 'other';\n\nexport abstract class NgLocalization { abstract getPluralCategory(value: any): string; }\n\n/**\n * `ngPlural` is an i18n directive that displays DOM sub-trees that match the switch expression\n * value, or failing that, DOM sub-trees that match the switch expression's pluralization category.\n *\n * To use this directive, you must provide an extension of `NgLocalization` that maps values to\n * category names. You then define a container element that sets the `[ngPlural]` attribute to a\n * switch expression.\n *    - Inner elements defined with an `[ngPluralCase]` attribute will display based on their\n * expression.\n *    - If `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n * matches the switch expression exactly.\n *    - Otherwise, the view will be treated as a \"category match\", and will only display if exact\n * value matches aren't found and the value maps to its category using the `getPluralCategory`\n * function provided.\n *\n * If no matching views are found for a switch expression, inner elements marked\n * `[ngPluralCase]=\"other\"` will be displayed.\n *\n * ```typescript\n * class MyLocalization extends NgLocalization {\n *    getPluralCategory(value: any) {\n *       if(value < 5) {\n *          return 'few';\n *       }\n *    }\n * }\n *\n * @Component({\n *    selector: 'app',\n *    providers: [provide(NgLocalization, {useClass: MyLocalization})]\n * })\n * @View({\n *   template: `\n *     <p>Value = {{value}}</p>\n *     <button (click)=\"inc()\">Increment</button>\n *\n *     <div [ngPlural]=\"value\">\n *       <template ngPluralCase=\"=0\">there is nothing</template>\n *       <template ngPluralCase=\"=1\">there is one</template>\n *       <template ngPluralCase=\"few\">there are a few</template>\n *       <template ngPluralCase=\"other\">there is some number</template>\n *     </div>\n *   `,\n *   directives: [NgPlural, NgPluralCase]\n * })\n * export class App {\n *   value = 'init';\n *\n *   inc() {\n *     this.value = this.value === 'init' ? 0 : this.value + 1;\n *   }\n * }\n *\n * ```\n */\n\n@Directive({selector: '[ngPluralCase]'})\nexport class NgPluralCase {\n  _view: SwitchView;\n  constructor(@Attribute('ngPluralCase') public value: string, template: TemplateRef,\n              viewContainer: ViewContainerRef) {\n    this._view = new SwitchView(viewContainer, template);\n  }\n}\n\n\n@Directive({selector: '[ngPlural]'})\nexport class NgPlural implements AfterContentInit {\n  private _switchValue: number;\n  private _activeView: SwitchView;\n  private _caseViews = new Map<any, SwitchView>();\n  @ContentChildren(NgPluralCase) cases: QueryList<NgPluralCase> = null;\n\n  constructor(private _localization: NgLocalization) {}\n\n  @Input()\n  set ngPlural(value: number) {\n    this._switchValue = value;\n    this._updateView();\n  }\n\n  ngAfterContentInit() {\n    this.cases.forEach((pluralCase: NgPluralCase): void => {\n      this._caseViews.set(this._formatValue(pluralCase), pluralCase._view);\n    });\n    this._updateView();\n  }\n\n  /** @internal */\n  _updateView(): void {\n    this._clearViews();\n\n    var view: SwitchView = this._caseViews.get(this._switchValue);\n    if (!isPresent(view)) view = this._getCategoryView(this._switchValue);\n\n    this._activateView(view);\n  }\n\n  /** @internal */\n  _clearViews() {\n    if (isPresent(this._activeView)) this._activeView.destroy();\n  }\n\n  /** @internal */\n  _activateView(view: SwitchView) {\n    if (!isPresent(view)) return;\n    this._activeView = view;\n    this._activeView.create();\n  }\n\n  /** @internal */\n  _getCategoryView(value: number): SwitchView {\n    var category: string = this._localization.getPluralCategory(value);\n    var categoryView: SwitchView = this._caseViews.get(category);\n    return isPresent(categoryView) ? categoryView : this._caseViews.get(_CATEGORY_DEFAULT);\n  }\n\n  /** @internal */\n  _isValueView(pluralCase: NgPluralCase): boolean { return pluralCase.value[0] === \"=\"; }\n\n  /** @internal */\n  _formatValue(pluralCase: NgPluralCase): any {\n    return this._isValueView(pluralCase) ? this._stripValue(pluralCase.value) : pluralCase.value;\n  }\n\n  /** @internal */\n  _stripValue(value: string): number { return NumberWrapper.parseInt(value.substring(1), 10); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/ng_plural.ts\n **/","import {\n  DoCheck,\n  KeyValueDiffer,\n  KeyValueDiffers,\n  ElementRef,\n  Directive,\n  Renderer\n} from 'angular2/core';\nimport {isPresent, isBlank, print} from 'angular2/src/facade/lang';\nimport {KeyValueChangeRecord} from \"../../core/change_detection/differs/default_keyvalue_differ\";\n\n/**\n * The `NgStyle` directive changes styles based on a result of expression evaluation.\n *\n * An expression assigned to the `ngStyle` property must evaluate to an object and the\n * corresponding element styles are updated based on changes to this object. Style names to update\n * are taken from the object's keys, and values - from the corresponding object's values.\n *\n * ### Syntax\n *\n * - `<div [ngStyle]=\"{'font-style': style}\"></div>`\n * - `<div [ngStyle]=\"styleExp\"></div>` - here the `styleExp` must evaluate to an object\n *\n * ### Example ([live demo](http://plnkr.co/edit/YamGS6GkUh9GqWNQhCyM?p=preview)):\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {NgStyle} from 'angular2/common';\n *\n * @Component({\n *  selector: 'ngStyle-example',\n *  template: `\n *    <h1 [ngStyle]=\"{'font-style': style, 'font-size': size, 'font-weight': weight}\">\n *      Change style of this text!\n *    </h1>\n *\n *    <hr>\n *\n *    <label>Italic: <input type=\"checkbox\" (change)=\"changeStyle($event)\"></label>\n *    <label>Bold: <input type=\"checkbox\" (change)=\"changeWeight($event)\"></label>\n *    <label>Size: <input type=\"text\" [value]=\"size\" (change)=\"size = $event.target.value\"></label>\n *  `,\n *  directives: [NgStyle]\n * })\n * export class NgStyleExample {\n *    style = 'normal';\n *    weight = 'normal';\n *    size = '20px';\n *\n *    changeStyle($event: any) {\n *      this.style = $event.target.checked ? 'italic' : 'normal';\n *    }\n *\n *    changeWeight($event: any) {\n *      this.weight = $event.target.checked ? 'bold' : 'normal';\n *    }\n * }\n * ```\n *\n * In this example the `font-style`, `font-size` and `font-weight` styles will be updated\n * based on the `style` property's value changes.\n */\n@Directive({selector: '[ngStyle]', inputs: ['rawStyle: ngStyle']})\nexport class NgStyle implements DoCheck {\n  /** @internal */\n  _rawStyle: {[key: string]: string};\n  /** @internal */\n  _differ: KeyValueDiffer;\n\n  constructor(private _differs: KeyValueDiffers, private _ngEl: ElementRef,\n              private _renderer: Renderer) {}\n\n  set rawStyle(v: {[key: string]: string}) {\n    this._rawStyle = v;\n    if (isBlank(this._differ) && isPresent(v)) {\n      this._differ = this._differs.find(this._rawStyle).create(null);\n    }\n  }\n\n  ngDoCheck() {\n    if (isPresent(this._differ)) {\n      var changes = this._differ.diff(this._rawStyle);\n      if (isPresent(changes)) {\n        this._applyChanges(changes);\n      }\n    }\n  }\n\n  private _applyChanges(changes: any): void {\n    changes.forEachAddedItem(\n        (record: KeyValueChangeRecord) => { this._setStyle(record.key, record.currentValue); });\n    changes.forEachChangedItem(\n        (record: KeyValueChangeRecord) => { this._setStyle(record.key, record.currentValue); });\n    changes.forEachRemovedItem(\n        (record: KeyValueChangeRecord) => { this._setStyle(record.key, null); });\n  }\n\n  private _setStyle(name: string, val: string): void {\n    this._renderer.setElementStyle(this._ngEl.nativeElement, name, val);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/ng_style.ts\n **/","/**\n * @module\n * @description\n * This module is used for handling user input, by defining and building a {@link ControlGroup} that\n * consists of\n * {@link Control} objects, and mapping them onto the DOM. {@link Control} objects can then be used\n * to read information\n * from the form DOM elements.\n *\n * This module is not included in the `angular2` module; you must import the forms module\n * explicitly.\n *\n */\nexport {AbstractControl, Control, ControlGroup, ControlArray} from './forms/model';\n\nexport {AbstractControlDirective} from './forms/directives/abstract_control_directive';\nexport {Form} from './forms/directives/form_interface';\nexport {ControlContainer} from './forms/directives/control_container';\nexport {NgControlName} from './forms/directives/ng_control_name';\nexport {NgFormControl} from './forms/directives/ng_form_control';\nexport {NgModel} from './forms/directives/ng_model';\nexport {NgControl} from './forms/directives/ng_control';\nexport {NgControlGroup} from './forms/directives/ng_control_group';\nexport {NgFormModel} from './forms/directives/ng_form_model';\nexport {NgForm} from './forms/directives/ng_form';\nexport {ControlValueAccessor, NG_VALUE_ACCESSOR} from './forms/directives/control_value_accessor';\nexport {DefaultValueAccessor} from './forms/directives/default_value_accessor';\nexport {NgControlStatus} from './forms/directives/ng_control_status';\nexport {CheckboxControlValueAccessor} from './forms/directives/checkbox_value_accessor';\nexport {\n  NgSelectOption,\n  SelectControlValueAccessor\n} from './forms/directives/select_control_value_accessor';\nexport {FORM_DIRECTIVES, RadioButtonState} from './forms/directives';\nexport {NG_VALIDATORS, NG_ASYNC_VALIDATORS, Validators} from './forms/validators';\nexport {\n  RequiredValidator,\n  MinLengthValidator,\n  MaxLengthValidator,\n  PatternValidator,\n  Validator\n} from './forms/directives/validators';\nexport {FormBuilder} from './forms/form_builder';\nimport {FormBuilder} from './forms/form_builder';\nimport {RadioControlRegistry} from './forms/directives/radio_control_value_accessor';\nimport {Type, CONST_EXPR} from 'angular2/src/facade/lang';\n\n/**\n * Shorthand set of providers used for building Angular forms.\n *\n * ### Example\n *\n * ```typescript\n * bootstrap(MyApp, [FORM_PROVIDERS]);\n * ```\n */\nexport const FORM_PROVIDERS: Type[] = CONST_EXPR([FormBuilder, RadioControlRegistry]);\n\n/**\n * See {@link FORM_PROVIDERS} instead.\n *\n * @deprecated\n */\nexport const FORM_BINDINGS = FORM_PROVIDERS;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms.ts\n **/","import {Injectable} from 'angular2/core';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {isPresent, isArray, CONST_EXPR, Type} from 'angular2/src/facade/lang';\nimport * as modelModule from './model';\nimport {ValidatorFn, AsyncValidatorFn} from './directives/validators';\n\n\n/**\n * Creates a form object from a user-specified configuration.\n *\n * ### Example ([live demo](http://plnkr.co/edit/ENgZo8EuIECZNensZCVr?p=preview))\n *\n * ```typescript\n * @Component({\n *   selector: 'my-app',\n *   viewBindings: [FORM_BINDINGS]\n *   template: `\n *     <form [ngFormModel]=\"loginForm\">\n *       <p>Login <input ngControl=\"login\"></p>\n *       <div ngControlGroup=\"passwordRetry\">\n *         <p>Password <input type=\"password\" ngControl=\"password\"></p>\n *         <p>Confirm password <input type=\"password\" ngControl=\"passwordConfirmation\"></p>\n *       </div>\n *     </form>\n *     <h3>Form value:</h3>\n *     <pre>{{value}}</pre>\n *   `,\n *   directives: [FORM_DIRECTIVES]\n * })\n * export class App {\n *   loginForm: ControlGroup;\n *\n *   constructor(builder: FormBuilder) {\n *     this.loginForm = builder.group({\n *       login: [\"\", Validators.required],\n *       passwordRetry: builder.group({\n *         password: [\"\", Validators.required],\n *         passwordConfirmation: [\"\", Validators.required, asyncValidator]\n *       })\n *     });\n *   }\n *\n *   get value(): string {\n *     return JSON.stringify(this.loginForm.value, null, 2);\n *   }\n * }\n * ```\n */\n@Injectable()\nexport class FormBuilder {\n  /**\n   * Construct a new {@link ControlGroup} with the given map of configuration.\n   * Valid keys for the `extra` parameter map are `optionals` and `validator`.\n   *\n   * See the {@link ControlGroup} constructor for more details.\n   */\n  group(controlsConfig: {[key: string]: any},\n        extra: {[key: string]: any} = null): modelModule.ControlGroup {\n    var controls = this._reduceControls(controlsConfig);\n    var optionals = <{[key: string]: boolean}>(\n        isPresent(extra) ? StringMapWrapper.get(extra, \"optionals\") : null);\n    var validator: ValidatorFn = isPresent(extra) ? StringMapWrapper.get(extra, \"validator\") : null;\n    var asyncValidator: AsyncValidatorFn =\n        isPresent(extra) ? StringMapWrapper.get(extra, \"asyncValidator\") : null;\n    return new modelModule.ControlGroup(controls, optionals, validator, asyncValidator);\n  }\n  /**\n   * Construct a new {@link Control} with the given `value`,`validator`, and `asyncValidator`.\n   */\n  control(value: Object, validator: ValidatorFn = null,\n          asyncValidator: AsyncValidatorFn = null): modelModule.Control {\n    return new modelModule.Control(value, validator, asyncValidator);\n  }\n\n  /**\n   * Construct an array of {@link Control}s from the given `controlsConfig` array of\n   * configuration, with the given optional `validator` and `asyncValidator`.\n   */\n  array(controlsConfig: any[], validator: ValidatorFn = null,\n        asyncValidator: AsyncValidatorFn = null): modelModule.ControlArray {\n    var controls = controlsConfig.map(c => this._createControl(c));\n    return new modelModule.ControlArray(controls, validator, asyncValidator);\n  }\n\n  /** @internal */\n  _reduceControls(controlsConfig: {[k: string]:\n                                       any}): {[key: string]: modelModule.AbstractControl} {\n    var controls: {[key: string]: modelModule.AbstractControl} = {};\n    StringMapWrapper.forEach(controlsConfig, (controlConfig: any, controlName: string) => {\n      controls[controlName] = this._createControl(controlConfig);\n    });\n    return controls;\n  }\n\n  /** @internal */\n  _createControl(controlConfig: any): modelModule.AbstractControl {\n    if (controlConfig instanceof modelModule.Control ||\n        controlConfig instanceof modelModule.ControlGroup ||\n        controlConfig instanceof modelModule.ControlArray) {\n      return controlConfig;\n\n    } else if (isArray(controlConfig)) {\n      var value = controlConfig[0];\n      var validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n      var asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n      return this.control(value, validator, asyncValidator);\n\n    } else {\n      return this.control(controlConfig);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/form_builder.ts\n **/","import {isBlank, isPresent, isPromise, CONST} from 'angular2/src/facade/lang';\nimport {ObservableWrapper, Observable, EventEmitter} from 'angular2/src/facade/async';\nimport {\n  Pipe,\n  Injectable,\n  ChangeDetectorRef,\n  OnDestroy,\n  PipeTransform,\n  WrappedValue\n} from 'angular2/core';\n\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\nclass ObservableStrategy {\n  createSubscription(async: any, updateLatestValue: any): any {\n    return ObservableWrapper.subscribe(async, updateLatestValue, e => { throw e; });\n  }\n\n  dispose(subscription: any): void { ObservableWrapper.dispose(subscription); }\n\n  onDestroy(subscription: any): void { ObservableWrapper.dispose(subscription); }\n}\n\nclass PromiseStrategy {\n  createSubscription(async: Promise<any>, updateLatestValue: (v: any) => any): any {\n    return async.then(updateLatestValue);\n  }\n\n  dispose(subscription: any): void {}\n\n  onDestroy(subscription: any): void {}\n}\n\nvar _promiseStrategy = new PromiseStrategy();\nvar _observableStrategy = new ObservableStrategy();\nvar __unused: Promise<any>;  // avoid unused import when Promise union types are erased\n\n/**\n * The `async` pipe subscribes to an Observable or Promise and returns the latest value it has\n * emitted.\n * When a new value is emitted, the `async` pipe marks the component to be checked for changes.\n *\n * ### Example\n *\n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n *\n * {@example core/pipes/ts/async_pipe/async_pipe_example.ts region='AsyncPipe'}\n *\n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. Every 500ms, the `time` Observable updates the view with the current time.\n *\n * ```typescript\n * ```\n */\n@Pipe({name: 'async', pure: false})\n@Injectable()\nexport class AsyncPipe implements PipeTransform, OnDestroy {\n  /** @internal */\n  _latestValue: Object = null;\n  /** @internal */\n  _latestReturnedValue: Object = null;\n\n  /** @internal */\n  _subscription: Object = null;\n  /** @internal */\n  _obj: Observable<any>| Promise<any>| EventEmitter<any> = null;\n  private _strategy: any = null;\n  /** @internal */\n  public _ref: ChangeDetectorRef;\n  constructor(_ref: ChangeDetectorRef) { this._ref = _ref; }\n\n  ngOnDestroy(): void {\n    if (isPresent(this._subscription)) {\n      this._dispose();\n    }\n  }\n\n  transform(obj: Observable<any>| Promise<any>| EventEmitter<any>, args?: any[]): any {\n    if (isBlank(this._obj)) {\n      if (isPresent(obj)) {\n        this._subscribe(obj);\n      }\n      this._latestReturnedValue = this._latestValue;\n      return this._latestValue;\n    }\n\n    if (obj !== this._obj) {\n      this._dispose();\n      return this.transform(obj);\n    }\n\n    if (this._latestValue === this._latestReturnedValue) {\n      return this._latestReturnedValue;\n    } else {\n      this._latestReturnedValue = this._latestValue;\n      return WrappedValue.wrap(this._latestValue);\n    }\n  }\n\n  /** @internal */\n  _subscribe(obj: Observable<any>| Promise<any>| EventEmitter<any>): void {\n    this._obj = obj;\n    this._strategy = this._selectStrategy(obj);\n    this._subscription = this._strategy.createSubscription(\n        obj, (value: Object) => this._updateLatestValue(obj, value));\n  }\n\n  /** @internal */\n  _selectStrategy(obj: Observable<any>| Promise<any>| EventEmitter<any>): any {\n    if (isPromise(obj)) {\n      return _promiseStrategy;\n    } else if (ObservableWrapper.isObservable(obj)) {\n      return _observableStrategy;\n    } else {\n      throw new InvalidPipeArgumentException(AsyncPipe, obj);\n    }\n  }\n\n  /** @internal */\n  _dispose(): void {\n    this._strategy.dispose(this._subscription);\n    this._latestValue = null;\n    this._latestReturnedValue = null;\n    this._subscription = null;\n    this._obj = null;\n  }\n\n  /** @internal */\n  _updateLatestValue(async: any, value: Object) {\n    if (async === this._obj) {\n      this._latestValue = value;\n      this._ref.markForCheck();\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/async_pipe.ts\n **/","import {\n  isDate,\n  isNumber,\n  isPresent,\n  Date,\n  DateWrapper,\n  CONST,\n  isBlank,\n  FunctionWrapper\n} from 'angular2/src/facade/lang';\nimport {DateFormatter} from 'angular2/src/facade/intl';\nimport {PipeTransform, WrappedValue, Pipe, Injectable} from 'angular2/core';\nimport {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\n\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\n\n// TODO: move to a global configurable location along with other i18n components.\nvar defaultLocale: string = 'en-US';\n\n/**\n * Formats a date value to a string based on the requested format.\n *\n * WARNINGS:\n * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\n *   Instead users should treat the date as an immutable object and change the reference when the\n *   pipe needs to re-run (this is to avoid reformatting the date on every change detection run\n *   which would be an expensive operation).\n * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera\n *   browsers.\n *\n * ## Usage\n *\n *     expression | date[:format]\n *\n * where `expression` is a date object or a number (milliseconds since UTC epoch) and\n * `format` indicates which date/time components to include:\n *\n *  | Component | Symbol | Short Form   | Long Form         | Numeric   | 2-digit   |\n *  |-----------|:------:|--------------|-------------------|-----------|-----------|\n *  | era       |   G    | G (AD)       | GGGG (Anno Domini)| -         | -         |\n *  | year      |   y    | -            | -                 | y (2015)  | yy (15)   |\n *  | month     |   M    | MMM (Sep)    | MMMM (September)  | M (9)     | MM (09)   |\n *  | day       |   d    | -            | -                 | d (3)     | dd (03)   |\n *  | weekday   |   E    | EEE (Sun)    | EEEE (Sunday)     | -         | -         |\n *  | hour      |   j    | -            | -                 | j (13)    | jj (13)   |\n *  | hour12    |   h    | -            | -                 | h (1 PM)  | hh (01 PM)|\n *  | hour24    |   H    | -            | -                 | H (13)    | HH (13)   |\n *  | minute    |   m    | -            | -                 | m (5)     | mm (05)   |\n *  | second    |   s    | -            | -                 | s (9)     | ss (09)   |\n *  | timezone  |   z    | -            | z (Pacific Standard Time)| -  | -         |\n *  | timezone  |   Z    | Z (GMT-8:00) | -                 | -         | -         |\n *\n * In javascript, only the components specified will be respected (not the ordering,\n * punctuations, ...) and details of the formatting will be dependent on the locale.\n * On the other hand in Dart version, you can also include quoted text as well as some extra\n * date/time components such as quarter. For more information see:\n * https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/intl/intl.DateFormat.\n *\n * `format` can also be one of the following predefined formats:\n *\n *  - `'medium'`: equivalent to `'yMMMdjms'` (e.g. Sep 3, 2010, 12:05:08 PM for en-US)\n *  - `'short'`: equivalent to `'yMdjm'` (e.g. 9/3/2010, 12:05 PM for en-US)\n *  - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. Friday, September 3, 2010 for en-US)\n *  - `'longDate'`: equivalent to `'yMMMMd'` (e.g. September 3, 2010)\n *  - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. Sep 3, 2010 for en-US)\n *  - `'shortDate'`: equivalent to `'yMd'` (e.g. 9/3/2010 for en-US)\n *  - `'mediumTime'`: equivalent to `'jms'` (e.g. 12:05:08 PM for en-US)\n *  - `'shortTime'`: equivalent to `'jm'` (e.g. 12:05 PM for en-US)\n *\n * Timezone of the formatted text will be the local system timezone of the end-users machine.\n *\n * ### Examples\n *\n * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)\n * in the _local_ time and locale is 'en-US':\n *\n * ```\n *     {{ dateObj | date }}               // output is 'Jun 15, 2015'\n *     {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'\n *     {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'\n *     {{ dateObj | date:'mmss' }}        // output is '43:11'\n * ```\n *\n * {@example core/pipes/ts/date_pipe/date_pipe_example.ts region='DatePipe'}\n */\n@CONST()\n@Pipe({name: 'date', pure: true})\n@Injectable()\nexport class DatePipe implements PipeTransform {\n  /** @internal */\n  static _ALIASES: {[key: string]: String} = {\n    'medium': 'yMMMdjms',\n    'short': 'yMdjm',\n    'fullDate': 'yMMMMEEEEd',\n    'longDate': 'yMMMMd',\n    'mediumDate': 'yMMMd',\n    'shortDate': 'yMd',\n    'mediumTime': 'jms',\n    'shortTime': 'jm'\n  };\n\n\n  transform(value: any, args: any[]): string {\n    if (isBlank(value)) return null;\n\n    if (!this.supports(value)) {\n      throw new InvalidPipeArgumentException(DatePipe, value);\n    }\n\n    var pattern: string = isPresent(args) && args.length > 0 ? args[0] : 'mediumDate';\n    if (isNumber(value)) {\n      value = DateWrapper.fromMillis(value);\n    }\n    if (StringMapWrapper.contains(DatePipe._ALIASES, pattern)) {\n      pattern = <string>StringMapWrapper.get(DatePipe._ALIASES, pattern);\n    }\n    return DateFormatter.format(value, defaultLocale, pattern);\n  }\n\n  supports(obj: any): boolean { return isDate(obj) || isNumber(obj); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/date_pipe.ts\n **/","import {\n  CONST,\n  isStringMap,\n  StringWrapper,\n  isPresent,\n  RegExpWrapper\n} from 'angular2/src/facade/lang';\nimport {Injectable, PipeTransform, Pipe} from 'angular2/core';\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\nvar interpolationExp: RegExp = RegExpWrapper.create('#');\n\n/**\n *\n *  Maps a value to a string that pluralizes the value properly.\n *\n *  ## Usage\n *\n *  expression | i18nPlural:mapping\n *\n *  where `expression` is a number and `mapping` is an object that indicates the proper text for\n *  when the `expression` evaluates to 0, 1, or some other number.  You can interpolate the actual\n *  value into the text using the `#` sign.\n *\n *  ## Example\n *\n *  ```\n *  <div>\n *    {{ messages.length | i18nPlural: messageMapping }}\n *  </div>\n *\n *  class MyApp {\n *    messages: any[];\n *    messageMapping: any = {\n *      '=0': 'No messages.',\n *      '=1': 'One message.',\n *      'other': '# messages.'\n *    }\n *    ...\n *  }\n *  ```\n *\n */\n@CONST()\n@Pipe({name: 'i18nPlural', pure: true})\n@Injectable()\nexport class I18nPluralPipe implements PipeTransform {\n  transform(value: number, args: any[] = null): string {\n    var key: string;\n    var valueStr: string;\n    var pluralMap: {[count: string]: string} = <{[count: string]: string}>(args[0]);\n\n    if (!isStringMap(pluralMap)) {\n      throw new InvalidPipeArgumentException(I18nPluralPipe, pluralMap);\n    }\n\n    key = value === 0 || value === 1 ? `=${value}` : 'other';\n    valueStr = isPresent(value) ? value.toString() : '';\n\n    return StringWrapper.replaceAll(pluralMap[key], interpolationExp, valueStr);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/i18n_plural_pipe.ts\n **/","import {CONST, isStringMap} from 'angular2/src/facade/lang';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {Injectable, PipeTransform, Pipe} from 'angular2/core';\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\n/**\n *\n *  Generic selector that displays the string that matches the current value.\n *\n *  ## Usage\n *\n *  expression | i18nSelect:mapping\n *\n *  where `mapping` is an object that indicates the text that should be displayed\n *  for different values of the provided `expression`.\n *\n *  ## Example\n *\n *  ```\n *  <div>\n *    {{ gender | i18nSelect: inviteMap }}\n *  </div>\n *\n *  class MyApp {\n *    gender: string = 'male';\n *    inviteMap: any = {\n *      'male': 'Invite her.',\n *      'female': 'Invite him.',\n *      'other': 'Invite them.'\n *    }\n *    ...\n *  }\n *  ```\n */\n@CONST()\n@Pipe({name: 'i18nSelect', pure: true})\n@Injectable()\nexport class I18nSelectPipe implements PipeTransform {\n  transform(value: string, args: any[] = null): string {\n    var mapping: {[key: string]: string} = <{[count: string]: string}>(args[0]);\n    if (!isStringMap(mapping)) {\n      throw new InvalidPipeArgumentException(I18nSelectPipe, mapping);\n    }\n\n    return StringMapWrapper.contains(mapping, value) ? mapping[value] : mapping['other'];\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/i18n_select_pipe.ts\n **/","import {isBlank, isPresent, Json, CONST} from 'angular2/src/facade/lang';\nimport {Injectable, PipeTransform, WrappedValue, Pipe} from 'angular2/core';\n\n/**\n * Transforms any input value using `JSON.stringify`. Useful for debugging.\n *\n * ### Example\n * {@example core/pipes/ts/json_pipe/json_pipe_example.ts region='JsonPipe'}\n */\n@CONST()\n@Pipe({name: 'json', pure: false})\n@Injectable()\nexport class JsonPipe implements PipeTransform {\n  transform(value: any, args: any[] = null): string { return Json.stringify(value); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/json_pipe.ts\n **/","import {isString, CONST, isBlank} from 'angular2/src/facade/lang';\nimport {Injectable, PipeTransform, WrappedValue, Pipe} from 'angular2/core';\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\n/**\n * Transforms text to lowercase.\n *\n * ### Example\n *\n * {@example core/pipes/ts/lowerupper_pipe/lowerupper_pipe_example.ts region='LowerUpperPipe'}\n */\n@CONST()\n@Pipe({name: 'lowercase'})\n@Injectable()\nexport class LowerCasePipe implements PipeTransform {\n  transform(value: string, args: any[] = null): string {\n    if (isBlank(value)) return value;\n    if (!isString(value)) {\n      throw new InvalidPipeArgumentException(LowerCasePipe, value);\n    }\n    return value.toLowerCase();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/lowercase_pipe.ts\n **/","import {\n  isNumber,\n  isPresent,\n  isBlank,\n  StringWrapper,\n  NumberWrapper,\n  RegExpWrapper,\n  CONST,\n  FunctionWrapper\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {NumberFormatter, NumberFormatStyle} from 'angular2/src/facade/intl';\nimport {Injectable, PipeTransform, WrappedValue, Pipe} from 'angular2/core';\nimport {ListWrapper} from 'angular2/src/facade/collection';\n\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\nvar defaultLocale: string = 'en-US';\nvar _re = RegExpWrapper.create('^(\\\\d+)?\\\\.((\\\\d+)(\\\\-(\\\\d+))?)?$');\n\n/**\n * Internal base class for numeric pipes.\n */\n@CONST()\n@Injectable()\nexport class NumberPipe {\n  /** @internal */\n  static _format(value: number, style: NumberFormatStyle, digits: string, currency: string = null,\n                 currencyAsSymbol: boolean = false): string {\n    if (isBlank(value)) return null;\n    if (!isNumber(value)) {\n      throw new InvalidPipeArgumentException(NumberPipe, value);\n    }\n    var minInt = 1, minFraction = 0, maxFraction = 3;\n    if (isPresent(digits)) {\n      var parts = RegExpWrapper.firstMatch(_re, digits);\n      if (isBlank(parts)) {\n        throw new BaseException(`${digits} is not a valid digit info for number pipes`);\n      }\n      if (isPresent(parts[1])) {  // min integer digits\n        minInt = NumberWrapper.parseIntAutoRadix(parts[1]);\n      }\n      if (isPresent(parts[3])) {  // min fraction digits\n        minFraction = NumberWrapper.parseIntAutoRadix(parts[3]);\n      }\n      if (isPresent(parts[5])) {  // max fraction digits\n        maxFraction = NumberWrapper.parseIntAutoRadix(parts[5]);\n      }\n    }\n    return NumberFormatter.format(value, defaultLocale, style, {\n      minimumIntegerDigits: minInt,\n      minimumFractionDigits: minFraction,\n      maximumFractionDigits: maxFraction,\n      currency: currency,\n      currencyAsSymbol: currencyAsSymbol\n    });\n  }\n}\n\n/**\n * WARNING: this pipe uses the Internationalization API.\n * Therefore it is only reliable in Chrome and Opera browsers.\n *\n * Formats a number as local text. i.e. group sizing and separator and other locale-specific\n * configurations are based on the active locale.\n *\n * ### Usage\n *\n *     expression | number[:digitInfo]\n *\n * where `expression` is a number and `digitInfo` has the following format:\n *\n *     {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}\n *\n * - minIntegerDigits is the minimum number of integer digits to use. Defaults to 1.\n * - minFractionDigits is the minimum number of digits after fraction. Defaults to 0.\n * - maxFractionDigits is the maximum number of digits after fraction. Defaults to 3.\n *\n * For more information on the acceptable range for each of these numbers and other\n * details see your native internationalization library.\n *\n * ### Example\n *\n * {@example core/pipes/ts/number_pipe/number_pipe_example.ts region='NumberPipe'}\n */\n@CONST()\n@Pipe({name: 'number'})\n@Injectable()\nexport class DecimalPipe extends NumberPipe implements PipeTransform {\n  transform(value: any, args: any[]): string {\n    var digits: string = ListWrapper.first(args);\n    return NumberPipe._format(value, NumberFormatStyle.Decimal, digits);\n  }\n}\n\n/**\n * WARNING: this pipe uses the Internationalization API.\n * Therefore it is only reliable in Chrome and Opera browsers.\n *\n * Formats a number as local percent.\n *\n * ### Usage\n *\n *     expression | percent[:digitInfo]\n *\n * For more information about `digitInfo` see {@link DecimalPipe}\n *\n * ### Example\n *\n * {@example core/pipes/ts/number_pipe/number_pipe_example.ts region='PercentPipe'}\n */\n@CONST()\n@Pipe({name: 'percent'})\n@Injectable()\nexport class PercentPipe extends NumberPipe implements PipeTransform {\n  transform(value: any, args: any[]): string {\n    var digits: string = ListWrapper.first(args);\n    return NumberPipe._format(value, NumberFormatStyle.Percent, digits);\n  }\n}\n\n/**\n * WARNING: this pipe uses the Internationalization API.\n * Therefore it is only reliable in Chrome and Opera browsers.\n *\n * Formats a number as local currency.\n *\n * ### Usage\n *\n *     expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]\n *\n * where `currencyCode` is the ISO 4217 currency code, such as \"USD\" for the US dollar and\n * \"EUR\" for the euro. `symbolDisplay` is a boolean indicating whether to use the currency\n * symbol (e.g. $) or the currency code (e.g. USD) in the output. The default for this value\n * is `false`.\n * For more information about `digitInfo` see {@link DecimalPipe}\n *\n * ### Example\n *\n * {@example core/pipes/ts/number_pipe/number_pipe_example.ts region='CurrencyPipe'}\n */\n@CONST()\n@Pipe({name: 'currency'})\n@Injectable()\nexport class CurrencyPipe extends NumberPipe implements PipeTransform {\n  transform(value: any, args: any[]): string {\n    var currencyCode: string = isPresent(args) && args.length > 0 ? args[0] : 'USD';\n    var symbolDisplay: boolean = isPresent(args) && args.length > 1 ? args[1] : false;\n    var digits: string = isPresent(args) && args.length > 2 ? args[2] : null;\n    return NumberPipe._format(value, NumberFormatStyle.Currency, digits, currencyCode,\n                              symbolDisplay);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/number_pipe.ts\n **/","import {\n  isBlank,\n  isString,\n  isNumber,\n  isFunction,\n  RegExpWrapper,\n  StringWrapper\n} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {Injectable, PipeTransform, Pipe} from 'angular2/core';\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\n/**\n * Creates a new String with some or all of the matches of a pattern replaced by\n * a replacement.\n *\n * The pattern to be matched is specified by the 'pattern' parameter.\n *\n * The replacement to be set is specified by the 'replacement' parameter.\n *\n * An optional 'flags' parameter can be set.\n *\n * ### Usage\n *\n *     expression | replace:pattern:replacement\n *\n * All behavior is based on the expected behavior of the JavaScript API\n * String.prototype.replace() function.\n *\n * Where the input expression is a [String] or [Number] (to be treated as a string),\n * the `pattern` is a [String] or [RegExp],\n * the 'replacement' is a [String] or [Function].\n *\n * --Note--: The 'pattern' parameter will be converted to a RegExp instance. Make sure to escape the\n * string properly if you are matching for regular expression special characters like parenthesis,\n * brackets etc.\n */\n\n@Pipe({name: 'replace'})\n@Injectable()\nexport class ReplacePipe implements PipeTransform {\n  transform(value: any, args: any[]): any {\n    if (isBlank(args) || args.length !== 2) {\n      throw new BaseException('ReplacePipe requires two arguments');\n    }\n\n    if (isBlank(value)) {\n      return value;\n    }\n\n    if (!this._supportedInput(value)) {\n      throw new InvalidPipeArgumentException(ReplacePipe, value);\n    }\n\n    var input = value.toString();\n    var pattern = args[0];\n    var replacement = args[1];\n\n\n    if (!this._supportedPattern(pattern)) {\n      throw new InvalidPipeArgumentException(ReplacePipe, pattern);\n    }\n    if (!this._supportedReplacement(replacement)) {\n      throw new InvalidPipeArgumentException(ReplacePipe, replacement);\n    }\n    // template fails with literal RegExp e.g /pattern/igm\n    // var rgx = pattern instanceof RegExp ? pattern : RegExpWrapper.create(pattern);\n\n    if (isFunction(replacement)) {\n      var rgxPattern = isString(pattern) ? RegExpWrapper.create(pattern) : pattern;\n\n      return StringWrapper.replaceAllMapped(input, rgxPattern, replacement);\n    }\n    if (pattern instanceof RegExp) {\n      // use the replaceAll variant\n      return StringWrapper.replaceAll(input, pattern, replacement);\n    }\n\n    return StringWrapper.replace(input, pattern, replacement);\n  }\n\n  private _supportedInput(input: any): boolean { return isString(input) || isNumber(input); }\n\n  private _supportedPattern(pattern: any): boolean {\n    return isString(pattern) || pattern instanceof RegExp;\n  }\n\n  private _supportedReplacement(replacement: any): boolean {\n    return isString(replacement) || isFunction(replacement);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/replace_pipe.ts\n **/","import {isBlank, isString, isArray, StringWrapper, CONST} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {Injectable, PipeTransform, WrappedValue, Pipe} from 'angular2/core';\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\n/**\n * Creates a new List or String containing only a subset (slice) of the\n * elements.\n *\n * The starting index of the subset to return is specified by the `start` parameter.\n *\n * The ending index of the subset to return is specified by the optional `end` parameter.\n *\n * ### Usage\n *\n *     expression | slice:start[:end]\n *\n * All behavior is based on the expected behavior of the JavaScript API\n * Array.prototype.slice() and String.prototype.slice()\n *\n * Where the input expression is a [List] or [String], and `start` is:\n *\n * - **a positive integer**: return the item at _start_ index and all items after\n * in the list or string expression.\n * - **a negative integer**: return the item at _start_ index from the end and all items after\n * in the list or string expression.\n * - **`|start|` greater than the size of the expression**: return an empty list or string.\n * - **`|start|` negative greater than the size of the expression**: return entire list or\n * string expression.\n *\n * and where `end` is:\n *\n * - **omitted**: return all items until the end of the input\n * - **a positive integer**: return all items before _end_ index of the list or string\n * expression.\n * - **a negative integer**: return all items before _end_ index from the end of the list\n * or string expression.\n *\n * When operating on a [List], the returned list is always a copy even when all\n * the elements are being returned.\n *\n * ## List Example\n *\n * This `ngFor` example:\n *\n * {@example core/pipes/ts/slice_pipe/slice_pipe_example.ts region='SlicePipe_list'}\n *\n * produces the following:\n *\n *     <li>b</li>\n *     <li>c</li>\n *\n * ## String Examples\n *\n * {@example core/pipes/ts/slice_pipe/slice_pipe_example.ts region='SlicePipe_string'}\n */\n\n@Pipe({name: 'slice', pure: false})\n@Injectable()\nexport class SlicePipe implements PipeTransform {\n  transform(value: any, args: any[] = null): any {\n    if (isBlank(args) || args.length == 0) {\n      throw new BaseException('Slice pipe requires one argument');\n    }\n    if (!this.supports(value)) {\n      throw new InvalidPipeArgumentException(SlicePipe, value);\n    }\n    if (isBlank(value)) return value;\n    var start: number = args[0];\n    var end: number = args.length > 1 ? args[1] : null;\n    if (isString(value)) {\n      return StringWrapper.slice(value, start, end);\n    }\n    return ListWrapper.slice(value, start, end);\n  }\n\n  private supports(obj: any): boolean { return isString(obj) || isArray(obj); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/slice_pipe.ts\n **/","import {isString, CONST, isBlank} from 'angular2/src/facade/lang';\nimport {PipeTransform, WrappedValue, Injectable, Pipe} from 'angular2/core';\nimport {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';\n\n/**\n * Implements uppercase transforms to text.\n *\n * ### Example\n *\n * {@example core/pipes/ts/lowerupper_pipe/lowerupper_pipe_example.ts region='LowerUpperPipe'}\n */\n@CONST()\n@Pipe({name: 'uppercase'})\n@Injectable()\nexport class UpperCasePipe implements PipeTransform {\n  transform(value: string, args: any[] = null): string {\n    if (isBlank(value)) return value;\n    if (!isString(value)) {\n      throw new InvalidPipeArgumentException(UpperCasePipe, value);\n    }\n    return value.toUpperCase();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/uppercase_pipe.ts\n **/","import {CompileTypeMetadata} from './directive_metadata';\nimport {SourceExpressions, moduleRef} from './source_module';\nimport {\n  ChangeDetectorJITGenerator\n} from 'angular2/src/core/change_detection/change_detection_jit_generator';\nimport {AbstractChangeDetector} from 'angular2/src/core/change_detection/abstract_change_detector';\nimport {ChangeDetectionUtil} from 'angular2/src/core/change_detection/change_detection_util';\nimport {ChangeDetectorState} from 'angular2/src/core/change_detection/constants';\n\nimport {createChangeDetectorDefinitions} from './change_definition_factory';\nimport {IS_DART, isJsObject, CONST_EXPR} from 'angular2/src/facade/lang';\n\nimport {\n  ChangeDetectorGenConfig,\n  ChangeDetectorDefinition,\n  DynamicProtoChangeDetector,\n  ChangeDetectionStrategy\n} from 'angular2/src/core/change_detection/change_detection';\n\nimport {TemplateAst} from './template_ast';\nimport {Codegen} from 'angular2/src/transform/template_compiler/change_detector_codegen';\nimport {MODULE_SUFFIX} from './util';\nimport {Injectable} from 'angular2/src/core/di';\n\nconst ABSTRACT_CHANGE_DETECTOR = \"AbstractChangeDetector\";\nconst UTIL = \"ChangeDetectionUtil\";\nconst CHANGE_DETECTOR_STATE = \"ChangeDetectorState\";\n\nexport const CHANGE_DETECTION_JIT_IMPORTS = CONST_EXPR({\n  'AbstractChangeDetector': AbstractChangeDetector,\n  'ChangeDetectionUtil': ChangeDetectionUtil,\n  'ChangeDetectorState': ChangeDetectorState\n});\n\nvar ABSTRACT_CHANGE_DETECTOR_MODULE = moduleRef(\n    `package:angular2/src/core/change_detection/abstract_change_detector${MODULE_SUFFIX}`);\nvar UTIL_MODULE =\n    moduleRef(`package:angular2/src/core/change_detection/change_detection_util${MODULE_SUFFIX}`);\nvar PREGEN_PROTO_CHANGE_DETECTOR_MODULE = moduleRef(\n    `package:angular2/src/core/change_detection/pregen_proto_change_detector${MODULE_SUFFIX}`);\nvar CONSTANTS_MODULE =\n    moduleRef(`package:angular2/src/core/change_detection/constants${MODULE_SUFFIX}`);\n\n@Injectable()\nexport class ChangeDetectionCompiler {\n  constructor(private _genConfig: ChangeDetectorGenConfig) {}\n\n  compileComponentRuntime(componentType: CompileTypeMetadata, strategy: ChangeDetectionStrategy,\n                          parsedTemplate: TemplateAst[]): Function[] {\n    var changeDetectorDefinitions =\n        createChangeDetectorDefinitions(componentType, strategy, this._genConfig, parsedTemplate);\n    return changeDetectorDefinitions.map(definition =>\n                                             this._createChangeDetectorFactory(definition));\n  }\n\n  private _createChangeDetectorFactory(definition: ChangeDetectorDefinition): Function {\n    var proto = new DynamicProtoChangeDetector(definition);\n    return () => proto.instantiate();\n  }\n\n  compileComponentCodeGen(componentType: CompileTypeMetadata, strategy: ChangeDetectionStrategy,\n                          parsedTemplate: TemplateAst[]): SourceExpressions {\n    var changeDetectorDefinitions =\n        createChangeDetectorDefinitions(componentType, strategy, this._genConfig, parsedTemplate);\n    var factories = [];\n    var index = 0;\n    var sourceParts = changeDetectorDefinitions.map(definition => {\n      var codegen: any;\n      var sourcePart: string;\n      // TODO(tbosch): move the 2 code generators to the same place, one with .dart and one with .ts\n      // suffix\n      // and have the same API for calling them!\n      if (IS_DART) {\n        codegen = new Codegen(PREGEN_PROTO_CHANGE_DETECTOR_MODULE);\n        var className = `_${definition.id}`;\n        var typeRef = (index === 0 && componentType.isHost) ?\n                          'dynamic' :\n                          `${moduleRef(componentType.moduleUrl)}${componentType.name}`;\n        codegen.generate(typeRef, className, definition);\n        factories.push(`${className}.newChangeDetector`);\n        sourcePart = codegen.toString();\n      } else {\n        codegen = new ChangeDetectorJITGenerator(\n            definition, `${UTIL_MODULE}${UTIL}`,\n            `${ABSTRACT_CHANGE_DETECTOR_MODULE}${ABSTRACT_CHANGE_DETECTOR}`,\n            `${CONSTANTS_MODULE}${CHANGE_DETECTOR_STATE}`);\n        factories.push(`function() { return new ${codegen.typeName}(); }`);\n        sourcePart = codegen.generateSource();\n      }\n      index++;\n      return sourcePart;\n    });\n    return new SourceExpressions(sourceParts, factories);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/change_detector_compiler.ts\n **/","import {Compiler, Compiler_} from 'angular2/src/core/linker/compiler';\nimport {HostViewFactoryRef, HostViewFactoryRef_} from 'angular2/src/core/linker/view_ref';\nimport {TemplateCompiler} from './template_compiler';\n\nimport {Injectable} from 'angular2/src/core/di';\nimport {Type} from 'angular2/src/facade/lang';\n\nexport abstract class RuntimeCompiler extends Compiler {\n  abstract compileInHost(componentType: Type): Promise<HostViewFactoryRef>;\n  abstract clearCache();\n}\n\n@Injectable()\nexport class RuntimeCompiler_ extends Compiler_ implements RuntimeCompiler {\n  constructor(private _templateCompiler: TemplateCompiler) { super(); }\n\n  compileInHost(componentType: Type): Promise<HostViewFactoryRef_> {\n    return this._templateCompiler.compileHostComponentRuntime(componentType)\n        .then(hostViewFactory => new HostViewFactoryRef_(hostViewFactory));\n  }\n\n  clearCache() {\n    super.clearCache();\n    this._templateCompiler.clearCache();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/runtime_compiler.ts\n **/","import {resolveForwardRef} from 'angular2/src/core/di';\nimport {\n  Type,\n  isBlank,\n  isPresent,\n  isArray,\n  stringify,\n  RegExpWrapper\n} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport * as cpl from './directive_metadata';\nimport * as md from 'angular2/src/core/metadata/directives';\nimport {DirectiveResolver} from 'angular2/src/core/linker/directive_resolver';\nimport {PipeResolver} from 'angular2/src/core/linker/pipe_resolver';\nimport {ViewResolver} from 'angular2/src/core/linker/view_resolver';\nimport {ViewMetadata} from 'angular2/src/core/metadata/view';\nimport {hasLifecycleHook} from 'angular2/src/core/linker/directive_lifecycle_reflector';\nimport {LifecycleHooks, LIFECYCLE_HOOKS_VALUES} from 'angular2/src/core/linker/interfaces';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\nimport {Injectable, Inject, Optional} from 'angular2/src/core/di';\nimport {PLATFORM_DIRECTIVES, PLATFORM_PIPES} from 'angular2/src/core/platform_directives_and_pipes';\nimport {MODULE_SUFFIX} from './util';\nimport {getUrlScheme} from 'angular2/src/compiler/url_resolver';\n\n@Injectable()\nexport class RuntimeMetadataResolver {\n  private _directiveCache = new Map<Type, cpl.CompileDirectiveMetadata>();\n  private _pipeCache = new Map<Type, cpl.CompilePipeMetadata>();\n\n  constructor(private _directiveResolver: DirectiveResolver, private _pipeResolver: PipeResolver,\n              private _viewResolver: ViewResolver,\n              @Optional() @Inject(PLATFORM_DIRECTIVES) private _platformDirectives: Type[],\n              @Optional() @Inject(PLATFORM_PIPES) private _platformPipes: Type[]) {}\n\n  getDirectiveMetadata(directiveType: Type): cpl.CompileDirectiveMetadata {\n    var meta = this._directiveCache.get(directiveType);\n    if (isBlank(meta)) {\n      var dirMeta = this._directiveResolver.resolve(directiveType);\n      var moduleUrl = null;\n      var templateMeta = null;\n      var changeDetectionStrategy = null;\n\n      if (dirMeta instanceof md.ComponentMetadata) {\n        var cmpMeta = <md.ComponentMetadata>dirMeta;\n        moduleUrl = calcModuleUrl(directiveType, cmpMeta);\n        var viewMeta = this._viewResolver.resolve(directiveType);\n        templateMeta = new cpl.CompileTemplateMetadata({\n          encapsulation: viewMeta.encapsulation,\n          template: viewMeta.template,\n          templateUrl: viewMeta.templateUrl,\n          styles: viewMeta.styles,\n          styleUrls: viewMeta.styleUrls\n        });\n        changeDetectionStrategy = cmpMeta.changeDetection;\n      }\n      meta = cpl.CompileDirectiveMetadata.create({\n        selector: dirMeta.selector,\n        exportAs: dirMeta.exportAs,\n        isComponent: isPresent(templateMeta),\n        dynamicLoadable: true,\n        type: new cpl.CompileTypeMetadata(\n            {name: stringify(directiveType), moduleUrl: moduleUrl, runtime: directiveType}),\n        template: templateMeta,\n        changeDetection: changeDetectionStrategy,\n        inputs: dirMeta.inputs,\n        outputs: dirMeta.outputs,\n        host: dirMeta.host,\n        lifecycleHooks: LIFECYCLE_HOOKS_VALUES.filter(hook => hasLifecycleHook(hook, directiveType))\n      });\n      this._directiveCache.set(directiveType, meta);\n    }\n    return meta;\n  }\n\n  getPipeMetadata(pipeType: Type): cpl.CompilePipeMetadata {\n    var meta = this._pipeCache.get(pipeType);\n    if (isBlank(meta)) {\n      var pipeMeta = this._pipeResolver.resolve(pipeType);\n      var moduleUrl = reflector.importUri(pipeType);\n      meta = new cpl.CompilePipeMetadata({\n        type: new cpl.CompileTypeMetadata(\n            {name: stringify(pipeType), moduleUrl: moduleUrl, runtime: pipeType}),\n        name: pipeMeta.name,\n        pure: pipeMeta.pure\n      });\n      this._pipeCache.set(pipeType, meta);\n    }\n    return meta;\n  }\n\n  getViewDirectivesMetadata(component: Type): cpl.CompileDirectiveMetadata[] {\n    var view = this._viewResolver.resolve(component);\n    var directives = flattenDirectives(view, this._platformDirectives);\n    for (var i = 0; i < directives.length; i++) {\n      if (!isValidType(directives[i])) {\n        throw new BaseException(\n            `Unexpected directive value '${stringify(directives[i])}' on the View of component '${stringify(component)}'`);\n      }\n    }\n\n    return directives.map(type => this.getDirectiveMetadata(type));\n  }\n\n  getViewPipesMetadata(component: Type): cpl.CompilePipeMetadata[] {\n    var view = this._viewResolver.resolve(component);\n    var pipes = flattenPipes(view, this._platformPipes);\n    for (var i = 0; i < pipes.length; i++) {\n      if (!isValidType(pipes[i])) {\n        throw new BaseException(\n            `Unexpected piped value '${stringify(pipes[i])}' on the View of component '${stringify(component)}'`);\n      }\n    }\n    return pipes.map(type => this.getPipeMetadata(type));\n  }\n}\n\nfunction flattenDirectives(view: ViewMetadata, platformDirectives: any[]): Type[] {\n  let directives = [];\n  if (isPresent(platformDirectives)) {\n    flattenArray(platformDirectives, directives);\n  }\n  if (isPresent(view.directives)) {\n    flattenArray(view.directives, directives);\n  }\n  return directives;\n}\n\nfunction flattenPipes(view: ViewMetadata, platformPipes: any[]): Type[] {\n  let pipes = [];\n  if (isPresent(platformPipes)) {\n    flattenArray(platformPipes, pipes);\n  }\n  if (isPresent(view.pipes)) {\n    flattenArray(view.pipes, pipes);\n  }\n  return pipes;\n}\n\nfunction flattenArray(tree: any[], out: Array<Type | any[]>): void {\n  for (var i = 0; i < tree.length; i++) {\n    var item = resolveForwardRef(tree[i]);\n    if (isArray(item)) {\n      flattenArray(item, out);\n    } else {\n      out.push(item);\n    }\n  }\n}\n\nfunction isValidType(value: Type): boolean {\n  return isPresent(value) && (value instanceof Type);\n}\n\nfunction calcModuleUrl(type: Type, cmpMetadata: md.ComponentMetadata): string {\n  var moduleId = cmpMetadata.moduleId;\n  if (isPresent(moduleId)) {\n    var scheme = getUrlScheme(moduleId);\n    return isPresent(scheme) && scheme.length > 0 ? moduleId :\n                                                    `package:${moduleId}${MODULE_SUFFIX}`;\n  } else {\n    return reflector.importUri(type);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/runtime_metadata.ts\n **/","import {Map, ListWrapper, MapWrapper} from 'angular2/src/facade/collection';\nimport {\n  isPresent,\n  isBlank,\n  RegExpWrapper,\n  RegExpMatcherWrapper,\n  StringWrapper\n} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\n\nconst _EMPTY_ATTR_VALUE = '';\n\n// TODO: Can't use `const` here as\n// in Dart this is not transpiled into `final` yet...\nvar _SELECTOR_REGEXP = RegExpWrapper.create(\n    '(\\\\:not\\\\()|' +                          //\":not(\"\n    '([-\\\\w]+)|' +                            // \"tag\"\n    '(?:\\\\.([-\\\\w]+))|' +                     // \".class\"\n    '(?:\\\\[([-\\\\w*]+)(?:=([^\\\\]]*))?\\\\])|' +  // \"[name]\", \"[name=value]\" or \"[name*=value]\"\n    '(\\\\))|' +                                // \")\"\n    '(\\\\s*,\\\\s*)');                           // \",\"\n\n/**\n * A css selector contains an element name,\n * css classes and attribute/value pairs with the purpose\n * of selecting subsets out of them.\n */\nexport class CssSelector {\n  element: string = null;\n  classNames: string[] = [];\n  attrs: string[] = [];\n  notSelectors: CssSelector[] = [];\n\n  static parse(selector: string): CssSelector[] {\n    var results: CssSelector[] = [];\n    var _addResult = (res: CssSelector[], cssSel) => {\n      if (cssSel.notSelectors.length > 0 && isBlank(cssSel.element) &&\n          ListWrapper.isEmpty(cssSel.classNames) && ListWrapper.isEmpty(cssSel.attrs)) {\n        cssSel.element = \"*\";\n      }\n      res.push(cssSel);\n    };\n    var cssSelector = new CssSelector();\n    var matcher = RegExpWrapper.matcher(_SELECTOR_REGEXP, selector);\n    var match;\n    var current = cssSelector;\n    var inNot = false;\n    while (isPresent(match = RegExpMatcherWrapper.next(matcher))) {\n      if (isPresent(match[1])) {\n        if (inNot) {\n          throw new BaseException('Nesting :not is not allowed in a selector');\n        }\n        inNot = true;\n        current = new CssSelector();\n        cssSelector.notSelectors.push(current);\n      }\n      if (isPresent(match[2])) {\n        current.setElement(match[2]);\n      }\n      if (isPresent(match[3])) {\n        current.addClassName(match[3]);\n      }\n      if (isPresent(match[4])) {\n        current.addAttribute(match[4], match[5]);\n      }\n      if (isPresent(match[6])) {\n        inNot = false;\n        current = cssSelector;\n      }\n      if (isPresent(match[7])) {\n        if (inNot) {\n          throw new BaseException('Multiple selectors in :not are not supported');\n        }\n        _addResult(results, cssSelector);\n        cssSelector = current = new CssSelector();\n      }\n    }\n    _addResult(results, cssSelector);\n    return results;\n  }\n\n  isElementSelector(): boolean {\n    return isPresent(this.element) && ListWrapper.isEmpty(this.classNames) &&\n           ListWrapper.isEmpty(this.attrs) && this.notSelectors.length === 0;\n  }\n\n  setElement(element: string = null) { this.element = element; }\n\n  /** Gets a template string for an element that matches the selector. */\n  getMatchingElementTemplate(): string {\n    let tagName = isPresent(this.element) ? this.element : 'div';\n    let classAttr = this.classNames.length > 0 ? ` class=\"${this.classNames.join(' ')}\"` : '';\n\n    let attrs = '';\n    for (let i = 0; i < this.attrs.length; i += 2) {\n      let attrName = this.attrs[i];\n      let attrValue = this.attrs[i + 1] !== '' ? `=\"${this.attrs[i + 1]}\"` : '';\n      attrs += ` ${attrName}${attrValue}`;\n    }\n\n    return `<${tagName}${classAttr}${attrs}></${tagName}>`;\n  }\n\n  addAttribute(name: string, value: string = _EMPTY_ATTR_VALUE) {\n    this.attrs.push(name);\n    if (isPresent(value)) {\n      value = value.toLowerCase();\n    } else {\n      value = _EMPTY_ATTR_VALUE;\n    }\n    this.attrs.push(value);\n  }\n\n  addClassName(name: string) { this.classNames.push(name.toLowerCase()); }\n\n  toString(): string {\n    var res = '';\n    if (isPresent(this.element)) {\n      res += this.element;\n    }\n    if (isPresent(this.classNames)) {\n      for (var i = 0; i < this.classNames.length; i++) {\n        res += '.' + this.classNames[i];\n      }\n    }\n    if (isPresent(this.attrs)) {\n      for (var i = 0; i < this.attrs.length;) {\n        var attrName = this.attrs[i++];\n        var attrValue = this.attrs[i++];\n        res += '[' + attrName;\n        if (attrValue.length > 0) {\n          res += '=' + attrValue;\n        }\n        res += ']';\n      }\n    }\n    this.notSelectors.forEach(notSelector => res += `:not(${notSelector})`);\n    return res;\n  }\n}\n\n/**\n * Reads a list of CssSelectors and allows to calculate which ones\n * are contained in a given CssSelector.\n */\nexport class SelectorMatcher {\n  static createNotMatcher(notSelectors: CssSelector[]): SelectorMatcher {\n    var notMatcher = new SelectorMatcher();\n    notMatcher.addSelectables(notSelectors, null);\n    return notMatcher;\n  }\n\n  private _elementMap = new Map<string, SelectorContext[]>();\n  private _elementPartialMap = new Map<string, SelectorMatcher>();\n  private _classMap = new Map<string, SelectorContext[]>();\n  private _classPartialMap = new Map<string, SelectorMatcher>();\n  private _attrValueMap = new Map<string, Map<string, SelectorContext[]>>();\n  private _attrValuePartialMap = new Map<string, Map<string, SelectorMatcher>>();\n  private _listContexts: SelectorListContext[] = [];\n\n  addSelectables(cssSelectors: CssSelector[], callbackCtxt?: any) {\n    var listContext = null;\n    if (cssSelectors.length > 1) {\n      listContext = new SelectorListContext(cssSelectors);\n      this._listContexts.push(listContext);\n    }\n    for (var i = 0; i < cssSelectors.length; i++) {\n      this._addSelectable(cssSelectors[i], callbackCtxt, listContext);\n    }\n  }\n\n  /**\n   * Add an object that can be found later on by calling `match`.\n   * @param cssSelector A css selector\n   * @param callbackCtxt An opaque object that will be given to the callback of the `match` function\n   */\n  private _addSelectable(cssSelector: CssSelector, callbackCtxt: any,\n                         listContext: SelectorListContext) {\n    var matcher: SelectorMatcher = this;\n    var element = cssSelector.element;\n    var classNames = cssSelector.classNames;\n    var attrs = cssSelector.attrs;\n    var selectable = new SelectorContext(cssSelector, callbackCtxt, listContext);\n\n    if (isPresent(element)) {\n      var isTerminal = attrs.length === 0 && classNames.length === 0;\n      if (isTerminal) {\n        this._addTerminal(matcher._elementMap, element, selectable);\n      } else {\n        matcher = this._addPartial(matcher._elementPartialMap, element);\n      }\n    }\n\n    if (isPresent(classNames)) {\n      for (var index = 0; index < classNames.length; index++) {\n        var isTerminal = attrs.length === 0 && index === classNames.length - 1;\n        var className = classNames[index];\n        if (isTerminal) {\n          this._addTerminal(matcher._classMap, className, selectable);\n        } else {\n          matcher = this._addPartial(matcher._classPartialMap, className);\n        }\n      }\n    }\n\n    if (isPresent(attrs)) {\n      for (var index = 0; index < attrs.length;) {\n        var isTerminal = index === attrs.length - 2;\n        var attrName = attrs[index++];\n        var attrValue = attrs[index++];\n        if (isTerminal) {\n          var terminalMap = matcher._attrValueMap;\n          var terminalValuesMap = terminalMap.get(attrName);\n          if (isBlank(terminalValuesMap)) {\n            terminalValuesMap = new Map<string, SelectorContext[]>();\n            terminalMap.set(attrName, terminalValuesMap);\n          }\n          this._addTerminal(terminalValuesMap, attrValue, selectable);\n        } else {\n          var parttialMap = matcher._attrValuePartialMap;\n          var partialValuesMap = parttialMap.get(attrName);\n          if (isBlank(partialValuesMap)) {\n            partialValuesMap = new Map<string, SelectorMatcher>();\n            parttialMap.set(attrName, partialValuesMap);\n          }\n          matcher = this._addPartial(partialValuesMap, attrValue);\n        }\n      }\n    }\n  }\n\n  private _addTerminal(map: Map<string, SelectorContext[]>, name: string,\n                       selectable: SelectorContext) {\n    var terminalList = map.get(name);\n    if (isBlank(terminalList)) {\n      terminalList = [];\n      map.set(name, terminalList);\n    }\n    terminalList.push(selectable);\n  }\n\n  private _addPartial(map: Map<string, SelectorMatcher>, name: string): SelectorMatcher {\n    var matcher = map.get(name);\n    if (isBlank(matcher)) {\n      matcher = new SelectorMatcher();\n      map.set(name, matcher);\n    }\n    return matcher;\n  }\n\n  /**\n   * Find the objects that have been added via `addSelectable`\n   * whose css selector is contained in the given css selector.\n   * @param cssSelector A css selector\n   * @param matchedCallback This callback will be called with the object handed into `addSelectable`\n   * @return boolean true if a match was found\n  */\n  match(cssSelector: CssSelector, matchedCallback: (c: CssSelector, a: any) => void): boolean {\n    var result = false;\n    var element = cssSelector.element;\n    var classNames = cssSelector.classNames;\n    var attrs = cssSelector.attrs;\n\n    for (var i = 0; i < this._listContexts.length; i++) {\n      this._listContexts[i].alreadyMatched = false;\n    }\n\n    result = this._matchTerminal(this._elementMap, element, cssSelector, matchedCallback) || result;\n    result = this._matchPartial(this._elementPartialMap, element, cssSelector, matchedCallback) ||\n             result;\n\n    if (isPresent(classNames)) {\n      for (var index = 0; index < classNames.length; index++) {\n        var className = classNames[index];\n        result =\n            this._matchTerminal(this._classMap, className, cssSelector, matchedCallback) || result;\n        result =\n            this._matchPartial(this._classPartialMap, className, cssSelector, matchedCallback) ||\n            result;\n      }\n    }\n\n    if (isPresent(attrs)) {\n      for (var index = 0; index < attrs.length;) {\n        var attrName = attrs[index++];\n        var attrValue = attrs[index++];\n\n        var terminalValuesMap = this._attrValueMap.get(attrName);\n        if (!StringWrapper.equals(attrValue, _EMPTY_ATTR_VALUE)) {\n          result = this._matchTerminal(terminalValuesMap, _EMPTY_ATTR_VALUE, cssSelector,\n                                       matchedCallback) ||\n                   result;\n        }\n        result = this._matchTerminal(terminalValuesMap, attrValue, cssSelector, matchedCallback) ||\n                 result;\n\n        var partialValuesMap = this._attrValuePartialMap.get(attrName);\n        if (!StringWrapper.equals(attrValue, _EMPTY_ATTR_VALUE)) {\n          result = this._matchPartial(partialValuesMap, _EMPTY_ATTR_VALUE, cssSelector,\n                                      matchedCallback) ||\n                   result;\n        }\n        result =\n            this._matchPartial(partialValuesMap, attrValue, cssSelector, matchedCallback) || result;\n      }\n    }\n    return result;\n  }\n\n  /** @internal */\n  _matchTerminal(map: Map<string, SelectorContext[]>, name, cssSelector: CssSelector,\n                 matchedCallback: (c: CssSelector, a: any) => void): boolean {\n    if (isBlank(map) || isBlank(name)) {\n      return false;\n    }\n\n    var selectables = map.get(name);\n    var starSelectables = map.get(\"*\");\n    if (isPresent(starSelectables)) {\n      selectables = selectables.concat(starSelectables);\n    }\n    if (isBlank(selectables)) {\n      return false;\n    }\n    var selectable;\n    var result = false;\n    for (var index = 0; index < selectables.length; index++) {\n      selectable = selectables[index];\n      result = selectable.finalize(cssSelector, matchedCallback) || result;\n    }\n    return result;\n  }\n\n  /** @internal */\n  _matchPartial(map: Map<string, SelectorMatcher>, name, cssSelector: CssSelector,\n                matchedCallback /*: (c: CssSelector, a: any) => void*/): boolean {\n    if (isBlank(map) || isBlank(name)) {\n      return false;\n    }\n    var nestedSelector = map.get(name);\n    if (isBlank(nestedSelector)) {\n      return false;\n    }\n    // TODO(perf): get rid of recursion and measure again\n    // TODO(perf): don't pass the whole selector into the recursion,\n    // but only the not processed parts\n    return nestedSelector.match(cssSelector, matchedCallback);\n  }\n}\n\n\nexport class SelectorListContext {\n  alreadyMatched: boolean = false;\n\n  constructor(public selectors: CssSelector[]) {}\n}\n\n// Store context to pass back selector and context when a selector is matched\nexport class SelectorContext {\n  notSelectors: CssSelector[];\n\n  constructor(public selector: CssSelector, public cbContext: any,\n              public listContext: SelectorListContext) {\n    this.notSelectors = selector.notSelectors;\n  }\n\n  finalize(cssSelector: CssSelector, callback: (c: CssSelector, a: any) => void): boolean {\n    var result = true;\n    if (this.notSelectors.length > 0 &&\n        (isBlank(this.listContext) || !this.listContext.alreadyMatched)) {\n      var notMatcher = SelectorMatcher.createNotMatcher(this.notSelectors);\n      result = !notMatcher.match(cssSelector, null);\n    }\n    if (result && isPresent(callback) &&\n        (isBlank(this.listContext) || !this.listContext.alreadyMatched)) {\n      if (isPresent(this.listContext)) {\n        this.listContext.alreadyMatched = true;\n      }\n      callback(this.selector, this.cbContext);\n    }\n    return result;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/selector.ts\n **/","import {CompileTypeMetadata, CompileTemplateMetadata} from './directive_metadata';\nimport {SourceModule, SourceExpression, moduleRef} from './source_module';\nimport {ViewEncapsulation} from 'angular2/src/core/metadata/view';\nimport {XHR} from 'angular2/src/compiler/xhr';\nimport {IS_DART, StringWrapper, isBlank} from 'angular2/src/facade/lang';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\nimport {ShadowCss} from 'angular2/src/compiler/shadow_css';\nimport {UrlResolver} from 'angular2/src/compiler/url_resolver';\nimport {extractStyleUrls} from './style_url_resolver';\nimport {\n  escapeSingleQuoteString,\n  codeGenExportVariable,\n  codeGenToString,\n  MODULE_SUFFIX\n} from './util';\nimport {Injectable} from 'angular2/src/core/di';\n\nconst COMPONENT_VARIABLE = '%COMP%';\nconst HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`;\nconst CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`;\n\n@Injectable()\nexport class StyleCompiler {\n  private _styleCache: Map<string, Promise<string[]>> = new Map<string, Promise<string[]>>();\n  private _shadowCss: ShadowCss = new ShadowCss();\n\n  constructor(private _xhr: XHR, private _urlResolver: UrlResolver) {}\n\n  compileComponentRuntime(template: CompileTemplateMetadata): Promise<Array<string | any[]>> {\n    var styles = template.styles;\n    var styleAbsUrls = template.styleUrls;\n    return this._loadStyles(styles, styleAbsUrls,\n                            template.encapsulation === ViewEncapsulation.Emulated);\n  }\n\n  compileComponentCodeGen(template: CompileTemplateMetadata): SourceExpression {\n    var shim = template.encapsulation === ViewEncapsulation.Emulated;\n    return this._styleCodeGen(template.styles, template.styleUrls, shim);\n  }\n\n  compileStylesheetCodeGen(stylesheetUrl: string, cssText: string): SourceModule[] {\n    var styleWithImports = extractStyleUrls(this._urlResolver, stylesheetUrl, cssText);\n    return [\n      this._styleModule(\n          stylesheetUrl, false,\n          this._styleCodeGen([styleWithImports.style], styleWithImports.styleUrls, false)),\n      this._styleModule(stylesheetUrl, true, this._styleCodeGen([styleWithImports.style],\n                                                                styleWithImports.styleUrls, true))\n    ];\n  }\n\n  clearCache() { this._styleCache.clear(); }\n\n  private _loadStyles(plainStyles: string[], absUrls: string[],\n                      encapsulate: boolean): Promise<Array<string | any[]>> {\n    var promises: Promise<string[]>[] = absUrls.map((absUrl: string): Promise<string[]> => {\n      var cacheKey = `${absUrl}${encapsulate ? '.shim' : ''}`;\n      var result: Promise<string[]> = this._styleCache.get(cacheKey);\n      if (isBlank(result)) {\n        result = this._xhr.get(absUrl).then((style) => {\n          var styleWithImports = extractStyleUrls(this._urlResolver, absUrl, style);\n          return this._loadStyles([styleWithImports.style], styleWithImports.styleUrls,\n                                  encapsulate);\n        });\n        this._styleCache.set(cacheKey, result);\n      }\n      return result;\n    });\n    return PromiseWrapper.all<string[]>(promises).then((nestedStyles: string[][]) => {\n      var result: Array<string | any[]> =\n          plainStyles.map(plainStyle => this._shimIfNeeded(plainStyle, encapsulate));\n      nestedStyles.forEach(styles => result.push(styles));\n      return result;\n    });\n  }\n\n  private _styleCodeGen(plainStyles: string[], absUrls: string[], shim: boolean): SourceExpression {\n    var arrayPrefix = IS_DART ? `const` : '';\n    var styleExpressions = plainStyles.map(\n        plainStyle => escapeSingleQuoteString(this._shimIfNeeded(plainStyle, shim)));\n\n    for (var i = 0; i < absUrls.length; i++) {\n      var moduleUrl = this._createModuleUrl(absUrls[i], shim);\n      styleExpressions.push(`${moduleRef(moduleUrl)}STYLES`);\n    }\n    var expressionSource = `${arrayPrefix} [${styleExpressions.join(',')}]`;\n    return new SourceExpression([], expressionSource);\n  }\n\n  private _styleModule(stylesheetUrl: string, shim: boolean,\n                       expression: SourceExpression): SourceModule {\n    var moduleSource = `\n      ${expression.declarations.join('\\n')}\n      ${codeGenExportVariable('STYLES')}${expression.expression};\n    `;\n    return new SourceModule(this._createModuleUrl(stylesheetUrl, shim), moduleSource);\n  }\n\n  private _shimIfNeeded(style: string, shim: boolean): string {\n    return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style;\n  }\n\n  private _createModuleUrl(stylesheetUrl: string, shim: boolean): string {\n    return shim ? `${stylesheetUrl}.shim${MODULE_SUFFIX}` : `${stylesheetUrl}${MODULE_SUFFIX}`;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/style_compiler.ts\n **/","import {\n  CompileTypeMetadata,\n  CompileDirectiveMetadata,\n  CompileTemplateMetadata\n} from './directive_metadata';\nimport {isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\n\nimport {XHR} from 'angular2/src/compiler/xhr';\nimport {UrlResolver} from 'angular2/src/compiler/url_resolver';\nimport {extractStyleUrls, isStyleUrlResolvable} from './style_url_resolver';\nimport {Injectable} from 'angular2/src/core/di';\nimport {ViewEncapsulation} from 'angular2/src/core/metadata/view';\n\n\nimport {\n  HtmlAstVisitor,\n  HtmlElementAst,\n  HtmlTextAst,\n  HtmlAttrAst,\n  HtmlAst,\n  HtmlCommentAst,\n  htmlVisitAll\n} from './html_ast';\nimport {HtmlParser} from './html_parser';\n\nimport {preparseElement, PreparsedElement, PreparsedElementType} from './template_preparser';\n\n@Injectable()\nexport class TemplateNormalizer {\n  constructor(private _xhr: XHR, private _urlResolver: UrlResolver,\n              private _htmlParser: HtmlParser) {}\n\n  normalizeTemplate(directiveType: CompileTypeMetadata,\n                    template: CompileTemplateMetadata): Promise<CompileTemplateMetadata> {\n    if (isPresent(template.template)) {\n      return PromiseWrapper.resolve(this.normalizeLoadedTemplate(\n          directiveType, template, template.template, directiveType.moduleUrl));\n    } else if (isPresent(template.templateUrl)) {\n      var sourceAbsUrl = this._urlResolver.resolve(directiveType.moduleUrl, template.templateUrl);\n      return this._xhr.get(sourceAbsUrl)\n          .then(templateContent => this.normalizeLoadedTemplate(directiveType, template,\n                                                                templateContent, sourceAbsUrl));\n    } else {\n      throw new BaseException(`No template specified for component ${directiveType.name}`);\n    }\n  }\n\n  normalizeLoadedTemplate(directiveType: CompileTypeMetadata, templateMeta: CompileTemplateMetadata,\n                          template: string, templateAbsUrl: string): CompileTemplateMetadata {\n    var rootNodesAndErrors = this._htmlParser.parse(template, directiveType.name);\n    if (rootNodesAndErrors.errors.length > 0) {\n      var errorString = rootNodesAndErrors.errors.join('\\n');\n      throw new BaseException(`Template parse errors:\\n${errorString}`);\n    }\n\n    var visitor = new TemplatePreparseVisitor();\n    htmlVisitAll(visitor, rootNodesAndErrors.rootNodes);\n    var allStyles = templateMeta.styles.concat(visitor.styles);\n\n    var allStyleAbsUrls =\n        visitor.styleUrls.filter(isStyleUrlResolvable)\n            .map(url => this._urlResolver.resolve(templateAbsUrl, url))\n            .concat(templateMeta.styleUrls.filter(isStyleUrlResolvable)\n                        .map(url => this._urlResolver.resolve(directiveType.moduleUrl, url)));\n\n    var allResolvedStyles = allStyles.map(style => {\n      var styleWithImports = extractStyleUrls(this._urlResolver, templateAbsUrl, style);\n      styleWithImports.styleUrls.forEach(styleUrl => allStyleAbsUrls.push(styleUrl));\n      return styleWithImports.style;\n    });\n\n    var encapsulation = templateMeta.encapsulation;\n    if (encapsulation === ViewEncapsulation.Emulated && allResolvedStyles.length === 0 &&\n        allStyleAbsUrls.length === 0) {\n      encapsulation = ViewEncapsulation.None;\n    }\n    return new CompileTemplateMetadata({\n      encapsulation: encapsulation,\n      template: template,\n      templateUrl: templateAbsUrl,\n      styles: allResolvedStyles,\n      styleUrls: allStyleAbsUrls,\n      ngContentSelectors: visitor.ngContentSelectors\n    });\n  }\n}\n\nclass TemplatePreparseVisitor implements HtmlAstVisitor {\n  ngContentSelectors: string[] = [];\n  styles: string[] = [];\n  styleUrls: string[] = [];\n  ngNonBindableStackCount: number = 0;\n\n  visitElement(ast: HtmlElementAst, context: any): any {\n    var preparsedElement = preparseElement(ast);\n    switch (preparsedElement.type) {\n      case PreparsedElementType.NG_CONTENT:\n        if (this.ngNonBindableStackCount === 0) {\n          this.ngContentSelectors.push(preparsedElement.selectAttr);\n        }\n        break;\n      case PreparsedElementType.STYLE:\n        var textContent = '';\n        ast.children.forEach(child => {\n          if (child instanceof HtmlTextAst) {\n            textContent += (<HtmlTextAst>child).value;\n          }\n        });\n        this.styles.push(textContent);\n        break;\n      case PreparsedElementType.STYLESHEET:\n        this.styleUrls.push(preparsedElement.hrefAttr);\n        break;\n      default:\n        // DDC reports this as error. See:\n        // https://github.com/dart-lang/dev_compiler/issues/428\n        break;\n    }\n    if (preparsedElement.nonBindable) {\n      this.ngNonBindableStackCount++;\n    }\n    htmlVisitAll(this, ast.children);\n    if (preparsedElement.nonBindable) {\n      this.ngNonBindableStackCount--;\n    }\n    return null;\n  }\n  visitComment(ast: HtmlCommentAst, context: any): any { return null; }\n  visitAttr(ast: HtmlAttrAst, context: any): any { return null; }\n  visitText(ast: HtmlTextAst, context: any): any { return null; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/template_normalizer.ts\n **/","import {HtmlElementAst} from './html_ast';\nimport {isBlank, isPresent} from 'angular2/src/facade/lang';\nimport {splitNsName} from './html_tags';\n\nconst NG_CONTENT_SELECT_ATTR = 'select';\nconst NG_CONTENT_ELEMENT = 'ng-content';\nconst LINK_ELEMENT = 'link';\nconst LINK_STYLE_REL_ATTR = 'rel';\nconst LINK_STYLE_HREF_ATTR = 'href';\nconst LINK_STYLE_REL_VALUE = 'stylesheet';\nconst STYLE_ELEMENT = 'style';\nconst SCRIPT_ELEMENT = 'script';\nconst NG_NON_BINDABLE_ATTR = 'ngNonBindable';\n\nexport function preparseElement(ast: HtmlElementAst): PreparsedElement {\n  var selectAttr = null;\n  var hrefAttr = null;\n  var relAttr = null;\n  var nonBindable = false;\n  ast.attrs.forEach(attr => {\n    let lcAttrName = attr.name.toLowerCase();\n    if (lcAttrName == NG_CONTENT_SELECT_ATTR) {\n      selectAttr = attr.value;\n    } else if (lcAttrName == LINK_STYLE_HREF_ATTR) {\n      hrefAttr = attr.value;\n    } else if (lcAttrName == LINK_STYLE_REL_ATTR) {\n      relAttr = attr.value;\n    } else if (attr.name == NG_NON_BINDABLE_ATTR) {\n      nonBindable = true;\n    }\n  });\n  selectAttr = normalizeNgContentSelect(selectAttr);\n  var nodeName = ast.name.toLowerCase();\n  var type = PreparsedElementType.OTHER;\n  if (splitNsName(nodeName)[1] == NG_CONTENT_ELEMENT) {\n    type = PreparsedElementType.NG_CONTENT;\n  } else if (nodeName == STYLE_ELEMENT) {\n    type = PreparsedElementType.STYLE;\n  } else if (nodeName == SCRIPT_ELEMENT) {\n    type = PreparsedElementType.SCRIPT;\n  } else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) {\n    type = PreparsedElementType.STYLESHEET;\n  }\n  return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable);\n}\n\nexport enum PreparsedElementType {\n  NG_CONTENT,\n  STYLE,\n  STYLESHEET,\n  SCRIPT,\n  OTHER\n}\n\nexport class PreparsedElement {\n  constructor(public type: PreparsedElementType, public selectAttr: string, public hrefAttr: string,\n              public nonBindable: boolean) {}\n}\n\n\nfunction normalizeNgContentSelect(selectAttr: string): string {\n  if (isBlank(selectAttr) || selectAttr.length === 0) {\n    return '*';\n  }\n  return selectAttr;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/template_preparser.ts\n **/","import {\n  isPresent,\n  isBlank,\n  Type,\n  isString,\n  StringWrapper,\n  IS_DART,\n  CONST_EXPR\n} from 'angular2/src/facade/lang';\nimport {SetWrapper, StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {\n  TemplateAst,\n  TemplateAstVisitor,\n  NgContentAst,\n  EmbeddedTemplateAst,\n  ElementAst,\n  VariableAst,\n  BoundEventAst,\n  BoundElementPropertyAst,\n  AttrAst,\n  BoundTextAst,\n  TextAst,\n  DirectiveAst,\n  BoundDirectivePropertyAst,\n  templateVisitAll\n} from './template_ast';\nimport {CompileTypeMetadata, CompileDirectiveMetadata} from './directive_metadata';\nimport {SourceExpressions, SourceExpression, moduleRef} from './source_module';\nimport {\n  AppProtoView,\n  AppView,\n  flattenNestedViewRenderNodes,\n  checkSlotCount\n} from 'angular2/src/core/linker/view';\nimport {ViewType} from 'angular2/src/core/linker/view_type';\nimport {AppViewManager_} from 'angular2/src/core/linker/view_manager';\nimport {AppProtoElement, AppElement} from 'angular2/src/core/linker/element';\nimport {Renderer, ParentRenderer} from 'angular2/src/core/render/api';\nimport {ViewEncapsulation} from 'angular2/src/core/metadata/view';\nimport {\n  escapeSingleQuoteString,\n  codeGenConstConstructorCall,\n  codeGenValueFn,\n  codeGenFnHeader,\n  MODULE_SUFFIX,\n  Statement,\n  escapeValue,\n  codeGenArray,\n  codeGenFlatArray,\n  Expression,\n  flattenArray,\n  CONST_VAR\n} from './util';\nimport {ResolvedProvider, Injectable, Injector} from 'angular2/src/core/di';\n\nimport {\n  APP_VIEW_MODULE_REF,\n  APP_EL_MODULE_REF,\n  METADATA_MODULE_REF,\n  CompileProtoView,\n  CompileProtoElement\n} from './proto_view_compiler';\n\nexport const VIEW_JIT_IMPORTS = CONST_EXPR({\n  'AppView': AppView,\n  'AppElement': AppElement,\n  'flattenNestedViewRenderNodes': flattenNestedViewRenderNodes,\n  'checkSlotCount': checkSlotCount\n});\n\n\n@Injectable()\nexport class ViewCompiler {\n  constructor() {}\n\n  compileComponentRuntime(component: CompileDirectiveMetadata, template: TemplateAst[],\n                          styles: Array<string | any[]>,\n                          protoViews: CompileProtoView<AppProtoView, AppProtoElement>[],\n                          changeDetectorFactories: Function[],\n                          componentViewFactory: Function): Function {\n    var viewFactory = new RuntimeViewFactory(component, styles, protoViews, changeDetectorFactories,\n                                             componentViewFactory);\n    return viewFactory.createViewFactory(template, 0, []);\n  }\n\n  compileComponentCodeGen(component: CompileDirectiveMetadata, template: TemplateAst[],\n                          styles: SourceExpression,\n                          protoViews: CompileProtoView<Expression, Expression>[],\n                          changeDetectorFactoryExpressions: SourceExpressions,\n                          componentViewFactory: Function): SourceExpression {\n    var viewFactory = new CodeGenViewFactory(\n        component, styles, protoViews, changeDetectorFactoryExpressions, componentViewFactory);\n    var targetStatements: Statement[] = [];\n    var viewFactoryExpression = viewFactory.createViewFactory(template, 0, targetStatements);\n    return new SourceExpression(targetStatements.map(stmt => stmt.statement),\n                                viewFactoryExpression.expression);\n  }\n}\n\ninterface ViewFactory<EXPRESSION, STATEMENT> {\n  createText(renderer: EXPRESSION, parent: EXPRESSION, text: string,\n             targetStatements: STATEMENT[]): EXPRESSION;\n\n  createElement(renderer: EXPRESSION, parent: EXPRESSION, name: string, rootSelector: EXPRESSION,\n                targetStatements: STATEMENT[]): EXPRESSION;\n\n  createTemplateAnchor(renderer: EXPRESSION, parent: EXPRESSION,\n                       targetStatements: STATEMENT[]): EXPRESSION;\n\n  createGlobalEventListener(renderer: EXPRESSION, view: EXPRESSION, boundElementIndex: number,\n                            eventAst: BoundEventAst, targetStatements: STATEMENT[]): EXPRESSION;\n\n  createElementEventListener(renderer: EXPRESSION, view: EXPRESSION, boundElementIndex: number,\n                             renderNode: EXPRESSION, eventAst: BoundEventAst,\n                             targetStatements: STATEMENT[]): EXPRESSION;\n\n  setElementAttribute(renderer: EXPRESSION, renderNode: EXPRESSION, attrName: string,\n                      attrValue: string, targetStatements: STATEMENT[]);\n\n  createAppElement(appProtoEl: EXPRESSION, view: EXPRESSION, renderNode: EXPRESSION,\n                   parentAppEl: EXPRESSION, embeddedViewFactory: EXPRESSION,\n                   targetStatements: STATEMENT[]): EXPRESSION;\n\n  createAndSetComponentView(renderer: EXPRESSION, viewManager: EXPRESSION, view: EXPRESSION,\n                            appEl: EXPRESSION, component: CompileDirectiveMetadata,\n                            contentNodesByNgContentIndex: EXPRESSION[][],\n                            targetStatements: STATEMENT[]);\n\n  getProjectedNodes(projectableNodes: EXPRESSION, ngContentIndex: number): EXPRESSION;\n\n  appendProjectedNodes(renderer: EXPRESSION, parent: EXPRESSION, nodes: EXPRESSION,\n                       targetStatements: STATEMENT[]);\n\n  createViewFactory(asts: TemplateAst[], embeddedTemplateIndex: number,\n                    targetStatements: STATEMENT[]): EXPRESSION;\n}\n\nclass CodeGenViewFactory implements ViewFactory<Expression, Statement> {\n  private _nextVarId: number = 0;\n  constructor(public component: CompileDirectiveMetadata, public styles: SourceExpression,\n              public protoViews: CompileProtoView<Expression, Expression>[],\n              public changeDetectorExpressions: SourceExpressions,\n              public componentViewFactory: Function) {}\n\n  private _nextVar(prefix: string): string {\n    return `${prefix}${this._nextVarId++}_${this.component.type.name}`;\n  }\n\n  private _nextRenderVar(): string { return this._nextVar('render'); }\n\n  private _nextAppVar(): string { return this._nextVar('app'); }\n\n  private _nextDisposableVar(): string {\n    return `disposable${this._nextVarId++}_${this.component.type.name}`;\n  }\n\n  createText(renderer: Expression, parent: Expression, text: string,\n             targetStatements: Statement[]): Expression {\n    var varName = this._nextRenderVar();\n    var statement =\n        `var ${varName} = ${renderer.expression}.createText(${isPresent(parent) ? parent.expression : null}, ${escapeSingleQuoteString(text)});`;\n    targetStatements.push(new Statement(statement));\n    return new Expression(varName);\n  }\n\n  createElement(renderer: Expression, parentRenderNode: Expression, name: string,\n                rootSelector: Expression, targetStatements: Statement[]): Expression {\n    var varName = this._nextRenderVar();\n    var valueExpr;\n    if (isPresent(rootSelector)) {\n      valueExpr = `${rootSelector.expression} == null ?\n        ${renderer.expression}.createElement(${isPresent(parentRenderNode) ? parentRenderNode.expression : null}, ${escapeSingleQuoteString(name)}) :\n        ${renderer.expression}.selectRootElement(${rootSelector.expression});`;\n    } else {\n      valueExpr =\n          `${renderer.expression}.createElement(${isPresent(parentRenderNode) ? parentRenderNode.expression : null}, ${escapeSingleQuoteString(name)})`;\n    }\n    var statement = `var ${varName} = ${valueExpr};`;\n    targetStatements.push(new Statement(statement));\n    return new Expression(varName);\n  }\n\n  createTemplateAnchor(renderer: Expression, parentRenderNode: Expression,\n                       targetStatements: Statement[]): Expression {\n    var varName = this._nextRenderVar();\n    var valueExpr =\n        `${renderer.expression}.createTemplateAnchor(${isPresent(parentRenderNode) ? parentRenderNode.expression : null});`;\n    targetStatements.push(new Statement(`var ${varName} = ${valueExpr}`));\n    return new Expression(varName);\n  }\n\n  createGlobalEventListener(renderer: Expression, appView: Expression, boundElementIndex: number,\n                            eventAst: BoundEventAst, targetStatements: Statement[]): Expression {\n    var disposableVar = this._nextDisposableVar();\n    var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);\n    targetStatements.push(new Statement(\n        `var ${disposableVar} = ${renderer.expression}.listenGlobal(${escapeValue(eventAst.target)}, ${escapeValue(eventAst.name)}, ${eventHandlerExpr});`));\n    return new Expression(disposableVar);\n  }\n\n  createElementEventListener(renderer: Expression, appView: Expression, boundElementIndex: number,\n                             renderNode: Expression, eventAst: BoundEventAst,\n                             targetStatements: Statement[]) {\n    var disposableVar = this._nextDisposableVar();\n    var eventHandlerExpr = codeGenEventHandler(appView, boundElementIndex, eventAst.fullName);\n    targetStatements.push(new Statement(\n        `var ${disposableVar} = ${renderer.expression}.listen(${renderNode.expression}, ${escapeValue(eventAst.name)}, ${eventHandlerExpr});`));\n    return new Expression(disposableVar);\n  }\n\n  setElementAttribute(renderer: Expression, renderNode: Expression, attrName: string,\n                      attrValue: string, targetStatements: Statement[]) {\n    targetStatements.push(new Statement(\n        `${renderer.expression}.setElementAttribute(${renderNode.expression}, ${escapeSingleQuoteString(attrName)}, ${escapeSingleQuoteString(attrValue)});`));\n  }\n\n  createAppElement(appProtoEl: Expression, appView: Expression, renderNode: Expression,\n                   parentAppEl: Expression, embeddedViewFactory: Expression,\n                   targetStatements: Statement[]): Expression {\n    var appVar = this._nextAppVar();\n    var varValue =\n        `new ${APP_EL_MODULE_REF}AppElement(${appProtoEl.expression}, ${appView.expression},\n      ${isPresent(parentAppEl) ? parentAppEl.expression : null}, ${renderNode.expression}, ${isPresent(embeddedViewFactory) ? embeddedViewFactory.expression : null})`;\n    targetStatements.push(new Statement(`var ${appVar} = ${varValue};`));\n    return new Expression(appVar);\n  }\n\n  createAndSetComponentView(renderer: Expression, viewManager: Expression, view: Expression,\n                            appEl: Expression, component: CompileDirectiveMetadata,\n                            contentNodesByNgContentIndex: Expression[][],\n                            targetStatements: Statement[]) {\n    var codeGenContentNodes;\n    if (this.component.type.isHost) {\n      codeGenContentNodes = `${view.expression}.projectableNodes`;\n    } else {\n      codeGenContentNodes =\n          `[${contentNodesByNgContentIndex.map( nodes => codeGenFlatArray(nodes) ).join(',')}]`;\n    }\n    targetStatements.push(new Statement(\n        `${this.componentViewFactory(component)}(${renderer.expression}, ${viewManager.expression}, ${appEl.expression}, ${codeGenContentNodes}, null, null, null);`));\n  }\n\n  getProjectedNodes(projectableNodes: Expression, ngContentIndex: number): Expression {\n    return new Expression(`${projectableNodes.expression}[${ngContentIndex}]`, true);\n  }\n\n  appendProjectedNodes(renderer: Expression, parent: Expression, nodes: Expression,\n                       targetStatements: Statement[]) {\n    targetStatements.push(new Statement(\n        `${renderer.expression}.projectNodes(${parent.expression}, ${APP_VIEW_MODULE_REF}flattenNestedViewRenderNodes(${nodes.expression}));`));\n  }\n\n  createViewFactory(asts: TemplateAst[], embeddedTemplateIndex: number,\n                    targetStatements: Statement[]): Expression {\n    var compileProtoView = this.protoViews[embeddedTemplateIndex];\n    var isHostView = this.component.type.isHost;\n    var isComponentView = embeddedTemplateIndex === 0 && !isHostView;\n    var visitor = new ViewBuilderVisitor<Expression, Statement>(\n        new Expression('renderer'), new Expression('viewManager'),\n        new Expression('projectableNodes'), isHostView ? new Expression('rootSelector') : null,\n        new Expression('view'), compileProtoView, targetStatements, this);\n\n    templateVisitAll(\n        visitor, asts,\n        new ParentElement(isComponentView ? new Expression('parentRenderNode') : null, null, null));\n\n    var appProtoView = compileProtoView.protoView.expression;\n    var viewFactoryName = codeGenViewFactoryName(this.component, embeddedTemplateIndex);\n    var changeDetectorFactory = this.changeDetectorExpressions.expressions[embeddedTemplateIndex];\n    var factoryArgs = [\n      'parentRenderer',\n      'viewManager',\n      'containerEl',\n      'projectableNodes',\n      'rootSelector',\n      'dynamicallyCreatedProviders',\n      'rootInjector'\n    ];\n    var initRendererStmts = [];\n    var rendererExpr = `parentRenderer`;\n    if (embeddedTemplateIndex === 0) {\n      var renderCompTypeVar = this._nextVar('renderType');\n      targetStatements.push(new Statement(`var ${renderCompTypeVar} = null;`));\n      var stylesVar = this._nextVar('styles');\n      targetStatements.push(\n          new Statement(`${CONST_VAR} ${stylesVar} = ${this.styles.expression};`));\n      var encapsulation = this.component.template.encapsulation;\n      initRendererStmts.push(`if (${renderCompTypeVar} == null) {\n        ${renderCompTypeVar} = viewManager.createRenderComponentType(${codeGenViewEncapsulation(encapsulation)}, ${stylesVar});\n      }`);\n      rendererExpr = `parentRenderer.renderComponent(${renderCompTypeVar})`;\n    }\n    var statement = `\n${codeGenFnHeader(factoryArgs, viewFactoryName)}{\n  ${initRendererStmts.join('\\n')}\n  var renderer = ${rendererExpr};\n  var view = new ${APP_VIEW_MODULE_REF}AppView(\n    ${appProtoView}, renderer, viewManager,\n    projectableNodes,\n    containerEl,\n    dynamicallyCreatedProviders, rootInjector,\n    ${changeDetectorFactory}()\n  );\n  ${APP_VIEW_MODULE_REF}checkSlotCount(${escapeValue(this.component.type.name)}, ${this.component.template.ngContentSelectors.length}, projectableNodes);\n  ${isComponentView ? 'var parentRenderNode = renderer.createViewRoot(view.containerAppElement.nativeElement);' : ''}\n  ${visitor.renderStmts.map(stmt => stmt.statement).join('\\n')}\n  ${visitor.appStmts.map(stmt => stmt.statement).join('\\n')}\n\n  view.init(${codeGenFlatArray(visitor.rootNodesOrAppElements)}, ${codeGenArray(visitor.renderNodes)}, ${codeGenArray(visitor.appDisposables)},\n            ${codeGenArray(visitor.appElements)});\n  return view;\n}`;\n    targetStatements.push(new Statement(statement));\n    return new Expression(viewFactoryName);\n  }\n}\n\nclass RuntimeViewFactory implements ViewFactory<any, any> {\n  constructor(public component: CompileDirectiveMetadata, public styles: Array<string | any[]>,\n              public protoViews: CompileProtoView<AppProtoView, AppProtoElement>[],\n              public changeDetectorFactories: Function[], public componentViewFactory: Function) {}\n\n  createText(renderer: Renderer, parent: any, text: string, targetStatements: any[]): any {\n    return renderer.createText(parent, text);\n  }\n\n  createElement(renderer: Renderer, parent: any, name: string, rootSelector: string,\n                targetStatements: any[]): any {\n    var el;\n    if (isPresent(rootSelector)) {\n      el = renderer.selectRootElement(rootSelector);\n    } else {\n      el = renderer.createElement(parent, name);\n    }\n    return el;\n  }\n\n  createTemplateAnchor(renderer: Renderer, parent: any, targetStatements: any[]): any {\n    return renderer.createTemplateAnchor(parent);\n  }\n\n  createGlobalEventListener(renderer: Renderer, appView: AppView, boundElementIndex: number,\n                            eventAst: BoundEventAst, targetStatements: any[]): any {\n    return renderer.listenGlobal(\n        eventAst.target, eventAst.name,\n        (event) => appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex));\n  }\n\n  createElementEventListener(renderer: Renderer, appView: AppView, boundElementIndex: number,\n                             renderNode: any, eventAst: BoundEventAst,\n                             targetStatements: any[]): any {\n    return renderer.listen(\n        renderNode, eventAst.name,\n        (event) => appView.triggerEventHandlers(eventAst.fullName, event, boundElementIndex));\n  }\n\n  setElementAttribute(renderer: Renderer, renderNode: any, attrName: string, attrValue: string,\n                      targetStatements: any[]) {\n    renderer.setElementAttribute(renderNode, attrName, attrValue);\n  }\n\n  createAppElement(appProtoEl: AppProtoElement, appView: AppView, renderNode: any,\n                   parentAppEl: AppElement, embeddedViewFactory: Function,\n                   targetStatements: any[]): any {\n    return new AppElement(appProtoEl, appView, parentAppEl, renderNode, embeddedViewFactory);\n  }\n\n  createAndSetComponentView(renderer: Renderer, viewManager: AppViewManager_, appView: AppView,\n                            appEl: AppElement, component: CompileDirectiveMetadata,\n                            contentNodesByNgContentIndex: Array<Array<any | any[]>>,\n                            targetStatements: any[]) {\n    var flattenedContentNodes;\n    if (this.component.type.isHost) {\n      flattenedContentNodes = appView.projectableNodes;\n    } else {\n      flattenedContentNodes = ListWrapper.createFixedSize(contentNodesByNgContentIndex.length);\n      for (var i = 0; i < contentNodesByNgContentIndex.length; i++) {\n        flattenedContentNodes[i] = flattenArray(contentNodesByNgContentIndex[i], []);\n      }\n    }\n    this.componentViewFactory(component)(renderer, viewManager, appEl, flattenedContentNodes);\n  }\n\n  getProjectedNodes(projectableNodes: any[][], ngContentIndex: number): any[] {\n    return projectableNodes[ngContentIndex];\n  }\n\n  appendProjectedNodes(renderer: Renderer, parent: any, nodes: any[], targetStatements: any[]) {\n    renderer.projectNodes(parent, flattenNestedViewRenderNodes(nodes));\n  }\n\n  createViewFactory(asts: TemplateAst[], embeddedTemplateIndex: number,\n                    targetStatements: any[]): Function {\n    var compileProtoView = this.protoViews[embeddedTemplateIndex];\n    var isComponentView = compileProtoView.protoView.type === ViewType.COMPONENT;\n    var renderComponentType = null;\n    return (parentRenderer: ParentRenderer, viewManager: AppViewManager_, containerEl: AppElement,\n            projectableNodes: any[][], rootSelector: string = null,\n            dynamicallyCreatedProviders: ResolvedProvider[] = null,\n            rootInjector: Injector = null) => {\n      checkSlotCount(this.component.type.name, this.component.template.ngContentSelectors.length,\n                     projectableNodes);\n      var renderer;\n      if (embeddedTemplateIndex === 0) {\n        if (isBlank(renderComponentType)) {\n          renderComponentType = viewManager.createRenderComponentType(\n              this.component.template.encapsulation, this.styles);\n        }\n        renderer = parentRenderer.renderComponent(renderComponentType);\n      } else {\n        renderer = <Renderer>parentRenderer;\n      }\n      var changeDetector = this.changeDetectorFactories[embeddedTemplateIndex]();\n      var view =\n          new AppView(compileProtoView.protoView, renderer, viewManager, projectableNodes,\n                      containerEl, dynamicallyCreatedProviders, rootInjector, changeDetector);\n      var visitor = new ViewBuilderVisitor<any, any>(\n          renderer, viewManager, projectableNodes, rootSelector, view, compileProtoView, [], this);\n      var parentRenderNode =\n          isComponentView ? renderer.createViewRoot(containerEl.nativeElement) : null;\n      templateVisitAll(visitor, asts, new ParentElement(parentRenderNode, null, null));\n      view.init(flattenArray(visitor.rootNodesOrAppElements, []), visitor.renderNodes,\n                visitor.appDisposables, visitor.appElements);\n      return view;\n    };\n  }\n}\n\nclass ParentElement<EXPRESSION> {\n  public contentNodesByNgContentIndex: Array<EXPRESSION>[];\n\n  constructor(public renderNode: EXPRESSION, public appEl: EXPRESSION,\n              public component: CompileDirectiveMetadata) {\n    if (isPresent(component)) {\n      this.contentNodesByNgContentIndex =\n          ListWrapper.createFixedSize(component.template.ngContentSelectors.length);\n      for (var i = 0; i < this.contentNodesByNgContentIndex.length; i++) {\n        this.contentNodesByNgContentIndex[i] = [];\n      }\n    } else {\n      this.contentNodesByNgContentIndex = null;\n    }\n  }\n\n  addContentNode(ngContentIndex: number, nodeExpr: EXPRESSION) {\n    this.contentNodesByNgContentIndex[ngContentIndex].push(nodeExpr);\n  }\n}\n\nclass ViewBuilderVisitor<EXPRESSION, STATEMENT> implements TemplateAstVisitor {\n  renderStmts: Array<STATEMENT> = [];\n  renderNodes: EXPRESSION[] = [];\n  appStmts: Array<STATEMENT> = [];\n  appElements: EXPRESSION[] = [];\n  appDisposables: EXPRESSION[] = [];\n\n  rootNodesOrAppElements: EXPRESSION[] = [];\n\n  elementCount: number = 0;\n\n  constructor(public renderer: EXPRESSION, public viewManager: EXPRESSION,\n              public projectableNodes: EXPRESSION, public rootSelector: EXPRESSION,\n              public view: EXPRESSION, public protoView: CompileProtoView<EXPRESSION, EXPRESSION>,\n              public targetStatements: STATEMENT[],\n              public factory: ViewFactory<EXPRESSION, STATEMENT>) {}\n\n  private _addRenderNode(renderNode: EXPRESSION, appEl: EXPRESSION, ngContentIndex: number,\n                         parent: ParentElement<EXPRESSION>) {\n    this.renderNodes.push(renderNode);\n    if (isPresent(parent.component)) {\n      if (isPresent(ngContentIndex)) {\n        parent.addContentNode(ngContentIndex, isPresent(appEl) ? appEl : renderNode);\n      }\n    } else if (isBlank(parent.renderNode)) {\n      this.rootNodesOrAppElements.push(isPresent(appEl) ? appEl : renderNode);\n    }\n  }\n\n  private _getParentRenderNode(ngContentIndex: number,\n                               parent: ParentElement<EXPRESSION>): EXPRESSION {\n    return isPresent(parent.component) &&\n                   parent.component.template.encapsulation !== ViewEncapsulation.Native ?\n               null :\n               parent.renderNode;\n  }\n\n  visitBoundText(ast: BoundTextAst, parent: ParentElement<EXPRESSION>): any {\n    return this._visitText('', ast.ngContentIndex, parent);\n  }\n  visitText(ast: TextAst, parent: ParentElement<EXPRESSION>): any {\n    return this._visitText(ast.value, ast.ngContentIndex, parent);\n  }\n  private _visitText(value: string, ngContentIndex: number, parent: ParentElement<EXPRESSION>) {\n    var renderNode = this.factory.createText(\n        this.renderer, this._getParentRenderNode(ngContentIndex, parent), value, this.renderStmts);\n    this._addRenderNode(renderNode, null, ngContentIndex, parent);\n    return null;\n  }\n\n  visitNgContent(ast: NgContentAst, parent: ParentElement<EXPRESSION>): any {\n    var nodesExpression = this.factory.getProjectedNodes(this.projectableNodes, ast.index);\n    if (isPresent(parent.component)) {\n      if (isPresent(ast.ngContentIndex)) {\n        parent.addContentNode(ast.ngContentIndex, nodesExpression);\n      }\n    } else {\n      if (isPresent(parent.renderNode)) {\n        this.factory.appendProjectedNodes(this.renderer, parent.renderNode, nodesExpression,\n                                          this.renderStmts);\n      } else {\n        this.rootNodesOrAppElements.push(nodesExpression);\n      }\n    }\n    return null;\n  }\n\n  visitElement(ast: ElementAst, parent: ParentElement<EXPRESSION>): any {\n    var renderNode = this.factory.createElement(\n        this.renderer, this._getParentRenderNode(ast.ngContentIndex, parent), ast.name,\n        this.rootSelector, this.renderStmts);\n\n    var component = ast.getComponent();\n    var elementIndex = this.elementCount++;\n    var protoEl = this.protoView.protoElements[elementIndex];\n\n    protoEl.renderEvents.forEach((eventAst) => {\n      var disposable;\n      if (isPresent(eventAst.target)) {\n        disposable = this.factory.createGlobalEventListener(\n            this.renderer, this.view, protoEl.boundElementIndex, eventAst, this.renderStmts);\n      } else {\n        disposable = this.factory.createElementEventListener(this.renderer, this.view,\n                                                             protoEl.boundElementIndex, renderNode,\n                                                             eventAst, this.renderStmts);\n      }\n      this.appDisposables.push(disposable);\n    });\n    for (var i = 0; i < protoEl.attrNameAndValues.length; i++) {\n      var attrName = protoEl.attrNameAndValues[i][0];\n      var attrValue = protoEl.attrNameAndValues[i][1];\n      this.factory.setElementAttribute(this.renderer, renderNode, attrName, attrValue,\n                                       this.renderStmts);\n    }\n    var appEl = null;\n    if (isPresent(protoEl.appProtoEl)) {\n      appEl = this.factory.createAppElement(protoEl.appProtoEl, this.view, renderNode, parent.appEl,\n                                            null, this.appStmts);\n      this.appElements.push(appEl);\n    }\n    this._addRenderNode(renderNode, appEl, ast.ngContentIndex, parent);\n\n    var newParent = new ParentElement<EXPRESSION>(\n        renderNode, isPresent(appEl) ? appEl : parent.appEl, component);\n    templateVisitAll(this, ast.children, newParent);\n    if (isPresent(appEl) && isPresent(component)) {\n      this.factory.createAndSetComponentView(this.renderer, this.viewManager, this.view, appEl,\n                                             component, newParent.contentNodesByNgContentIndex,\n                                             this.appStmts);\n    }\n    return null;\n  }\n\n  visitEmbeddedTemplate(ast: EmbeddedTemplateAst, parent: ParentElement<EXPRESSION>): any {\n    var renderNode = this.factory.createTemplateAnchor(\n        this.renderer, this._getParentRenderNode(ast.ngContentIndex, parent), this.renderStmts);\n\n    var elementIndex = this.elementCount++;\n    var protoEl = this.protoView.protoElements[elementIndex];\n    var embeddedViewFactory = this.factory.createViewFactory(\n        ast.children, protoEl.embeddedTemplateIndex, this.targetStatements);\n\n    var appEl = this.factory.createAppElement(protoEl.appProtoEl, this.view, renderNode,\n                                              parent.appEl, embeddedViewFactory, this.appStmts);\n    this._addRenderNode(renderNode, appEl, ast.ngContentIndex, parent);\n    this.appElements.push(appEl);\n    return null;\n  }\n\n  visitVariable(ast: VariableAst, ctx: any): any { return null; }\n  visitAttr(ast: AttrAst, ctx: any): any { return null; }\n  visitDirective(ast: DirectiveAst, ctx: any): any { return null; }\n  visitEvent(ast: BoundEventAst, ctx: any): any { return null; }\n  visitDirectiveProperty(ast: BoundDirectivePropertyAst, context: any): any { return null; }\n  visitElementProperty(ast: BoundElementPropertyAst, context: any): any { return null; }\n}\n\n\nfunction codeGenEventHandler(view: Expression, boundElementIndex: number,\n                             eventName: string): string {\n  return codeGenValueFn(\n      ['event'],\n      `${view.expression}.triggerEventHandlers(${escapeValue(eventName)}, event, ${boundElementIndex})`);\n}\n\nfunction codeGenViewFactoryName(component: CompileDirectiveMetadata,\n                                embeddedTemplateIndex: number): string {\n  return `viewFactory_${component.type.name}${embeddedTemplateIndex}`;\n}\n\nfunction codeGenViewEncapsulation(value: ViewEncapsulation): string {\n  if (IS_DART) {\n    return `${METADATA_MODULE_REF}${value}`;\n  } else {\n    return `${value}`;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/view_compiler.ts\n **/","import {NgZone, NgZoneError} from 'angular2/src/core/zone/ng_zone';\nimport {\n  Type,\n  isBlank,\n  isPresent,\n  assertionsEnabled,\n  print,\n  IS_DART\n} from 'angular2/src/facade/lang';\nimport {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';\nimport {\n  APP_COMPONENT_REF_PROMISE,\n  APP_COMPONENT,\n  APP_ID_RANDOM_PROVIDER,\n  PLATFORM_INITIALIZER,\n  APP_INITIALIZER\n} from './application_tokens';\nimport {PromiseWrapper, PromiseCompleter, ObservableWrapper} from 'angular2/src/facade/async';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {TestabilityRegistry, Testability} from 'angular2/src/core/testability/testability';\nimport {\n  ComponentRef,\n  DynamicComponentLoader\n} from 'angular2/src/core/linker/dynamic_component_loader';\nimport {\n  BaseException,\n  WrappedException,\n  ExceptionHandler,\n  unimplemented\n} from 'angular2/src/facade/exceptions';\nimport {Console} from 'angular2/src/core/console';\nimport {wtfLeave, wtfCreateScope, WtfScopeFn} from './profile/profile';\nimport {ChangeDetectorRef} from 'angular2/src/core/change_detection/change_detector_ref';\nimport {lockMode} from 'angular2/src/facade/lang';\nimport {ElementRef_} from 'angular2/src/core/linker/element_ref';\n\n/**\n * Construct providers specific to an individual root component.\n */\nfunction _componentProviders(appComponentType: Type): Array<Type | Provider | any[]> {\n  return [\n    provide(APP_COMPONENT, {useValue: appComponentType}),\n    provide(APP_COMPONENT_REF_PROMISE,\n            {\n              useFactory: (dynamicComponentLoader: DynamicComponentLoader, appRef: ApplicationRef_,\n                           injector: Injector) => {\n                // Save the ComponentRef for disposal later.\n                var ref: ComponentRef;\n                // TODO(rado): investigate whether to support providers on root component.\n                return dynamicComponentLoader.loadAsRoot(appComponentType, null, injector,\n                                                         () => { appRef._unloadComponent(ref); })\n                    .then((componentRef) => {\n                      ref = componentRef;\n                      var testability = injector.getOptional(Testability);\n                      if (isPresent(testability)) {\n                        injector.get(TestabilityRegistry)\n                            .registerApplication(componentRef.location.nativeElement, testability);\n                      }\n                      return componentRef;\n                    });\n              },\n              deps: [DynamicComponentLoader, ApplicationRef, Injector]\n            }),\n    provide(appComponentType,\n            {\n              useFactory: (p: Promise<any>) => p.then(ref => ref.instance),\n              deps: [APP_COMPONENT_REF_PROMISE]\n            }),\n  ];\n}\n\n/**\n * Create an Angular zone.\n */\nexport function createNgZone(): NgZone {\n  return new NgZone({enableLongStackTrace: assertionsEnabled()});\n}\n\nvar _platform: PlatformRef;\nvar _platformProviders: any[];\n\n/**\n * Initialize the Angular 'platform' on the page.\n *\n * See {@link PlatformRef} for details on the Angular platform.\n *\n * It is also possible to specify providers to be made in the new platform. These providers\n * will be shared between all applications on the page. For example, an abstraction for\n * the browser cookie jar should be bound at the platform level, because there is only one\n * cookie jar regardless of how many applications on the page will be accessing it.\n *\n * The platform function can be called multiple times as long as the same list of providers\n * is passed into each call. If the platform function is called with a different set of\n * provides, Angular will throw an exception.\n */\nexport function platform(providers?: Array<Type | Provider | any[]>): PlatformRef {\n  lockMode();\n  if (isPresent(_platform)) {\n    if (ListWrapper.equals(_platformProviders, providers)) {\n      return _platform;\n    } else {\n      throw new BaseException(\"platform cannot be initialized with different sets of providers.\");\n    }\n  } else {\n    return _createPlatform(providers);\n  }\n}\n\n/**\n * Dispose the existing platform.\n */\nexport function disposePlatform(): void {\n  if (isPresent(_platform)) {\n    _platform.dispose();\n    _platform = null;\n  }\n}\n\nfunction _createPlatform(providers?: Array<Type | Provider | any[]>): PlatformRef {\n  _platformProviders = providers;\n  let injector = Injector.resolveAndCreate(providers);\n  _platform = new PlatformRef_(injector, () => {\n    _platform = null;\n    _platformProviders = null;\n  });\n  _runPlatformInitializers(injector);\n  return _platform;\n}\n\nfunction _runPlatformInitializers(injector: Injector): void {\n  let inits: Function[] = <Function[]>injector.getOptional(PLATFORM_INITIALIZER);\n  if (isPresent(inits)) inits.forEach(init => init());\n}\n\n/**\n * The Angular platform is the entry point for Angular on a web page. Each page\n * has exactly one platform, and services (such as reflection) which are common\n * to every Angular application running on the page are bound in its scope.\n *\n * A page's platform is initialized implicitly when {@link bootstrap}() is called, or\n * explicitly by calling {@link platform}().\n */\nexport abstract class PlatformRef {\n  /**\n   * Register a listener to be called when the platform is disposed.\n   */\n  abstract registerDisposeListener(dispose: () => void): void;\n\n  /**\n   * Retrieve the platform {@link Injector}, which is the parent injector for\n   * every Angular application on the page and provides singleton providers.\n   */\n  get injector(): Injector { throw unimplemented(); };\n\n  /**\n   * Instantiate a new Angular application on the page.\n   *\n   * ### What is an application?\n   *\n   * Each Angular application has its own zone, change detection, compiler,\n   * renderer, and other framework components. An application hosts one or more\n   * root components, which can be initialized via `ApplicationRef.bootstrap()`.\n   *\n   * ### Application Providers\n   *\n   * Angular applications require numerous providers to be properly instantiated.\n   * When using `application()` to create a new app on the page, these providers\n   * must be provided. Fortunately, there are helper functions to configure\n   * typical providers, as shown in the example below.\n   *\n   * ### Example\n   *\n   * {@example core/ts/platform/platform.ts region='longform'}\n   * ### See Also\n   *\n   * See the {@link bootstrap} documentation for more details.\n   */\n  abstract application(providers: Array<Type | Provider | any[]>): ApplicationRef;\n\n  /**\n   * Instantiate a new Angular application on the page, using providers which\n   * are only available asynchronously. One such use case is to initialize an\n   * application running in a web worker.\n   *\n   * ### Usage\n   *\n   * `bindingFn` is a function that will be called in the new application's zone.\n   * It should return a `Promise` to a list of providers to be used for the\n   * new application. Once this promise resolves, the application will be\n   * constructed in the same manner as a normal `application()`.\n   */\n  abstract asyncApplication(bindingFn: (zone: NgZone) => Promise<Array<Type | Provider | any[]>>,\n                            providers?: Array<Type | Provider | any[]>): Promise<ApplicationRef>;\n\n  /**\n   * Destroy the Angular platform and all Angular applications on the page.\n   */\n  abstract dispose(): void;\n}\n\nexport class PlatformRef_ extends PlatformRef {\n  /** @internal */\n  _applications: ApplicationRef[] = [];\n  /** @internal */\n  _disposeListeners: Function[] = [];\n\n  constructor(private _injector: Injector, private _dispose: () => void) { super(); }\n\n  registerDisposeListener(dispose: () => void): void { this._disposeListeners.push(dispose); }\n\n  get injector(): Injector { return this._injector; }\n\n  application(providers: Array<Type | Provider | any[]>): ApplicationRef {\n    var app = this._initApp(createNgZone(), providers);\n    if (PromiseWrapper.isPromise(app)) {\n      throw new BaseException(\n          \"Cannot use asyncronous app initializers with application. Use asyncApplication instead.\");\n    }\n    return <ApplicationRef>app;\n  }\n\n  asyncApplication(bindingFn: (zone: NgZone) => Promise<Array<Type | Provider | any[]>>,\n                   additionalProviders?: Array<Type | Provider | any[]>): Promise<ApplicationRef> {\n    var zone = createNgZone();\n    var completer = PromiseWrapper.completer<ApplicationRef>();\n    if (bindingFn === null) {\n      completer.resolve(this._initApp(zone, additionalProviders));\n    } else {\n      zone.run(() => {\n        PromiseWrapper.then(bindingFn(zone), (providers: Array<Type | Provider | any[]>) => {\n          if (isPresent(additionalProviders)) {\n            providers = ListWrapper.concat(providers, additionalProviders);\n          }\n          let promise = this._initApp(zone, providers);\n          completer.resolve(promise);\n        });\n      });\n    }\n    return completer.promise;\n  }\n\n  private _initApp(zone: NgZone,\n                   providers: Array<Type | Provider | any[]>): Promise<ApplicationRef>|\n      ApplicationRef {\n    var injector: Injector;\n    var app: ApplicationRef;\n    zone.run(() => {\n      providers = ListWrapper.concat(providers, [\n        provide(NgZone, {useValue: zone}),\n        provide(ApplicationRef, {useFactory: (): ApplicationRef => app, deps: []})\n      ]);\n\n      var exceptionHandler: Function;\n      try {\n        injector = this.injector.resolveAndCreateChild(providers);\n        exceptionHandler = injector.get(ExceptionHandler);\n        ObservableWrapper.subscribe(zone.onError, (error: NgZoneError) => {\n          exceptionHandler.call(error.error, error.stackTrace);\n        });\n      } catch (e) {\n        if (isPresent(exceptionHandler)) {\n          exceptionHandler.call(e, e.stack);\n        } else {\n          print(e.toString());\n        }\n      }\n    });\n    app = new ApplicationRef_(this, zone, injector);\n    this._applications.push(app);\n    var promise = _runAppInitializers(injector);\n    if (promise !== null) {\n      return PromiseWrapper.then(promise, (_) => app);\n    } else {\n      return app;\n    }\n  }\n\n  dispose(): void {\n    ListWrapper.clone(this._applications).forEach((app) => app.dispose());\n    this._disposeListeners.forEach((dispose) => dispose());\n    this._dispose();\n  }\n\n  /** @internal */\n  _applicationDisposed(app: ApplicationRef): void { ListWrapper.remove(this._applications, app); }\n}\n\nfunction _runAppInitializers(injector: Injector): Promise<any> {\n  let inits: Function[] = injector.getOptional(APP_INITIALIZER);\n  let promises: Promise<any>[] = [];\n  if (isPresent(inits)) {\n    inits.forEach(init => {\n      var retVal = init();\n      if (PromiseWrapper.isPromise(retVal)) {\n        promises.push(retVal);\n      }\n    });\n  }\n  if (promises.length > 0) {\n    return PromiseWrapper.all(promises);\n  } else {\n    return null;\n  }\n}\n\n/**\n * A reference to an Angular application running on a page.\n *\n * For more about Angular applications, see the documentation for {@link bootstrap}.\n */\nexport abstract class ApplicationRef {\n  /**\n   * Register a listener to be called each time `bootstrap()` is called to bootstrap\n   * a new root component.\n   */\n  abstract registerBootstrapListener(listener: (ref: ComponentRef) => void): void;\n\n  /**\n   * Register a listener to be called when the application is disposed.\n   */\n  abstract registerDisposeListener(dispose: () => void): void;\n\n  /**\n   * Bootstrap a new component at the root level of the application.\n   *\n   * ### Bootstrap process\n   *\n   * When bootstrapping a new root component into an application, Angular mounts the\n   * specified application component onto DOM elements identified by the [componentType]'s\n   * selector and kicks off automatic change detection to finish initializing the component.\n   *\n   * ### Optional Providers\n   *\n   * Providers for the given component can optionally be overridden via the `providers`\n   * parameter. These providers will only apply for the root component being added and any\n   * child components under it.\n   *\n   * ### Example\n   * {@example core/ts/platform/platform.ts region='longform'}\n   */\n  abstract bootstrap(componentType: Type,\n                     providers?: Array<Type | Provider | any[]>): Promise<ComponentRef>;\n\n  /**\n   * Retrieve the application {@link Injector}.\n   */\n  get injector(): Injector { return <Injector>unimplemented(); };\n\n  /**\n   * Retrieve the application {@link NgZone}.\n   */\n  get zone(): NgZone { return <NgZone>unimplemented(); };\n\n  /**\n   * Dispose of this application and all of its components.\n   */\n  abstract dispose(): void;\n\n  /**\n   * Invoke this method to explicitly process change detection and its side-effects.\n   *\n   * In development mode, `tick()` also performs a second change detection cycle to ensure that no\n   * further changes are detected. If additional changes are picked up during this second cycle,\n   * bindings in the app have side-effects that cannot be resolved in a single change detection\n   * pass.\n   * In this case, Angular throws an error, since an Angular application can only have one change\n   * detection pass during which all change detection must complete.\n   */\n  abstract tick(): void;\n\n  /**\n   * Get a list of component types registered to this application.\n   */\n  get componentTypes(): Type[] { return <Type[]>unimplemented(); };\n}\n\nexport class ApplicationRef_ extends ApplicationRef {\n  /** @internal */\n  static _tickScope: WtfScopeFn = wtfCreateScope('ApplicationRef#tick()');\n\n  /** @internal */\n  private _bootstrapListeners: Function[] = [];\n  /** @internal */\n  private _disposeListeners: Function[] = [];\n  /** @internal */\n  private _rootComponents: ComponentRef[] = [];\n  /** @internal */\n  private _rootComponentTypes: Type[] = [];\n  /** @internal */\n  private _changeDetectorRefs: ChangeDetectorRef[] = [];\n  /** @internal */\n  private _runningTick: boolean = false;\n  /** @internal */\n  private _enforceNoNewChanges: boolean = false;\n\n  constructor(private _platform: PlatformRef_, private _zone: NgZone, private _injector: Injector) {\n    super();\n    if (isPresent(this._zone)) {\n      ObservableWrapper.subscribe(this._zone.onMicrotaskEmpty,\n                                  (_) => { this._zone.run(() => { this.tick(); }); });\n    }\n    this._enforceNoNewChanges = assertionsEnabled();\n  }\n\n  registerBootstrapListener(listener: (ref: ComponentRef) => void): void {\n    this._bootstrapListeners.push(listener);\n  }\n\n  registerDisposeListener(dispose: () => void): void { this._disposeListeners.push(dispose); }\n\n  registerChangeDetector(changeDetector: ChangeDetectorRef): void {\n    this._changeDetectorRefs.push(changeDetector);\n  }\n\n  unregisterChangeDetector(changeDetector: ChangeDetectorRef): void {\n    ListWrapper.remove(this._changeDetectorRefs, changeDetector);\n  }\n\n  bootstrap(componentType: Type,\n            providers?: Array<Type | Provider | any[]>): Promise<ComponentRef> {\n    var completer = PromiseWrapper.completer();\n    this._zone.run(() => {\n      var componentProviders = _componentProviders(componentType);\n      if (isPresent(providers)) {\n        componentProviders.push(providers);\n      }\n      var exceptionHandler = this._injector.get(ExceptionHandler);\n      this._rootComponentTypes.push(componentType);\n      try {\n        var injector: Injector = this._injector.resolveAndCreateChild(componentProviders);\n        var compRefToken: Promise<ComponentRef> = injector.get(APP_COMPONENT_REF_PROMISE);\n        var tick = (componentRef: ComponentRef) => {\n          this._loadComponent(componentRef);\n          completer.resolve(componentRef);\n        };\n\n        var tickResult = PromiseWrapper.then(compRefToken, tick);\n\n        PromiseWrapper.then(tickResult, null, (err, stackTrace) => {\n          completer.reject(err, stackTrace);\n          exceptionHandler.call(err, stackTrace);\n        });\n      } catch (e) {\n        exceptionHandler.call(e, e.stack);\n        completer.reject(e, e.stack);\n      }\n    });\n    return completer.promise.then<ComponentRef>((ref: ComponentRef) => {\n      let c = this._injector.get(Console);\n      if (assertionsEnabled()) {\n        c.log(\n            \"Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode.\");\n      }\n      return ref;\n    });\n  }\n\n  /** @internal */\n  _loadComponent(componentRef: ComponentRef): void {\n    var appChangeDetector =\n        (<ElementRef_>componentRef.location).internalElement.parentView.changeDetector;\n    this._changeDetectorRefs.push(appChangeDetector.ref);\n    this.tick();\n    this._rootComponents.push(componentRef);\n    this._bootstrapListeners.forEach((listener) => listener(componentRef));\n  }\n\n  /** @internal */\n  _unloadComponent(componentRef: ComponentRef): void {\n    if (!ListWrapper.contains(this._rootComponents, componentRef)) {\n      return;\n    }\n    this.unregisterChangeDetector(\n        (<ElementRef_>componentRef.location).internalElement.parentView.changeDetector.ref);\n    ListWrapper.remove(this._rootComponents, componentRef);\n  }\n\n  get injector(): Injector { return this._injector; }\n\n  get zone(): NgZone { return this._zone; }\n\n  tick(): void {\n    if (this._runningTick) {\n      throw new BaseException(\"ApplicationRef.tick is called recursively\");\n    }\n\n    var s = ApplicationRef_._tickScope();\n    try {\n      this._runningTick = true;\n      this._changeDetectorRefs.forEach((detector) => detector.detectChanges());\n      if (this._enforceNoNewChanges) {\n        this._changeDetectorRefs.forEach((detector) => detector.checkNoChanges());\n      }\n    } finally {\n      this._runningTick = false;\n      wtfLeave(s);\n    }\n  }\n\n  dispose(): void {\n    // TODO(alxhub): Dispose of the NgZone.\n    ListWrapper.clone(this._rootComponents).forEach((ref) => ref.dispose());\n    this._disposeListeners.forEach((dispose) => dispose());\n    this._platform._applicationDisposed(this);\n  }\n\n  get componentTypes(): Type[] { return this._rootComponentTypes; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/application_ref.ts\n **/","/**\n * @module\n * @description\n * Change detection enables data binding in Angular.\n */\n\nexport {\n  ChangeDetectionStrategy,\n\n  ExpressionChangedAfterItHasBeenCheckedException,\n  ChangeDetectionError,\n\n  ChangeDetectorRef,\n\n  WrappedValue,\n  SimpleChange,\n  PipeTransform,\n  IterableDiffers,\n  IterableDiffer,\n  IterableDifferFactory,\n  KeyValueDiffers,\n  KeyValueDiffer,\n  KeyValueDifferFactory,\n  CollectionChangeRecord,\n  KeyValueChangeRecord,\n  TrackByFn\n} from './change_detection/change_detection';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection.ts\n **/","import {isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {SetterFn} from 'angular2/src/core/reflection/types';\nimport {AST} from './parser/ast';\nimport {DirectiveIndex, DirectiveRecord} from './directive_record';\n\nconst DIRECTIVE_LIFECYCLE = \"directiveLifecycle\";\nconst BINDING = \"native\";\n\nconst DIRECTIVE = \"directive\";\nconst ELEMENT_PROPERTY = \"elementProperty\";\nconst ELEMENT_ATTRIBUTE = \"elementAttribute\";\nconst ELEMENT_CLASS = \"elementClass\";\nconst ELEMENT_STYLE = \"elementStyle\";\nconst TEXT_NODE = \"textNode\";\nconst EVENT = \"event\";\nconst HOST_EVENT = \"hostEvent\";\n\nexport class BindingTarget {\n  constructor(public mode: string, public elementIndex: number, public name: string,\n              public unit: string, public debug: string) {}\n\n  isDirective(): boolean { return this.mode === DIRECTIVE; }\n\n  isElementProperty(): boolean { return this.mode === ELEMENT_PROPERTY; }\n\n  isElementAttribute(): boolean { return this.mode === ELEMENT_ATTRIBUTE; }\n\n  isElementClass(): boolean { return this.mode === ELEMENT_CLASS; }\n\n  isElementStyle(): boolean { return this.mode === ELEMENT_STYLE; }\n\n  isTextNode(): boolean { return this.mode === TEXT_NODE; }\n}\n\nexport class BindingRecord {\n  constructor(public mode: string, public target: BindingTarget, public implicitReceiver: any,\n              public ast: AST, public setter: SetterFn, public lifecycleEvent: string,\n              public directiveRecord: DirectiveRecord) {}\n\n  isDirectiveLifecycle(): boolean { return this.mode === DIRECTIVE_LIFECYCLE; }\n\n  callOnChanges(): boolean {\n    return isPresent(this.directiveRecord) && this.directiveRecord.callOnChanges;\n  }\n\n  isDefaultChangeDetection(): boolean {\n    return isBlank(this.directiveRecord) || this.directiveRecord.isDefaultChangeDetection();\n  }\n\n  static createDirectiveDoCheck(directiveRecord: DirectiveRecord): BindingRecord {\n    return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"DoCheck\", directiveRecord);\n  }\n\n  static createDirectiveOnInit(directiveRecord: DirectiveRecord): BindingRecord {\n    return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"OnInit\", directiveRecord);\n  }\n\n  static createDirectiveOnChanges(directiveRecord: DirectiveRecord): BindingRecord {\n    return new BindingRecord(DIRECTIVE_LIFECYCLE, null, 0, null, null, \"OnChanges\",\n                             directiveRecord);\n  }\n\n\n\n  static createForDirective(ast: AST, propertyName: string, setter: SetterFn,\n                            directiveRecord: DirectiveRecord): BindingRecord {\n    var elementIndex = directiveRecord.directiveIndex.elementIndex;\n    var t = new BindingTarget(DIRECTIVE, elementIndex, propertyName, null, ast.toString());\n    return new BindingRecord(DIRECTIVE, t, 0, ast, setter, null, directiveRecord);\n  }\n\n\n\n  static createForElementProperty(ast: AST, elementIndex: number,\n                                  propertyName: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_PROPERTY, elementIndex, propertyName, null, ast.toString());\n    return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n  }\n\n  static createForElementAttribute(ast: AST, elementIndex: number,\n                                   attributeName: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_ATTRIBUTE, elementIndex, attributeName, null, ast.toString());\n    return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n  }\n\n  static createForElementClass(ast: AST, elementIndex: number, className: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_CLASS, elementIndex, className, null, ast.toString());\n    return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n  }\n\n  static createForElementStyle(ast: AST, elementIndex: number, styleName: string,\n                               unit: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_STYLE, elementIndex, styleName, unit, ast.toString());\n    return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n  }\n\n\n\n  static createForHostProperty(directiveIndex: DirectiveIndex, ast: AST,\n                               propertyName: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_PROPERTY, directiveIndex.elementIndex, propertyName, null,\n                              ast.toString());\n    return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n  }\n\n  static createForHostAttribute(directiveIndex: DirectiveIndex, ast: AST,\n                                attributeName: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_ATTRIBUTE, directiveIndex.elementIndex, attributeName, null,\n                              ast.toString());\n    return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n  }\n\n  static createForHostClass(directiveIndex: DirectiveIndex, ast: AST,\n                            className: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_CLASS, directiveIndex.elementIndex, className, null,\n                              ast.toString());\n    return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n  }\n\n  static createForHostStyle(directiveIndex: DirectiveIndex, ast: AST, styleName: string,\n                            unit: string): BindingRecord {\n    var t = new BindingTarget(ELEMENT_STYLE, directiveIndex.elementIndex, styleName, unit,\n                              ast.toString());\n    return new BindingRecord(BINDING, t, directiveIndex, ast, null, null, null);\n  }\n\n\n\n  static createForTextNode(ast: AST, elementIndex: number): BindingRecord {\n    var t = new BindingTarget(TEXT_NODE, elementIndex, null, null, ast.toString());\n    return new BindingRecord(BINDING, t, 0, ast, null, null, null);\n  }\n\n\n\n  static createForEvent(ast: AST, eventName: string, elementIndex: number): BindingRecord {\n    var t = new BindingTarget(EVENT, elementIndex, eventName, null, ast.toString());\n    return new BindingRecord(EVENT, t, 0, ast, null, null, null);\n  }\n\n  static createForHostEvent(ast: AST, eventName: string,\n                            directiveRecord: DirectiveRecord): BindingRecord {\n    var directiveIndex = directiveRecord.directiveIndex;\n    var t =\n        new BindingTarget(HOST_EVENT, directiveIndex.elementIndex, eventName, null, ast.toString());\n    return new BindingRecord(HOST_EVENT, t, directiveIndex, ast, null, null, directiveRecord);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/binding_record.ts\n **/","import {Type, assertionsEnabled, isBlank, isPresent, StringWrapper} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\n\nimport {AbstractChangeDetector} from './abstract_change_detector';\nimport {ChangeDetectionUtil} from './change_detection_util';\nimport {DirectiveIndex, DirectiveRecord} from './directive_record';\n\nimport {ProtoRecord, RecordType} from './proto_record';\nimport {CodegenNameUtil, sanitizeName} from './codegen_name_util';\nimport {CodegenLogicUtil} from './codegen_logic_util';\nimport {codify} from './codegen_facade';\nimport {EventBinding} from './event_binding';\nimport {BindingTarget} from './binding_record';\nimport {ChangeDetectorGenConfig, ChangeDetectorDefinition} from './interfaces';\nimport {ChangeDetectionStrategy, ChangeDetectorState} from './constants';\nimport {createPropertyRecords, createEventRecords} from './proto_change_detector';\n\n/**\n * The code generator takes a list of proto records and creates a function/class\n * that \"emulates\" what the developer would write by hand to implement the same\n * kind of behaviour.\n *\n * This code should be kept in sync with the Dart transformer's\n * `angular2.transform.template_compiler.change_detector_codegen` library. If you make updates\n * here, please make equivalent changes there.\n*/\nconst IS_CHANGED_LOCAL = \"isChanged\";\nconst CHANGES_LOCAL = \"changes\";\n\nexport class ChangeDetectorJITGenerator {\n  private _logic: CodegenLogicUtil;\n  private _names: CodegenNameUtil;\n  private _endOfBlockIdxs: number[];\n  private id: string;\n  private changeDetectionStrategy: ChangeDetectionStrategy;\n  private records: ProtoRecord[];\n  private propertyBindingTargets: BindingTarget[];\n  private eventBindings: EventBinding[];\n  private directiveRecords: any[];\n  private genConfig: ChangeDetectorGenConfig;\n  typeName: string;\n\n  constructor(definition: ChangeDetectorDefinition, private changeDetectionUtilVarName: string,\n              private abstractChangeDetectorVarName: string,\n              private changeDetectorStateVarName: string) {\n    var propertyBindingRecords = createPropertyRecords(definition);\n    var eventBindingRecords = createEventRecords(definition);\n    var propertyBindingTargets = definition.bindingRecords.map(b => b.target);\n    this.id = definition.id;\n    this.changeDetectionStrategy = definition.strategy;\n    this.genConfig = definition.genConfig;\n\n    this.records = propertyBindingRecords;\n    this.propertyBindingTargets = propertyBindingTargets;\n    this.eventBindings = eventBindingRecords;\n    this.directiveRecords = definition.directiveRecords;\n    this._names = new CodegenNameUtil(this.records, this.eventBindings, this.directiveRecords,\n                                      this.changeDetectionUtilVarName);\n    this._logic = new CodegenLogicUtil(this._names, this.changeDetectionUtilVarName,\n                                       this.changeDetectorStateVarName);\n    this.typeName = sanitizeName(`ChangeDetector_${this.id}`);\n  }\n\n  generate(): Function {\n    var factorySource = `\n      ${this.generateSource()}\n      return function() {\n        return new ${this.typeName}();\n      }\n    `;\n    return new Function(this.abstractChangeDetectorVarName, this.changeDetectionUtilVarName,\n                        this.changeDetectorStateVarName, factorySource)(\n        AbstractChangeDetector, ChangeDetectionUtil, ChangeDetectorState);\n  }\n\n  generateSource(): string {\n    return `\n      var ${this.typeName} = function ${this.typeName}() {\n        ${this.abstractChangeDetectorVarName}.call(\n            this, ${JSON.stringify(this.id)}, ${this.records.length},\n            ${this.typeName}.gen_propertyBindingTargets, ${this.typeName}.gen_directiveIndices,\n            ${codify(this.changeDetectionStrategy)});\n        this.dehydrateDirectives(false);\n      }\n\n      ${this.typeName}.prototype = Object.create(${this.abstractChangeDetectorVarName}.prototype);\n\n      ${this.typeName}.prototype.detectChangesInRecordsInternal = function(throwOnChange) {\n        ${this._names.genInitLocals()}\n        var ${IS_CHANGED_LOCAL} = false;\n        var ${CHANGES_LOCAL} = null;\n\n        ${this._genAllRecords(this.records)}\n      }\n\n      ${this._maybeGenHandleEventInternal()}\n\n      ${this._maybeGenAfterContentLifecycleCallbacks()}\n\n      ${this._maybeGenAfterViewLifecycleCallbacks()}\n\n      ${this._maybeGenHydrateDirectives()}\n\n      ${this._maybeGenDehydrateDirectives()}\n\n      ${this._genPropertyBindingTargets()}\n\n      ${this._genDirectiveIndices()}\n    `;\n  }\n\n  /** @internal */\n  _genPropertyBindingTargets(): string {\n    var targets = this._logic.genPropertyBindingTargets(this.propertyBindingTargets,\n                                                        this.genConfig.genDebugInfo);\n    return `${this.typeName}.gen_propertyBindingTargets = ${targets};`;\n  }\n\n  /** @internal */\n  _genDirectiveIndices(): string {\n    var indices = this._logic.genDirectiveIndices(this.directiveRecords);\n    return `${this.typeName}.gen_directiveIndices = ${indices};`;\n  }\n\n  /** @internal */\n  _maybeGenHandleEventInternal(): string {\n    if (this.eventBindings.length > 0) {\n      var handlers = this.eventBindings.map(eb => this._genEventBinding(eb)).join(\"\\n\");\n      return `\n        ${this.typeName}.prototype.handleEventInternal = function(eventName, elIndex, locals) {\n          var ${this._names.getPreventDefaultAccesor()} = false;\n          ${this._names.genInitEventLocals()}\n          ${handlers}\n          return ${this._names.getPreventDefaultAccesor()};\n        }\n      `;\n    } else {\n      return '';\n    }\n  }\n\n  /** @internal */\n  _genEventBinding(eb: EventBinding): string {\n    let codes: String[] = [];\n    this._endOfBlockIdxs = [];\n\n    ListWrapper.forEachWithIndex(eb.records, (r, i) => {\n      let code;\n\n      if (r.isConditionalSkipRecord()) {\n        code = this._genConditionalSkip(r, this._names.getEventLocalName(eb, i));\n      } else if (r.isUnconditionalSkipRecord()) {\n        code = this._genUnconditionalSkip(r);\n      } else {\n        code = this._genEventBindingEval(eb, r);\n      }\n\n      code += this._genEndOfSkipBlock(i);\n\n      codes.push(code);\n    });\n\n    return `\n    if (eventName === \"${eb.eventName}\" && elIndex === ${eb.elIndex}) {\n      ${codes.join(\"\\n\")}\n    }`;\n  }\n\n  /** @internal */\n  _genEventBindingEval(eb: EventBinding, r: ProtoRecord): string {\n    if (r.lastInBinding) {\n      var evalRecord = this._logic.genEventBindingEvalValue(eb, r);\n      var markPath = this._genMarkPathToRootAsCheckOnce(r);\n      var prevDefault = this._genUpdatePreventDefault(eb, r);\n      return `${markPath}\\n${evalRecord}\\n${prevDefault}`;\n    } else {\n      return this._logic.genEventBindingEvalValue(eb, r);\n    }\n  }\n\n  /** @internal */\n  _genMarkPathToRootAsCheckOnce(r: ProtoRecord): string {\n    var br = r.bindingRecord;\n    if (br.isDefaultChangeDetection()) {\n      return \"\";\n    } else {\n      return `${this._names.getDetectorName(br.directiveRecord.directiveIndex)}.markPathToRootAsCheckOnce();`;\n    }\n  }\n\n  /** @internal */\n  _genUpdatePreventDefault(eb: EventBinding, r: ProtoRecord): string {\n    var local = this._names.getEventLocalName(eb, r.selfIndex);\n    return `if (${local} === false) { ${this._names.getPreventDefaultAccesor()} = true};`;\n  }\n\n  /** @internal */\n  _maybeGenDehydrateDirectives(): string {\n    var destroyPipesCode = this._names.genPipeOnDestroy();\n    var destroyDirectivesCode = this._logic.genDirectivesOnDestroy(this.directiveRecords);\n    var dehydrateFieldsCode = this._names.genDehydrateFields();\n    if (!destroyPipesCode && !destroyDirectivesCode && !dehydrateFieldsCode) return '';\n    return `${this.typeName}.prototype.dehydrateDirectives = function(destroyPipes) {\n        if (destroyPipes) {\n          ${destroyPipesCode}\n          ${destroyDirectivesCode}\n        }\n        ${dehydrateFieldsCode}\n    }`;\n  }\n\n  /** @internal */\n  _maybeGenHydrateDirectives(): string {\n    var hydrateDirectivesCode = this._logic.genHydrateDirectives(this.directiveRecords);\n    var hydrateDetectorsCode = this._logic.genHydrateDetectors(this.directiveRecords);\n    if (!hydrateDirectivesCode && !hydrateDetectorsCode) return '';\n    return `${this.typeName}.prototype.hydrateDirectives = function(directives) {\n      ${hydrateDirectivesCode}\n      ${hydrateDetectorsCode}\n    }`;\n  }\n\n  /** @internal */\n  _maybeGenAfterContentLifecycleCallbacks(): string {\n    var notifications = this._logic.genContentLifecycleCallbacks(this.directiveRecords);\n    if (notifications.length > 0) {\n      var directiveNotifications = notifications.join(\"\\n\");\n      return `\n        ${this.typeName}.prototype.afterContentLifecycleCallbacksInternal = function() {\n          ${directiveNotifications}\n        }\n      `;\n    } else {\n      return '';\n    }\n  }\n\n  /** @internal */\n  _maybeGenAfterViewLifecycleCallbacks(): string {\n    var notifications = this._logic.genViewLifecycleCallbacks(this.directiveRecords);\n    if (notifications.length > 0) {\n      var directiveNotifications = notifications.join(\"\\n\");\n      return `\n        ${this.typeName}.prototype.afterViewLifecycleCallbacksInternal = function() {\n          ${directiveNotifications}\n        }\n      `;\n    } else {\n      return '';\n    }\n  }\n\n  /** @internal */\n  _genAllRecords(rs: ProtoRecord[]): string {\n    var codes: String[] = [];\n    this._endOfBlockIdxs = [];\n\n    for (let i = 0; i < rs.length; i++) {\n      let code;\n      let r = rs[i];\n\n      if (r.isLifeCycleRecord()) {\n        code = this._genDirectiveLifecycle(r);\n      } else if (r.isPipeRecord()) {\n        code = this._genPipeCheck(r);\n      } else if (r.isConditionalSkipRecord()) {\n        code = this._genConditionalSkip(r, this._names.getLocalName(r.contextIndex));\n      } else if (r.isUnconditionalSkipRecord()) {\n        code = this._genUnconditionalSkip(r);\n      } else {\n        code = this._genReferenceCheck(r);\n      }\n\n      code = `\n        ${this._maybeFirstInBinding(r)}\n        ${code}\n        ${this._maybeGenLastInDirective(r)}\n        ${this._genEndOfSkipBlock(i)}\n      `;\n\n      codes.push(code);\n    }\n\n    return codes.join(\"\\n\");\n  }\n\n  /** @internal */\n  _genConditionalSkip(r: ProtoRecord, condition: string): string {\n    let maybeNegate = r.mode === RecordType.SkipRecordsIf ? '!' : '';\n    this._endOfBlockIdxs.push(r.fixedArgs[0] - 1);\n\n    return `if (${maybeNegate}${condition}) {`;\n  }\n\n  /** @internal */\n  _genUnconditionalSkip(r: ProtoRecord): string {\n    this._endOfBlockIdxs.pop();\n    this._endOfBlockIdxs.push(r.fixedArgs[0] - 1);\n    return `} else {`;\n  }\n\n  /** @internal */\n  _genEndOfSkipBlock(protoIndex: number): string {\n    if (!ListWrapper.isEmpty(this._endOfBlockIdxs)) {\n      let endOfBlock = ListWrapper.last(this._endOfBlockIdxs);\n      if (protoIndex === endOfBlock) {\n        this._endOfBlockIdxs.pop();\n        return '}';\n      }\n    }\n\n    return '';\n  }\n\n  /** @internal */\n  _genDirectiveLifecycle(r: ProtoRecord): string {\n    if (r.name === \"DoCheck\") {\n      return this._genOnCheck(r);\n    } else if (r.name === \"OnInit\") {\n      return this._genOnInit(r);\n    } else if (r.name === \"OnChanges\") {\n      return this._genOnChange(r);\n    } else {\n      throw new BaseException(`Unknown lifecycle event '${r.name}'`);\n    }\n  }\n\n  /** @internal */\n  _genPipeCheck(r: ProtoRecord): string {\n    var context = this._names.getLocalName(r.contextIndex);\n    var argString = r.args.map((arg) => this._names.getLocalName(arg)).join(\", \");\n\n    var oldValue = this._names.getFieldName(r.selfIndex);\n    var newValue = this._names.getLocalName(r.selfIndex);\n\n    var pipe = this._names.getPipeName(r.selfIndex);\n    var pipeName = r.name;\n\n    var init = `\n      if (${pipe} === ${this.changeDetectionUtilVarName}.uninitialized) {\n        ${pipe} = ${this._names.getPipesAccessorName()}.get('${pipeName}');\n      }\n    `;\n    var read = `${newValue} = ${pipe}.pipe.transform(${context}, [${argString}]);`;\n\n    var contexOrArgCheck = r.args.map((a) => this._names.getChangeName(a));\n    contexOrArgCheck.push(this._names.getChangeName(r.contextIndex));\n    var condition = `!${pipe}.pure || (${contexOrArgCheck.join(\" || \")})`;\n\n    var check = `\n      ${this._genThrowOnChangeCheck(oldValue, newValue)}\n      if (${this.changeDetectionUtilVarName}.looseNotIdentical(${oldValue}, ${newValue})) {\n        ${newValue} = ${this.changeDetectionUtilVarName}.unwrapValue(${newValue})\n        ${this._genChangeMarker(r)}\n        ${this._genUpdateDirectiveOrElement(r)}\n        ${this._genAddToChanges(r)}\n        ${oldValue} = ${newValue};\n      }\n    `;\n\n    var genCode = r.shouldBeChecked() ? `${read}${check}` : read;\n\n    if (r.isUsedByOtherRecord()) {\n      return `${init} if (${condition}) { ${genCode} } else { ${newValue} = ${oldValue}; }`;\n    } else {\n      return `${init} if (${condition}) { ${genCode} }`;\n    }\n  }\n\n  /** @internal */\n  _genReferenceCheck(r: ProtoRecord): string {\n    var oldValue = this._names.getFieldName(r.selfIndex);\n    var newValue = this._names.getLocalName(r.selfIndex);\n    var read = `\n      ${this._logic.genPropertyBindingEvalValue(r)}\n    `;\n\n    var check = `\n      ${this._genThrowOnChangeCheck(oldValue, newValue)}\n      if (${this.changeDetectionUtilVarName}.looseNotIdentical(${oldValue}, ${newValue})) {\n        ${this._genChangeMarker(r)}\n        ${this._genUpdateDirectiveOrElement(r)}\n        ${this._genAddToChanges(r)}\n        ${oldValue} = ${newValue};\n      }\n    `;\n\n    var genCode = r.shouldBeChecked() ? `${read}${check}` : read;\n\n    if (r.isPureFunction()) {\n      var condition = r.args.map((a) => this._names.getChangeName(a)).join(\" || \");\n      if (r.isUsedByOtherRecord()) {\n        return `if (${condition}) { ${genCode} } else { ${newValue} = ${oldValue}; }`;\n      } else {\n        return `if (${condition}) { ${genCode} }`;\n      }\n    } else {\n      return genCode;\n    }\n  }\n\n  /** @internal */\n  _genChangeMarker(r: ProtoRecord): string {\n    return r.argumentToPureFunction ? `${this._names.getChangeName(r.selfIndex)} = true` : ``;\n  }\n\n  /** @internal */\n  _genUpdateDirectiveOrElement(r: ProtoRecord): string {\n    if (!r.lastInBinding) return \"\";\n\n    var newValue = this._names.getLocalName(r.selfIndex);\n    var notifyDebug = this.genConfig.logBindingUpdate ? `this.logBindingUpdate(${newValue});` : \"\";\n\n    var br = r.bindingRecord;\n    if (br.target.isDirective()) {\n      var directiveProperty =\n          `${this._names.getDirectiveName(br.directiveRecord.directiveIndex)}.${br.target.name}`;\n      return `\n        ${directiveProperty} = ${newValue};\n        ${notifyDebug}\n        ${IS_CHANGED_LOCAL} = true;\n      `;\n    } else {\n      return `\n        this.notifyDispatcher(${newValue});\n        ${notifyDebug}\n      `;\n    }\n  }\n\n  /** @internal */\n  _genThrowOnChangeCheck(oldValue: string, newValue: string): string {\n    if (assertionsEnabled()) {\n      return `\n        if (throwOnChange && !${this.changeDetectionUtilVarName}.devModeEqual(${oldValue}, ${newValue})) {\n          this.throwOnChangeError(${oldValue}, ${newValue});\n        }\n        `;\n    } else {\n      return '';\n    }\n  }\n\n  /** @internal */\n  _genAddToChanges(r: ProtoRecord): string {\n    var newValue = this._names.getLocalName(r.selfIndex);\n    var oldValue = this._names.getFieldName(r.selfIndex);\n    if (!r.bindingRecord.callOnChanges()) return \"\";\n    return `${CHANGES_LOCAL} = this.addChange(${CHANGES_LOCAL}, ${oldValue}, ${newValue});`;\n  }\n\n  /** @internal */\n  _maybeFirstInBinding(r: ProtoRecord): string {\n    var prev = ChangeDetectionUtil.protoByIndex(this.records, r.selfIndex - 1);\n    var firstInBinding = isBlank(prev) || prev.bindingRecord !== r.bindingRecord;\n    return firstInBinding && !r.bindingRecord.isDirectiveLifecycle() ?\n               `${this._names.getPropertyBindingIndex()} = ${r.propertyBindingIndex};` :\n               '';\n  }\n\n  /** @internal */\n  _maybeGenLastInDirective(r: ProtoRecord): string {\n    if (!r.lastInDirective) return \"\";\n    return `\n      ${CHANGES_LOCAL} = null;\n      ${this._genNotifyOnPushDetectors(r)}\n      ${IS_CHANGED_LOCAL} = false;\n    `;\n  }\n\n  /** @internal */\n  _genOnCheck(r: ProtoRecord): string {\n    var br = r.bindingRecord;\n    return `if (!throwOnChange) ${this._names.getDirectiveName(br.directiveRecord.directiveIndex)}.ngDoCheck();`;\n  }\n\n  /** @internal */\n  _genOnInit(r: ProtoRecord): string {\n    var br = r.bindingRecord;\n    return `if (!throwOnChange && ${this._names.getStateName()} === ${this.changeDetectorStateVarName}.NeverChecked) ${this._names.getDirectiveName(br.directiveRecord.directiveIndex)}.ngOnInit();`;\n  }\n\n  /** @internal */\n  _genOnChange(r: ProtoRecord): string {\n    var br = r.bindingRecord;\n    return `if (!throwOnChange && ${CHANGES_LOCAL}) ${this._names.getDirectiveName(br.directiveRecord.directiveIndex)}.ngOnChanges(${CHANGES_LOCAL});`;\n  }\n\n  /** @internal */\n  _genNotifyOnPushDetectors(r: ProtoRecord): string {\n    var br = r.bindingRecord;\n    if (!r.lastInDirective || br.isDefaultChangeDetection()) return \"\";\n    var retVal = `\n      if(${IS_CHANGED_LOCAL}) {\n        ${this._names.getDetectorName(br.directiveRecord.directiveIndex)}.markAsCheckOnce();\n      }\n    `;\n    return retVal;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/change_detection_jit_generator.ts\n **/","import {ChangeDetector} from './interfaces';\nimport {ChangeDetectionStrategy} from './constants';\n\nexport abstract class ChangeDetectorRef {\n  /**\n   * Marks all {@link ChangeDetectionStrategy#OnPush} ancestors as to be checked.\n   *\n   * <!-- TODO: Add a link to a chapter on OnPush components -->\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/GC512b?p=preview))\n   *\n   * ```typescript\n   * @Component({\n   *   selector: 'cmp',\n   *   changeDetection: ChangeDetectionStrategy.OnPush,\n   *   template: `Number of ticks: {{numberOfTicks}}`\n   * })\n   * class Cmp {\n   *   numberOfTicks = 0;\n   *\n   *   constructor(ref: ChangeDetectorRef) {\n   *     setInterval(() => {\n   *       this.numberOfTicks ++\n   *       // the following is required, otherwise the view will not be updated\n   *       this.ref.markForCheck();\n   *     }, 1000);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   changeDetection: ChangeDetectionStrategy.OnPush,\n   *   template: `\n   *     <cmp><cmp>\n   *   `,\n   *   directives: [Cmp]\n   * })\n   * class App {\n   * }\n   *\n   * bootstrap(App);\n   * ```\n   */\n  abstract markForCheck(): void;\n\n  /**\n   * Detaches the change detector from the change detector tree.\n   *\n   * The detached change detector will not be checked until it is reattached.\n   *\n   * This can also be used in combination with {@link ChangeDetectorRef#detectChanges} to implement\n   * local change\n   * detection checks.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\n   *\n   * ### Example\n   *\n   * The following example defines a component with a large list of readonly data.\n   * Imagine the data changes constantly, many times per second. For performance reasons,\n   * we want to check and update the list every five seconds. We can do that by detaching\n   * the component's change detector and doing a local check every five seconds.\n   *\n   * ```typescript\n   * class DataProvider {\n   *   // in a real application the returned data will be different every time\n   *   get data() {\n   *     return [1,2,3,4,5];\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'giant-list',\n   *   template: `\n   *     <li *ngFor=\"#d of dataProvider.data\">Data {{d}}</lig>\n   *   `,\n   *   directives: [NgFor]\n   * })\n   * class GiantList {\n   *   constructor(private ref: ChangeDetectorRef, private dataProvider:DataProvider) {\n   *     ref.detach();\n   *     setInterval(() => {\n   *       this.ref.detectChanges();\n   *     }, 5000);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   providers: [DataProvider],\n   *   template: `\n   *     <giant-list><giant-list>\n   *   `,\n   *   directives: [GiantList]\n   * })\n   * class App {\n   * }\n   *\n   * bootstrap(App);\n   * ```\n   */\n  abstract detach(): void;\n\n  /**\n   * Checks the change detector and its children.\n   *\n   * This can also be used in combination with {@link ChangeDetectorRef#detach} to implement local\n   * change detection\n   * checks.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   * <!-- TODO: Add a live demo once ref.detectChanges is merged into master -->\n   *\n   * ### Example\n   *\n   * The following example defines a component with a large list of readonly data.\n   * Imagine, the data changes constantly, many times per second. For performance reasons,\n   * we want to check and update the list every five seconds.\n   *\n   * We can do that by detaching the component's change detector and doing a local change detection\n   * check\n   * every five seconds.\n   *\n   * See {@link ChangeDetectorRef#detach} for more information.\n   */\n  abstract detectChanges(): void;\n\n  /**\n   * Checks the change detector and its children, and throws if any changes are detected.\n   *\n   * This is used in development mode to verify that running change detection doesn't introduce\n   * other changes.\n   */\n  abstract checkNoChanges(): void;\n\n  /**\n   * Reattach the change detector to the change detector tree.\n   *\n   * This also marks OnPush ancestors as to be checked. This reattached change detector will be\n   * checked during the next change detection run.\n   *\n   * <!-- TODO: Add a link to a chapter on detach/reattach/local digest -->\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/aUhZha?p=preview))\n   *\n   * The following example creates a component displaying `live` data. The component will detach\n   * its change detector from the main change detector tree when the component's live property\n   * is set to false.\n   *\n   * ```typescript\n   * class DataProvider {\n   *   data = 1;\n   *\n   *   constructor() {\n   *     setInterval(() => {\n   *       this.data = this.data * 2;\n   *     }, 500);\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'live-data',\n   *   inputs: ['live'],\n   *   template: `Data: {{dataProvider.data}}`\n   * })\n   * class LiveData {\n   *   constructor(private ref: ChangeDetectorRef, private dataProvider:DataProvider) {}\n   *\n   *   set live(value) {\n   *     if (value)\n   *       this.ref.reattach();\n   *     else\n   *       this.ref.detach();\n   *   }\n   * }\n   *\n   * @Component({\n   *   selector: 'app',\n   *   providers: [DataProvider],\n   *   template: `\n   *     Live Update: <input type=\"checkbox\" [(ngModel)]=\"live\">\n   *     <live-data [live]=\"live\"><live-data>\n   *   `,\n   *   directives: [LiveData, FORM_DIRECTIVES]\n   * })\n   * class App {\n   *   live = true;\n   * }\n   *\n   * bootstrap(App);\n   * ```\n   */\n  abstract reattach(): void;\n}\n\nexport class ChangeDetectorRef_ extends ChangeDetectorRef {\n  constructor(private _cd: ChangeDetector) { super(); }\n\n  markForCheck(): void { this._cd.markPathToRootAsCheckOnce(); }\n  detach(): void { this._cd.mode = ChangeDetectionStrategy.Detached; }\n  detectChanges(): void { this._cd.detectChanges(); }\n  checkNoChanges(): void { this._cd.checkNoChanges(); }\n  reattach(): void {\n    this._cd.mode = ChangeDetectionStrategy.CheckAlways;\n    this.markForCheck();\n  }\n}\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/change_detector_ref.ts\n **/","\n/**\n * Converts `funcOrValue` to a string which can be used in generated code.\n */\nexport function codify(obj: any): string {\n  return JSON.stringify(obj);\n}\n\nexport function rawString(str: string): string {\n  return `'${str}'`;\n}\n\n/**\n * Combine the strings of generated code into a single interpolated string.\n * Each element of `vals` is expected to be a string literal or a codegen'd\n * call to a method returning a string.\n */\nexport function combineGeneratedStrings(vals: string[]): string {\n  return vals.join(' + ');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/codegen_facade.ts\n **/","import {CONST} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {isListLikeIterable, iterateListLike, ListWrapper} from 'angular2/src/facade/collection';\n\nimport {\n  isBlank,\n  isPresent,\n  stringify,\n  getMapKey,\n  looseIdentical,\n  isArray\n} from 'angular2/src/facade/lang';\n\nimport {ChangeDetectorRef} from '../change_detector_ref';\nimport {IterableDiffer, IterableDifferFactory, TrackByFn} from '../differs/iterable_differs';\n\n@CONST()\nexport class DefaultIterableDifferFactory implements IterableDifferFactory {\n  supports(obj: Object): boolean { return isListLikeIterable(obj); }\n  create(cdRef: ChangeDetectorRef, trackByFn?: TrackByFn): DefaultIterableDiffer {\n    return new DefaultIterableDiffer(trackByFn);\n  }\n}\n\nvar trackByIdentity = (index: number, item: any) => item;\n\nexport class DefaultIterableDiffer implements IterableDiffer {\n  private _length: number = null;\n  private _collection = null;\n  // Keeps track of the used records at any point in time (during & across `_check()` calls)\n  private _linkedRecords: _DuplicateMap = null;\n  // Keeps track of the removed records at any point in time during `_check()` calls.\n  private _unlinkedRecords: _DuplicateMap = null;\n  private _previousItHead: CollectionChangeRecord = null;\n  private _itHead: CollectionChangeRecord = null;\n  private _itTail: CollectionChangeRecord = null;\n  private _additionsHead: CollectionChangeRecord = null;\n  private _additionsTail: CollectionChangeRecord = null;\n  private _movesHead: CollectionChangeRecord = null;\n  private _movesTail: CollectionChangeRecord = null;\n  private _removalsHead: CollectionChangeRecord = null;\n  private _removalsTail: CollectionChangeRecord = null;\n  // Keeps track of records where custom track by is the same, but item identity has changed\n  private _identityChangesHead: CollectionChangeRecord = null;\n  private _identityChangesTail: CollectionChangeRecord = null;\n\n  constructor(private _trackByFn?: TrackByFn) {\n    this._trackByFn = isPresent(this._trackByFn) ? this._trackByFn : trackByIdentity;\n  }\n\n  get collection() { return this._collection; }\n\n  get length(): number { return this._length; }\n\n  forEachItem(fn: Function) {\n    var record: CollectionChangeRecord;\n    for (record = this._itHead; record !== null; record = record._next) {\n      fn(record);\n    }\n  }\n\n  forEachPreviousItem(fn: Function) {\n    var record: CollectionChangeRecord;\n    for (record = this._previousItHead; record !== null; record = record._nextPrevious) {\n      fn(record);\n    }\n  }\n\n  forEachAddedItem(fn: Function) {\n    var record: CollectionChangeRecord;\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      fn(record);\n    }\n  }\n\n  forEachMovedItem(fn: Function) {\n    var record: CollectionChangeRecord;\n    for (record = this._movesHead; record !== null; record = record._nextMoved) {\n      fn(record);\n    }\n  }\n\n  forEachRemovedItem(fn: Function) {\n    var record: CollectionChangeRecord;\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      fn(record);\n    }\n  }\n\n  forEachIdentityChange(fn: Function) {\n    var record: CollectionChangeRecord;\n    for (record = this._identityChangesHead; record !== null; record = record._nextIdentityChange) {\n      fn(record);\n    }\n  }\n\n  diff(collection: any): DefaultIterableDiffer {\n    if (isBlank(collection)) collection = [];\n    if (!isListLikeIterable(collection)) {\n      throw new BaseException(`Error trying to diff '${collection}'`);\n    }\n\n    if (this.check(collection)) {\n      return this;\n    } else {\n      return null;\n    }\n  }\n\n  onDestroy() {}\n\n  check(collection: any): boolean {\n    this._reset();\n\n    var record: CollectionChangeRecord = this._itHead;\n    var mayBeDirty: boolean = false;\n    var index: number;\n    var item;\n    var itemTrackBy;\n    if (isArray(collection)) {\n      if (collection !== this._collection || !ListWrapper.isImmutable(collection)) {\n        var list = collection;\n        this._length = collection.length;\n\n        for (index = 0; index < this._length; index++) {\n          item = list[index];\n          itemTrackBy = this._trackByFn(index, item);\n          if (record === null || !looseIdentical(record.trackById, itemTrackBy)) {\n            record = this._mismatch(record, item, itemTrackBy, index);\n            mayBeDirty = true;\n          } else {\n            if (mayBeDirty) {\n              // TODO(misko): can we limit this to duplicates only?\n              record = this._verifyReinsertion(record, item, itemTrackBy, index);\n            }\n            if (!looseIdentical(record.item, item)) this._addIdentityChange(record, item);\n          }\n\n          record = record._next;\n        }\n        this._truncate(record);\n      }\n    } else {\n      index = 0;\n      iterateListLike(collection, (item) => {\n        itemTrackBy = this._trackByFn(index, item);\n        if (record === null || !looseIdentical(record.trackById, itemTrackBy)) {\n          record = this._mismatch(record, item, itemTrackBy, index);\n          mayBeDirty = true;\n        } else {\n          if (mayBeDirty) {\n            // TODO(misko): can we limit this to duplicates only?\n            record = this._verifyReinsertion(record, item, itemTrackBy, index);\n          }\n          if (!looseIdentical(record.item, item)) this._addIdentityChange(record, item);\n        }\n        record = record._next;\n        index++;\n      });\n      this._length = index;\n      this._truncate(record);\n    }\n\n    this._collection = collection;\n    return this.isDirty;\n  }\n\n  /* CollectionChanges is considered dirty if it has any additions, moves, removals, or identity\n   * changes.\n   */\n  get isDirty(): boolean {\n    return this._additionsHead !== null || this._movesHead !== null ||\n           this._removalsHead !== null || this._identityChangesHead !== null;\n  }\n\n  /**\n   * Reset the state of the change objects to show no changes. This means set previousKey to\n   * currentKey, and clear all of the queues (additions, moves, removals).\n   * Set the previousIndexes of moved and added items to their currentIndexes\n   * Reset the list of additions, moves and removals\n   *\n   * @internal\n   */\n  _reset() {\n    if (this.isDirty) {\n      var record: CollectionChangeRecord;\n      var nextRecord: CollectionChangeRecord;\n\n      for (record = this._previousItHead = this._itHead; record !== null; record = record._next) {\n        record._nextPrevious = record._next;\n      }\n\n      for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n        record.previousIndex = record.currentIndex;\n      }\n      this._additionsHead = this._additionsTail = null;\n\n      for (record = this._movesHead; record !== null; record = nextRecord) {\n        record.previousIndex = record.currentIndex;\n        nextRecord = record._nextMoved;\n      }\n      this._movesHead = this._movesTail = null;\n      this._removalsHead = this._removalsTail = null;\n      this._identityChangesHead = this._identityChangesTail = null;\n\n      // todo(vicb) when assert gets supported\n      // assert(!this.isDirty);\n    }\n  }\n\n  /**\n   * This is the core function which handles differences between collections.\n   *\n   * - `record` is the record which we saw at this position last time. If null then it is a new\n   *   item.\n   * - `item` is the current item in the collection\n   * - `index` is the position of the item in the collection\n   *\n   * @internal\n   */\n  _mismatch(record: CollectionChangeRecord, item: any, itemTrackBy: any,\n            index: number): CollectionChangeRecord {\n    // The previous record after which we will append the current one.\n    var previousRecord: CollectionChangeRecord;\n\n    if (record === null) {\n      previousRecord = this._itTail;\n    } else {\n      previousRecord = record._prev;\n      // Remove the record from the collection since we know it does not match the item.\n      this._remove(record);\n    }\n\n    // Attempt to see if we have seen the item before.\n    record = this._linkedRecords === null ? null : this._linkedRecords.get(itemTrackBy, index);\n    if (record !== null) {\n      // We have seen this before, we need to move it forward in the collection.\n      // But first we need to check if identity changed, so we can update in view if necessary\n      if (!looseIdentical(record.item, item)) this._addIdentityChange(record, item);\n\n      this._moveAfter(record, previousRecord, index);\n    } else {\n      // Never seen it, check evicted list.\n      record = this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy);\n      if (record !== null) {\n        // It is an item which we have evicted earlier: reinsert it back into the list.\n        // But first we need to check if identity changed, so we can update in view if necessary\n        if (!looseIdentical(record.item, item)) this._addIdentityChange(record, item);\n\n        this._reinsertAfter(record, previousRecord, index);\n      } else {\n        // It is a new item: add it.\n        record =\n            this._addAfter(new CollectionChangeRecord(item, itemTrackBy), previousRecord, index);\n      }\n    }\n    return record;\n  }\n\n  /**\n   * This check is only needed if an array contains duplicates. (Short circuit of nothing dirty)\n   *\n   * Use case: `[a, a]` => `[b, a, a]`\n   *\n   * If we did not have this check then the insertion of `b` would:\n   *   1) evict first `a`\n   *   2) insert `b` at `0` index.\n   *   3) leave `a` at index `1` as is. <-- this is wrong!\n   *   3) reinsert `a` at index 2. <-- this is wrong!\n   *\n   * The correct behavior is:\n   *   1) evict first `a`\n   *   2) insert `b` at `0` index.\n   *   3) reinsert `a` at index 1.\n   *   3) move `a` at from `1` to `2`.\n   *\n   *\n   * Double check that we have not evicted a duplicate item. We need to check if the item type may\n   * have already been removed:\n   * The insertion of b will evict the first 'a'. If we don't reinsert it now it will be reinserted\n   * at the end. Which will show up as the two 'a's switching position. This is incorrect, since a\n   * better way to think of it is as insert of 'b' rather then switch 'a' with 'b' and then add 'a'\n   * at the end.\n   *\n   * @internal\n   */\n  _verifyReinsertion(record: CollectionChangeRecord, item: any, itemTrackBy: any,\n                     index: number): CollectionChangeRecord {\n    var reinsertRecord: CollectionChangeRecord =\n        this._unlinkedRecords === null ? null : this._unlinkedRecords.get(itemTrackBy);\n    if (reinsertRecord !== null) {\n      record = this._reinsertAfter(reinsertRecord, record._prev, index);\n    } else if (record.currentIndex != index) {\n      record.currentIndex = index;\n      this._addToMoves(record, index);\n    }\n    return record;\n  }\n\n  /**\n   * Get rid of any excess {@link CollectionChangeRecord}s from the previous collection\n   *\n   * - `record` The first excess {@link CollectionChangeRecord}.\n   *\n   * @internal\n   */\n  _truncate(record: CollectionChangeRecord) {\n    // Anything after that needs to be removed;\n    while (record !== null) {\n      var nextRecord: CollectionChangeRecord = record._next;\n      this._addToRemovals(this._unlink(record));\n      record = nextRecord;\n    }\n    if (this._unlinkedRecords !== null) {\n      this._unlinkedRecords.clear();\n    }\n\n    if (this._additionsTail !== null) {\n      this._additionsTail._nextAdded = null;\n    }\n    if (this._movesTail !== null) {\n      this._movesTail._nextMoved = null;\n    }\n    if (this._itTail !== null) {\n      this._itTail._next = null;\n    }\n    if (this._removalsTail !== null) {\n      this._removalsTail._nextRemoved = null;\n    }\n    if (this._identityChangesTail !== null) {\n      this._identityChangesTail._nextIdentityChange = null;\n    }\n  }\n\n  /** @internal */\n  _reinsertAfter(record: CollectionChangeRecord, prevRecord: CollectionChangeRecord,\n                 index: number): CollectionChangeRecord {\n    if (this._unlinkedRecords !== null) {\n      this._unlinkedRecords.remove(record);\n    }\n    var prev = record._prevRemoved;\n    var next = record._nextRemoved;\n\n    if (prev === null) {\n      this._removalsHead = next;\n    } else {\n      prev._nextRemoved = next;\n    }\n    if (next === null) {\n      this._removalsTail = prev;\n    } else {\n      next._prevRemoved = prev;\n    }\n\n    this._insertAfter(record, prevRecord, index);\n    this._addToMoves(record, index);\n    return record;\n  }\n\n  /** @internal */\n  _moveAfter(record: CollectionChangeRecord, prevRecord: CollectionChangeRecord,\n             index: number): CollectionChangeRecord {\n    this._unlink(record);\n    this._insertAfter(record, prevRecord, index);\n    this._addToMoves(record, index);\n    return record;\n  }\n\n  /** @internal */\n  _addAfter(record: CollectionChangeRecord, prevRecord: CollectionChangeRecord,\n            index: number): CollectionChangeRecord {\n    this._insertAfter(record, prevRecord, index);\n\n    if (this._additionsTail === null) {\n      // todo(vicb)\n      // assert(this._additionsHead === null);\n      this._additionsTail = this._additionsHead = record;\n    } else {\n      // todo(vicb)\n      // assert(_additionsTail._nextAdded === null);\n      // assert(record._nextAdded === null);\n      this._additionsTail = this._additionsTail._nextAdded = record;\n    }\n    return record;\n  }\n\n  /** @internal */\n  _insertAfter(record: CollectionChangeRecord, prevRecord: CollectionChangeRecord,\n               index: number): CollectionChangeRecord {\n    // todo(vicb)\n    // assert(record != prevRecord);\n    // assert(record._next === null);\n    // assert(record._prev === null);\n\n    var next: CollectionChangeRecord = prevRecord === null ? this._itHead : prevRecord._next;\n    // todo(vicb)\n    // assert(next != record);\n    // assert(prevRecord != record);\n    record._next = next;\n    record._prev = prevRecord;\n    if (next === null) {\n      this._itTail = record;\n    } else {\n      next._prev = record;\n    }\n    if (prevRecord === null) {\n      this._itHead = record;\n    } else {\n      prevRecord._next = record;\n    }\n\n    if (this._linkedRecords === null) {\n      this._linkedRecords = new _DuplicateMap();\n    }\n    this._linkedRecords.put(record);\n\n    record.currentIndex = index;\n    return record;\n  }\n\n  /** @internal */\n  _remove(record: CollectionChangeRecord): CollectionChangeRecord {\n    return this._addToRemovals(this._unlink(record));\n  }\n\n  /** @internal */\n  _unlink(record: CollectionChangeRecord): CollectionChangeRecord {\n    if (this._linkedRecords !== null) {\n      this._linkedRecords.remove(record);\n    }\n\n    var prev = record._prev;\n    var next = record._next;\n\n    // todo(vicb)\n    // assert((record._prev = null) === null);\n    // assert((record._next = null) === null);\n\n    if (prev === null) {\n      this._itHead = next;\n    } else {\n      prev._next = next;\n    }\n    if (next === null) {\n      this._itTail = prev;\n    } else {\n      next._prev = prev;\n    }\n\n    return record;\n  }\n\n  /** @internal */\n  _addToMoves(record: CollectionChangeRecord, toIndex: number): CollectionChangeRecord {\n    // todo(vicb)\n    // assert(record._nextMoved === null);\n\n    if (record.previousIndex === toIndex) {\n      return record;\n    }\n\n    if (this._movesTail === null) {\n      // todo(vicb)\n      // assert(_movesHead === null);\n      this._movesTail = this._movesHead = record;\n    } else {\n      // todo(vicb)\n      // assert(_movesTail._nextMoved === null);\n      this._movesTail = this._movesTail._nextMoved = record;\n    }\n\n    return record;\n  }\n\n  /** @internal */\n  _addToRemovals(record: CollectionChangeRecord): CollectionChangeRecord {\n    if (this._unlinkedRecords === null) {\n      this._unlinkedRecords = new _DuplicateMap();\n    }\n    this._unlinkedRecords.put(record);\n    record.currentIndex = null;\n    record._nextRemoved = null;\n\n    if (this._removalsTail === null) {\n      // todo(vicb)\n      // assert(_removalsHead === null);\n      this._removalsTail = this._removalsHead = record;\n      record._prevRemoved = null;\n    } else {\n      // todo(vicb)\n      // assert(_removalsTail._nextRemoved === null);\n      // assert(record._nextRemoved === null);\n      record._prevRemoved = this._removalsTail;\n      this._removalsTail = this._removalsTail._nextRemoved = record;\n    }\n    return record;\n  }\n\n  /** @internal */\n  _addIdentityChange(record: CollectionChangeRecord, item: any) {\n    record.item = item;\n    if (this._identityChangesTail === null) {\n      this._identityChangesTail = this._identityChangesHead = record;\n    } else {\n      this._identityChangesTail = this._identityChangesTail._nextIdentityChange = record;\n    }\n    return record;\n  }\n\n\n  toString(): string {\n    var list = [];\n    this.forEachItem((record) => list.push(record));\n\n    var previous = [];\n    this.forEachPreviousItem((record) => previous.push(record));\n\n    var additions = [];\n    this.forEachAddedItem((record) => additions.push(record));\n\n    var moves = [];\n    this.forEachMovedItem((record) => moves.push(record));\n\n    var removals = [];\n    this.forEachRemovedItem((record) => removals.push(record));\n\n    var identityChanges = [];\n    this.forEachIdentityChange((record) => identityChanges.push(record));\n\n    return \"collection: \" + list.join(', ') + \"\\n\" + \"previous: \" + previous.join(', ') + \"\\n\" +\n           \"additions: \" + additions.join(', ') + \"\\n\" + \"moves: \" + moves.join(', ') + \"\\n\" +\n           \"removals: \" + removals.join(', ') + \"\\n\" + \"identityChanges: \" +\n           identityChanges.join(', ') + \"\\n\";\n  }\n}\n\nexport class CollectionChangeRecord {\n  currentIndex: number = null;\n  previousIndex: number = null;\n\n  /** @internal */\n  _nextPrevious: CollectionChangeRecord = null;\n  /** @internal */\n  _prev: CollectionChangeRecord = null;\n  /** @internal */\n  _next: CollectionChangeRecord = null;\n  /** @internal */\n  _prevDup: CollectionChangeRecord = null;\n  /** @internal */\n  _nextDup: CollectionChangeRecord = null;\n  /** @internal */\n  _prevRemoved: CollectionChangeRecord = null;\n  /** @internal */\n  _nextRemoved: CollectionChangeRecord = null;\n  /** @internal */\n  _nextAdded: CollectionChangeRecord = null;\n  /** @internal */\n  _nextMoved: CollectionChangeRecord = null;\n  /** @internal */\n  _nextIdentityChange: CollectionChangeRecord = null;\n\n\n  constructor(public item: any, public trackById: any) {}\n\n  toString(): string {\n    return this.previousIndex === this.currentIndex ?\n               stringify(this.item) :\n               stringify(this.item) + '[' + stringify(this.previousIndex) + '->' +\n                   stringify(this.currentIndex) + ']';\n  }\n}\n\n// A linked list of CollectionChangeRecords with the same CollectionChangeRecord.item\nclass _DuplicateItemRecordList {\n  /** @internal */\n  _head: CollectionChangeRecord = null;\n  /** @internal */\n  _tail: CollectionChangeRecord = null;\n\n  /**\n   * Append the record to the list of duplicates.\n   *\n   * Note: by design all records in the list of duplicates hold the same value in record.item.\n   */\n  add(record: CollectionChangeRecord): void {\n    if (this._head === null) {\n      this._head = this._tail = record;\n      record._nextDup = null;\n      record._prevDup = null;\n    } else {\n      // todo(vicb)\n      // assert(record.item ==  _head.item ||\n      //       record.item is num && record.item.isNaN && _head.item is num && _head.item.isNaN);\n      this._tail._nextDup = record;\n      record._prevDup = this._tail;\n      record._nextDup = null;\n      this._tail = record;\n    }\n  }\n\n  // Returns a CollectionChangeRecord having CollectionChangeRecord.trackById == trackById and\n  // CollectionChangeRecord.currentIndex >= afterIndex\n  get(trackById: any, afterIndex: number): CollectionChangeRecord {\n    var record: CollectionChangeRecord;\n    for (record = this._head; record !== null; record = record._nextDup) {\n      if ((afterIndex === null || afterIndex < record.currentIndex) &&\n          looseIdentical(record.trackById, trackById)) {\n        return record;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Remove one {@link CollectionChangeRecord} from the list of duplicates.\n   *\n   * Returns whether the list of duplicates is empty.\n   */\n  remove(record: CollectionChangeRecord): boolean {\n    // todo(vicb)\n    // assert(() {\n    //  // verify that the record being removed is in the list.\n    //  for (CollectionChangeRecord cursor = _head; cursor != null; cursor = cursor._nextDup) {\n    //    if (identical(cursor, record)) return true;\n    //  }\n    //  return false;\n    //});\n\n    var prev: CollectionChangeRecord = record._prevDup;\n    var next: CollectionChangeRecord = record._nextDup;\n    if (prev === null) {\n      this._head = next;\n    } else {\n      prev._nextDup = next;\n    }\n    if (next === null) {\n      this._tail = prev;\n    } else {\n      next._prevDup = prev;\n    }\n    return this._head === null;\n  }\n}\n\nclass _DuplicateMap {\n  map = new Map<any, _DuplicateItemRecordList>();\n\n  put(record: CollectionChangeRecord) {\n    // todo(vicb) handle corner cases\n    var key = getMapKey(record.trackById);\n\n    var duplicates = this.map.get(key);\n    if (!isPresent(duplicates)) {\n      duplicates = new _DuplicateItemRecordList();\n      this.map.set(key, duplicates);\n    }\n    duplicates.add(record);\n  }\n\n  /**\n   * Retrieve the `value` using key. Because the CollectionChangeRecord value may be one which we\n   * have already iterated over, we use the afterIndex to pretend it is not there.\n   *\n   * Use case: `[a, b, c, a, a]` if we are at index `3` which is the second `a` then asking if we\n   * have any more `a`s needs to return the last `a` not the first or second.\n   */\n  get(trackById: any, afterIndex: number = null): CollectionChangeRecord {\n    var key = getMapKey(trackById);\n\n    var recordList = this.map.get(key);\n    return isBlank(recordList) ? null : recordList.get(trackById, afterIndex);\n  }\n\n  /**\n   * Removes a {@link CollectionChangeRecord} from the list of duplicates.\n   *\n   * The list of duplicates also is removed from the map if it gets empty.\n   */\n  remove(record: CollectionChangeRecord): CollectionChangeRecord {\n    var key = getMapKey(record.trackById);\n    // todo(vicb)\n    // assert(this.map.containsKey(key));\n    var recordList: _DuplicateItemRecordList = this.map.get(key);\n    // Remove the list of duplicates when it gets empty\n    if (recordList.remove(record)) {\n      this.map.delete(key);\n    }\n    return record;\n  }\n\n  get isEmpty(): boolean { return this.map.size === 0; }\n\n  clear() { this.map.clear(); }\n\n  toString(): string { return '_DuplicateMap(' + stringify(this.map) + ')'; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/differs/default_iterable_differ.ts\n **/","import {MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {stringify, looseIdentical, isJsObject, CONST, isBlank} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ChangeDetectorRef} from '../change_detector_ref';\nimport {KeyValueDiffer, KeyValueDifferFactory} from '../differs/keyvalue_differs';\n\n@CONST()\nexport class DefaultKeyValueDifferFactory implements KeyValueDifferFactory {\n  supports(obj: any): boolean { return obj instanceof Map || isJsObject(obj); }\n\n  create(cdRef: ChangeDetectorRef): KeyValueDiffer { return new DefaultKeyValueDiffer(); }\n}\n\nexport class DefaultKeyValueDiffer implements KeyValueDiffer {\n  private _records: Map<any, any> = new Map();\n  private _mapHead: KeyValueChangeRecord = null;\n  private _previousMapHead: KeyValueChangeRecord = null;\n  private _changesHead: KeyValueChangeRecord = null;\n  private _changesTail: KeyValueChangeRecord = null;\n  private _additionsHead: KeyValueChangeRecord = null;\n  private _additionsTail: KeyValueChangeRecord = null;\n  private _removalsHead: KeyValueChangeRecord = null;\n  private _removalsTail: KeyValueChangeRecord = null;\n\n  get isDirty(): boolean {\n    return this._additionsHead !== null || this._changesHead !== null ||\n           this._removalsHead !== null;\n  }\n\n  forEachItem(fn: Function) {\n    var record: KeyValueChangeRecord;\n    for (record = this._mapHead; record !== null; record = record._next) {\n      fn(record);\n    }\n  }\n\n  forEachPreviousItem(fn: Function) {\n    var record: KeyValueChangeRecord;\n    for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n      fn(record);\n    }\n  }\n\n  forEachChangedItem(fn: Function) {\n    var record: KeyValueChangeRecord;\n    for (record = this._changesHead; record !== null; record = record._nextChanged) {\n      fn(record);\n    }\n  }\n\n  forEachAddedItem(fn: Function) {\n    var record: KeyValueChangeRecord;\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      fn(record);\n    }\n  }\n\n  forEachRemovedItem(fn: Function) {\n    var record: KeyValueChangeRecord;\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      fn(record);\n    }\n  }\n\n  diff(map: Map<any, any>): any {\n    if (isBlank(map)) map = MapWrapper.createFromPairs([]);\n    if (!(map instanceof Map || isJsObject(map))) {\n      throw new BaseException(`Error trying to diff '${map}'`);\n    }\n\n    if (this.check(map)) {\n      return this;\n    } else {\n      return null;\n    }\n  }\n\n  onDestroy() {}\n\n  check(map: Map<any, any>): boolean {\n    this._reset();\n    var records = this._records;\n    var oldSeqRecord: KeyValueChangeRecord = this._mapHead;\n    var lastOldSeqRecord: KeyValueChangeRecord = null;\n    var lastNewSeqRecord: KeyValueChangeRecord = null;\n    var seqChanged: boolean = false;\n\n    this._forEach(map, (value, key) => {\n      var newSeqRecord;\n      if (oldSeqRecord !== null && key === oldSeqRecord.key) {\n        newSeqRecord = oldSeqRecord;\n        if (!looseIdentical(value, oldSeqRecord.currentValue)) {\n          oldSeqRecord.previousValue = oldSeqRecord.currentValue;\n          oldSeqRecord.currentValue = value;\n          this._addToChanges(oldSeqRecord);\n        }\n      } else {\n        seqChanged = true;\n        if (oldSeqRecord !== null) {\n          oldSeqRecord._next = null;\n          this._removeFromSeq(lastOldSeqRecord, oldSeqRecord);\n          this._addToRemovals(oldSeqRecord);\n        }\n        if (records.has(key)) {\n          newSeqRecord = records.get(key);\n        } else {\n          newSeqRecord = new KeyValueChangeRecord(key);\n          records.set(key, newSeqRecord);\n          newSeqRecord.currentValue = value;\n          this._addToAdditions(newSeqRecord);\n        }\n      }\n\n      if (seqChanged) {\n        if (this._isInRemovals(newSeqRecord)) {\n          this._removeFromRemovals(newSeqRecord);\n        }\n        if (lastNewSeqRecord == null) {\n          this._mapHead = newSeqRecord;\n        } else {\n          lastNewSeqRecord._next = newSeqRecord;\n        }\n      }\n      lastOldSeqRecord = oldSeqRecord;\n      lastNewSeqRecord = newSeqRecord;\n      oldSeqRecord = oldSeqRecord === null ? null : oldSeqRecord._next;\n    });\n    this._truncate(lastOldSeqRecord, oldSeqRecord);\n    return this.isDirty;\n  }\n\n  /** @internal */\n  _reset() {\n    if (this.isDirty) {\n      var record: KeyValueChangeRecord;\n      // Record the state of the mapping\n      for (record = this._previousMapHead = this._mapHead; record !== null; record = record._next) {\n        record._nextPrevious = record._next;\n      }\n\n      for (record = this._changesHead; record !== null; record = record._nextChanged) {\n        record.previousValue = record.currentValue;\n      }\n\n      for (record = this._additionsHead; record != null; record = record._nextAdded) {\n        record.previousValue = record.currentValue;\n      }\n\n      // todo(vicb) once assert is supported\n      // assert(() {\n      //  var r = _changesHead;\n      //  while (r != null) {\n      //    var nextRecord = r._nextChanged;\n      //    r._nextChanged = null;\n      //    r = nextRecord;\n      //  }\n      //\n      //  r = _additionsHead;\n      //  while (r != null) {\n      //    var nextRecord = r._nextAdded;\n      //    r._nextAdded = null;\n      //    r = nextRecord;\n      //  }\n      //\n      //  r = _removalsHead;\n      //  while (r != null) {\n      //    var nextRecord = r._nextRemoved;\n      //    r._nextRemoved = null;\n      //    r = nextRecord;\n      //  }\n      //\n      //  return true;\n      //});\n      this._changesHead = this._changesTail = null;\n      this._additionsHead = this._additionsTail = null;\n      this._removalsHead = this._removalsTail = null;\n    }\n  }\n\n  /** @internal */\n  _truncate(lastRecord: KeyValueChangeRecord, record: KeyValueChangeRecord) {\n    while (record !== null) {\n      if (lastRecord === null) {\n        this._mapHead = null;\n      } else {\n        lastRecord._next = null;\n      }\n      var nextRecord = record._next;\n      // todo(vicb) assert\n      // assert((() {\n      //  record._next = null;\n      //  return true;\n      //}));\n      this._addToRemovals(record);\n      lastRecord = record;\n      record = nextRecord;\n    }\n\n    for (var rec: KeyValueChangeRecord = this._removalsHead; rec !== null; rec = rec._nextRemoved) {\n      rec.previousValue = rec.currentValue;\n      rec.currentValue = null;\n      this._records.delete(rec.key);\n    }\n  }\n\n  /** @internal */\n  _isInRemovals(record: KeyValueChangeRecord) {\n    return record === this._removalsHead || record._nextRemoved !== null ||\n           record._prevRemoved !== null;\n  }\n\n  /** @internal */\n  _addToRemovals(record: KeyValueChangeRecord) {\n    // todo(vicb) assert\n    // assert(record._next == null);\n    // assert(record._nextAdded == null);\n    // assert(record._nextChanged == null);\n    // assert(record._nextRemoved == null);\n    // assert(record._prevRemoved == null);\n    if (this._removalsHead === null) {\n      this._removalsHead = this._removalsTail = record;\n    } else {\n      this._removalsTail._nextRemoved = record;\n      record._prevRemoved = this._removalsTail;\n      this._removalsTail = record;\n    }\n  }\n\n  /** @internal */\n  _removeFromSeq(prev: KeyValueChangeRecord, record: KeyValueChangeRecord) {\n    var next = record._next;\n    if (prev === null) {\n      this._mapHead = next;\n    } else {\n      prev._next = next;\n    }\n    // todo(vicb) assert\n    // assert((() {\n    //  record._next = null;\n    //  return true;\n    //})());\n  }\n\n  /** @internal */\n  _removeFromRemovals(record: KeyValueChangeRecord) {\n    // todo(vicb) assert\n    // assert(record._next == null);\n    // assert(record._nextAdded == null);\n    // assert(record._nextChanged == null);\n\n    var prev = record._prevRemoved;\n    var next = record._nextRemoved;\n    if (prev === null) {\n      this._removalsHead = next;\n    } else {\n      prev._nextRemoved = next;\n    }\n    if (next === null) {\n      this._removalsTail = prev;\n    } else {\n      next._prevRemoved = prev;\n    }\n    record._prevRemoved = record._nextRemoved = null;\n  }\n\n  /** @internal */\n  _addToAdditions(record: KeyValueChangeRecord) {\n    // todo(vicb): assert\n    // assert(record._next == null);\n    // assert(record._nextAdded == null);\n    // assert(record._nextChanged == null);\n    // assert(record._nextRemoved == null);\n    // assert(record._prevRemoved == null);\n    if (this._additionsHead === null) {\n      this._additionsHead = this._additionsTail = record;\n    } else {\n      this._additionsTail._nextAdded = record;\n      this._additionsTail = record;\n    }\n  }\n\n  /** @internal */\n  _addToChanges(record: KeyValueChangeRecord) {\n    // todo(vicb) assert\n    // assert(record._nextAdded == null);\n    // assert(record._nextChanged == null);\n    // assert(record._nextRemoved == null);\n    // assert(record._prevRemoved == null);\n    if (this._changesHead === null) {\n      this._changesHead = this._changesTail = record;\n    } else {\n      this._changesTail._nextChanged = record;\n      this._changesTail = record;\n    }\n  }\n\n  toString(): string {\n    var items = [];\n    var previous = [];\n    var changes = [];\n    var additions = [];\n    var removals = [];\n    var record: KeyValueChangeRecord;\n\n    for (record = this._mapHead; record !== null; record = record._next) {\n      items.push(stringify(record));\n    }\n    for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {\n      previous.push(stringify(record));\n    }\n    for (record = this._changesHead; record !== null; record = record._nextChanged) {\n      changes.push(stringify(record));\n    }\n    for (record = this._additionsHead; record !== null; record = record._nextAdded) {\n      additions.push(stringify(record));\n    }\n    for (record = this._removalsHead; record !== null; record = record._nextRemoved) {\n      removals.push(stringify(record));\n    }\n\n    return \"map: \" + items.join(', ') + \"\\n\" + \"previous: \" + previous.join(', ') + \"\\n\" +\n           \"additions: \" + additions.join(', ') + \"\\n\" + \"changes: \" + changes.join(', ') + \"\\n\" +\n           \"removals: \" + removals.join(', ') + \"\\n\";\n  }\n\n  /** @internal */\n  _forEach(obj, fn: Function) {\n    if (obj instanceof Map) {\n      (<Map<any, any>>obj).forEach(<any>fn);\n    } else {\n      StringMapWrapper.forEach(obj, fn);\n    }\n  }\n}\n\n\nexport class KeyValueChangeRecord {\n  previousValue: any = null;\n  currentValue: any = null;\n\n  /** @internal */\n  _nextPrevious: KeyValueChangeRecord = null;\n  /** @internal */\n  _next: KeyValueChangeRecord = null;\n  /** @internal */\n  _nextAdded: KeyValueChangeRecord = null;\n  /** @internal */\n  _nextRemoved: KeyValueChangeRecord = null;\n  /** @internal */\n  _prevRemoved: KeyValueChangeRecord = null;\n  /** @internal */\n  _nextChanged: KeyValueChangeRecord = null;\n\n  constructor(public key: any) {}\n\n  toString(): string {\n    return looseIdentical(this.previousValue, this.currentValue) ?\n               stringify(this.key) :\n               (stringify(this.key) + '[' + stringify(this.previousValue) + '->' +\n                stringify(this.currentValue) + ']');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/differs/default_keyvalue_differ.ts\n **/","import {isBlank, isPresent, CONST} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {ChangeDetectorRef} from '../change_detector_ref';\nimport {Provider, SkipSelfMetadata, OptionalMetadata, Injectable} from 'angular2/src/core/di';\n\n/**\n * A strategy for tracking changes over time to an iterable. Used for {@link NgFor} to\n * respond to changes in an iterable by effecting equivalent changes in the DOM.\n */\nexport interface IterableDiffer {\n  diff(object: any): any;\n  onDestroy();\n}\n\n/**\n  * An optional function passed into {@link NgFor} that defines how to track\n  * items in an iterable (e.g. by index or id)\n */\nexport interface TrackByFn { (index: number, item: any): any; }\n\n\n/**\n * Provides a factory for {@link IterableDiffer}.\n */\nexport interface IterableDifferFactory {\n  supports(objects: any): boolean;\n  create(cdRef: ChangeDetectorRef, trackByFn?: TrackByFn): IterableDiffer;\n}\n\n/**\n * A repository of different iterable diffing strategies used by NgFor, NgClass, and others.\n */\n@Injectable()\n@CONST()\nexport class IterableDiffers {\n  constructor(public factories: IterableDifferFactory[]) {}\n\n  static create(factories: IterableDifferFactory[], parent?: IterableDiffers): IterableDiffers {\n    if (isPresent(parent)) {\n      var copied = ListWrapper.clone(parent.factories);\n      factories = factories.concat(copied);\n      return new IterableDiffers(factories);\n    } else {\n      return new IterableDiffers(factories);\n    }\n  }\n\n  /**\n   * Takes an array of {@link IterableDifferFactory} and returns a provider used to extend the\n   * inherited {@link IterableDiffers} instance with the provided factories and return a new\n   * {@link IterableDiffers} instance.\n   *\n   * The following example shows how to extend an existing list of factories,\n         * which will only be applied to the injector for this component and its children.\n         * This step is all that's required to make a new {@link IterableDiffer} available.\n   *\n   * ### Example\n   *\n   * ```\n   * @Component({\n   *   viewProviders: [\n   *     IterableDiffers.extend([new ImmutableListDiffer()])\n   *   ]\n   * })\n   * ```\n   */\n  static extend(factories: IterableDifferFactory[]): Provider {\n    return new Provider(IterableDiffers, {\n      useFactory: (parent: IterableDiffers) => {\n        if (isBlank(parent)) {\n          // Typically would occur when calling IterableDiffers.extend inside of dependencies passed\n          // to\n          // bootstrap(), which would override default pipes instead of extending them.\n          throw new BaseException('Cannot extend IterableDiffers without a parent injector');\n        }\n        return IterableDiffers.create(factories, parent);\n      },\n      // Dependency technically isn't optional, but we can provide a better error message this way.\n      deps: [[IterableDiffers, new SkipSelfMetadata(), new OptionalMetadata()]]\n    });\n  }\n\n  find(iterable: any): IterableDifferFactory {\n    var factory = this.factories.find(f => f.supports(iterable));\n    if (isPresent(factory)) {\n      return factory;\n    } else {\n      throw new BaseException(`Cannot find a differ supporting object '${iterable}'`);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/differs/iterable_differs.ts\n **/","import {isBlank, isPresent, CONST} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {ChangeDetectorRef} from '../change_detector_ref';\nimport {Provider, SkipSelfMetadata, OptionalMetadata, Injectable} from 'angular2/src/core/di';\n\n/**\n * A differ that tracks changes made to an object over time.\n */\nexport interface KeyValueDiffer {\n  diff(object: any);\n  onDestroy();\n}\n\n/**\n * Provides a factory for {@link KeyValueDiffer}.\n */\nexport interface KeyValueDifferFactory {\n  supports(objects: any): boolean;\n  create(cdRef: ChangeDetectorRef): KeyValueDiffer;\n}\n\n/**\n * A repository of different Map diffing strategies used by NgClass, NgStyle, and others.\n */\n@Injectable()\n@CONST()\nexport class KeyValueDiffers {\n  constructor(public factories: KeyValueDifferFactory[]) {}\n\n  static create(factories: KeyValueDifferFactory[], parent?: KeyValueDiffers): KeyValueDiffers {\n    if (isPresent(parent)) {\n      var copied = ListWrapper.clone(parent.factories);\n      factories = factories.concat(copied);\n      return new KeyValueDiffers(factories);\n    } else {\n      return new KeyValueDiffers(factories);\n    }\n  }\n\n  /**\n   * Takes an array of {@link KeyValueDifferFactory} and returns a provider used to extend the\n   * inherited {@link KeyValueDiffers} instance with the provided factories and return a new\n   * {@link KeyValueDiffers} instance.\n   *\n   * The following example shows how to extend an existing list of factories,\n         * which will only be applied to the injector for this component and its children.\n         * This step is all that's required to make a new {@link KeyValueDiffer} available.\n   *\n   * ### Example\n   *\n   * ```\n   * @Component({\n   *   viewProviders: [\n   *     KeyValueDiffers.extend([new ImmutableMapDiffer()])\n   *   ]\n   * })\n   * ```\n   */\n  static extend(factories: KeyValueDifferFactory[]): Provider {\n    return new Provider(KeyValueDiffers, {\n      useFactory: (parent: KeyValueDiffers) => {\n        if (isBlank(parent)) {\n          // Typically would occur when calling KeyValueDiffers.extend inside of dependencies passed\n          // to\n          // bootstrap(), which would override default pipes instead of extending them.\n          throw new BaseException('Cannot extend KeyValueDiffers without a parent injector');\n        }\n        return KeyValueDiffers.create(factories, parent);\n      },\n      // Dependency technically isn't optional, but we can provide a better error message this way.\n      deps: [[KeyValueDiffers, new SkipSelfMetadata(), new OptionalMetadata()]]\n    });\n  }\n\n  find(kv: Object): KeyValueDifferFactory {\n    var factory = this.factories.find(f => f.supports(kv));\n    if (isPresent(factory)) {\n      return factory;\n    } else {\n      throw new BaseException(`Cannot find a differ supporting object '${kv}'`);\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/differs/keyvalue_differs.ts\n **/","import {isPresent, isBlank, FunctionWrapper, StringWrapper} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\n\nimport {AbstractChangeDetector} from './abstract_change_detector';\nimport {EventBinding} from './event_binding';\nimport {BindingRecord, BindingTarget} from './binding_record';\nimport {DirectiveRecord, DirectiveIndex} from './directive_record';\nimport {Locals} from './parser/locals';\nimport {ChangeDispatcher, ChangeDetectorGenConfig} from './interfaces';\nimport {ChangeDetectionUtil, SimpleChange} from './change_detection_util';\nimport {ChangeDetectionStrategy, ChangeDetectorState} from './constants';\nimport {ProtoRecord, RecordType} from './proto_record';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\nimport {ObservableWrapper} from 'angular2/src/facade/async';\n\nexport class DynamicChangeDetector extends AbstractChangeDetector<any> {\n  values: any[];\n  changes: any[];\n  localPipes: any[];\n  prevContexts: any[];\n\n  constructor(id: string, numberOfPropertyProtoRecords: number,\n              propertyBindingTargets: BindingTarget[], directiveIndices: DirectiveIndex[],\n              strategy: ChangeDetectionStrategy, private _records: ProtoRecord[],\n              private _eventBindings: EventBinding[], private _directiveRecords: DirectiveRecord[],\n              private _genConfig: ChangeDetectorGenConfig) {\n    super(id, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices, strategy);\n    var len = _records.length + 1;\n    this.values = ListWrapper.createFixedSize(len);\n    this.localPipes = ListWrapper.createFixedSize(len);\n    this.prevContexts = ListWrapper.createFixedSize(len);\n    this.changes = ListWrapper.createFixedSize(len);\n\n    this.dehydrateDirectives(false);\n  }\n\n  handleEventInternal(eventName: string, elIndex: number, locals: Locals): boolean {\n    var preventDefault = false;\n\n    this._matchingEventBindings(eventName, elIndex)\n        .forEach(rec => {\n          var res = this._processEventBinding(rec, locals);\n          if (res === false) {\n            preventDefault = true;\n          }\n        });\n\n    return preventDefault;\n  }\n\n  /** @internal */\n  _processEventBinding(eb: EventBinding, locals: Locals): any {\n    var values = ListWrapper.createFixedSize(eb.records.length);\n    values[0] = this.values[0];\n\n    for (var protoIdx = 0; protoIdx < eb.records.length; ++protoIdx) {\n      var proto = eb.records[protoIdx];\n\n      if (proto.isSkipRecord()) {\n        protoIdx += this._computeSkipLength(protoIdx, proto, values);\n      } else {\n        if (proto.lastInBinding) {\n          this._markPathAsCheckOnce(proto);\n        }\n        var res = this._calculateCurrValue(proto, values, locals);\n        if (proto.lastInBinding) {\n          return res;\n        } else {\n          this._writeSelf(proto, res, values);\n        }\n      }\n    }\n\n    throw new BaseException(\"Cannot be reached\");\n  }\n\n  private _computeSkipLength(protoIndex: number, proto: ProtoRecord, values: any[]): number {\n    if (proto.mode === RecordType.SkipRecords) {\n      return proto.fixedArgs[0] - protoIndex - 1;\n    }\n\n    if (proto.mode === RecordType.SkipRecordsIf) {\n      let condition = this._readContext(proto, values);\n      return condition ? proto.fixedArgs[0] - protoIndex - 1 : 0;\n    }\n\n    if (proto.mode === RecordType.SkipRecordsIfNot) {\n      let condition = this._readContext(proto, values);\n      return condition ? 0 : proto.fixedArgs[0] - protoIndex - 1;\n    }\n\n    throw new BaseException(\"Cannot be reached\");\n  }\n\n  /** @internal */\n  _markPathAsCheckOnce(proto: ProtoRecord): void {\n    if (!proto.bindingRecord.isDefaultChangeDetection()) {\n      var dir = proto.bindingRecord.directiveRecord;\n      this._getDetectorFor(dir.directiveIndex).markPathToRootAsCheckOnce();\n    }\n  }\n\n  /** @internal */\n  _matchingEventBindings(eventName: string, elIndex: number): EventBinding[] {\n    return this._eventBindings.filter(eb => eb.eventName == eventName && eb.elIndex === elIndex);\n  }\n\n  hydrateDirectives(dispatcher: ChangeDispatcher): void {\n    this.values[0] = this.context;\n    this.dispatcher = dispatcher;\n\n    this.outputSubscriptions = [];\n    for (var i = 0; i < this._directiveRecords.length; ++i) {\n      var r = this._directiveRecords[i];\n      if (isPresent(r.outputs)) {\n        r.outputs.forEach(output => {\n          var eventHandler =\n              <any>this._createEventHandler(r.directiveIndex.elementIndex, output[1]);\n          var directive = this._getDirectiveFor(r.directiveIndex);\n          var getter = reflector.getter(output[0]);\n          this.outputSubscriptions.push(\n              ObservableWrapper.subscribe(getter(directive), eventHandler));\n        });\n      }\n    }\n  }\n\n  private _createEventHandler(boundElementIndex: number, eventName: string): Function {\n    return (event) => this.handleEvent(eventName, boundElementIndex, event);\n  }\n\n\n  dehydrateDirectives(destroyPipes: boolean) {\n    if (destroyPipes) {\n      this._destroyPipes();\n      this._destroyDirectives();\n    }\n    this.values[0] = null;\n    ListWrapper.fill(this.values, ChangeDetectionUtil.uninitialized, 1);\n    ListWrapper.fill(this.changes, false);\n    ListWrapper.fill(this.localPipes, null);\n    ListWrapper.fill(this.prevContexts, ChangeDetectionUtil.uninitialized);\n  }\n\n  /** @internal */\n  _destroyPipes() {\n    for (var i = 0; i < this.localPipes.length; ++i) {\n      if (isPresent(this.localPipes[i])) {\n        ChangeDetectionUtil.callPipeOnDestroy(this.localPipes[i]);\n      }\n    }\n  }\n\n  /** @internal */\n  _destroyDirectives() {\n    for (var i = 0; i < this._directiveRecords.length; ++i) {\n      var record = this._directiveRecords[i];\n      if (record.callOnDestroy) {\n        this._getDirectiveFor(record.directiveIndex).ngOnDestroy();\n      }\n    }\n  }\n\n  checkNoChanges(): void { this.runDetectChanges(true); }\n\n  detectChangesInRecordsInternal(throwOnChange: boolean) {\n    var protos = this._records;\n\n    var changes = null;\n    var isChanged = false;\n    for (var protoIdx = 0; protoIdx < protos.length; ++protoIdx) {\n      var proto: ProtoRecord = protos[protoIdx];\n      var bindingRecord = proto.bindingRecord;\n      var directiveRecord = bindingRecord.directiveRecord;\n\n      if (this._firstInBinding(proto)) {\n        this.propertyBindingIndex = proto.propertyBindingIndex;\n      }\n\n      if (proto.isLifeCycleRecord()) {\n        if (proto.name === \"DoCheck\" && !throwOnChange) {\n          this._getDirectiveFor(directiveRecord.directiveIndex).ngDoCheck();\n        } else if (proto.name === \"OnInit\" && !throwOnChange &&\n                   this.state == ChangeDetectorState.NeverChecked) {\n          this._getDirectiveFor(directiveRecord.directiveIndex).ngOnInit();\n        } else if (proto.name === \"OnChanges\" && isPresent(changes) && !throwOnChange) {\n          this._getDirectiveFor(directiveRecord.directiveIndex).ngOnChanges(changes);\n        }\n      } else if (proto.isSkipRecord()) {\n        protoIdx += this._computeSkipLength(protoIdx, proto, this.values);\n      } else {\n        var change = this._check(proto, throwOnChange, this.values, this.locals);\n        if (isPresent(change)) {\n          this._updateDirectiveOrElement(change, bindingRecord);\n          isChanged = true;\n          changes = this._addChange(bindingRecord, change, changes);\n        }\n      }\n\n      if (proto.lastInDirective) {\n        changes = null;\n        if (isChanged && !bindingRecord.isDefaultChangeDetection()) {\n          this._getDetectorFor(directiveRecord.directiveIndex).markAsCheckOnce();\n        }\n\n        isChanged = false;\n      }\n    }\n  }\n\n  /** @internal */\n  _firstInBinding(r: ProtoRecord): boolean {\n    var prev = ChangeDetectionUtil.protoByIndex(this._records, r.selfIndex - 1);\n    return isBlank(prev) || prev.bindingRecord !== r.bindingRecord;\n  }\n\n  afterContentLifecycleCallbacksInternal() {\n    var dirs = this._directiveRecords;\n    for (var i = dirs.length - 1; i >= 0; --i) {\n      var dir = dirs[i];\n      if (dir.callAfterContentInit && this.state == ChangeDetectorState.NeverChecked) {\n        this._getDirectiveFor(dir.directiveIndex).ngAfterContentInit();\n      }\n\n      if (dir.callAfterContentChecked) {\n        this._getDirectiveFor(dir.directiveIndex).ngAfterContentChecked();\n      }\n    }\n  }\n\n  afterViewLifecycleCallbacksInternal() {\n    var dirs = this._directiveRecords;\n    for (var i = dirs.length - 1; i >= 0; --i) {\n      var dir = dirs[i];\n      if (dir.callAfterViewInit && this.state == ChangeDetectorState.NeverChecked) {\n        this._getDirectiveFor(dir.directiveIndex).ngAfterViewInit();\n      }\n      if (dir.callAfterViewChecked) {\n        this._getDirectiveFor(dir.directiveIndex).ngAfterViewChecked();\n      }\n    }\n  }\n\n  /** @internal */\n  private _updateDirectiveOrElement(change, bindingRecord) {\n    if (isBlank(bindingRecord.directiveRecord)) {\n      super.notifyDispatcher(change.currentValue);\n    } else {\n      var directiveIndex = bindingRecord.directiveRecord.directiveIndex;\n      bindingRecord.setter(this._getDirectiveFor(directiveIndex), change.currentValue);\n    }\n\n    if (this._genConfig.logBindingUpdate) {\n      super.logBindingUpdate(change.currentValue);\n    }\n  }\n\n  /** @internal */\n  private _addChange(bindingRecord: BindingRecord, change, changes) {\n    if (bindingRecord.callOnChanges()) {\n      return super.addChange(changes, change.previousValue, change.currentValue);\n    } else {\n      return changes;\n    }\n  }\n\n  /** @internal */\n  private _getDirectiveFor(directiveIndex: DirectiveIndex) {\n    return this.dispatcher.getDirectiveFor(directiveIndex);\n  }\n\n  /** @internal */\n  private _getDetectorFor(directiveIndex: DirectiveIndex) {\n    return this.dispatcher.getDetectorFor(directiveIndex);\n  }\n\n  /** @internal */\n  private _check(proto: ProtoRecord, throwOnChange: boolean, values: any[],\n                 locals: Locals): SimpleChange {\n    if (proto.isPipeRecord()) {\n      return this._pipeCheck(proto, throwOnChange, values);\n    } else {\n      return this._referenceCheck(proto, throwOnChange, values, locals);\n    }\n  }\n\n  /** @internal */\n  private _referenceCheck(proto: ProtoRecord, throwOnChange: boolean, values: any[],\n                          locals: Locals) {\n    if (this._pureFuncAndArgsDidNotChange(proto)) {\n      this._setChanged(proto, false);\n      return null;\n    }\n\n    var currValue = this._calculateCurrValue(proto, values, locals);\n\n    if (proto.shouldBeChecked()) {\n      var prevValue = this._readSelf(proto, values);\n      var detectedChange = throwOnChange ?\n                               !ChangeDetectionUtil.devModeEqual(prevValue, currValue) :\n                               ChangeDetectionUtil.looseNotIdentical(prevValue, currValue);\n      if (detectedChange) {\n        if (proto.lastInBinding) {\n          var change = ChangeDetectionUtil.simpleChange(prevValue, currValue);\n          if (throwOnChange) this.throwOnChangeError(prevValue, currValue);\n\n          this._writeSelf(proto, currValue, values);\n          this._setChanged(proto, true);\n          return change;\n        } else {\n          this._writeSelf(proto, currValue, values);\n          this._setChanged(proto, true);\n          return null;\n        }\n      } else {\n        this._setChanged(proto, false);\n        return null;\n      }\n\n    } else {\n      this._writeSelf(proto, currValue, values);\n      this._setChanged(proto, true);\n      return null;\n    }\n  }\n\n  private _calculateCurrValue(proto: ProtoRecord, values: any[], locals: Locals) {\n    switch (proto.mode) {\n      case RecordType.Self:\n        return this._readContext(proto, values);\n\n      case RecordType.Const:\n        return proto.funcOrValue;\n\n      case RecordType.PropertyRead:\n        var context = this._readContext(proto, values);\n        return proto.funcOrValue(context);\n\n      case RecordType.SafeProperty:\n        var context = this._readContext(proto, values);\n        return isBlank(context) ? null : proto.funcOrValue(context);\n\n      case RecordType.PropertyWrite:\n        var context = this._readContext(proto, values);\n        var value = this._readArgs(proto, values)[0];\n        proto.funcOrValue(context, value);\n        return value;\n\n      case RecordType.KeyedWrite:\n        var context = this._readContext(proto, values);\n        var key = this._readArgs(proto, values)[0];\n        var value = this._readArgs(proto, values)[1];\n        context[key] = value;\n        return value;\n\n      case RecordType.Local:\n        return locals.get(proto.name);\n\n      case RecordType.InvokeMethod:\n        var context = this._readContext(proto, values);\n        var args = this._readArgs(proto, values);\n        return proto.funcOrValue(context, args);\n\n      case RecordType.SafeMethodInvoke:\n        var context = this._readContext(proto, values);\n        if (isBlank(context)) {\n          return null;\n        }\n        var args = this._readArgs(proto, values);\n        return proto.funcOrValue(context, args);\n\n      case RecordType.KeyedRead:\n        var arg = this._readArgs(proto, values)[0];\n        return this._readContext(proto, values)[arg];\n\n      case RecordType.Chain:\n        var args = this._readArgs(proto, values);\n        return args[args.length - 1];\n\n      case RecordType.InvokeClosure:\n        return FunctionWrapper.apply(this._readContext(proto, values),\n                                     this._readArgs(proto, values));\n\n      case RecordType.Interpolate:\n      case RecordType.PrimitiveOp:\n      case RecordType.CollectionLiteral:\n        return FunctionWrapper.apply(proto.funcOrValue, this._readArgs(proto, values));\n\n      default:\n        throw new BaseException(`Unknown operation ${proto.mode}`);\n    }\n  }\n\n  private _pipeCheck(proto: ProtoRecord, throwOnChange: boolean, values: any[]) {\n    var context = this._readContext(proto, values);\n    var selectedPipe = this._pipeFor(proto, context);\n    if (!selectedPipe.pure || this._argsOrContextChanged(proto)) {\n      var args = this._readArgs(proto, values);\n      var currValue = selectedPipe.pipe.transform(context, args);\n\n      if (proto.shouldBeChecked()) {\n        var prevValue = this._readSelf(proto, values);\n        var detectedChange = throwOnChange ?\n                                 !ChangeDetectionUtil.devModeEqual(prevValue, currValue) :\n                                 ChangeDetectionUtil.looseNotIdentical(prevValue, currValue);\n        if (detectedChange) {\n          currValue = ChangeDetectionUtil.unwrapValue(currValue);\n\n          if (proto.lastInBinding) {\n            var change = ChangeDetectionUtil.simpleChange(prevValue, currValue);\n            if (throwOnChange) this.throwOnChangeError(prevValue, currValue);\n\n            this._writeSelf(proto, currValue, values);\n            this._setChanged(proto, true);\n\n            return change;\n\n          } else {\n            this._writeSelf(proto, currValue, values);\n            this._setChanged(proto, true);\n            return null;\n          }\n        } else {\n          this._setChanged(proto, false);\n          return null;\n        }\n      } else {\n        this._writeSelf(proto, currValue, values);\n        this._setChanged(proto, true);\n        return null;\n      }\n    }\n  }\n\n  private _pipeFor(proto: ProtoRecord, context) {\n    var storedPipe = this._readPipe(proto);\n    if (isPresent(storedPipe)) return storedPipe;\n\n    var pipe = this.pipes.get(proto.name);\n    this._writePipe(proto, pipe);\n    return pipe;\n  }\n\n  private _readContext(proto: ProtoRecord, values: any[]) {\n    if (proto.contextIndex == -1) {\n      return this._getDirectiveFor(proto.directiveIndex);\n    }\n    return values[proto.contextIndex];\n  }\n\n  private _readSelf(proto: ProtoRecord, values: any[]) { return values[proto.selfIndex]; }\n\n  private _writeSelf(proto: ProtoRecord, value, values: any[]) { values[proto.selfIndex] = value; }\n\n  private _readPipe(proto: ProtoRecord) { return this.localPipes[proto.selfIndex]; }\n\n  private _writePipe(proto: ProtoRecord, value) { this.localPipes[proto.selfIndex] = value; }\n\n  private _setChanged(proto: ProtoRecord, value: boolean) {\n    if (proto.argumentToPureFunction) this.changes[proto.selfIndex] = value;\n  }\n\n  private _pureFuncAndArgsDidNotChange(proto: ProtoRecord): boolean {\n    return proto.isPureFunction() && !this._argsChanged(proto);\n  }\n\n  private _argsChanged(proto: ProtoRecord): boolean {\n    var args = proto.args;\n    for (var i = 0; i < args.length; ++i) {\n      if (this.changes[args[i]]) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private _argsOrContextChanged(proto: ProtoRecord): boolean {\n    return this._argsChanged(proto) || this.changes[proto.contextIndex];\n  }\n\n  private _readArgs(proto: ProtoRecord, values: any[]) {\n    var res = ListWrapper.createFixedSize(proto.args.length);\n    var args = proto.args;\n    for (var i = 0; i < args.length; ++i) {\n      res[i] = values[args[i]];\n    }\n    return res;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/dynamic_change_detector.ts\n **/","import {BaseException, WrappedException} from \"angular2/src/facade/exceptions\";\n\n/**\n * An error thrown if application changes model breaking the top-down data flow.\n *\n * This exception is only thrown in dev mode.\n *\n * <!-- TODO: Add a link once the dev mode option is configurable -->\n *\n * ### Example\n *\n * ```typescript\n * @Component({\n *   selector: 'parent',\n *   template: `\n *     <child [prop]=\"parentProp\"></child>\n *   `,\n *   directives: [forwardRef(() => Child)]\n * })\n * class Parent {\n *   parentProp = \"init\";\n * }\n *\n * @Directive({selector: 'child', inputs: ['prop']})\n * class Child {\n *   constructor(public parent: Parent) {}\n *\n *   set prop(v) {\n *     // this updates the parent property, which is disallowed during change detection\n *     // this will result in ExpressionChangedAfterItHasBeenCheckedException\n *     this.parent.parentProp = \"updated\";\n *   }\n * }\n * ```\n */\nexport class ExpressionChangedAfterItHasBeenCheckedException extends BaseException {\n  constructor(exp: string, oldValue: any, currValue: any, context: any) {\n    super(`Expression '${exp}' has changed after it was checked. ` +\n          `Previous value: '${oldValue}'. Current value: '${currValue}'`);\n  }\n}\n\n/**\n * Thrown when an expression evaluation raises an exception.\n *\n * This error wraps the original exception to attach additional contextual information that can\n * be useful for debugging.\n *\n * ### Example ([live demo](http://plnkr.co/edit/2Kywoz?p=preview))\n *\n * ```typescript\n * @Directive({selector: 'child', inputs: ['prop']})\n * class Child {\n *   prop;\n * }\n *\n * @Component({\n *   selector: 'app',\n *   template: `\n *     <child [prop]=\"field.first\"></child>\n *   `,\n *   directives: [Child]\n * })\n * class App {\n *   field = null;\n * }\n *\n * bootstrap(App);\n * ```\n *\n * You can access the original exception and stack through the `originalException` and\n * `originalStack` properties.\n */\nexport class ChangeDetectionError extends WrappedException {\n  /**\n   * Information about the expression that triggered the exception.\n   */\n  location: string;\n\n  constructor(exp: string, originalException: any, originalStack: any, context: any) {\n    super(`${originalException} in [${exp}]`, originalException, originalStack, context);\n    this.location = exp;\n  }\n}\n\n/**\n * Thrown when change detector executes on dehydrated view.\n *\n * This error indicates a bug in the framework.\n *\n * This is an internal Angular error.\n */\nexport class DehydratedException extends BaseException {\n  constructor(details: string) { super(`Attempt to use a dehydrated detector: ${details}`); }\n}\n\n/**\n * Wraps an exception thrown by an event handler.\n */\nexport class EventEvaluationError extends WrappedException {\n  constructor(eventName: string, originalException: any, originalStack: any, context: any) {\n    super(`Error during evaluation of \"${eventName}\"`, originalException, originalStack, context);\n  }\n}\n\n/**\n * Error context included when an event handler throws an exception.\n */\nexport class EventEvaluationErrorContext {\n  constructor(public element: any, public componentElement: any, public context: any,\n              public locals: any, public injector: any) {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/exceptions.ts\n **/","import {Injectable} from 'angular2/src/core/di/decorators';\nimport {ListWrapper, SetWrapper} from \"angular2/src/facade/collection\";\nimport {NumberWrapper, StringJoiner, StringWrapper, isPresent} from \"angular2/src/facade/lang\";\nimport {BaseException} from 'angular2/src/facade/exceptions';\n\nexport enum TokenType {\n  Character,\n  Identifier,\n  Keyword,\n  String,\n  Operator,\n  Number\n}\n\n@Injectable()\nexport class Lexer {\n  tokenize(text: string): any[] {\n    var scanner = new _Scanner(text);\n    var tokens = [];\n    var token = scanner.scanToken();\n    while (token != null) {\n      tokens.push(token);\n      token = scanner.scanToken();\n    }\n    return tokens;\n  }\n}\n\nexport class Token {\n  constructor(public index: number, public type: TokenType, public numValue: number,\n              public strValue: string) {}\n\n  isCharacter(code: number): boolean {\n    return (this.type == TokenType.Character && this.numValue == code);\n  }\n\n  isNumber(): boolean { return (this.type == TokenType.Number); }\n\n  isString(): boolean { return (this.type == TokenType.String); }\n\n  isOperator(operater: string): boolean {\n    return (this.type == TokenType.Operator && this.strValue == operater);\n  }\n\n  isIdentifier(): boolean { return (this.type == TokenType.Identifier); }\n\n  isKeyword(): boolean { return (this.type == TokenType.Keyword); }\n\n  isKeywordVar(): boolean { return (this.type == TokenType.Keyword && this.strValue == \"var\"); }\n\n  isKeywordNull(): boolean { return (this.type == TokenType.Keyword && this.strValue == \"null\"); }\n\n  isKeywordUndefined(): boolean {\n    return (this.type == TokenType.Keyword && this.strValue == \"undefined\");\n  }\n\n  isKeywordTrue(): boolean { return (this.type == TokenType.Keyword && this.strValue == \"true\"); }\n\n  isKeywordFalse(): boolean { return (this.type == TokenType.Keyword && this.strValue == \"false\"); }\n\n  toNumber(): number {\n    // -1 instead of NULL ok?\n    return (this.type == TokenType.Number) ? this.numValue : -1;\n  }\n\n  toString(): string {\n    switch (this.type) {\n      case TokenType.Character:\n      case TokenType.Identifier:\n      case TokenType.Keyword:\n      case TokenType.Operator:\n      case TokenType.String:\n        return this.strValue;\n      case TokenType.Number:\n        return this.numValue.toString();\n      default:\n        return null;\n    }\n  }\n}\n\nfunction newCharacterToken(index: number, code: number): Token {\n  return new Token(index, TokenType.Character, code, StringWrapper.fromCharCode(code));\n}\n\nfunction newIdentifierToken(index: number, text: string): Token {\n  return new Token(index, TokenType.Identifier, 0, text);\n}\n\nfunction newKeywordToken(index: number, text: string): Token {\n  return new Token(index, TokenType.Keyword, 0, text);\n}\n\nfunction newOperatorToken(index: number, text: string): Token {\n  return new Token(index, TokenType.Operator, 0, text);\n}\n\nfunction newStringToken(index: number, text: string): Token {\n  return new Token(index, TokenType.String, 0, text);\n}\n\nfunction newNumberToken(index: number, n: number): Token {\n  return new Token(index, TokenType.Number, n, \"\");\n}\n\n\nexport var EOF: Token = new Token(-1, TokenType.Character, 0, \"\");\n\nexport const $EOF = 0;\nexport const $TAB = 9;\nexport const $LF = 10;\nexport const $VTAB = 11;\nexport const $FF = 12;\nexport const $CR = 13;\nexport const $SPACE = 32;\nexport const $BANG = 33;\nexport const $DQ = 34;\nexport const $HASH = 35;\nexport const $$ = 36;\nexport const $PERCENT = 37;\nexport const $AMPERSAND = 38;\nexport const $SQ = 39;\nexport const $LPAREN = 40;\nexport const $RPAREN = 41;\nexport const $STAR = 42;\nexport const $PLUS = 43;\nexport const $COMMA = 44;\nexport const $MINUS = 45;\nexport const $PERIOD = 46;\nexport const $SLASH = 47;\nexport const $COLON = 58;\nexport const $SEMICOLON = 59;\nexport const $LT = 60;\nexport const $EQ = 61;\nexport const $GT = 62;\nexport const $QUESTION = 63;\n\nconst $0 = 48;\nconst $9 = 57;\n\nconst $A = 65, $E = 69, $Z = 90;\n\nexport const $LBRACKET = 91;\nexport const $BACKSLASH = 92;\nexport const $RBRACKET = 93;\nconst $CARET = 94;\nconst $_ = 95;\n\nconst $a = 97, $e = 101, $f = 102, $n = 110, $r = 114, $t = 116, $u = 117, $v = 118, $z = 122;\n\nexport const $LBRACE = 123;\nexport const $BAR = 124;\nexport const $RBRACE = 125;\nconst $NBSP = 160;\n\nexport class ScannerError extends BaseException {\n  constructor(public message) { super(); }\n\n  toString(): string { return this.message; }\n}\n\nclass _Scanner {\n  length: number;\n  peek: number = 0;\n  index: number = -1;\n\n  constructor(public input: string) {\n    this.length = input.length;\n    this.advance();\n  }\n\n  advance() {\n    this.peek =\n        ++this.index >= this.length ? $EOF : StringWrapper.charCodeAt(this.input, this.index);\n  }\n\n  scanToken(): Token {\n    var input = this.input, length = this.length, peek = this.peek, index = this.index;\n\n    // Skip whitespace.\n    while (peek <= $SPACE) {\n      if (++index >= length) {\n        peek = $EOF;\n        break;\n      } else {\n        peek = StringWrapper.charCodeAt(input, index);\n      }\n    }\n\n    this.peek = peek;\n    this.index = index;\n\n    if (index >= length) {\n      return null;\n    }\n\n    // Handle identifiers and numbers.\n    if (isIdentifierStart(peek)) return this.scanIdentifier();\n    if (isDigit(peek)) return this.scanNumber(index);\n\n    var start: number = index;\n    switch (peek) {\n      case $PERIOD:\n        this.advance();\n        return isDigit(this.peek) ? this.scanNumber(start) : newCharacterToken(start, $PERIOD);\n      case $LPAREN:\n      case $RPAREN:\n      case $LBRACE:\n      case $RBRACE:\n      case $LBRACKET:\n      case $RBRACKET:\n      case $COMMA:\n      case $COLON:\n      case $SEMICOLON:\n        return this.scanCharacter(start, peek);\n      case $SQ:\n      case $DQ:\n        return this.scanString();\n      case $HASH:\n      case $PLUS:\n      case $MINUS:\n      case $STAR:\n      case $SLASH:\n      case $PERCENT:\n      case $CARET:\n        return this.scanOperator(start, StringWrapper.fromCharCode(peek));\n      case $QUESTION:\n        return this.scanComplexOperator(start, '?', $PERIOD, '.');\n      case $LT:\n      case $GT:\n        return this.scanComplexOperator(start, StringWrapper.fromCharCode(peek), $EQ, '=');\n      case $BANG:\n      case $EQ:\n        return this.scanComplexOperator(start, StringWrapper.fromCharCode(peek), $EQ, '=', $EQ,\n                                        '=');\n      case $AMPERSAND:\n        return this.scanComplexOperator(start, '&', $AMPERSAND, '&');\n      case $BAR:\n        return this.scanComplexOperator(start, '|', $BAR, '|');\n      case $NBSP:\n        while (isWhitespace(this.peek)) this.advance();\n        return this.scanToken();\n    }\n\n    this.error(`Unexpected character [${StringWrapper.fromCharCode(peek)}]`, 0);\n    return null;\n  }\n\n  scanCharacter(start: number, code: number): Token {\n    this.advance();\n    return newCharacterToken(start, code);\n  }\n\n\n  scanOperator(start: number, str: string): Token {\n    this.advance();\n    return newOperatorToken(start, str);\n  }\n\n  /**\n   * Tokenize a 2/3 char long operator\n   *\n   * @param start start index in the expression\n   * @param one first symbol (always part of the operator)\n   * @param twoCode code point for the second symbol\n   * @param two second symbol (part of the operator when the second code point matches)\n   * @param threeCode code point for the third symbol\n   * @param three third symbol (part of the operator when provided and matches source expression)\n   * @returns {Token}\n   */\n  scanComplexOperator(start: number, one: string, twoCode: number, two: string, threeCode?: number,\n                      three?: string): Token {\n    this.advance();\n    var str: string = one;\n    if (this.peek == twoCode) {\n      this.advance();\n      str += two;\n    }\n    if (isPresent(threeCode) && this.peek == threeCode) {\n      this.advance();\n      str += three;\n    }\n    return newOperatorToken(start, str);\n  }\n\n  scanIdentifier(): Token {\n    var start: number = this.index;\n    this.advance();\n    while (isIdentifierPart(this.peek)) this.advance();\n    var str: string = this.input.substring(start, this.index);\n    if (SetWrapper.has(KEYWORDS, str)) {\n      return newKeywordToken(start, str);\n    } else {\n      return newIdentifierToken(start, str);\n    }\n  }\n\n  scanNumber(start: number): Token {\n    var simple: boolean = (this.index === start);\n    this.advance();  // Skip initial digit.\n    while (true) {\n      if (isDigit(this.peek)) {\n        // Do nothing.\n      } else if (this.peek == $PERIOD) {\n        simple = false;\n      } else if (isExponentStart(this.peek)) {\n        this.advance();\n        if (isExponentSign(this.peek)) this.advance();\n        if (!isDigit(this.peek)) this.error('Invalid exponent', -1);\n        simple = false;\n      } else {\n        break;\n      }\n      this.advance();\n    }\n    var str: string = this.input.substring(start, this.index);\n    // TODO\n    var value: number =\n        simple ? NumberWrapper.parseIntAutoRadix(str) : NumberWrapper.parseFloat(str);\n    return newNumberToken(start, value);\n  }\n\n  scanString(): Token {\n    var start: number = this.index;\n    var quote: number = this.peek;\n    this.advance();  // Skip initial quote.\n\n    var buffer: StringJoiner;\n    var marker: number = this.index;\n    var input: string = this.input;\n\n    while (this.peek != quote) {\n      if (this.peek == $BACKSLASH) {\n        if (buffer == null) buffer = new StringJoiner();\n        buffer.add(input.substring(marker, this.index));\n        this.advance();\n        var unescapedCode: number;\n        if (this.peek == $u) {\n          // 4 character hex code for unicode character.\n          var hex: string = input.substring(this.index + 1, this.index + 5);\n          try {\n            unescapedCode = NumberWrapper.parseInt(hex, 16);\n          } catch (e) {\n            this.error(`Invalid unicode escape [\\\\u${hex}]`, 0);\n          }\n          for (var i: number = 0; i < 5; i++) {\n            this.advance();\n          }\n        } else {\n          unescapedCode = unescape(this.peek);\n          this.advance();\n        }\n        buffer.add(StringWrapper.fromCharCode(unescapedCode));\n        marker = this.index;\n      } else if (this.peek == $EOF) {\n        this.error('Unterminated quote', 0);\n      } else {\n        this.advance();\n      }\n    }\n\n    var last: string = input.substring(marker, this.index);\n    this.advance();  // Skip terminating quote.\n\n    // Compute the unescaped string value.\n    var unescaped: string = last;\n    if (buffer != null) {\n      buffer.add(last);\n      unescaped = buffer.toString();\n    }\n    return newStringToken(start, unescaped);\n  }\n\n  error(message: string, offset: number) {\n    var position: number = this.index + offset;\n    throw new ScannerError(\n        `Lexer Error: ${message} at column ${position} in expression [${this.input}]`);\n  }\n}\n\nfunction isWhitespace(code: number): boolean {\n  return (code >= $TAB && code <= $SPACE) || (code == $NBSP);\n}\n\nfunction isIdentifierStart(code: number): boolean {\n  return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || (code == $_) || (code == $$);\n}\n\nexport function isIdentifier(input: string): boolean {\n  if (input.length == 0) return false;\n  var scanner = new _Scanner(input);\n  if (!isIdentifierStart(scanner.peek)) return false;\n  scanner.advance();\n  while (scanner.peek !== $EOF) {\n    if (!isIdentifierPart(scanner.peek)) return false;\n    scanner.advance();\n  }\n  return true;\n}\n\nfunction isIdentifierPart(code: number): boolean {\n  return ($a <= code && code <= $z) || ($A <= code && code <= $Z) || ($0 <= code && code <= $9) ||\n         (code == $_) || (code == $$);\n}\n\nfunction isDigit(code: number): boolean {\n  return $0 <= code && code <= $9;\n}\n\nfunction isExponentStart(code: number): boolean {\n  return code == $e || code == $E;\n}\n\nfunction isExponentSign(code: number): boolean {\n  return code == $MINUS || code == $PLUS;\n}\n\nfunction unescape(code: number): number {\n  switch (code) {\n    case $n:\n      return $LF;\n    case $f:\n      return $FF;\n    case $r:\n      return $CR;\n    case $t:\n      return $TAB;\n    case $v:\n      return $VTAB;\n    default:\n      return code;\n  }\n}\n\nvar OPERATORS = SetWrapper.createFromList([\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\nvar KEYWORDS =\n    SetWrapper.createFromList(['var', 'null', 'undefined', 'true', 'false', 'if', 'else']);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/parser/lexer.ts\n **/","import {isPresent} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper, MapWrapper} from 'angular2/src/facade/collection';\n\nexport class Locals {\n  constructor(public parent: Locals, public current: Map<any, any>) {}\n\n  contains(name: string): boolean {\n    if (this.current.has(name)) {\n      return true;\n    }\n\n    if (isPresent(this.parent)) {\n      return this.parent.contains(name);\n    }\n\n    return false;\n  }\n\n  get(name: string): any {\n    if (this.current.has(name)) {\n      return this.current.get(name);\n    }\n\n    if (isPresent(this.parent)) {\n      return this.parent.get(name);\n    }\n\n    throw new BaseException(`Cannot find '${name}'`);\n  }\n\n  set(name: string, value: any): void {\n    // TODO(rado): consider removing this check if we can guarantee this is not\n    // exposed to the public API.\n    // TODO: vsavkin maybe it should check only the local map\n    if (this.current.has(name)) {\n      this.current.set(name, value);\n    } else {\n      throw new BaseException(\n          `Setting of new keys post-construction is not supported. Key: ${name}.`);\n    }\n  }\n\n  clearLocalValues(): void { MapWrapper.clearValues(this.current); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/parser/locals.ts\n **/","import {Type, isBlank, isPresent, isString} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\n\nimport {\n  PropertyRead,\n  PropertyWrite,\n  KeyedWrite,\n  AST,\n  ASTWithSource,\n  AstVisitor,\n  Binary,\n  Chain,\n  Conditional,\n  BindingPipe,\n  FunctionCall,\n  ImplicitReceiver,\n  Interpolation,\n  KeyedRead,\n  LiteralArray,\n  LiteralMap,\n  LiteralPrimitive,\n  MethodCall,\n  PrefixNot,\n  Quote,\n  SafePropertyRead,\n  SafeMethodCall\n} from './parser/ast';\n\nimport {ChangeDetector, ProtoChangeDetector, ChangeDetectorDefinition} from './interfaces';\nimport {ChangeDetectionUtil} from './change_detection_util';\nimport {DynamicChangeDetector} from './dynamic_change_detector';\nimport {BindingRecord, BindingTarget} from './binding_record';\nimport {DirectiveRecord, DirectiveIndex} from './directive_record';\nimport {EventBinding} from './event_binding';\n\nimport {coalesce} from './coalesce';\nimport {ProtoRecord, RecordType} from './proto_record';\n\nexport class DynamicProtoChangeDetector implements ProtoChangeDetector {\n  /** @internal */\n  _propertyBindingRecords: ProtoRecord[];\n  /** @internal */\n  _propertyBindingTargets: BindingTarget[];\n  /** @internal */\n  _eventBindingRecords: EventBinding[];\n  /** @internal */\n  _directiveIndices: DirectiveIndex[];\n\n  constructor(private _definition: ChangeDetectorDefinition) {\n    this._propertyBindingRecords = createPropertyRecords(_definition);\n    this._eventBindingRecords = createEventRecords(_definition);\n    this._propertyBindingTargets = this._definition.bindingRecords.map(b => b.target);\n    this._directiveIndices = this._definition.directiveRecords.map(d => d.directiveIndex);\n  }\n\n  instantiate(): ChangeDetector {\n    return new DynamicChangeDetector(\n        this._definition.id, this._propertyBindingRecords.length, this._propertyBindingTargets,\n        this._directiveIndices, this._definition.strategy, this._propertyBindingRecords,\n        this._eventBindingRecords, this._definition.directiveRecords, this._definition.genConfig);\n  }\n}\n\nexport function createPropertyRecords(definition: ChangeDetectorDefinition): ProtoRecord[] {\n  var recordBuilder = new ProtoRecordBuilder();\n  ListWrapper.forEachWithIndex(\n      definition.bindingRecords,\n      (b: BindingRecord, index: number) => recordBuilder.add(b, definition.variableNames, index));\n  return coalesce(recordBuilder.records);\n}\n\nexport function createEventRecords(definition: ChangeDetectorDefinition): EventBinding[] {\n  // TODO: vsavkin: remove $event when the compiler handles render-side variables properly\n  var varNames = ListWrapper.concat(['$event'], definition.variableNames);\n  return definition.eventRecords.map(er => {\n    var records = _ConvertAstIntoProtoRecords.create(er, varNames);\n    var dirIndex = er.implicitReceiver instanceof DirectiveIndex ? er.implicitReceiver : null;\n    return new EventBinding(er.target.name, er.target.elementIndex, dirIndex, records);\n  });\n}\n\nexport class ProtoRecordBuilder {\n  records: ProtoRecord[] = [];\n\n  add(b: BindingRecord, variableNames: string[], bindingIndex: number) {\n    var oldLast = ListWrapper.last(this.records);\n    if (isPresent(oldLast) && oldLast.bindingRecord.directiveRecord == b.directiveRecord) {\n      oldLast.lastInDirective = false;\n    }\n    var numberOfRecordsBefore = this.records.length;\n    this._appendRecords(b, variableNames, bindingIndex);\n    var newLast = ListWrapper.last(this.records);\n    if (isPresent(newLast) && newLast !== oldLast) {\n      newLast.lastInBinding = true;\n      newLast.lastInDirective = true;\n      this._setArgumentToPureFunction(numberOfRecordsBefore);\n    }\n  }\n\n  /** @internal */\n  _setArgumentToPureFunction(startIndex: number): void {\n    for (var i = startIndex; i < this.records.length; ++i) {\n      var rec = this.records[i];\n      if (rec.isPureFunction()) {\n        rec.args.forEach(recordIndex => this.records[recordIndex - 1].argumentToPureFunction =\n                             true);\n      }\n      if (rec.mode === RecordType.Pipe) {\n        rec.args.forEach(recordIndex => this.records[recordIndex - 1].argumentToPureFunction =\n                             true);\n        this.records[rec.contextIndex - 1].argumentToPureFunction = true;\n      }\n    }\n  }\n\n  /** @internal */\n  _appendRecords(b: BindingRecord, variableNames: string[], bindingIndex: number) {\n    if (b.isDirectiveLifecycle()) {\n      this.records.push(new ProtoRecord(RecordType.DirectiveLifecycle, b.lifecycleEvent, null, [],\n                                        [], -1, null, this.records.length + 1, b, false, false,\n                                        false, false, null));\n    } else {\n      _ConvertAstIntoProtoRecords.append(this.records, b, variableNames, bindingIndex);\n    }\n  }\n}\n\nclass _ConvertAstIntoProtoRecords implements AstVisitor {\n  constructor(private _records: ProtoRecord[], private _bindingRecord: BindingRecord,\n              private _variableNames: string[], private _bindingIndex: number) {}\n\n  static append(records: ProtoRecord[], b: BindingRecord, variableNames: string[],\n                bindingIndex: number) {\n    var c = new _ConvertAstIntoProtoRecords(records, b, variableNames, bindingIndex);\n    b.ast.visit(c);\n  }\n\n  static create(b: BindingRecord, variableNames: any[]): ProtoRecord[] {\n    var rec = [];\n    _ConvertAstIntoProtoRecords.append(rec, b, variableNames, null);\n    rec[rec.length - 1].lastInBinding = true;\n    return rec;\n  }\n\n  visitImplicitReceiver(ast: ImplicitReceiver): any { return this._bindingRecord.implicitReceiver; }\n\n  visitInterpolation(ast: Interpolation): number {\n    var args = this._visitAll(ast.expressions);\n    return this._addRecord(RecordType.Interpolate, \"interpolate\", _interpolationFn(ast.strings),\n                           args, ast.strings, 0);\n  }\n\n  visitLiteralPrimitive(ast: LiteralPrimitive): number {\n    return this._addRecord(RecordType.Const, \"literal\", ast.value, [], null, 0);\n  }\n\n  visitPropertyRead(ast: PropertyRead): number {\n    var receiver = ast.receiver.visit(this);\n    if (isPresent(this._variableNames) && ListWrapper.contains(this._variableNames, ast.name) &&\n        ast.receiver instanceof ImplicitReceiver) {\n      return this._addRecord(RecordType.Local, ast.name, ast.name, [], null, receiver);\n    } else {\n      return this._addRecord(RecordType.PropertyRead, ast.name, ast.getter, [], null, receiver);\n    }\n  }\n\n  visitPropertyWrite(ast: PropertyWrite): number {\n    if (isPresent(this._variableNames) && ListWrapper.contains(this._variableNames, ast.name) &&\n        ast.receiver instanceof ImplicitReceiver) {\n      throw new BaseException(`Cannot reassign a variable binding ${ast.name}`);\n    } else {\n      var receiver = ast.receiver.visit(this);\n      var value = ast.value.visit(this);\n      return this._addRecord(RecordType.PropertyWrite, ast.name, ast.setter, [value], null,\n                             receiver);\n    }\n  }\n\n  visitKeyedWrite(ast: KeyedWrite): number {\n    var obj = ast.obj.visit(this);\n    var key = ast.key.visit(this);\n    var value = ast.value.visit(this);\n    return this._addRecord(RecordType.KeyedWrite, null, null, [key, value], null, obj);\n  }\n\n  visitSafePropertyRead(ast: SafePropertyRead): number {\n    var receiver = ast.receiver.visit(this);\n    return this._addRecord(RecordType.SafeProperty, ast.name, ast.getter, [], null, receiver);\n  }\n\n  visitMethodCall(ast: MethodCall): number {\n    var receiver = ast.receiver.visit(this);\n    var args = this._visitAll(ast.args);\n    if (isPresent(this._variableNames) && ListWrapper.contains(this._variableNames, ast.name)) {\n      var target = this._addRecord(RecordType.Local, ast.name, ast.name, [], null, receiver);\n      return this._addRecord(RecordType.InvokeClosure, \"closure\", null, args, null, target);\n    } else {\n      return this._addRecord(RecordType.InvokeMethod, ast.name, ast.fn, args, null, receiver);\n    }\n  }\n\n  visitSafeMethodCall(ast: SafeMethodCall): number {\n    var receiver = ast.receiver.visit(this);\n    var args = this._visitAll(ast.args);\n    return this._addRecord(RecordType.SafeMethodInvoke, ast.name, ast.fn, args, null, receiver);\n  }\n\n  visitFunctionCall(ast: FunctionCall): number {\n    var target = ast.target.visit(this);\n    var args = this._visitAll(ast.args);\n    return this._addRecord(RecordType.InvokeClosure, \"closure\", null, args, null, target);\n  }\n\n  visitLiteralArray(ast: LiteralArray): number {\n    var primitiveName = `arrayFn${ast.expressions.length}`;\n    return this._addRecord(RecordType.CollectionLiteral, primitiveName,\n                           _arrayFn(ast.expressions.length), this._visitAll(ast.expressions), null,\n                           0);\n  }\n\n  visitLiteralMap(ast: LiteralMap): number {\n    return this._addRecord(RecordType.CollectionLiteral, _mapPrimitiveName(ast.keys),\n                           ChangeDetectionUtil.mapFn(ast.keys), this._visitAll(ast.values), null,\n                           0);\n  }\n\n  visitBinary(ast: Binary): number {\n    var left = ast.left.visit(this);\n    switch (ast.operation) {\n      case '&&':\n        var branchEnd = [null];\n        this._addRecord(RecordType.SkipRecordsIfNot, \"SkipRecordsIfNot\", null, [], branchEnd, left);\n        var right = ast.right.visit(this);\n        branchEnd[0] = right;\n        return this._addRecord(RecordType.PrimitiveOp, \"cond\", ChangeDetectionUtil.cond,\n                               [left, right, left], null, 0);\n\n      case '||':\n        var branchEnd = [null];\n        this._addRecord(RecordType.SkipRecordsIf, \"SkipRecordsIf\", null, [], branchEnd, left);\n        var right = ast.right.visit(this);\n        branchEnd[0] = right;\n        return this._addRecord(RecordType.PrimitiveOp, \"cond\", ChangeDetectionUtil.cond,\n                               [left, left, right], null, 0);\n\n      default:\n        var right = ast.right.visit(this);\n        return this._addRecord(RecordType.PrimitiveOp, _operationToPrimitiveName(ast.operation),\n                               _operationToFunction(ast.operation), [left, right], null, 0);\n    }\n  }\n\n  visitPrefixNot(ast: PrefixNot): number {\n    var exp = ast.expression.visit(this);\n    return this._addRecord(RecordType.PrimitiveOp, \"operation_negate\",\n                           ChangeDetectionUtil.operation_negate, [exp], null, 0);\n  }\n\n  visitConditional(ast: Conditional): number {\n    var condition = ast.condition.visit(this);\n    var startOfFalseBranch = [null];\n    var endOfFalseBranch = [null];\n    this._addRecord(RecordType.SkipRecordsIfNot, \"SkipRecordsIfNot\", null, [], startOfFalseBranch,\n                    condition);\n    var whenTrue = ast.trueExp.visit(this);\n    var skip =\n        this._addRecord(RecordType.SkipRecords, \"SkipRecords\", null, [], endOfFalseBranch, 0);\n    var whenFalse = ast.falseExp.visit(this);\n    startOfFalseBranch[0] = skip;\n    endOfFalseBranch[0] = whenFalse;\n\n    return this._addRecord(RecordType.PrimitiveOp, \"cond\", ChangeDetectionUtil.cond,\n                           [condition, whenTrue, whenFalse], null, 0);\n  }\n\n  visitPipe(ast: BindingPipe): number {\n    var value = ast.exp.visit(this);\n    var args = this._visitAll(ast.args);\n    return this._addRecord(RecordType.Pipe, ast.name, ast.name, args, null, value);\n  }\n\n  visitKeyedRead(ast: KeyedRead): number {\n    var obj = ast.obj.visit(this);\n    var key = ast.key.visit(this);\n    return this._addRecord(RecordType.KeyedRead, \"keyedAccess\", ChangeDetectionUtil.keyedAccess,\n                           [key], null, obj);\n  }\n\n  visitChain(ast: Chain): number {\n    var args = ast.expressions.map(e => e.visit(this));\n    return this._addRecord(RecordType.Chain, \"chain\", null, args, null, 0);\n  }\n\n  visitQuote(ast: Quote): void {\n    throw new BaseException(\n        `Caught uninterpreted expression at ${ast.location}: ${ast.uninterpretedExpression}. ` +\n        `Expression prefix ${ast.prefix} did not match a template transformer to interpret the expression.`);\n  }\n\n  private _visitAll(asts: any[]) {\n    var res = ListWrapper.createFixedSize(asts.length);\n    for (var i = 0; i < asts.length; ++i) {\n      res[i] = asts[i].visit(this);\n    }\n    return res;\n  }\n\n  /**\n   * Adds a `ProtoRecord` and returns its selfIndex.\n   */\n  private _addRecord(type, name, funcOrValue, args, fixedArgs, context): number {\n    var selfIndex = this._records.length + 1;\n    if (context instanceof DirectiveIndex) {\n      this._records.push(new ProtoRecord(type, name, funcOrValue, args, fixedArgs, -1, context,\n                                         selfIndex, this._bindingRecord, false, false, false, false,\n                                         this._bindingIndex));\n    } else {\n      this._records.push(new ProtoRecord(type, name, funcOrValue, args, fixedArgs, context, null,\n                                         selfIndex, this._bindingRecord, false, false, false, false,\n                                         this._bindingIndex));\n    }\n    return selfIndex;\n  }\n}\n\n\nfunction _arrayFn(length: number): Function {\n  switch (length) {\n    case 0:\n      return ChangeDetectionUtil.arrayFn0;\n    case 1:\n      return ChangeDetectionUtil.arrayFn1;\n    case 2:\n      return ChangeDetectionUtil.arrayFn2;\n    case 3:\n      return ChangeDetectionUtil.arrayFn3;\n    case 4:\n      return ChangeDetectionUtil.arrayFn4;\n    case 5:\n      return ChangeDetectionUtil.arrayFn5;\n    case 6:\n      return ChangeDetectionUtil.arrayFn6;\n    case 7:\n      return ChangeDetectionUtil.arrayFn7;\n    case 8:\n      return ChangeDetectionUtil.arrayFn8;\n    case 9:\n      return ChangeDetectionUtil.arrayFn9;\n    default:\n      throw new BaseException(`Does not support literal maps with more than 9 elements`);\n  }\n}\n\nfunction _mapPrimitiveName(keys: any[]) {\n  var stringifiedKeys = keys.map(k => isString(k) ? `\"${k}\"` : `${k}`).join(', ');\n  return `mapFn([${stringifiedKeys}])`;\n}\n\nfunction _operationToPrimitiveName(operation: string): string {\n  switch (operation) {\n    case '+':\n      return \"operation_add\";\n    case '-':\n      return \"operation_subtract\";\n    case '*':\n      return \"operation_multiply\";\n    case '/':\n      return \"operation_divide\";\n    case '%':\n      return \"operation_remainder\";\n    case '==':\n      return \"operation_equals\";\n    case '!=':\n      return \"operation_not_equals\";\n    case '===':\n      return \"operation_identical\";\n    case '!==':\n      return \"operation_not_identical\";\n    case '<':\n      return \"operation_less_then\";\n    case '>':\n      return \"operation_greater_then\";\n    case '<=':\n      return \"operation_less_or_equals_then\";\n    case '>=':\n      return \"operation_greater_or_equals_then\";\n    default:\n      throw new BaseException(`Unsupported operation ${operation}`);\n  }\n}\n\nfunction _operationToFunction(operation: string): Function {\n  switch (operation) {\n    case '+':\n      return ChangeDetectionUtil.operation_add;\n    case '-':\n      return ChangeDetectionUtil.operation_subtract;\n    case '*':\n      return ChangeDetectionUtil.operation_multiply;\n    case '/':\n      return ChangeDetectionUtil.operation_divide;\n    case '%':\n      return ChangeDetectionUtil.operation_remainder;\n    case '==':\n      return ChangeDetectionUtil.operation_equals;\n    case '!=':\n      return ChangeDetectionUtil.operation_not_equals;\n    case '===':\n      return ChangeDetectionUtil.operation_identical;\n    case '!==':\n      return ChangeDetectionUtil.operation_not_identical;\n    case '<':\n      return ChangeDetectionUtil.operation_less_then;\n    case '>':\n      return ChangeDetectionUtil.operation_greater_then;\n    case '<=':\n      return ChangeDetectionUtil.operation_less_or_equals_then;\n    case '>=':\n      return ChangeDetectionUtil.operation_greater_or_equals_then;\n    default:\n      throw new BaseException(`Unsupported operation ${operation}`);\n  }\n}\n\nfunction s(v): string {\n  return isPresent(v) ? `${v}` : '';\n}\n\nfunction _interpolationFn(strings: any[]) {\n  var length = strings.length;\n  var c0 = length > 0 ? strings[0] : null;\n  var c1 = length > 1 ? strings[1] : null;\n  var c2 = length > 2 ? strings[2] : null;\n  var c3 = length > 3 ? strings[3] : null;\n  var c4 = length > 4 ? strings[4] : null;\n  var c5 = length > 5 ? strings[5] : null;\n  var c6 = length > 6 ? strings[6] : null;\n  var c7 = length > 7 ? strings[7] : null;\n  var c8 = length > 8 ? strings[8] : null;\n  var c9 = length > 9 ? strings[9] : null;\n  switch (length - 1) {\n    case 1:\n      return (a1) => c0 + s(a1) + c1;\n    case 2:\n      return (a1, a2) => c0 + s(a1) + c1 + s(a2) + c2;\n    case 3:\n      return (a1, a2, a3) => c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3;\n    case 4:\n      return (a1, a2, a3, a4) => c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4;\n    case 5:\n      return (a1, a2, a3, a4, a5) =>\n                 c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5;\n    case 6:\n      return (a1, a2, a3, a4, a5, a6) =>\n                 c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) + c4 + s(a5) + c5 + s(a6) + c6;\n    case 7:\n      return (a1, a2, a3, a4, a5, a6, a7) => c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) +\n                                             c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7;\n    case 8:\n      return (a1, a2, a3, a4, a5, a6, a7, a8) => c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 + s(a4) +\n                                                 c4 + s(a5) + c5 + s(a6) + c6 + s(a7) + c7 + s(a8) +\n                                                 c8;\n    case 9:\n      return (a1, a2, a3, a4, a5, a6, a7, a8, a9) => c0 + s(a1) + c1 + s(a2) + c2 + s(a3) + c3 +\n                                                     s(a4) + c4 + s(a5) + c5 + s(a6) + c6 + s(a7) +\n                                                     c7 + s(a8) + c8 + s(a9) + c9;\n    default:\n      throw new BaseException(`Does not support more than 9 expressions`);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/proto_change_detector.ts\n **/","import {Injectable} from 'angular2/src/core/di';\nimport {print} from 'angular2/src/facade/lang';\n\n@Injectable()\nexport class Console {\n  log(message: string): void { print(message); }\n}\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/console.ts\n **/","import {Map, MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {\n  ResolvedProvider,\n  Provider,\n  Dependency,\n  ProviderBuilder,\n  ResolvedFactory,\n  provide,\n  resolveProviders\n} from './provider';\nimport {\n  AbstractProviderError,\n  NoProviderError,\n  CyclicDependencyError,\n  InstantiationError,\n  InvalidProviderError,\n  OutOfBoundsError\n} from './exceptions';\nimport {FunctionWrapper, Type, isPresent, isBlank, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {Key} from './key';\nimport {SelfMetadata, HostMetadata, SkipSelfMetadata} from './metadata';\n\n// Threshold for the dynamic version\nconst _MAX_CONSTRUCTION_COUNTER = 10;\n\nexport const UNDEFINED: Object = CONST_EXPR(new Object());\n\n/**\n * Visibility of a {@link Provider}.\n */\nexport enum Visibility {\n  /**\n   * A `Public` {@link Provider} is only visible to regular (as opposed to host) child injectors.\n   */\n  Public,\n  /**\n   * A `Private` {@link Provider} is only visible to host (as opposed to regular) child injectors.\n   */\n  Private,\n  /**\n   * A `PublicAndPrivate` {@link Provider} is visible to both host and regular child injectors.\n   */\n  PublicAndPrivate\n}\n\nfunction canSee(src: Visibility, dst: Visibility): boolean {\n  return (src === dst) ||\n         (dst === Visibility.PublicAndPrivate || src === Visibility.PublicAndPrivate);\n}\n\n\nexport interface ProtoInjectorStrategy {\n  getProviderAtIndex(index: number): ResolvedProvider;\n  createInjectorStrategy(inj: Injector): InjectorStrategy;\n}\n\nexport class ProtoInjectorInlineStrategy implements ProtoInjectorStrategy {\n  provider0: ResolvedProvider = null;\n  provider1: ResolvedProvider = null;\n  provider2: ResolvedProvider = null;\n  provider3: ResolvedProvider = null;\n  provider4: ResolvedProvider = null;\n  provider5: ResolvedProvider = null;\n  provider6: ResolvedProvider = null;\n  provider7: ResolvedProvider = null;\n  provider8: ResolvedProvider = null;\n  provider9: ResolvedProvider = null;\n\n  keyId0: number = null;\n  keyId1: number = null;\n  keyId2: number = null;\n  keyId3: number = null;\n  keyId4: number = null;\n  keyId5: number = null;\n  keyId6: number = null;\n  keyId7: number = null;\n  keyId8: number = null;\n  keyId9: number = null;\n\n  visibility0: Visibility = null;\n  visibility1: Visibility = null;\n  visibility2: Visibility = null;\n  visibility3: Visibility = null;\n  visibility4: Visibility = null;\n  visibility5: Visibility = null;\n  visibility6: Visibility = null;\n  visibility7: Visibility = null;\n  visibility8: Visibility = null;\n  visibility9: Visibility = null;\n\n  constructor(protoEI: ProtoInjector, bwv: ProviderWithVisibility[]) {\n    var length = bwv.length;\n\n    if (length > 0) {\n      this.provider0 = bwv[0].provider;\n      this.keyId0 = bwv[0].getKeyId();\n      this.visibility0 = bwv[0].visibility;\n    }\n    if (length > 1) {\n      this.provider1 = bwv[1].provider;\n      this.keyId1 = bwv[1].getKeyId();\n      this.visibility1 = bwv[1].visibility;\n    }\n    if (length > 2) {\n      this.provider2 = bwv[2].provider;\n      this.keyId2 = bwv[2].getKeyId();\n      this.visibility2 = bwv[2].visibility;\n    }\n    if (length > 3) {\n      this.provider3 = bwv[3].provider;\n      this.keyId3 = bwv[3].getKeyId();\n      this.visibility3 = bwv[3].visibility;\n    }\n    if (length > 4) {\n      this.provider4 = bwv[4].provider;\n      this.keyId4 = bwv[4].getKeyId();\n      this.visibility4 = bwv[4].visibility;\n    }\n    if (length > 5) {\n      this.provider5 = bwv[5].provider;\n      this.keyId5 = bwv[5].getKeyId();\n      this.visibility5 = bwv[5].visibility;\n    }\n    if (length > 6) {\n      this.provider6 = bwv[6].provider;\n      this.keyId6 = bwv[6].getKeyId();\n      this.visibility6 = bwv[6].visibility;\n    }\n    if (length > 7) {\n      this.provider7 = bwv[7].provider;\n      this.keyId7 = bwv[7].getKeyId();\n      this.visibility7 = bwv[7].visibility;\n    }\n    if (length > 8) {\n      this.provider8 = bwv[8].provider;\n      this.keyId8 = bwv[8].getKeyId();\n      this.visibility8 = bwv[8].visibility;\n    }\n    if (length > 9) {\n      this.provider9 = bwv[9].provider;\n      this.keyId9 = bwv[9].getKeyId();\n      this.visibility9 = bwv[9].visibility;\n    }\n  }\n\n  getProviderAtIndex(index: number): ResolvedProvider {\n    if (index == 0) return this.provider0;\n    if (index == 1) return this.provider1;\n    if (index == 2) return this.provider2;\n    if (index == 3) return this.provider3;\n    if (index == 4) return this.provider4;\n    if (index == 5) return this.provider5;\n    if (index == 6) return this.provider6;\n    if (index == 7) return this.provider7;\n    if (index == 8) return this.provider8;\n    if (index == 9) return this.provider9;\n    throw new OutOfBoundsError(index);\n  }\n\n  createInjectorStrategy(injector: Injector): InjectorStrategy {\n    return new InjectorInlineStrategy(injector, this);\n  }\n}\n\nexport class ProtoInjectorDynamicStrategy implements ProtoInjectorStrategy {\n  providers: ResolvedProvider[];\n  keyIds: number[];\n  visibilities: Visibility[];\n\n  constructor(protoInj: ProtoInjector, bwv: ProviderWithVisibility[]) {\n    var len = bwv.length;\n\n    this.providers = ListWrapper.createFixedSize(len);\n    this.keyIds = ListWrapper.createFixedSize(len);\n    this.visibilities = ListWrapper.createFixedSize(len);\n\n    for (var i = 0; i < len; i++) {\n      this.providers[i] = bwv[i].provider;\n      this.keyIds[i] = bwv[i].getKeyId();\n      this.visibilities[i] = bwv[i].visibility;\n    }\n  }\n\n  getProviderAtIndex(index: number): ResolvedProvider {\n    if (index < 0 || index >= this.providers.length) {\n      throw new OutOfBoundsError(index);\n    }\n    return this.providers[index];\n  }\n\n  createInjectorStrategy(ei: Injector): InjectorStrategy {\n    return new InjectorDynamicStrategy(this, ei);\n  }\n}\n\nexport class ProtoInjector {\n  static fromResolvedProviders(providers: ResolvedProvider[]): ProtoInjector {\n    var bd = providers.map(b => new ProviderWithVisibility(b, Visibility.Public));\n    return new ProtoInjector(bd);\n  }\n\n  /** @internal */\n  _strategy: ProtoInjectorStrategy;\n  numberOfProviders: number;\n\n  constructor(bwv: ProviderWithVisibility[]) {\n    this.numberOfProviders = bwv.length;\n    this._strategy = bwv.length > _MAX_CONSTRUCTION_COUNTER ?\n                         new ProtoInjectorDynamicStrategy(this, bwv) :\n                         new ProtoInjectorInlineStrategy(this, bwv);\n  }\n\n  getProviderAtIndex(index: number): ResolvedProvider {\n    return this._strategy.getProviderAtIndex(index);\n  }\n}\n\n\n\nexport interface InjectorStrategy {\n  getObjByKeyId(keyId: number, visibility: Visibility): any;\n  getObjAtIndex(index: number): any;\n  getMaxNumberOfObjects(): number;\n\n  resetConstructionCounter(): void;\n  instantiateProvider(provider: ResolvedProvider, visibility: Visibility): any;\n}\n\nexport class InjectorInlineStrategy implements InjectorStrategy {\n  obj0: any = UNDEFINED;\n  obj1: any = UNDEFINED;\n  obj2: any = UNDEFINED;\n  obj3: any = UNDEFINED;\n  obj4: any = UNDEFINED;\n  obj5: any = UNDEFINED;\n  obj6: any = UNDEFINED;\n  obj7: any = UNDEFINED;\n  obj8: any = UNDEFINED;\n  obj9: any = UNDEFINED;\n\n  constructor(public injector: Injector, public protoStrategy: ProtoInjectorInlineStrategy) {}\n\n  resetConstructionCounter(): void { this.injector._constructionCounter = 0; }\n\n  instantiateProvider(provider: ResolvedProvider, visibility: Visibility): any {\n    return this.injector._new(provider, visibility);\n  }\n\n  getObjByKeyId(keyId: number, visibility: Visibility): any {\n    var p = this.protoStrategy;\n    var inj = this.injector;\n\n    if (p.keyId0 === keyId && canSee(p.visibility0, visibility)) {\n      if (this.obj0 === UNDEFINED) {\n        this.obj0 = inj._new(p.provider0, p.visibility0);\n      }\n      return this.obj0;\n    }\n    if (p.keyId1 === keyId && canSee(p.visibility1, visibility)) {\n      if (this.obj1 === UNDEFINED) {\n        this.obj1 = inj._new(p.provider1, p.visibility1);\n      }\n      return this.obj1;\n    }\n    if (p.keyId2 === keyId && canSee(p.visibility2, visibility)) {\n      if (this.obj2 === UNDEFINED) {\n        this.obj2 = inj._new(p.provider2, p.visibility2);\n      }\n      return this.obj2;\n    }\n    if (p.keyId3 === keyId && canSee(p.visibility3, visibility)) {\n      if (this.obj3 === UNDEFINED) {\n        this.obj3 = inj._new(p.provider3, p.visibility3);\n      }\n      return this.obj3;\n    }\n    if (p.keyId4 === keyId && canSee(p.visibility4, visibility)) {\n      if (this.obj4 === UNDEFINED) {\n        this.obj4 = inj._new(p.provider4, p.visibility4);\n      }\n      return this.obj4;\n    }\n    if (p.keyId5 === keyId && canSee(p.visibility5, visibility)) {\n      if (this.obj5 === UNDEFINED) {\n        this.obj5 = inj._new(p.provider5, p.visibility5);\n      }\n      return this.obj5;\n    }\n    if (p.keyId6 === keyId && canSee(p.visibility6, visibility)) {\n      if (this.obj6 === UNDEFINED) {\n        this.obj6 = inj._new(p.provider6, p.visibility6);\n      }\n      return this.obj6;\n    }\n    if (p.keyId7 === keyId && canSee(p.visibility7, visibility)) {\n      if (this.obj7 === UNDEFINED) {\n        this.obj7 = inj._new(p.provider7, p.visibility7);\n      }\n      return this.obj7;\n    }\n    if (p.keyId8 === keyId && canSee(p.visibility8, visibility)) {\n      if (this.obj8 === UNDEFINED) {\n        this.obj8 = inj._new(p.provider8, p.visibility8);\n      }\n      return this.obj8;\n    }\n    if (p.keyId9 === keyId && canSee(p.visibility9, visibility)) {\n      if (this.obj9 === UNDEFINED) {\n        this.obj9 = inj._new(p.provider9, p.visibility9);\n      }\n      return this.obj9;\n    }\n\n    return UNDEFINED;\n  }\n\n  getObjAtIndex(index: number): any {\n    if (index == 0) return this.obj0;\n    if (index == 1) return this.obj1;\n    if (index == 2) return this.obj2;\n    if (index == 3) return this.obj3;\n    if (index == 4) return this.obj4;\n    if (index == 5) return this.obj5;\n    if (index == 6) return this.obj6;\n    if (index == 7) return this.obj7;\n    if (index == 8) return this.obj8;\n    if (index == 9) return this.obj9;\n    throw new OutOfBoundsError(index);\n  }\n\n  getMaxNumberOfObjects(): number { return _MAX_CONSTRUCTION_COUNTER; }\n}\n\n\nexport class InjectorDynamicStrategy implements InjectorStrategy {\n  objs: any[];\n\n  constructor(public protoStrategy: ProtoInjectorDynamicStrategy, public injector: Injector) {\n    this.objs = ListWrapper.createFixedSize(protoStrategy.providers.length);\n    ListWrapper.fill(this.objs, UNDEFINED);\n  }\n\n  resetConstructionCounter(): void { this.injector._constructionCounter = 0; }\n\n  instantiateProvider(provider: ResolvedProvider, visibility: Visibility): any {\n    return this.injector._new(provider, visibility);\n  }\n\n  getObjByKeyId(keyId: number, visibility: Visibility): any {\n    var p = this.protoStrategy;\n\n    for (var i = 0; i < p.keyIds.length; i++) {\n      if (p.keyIds[i] === keyId && canSee(p.visibilities[i], visibility)) {\n        if (this.objs[i] === UNDEFINED) {\n          this.objs[i] = this.injector._new(p.providers[i], p.visibilities[i]);\n        }\n\n        return this.objs[i];\n      }\n    }\n\n    return UNDEFINED;\n  }\n\n  getObjAtIndex(index: number): any {\n    if (index < 0 || index >= this.objs.length) {\n      throw new OutOfBoundsError(index);\n    }\n\n    return this.objs[index];\n  }\n\n  getMaxNumberOfObjects(): number { return this.objs.length; }\n}\n\nexport class ProviderWithVisibility {\n  constructor(public provider: ResolvedProvider, public visibility: Visibility){};\n\n  getKeyId(): number { return this.provider.key.id; }\n}\n\n/**\n * Used to provide dependencies that cannot be easily expressed as providers.\n */\nexport interface DependencyProvider {\n  getDependency(injector: Injector, provider: ResolvedProvider, dependency: Dependency): any;\n}\n\n/**\n * A dependency injection container used for instantiating objects and resolving dependencies.\n *\n * An `Injector` is a replacement for a `new` operator, which can automatically resolve the\n * constructor dependencies.\n *\n * In typical use, application code asks for the dependencies in the constructor and they are\n * resolved by the `Injector`.\n *\n * ### Example ([live demo](http://plnkr.co/edit/jzjec0?p=preview))\n *\n * The following example creates an `Injector` configured to create `Engine` and `Car`.\n *\n * ```typescript\n * @Injectable()\n * class Engine {\n * }\n *\n * @Injectable()\n * class Car {\n *   constructor(public engine:Engine) {}\n * }\n *\n * var injector = Injector.resolveAndCreate([Car, Engine]);\n * var car = injector.get(Car);\n * expect(car instanceof Car).toBe(true);\n * expect(car.engine instanceof Engine).toBe(true);\n * ```\n *\n * Notice, we don't use the `new` operator because we explicitly want to have the `Injector`\n * resolve all of the object's dependencies automatically.\n */\nexport class Injector {\n  /**\n   * Turns an array of provider definitions into an array of resolved providers.\n   *\n   * A resolution is a process of flattening multiple nested arrays and converting individual\n   * providers into an array of {@link ResolvedProvider}s.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/AiXTHi?p=preview))\n   *\n   * ```typescript\n   * @Injectable()\n   * class Engine {\n   * }\n   *\n   * @Injectable()\n   * class Car {\n   *   constructor(public engine:Engine) {}\n   * }\n   *\n   * var providers = Injector.resolve([Car, [[Engine]]]);\n   *\n   * expect(providers.length).toEqual(2);\n   *\n   * expect(providers[0] instanceof ResolvedProvider).toBe(true);\n   * expect(providers[0].key.displayName).toBe(\"Car\");\n   * expect(providers[0].dependencies.length).toEqual(1);\n   * expect(providers[0].factory).toBeDefined();\n   *\n   * expect(providers[1].key.displayName).toBe(\"Engine\");\n   * });\n   * ```\n   *\n   * See {@link Injector#fromResolvedProviders} for more info.\n   */\n  static resolve(providers: Array<Type | Provider | any[]>): ResolvedProvider[] {\n    return resolveProviders(providers);\n  }\n\n  /**\n   * Resolves an array of providers and creates an injector from those providers.\n   *\n   * The passed-in providers can be an array of `Type`, {@link Provider},\n   * or a recursive array of more providers.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/ePOccA?p=preview))\n   *\n   * ```typescript\n   * @Injectable()\n   * class Engine {\n   * }\n   *\n   * @Injectable()\n   * class Car {\n   *   constructor(public engine:Engine) {}\n   * }\n   *\n   * var injector = Injector.resolveAndCreate([Car, Engine]);\n   * expect(injector.get(Car) instanceof Car).toBe(true);\n   * ```\n   *\n   * This function is slower than the corresponding `fromResolvedProviders`\n   * because it needs to resolve the passed-in providers first.\n   * See {@link Injector#resolve} and {@link Injector#fromResolvedProviders}.\n   */\n  static resolveAndCreate(providers: Array<Type | Provider | any[]>): Injector {\n    var resolvedProviders = Injector.resolve(providers);\n    return Injector.fromResolvedProviders(resolvedProviders);\n  }\n\n  /**\n   * Creates an injector from previously resolved providers.\n   *\n   * This API is the recommended way to construct injectors in performance-sensitive parts.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/KrSMci?p=preview))\n   *\n   * ```typescript\n   * @Injectable()\n   * class Engine {\n   * }\n   *\n   * @Injectable()\n   * class Car {\n   *   constructor(public engine:Engine) {}\n   * }\n   *\n   * var providers = Injector.resolve([Car, Engine]);\n   * var injector = Injector.fromResolvedProviders(providers);\n   * expect(injector.get(Car) instanceof Car).toBe(true);\n   * ```\n   */\n  static fromResolvedProviders(providers: ResolvedProvider[]): Injector {\n    return new Injector(ProtoInjector.fromResolvedProviders(providers));\n  }\n\n  /**\n   * @deprecated\n   */\n  static fromResolvedBindings(providers: ResolvedProvider[]): Injector {\n    return Injector.fromResolvedProviders(providers);\n  }\n\n  /** @internal */\n  _strategy: InjectorStrategy;\n  /** @internal */\n  _constructionCounter: number = 0;\n  /** @internal */\n  public _proto: any /* ProtoInjector */;\n  /** @internal */\n  public _parent: Injector;\n  /**\n   * Private\n   */\n  constructor(_proto: any /* ProtoInjector */, _parent: Injector = null,\n              private _isHostBoundary: boolean = false,\n              private _depProvider: any /* DependencyProvider */ = null,\n              private _debugContext: Function = null) {\n    this._proto = _proto;\n    this._parent = _parent;\n    this._strategy = _proto._strategy.createInjectorStrategy(this);\n  }\n\n  /**\n   * Whether this injector is a boundary to a host.\n   * @internal\n   */\n  get hostBoundary() { return this._isHostBoundary; }\n\n  /**\n   * @internal\n   */\n  debugContext(): any { return this._debugContext(); }\n\n  /**\n   * Retrieves an instance from the injector based on the provided token.\n   * Throws {@link NoProviderError} if not found.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/HeXSHg?p=preview))\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   provide(\"validToken\", {useValue: \"Value\"})\n   * ]);\n   * expect(injector.get(\"validToken\")).toEqual(\"Value\");\n   * expect(() => injector.get(\"invalidToken\")).toThrowError();\n   * ```\n   *\n   * `Injector` returns itself when given `Injector` as a token.\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([]);\n   * expect(injector.get(Injector)).toBe(injector);\n   * ```\n   */\n  get(token: any): any {\n    return this._getByKey(Key.get(token), null, null, false, Visibility.PublicAndPrivate);\n  }\n\n  /**\n   * Retrieves an instance from the injector based on the provided token.\n   * Returns null if not found.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/tpEbEy?p=preview))\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([\n   *   provide(\"validToken\", {useValue: \"Value\"})\n   * ]);\n   * expect(injector.getOptional(\"validToken\")).toEqual(\"Value\");\n   * expect(injector.getOptional(\"invalidToken\")).toBe(null);\n   * ```\n   *\n   * `Injector` returns itself when given `Injector` as a token.\n   *\n   * ```typescript\n   * var injector = Injector.resolveAndCreate([]);\n   * expect(injector.getOptional(Injector)).toBe(injector);\n   * ```\n   */\n  getOptional(token: any): any {\n    return this._getByKey(Key.get(token), null, null, true, Visibility.PublicAndPrivate);\n  }\n\n  /**\n   * @internal\n   */\n  getAt(index: number): any { return this._strategy.getObjAtIndex(index); }\n\n  /**\n   * Parent of this injector.\n   *\n   * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\n   * -->\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/eosMGo?p=preview))\n   *\n   * ```typescript\n   * var parent = Injector.resolveAndCreate([]);\n   * var child = parent.resolveAndCreateChild([]);\n   * expect(child.parent).toBe(parent);\n   * ```\n   */\n  get parent(): Injector { return this._parent; }\n\n  /**\n   * @internal\n   * Internal. Do not use.\n   * We return `any` not to export the InjectorStrategy type.\n   */\n  get internalStrategy(): any { return this._strategy; }\n\n  /**\n   * Resolves an array of providers and creates a child injector from those providers.\n   *\n   * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\n   * -->\n   *\n   * The passed-in providers can be an array of `Type`, {@link Provider},\n   * or a recursive array of more providers.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/opB3T4?p=preview))\n   *\n   * ```typescript\n   * class ParentProvider {}\n   * class ChildProvider {}\n   *\n   * var parent = Injector.resolveAndCreate([ParentProvider]);\n   * var child = parent.resolveAndCreateChild([ChildProvider]);\n   *\n   * expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);\n   * expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);\n   * expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));\n   * ```\n   *\n   * This function is slower than the corresponding `createChildFromResolved`\n   * because it needs to resolve the passed-in providers first.\n   * See {@link Injector#resolve} and {@link Injector#createChildFromResolved}.\n   */\n  resolveAndCreateChild(providers: Array<Type | Provider | any[]>): Injector {\n    var resolvedProviders = Injector.resolve(providers);\n    return this.createChildFromResolved(resolvedProviders);\n  }\n\n  /**\n   * Creates a child injector from previously resolved providers.\n   *\n   * <!-- TODO: Add a link to the section of the user guide talking about hierarchical injection.\n   * -->\n   *\n   * This API is the recommended way to construct injectors in performance-sensitive parts.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/VhyfjN?p=preview))\n   *\n   * ```typescript\n   * class ParentProvider {}\n   * class ChildProvider {}\n   *\n   * var parentProviders = Injector.resolve([ParentProvider]);\n   * var childProviders = Injector.resolve([ChildProvider]);\n   *\n   * var parent = Injector.fromResolvedProviders(parentProviders);\n   * var child = parent.createChildFromResolved(childProviders);\n   *\n   * expect(child.get(ParentProvider) instanceof ParentProvider).toBe(true);\n   * expect(child.get(ChildProvider) instanceof ChildProvider).toBe(true);\n   * expect(child.get(ParentProvider)).toBe(parent.get(ParentProvider));\n   * ```\n   */\n  createChildFromResolved(providers: ResolvedProvider[]): Injector {\n    var bd = providers.map(b => new ProviderWithVisibility(b, Visibility.Public));\n    var proto = new ProtoInjector(bd);\n    var inj = new Injector(proto);\n    inj._parent = this;\n    return inj;\n  }\n\n  /**\n   * Resolves a provider and instantiates an object in the context of the injector.\n   *\n   * The created object does not get cached by the injector.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/yvVXoB?p=preview))\n   *\n   * ```typescript\n   * @Injectable()\n   * class Engine {\n   * }\n   *\n   * @Injectable()\n   * class Car {\n   *   constructor(public engine:Engine) {}\n   * }\n   *\n   * var injector = Injector.resolveAndCreate([Engine]);\n   *\n   * var car = injector.resolveAndInstantiate(Car);\n   * expect(car.engine).toBe(injector.get(Engine));\n   * expect(car).not.toBe(injector.resolveAndInstantiate(Car));\n   * ```\n   */\n  resolveAndInstantiate(provider: Type | Provider): any {\n    return this.instantiateResolved(Injector.resolve([provider])[0]);\n  }\n\n  /**\n   * Instantiates an object using a resolved provider in the context of the injector.\n   *\n   * The created object does not get cached by the injector.\n   *\n   * ### Example ([live demo](http://plnkr.co/edit/ptCImQ?p=preview))\n   *\n   * ```typescript\n   * @Injectable()\n   * class Engine {\n   * }\n   *\n   * @Injectable()\n   * class Car {\n   *   constructor(public engine:Engine) {}\n   * }\n   *\n   * var injector = Injector.resolveAndCreate([Engine]);\n   * var carProvider = Injector.resolve([Car])[0];\n   * var car = injector.instantiateResolved(carProvider);\n   * expect(car.engine).toBe(injector.get(Engine));\n   * expect(car).not.toBe(injector.instantiateResolved(carProvider));\n   * ```\n   */\n  instantiateResolved(provider: ResolvedProvider): any {\n    return this._instantiateProvider(provider, Visibility.PublicAndPrivate);\n  }\n\n  /** @internal */\n  _new(provider: ResolvedProvider, visibility: Visibility): any {\n    if (this._constructionCounter++ > this._strategy.getMaxNumberOfObjects()) {\n      throw new CyclicDependencyError(this, provider.key);\n    }\n    return this._instantiateProvider(provider, visibility);\n  }\n\n  private _instantiateProvider(provider: ResolvedProvider, visibility: Visibility): any {\n    if (provider.multiProvider) {\n      var res = ListWrapper.createFixedSize(provider.resolvedFactories.length);\n      for (var i = 0; i < provider.resolvedFactories.length; ++i) {\n        res[i] = this._instantiate(provider, provider.resolvedFactories[i], visibility);\n      }\n      return res;\n    } else {\n      return this._instantiate(provider, provider.resolvedFactories[0], visibility);\n    }\n  }\n\n  private _instantiate(provider: ResolvedProvider, resolvedFactory: ResolvedFactory,\n                       visibility: Visibility): any {\n    var factory = resolvedFactory.factory;\n    var deps = resolvedFactory.dependencies;\n    var length = deps.length;\n\n    var d0: any;\n    var d1: any;\n    var d2: any;\n    var d3: any;\n    var d4: any;\n    var d5: any;\n    var d6: any;\n    var d7: any;\n    var d8: any;\n    var d9: any;\n    var d10: any;\n    var d11: any;\n    var d12: any;\n    var d13: any;\n    var d14: any;\n    var d15: any;\n    var d16: any;\n    var d17: any;\n    var d18: any;\n    var d19: any;\n    try {\n      d0 = length > 0 ? this._getByDependency(provider, deps[0], visibility) : null;\n      d1 = length > 1 ? this._getByDependency(provider, deps[1], visibility) : null;\n      d2 = length > 2 ? this._getByDependency(provider, deps[2], visibility) : null;\n      d3 = length > 3 ? this._getByDependency(provider, deps[3], visibility) : null;\n      d4 = length > 4 ? this._getByDependency(provider, deps[4], visibility) : null;\n      d5 = length > 5 ? this._getByDependency(provider, deps[5], visibility) : null;\n      d6 = length > 6 ? this._getByDependency(provider, deps[6], visibility) : null;\n      d7 = length > 7 ? this._getByDependency(provider, deps[7], visibility) : null;\n      d8 = length > 8 ? this._getByDependency(provider, deps[8], visibility) : null;\n      d9 = length > 9 ? this._getByDependency(provider, deps[9], visibility) : null;\n      d10 = length > 10 ? this._getByDependency(provider, deps[10], visibility) : null;\n      d11 = length > 11 ? this._getByDependency(provider, deps[11], visibility) : null;\n      d12 = length > 12 ? this._getByDependency(provider, deps[12], visibility) : null;\n      d13 = length > 13 ? this._getByDependency(provider, deps[13], visibility) : null;\n      d14 = length > 14 ? this._getByDependency(provider, deps[14], visibility) : null;\n      d15 = length > 15 ? this._getByDependency(provider, deps[15], visibility) : null;\n      d16 = length > 16 ? this._getByDependency(provider, deps[16], visibility) : null;\n      d17 = length > 17 ? this._getByDependency(provider, deps[17], visibility) : null;\n      d18 = length > 18 ? this._getByDependency(provider, deps[18], visibility) : null;\n      d19 = length > 19 ? this._getByDependency(provider, deps[19], visibility) : null;\n    } catch (e) {\n      if (e instanceof AbstractProviderError || e instanceof InstantiationError) {\n        e.addKey(this, provider.key);\n      }\n      throw e;\n    }\n\n    var obj;\n    try {\n      switch (length) {\n        case 0:\n          obj = factory();\n          break;\n        case 1:\n          obj = factory(d0);\n          break;\n        case 2:\n          obj = factory(d0, d1);\n          break;\n        case 3:\n          obj = factory(d0, d1, d2);\n          break;\n        case 4:\n          obj = factory(d0, d1, d2, d3);\n          break;\n        case 5:\n          obj = factory(d0, d1, d2, d3, d4);\n          break;\n        case 6:\n          obj = factory(d0, d1, d2, d3, d4, d5);\n          break;\n        case 7:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6);\n          break;\n        case 8:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7);\n          break;\n        case 9:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8);\n          break;\n        case 10:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9);\n          break;\n        case 11:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10);\n          break;\n        case 12:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11);\n          break;\n        case 13:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12);\n          break;\n        case 14:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13);\n          break;\n        case 15:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14);\n          break;\n        case 16:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15);\n          break;\n        case 17:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16);\n          break;\n        case 18:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16,\n                        d17);\n          break;\n        case 19:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16,\n                        d17, d18);\n          break;\n        case 20:\n          obj = factory(d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14, d15, d16,\n                        d17, d18, d19);\n          break;\n        default:\n          throw new BaseException(\n              `Cannot instantiate '${provider.key.displayName}' because it has more than 20 dependencies`);\n      }\n    } catch (e) {\n      throw new InstantiationError(this, e, e.stack, provider.key);\n    }\n    return obj;\n  }\n\n  private _getByDependency(provider: ResolvedProvider, dep: Dependency,\n                           providerVisibility: Visibility): any {\n    var special = isPresent(this._depProvider) ?\n                      this._depProvider.getDependency(this, provider, dep) :\n                      UNDEFINED;\n    if (special !== UNDEFINED) {\n      return special;\n    } else {\n      return this._getByKey(dep.key, dep.lowerBoundVisibility, dep.upperBoundVisibility,\n                            dep.optional, providerVisibility);\n    }\n  }\n\n  private _getByKey(key: Key, lowerBoundVisibility: Object, upperBoundVisibility: Object,\n                    optional: boolean, providerVisibility: Visibility): any {\n    if (key === INJECTOR_KEY) {\n      return this;\n    }\n\n    if (upperBoundVisibility instanceof SelfMetadata) {\n      return this._getByKeySelf(key, optional, providerVisibility);\n\n    } else if (upperBoundVisibility instanceof HostMetadata) {\n      return this._getByKeyHost(key, optional, providerVisibility, lowerBoundVisibility);\n\n    } else {\n      return this._getByKeyDefault(key, optional, providerVisibility, lowerBoundVisibility);\n    }\n  }\n\n  /** @internal */\n  _throwOrNull(key: Key, optional: boolean): any {\n    if (optional) {\n      return null;\n    } else {\n      throw new NoProviderError(this, key);\n    }\n  }\n\n  /** @internal */\n  _getByKeySelf(key: Key, optional: boolean, providerVisibility: Visibility): any {\n    var obj = this._strategy.getObjByKeyId(key.id, providerVisibility);\n    return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, optional);\n  }\n\n  /** @internal */\n  _getByKeyHost(key: Key, optional: boolean, providerVisibility: Visibility,\n                lowerBoundVisibility: Object): any {\n    var inj: Injector = this;\n\n    if (lowerBoundVisibility instanceof SkipSelfMetadata) {\n      if (inj._isHostBoundary) {\n        return this._getPrivateDependency(key, optional, inj);\n      } else {\n        inj = inj._parent;\n      }\n    }\n\n    while (inj != null) {\n      var obj = inj._strategy.getObjByKeyId(key.id, providerVisibility);\n      if (obj !== UNDEFINED) return obj;\n\n      if (isPresent(inj._parent) && inj._isHostBoundary) {\n        return this._getPrivateDependency(key, optional, inj);\n      } else {\n        inj = inj._parent;\n      }\n    }\n\n    return this._throwOrNull(key, optional);\n  }\n\n  /** @internal */\n  _getPrivateDependency(key: Key, optional: boolean, inj: Injector): any {\n    var obj = inj._parent._strategy.getObjByKeyId(key.id, Visibility.Private);\n    return (obj !== UNDEFINED) ? obj : this._throwOrNull(key, optional);\n  }\n\n  /** @internal */\n  _getByKeyDefault(key: Key, optional: boolean, providerVisibility: Visibility,\n                   lowerBoundVisibility: Object): any {\n    var inj: Injector = this;\n\n    if (lowerBoundVisibility instanceof SkipSelfMetadata) {\n      providerVisibility = inj._isHostBoundary ? Visibility.PublicAndPrivate : Visibility.Public;\n      inj = inj._parent;\n    }\n\n    while (inj != null) {\n      var obj = inj._strategy.getObjByKeyId(key.id, providerVisibility);\n      if (obj !== UNDEFINED) return obj;\n\n      providerVisibility = inj._isHostBoundary ? Visibility.PublicAndPrivate : Visibility.Public;\n      inj = inj._parent;\n    }\n\n    return this._throwOrNull(key, optional);\n  }\n\n  get displayName(): string {\n    return `Injector(providers: [${_mapProviders(this, (b: ResolvedProvider) => ` \"${b.key.displayName}\" `).join(\", \")}])`;\n  }\n\n  toString(): string { return this.displayName; }\n}\n\nvar INJECTOR_KEY = Key.get(Injector);\n\n\nfunction _mapProviders(injector: Injector, fn: Function): any[] {\n  var res = [];\n  for (var i = 0; i < injector._proto.numberOfProviders; ++i) {\n    res.push(fn(injector._proto.getProviderAtIndex(i)));\n  }\n  return res;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/injector.ts\n **/","import {ListWrapper, MapWrapper} from 'angular2/src/facade/collection';\nimport {getSymbolIterator} from 'angular2/src/facade/lang';\nimport {Observable, EventEmitter} from 'angular2/src/facade/async';\n\n\n/**\n * An unmodifiable list of items that Angular keeps up to date when the state\n * of the application changes.\n *\n * The type of object that {@link QueryMetadata} and {@link ViewQueryMetadata} provide.\n *\n * Implements an iterable interface, therefore it can be used in both ES6\n * javascript `for (var i of items)` loops as well as in Angular templates with\n * `*ngFor=\"#i of myList\"`.\n *\n * Changes can be observed by subscribing to the changes `Observable`.\n *\n * NOTE: In the future this class will implement an `Observable` interface.\n *\n * ### Example ([live demo](http://plnkr.co/edit/RX8sJnQYl9FWuSCWme5z?p=preview))\n * ```typescript\n * @Component({...})\n * class Container {\n *   constructor(@Query(Item) items: QueryList<Item>) {\n *     items.changes.subscribe(_ => console.log(items.length));\n *   }\n * }\n * ```\n */\nexport class QueryList<T> {\n  private _results: Array<T> = [];\n  private _emitter = new EventEmitter();\n\n  get changes(): Observable<any> { return this._emitter; }\n  get length(): number { return this._results.length; }\n  get first(): T { return ListWrapper.first(this._results); }\n  get last(): T { return ListWrapper.last(this._results); }\n\n  /**\n   * returns a new array with the passed in function applied to each element.\n   */\n  map<U>(fn: (item: T) => U): U[] { return this._results.map(fn); }\n\n  /**\n   * returns a filtered array.\n   */\n  filter(fn: (item: T) => boolean): T[] { return this._results.filter(fn); }\n\n  /**\n   * returns a reduced value.\n   */\n  reduce<U>(fn: (acc: U, item: T) => U, init: U): U { return this._results.reduce(fn, init); }\n\n  /**\n   * executes function for each element in a query.\n   */\n  forEach(fn: (item: T) => void): void { this._results.forEach(fn); }\n\n  /**\n   * converts QueryList into an array\n   */\n  toArray(): T[] { return ListWrapper.clone(this._results); }\n\n  [getSymbolIterator()](): any { return this._results[getSymbolIterator()](); }\n\n  toString(): string { return this._results.toString(); }\n\n  /**\n   * @internal\n   */\n  reset(res: T[]): void { this._results = res; }\n\n  /** @internal */\n  notifyOnChanges(): void { this._emitter.emit(this); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/query_list.ts\n **/","import {Injectable} from '../di';\nimport {Type, isBlank} from 'angular2/src/facade/lang';\nimport {DirectiveProvider} from './element';\nimport {DirectiveResolver, CODEGEN_DIRECTIVE_RESOLVER} from './directive_resolver';\nimport {PipeProvider} from '../pipes/pipe_provider';\nimport {PipeResolver, CODEGEN_PIPE_RESOLVER} from './pipe_resolver';\n\n@Injectable()\nexport class ResolvedMetadataCache {\n  private _directiveCache: Map<Type, DirectiveProvider> = new Map<Type, DirectiveProvider>();\n  private _pipeCache: Map<Type, PipeProvider> = new Map<Type, PipeProvider>();\n\n  constructor(private _directiveResolver: DirectiveResolver, private _pipeResolver: PipeResolver) {}\n\n  getResolvedDirectiveMetadata(type: Type): DirectiveProvider {\n    var result = this._directiveCache.get(type);\n    if (isBlank(result)) {\n      result = DirectiveProvider.createFromType(type, this._directiveResolver.resolve(type));\n      this._directiveCache.set(type, result);\n    }\n    return result;\n  }\n\n  getResolvedPipeMetadata(type: Type): PipeProvider {\n    var result = this._pipeCache.get(type);\n    if (isBlank(result)) {\n      result = PipeProvider.createFromType(type, this._pipeResolver.resolve(type));\n      this._pipeCache.set(type, result);\n    }\n    return result;\n  }\n}\n\nexport var CODEGEN_RESOLVED_METADATA_CACHE =\n    new ResolvedMetadataCache(CODEGEN_DIRECTIVE_RESOLVER, CODEGEN_PIPE_RESOLVER);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/resolved_metadata_cache.ts\n **/","import {ElementRef, ElementRef_} from './element_ref';\n\n/**\n * Represents an Embedded Template that can be used to instantiate Embedded Views.\n *\n * You can access a `TemplateRef`, in two ways. Via a directive placed on a `<template>` element (or\n * directive prefixed with `*`) and have the `TemplateRef` for this Embedded View injected into the\n * constructor of the directive using the `TemplateRef` Token. Alternatively you can query for the\n * `TemplateRef` from a Component or a Directive via {@link Query}.\n *\n * To instantiate Embedded Views based on a Template, use\n * {@link ViewContainerRef#createEmbeddedView}, which will create the View and attach it to the\n * View Container.\n */\nexport abstract class TemplateRef {\n  /**\n   * The location in the View where the Embedded View logically belongs to.\n   *\n   * The data-binding and injection contexts of Embedded Views created from this `TemplateRef`\n   * inherit from the contexts of this location.\n   *\n   * Typically new Embedded Views are attached to the View Container of this location, but in\n   * advanced use-cases, the View can be attached to a different container while keeping the\n   * data-binding and injection context from the original location.\n   *\n   */\n  // TODO(i): rename to anchor or location\n  get elementRef(): ElementRef { return null; }\n}\n\nexport class TemplateRef_ extends TemplateRef {\n  constructor(private _elementRef: ElementRef_) { super(); }\n\n  get elementRef(): ElementRef_ { return this._elementRef; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/template_ref.ts\n **/","import {Type} from 'angular2/src/facade/lang';\nimport {ResolvedFactory, resolveProvider, ResolvedProvider_} from 'angular2/src/core/di/provider';\nimport {Key, ResolvedProvider, Provider} from 'angular2/src/core/di';\nimport {PipeMetadata} from '../metadata/directives';\n\nexport class PipeProvider extends ResolvedProvider_ {\n  constructor(public name: string, public pure: boolean, key: Key,\n              resolvedFactories: ResolvedFactory[], multiBinding: boolean) {\n    super(key, resolvedFactories, multiBinding);\n  }\n\n  static createFromType(type: Type, metadata: PipeMetadata): PipeProvider {\n    var provider = new Provider(type, {useClass: type});\n    var rb = resolveProvider(provider);\n    return new PipeProvider(metadata.name, metadata.pure, rb.key, rb.resolvedFactories,\n                            rb.multiProvider);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/pipes/pipe_provider.ts\n **/","import {isBlank, isPresent, CONST, Type} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {\n  Injectable,\n  OptionalMetadata,\n  SkipSelfMetadata,\n  Provider,\n  Injector,\n  bind\n} from 'angular2/src/core/di';\nimport {PipeProvider} from './pipe_provider';\nimport * as cd from 'angular2/src/core/change_detection/pipes';\n\nexport class ProtoPipes {\n  static fromProviders(providers: PipeProvider[]): ProtoPipes {\n    var config: {[key: string]: PipeProvider} = {};\n    providers.forEach(b => config[b.name] = b);\n    return new ProtoPipes(config);\n  }\n\n  constructor(\n      /**\n      * Map of {@link PipeMetadata} names to {@link PipeMetadata} implementations.\n      */\n      public config: {[key: string]: PipeProvider}) {\n    this.config = config;\n  }\n\n  get(name: string): PipeProvider {\n    var provider = this.config[name];\n    if (isBlank(provider)) throw new BaseException(`Cannot find pipe '${name}'.`);\n    return provider;\n  }\n}\n\n\n\nexport class Pipes implements cd.Pipes {\n  /** @internal */\n  _config: {[key: string]: cd.SelectedPipe} = {};\n\n  constructor(public proto: ProtoPipes, public injector: Injector) {}\n\n  get(name: string): cd.SelectedPipe {\n    var cached = StringMapWrapper.get(this._config, name);\n    if (isPresent(cached)) return cached;\n    var p = this.proto.get(name);\n    var transform = this.injector.instantiateResolved(p);\n    var res = new cd.SelectedPipe(transform, p.pure);\n\n    if (p.pure) {\n      StringMapWrapper.set(this._config, name, res);\n    }\n\n    return res;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/pipes/pipes.ts\n **/","import {\n  Type,\n  isPresent,\n  isFunction,\n  global,\n  stringify,\n  ConcreteType\n} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {GetterFn, SetterFn, MethodFn} from './types';\nimport {PlatformReflectionCapabilities} from './platform_reflection_capabilities';\n\nexport class ReflectionCapabilities implements PlatformReflectionCapabilities {\n  private _reflect: any;\n\n  constructor(reflect?: any) { this._reflect = isPresent(reflect) ? reflect : global.Reflect; }\n\n  isReflectionEnabled(): boolean { return true; }\n\n  factory(t: ConcreteType): Function {\n    switch (t.length) {\n      case 0:\n        return () => new t();\n      case 1:\n        return (a1: any) => new t(a1);\n      case 2:\n        return (a1: any, a2: any) => new t(a1, a2);\n      case 3:\n        return (a1: any, a2: any, a3: any) => new t(a1, a2, a3);\n      case 4:\n        return (a1: any, a2: any, a3: any, a4: any) => new t(a1, a2, a3, a4);\n      case 5:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any) => new t(a1, a2, a3, a4, a5);\n      case 6:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any) =>\n                   new t(a1, a2, a3, a4, a5, a6);\n      case 7:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7);\n      case 8:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8);\n      case 9:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9);\n      case 10:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any) => new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);\n      case 11:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any) => new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);\n      case 12:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);\n      case 13:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);\n      case 14:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);\n      case 15:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any, a15: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);\n      case 16:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any, a15: any, a16: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);\n      case 17:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any, a15: any, a16: any, a17: any) =>\n                   new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16,\n                         a17);\n      case 18:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any, a15: any, a16: any, a17: any,\n                a18: any) => new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,\n                                   a16, a17, a18);\n      case 19:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any, a15: any, a16: any, a17: any,\n                a18: any, a19: any) => new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13,\n                                             a14, a15, a16, a17, a18, a19);\n      case 20:\n        return (a1: any, a2: any, a3: any, a4: any, a5: any, a6: any, a7: any, a8: any, a9: any,\n                a10: any, a11: any, a12: any, a13: any, a14: any, a15: any, a16: any, a17: any,\n                a18: any, a19: any, a20: any) => new t(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11,\n                                                       a12, a13, a14, a15, a16, a17, a18, a19, a20);\n    };\n\n    throw new Error(\n        `Cannot create a factory for '${stringify(t)}' because its constructor has more than 20 arguments`);\n  }\n\n  /** @internal */\n  _zipTypesAndAnnotations(paramTypes, paramAnnotations): any[][] {\n    var result;\n\n    if (typeof paramTypes === 'undefined') {\n      result = new Array(paramAnnotations.length);\n    } else {\n      result = new Array(paramTypes.length);\n    }\n\n    for (var i = 0; i < result.length; i++) {\n      // TS outputs Object for parameters without types, while Traceur omits\n      // the annotations. For now we preserve the Traceur behavior to aid\n      // migration, but this can be revisited.\n      if (typeof paramTypes === 'undefined') {\n        result[i] = [];\n      } else if (paramTypes[i] != Object) {\n        result[i] = [paramTypes[i]];\n      } else {\n        result[i] = [];\n      }\n      if (isPresent(paramAnnotations) && isPresent(paramAnnotations[i])) {\n        result[i] = result[i].concat(paramAnnotations[i]);\n      }\n    }\n    return result;\n  }\n\n  parameters(typeOrFunc: Type): any[][] {\n    // Prefer the direct API.\n    if (isPresent((<any>typeOrFunc).parameters)) {\n      return (<any>typeOrFunc).parameters;\n    }\n    if (isPresent(this._reflect) && isPresent(this._reflect.getMetadata)) {\n      var paramAnnotations = this._reflect.getMetadata('parameters', typeOrFunc);\n      var paramTypes = this._reflect.getMetadata('design:paramtypes', typeOrFunc);\n      if (isPresent(paramTypes) || isPresent(paramAnnotations)) {\n        return this._zipTypesAndAnnotations(paramTypes, paramAnnotations);\n      }\n    }\n    // The array has to be filled with `undefined` because holes would be skipped by `some`\n    let parameters = new Array((<any>typeOrFunc.length));\n    parameters.fill(undefined);\n    return parameters;\n  }\n\n  annotations(typeOrFunc: Type): any[] {\n    // Prefer the direct API.\n    if (isPresent((<any>typeOrFunc).annotations)) {\n      var annotations = (<any>typeOrFunc).annotations;\n      if (isFunction(annotations) && annotations.annotations) {\n        annotations = annotations.annotations;\n      }\n      return annotations;\n    }\n    if (isPresent(this._reflect) && isPresent(this._reflect.getMetadata)) {\n      var annotations = this._reflect.getMetadata('annotations', typeOrFunc);\n      if (isPresent(annotations)) return annotations;\n    }\n    return [];\n  }\n\n  propMetadata(typeOrFunc: any): {[key: string]: any[]} {\n    // Prefer the direct API.\n    if (isPresent((<any>typeOrFunc).propMetadata)) {\n      var propMetadata = (<any>typeOrFunc).propMetadata;\n      if (isFunction(propMetadata) && propMetadata.propMetadata) {\n        propMetadata = propMetadata.propMetadata;\n      }\n      return propMetadata;\n    }\n    if (isPresent(this._reflect) && isPresent(this._reflect.getMetadata)) {\n      var propMetadata = this._reflect.getMetadata('propMetadata', typeOrFunc);\n      if (isPresent(propMetadata)) return propMetadata;\n    }\n    return {};\n  }\n\n  interfaces(type: Type): any[] {\n    throw new BaseException(\"JavaScript does not support interfaces\");\n  }\n\n  getter(name: string): GetterFn { return <GetterFn>new Function('o', 'return o.' + name + ';'); }\n\n  setter(name: string): SetterFn {\n    return <SetterFn>new Function('o', 'v', 'return o.' + name + ' = v;');\n  }\n\n  method(name: string): MethodFn {\n    let functionBody = `if (!o.${name}) throw new Error('\"${name}\" is undefined');\n        return o.${name}.apply(o, args);`;\n    return <MethodFn>new Function('o', 'args', functionBody);\n  }\n\n  // There is not a concept of import uri in Js, but this is useful in developing Dart applications.\n  importUri(type: Type): string { return './'; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/reflection/reflection_capabilities.ts\n **/","import {Type, isPresent, stringify} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {\n  ListWrapper,\n  Map,\n  MapWrapper,\n  Set,\n  SetWrapper,\n  StringMapWrapper\n} from 'angular2/src/facade/collection';\nimport {SetterFn, GetterFn, MethodFn} from './types';\nimport {PlatformReflectionCapabilities} from './platform_reflection_capabilities';\nexport {SetterFn, GetterFn, MethodFn} from './types';\nexport {PlatformReflectionCapabilities} from './platform_reflection_capabilities';\n\n/**\n * Reflective information about a symbol, including annotations, interfaces, and other metadata.\n */\nexport class ReflectionInfo {\n  constructor(public annotations?: any[], public parameters?: any[][], public factory?: Function,\n              public interfaces?: any[], public propMetadata?: {[key: string]: any[]}) {}\n}\n\n/**\n * Provides access to reflection data about symbols. Used internally by Angular\n * to power dependency injection and compilation.\n */\nexport class Reflector {\n  /** @internal */\n  _injectableInfo = new Map<any, ReflectionInfo>();\n  /** @internal */\n  _getters = new Map<string, GetterFn>();\n  /** @internal */\n  _setters = new Map<string, SetterFn>();\n  /** @internal */\n  _methods = new Map<string, MethodFn>();\n  /** @internal */\n  _usedKeys: Set<any>;\n  reflectionCapabilities: PlatformReflectionCapabilities;\n\n  constructor(reflectionCapabilities: PlatformReflectionCapabilities) {\n    this._usedKeys = null;\n    this.reflectionCapabilities = reflectionCapabilities;\n  }\n\n  isReflectionEnabled(): boolean { return this.reflectionCapabilities.isReflectionEnabled(); }\n\n  /**\n   * Causes `this` reflector to track keys used to access\n   * {@link ReflectionInfo} objects.\n   */\n  trackUsage(): void { this._usedKeys = new Set(); }\n\n  /**\n   * Lists types for which reflection information was not requested since\n   * {@link #trackUsage} was called. This list could later be audited as\n   * potential dead code.\n   */\n  listUnusedKeys(): any[] {\n    if (this._usedKeys == null) {\n      throw new BaseException('Usage tracking is disabled');\n    }\n    var allTypes = MapWrapper.keys(this._injectableInfo);\n    return allTypes.filter(key => !SetWrapper.has(this._usedKeys, key));\n  }\n\n  registerFunction(func: Function, funcInfo: ReflectionInfo): void {\n    this._injectableInfo.set(func, funcInfo);\n  }\n\n  registerType(type: Type, typeInfo: ReflectionInfo): void {\n    this._injectableInfo.set(type, typeInfo);\n  }\n\n  registerGetters(getters: {[key: string]: GetterFn}): void { _mergeMaps(this._getters, getters); }\n\n  registerSetters(setters: {[key: string]: SetterFn}): void { _mergeMaps(this._setters, setters); }\n\n  registerMethods(methods: {[key: string]: MethodFn}): void { _mergeMaps(this._methods, methods); }\n\n  factory(type: Type): Function {\n    if (this._containsReflectionInfo(type)) {\n      var res = this._getReflectionInfo(type).factory;\n      return isPresent(res) ? res : null;\n    } else {\n      return this.reflectionCapabilities.factory(type);\n    }\n  }\n\n  parameters(typeOrFunc: /*Type*/ any): any[][] {\n    if (this._injectableInfo.has(typeOrFunc)) {\n      var res = this._getReflectionInfo(typeOrFunc).parameters;\n      return isPresent(res) ? res : [];\n    } else {\n      return this.reflectionCapabilities.parameters(typeOrFunc);\n    }\n  }\n\n  annotations(typeOrFunc: /*Type*/ any): any[] {\n    if (this._injectableInfo.has(typeOrFunc)) {\n      var res = this._getReflectionInfo(typeOrFunc).annotations;\n      return isPresent(res) ? res : [];\n    } else {\n      return this.reflectionCapabilities.annotations(typeOrFunc);\n    }\n  }\n\n  propMetadata(typeOrFunc: /*Type*/ any): {[key: string]: any[]} {\n    if (this._injectableInfo.has(typeOrFunc)) {\n      var res = this._getReflectionInfo(typeOrFunc).propMetadata;\n      return isPresent(res) ? res : {};\n    } else {\n      return this.reflectionCapabilities.propMetadata(typeOrFunc);\n    }\n  }\n\n  interfaces(type: Type): any[] {\n    if (this._injectableInfo.has(type)) {\n      var res = this._getReflectionInfo(type).interfaces;\n      return isPresent(res) ? res : [];\n    } else {\n      return this.reflectionCapabilities.interfaces(type);\n    }\n  }\n\n  getter(name: string): GetterFn {\n    if (this._getters.has(name)) {\n      return this._getters.get(name);\n    } else {\n      return this.reflectionCapabilities.getter(name);\n    }\n  }\n\n  setter(name: string): SetterFn {\n    if (this._setters.has(name)) {\n      return this._setters.get(name);\n    } else {\n      return this.reflectionCapabilities.setter(name);\n    }\n  }\n\n  method(name: string): MethodFn {\n    if (this._methods.has(name)) {\n      return this._methods.get(name);\n    } else {\n      return this.reflectionCapabilities.method(name);\n    }\n  }\n\n  /** @internal */\n  _getReflectionInfo(typeOrFunc: any): ReflectionInfo {\n    if (isPresent(this._usedKeys)) {\n      this._usedKeys.add(typeOrFunc);\n    }\n    return this._injectableInfo.get(typeOrFunc);\n  }\n\n  /** @internal */\n  _containsReflectionInfo(typeOrFunc: any) { return this._injectableInfo.has(typeOrFunc); }\n\n  importUri(type: Type): string { return this.reflectionCapabilities.importUri(type); }\n}\n\nfunction _mergeMaps(target: Map<string, Function>, config: {[key: string]: Function}): void {\n  StringMapWrapper.forEach(config, (v: Function, k: string) => target.set(k, v));\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/reflection/reflector.ts\n **/","import {global} from 'angular2/src/facade/lang';\n\n/**\n * Stores error information; delivered via [NgZone.onError] stream.\n */\nexport class NgZoneError {\n  constructor(public error: any, public stackTrace: any) {}\n}\n\n\nexport class NgZoneImpl {\n  static isInAngularZone(): boolean { return Zone.current.get('isAngularZone') === true; }\n\n  /** @internal */\n  private outer: Zone;\n  /** @internal */\n  private inner: Zone;\n\n  private onEnter: () => void;\n  private onLeave: () => void;\n  private setMicrotask: (hasMicrotasks: boolean) => void;\n  private setMacrotask: (hasMacrotasks: boolean) => void;\n  private onError: (error: NgZoneError) => void;\n\n  constructor({trace, onEnter, onLeave, setMicrotask, setMacrotask, onError}: {\n    trace: boolean,\n    onEnter: () => void,\n    onLeave: () => void,\n    setMicrotask: (hasMicrotasks: boolean) => void,\n    setMacrotask: (hasMacrotasks: boolean) => void,\n    onError: (error: NgZoneError) => void\n  }) {\n    this.onEnter = onEnter;\n    this.onLeave = onLeave;\n    this.setMicrotask = setMicrotask;\n    this.setMacrotask = setMacrotask;\n    this.onError = onError;\n\n    if (Zone) {\n      this.outer = this.inner = Zone.current;\n      if (Zone['wtfZoneSpec']) {\n        this.inner = this.inner.fork(Zone['wtfZoneSpec']);\n      }\n      if (trace && Zone['longStackTraceZoneSpec']) {\n        this.inner = this.inner.fork(Zone['longStackTraceZoneSpec']);\n      }\n      this.inner = this.inner.fork({\n        name: 'angular',\n        properties:<any>{'isAngularZone': true},\n        onInvokeTask: (delegate: ZoneDelegate, current: Zone, target: Zone, task: Task,\n                       applyThis: any, applyArgs: any): any => {\n          try {\n            this.onEnter();\n            return delegate.invokeTask(target, task, applyThis, applyArgs);\n          } finally {\n            this.onLeave();\n          }\n        },\n\n\n        onInvoke: (delegate: ZoneDelegate, current: Zone, target: Zone, callback: Function,\n                   applyThis: any, applyArgs: any[], source: string): any => {\n          try {\n            this.onEnter();\n            return delegate.invoke(target, callback, applyThis, applyArgs, source);\n          } finally {\n            this.onLeave();\n          }\n        },\n\n        onHasTask:\n            (delegate: ZoneDelegate, current: Zone, target: Zone, hasTaskState: HasTaskState) => {\n              delegate.hasTask(target, hasTaskState);\n              if (current == target) {\n                // We are only interested in hasTask events which originate from our zone\n                // (A child hasTask event is not interesting to us)\n                if (hasTaskState.change == 'microTask') {\n                  this.setMicrotask(hasTaskState.microTask);\n                } else if (hasTaskState.change == 'macroTask') {\n                  this.setMacrotask(hasTaskState.macroTask);\n                }\n              }\n            },\n\n        onHandleError: (delegate: ZoneDelegate, current: Zone, target: Zone, error: any):\n                           boolean => {\n                             delegate.handleError(target, error);\n                             this.onError(new NgZoneError(error, error.stack));\n                             return false;\n                           }\n      });\n    } else {\n      throw new Error('Angular2 needs to be run with Zone.js polyfill.');\n    }\n  }\n\n  runInner(fn: () => any): any { return this.inner.runGuarded(fn); };\n  runOuter(fn: () => any): any { return this.outer.run(fn); };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/zone/ng_zone_impl.ts\n **/","/**\n * A base class for the WrappedException that can be used to identify\n * a WrappedException from ExceptionHandler without adding circular\n * dependency.\n */\nexport class BaseWrappedException extends Error {\n  constructor(message: string) { super(message); }\n\n  get wrapperMessage(): string { return ''; }\n  get wrapperStack(): any { return null; }\n  get originalException(): any { return null; }\n  get originalStack(): any { return null; }\n  get context(): any { return null; }\n  get message(): string { return ''; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/base_wrapped_exception.ts\n **/","\n// Modified version of internal Typescript intl.d.ts.\n// TODO(piloopin): remove when https://github.com/Microsoft/TypeScript/issues/3521 is shipped.\ndeclare module Intl {\n  interface NumberFormatOptions {\n    localeMatcher?: string;\n    style?: string;\n    currency?: string;\n    currencyDisplay?: string;\n    useGrouping?: boolean;\n    minimumIntegerDigits?: number;\n    minimumFractionDigits?: number;\n    maximumFractionDigits?: number;\n  }\n\n  interface NumberFormat {\n    format(value: number): string;\n  }\n\n  var NumberFormat: {new (locale?: string, options?: NumberFormatOptions): NumberFormat};\n\n  interface DateTimeFormatOptions {\n    localeMatcher?: string;\n    weekday?: string;\n    era?: string;\n    year?: string;\n    month?: string;\n    day?: string;\n    hour?: string;\n    minute?: string;\n    second?: string;\n    timeZoneName?: string;\n    formatMatcher?: string;\n    hour12?: boolean;\n  }\n\n  interface DateTimeFormat {\n    format(date?: Date | number): string;\n  }\n\n  var DateTimeFormat: {new (locale?: string, options?: DateTimeFormatOptions): DateTimeFormat};\n}\n\nexport enum NumberFormatStyle {\n  Decimal,\n  Percent,\n  Currency\n}\n\nexport class NumberFormatter {\n  static format(num: number, locale: string, style: NumberFormatStyle,\n                {minimumIntegerDigits = 1, minimumFractionDigits = 0, maximumFractionDigits = 3,\n                 currency, currencyAsSymbol = false}: {\n                  minimumIntegerDigits?: number,\n                  minimumFractionDigits?: number,\n                  maximumFractionDigits?: number,\n                  currency?: string,\n                  currencyAsSymbol?: boolean\n                } = {}): string {\n    var intlOptions: Intl.NumberFormatOptions = {\n      minimumIntegerDigits: minimumIntegerDigits,\n      minimumFractionDigits: minimumFractionDigits,\n      maximumFractionDigits: maximumFractionDigits\n    };\n    intlOptions.style = NumberFormatStyle[style].toLowerCase();\n    if (style == NumberFormatStyle.Currency) {\n      intlOptions.currency = currency;\n      intlOptions.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\n    }\n    return new Intl.NumberFormat(locale, intlOptions).format(num);\n  }\n}\n\nfunction digitCondition(len: number): string {\n  return len == 2 ? '2-digit' : 'numeric';\n}\nfunction nameCondition(len: number): string {\n  return len < 4 ? 'short' : 'long';\n}\nfunction extractComponents(pattern: string): Intl.DateTimeFormatOptions {\n  var ret: Intl.DateTimeFormatOptions = {};\n  var i = 0, j;\n  while (i < pattern.length) {\n    j = i;\n    while (j < pattern.length && pattern[j] == pattern[i]) j++;\n    let len = j - i;\n    switch (pattern[i]) {\n      case 'G':\n        ret.era = nameCondition(len);\n        break;\n      case 'y':\n        ret.year = digitCondition(len);\n        break;\n      case 'M':\n        if (len >= 3)\n          ret.month = nameCondition(len);\n        else\n          ret.month = digitCondition(len);\n        break;\n      case 'd':\n        ret.day = digitCondition(len);\n        break;\n      case 'E':\n        ret.weekday = nameCondition(len);\n        break;\n      case 'j':\n        ret.hour = digitCondition(len);\n        break;\n      case 'h':\n        ret.hour = digitCondition(len);\n        ret.hour12 = true;\n        break;\n      case 'H':\n        ret.hour = digitCondition(len);\n        ret.hour12 = false;\n        break;\n      case 'm':\n        ret.minute = digitCondition(len);\n        break;\n      case 's':\n        ret.second = digitCondition(len);\n        break;\n      case 'z':\n        ret.timeZoneName = 'long';\n        break;\n      case 'Z':\n        ret.timeZoneName = 'short';\n        break;\n    }\n    i = j;\n  }\n  return ret;\n}\n\nvar dateFormatterCache: Map<string, Intl.DateTimeFormat> = new Map<string, Intl.DateTimeFormat>();\n\nexport class DateFormatter {\n  static format(date: Date, locale: string, pattern: string): string {\n    var key = locale + pattern;\n    if (dateFormatterCache.has(key)) {\n      return dateFormatterCache.get(key).format(date);\n    }\n    var formatter = new Intl.DateTimeFormat(locale, extractComponents(pattern));\n    dateFormatterCache.set(key, formatter);\n    return formatter.format(date);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/intl.ts\n **/","import {global} from 'angular2/src/facade/lang';\n\nexport var Math = global.Math;\nexport var NaN = typeof NaN;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/math.ts\n **/","import {Injectable} from 'angular2/core';\nimport {global} from 'angular2/src/facade/lang';\n\nlet _nextRequestId = 0;\nexport const JSONP_HOME = '__ng_jsonp__';\nvar _jsonpConnections: {[key: string]: any} = null;\n\nfunction _getJsonpConnections(): {[key: string]: any} {\n  if (_jsonpConnections === null) {\n    _jsonpConnections = (<{[key: string]: any}>global)[JSONP_HOME] = {};\n  }\n  return _jsonpConnections;\n}\n\n// Make sure not to evaluate this in a non-browser environment!\n@Injectable()\nexport class BrowserJsonp {\n  // Construct a <script> element with the specified URL\n  build(url: string): any {\n    let node = document.createElement('script');\n    node.src = url;\n    return node;\n  }\n\n  nextRequestID(): string { return `__req${_nextRequestId++}`; }\n\n  requestCallback(id: string): string { return `${JSONP_HOME}.${id}.finished`; }\n\n  exposeConnection(id: string, connection: any) {\n    let connections = _getJsonpConnections();\n    connections[id] = connection;\n  }\n\n  removeConnection(id: string) {\n    var connections = _getJsonpConnections();\n    connections[id] = null;\n  }\n\n  // Attach the <script> element to the DOM\n  send(node: any) { document.body.appendChild(<Node>(node)); }\n\n  // Remove <script> element from the DOM\n  cleanup(node: any) {\n    if (node.parentNode) {\n      node.parentNode.removeChild(<Node>(node));\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/backends/browser_jsonp.ts\n **/","import {ConnectionBackend, Connection} from '../interfaces';\nimport {ReadyState, RequestMethod, ResponseType} from '../enums';\nimport {Request} from '../static_request';\nimport {Response} from '../static_response';\nimport {ResponseOptions, BaseResponseOptions} from '../base_response_options';\nimport {Injectable} from 'angular2/core';\nimport {BrowserJsonp} from './browser_jsonp';\nimport {makeTypeError} from 'angular2/src/facade/exceptions';\nimport {StringWrapper, isPresent} from 'angular2/src/facade/lang';\nimport {Observable} from 'rxjs/Observable';\nimport {Observer} from 'rxjs/Observer';\n\nconst JSONP_ERR_NO_CALLBACK = 'JSONP injected script did not invoke callback.';\nconst JSONP_ERR_WRONG_METHOD = 'JSONP requests must use GET request method.';\n\n/**\n * Abstract base class for an in-flight JSONP request.\n */\nexport abstract class JSONPConnection implements Connection {\n  /**\n   * The {@link ReadyState} of this request.\n   */\n  readyState: ReadyState;\n\n  /**\n   * The outgoing HTTP request.\n   */\n  request: Request;\n\n  /**\n   * An observable that completes with the response, when the request is finished.\n   */\n  response: Observable<Response>;\n\n  /**\n   * Callback called when the JSONP request completes, to notify the application\n   * of the new data.\n   */\n  abstract finished(data?: any): void;\n}\n\nexport class JSONPConnection_ extends JSONPConnection {\n  private _id: string;\n  private _script: Element;\n  private _responseData: any;\n  private _finished: boolean = false;\n\n  constructor(req: Request, private _dom: BrowserJsonp,\n              private baseResponseOptions?: ResponseOptions) {\n    super();\n    if (req.method !== RequestMethod.Get) {\n      throw makeTypeError(JSONP_ERR_WRONG_METHOD);\n    }\n    this.request = req;\n    this.response = new Observable((responseObserver: Observer<Response>) => {\n\n      this.readyState = ReadyState.Loading;\n      let id = this._id = _dom.nextRequestID();\n\n      _dom.exposeConnection(id, this);\n\n      // Workaround Dart\n      // url = url.replace(/=JSONP_CALLBACK(&|$)/, `generated method`);\n      let callback = _dom.requestCallback(this._id);\n      let url: string = req.url;\n      if (url.indexOf('=JSONP_CALLBACK&') > -1) {\n        url = StringWrapper.replace(url, '=JSONP_CALLBACK&', `=${callback}&`);\n      } else if (url.lastIndexOf('=JSONP_CALLBACK') === url.length - '=JSONP_CALLBACK'.length) {\n        url = url.substring(0, url.length - '=JSONP_CALLBACK'.length) + `=${callback}`;\n      }\n\n      let script = this._script = _dom.build(url);\n\n      let onLoad = (event: Event) => {\n        if (this.readyState === ReadyState.Cancelled) return;\n        this.readyState = ReadyState.Done;\n        _dom.cleanup(script);\n        if (!this._finished) {\n          let responseOptions =\n              new ResponseOptions({body: JSONP_ERR_NO_CALLBACK, type: ResponseType.Error, url});\n          if (isPresent(baseResponseOptions)) {\n            responseOptions = baseResponseOptions.merge(responseOptions);\n          }\n          responseObserver.error(new Response(responseOptions));\n          return;\n        }\n\n        let responseOptions = new ResponseOptions({body: this._responseData, url});\n        if (isPresent(this.baseResponseOptions)) {\n          responseOptions = this.baseResponseOptions.merge(responseOptions);\n        }\n\n        responseObserver.next(new Response(responseOptions));\n        responseObserver.complete();\n      };\n\n      let onError = (error: Error) => {\n        if (this.readyState === ReadyState.Cancelled) return;\n        this.readyState = ReadyState.Done;\n        _dom.cleanup(script);\n        let responseOptions = new ResponseOptions({body: error.message, type: ResponseType.Error});\n        if (isPresent(baseResponseOptions)) {\n          responseOptions = baseResponseOptions.merge(responseOptions);\n        }\n        responseObserver.error(new Response(responseOptions));\n      };\n\n      script.addEventListener('load', onLoad);\n      script.addEventListener('error', onError);\n\n      _dom.send(script);\n\n      return () => {\n        this.readyState = ReadyState.Cancelled;\n        script.removeEventListener('load', onLoad);\n        script.removeEventListener('error', onError);\n        if (isPresent(script)) {\n          this._dom.cleanup(script);\n        }\n\n      };\n    });\n  }\n\n  finished(data?: any) {\n    // Don't leak connections\n    this._finished = true;\n    this._dom.removeConnection(this._id);\n    if (this.readyState === ReadyState.Cancelled) return;\n    this._responseData = data;\n  }\n}\n\n/**\n * A {@link ConnectionBackend} that uses the JSONP strategy of making requests.\n */\nexport abstract class JSONPBackend extends ConnectionBackend {}\n\n@Injectable()\nexport class JSONPBackend_ extends JSONPBackend {\n  constructor(private _browserJSONP: BrowserJsonp, private _baseResponseOptions: ResponseOptions) {\n    super();\n  }\n\n  createConnection(request: Request): JSONPConnection {\n    return new JSONPConnection_(request, this._browserJSONP, this._baseResponseOptions);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/backends/jsonp_backend.ts\n **/","import {ConnectionBackend, Connection} from '../interfaces';\nimport {ReadyState, RequestMethod, ResponseType} from '../enums';\nimport {Request} from '../static_request';\nimport {Response} from '../static_response';\nimport {Headers} from '../headers';\nimport {ResponseOptions, BaseResponseOptions} from '../base_response_options';\nimport {Injectable} from 'angular2/core';\nimport {BrowserXhr} from './browser_xhr';\nimport {isPresent} from 'angular2/src/facade/lang';\nimport {Observable} from 'rxjs/Observable';\nimport {Observer} from 'rxjs/Observer';\nimport {isSuccess, getResponseURL} from '../http_utils';\n\n/**\n* Creates connections using `XMLHttpRequest`. Given a fully-qualified\n* request, an `XHRConnection` will immediately create an `XMLHttpRequest` object and send the\n* request.\n*\n* This class would typically not be created or interacted with directly inside applications, though\n* the {@link MockConnection} may be interacted with in tests.\n*/\nexport class XHRConnection implements Connection {\n  request: Request;\n  /**\n   * Response {@link EventEmitter} which emits a single {@link Response} value on load event of\n   * `XMLHttpRequest`.\n   */\n  response: Observable<Response>;\n  readyState: ReadyState;\n  constructor(req: Request, browserXHR: BrowserXhr, baseResponseOptions?: ResponseOptions) {\n    this.request = req;\n    this.response = new Observable((responseObserver: Observer<Response>) => {\n      let _xhr: XMLHttpRequest = browserXHR.build();\n      _xhr.open(RequestMethod[req.method].toUpperCase(), req.url);\n      // load event handler\n      let onLoad = () => {\n        // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n        // response/responseType properties were introduced in XHR Level2 spec (supported by\n        // IE10)\n        let body = isPresent(_xhr.response) ? _xhr.response : _xhr.responseText;\n\n        let headers = Headers.fromResponseHeaderString(_xhr.getAllResponseHeaders());\n\n        let url = getResponseURL(_xhr);\n\n        // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n        let status: number = _xhr.status === 1223 ? 204 : _xhr.status;\n\n        // fix status code when it is 0 (0 status is undocumented).\n        // Occurs when accessing file resources or on Android 4.1 stock browser\n        // while retrieving files from application cache.\n        if (status === 0) {\n          status = body ? 200 : 0;\n        }\n        var responseOptions = new ResponseOptions({body, status, headers, url});\n        if (isPresent(baseResponseOptions)) {\n          responseOptions = baseResponseOptions.merge(responseOptions);\n        }\n        let response = new Response(responseOptions);\n        if (isSuccess(status)) {\n          responseObserver.next(response);\n          // TODO(gdi2290): defer complete if array buffer until done\n          responseObserver.complete();\n          return;\n        }\n        responseObserver.error(response);\n      };\n      // error event handler\n      let onError = (err: any) => {\n        var responseOptions = new ResponseOptions({body: err, type: ResponseType.Error});\n        if (isPresent(baseResponseOptions)) {\n          responseOptions = baseResponseOptions.merge(responseOptions);\n        }\n        responseObserver.error(new Response(responseOptions));\n      };\n\n      if (isPresent(req.headers)) {\n        req.headers.forEach((values, name) => _xhr.setRequestHeader(name, values.join(',')));\n      }\n\n      _xhr.addEventListener('load', onLoad);\n      _xhr.addEventListener('error', onError);\n\n      _xhr.send(this.request.text());\n\n      return () => {\n        _xhr.removeEventListener('load', onLoad);\n        _xhr.removeEventListener('error', onError);\n        _xhr.abort();\n      };\n    });\n  }\n}\n\n/**\n * Creates {@link XHRConnection} instances.\n *\n * This class would typically not be used by end users, but could be\n * overridden if a different backend implementation should be used,\n * such as in a node backend.\n *\n * ### Example\n *\n * ```\n * import {Http, MyNodeBackend, HTTP_PROVIDERS, BaseRequestOptions} from 'angular2/http';\n * @Component({\n *   viewProviders: [\n *     HTTP_PROVIDERS,\n *     provide(Http, {useFactory: (backend, options) => {\n *       return new Http(backend, options);\n *     }, deps: [MyNodeBackend, BaseRequestOptions]})]\n * })\n * class MyComponent {\n *   constructor(http:Http) {\n *     http.request('people.json').subscribe(res => this.people = res.json());\n *   }\n * }\n * ```\n *\n **/\n@Injectable()\nexport class XHRBackend implements ConnectionBackend {\n  constructor(private _browserXHR: BrowserXhr, private _baseResponseOptions: ResponseOptions) {}\n  createConnection(request: Request): XHRConnection {\n    return new XHRConnection(request, this._browserXHR, this._baseResponseOptions);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/backends/xhr_backend.ts\n **/","import {isString, isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {makeTypeError} from 'angular2/src/facade/exceptions';\nimport {Injectable} from 'angular2/core';\nimport {RequestOptionsArgs, Connection, ConnectionBackend} from './interfaces';\nimport {Request} from './static_request';\nimport {Response} from './static_response';\nimport {BaseRequestOptions, RequestOptions} from './base_request_options';\nimport {RequestMethod} from './enums';\nimport {Observable} from 'rxjs/Observable';\n\nfunction httpRequest(backend: ConnectionBackend, request: Request): Observable<Response> {\n  return backend.createConnection(request).response;\n}\n\nfunction mergeOptions(defaultOpts: BaseRequestOptions, providedOpts: RequestOptionsArgs,\n                      method: RequestMethod, url: string): RequestOptions {\n  var newOptions = defaultOpts;\n  if (isPresent(providedOpts)) {\n    // Hack so Dart can used named parameters\n    return newOptions.merge(new RequestOptions({\n      method: providedOpts.method || method,\n      url: providedOpts.url || url,\n      search: providedOpts.search,\n      headers: providedOpts.headers,\n      body: providedOpts.body\n    }));\n  }\n  if (isPresent(method)) {\n    return newOptions.merge(new RequestOptions({method: method, url: url}));\n  } else {\n    return newOptions.merge(new RequestOptions({url: url}));\n  }\n}\n\n/**\n * Performs http requests using `XMLHttpRequest` as the default backend.\n *\n * `Http` is available as an injectable class, with methods to perform http requests. Calling\n * `request` returns an `Observable` which will emit a single {@link Response} when a\n * response is received.\n *\n * ### Example\n *\n * ```typescript\n * import {Http, HTTP_PROVIDERS} from 'angular2/http';\n * @Component({\n *   selector: 'http-app',\n *   viewProviders: [HTTP_PROVIDERS],\n *   templateUrl: 'people.html'\n * })\n * class PeopleComponent {\n *   constructor(http: Http) {\n *     http.get('people.json')\n *       // Call map on the response observable to get the parsed people object\n *       .map(res => res.json())\n *       // Subscribe to the observable to get the parsed people object and attach it to the\n *       // component\n *       .subscribe(people => this.people = people);\n *   }\n * }\n * ```\n *\n *\n * ### Example\n *\n * ```\n * http.get('people.json').observer({next: (value) => this.people = value});\n * ```\n *\n * The default construct used to perform requests, `XMLHttpRequest`, is abstracted as a \"Backend\" (\n * {@link XHRBackend} in this case), which could be mocked with dependency injection by replacing\n * the {@link XHRBackend} provider, as in the following example:\n *\n * ### Example\n *\n * ```typescript\n * import {BaseRequestOptions, Http} from 'angular2/http';\n * import {MockBackend} from 'angular2/http/testing';\n * var injector = Injector.resolveAndCreate([\n *   BaseRequestOptions,\n *   MockBackend,\n *   provide(Http, {useFactory:\n *       function(backend, defaultOptions) {\n *         return new Http(backend, defaultOptions);\n *       },\n *       deps: [MockBackend, BaseRequestOptions]})\n * ]);\n * var http = injector.get(Http);\n * http.get('request-from-mock-backend.json').subscribe((res:Response) => doSomething(res));\n * ```\n *\n **/\n@Injectable()\nexport class Http {\n  constructor(protected _backend: ConnectionBackend, protected _defaultOptions: RequestOptions) {}\n\n  /**\n   * Performs any type of http request. First argument is required, and can either be a url or\n   * a {@link Request} instance. If the first argument is a url, an optional {@link RequestOptions}\n   * object can be provided as the 2nd argument. The options object will be merged with the values\n   * of {@link BaseRequestOptions} before performing the request.\n   */\n  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {\n    var responseObservable: any;\n    if (isString(url)) {\n      responseObservable = httpRequest(\n          this._backend,\n          new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, <string>url)));\n    } else if (url instanceof Request) {\n      responseObservable = httpRequest(this._backend, url);\n    } else {\n      throw makeTypeError('First argument must be a url string or Request instance.');\n    }\n    return responseObservable;\n  }\n\n  /**\n   * Performs a request with `get` http method.\n   */\n  get(url: string, options?: RequestOptionsArgs): Observable<Response> {\n    return httpRequest(this._backend, new Request(mergeOptions(this._defaultOptions, options,\n                                                               RequestMethod.Get, url)));\n  }\n\n  /**\n   * Performs a request with `post` http method.\n   */\n  post(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {\n    return httpRequest(\n        this._backend,\n        new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({body: body})),\n                                 options, RequestMethod.Post, url)));\n  }\n\n  /**\n   * Performs a request with `put` http method.\n   */\n  put(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {\n    return httpRequest(\n        this._backend,\n        new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({body: body})),\n                                 options, RequestMethod.Put, url)));\n  }\n\n  /**\n   * Performs a request with `delete` http method.\n   */\n  delete (url: string, options?: RequestOptionsArgs): Observable<Response> {\n    return httpRequest(this._backend, new Request(mergeOptions(this._defaultOptions, options,\n                                                               RequestMethod.Delete, url)));\n  }\n\n  /**\n   * Performs a request with `patch` http method.\n   */\n  patch(url: string, body: string, options?: RequestOptionsArgs): Observable<Response> {\n    return httpRequest(\n        this._backend,\n        new Request(mergeOptions(this._defaultOptions.merge(new RequestOptions({body: body})),\n                                 options, RequestMethod.Patch, url)));\n  }\n\n  /**\n   * Performs a request with `head` http method.\n   */\n  head(url: string, options?: RequestOptionsArgs): Observable<Response> {\n    return httpRequest(this._backend, new Request(mergeOptions(this._defaultOptions, options,\n                                                               RequestMethod.Head, url)));\n  }\n}\n\n@Injectable()\nexport class Jsonp extends Http {\n  constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {\n    super(backend, defaultOptions);\n  }\n\n  /**\n   * Performs any type of http request. First argument is required, and can either be a url or\n   * a {@link Request} instance. If the first argument is a url, an optional {@link RequestOptions}\n   * object can be provided as the 2nd argument. The options object will be merged with the values\n   * of {@link BaseRequestOptions} before performing the request.\n   */\n  request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {\n    var responseObservable: any;\n    if (isString(url)) {\n      url =\n          new Request(mergeOptions(this._defaultOptions, options, RequestMethod.Get, <string>url));\n    }\n    if (url instanceof Request) {\n      if (url.method !== RequestMethod.Get) {\n        makeTypeError('JSONP requests must use GET request method.');\n      }\n      responseObservable = httpRequest(this._backend, url);\n    } else {\n      throw makeTypeError('First argument must be a url string or Request instance.');\n    }\n    return responseObservable;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/http.ts\n **/","import {RequestMethod} from './enums';\nimport {RequestArgs} from './interfaces';\nimport {Headers} from './headers';\nimport {normalizeMethodName} from './http_utils';\nimport {\n  RegExpWrapper,\n  CONST_EXPR,\n  isPresent,\n  isJsObject,\n  StringWrapper\n} from 'angular2/src/facade/lang';\n\n// TODO(jeffbcross): properly implement body accessors\n/**\n * Creates `Request` instances from provided values.\n *\n * The Request's interface is inspired by the Request constructor defined in the [Fetch\n * Spec](https://fetch.spec.whatwg.org/#request-class),\n * but is considered a static value whose body can be accessed many times. There are other\n * differences in the implementation, but this is the most significant.\n *\n * `Request` instances are typically created by higher-level classes, like {@link Http} and\n * {@link Jsonp}, but it may occasionally be useful to explicitly create `Request` instances.\n * One such example is when creating services that wrap higher-level services, like {@link Http},\n * where it may be useful to generate a `Request` with arbitrary headers and search params.\n *\n * ```typescript\n * import {Injectable, Injector} from 'angular2/core';\n * import {HTTP_PROVIDERS, Http, Request, RequestMethod} from 'angular2/http';\n *\n * @Injectable()\n * class AutoAuthenticator {\n *   constructor(public http:Http) {}\n *   request(url:string) {\n *     return this.http.request(new Request({\n *       method: RequestMethod.Get,\n *       url: url,\n *       search: 'password=123'\n *     }));\n *   }\n * }\n *\n * var injector = Injector.resolveAndCreate([HTTP_PROVIDERS, AutoAuthenticator]);\n * var authenticator = injector.get(AutoAuthenticator);\n * authenticator.request('people.json').subscribe(res => {\n *   //URL should have included '?password=123'\n *   console.log('people', res.json());\n * });\n * ```\n */\nexport class Request {\n  /**\n   * Http method with which to perform the request.\n   */\n  method: RequestMethod;\n  /**\n   * {@link Headers} instance\n   */\n  headers: Headers;\n  /** Url of the remote resource */\n  url: string;\n  // TODO: support URLSearchParams | FormData | Blob | ArrayBuffer\n  private _body: string;\n  constructor(requestOptions: RequestArgs) {\n    // TODO: assert that url is present\n    let url = requestOptions.url;\n    this.url = requestOptions.url;\n    if (isPresent(requestOptions.search)) {\n      let search = requestOptions.search.toString();\n      if (search.length > 0) {\n        let prefix = '?';\n        if (StringWrapper.contains(this.url, '?')) {\n          prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';\n        }\n        // TODO: just delete search-query-looking string in url?\n        this.url = url + prefix + search;\n      }\n    }\n    this._body = requestOptions.body;\n    this.method = normalizeMethodName(requestOptions.method);\n    // TODO(jeffbcross): implement behavior\n    // Defaults to 'omit', consistent with browser\n    // TODO(jeffbcross): implement behavior\n    this.headers = new Headers(requestOptions.headers);\n  }\n\n\n  /**\n   * Returns the request's body as string, assuming that body exists. If body is undefined, return\n   * empty\n   * string.\n   */\n  text(): String { return isPresent(this._body) ? this._body.toString() : ''; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/static_request.ts\n **/","import {CONST_EXPR, isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {Map, MapWrapper, ListWrapper, isListLikeIterable} from 'angular2/src/facade/collection';\n\nfunction paramParser(rawParams: string = ''): Map<string, string[]> {\n  var map = new Map<string, string[]>();\n  if (rawParams.length > 0) {\n    var params: string[] = rawParams.split('&');\n    params.forEach((param: string) => {\n      var split: string[] = param.split('=');\n      var key = split[0];\n      var val = split[1];\n      var list = isPresent(map.get(key)) ? map.get(key) : [];\n      list.push(val);\n      map.set(key, list);\n    });\n  }\n  return map;\n}\n\n/**\n * Map-like representation of url search parameters, based on\n * [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams) in the url living standard,\n * with several extensions for merging URLSearchParams objects:\n *   - setAll()\n *   - appendAll()\n *   - replaceAll()\n */\nexport class URLSearchParams {\n  paramsMap: Map<string, string[]>;\n  constructor(public rawParams: string = '') { this.paramsMap = paramParser(rawParams); }\n\n  clone(): URLSearchParams {\n    var clone = new URLSearchParams();\n    clone.appendAll(this);\n    return clone;\n  }\n\n  has(param: string): boolean { return this.paramsMap.has(param); }\n\n  get(param: string): string {\n    var storedParam = this.paramsMap.get(param);\n    if (isListLikeIterable(storedParam)) {\n      return ListWrapper.first(storedParam);\n    } else {\n      return null;\n    }\n  }\n\n  getAll(param: string): string[] {\n    var mapParam = this.paramsMap.get(param);\n    return isPresent(mapParam) ? mapParam : [];\n  }\n\n  set(param: string, val: string) {\n    var mapParam = this.paramsMap.get(param);\n    var list = isPresent(mapParam) ? mapParam : [];\n    ListWrapper.clear(list);\n    list.push(val);\n    this.paramsMap.set(param, list);\n  }\n\n  // A merge operation\n  // For each name-values pair in `searchParams`, perform `set(name, values[0])`\n  //\n  // E.g: \"a=[1,2,3], c=[8]\" + \"a=[4,5,6], b=[7]\" = \"a=[4], c=[8], b=[7]\"\n  //\n  // TODO(@caitp): document this better\n  setAll(searchParams: URLSearchParams) {\n    searchParams.paramsMap.forEach((value, param) => {\n      var mapParam = this.paramsMap.get(param);\n      var list = isPresent(mapParam) ? mapParam : [];\n      ListWrapper.clear(list);\n      list.push(value[0]);\n      this.paramsMap.set(param, list);\n    });\n  }\n\n  append(param: string, val: string): void {\n    var mapParam = this.paramsMap.get(param);\n    var list = isPresent(mapParam) ? mapParam : [];\n    list.push(val);\n    this.paramsMap.set(param, list);\n  }\n\n  // A merge operation\n  // For each name-values pair in `searchParams`, perform `append(name, value)`\n  // for each value in `values`.\n  //\n  // E.g: \"a=[1,2], c=[8]\" + \"a=[3,4], b=[7]\" = \"a=[1,2,3,4], c=[8], b=[7]\"\n  //\n  // TODO(@caitp): document this better\n  appendAll(searchParams: URLSearchParams) {\n    searchParams.paramsMap.forEach((value, param) => {\n      var mapParam = this.paramsMap.get(param);\n      var list = isPresent(mapParam) ? mapParam : [];\n      for (var i = 0; i < value.length; ++i) {\n        list.push(value[i]);\n      }\n      this.paramsMap.set(param, list);\n    });\n  }\n\n\n  // A merge operation\n  // For each name-values pair in `searchParams`, perform `delete(name)`,\n  // followed by `set(name, values)`\n  //\n  // E.g: \"a=[1,2,3], c=[8]\" + \"a=[4,5,6], b=[7]\" = \"a=[4,5,6], c=[8], b=[7]\"\n  //\n  // TODO(@caitp): document this better\n  replaceAll(searchParams: URLSearchParams) {\n    searchParams.paramsMap.forEach((value, param) => {\n      var mapParam = this.paramsMap.get(param);\n      var list = isPresent(mapParam) ? mapParam : [];\n      ListWrapper.clear(list);\n      for (var i = 0; i < value.length; ++i) {\n        list.push(value[i]);\n      }\n      this.paramsMap.set(param, list);\n    });\n  }\n\n  toString(): string {\n    var paramsList: string[] = [];\n    this.paramsMap.forEach((values, k) => { values.forEach(v => paramsList.push(k + '=' + v)); });\n    return paramsList.join('&');\n  }\n\n  delete (param: string): void { this.paramsMap.delete(param); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/http/url_search_params.ts\n **/","import {MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {isBlank, isPresent, global, setValueOnPath, DateWrapper} from 'angular2/src/facade/lang';\nimport {setRootDomAdapter} from 'angular2/src/platform/dom/dom_adapter';\nimport {GenericBrowserDomAdapter} from './generic_browser_adapter';\n\nvar _attrToPropMap = {\n  'class': 'className',\n  'innerHtml': 'innerHTML',\n  'readonly': 'readOnly',\n  'tabindex': 'tabIndex'\n};\n\nconst DOM_KEY_LOCATION_NUMPAD = 3;\n\n// Map to convert some key or keyIdentifier values to what will be returned by getEventKey\nvar _keyMap = {\n  // The following values are here for cross-browser compatibility and to match the W3C standard\n  // cf http://www.w3.org/TR/DOM-Level-3-Events-key/\n  '\\b': 'Backspace',\n  '\\t': 'Tab',\n  '\\x7F': 'Delete',\n  '\\x1B': 'Escape',\n  'Del': 'Delete',\n  'Esc': 'Escape',\n  'Left': 'ArrowLeft',\n  'Right': 'ArrowRight',\n  'Up': 'ArrowUp',\n  'Down': 'ArrowDown',\n  'Menu': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'Win': 'OS'\n};\n\n// There is a bug in Chrome for numeric keypad keys:\n// https://code.google.com/p/chromium/issues/detail?id=155654\n// 1, 2, 3 ... are reported as A, B, C ...\nvar _chromeNumKeyPadMap = {\n  'A': '1',\n  'B': '2',\n  'C': '3',\n  'D': '4',\n  'E': '5',\n  'F': '6',\n  'G': '7',\n  'H': '8',\n  'I': '9',\n  'J': '*',\n  'K': '+',\n  'M': '-',\n  'N': '.',\n  'O': '/',\n  '\\x60': '0',\n  '\\x90': 'NumLock'\n};\n\n/**\n * A `DomAdapter` powered by full browser DOM APIs.\n */\n/* tslint:disable:requireParameterType */\nexport class BrowserDomAdapter extends GenericBrowserDomAdapter {\n  parse(templateHtml: string) { throw new Error(\"parse not implemented\"); }\n  static makeCurrent() { setRootDomAdapter(new BrowserDomAdapter()); }\n  hasProperty(element, name: string): boolean { return name in element; }\n  setProperty(el: /*element*/ any, name: string, value: any) { el[name] = value; }\n  getProperty(el: /*element*/ any, name: string): any { return el[name]; }\n  invoke(el: /*element*/ any, methodName: string, args: any[]): any {\n    el[methodName].apply(el, args);\n  }\n\n  // TODO(tbosch): move this into a separate environment class once we have it\n  logError(error) {\n    if (window.console.error) {\n      window.console.error(error);\n    } else {\n      window.console.log(error);\n    }\n  }\n\n  log(error) { window.console.log(error); }\n\n  logGroup(error) {\n    if (window.console.group) {\n      window.console.group(error);\n      this.logError(error);\n    } else {\n      window.console.log(error);\n    }\n  }\n\n  logGroupEnd() {\n    if (window.console.groupEnd) {\n      window.console.groupEnd();\n    }\n  }\n\n  get attrToPropMap(): any { return _attrToPropMap; }\n\n  query(selector: string): any { return document.querySelector(selector); }\n  querySelector(el, selector: string): HTMLElement { return el.querySelector(selector); }\n  querySelectorAll(el, selector: string): any[] { return el.querySelectorAll(selector); }\n  on(el, evt, listener) { el.addEventListener(evt, listener, false); }\n  onAndCancel(el, evt, listener): Function {\n    el.addEventListener(evt, listener, false);\n    // Needed to follow Dart's subscription semantic, until fix of\n    // https://code.google.com/p/dart/issues/detail?id=17406\n    return () => { el.removeEventListener(evt, listener, false); };\n  }\n  dispatchEvent(el, evt) { el.dispatchEvent(evt); }\n  createMouseEvent(eventType: string): MouseEvent {\n    var evt: MouseEvent = document.createEvent('MouseEvent');\n    evt.initEvent(eventType, true, true);\n    return evt;\n  }\n  createEvent(eventType): Event {\n    var evt: Event = document.createEvent('Event');\n    evt.initEvent(eventType, true, true);\n    return evt;\n  }\n  preventDefault(evt: Event) {\n    evt.preventDefault();\n    evt.returnValue = false;\n  }\n  isPrevented(evt: Event): boolean {\n    return evt.defaultPrevented || isPresent(evt.returnValue) && !evt.returnValue;\n  }\n  getInnerHTML(el): string { return el.innerHTML; }\n  getOuterHTML(el): string { return el.outerHTML; }\n  nodeName(node: Node): string { return node.nodeName; }\n  nodeValue(node: Node): string { return node.nodeValue; }\n  type(node: HTMLInputElement): string { return node.type; }\n  content(node: Node): Node {\n    if (this.hasProperty(node, \"content\")) {\n      return (<any>node).content;\n    } else {\n      return node;\n    }\n  }\n  firstChild(el): Node { return el.firstChild; }\n  nextSibling(el): Node { return el.nextSibling; }\n  parentElement(el): Node { return el.parentNode; }\n  childNodes(el): Node[] { return el.childNodes; }\n  childNodesAsList(el): any[] {\n    var childNodes = el.childNodes;\n    var res = ListWrapper.createFixedSize(childNodes.length);\n    for (var i = 0; i < childNodes.length; i++) {\n      res[i] = childNodes[i];\n    }\n    return res;\n  }\n  clearNodes(el) {\n    while (el.firstChild) {\n      el.removeChild(el.firstChild);\n    }\n  }\n  appendChild(el, node) { el.appendChild(node); }\n  removeChild(el, node) { el.removeChild(node); }\n  replaceChild(el: Node, newChild, oldChild) { el.replaceChild(newChild, oldChild); }\n  remove(node): Node {\n    if (node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n    return node;\n  }\n  insertBefore(el, node) { el.parentNode.insertBefore(node, el); }\n  insertAllBefore(el, nodes) { nodes.forEach(n => el.parentNode.insertBefore(n, el)); }\n  insertAfter(el, node) { el.parentNode.insertBefore(node, el.nextSibling); }\n  setInnerHTML(el, value) { el.innerHTML = value; }\n  getText(el): string { return el.textContent; }\n  // TODO(vicb): removed Element type because it does not support StyleElement\n  setText(el, value: string) { el.textContent = value; }\n  getValue(el): string { return el.value; }\n  setValue(el, value: string) { el.value = value; }\n  getChecked(el): boolean { return el.checked; }\n  setChecked(el, value: boolean) { el.checked = value; }\n  createComment(text: string): Comment { return document.createComment(text); }\n  createTemplate(html): HTMLElement {\n    var t = document.createElement('template');\n    t.innerHTML = html;\n    return t;\n  }\n  createElement(tagName, doc = document): HTMLElement { return doc.createElement(tagName); }\n  createElementNS(ns, tagName, doc = document): Element { return doc.createElementNS(ns, tagName); }\n  createTextNode(text: string, doc = document): Text { return doc.createTextNode(text); }\n  createScriptTag(attrName: string, attrValue: string, doc = document): HTMLScriptElement {\n    var el = <HTMLScriptElement>doc.createElement('SCRIPT');\n    el.setAttribute(attrName, attrValue);\n    return el;\n  }\n  createStyleElement(css: string, doc = document): HTMLStyleElement {\n    var style = <HTMLStyleElement>doc.createElement('style');\n    this.appendChild(style, this.createTextNode(css));\n    return style;\n  }\n  createShadowRoot(el: HTMLElement): DocumentFragment { return (<any>el).createShadowRoot(); }\n  getShadowRoot(el: HTMLElement): DocumentFragment { return (<any>el).shadowRoot; }\n  getHost(el: HTMLElement): HTMLElement { return (<any>el).host; }\n  clone(node: Node): Node { return node.cloneNode(true); }\n  getElementsByClassName(element, name: string): HTMLElement[] {\n    return element.getElementsByClassName(name);\n  }\n  getElementsByTagName(element, name: string): HTMLElement[] {\n    return element.getElementsByTagName(name);\n  }\n  classList(element): any[] { return <any[]>Array.prototype.slice.call(element.classList, 0); }\n  addClass(element, className: string) { element.classList.add(className); }\n  removeClass(element, className: string) { element.classList.remove(className); }\n  hasClass(element, className: string): boolean { return element.classList.contains(className); }\n  setStyle(element, styleName: string, styleValue: string) {\n    element.style[styleName] = styleValue;\n  }\n  removeStyle(element, stylename: string) { element.style[stylename] = null; }\n  getStyle(element, stylename: string): string { return element.style[stylename]; }\n  hasStyle(element, styleName: string, styleValue: string = null): boolean {\n    var value = this.getStyle(element, styleName) || '';\n    return styleValue ? value == styleValue : value.length > 0;\n  }\n  tagName(element): string { return element.tagName; }\n  attributeMap(element): Map<string, string> {\n    var res = new Map<string, string>();\n    var elAttrs = element.attributes;\n    for (var i = 0; i < elAttrs.length; i++) {\n      var attrib = elAttrs[i];\n      res.set(attrib.name, attrib.value);\n    }\n    return res;\n  }\n  hasAttribute(element, attribute: string): boolean { return element.hasAttribute(attribute); }\n  hasAttributeNS(element, ns: string, attribute: string): boolean {\n    return element.hasAttributeNS(ns, attribute);\n  }\n  getAttribute(element, attribute: string): string { return element.getAttribute(attribute); }\n  getAttributeNS(element, ns: string, name: string): string {\n    return element.getAttributeNS(ns, name);\n  }\n  setAttribute(element, name: string, value: string) { element.setAttribute(name, value); }\n  setAttributeNS(element, ns: string, name: string, value: string) {\n    element.setAttributeNS(ns, name, value);\n  }\n  removeAttribute(element, attribute: string) { element.removeAttribute(attribute); }\n  removeAttributeNS(element, ns: string, name: string) { element.removeAttributeNS(ns, name); }\n  templateAwareRoot(el): any { return this.isTemplateElement(el) ? this.content(el) : el; }\n  createHtmlDocument(): HTMLDocument {\n    return document.implementation.createHTMLDocument('fakeTitle');\n  }\n  defaultDoc(): HTMLDocument { return document; }\n  getBoundingClientRect(el): any {\n    try {\n      return el.getBoundingClientRect();\n    } catch (e) {\n      return {top: 0, bottom: 0, left: 0, right: 0, width: 0, height: 0};\n    }\n  }\n  getTitle(): string { return document.title; }\n  setTitle(newTitle: string) { document.title = newTitle || ''; }\n  elementMatches(n, selector: string): boolean {\n    var matches = false;\n    if (n instanceof HTMLElement) {\n      if (n.matches) {\n        matches = n.matches(selector);\n      } else if (n.msMatchesSelector) {\n        matches = n.msMatchesSelector(selector);\n      } else if (n.webkitMatchesSelector) {\n        matches = n.webkitMatchesSelector(selector);\n      }\n    }\n    return matches;\n  }\n  isTemplateElement(el: any): boolean {\n    return el instanceof HTMLElement && el.nodeName == \"TEMPLATE\";\n  }\n  isTextNode(node: Node): boolean { return node.nodeType === Node.TEXT_NODE; }\n  isCommentNode(node: Node): boolean { return node.nodeType === Node.COMMENT_NODE; }\n  isElementNode(node: Node): boolean { return node.nodeType === Node.ELEMENT_NODE; }\n  hasShadowRoot(node): boolean { return node instanceof HTMLElement && isPresent(node.shadowRoot); }\n  isShadowRoot(node): boolean { return node instanceof DocumentFragment; }\n  importIntoDoc(node: Node): any {\n    var toImport = node;\n    if (this.isTemplateElement(node)) {\n      toImport = this.content(node);\n    }\n    return document.importNode(toImport, true);\n  }\n  adoptNode(node: Node): any { return document.adoptNode(node); }\n  getHref(el: Element): string { return (<any>el).href; }\n  getEventKey(event): string {\n    var key = event.key;\n    if (isBlank(key)) {\n      key = event.keyIdentifier;\n      // keyIdentifier is defined in the old draft of DOM Level 3 Events implemented by Chrome and\n      // Safari\n      // cf\n      // http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/events.html#Events-KeyboardEvents-Interfaces\n      if (isBlank(key)) {\n        return 'Unidentified';\n      }\n      if (key.startsWith('U+')) {\n        key = String.fromCharCode(parseInt(key.substring(2), 16));\n        if (event.location === DOM_KEY_LOCATION_NUMPAD && _chromeNumKeyPadMap.hasOwnProperty(key)) {\n          // There is a bug in Chrome for numeric keypad keys:\n          // https://code.google.com/p/chromium/issues/detail?id=155654\n          // 1, 2, 3 ... are reported as A, B, C ...\n          key = _chromeNumKeyPadMap[key];\n        }\n      }\n    }\n    if (_keyMap.hasOwnProperty(key)) {\n      key = _keyMap[key];\n    }\n    return key;\n  }\n  getGlobalEventTarget(target: string): EventTarget {\n    if (target == \"window\") {\n      return window;\n    } else if (target == \"document\") {\n      return document;\n    } else if (target == \"body\") {\n      return document.body;\n    }\n  }\n  getHistory(): History { return window.history; }\n  getLocation(): Location { return window.location; }\n  getBaseHref(): string {\n    var href = getBaseElementHref();\n    if (isBlank(href)) {\n      return null;\n    }\n    return relativePath(href);\n  }\n  resetBaseElement(): void { baseElement = null; }\n  getUserAgent(): string { return window.navigator.userAgent; }\n  setData(element, name: string, value: string) {\n    this.setAttribute(element, 'data-' + name, value);\n  }\n  getData(element, name: string): string { return this.getAttribute(element, 'data-' + name); }\n  getComputedStyle(element): any { return getComputedStyle(element); }\n  // TODO(tbosch): move this into a separate environment class once we have it\n  setGlobalVar(path: string, value: any) { setValueOnPath(global, path, value); }\n  requestAnimationFrame(callback): number { return window.requestAnimationFrame(callback); }\n  cancelAnimationFrame(id: number) { window.cancelAnimationFrame(id); }\n  performanceNow(): number {\n    // performance.now() is not available in all browsers, see\n    // http://caniuse.com/#search=performance.now\n    if (isPresent(window.performance) && isPresent(window.performance.now)) {\n      return window.performance.now();\n    } else {\n      return DateWrapper.toMillis(DateWrapper.now());\n    }\n  }\n}\n\n\nvar baseElement = null;\nfunction getBaseElementHref(): string {\n  if (isBlank(baseElement)) {\n    baseElement = document.querySelector('base');\n    if (isBlank(baseElement)) {\n      return null;\n    }\n  }\n  return baseElement.getAttribute('href');\n}\n\n// based on urlUtils.js in AngularJS 1\nvar urlParsingNode = null;\nfunction relativePath(url): string {\n  if (isBlank(urlParsingNode)) {\n    urlParsingNode = document.createElement(\"a\");\n  }\n  urlParsingNode.setAttribute('href', url);\n  return (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname :\n                                                       '/' + urlParsingNode.pathname;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/browser_adapter.ts\n **/","import {PromiseWrapper, PromiseCompleter} from 'angular2/src/facade/promise';\nimport {isPresent} from 'angular2/src/facade/lang';\nimport {XHR} from 'angular2/src/compiler/xhr';\n\nexport class XHRImpl extends XHR {\n  get(url: string): Promise<string> {\n    var completer: PromiseCompleter < string >= PromiseWrapper.completer();\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.responseType = 'text';\n\n    xhr.onload = function() {\n      // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n      // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n      var response = isPresent(xhr.response) ? xhr.response : xhr.responseText;\n\n      // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n      var status = xhr.status === 1223 ? 204 : xhr.status;\n\n      // fix status code when it is 0 (0 status is undocumented).\n      // Occurs when accessing file resources or on Android 4.1 stock browser\n      // while retrieving files from application cache.\n      if (status === 0) {\n        status = response ? 200 : 0;\n      }\n\n      if (200 <= status && status <= 300) {\n        completer.resolve(response);\n      } else {\n        completer.reject(`Failed to load ${url}`, null);\n      }\n    };\n\n    xhr.onerror = function() { completer.reject(`Failed to load ${url}`, null); };\n\n    xhr.send();\n    return completer.promise;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/xhr_impl.ts\n **/","import {CONST_EXPR, IS_DART} from 'angular2/src/facade/lang';\nimport {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';\n\nimport {\n  PLATFORM_INITIALIZER,\n  PLATFORM_DIRECTIVES,\n  PLATFORM_PIPES,\n  ComponentRef,\n  platform,\n  ExceptionHandler,\n  Reflector,\n  RootRenderer,\n  reflector,\n  APPLICATION_COMMON_PROVIDERS,\n  PLATFORM_COMMON_PROVIDERS\n} from \"angular2/core\";\nimport {COMMON_DIRECTIVES, COMMON_PIPES, FORM_PROVIDERS} from \"angular2/common\";\nimport {Testability} from 'angular2/src/core/testability/testability';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {DomEventsPlugin} from 'angular2/src/platform/dom/events/dom_events';\nimport {KeyEventsPlugin} from 'angular2/src/platform/dom/events/key_events';\nimport {HammerGesturesPlugin} from 'angular2/src/platform/dom/events/hammer_gestures';\nimport {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens';\nimport {DomRootRenderer, DomRootRenderer_} from 'angular2/src/platform/dom/dom_renderer';\nimport {DomSharedStylesHost} from 'angular2/src/platform/dom/shared_styles_host';\nimport {SharedStylesHost} from \"angular2/src/platform/dom/shared_styles_host\";\nimport {BrowserDetails} from \"angular2/src/animate/browser_details\";\nimport {AnimationBuilder} from \"angular2/src/animate/animation_builder\";\nimport {BrowserDomAdapter} from './browser/browser_adapter';\nimport {BrowserGetTestability} from 'angular2/src/platform/browser/testability';\nimport {wtfInit} from 'angular2/src/core/profile/wtf_init';\nimport {EventManager, EVENT_MANAGER_PLUGINS} from \"angular2/src/platform/dom/events/event_manager\";\nimport {ELEMENT_PROBE_PROVIDERS} from 'angular2/platform/common_dom';\nexport {DOCUMENT} from 'angular2/src/platform/dom/dom_tokens';\nexport {Title} from 'angular2/src/platform/browser/title';\nexport {\n  ELEMENT_PROBE_PROVIDERS,\n  ELEMENT_PROBE_PROVIDERS_PROD_MODE,\n  inspectNativeElement,\n  By\n} from 'angular2/platform/common_dom';\nexport {BrowserDomAdapter} from './browser/browser_adapter';\nexport {enableDebugTools, disableDebugTools} from 'angular2/src/platform/browser/tools/tools';\n\n/**\n * A set of providers to initialize the Angular platform in a web browser.\n *\n * Used automatically by `bootstrap`, or can be passed to {@link platform}.\n */\nexport const BROWSER_PROVIDERS: Array<any /*Type | Provider | any[]*/> = CONST_EXPR([\n  PLATFORM_COMMON_PROVIDERS,\n  new Provider(PLATFORM_INITIALIZER, {useValue: initDomAdapter, multi: true}),\n]);\n\nfunction _exceptionHandler(): ExceptionHandler {\n  // !IS_DART is required because we must rethrow exceptions in JS,\n  // but must not rethrow exceptions in Dart\n  return new ExceptionHandler(DOM, !IS_DART);\n}\n\nfunction _document(): any {\n  return DOM.defaultDoc();\n}\n\n/**\n * A set of providers to initialize an Angular application in a web browser.\n *\n * Used automatically by `bootstrap`, or can be passed to {@link PlatformRef.application}.\n */\nexport const BROWSER_APP_COMMON_PROVIDERS: Array<any /*Type | Provider | any[]*/> = CONST_EXPR([\n  APPLICATION_COMMON_PROVIDERS,\n  FORM_PROVIDERS,\n  new Provider(PLATFORM_PIPES, {useValue: COMMON_PIPES, multi: true}),\n  new Provider(PLATFORM_DIRECTIVES, {useValue: COMMON_DIRECTIVES, multi: true}),\n  new Provider(ExceptionHandler, {useFactory: _exceptionHandler, deps: []}),\n  new Provider(DOCUMENT, {useFactory: _document, deps: []}),\n  new Provider(EVENT_MANAGER_PLUGINS, {useClass: DomEventsPlugin, multi: true}),\n  new Provider(EVENT_MANAGER_PLUGINS, {useClass: KeyEventsPlugin, multi: true}),\n  new Provider(EVENT_MANAGER_PLUGINS, {useClass: HammerGesturesPlugin, multi: true}),\n  new Provider(DomRootRenderer, {useClass: DomRootRenderer_}),\n  new Provider(RootRenderer, {useExisting: DomRootRenderer}),\n  new Provider(SharedStylesHost, {useExisting: DomSharedStylesHost}),\n  DomSharedStylesHost,\n  Testability,\n  BrowserDetails,\n  AnimationBuilder,\n  EventManager,\n  ELEMENT_PROBE_PROVIDERS\n]);\n\nexport function initDomAdapter() {\n  BrowserDomAdapter.makeCurrent();\n  wtfInit();\n  BrowserGetTestability.init();\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser_common.ts\n **/","import {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {Injectable} from 'angular2/core';\nimport {EventManagerPlugin, EventManager} from './event_manager';\n\n@Injectable()\nexport class DomEventsPlugin extends EventManagerPlugin {\n  // This plugin should come last in the list of plugins, because it accepts all\n  // events.\n  supports(eventName: string): boolean { return true; }\n\n  addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n    var zone = this.manager.getZone();\n    var outsideHandler = (event) => zone.run(() => handler(event));\n    return this.manager.getZone().runOutsideAngular(\n        () => DOM.onAndCancel(element, eventName, outsideHandler));\n  }\n\n  addGlobalEventListener(target: string, eventName: string, handler: Function): Function {\n    var element = DOM.getGlobalEventTarget(target);\n    var zone = this.manager.getZone();\n    var outsideHandler = (event) => zone.run(() => handler(event));\n    return this.manager.getZone().runOutsideAngular(\n        () => DOM.onAndCancel(element, eventName, outsideHandler));\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/events/dom_events.ts\n **/","import {StringWrapper} from 'angular2/src/facade/lang';\n\nvar CAMEL_CASE_REGEXP = /([A-Z])/g;\nvar DASH_CASE_REGEXP = /-([a-z])/g;\n\n\nexport function camelCaseToDashCase(input: string): string {\n  return StringWrapper.replaceAllMapped(input, CAMEL_CASE_REGEXP,\n                                        (m) => { return '-' + m[1].toLowerCase(); });\n}\n\nexport function dashCaseToCamelCase(input: string): string {\n  return StringWrapper.replaceAllMapped(input, DASH_CASE_REGEXP,\n                                        (m) => { return m[1].toUpperCase(); });\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/util.ts\n **/","import {Directive} from 'angular2/core';\nimport {isString} from 'angular2/src/facade/lang';\n\nimport {Router} from '../router';\nimport {Location} from '../location/location';\nimport {Instruction} from '../instruction';\n\n/**\n * The RouterLink directive lets you link to specific parts of your app.\n *\n * Consider the following route configuration:\n\n * ```\n * @RouteConfig([\n *   { path: '/user', component: UserCmp, as: 'User' }\n * ]);\n * class MyComp {}\n * ```\n *\n * When linking to this `User` route, you can write:\n *\n * ```\n * <a [routerLink]=\"['./User']\">link to user component</a>\n * ```\n *\n * RouterLink expects the value to be an array of route names, followed by the params\n * for that level of routing. For instance `['/Team', {teamId: 1}, 'User', {userId: 2}]`\n * means that we want to generate a link for the `Team` route with params `{teamId: 1}`,\n * and with a child route `User` with params `{userId: 2}`.\n *\n * The first route name should be prepended with `/`, `./`, or `../`.\n * If the route begins with `/`, the router will look up the route from the root of the app.\n * If the route begins with `./`, the router will instead look in the current component's\n * children for the route. And if the route begins with `../`, the router will look at the\n * current component's parent.\n */\n@Directive({\n  selector: '[routerLink]',\n  inputs: ['routeParams: routerLink', 'target: target'],\n  host: {\n    '(click)': 'onClick()',\n    '[attr.href]': 'visibleHref',\n    '[class.router-link-active]': 'isRouteActive'\n  }\n})\nexport class RouterLink {\n  private _routeParams: any[];\n\n  // the url displayed on the anchor element.\n  visibleHref: string;\n  target: string;\n\n  // the instruction passed to the router to navigate\n  private _navigationInstruction: Instruction;\n\n  constructor(private _router: Router, private _location: Location) {\n    // we need to update the link whenever a route changes to account for aux routes\n    this._router.subscribe((_) => this._updateLink());\n  }\n\n  // because auxiliary links take existing primary and auxiliary routes into account,\n  // we need to update the link whenever params or other routes change.\n  private _updateLink(): void {\n    this._navigationInstruction = this._router.generate(this._routeParams);\n    var navigationHref = this._navigationInstruction.toLinkUrl();\n    this.visibleHref = this._location.prepareExternalUrl(navigationHref);\n  }\n\n  get isRouteActive(): boolean { return this._router.isRouteActive(this._navigationInstruction); }\n\n  set routeParams(changes: any[]) {\n    this._routeParams = changes;\n    this._updateLink();\n  }\n\n  onClick(): boolean {\n    // If no target, or if target is _self, prevent default browser behavior\n    if (!isString(this.target) || this.target == '_self') {\n      this._router.navigateByInstruction(this._navigationInstruction);\n      return false;\n    }\n    return true;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/directives/router_link.ts\n **/","import {PromiseWrapper} from 'angular2/src/facade/async';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {isBlank, isPresent} from 'angular2/src/facade/lang';\n\nimport {\n  Directive,\n  Attribute,\n  DynamicComponentLoader,\n  ComponentRef,\n  ElementRef,\n  Injector,\n  provide,\n  Dependency,\n  OnDestroy\n} from 'angular2/core';\n\nimport * as routerMod from '../router';\nimport {ComponentInstruction, RouteParams, RouteData} from '../instruction';\nimport * as hookMod from '../lifecycle/lifecycle_annotations';\nimport {hasLifecycleHook} from '../lifecycle/route_lifecycle_reflector';\nimport {OnActivate, CanReuse, OnReuse, OnDeactivate, CanDeactivate} from '../interfaces';\n\nlet _resolveToTrue = PromiseWrapper.resolve(true);\n\n/**\n * A router outlet is a placeholder that Angular dynamically fills based on the application's route.\n *\n * ## Use\n *\n * ```\n * <router-outlet></router-outlet>\n * ```\n */\n@Directive({selector: 'router-outlet'})\nexport class RouterOutlet implements OnDestroy {\n  name: string = null;\n  private _componentRef: Promise<ComponentRef> = null;\n  private _currentInstruction: ComponentInstruction = null;\n\n  constructor(private _elementRef: ElementRef, private _loader: DynamicComponentLoader,\n              private _parentRouter: routerMod.Router, @Attribute('name') nameAttr: string) {\n    if (isPresent(nameAttr)) {\n      this.name = nameAttr;\n      this._parentRouter.registerAuxOutlet(this);\n    } else {\n      this._parentRouter.registerPrimaryOutlet(this);\n    }\n  }\n\n  /**\n   * Called by the Router to instantiate a new component during the commit phase of a navigation.\n   * This method in turn is responsible for calling the `routerOnActivate` hook of its child.\n   */\n  activate(nextInstruction: ComponentInstruction): Promise<any> {\n    var previousInstruction = this._currentInstruction;\n    this._currentInstruction = nextInstruction;\n    var componentType = nextInstruction.componentType;\n    var childRouter = this._parentRouter.childRouter(componentType);\n\n    var providers = Injector.resolve([\n      provide(RouteData, {useValue: nextInstruction.routeData}),\n      provide(RouteParams, {useValue: new RouteParams(nextInstruction.params)}),\n      provide(routerMod.Router, {useValue: childRouter})\n    ]);\n    this._componentRef =\n        this._loader.loadNextToLocation(componentType, this._elementRef, providers);\n    return this._componentRef.then((componentRef) => {\n      if (hasLifecycleHook(hookMod.routerOnActivate, componentType)) {\n        return this._componentRef.then(\n            (ref: ComponentRef) =>\n                (<OnActivate>ref.instance).routerOnActivate(nextInstruction, previousInstruction));\n      } else {\n        return componentRef;\n      }\n    });\n  }\n\n  /**\n   * Called by the {@link Router} during the commit phase of a navigation when an outlet\n   * reuses a component between different routes.\n   * This method in turn is responsible for calling the `routerOnReuse` hook of its child.\n   */\n  reuse(nextInstruction: ComponentInstruction): Promise<any> {\n    var previousInstruction = this._currentInstruction;\n    this._currentInstruction = nextInstruction;\n\n    // it's possible the component is removed before it can be reactivated (if nested withing\n    // another dynamically loaded component, for instance). In that case, we simply activate\n    // a new one.\n    if (isBlank(this._componentRef)) {\n      return this.activate(nextInstruction);\n    } else {\n      return PromiseWrapper.resolve(\n          hasLifecycleHook(hookMod.routerOnReuse, this._currentInstruction.componentType) ?\n              this._componentRef.then(\n                  (ref: ComponentRef) =>\n                      (<OnReuse>ref.instance).routerOnReuse(nextInstruction, previousInstruction)) :\n              true);\n    }\n  }\n\n  /**\n   * Called by the {@link Router} when an outlet disposes of a component's contents.\n   * This method in turn is responsible for calling the `routerOnDeactivate` hook of its child.\n   */\n  deactivate(nextInstruction: ComponentInstruction): Promise<any> {\n    var next = _resolveToTrue;\n    if (isPresent(this._componentRef) && isPresent(this._currentInstruction) &&\n        hasLifecycleHook(hookMod.routerOnDeactivate, this._currentInstruction.componentType)) {\n      next = this._componentRef.then(\n          (ref: ComponentRef) =>\n              (<OnDeactivate>ref.instance)\n                  .routerOnDeactivate(nextInstruction, this._currentInstruction));\n    }\n    return next.then((_) => {\n      if (isPresent(this._componentRef)) {\n        var onDispose = this._componentRef.then((ref: ComponentRef) => ref.dispose());\n        this._componentRef = null;\n        return onDispose;\n      }\n    });\n  }\n\n  /**\n   * Called by the {@link Router} during recognition phase of a navigation.\n   *\n   * If this resolves to `false`, the given navigation is cancelled.\n   *\n   * This method delegates to the child component's `routerCanDeactivate` hook if it exists,\n   * and otherwise resolves to true.\n   */\n  routerCanDeactivate(nextInstruction: ComponentInstruction): Promise<boolean> {\n    if (isBlank(this._currentInstruction)) {\n      return _resolveToTrue;\n    }\n    if (hasLifecycleHook(hookMod.routerCanDeactivate, this._currentInstruction.componentType)) {\n      return this._componentRef.then(\n          (ref: ComponentRef) =>\n              (<CanDeactivate>ref.instance)\n                  .routerCanDeactivate(nextInstruction, this._currentInstruction));\n    } else {\n      return _resolveToTrue;\n    }\n  }\n\n  /**\n   * Called by the {@link Router} during recognition phase of a navigation.\n   *\n   * If the new child component has a different Type than the existing child component,\n   * this will resolve to `false`. You can't reuse an old component when the new component\n   * is of a different Type.\n   *\n   * Otherwise, this method delegates to the child component's `routerCanReuse` hook if it exists,\n   * or resolves to true if the hook is not present.\n   */\n  routerCanReuse(nextInstruction: ComponentInstruction): Promise<boolean> {\n    var result;\n\n    if (isBlank(this._currentInstruction) ||\n        this._currentInstruction.componentType != nextInstruction.componentType) {\n      result = false;\n    } else if (hasLifecycleHook(hookMod.routerCanReuse, this._currentInstruction.componentType)) {\n      result = this._componentRef.then(\n          (ref: ComponentRef) =>\n              (<CanReuse>ref.instance).routerCanReuse(nextInstruction, this._currentInstruction));\n    } else {\n      result = nextInstruction == this._currentInstruction ||\n               (isPresent(nextInstruction.params) && isPresent(this._currentInstruction.params) &&\n                StringMapWrapper.equals(nextInstruction.params, this._currentInstruction.params));\n    }\n    return <Promise<boolean>>PromiseWrapper.resolve(result);\n  }\n\n  ngOnDestroy(): void { this._parentRouter.unregisterPrimaryOutlet(this); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/directives/router_outlet.ts\n **/","/**\n * This indirection is needed to free up Component, etc symbols in the public API\n * to be used by the decorator versions of these annotations.\n */\n\nimport {makeDecorator} from 'angular2/src/core/util/decorators';\nimport {CanActivate as CanActivateAnnotation} from './lifecycle_annotations_impl';\nimport {ComponentInstruction} from '../instruction';\n\nexport {\n  routerCanReuse,\n  routerCanDeactivate,\n  routerOnActivate,\n  routerOnReuse,\n  routerOnDeactivate\n} from './lifecycle_annotations_impl';\n\n/**\n * Defines route lifecycle hook `CanActivate`, which is called by the router to determine\n * if a component can be instantiated as part of a navigation.\n *\n * <aside class=\"is-right\">\n * Note that unlike other lifecycle hooks, this one uses an annotation rather than an interface.\n * This is because the `CanActivate` function is called before the component is instantiated.\n * </aside>\n *\n * The `CanActivate` hook is called with two {@link ComponentInstruction}s as parameters, the first\n * representing the current route being navigated to, and the second parameter representing the\n * previous route or `null`.\n *\n * ```typescript\n * @CanActivate((next, prev) => boolean | Promise<boolean>)\n * ```\n *\n * If `CanActivate` returns or resolves to `false`, the navigation is cancelled.\n * If `CanActivate` throws or rejects, the navigation is also cancelled.\n * If `CanActivate` returns or resolves to `true`, navigation continues, the component is\n * instantiated, and the {@link OnActivate} hook of that component is called if implemented.\n *\n * ### Example\n *\n * {@example router/ts/can_activate/can_activate_example.ts region='canActivate' }\n */\nexport var CanActivate: (hook: (next: ComponentInstruction, prev: ComponentInstruction) =>\n                             Promise<boolean>| boolean) => ClassDecorator =\n    makeDecorator(CanActivateAnnotation);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/lifecycle/lifecycle_annotations.ts\n **/","import {Type, isPresent} from 'angular2/src/facade/lang';\nimport {RouteLifecycleHook, CanActivate} from './lifecycle_annotations_impl';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\n\nexport function hasLifecycleHook(e: RouteLifecycleHook, type): boolean {\n  if (!(type instanceof Type)) return false;\n  return e.name in(<any>type).prototype;\n}\n\nexport function getCanActivateHook(type): Function {\n  var annotations = reflector.annotations(type);\n  for (let i = 0; i < annotations.length; i += 1) {\n    let annotation = annotations[i];\n    if (annotation instanceof CanActivate) {\n      return annotation.fn;\n    }\n  }\n\n  return null;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/lifecycle/route_lifecycle_reflector.ts\n **/","import {Injectable, Inject, Optional} from 'angular2/core';\nimport {isBlank} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {\n  LocationStrategy,\n  APP_BASE_HREF,\n  normalizeQueryParams,\n  joinWithSlash\n} from './location_strategy';\nimport {PlatformLocation, UrlChangeListener} from './platform_location';\n\n/**\n * `PathLocationStrategy` is a {@link LocationStrategy} used to configure the\n * {@link Location} service to represent its state in the\n * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\n * browser's URL.\n *\n * `PathLocationStrategy` is the default binding for {@link LocationStrategy}\n * provided in {@link ROUTER_PROVIDERS}.\n *\n * If you're using `PathLocationStrategy`, you must provide a provider for\n * {@link APP_BASE_HREF} to a string representing the URL prefix that should\n * be preserved when generating and recognizing URLs.\n *\n * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * ### Example\n *\n * ```\n * import {Component, provide} from 'angular2/core';\n * import {\n *   APP_BASE_HREF\n *   ROUTER_DIRECTIVES,\n *   ROUTER_PROVIDERS,\n *   RouteConfig,\n *   Location\n * } from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   constructor(location: Location) {\n *     location.go('/foo');\n *   }\n * }\n *\n * bootstrap(AppCmp, [\n *   ROUTER_PROVIDERS, // includes binding to PathLocationStrategy\n *   provide(APP_BASE_HREF, {useValue: '/my/app'})\n * ]);\n * ```\n */\n@Injectable()\nexport class PathLocationStrategy extends LocationStrategy {\n  private _baseHref: string;\n\n  constructor(private _platformLocation: PlatformLocation,\n              @Optional() @Inject(APP_BASE_HREF) href?: string) {\n    super();\n\n    if (isBlank(href)) {\n      href = this._platformLocation.getBaseHrefFromDOM();\n    }\n\n    if (isBlank(href)) {\n      throw new BaseException(\n          `No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.`);\n    }\n\n    this._baseHref = href;\n  }\n\n  onPopState(fn: UrlChangeListener): void {\n    this._platformLocation.onPopState(fn);\n    this._platformLocation.onHashChange(fn);\n  }\n\n  getBaseHref(): string { return this._baseHref; }\n\n  prepareExternalUrl(internal: string): string { return joinWithSlash(this._baseHref, internal); }\n\n  path(): string {\n    return this._platformLocation.pathname + normalizeQueryParams(this._platformLocation.search);\n  }\n\n  pushState(state: any, title: string, url: string, queryParams: string) {\n    var externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n    this._platformLocation.pushState(state, title, externalUrl);\n  }\n\n  replaceState(state: any, title: string, url: string, queryParams: string) {\n    var externalUrl = this.prepareExternalUrl(url + normalizeQueryParams(queryParams));\n    this._platformLocation.replaceState(state, title, externalUrl);\n  }\n\n  forward(): void { this._platformLocation.forward(); }\n\n  back(): void { this._platformLocation.back(); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/location/path_location_strategy.ts\n **/","import {RouteConfig as RouteConfigAnnotation, RouteDefinition} from './route_config_impl';\nimport {makeDecorator} from 'angular2/src/core/util/decorators';\n\nexport {Route, Redirect, AuxRoute, AsyncRoute, RouteDefinition} from './route_config_impl';\n\n// Copied from RouteConfig in route_config_impl.\n/**\n * The `RouteConfig` decorator defines routes for a given component.\n *\n * It takes an array of {@link RouteDefinition}s.\n */\nexport var RouteConfig: (configs: RouteDefinition[]) => ClassDecorator =\n    makeDecorator(RouteConfigAnnotation);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/route_config/route_config_decorator.ts\n **/","import {LocationStrategy} from 'angular2/src/router/location/location_strategy';\nimport {PathLocationStrategy} from 'angular2/src/router/location/path_location_strategy';\nimport {Router, RootRouter} from 'angular2/src/router/router';\nimport {RouteRegistry, ROUTER_PRIMARY_COMPONENT} from 'angular2/src/router/route_registry';\nimport {Location} from 'angular2/src/router/location/location';\nimport {CONST_EXPR, Type} from 'angular2/src/facade/lang';\nimport {ApplicationRef, OpaqueToken, Provider} from 'angular2/core';\nimport {BaseException} from 'angular2/src/facade/exceptions';\n\n/**\n * The Platform agnostic ROUTER PROVIDERS\n */\nexport const ROUTER_PROVIDERS_COMMON: any[] = CONST_EXPR([\n  RouteRegistry,\n  CONST_EXPR(new Provider(LocationStrategy, {useClass: PathLocationStrategy})),\n  Location,\n  CONST_EXPR(new Provider(\n      Router,\n      {\n        useFactory: routerFactory,\n        deps: CONST_EXPR([RouteRegistry, Location, ROUTER_PRIMARY_COMPONENT, ApplicationRef])\n      })),\n  CONST_EXPR(new Provider(\n      ROUTER_PRIMARY_COMPONENT,\n      {useFactory: routerPrimaryComponentFactory, deps: CONST_EXPR([ApplicationRef])}))\n]);\n\nfunction routerFactory(registry: RouteRegistry, location: Location, primaryComponent: Type,\n                       appRef: ApplicationRef): RootRouter {\n  var rootRouter = new RootRouter(registry, location, primaryComponent);\n  appRef.registerDisposeListener(() => rootRouter.dispose());\n  return rootRouter;\n}\n\nfunction routerPrimaryComponentFactory(app: ApplicationRef): Type {\n  if (app.componentTypes.length == 0) {\n    throw new BaseException(\"Bootstrap at least one component before injecting Router.\");\n  }\n  return app.componentTypes[0];\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/router_providers_common.ts\n **/","import {Url} from '../../url_parser';\n\nexport class MatchedUrl {\n  constructor(public urlPath: string, public urlParams: string[],\n              public allParams: {[key: string]: any}, public auxiliary: Url[], public rest: Url) {}\n}\n\n\nexport class GeneratedUrl {\n  constructor(public urlPath: string, public urlParams: {[key: string]: any}) {}\n}\n\nexport interface RoutePath {\n  specificity: string;\n  terminal: boolean;\n  hash: string;\n  matchUrl(url: Url): MatchedUrl;\n  generateUrl(params: {[key: string]: any}): GeneratedUrl;\n  toString(): string;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/route_paths/route_path.ts\n **/","import {isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {PromiseWrapper} from 'angular2/src/facade/promise';\nimport {Map} from 'angular2/src/facade/collection';\n\nimport {RouteHandler} from './route_handlers/route_handler';\nimport {Url, convertUrlParamsToArray} from '../url_parser';\nimport {ComponentInstruction} from '../instruction';\nimport {RoutePath} from './route_paths/route_path';\nimport {GeneratedUrl} from './route_paths/route_path';\n\n\n// RouteMatch objects hold information about a match between a rule and a URL\nexport abstract class RouteMatch {}\n\nexport class PathMatch extends RouteMatch {\n  constructor(public instruction: ComponentInstruction, public remaining: Url,\n              public remainingAux: Url[]) {\n    super();\n  }\n}\n\nexport class RedirectMatch extends RouteMatch {\n  constructor(public redirectTo: any[], public specificity) { super(); }\n}\n\n// Rules are responsible for recognizing URL segments and generating instructions\nexport interface AbstractRule {\n  hash: string;\n  path: string;\n  recognize(beginningSegment: Url): Promise<RouteMatch>;\n  generate(params: {[key: string]: any}): ComponentInstruction;\n}\n\nexport class RedirectRule implements AbstractRule {\n  public hash: string;\n\n  constructor(private _pathRecognizer: RoutePath, public redirectTo: any[]) {\n    this.hash = this._pathRecognizer.hash;\n  }\n\n  get path() { return this._pathRecognizer.toString(); }\n  set path(val) { throw new BaseException('you cannot set the path of a RedirectRule directly'); }\n\n  /**\n   * Returns `null` or a `ParsedUrl` representing the new path to match\n   */\n  recognize(beginningSegment: Url): Promise<RouteMatch> {\n    var match = null;\n    if (isPresent(this._pathRecognizer.matchUrl(beginningSegment))) {\n      match = new RedirectMatch(this.redirectTo, this._pathRecognizer.specificity);\n    }\n    return PromiseWrapper.resolve(match);\n  }\n\n  generate(params: {[key: string]: any}): ComponentInstruction {\n    throw new BaseException(`Tried to generate a redirect.`);\n  }\n}\n\n\n// represents something like '/foo/:bar'\nexport class RouteRule implements AbstractRule {\n  specificity: string;\n  terminal: boolean;\n  hash: string;\n\n  private _cache: Map<string, ComponentInstruction> = new Map<string, ComponentInstruction>();\n\n  // TODO: cache component instruction instances by params and by ParsedUrl instance\n\n  constructor(private _routePath: RoutePath, public handler: RouteHandler) {\n    this.specificity = this._routePath.specificity;\n    this.hash = this._routePath.hash;\n    this.terminal = this._routePath.terminal;\n  }\n\n  get path() { return this._routePath.toString(); }\n  set path(val) { throw new BaseException('you cannot set the path of a RouteRule directly'); }\n\n  recognize(beginningSegment: Url): Promise<RouteMatch> {\n    var res = this._routePath.matchUrl(beginningSegment);\n    if (isBlank(res)) {\n      return null;\n    }\n\n    return this.handler.resolveComponentType().then((_) => {\n      var componentInstruction = this._getInstruction(res.urlPath, res.urlParams, res.allParams);\n      return new PathMatch(componentInstruction, res.rest, res.auxiliary);\n    });\n  }\n\n  generate(params: {[key: string]: any}): ComponentInstruction {\n    var generated = this._routePath.generateUrl(params);\n    var urlPath = generated.urlPath;\n    var urlParams = generated.urlParams;\n    return this._getInstruction(urlPath, convertUrlParamsToArray(urlParams), params);\n  }\n\n  generateComponentPathValues(params: {[key: string]: any}): GeneratedUrl {\n    return this._routePath.generateUrl(params);\n  }\n\n  private _getInstruction(urlPath: string, urlParams: string[],\n                          params: {[key: string]: any}): ComponentInstruction {\n    if (isBlank(this.handler.componentType)) {\n      throw new BaseException(`Tried to get instruction before the type was loaded.`);\n    }\n    var hashKey = urlPath + '?' + urlParams.join('&');\n    if (this._cache.has(hashKey)) {\n      return this._cache.get(hashKey);\n    }\n    var instruction =\n        new ComponentInstruction(urlPath, urlParams, this.handler.data, this.handler.componentType,\n                                 this.terminal, this.specificity, params);\n    this._cache.set(hashKey, instruction);\n\n    return instruction;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/rules.ts\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('./Subscriber');\nvar InnerSubscriber = (function (_super) {\n    __extends(InnerSubscriber, _super);\n    function InnerSubscriber(parent, outerValue, outerIndex) {\n        _super.call(this);\n        this.parent = parent;\n        this.outerValue = outerValue;\n        this.outerIndex = outerIndex;\n        this.index = 0;\n    }\n    InnerSubscriber.prototype._next = function (value) {\n        this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n    };\n    InnerSubscriber.prototype._error = function (error) {\n        this.parent.notifyError(error, this);\n        this.unsubscribe();\n    };\n    InnerSubscriber.prototype._complete = function () {\n        this.parent.notifyComplete(this);\n        this.unsubscribe();\n    };\n    return InnerSubscriber;\n}(Subscriber_1.Subscriber));\nexports.InnerSubscriber = InnerSubscriber;\n//# sourceMappingURL=InnerSubscriber.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/InnerSubscriber.js\n ** module id = 384\n ** module chunks = 1\n **/","\"use strict\";\nexports.empty = {\n    isUnsubscribed: true,\n    next: function (value) { },\n    error: function (err) { throw err; },\n    complete: function () { }\n};\n//# sourceMappingURL=Observer.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/Observer.js\n ** module id = 385\n ** module chunks = 1\n **/","\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('../Subscription');\nvar SubjectSubscription = (function (_super) {\n    __extends(SubjectSubscription, _super);\n    function SubjectSubscription(subject, observer) {\n        _super.call(this);\n        this.subject = subject;\n        this.observer = observer;\n        this.isUnsubscribed = false;\n    }\n    SubjectSubscription.prototype.unsubscribe = function () {\n        if (this.isUnsubscribed) {\n            return;\n        }\n        this.isUnsubscribed = true;\n        var subject = this.subject;\n        var observers = subject.observers;\n        this.subject = null;\n        if (!observers || observers.length === 0 || subject.isUnsubscribed) {\n            return;\n        }\n        var subscriberIndex = observers.indexOf(this.observer);\n        if (subscriberIndex !== -1) {\n            observers.splice(subscriberIndex, 1);\n        }\n    };\n    return SubjectSubscription;\n}(Subscription_1.Subscription));\nexports.SubjectSubscription = SubjectSubscription;\n//# sourceMappingURL=SubjectSubscription.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/subject/SubjectSubscription.js\n ** module id = 577\n ** module chunks = 1\n **/","\"use strict\";\nvar Subscriber_1 = require('../Subscriber');\nvar rxSubscriber_1 = require('../symbol/rxSubscriber');\nfunction toSubscriber(nextOrObserver, error, complete) {\n    if (nextOrObserver && typeof nextOrObserver === 'object') {\n        if (nextOrObserver instanceof Subscriber_1.Subscriber) {\n            return nextOrObserver;\n        }\n        else if (typeof nextOrObserver[rxSubscriber_1.rxSubscriber] === 'function') {\n            return nextOrObserver[rxSubscriber_1.rxSubscriber]();\n        }\n    }\n    return new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n}\nexports.toSubscriber = toSubscriber;\n//# sourceMappingURL=toSubscriber.js.map\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/rxjs/util/toSubscriber.js\n ** module id = 583\n ** module chunks = 1\n **/","import {\n  DateWrapper,\n  StringWrapper,\n  RegExpWrapper,\n  NumberWrapper,\n  isPresent\n} from 'angular2/src/facade/lang';\nimport {Math} from 'angular2/src/facade/math';\nimport {camelCaseToDashCase} from 'angular2/src/platform/dom/util';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\n\nimport {BrowserDetails} from './browser_details';\nimport {CssAnimationOptions} from './css_animation_options';\n\nexport class Animation {\n  /** functions to be called upon completion */\n  callbacks: Function[] = [];\n\n  /** the duration (ms) of the animation (whether from CSS or manually set) */\n  computedDuration: number;\n\n  /** the animation delay (ms) (whether from CSS or manually set) */\n  computedDelay: number;\n\n  /** timestamp of when the animation started */\n  startTime: number;\n\n  /** functions for removing event listeners */\n  eventClearFunctions: Function[] = [];\n\n  /** flag used to track whether or not the animation has finished */\n  completed: boolean = false;\n\n  private _stringPrefix: string = '';\n\n  /** total amount of time that the animation should take including delay */\n  get totalTime(): number {\n    let delay = this.computedDelay != null ? this.computedDelay : 0;\n    let duration = this.computedDuration != null ? this.computedDuration : 0;\n    return delay + duration;\n  }\n\n  /**\n   * Stores the start time and starts the animation\n   * @param element\n   * @param data\n   * @param browserDetails\n   */\n  constructor(public element: HTMLElement, public data: CssAnimationOptions,\n              public browserDetails: BrowserDetails) {\n    this.startTime = DateWrapper.toMillis(DateWrapper.now());\n    this._stringPrefix = DOM.getAnimationPrefix();\n    this.setup();\n    this.wait((timestamp: any) => this.start());\n  }\n\n  wait(callback: Function) {\n    // Firefox requires 2 frames for some reason\n    this.browserDetails.raf(callback, 2);\n  }\n\n  /**\n   * Sets up the initial styles before the animation is started\n   */\n  setup(): void {\n    if (this.data.fromStyles != null) this.applyStyles(this.data.fromStyles);\n    if (this.data.duration != null)\n      this.applyStyles({'transitionDuration': this.data.duration.toString() + 'ms'});\n    if (this.data.delay != null)\n      this.applyStyles({'transitionDelay': this.data.delay.toString() + 'ms'});\n  }\n\n  /**\n   * After the initial setup has occurred, this method adds the animation styles\n   */\n  start(): void {\n    this.addClasses(this.data.classesToAdd);\n    this.addClasses(this.data.animationClasses);\n    this.removeClasses(this.data.classesToRemove);\n    if (this.data.toStyles != null) this.applyStyles(this.data.toStyles);\n    var computedStyles = DOM.getComputedStyle(this.element);\n    this.computedDelay =\n        Math.max(this.parseDurationString(\n                     computedStyles.getPropertyValue(this._stringPrefix + 'transition-delay')),\n                 this.parseDurationString(\n                     this.element.style.getPropertyValue(this._stringPrefix + 'transition-delay')));\n    this.computedDuration = Math.max(this.parseDurationString(computedStyles.getPropertyValue(\n                                         this._stringPrefix + 'transition-duration')),\n                                     this.parseDurationString(this.element.style.getPropertyValue(\n                                         this._stringPrefix + 'transition-duration')));\n    this.addEvents();\n  }\n\n  /**\n   * Applies the provided styles to the element\n   * @param styles\n   */\n  applyStyles(styles: {[key: string]: any}): void {\n    StringMapWrapper.forEach(styles, (value: any, key: string) => {\n      var dashCaseKey = camelCaseToDashCase(key);\n      if (isPresent(DOM.getStyle(this.element, dashCaseKey))) {\n        DOM.setStyle(this.element, dashCaseKey, value.toString());\n      } else {\n        DOM.setStyle(this.element, this._stringPrefix + dashCaseKey, value.toString());\n      }\n    });\n  }\n\n  /**\n   * Adds the provided classes to the element\n   * @param classes\n   */\n  addClasses(classes: string[]): void {\n    for (let i = 0, len = classes.length; i < len; i++) DOM.addClass(this.element, classes[i]);\n  }\n\n  /**\n   * Removes the provided classes from the element\n   * @param classes\n   */\n  removeClasses(classes: string[]): void {\n    for (let i = 0, len = classes.length; i < len; i++) DOM.removeClass(this.element, classes[i]);\n  }\n\n  /**\n   * Adds events to track when animations have finished\n   */\n  addEvents(): void {\n    if (this.totalTime > 0) {\n      this.eventClearFunctions.push(DOM.onAndCancel(\n          this.element, DOM.getTransitionEnd(), (event: any) => this.handleAnimationEvent(event)));\n    } else {\n      this.handleAnimationCompleted();\n    }\n  }\n\n  handleAnimationEvent(event: any): void {\n    let elapsedTime = Math.round(event.elapsedTime * 1000);\n    if (!this.browserDetails.elapsedTimeIncludesDelay) elapsedTime += this.computedDelay;\n    event.stopPropagation();\n    if (elapsedTime >= this.totalTime) this.handleAnimationCompleted();\n  }\n\n  /**\n   * Runs all animation callbacks and removes temporary classes\n   */\n  handleAnimationCompleted(): void {\n    this.removeClasses(this.data.animationClasses);\n    this.callbacks.forEach(callback => callback());\n    this.callbacks = [];\n    this.eventClearFunctions.forEach(fn => fn());\n    this.eventClearFunctions = [];\n    this.completed = true;\n  }\n\n  /**\n   * Adds animation callbacks to be called upon completion\n   * @param callback\n   * @returns {Animation}\n   */\n  onComplete(callback: Function): Animation {\n    if (this.completed) {\n      callback();\n    } else {\n      this.callbacks.push(callback);\n    }\n    return this;\n  }\n\n  /**\n   * Converts the duration string to the number of milliseconds\n   * @param duration\n   * @returns {number}\n   */\n  parseDurationString(duration: string): number {\n    var maxValue = 0;\n    // duration must have at least 2 characters to be valid. (number + type)\n    if (duration == null || duration.length < 2) {\n      return maxValue;\n    } else if (duration.substring(duration.length - 2) == 'ms') {\n      let value = NumberWrapper.parseInt(this.stripLetters(duration), 10);\n      if (value > maxValue) maxValue = value;\n    } else if (duration.substring(duration.length - 1) == 's') {\n      let ms = NumberWrapper.parseFloat(this.stripLetters(duration)) * 1000;\n      let value = Math.floor(ms);\n      if (value > maxValue) maxValue = value;\n    }\n    return maxValue;\n  }\n\n  /**\n   * Strips the letters from the duration string\n   * @param str\n   * @returns {string}\n   */\n  stripLetters(str: string): string {\n    return StringWrapper.replaceAll(str, RegExpWrapper.create('[^0-9]+$', ''), '');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/animate/animation.ts\n **/","import {CssAnimationOptions} from './css_animation_options';\nimport {Animation} from './animation';\nimport {BrowserDetails} from './browser_details';\n\nexport class CssAnimationBuilder {\n  /** @type {CssAnimationOptions} */\n  data: CssAnimationOptions = new CssAnimationOptions();\n\n  /**\n   * Accepts public properties for CssAnimationBuilder\n   */\n  constructor(public browserDetails: BrowserDetails) {}\n\n  /**\n   * Adds a temporary class that will be removed at the end of the animation\n   * @param className\n   */\n  addAnimationClass(className: string): CssAnimationBuilder {\n    this.data.animationClasses.push(className);\n    return this;\n  }\n\n  /**\n   * Adds a class that will remain on the element after the animation has finished\n   * @param className\n   */\n  addClass(className: string): CssAnimationBuilder {\n    this.data.classesToAdd.push(className);\n    return this;\n  }\n\n  /**\n   * Removes a class from the element\n   * @param className\n   */\n  removeClass(className: string): CssAnimationBuilder {\n    this.data.classesToRemove.push(className);\n    return this;\n  }\n\n  /**\n   * Sets the animation duration (and overrides any defined through CSS)\n   * @param duration\n   */\n  setDuration(duration: number): CssAnimationBuilder {\n    this.data.duration = duration;\n    return this;\n  }\n\n  /**\n   * Sets the animation delay (and overrides any defined through CSS)\n   * @param delay\n   */\n  setDelay(delay: number): CssAnimationBuilder {\n    this.data.delay = delay;\n    return this;\n  }\n\n  /**\n   * Sets styles for both the initial state and the destination state\n   * @param from\n   * @param to\n   */\n  setStyles(from: {[key: string]: any}, to: {[key: string]: any}): CssAnimationBuilder {\n    return this.setFromStyles(from).setToStyles(to);\n  }\n\n  /**\n   * Sets the initial styles for the animation\n   * @param from\n   */\n  setFromStyles(from: {[key: string]: any}): CssAnimationBuilder {\n    this.data.fromStyles = from;\n    return this;\n  }\n\n  /**\n   * Sets the destination styles for the animation\n   * @param to\n   */\n  setToStyles(to: {[key: string]: any}): CssAnimationBuilder {\n    this.data.toStyles = to;\n    return this;\n  }\n\n  /**\n   * Starts the animation and returns a promise\n   * @param element\n   */\n  start(element: HTMLElement): Animation {\n    return new Animation(element, this.data, this.browserDetails);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/animate/css_animation_builder.ts\n **/","export class CssAnimationOptions {\n  /** initial styles for the element */\n  fromStyles: {[key: string]: any};\n\n  /** destination styles for the element */\n  toStyles: {[key: string]: any};\n\n  /** classes to be added to the element */\n  classesToAdd: string[] = [];\n\n  /** classes to be removed from the element */\n  classesToRemove: string[] = [];\n\n  /** classes to be added for the duration of the animation */\n  animationClasses: string[] = [];\n\n  /** override the duration of the animation (in milliseconds) */\n  duration: number;\n\n  /** override the transition delay (in milliseconds) */\n  delay: number;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/animate/css_animation_options.ts\n **/","import {CONST_EXPR, Type} from 'angular2/src/facade/lang';\n\nimport {FORM_DIRECTIVES} from './forms';\nimport {CORE_DIRECTIVES} from './directives';\n\n/**\n * A collection of Angular core directives that are likely to be used in each and every Angular\n * application. This includes core directives (e.g., NgIf and NgFor), and forms directives (e.g.,\n * NgModel).\n *\n * This collection can be used to quickly enumerate all the built-in directives in the `directives`\n * property of the `@Component` decorator.\n *\n * ### Example\n *\n * Instead of writing:\n *\n * ```typescript\n * import {NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, NgModel, NgForm} from\n * 'angular2/common';\n * import {OtherDirective} from './myDirectives';\n *\n * @Component({\n *   selector: 'my-component',\n *   templateUrl: 'myComponent.html',\n *   directives: [NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, NgModel, NgForm,\n * OtherDirective]\n * })\n * export class MyComponent {\n *   ...\n * }\n * ```\n * one could import all the common directives at once:\n *\n * ```typescript\n * import {COMMON_DIRECTIVES} from 'angular2/common';\n * import {OtherDirective} from './myDirectives';\n *\n * @Component({\n *   selector: 'my-component',\n *   templateUrl: 'myComponent.html',\n *   directives: [COMMON_DIRECTIVES, OtherDirective]\n * })\n * export class MyComponent {\n *   ...\n * }\n * ```\n */\nexport const COMMON_DIRECTIVES: Type[][] = CONST_EXPR([CORE_DIRECTIVES, FORM_DIRECTIVES]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/common_directives.ts\n **/","import {CONST_EXPR, Type} from 'angular2/src/facade/lang';\nimport {NgClass} from './ng_class';\nimport {NgFor} from './ng_for';\nimport {NgIf} from './ng_if';\nimport {NgStyle} from './ng_style';\nimport {NgSwitch, NgSwitchWhen, NgSwitchDefault} from './ng_switch';\nimport {NgPlural, NgPluralCase} from './ng_plural';\n\n/**\n * A collection of Angular core directives that are likely to be used in each and every Angular\n * application.\n *\n * This collection can be used to quickly enumerate all the built-in directives in the `directives`\n * property of the `@Component` annotation.\n *\n * ### Example ([live demo](http://plnkr.co/edit/yakGwpCdUkg0qfzX5m8g?p=preview))\n *\n * Instead of writing:\n *\n * ```typescript\n * import {NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault} from 'angular2/common';\n * import {OtherDirective} from './myDirectives';\n *\n * @Component({\n *   selector: 'my-component',\n *   templateUrl: 'myComponent.html',\n *   directives: [NgClass, NgIf, NgFor, NgSwitch, NgSwitchWhen, NgSwitchDefault, OtherDirective]\n * })\n * export class MyComponent {\n *   ...\n * }\n * ```\n * one could import all the core directives at once:\n *\n * ```typescript\n * import {CORE_DIRECTIVES} from 'angular2/common';\n * import {OtherDirective} from './myDirectives';\n *\n * @Component({\n *   selector: 'my-component',\n *   templateUrl: 'myComponent.html',\n *   directives: [CORE_DIRECTIVES, OtherDirective]\n * })\n * export class MyComponent {\n *   ...\n * }\n * ```\n */\nexport const CORE_DIRECTIVES: Type[] = CONST_EXPR([\n  NgClass,\n  NgFor,\n  NgIf,\n  NgStyle,\n  NgSwitch,\n  NgSwitchWhen,\n  NgSwitchDefault,\n  NgPlural,\n  NgPluralCase\n]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/core_directives.ts\n **/","// TS does not have Observables\n\n// I need to be here to make TypeScript think this is a module.\nimport {} from 'angular2/src/facade/lang';\n\n/**\n * This module exists in Dart, but not in Typescript. This exported symbol\n * is only here to help Typescript think this is a module.\n */\nexport var workaround_empty_observable_list_diff: any;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/directives/observable_list_diff.ts\n **/","import {Type, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {NgControlName} from './directives/ng_control_name';\nimport {NgFormControl} from './directives/ng_form_control';\nimport {NgModel} from './directives/ng_model';\nimport {NgControlGroup} from './directives/ng_control_group';\nimport {NgFormModel} from './directives/ng_form_model';\nimport {NgForm} from './directives/ng_form';\nimport {DefaultValueAccessor} from './directives/default_value_accessor';\nimport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nimport {NumberValueAccessor} from './directives/number_value_accessor';\nimport {RadioControlValueAccessor} from './directives/radio_control_value_accessor';\nimport {NgControlStatus} from './directives/ng_control_status';\nimport {\n  SelectControlValueAccessor,\n  NgSelectOption\n} from './directives/select_control_value_accessor';\nimport {\n  RequiredValidator,\n  MinLengthValidator,\n  MaxLengthValidator,\n  PatternValidator\n} from './directives/validators';\n\nexport {NgControlName} from './directives/ng_control_name';\nexport {NgFormControl} from './directives/ng_form_control';\nexport {NgModel} from './directives/ng_model';\nexport {NgControlGroup} from './directives/ng_control_group';\nexport {NgFormModel} from './directives/ng_form_model';\nexport {NgForm} from './directives/ng_form';\nexport {DefaultValueAccessor} from './directives/default_value_accessor';\nexport {CheckboxControlValueAccessor} from './directives/checkbox_value_accessor';\nexport {\n  RadioControlValueAccessor,\n  RadioButtonState\n} from './directives/radio_control_value_accessor';\nexport {NumberValueAccessor} from './directives/number_value_accessor';\nexport {NgControlStatus} from './directives/ng_control_status';\nexport {\n  SelectControlValueAccessor,\n  NgSelectOption\n} from './directives/select_control_value_accessor';\nexport {\n  RequiredValidator,\n  MinLengthValidator,\n  MaxLengthValidator,\n  PatternValidator\n} from './directives/validators';\nexport {NgControl} from './directives/ng_control';\nexport {ControlValueAccessor} from './directives/control_value_accessor';\n\n/**\n *\n * A list of all the form directives used as part of a `@Component` annotation.\n *\n *  This is a shorthand for importing them each individually.\n *\n * ### Example\n *\n * ```typescript\n * @Component({\n *   selector: 'my-app',\n *   directives: [FORM_DIRECTIVES]\n * })\n * class MyApp {}\n * ```\n */\nexport const FORM_DIRECTIVES: Type[] = CONST_EXPR([\n  NgControlName,\n  NgControlGroup,\n\n  NgFormControl,\n  NgModel,\n  NgFormModel,\n  NgForm,\n\n  NgSelectOption,\n  DefaultValueAccessor,\n  NumberValueAccessor,\n  CheckboxControlValueAccessor,\n  SelectControlValueAccessor,\n  RadioControlValueAccessor,\n  NgControlStatus,\n\n  RequiredValidator,\n  MinLengthValidator,\n  MaxLengthValidator,\n  PatternValidator\n]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives.ts\n **/","import {AbstractControl} from \"../model\";\nimport {Validator, ValidatorFn, AsyncValidatorFn} from './validators';\n\nexport function normalizeValidator(validator: ValidatorFn | Validator): ValidatorFn {\n  if ((<Validator>validator).validate !== undefined) {\n    return (c: AbstractControl) => (<Validator>validator).validate(c);\n  } else {\n    return <ValidatorFn>validator;\n  }\n}\n\nexport function normalizeAsyncValidator(validator: AsyncValidatorFn | Validator): AsyncValidatorFn {\n  if ((<Validator>validator).validate !== undefined) {\n    return (c: AbstractControl) => Promise.resolve((<Validator>validator).validate(c));\n  } else {\n    return <AsyncValidatorFn>validator;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/forms/directives/normalize_validator.ts\n **/","/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\n\nexport {AsyncPipe} from './pipes/async_pipe';\nexport {DatePipe} from './pipes/date_pipe';\nexport {JsonPipe} from './pipes/json_pipe';\nexport {SlicePipe} from './pipes/slice_pipe';\nexport {LowerCasePipe} from './pipes/lowercase_pipe';\nexport {NumberPipe, DecimalPipe, PercentPipe, CurrencyPipe} from './pipes/number_pipe';\nexport {UpperCasePipe} from './pipes/uppercase_pipe';\nexport {ReplacePipe} from './pipes/replace_pipe';\nexport {I18nPluralPipe} from './pipes/i18n_plural_pipe';\nexport {I18nSelectPipe} from './pipes/i18n_select_pipe';\nexport {COMMON_PIPES} from './pipes/common_pipes';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes.ts\n **/","/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\nimport {AsyncPipe} from './async_pipe';\nimport {UpperCasePipe} from './uppercase_pipe';\nimport {LowerCasePipe} from './lowercase_pipe';\nimport {JsonPipe} from './json_pipe';\nimport {SlicePipe} from './slice_pipe';\nimport {DatePipe} from './date_pipe';\nimport {DecimalPipe, PercentPipe, CurrencyPipe} from './number_pipe';\nimport {ReplacePipe} from './replace_pipe';\nimport {I18nPluralPipe} from './i18n_plural_pipe';\nimport {I18nSelectPipe} from './i18n_select_pipe';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\n\n/**\n * A collection of Angular core pipes that are likely to be used in each and every\n * application.\n *\n * This collection can be used to quickly enumerate all the built-in pipes in the `pipes`\n * property of the `@Component` decorator.\n */\nexport const COMMON_PIPES = CONST_EXPR([\n  AsyncPipe,\n  UpperCasePipe,\n  LowerCasePipe,\n  JsonPipe,\n  SlicePipe,\n  DecimalPipe,\n  PercentPipe,\n  CurrencyPipe,\n  DatePipe,\n  ReplacePipe,\n  I18nPluralPipe,\n  I18nSelectPipe\n]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/common/pipes/common_pipes.ts\n **/","import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {reflector} from 'angular2/src/core/reflection/reflection';\n\nimport {\n  DirectiveIndex,\n  BindingRecord,\n  DirectiveRecord,\n  ChangeDetectionStrategy,\n  ChangeDetectorDefinition,\n  ChangeDetectorGenConfig,\n  ASTWithSource\n} from 'angular2/src/core/change_detection/change_detection';\n\nimport {CompileDirectiveMetadata, CompileTypeMetadata} from './directive_metadata';\nimport {\n  TemplateAst,\n  ElementAst,\n  BoundTextAst,\n  PropertyBindingType,\n  DirectiveAst,\n  TemplateAstVisitor,\n  templateVisitAll,\n  NgContentAst,\n  EmbeddedTemplateAst,\n  VariableAst,\n  BoundElementPropertyAst,\n  BoundEventAst,\n  BoundDirectivePropertyAst,\n  AttrAst,\n  TextAst\n} from './template_ast';\nimport {LifecycleHooks} from 'angular2/src/core/linker/interfaces';\n\nexport function createChangeDetectorDefinitions(\n    componentType: CompileTypeMetadata, componentStrategy: ChangeDetectionStrategy,\n    genConfig: ChangeDetectorGenConfig, parsedTemplate: TemplateAst[]): ChangeDetectorDefinition[] {\n  var pvVisitors = [];\n  var visitor = new ProtoViewVisitor(null, pvVisitors, componentStrategy);\n  templateVisitAll(visitor, parsedTemplate);\n  return createChangeDefinitions(pvVisitors, componentType, genConfig);\n}\n\nclass ProtoViewVisitor implements TemplateAstVisitor {\n  viewIndex: number;\n  nodeCount: number = 0;\n  boundElementCount: number = 0;\n  variableNames: string[] = [];\n  bindingRecords: BindingRecord[] = [];\n  eventRecords: BindingRecord[] = [];\n  directiveRecords: DirectiveRecord[] = [];\n\n  constructor(public parent: ProtoViewVisitor, public allVisitors: ProtoViewVisitor[],\n              public strategy: ChangeDetectionStrategy) {\n    this.viewIndex = allVisitors.length;\n    allVisitors.push(this);\n  }\n\n  visitEmbeddedTemplate(ast: EmbeddedTemplateAst, context: any): any {\n    this.nodeCount++;\n    this.boundElementCount++;\n    templateVisitAll(this, ast.outputs);\n    for (var i = 0; i < ast.directives.length; i++) {\n      ast.directives[i].visit(this, i);\n    }\n\n    var childVisitor =\n        new ProtoViewVisitor(this, this.allVisitors, ChangeDetectionStrategy.Default);\n    // Attention: variables present on an embedded template count towards\n    // the embedded template and not the template anchor!\n    templateVisitAll(childVisitor, ast.vars);\n    templateVisitAll(childVisitor, ast.children);\n    return null;\n  }\n\n  visitElement(ast: ElementAst, context: any): any {\n    this.nodeCount++;\n    if (ast.isBound()) {\n      this.boundElementCount++;\n    }\n    templateVisitAll(this, ast.inputs, null);\n    templateVisitAll(this, ast.outputs);\n    templateVisitAll(this, ast.exportAsVars);\n    for (var i = 0; i < ast.directives.length; i++) {\n      ast.directives[i].visit(this, i);\n    }\n    templateVisitAll(this, ast.children);\n    return null;\n  }\n\n  visitNgContent(ast: NgContentAst, context: any): any { return null; }\n\n  visitVariable(ast: VariableAst, context: any): any {\n    this.variableNames.push(ast.name);\n    return null;\n  }\n\n  visitEvent(ast: BoundEventAst, directiveRecord: DirectiveRecord): any {\n    var bindingRecord =\n        isPresent(directiveRecord) ?\n            BindingRecord.createForHostEvent(ast.handler, ast.fullName, directiveRecord) :\n            BindingRecord.createForEvent(ast.handler, ast.fullName, this.boundElementCount - 1);\n    this.eventRecords.push(bindingRecord);\n    return null;\n  }\n\n  visitElementProperty(ast: BoundElementPropertyAst, directiveRecord: DirectiveRecord): any {\n    var boundElementIndex = this.boundElementCount - 1;\n    var dirIndex = isPresent(directiveRecord) ? directiveRecord.directiveIndex : null;\n    var bindingRecord;\n    if (ast.type === PropertyBindingType.Property) {\n      bindingRecord =\n          isPresent(dirIndex) ?\n              BindingRecord.createForHostProperty(dirIndex, ast.value, ast.name) :\n              BindingRecord.createForElementProperty(ast.value, boundElementIndex, ast.name);\n    } else if (ast.type === PropertyBindingType.Attribute) {\n      bindingRecord =\n          isPresent(dirIndex) ?\n              BindingRecord.createForHostAttribute(dirIndex, ast.value, ast.name) :\n              BindingRecord.createForElementAttribute(ast.value, boundElementIndex, ast.name);\n    } else if (ast.type === PropertyBindingType.Class) {\n      bindingRecord =\n          isPresent(dirIndex) ?\n              BindingRecord.createForHostClass(dirIndex, ast.value, ast.name) :\n              BindingRecord.createForElementClass(ast.value, boundElementIndex, ast.name);\n    } else if (ast.type === PropertyBindingType.Style) {\n      bindingRecord =\n          isPresent(dirIndex) ?\n              BindingRecord.createForHostStyle(dirIndex, ast.value, ast.name, ast.unit) :\n              BindingRecord.createForElementStyle(ast.value, boundElementIndex, ast.name, ast.unit);\n    }\n    this.bindingRecords.push(bindingRecord);\n    return null;\n  }\n  visitAttr(ast: AttrAst, context: any): any { return null; }\n  visitBoundText(ast: BoundTextAst, context: any): any {\n    var nodeIndex = this.nodeCount++;\n    this.bindingRecords.push(BindingRecord.createForTextNode(ast.value, nodeIndex));\n    return null;\n  }\n  visitText(ast: TextAst, context: any): any {\n    this.nodeCount++;\n    return null;\n  }\n  visitDirective(ast: DirectiveAst, directiveIndexAsNumber: number): any {\n    var directiveIndex = new DirectiveIndex(this.boundElementCount - 1, directiveIndexAsNumber);\n    var directiveMetadata = ast.directive;\n    var outputsArray = [];\n    StringMapWrapper.forEach(\n        ast.directive.outputs,\n        (eventName: string, dirProperty: string) => outputsArray.push([dirProperty, eventName]));\n    var directiveRecord = new DirectiveRecord({\n      directiveIndex: directiveIndex,\n      callAfterContentInit:\n          directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.AfterContentInit) !== -1,\n      callAfterContentChecked:\n          directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.AfterContentChecked) !== -1,\n      callAfterViewInit:\n          directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.AfterViewInit) !== -1,\n      callAfterViewChecked:\n          directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.AfterViewChecked) !== -1,\n      callOnChanges: directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.OnChanges) !== -1,\n      callDoCheck: directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.DoCheck) !== -1,\n      callOnInit: directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.OnInit) !== -1,\n      callOnDestroy: directiveMetadata.lifecycleHooks.indexOf(LifecycleHooks.OnDestroy) !== -1,\n      changeDetection: directiveMetadata.changeDetection,\n      outputs: outputsArray\n    });\n    this.directiveRecords.push(directiveRecord);\n\n    templateVisitAll(this, ast.inputs, directiveRecord);\n    var bindingRecords = this.bindingRecords;\n    if (directiveRecord.callOnChanges) {\n      bindingRecords.push(BindingRecord.createDirectiveOnChanges(directiveRecord));\n    }\n    if (directiveRecord.callOnInit) {\n      bindingRecords.push(BindingRecord.createDirectiveOnInit(directiveRecord));\n    }\n    if (directiveRecord.callDoCheck) {\n      bindingRecords.push(BindingRecord.createDirectiveDoCheck(directiveRecord));\n    }\n    templateVisitAll(this, ast.hostProperties, directiveRecord);\n    templateVisitAll(this, ast.hostEvents, directiveRecord);\n    templateVisitAll(this, ast.exportAsVars);\n    return null;\n  }\n  visitDirectiveProperty(ast: BoundDirectivePropertyAst, directiveRecord: DirectiveRecord): any {\n    // TODO: these setters should eventually be created by change detection, to make\n    // it monomorphic!\n    var setter = reflector.setter(ast.directiveName);\n    this.bindingRecords.push(\n        BindingRecord.createForDirective(ast.value, ast.directiveName, setter, directiveRecord));\n    return null;\n  }\n}\n\n\nfunction createChangeDefinitions(pvVisitors: ProtoViewVisitor[], componentType: CompileTypeMetadata,\n                                 genConfig: ChangeDetectorGenConfig): ChangeDetectorDefinition[] {\n  var pvVariableNames = _collectNestedProtoViewsVariableNames(pvVisitors);\n  return pvVisitors.map(pvVisitor => {\n    var id = `${componentType.name}_${pvVisitor.viewIndex}`;\n    return new ChangeDetectorDefinition(\n        id, pvVisitor.strategy, pvVariableNames[pvVisitor.viewIndex], pvVisitor.bindingRecords,\n        pvVisitor.eventRecords, pvVisitor.directiveRecords, genConfig);\n\n  });\n}\n\nfunction _collectNestedProtoViewsVariableNames(pvVisitors: ProtoViewVisitor[]): string[][] {\n  var nestedPvVariableNames: string[][] = ListWrapper.createFixedSize(pvVisitors.length);\n  pvVisitors.forEach((pv) => {\n    var parentVariableNames: string[] =\n        isPresent(pv.parent) ? nestedPvVariableNames[pv.parent.viewIndex] : [];\n    nestedPvVariableNames[pv.viewIndex] = parentVariableNames.concat(pv.variableNames);\n  });\n  return nestedPvVariableNames;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/change_definition_factory.ts\n **/","import {RuntimeCompiler_} from \"./runtime_compiler\";\nexport {TemplateCompiler} from './template_compiler';\nexport {\n  CompileDirectiveMetadata,\n  CompileTypeMetadata,\n  CompileTemplateMetadata\n} from './directive_metadata';\nexport {SourceModule, SourceWithImports} from './source_module';\nexport {PLATFORM_DIRECTIVES, PLATFORM_PIPES} from 'angular2/src/core/platform_directives_and_pipes';\nexport * from 'angular2/src/compiler/template_ast';\nexport {TEMPLATE_TRANSFORMS} from 'angular2/src/compiler/template_parser';\nimport {assertionsEnabled, Type, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {provide, Provider} from 'angular2/src/core/di';\nimport {TemplateParser} from 'angular2/src/compiler/template_parser';\nimport {HtmlParser} from 'angular2/src/compiler/html_parser';\nimport {TemplateNormalizer} from 'angular2/src/compiler/template_normalizer';\nimport {RuntimeMetadataResolver} from 'angular2/src/compiler/runtime_metadata';\nimport {ChangeDetectionCompiler} from 'angular2/src/compiler/change_detector_compiler';\nimport {StyleCompiler} from 'angular2/src/compiler/style_compiler';\nimport {ViewCompiler} from 'angular2/src/compiler/view_compiler';\nimport {ProtoViewCompiler} from 'angular2/src/compiler/proto_view_compiler';\nimport {TemplateCompiler} from 'angular2/src/compiler/template_compiler';\nimport {ChangeDetectorGenConfig} from 'angular2/src/core/change_detection/change_detection';\nimport {Compiler} from 'angular2/src/core/linker/compiler';\nimport {RuntimeCompiler} from 'angular2/src/compiler/runtime_compiler';\nimport {ElementSchemaRegistry} from 'angular2/src/compiler/schema/element_schema_registry';\nimport {DomElementSchemaRegistry} from 'angular2/src/compiler/schema/dom_element_schema_registry';\nimport {UrlResolver, DEFAULT_PACKAGE_URL_PROVIDER} from 'angular2/src/compiler/url_resolver';\nimport {Parser, Lexer} from 'angular2/src/core/change_detection/change_detection';\n\nfunction _createChangeDetectorGenConfig() {\n  return new ChangeDetectorGenConfig(assertionsEnabled(), false, true);\n}\n\n/**\n * A set of providers that provide `RuntimeCompiler` and its dependencies to use for\n * template compilation.\n */\nexport const COMPILER_PROVIDERS: Array<Type | Provider | any[]> = CONST_EXPR([\n  Lexer,\n  Parser,\n  HtmlParser,\n  TemplateParser,\n  TemplateNormalizer,\n  RuntimeMetadataResolver,\n  DEFAULT_PACKAGE_URL_PROVIDER,\n  StyleCompiler,\n  ProtoViewCompiler,\n  ViewCompiler,\n  ChangeDetectionCompiler,\n  new Provider(ChangeDetectorGenConfig, {useFactory: _createChangeDetectorGenConfig, deps: []}),\n  TemplateCompiler,\n  new Provider(RuntimeCompiler, {useClass: RuntimeCompiler_}),\n  new Provider(Compiler, {useExisting: RuntimeCompiler}),\n  DomElementSchemaRegistry,\n  new Provider(ElementSchemaRegistry, {useExisting: DomElementSchemaRegistry}),\n  UrlResolver\n]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/compiler.ts\n **/","import {\n  StringWrapper,\n  NumberWrapper,\n  isPresent,\n  isBlank,\n  CONST_EXPR,\n  serializeEnum\n} from 'angular2/src/facade/lang';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {ParseLocation, ParseError, ParseSourceFile, ParseSourceSpan} from './parse_util';\nimport {getHtmlTagDefinition, HtmlTagContentType, NAMED_ENTITIES} from './html_tags';\n\nexport enum HtmlTokenType {\n  TAG_OPEN_START,\n  TAG_OPEN_END,\n  TAG_OPEN_END_VOID,\n  TAG_CLOSE,\n  TEXT,\n  ESCAPABLE_RAW_TEXT,\n  RAW_TEXT,\n  COMMENT_START,\n  COMMENT_END,\n  CDATA_START,\n  CDATA_END,\n  ATTR_NAME,\n  ATTR_VALUE,\n  DOC_TYPE,\n  EOF\n}\n\nexport class HtmlToken {\n  constructor(public type: HtmlTokenType, public parts: string[],\n              public sourceSpan: ParseSourceSpan) {}\n}\n\nexport class HtmlTokenError extends ParseError {\n  constructor(errorMsg: string, public tokenType: HtmlTokenType, span: ParseSourceSpan) {\n    super(span, errorMsg);\n  }\n}\n\nexport class HtmlTokenizeResult {\n  constructor(public tokens: HtmlToken[], public errors: HtmlTokenError[]) {}\n}\n\nexport function tokenizeHtml(sourceContent: string, sourceUrl: string): HtmlTokenizeResult {\n  return new _HtmlTokenizer(new ParseSourceFile(sourceContent, sourceUrl)).tokenize();\n}\n\nconst $EOF = 0;\nconst $TAB = 9;\nconst $LF = 10;\nconst $FF = 12;\nconst $CR = 13;\n\nconst $SPACE = 32;\n\nconst $BANG = 33;\nconst $DQ = 34;\nconst $HASH = 35;\nconst $$ = 36;\nconst $AMPERSAND = 38;\nconst $SQ = 39;\nconst $MINUS = 45;\nconst $SLASH = 47;\nconst $0 = 48;\n\nconst $SEMICOLON = 59;\n\nconst $9 = 57;\nconst $COLON = 58;\nconst $LT = 60;\nconst $EQ = 61;\nconst $GT = 62;\nconst $QUESTION = 63;\nconst $LBRACKET = 91;\nconst $RBRACKET = 93;\nconst $A = 65;\nconst $F = 70;\nconst $X = 88;\nconst $Z = 90;\n\nconst $a = 97;\nconst $f = 102;\nconst $z = 122;\nconst $x = 120;\n\nconst $NBSP = 160;\n\nvar CR_OR_CRLF_REGEXP = /\\r\\n?/g;\n\nfunction unexpectedCharacterErrorMsg(charCode: number): string {\n  var char = charCode === $EOF ? 'EOF' : StringWrapper.fromCharCode(charCode);\n  return `Unexpected character \"${char}\"`;\n}\n\nfunction unknownEntityErrorMsg(entitySrc: string): string {\n  return `Unknown entity \"${entitySrc}\" - use the \"&#<decimal>;\" or  \"&#x<hex>;\" syntax`;\n}\n\nclass ControlFlowError {\n  constructor(public error: HtmlTokenError) {}\n}\n\n// See http://www.w3.org/TR/html51/syntax.html#writing\nclass _HtmlTokenizer {\n  private input: string;\n  private length: number;\n  // Note: this is always lowercase!\n  private peek: number = -1;\n  private index: number = -1;\n  private line: number = 0;\n  private column: number = -1;\n  private currentTokenStart: ParseLocation;\n  private currentTokenType: HtmlTokenType;\n\n  tokens: HtmlToken[] = [];\n  errors: HtmlTokenError[] = [];\n\n  constructor(private file: ParseSourceFile) {\n    this.input = file.content;\n    this.length = file.content.length;\n    this._advance();\n  }\n\n  private _processCarriageReturns(content: string): string {\n    // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream\n    // In order to keep the original position in the source, we can not\n    // pre-process it.\n    // Instead CRs are processed right before instantiating the tokens.\n    return StringWrapper.replaceAll(content, CR_OR_CRLF_REGEXP, '\\n');\n  }\n\n  tokenize(): HtmlTokenizeResult {\n    while (this.peek !== $EOF) {\n      var start = this._getLocation();\n      try {\n        if (this._attemptCharCode($LT)) {\n          if (this._attemptCharCode($BANG)) {\n            if (this._attemptCharCode($LBRACKET)) {\n              this._consumeCdata(start);\n            } else if (this._attemptCharCode($MINUS)) {\n              this._consumeComment(start);\n            } else {\n              this._consumeDocType(start);\n            }\n          } else if (this._attemptCharCode($SLASH)) {\n            this._consumeTagClose(start);\n          } else {\n            this._consumeTagOpen(start);\n          }\n        } else {\n          this._consumeText();\n        }\n      } catch (e) {\n        if (e instanceof ControlFlowError) {\n          this.errors.push(e.error);\n        } else {\n          throw e;\n        }\n      }\n    }\n    this._beginToken(HtmlTokenType.EOF);\n    this._endToken([]);\n    return new HtmlTokenizeResult(mergeTextTokens(this.tokens), this.errors);\n  }\n\n  private _getLocation(): ParseLocation {\n    return new ParseLocation(this.file, this.index, this.line, this.column);\n  }\n\n  private _getSpan(start?: ParseLocation, end?: ParseLocation): ParseSourceSpan {\n    if (isBlank(start)) {\n      start = this._getLocation();\n    }\n    if (isBlank(end)) {\n      end = this._getLocation();\n    }\n    return new ParseSourceSpan(start, end);\n  }\n\n  private _beginToken(type: HtmlTokenType, start: ParseLocation = null) {\n    if (isBlank(start)) {\n      start = this._getLocation();\n    }\n    this.currentTokenStart = start;\n    this.currentTokenType = type;\n  }\n\n  private _endToken(parts: string[], end: ParseLocation = null): HtmlToken {\n    if (isBlank(end)) {\n      end = this._getLocation();\n    }\n    var token = new HtmlToken(this.currentTokenType, parts,\n                              new ParseSourceSpan(this.currentTokenStart, end));\n    this.tokens.push(token);\n    this.currentTokenStart = null;\n    this.currentTokenType = null;\n    return token;\n  }\n\n  private _createError(msg: string, span: ParseSourceSpan): ControlFlowError {\n    var error = new HtmlTokenError(msg, this.currentTokenType, span);\n    this.currentTokenStart = null;\n    this.currentTokenType = null;\n    return new ControlFlowError(error);\n  }\n\n  private _advance() {\n    if (this.index >= this.length) {\n      throw this._createError(unexpectedCharacterErrorMsg($EOF), this._getSpan());\n    }\n    if (this.peek === $LF) {\n      this.line++;\n      this.column = 0;\n    } else if (this.peek !== $LF && this.peek !== $CR) {\n      this.column++;\n    }\n    this.index++;\n    this.peek = this.index >= this.length ? $EOF : StringWrapper.charCodeAt(this.input, this.index);\n  }\n\n  private _attemptCharCode(charCode: number): boolean {\n    if (this.peek === charCode) {\n      this._advance();\n      return true;\n    }\n    return false;\n  }\n\n  private _attemptCharCodeCaseInsensitive(charCode: number): boolean {\n    if (compareCharCodeCaseInsensitive(this.peek, charCode)) {\n      this._advance();\n      return true;\n    }\n    return false;\n  }\n\n  private _requireCharCode(charCode: number) {\n    var location = this._getLocation();\n    if (!this._attemptCharCode(charCode)) {\n      throw this._createError(unexpectedCharacterErrorMsg(this.peek),\n                              this._getSpan(location, location));\n    }\n  }\n\n  private _attemptStr(chars: string): boolean {\n    for (var i = 0; i < chars.length; i++) {\n      if (!this._attemptCharCode(StringWrapper.charCodeAt(chars, i))) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private _attemptStrCaseInsensitive(chars: string): boolean {\n    for (var i = 0; i < chars.length; i++) {\n      if (!this._attemptCharCodeCaseInsensitive(StringWrapper.charCodeAt(chars, i))) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private _requireStr(chars: string) {\n    var location = this._getLocation();\n    if (!this._attemptStr(chars)) {\n      throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan(location));\n    }\n  }\n\n  private _attemptCharCodeUntilFn(predicate: Function) {\n    while (!predicate(this.peek)) {\n      this._advance();\n    }\n  }\n\n  private _requireCharCodeUntilFn(predicate: Function, len: number) {\n    var start = this._getLocation();\n    this._attemptCharCodeUntilFn(predicate);\n    if (this.index - start.offset < len) {\n      throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan(start, start));\n    }\n  }\n\n  private _attemptUntilChar(char: number) {\n    while (this.peek !== char) {\n      this._advance();\n    }\n  }\n\n  private _readChar(decodeEntities: boolean): string {\n    if (decodeEntities && this.peek === $AMPERSAND) {\n      return this._decodeEntity();\n    } else {\n      var index = this.index;\n      this._advance();\n      return this.input[index];\n    }\n  }\n\n  private _decodeEntity(): string {\n    var start = this._getLocation();\n    this._advance();\n    if (this._attemptCharCode($HASH)) {\n      let isHex = this._attemptCharCode($x) || this._attemptCharCode($X);\n      let numberStart = this._getLocation().offset;\n      this._attemptCharCodeUntilFn(isDigitEntityEnd);\n      if (this.peek != $SEMICOLON) {\n        throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan());\n      }\n      this._advance();\n      let strNum = this.input.substring(numberStart, this.index - 1);\n      try {\n        let charCode = NumberWrapper.parseInt(strNum, isHex ? 16 : 10);\n        return StringWrapper.fromCharCode(charCode);\n      } catch (e) {\n        let entity = this.input.substring(start.offset + 1, this.index - 1);\n        throw this._createError(unknownEntityErrorMsg(entity), this._getSpan(start));\n      }\n    } else {\n      let startPosition = this._savePosition();\n      this._attemptCharCodeUntilFn(isNamedEntityEnd);\n      if (this.peek != $SEMICOLON) {\n        this._restorePosition(startPosition);\n        return '&';\n      }\n      this._advance();\n      let name = this.input.substring(start.offset + 1, this.index - 1);\n      let char = NAMED_ENTITIES[name];\n      if (isBlank(char)) {\n        throw this._createError(unknownEntityErrorMsg(name), this._getSpan(start));\n      }\n      return char;\n    }\n  }\n\n  private _consumeRawText(decodeEntities: boolean, firstCharOfEnd: number,\n                          attemptEndRest: Function): HtmlToken {\n    var tagCloseStart;\n    var textStart = this._getLocation();\n    this._beginToken(decodeEntities ? HtmlTokenType.ESCAPABLE_RAW_TEXT : HtmlTokenType.RAW_TEXT,\n                     textStart);\n    var parts = [];\n    while (true) {\n      tagCloseStart = this._getLocation();\n      if (this._attemptCharCode(firstCharOfEnd) && attemptEndRest()) {\n        break;\n      }\n      if (this.index > tagCloseStart.offset) {\n        parts.push(this.input.substring(tagCloseStart.offset, this.index));\n      }\n      while (this.peek !== firstCharOfEnd) {\n        parts.push(this._readChar(decodeEntities));\n      }\n    }\n    return this._endToken([this._processCarriageReturns(parts.join(''))], tagCloseStart);\n  }\n\n  private _consumeComment(start: ParseLocation) {\n    this._beginToken(HtmlTokenType.COMMENT_START, start);\n    this._requireCharCode($MINUS);\n    this._endToken([]);\n    var textToken = this._consumeRawText(false, $MINUS, () => this._attemptStr('->'));\n    this._beginToken(HtmlTokenType.COMMENT_END, textToken.sourceSpan.end);\n    this._endToken([]);\n  }\n\n  private _consumeCdata(start: ParseLocation) {\n    this._beginToken(HtmlTokenType.CDATA_START, start);\n    this._requireStr('CDATA[');\n    this._endToken([]);\n    var textToken = this._consumeRawText(false, $RBRACKET, () => this._attemptStr(']>'));\n    this._beginToken(HtmlTokenType.CDATA_END, textToken.sourceSpan.end);\n    this._endToken([]);\n  }\n\n  private _consumeDocType(start: ParseLocation) {\n    this._beginToken(HtmlTokenType.DOC_TYPE, start);\n    this._attemptUntilChar($GT);\n    this._advance();\n    this._endToken([this.input.substring(start.offset + 2, this.index - 1)]);\n  }\n\n  private _consumePrefixAndName(): string[] {\n    var nameOrPrefixStart = this.index;\n    var prefix = null;\n    while (this.peek !== $COLON && !isPrefixEnd(this.peek)) {\n      this._advance();\n    }\n    var nameStart;\n    if (this.peek === $COLON) {\n      this._advance();\n      prefix = this.input.substring(nameOrPrefixStart, this.index - 1);\n      nameStart = this.index;\n    } else {\n      nameStart = nameOrPrefixStart;\n    }\n    this._requireCharCodeUntilFn(isNameEnd, this.index === nameStart ? 1 : 0);\n    var name = this.input.substring(nameStart, this.index);\n    return [prefix, name];\n  }\n\n  private _consumeTagOpen(start: ParseLocation) {\n    let savedPos = this._savePosition();\n    let lowercaseTagName;\n    try {\n      if (!isAsciiLetter(this.peek)) {\n        throw this._createError(unexpectedCharacterErrorMsg(this.peek), this._getSpan());\n      }\n      var nameStart = this.index;\n      this._consumeTagOpenStart(start);\n      lowercaseTagName = this.input.substring(nameStart, this.index).toLowerCase();\n      this._attemptCharCodeUntilFn(isNotWhitespace);\n      while (this.peek !== $SLASH && this.peek !== $GT) {\n        this._consumeAttributeName();\n        this._attemptCharCodeUntilFn(isNotWhitespace);\n        if (this._attemptCharCode($EQ)) {\n          this._attemptCharCodeUntilFn(isNotWhitespace);\n          this._consumeAttributeValue();\n        }\n        this._attemptCharCodeUntilFn(isNotWhitespace);\n      }\n      this._consumeTagOpenEnd();\n    } catch (e) {\n      if (e instanceof ControlFlowError) {\n        // When the start tag is invalid, assume we want a \"<\"\n        this._restorePosition(savedPos);\n        // Back to back text tokens are merged at the end\n        this._beginToken(HtmlTokenType.TEXT, start);\n        this._endToken(['<']);\n        return;\n      }\n\n      throw e;\n    }\n\n    var contentTokenType = getHtmlTagDefinition(lowercaseTagName).contentType;\n    if (contentTokenType === HtmlTagContentType.RAW_TEXT) {\n      this._consumeRawTextWithTagClose(lowercaseTagName, false);\n    } else if (contentTokenType === HtmlTagContentType.ESCAPABLE_RAW_TEXT) {\n      this._consumeRawTextWithTagClose(lowercaseTagName, true);\n    }\n  }\n\n  private _consumeRawTextWithTagClose(lowercaseTagName: string, decodeEntities: boolean) {\n    var textToken = this._consumeRawText(decodeEntities, $LT, () => {\n      if (!this._attemptCharCode($SLASH)) return false;\n      this._attemptCharCodeUntilFn(isNotWhitespace);\n      if (!this._attemptStrCaseInsensitive(lowercaseTagName)) return false;\n      this._attemptCharCodeUntilFn(isNotWhitespace);\n      if (!this._attemptCharCode($GT)) return false;\n      return true;\n    });\n    this._beginToken(HtmlTokenType.TAG_CLOSE, textToken.sourceSpan.end);\n    this._endToken([null, lowercaseTagName]);\n  }\n\n  private _consumeTagOpenStart(start: ParseLocation) {\n    this._beginToken(HtmlTokenType.TAG_OPEN_START, start);\n    var parts = this._consumePrefixAndName();\n    this._endToken(parts);\n  }\n\n  private _consumeAttributeName() {\n    this._beginToken(HtmlTokenType.ATTR_NAME);\n    var prefixAndName = this._consumePrefixAndName();\n    this._endToken(prefixAndName);\n  }\n\n  private _consumeAttributeValue() {\n    this._beginToken(HtmlTokenType.ATTR_VALUE);\n    var value;\n    if (this.peek === $SQ || this.peek === $DQ) {\n      var quoteChar = this.peek;\n      this._advance();\n      var parts = [];\n      while (this.peek !== quoteChar) {\n        parts.push(this._readChar(true));\n      }\n      value = parts.join('');\n      this._advance();\n    } else {\n      var valueStart = this.index;\n      this._requireCharCodeUntilFn(isNameEnd, 1);\n      value = this.input.substring(valueStart, this.index);\n    }\n    this._endToken([this._processCarriageReturns(value)]);\n  }\n\n  private _consumeTagOpenEnd() {\n    var tokenType = this._attemptCharCode($SLASH) ? HtmlTokenType.TAG_OPEN_END_VOID :\n                                                    HtmlTokenType.TAG_OPEN_END;\n    this._beginToken(tokenType);\n    this._requireCharCode($GT);\n    this._endToken([]);\n  }\n\n  private _consumeTagClose(start: ParseLocation) {\n    this._beginToken(HtmlTokenType.TAG_CLOSE, start);\n    this._attemptCharCodeUntilFn(isNotWhitespace);\n    var prefixAndName;\n    prefixAndName = this._consumePrefixAndName();\n    this._attemptCharCodeUntilFn(isNotWhitespace);\n    this._requireCharCode($GT);\n    this._endToken(prefixAndName);\n  }\n\n  private _consumeText() {\n    var start = this._getLocation();\n    this._beginToken(HtmlTokenType.TEXT, start);\n    var parts = [this._readChar(true)];\n    while (!isTextEnd(this.peek)) {\n      parts.push(this._readChar(true));\n    }\n    this._endToken([this._processCarriageReturns(parts.join(''))]);\n  }\n\n  private _savePosition(): number[] {\n    return [this.peek, this.index, this.column, this.line, this.tokens.length];\n  }\n\n  private _restorePosition(position: number[]): void {\n    this.peek = position[0];\n    this.index = position[1];\n    this.column = position[2];\n    this.line = position[3];\n    let nbTokens = position[4];\n    if (nbTokens < this.tokens.length) {\n      // remove any extra tokens\n      this.tokens = ListWrapper.slice(this.tokens, 0, nbTokens);\n    }\n  }\n}\n\nfunction isNotWhitespace(code: number): boolean {\n  return !isWhitespace(code) || code === $EOF;\n}\n\nfunction isWhitespace(code: number): boolean {\n  return (code >= $TAB && code <= $SPACE) || (code === $NBSP);\n}\n\nfunction isNameEnd(code: number): boolean {\n  return isWhitespace(code) || code === $GT || code === $SLASH || code === $SQ || code === $DQ ||\n         code === $EQ;\n}\n\nfunction isPrefixEnd(code: number): boolean {\n  return (code < $a || $z < code) && (code < $A || $Z < code) && (code < $0 || code > $9);\n}\n\nfunction isDigitEntityEnd(code: number): boolean {\n  return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code);\n}\n\nfunction isNamedEntityEnd(code: number): boolean {\n  return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code);\n}\n\nfunction isTextEnd(code: number): boolean {\n  return code === $LT || code === $EOF;\n}\n\nfunction isAsciiLetter(code: number): boolean {\n  return code >= $a && code <= $z || code >= $A && code <= $Z;\n}\n\nfunction isAsciiHexDigit(code: number): boolean {\n  return code >= $a && code <= $f || code >= $A && code <= $F || code >= $0 && code <= $9;\n}\n\nfunction compareCharCodeCaseInsensitive(code1: number, code2: number): boolean {\n  return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2);\n}\n\nfunction toUpperCaseCharCode(code: number): number {\n  return code >= $a && code <= $z ? code - $a + $A : code;\n}\n\nfunction mergeTextTokens(srcTokens: HtmlToken[]): HtmlToken[] {\n  let dstTokens = [];\n  let lastDstToken: HtmlToken;\n  for (let i = 0; i < srcTokens.length; i++) {\n    let token = srcTokens[i];\n    if (isPresent(lastDstToken) && lastDstToken.type == HtmlTokenType.TEXT &&\n        token.type == HtmlTokenType.TEXT) {\n      lastDstToken.parts[0] += token.parts[0];\n      lastDstToken.sourceSpan.end = token.sourceSpan.end;\n    } else {\n      lastDstToken = token;\n      dstTokens.push(lastDstToken);\n    }\n  }\n\n  return dstTokens;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/html_lexer.ts\n **/","import {Injectable} from 'angular2/src/core/di';\nimport {isPresent, isBlank, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {splitNsName} from 'angular2/src/compiler/html_tags';\n\nimport {ElementSchemaRegistry} from './element_schema_registry';\n\nconst NAMESPACE_URIS =\n    CONST_EXPR({'xlink': 'http://www.w3.org/1999/xlink', 'svg': 'http://www.w3.org/2000/svg'});\n\n@Injectable()\nexport class DomElementSchemaRegistry extends ElementSchemaRegistry {\n  private _protoElements = new Map<string, Element>();\n\n  private _getProtoElement(tagName: string): Element {\n    var element = this._protoElements.get(tagName);\n    if (isBlank(element)) {\n      var nsAndName = splitNsName(tagName);\n      element = isPresent(nsAndName[0]) ?\n                    DOM.createElementNS(NAMESPACE_URIS[nsAndName[0]], nsAndName[1]) :\n                    DOM.createElement(nsAndName[1]);\n      this._protoElements.set(tagName, element);\n    }\n    return element;\n  }\n\n  hasProperty(tagName: string, propName: string): boolean {\n    if (tagName.indexOf('-') !== -1) {\n      // can't tell now as we don't know which properties a custom element will get\n      // once it is instantiated\n      return true;\n    } else {\n      var elm = this._getProtoElement(tagName);\n      return DOM.hasProperty(elm, propName);\n    }\n  }\n\n  getMappedPropName(propName: string): string {\n    var mappedPropName = StringMapWrapper.get(DOM.attrToPropMap, propName);\n    return isPresent(mappedPropName) ? mappedPropName : propName;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/schema/dom_element_schema_registry.ts\n **/","import {ListWrapper} from 'angular2/src/facade/collection';\nimport {\n  StringWrapper,\n  RegExp,\n  RegExpWrapper,\n  RegExpMatcherWrapper,\n  isPresent,\n  isBlank\n} from 'angular2/src/facade/lang';\n\n/**\n * This file is a port of shadowCSS from webcomponents.js to TypeScript.\n *\n * Please make sure to keep to edits in sync with the source file.\n *\n * Source:\n * https://github.com/webcomponents/webcomponentsjs/blob/4efecd7e0e/src/ShadowCSS/ShadowCSS.js\n *\n * The original file level comment is reproduced below\n */\n\n/*\n  This is a limited shim for ShadowDOM css styling.\n  https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles\n\n  The intention here is to support only the styling features which can be\n  relatively simply implemented. The goal is to allow users to avoid the\n  most obvious pitfalls and do so without compromising performance significantly.\n  For ShadowDOM styling that's not covered here, a set of best practices\n  can be provided that should allow users to accomplish more complex styling.\n\n  The following is a list of specific ShadowDOM styling features and a brief\n  discussion of the approach used to shim.\n\n  Shimmed features:\n\n  * :host, :host-context: ShadowDOM allows styling of the shadowRoot's host\n  element using the :host rule. To shim this feature, the :host styles are\n  reformatted and prefixed with a given scope name and promoted to a\n  document level stylesheet.\n  For example, given a scope name of .foo, a rule like this:\n\n    :host {\n        background: red;\n      }\n    }\n\n  becomes:\n\n    .foo {\n      background: red;\n    }\n\n  * encapsultion: Styles defined within ShadowDOM, apply only to\n  dom inside the ShadowDOM. Polymer uses one of two techniques to implement\n  this feature.\n\n  By default, rules are prefixed with the host element tag name\n  as a descendant selector. This ensures styling does not leak out of the 'top'\n  of the element's ShadowDOM. For example,\n\n  div {\n      font-weight: bold;\n    }\n\n  becomes:\n\n  x-foo div {\n      font-weight: bold;\n    }\n\n  becomes:\n\n\n  Alternatively, if WebComponents.ShadowCSS.strictStyling is set to true then\n  selectors are scoped by adding an attribute selector suffix to each\n  simple selector that contains the host element tag name. Each element\n  in the element's ShadowDOM template is also given the scope attribute.\n  Thus, these rules match only elements that have the scope attribute.\n  For example, given a scope name of x-foo, a rule like this:\n\n    div {\n      font-weight: bold;\n    }\n\n  becomes:\n\n    div[x-foo] {\n      font-weight: bold;\n    }\n\n  Note that elements that are dynamically added to a scope must have the scope\n  selector added to them manually.\n\n  * upper/lower bound encapsulation: Styles which are defined outside a\n  shadowRoot should not cross the ShadowDOM boundary and should not apply\n  inside a shadowRoot.\n\n  This styling behavior is not emulated. Some possible ways to do this that\n  were rejected due to complexity and/or performance concerns include: (1) reset\n  every possible property for every possible selector for a given scope name;\n  (2) re-implement css in javascript.\n\n  As an alternative, users should make sure to use selectors\n  specific to the scope in which they are working.\n\n  * ::distributed: This behavior is not emulated. It's often not necessary\n  to style the contents of a specific insertion point and instead, descendants\n  of the host element can be styled selectively. Users can also create an\n  extra node around an insertion point and style that node's contents\n  via descendent selectors. For example, with a shadowRoot like this:\n\n    <style>\n      ::content(div) {\n        background: red;\n      }\n    </style>\n    <content></content>\n\n  could become:\n\n    <style>\n      / *@polyfill .content-container div * /\n      ::content(div) {\n        background: red;\n      }\n    </style>\n    <div class=\"content-container\">\n      <content></content>\n    </div>\n\n  Note the use of @polyfill in the comment above a ShadowDOM specific style\n  declaration. This is a directive to the styling shim to use the selector\n  in comments in lieu of the next selector when running under polyfill.\n*/\n\nexport class ShadowCss {\n  strictStyling: boolean = true;\n\n  constructor() {}\n\n  /*\n  * Shim some cssText with the given selector. Returns cssText that can\n  * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css).\n  *\n  * When strictStyling is true:\n  * - selector is the attribute added to all elements inside the host,\n  * - hostSelector is the attribute added to the host itself.\n  */\n  shimCssText(cssText: string, selector: string, hostSelector: string = ''): string {\n    cssText = stripComments(cssText);\n    cssText = this._insertDirectives(cssText);\n    return this._scopeCssText(cssText, selector, hostSelector);\n  }\n\n  private _insertDirectives(cssText: string): string {\n    cssText = this._insertPolyfillDirectivesInCssText(cssText);\n    return this._insertPolyfillRulesInCssText(cssText);\n  }\n\n  /*\n   * Process styles to convert native ShadowDOM rules that will trip\n   * up the css parser; we rely on decorating the stylesheet with inert rules.\n   *\n   * For example, we convert this rule:\n   *\n   * polyfill-next-selector { content: ':host menu-item'; }\n   * ::content menu-item {\n   *\n   * to this:\n   *\n   * scopeName menu-item {\n   *\n  **/\n  private _insertPolyfillDirectivesInCssText(cssText: string): string {\n    // Difference with webcomponents.js: does not handle comments\n    return StringWrapper.replaceAllMapped(cssText, _cssContentNextSelectorRe,\n                                          function(m) { return m[1] + '{'; });\n  }\n\n  /*\n   * Process styles to add rules which will only apply under the polyfill\n   *\n   * For example, we convert this rule:\n   *\n   * polyfill-rule {\n   *   content: ':host menu-item';\n   * ...\n   * }\n   *\n   * to this:\n   *\n   * scopeName menu-item {...}\n   *\n  **/\n  private _insertPolyfillRulesInCssText(cssText: string): string {\n    // Difference with webcomponents.js: does not handle comments\n    return StringWrapper.replaceAllMapped(cssText, _cssContentRuleRe, function(m) {\n      var rule = m[0];\n      rule = StringWrapper.replace(rule, m[1], '');\n      rule = StringWrapper.replace(rule, m[2], '');\n      return m[3] + rule;\n    });\n  }\n\n  /* Ensure styles are scoped. Pseudo-scoping takes a rule like:\n   *\n   *  .foo {... }\n   *\n   *  and converts this to\n   *\n   *  scopeName .foo { ... }\n  */\n  private _scopeCssText(cssText: string, scopeSelector: string, hostSelector: string): string {\n    var unscoped = this._extractUnscopedRulesFromCssText(cssText);\n    cssText = this._insertPolyfillHostInCssText(cssText);\n    cssText = this._convertColonHost(cssText);\n    cssText = this._convertColonHostContext(cssText);\n    cssText = this._convertShadowDOMSelectors(cssText);\n    if (isPresent(scopeSelector)) {\n      cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector);\n    }\n    cssText = cssText + '\\n' + unscoped;\n    return cssText.trim();\n  }\n\n  /*\n   * Process styles to add rules which will only apply under the polyfill\n   * and do not process via CSSOM. (CSSOM is destructive to rules on rare\n   * occasions, e.g. -webkit-calc on Safari.)\n   * For example, we convert this rule:\n   *\n   * @polyfill-unscoped-rule {\n   *   content: 'menu-item';\n   * ... }\n   *\n   * to this:\n   *\n   * menu-item {...}\n   *\n  **/\n  private _extractUnscopedRulesFromCssText(cssText: string): string {\n    // Difference with webcomponents.js: does not handle comments\n    var r = '', m;\n    var matcher = RegExpWrapper.matcher(_cssContentUnscopedRuleRe, cssText);\n    while (isPresent(m = RegExpMatcherWrapper.next(matcher))) {\n      var rule = m[0];\n      rule = StringWrapper.replace(rule, m[2], '');\n      rule = StringWrapper.replace(rule, m[1], m[3]);\n      r += rule + '\\n\\n';\n    }\n    return r;\n  }\n\n  /*\n   * convert a rule like :host(.foo) > .bar { }\n   *\n   * to\n   *\n   * scopeName.foo > .bar\n  */\n  private _convertColonHost(cssText: string): string {\n    return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer);\n  }\n\n  /*\n   * convert a rule like :host-context(.foo) > .bar { }\n   *\n   * to\n   *\n   * scopeName.foo > .bar, .foo scopeName > .bar { }\n   *\n   * and\n   *\n   * :host-context(.foo:host) .bar { ... }\n   *\n   * to\n   *\n   * scopeName.foo .bar { ... }\n  */\n  private _convertColonHostContext(cssText: string): string {\n    return this._convertColonRule(cssText, _cssColonHostContextRe,\n                                  this._colonHostContextPartReplacer);\n  }\n\n  private _convertColonRule(cssText: string, regExp: RegExp, partReplacer: Function): string {\n    // p1 = :host, p2 = contents of (), p3 rest of rule\n    return StringWrapper.replaceAllMapped(cssText, regExp, function(m) {\n      if (isPresent(m[2])) {\n        var parts = m[2].split(','), r = [];\n        for (var i = 0; i < parts.length; i++) {\n          var p = parts[i];\n          if (isBlank(p)) break;\n          p = p.trim();\n          r.push(partReplacer(_polyfillHostNoCombinator, p, m[3]));\n        }\n        return r.join(',');\n      } else {\n        return _polyfillHostNoCombinator + m[3];\n      }\n    });\n  }\n\n  private _colonHostContextPartReplacer(host: string, part: string, suffix: string): string {\n    if (StringWrapper.contains(part, _polyfillHost)) {\n      return this._colonHostPartReplacer(host, part, suffix);\n    } else {\n      return host + part + suffix + ', ' + part + ' ' + host + suffix;\n    }\n  }\n\n  private _colonHostPartReplacer(host: string, part: string, suffix: string): string {\n    return host + StringWrapper.replace(part, _polyfillHost, '') + suffix;\n  }\n\n  /*\n   * Convert combinators like ::shadow and pseudo-elements like ::content\n   * by replacing with space.\n  */\n  private _convertShadowDOMSelectors(cssText: string): string {\n    for (var i = 0; i < _shadowDOMSelectorsRe.length; i++) {\n      cssText = StringWrapper.replaceAll(cssText, _shadowDOMSelectorsRe[i], ' ');\n    }\n    return cssText;\n  }\n\n  // change a selector like 'div' to 'name div'\n  private _scopeSelectors(cssText: string, scopeSelector: string, hostSelector: string): string {\n    return processRules(cssText, (rule: CssRule) => {\n      var selector = rule.selector;\n      var content = rule.content;\n      if (rule.selector[0] != '@' || rule.selector.startsWith('@page')) {\n        selector =\n            this._scopeSelector(rule.selector, scopeSelector, hostSelector, this.strictStyling);\n      } else if (rule.selector.startsWith('@media')) {\n        content = this._scopeSelectors(rule.content, scopeSelector, hostSelector);\n      }\n      return new CssRule(selector, content);\n    });\n  }\n\n  private _scopeSelector(selector: string, scopeSelector: string, hostSelector: string,\n                         strict: boolean): string {\n    var r = [], parts = selector.split(',');\n    for (var i = 0; i < parts.length; i++) {\n      var p = parts[i].trim();\n      var deepParts = StringWrapper.split(p, _shadowDeepSelectors);\n      var shallowPart = deepParts[0];\n      if (this._selectorNeedsScoping(shallowPart, scopeSelector)) {\n        deepParts[0] = strict && !StringWrapper.contains(shallowPart, _polyfillHostNoCombinator) ?\n                           this._applyStrictSelectorScope(shallowPart, scopeSelector) :\n                           this._applySelectorScope(shallowPart, scopeSelector, hostSelector);\n      }\n      // replace /deep/ with a space for child selectors\n      r.push(deepParts.join(' '));\n    }\n    return r.join(', ');\n  }\n\n  private _selectorNeedsScoping(selector: string, scopeSelector: string): boolean {\n    var re = this._makeScopeMatcher(scopeSelector);\n    return !isPresent(RegExpWrapper.firstMatch(re, selector));\n  }\n\n  private _makeScopeMatcher(scopeSelector: string): RegExp {\n    var lre = /\\[/g;\n    var rre = /\\]/g;\n    scopeSelector = StringWrapper.replaceAll(scopeSelector, lre, '\\\\[');\n    scopeSelector = StringWrapper.replaceAll(scopeSelector, rre, '\\\\]');\n    return RegExpWrapper.create('^(' + scopeSelector + ')' + _selectorReSuffix, 'm');\n  }\n\n  private _applySelectorScope(selector: string, scopeSelector: string,\n                              hostSelector: string): string {\n    // Difference from webcomponentsjs: scopeSelector could not be an array\n    return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector);\n  }\n\n  // scope via name and [is=name]\n  private _applySimpleSelectorScope(selector: string, scopeSelector: string,\n                                    hostSelector: string): string {\n    if (isPresent(RegExpWrapper.firstMatch(_polyfillHostRe, selector))) {\n      var replaceBy = this.strictStyling ? `[${hostSelector}]` : scopeSelector;\n      selector = StringWrapper.replace(selector, _polyfillHostNoCombinator, replaceBy);\n      return StringWrapper.replaceAll(selector, _polyfillHostRe, replaceBy + ' ');\n    } else {\n      return scopeSelector + ' ' + selector;\n    }\n  }\n\n  // return a selector with [name] suffix on each simple selector\n  // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]  /** @internal */\n  private _applyStrictSelectorScope(selector: string, scopeSelector: string): string {\n    var isRe = /\\[is=([^\\]]*)\\]/g;\n    scopeSelector = StringWrapper.replaceAllMapped(scopeSelector, isRe, (m) => m[1]);\n    var splits = [' ', '>', '+', '~'], scoped = selector, attrName = '[' + scopeSelector + ']';\n    for (var i = 0; i < splits.length; i++) {\n      var sep = splits[i];\n      var parts = scoped.split(sep);\n      scoped = parts.map(p => {\n                      // remove :host since it should be unnecessary\n                      var t = StringWrapper.replaceAll(p.trim(), _polyfillHostRe, '');\n                      if (t.length > 0 && !ListWrapper.contains(splits, t) &&\n                          !StringWrapper.contains(t, attrName)) {\n                        var re = /([^:]*)(:*)(.*)/g;\n                        var m = RegExpWrapper.firstMatch(re, t);\n                        if (isPresent(m)) {\n                          p = m[1] + attrName + m[2] + m[3];\n                        }\n                      }\n                      return p;\n                    })\n                   .join(sep);\n    }\n    return scoped;\n  }\n\n  private _insertPolyfillHostInCssText(selector: string): string {\n    selector = StringWrapper.replaceAll(selector, _colonHostContextRe, _polyfillHostContext);\n    selector = StringWrapper.replaceAll(selector, _colonHostRe, _polyfillHost);\n    return selector;\n  }\n}\nvar _cssContentNextSelectorRe =\n    /polyfill-next-selector[^}]*content:[\\s]*?['\"](.*?)['\"][;\\s]*}([^{]*?){/gim;\nvar _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim;\nvar _cssContentUnscopedRuleRe =\n    /(polyfill-unscoped-rule)[^}]*(content:[\\s]*['\"](.*?)['\"])[;\\s]*[^}]*}/gim;\nvar _polyfillHost = '-shadowcsshost';\n// note: :host-context pre-processed to -shadowcsshostcontext.\nvar _polyfillHostContext = '-shadowcsscontext';\nvar _parenSuffix = ')(?:\\\\((' +\n                   '(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n                   ')\\\\))?([^,{]*)';\nvar _cssColonHostRe = RegExpWrapper.create('(' + _polyfillHost + _parenSuffix, 'im');\nvar _cssColonHostContextRe = RegExpWrapper.create('(' + _polyfillHostContext + _parenSuffix, 'im');\nvar _polyfillHostNoCombinator = _polyfillHost + '-no-combinator';\nvar _shadowDOMSelectorsRe = [\n  /::shadow/g,\n  /::content/g,\n  // Deprecated selectors\n  // TODO(vicb): see https://github.com/angular/clang-format/issues/16\n  // clang-format off\n  /\\/shadow-deep\\//g,  // former /deep/\n  /\\/shadow\\//g,       // former ::shadow\n  // clanf-format on\n];\nvar _shadowDeepSelectors = /(?:>>>)|(?:\\/deep\\/)/g;\nvar _selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$';\nvar _polyfillHostRe = RegExpWrapper.create(_polyfillHost, 'im');\nvar _colonHostRe = /:host/gim;\nvar _colonHostContextRe = /:host-context/gim;\n\nvar _commentRe = /\\/\\*[\\s\\S]*?\\*\\//g;\n\nfunction stripComments(input:string):string {\n  return StringWrapper.replaceAllMapped(input, _commentRe, (_) => '');\n}\n\nvar _ruleRe = /(\\s*)([^;\\{\\}]+?)(\\s*)((?:{%BLOCK%}?\\s*;?)|(?:\\s*;))/g;\nvar _curlyRe = /([{}])/g;\nconst OPEN_CURLY = '{';\nconst CLOSE_CURLY = '}';\nconst BLOCK_PLACEHOLDER = '%BLOCK%';\n\nexport class CssRule {\n  constructor(public selector:string, public content:string) {}\n}\n\nexport function processRules(input:string, ruleCallback:Function):string {\n  var inputWithEscapedBlocks = escapeBlocks(input);\n  var nextBlockIndex = 0;\n  return StringWrapper.replaceAllMapped(inputWithEscapedBlocks.escapedString, _ruleRe, function(m) {\n    var selector = m[2];\n    var content = '';\n    var suffix = m[4];\n    var contentPrefix = '';\n    if (isPresent(m[4]) && m[4].startsWith('{'+BLOCK_PLACEHOLDER)) {\n      content = inputWithEscapedBlocks.blocks[nextBlockIndex++];\n      suffix = m[4].substring(BLOCK_PLACEHOLDER.length+1);\n      contentPrefix = '{';\n    }\n    var rule = ruleCallback(new CssRule(selector, content));\n    return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`;\n  });\n}\n\nclass StringWithEscapedBlocks {\n  constructor(public escapedString:string, public blocks:string[]) {}\n}\n\nfunction escapeBlocks(input:string):StringWithEscapedBlocks {\n  var inputParts = StringWrapper.split(input, _curlyRe);\n  var resultParts = [];\n  var escapedBlocks = [];\n  var bracketCount = 0;\n  var currentBlockParts = [];\n  for (var partIndex = 0; partIndex<inputParts.length; partIndex++) {\n    var part = inputParts[partIndex];\n    if (part == CLOSE_CURLY) {\n      bracketCount--;\n    }\n    if (bracketCount > 0) {\n      currentBlockParts.push(part);\n    } else {\n      if (currentBlockParts.length > 0) {\n        escapedBlocks.push(currentBlockParts.join(''));\n        resultParts.push(BLOCK_PLACEHOLDER);\n        currentBlockParts = [];\n      }\n      resultParts.push(part);\n    }\n    if (part == OPEN_CURLY) {\n      bracketCount++;\n    }\n  }\n  if (currentBlockParts.length > 0) {\n    escapedBlocks.push(currentBlockParts.join(''));\n    resultParts.push(BLOCK_PLACEHOLDER);\n  }\n  return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/compiler/shadow_css.ts\n **/","import {CONST} from 'angular2/src/facade/lang';\n\n/**\n * Marks a function or method as an Angular 2 entrypoint. Only necessary in Dart code.\n *\n * The optional `name` parameter will be reflected in logs when the entry point is processed.\n *\n * See [the wiki][] for detailed documentation.\n * [the wiki]: https://github.com/angular/angular/wiki/Angular-2-Dart-Transformer#entry_points\n *\n * ## Example\n *\n * ```\n * @AngularEntrypoint(\"name-for-debug\")\n * void main() {\n *   bootstrap(MyComponent);\n * }\n * ```\n */\n@CONST()\nexport class AngularEntrypoint {\n  constructor(public name?: String) {}\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/angular_entrypoint.ts\n **/","import {Type, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';\nimport {\n  APP_COMPONENT_REF_PROMISE,\n  APP_COMPONENT,\n  APP_ID_RANDOM_PROVIDER\n} from './application_tokens';\nimport {\n  IterableDiffers,\n  defaultIterableDiffers,\n  KeyValueDiffers,\n  defaultKeyValueDiffers\n} from './change_detection/change_detection';\nimport {ResolvedMetadataCache} from 'angular2/src/core/linker/resolved_metadata_cache';\nimport {AppViewManager} from './linker/view_manager';\nimport {AppViewManager_} from \"./linker/view_manager\";\nimport {ViewResolver} from './linker/view_resolver';\nimport {DirectiveResolver} from './linker/directive_resolver';\nimport {PipeResolver} from './linker/pipe_resolver';\nimport {Compiler} from './linker/compiler';\nimport {Compiler_} from \"./linker/compiler\";\nimport {DynamicComponentLoader} from './linker/dynamic_component_loader';\nimport {DynamicComponentLoader_} from \"./linker/dynamic_component_loader\";\n\n/**\n * A default set of providers which should be included in any Angular\n * application, regardless of the platform it runs onto.\n */\nexport const APPLICATION_COMMON_PROVIDERS: Array<Type | Provider | any[]> = CONST_EXPR([\n  new Provider(Compiler, {useClass: Compiler_}),\n  APP_ID_RANDOM_PROVIDER,\n  ResolvedMetadataCache,\n  new Provider(AppViewManager, {useClass: AppViewManager_}),\n  ViewResolver,\n  new Provider(IterableDiffers, {useValue: defaultIterableDiffers}),\n  new Provider(KeyValueDiffers, {useValue: defaultKeyValueDiffers}),\n  DirectiveResolver,\n  PipeResolver,\n  new Provider(DynamicComponentLoader, {useClass: DynamicComponentLoader_})\n]);\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/application_common_providers.ts\n **/","import {isPresent, isBlank, looseIdentical} from 'angular2/src/facade/lang';\nimport {ListWrapper, Map} from 'angular2/src/facade/collection';\nimport {RecordType, ProtoRecord} from './proto_record';\n\n/**\n * Removes \"duplicate\" records. It assumes that record evaluation does not have side-effects.\n *\n * Records that are not last in bindings are removed and all the indices of the records that depend\n * on them are updated.\n *\n * Records that are last in bindings CANNOT be removed, and instead are replaced with very cheap\n * SELF records.\n *\n * @internal\n */\nexport function coalesce(srcRecords: ProtoRecord[]): ProtoRecord[] {\n  let dstRecords = [];\n  let excludedIdxs = [];\n  let indexMap: Map<number, number> = new Map<number, number>();\n  let skipDepth = 0;\n  let skipSources: ProtoRecord[] = ListWrapper.createFixedSize(srcRecords.length);\n\n  for (let protoIndex = 0; protoIndex < srcRecords.length; protoIndex++) {\n    let skipRecord = skipSources[protoIndex];\n    if (isPresent(skipRecord)) {\n      skipDepth--;\n      skipRecord.fixedArgs[0] = dstRecords.length;\n    }\n\n    let src = srcRecords[protoIndex];\n    let dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\n\n    if (dst.isSkipRecord()) {\n      dstRecords.push(dst);\n      skipDepth++;\n      skipSources[dst.fixedArgs[0]] = dst;\n    } else {\n      let record = _mayBeAddRecord(dst, dstRecords, excludedIdxs, skipDepth > 0);\n      indexMap.set(src.selfIndex, record.selfIndex);\n    }\n  }\n\n  return _optimizeSkips(dstRecords);\n}\n\n/**\n * - Conditional skip of 1 record followed by an unconditional skip of N are replaced by  a\n *   conditional skip of N with the negated condition,\n * - Skips of 0 records are removed\n */\nfunction _optimizeSkips(srcRecords: ProtoRecord[]): ProtoRecord[] {\n  let dstRecords = [];\n  let skipSources = ListWrapper.createFixedSize(srcRecords.length);\n  let indexMap: Map<number, number> = new Map<number, number>();\n\n  for (let protoIndex = 0; protoIndex < srcRecords.length; protoIndex++) {\n    let skipRecord = skipSources[protoIndex];\n    if (isPresent(skipRecord)) {\n      skipRecord.fixedArgs[0] = dstRecords.length;\n    }\n\n    let src = srcRecords[protoIndex];\n\n    if (src.isSkipRecord()) {\n      if (src.isConditionalSkipRecord() && src.fixedArgs[0] === protoIndex + 2 &&\n          protoIndex < srcRecords.length - 1 &&\n          srcRecords[protoIndex + 1].mode === RecordType.SkipRecords) {\n        src.mode = src.mode === RecordType.SkipRecordsIf ? RecordType.SkipRecordsIfNot :\n                                                           RecordType.SkipRecordsIf;\n        src.fixedArgs[0] = srcRecords[protoIndex + 1].fixedArgs[0];\n        protoIndex++;\n      }\n\n      if (src.fixedArgs[0] > protoIndex + 1) {\n        let dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\n        dstRecords.push(dst);\n        skipSources[dst.fixedArgs[0]] = dst;\n      }\n\n    } else {\n      let dst = _cloneAndUpdateIndexes(src, dstRecords, indexMap);\n      dstRecords.push(dst);\n      indexMap.set(src.selfIndex, dst.selfIndex);\n    }\n  }\n\n  return dstRecords;\n}\n\n/**\n * Add a new record or re-use one of the existing records.\n */\nfunction _mayBeAddRecord(record: ProtoRecord, dstRecords: ProtoRecord[], excludedIdxs: number[],\n                         excluded: boolean): ProtoRecord {\n  let match = _findFirstMatch(record, dstRecords, excludedIdxs);\n\n  if (isPresent(match)) {\n    if (record.lastInBinding) {\n      dstRecords.push(_createSelfRecord(record, match.selfIndex, dstRecords.length + 1));\n      match.referencedBySelf = true;\n    } else {\n      if (record.argumentToPureFunction) {\n        match.argumentToPureFunction = true;\n      }\n    }\n\n    return match;\n  }\n\n  if (excluded) {\n    excludedIdxs.push(record.selfIndex);\n  }\n\n  dstRecords.push(record);\n  return record;\n}\n\n/**\n * Returns the first `ProtoRecord` that matches the record.\n */\nfunction _findFirstMatch(record: ProtoRecord, dstRecords: ProtoRecord[],\n                         excludedIdxs: number[]): ProtoRecord {\n  return dstRecords.find(\n      // TODO(vicb): optimize excludedIdxs.indexOf (sorted array)\n      rr => excludedIdxs.indexOf(rr.selfIndex) == -1 && rr.mode !== RecordType.DirectiveLifecycle &&\n            _haveSameDirIndex(rr, record) && rr.mode === record.mode &&\n            looseIdentical(rr.funcOrValue, record.funcOrValue) &&\n            rr.contextIndex === record.contextIndex && looseIdentical(rr.name, record.name) &&\n            ListWrapper.equals(rr.args, record.args));\n}\n\n/**\n * Clone the `ProtoRecord` and changes the indexes for the ones in the destination array for:\n * - the arguments,\n * - the context,\n * - self\n */\nfunction _cloneAndUpdateIndexes(record: ProtoRecord, dstRecords: ProtoRecord[],\n                                indexMap: Map<number, number>): ProtoRecord {\n  let args = record.args.map(src => _srcToDstSelfIndex(indexMap, src));\n  let contextIndex = _srcToDstSelfIndex(indexMap, record.contextIndex);\n  let selfIndex = dstRecords.length + 1;\n\n  return new ProtoRecord(record.mode, record.name, record.funcOrValue, args, record.fixedArgs,\n                         contextIndex, record.directiveIndex, selfIndex, record.bindingRecord,\n                         record.lastInBinding, record.lastInDirective,\n                         record.argumentToPureFunction, record.referencedBySelf,\n                         record.propertyBindingIndex);\n}\n\n/**\n * Returns the index in the destination array corresponding to the index in the src array.\n * When the element is not present in the destination array, return the source index.\n */\nfunction _srcToDstSelfIndex(indexMap: Map<number, number>, srcIdx: number): number {\n  var dstIdx = indexMap.get(srcIdx);\n  return isPresent(dstIdx) ? dstIdx : srcIdx;\n}\n\nfunction _createSelfRecord(r: ProtoRecord, contextIndex: number, selfIndex: number): ProtoRecord {\n  return new ProtoRecord(RecordType.Self, \"self\", null, [], r.fixedArgs, contextIndex,\n                         r.directiveIndex, selfIndex, r.bindingRecord, r.lastInBinding,\n                         r.lastInDirective, false, false, r.propertyBindingIndex);\n}\n\nfunction _haveSameDirIndex(a: ProtoRecord, b: ProtoRecord): boolean {\n  var di1 = isBlank(a.directiveIndex) ? null : a.directiveIndex.directiveIndex;\n  var ei1 = isBlank(a.directiveIndex) ? null : a.directiveIndex.elementIndex;\n\n  var di2 = isBlank(b.directiveIndex) ? null : b.directiveIndex.directiveIndex;\n  var ei2 = isBlank(b.directiveIndex) ? null : b.directiveIndex.elementIndex;\n\n  return di1 === di2 && ei1 === ei2;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/coalesce.ts\n **/","import {IS_DART, Json, StringWrapper, isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {CodegenNameUtil} from './codegen_name_util';\nimport {codify, combineGeneratedStrings, rawString} from './codegen_facade';\nimport {ProtoRecord, RecordType} from './proto_record';\nimport {BindingTarget} from './binding_record';\nimport {DirectiveRecord} from './directive_record';\nimport {BaseException} from 'angular2/src/facade/exceptions';\n\n/**\n * Class responsible for providing change detection logic for change detector classes.\n */\nexport class CodegenLogicUtil {\n  constructor(private _names: CodegenNameUtil, private _utilName: string,\n              private _changeDetectorStateName: string) {}\n\n  /**\n   * Generates a statement which updates the local variable representing `protoRec` with the current\n   * value of the record. Used by property bindings.\n   */\n  genPropertyBindingEvalValue(protoRec: ProtoRecord): string {\n    return this._genEvalValue(protoRec, idx => this._names.getLocalName(idx),\n                              this._names.getLocalsAccessorName());\n  }\n\n  /**\n   * Generates a statement which updates the local variable representing `protoRec` with the current\n   * value of the record. Used by event bindings.\n   */\n  genEventBindingEvalValue(eventRecord: any, protoRec: ProtoRecord): string {\n    return this._genEvalValue(protoRec, idx => this._names.getEventLocalName(eventRecord, idx),\n                              \"locals\");\n  }\n\n  private _genEvalValue(protoRec: ProtoRecord, getLocalName: Function,\n                        localsAccessor: string): string {\n    var context = (protoRec.contextIndex == -1) ?\n                      this._names.getDirectiveName(protoRec.directiveIndex) :\n                      getLocalName(protoRec.contextIndex);\n    var argString = protoRec.args.map(arg => getLocalName(arg)).join(\", \");\n\n    var rhs: string;\n    switch (protoRec.mode) {\n      case RecordType.Self:\n        rhs = context;\n        break;\n\n      case RecordType.Const:\n        rhs = codify(protoRec.funcOrValue);\n        break;\n\n      case RecordType.PropertyRead:\n        rhs = `${context}.${protoRec.name}`;\n        break;\n\n      case RecordType.SafeProperty:\n        var read = `${context}.${protoRec.name}`;\n        rhs = `${this._utilName}.isValueBlank(${context}) ? null : ${read}`;\n        break;\n\n      case RecordType.PropertyWrite:\n        rhs = `${context}.${protoRec.name} = ${getLocalName(protoRec.args[0])}`;\n        break;\n\n      case RecordType.Local:\n        rhs = `${localsAccessor}.get(${rawString(protoRec.name)})`;\n        break;\n\n      case RecordType.InvokeMethod:\n        rhs = `${context}.${protoRec.name}(${argString})`;\n        break;\n\n      case RecordType.SafeMethodInvoke:\n        var invoke = `${context}.${protoRec.name}(${argString})`;\n        rhs = `${this._utilName}.isValueBlank(${context}) ? null : ${invoke}`;\n        break;\n\n      case RecordType.InvokeClosure:\n        rhs = `${context}(${argString})`;\n        break;\n\n      case RecordType.PrimitiveOp:\n        rhs = `${this._utilName}.${protoRec.name}(${argString})`;\n        break;\n\n      case RecordType.CollectionLiteral:\n        rhs = `${this._utilName}.${protoRec.name}(${argString})`;\n        break;\n\n      case RecordType.Interpolate:\n        rhs = this._genInterpolation(protoRec);\n        break;\n\n      case RecordType.KeyedRead:\n        rhs = `${context}[${getLocalName(protoRec.args[0])}]`;\n        break;\n\n      case RecordType.KeyedWrite:\n        rhs = `${context}[${getLocalName(protoRec.args[0])}] = ${getLocalName(protoRec.args[1])}`;\n        break;\n\n      case RecordType.Chain:\n        rhs = `${getLocalName(protoRec.args[protoRec.args.length - 1])}`;\n        break;\n\n      default:\n        throw new BaseException(`Unknown operation ${protoRec.mode}`);\n    }\n    return `${getLocalName(protoRec.selfIndex)} = ${rhs};`;\n  }\n\n  genPropertyBindingTargets(propertyBindingTargets: BindingTarget[],\n                            genDebugInfo: boolean): string {\n    var bs = propertyBindingTargets.map(b => {\n      if (isBlank(b)) return \"null\";\n\n      var debug = genDebugInfo ? codify(b.debug) : \"null\";\n      return `${this._utilName}.bindingTarget(${codify(b.mode)}, ${b.elementIndex}, ${codify(b.name)}, ${codify(b.unit)}, ${debug})`;\n    });\n    return `[${bs.join(\", \")}]`;\n  }\n\n  genDirectiveIndices(directiveRecords: DirectiveRecord[]): string {\n    var bs = directiveRecords.map(\n        b =>\n            `${this._utilName}.directiveIndex(${b.directiveIndex.elementIndex}, ${b.directiveIndex.directiveIndex})`);\n    return `[${bs.join(\", \")}]`;\n  }\n\n  /** @internal */\n  _genInterpolation(protoRec: ProtoRecord): string {\n    var iVals = [];\n    for (var i = 0; i < protoRec.args.length; ++i) {\n      iVals.push(codify(protoRec.fixedArgs[i]));\n      iVals.push(`${this._utilName}.s(${this._names.getLocalName(protoRec.args[i])})`);\n    }\n    iVals.push(codify(protoRec.fixedArgs[protoRec.args.length]));\n    return combineGeneratedStrings(iVals);\n  }\n\n  genHydrateDirectives(directiveRecords: DirectiveRecord[]): string {\n    var res = [];\n    var outputCount = 0;\n    for (var i = 0; i < directiveRecords.length; ++i) {\n      var r = directiveRecords[i];\n      var dirVarName = this._names.getDirectiveName(r.directiveIndex);\n      res.push(`${dirVarName} = ${this._genReadDirective(i)};`);\n      if (isPresent(r.outputs)) {\n        r.outputs.forEach(output => {\n          var eventHandlerExpr = this._genEventHandler(r.directiveIndex.elementIndex, output[1]);\n          var statementStart =\n              `this.outputSubscriptions[${outputCount++}] = ${dirVarName}.${output[0]}`;\n          if (IS_DART) {\n            res.push(`${statementStart}.listen(${eventHandlerExpr});`);\n          } else {\n            res.push(`${statementStart}.subscribe({next: ${eventHandlerExpr}});`);\n          }\n        });\n      }\n    }\n    if (outputCount > 0) {\n      var statementStart = 'this.outputSubscriptions';\n      if (IS_DART) {\n        res.unshift(`${statementStart} = new List(${outputCount});`);\n      } else {\n        res.unshift(`${statementStart} = new Array(${outputCount});`);\n      }\n    }\n    return res.join(\"\\n\");\n  }\n\n  genDirectivesOnDestroy(directiveRecords: DirectiveRecord[]): string {\n    var res = [];\n    for (var i = 0; i < directiveRecords.length; ++i) {\n      var r = directiveRecords[i];\n      if (r.callOnDestroy) {\n        var dirVarName = this._names.getDirectiveName(r.directiveIndex);\n        res.push(`${dirVarName}.ngOnDestroy();`);\n      }\n    }\n    return res.join(\"\\n\");\n  }\n\n  private _genEventHandler(boundElementIndex: number, eventName: string): string {\n    if (IS_DART) {\n      return `(event) => this.handleEvent('${eventName}', ${boundElementIndex}, event)`;\n    } else {\n      return `(function(event) { return this.handleEvent('${eventName}', ${boundElementIndex}, event); }).bind(this)`;\n    }\n  }\n\n  private _genReadDirective(index: number) { return `this.getDirectiveFor(directives, ${index})`; }\n\n  genHydrateDetectors(directiveRecords: DirectiveRecord[]): string {\n    var res = [];\n    for (var i = 0; i < directiveRecords.length; ++i) {\n      var r = directiveRecords[i];\n      if (!r.isDefaultChangeDetection()) {\n        res.push(\n            `${this._names.getDetectorName(r.directiveIndex)} = this.getDetectorFor(directives, ${i});`);\n      }\n    }\n    return res.join(\"\\n\");\n  }\n\n  genContentLifecycleCallbacks(directiveRecords: DirectiveRecord[]): string[] {\n    var res = [];\n    var eq = IS_DART ? '==' : '===';\n    // NOTE(kegluneq): Order is important!\n    for (var i = directiveRecords.length - 1; i >= 0; --i) {\n      var dir = directiveRecords[i];\n      if (dir.callAfterContentInit) {\n        res.push(\n            `if(${this._names.getStateName()} ${eq} ${this._changeDetectorStateName}.NeverChecked) ${this._names.getDirectiveName(dir.directiveIndex)}.ngAfterContentInit();`);\n      }\n\n      if (dir.callAfterContentChecked) {\n        res.push(`${this._names.getDirectiveName(dir.directiveIndex)}.ngAfterContentChecked();`);\n      }\n    }\n    return res;\n  }\n\n  genViewLifecycleCallbacks(directiveRecords: DirectiveRecord[]): string[] {\n    var res = [];\n    var eq = IS_DART ? '==' : '===';\n    // NOTE(kegluneq): Order is important!\n    for (var i = directiveRecords.length - 1; i >= 0; --i) {\n      var dir = directiveRecords[i];\n      if (dir.callAfterViewInit) {\n        res.push(\n            `if(${this._names.getStateName()} ${eq} ${this._changeDetectorStateName}.NeverChecked) ${this._names.getDirectiveName(dir.directiveIndex)}.ngAfterViewInit();`);\n      }\n\n      if (dir.callAfterViewChecked) {\n        res.push(`${this._names.getDirectiveName(dir.directiveIndex)}.ngAfterViewChecked();`);\n      }\n    }\n    return res;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/codegen_logic_util.ts\n **/","import {RegExpWrapper, StringWrapper} from 'angular2/src/facade/lang';\nimport {ListWrapper, MapWrapper, Map} from 'angular2/src/facade/collection';\n\nimport {DirectiveIndex} from './directive_record';\n\nimport {ProtoRecord} from './proto_record';\nimport {EventBinding} from './event_binding';\n\n// The names of these fields must be kept in sync with abstract_change_detector.ts or change\n// detection will fail.\nconst _STATE_ACCESSOR = \"state\";\nconst _CONTEXT_ACCESSOR = \"context\";\nconst _PROP_BINDING_INDEX = \"propertyBindingIndex\";\nconst _DIRECTIVES_ACCESSOR = \"directiveIndices\";\nconst _DISPATCHER_ACCESSOR = \"dispatcher\";\nconst _LOCALS_ACCESSOR = \"locals\";\nconst _MODE_ACCESSOR = \"mode\";\nconst _PIPES_ACCESSOR = \"pipes\";\nconst _PROTOS_ACCESSOR = \"protos\";\nexport const CONTEXT_ACCESSOR = \"context\";\n\n// `context` is always first.\nexport const CONTEXT_INDEX = 0;\nconst _FIELD_PREFIX = 'this.';\n\nvar _whiteSpaceRegExp = /\\W/g;\n\n/**\n * Returns `s` with all non-identifier characters removed.\n */\nexport function sanitizeName(s: string): string {\n  return StringWrapper.replaceAll(s, _whiteSpaceRegExp, '');\n}\n\n/**\n * Class responsible for providing field and local variable names for change detector classes.\n * Also provides some convenience functions, for example, declaring variables, destroying pipes,\n * and dehydrating the detector.\n */\nexport class CodegenNameUtil {\n  /**\n   * Record names sanitized for use as fields.\n   * See [sanitizeName] for details.\n   * @internal\n   */\n  _sanitizedNames: string[];\n  /** @internal */\n  _sanitizedEventNames = new Map<EventBinding, string[]>();\n\n  constructor(private _records: ProtoRecord[], private _eventBindings: EventBinding[],\n              private _directiveRecords: any[], private _utilName: string) {\n    this._sanitizedNames = ListWrapper.createFixedSize(this._records.length + 1);\n    this._sanitizedNames[CONTEXT_INDEX] = CONTEXT_ACCESSOR;\n    for (var i = 0, iLen = this._records.length; i < iLen; ++i) {\n      this._sanitizedNames[i + 1] = sanitizeName(`${this._records[i].name}${i}`);\n    }\n\n    for (var ebIndex = 0; ebIndex < _eventBindings.length; ++ebIndex) {\n      var eb = _eventBindings[ebIndex];\n      var names = [CONTEXT_ACCESSOR];\n      for (var i = 0, iLen = eb.records.length; i < iLen; ++i) {\n        names.push(sanitizeName(`${eb.records[i].name}${i}_${ebIndex}`));\n      }\n      this._sanitizedEventNames.set(eb, names);\n    }\n  }\n\n  /** @internal */\n  _addFieldPrefix(name: string): string { return `${_FIELD_PREFIX}${name}`; }\n\n  getDispatcherName(): string { return this._addFieldPrefix(_DISPATCHER_ACCESSOR); }\n\n  getPipesAccessorName(): string { return this._addFieldPrefix(_PIPES_ACCESSOR); }\n\n  getProtosName(): string { return this._addFieldPrefix(_PROTOS_ACCESSOR); }\n\n  getDirectivesAccessorName(): string { return this._addFieldPrefix(_DIRECTIVES_ACCESSOR); }\n\n  getLocalsAccessorName(): string { return this._addFieldPrefix(_LOCALS_ACCESSOR); }\n\n  getStateName(): string { return this._addFieldPrefix(_STATE_ACCESSOR); }\n\n  getModeName(): string { return this._addFieldPrefix(_MODE_ACCESSOR); }\n\n  getPropertyBindingIndex(): string { return this._addFieldPrefix(_PROP_BINDING_INDEX); }\n\n  getLocalName(idx: number): string { return `l_${this._sanitizedNames[idx]}`; }\n\n  getEventLocalName(eb: EventBinding, idx: number): string {\n    return `l_${this._sanitizedEventNames.get(eb)[idx]}`;\n  }\n\n  getChangeName(idx: number): string { return `c_${this._sanitizedNames[idx]}`; }\n\n  /**\n   * Generate a statement initializing local variables used when detecting changes.\n   */\n  genInitLocals(): string {\n    var declarations = [];\n    var assignments = [];\n    for (var i = 0, iLen = this.getFieldCount(); i < iLen; ++i) {\n      if (i == CONTEXT_INDEX) {\n        declarations.push(`${this.getLocalName(i)} = ${this.getFieldName(i)}`);\n      } else {\n        var rec = this._records[i - 1];\n        if (rec.argumentToPureFunction) {\n          var changeName = this.getChangeName(i);\n          declarations.push(`${this.getLocalName(i)},${changeName}`);\n          assignments.push(changeName);\n        } else {\n          declarations.push(`${this.getLocalName(i)}`);\n        }\n      }\n    }\n    var assignmentsCode =\n        ListWrapper.isEmpty(assignments) ? '' : `${assignments.join('=')} = false;`;\n    return `var ${declarations.join(',')};${assignmentsCode}`;\n  }\n\n  /**\n   * Generate a statement initializing local variables for event handlers.\n   */\n  genInitEventLocals(): string {\n    var res = [`${this.getLocalName(CONTEXT_INDEX)} = ${this.getFieldName(CONTEXT_INDEX)}`];\n    this._sanitizedEventNames.forEach((names, eb) => {\n      for (var i = 0; i < names.length; ++i) {\n        if (i !== CONTEXT_INDEX) {\n          res.push(`${this.getEventLocalName(eb, i)}`);\n        }\n      }\n    });\n    return res.length > 1 ? `var ${res.join(',')};` : '';\n  }\n\n  getPreventDefaultAccesor(): string { return \"preventDefault\"; }\n\n  getFieldCount(): number { return this._sanitizedNames.length; }\n\n  getFieldName(idx: number): string { return this._addFieldPrefix(this._sanitizedNames[idx]); }\n\n  getAllFieldNames(): string[] {\n    var fieldList = [];\n    for (var k = 0, kLen = this.getFieldCount(); k < kLen; ++k) {\n      if (k === 0 || this._records[k - 1].shouldBeChecked()) {\n        fieldList.push(this.getFieldName(k));\n      }\n    }\n\n    for (var i = 0, iLen = this._records.length; i < iLen; ++i) {\n      var rec = this._records[i];\n      if (rec.isPipeRecord()) {\n        fieldList.push(this.getPipeName(rec.selfIndex));\n      }\n    }\n\n    for (var j = 0, jLen = this._directiveRecords.length; j < jLen; ++j) {\n      var dRec = this._directiveRecords[j];\n      fieldList.push(this.getDirectiveName(dRec.directiveIndex));\n      if (!dRec.isDefaultChangeDetection()) {\n        fieldList.push(this.getDetectorName(dRec.directiveIndex));\n      }\n    }\n    return fieldList;\n  }\n\n  /**\n   * Generates statements which clear all fields so that the change detector is dehydrated.\n   */\n  genDehydrateFields(): string {\n    var fields = this.getAllFieldNames();\n    ListWrapper.removeAt(fields, CONTEXT_INDEX);\n    if (ListWrapper.isEmpty(fields)) return '';\n\n    // At least one assignment.\n    fields.push(`${this._utilName}.uninitialized;`);\n    return fields.join(' = ');\n  }\n\n  /**\n   * Generates statements destroying all pipe variables.\n   */\n  genPipeOnDestroy(): string {\n    return this._records.filter(r => r.isPipeRecord())\n        .map(r => `${this._utilName}.callPipeOnDestroy(${this.getPipeName(r.selfIndex)});`)\n        .join('\\n');\n  }\n\n  getPipeName(idx: number): string {\n    return this._addFieldPrefix(`${this._sanitizedNames[idx]}_pipe`);\n  }\n\n  getDirectiveName(d: DirectiveIndex): string {\n    return this._addFieldPrefix(`directive_${d.name}`);\n  }\n\n  getDetectorName(d: DirectiveIndex): string { return this._addFieldPrefix(`detector_${d.name}`); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/codegen_name_util.ts\n **/","import {DirectiveIndex} from './directive_record';\nimport {ProtoRecord} from './proto_record';\n\nexport class EventBinding {\n  constructor(public eventName: string, public elIndex: number, public dirIndex: DirectiveIndex,\n              public records: ProtoRecord[]) {}\n}\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/event_binding.ts\n **/","import {ListWrapper} from 'angular2/src/facade/collection';\nimport {isPresent} from 'angular2/src/facade/lang';\n\nimport {ProtoChangeDetector, ChangeDetector, ChangeDetectorDefinition} from './interfaces';\nimport {ChangeDetectorJITGenerator} from './change_detection_jit_generator';\n\nexport class JitProtoChangeDetector implements ProtoChangeDetector {\n  /** @internal */\n  _factory: Function;\n\n  constructor(private definition: ChangeDetectorDefinition) {\n    this._factory = this._createFactory(definition);\n  }\n\n  static isSupported(): boolean { return true; }\n\n  instantiate(): ChangeDetector { return this._factory(); }\n\n  /** @internal */\n  _createFactory(definition: ChangeDetectorDefinition) {\n    return new ChangeDetectorJITGenerator(definition, 'util', 'AbstractChangeDetector',\n                                          'ChangeDetectorStatus')\n        .generate();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/jit_proto_change_detector.ts\n **/","import {Injectable} from 'angular2/src/core/di/decorators';\nimport {isBlank, isPresent, StringWrapper} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {ListWrapper} from 'angular2/src/facade/collection';\nimport {\n  Lexer,\n  EOF,\n  isIdentifier,\n  Token,\n  $PERIOD,\n  $COLON,\n  $SEMICOLON,\n  $LBRACKET,\n  $RBRACKET,\n  $COMMA,\n  $LBRACE,\n  $RBRACE,\n  $LPAREN,\n  $RPAREN\n} from './lexer';\nimport {reflector, Reflector} from 'angular2/src/core/reflection/reflection';\nimport {\n  AST,\n  EmptyExpr,\n  ImplicitReceiver,\n  PropertyRead,\n  PropertyWrite,\n  SafePropertyRead,\n  LiteralPrimitive,\n  Binary,\n  PrefixNot,\n  Conditional,\n  BindingPipe,\n  Chain,\n  KeyedRead,\n  KeyedWrite,\n  LiteralArray,\n  LiteralMap,\n  Interpolation,\n  MethodCall,\n  SafeMethodCall,\n  FunctionCall,\n  TemplateBinding,\n  ASTWithSource,\n  AstVisitor,\n  Quote\n} from './ast';\n\n\nvar _implicitReceiver = new ImplicitReceiver();\n// TODO(tbosch): Cannot make this const/final right now because of the transpiler...\nvar INTERPOLATION_REGEXP = /\\{\\{([\\s\\S]*?)\\}\\}/g;\n\nclass ParseException extends BaseException {\n  constructor(message: string, input: string, errLocation: string, ctxLocation?: any) {\n    super(`Parser Error: ${message} ${errLocation} [${input}] in ${ctxLocation}`);\n  }\n}\n\n@Injectable()\nexport class Parser {\n  /** @internal */\n  _reflector: Reflector;\n\n  constructor(/** @internal */\n              public _lexer: Lexer, providedReflector: Reflector = null) {\n    this._reflector = isPresent(providedReflector) ? providedReflector : reflector;\n  }\n\n  parseAction(input: string, location: any): ASTWithSource {\n    this._checkNoInterpolation(input, location);\n    var tokens = this._lexer.tokenize(input);\n    var ast = new _ParseAST(input, location, tokens, this._reflector, true).parseChain();\n    return new ASTWithSource(ast, input, location);\n  }\n\n  parseBinding(input: string, location: any): ASTWithSource {\n    var ast = this._parseBindingAst(input, location);\n    return new ASTWithSource(ast, input, location);\n  }\n\n  parseSimpleBinding(input: string, location: string): ASTWithSource {\n    var ast = this._parseBindingAst(input, location);\n    if (!SimpleExpressionChecker.check(ast)) {\n      throw new ParseException(\n          'Host binding expression can only contain field access and constants', input, location);\n    }\n    return new ASTWithSource(ast, input, location);\n  }\n\n  private _parseBindingAst(input: string, location: string): AST {\n    // Quotes expressions use 3rd-party expression language. We don't want to use\n    // our lexer or parser for that, so we check for that ahead of time.\n    var quote = this._parseQuote(input, location);\n\n    if (isPresent(quote)) {\n      return quote;\n    }\n\n    this._checkNoInterpolation(input, location);\n    var tokens = this._lexer.tokenize(input);\n    return new _ParseAST(input, location, tokens, this._reflector, false).parseChain();\n  }\n\n  private _parseQuote(input: string, location: any): AST {\n    if (isBlank(input)) return null;\n    var prefixSeparatorIndex = input.indexOf(':');\n    if (prefixSeparatorIndex == -1) return null;\n    var prefix = input.substring(0, prefixSeparatorIndex).trim();\n    if (!isIdentifier(prefix)) return null;\n    var uninterpretedExpression = input.substring(prefixSeparatorIndex + 1);\n    return new Quote(prefix, uninterpretedExpression, location);\n  }\n\n  parseTemplateBindings(input: string, location: any): TemplateBinding[] {\n    var tokens = this._lexer.tokenize(input);\n    return new _ParseAST(input, location, tokens, this._reflector, false).parseTemplateBindings();\n  }\n\n  parseInterpolation(input: string, location: any): ASTWithSource {\n    var parts = StringWrapper.split(input, INTERPOLATION_REGEXP);\n    if (parts.length <= 1) {\n      return null;\n    }\n    var strings = [];\n    var expressions = [];\n\n    for (var i = 0; i < parts.length; i++) {\n      var part: string = parts[i];\n      if (i % 2 === 0) {\n        // fixed string\n        strings.push(part);\n      } else if (part.trim().length > 0) {\n        var tokens = this._lexer.tokenize(part);\n        var ast = new _ParseAST(input, location, tokens, this._reflector, false).parseChain();\n        expressions.push(ast);\n      } else {\n        throw new ParseException('Blank expressions are not allowed in interpolated strings', input,\n                                 `at column ${this._findInterpolationErrorColumn(parts, i)} in`,\n                                 location);\n      }\n    }\n    return new ASTWithSource(new Interpolation(strings, expressions), input, location);\n  }\n\n  wrapLiteralPrimitive(input: string, location: any): ASTWithSource {\n    return new ASTWithSource(new LiteralPrimitive(input), input, location);\n  }\n\n  private _checkNoInterpolation(input: string, location: any): void {\n    var parts = StringWrapper.split(input, INTERPOLATION_REGEXP);\n    if (parts.length > 1) {\n      throw new ParseException('Got interpolation ({{}}) where expression was expected', input,\n                               `at column ${this._findInterpolationErrorColumn(parts, 1)} in`,\n                               location);\n    }\n  }\n\n  private _findInterpolationErrorColumn(parts: string[], partInErrIdx: number): number {\n    var errLocation = '';\n    for (var j = 0; j < partInErrIdx; j++) {\n      errLocation += j % 2 === 0 ? parts[j] : `{{${parts[j]}}}`;\n    }\n\n    return errLocation.length;\n  }\n}\n\nexport class _ParseAST {\n  index: number = 0;\n  constructor(public input: string, public location: any, public tokens: any[],\n              public reflector: Reflector, public parseAction: boolean) {}\n\n  peek(offset: number): Token {\n    var i = this.index + offset;\n    return i < this.tokens.length ? this.tokens[i] : EOF;\n  }\n\n  get next(): Token { return this.peek(0); }\n\n  get inputIndex(): number {\n    return (this.index < this.tokens.length) ? this.next.index : this.input.length;\n  }\n\n  advance() { this.index++; }\n\n  optionalCharacter(code: number): boolean {\n    if (this.next.isCharacter(code)) {\n      this.advance();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  optionalKeywordVar(): boolean {\n    if (this.peekKeywordVar()) {\n      this.advance();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  peekKeywordVar(): boolean { return this.next.isKeywordVar() || this.next.isOperator('#'); }\n\n  expectCharacter(code: number) {\n    if (this.optionalCharacter(code)) return;\n    this.error(`Missing expected ${StringWrapper.fromCharCode(code)}`);\n  }\n\n\n  optionalOperator(op: string): boolean {\n    if (this.next.isOperator(op)) {\n      this.advance();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  expectOperator(operator: string) {\n    if (this.optionalOperator(operator)) return;\n    this.error(`Missing expected operator ${operator}`);\n  }\n\n  expectIdentifierOrKeyword(): string {\n    var n = this.next;\n    if (!n.isIdentifier() && !n.isKeyword()) {\n      this.error(`Unexpected token ${n}, expected identifier or keyword`);\n    }\n    this.advance();\n    return n.toString();\n  }\n\n  expectIdentifierOrKeywordOrString(): string {\n    var n = this.next;\n    if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {\n      this.error(`Unexpected token ${n}, expected identifier, keyword, or string`);\n    }\n    this.advance();\n    return n.toString();\n  }\n\n  parseChain(): AST {\n    var exprs = [];\n    while (this.index < this.tokens.length) {\n      var expr = this.parsePipe();\n      exprs.push(expr);\n\n      if (this.optionalCharacter($SEMICOLON)) {\n        if (!this.parseAction) {\n          this.error(\"Binding expression cannot contain chained expression\");\n        }\n        while (this.optionalCharacter($SEMICOLON)) {\n        }  // read all semicolons\n      } else if (this.index < this.tokens.length) {\n        this.error(`Unexpected token '${this.next}'`);\n      }\n    }\n    if (exprs.length == 0) return new EmptyExpr();\n    if (exprs.length == 1) return exprs[0];\n    return new Chain(exprs);\n  }\n\n  parsePipe(): AST {\n    var result = this.parseExpression();\n    if (this.optionalOperator(\"|\")) {\n      if (this.parseAction) {\n        this.error(\"Cannot have a pipe in an action expression\");\n      }\n\n      do {\n        var name = this.expectIdentifierOrKeyword();\n        var args = [];\n        while (this.optionalCharacter($COLON)) {\n          args.push(this.parseExpression());\n        }\n        result = new BindingPipe(result, name, args);\n      } while (this.optionalOperator(\"|\"));\n    }\n\n    return result;\n  }\n\n  parseExpression(): AST { return this.parseConditional(); }\n\n  parseConditional(): AST {\n    var start = this.inputIndex;\n    var result = this.parseLogicalOr();\n\n    if (this.optionalOperator('?')) {\n      var yes = this.parsePipe();\n      if (!this.optionalCharacter($COLON)) {\n        var end = this.inputIndex;\n        var expression = this.input.substring(start, end);\n        this.error(`Conditional expression ${expression} requires all 3 expressions`);\n      }\n      var no = this.parsePipe();\n      return new Conditional(result, yes, no);\n    } else {\n      return result;\n    }\n  }\n\n  parseLogicalOr(): AST {\n    // '||'\n    var result = this.parseLogicalAnd();\n    while (this.optionalOperator('||')) {\n      result = new Binary('||', result, this.parseLogicalAnd());\n    }\n    return result;\n  }\n\n  parseLogicalAnd(): AST {\n    // '&&'\n    var result = this.parseEquality();\n    while (this.optionalOperator('&&')) {\n      result = new Binary('&&', result, this.parseEquality());\n    }\n    return result;\n  }\n\n  parseEquality(): AST {\n    // '==','!=','===','!=='\n    var result = this.parseRelational();\n    while (true) {\n      if (this.optionalOperator('==')) {\n        result = new Binary('==', result, this.parseRelational());\n      } else if (this.optionalOperator('===')) {\n        result = new Binary('===', result, this.parseRelational());\n      } else if (this.optionalOperator('!=')) {\n        result = new Binary('!=', result, this.parseRelational());\n      } else if (this.optionalOperator('!==')) {\n        result = new Binary('!==', result, this.parseRelational());\n      } else {\n        return result;\n      }\n    }\n  }\n\n  parseRelational(): AST {\n    // '<', '>', '<=', '>='\n    var result = this.parseAdditive();\n    while (true) {\n      if (this.optionalOperator('<')) {\n        result = new Binary('<', result, this.parseAdditive());\n      } else if (this.optionalOperator('>')) {\n        result = new Binary('>', result, this.parseAdditive());\n      } else if (this.optionalOperator('<=')) {\n        result = new Binary('<=', result, this.parseAdditive());\n      } else if (this.optionalOperator('>=')) {\n        result = new Binary('>=', result, this.parseAdditive());\n      } else {\n        return result;\n      }\n    }\n  }\n\n  parseAdditive(): AST {\n    // '+', '-'\n    var result = this.parseMultiplicative();\n    while (true) {\n      if (this.optionalOperator('+')) {\n        result = new Binary('+', result, this.parseMultiplicative());\n      } else if (this.optionalOperator('-')) {\n        result = new Binary('-', result, this.parseMultiplicative());\n      } else {\n        return result;\n      }\n    }\n  }\n\n  parseMultiplicative(): AST {\n    // '*', '%', '/'\n    var result = this.parsePrefix();\n    while (true) {\n      if (this.optionalOperator('*')) {\n        result = new Binary('*', result, this.parsePrefix());\n      } else if (this.optionalOperator('%')) {\n        result = new Binary('%', result, this.parsePrefix());\n      } else if (this.optionalOperator('/')) {\n        result = new Binary('/', result, this.parsePrefix());\n      } else {\n        return result;\n      }\n    }\n  }\n\n  parsePrefix(): AST {\n    if (this.optionalOperator('+')) {\n      return this.parsePrefix();\n    } else if (this.optionalOperator('-')) {\n      return new Binary('-', new LiteralPrimitive(0), this.parsePrefix());\n    } else if (this.optionalOperator('!')) {\n      return new PrefixNot(this.parsePrefix());\n    } else {\n      return this.parseCallChain();\n    }\n  }\n\n  parseCallChain(): AST {\n    var result = this.parsePrimary();\n    while (true) {\n      if (this.optionalCharacter($PERIOD)) {\n        result = this.parseAccessMemberOrMethodCall(result, false);\n\n      } else if (this.optionalOperator('?.')) {\n        result = this.parseAccessMemberOrMethodCall(result, true);\n\n      } else if (this.optionalCharacter($LBRACKET)) {\n        var key = this.parsePipe();\n        this.expectCharacter($RBRACKET);\n        if (this.optionalOperator(\"=\")) {\n          var value = this.parseConditional();\n          result = new KeyedWrite(result, key, value);\n        } else {\n          result = new KeyedRead(result, key);\n        }\n\n      } else if (this.optionalCharacter($LPAREN)) {\n        var args = this.parseCallArguments();\n        this.expectCharacter($RPAREN);\n        result = new FunctionCall(result, args);\n\n      } else {\n        return result;\n      }\n    }\n  }\n\n  parsePrimary(): AST {\n    if (this.optionalCharacter($LPAREN)) {\n      let result = this.parsePipe();\n      this.expectCharacter($RPAREN);\n      return result;\n    } else if (this.next.isKeywordNull() || this.next.isKeywordUndefined()) {\n      this.advance();\n      return new LiteralPrimitive(null);\n\n    } else if (this.next.isKeywordTrue()) {\n      this.advance();\n      return new LiteralPrimitive(true);\n\n    } else if (this.next.isKeywordFalse()) {\n      this.advance();\n      return new LiteralPrimitive(false);\n\n    } else if (this.optionalCharacter($LBRACKET)) {\n      var elements = this.parseExpressionList($RBRACKET);\n      this.expectCharacter($RBRACKET);\n      return new LiteralArray(elements);\n\n    } else if (this.next.isCharacter($LBRACE)) {\n      return this.parseLiteralMap();\n\n    } else if (this.next.isIdentifier()) {\n      return this.parseAccessMemberOrMethodCall(_implicitReceiver, false);\n\n    } else if (this.next.isNumber()) {\n      var value = this.next.toNumber();\n      this.advance();\n      return new LiteralPrimitive(value);\n\n    } else if (this.next.isString()) {\n      var literalValue = this.next.toString();\n      this.advance();\n      return new LiteralPrimitive(literalValue);\n\n    } else if (this.index >= this.tokens.length) {\n      this.error(`Unexpected end of expression: ${this.input}`);\n\n    } else {\n      this.error(`Unexpected token ${this.next}`);\n    }\n    // error() throws, so we don't reach here.\n    throw new BaseException(\"Fell through all cases in parsePrimary\");\n  }\n\n  parseExpressionList(terminator: number): any[] {\n    var result = [];\n    if (!this.next.isCharacter(terminator)) {\n      do {\n        result.push(this.parsePipe());\n      } while (this.optionalCharacter($COMMA));\n    }\n    return result;\n  }\n\n  parseLiteralMap(): LiteralMap {\n    var keys = [];\n    var values = [];\n    this.expectCharacter($LBRACE);\n    if (!this.optionalCharacter($RBRACE)) {\n      do {\n        var key = this.expectIdentifierOrKeywordOrString();\n        keys.push(key);\n        this.expectCharacter($COLON);\n        values.push(this.parsePipe());\n      } while (this.optionalCharacter($COMMA));\n      this.expectCharacter($RBRACE);\n    }\n    return new LiteralMap(keys, values);\n  }\n\n  parseAccessMemberOrMethodCall(receiver: AST, isSafe: boolean = false): AST {\n    let id = this.expectIdentifierOrKeyword();\n\n    if (this.optionalCharacter($LPAREN)) {\n      let args = this.parseCallArguments();\n      this.expectCharacter($RPAREN);\n      let fn = this.reflector.method(id);\n      return isSafe ? new SafeMethodCall(receiver, id, fn, args) :\n                      new MethodCall(receiver, id, fn, args);\n\n    } else {\n      if (isSafe) {\n        if (this.optionalOperator(\"=\")) {\n          this.error(\"The '?.' operator cannot be used in the assignment\");\n        } else {\n          return new SafePropertyRead(receiver, id, this.reflector.getter(id));\n        }\n      } else {\n        if (this.optionalOperator(\"=\")) {\n          if (!this.parseAction) {\n            this.error(\"Bindings cannot contain assignments\");\n          }\n\n          let value = this.parseConditional();\n          return new PropertyWrite(receiver, id, this.reflector.setter(id), value);\n        } else {\n          return new PropertyRead(receiver, id, this.reflector.getter(id));\n        }\n      }\n    }\n\n    return null;\n  }\n\n  parseCallArguments(): BindingPipe[] {\n    if (this.next.isCharacter($RPAREN)) return [];\n    var positionals = [];\n    do {\n      positionals.push(this.parsePipe());\n    } while (this.optionalCharacter($COMMA));\n    return positionals;\n  }\n\n  parseBlockContent(): AST {\n    if (!this.parseAction) {\n      this.error(\"Binding expression cannot contain chained expression\");\n    }\n    var exprs = [];\n    while (this.index < this.tokens.length && !this.next.isCharacter($RBRACE)) {\n      var expr = this.parseExpression();\n      exprs.push(expr);\n\n      if (this.optionalCharacter($SEMICOLON)) {\n        while (this.optionalCharacter($SEMICOLON)) {\n        }  // read all semicolons\n      }\n    }\n    if (exprs.length == 0) return new EmptyExpr();\n    if (exprs.length == 1) return exprs[0];\n\n    return new Chain(exprs);\n  }\n\n\n  /**\n   * An identifier, a keyword, a string with an optional `-` inbetween.\n   */\n  expectTemplateBindingKey(): string {\n    var result = '';\n    var operatorFound = false;\n    do {\n      result += this.expectIdentifierOrKeywordOrString();\n      operatorFound = this.optionalOperator('-');\n      if (operatorFound) {\n        result += '-';\n      }\n    } while (operatorFound);\n\n    return result.toString();\n  }\n\n  parseTemplateBindings(): any[] {\n    var bindings = [];\n    var prefix = null;\n    while (this.index < this.tokens.length) {\n      var keyIsVar: boolean = this.optionalKeywordVar();\n      var key = this.expectTemplateBindingKey();\n      if (!keyIsVar) {\n        if (prefix == null) {\n          prefix = key;\n        } else {\n          key = prefix + key[0].toUpperCase() + key.substring(1);\n        }\n      }\n      this.optionalCharacter($COLON);\n      var name = null;\n      var expression = null;\n      if (keyIsVar) {\n        if (this.optionalOperator(\"=\")) {\n          name = this.expectTemplateBindingKey();\n        } else {\n          name = '\\$implicit';\n        }\n      } else if (this.next !== EOF && !this.peekKeywordVar()) {\n        var start = this.inputIndex;\n        var ast = this.parsePipe();\n        var source = this.input.substring(start, this.inputIndex);\n        expression = new ASTWithSource(ast, source, this.location);\n      }\n      bindings.push(new TemplateBinding(key, keyIsVar, name, expression));\n      if (!this.optionalCharacter($SEMICOLON)) {\n        this.optionalCharacter($COMMA);\n      }\n    }\n    return bindings;\n  }\n\n  error(message: string, index: number = null) {\n    if (isBlank(index)) index = this.index;\n\n    var location = (index < this.tokens.length) ? `at column ${this.tokens[index].index + 1} in` :\n                                                  `at the end of the expression`;\n\n    throw new ParseException(message, this.input, location, this.location);\n  }\n}\n\nclass SimpleExpressionChecker implements AstVisitor {\n  static check(ast: AST): boolean {\n    var s = new SimpleExpressionChecker();\n    ast.visit(s);\n    return s.simple;\n  }\n\n  simple = true;\n\n  visitImplicitReceiver(ast: ImplicitReceiver) {}\n\n  visitInterpolation(ast: Interpolation) { this.simple = false; }\n\n  visitLiteralPrimitive(ast: LiteralPrimitive) {}\n\n  visitPropertyRead(ast: PropertyRead) {}\n\n  visitPropertyWrite(ast: PropertyWrite) { this.simple = false; }\n\n  visitSafePropertyRead(ast: SafePropertyRead) { this.simple = false; }\n\n  visitMethodCall(ast: MethodCall) { this.simple = false; }\n\n  visitSafeMethodCall(ast: SafeMethodCall) { this.simple = false; }\n\n  visitFunctionCall(ast: FunctionCall) { this.simple = false; }\n\n  visitLiteralArray(ast: LiteralArray) { this.visitAll(ast.expressions); }\n\n  visitLiteralMap(ast: LiteralMap) { this.visitAll(ast.values); }\n\n  visitBinary(ast: Binary) { this.simple = false; }\n\n  visitPrefixNot(ast: PrefixNot) { this.simple = false; }\n\n  visitConditional(ast: Conditional) { this.simple = false; }\n\n  visitPipe(ast: BindingPipe) { this.simple = false; }\n\n  visitKeyedRead(ast: KeyedRead) { this.simple = false; }\n\n  visitKeyedWrite(ast: KeyedWrite) { this.simple = false; }\n\n  visitAll(asts: any[]): any[] {\n    var res = ListWrapper.createFixedSize(asts.length);\n    for (var i = 0; i < asts.length; ++i) {\n      res[i] = asts[i].visit(this);\n    }\n    return res;\n  }\n\n  visitChain(ast: Chain) { this.simple = false; }\n\n  visitQuote(ast: Quote) { this.simple = false; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/parser/parser.ts\n **/","export function implementsOnDestroy(pipe: any): boolean {\n  return pipe.constructor.prototype.ngOnDestroy;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/pipe_lifecycle_reflector.ts\n **/","import {PipeTransform} from './pipe_transform';\n\nexport interface Pipes { get(name: string): SelectedPipe; }\n\nexport class SelectedPipe {\n  constructor(public pipe: PipeTransform, public pure: boolean) {}\n}\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/change_detection/pipes.ts\n **/","import {isPresent} from 'angular2/src/facade/lang';\nimport {\n  Renderer,\n  RootRenderer,\n  RenderComponentType,\n  RenderDebugInfo\n} from 'angular2/src/core/render/api';\nimport {\n  DebugNode,\n  DebugElement,\n  EventListener,\n  getDebugNode,\n  indexDebugNode,\n  removeDebugNodeFromIndex\n} from 'angular2/src/core/debug/debug_node';\n\nexport class DebugDomRootRenderer implements RootRenderer {\n  constructor(private _delegate: RootRenderer) {}\n\n  renderComponent(componentProto: RenderComponentType): Renderer {\n    return new DebugDomRenderer(this, this._delegate.renderComponent(componentProto));\n  }\n}\n\nexport class DebugDomRenderer implements Renderer {\n  constructor(private _rootRenderer: DebugDomRootRenderer, private _delegate: Renderer) {}\n\n  renderComponent(componentType: RenderComponentType): Renderer {\n    return this._rootRenderer.renderComponent(componentType);\n  }\n\n  selectRootElement(selector: string): any {\n    var nativeEl = this._delegate.selectRootElement(selector);\n    var debugEl = new DebugElement(nativeEl, null);\n    indexDebugNode(debugEl);\n    return nativeEl;\n  }\n\n  createElement(parentElement: any, name: string): any {\n    var nativeEl = this._delegate.createElement(parentElement, name);\n    var debugEl = new DebugElement(nativeEl, getDebugNode(parentElement));\n    debugEl.name = name;\n    indexDebugNode(debugEl);\n    return nativeEl;\n  }\n\n  createViewRoot(hostElement: any): any { return this._delegate.createViewRoot(hostElement); }\n\n  createTemplateAnchor(parentElement: any): any {\n    var comment = this._delegate.createTemplateAnchor(parentElement);\n    var debugEl = new DebugNode(comment, getDebugNode(parentElement));\n    indexDebugNode(debugEl);\n    return comment;\n  }\n\n  createText(parentElement: any, value: string): any {\n    var text = this._delegate.createText(parentElement, value);\n    var debugEl = new DebugNode(text, getDebugNode(parentElement));\n    indexDebugNode(debugEl);\n    return text;\n  }\n\n  projectNodes(parentElement: any, nodes: any[]) {\n    var debugParent = getDebugNode(parentElement);\n    if (isPresent(debugParent) && debugParent instanceof DebugElement) {\n      nodes.forEach((node) => { debugParent.addChild(getDebugNode(node)); });\n    }\n    return this._delegate.projectNodes(parentElement, nodes);\n  }\n\n  attachViewAfter(node: any, viewRootNodes: any[]) {\n    var debugNode = getDebugNode(node);\n    if (isPresent(debugNode)) {\n      var debugParent = debugNode.parent;\n      if (viewRootNodes.length > 0 && isPresent(debugParent)) {\n        var debugViewRootNodes: DebugNode[] = [];\n        viewRootNodes.forEach((rootNode) => debugViewRootNodes.push(getDebugNode(rootNode)));\n        debugParent.insertChildrenAfter(debugNode, debugViewRootNodes);\n      }\n    }\n    return this._delegate.attachViewAfter(node, viewRootNodes);\n  }\n\n  detachView(viewRootNodes: any[]) {\n    viewRootNodes.forEach((node) => {\n      var debugNode = getDebugNode(node);\n      if (isPresent(debugNode) && isPresent(debugNode.parent)) {\n        debugNode.parent.removeChild(debugNode);\n      }\n    });\n    return this._delegate.detachView(viewRootNodes);\n  }\n\n  destroyView(hostElement: any, viewAllNodes: any[]) {\n    viewAllNodes.forEach((node) => { removeDebugNodeFromIndex(getDebugNode(node)); });\n    return this._delegate.destroyView(hostElement, viewAllNodes);\n  }\n\n  listen(renderElement: any, name: string, callback: Function) {\n    var debugEl = getDebugNode(renderElement);\n    if (isPresent(debugEl)) {\n      debugEl.listeners.push(new EventListener(name, callback));\n    }\n    return this._delegate.listen(renderElement, name, callback);\n  }\n\n  listenGlobal(target: string, name: string, callback: Function): Function {\n    return this._delegate.listenGlobal(target, name, callback);\n  }\n\n  setElementProperty(renderElement: any, propertyName: string, propertyValue: any) {\n    var debugEl = getDebugNode(renderElement);\n    if (isPresent(debugEl) && debugEl instanceof DebugElement) {\n      debugEl.properties.set(propertyName, propertyValue);\n    }\n    return this._delegate.setElementProperty(renderElement, propertyName, propertyValue);\n  }\n\n  setElementAttribute(renderElement: any, attributeName: string, attributeValue: string) {\n    var debugEl = getDebugNode(renderElement);\n    if (isPresent(debugEl) && debugEl instanceof DebugElement) {\n      debugEl.attributes.set(attributeName, attributeValue);\n    }\n    return this._delegate.setElementAttribute(renderElement, attributeName, attributeValue);\n  }\n\n  /**\n   * Used only in debug mode to serialize property changes to comment nodes,\n   * such as <template> placeholders.\n   */\n  setBindingDebugInfo(renderElement: any, propertyName: string, propertyValue: string) {\n    return this._delegate.setBindingDebugInfo(renderElement, propertyName, propertyValue);\n  }\n\n  /**\n   * Used only in development mode to set information needed by the DebugNode for this element.\n   */\n  setElementDebugInfo(renderElement: any, info: RenderDebugInfo) {\n    var debugEl = getDebugNode(renderElement);\n    debugEl.setDebugInfo(info);\n    return this._delegate.setElementDebugInfo(renderElement, info);\n  }\n\n  setElementClass(renderElement: any, className: string, isAdd: boolean) {\n    return this._delegate.setElementClass(renderElement, className, isAdd);\n  }\n\n  setElementStyle(renderElement: any, styleName: string, styleValue: string) {\n    return this._delegate.setElementStyle(renderElement, styleName, styleValue);\n  }\n\n  invokeElementMethod(renderElement: any, methodName: string, args: any[]) {\n    return this._delegate.invokeElementMethod(renderElement, methodName, args);\n  }\n\n  setText(renderNode: any, text: string) { return this._delegate.setText(renderNode, text); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/debug/debug_renderer.ts\n **/","import {CONST} from 'angular2/src/facade/lang';\n\n/**\n * Creates a token that can be used in a DI Provider.\n *\n * ### Example ([live demo](http://plnkr.co/edit/Ys9ezXpj2Mnoy3Uc8KBp?p=preview))\n *\n * ```typescript\n * var t = new OpaqueToken(\"value\");\n *\n * var injector = Injector.resolveAndCreate([\n *   provide(t, {useValue: \"bindingValue\"})\n * ]);\n *\n * expect(injector.get(t)).toEqual(\"bindingValue\");\n * ```\n *\n * Using an `OpaqueToken` is preferable to using strings as tokens because of possible collisions\n * caused by multiple providers using the same string as two different tokens.\n *\n * Using an `OpaqueToken` is preferable to using an `Object` as tokens because it provides better\n * error messages.\n */\n@CONST()\nexport class OpaqueToken {\n  constructor(private _desc: string) {}\n\n  toString(): string { return `Token ${this._desc}`; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/di/opaque_token.ts\n **/","// Public API for compiler\nexport {\n  AfterContentInit,\n  AfterContentChecked,\n  AfterViewInit,\n  AfterViewChecked,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  DoCheck\n} from './linker/interfaces';\nexport {DirectiveResolver} from './linker/directive_resolver';\nexport {ViewResolver} from './linker/view_resolver';\nexport {Compiler} from './linker/compiler';\nexport {AppViewManager} from './linker/view_manager';\nexport {QueryList} from './linker/query_list';\nexport {DynamicComponentLoader} from './linker/dynamic_component_loader';\nexport {ElementRef} from './linker/element_ref';\nexport {TemplateRef} from './linker/template_ref';\nexport {EmbeddedViewRef, HostViewRef, ViewRef, HostViewFactoryRef} from './linker/view_ref';\nexport {ViewContainerRef} from './linker/view_container_ref';\nexport {ComponentRef} from './linker/dynamic_component_loader';\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker.ts\n **/","import {Type} from 'angular2/src/facade/lang';\nimport {LifecycleHooks} from './interfaces';\n\nexport function hasLifecycleHook(lcInterface: LifecycleHooks, token): boolean {\n  if (!(token instanceof Type)) return false;\n\n  var proto = (<any>token).prototype;\n\n  switch (lcInterface) {\n    case LifecycleHooks.AfterContentInit:\n      return !!proto.ngAfterContentInit;\n    case LifecycleHooks.AfterContentChecked:\n      return !!proto.ngAfterContentChecked;\n    case LifecycleHooks.AfterViewInit:\n      return !!proto.ngAfterViewInit;\n    case LifecycleHooks.AfterViewChecked:\n      return !!proto.ngAfterViewChecked;\n    case LifecycleHooks.OnChanges:\n      return !!proto.ngOnChanges;\n    case LifecycleHooks.DoCheck:\n      return !!proto.ngDoCheck;\n    case LifecycleHooks.OnDestroy:\n      return !!proto.ngOnDestroy;\n    case LifecycleHooks.OnInit:\n      return !!proto.ngOnInit;\n    default:\n      return false;\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/linker/directive_lifecycle_reflector.ts\n **/","import {Type, isBlank, isPresent, assertionsEnabled, CONST_EXPR} from 'angular2/src/facade/lang';\nimport {provide, Provider, Injector, OpaqueToken} from 'angular2/src/core/di';\nimport {Console} from 'angular2/src/core/console';\nimport {Reflector, reflector} from './reflection/reflection';\nimport {TestabilityRegistry} from 'angular2/src/core/testability/testability';\n\nfunction _reflector(): Reflector {\n  return reflector;\n}\n\n/**\n * A default set of providers which should be included in any Angular platform.\n */\nexport const PLATFORM_COMMON_PROVIDERS: Array<Type | Provider | any[]> = CONST_EXPR(\n    [new Provider(Reflector, {useFactory: _reflector, deps: []}), TestabilityRegistry, Console]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/platform_common_providers.ts\n **/","export {enableProdMode} from 'angular2/src/facade/lang';\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/prod_mode.ts\n **/","import {global} from 'angular2/src/facade/lang';\n\n/**\n * A scope function for the Web Tracing Framework (WTF).\n */\nexport interface WtfScopeFn { (arg0?: any, arg1?: any): any; }\n\ninterface WTF {\n  trace: Trace;\n}\n\ninterface Trace {\n  events: Events;\n  leaveScope(scope: Scope, returnValue: any);\n  beginTimeRange(rangeType: string, action: string): Range;\n  endTimeRange(range: Range);\n}\n\nexport interface Range {}\n\ninterface Events {\n  createScope(signature: string, flags: any): Scope;\n}\n\nexport interface Scope { (...args): any; }\n\nvar trace: Trace;\nvar events: Events;\n\nexport function detectWTF(): boolean {\n  var wtf: WTF = global['wtf'];\n  if (wtf) {\n    trace = wtf['trace'];\n    if (trace) {\n      events = trace['events'];\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function createScope(signature: string, flags: any = null): any {\n  return events.createScope(signature, flags);\n}\n\nexport function leave<T>(scope: Scope, returnValue?: T): T {\n  trace.leaveScope(scope, returnValue);\n  return returnValue;\n}\n\nexport function startTimeRange(rangeType: string, action: string): Range {\n  return trace.beginTimeRange(rangeType, action);\n}\n\nexport function endTimeRange(range: Range): void {\n  trace.endTimeRange(range);\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/profile/wtf_impl.ts\n **/","/**\n * This is here because DART requires it. It is noop in JS.\n */\nexport function wtfInit() {}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/profile/wtf_init.ts\n **/","// Public API for render\nexport {RootRenderer, Renderer, RenderComponentType} from './render/api';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/render.ts\n **/","// Public API for util\nexport {Class, ClassDefinition, TypeDecorator} from './util/decorators';\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/util.ts\n **/","// Public API for Zone\nexport {NgZone, NgZoneError} from './zone/ng_zone';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/core/zone.ts\n **/","/**\n * JS version of browser APIs. This library can only run in the browser.\n */\nvar win = window;\n\nexport {win as window};\nexport var document = window.document;\nexport var location = window.location;\nexport var gc = window['gc'] ? () => window['gc']() : () => null;\nexport var performance = window['performance'] ? window['performance'] : null;\nexport const Event = window['Event'];\nexport const MouseEvent = window['MouseEvent'];\nexport const KeyboardEvent = window['KeyboardEvent'];\nexport const EventTarget = window['EventTarget'];\nexport const History = window['History'];\nexport const Location = window['Location'];\nexport const EventListener = window['EventListener'];\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/browser.ts\n **/","// Public API for Facade\nexport {ConcreteType, Type} from './lang';\nexport {EventEmitter} from './async';\nexport {WrappedException} from './exceptions';\nexport {ExceptionHandler} from './exception_handler';\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/facade/facade.ts\n **/","import {ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {isPresent, isFunction, Type} from 'angular2/src/facade/lang';\nimport {DomAdapter} from 'angular2/src/platform/dom/dom_adapter';\nimport {XHRImpl} from 'angular2/src/platform/browser/xhr_impl';\n\n\n/**\n * Provides DOM operations in any browser environment.\n */\nexport abstract class GenericBrowserDomAdapter extends DomAdapter {\n  private _animationPrefix: string = null;\n  private _transitionEnd: string = null;\n  constructor() {\n    super();\n    try {\n      var element = this.createElement('div', this.defaultDoc());\n      if (isPresent(this.getStyle(element, 'animationName'))) {\n        this._animationPrefix = '';\n      } else {\n        var domPrefixes = ['Webkit', 'Moz', 'O', 'ms'];\n        for (var i = 0; i < domPrefixes.length; i++) {\n          if (isPresent(this.getStyle(element, domPrefixes[i] + 'AnimationName'))) {\n            this._animationPrefix = '-' + domPrefixes[i].toLowerCase() + '-';\n            break;\n          }\n        }\n      }\n      var transEndEventNames: {[key: string]: string} = {\n        WebkitTransition: 'webkitTransitionEnd',\n        MozTransition: 'transitionend',\n        OTransition: 'oTransitionEnd otransitionend',\n        transition: 'transitionend'\n      };\n      StringMapWrapper.forEach(transEndEventNames, (value: string, key: string) => {\n        if (isPresent(this.getStyle(element, key))) {\n          this._transitionEnd = value;\n        }\n      });\n    } catch (e) {\n      this._animationPrefix = null;\n      this._transitionEnd = null;\n    }\n  }\n\n  getXHR(): Type { return XHRImpl; }\n  getDistributedNodes(el: HTMLElement): Node[] { return (<any>el).getDistributedNodes(); }\n  resolveAndSetHref(el: HTMLAnchorElement, baseUrl: string, href: string) {\n    el.href = href == null ? baseUrl : baseUrl + '/../' + href;\n  }\n  supportsDOMEvents(): boolean { return true; }\n  supportsNativeShadowDOM(): boolean {\n    return isFunction((<any>this.defaultDoc().body).createShadowRoot);\n  }\n  getAnimationPrefix(): string {\n    return isPresent(this._animationPrefix) ? this._animationPrefix : \"\";\n  }\n  getTransitionEnd(): string { return isPresent(this._transitionEnd) ? this._transitionEnd : \"\"; }\n  supportsAnimation(): boolean {\n    return isPresent(this._animationPrefix) && isPresent(this._transitionEnd);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/generic_browser_adapter.ts\n **/","import {Map, MapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {CONST, CONST_EXPR, global, isPresent} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {PromiseWrapper, ObservableWrapper} from 'angular2/src/facade/async';\n\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\n\nimport {\n  Injectable,\n  TestabilityRegistry,\n  Testability,\n  GetTestability,\n  setTestabilityGetter\n} from 'angular2/core';\n\nclass PublicTestability {\n  /** @internal */\n  _testability: Testability;\n\n  constructor(testability: Testability) { this._testability = testability; }\n\n  isStable(): boolean { return this._testability.isStable(); }\n\n  whenStable(callback: Function) { this._testability.whenStable(callback); }\n\n  findBindings(using: any, provider: string, exactMatch: boolean): any[] {\n    return this.findProviders(using, provider, exactMatch);\n  }\n\n  findProviders(using: any, provider: string, exactMatch: boolean): any[] {\n    return this._testability.findBindings(using, provider, exactMatch);\n  }\n}\n\nexport class BrowserGetTestability implements GetTestability {\n  static init() { setTestabilityGetter(new BrowserGetTestability()); }\n\n  addToWindow(registry: TestabilityRegistry): void {\n    global.getAngularTestability = (elem: any, findInAncestors: boolean = true) => {\n      var testability = registry.findTestabilityInTree(elem, findInAncestors);\n      if (testability == null) {\n        throw new Error('Could not find testability for element.');\n      }\n      return new PublicTestability(testability);\n    };\n\n    global.getAllAngularTestabilities = () => {\n      var testabilities = registry.getAllTestabilities();\n      return testabilities.map((testability) => { return new PublicTestability(testability); });\n    };\n\n    global.getAllAngularRootElements = () => registry.getAllRootElements();\n\n    var whenAllStable = (callback) => {\n      var testabilities = global.getAllAngularTestabilities();\n      var count = testabilities.length;\n      var didWork = false;\n      var decrement = function(didWork_) {\n        didWork = didWork || didWork_;\n        count--;\n        if (count == 0) {\n          callback(didWork);\n        }\n      };\n      testabilities.forEach(function(testability) { testability.whenStable(decrement); });\n    };\n\n    if (!global.frameworkStabilizers) {\n      global.frameworkStabilizers = ListWrapper.createGrowableSize(0);\n    }\n    global.frameworkStabilizers.push(whenAllStable);\n  }\n\n  findTestabilityInTree(registry: TestabilityRegistry, elem: any,\n                        findInAncestors: boolean): Testability {\n    if (elem == null) {\n      return null;\n    }\n    var t = registry.getTestability(elem);\n    if (isPresent(t)) {\n      return t;\n    } else if (!findInAncestors) {\n      return null;\n    }\n    if (DOM.isShadowRoot(elem)) {\n      return this.findTestabilityInTree(registry, DOM.getHost(elem), true);\n    }\n    return this.findTestabilityInTree(registry, DOM.parentElement(elem), true);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/testability.ts\n **/","import {DOM} from 'angular2/src/platform/dom/dom_adapter';\n\n/**\n * A service that can be used to get and set the title of a current HTML document.\n *\n * Since an Angular 2 application can't be bootstrapped on the entire HTML document (`<html>` tag)\n * it is not possible to bind to the `text` property of the `HTMLTitleElement` elements\n * (representing the `<title>` tag). Instead, this service can be used to set and get the current\n * title value.\n */\nexport class Title {\n  /**\n   * Get the title of the current HTML document.\n   * @returns {string}\n   */\n  getTitle(): string { return DOM.getTitle(); }\n\n  /**\n   * Set the title of the current HTML document.\n   * @param newTitle\n   */\n  setTitle(newTitle: string) { DOM.setTitle(newTitle); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/title.ts\n **/","import {ApplicationRef} from 'angular2/src/core/application_ref';\nimport {ComponentRef, ComponentRef_} from 'angular2/src/core/linker/dynamic_component_loader';\nimport {isPresent, NumberWrapper} from 'angular2/src/facade/lang';\nimport {window} from 'angular2/src/facade/browser';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\n\n/**\n * Entry point for all Angular debug tools. This object corresponds to the `ng`\n * global variable accessible in the dev console.\n */\nexport class AngularTools {\n  profiler: AngularProfiler;\n\n  constructor(ref: ComponentRef) { this.profiler = new AngularProfiler(ref); }\n}\n\n/**\n * Entry point for all Angular profiling-related debug tools. This object\n * corresponds to the `ng.profiler` in the dev console.\n */\nexport class AngularProfiler {\n  appRef: ApplicationRef;\n\n  constructor(ref: ComponentRef) {\n    this.appRef = (<ComponentRef_>ref).injector.get(ApplicationRef);\n  }\n\n  /**\n   * Exercises change detection in a loop and then prints the average amount of\n   * time in milliseconds how long a single round of change detection takes for\n   * the current state of the UI. It runs a minimum of 5 rounds for a minimum\n   * of 500 milliseconds.\n   *\n   * Optionally, a user may pass a `config` parameter containing a map of\n   * options. Supported options are:\n   *\n   * `record` (boolean) - causes the profiler to record a CPU profile while\n   * it exercises the change detector. Example:\n   *\n   * ```\n   * ng.profiler.timeChangeDetection({record: true})\n   * ```\n   */\n  timeChangeDetection(config: any) {\n    var record = isPresent(config) && config['record'];\n    var profileName = 'Change Detection';\n    // Profiler is not available in Android browsers, nor in IE 9 without dev tools opened\n    var isProfilerAvailable = isPresent(window.console.profile);\n    if (record && isProfilerAvailable) {\n      window.console.profile(profileName);\n    }\n    var start = DOM.performanceNow();\n    var numTicks = 0;\n    while (numTicks < 5 || (DOM.performanceNow() - start) < 500) {\n      this.appRef.tick();\n      numTicks++;\n    }\n    var end = DOM.performanceNow();\n    if (record && isProfilerAvailable) {\n      // need to cast to <any> because type checker thinks there's no argument\n      // while in fact there is:\n      //\n      // https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd\n      (<any>window.console.profileEnd)(profileName);\n    }\n    var msPerTick = (end - start) / numTicks;\n    window.console.log(`ran ${numTicks} change detection cycles`);\n    window.console.log(`${NumberWrapper.toFixed(msPerTick, 2)} ms per check`);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/tools/common_tools.ts\n **/","import {global} from 'angular2/src/facade/lang';\nimport {ComponentRef} from 'angular2/src/core/linker/dynamic_component_loader';\nimport {AngularTools} from './common_tools';\n\nvar context = <any>global;\n\n/**\n * Enabled Angular 2 debug tools that are accessible via your browser's\n * developer console.\n *\n * Usage:\n *\n * 1. Open developer console (e.g. in Chrome Ctrl + Shift + j)\n * 1. Type `ng.` (usually the console will show auto-complete suggestion)\n * 1. Try the change detection profiler `ng.profiler.timeChangeDetection()`\n *    then hit Enter.\n */\nexport function enableDebugTools(ref: ComponentRef): void {\n  context.ng = new AngularTools(ref);\n}\n\n/**\n * Disables Angular 2 tools.\n */\nexport function disableDebugTools(): void {\n  delete context.ng;\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/browser/tools/tools.ts\n **/","import {Type, isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {Predicate} from 'angular2/src/facade/collection';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {DebugElement} from 'angular2/core';\n\n/**\n * Predicates for use with {@link DebugElement}'s query functions.\n */\nexport class By {\n  /**\n   * Match all elements.\n   *\n   * ## Example\n   *\n   * {@example platform/dom/debug/ts/by/by.ts region='by_all'}\n   */\n  static all(): Predicate<DebugElement> { return (debugElement) => true; }\n\n  /**\n   * Match elements by the given CSS selector.\n   *\n   * ## Example\n   *\n   * {@example platform/dom/debug/ts/by/by.ts region='by_css'}\n   */\n  static css(selector: string): Predicate<DebugElement> {\n    return (debugElement) => {\n      return isPresent(debugElement.nativeElement) ?\n                 DOM.elementMatches(debugElement.nativeElement, selector) :\n                 false;\n    };\n  }\n\n  /**\n   * Match elements that have the given directive present.\n   *\n   * ## Example\n   *\n   * {@example platform/dom/debug/ts/by/by.ts region='by_directive'}\n   */\n  static directive(type: Type): Predicate<DebugElement> {\n    return (debugElement) => { return debugElement.providerTokens.indexOf(type) !== -1; };\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/debug/by.ts\n **/","import {CONST_EXPR, assertionsEnabled, isPresent} from 'angular2/src/facade/lang';\nimport {Injectable, provide, Provider} from 'angular2/src/core/di';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {DebugNode, getDebugNode} from 'angular2/src/core/debug/debug_node';\nimport {DomRootRenderer} from 'angular2/src/platform/dom/dom_renderer';\nimport {RootRenderer, NgZone, ApplicationRef} from 'angular2/core';\nimport {DebugDomRootRenderer} from 'angular2/src/core/debug/debug_renderer';\n\nconst CORE_TOKENS = CONST_EXPR({'ApplicationRef': ApplicationRef, 'NgZone': NgZone});\n\nconst INSPECT_GLOBAL_NAME = 'ng.probe';\nconst CORE_TOKENS_GLOBAL_NAME = 'ng.coreTokens';\n\n/**\n * Returns a {@link DebugElement} for the given native DOM element, or\n * null if the given native element does not have an Angular view associated\n * with it.\n */\nexport function inspectNativeElement(element): DebugNode {\n  return getDebugNode(element);\n}\n\nfunction _createConditionalRootRenderer(rootRenderer) {\n  if (assertionsEnabled()) {\n    return _createRootRenderer(rootRenderer);\n  }\n  return rootRenderer;\n}\n\nfunction _createRootRenderer(rootRenderer) {\n  DOM.setGlobalVar(INSPECT_GLOBAL_NAME, inspectNativeElement);\n  DOM.setGlobalVar(CORE_TOKENS_GLOBAL_NAME, CORE_TOKENS);\n  return new DebugDomRootRenderer(rootRenderer);\n}\n\n/**\n * Providers which support debugging Angular applications (e.g. via `ng.probe`).\n */\nexport const ELEMENT_PROBE_PROVIDERS: any[] = CONST_EXPR([\n  new Provider(RootRenderer,\n               {useFactory: _createConditionalRootRenderer, deps: [DomRootRenderer]})\n]);\n\nexport const ELEMENT_PROBE_PROVIDERS_PROD_MODE: any[] = CONST_EXPR(\n    [new Provider(RootRenderer, {useFactory: _createRootRenderer, deps: [DomRootRenderer]})]);\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/debug/ng_probe.ts\n **/","import {EventManagerPlugin} from './event_manager';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\n\nvar _eventNames = {\n  // pan\n  'pan': true,\n  'panstart': true,\n  'panmove': true,\n  'panend': true,\n  'pancancel': true,\n  'panleft': true,\n  'panright': true,\n  'panup': true,\n  'pandown': true,\n  // pinch\n  'pinch': true,\n  'pinchstart': true,\n  'pinchmove': true,\n  'pinchend': true,\n  'pinchcancel': true,\n  'pinchin': true,\n  'pinchout': true,\n  // press\n  'press': true,\n  'pressup': true,\n  // rotate\n  'rotate': true,\n  'rotatestart': true,\n  'rotatemove': true,\n  'rotateend': true,\n  'rotatecancel': true,\n  // swipe\n  'swipe': true,\n  'swipeleft': true,\n  'swiperight': true,\n  'swipeup': true,\n  'swipedown': true,\n  // tap\n  'tap': true,\n};\n\n\nexport class HammerGesturesPluginCommon extends EventManagerPlugin {\n  constructor() { super(); }\n\n  supports(eventName: string): boolean {\n    eventName = eventName.toLowerCase();\n    return StringMapWrapper.contains(_eventNames, eventName);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/events/hammer_common.ts\n **/","import {HammerGesturesPluginCommon} from './hammer_common';\nimport {isPresent} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {Injectable} from 'angular2/src/core/di';\n\n@Injectable()\nexport class HammerGesturesPlugin extends HammerGesturesPluginCommon {\n  supports(eventName: string): boolean {\n    if (!super.supports(eventName)) return false;\n\n    if (!isPresent(window['Hammer'])) {\n      throw new BaseException(`Hammer.js is not loaded, can not bind ${eventName} event`);\n    }\n\n    return true;\n  }\n\n  addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n    var zone = this.manager.getZone();\n    eventName = eventName.toLowerCase();\n\n    return zone.runOutsideAngular(function() {\n      // Creating the manager bind events, must be done outside of angular\n      var mc = new Hammer(element);\n      mc.get('pinch').set({enable: true});\n      mc.get('rotate').set({enable: true});\n      var callback = function(eventObj) { zone.run(function() { handler(eventObj); }); };\n      mc.on(eventName, callback);\n      return () => { mc.off(eventName, callback); };\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/events/hammer_gestures.ts\n **/","import {DOM} from 'angular2/src/platform/dom/dom_adapter';\nimport {\n  isPresent,\n  isBlank,\n  StringWrapper,\n  RegExpWrapper,\n  NumberWrapper\n} from 'angular2/src/facade/lang';\nimport {StringMapWrapper, ListWrapper} from 'angular2/src/facade/collection';\nimport {EventManagerPlugin} from './event_manager';\nimport {NgZone} from 'angular2/src/core/zone/ng_zone';\nimport {Injectable} from 'angular2/src/core/di';\n\nvar modifierKeys = ['alt', 'control', 'meta', 'shift'];\nvar modifierKeyGetters: {[key: string]: (event: KeyboardEvent) => boolean} = {\n  'alt': (event: KeyboardEvent) => event.altKey,\n  'control': (event: KeyboardEvent) => event.ctrlKey,\n  'meta': (event: KeyboardEvent) => event.metaKey,\n  'shift': (event: KeyboardEvent) => event.shiftKey\n};\n\n@Injectable()\nexport class KeyEventsPlugin extends EventManagerPlugin {\n  constructor() { super(); }\n\n  supports(eventName: string): boolean {\n    return isPresent(KeyEventsPlugin.parseEventName(eventName));\n  }\n\n  addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\n    var parsedEvent = KeyEventsPlugin.parseEventName(eventName);\n\n    var outsideHandler = KeyEventsPlugin.eventCallback(\n        element, StringMapWrapper.get(parsedEvent, 'fullKey'), handler, this.manager.getZone());\n\n    return this.manager.getZone().runOutsideAngular(() => {\n      return DOM.onAndCancel(element, StringMapWrapper.get(parsedEvent, 'domEventName'),\n                             outsideHandler);\n    });\n  }\n\n  static parseEventName(eventName: string): {[key: string]: string} {\n    var parts: string[] = eventName.toLowerCase().split('.');\n\n    var domEventName = parts.shift();\n    if ((parts.length === 0) ||\n        !(StringWrapper.equals(domEventName, 'keydown') ||\n          StringWrapper.equals(domEventName, 'keyup'))) {\n      return null;\n    }\n\n    var key = KeyEventsPlugin._normalizeKey(parts.pop());\n\n    var fullKey = '';\n    modifierKeys.forEach(modifierName => {\n      if (ListWrapper.contains(parts, modifierName)) {\n        ListWrapper.remove(parts, modifierName);\n        fullKey += modifierName + '.';\n      }\n    });\n    fullKey += key;\n\n    if (parts.length != 0 || key.length === 0) {\n      // returning null instead of throwing to let another plugin process the event\n      return null;\n    }\n    var result = StringMapWrapper.create();\n    StringMapWrapper.set(result, 'domEventName', domEventName);\n    StringMapWrapper.set(result, 'fullKey', fullKey);\n    return result;\n  }\n\n  static getEventFullKey(event: KeyboardEvent): string {\n    var fullKey = '';\n    var key = DOM.getEventKey(event);\n    key = key.toLowerCase();\n    if (StringWrapper.equals(key, ' ')) {\n      key = 'space';  // for readability\n    } else if (StringWrapper.equals(key, '.')) {\n      key = 'dot';  // because '.' is used as a separator in event names\n    }\n    modifierKeys.forEach(modifierName => {\n      if (modifierName != key) {\n        var modifierGetter = StringMapWrapper.get(modifierKeyGetters, modifierName);\n        if (modifierGetter(event)) {\n          fullKey += modifierName + '.';\n        }\n      }\n    });\n    fullKey += key;\n    return fullKey;\n  }\n\n  static eventCallback(element: HTMLElement, fullKey: any, handler: Function,\n                       zone: NgZone): Function {\n    return (event) => {\n      if (StringWrapper.equals(KeyEventsPlugin.getEventFullKey(event), fullKey)) {\n        zone.run(() => handler(event));\n      }\n    };\n  }\n\n  /** @internal */\n  static _normalizeKey(keyName: string): string {\n    // TODO: switch to a StringMap if the mapping grows too much\n    switch (keyName) {\n      case 'esc':\n        return 'escape';\n      default:\n        return keyName;\n    }\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/platform/dom/events/key_events.ts\n **/","import {Injectable} from 'angular2/core';\nimport {History, Location} from 'angular2/src/facade/browser';\nimport {UrlChangeListener} from './platform_location';\nimport {PlatformLocation} from './platform_location';\nimport {DOM} from 'angular2/src/platform/dom/dom_adapter';\n\n/**\n * `PlatformLocation` encapsulates all of the direct calls to platform APIs.\n * This class should not be used directly by an application developer. Instead, use\n * {@link Location}.\n */\n@Injectable()\nexport class BrowserPlatformLocation extends PlatformLocation {\n  private _location: Location;\n  private _history: History;\n\n  constructor() {\n    super();\n    this._init();\n  }\n\n  // This is moved to its own method so that `MockPlatformLocationStrategy` can overwrite it\n  /** @internal */\n  _init() {\n    this._location = DOM.getLocation();\n    this._history = DOM.getHistory();\n  }\n\n  /** @internal */\n  get location(): Location { return this._location; }\n\n  getBaseHrefFromDOM(): string { return DOM.getBaseHref(); }\n\n  onPopState(fn: UrlChangeListener): void {\n    DOM.getGlobalEventTarget('window').addEventListener('popstate', fn, false);\n  }\n\n  onHashChange(fn: UrlChangeListener): void {\n    DOM.getGlobalEventTarget('window').addEventListener('hashchange', fn, false);\n  }\n\n  get pathname(): string { return this._location.pathname; }\n  get search(): string { return this._location.search; }\n  get hash(): string { return this._location.hash; }\n  set pathname(newPath: string) { this._location.pathname = newPath; }\n\n  pushState(state: any, title: string, url: string): void {\n    this._history.pushState(state, title, url);\n  }\n\n  replaceState(state: any, title: string, url: string): void {\n    this._history.replaceState(state, title, url);\n  }\n\n  forward(): void { this._history.forward(); }\n\n  back(): void { this._history.back(); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/location/browser_platform_location.ts\n **/","import {Injectable, Inject, Optional} from 'angular2/core';\nimport {\n  LocationStrategy,\n  joinWithSlash,\n  APP_BASE_HREF,\n  normalizeQueryParams\n} from './location_strategy';\nimport {UrlChangeListener} from './platform_location';\nimport {isPresent} from 'angular2/src/facade/lang';\nimport {PlatformLocation} from './platform_location';\n\n/**\n * `HashLocationStrategy` is a {@link LocationStrategy} used to configure the\n * {@link Location} service to represent its state in the\n * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\n * of the browser's URL.\n *\n * For instance, if you call `location.go('/foo')`, the browser's URL will become\n * `example.com#/foo`.\n *\n * ### Example\n *\n * ```\n * import {Component, provide} from 'angular2/core';\n * import {\n *   ROUTER_DIRECTIVES,\n *   ROUTER_PROVIDERS,\n *   RouteConfig,\n *   Location,\n *   LocationStrategy,\n *   HashLocationStrategy\n * } from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   constructor(location: Location) {\n *     location.go('/foo');\n *   }\n * }\n *\n * bootstrap(AppCmp, [\n *   ROUTER_PROVIDERS,\n *   provide(LocationStrategy, {useClass: HashLocationStrategy})\n * ]);\n * ```\n */\n@Injectable()\nexport class HashLocationStrategy extends LocationStrategy {\n  private _baseHref: string = '';\n  constructor(private _platformLocation: PlatformLocation,\n              @Optional() @Inject(APP_BASE_HREF) _baseHref?: string) {\n    super();\n    if (isPresent(_baseHref)) {\n      this._baseHref = _baseHref;\n    }\n  }\n\n  onPopState(fn: UrlChangeListener): void {\n    this._platformLocation.onPopState(fn);\n    this._platformLocation.onHashChange(fn);\n  }\n\n  getBaseHref(): string { return this._baseHref; }\n\n  path(): string {\n    // the hash value is always prefixed with a `#`\n    // and if it is empty then it will stay empty\n    var path = this._platformLocation.hash;\n    if (!isPresent(path)) path = '#';\n\n    // Dart will complain if a call to substring is\n    // executed with a position value that extends the\n    // length of string.\n    return (path.length > 0 ? path.substring(1) : path);\n  }\n\n  prepareExternalUrl(internal: string): string {\n    var url = joinWithSlash(this._baseHref, internal);\n    return url.length > 0 ? ('#' + url) : url;\n  }\n\n  pushState(state: any, title: string, path: string, queryParams: string) {\n    var url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.pushState(state, title, url);\n  }\n\n  replaceState(state: any, title: string, path: string, queryParams: string) {\n    var url = this.prepareExternalUrl(path + normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.replaceState(state, title, url);\n  }\n\n  forward(): void { this._platformLocation.forward(); }\n\n  back(): void { this._platformLocation.back(); }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/location/hash_location_strategy.ts\n **/","import {AsyncRoute, AuxRoute, Route, Redirect, RouteDefinition} from './route_config_decorator';\nimport {ComponentDefinition} from '../route_definition';\nimport {isType, Type} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {RouteRegistry} from '../route_registry';\n\n\n/**\n * Given a JS Object that represents a route config, returns a corresponding Route, AsyncRoute,\n * AuxRoute or Redirect object.\n *\n * Also wraps an AsyncRoute's loader function to add the loaded component's route config to the\n * `RouteRegistry`.\n */\nexport function normalizeRouteConfig(config: RouteDefinition,\n                                     registry: RouteRegistry): RouteDefinition {\n  if (config instanceof AsyncRoute) {\n    var wrappedLoader = wrapLoaderToReconfigureRegistry(config.loader, registry);\n    return new AsyncRoute({\n      path: config.path,\n      loader: wrappedLoader,\n      name: config.name,\n      data: config.data,\n      useAsDefault: config.useAsDefault\n    });\n  }\n  if (config instanceof Route || config instanceof Redirect || config instanceof AuxRoute) {\n    return <RouteDefinition>config;\n  }\n\n  if ((+!!config.component) + (+!!config.redirectTo) + (+!!config.loader) != 1) {\n    throw new BaseException(\n        `Route config should contain exactly one \"component\", \"loader\", or \"redirectTo\" property.`);\n  }\n  if (config.as && config.name) {\n    throw new BaseException(`Route config should contain exactly one \"as\" or \"name\" property.`);\n  }\n  if (config.as) {\n    config.name = config.as;\n  }\n  if (config.loader) {\n    var wrappedLoader = wrapLoaderToReconfigureRegistry(config.loader, registry);\n    return new AsyncRoute({\n      path: config.path,\n      loader: wrappedLoader,\n      name: config.name,\n      data: config.data,\n      useAsDefault: config.useAsDefault\n    });\n  }\n  if (config.aux) {\n    return new AuxRoute({path: config.aux, component:<Type>config.component, name: config.name});\n  }\n  if (config.component) {\n    if (typeof config.component == 'object') {\n      let componentDefinitionObject = <ComponentDefinition>config.component;\n      if (componentDefinitionObject.type == 'constructor') {\n        return new Route({\n          path: config.path,\n          component:<Type>componentDefinitionObject.constructor,\n          name: config.name,\n          data: config.data,\n          useAsDefault: config.useAsDefault\n        });\n      } else if (componentDefinitionObject.type == 'loader') {\n        return new AsyncRoute({\n          path: config.path,\n          loader: componentDefinitionObject.loader,\n          name: config.name,\n          data: config.data,\n          useAsDefault: config.useAsDefault\n        });\n      } else {\n        throw new BaseException(\n            `Invalid component type \"${componentDefinitionObject.type}\". Valid types are \"constructor\" and \"loader\".`);\n      }\n    }\n    return new Route(<{\n      path: string;\n      component: Type;\n      name?: string;\n      data?: {[key: string]: any};\n      useAsDefault?: boolean;\n    }>config);\n  }\n\n  if (config.redirectTo) {\n    return new Redirect({path: config.path, redirectTo: config.redirectTo});\n  }\n\n  return config;\n}\n\n\nfunction wrapLoaderToReconfigureRegistry(loader: Function, registry: RouteRegistry): () =>\n    Promise<Type> {\n  return () => {\n    return loader().then((componentType) => {\n      registry.configFromComponent(componentType);\n      return componentType;\n    });\n  };\n}\n\nexport function assertComponentExists(component: Type, path: string): void {\n  if (!isType(component)) {\n    throw new BaseException(`Component for route \"${path}\" is not defined, or is not a class.`);\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/route_config/route_config_normalizer.ts\n **/","import {ROUTER_PROVIDERS_COMMON} from './router_providers_common';\nimport {Provider} from 'angular2/core';\nimport {CONST_EXPR} from 'angular2/src/facade/lang';\nimport {BrowserPlatformLocation} from './location/browser_platform_location';\nimport {PlatformLocation} from './location/platform_location';\n\n/**\n * A list of {@link Provider}s. To use the router, you must add this to your application.\n *\n * ### Example ([live demo](http://plnkr.co/edit/iRUP8B5OUbxCWQ3AcIDm))\n *\n * ```\n * import {Component} from 'angular2/core';\n * import {\n *   ROUTER_DIRECTIVES,\n *   ROUTER_PROVIDERS,\n *   RouteConfig\n * } from 'angular2/router';\n *\n * @Component({directives: [ROUTER_DIRECTIVES]})\n * @RouteConfig([\n *  {...},\n * ])\n * class AppCmp {\n *   // ...\n * }\n *\n * bootstrap(AppCmp, [ROUTER_PROVIDERS]);\n * ```\n */\nexport const ROUTER_PROVIDERS: any[] = CONST_EXPR([\n  ROUTER_PROVIDERS_COMMON,\n  CONST_EXPR(new Provider(PlatformLocation, {useClass: BrowserPlatformLocation})),\n]);\n\n/**\n * Use {@link ROUTER_PROVIDERS} instead.\n *\n * @deprecated\n */\nexport const ROUTER_BINDINGS = ROUTER_PROVIDERS;\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/router_providers.ts\n **/","import {isPresent, Type} from 'angular2/src/facade/lang';\n\nimport {RouteHandler} from './route_handler';\nimport {RouteData, BLANK_ROUTE_DATA} from '../../instruction';\n\n\nexport class AsyncRouteHandler implements RouteHandler {\n  /** @internal */\n  _resolvedComponent: Promise<Type> = null;\n  componentType: Type;\n  public data: RouteData;\n\n  constructor(private _loader: () => Promise<Type>, data: {[key: string]: any} = null) {\n    this.data = isPresent(data) ? new RouteData(data) : BLANK_ROUTE_DATA;\n  }\n\n  resolveComponentType(): Promise<Type> {\n    if (isPresent(this._resolvedComponent)) {\n      return this._resolvedComponent;\n    }\n\n    return this._resolvedComponent = this._loader().then((componentType) => {\n      this.componentType = componentType;\n      return componentType;\n    });\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/route_handlers/async_route_handler.ts\n **/","import {PromiseWrapper} from 'angular2/src/facade/async';\nimport {isPresent, Type} from 'angular2/src/facade/lang';\n\nimport {RouteHandler} from './route_handler';\nimport {RouteData, BLANK_ROUTE_DATA} from '../../instruction';\n\n\nexport class SyncRouteHandler implements RouteHandler {\n  public data: RouteData;\n\n  /** @internal */\n  _resolvedComponent: Promise<any> = null;\n\n  constructor(public componentType: Type, data?: {[key: string]: any}) {\n    this._resolvedComponent = PromiseWrapper.resolve(componentType);\n    this.data = isPresent(data) ? new RouteData(data) : BLANK_ROUTE_DATA;\n  }\n\n  resolveComponentType(): Promise<any> { return this._resolvedComponent; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/route_handlers/sync_route_handler.ts\n **/","import {RegExpWrapper, StringWrapper, isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {BaseException} from 'angular2/src/facade/exceptions';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\n\nimport {TouchMap, normalizeString} from '../../utils';\nimport {Url, RootUrl, convertUrlParamsToArray} from '../../url_parser';\nimport {RoutePath, GeneratedUrl, MatchedUrl} from './route_path';\n\n\n\n/**\n * `ParamRoutePath`s are made up of `PathSegment`s, each of which can\n * match a segment of a URL. Different kind of `PathSegment`s match\n * URL segments in different ways...\n */\ninterface PathSegment {\n  name: string;\n  generate(params: TouchMap): string;\n  match(path: string): boolean;\n  specificity: string;\n  hash: string;\n}\n\n/**\n * Identified by a `...` URL segment. This indicates that the\n * Route will continue to be matched by child `Router`s.\n */\nclass ContinuationPathSegment implements PathSegment {\n  name: string = '';\n  specificity = '';\n  hash = '...';\n  generate(params: TouchMap): string { return ''; }\n  match(path: string): boolean { return true; }\n}\n\n/**\n * Identified by a string not starting with a `:` or `*`.\n * Only matches the URL segments that equal the segment path\n */\nclass StaticPathSegment implements PathSegment {\n  name: string = '';\n  specificity = '2';\n  hash: string;\n  constructor(public path: string) { this.hash = path; }\n  match(path: string): boolean { return path == this.path; }\n  generate(params: TouchMap): string { return this.path; }\n}\n\n/**\n * Identified by a string starting with `:`. Indicates a segment\n * that can contain a value that will be extracted and provided to\n * a matching `Instruction`.\n */\nclass DynamicPathSegment implements PathSegment {\n  static paramMatcher = /^:([^\\/]+)$/g;\n  specificity = '1';\n  hash = ':';\n  constructor(public name: string) {}\n  match(path: string): boolean { return path.length > 0; }\n  generate(params: TouchMap): string {\n    if (!StringMapWrapper.contains(params.map, this.name)) {\n      throw new BaseException(\n          `Route generator for '${this.name}' was not included in parameters passed.`);\n    }\n    return normalizeString(params.get(this.name));\n  }\n}\n\n/**\n * Identified by a string starting with `*` Indicates that all the following\n * segments match this route and that the value of these segments should\n * be provided to a matching `Instruction`.\n */\nclass StarPathSegment implements PathSegment {\n  static wildcardMatcher = /^\\*([^\\/]+)$/g;\n  specificity = '0';\n  hash = '*';\n  constructor(public name: string) {}\n  match(path: string): boolean { return true; }\n  generate(params: TouchMap): string { return normalizeString(params.get(this.name)); }\n}\n\n/**\n * Parses a URL string using a given matcher DSL, and generates URLs from param maps\n */\nexport class ParamRoutePath implements RoutePath {\n  specificity: string;\n  terminal: boolean = true;\n  hash: string;\n\n  private _segments: PathSegment[];\n\n  /**\n   * Takes a string representing the matcher DSL\n   */\n  constructor(public routePath: string) {\n    this._assertValidPath(routePath);\n\n    this._parsePathString(routePath);\n    this.specificity = this._calculateSpecificity();\n    this.hash = this._calculateHash();\n\n    var lastSegment = this._segments[this._segments.length - 1];\n    this.terminal = !(lastSegment instanceof ContinuationPathSegment);\n  }\n\n  matchUrl(url: Url): MatchedUrl {\n    var nextUrlSegment = url;\n    var currentUrlSegment: Url;\n    var positionalParams = {};\n    var captured: string[] = [];\n\n    for (var i = 0; i < this._segments.length; i += 1) {\n      var pathSegment = this._segments[i];\n\n      currentUrlSegment = nextUrlSegment;\n      if (pathSegment instanceof ContinuationPathSegment) {\n        break;\n      }\n\n      if (isPresent(currentUrlSegment)) {\n        // the star segment consumes all of the remaining URL, including matrix params\n        if (pathSegment instanceof StarPathSegment) {\n          positionalParams[pathSegment.name] = currentUrlSegment.toString();\n          captured.push(currentUrlSegment.toString());\n          nextUrlSegment = null;\n          break;\n        }\n\n        captured.push(currentUrlSegment.path);\n\n        if (pathSegment instanceof DynamicPathSegment) {\n          positionalParams[pathSegment.name] = currentUrlSegment.path;\n        } else if (!pathSegment.match(currentUrlSegment.path)) {\n          return null;\n        }\n\n        nextUrlSegment = currentUrlSegment.child;\n      } else if (!pathSegment.match('')) {\n        return null;\n      }\n    }\n\n    if (this.terminal && isPresent(nextUrlSegment)) {\n      return null;\n    }\n\n    var urlPath = captured.join('/');\n\n    var auxiliary = [];\n    var urlParams = [];\n    var allParams = positionalParams;\n    if (isPresent(currentUrlSegment)) {\n      // If this is the root component, read query params. Otherwise, read matrix params.\n      var paramsSegment = url instanceof RootUrl ? url : currentUrlSegment;\n\n      if (isPresent(paramsSegment.params)) {\n        allParams = StringMapWrapper.merge(paramsSegment.params, positionalParams);\n        urlParams = convertUrlParamsToArray(paramsSegment.params);\n      } else {\n        allParams = positionalParams;\n      }\n      auxiliary = currentUrlSegment.auxiliary;\n    }\n\n    return new MatchedUrl(urlPath, urlParams, allParams, auxiliary, nextUrlSegment);\n  }\n\n\n  generateUrl(params: {[key: string]: any}): GeneratedUrl {\n    var paramTokens = new TouchMap(params);\n\n    var path = [];\n\n    for (var i = 0; i < this._segments.length; i++) {\n      let segment = this._segments[i];\n      if (!(segment instanceof ContinuationPathSegment)) {\n        path.push(segment.generate(paramTokens));\n      }\n    }\n    var urlPath = path.join('/');\n\n    var nonPositionalParams = paramTokens.getUnused();\n    var urlParams = nonPositionalParams;\n\n    return new GeneratedUrl(urlPath, urlParams);\n  }\n\n\n  toString(): string { return this.routePath; }\n\n  private _parsePathString(routePath: string) {\n    // normalize route as not starting with a \"/\". Recognition will\n    // also normalize.\n    if (routePath.startsWith(\"/\")) {\n      routePath = routePath.substring(1);\n    }\n\n    var segmentStrings = routePath.split('/');\n    this._segments = [];\n\n    var limit = segmentStrings.length - 1;\n    for (var i = 0; i <= limit; i++) {\n      var segment = segmentStrings[i], match;\n\n      if (isPresent(match = RegExpWrapper.firstMatch(DynamicPathSegment.paramMatcher, segment))) {\n        this._segments.push(new DynamicPathSegment(match[1]));\n      } else if (isPresent(\n                     match = RegExpWrapper.firstMatch(StarPathSegment.wildcardMatcher, segment))) {\n        this._segments.push(new StarPathSegment(match[1]));\n      } else if (segment == '...') {\n        if (i < limit) {\n          throw new BaseException(\n              `Unexpected \"...\" before the end of the path for \"${routePath}\".`);\n        }\n        this._segments.push(new ContinuationPathSegment());\n      } else {\n        this._segments.push(new StaticPathSegment(segment));\n      }\n    }\n  }\n\n  private _calculateSpecificity(): string {\n    // The \"specificity\" of a path is used to determine which route is used when multiple routes\n    // match\n    // a URL. Static segments (like \"/foo\") are the most specific, followed by dynamic segments\n    // (like\n    // \"/:id\"). Star segments add no specificity. Segments at the start of the path are more\n    // specific\n    // than proceeding ones.\n    //\n    // The code below uses place values to combine the different types of segments into a single\n    // string that we can sort later. Each static segment is marked as a specificity of \"2,\" each\n    // dynamic segment is worth \"1\" specificity, and stars are worth \"0\" specificity.\n    var i, length = this._segments.length, specificity;\n    if (length == 0) {\n      // a single slash (or \"empty segment\" is as specific as a static segment\n      specificity += '2';\n    } else {\n      specificity = '';\n      for (i = 0; i < length; i++) {\n        specificity += this._segments[i].specificity;\n      }\n    }\n    return specificity;\n  }\n\n  private _calculateHash(): string {\n    // this function is used to determine whether a route config path like `/foo/:id` collides with\n    // `/foo/:name`\n    var i, length = this._segments.length;\n    var hashParts = [];\n    for (i = 0; i < length; i++) {\n      hashParts.push(this._segments[i].hash);\n    }\n    return hashParts.join('/');\n  }\n\n  private _assertValidPath(path: string) {\n    if (StringWrapper.contains(path, '#')) {\n      throw new BaseException(\n          `Path \"${path}\" should not include \"#\". Use \"HashLocationStrategy\" instead.`);\n    }\n    var illegalCharacter = RegExpWrapper.firstMatch(ParamRoutePath.RESERVED_CHARS, path);\n    if (isPresent(illegalCharacter)) {\n      throw new BaseException(\n          `Path \"${path}\" contains \"${illegalCharacter[0]}\" which is not allowed in a route config.`);\n    }\n  }\n  static RESERVED_CHARS = RegExpWrapper.create('//|\\\\(|\\\\)|;|\\\\?|=');\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/route_paths/param_route_path.ts\n **/","import {RegExpWrapper, RegExpMatcherWrapper, isBlank} from 'angular2/src/facade/lang';\nimport {Url, RootUrl} from '../../url_parser';\nimport {RoutePath, GeneratedUrl, MatchedUrl} from './route_path';\n\n\nexport interface RegexSerializer { (params: {[key: string]: any}): GeneratedUrl; }\n\nexport class RegexRoutePath implements RoutePath {\n  public hash: string;\n  public terminal: boolean = true;\n  public specificity: string = '2';\n\n  private _regex: RegExp;\n\n  constructor(private _reString: string, private _serializer: RegexSerializer) {\n    this.hash = this._reString;\n    this._regex = RegExpWrapper.create(this._reString);\n  }\n\n  matchUrl(url: Url): MatchedUrl {\n    var urlPath = url.toString();\n    var params: {[key: string]: string} = {};\n    var matcher = RegExpWrapper.matcher(this._regex, urlPath);\n    var match = RegExpMatcherWrapper.next(matcher);\n\n    if (isBlank(match)) {\n      return null;\n    }\n\n    for (let i = 0; i < match.length; i += 1) {\n      params[i.toString()] = match[i];\n    }\n\n    return new MatchedUrl(urlPath, [], params, [], null);\n  }\n\n  generateUrl(params: {[key: string]: any}): GeneratedUrl { return this._serializer(params); }\n\n  toString() { return this._reString; }\n}\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/route_paths/regex_route_path.ts\n **/","import {isBlank, isPresent, isFunction} from 'angular2/src/facade/lang';\nimport {BaseException, WrappedException} from 'angular2/src/facade/exceptions';\nimport {Map, MapWrapper, ListWrapper, StringMapWrapper} from 'angular2/src/facade/collection';\nimport {PromiseWrapper} from 'angular2/src/facade/async';\n\nimport {AbstractRule, RouteRule, RedirectRule, RouteMatch, PathMatch} from './rules';\nimport {\n  Route,\n  AsyncRoute,\n  AuxRoute,\n  Redirect,\n  RouteDefinition\n} from '../route_config/route_config_impl';\n\nimport {AsyncRouteHandler} from './route_handlers/async_route_handler';\nimport {SyncRouteHandler} from './route_handlers/sync_route_handler';\n\nimport {RoutePath} from './route_paths/route_path';\nimport {ParamRoutePath} from './route_paths/param_route_path';\nimport {RegexRoutePath} from './route_paths/regex_route_path';\n\nimport {Url} from '../url_parser';\nimport {ComponentInstruction} from '../instruction';\n\n\n/**\n * A `RuleSet` is responsible for recognizing routes for a particular component.\n * It is consumed by `RouteRegistry`, which knows how to recognize an entire hierarchy of\n * components.\n */\nexport class RuleSet {\n  rulesByName = new Map<string, RouteRule>();\n\n  // map from name to rule\n  auxRulesByName = new Map<string, RouteRule>();\n\n  // map from starting path to rule\n  auxRulesByPath = new Map<string, RouteRule>();\n\n  // TODO: optimize this into a trie\n  rules: AbstractRule[] = [];\n\n  // the rule to use automatically when recognizing or generating from this rule set\n  defaultRule: RouteRule = null;\n\n  /**\n   * Configure additional rules in this rule set from a route definition\n   * @returns {boolean} true if the config is terminal\n   */\n  config(config: RouteDefinition): boolean {\n    let handler;\n\n    if (isPresent(config.name) && config.name[0].toUpperCase() != config.name[0]) {\n      let suggestedName = config.name[0].toUpperCase() + config.name.substring(1);\n      throw new BaseException(\n          `Route \"${config.path}\" with name \"${config.name}\" does not begin with an uppercase letter. Route names should be CamelCase like \"${suggestedName}\".`);\n    }\n\n    if (config instanceof AuxRoute) {\n      handler = new SyncRouteHandler(config.component, config.data);\n      let routePath = this._getRoutePath(config);\n      let auxRule = new RouteRule(routePath, handler);\n      this.auxRulesByPath.set(routePath.toString(), auxRule);\n      if (isPresent(config.name)) {\n        this.auxRulesByName.set(config.name, auxRule);\n      }\n      return auxRule.terminal;\n    }\n\n    let useAsDefault = false;\n\n    if (config instanceof Redirect) {\n      let routePath = this._getRoutePath(config);\n      let redirector = new RedirectRule(routePath, config.redirectTo);\n      this._assertNoHashCollision(redirector.hash, config.path);\n      this.rules.push(redirector);\n      return true;\n    }\n\n    if (config instanceof Route) {\n      handler = new SyncRouteHandler(config.component, config.data);\n      useAsDefault = isPresent(config.useAsDefault) && config.useAsDefault;\n    } else if (config instanceof AsyncRoute) {\n      handler = new AsyncRouteHandler(config.loader, config.data);\n      useAsDefault = isPresent(config.useAsDefault) && config.useAsDefault;\n    }\n    let routePath = this._getRoutePath(config);\n    let newRule = new RouteRule(routePath, handler);\n\n    this._assertNoHashCollision(newRule.hash, config.path);\n\n    if (useAsDefault) {\n      if (isPresent(this.defaultRule)) {\n        throw new BaseException(`Only one route can be default`);\n      }\n      this.defaultRule = newRule;\n    }\n\n    this.rules.push(newRule);\n    if (isPresent(config.name)) {\n      this.rulesByName.set(config.name, newRule);\n    }\n    return newRule.terminal;\n  }\n\n\n  /**\n   * Given a URL, returns a list of `RouteMatch`es, which are partial recognitions for some route.\n   */\n  recognize(urlParse: Url): Promise<RouteMatch>[] {\n    var solutions = [];\n\n    this.rules.forEach((routeRecognizer: AbstractRule) => {\n      var pathMatch = routeRecognizer.recognize(urlParse);\n\n      if (isPresent(pathMatch)) {\n        solutions.push(pathMatch);\n      }\n    });\n\n    // handle cases where we are routing just to an aux route\n    if (solutions.length == 0 && isPresent(urlParse) && urlParse.auxiliary.length > 0) {\n      return [PromiseWrapper.resolve(new PathMatch(null, null, urlParse.auxiliary))];\n    }\n\n    return solutions;\n  }\n\n  recognizeAuxiliary(urlParse: Url): Promise<RouteMatch>[] {\n    var routeRecognizer: RouteRule = this.auxRulesByPath.get(urlParse.path);\n    if (isPresent(routeRecognizer)) {\n      return [routeRecognizer.recognize(urlParse)];\n    }\n\n    return [PromiseWrapper.resolve(null)];\n  }\n\n  hasRoute(name: string): boolean { return this.rulesByName.has(name); }\n\n  componentLoaded(name: string): boolean {\n    return this.hasRoute(name) && isPresent(this.rulesByName.get(name).handler.componentType);\n  }\n\n  loadComponent(name: string): Promise<any> {\n    return this.rulesByName.get(name).handler.resolveComponentType();\n  }\n\n  generate(name: string, params: any): ComponentInstruction {\n    var rule: RouteRule = this.rulesByName.get(name);\n    if (isBlank(rule)) {\n      return null;\n    }\n    return rule.generate(params);\n  }\n\n  generateAuxiliary(name: string, params: any): ComponentInstruction {\n    var rule: RouteRule = this.auxRulesByName.get(name);\n    if (isBlank(rule)) {\n      return null;\n    }\n    return rule.generate(params);\n  }\n\n  private _assertNoHashCollision(hash: string, path) {\n    this.rules.forEach((rule) => {\n      if (hash == rule.hash) {\n        throw new BaseException(\n            `Configuration '${path}' conflicts with existing route '${rule.path}'`);\n      }\n    });\n  }\n\n  private _getRoutePath(config: RouteDefinition): RoutePath {\n    if (isPresent(config.regex)) {\n      if (isFunction(config.serializer)) {\n        return new RegexRoutePath(config.regex, config.serializer);\n      } else {\n        throw new BaseException(\n            `Route provides a regex property, '${config.regex}', but no serializer property`);\n      }\n    }\n    if (isPresent(config.path)) {\n      // Auxiliary routes do not have a slash at the start\n      let path = (config instanceof AuxRoute && config.path.startsWith('/')) ?\n                     config.path.substring(1) :\n                     config.path;\n      return new ParamRoutePath(path);\n    }\n    throw new BaseException('Route must provide either a path or regex property');\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/rules/rule_set.ts\n **/","import {isPresent, isBlank} from 'angular2/src/facade/lang';\nimport {StringMapWrapper} from 'angular2/src/facade/collection';\n\nexport class TouchMap {\n  map: {[key: string]: string} = {};\n  keys: {[key: string]: boolean} = {};\n\n  constructor(map: {[key: string]: any}) {\n    if (isPresent(map)) {\n      StringMapWrapper.forEach(map, (value, key) => {\n        this.map[key] = isPresent(value) ? value.toString() : null;\n        this.keys[key] = true;\n      });\n    }\n  }\n\n  get(key: string): string {\n    StringMapWrapper.delete(this.keys, key);\n    return this.map[key];\n  }\n\n  getUnused(): {[key: string]: any} {\n    var unused: {[key: string]: any} = {};\n    var keys = StringMapWrapper.keys(this.keys);\n    keys.forEach(key => unused[key] = StringMapWrapper.get(this.map, key));\n    return unused;\n  }\n}\n\n\nexport function normalizeString(obj: any): string {\n  if (isBlank(obj)) {\n    return null;\n  } else {\n    return obj.toString();\n  }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/router/utils.ts\n **/","import {\n  ChangeDetectorDefinition,\n} from 'angular2/src/core/change_detection/change_detection';\n\n// Note: This class is only here so that we can reference it from TypeScript code.\n// The actual implementation lives under modules_dart.\n// TODO(tbosch): Move the corresponding code into angular2/src/compiler once\n// the new compiler is done.\nexport class Codegen {\n  constructor(moduleAlias: string) {}\n  generate(typeName: string, changeDetectorTypeName: string, def: ChangeDetectorDefinition): void {\n    throw \"Not implemented in JS\";\n  }\n  toString(): string { throw \"Not implemented in JS\"; }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** angular2/src/transform/template_compiler/change_detector_codegen.ts\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n  /**\n   * Searches existing DOM for elements of our component type and upgrades them\n   * if they have not already been upgraded.\n   *\n   * @param {string=} optJsClass the programatic name of the element class we\n   * need to create a new instance of.\n   * @param {string=} optCssClass the name of the CSS class elements of this\n   * type will have.\n   */\n  upgradeDom: function(optJsClass, optCssClass) {},\n  /**\n   * Upgrades a specific element rather than all in the DOM.\n   *\n   * @param {!Element} element The element we wish to upgrade.\n   * @param {string=} optJsClass Optional name of the class we want to upgrade\n   * the element to.\n   */\n  upgradeElement: function(element, optJsClass) {},\n  /**\n   * Upgrades a specific list of elements rather than all in the DOM.\n   *\n   * @param {!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   * The elements we wish to upgrade.\n   */\n  upgradeElements: function(elements) {},\n  /**\n   * Upgrades all registered components found in the current DOM. This is\n   * automatically called on window load.\n   */\n  upgradeAllRegistered: function() {},\n  /**\n   * Allows user to be alerted to any upgrades that are performed for a given\n   * component type\n   *\n   * @param {string} jsClass The class name of the MDL component we wish\n   * to hook into for any upgrades performed.\n   * @param {function(!HTMLElement)} callback The function to call upon an\n   * upgrade. This function should expect 1 parameter - the HTMLElement which\n   * got upgraded.\n   */\n  registerUpgradedCallback: function(jsClass, callback) {},\n  /**\n   * Registers a class for future use and attempts to upgrade existing DOM.\n   *\n   * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n   */\n  register: function(config) {},\n  /**\n   * Downgrade either a given node, an array of nodes, or a NodeList.\n   *\n   * @param {!Node|!Array<!Node>|!NodeList} nodes\n   */\n  downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n  'use strict';\n\n  /** @type {!Array<componentHandler.ComponentConfig>} */\n  var registeredComponents_ = [];\n\n  /** @type {!Array<componentHandler.Component>} */\n  var createdComponents_ = [];\n\n  var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n  /**\n   * Searches registered components for a class we are interested in using.\n   * Optionally replaces a match with passed object if specified.\n   *\n   * @param {string} name The name of a class we want to use.\n   * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n   * @return {!Object|boolean}\n   * @private\n   */\n  function findRegisteredClass_(name, optReplace) {\n    for (var i = 0; i < registeredComponents_.length; i++) {\n      if (registeredComponents_[i].className === name) {\n        if (typeof optReplace !== 'undefined') {\n          registeredComponents_[i] = optReplace;\n        }\n        return registeredComponents_[i];\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Returns an array of the classNames of the upgraded classes on the element.\n   *\n   * @param {!Element} element The element to fetch data from.\n   * @return {!Array<string>}\n   * @private\n   */\n  function getUpgradedListOfElement_(element) {\n    var dataUpgraded = element.getAttribute('data-upgraded');\n    // Use `['']` as default value to conform the `,name,name...` style.\n    return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n  }\n\n  /**\n   * Returns true if the given element has already been upgraded for the given\n   * class.\n   *\n   * @param {!Element} element The element we want to check.\n   * @param {string} jsClass The class to check for.\n   * @returns {boolean}\n   * @private\n   */\n  function isElementUpgraded_(element, jsClass) {\n    var upgradedList = getUpgradedListOfElement_(element);\n    return upgradedList.indexOf(jsClass) !== -1;\n  }\n\n  /**\n   * Searches existing DOM for elements of our component type and upgrades them\n   * if they have not already been upgraded.\n   *\n   * @param {string=} optJsClass the programatic name of the element class we\n   * need to create a new instance of.\n   * @param {string=} optCssClass the name of the CSS class elements of this\n   * type will have.\n   */\n  function upgradeDomInternal(optJsClass, optCssClass) {\n    if (typeof optJsClass === 'undefined' &&\n        typeof optCssClass === 'undefined') {\n      for (var i = 0; i < registeredComponents_.length; i++) {\n        upgradeDomInternal(registeredComponents_[i].className,\n            registeredComponents_[i].cssClass);\n      }\n    } else {\n      var jsClass = /** @type {string} */ (optJsClass);\n      if (typeof optCssClass === 'undefined') {\n        var registeredClass = findRegisteredClass_(jsClass);\n        if (registeredClass) {\n          optCssClass = registeredClass.cssClass;\n        }\n      }\n\n      var elements = document.querySelectorAll('.' + optCssClass);\n      for (var n = 0; n < elements.length; n++) {\n        upgradeElementInternal(elements[n], jsClass);\n      }\n    }\n  }\n\n  /**\n   * Upgrades a specific element rather than all in the DOM.\n   *\n   * @param {!Element} element The element we wish to upgrade.\n   * @param {string=} optJsClass Optional name of the class we want to upgrade\n   * the element to.\n   */\n  function upgradeElementInternal(element, optJsClass) {\n    // Verify argument type.\n    if (!(typeof element === 'object' && element instanceof Element)) {\n      throw new Error('Invalid argument provided to upgrade MDL element.');\n    }\n    var upgradedList = getUpgradedListOfElement_(element);\n    var classesToUpgrade = [];\n    // If jsClass is not provided scan the registered components to find the\n    // ones matching the element's CSS classList.\n    if (!optJsClass) {\n      var classList = element.classList;\n      registeredComponents_.forEach(function(component) {\n        // Match CSS & Not to be upgraded & Not upgraded.\n        if (classList.contains(component.cssClass) &&\n            classesToUpgrade.indexOf(component) === -1 &&\n            !isElementUpgraded_(element, component.className)) {\n          classesToUpgrade.push(component);\n        }\n      });\n    } else if (!isElementUpgraded_(element, optJsClass)) {\n      classesToUpgrade.push(findRegisteredClass_(optJsClass));\n    }\n\n    // Upgrade the element for each classes.\n    for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n      registeredClass = classesToUpgrade[i];\n      if (registeredClass) {\n        // Mark element as upgraded.\n        upgradedList.push(registeredClass.className);\n        element.setAttribute('data-upgraded', upgradedList.join(','));\n        var instance = new registeredClass.classConstructor(element);\n        instance[componentConfigProperty_] = registeredClass;\n        createdComponents_.push(instance);\n        // Call any callbacks the user has registered with this component type.\n        for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n          registeredClass.callbacks[j](element);\n        }\n\n        if (registeredClass.widget) {\n          // Assign per element instance for control over API\n          element[registeredClass.className] = instance;\n        }\n      } else {\n        throw new Error(\n          'Unable to find a registered component for the given class.');\n      }\n\n      var ev;\n      if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n        ev = new Event('mdl-componentupgraded', {\n          'bubbles': true, 'cancelable': false\n        });\n      } else {\n        ev = document.createEvent('Events');\n        ev.initEvent('mdl-componentupgraded', true, true);\n      }\n      element.dispatchEvent(ev);\n    }\n  }\n\n  /**\n   * Upgrades a specific list of elements rather than all in the DOM.\n   *\n   * @param {!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   * The elements we wish to upgrade.\n   */\n  function upgradeElementsInternal(elements) {\n    if (!Array.isArray(elements)) {\n      if (typeof elements.item === 'function') {\n        elements = Array.prototype.slice.call(/** @type {Array} */ (elements));\n      } else {\n        elements = [elements];\n      }\n    }\n    for (var i = 0, n = elements.length, element; i < n; i++) {\n      element = elements[i];\n      if (element instanceof HTMLElement) {\n        upgradeElementInternal(element);\n        if (element.children.length > 0) {\n          upgradeElementsInternal(element.children);\n        }\n      }\n    }\n  }\n\n  /**\n   * Registers a class for future use and attempts to upgrade existing DOM.\n   *\n   * @param {componentHandler.ComponentConfigPublic} config\n   */\n  function registerInternal(config) {\n    // In order to support both Closure-compiled and uncompiled code accessing\n    // this method, we need to allow for both the dot and array syntax for\n    // property access. You'll therefore see the `foo.bar || foo['bar']`\n    // pattern repeated across this method.\n    var widgetMissing = (typeof config.widget === 'undefined' &&\n        typeof config['widget'] === 'undefined');\n    var widget = true;\n\n    if (!widgetMissing) {\n      widget = config.widget || config['widget'];\n    }\n\n    var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n      classConstructor: config.constructor || config['constructor'],\n      className: config.classAsString || config['classAsString'],\n      cssClass: config.cssClass || config['cssClass'],\n      widget: widget,\n      callbacks: []\n    });\n\n    registeredComponents_.forEach(function(item) {\n      if (item.cssClass === newConfig.cssClass) {\n        throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n      }\n      if (item.className === newConfig.className) {\n        throw new Error('The provided className has already been registered');\n      }\n    });\n\n    if (config.constructor.prototype\n        .hasOwnProperty(componentConfigProperty_)) {\n      throw new Error(\n          'MDL component classes must not have ' + componentConfigProperty_ +\n          ' defined as a property.');\n    }\n\n    var found = findRegisteredClass_(config.classAsString, newConfig);\n\n    if (!found) {\n      registeredComponents_.push(newConfig);\n    }\n  }\n\n  /**\n   * Allows user to be alerted to any upgrades that are performed for a given\n   * component type\n   *\n   * @param {string} jsClass The class name of the MDL component we wish\n   * to hook into for any upgrades performed.\n   * @param {function(!HTMLElement)} callback The function to call upon an\n   * upgrade. This function should expect 1 parameter - the HTMLElement which\n   * got upgraded.\n   */\n  function registerUpgradedCallbackInternal(jsClass, callback) {\n    var regClass = findRegisteredClass_(jsClass);\n    if (regClass) {\n      regClass.callbacks.push(callback);\n    }\n  }\n\n  /**\n   * Upgrades all registered components found in the current DOM. This is\n   * automatically called on window load.\n   */\n  function upgradeAllRegisteredInternal() {\n    for (var n = 0; n < registeredComponents_.length; n++) {\n      upgradeDomInternal(registeredComponents_[n].className);\n    }\n  }\n\n  /**\n   * Check the component for the downgrade method.\n   * Execute if found.\n   * Remove component from createdComponents list.\n   *\n   * @param {?componentHandler.Component} component\n   */\n  function deconstructComponentInternal(component) {\n    if (component) {\n      var componentIndex = createdComponents_.indexOf(component);\n      createdComponents_.splice(componentIndex, 1);\n\n      var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n      var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n      upgrades.splice(componentPlace, 1);\n      component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n      var ev;\n      if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n        ev = new Event('mdl-componentdowngraded', {\n          'bubbles': true, 'cancelable': false\n        });\n      } else {\n        ev = document.createEvent('Events');\n        ev.initEvent('mdl-componentdowngraded', true, true);\n      }\n    }\n  }\n\n  /**\n   * Downgrade either a given node, an array of nodes, or a NodeList.\n   *\n   * @param {!Node|!Array<!Node>|!NodeList} nodes\n   */\n  function downgradeNodesInternal(nodes) {\n    /**\n     * Auxiliary function to downgrade a single node.\n     * @param  {!Node} node the node to be downgraded\n     */\n    var downgradeNode = function(node) {\n      createdComponents_.filter(function(item) {\n        return item.element_ === node;\n      }).forEach(deconstructComponentInternal);\n    };\n    if (nodes instanceof Array || nodes instanceof NodeList) {\n      for (var n = 0; n < nodes.length; n++) {\n        downgradeNode(nodes[n]);\n      }\n    } else if (nodes instanceof Node) {\n      downgradeNode(nodes);\n    } else {\n      throw new Error('Invalid argument provided to downgrade MDL nodes.');\n    }\n  }\n\n  // Now return the functions that should be made public with their publicly\n  // facing names...\n  return {\n    upgradeDom: upgradeDomInternal,\n    upgradeElement: upgradeElementInternal,\n    upgradeElements: upgradeElementsInternal,\n    upgradeAllRegistered: upgradeAllRegisteredInternal,\n    registerUpgradedCallback: registerUpgradedCallbackInternal,\n    register: registerInternal,\n    downgradeElements: downgradeNodesInternal\n  };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *   constructor: Function,\n *   classAsString: string,\n *   cssClass: string,\n *   widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic;  // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *   constructor: !Function,\n *   className: string,\n *   cssClass: string,\n *   widget: (string|boolean),\n *   callbacks: !Array<function(!HTMLElement)>\n * }}\n */\ncomponentHandler.ComponentConfig;  // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *   element_: !HTMLElement,\n *   className: string,\n *   classAsString: string,\n *   cssClass: string,\n *   widget: string\n * }}\n */\ncomponentHandler.Component;  // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n    componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n    componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n  'use strict';\n\n  /**\n   * Performs a \"Cutting the mustard\" test. If the browser supports the features\n   * tested, adds a mdl-js class to the <html> element. It then upgrades all MDL\n   * components requiring JavaScript.\n   */\n  if ('classList' in document.createElement('div') &&\n      'querySelector' in document &&\n      'addEventListener' in window && Array.prototype.forEach) {\n    document.documentElement.classList.add('mdl-js');\n    componentHandler.upgradeAllRegistered();\n  } else {\n    /**\n     * Dummy function to avoid JS errors.\n     */\n    componentHandler.upgradeElement = function() {};\n    /**\n     * Dummy function to avoid JS errors.\n     */\n    componentHandler.register = function() {};\n  }\n});\n\n\n\n/** WEBPACK FOOTER **\n ** /source/mdlComponentHandler.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Tabs MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\nvar MaterialTabs = function MaterialTabs(element) {\n    // Stores the HTML element.\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTabs.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTabs.prototype.CssClasses_ = {\n    TAB_CLASS: 'mdl-tabs__tab',\n    PANEL_CLASS: 'mdl-tabs__panel',\n    ACTIVE_CLASS: 'is-active',\n    UPGRADED_CLASS: 'is-upgraded',\n    MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n    MDL_RIPPLE: 'mdl-ripple',\n    MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n   * Handle clicks to a tabs component\n   *\n   * @private\n   */\nMaterialTabs.prototype.initTabs_ = function () {\n    if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n        this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n    }\n    // Select element tabs, document panels\n    this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n    this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n    // Create new tabs for each tab element\n    for (var i = 0; i < this.tabs_.length; i++) {\n        new MaterialTab(this.tabs_[i], this);\n    }\n    this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n   * Reset tab state, dropping active classes\n   *\n   * @private\n   */\nMaterialTabs.prototype.resetTabState_ = function () {\n    for (var k = 0; k < this.tabs_.length; k++) {\n        this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n    }\n};\n/**\n   * Reset panel state, droping active classes\n   *\n   * @private\n   */\nMaterialTabs.prototype.resetPanelState_ = function () {\n    for (var j = 0; j < this.panels_.length; j++) {\n        this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n    }\n};\n/**\n   * Initialize element.\n   */\nMaterialTabs.prototype.init = function () {\n    if (this.element_) {\n        this.initTabs_();\n    }\n};\n/**\n   * Constructor for an individual tab.\n   *\n   * @constructor\n   * @param {Element} tab The HTML element for the tab.\n   * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n   */\nfunction MaterialTab(tab, ctx) {\n    if (tab) {\n        if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n            var rippleContainer = document.createElement('span');\n            rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n            rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n            var ripple = document.createElement('span');\n            ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n            rippleContainer.appendChild(ripple);\n            tab.appendChild(rippleContainer);\n        }\n        tab.addEventListener('click', function (e) {\n            e.preventDefault();\n            var href = tab.href.split('#')[1];\n            var panel = ctx.element_.querySelector('#' + href);\n            ctx.resetTabState_();\n            ctx.resetPanelState_();\n            tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n            panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n        });\n    }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialTabs,\n    classAsString: 'MaterialTabs',\n    cssClass: 'mdl-js-tabs'\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/tabs.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Layout MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialLayout = function MaterialLayout(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialLayout.prototype.Constant_ = {\n    MAX_WIDTH: '(max-width: 1024px)',\n    TAB_SCROLL_PIXELS: 100,\n    RESIZE_TIMEOUT: 100,\n    MENU_ICON: '&#xE5D2;',\n    CHEVRON_LEFT: 'chevron_left',\n    CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n   * Keycodes, for code readability.\n   *\n   * @enum {number}\n   * @private\n   */\nMaterialLayout.prototype.Keycodes_ = {\n    ENTER: 13,\n    ESCAPE: 27,\n    SPACE: 32\n};\n/**\n   * Modes.\n   *\n   * @enum {number}\n   * @private\n   */\nMaterialLayout.prototype.Mode_ = {\n    STANDARD: 0,\n    SEAMED: 1,\n    WATERFALL: 2,\n    SCROLL: 3\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialLayout.prototype.CssClasses_ = {\n    CONTAINER: 'mdl-layout__container',\n    HEADER: 'mdl-layout__header',\n    DRAWER: 'mdl-layout__drawer',\n    CONTENT: 'mdl-layout__content',\n    DRAWER_BTN: 'mdl-layout__drawer-button',\n    ICON: 'material-icons',\n    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n    RIPPLE: 'mdl-ripple',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    HEADER_SEAMED: 'mdl-layout__header--seamed',\n    HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n    HEADER_SCROLL: 'mdl-layout__header--scroll',\n    FIXED_HEADER: 'mdl-layout--fixed-header',\n    OBFUSCATOR: 'mdl-layout__obfuscator',\n    TAB_BAR: 'mdl-layout__tab-bar',\n    TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n    TAB: 'mdl-layout__tab',\n    TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n    TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n    TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n    PANEL: 'mdl-layout__tab-panel',\n    HAS_DRAWER: 'has-drawer',\n    HAS_TABS: 'has-tabs',\n    HAS_SCROLLING_HEADER: 'has-scrolling-header',\n    CASTING_SHADOW: 'is-casting-shadow',\n    IS_COMPACT: 'is-compact',\n    IS_SMALL_SCREEN: 'is-small-screen',\n    IS_DRAWER_OPEN: 'is-visible',\n    IS_ACTIVE: 'is-active',\n    IS_UPGRADED: 'is-upgraded',\n    IS_ANIMATING: 'is-animating',\n    ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n    ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n   * Handles scrolling on the content.\n   *\n   * @private\n   */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n    if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n        return;\n    }\n    var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n    if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n        this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n        this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n        if (headerVisible) {\n            this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n        }\n    } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n        this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n        this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n        if (headerVisible) {\n            this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n        }\n    }\n};\n/**\n   * Handles a keyboard event on the drawer.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n    // Only react when the drawer is open.\n    if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n        this.toggleDrawer();\n    }\n};\n/**\n   * Handles changes in screen size.\n   *\n   * @private\n   */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n    if (this.screenSizeMediaQuery_.matches) {\n        this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n        // Collapse drawer (if any) when moving to a large screen size.\n        if (this.drawer_) {\n            this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n            this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n        }\n    }\n};\n/**\n   * Handles events of drawer button.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n    if (evt && evt.type === 'keydown') {\n        if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n            // prevent scrolling in drawer nav\n            evt.preventDefault();\n        } else {\n            // prevent other keys\n            return;\n        }\n    }\n    this.toggleDrawer();\n};\n/**\n   * Handles (un)setting the `is-animating` class\n   *\n   * @private\n   */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n    this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n   * Handles expanding the header on click\n   *\n   * @private\n   */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n    if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n        this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n        this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n    }\n};\n/**\n   * Reset tab state, dropping active classes\n   *\n   * @private\n   */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n    for (var k = 0; k < tabBar.length; k++) {\n        tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n   * Reset panel state, droping active classes\n   *\n   * @private\n   */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n    for (var j = 0; j < panels.length; j++) {\n        panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n  * Toggle drawer state\n  *\n  * @public\n  */\nMaterialLayout.prototype.toggleDrawer = function () {\n    var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n    this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n    this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n    // Set accessibility properties.\n    if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n        this.drawer_.setAttribute('aria-hidden', 'false');\n        drawerButton.setAttribute('aria-expanded', 'true');\n    } else {\n        this.drawer_.setAttribute('aria-hidden', 'true');\n        drawerButton.setAttribute('aria-expanded', 'false');\n    }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n   * Initialize element.\n   */\nMaterialLayout.prototype.init = function () {\n    if (this.element_) {\n        var container = document.createElement('div');\n        container.classList.add(this.CssClasses_.CONTAINER);\n        var focusedElement = this.element_.querySelector(':focus');\n        this.element_.parentElement.insertBefore(container, this.element_);\n        this.element_.parentElement.removeChild(this.element_);\n        container.appendChild(this.element_);\n        if (focusedElement) {\n            focusedElement.focus();\n        }\n        var directChildren = this.element_.childNodes;\n        var numChildren = directChildren.length;\n        for (var c = 0; c < numChildren; c++) {\n            var child = directChildren[c];\n            if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n                this.header_ = child;\n            }\n            if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n                this.drawer_ = child;\n            }\n            if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n                this.content_ = child;\n            }\n        }\n        window.addEventListener('pageshow', function (e) {\n            if (e.persisted) {\n                // when page is loaded from back/forward cache\n                // trigger repaint to let layout scroll in safari\n                this.element_.style.overflowY = 'hidden';\n                requestAnimationFrame(function () {\n                    this.element_.style.overflowY = '';\n                }.bind(this));\n            }\n        }.bind(this), false);\n        if (this.header_) {\n            this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n        }\n        var mode = this.Mode_.STANDARD;\n        if (this.header_) {\n            if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n                mode = this.Mode_.SEAMED;\n            } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n                mode = this.Mode_.WATERFALL;\n                this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n                this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n            } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n                mode = this.Mode_.SCROLL;\n                container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n            }\n            if (mode === this.Mode_.STANDARD) {\n                this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n                if (this.tabBar_) {\n                    this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n                }\n            } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n                this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n                if (this.tabBar_) {\n                    this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n                }\n            } else if (mode === this.Mode_.WATERFALL) {\n                // Add and remove shadows depending on scroll position.\n                // Also add/remove auxiliary class for styling of the compact version of\n                // the header.\n                this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n                this.contentScrollHandler_();\n            }\n        }\n        // Add drawer toggling button to our layout, if we have an openable drawer.\n        if (this.drawer_) {\n            var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n            if (!drawerButton) {\n                drawerButton = document.createElement('div');\n                drawerButton.setAttribute('aria-expanded', 'false');\n                drawerButton.setAttribute('role', 'button');\n                drawerButton.setAttribute('tabindex', '0');\n                drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n                var drawerButtonIcon = document.createElement('i');\n                drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n                drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n                drawerButton.appendChild(drawerButtonIcon);\n            }\n            if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n                //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n                drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n            } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n                //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n                drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n            }\n            drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n            drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n            // Add a class if the layout has a drawer, for altering the left padding.\n            // Adds the HAS_DRAWER to the elements since this.header_ may or may\n            // not be present.\n            this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n            // If we have a fixed header, add the button to the header rather than\n            // the layout.\n            if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n                this.header_.insertBefore(drawerButton, this.header_.firstChild);\n            } else {\n                this.element_.insertBefore(drawerButton, this.content_);\n            }\n            var obfuscator = document.createElement('div');\n            obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n            this.element_.appendChild(obfuscator);\n            obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n            this.obfuscator_ = obfuscator;\n            this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n            this.drawer_.setAttribute('aria-hidden', 'true');\n        }\n        // Keep an eye on screen size, and add/remove auxiliary class for styling\n        // of small screens.\n        this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n        this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n        this.screenSizeHandler_();\n        // Initialize tabs, if any.\n        if (this.header_ && this.tabBar_) {\n            this.element_.classList.add(this.CssClasses_.HAS_TABS);\n            var tabContainer = document.createElement('div');\n            tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n            this.header_.insertBefore(tabContainer, this.tabBar_);\n            this.header_.removeChild(this.tabBar_);\n            var leftButton = document.createElement('div');\n            leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n            leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n            var leftButtonIcon = document.createElement('i');\n            leftButtonIcon.classList.add(this.CssClasses_.ICON);\n            leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n            leftButton.appendChild(leftButtonIcon);\n            leftButton.addEventListener('click', function () {\n                this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n            }.bind(this));\n            var rightButton = document.createElement('div');\n            rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n            rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n            var rightButtonIcon = document.createElement('i');\n            rightButtonIcon.classList.add(this.CssClasses_.ICON);\n            rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n            rightButton.appendChild(rightButtonIcon);\n            rightButton.addEventListener('click', function () {\n                this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n            }.bind(this));\n            tabContainer.appendChild(leftButton);\n            tabContainer.appendChild(this.tabBar_);\n            tabContainer.appendChild(rightButton);\n            // Add and remove tab buttons depending on scroll position and total\n            // window size.\n            var tabUpdateHandler = function () {\n                if (this.tabBar_.scrollLeft > 0) {\n                    leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n                } else {\n                    leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n                }\n                if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n                    rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n                } else {\n                    rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n                }\n            }.bind(this);\n            this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n            tabUpdateHandler();\n            // Update tabs when the window resizes.\n            var windowResizeHandler = function () {\n                // Use timeouts to make sure it doesn't happen too often.\n                if (this.resizeTimeoutId_) {\n                    clearTimeout(this.resizeTimeoutId_);\n                }\n                this.resizeTimeoutId_ = setTimeout(function () {\n                    tabUpdateHandler();\n                    this.resizeTimeoutId_ = null;\n                }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n            }.bind(this);\n            window.addEventListener('resize', windowResizeHandler);\n            if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n                this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            }\n            // Select element tabs, document panels\n            var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n            var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n            // Create new tabs for each tab element\n            for (var i = 0; i < tabs.length; i++) {\n                new MaterialLayoutTab(tabs[i], tabs, panels, this);\n            }\n        }\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n/**\n   * Constructor for an individual tab.\n   *\n   * @constructor\n   * @param {HTMLElement} tab The HTML element for the tab.\n   * @param {!Array<HTMLElement>} tabs Array with HTML elements for all tabs.\n   * @param {!Array<HTMLElement>} panels Array with HTML elements for all panels.\n   * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n   */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n    /**\n     * Auxiliary method to programmatically select a tab in the UI.\n     */\n    function selectTab() {\n        var href = tab.href.split('#')[1];\n        var panel = layout.content_.querySelector('#' + href);\n        layout.resetTabState_(tabs);\n        layout.resetPanelState_(panels);\n        tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n        panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n    }\n    if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n        var rippleContainer = document.createElement('span');\n        rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n        rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n        var ripple = document.createElement('span');\n        ripple.classList.add(layout.CssClasses_.RIPPLE);\n        rippleContainer.appendChild(ripple);\n        tab.appendChild(rippleContainer);\n    }\n    tab.addEventListener('click', function (e) {\n        if (tab.getAttribute('href').charAt(0) === '#') {\n            e.preventDefault();\n            selectTab();\n        }\n    });\n    tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialLayout,\n    classAsString: 'MaterialLayout',\n    cssClass: 'mdl-js-layout'\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/layout.js\n **/","// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n    /**\n   * Date.now polyfill.\n   * @return {number} the current Date\n   */\n    Date.now = function () {\n        return new Date().getTime();\n    };\n    Date['now'] = Date.now;\n}\nvar vendors = [\n    'webkit',\n    'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n    var vp = vendors[i];\n    window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n    window['requestAnimationFrame'] = window.requestAnimationFrame;\n    window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n    var lastTime = 0;\n    /**\n   * requestAnimationFrame polyfill.\n   * @param  {!Function} callback the callback function.\n   */\n    window.requestAnimationFrame = function (callback) {\n        var now = Date.now();\n        var nextTime = Math.max(lastTime + 16, now);\n        return setTimeout(function () {\n            callback(lastTime = nextTime);\n        }, nextTime - now);\n    };\n    window.cancelAnimationFrame = clearTimeout;\n    window['requestAnimationFrame'] = window.requestAnimationFrame;\n    window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\n\n\n/** WEBPACK FOOTER **\n ** /source/rAF.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Button MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialButton = function MaterialButton(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialButton.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialButton.prototype.CssClasses_ = {\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n    RIPPLE: 'mdl-ripple'\n};\n/**\n   * Handle blur of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialButton.prototype.blurHandler_ = function (event) {\n    if (event) {\n        this.element_.blur();\n    }\n};\n// Public methods.\n/**\n   * Disable button.\n   *\n   * @public\n   */\nMaterialButton.prototype.disable = function () {\n    this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n   * Enable button.\n   *\n   * @public\n   */\nMaterialButton.prototype.enable = function () {\n    this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n   * Initialize element.\n   */\nMaterialButton.prototype.init = function () {\n    if (this.element_) {\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            var rippleContainer = document.createElement('span');\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleElement_ = document.createElement('span');\n            this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n            rippleContainer.appendChild(this.rippleElement_);\n            this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n            this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n            this.element_.appendChild(rippleContainer);\n        }\n        this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n        this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n        this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialButton,\n    classAsString: 'MaterialButton',\n    cssClass: 'mdl-js-button',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/button.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Checkbox MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialCheckbox.prototype.CssClasses_ = {\n    INPUT: 'mdl-checkbox__input',\n    BOX_OUTLINE: 'mdl-checkbox__box-outline',\n    FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n    TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked',\n    IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialCheckbox.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.inputElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the inputs toggle state and update display.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.checkToggleState = function () {\n    if (this.inputElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n   * Check the inputs disabled state and update display.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.checkDisabled = function () {\n    if (this.inputElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n   * Disable checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.disable = function () {\n    this.inputElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n   * Enable checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.enable = function () {\n    this.inputElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n   * Check checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.check = function () {\n    this.inputElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n   * Uncheck checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.uncheck = function () {\n    this.inputElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n   * Initialize element.\n   */\nMaterialCheckbox.prototype.init = function () {\n    if (this.element_) {\n        this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        var boxOutline = document.createElement('span');\n        boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n        var tickContainer = document.createElement('span');\n        tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n        var tickOutline = document.createElement('span');\n        tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n        boxOutline.appendChild(tickOutline);\n        this.element_.appendChild(tickContainer);\n        this.element_.appendChild(boxOutline);\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            this.rippleContainerElement_ = document.createElement('span');\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n            this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            this.rippleContainerElement_.appendChild(ripple);\n            this.element_.appendChild(this.rippleContainerElement_);\n        }\n        this.boundInputOnChange = this.onChange_.bind(this);\n        this.boundInputOnFocus = this.onFocus_.bind(this);\n        this.boundInputOnBlur = this.onBlur_.bind(this);\n        this.boundElementMouseUp = this.onMouseUp_.bind(this);\n        this.inputElement_.addEventListener('change', this.boundInputOnChange);\n        this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n        this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n        this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n        this.updateClasses_();\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialCheckbox,\n    classAsString: 'MaterialCheckbox',\n    cssClass: 'mdl-js-checkbox',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/checkbox.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for icon toggle MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialIconToggle.prototype.CssClasses_ = {\n    INPUT: 'mdl-icon-toggle__input',\n    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialIconToggle.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.inputElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the inputs toggle state and update display.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.checkToggleState = function () {\n    if (this.inputElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n   * Check the inputs disabled state and update display.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.checkDisabled = function () {\n    if (this.inputElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n   * Disable icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.disable = function () {\n    this.inputElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n   * Enable icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.enable = function () {\n    this.inputElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n   * Check icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.check = function () {\n    this.inputElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n   * Uncheck icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.uncheck = function () {\n    this.inputElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n   * Initialize element.\n   */\nMaterialIconToggle.prototype.init = function () {\n    if (this.element_) {\n        this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            this.rippleContainerElement_ = document.createElement('span');\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n            this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            this.rippleContainerElement_.appendChild(ripple);\n            this.element_.appendChild(this.rippleContainerElement_);\n        }\n        this.boundInputOnChange = this.onChange_.bind(this);\n        this.boundInputOnFocus = this.onFocus_.bind(this);\n        this.boundInputOnBlur = this.onBlur_.bind(this);\n        this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n        this.inputElement_.addEventListener('change', this.boundInputOnChange);\n        this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n        this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n        this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n        this.updateClasses_();\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialIconToggle,\n    classAsString: 'MaterialIconToggle',\n    cssClass: 'mdl-js-icon-toggle',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/icon-toggle.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for dropdown MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialMenu = function MaterialMenu(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialMenu.prototype.Constant_ = {\n    // Total duration of the menu animation.\n    TRANSITION_DURATION_SECONDS: 0.3,\n    // The fraction of the total duration we want to use for menu item animations.\n    TRANSITION_DURATION_FRACTION: 0.8,\n    // How long the menu stays open after choosing an option (so the user can see\n    // the ripple).\n    CLOSE_TIMEOUT: 150\n};\n/**\n   * Keycodes, for code readability.\n   *\n   * @enum {number}\n   * @private\n   */\nMaterialMenu.prototype.Keycodes_ = {\n    ENTER: 13,\n    ESCAPE: 27,\n    SPACE: 32,\n    UP_ARROW: 38,\n    DOWN_ARROW: 40\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialMenu.prototype.CssClasses_ = {\n    CONTAINER: 'mdl-menu__container',\n    OUTLINE: 'mdl-menu__outline',\n    ITEM: 'mdl-menu__item',\n    ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE: 'mdl-ripple',\n    // Statuses\n    IS_UPGRADED: 'is-upgraded',\n    IS_VISIBLE: 'is-visible',\n    IS_ANIMATING: 'is-animating',\n    // Alignment options\n    BOTTOM_LEFT: 'mdl-menu--bottom-left',\n    // This is the default.\n    BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n    TOP_LEFT: 'mdl-menu--top-left',\n    TOP_RIGHT: 'mdl-menu--top-right',\n    UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n   * Initialize element.\n   */\nMaterialMenu.prototype.init = function () {\n    if (this.element_) {\n        // Create container for the menu.\n        var container = document.createElement('div');\n        container.classList.add(this.CssClasses_.CONTAINER);\n        this.element_.parentElement.insertBefore(container, this.element_);\n        this.element_.parentElement.removeChild(this.element_);\n        container.appendChild(this.element_);\n        this.container_ = container;\n        // Create outline for the menu (shadow and background).\n        var outline = document.createElement('div');\n        outline.classList.add(this.CssClasses_.OUTLINE);\n        this.outline_ = outline;\n        container.insertBefore(outline, this.element_);\n        // Find the \"for\" element and bind events to it.\n        var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n        var forEl = null;\n        if (forElId) {\n            forEl = document.getElementById(forElId);\n            if (forEl) {\n                this.forElement_ = forEl;\n                forEl.addEventListener('click', this.handleForClick_.bind(this));\n                forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n            }\n        }\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n        this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n        this.boundItemClick_ = this.handleItemClick_.bind(this);\n        for (var i = 0; i < items.length; i++) {\n            // Add a listener to each menu item.\n            items[i].addEventListener('click', this.boundItemClick_);\n            // Add a tab index to each menu item.\n            items[i].tabIndex = '-1';\n            // Add a keyboard listener to each menu item.\n            items[i].addEventListener('keydown', this.boundItemKeydown_);\n        }\n        // Add ripple classes to each item, if the user has enabled ripples.\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            for (i = 0; i < items.length; i++) {\n                var item = items[i];\n                var rippleContainer = document.createElement('span');\n                rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n                var ripple = document.createElement('span');\n                ripple.classList.add(this.CssClasses_.RIPPLE);\n                rippleContainer.appendChild(ripple);\n                item.appendChild(rippleContainer);\n                item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            }\n        }\n        // Copy alignment classes to the container, so the outline can use them.\n        if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n            this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n            this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n            this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n            this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n            this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n        }\n        container.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n/**\n   * Handles a click on the \"for\" element, by positioning the menu and then\n   * toggling it.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n    if (this.element_ && this.forElement_) {\n        var rect = this.forElement_.getBoundingClientRect();\n        var forRect = this.forElement_.parentElement.getBoundingClientRect();\n        if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n        } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n            // Position below the \"for\" element, aligned to its right.\n            this.container_.style.right = forRect.right - rect.right + 'px';\n            this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n        } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n            // Position above the \"for\" element, aligned to its left.\n            this.container_.style.left = this.forElement_.offsetLeft + 'px';\n            this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n        } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n            // Position above the \"for\" element, aligned to its right.\n            this.container_.style.right = forRect.right - rect.right + 'px';\n            this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n        } else {\n            // Default: position below the \"for\" element, aligned to its left.\n            this.container_.style.left = this.forElement_.offsetLeft + 'px';\n            this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n        }\n    }\n    this.toggle(evt);\n};\n/**\n   * Handles a keyboard event on the \"for\" element.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n    if (this.element_ && this.container_ && this.forElement_) {\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n        if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n            if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n                evt.preventDefault();\n                items[items.length - 1].focus();\n            } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n                evt.preventDefault();\n                items[0].focus();\n            }\n        }\n    }\n};\n/**\n   * Handles a keyboard event on an item.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n    if (this.element_ && this.container_) {\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n        if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n            var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n            if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n                evt.preventDefault();\n                if (currentIndex > 0) {\n                    items[currentIndex - 1].focus();\n                } else {\n                    items[items.length - 1].focus();\n                }\n            } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n                evt.preventDefault();\n                if (items.length > currentIndex + 1) {\n                    items[currentIndex + 1].focus();\n                } else {\n                    items[0].focus();\n                }\n            } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n                evt.preventDefault();\n                // Send mousedown and mouseup to trigger ripple.\n                var e = new MouseEvent('mousedown');\n                evt.target.dispatchEvent(e);\n                e = new MouseEvent('mouseup');\n                evt.target.dispatchEvent(e);\n                // Send click.\n                evt.target.click();\n            } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n                evt.preventDefault();\n                this.hide();\n            }\n        }\n    }\n};\n/**\n   * Handles a click event on an item.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n    if (evt.target.hasAttribute('disabled')) {\n        evt.stopPropagation();\n    } else {\n        // Wait some time before closing menu, so the user can see the ripple.\n        this.closing_ = true;\n        window.setTimeout(function (evt) {\n            this.hide();\n            this.closing_ = false;\n        }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n    }\n};\n/**\n   * Calculates the initial clip (for opening the menu) or final clip (for closing\n   * it), and applies it. This allows us to animate from or to the correct point,\n   * that is, the point it's aligned to in the \"for\" element.\n   *\n   * @param {number} height Height of the clip rectangle\n   * @param {number} width Width of the clip rectangle\n   * @private\n   */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n    if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n        // Do not clip.\n        this.element_.style.clip = '';\n    } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n        // Clip to the top right corner of the menu.\n        this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n    } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n        // Clip to the bottom left corner of the menu.\n        this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n    } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n        // Clip to the bottom right corner of the menu.\n        this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n    } else {\n        // Default: do not clip (same as clipping to the top left corner).\n        this.element_.style.clip = '';\n    }\n};\n/**\n   * Cleanup function to remove animation listeners.\n   *\n   * @param {Event} evt\n   * @private\n   */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n    evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n   * Adds an event listener to clean up after the animation ends.\n   *\n   * @private\n   */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n    this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n    this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n   * Displays the menu.\n   *\n   * @public\n   */\nMaterialMenu.prototype.show = function (evt) {\n    if (this.element_ && this.container_ && this.outline_) {\n        // Measure the inner element.\n        var height = this.element_.getBoundingClientRect().height;\n        var width = this.element_.getBoundingClientRect().width;\n        // Apply the inner element's size to the container and outline.\n        this.container_.style.width = width + 'px';\n        this.container_.style.height = height + 'px';\n        this.outline_.style.width = width + 'px';\n        this.outline_.style.height = height + 'px';\n        var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n        // Calculate transition delays for individual menu items, so that they fade\n        // in one at a time.\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n        for (var i = 0; i < items.length; i++) {\n            var itemDelay = null;\n            if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n                itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n            } else {\n                itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n            }\n            items[i].style.transitionDelay = itemDelay;\n        }\n        // Apply the initial clip to the text before we start animating.\n        this.applyClip_(height, width);\n        // Wait for the next frame, turn on animation, and apply the final clip.\n        // Also make it visible. This triggers the transitions.\n        window.requestAnimationFrame(function () {\n            this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n            this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n            this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n        }.bind(this));\n        // Clean up after the animation is complete.\n        this.addAnimationEndListener_();\n        // Add a click listener to the document, to close the menu.\n        var callback = function (e) {\n            // Check to see if the document is processing the same event that\n            // displayed the menu in the first place. If so, do nothing.\n            // Also check to see if the menu is in the process of closing itself, and\n            // do nothing in that case.\n            // Also check if the clicked element is a menu item\n            // if so, do nothing.\n            if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n                document.removeEventListener('click', callback);\n                this.hide();\n            }\n        }.bind(this);\n        document.addEventListener('click', callback);\n    }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n   * Hides the menu.\n   *\n   * @public\n   */\nMaterialMenu.prototype.hide = function () {\n    if (this.element_ && this.container_ && this.outline_) {\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n        // Remove all transition delays; menu items fade out concurrently.\n        for (var i = 0; i < items.length; i++) {\n            items[i].style.removeProperty('transition-delay');\n        }\n        // Measure the inner element.\n        var rect = this.element_.getBoundingClientRect();\n        var height = rect.height;\n        var width = rect.width;\n        // Turn on animation, and apply the final clip. Also make invisible.\n        // This triggers the transitions.\n        this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n        this.applyClip_(height, width);\n        this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n        // Clean up after the animation is complete.\n        this.addAnimationEndListener_();\n    }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n   * Displays or hides the menu, depending on current state.\n   *\n   * @public\n   */\nMaterialMenu.prototype.toggle = function (evt) {\n    if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n        this.hide();\n    } else {\n        this.show(evt);\n    }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialMenu,\n    classAsString: 'MaterialMenu',\n    cssClass: 'mdl-js-menu',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/menu.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Progress MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialProgress = function MaterialProgress(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialProgress.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n   * Set the current progress of the progressbar.\n   *\n   * @param {number} p Percentage of the progress (0-100)\n   * @public\n   */\nMaterialProgress.prototype.setProgress = function (p) {\n    if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n        return;\n    }\n    this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n   * Set the current progress of the buffer.\n   *\n   * @param {number} p Percentage of the buffer (0-100)\n   * @public\n   */\nMaterialProgress.prototype.setBuffer = function (p) {\n    this.bufferbar_.style.width = p + '%';\n    this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n   * Initialize element.\n   */\nMaterialProgress.prototype.init = function () {\n    if (this.element_) {\n        var el = document.createElement('div');\n        el.className = 'progressbar bar bar1';\n        this.element_.appendChild(el);\n        this.progressbar_ = el;\n        el = document.createElement('div');\n        el.className = 'bufferbar bar bar2';\n        this.element_.appendChild(el);\n        this.bufferbar_ = el;\n        el = document.createElement('div');\n        el.className = 'auxbar bar bar3';\n        this.element_.appendChild(el);\n        this.auxbar_ = el;\n        this.progressbar_.style.width = '0%';\n        this.bufferbar_.style.width = '100%';\n        this.auxbar_.style.width = '0%';\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialProgress,\n    classAsString: 'MaterialProgress',\n    cssClass: 'mdl-js-progress',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/progress.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Radio MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialRadio = function MaterialRadio(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialRadio.prototype.CssClasses_ = {\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked',\n    IS_UPGRADED: 'is-upgraded',\n    JS_RADIO: 'mdl-js-radio',\n    RADIO_BTN: 'mdl-radio__button',\n    RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n    RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onChange_ = function (event) {\n    // Since other radio buttons don't get change events, we need to look for\n    // them to update their classes.\n    var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n    for (var i = 0; i < radios.length; i++) {\n        var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n        // Different name == different group, so no point updating those.\n        if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n            radios[i]['MaterialRadio'].updateClasses_();\n        }\n    }\n};\n/**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n    this.blur_();\n};\n/**\n   * Update classes.\n   *\n   * @private\n   */\nMaterialRadio.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialRadio.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.btnElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the components disabled state.\n   *\n   * @public\n   */\nMaterialRadio.prototype.checkDisabled = function () {\n    if (this.btnElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n   * Check the components toggled state.\n   *\n   * @public\n   */\nMaterialRadio.prototype.checkToggleState = function () {\n    if (this.btnElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n   * Disable radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.disable = function () {\n    this.btnElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n   * Enable radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.enable = function () {\n    this.btnElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n   * Check radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.check = function () {\n    this.btnElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n   * Uncheck radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.uncheck = function () {\n    this.btnElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n   * Initialize element.\n   */\nMaterialRadio.prototype.init = function () {\n    if (this.element_) {\n        this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n        this.boundChangeHandler_ = this.onChange_.bind(this);\n        this.boundFocusHandler_ = this.onChange_.bind(this);\n        this.boundBlurHandler_ = this.onBlur_.bind(this);\n        this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n        var outerCircle = document.createElement('span');\n        outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n        var innerCircle = document.createElement('span');\n        innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n        this.element_.appendChild(outerCircle);\n        this.element_.appendChild(innerCircle);\n        var rippleContainer;\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            rippleContainer = document.createElement('span');\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            rippleContainer.appendChild(ripple);\n            this.element_.appendChild(rippleContainer);\n        }\n        this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n        this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n        this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n        this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n        this.updateClasses_();\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialRadio,\n    classAsString: 'MaterialRadio',\n    cssClass: 'mdl-js-radio',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/radio.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Slider MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialSlider = function MaterialSlider(element) {\n    this.element_ = element;\n    // Browser feature detection.\n    this.isIE_ = window.navigator.msPointerEnabled;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSlider.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSlider.prototype.CssClasses_ = {\n    IE_CONTAINER: 'mdl-slider__ie-container',\n    SLIDER_CONTAINER: 'mdl-slider__container',\n    BACKGROUND_FLEX: 'mdl-slider__background-flex',\n    BACKGROUND_LOWER: 'mdl-slider__background-lower',\n    BACKGROUND_UPPER: 'mdl-slider__background-upper',\n    IS_LOWEST_VALUE: 'is-lowest-value',\n    IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle input on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSlider.prototype.onInput_ = function (event) {\n    this.updateValueStyles_();\n};\n/**\n   * Handle change on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSlider.prototype.onChange_ = function (event) {\n    this.updateValueStyles_();\n};\n/**\n   * Handle mouseup on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n    event.target.blur();\n};\n/**\n   * Handle mousedown on container element.\n   * This handler is purpose is to not require the use to click\n   * exactly on the 2px slider element, as FireFox seems to be very\n   * strict about this.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   * @suppress {missingProperties}\n   */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n    // If this click is not on the parent element (but rather some child)\n    // ignore. It may still bubble up.\n    if (event.target !== this.element_.parentElement) {\n        return;\n    }\n    // Discard the original event and create a new event that\n    // is on the slider element.\n    event.preventDefault();\n    var newEvent = new MouseEvent('mousedown', {\n        target: event.target,\n        buttons: event.buttons,\n        clientX: event.clientX,\n        clientY: this.element_.getBoundingClientRect().y\n    });\n    this.element_.dispatchEvent(newEvent);\n};\n/**\n   * Handle updating of values.\n   *\n   * @private\n   */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n    // Calculate and apply percentages to div structure behind slider.\n    var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n    if (fraction === 0) {\n        this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n    }\n    if (!this.isIE_) {\n        this.backgroundLower_.style.flex = fraction;\n        this.backgroundLower_.style.webkitFlex = fraction;\n        this.backgroundUpper_.style.flex = 1 - fraction;\n        this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n    }\n};\n// Public methods.\n/**\n   * Disable slider.\n   *\n   * @public\n   */\nMaterialSlider.prototype.disable = function () {\n    this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n   * Enable slider.\n   *\n   * @public\n   */\nMaterialSlider.prototype.enable = function () {\n    this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n   * Update slider value.\n   *\n   * @param {number} value The value to which to set the control (optional).\n   * @public\n   */\nMaterialSlider.prototype.change = function (value) {\n    if (typeof value !== 'undefined') {\n        this.element_.value = value;\n    }\n    this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n   * Initialize element.\n   */\nMaterialSlider.prototype.init = function () {\n    if (this.element_) {\n        if (this.isIE_) {\n            // Since we need to specify a very large height in IE due to\n            // implementation limitations, we add a parent here that trims it down to\n            // a reasonable size.\n            var containerIE = document.createElement('div');\n            containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n            this.element_.parentElement.insertBefore(containerIE, this.element_);\n            this.element_.parentElement.removeChild(this.element_);\n            containerIE.appendChild(this.element_);\n        } else {\n            // For non-IE browsers, we need a div structure that sits behind the\n            // slider and allows us to style the left and right sides of it with\n            // different colors.\n            var container = document.createElement('div');\n            container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n            this.element_.parentElement.insertBefore(container, this.element_);\n            this.element_.parentElement.removeChild(this.element_);\n            container.appendChild(this.element_);\n            var backgroundFlex = document.createElement('div');\n            backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n            container.appendChild(backgroundFlex);\n            this.backgroundLower_ = document.createElement('div');\n            this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n            backgroundFlex.appendChild(this.backgroundLower_);\n            this.backgroundUpper_ = document.createElement('div');\n            this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n            backgroundFlex.appendChild(this.backgroundUpper_);\n        }\n        this.boundInputHandler = this.onInput_.bind(this);\n        this.boundChangeHandler = this.onChange_.bind(this);\n        this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n        this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n        this.element_.addEventListener('input', this.boundInputHandler);\n        this.element_.addEventListener('change', this.boundChangeHandler);\n        this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n        this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n        this.updateValueStyles_();\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSlider,\n    classAsString: 'MaterialSlider',\n    cssClass: 'mdl-js-slider',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/slider.js\n **/","/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Snackbar MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n    this.element_ = element;\n    this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n    this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n    if (!this.textElement_) {\n        throw new Error('There must be a message element for a snackbar.');\n    }\n    if (!this.actionElement_) {\n        throw new Error('There must be an action element for a snackbar.');\n    }\n    this.active = false;\n    this.actionHandler_ = undefined;\n    this.message_ = undefined;\n    this.actionText_ = undefined;\n    this.queuedNotifications_ = [];\n    this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSnackbar.prototype.Constant_ = {\n    // The duration of the snackbar show/hide animation, in ms.\n    ANIMATION_LENGTH: 250\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSnackbar.prototype.cssClasses_ = {\n    SNACKBAR: 'mdl-snackbar',\n    MESSAGE: 'mdl-snackbar__text',\n    ACTION: 'mdl-snackbar__action',\n    ACTIVE: 'mdl-snackbar--active'\n};\n/**\n   * Display the snackbar.\n   *\n   * @private\n   */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n    this.element_.setAttribute('aria-hidden', 'true');\n    if (this.actionHandler_) {\n        this.actionElement_.textContent = this.actionText_;\n        this.actionElement_.addEventListener('click', this.actionHandler_);\n        this.setActionHidden_(false);\n    }\n    this.textElement_.textContent = this.message_;\n    this.element_.classList.add(this.cssClasses_.ACTIVE);\n    this.element_.setAttribute('aria-hidden', 'false');\n    setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n   * Show the snackbar.\n   *\n   * @param {Object} data The data for the notification.\n   * @public\n   */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n    if (data === undefined) {\n        throw new Error('Please provide a data object with at least a message to display.');\n    }\n    if (data['message'] === undefined) {\n        throw new Error('Please provide a message to be displayed.');\n    }\n    if (data['actionHandler'] && !data['actionText']) {\n        throw new Error('Please provide action text with the handler.');\n    }\n    if (this.active) {\n        this.queuedNotifications_.push(data);\n    } else {\n        this.active = true;\n        this.message_ = data['message'];\n        if (data['timeout']) {\n            this.timeout_ = data['timeout'];\n        } else {\n            this.timeout_ = 2750;\n        }\n        if (data['actionHandler']) {\n            this.actionHandler_ = data['actionHandler'];\n        }\n        if (data['actionText']) {\n            this.actionText_ = data['actionText'];\n        }\n        this.displaySnackbar_();\n    }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n   * Check if the queue has items within it.\n   * If it does, display the next entry.\n   *\n   * @private\n   */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n    if (this.queuedNotifications_.length > 0) {\n        this.showSnackbar(this.queuedNotifications_.shift());\n    }\n};\n/**\n   * Cleanup the snackbar event listeners and accessiblity attributes.\n   *\n   * @private\n   */\nMaterialSnackbar.prototype.cleanup_ = function () {\n    this.element_.classList.remove(this.cssClasses_.ACTIVE);\n    setTimeout(function () {\n        this.element_.setAttribute('aria-hidden', 'true');\n        this.textElement_.textContent = '';\n        if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n            this.setActionHidden_(true);\n            this.actionElement_.textContent = '';\n            this.actionElement_.removeEventListener('click', this.actionHandler_);\n        }\n        this.actionHandler_ = undefined;\n        this.message_ = undefined;\n        this.actionText_ = undefined;\n        this.active = false;\n        this.checkQueue_();\n    }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n   * Set the action handler hidden state.\n   *\n   * @param {boolean} value\n   * @private\n   */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n    if (value) {\n        this.actionElement_.setAttribute('aria-hidden', 'true');\n    } else {\n        this.actionElement_.removeAttribute('aria-hidden');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSnackbar,\n    classAsString: 'MaterialSnackbar',\n    cssClass: 'mdl-js-snackbar',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/snackbar.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Spinner MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @param {HTMLElement} element The element that will be upgraded.\n   * @constructor\n   */\nvar MaterialSpinner = function MaterialSpinner(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSpinner.prototype.CssClasses_ = {\n    MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n    MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n    MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n    MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n    MDL_SPINNER_LEFT: 'mdl-spinner__left',\n    MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n   * Auxiliary method to create a spinner layer.\n   *\n   * @param {number} index Index of the layer to be created.\n   * @public\n   */\nMaterialSpinner.prototype.createLayer = function (index) {\n    var layer = document.createElement('div');\n    layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n    layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n    var leftClipper = document.createElement('div');\n    leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n    leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n    var gapPatch = document.createElement('div');\n    gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n    var rightClipper = document.createElement('div');\n    rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n    rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n    var circleOwners = [\n        leftClipper,\n        gapPatch,\n        rightClipper\n    ];\n    for (var i = 0; i < circleOwners.length; i++) {\n        var circle = document.createElement('div');\n        circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n        circleOwners[i].appendChild(circle);\n    }\n    layer.appendChild(leftClipper);\n    layer.appendChild(gapPatch);\n    layer.appendChild(rightClipper);\n    this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n   * Stops the spinner animation.\n   * Public method for users who need to stop the spinner for any reason.\n   *\n   * @public\n   */\nMaterialSpinner.prototype.stop = function () {\n    this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n   * Starts the spinner animation.\n   * Public method for users who need to manually start the spinner for any reason\n   * (instead of just adding the 'is-active' class to their markup).\n   *\n   * @public\n   */\nMaterialSpinner.prototype.start = function () {\n    this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n   * Initialize element.\n   */\nMaterialSpinner.prototype.init = function () {\n    if (this.element_) {\n        for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n            this.createLayer(i);\n        }\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSpinner,\n    classAsString: 'MaterialSpinner',\n    cssClass: 'mdl-js-spinner',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/spinner.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Checkbox MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialSwitch = function MaterialSwitch(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSwitch.prototype.CssClasses_ = {\n    INPUT: 'mdl-switch__input',\n    TRACK: 'mdl-switch__track',\n    THUMB: 'mdl-switch__thumb',\n    FOCUS_HELPER: 'mdl-switch__focus-helper',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onChange_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialSwitch.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialSwitch.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.inputElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the components disabled state.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.checkDisabled = function () {\n    if (this.inputElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n   * Check the components toggled state.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.checkToggleState = function () {\n    if (this.inputElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n   * Disable switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.disable = function () {\n    this.inputElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n   * Enable switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.enable = function () {\n    this.inputElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n   * Activate switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.on = function () {\n    this.inputElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n   * Deactivate switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.off = function () {\n    this.inputElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n   * Initialize element.\n   */\nMaterialSwitch.prototype.init = function () {\n    if (this.element_) {\n        this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        var track = document.createElement('div');\n        track.classList.add(this.CssClasses_.TRACK);\n        var thumb = document.createElement('div');\n        thumb.classList.add(this.CssClasses_.THUMB);\n        var focusHelper = document.createElement('span');\n        focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n        thumb.appendChild(focusHelper);\n        this.element_.appendChild(track);\n        this.element_.appendChild(thumb);\n        this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            this.rippleContainerElement_ = document.createElement('span');\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            this.rippleContainerElement_.appendChild(ripple);\n            this.element_.appendChild(this.rippleContainerElement_);\n        }\n        this.boundChangeHandler = this.onChange_.bind(this);\n        this.boundFocusHandler = this.onFocus_.bind(this);\n        this.boundBlurHandler = this.onBlur_.bind(this);\n        this.inputElement_.addEventListener('change', this.boundChangeHandler);\n        this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n        this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n        this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n        this.updateClasses_();\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSwitch,\n    classAsString: 'MaterialSwitch',\n    cssClass: 'mdl-js-switch',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/switch.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Textfield MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialTextfield = function MaterialTextfield(element) {\n    this.element_ = element;\n    this.maxRows = this.Constant_.NO_MAX_ROWS;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialTextfield.prototype.Constant_ = {\n    NO_MAX_ROWS: -1,\n    MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTextfield.prototype.CssClasses_ = {\n    LABEL: 'mdl-textfield__label',\n    INPUT: 'mdl-textfield__input',\n    IS_DIRTY: 'is-dirty',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_INVALID: 'is-invalid',\n    IS_UPGRADED: 'is-upgraded',\n    HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n   * Handle input being entered.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n    var currentRowCount = event.target.value.split('\\n').length;\n    if (event.keyCode === 13) {\n        if (currentRowCount >= this.maxRows) {\n            event.preventDefault();\n        }\n    }\n};\n/**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle reset event from out side.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onReset_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialTextfield.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkValidity();\n    this.checkDirty();\n    this.checkFocus();\n};\n// Public methods.\n/**\n   * Check the disabled state and update field accordingly.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.checkDisabled = function () {\n    if (this.input_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n  * Check the focus state and update field accordingly.\n  *\n  * @public\n  */\nMaterialTextfield.prototype.checkFocus = function () {\n    if (Boolean(this.element_.querySelector(':focus'))) {\n        this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n    }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n   * Check the validity state and update field accordingly.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.checkValidity = function () {\n    if (this.input_.validity) {\n        if (this.input_.validity.valid) {\n            this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n        } else {\n            this.element_.classList.add(this.CssClasses_.IS_INVALID);\n        }\n    }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n   * Check the dirty state and update field accordingly.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.checkDirty = function () {\n    if (this.input_.value && this.input_.value.length > 0) {\n        this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n    }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n   * Disable text field.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.disable = function () {\n    this.input_.disabled = true;\n    this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n   * Enable text field.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.enable = function () {\n    this.input_.disabled = false;\n    this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n   * Update text field value.\n   *\n   * @param {string} value The value to which to set the control (optional).\n   * @public\n   */\nMaterialTextfield.prototype.change = function (value) {\n    this.input_.value = value || '';\n    this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n   * Initialize element.\n   */\nMaterialTextfield.prototype.init = function () {\n    if (this.element_) {\n        this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n        this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        if (this.input_) {\n            if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n                this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n                if (isNaN(this.maxRows)) {\n                    this.maxRows = this.Constant_.NO_MAX_ROWS;\n                }\n            }\n            if (this.input_.hasAttribute('placeholder')) {\n                this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n            }\n            this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n            this.boundFocusHandler = this.onFocus_.bind(this);\n            this.boundBlurHandler = this.onBlur_.bind(this);\n            this.boundResetHandler = this.onReset_.bind(this);\n            this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n            this.input_.addEventListener('focus', this.boundFocusHandler);\n            this.input_.addEventListener('blur', this.boundBlurHandler);\n            this.input_.addEventListener('reset', this.boundResetHandler);\n            if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n                // TODO: This should handle pasting multi line text.\n                // Currently doesn't.\n                this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n                this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n            }\n            var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n            this.updateClasses_();\n            this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n            if (invalid) {\n                this.element_.classList.add(this.CssClasses_.IS_INVALID);\n            }\n            if (this.input_.hasAttribute('autofocus')) {\n                this.element_.focus();\n                this.checkFocus();\n            }\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialTextfield,\n    classAsString: 'MaterialTextfield',\n    cssClass: 'mdl-js-textfield',\n    widget: true\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/textfield.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Tooltip MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialTooltip = function MaterialTooltip(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTooltip.prototype.CssClasses_ = {\n    IS_ACTIVE: 'is-active',\n    BOTTOM: 'mdl-tooltip--bottom',\n    LEFT: 'mdl-tooltip--left',\n    RIGHT: 'mdl-tooltip--right',\n    TOP: 'mdl-tooltip--top'\n};\n/**\n   * Handle mouseenter for tooltip.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n    var props = event.target.getBoundingClientRect();\n    var left = props.left + props.width / 2;\n    var top = props.top + props.height / 2;\n    var marginLeft = -1 * (this.element_.offsetWidth / 2);\n    var marginTop = -1 * (this.element_.offsetHeight / 2);\n    if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n        left = props.width / 2;\n        if (top + marginTop < 0) {\n            this.element_.style.top = 0;\n            this.element_.style.marginTop = 0;\n        } else {\n            this.element_.style.top = top + 'px';\n            this.element_.style.marginTop = marginTop + 'px';\n        }\n    } else {\n        if (left + marginLeft < 0) {\n            this.element_.style.left = 0;\n            this.element_.style.marginLeft = 0;\n        } else {\n            this.element_.style.left = left + 'px';\n            this.element_.style.marginLeft = marginLeft + 'px';\n        }\n    }\n    if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n        this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n    } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n        this.element_.style.left = props.left + props.width + 10 + 'px';\n    } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n        this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n    } else {\n        this.element_.style.top = props.top + props.height + 10 + 'px';\n    }\n    this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n   * Handle mouseleave for tooltip.\n   *\n   * @private\n   */\nMaterialTooltip.prototype.handleMouseLeave_ = function () {\n    this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n   * Initialize element.\n   */\nMaterialTooltip.prototype.init = function () {\n    if (this.element_) {\n        var forElId = this.element_.getAttribute('for');\n        if (forElId) {\n            this.forElement_ = document.getElementById(forElId);\n        }\n        if (this.forElement_) {\n            // It's left here because it prevents accidental text selection on Android\n            if (!this.forElement_.hasAttribute('tabindex')) {\n                this.forElement_.setAttribute('tabindex', '0');\n            }\n            this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n            this.boundMouseLeaveHandler = this.handleMouseLeave_.bind(this);\n            this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n            this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n            this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveHandler, false);\n            window.addEventListener('touchstart', this.boundMouseLeaveHandler);\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialTooltip,\n    classAsString: 'MaterialTooltip',\n    cssClass: 'mdl-tooltip'\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/tooltip.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Data Table Card MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\nvar MaterialDataTable = function MaterialDataTable(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialDataTable.prototype.CssClasses_ = {\n    DATA_TABLE: 'mdl-data-table',\n    SELECTABLE: 'mdl-data-table--selectable',\n    SELECT_ELEMENT: 'mdl-data-table__select',\n    IS_SELECTED: 'is-selected',\n    IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Generates and returns a function that toggles the selection state of a\n   * single row (or multiple rows).\n   *\n   * @param {Element} checkbox Checkbox that toggles the selection state.\n   * @param {Element} row Row to toggle when checkbox changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n   * @private\n   */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n    if (row) {\n        return function () {\n            if (checkbox.checked) {\n                row.classList.add(this.CssClasses_.IS_SELECTED);\n            } else {\n                row.classList.remove(this.CssClasses_.IS_SELECTED);\n            }\n        }.bind(this);\n    }\n    if (opt_rows) {\n        return function () {\n            var i;\n            var el;\n            if (checkbox.checked) {\n                for (i = 0; i < opt_rows.length; i++) {\n                    el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n                    el['MaterialCheckbox'].check();\n                    opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n                }\n            } else {\n                for (i = 0; i < opt_rows.length; i++) {\n                    el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n                    el['MaterialCheckbox'].uncheck();\n                    opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n                }\n            }\n        }.bind(this);\n    }\n};\n/**\n   * Creates a checkbox for a single or or multiple rows and hooks up the\n   * event handling.\n   *\n   * @param {Element} row Row to toggle when checkbox changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n   * @private\n   */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n    var label = document.createElement('label');\n    var labelClasses = [\n        'mdl-checkbox',\n        'mdl-js-checkbox',\n        'mdl-js-ripple-effect',\n        this.CssClasses_.SELECT_ELEMENT\n    ];\n    label.className = labelClasses.join(' ');\n    var checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.classList.add('mdl-checkbox__input');\n    if (row) {\n        checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n        checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n    } else if (opt_rows) {\n        checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n    }\n    label.appendChild(checkbox);\n    componentHandler.upgradeElement(label, 'MaterialCheckbox');\n    return label;\n};\n/**\n   * Initialize element.\n   */\nMaterialDataTable.prototype.init = function () {\n    if (this.element_) {\n        var firstHeader = this.element_.querySelector('th');\n        var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n        var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n        var rows = bodyRows.concat(footRows);\n        if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n            var th = document.createElement('th');\n            var headerCheckbox = this.createCheckbox_(null, rows);\n            th.appendChild(headerCheckbox);\n            firstHeader.parentElement.insertBefore(th, firstHeader);\n            for (var i = 0; i < rows.length; i++) {\n                var firstCell = rows[i].querySelector('td');\n                if (firstCell) {\n                    var td = document.createElement('td');\n                    if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n                        var rowCheckbox = this.createCheckbox_(rows[i]);\n                        td.appendChild(rowCheckbox);\n                    }\n                    rows[i].insertBefore(td, firstCell);\n                }\n            }\n            this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialDataTable,\n    classAsString: 'MaterialDataTable',\n    cssClass: 'mdl-js-data-table'\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/data-table.js\n **/","/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Ripple MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialRipple = function MaterialRipple(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialRipple.prototype.Constant_ = {\n    INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n    INITIAL_SIZE: '1px',\n    INITIAL_OPACITY: '0.4',\n    FINAL_OPACITY: '0',\n    FINAL_SCALE: ''\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialRipple.prototype.CssClasses_ = {\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE: 'mdl-ripple',\n    IS_ANIMATING: 'is-animating',\n    IS_VISIBLE: 'is-visible'\n};\n/**\n   * Handle mouse / finger down on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRipple.prototype.downHandler_ = function (event) {\n    if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n        var rect = this.element_.getBoundingClientRect();\n        this.boundHeight = rect.height;\n        this.boundWidth = rect.width;\n        this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n        this.rippleElement_.style.width = this.rippleSize_ + 'px';\n        this.rippleElement_.style.height = this.rippleSize_ + 'px';\n    }\n    this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n    if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n        this.ignoringMouseDown_ = false;\n    } else {\n        if (event.type === 'touchstart') {\n            this.ignoringMouseDown_ = true;\n        }\n        var frameCount = this.getFrameCount();\n        if (frameCount > 0) {\n            return;\n        }\n        this.setFrameCount(1);\n        var bound = event.currentTarget.getBoundingClientRect();\n        var x;\n        var y;\n        // Check if we are handling a keyboard click.\n        if (event.clientX === 0 && event.clientY === 0) {\n            x = Math.round(bound.width / 2);\n            y = Math.round(bound.height / 2);\n        } else {\n            var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n            var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n            x = Math.round(clientX - bound.left);\n            y = Math.round(clientY - bound.top);\n        }\n        this.setRippleXY(x, y);\n        this.setRippleStyles(true);\n        window.requestAnimationFrame(this.animFrameHandler.bind(this));\n    }\n};\n/**\n   * Handle mouse / finger up on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRipple.prototype.upHandler_ = function (event) {\n    // Don't fire for the artificial \"mouseup\" generated by a double-click.\n    if (event && event.detail !== 2) {\n        // Allow a repaint to occur before removing this class, so the animation\n        // shows for tap events, which seem to trigger a mouseup too soon after\n        // mousedown.\n        window.setTimeout(function () {\n            this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n        }.bind(this), 0);\n    }\n};\n/**\n   * Initialize element.\n   */\nMaterialRipple.prototype.init = function () {\n    if (this.element_) {\n        var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n        if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n            this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n            this.frameCount_ = 0;\n            this.rippleSize_ = 0;\n            this.x_ = 0;\n            this.y_ = 0;\n            // Touch start produces a compat mouse down event, which would cause a\n            // second ripples. To avoid that, we use this property to ignore the first\n            // mouse down after a touch start.\n            this.ignoringMouseDown_ = false;\n            this.boundDownHandler = this.downHandler_.bind(this);\n            this.element_.addEventListener('mousedown', this.boundDownHandler);\n            this.element_.addEventListener('touchstart', this.boundDownHandler);\n            this.boundUpHandler = this.upHandler_.bind(this);\n            this.element_.addEventListener('mouseup', this.boundUpHandler);\n            this.element_.addEventListener('mouseleave', this.boundUpHandler);\n            this.element_.addEventListener('touchend', this.boundUpHandler);\n            this.element_.addEventListener('blur', this.boundUpHandler);\n            /**\n         * Getter for frameCount_.\n         * @return {number} the frame count.\n         */\n            this.getFrameCount = function () {\n                return this.frameCount_;\n            };\n            /**\n         * Setter for frameCount_.\n         * @param {number} fC the frame count.\n         */\n            this.setFrameCount = function (fC) {\n                this.frameCount_ = fC;\n            };\n            /**\n         * Getter for rippleElement_.\n         * @return {Element} the ripple element.\n         */\n            this.getRippleElement = function () {\n                return this.rippleElement_;\n            };\n            /**\n         * Sets the ripple X and Y coordinates.\n         * @param  {number} newX the new X coordinate\n         * @param  {number} newY the new Y coordinate\n         */\n            this.setRippleXY = function (newX, newY) {\n                this.x_ = newX;\n                this.y_ = newY;\n            };\n            /**\n         * Sets the ripple styles.\n         * @param  {boolean} start whether or not this is the start frame.\n         */\n            this.setRippleStyles = function (start) {\n                if (this.rippleElement_ !== null) {\n                    var transformString;\n                    var scale;\n                    var size;\n                    var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n                    if (start) {\n                        scale = this.Constant_.INITIAL_SCALE;\n                        size = this.Constant_.INITIAL_SIZE;\n                    } else {\n                        scale = this.Constant_.FINAL_SCALE;\n                        size = this.rippleSize_ + 'px';\n                        if (recentering) {\n                            offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n                        }\n                    }\n                    transformString = 'translate(-50%, -50%) ' + offset + scale;\n                    this.rippleElement_.style.webkitTransform = transformString;\n                    this.rippleElement_.style.msTransform = transformString;\n                    this.rippleElement_.style.transform = transformString;\n                    if (start) {\n                        this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n                    } else {\n                        this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n                    }\n                }\n            };\n            /**\n         * Handles an animation frame.\n         */\n            this.animFrameHandler = function () {\n                if (this.frameCount_-- > 0) {\n                    window.requestAnimationFrame(this.animFrameHandler.bind(this));\n                } else {\n                    this.setRippleStyles(false);\n                }\n            };\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialRipple,\n    classAsString: 'MaterialRipple',\n    cssClass: 'mdl-js-ripple-effect',\n    widget: false\n});\n\n\n/** WEBPACK FOOTER **\n ** /source/ripple.js\n **/",";(function() {\n\"use strict\";\n\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A component handler interface using the revealing module design pattern.\n * More details on this design pattern here:\n * https://github.com/jasonmayes/mdl-component-design-pattern\n *\n * @author Jason Mayes.\n */\n/* exported componentHandler */\n\n// Pre-defining the componentHandler interface, for closure documentation and\n// static verification.\nvar componentHandler = {\n  /**\n   * Searches existing DOM for elements of our component type and upgrades them\n   * if they have not already been upgraded.\n   *\n   * @param {string=} optJsClass the programatic name of the element class we\n   * need to create a new instance of.\n   * @param {string=} optCssClass the name of the CSS class elements of this\n   * type will have.\n   */\n  upgradeDom: function(optJsClass, optCssClass) {},\n  /**\n   * Upgrades a specific element rather than all in the DOM.\n   *\n   * @param {!Element} element The element we wish to upgrade.\n   * @param {string=} optJsClass Optional name of the class we want to upgrade\n   * the element to.\n   */\n  upgradeElement: function(element, optJsClass) {},\n  /**\n   * Upgrades a specific list of elements rather than all in the DOM.\n   *\n   * @param {!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   * The elements we wish to upgrade.\n   */\n  upgradeElements: function(elements) {},\n  /**\n   * Upgrades all registered components found in the current DOM. This is\n   * automatically called on window load.\n   */\n  upgradeAllRegistered: function() {},\n  /**\n   * Allows user to be alerted to any upgrades that are performed for a given\n   * component type\n   *\n   * @param {string} jsClass The class name of the MDL component we wish\n   * to hook into for any upgrades performed.\n   * @param {function(!HTMLElement)} callback The function to call upon an\n   * upgrade. This function should expect 1 parameter - the HTMLElement which\n   * got upgraded.\n   */\n  registerUpgradedCallback: function(jsClass, callback) {},\n  /**\n   * Registers a class for future use and attempts to upgrade existing DOM.\n   *\n   * @param {componentHandler.ComponentConfigPublic} config the registration configuration\n   */\n  register: function(config) {},\n  /**\n   * Downgrade either a given node, an array of nodes, or a NodeList.\n   *\n   * @param {!Node|!Array<!Node>|!NodeList} nodes\n   */\n  downgradeElements: function(nodes) {}\n};\n\ncomponentHandler = (function() {\n  'use strict';\n\n  /** @type {!Array<componentHandler.ComponentConfig>} */\n  var registeredComponents_ = [];\n\n  /** @type {!Array<componentHandler.Component>} */\n  var createdComponents_ = [];\n\n  var componentConfigProperty_ = 'mdlComponentConfigInternal_';\n\n  /**\n   * Searches registered components for a class we are interested in using.\n   * Optionally replaces a match with passed object if specified.\n   *\n   * @param {string} name The name of a class we want to use.\n   * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.\n   * @return {!Object|boolean}\n   * @private\n   */\n  function findRegisteredClass_(name, optReplace) {\n    for (var i = 0; i < registeredComponents_.length; i++) {\n      if (registeredComponents_[i].className === name) {\n        if (typeof optReplace !== 'undefined') {\n          registeredComponents_[i] = optReplace;\n        }\n        return registeredComponents_[i];\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Returns an array of the classNames of the upgraded classes on the element.\n   *\n   * @param {!Element} element The element to fetch data from.\n   * @return {!Array<string>}\n   * @private\n   */\n  function getUpgradedListOfElement_(element) {\n    var dataUpgraded = element.getAttribute('data-upgraded');\n    // Use `['']` as default value to conform the `,name,name...` style.\n    return dataUpgraded === null ? [''] : dataUpgraded.split(',');\n  }\n\n  /**\n   * Returns true if the given element has already been upgraded for the given\n   * class.\n   *\n   * @param {!Element} element The element we want to check.\n   * @param {string} jsClass The class to check for.\n   * @returns {boolean}\n   * @private\n   */\n  function isElementUpgraded_(element, jsClass) {\n    var upgradedList = getUpgradedListOfElement_(element);\n    return upgradedList.indexOf(jsClass) !== -1;\n  }\n\n  /**\n   * Searches existing DOM for elements of our component type and upgrades them\n   * if they have not already been upgraded.\n   *\n   * @param {string=} optJsClass the programatic name of the element class we\n   * need to create a new instance of.\n   * @param {string=} optCssClass the name of the CSS class elements of this\n   * type will have.\n   */\n  function upgradeDomInternal(optJsClass, optCssClass) {\n    if (typeof optJsClass === 'undefined' &&\n        typeof optCssClass === 'undefined') {\n      for (var i = 0; i < registeredComponents_.length; i++) {\n        upgradeDomInternal(registeredComponents_[i].className,\n            registeredComponents_[i].cssClass);\n      }\n    } else {\n      var jsClass = /** @type {string} */ (optJsClass);\n      if (typeof optCssClass === 'undefined') {\n        var registeredClass = findRegisteredClass_(jsClass);\n        if (registeredClass) {\n          optCssClass = registeredClass.cssClass;\n        }\n      }\n\n      var elements = document.querySelectorAll('.' + optCssClass);\n      for (var n = 0; n < elements.length; n++) {\n        upgradeElementInternal(elements[n], jsClass);\n      }\n    }\n  }\n\n  /**\n   * Upgrades a specific element rather than all in the DOM.\n   *\n   * @param {!Element} element The element we wish to upgrade.\n   * @param {string=} optJsClass Optional name of the class we want to upgrade\n   * the element to.\n   */\n  function upgradeElementInternal(element, optJsClass) {\n    // Verify argument type.\n    if (!(typeof element === 'object' && element instanceof Element)) {\n      throw new Error('Invalid argument provided to upgrade MDL element.');\n    }\n    var upgradedList = getUpgradedListOfElement_(element);\n    var classesToUpgrade = [];\n    // If jsClass is not provided scan the registered components to find the\n    // ones matching the element's CSS classList.\n    if (!optJsClass) {\n      var classList = element.classList;\n      registeredComponents_.forEach(function(component) {\n        // Match CSS & Not to be upgraded & Not upgraded.\n        if (classList.contains(component.cssClass) &&\n            classesToUpgrade.indexOf(component) === -1 &&\n            !isElementUpgraded_(element, component.className)) {\n          classesToUpgrade.push(component);\n        }\n      });\n    } else if (!isElementUpgraded_(element, optJsClass)) {\n      classesToUpgrade.push(findRegisteredClass_(optJsClass));\n    }\n\n    // Upgrade the element for each classes.\n    for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {\n      registeredClass = classesToUpgrade[i];\n      if (registeredClass) {\n        // Mark element as upgraded.\n        upgradedList.push(registeredClass.className);\n        element.setAttribute('data-upgraded', upgradedList.join(','));\n        var instance = new registeredClass.classConstructor(element);\n        instance[componentConfigProperty_] = registeredClass;\n        createdComponents_.push(instance);\n        // Call any callbacks the user has registered with this component type.\n        for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {\n          registeredClass.callbacks[j](element);\n        }\n\n        if (registeredClass.widget) {\n          // Assign per element instance for control over API\n          element[registeredClass.className] = instance;\n        }\n      } else {\n        throw new Error(\n          'Unable to find a registered component for the given class.');\n      }\n\n      var ev;\n      if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n        ev = new Event('mdl-componentupgraded', {\n          'bubbles': true, 'cancelable': false\n        });\n      } else {\n        ev = document.createEvent('Events');\n        ev.initEvent('mdl-componentupgraded', true, true);\n      }\n      element.dispatchEvent(ev);\n    }\n  }\n\n  /**\n   * Upgrades a specific list of elements rather than all in the DOM.\n   *\n   * @param {!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements\n   * The elements we wish to upgrade.\n   */\n  function upgradeElementsInternal(elements) {\n    if (!Array.isArray(elements)) {\n      if (typeof elements.item === 'function') {\n        elements = Array.prototype.slice.call(/** @type {Array} */ (elements));\n      } else {\n        elements = [elements];\n      }\n    }\n    for (var i = 0, n = elements.length, element; i < n; i++) {\n      element = elements[i];\n      if (element instanceof HTMLElement) {\n        upgradeElementInternal(element);\n        if (element.children.length > 0) {\n          upgradeElementsInternal(element.children);\n        }\n      }\n    }\n  }\n\n  /**\n   * Registers a class for future use and attempts to upgrade existing DOM.\n   *\n   * @param {componentHandler.ComponentConfigPublic} config\n   */\n  function registerInternal(config) {\n    // In order to support both Closure-compiled and uncompiled code accessing\n    // this method, we need to allow for both the dot and array syntax for\n    // property access. You'll therefore see the `foo.bar || foo['bar']`\n    // pattern repeated across this method.\n    var widgetMissing = (typeof config.widget === 'undefined' &&\n        typeof config['widget'] === 'undefined');\n    var widget = true;\n\n    if (!widgetMissing) {\n      widget = config.widget || config['widget'];\n    }\n\n    var newConfig = /** @type {componentHandler.ComponentConfig} */ ({\n      classConstructor: config.constructor || config['constructor'],\n      className: config.classAsString || config['classAsString'],\n      cssClass: config.cssClass || config['cssClass'],\n      widget: widget,\n      callbacks: []\n    });\n\n    registeredComponents_.forEach(function(item) {\n      if (item.cssClass === newConfig.cssClass) {\n        throw new Error('The provided cssClass has already been registered: ' + item.cssClass);\n      }\n      if (item.className === newConfig.className) {\n        throw new Error('The provided className has already been registered');\n      }\n    });\n\n    if (config.constructor.prototype\n        .hasOwnProperty(componentConfigProperty_)) {\n      throw new Error(\n          'MDL component classes must not have ' + componentConfigProperty_ +\n          ' defined as a property.');\n    }\n\n    var found = findRegisteredClass_(config.classAsString, newConfig);\n\n    if (!found) {\n      registeredComponents_.push(newConfig);\n    }\n  }\n\n  /**\n   * Allows user to be alerted to any upgrades that are performed for a given\n   * component type\n   *\n   * @param {string} jsClass The class name of the MDL component we wish\n   * to hook into for any upgrades performed.\n   * @param {function(!HTMLElement)} callback The function to call upon an\n   * upgrade. This function should expect 1 parameter - the HTMLElement which\n   * got upgraded.\n   */\n  function registerUpgradedCallbackInternal(jsClass, callback) {\n    var regClass = findRegisteredClass_(jsClass);\n    if (regClass) {\n      regClass.callbacks.push(callback);\n    }\n  }\n\n  /**\n   * Upgrades all registered components found in the current DOM. This is\n   * automatically called on window load.\n   */\n  function upgradeAllRegisteredInternal() {\n    for (var n = 0; n < registeredComponents_.length; n++) {\n      upgradeDomInternal(registeredComponents_[n].className);\n    }\n  }\n\n  /**\n   * Check the component for the downgrade method.\n   * Execute if found.\n   * Remove component from createdComponents list.\n   *\n   * @param {?componentHandler.Component} component\n   */\n  function deconstructComponentInternal(component) {\n    if (component) {\n      var componentIndex = createdComponents_.indexOf(component);\n      createdComponents_.splice(componentIndex, 1);\n\n      var upgrades = component.element_.getAttribute('data-upgraded').split(',');\n      var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);\n      upgrades.splice(componentPlace, 1);\n      component.element_.setAttribute('data-upgraded', upgrades.join(','));\n\n      var ev;\n      if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {\n        ev = new Event('mdl-componentdowngraded', {\n          'bubbles': true, 'cancelable': false\n        });\n      } else {\n        ev = document.createEvent('Events');\n        ev.initEvent('mdl-componentdowngraded', true, true);\n      }\n    }\n  }\n\n  /**\n   * Downgrade either a given node, an array of nodes, or a NodeList.\n   *\n   * @param {!Node|!Array<!Node>|!NodeList} nodes\n   */\n  function downgradeNodesInternal(nodes) {\n    /**\n     * Auxiliary function to downgrade a single node.\n     * @param  {!Node} node the node to be downgraded\n     */\n    var downgradeNode = function(node) {\n      createdComponents_.filter(function(item) {\n        return item.element_ === node;\n      }).forEach(deconstructComponentInternal);\n    };\n    if (nodes instanceof Array || nodes instanceof NodeList) {\n      for (var n = 0; n < nodes.length; n++) {\n        downgradeNode(nodes[n]);\n      }\n    } else if (nodes instanceof Node) {\n      downgradeNode(nodes);\n    } else {\n      throw new Error('Invalid argument provided to downgrade MDL nodes.');\n    }\n  }\n\n  // Now return the functions that should be made public with their publicly\n  // facing names...\n  return {\n    upgradeDom: upgradeDomInternal,\n    upgradeElement: upgradeElementInternal,\n    upgradeElements: upgradeElementsInternal,\n    upgradeAllRegistered: upgradeAllRegisteredInternal,\n    registerUpgradedCallback: registerUpgradedCallbackInternal,\n    register: registerInternal,\n    downgradeElements: downgradeNodesInternal\n  };\n})();\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *   constructor: Function,\n *   classAsString: string,\n *   cssClass: string,\n *   widget: (string|boolean|undefined)\n * }}\n */\ncomponentHandler.ComponentConfigPublic;  // jshint ignore:line\n\n/**\n * Describes the type of a registered component type managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *   constructor: !Function,\n *   className: string,\n *   cssClass: string,\n *   widget: (string|boolean),\n *   callbacks: !Array<function(!HTMLElement)>\n * }}\n */\ncomponentHandler.ComponentConfig;  // jshint ignore:line\n\n/**\n * Created component (i.e., upgraded element) type as managed by\n * componentHandler. Provided for benefit of the Closure compiler.\n *\n * @typedef {{\n *   element_: !HTMLElement,\n *   className: string,\n *   classAsString: string,\n *   cssClass: string,\n *   widget: string\n * }}\n */\ncomponentHandler.Component;  // jshint ignore:line\n\n// Export all symbols, for the benefit of Closure compiler.\n// No effect on uncompiled code.\ncomponentHandler['upgradeDom'] = componentHandler.upgradeDom;\ncomponentHandler['upgradeElement'] = componentHandler.upgradeElement;\ncomponentHandler['upgradeElements'] = componentHandler.upgradeElements;\ncomponentHandler['upgradeAllRegistered'] =\n    componentHandler.upgradeAllRegistered;\ncomponentHandler['registerUpgradedCallback'] =\n    componentHandler.registerUpgradedCallback;\ncomponentHandler['register'] = componentHandler.register;\ncomponentHandler['downgradeElements'] = componentHandler.downgradeElements;\nwindow.componentHandler = componentHandler;\nwindow['componentHandler'] = componentHandler;\n\nwindow.addEventListener('load', function() {\n  'use strict';\n\n  /**\n   * Performs a \"Cutting the mustard\" test. If the browser supports the features\n   * tested, adds a mdl-js class to the <html> element. It then upgrades all MDL\n   * components requiring JavaScript.\n   */\n  if ('classList' in document.createElement('div') &&\n      'querySelector' in document &&\n      'addEventListener' in window && Array.prototype.forEach) {\n    document.documentElement.classList.add('mdl-js');\n    componentHandler.upgradeAllRegistered();\n  } else {\n    /**\n     * Dummy function to avoid JS errors.\n     */\n    componentHandler.upgradeElement = function() {};\n    /**\n     * Dummy function to avoid JS errors.\n     */\n    componentHandler.register = function() {};\n  }\n});\n\n// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js\n// Adapted from https://gist.github.com/paulirish/1579671 which derived from\n// http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n// requestAnimationFrame polyfill by Erik Möller.\n// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon\n// MIT license\nif (!Date.now) {\n    /**\n   * Date.now polyfill.\n   * @return {number} the current Date\n   */\n    Date.now = function () {\n        return new Date().getTime();\n    };\n    Date['now'] = Date.now;\n}\nvar vendors = [\n    'webkit',\n    'moz'\n];\nfor (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n    var vp = vendors[i];\n    window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n    window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n    window['requestAnimationFrame'] = window.requestAnimationFrame;\n    window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\nif (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n    var lastTime = 0;\n    /**\n   * requestAnimationFrame polyfill.\n   * @param  {!Function} callback the callback function.\n   */\n    window.requestAnimationFrame = function (callback) {\n        var now = Date.now();\n        var nextTime = Math.max(lastTime + 16, now);\n        return setTimeout(function () {\n            callback(lastTime = nextTime);\n        }, nextTime - now);\n    };\n    window.cancelAnimationFrame = clearTimeout;\n    window['requestAnimationFrame'] = window.requestAnimationFrame;\n    window['cancelAnimationFrame'] = window.cancelAnimationFrame;\n}\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Button MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialButton = function MaterialButton(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialButton'] = MaterialButton;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialButton.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialButton.prototype.CssClasses_ = {\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER: 'mdl-button__ripple-container',\n    RIPPLE: 'mdl-ripple'\n};\n/**\n   * Handle blur of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialButton.prototype.blurHandler_ = function (event) {\n    if (event) {\n        this.element_.blur();\n    }\n};\n// Public methods.\n/**\n   * Disable button.\n   *\n   * @public\n   */\nMaterialButton.prototype.disable = function () {\n    this.element_.disabled = true;\n};\nMaterialButton.prototype['disable'] = MaterialButton.prototype.disable;\n/**\n   * Enable button.\n   *\n   * @public\n   */\nMaterialButton.prototype.enable = function () {\n    this.element_.disabled = false;\n};\nMaterialButton.prototype['enable'] = MaterialButton.prototype.enable;\n/**\n   * Initialize element.\n   */\nMaterialButton.prototype.init = function () {\n    if (this.element_) {\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            var rippleContainer = document.createElement('span');\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleElement_ = document.createElement('span');\n            this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);\n            rippleContainer.appendChild(this.rippleElement_);\n            this.boundRippleBlurHandler = this.blurHandler_.bind(this);\n            this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);\n            this.element_.appendChild(rippleContainer);\n        }\n        this.boundButtonBlurHandler = this.blurHandler_.bind(this);\n        this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);\n        this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialButton,\n    classAsString: 'MaterialButton',\n    cssClass: 'mdl-js-button',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Checkbox MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialCheckbox = function MaterialCheckbox(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialCheckbox'] = MaterialCheckbox;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialCheckbox.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialCheckbox.prototype.CssClasses_ = {\n    INPUT: 'mdl-checkbox__input',\n    BOX_OUTLINE: 'mdl-checkbox__box-outline',\n    FOCUS_HELPER: 'mdl-checkbox__focus-helper',\n    TICK_OUTLINE: 'mdl-checkbox__tick-outline',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked',\n    IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onChange_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialCheckbox.prototype.onMouseUp_ = function (event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialCheckbox.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialCheckbox.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.inputElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the inputs toggle state and update display.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.checkToggleState = function () {\n    if (this.inputElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialCheckbox.prototype['checkToggleState'] = MaterialCheckbox.prototype.checkToggleState;\n/**\n   * Check the inputs disabled state and update display.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.checkDisabled = function () {\n    if (this.inputElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialCheckbox.prototype['checkDisabled'] = MaterialCheckbox.prototype.checkDisabled;\n/**\n   * Disable checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.disable = function () {\n    this.inputElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;\n/**\n   * Enable checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.enable = function () {\n    this.inputElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;\n/**\n   * Check checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.check = function () {\n    this.inputElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;\n/**\n   * Uncheck checkbox.\n   *\n   * @public\n   */\nMaterialCheckbox.prototype.uncheck = function () {\n    this.inputElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;\n/**\n   * Initialize element.\n   */\nMaterialCheckbox.prototype.init = function () {\n    if (this.element_) {\n        this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        var boxOutline = document.createElement('span');\n        boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);\n        var tickContainer = document.createElement('span');\n        tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);\n        var tickOutline = document.createElement('span');\n        tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);\n        boxOutline.appendChild(tickOutline);\n        this.element_.appendChild(tickContainer);\n        this.element_.appendChild(boxOutline);\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            this.rippleContainerElement_ = document.createElement('span');\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n            this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            this.rippleContainerElement_.appendChild(ripple);\n            this.element_.appendChild(this.rippleContainerElement_);\n        }\n        this.boundInputOnChange = this.onChange_.bind(this);\n        this.boundInputOnFocus = this.onFocus_.bind(this);\n        this.boundInputOnBlur = this.onBlur_.bind(this);\n        this.boundElementMouseUp = this.onMouseUp_.bind(this);\n        this.inputElement_.addEventListener('change', this.boundInputOnChange);\n        this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n        this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n        this.element_.addEventListener('mouseup', this.boundElementMouseUp);\n        this.updateClasses_();\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialCheckbox,\n    classAsString: 'MaterialCheckbox',\n    cssClass: 'mdl-js-checkbox',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for icon toggle MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialIconToggle = function MaterialIconToggle(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialIconToggle'] = MaterialIconToggle;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialIconToggle.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialIconToggle.prototype.CssClasses_ = {\n    INPUT: 'mdl-icon-toggle__input',\n    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onChange_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialIconToggle.prototype.onMouseUp_ = function (event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialIconToggle.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialIconToggle.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.inputElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the inputs toggle state and update display.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.checkToggleState = function () {\n    if (this.inputElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialIconToggle.prototype['checkToggleState'] = MaterialIconToggle.prototype.checkToggleState;\n/**\n   * Check the inputs disabled state and update display.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.checkDisabled = function () {\n    if (this.inputElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialIconToggle.prototype['checkDisabled'] = MaterialIconToggle.prototype.checkDisabled;\n/**\n   * Disable icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.disable = function () {\n    this.inputElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['disable'] = MaterialIconToggle.prototype.disable;\n/**\n   * Enable icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.enable = function () {\n    this.inputElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;\n/**\n   * Check icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.check = function () {\n    this.inputElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;\n/**\n   * Uncheck icon toggle.\n   *\n   * @public\n   */\nMaterialIconToggle.prototype.uncheck = function () {\n    this.inputElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialIconToggle.prototype['uncheck'] = MaterialIconToggle.prototype.uncheck;\n/**\n   * Initialize element.\n   */\nMaterialIconToggle.prototype.init = function () {\n    if (this.element_) {\n        this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            this.rippleContainerElement_ = document.createElement('span');\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            this.boundRippleMouseUp = this.onMouseUp_.bind(this);\n            this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            this.rippleContainerElement_.appendChild(ripple);\n            this.element_.appendChild(this.rippleContainerElement_);\n        }\n        this.boundInputOnChange = this.onChange_.bind(this);\n        this.boundInputOnFocus = this.onFocus_.bind(this);\n        this.boundInputOnBlur = this.onBlur_.bind(this);\n        this.boundElementOnMouseUp = this.onMouseUp_.bind(this);\n        this.inputElement_.addEventListener('change', this.boundInputOnChange);\n        this.inputElement_.addEventListener('focus', this.boundInputOnFocus);\n        this.inputElement_.addEventListener('blur', this.boundInputOnBlur);\n        this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);\n        this.updateClasses_();\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialIconToggle,\n    classAsString: 'MaterialIconToggle',\n    cssClass: 'mdl-js-icon-toggle',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for dropdown MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialMenu = function MaterialMenu(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialMenu'] = MaterialMenu;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialMenu.prototype.Constant_ = {\n    // Total duration of the menu animation.\n    TRANSITION_DURATION_SECONDS: 0.3,\n    // The fraction of the total duration we want to use for menu item animations.\n    TRANSITION_DURATION_FRACTION: 0.8,\n    // How long the menu stays open after choosing an option (so the user can see\n    // the ripple).\n    CLOSE_TIMEOUT: 150\n};\n/**\n   * Keycodes, for code readability.\n   *\n   * @enum {number}\n   * @private\n   */\nMaterialMenu.prototype.Keycodes_ = {\n    ENTER: 13,\n    ESCAPE: 27,\n    SPACE: 32,\n    UP_ARROW: 38,\n    DOWN_ARROW: 40\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialMenu.prototype.CssClasses_ = {\n    CONTAINER: 'mdl-menu__container',\n    OUTLINE: 'mdl-menu__outline',\n    ITEM: 'mdl-menu__item',\n    ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE: 'mdl-ripple',\n    // Statuses\n    IS_UPGRADED: 'is-upgraded',\n    IS_VISIBLE: 'is-visible',\n    IS_ANIMATING: 'is-animating',\n    // Alignment options\n    BOTTOM_LEFT: 'mdl-menu--bottom-left',\n    // This is the default.\n    BOTTOM_RIGHT: 'mdl-menu--bottom-right',\n    TOP_LEFT: 'mdl-menu--top-left',\n    TOP_RIGHT: 'mdl-menu--top-right',\n    UNALIGNED: 'mdl-menu--unaligned'\n};\n/**\n   * Initialize element.\n   */\nMaterialMenu.prototype.init = function () {\n    if (this.element_) {\n        // Create container for the menu.\n        var container = document.createElement('div');\n        container.classList.add(this.CssClasses_.CONTAINER);\n        this.element_.parentElement.insertBefore(container, this.element_);\n        this.element_.parentElement.removeChild(this.element_);\n        container.appendChild(this.element_);\n        this.container_ = container;\n        // Create outline for the menu (shadow and background).\n        var outline = document.createElement('div');\n        outline.classList.add(this.CssClasses_.OUTLINE);\n        this.outline_ = outline;\n        container.insertBefore(outline, this.element_);\n        // Find the \"for\" element and bind events to it.\n        var forElId = this.element_.getAttribute('for') || this.element_.getAttribute('data-mdl-for');\n        var forEl = null;\n        if (forElId) {\n            forEl = document.getElementById(forElId);\n            if (forEl) {\n                this.forElement_ = forEl;\n                forEl.addEventListener('click', this.handleForClick_.bind(this));\n                forEl.addEventListener('keydown', this.handleForKeyboardEvent_.bind(this));\n            }\n        }\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n        this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);\n        this.boundItemClick_ = this.handleItemClick_.bind(this);\n        for (var i = 0; i < items.length; i++) {\n            // Add a listener to each menu item.\n            items[i].addEventListener('click', this.boundItemClick_);\n            // Add a tab index to each menu item.\n            items[i].tabIndex = '-1';\n            // Add a keyboard listener to each menu item.\n            items[i].addEventListener('keydown', this.boundItemKeydown_);\n        }\n        // Add ripple classes to each item, if the user has enabled ripples.\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            for (i = 0; i < items.length; i++) {\n                var item = items[i];\n                var rippleContainer = document.createElement('span');\n                rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);\n                var ripple = document.createElement('span');\n                ripple.classList.add(this.CssClasses_.RIPPLE);\n                rippleContainer.appendChild(ripple);\n                item.appendChild(rippleContainer);\n                item.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            }\n        }\n        // Copy alignment classes to the container, so the outline can use them.\n        if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {\n            this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n            this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n            this.outline_.classList.add(this.CssClasses_.TOP_LEFT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n            this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);\n        }\n        if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n            this.outline_.classList.add(this.CssClasses_.UNALIGNED);\n        }\n        container.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n/**\n   * Handles a click on the \"for\" element, by positioning the menu and then\n   * toggling it.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleForClick_ = function (evt) {\n    if (this.element_ && this.forElement_) {\n        var rect = this.forElement_.getBoundingClientRect();\n        var forRect = this.forElement_.parentElement.getBoundingClientRect();\n        if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n        } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n            // Position below the \"for\" element, aligned to its right.\n            this.container_.style.right = forRect.right - rect.right + 'px';\n            this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n        } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n            // Position above the \"for\" element, aligned to its left.\n            this.container_.style.left = this.forElement_.offsetLeft + 'px';\n            this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n        } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n            // Position above the \"for\" element, aligned to its right.\n            this.container_.style.right = forRect.right - rect.right + 'px';\n            this.container_.style.bottom = forRect.bottom - rect.top + 'px';\n        } else {\n            // Default: position below the \"for\" element, aligned to its left.\n            this.container_.style.left = this.forElement_.offsetLeft + 'px';\n            this.container_.style.top = this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';\n        }\n    }\n    this.toggle(evt);\n};\n/**\n   * Handles a keyboard event on the \"for\" element.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleForKeyboardEvent_ = function (evt) {\n    if (this.element_ && this.container_ && this.forElement_) {\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n        if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n            if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n                evt.preventDefault();\n                items[items.length - 1].focus();\n            } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n                evt.preventDefault();\n                items[0].focus();\n            }\n        }\n    }\n};\n/**\n   * Handles a keyboard event on an item.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleItemKeyboardEvent_ = function (evt) {\n    if (this.element_ && this.container_) {\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM + ':not([disabled])');\n        if (items && items.length > 0 && this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n            var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);\n            if (evt.keyCode === this.Keycodes_.UP_ARROW) {\n                evt.preventDefault();\n                if (currentIndex > 0) {\n                    items[currentIndex - 1].focus();\n                } else {\n                    items[items.length - 1].focus();\n                }\n            } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {\n                evt.preventDefault();\n                if (items.length > currentIndex + 1) {\n                    items[currentIndex + 1].focus();\n                } else {\n                    items[0].focus();\n                }\n            } else if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n                evt.preventDefault();\n                // Send mousedown and mouseup to trigger ripple.\n                var e = new MouseEvent('mousedown');\n                evt.target.dispatchEvent(e);\n                e = new MouseEvent('mouseup');\n                evt.target.dispatchEvent(e);\n                // Send click.\n                evt.target.click();\n            } else if (evt.keyCode === this.Keycodes_.ESCAPE) {\n                evt.preventDefault();\n                this.hide();\n            }\n        }\n    }\n};\n/**\n   * Handles a click event on an item.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialMenu.prototype.handleItemClick_ = function (evt) {\n    if (evt.target.hasAttribute('disabled')) {\n        evt.stopPropagation();\n    } else {\n        // Wait some time before closing menu, so the user can see the ripple.\n        this.closing_ = true;\n        window.setTimeout(function (evt) {\n            this.hide();\n            this.closing_ = false;\n        }.bind(this), this.Constant_.CLOSE_TIMEOUT);\n    }\n};\n/**\n   * Calculates the initial clip (for opening the menu) or final clip (for closing\n   * it), and applies it. This allows us to animate from or to the correct point,\n   * that is, the point it's aligned to in the \"for\" element.\n   *\n   * @param {number} height Height of the clip rectangle\n   * @param {number} width Width of the clip rectangle\n   * @private\n   */\nMaterialMenu.prototype.applyClip_ = function (height, width) {\n    if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {\n        // Do not clip.\n        this.element_.style.clip = '';\n    } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {\n        // Clip to the top right corner of the menu.\n        this.element_.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n    } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {\n        // Clip to the bottom left corner of the menu.\n        this.element_.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n    } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n        // Clip to the bottom right corner of the menu.\n        this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n    } else {\n        // Default: do not clip (same as clipping to the top left corner).\n        this.element_.style.clip = '';\n    }\n};\n/**\n   * Cleanup function to remove animation listeners.\n   *\n   * @param {Event} evt\n   * @private\n   */\nMaterialMenu.prototype.removeAnimationEndListener_ = function (evt) {\n    evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);\n};\n/**\n   * Adds an event listener to clean up after the animation ends.\n   *\n   * @private\n   */\nMaterialMenu.prototype.addAnimationEndListener_ = function () {\n    this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);\n    this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);\n};\n/**\n   * Displays the menu.\n   *\n   * @public\n   */\nMaterialMenu.prototype.show = function (evt) {\n    if (this.element_ && this.container_ && this.outline_) {\n        // Measure the inner element.\n        var height = this.element_.getBoundingClientRect().height;\n        var width = this.element_.getBoundingClientRect().width;\n        // Apply the inner element's size to the container and outline.\n        this.container_.style.width = width + 'px';\n        this.container_.style.height = height + 'px';\n        this.outline_.style.width = width + 'px';\n        this.outline_.style.height = height + 'px';\n        var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS * this.Constant_.TRANSITION_DURATION_FRACTION;\n        // Calculate transition delays for individual menu items, so that they fade\n        // in one at a time.\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n        for (var i = 0; i < items.length; i++) {\n            var itemDelay = null;\n            if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) || this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {\n                itemDelay = (height - items[i].offsetTop - items[i].offsetHeight) / height * transitionDuration + 's';\n            } else {\n                itemDelay = items[i].offsetTop / height * transitionDuration + 's';\n            }\n            items[i].style.transitionDelay = itemDelay;\n        }\n        // Apply the initial clip to the text before we start animating.\n        this.applyClip_(height, width);\n        // Wait for the next frame, turn on animation, and apply the final clip.\n        // Also make it visible. This triggers the transitions.\n        window.requestAnimationFrame(function () {\n            this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n            this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n            this.container_.classList.add(this.CssClasses_.IS_VISIBLE);\n        }.bind(this));\n        // Clean up after the animation is complete.\n        this.addAnimationEndListener_();\n        // Add a click listener to the document, to close the menu.\n        var callback = function (e) {\n            // Check to see if the document is processing the same event that\n            // displayed the menu in the first place. If so, do nothing.\n            // Also check to see if the menu is in the process of closing itself, and\n            // do nothing in that case.\n            // Also check if the clicked element is a menu item\n            // if so, do nothing.\n            if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {\n                document.removeEventListener('click', callback);\n                this.hide();\n            }\n        }.bind(this);\n        document.addEventListener('click', callback);\n    }\n};\nMaterialMenu.prototype['show'] = MaterialMenu.prototype.show;\n/**\n   * Hides the menu.\n   *\n   * @public\n   */\nMaterialMenu.prototype.hide = function () {\n    if (this.element_ && this.container_ && this.outline_) {\n        var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);\n        // Remove all transition delays; menu items fade out concurrently.\n        for (var i = 0; i < items.length; i++) {\n            items[i].style.removeProperty('transition-delay');\n        }\n        // Measure the inner element.\n        var rect = this.element_.getBoundingClientRect();\n        var height = rect.height;\n        var width = rect.width;\n        // Turn on animation, and apply the final clip. Also make invisible.\n        // This triggers the transitions.\n        this.element_.classList.add(this.CssClasses_.IS_ANIMATING);\n        this.applyClip_(height, width);\n        this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);\n        // Clean up after the animation is complete.\n        this.addAnimationEndListener_();\n    }\n};\nMaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;\n/**\n   * Displays or hides the menu, depending on current state.\n   *\n   * @public\n   */\nMaterialMenu.prototype.toggle = function (evt) {\n    if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {\n        this.hide();\n    } else {\n        this.show(evt);\n    }\n};\nMaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialMenu,\n    classAsString: 'MaterialMenu',\n    cssClass: 'mdl-js-menu',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Progress MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialProgress = function MaterialProgress(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialProgress'] = MaterialProgress;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialProgress.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialProgress.prototype.CssClasses_ = { INDETERMINATE_CLASS: 'mdl-progress__indeterminate' };\n/**\n   * Set the current progress of the progressbar.\n   *\n   * @param {number} p Percentage of the progress (0-100)\n   * @public\n   */\nMaterialProgress.prototype.setProgress = function (p) {\n    if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {\n        return;\n    }\n    this.progressbar_.style.width = p + '%';\n};\nMaterialProgress.prototype['setProgress'] = MaterialProgress.prototype.setProgress;\n/**\n   * Set the current progress of the buffer.\n   *\n   * @param {number} p Percentage of the buffer (0-100)\n   * @public\n   */\nMaterialProgress.prototype.setBuffer = function (p) {\n    this.bufferbar_.style.width = p + '%';\n    this.auxbar_.style.width = 100 - p + '%';\n};\nMaterialProgress.prototype['setBuffer'] = MaterialProgress.prototype.setBuffer;\n/**\n   * Initialize element.\n   */\nMaterialProgress.prototype.init = function () {\n    if (this.element_) {\n        var el = document.createElement('div');\n        el.className = 'progressbar bar bar1';\n        this.element_.appendChild(el);\n        this.progressbar_ = el;\n        el = document.createElement('div');\n        el.className = 'bufferbar bar bar2';\n        this.element_.appendChild(el);\n        this.bufferbar_ = el;\n        el = document.createElement('div');\n        el.className = 'auxbar bar bar3';\n        this.element_.appendChild(el);\n        this.auxbar_ = el;\n        this.progressbar_.style.width = '0%';\n        this.bufferbar_.style.width = '100%';\n        this.auxbar_.style.width = '0%';\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialProgress,\n    classAsString: 'MaterialProgress',\n    cssClass: 'mdl-js-progress',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Radio MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialRadio = function MaterialRadio(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialRadio'] = MaterialRadio;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialRadio.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialRadio.prototype.CssClasses_ = {\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked',\n    IS_UPGRADED: 'is-upgraded',\n    JS_RADIO: 'mdl-js-radio',\n    RADIO_BTN: 'mdl-radio__button',\n    RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',\n    RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-radio__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onChange_ = function (event) {\n    // Since other radio buttons don't get change events, we need to look for\n    // them to update their classes.\n    var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);\n    for (var i = 0; i < radios.length; i++) {\n        var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);\n        // Different name == different group, so no point updating those.\n        if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {\n            radios[i]['MaterialRadio'].updateClasses_();\n        }\n    }\n};\n/**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRadio.prototype.onMouseup_ = function (event) {\n    this.blur_();\n};\n/**\n   * Update classes.\n   *\n   * @private\n   */\nMaterialRadio.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialRadio.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.btnElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the components disabled state.\n   *\n   * @public\n   */\nMaterialRadio.prototype.checkDisabled = function () {\n    if (this.btnElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialRadio.prototype['checkDisabled'] = MaterialRadio.prototype.checkDisabled;\n/**\n   * Check the components toggled state.\n   *\n   * @public\n   */\nMaterialRadio.prototype.checkToggleState = function () {\n    if (this.btnElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialRadio.prototype['checkToggleState'] = MaterialRadio.prototype.checkToggleState;\n/**\n   * Disable radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.disable = function () {\n    this.btnElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;\n/**\n   * Enable radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.enable = function () {\n    this.btnElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;\n/**\n   * Check radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.check = function () {\n    this.btnElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['check'] = MaterialRadio.prototype.check;\n/**\n   * Uncheck radio.\n   *\n   * @public\n   */\nMaterialRadio.prototype.uncheck = function () {\n    this.btnElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;\n/**\n   * Initialize element.\n   */\nMaterialRadio.prototype.init = function () {\n    if (this.element_) {\n        this.btnElement_ = this.element_.querySelector('.' + this.CssClasses_.RADIO_BTN);\n        this.boundChangeHandler_ = this.onChange_.bind(this);\n        this.boundFocusHandler_ = this.onChange_.bind(this);\n        this.boundBlurHandler_ = this.onBlur_.bind(this);\n        this.boundMouseUpHandler_ = this.onMouseup_.bind(this);\n        var outerCircle = document.createElement('span');\n        outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);\n        var innerCircle = document.createElement('span');\n        innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);\n        this.element_.appendChild(outerCircle);\n        this.element_.appendChild(innerCircle);\n        var rippleContainer;\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            rippleContainer = document.createElement('span');\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            rippleContainer.appendChild(ripple);\n            this.element_.appendChild(rippleContainer);\n        }\n        this.btnElement_.addEventListener('change', this.boundChangeHandler_);\n        this.btnElement_.addEventListener('focus', this.boundFocusHandler_);\n        this.btnElement_.addEventListener('blur', this.boundBlurHandler_);\n        this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);\n        this.updateClasses_();\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialRadio,\n    classAsString: 'MaterialRadio',\n    cssClass: 'mdl-js-radio',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Slider MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialSlider = function MaterialSlider(element) {\n    this.element_ = element;\n    // Browser feature detection.\n    this.isIE_ = window.navigator.msPointerEnabled;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialSlider'] = MaterialSlider;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSlider.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSlider.prototype.CssClasses_ = {\n    IE_CONTAINER: 'mdl-slider__ie-container',\n    SLIDER_CONTAINER: 'mdl-slider__container',\n    BACKGROUND_FLEX: 'mdl-slider__background-flex',\n    BACKGROUND_LOWER: 'mdl-slider__background-lower',\n    BACKGROUND_UPPER: 'mdl-slider__background-upper',\n    IS_LOWEST_VALUE: 'is-lowest-value',\n    IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Handle input on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSlider.prototype.onInput_ = function (event) {\n    this.updateValueStyles_();\n};\n/**\n   * Handle change on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSlider.prototype.onChange_ = function (event) {\n    this.updateValueStyles_();\n};\n/**\n   * Handle mouseup on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSlider.prototype.onMouseUp_ = function (event) {\n    event.target.blur();\n};\n/**\n   * Handle mousedown on container element.\n   * This handler is purpose is to not require the use to click\n   * exactly on the 2px slider element, as FireFox seems to be very\n   * strict about this.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   * @suppress {missingProperties}\n   */\nMaterialSlider.prototype.onContainerMouseDown_ = function (event) {\n    // If this click is not on the parent element (but rather some child)\n    // ignore. It may still bubble up.\n    if (event.target !== this.element_.parentElement) {\n        return;\n    }\n    // Discard the original event and create a new event that\n    // is on the slider element.\n    event.preventDefault();\n    var newEvent = new MouseEvent('mousedown', {\n        target: event.target,\n        buttons: event.buttons,\n        clientX: event.clientX,\n        clientY: this.element_.getBoundingClientRect().y\n    });\n    this.element_.dispatchEvent(newEvent);\n};\n/**\n   * Handle updating of values.\n   *\n   * @private\n   */\nMaterialSlider.prototype.updateValueStyles_ = function () {\n    // Calculate and apply percentages to div structure behind slider.\n    var fraction = (this.element_.value - this.element_.min) / (this.element_.max - this.element_.min);\n    if (fraction === 0) {\n        this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);\n    }\n    if (!this.isIE_) {\n        this.backgroundLower_.style.flex = fraction;\n        this.backgroundLower_.style.webkitFlex = fraction;\n        this.backgroundUpper_.style.flex = 1 - fraction;\n        this.backgroundUpper_.style.webkitFlex = 1 - fraction;\n    }\n};\n// Public methods.\n/**\n   * Disable slider.\n   *\n   * @public\n   */\nMaterialSlider.prototype.disable = function () {\n    this.element_.disabled = true;\n};\nMaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;\n/**\n   * Enable slider.\n   *\n   * @public\n   */\nMaterialSlider.prototype.enable = function () {\n    this.element_.disabled = false;\n};\nMaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;\n/**\n   * Update slider value.\n   *\n   * @param {number} value The value to which to set the control (optional).\n   * @public\n   */\nMaterialSlider.prototype.change = function (value) {\n    if (typeof value !== 'undefined') {\n        this.element_.value = value;\n    }\n    this.updateValueStyles_();\n};\nMaterialSlider.prototype['change'] = MaterialSlider.prototype.change;\n/**\n   * Initialize element.\n   */\nMaterialSlider.prototype.init = function () {\n    if (this.element_) {\n        if (this.isIE_) {\n            // Since we need to specify a very large height in IE due to\n            // implementation limitations, we add a parent here that trims it down to\n            // a reasonable size.\n            var containerIE = document.createElement('div');\n            containerIE.classList.add(this.CssClasses_.IE_CONTAINER);\n            this.element_.parentElement.insertBefore(containerIE, this.element_);\n            this.element_.parentElement.removeChild(this.element_);\n            containerIE.appendChild(this.element_);\n        } else {\n            // For non-IE browsers, we need a div structure that sits behind the\n            // slider and allows us to style the left and right sides of it with\n            // different colors.\n            var container = document.createElement('div');\n            container.classList.add(this.CssClasses_.SLIDER_CONTAINER);\n            this.element_.parentElement.insertBefore(container, this.element_);\n            this.element_.parentElement.removeChild(this.element_);\n            container.appendChild(this.element_);\n            var backgroundFlex = document.createElement('div');\n            backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);\n            container.appendChild(backgroundFlex);\n            this.backgroundLower_ = document.createElement('div');\n            this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);\n            backgroundFlex.appendChild(this.backgroundLower_);\n            this.backgroundUpper_ = document.createElement('div');\n            this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);\n            backgroundFlex.appendChild(this.backgroundUpper_);\n        }\n        this.boundInputHandler = this.onInput_.bind(this);\n        this.boundChangeHandler = this.onChange_.bind(this);\n        this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n        this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);\n        this.element_.addEventListener('input', this.boundInputHandler);\n        this.element_.addEventListener('change', this.boundChangeHandler);\n        this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n        this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);\n        this.updateValueStyles_();\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSlider,\n    classAsString: 'MaterialSlider',\n    cssClass: 'mdl-js-slider',\n    widget: true\n});\n/**\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Snackbar MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialSnackbar = function MaterialSnackbar(element) {\n    this.element_ = element;\n    this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);\n    this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);\n    if (!this.textElement_) {\n        throw new Error('There must be a message element for a snackbar.');\n    }\n    if (!this.actionElement_) {\n        throw new Error('There must be an action element for a snackbar.');\n    }\n    this.active = false;\n    this.actionHandler_ = undefined;\n    this.message_ = undefined;\n    this.actionText_ = undefined;\n    this.queuedNotifications_ = [];\n    this.setActionHidden_(true);\n};\nwindow['MaterialSnackbar'] = MaterialSnackbar;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSnackbar.prototype.Constant_ = {\n    // The duration of the snackbar show/hide animation, in ms.\n    ANIMATION_LENGTH: 250\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSnackbar.prototype.cssClasses_ = {\n    SNACKBAR: 'mdl-snackbar',\n    MESSAGE: 'mdl-snackbar__text',\n    ACTION: 'mdl-snackbar__action',\n    ACTIVE: 'mdl-snackbar--active'\n};\n/**\n   * Display the snackbar.\n   *\n   * @private\n   */\nMaterialSnackbar.prototype.displaySnackbar_ = function () {\n    this.element_.setAttribute('aria-hidden', 'true');\n    if (this.actionHandler_) {\n        this.actionElement_.textContent = this.actionText_;\n        this.actionElement_.addEventListener('click', this.actionHandler_);\n        this.setActionHidden_(false);\n    }\n    this.textElement_.textContent = this.message_;\n    this.element_.classList.add(this.cssClasses_.ACTIVE);\n    this.element_.setAttribute('aria-hidden', 'false');\n    setTimeout(this.cleanup_.bind(this), this.timeout_);\n};\n/**\n   * Show the snackbar.\n   *\n   * @param {Object} data The data for the notification.\n   * @public\n   */\nMaterialSnackbar.prototype.showSnackbar = function (data) {\n    if (data === undefined) {\n        throw new Error('Please provide a data object with at least a message to display.');\n    }\n    if (data['message'] === undefined) {\n        throw new Error('Please provide a message to be displayed.');\n    }\n    if (data['actionHandler'] && !data['actionText']) {\n        throw new Error('Please provide action text with the handler.');\n    }\n    if (this.active) {\n        this.queuedNotifications_.push(data);\n    } else {\n        this.active = true;\n        this.message_ = data['message'];\n        if (data['timeout']) {\n            this.timeout_ = data['timeout'];\n        } else {\n            this.timeout_ = 2750;\n        }\n        if (data['actionHandler']) {\n            this.actionHandler_ = data['actionHandler'];\n        }\n        if (data['actionText']) {\n            this.actionText_ = data['actionText'];\n        }\n        this.displaySnackbar_();\n    }\n};\nMaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;\n/**\n   * Check if the queue has items within it.\n   * If it does, display the next entry.\n   *\n   * @private\n   */\nMaterialSnackbar.prototype.checkQueue_ = function () {\n    if (this.queuedNotifications_.length > 0) {\n        this.showSnackbar(this.queuedNotifications_.shift());\n    }\n};\n/**\n   * Cleanup the snackbar event listeners and accessiblity attributes.\n   *\n   * @private\n   */\nMaterialSnackbar.prototype.cleanup_ = function () {\n    this.element_.classList.remove(this.cssClasses_.ACTIVE);\n    setTimeout(function () {\n        this.element_.setAttribute('aria-hidden', 'true');\n        this.textElement_.textContent = '';\n        if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {\n            this.setActionHidden_(true);\n            this.actionElement_.textContent = '';\n            this.actionElement_.removeEventListener('click', this.actionHandler_);\n        }\n        this.actionHandler_ = undefined;\n        this.message_ = undefined;\n        this.actionText_ = undefined;\n        this.active = false;\n        this.checkQueue_();\n    }.bind(this), this.Constant_.ANIMATION_LENGTH);\n};\n/**\n   * Set the action handler hidden state.\n   *\n   * @param {boolean} value\n   * @private\n   */\nMaterialSnackbar.prototype.setActionHidden_ = function (value) {\n    if (value) {\n        this.actionElement_.setAttribute('aria-hidden', 'true');\n    } else {\n        this.actionElement_.removeAttribute('aria-hidden');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSnackbar,\n    classAsString: 'MaterialSnackbar',\n    cssClass: 'mdl-js-snackbar',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Spinner MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @param {HTMLElement} element The element that will be upgraded.\n   * @constructor\n   */\nvar MaterialSpinner = function MaterialSpinner(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialSpinner'] = MaterialSpinner;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSpinner.prototype.Constant_ = { MDL_SPINNER_LAYER_COUNT: 4 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSpinner.prototype.CssClasses_ = {\n    MDL_SPINNER_LAYER: 'mdl-spinner__layer',\n    MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',\n    MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',\n    MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',\n    MDL_SPINNER_LEFT: 'mdl-spinner__left',\n    MDL_SPINNER_RIGHT: 'mdl-spinner__right'\n};\n/**\n   * Auxiliary method to create a spinner layer.\n   *\n   * @param {number} index Index of the layer to be created.\n   * @public\n   */\nMaterialSpinner.prototype.createLayer = function (index) {\n    var layer = document.createElement('div');\n    layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);\n    layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);\n    var leftClipper = document.createElement('div');\n    leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n    leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);\n    var gapPatch = document.createElement('div');\n    gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);\n    var rightClipper = document.createElement('div');\n    rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);\n    rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);\n    var circleOwners = [\n        leftClipper,\n        gapPatch,\n        rightClipper\n    ];\n    for (var i = 0; i < circleOwners.length; i++) {\n        var circle = document.createElement('div');\n        circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);\n        circleOwners[i].appendChild(circle);\n    }\n    layer.appendChild(leftClipper);\n    layer.appendChild(gapPatch);\n    layer.appendChild(rightClipper);\n    this.element_.appendChild(layer);\n};\nMaterialSpinner.prototype['createLayer'] = MaterialSpinner.prototype.createLayer;\n/**\n   * Stops the spinner animation.\n   * Public method for users who need to stop the spinner for any reason.\n   *\n   * @public\n   */\nMaterialSpinner.prototype.stop = function () {\n    this.element_.classList.remove('is-active');\n};\nMaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;\n/**\n   * Starts the spinner animation.\n   * Public method for users who need to manually start the spinner for any reason\n   * (instead of just adding the 'is-active' class to their markup).\n   *\n   * @public\n   */\nMaterialSpinner.prototype.start = function () {\n    this.element_.classList.add('is-active');\n};\nMaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;\n/**\n   * Initialize element.\n   */\nMaterialSpinner.prototype.init = function () {\n    if (this.element_) {\n        for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {\n            this.createLayer(i);\n        }\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSpinner,\n    classAsString: 'MaterialSpinner',\n    cssClass: 'mdl-js-spinner',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Checkbox MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialSwitch = function MaterialSwitch(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialSwitch'] = MaterialSwitch;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialSwitch.prototype.Constant_ = { TINY_TIMEOUT: 0.001 };\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialSwitch.prototype.CssClasses_ = {\n    INPUT: 'mdl-switch__input',\n    TRACK: 'mdl-switch__track',\n    THUMB: 'mdl-switch__thumb',\n    FOCUS_HELPER: 'mdl-switch__focus-helper',\n    RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE_CONTAINER: 'mdl-switch__ripple-container',\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE: 'mdl-ripple',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_CHECKED: 'is-checked'\n};\n/**\n   * Handle change of state.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onChange_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus of element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle mouseup.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialSwitch.prototype.onMouseUp_ = function (event) {\n    this.blur_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialSwitch.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkToggleState();\n};\n/**\n   * Add blur.\n   *\n   * @private\n   */\nMaterialSwitch.prototype.blur_ = function () {\n    // TODO: figure out why there's a focus event being fired after our blur,\n    // so that we can avoid this hack.\n    window.setTimeout(function () {\n        this.inputElement_.blur();\n    }.bind(this), this.Constant_.TINY_TIMEOUT);\n};\n// Public methods.\n/**\n   * Check the components disabled state.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.checkDisabled = function () {\n    if (this.inputElement_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialSwitch.prototype['checkDisabled'] = MaterialSwitch.prototype.checkDisabled;\n/**\n   * Check the components toggled state.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.checkToggleState = function () {\n    if (this.inputElement_.checked) {\n        this.element_.classList.add(this.CssClasses_.IS_CHECKED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_CHECKED);\n    }\n};\nMaterialSwitch.prototype['checkToggleState'] = MaterialSwitch.prototype.checkToggleState;\n/**\n   * Disable switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.disable = function () {\n    this.inputElement_.disabled = true;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;\n/**\n   * Enable switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.enable = function () {\n    this.inputElement_.disabled = false;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;\n/**\n   * Activate switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.on = function () {\n    this.inputElement_.checked = true;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;\n/**\n   * Deactivate switch.\n   *\n   * @public\n   */\nMaterialSwitch.prototype.off = function () {\n    this.inputElement_.checked = false;\n    this.updateClasses_();\n};\nMaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;\n/**\n   * Initialize element.\n   */\nMaterialSwitch.prototype.init = function () {\n    if (this.element_) {\n        this.inputElement_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        var track = document.createElement('div');\n        track.classList.add(this.CssClasses_.TRACK);\n        var thumb = document.createElement('div');\n        thumb.classList.add(this.CssClasses_.THUMB);\n        var focusHelper = document.createElement('span');\n        focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);\n        thumb.appendChild(focusHelper);\n        this.element_.appendChild(track);\n        this.element_.appendChild(thumb);\n        this.boundMouseUpHandler = this.onMouseUp_.bind(this);\n        if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {\n            this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            this.rippleContainerElement_ = document.createElement('span');\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);\n            this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);\n            this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);\n            var ripple = document.createElement('span');\n            ripple.classList.add(this.CssClasses_.RIPPLE);\n            this.rippleContainerElement_.appendChild(ripple);\n            this.element_.appendChild(this.rippleContainerElement_);\n        }\n        this.boundChangeHandler = this.onChange_.bind(this);\n        this.boundFocusHandler = this.onFocus_.bind(this);\n        this.boundBlurHandler = this.onBlur_.bind(this);\n        this.inputElement_.addEventListener('change', this.boundChangeHandler);\n        this.inputElement_.addEventListener('focus', this.boundFocusHandler);\n        this.inputElement_.addEventListener('blur', this.boundBlurHandler);\n        this.element_.addEventListener('mouseup', this.boundMouseUpHandler);\n        this.updateClasses_();\n        this.element_.classList.add('is-upgraded');\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialSwitch,\n    classAsString: 'MaterialSwitch',\n    cssClass: 'mdl-js-switch',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Tabs MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\nvar MaterialTabs = function MaterialTabs(element) {\n    // Stores the HTML element.\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialTabs'] = MaterialTabs;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTabs.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTabs.prototype.CssClasses_ = {\n    TAB_CLASS: 'mdl-tabs__tab',\n    PANEL_CLASS: 'mdl-tabs__panel',\n    ACTIVE_CLASS: 'is-active',\n    UPGRADED_CLASS: 'is-upgraded',\n    MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',\n    MDL_RIPPLE: 'mdl-ripple',\n    MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'\n};\n/**\n   * Handle clicks to a tabs component\n   *\n   * @private\n   */\nMaterialTabs.prototype.initTabs_ = function () {\n    if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n        this.element_.classList.add(this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);\n    }\n    // Select element tabs, document panels\n    this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);\n    this.panels_ = this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);\n    // Create new tabs for each tab element\n    for (var i = 0; i < this.tabs_.length; i++) {\n        new MaterialTab(this.tabs_[i], this);\n    }\n    this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);\n};\n/**\n   * Reset tab state, dropping active classes\n   *\n   * @private\n   */\nMaterialTabs.prototype.resetTabState_ = function () {\n    for (var k = 0; k < this.tabs_.length; k++) {\n        this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n    }\n};\n/**\n   * Reset panel state, droping active classes\n   *\n   * @private\n   */\nMaterialTabs.prototype.resetPanelState_ = function () {\n    for (var j = 0; j < this.panels_.length; j++) {\n        this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);\n    }\n};\n/**\n   * Initialize element.\n   */\nMaterialTabs.prototype.init = function () {\n    if (this.element_) {\n        this.initTabs_();\n    }\n};\n/**\n   * Constructor for an individual tab.\n   *\n   * @constructor\n   * @param {Element} tab The HTML element for the tab.\n   * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.\n   */\nfunction MaterialTab(tab, ctx) {\n    if (tab) {\n        if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {\n            var rippleContainer = document.createElement('span');\n            rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);\n            rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);\n            var ripple = document.createElement('span');\n            ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);\n            rippleContainer.appendChild(ripple);\n            tab.appendChild(rippleContainer);\n        }\n        tab.addEventListener('click', function (e) {\n            e.preventDefault();\n            var href = tab.href.split('#')[1];\n            var panel = ctx.element_.querySelector('#' + href);\n            ctx.resetTabState_();\n            ctx.resetPanelState_();\n            tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n            panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);\n        });\n    }\n}\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialTabs,\n    classAsString: 'MaterialTabs',\n    cssClass: 'mdl-js-tabs'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Textfield MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialTextfield = function MaterialTextfield(element) {\n    this.element_ = element;\n    this.maxRows = this.Constant_.NO_MAX_ROWS;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialTextfield'] = MaterialTextfield;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialTextfield.prototype.Constant_ = {\n    NO_MAX_ROWS: -1,\n    MAX_ROWS_ATTRIBUTE: 'maxrows'\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTextfield.prototype.CssClasses_ = {\n    LABEL: 'mdl-textfield__label',\n    INPUT: 'mdl-textfield__input',\n    IS_DIRTY: 'is-dirty',\n    IS_FOCUSED: 'is-focused',\n    IS_DISABLED: 'is-disabled',\n    IS_INVALID: 'is-invalid',\n    IS_UPGRADED: 'is-upgraded',\n    HAS_PLACEHOLDER: 'has-placeholder'\n};\n/**\n   * Handle input being entered.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onKeyDown_ = function (event) {\n    var currentRowCount = event.target.value.split('\\n').length;\n    if (event.keyCode === 13) {\n        if (currentRowCount >= this.maxRows) {\n            event.preventDefault();\n        }\n    }\n};\n/**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onFocus_ = function (event) {\n    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onBlur_ = function (event) {\n    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n};\n/**\n   * Handle reset event from out side.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTextfield.prototype.onReset_ = function (event) {\n    this.updateClasses_();\n};\n/**\n   * Handle class updates.\n   *\n   * @private\n   */\nMaterialTextfield.prototype.updateClasses_ = function () {\n    this.checkDisabled();\n    this.checkValidity();\n    this.checkDirty();\n    this.checkFocus();\n};\n// Public methods.\n/**\n   * Check the disabled state and update field accordingly.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.checkDisabled = function () {\n    if (this.input_.disabled) {\n        this.element_.classList.add(this.CssClasses_.IS_DISABLED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DISABLED);\n    }\n};\nMaterialTextfield.prototype['checkDisabled'] = MaterialTextfield.prototype.checkDisabled;\n/**\n  * Check the focus state and update field accordingly.\n  *\n  * @public\n  */\nMaterialTextfield.prototype.checkFocus = function () {\n    if (Boolean(this.element_.querySelector(':focus'))) {\n        this.element_.classList.add(this.CssClasses_.IS_FOCUSED);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);\n    }\n};\nMaterialTextfield.prototype['checkFocus'] = MaterialTextfield.prototype.checkFocus;\n/**\n   * Check the validity state and update field accordingly.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.checkValidity = function () {\n    if (this.input_.validity) {\n        if (this.input_.validity.valid) {\n            this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n        } else {\n            this.element_.classList.add(this.CssClasses_.IS_INVALID);\n        }\n    }\n};\nMaterialTextfield.prototype['checkValidity'] = MaterialTextfield.prototype.checkValidity;\n/**\n   * Check the dirty state and update field accordingly.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.checkDirty = function () {\n    if (this.input_.value && this.input_.value.length > 0) {\n        this.element_.classList.add(this.CssClasses_.IS_DIRTY);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_DIRTY);\n    }\n};\nMaterialTextfield.prototype['checkDirty'] = MaterialTextfield.prototype.checkDirty;\n/**\n   * Disable text field.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.disable = function () {\n    this.input_.disabled = true;\n    this.updateClasses_();\n};\nMaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;\n/**\n   * Enable text field.\n   *\n   * @public\n   */\nMaterialTextfield.prototype.enable = function () {\n    this.input_.disabled = false;\n    this.updateClasses_();\n};\nMaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;\n/**\n   * Update text field value.\n   *\n   * @param {string} value The value to which to set the control (optional).\n   * @public\n   */\nMaterialTextfield.prototype.change = function (value) {\n    this.input_.value = value || '';\n    this.updateClasses_();\n};\nMaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;\n/**\n   * Initialize element.\n   */\nMaterialTextfield.prototype.init = function () {\n    if (this.element_) {\n        this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);\n        this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);\n        if (this.input_) {\n            if (this.input_.hasAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE)) {\n                this.maxRows = parseInt(this.input_.getAttribute(this.Constant_.MAX_ROWS_ATTRIBUTE), 10);\n                if (isNaN(this.maxRows)) {\n                    this.maxRows = this.Constant_.NO_MAX_ROWS;\n                }\n            }\n            if (this.input_.hasAttribute('placeholder')) {\n                this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);\n            }\n            this.boundUpdateClassesHandler = this.updateClasses_.bind(this);\n            this.boundFocusHandler = this.onFocus_.bind(this);\n            this.boundBlurHandler = this.onBlur_.bind(this);\n            this.boundResetHandler = this.onReset_.bind(this);\n            this.input_.addEventListener('input', this.boundUpdateClassesHandler);\n            this.input_.addEventListener('focus', this.boundFocusHandler);\n            this.input_.addEventListener('blur', this.boundBlurHandler);\n            this.input_.addEventListener('reset', this.boundResetHandler);\n            if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {\n                // TODO: This should handle pasting multi line text.\n                // Currently doesn't.\n                this.boundKeyDownHandler = this.onKeyDown_.bind(this);\n                this.input_.addEventListener('keydown', this.boundKeyDownHandler);\n            }\n            var invalid = this.element_.classList.contains(this.CssClasses_.IS_INVALID);\n            this.updateClasses_();\n            this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n            if (invalid) {\n                this.element_.classList.add(this.CssClasses_.IS_INVALID);\n            }\n            if (this.input_.hasAttribute('autofocus')) {\n                this.element_.focus();\n                this.checkFocus();\n            }\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialTextfield,\n    classAsString: 'MaterialTextfield',\n    cssClass: 'mdl-js-textfield',\n    widget: true\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Tooltip MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialTooltip = function MaterialTooltip(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialTooltip'] = MaterialTooltip;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialTooltip.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialTooltip.prototype.CssClasses_ = {\n    IS_ACTIVE: 'is-active',\n    BOTTOM: 'mdl-tooltip--bottom',\n    LEFT: 'mdl-tooltip--left',\n    RIGHT: 'mdl-tooltip--right',\n    TOP: 'mdl-tooltip--top'\n};\n/**\n   * Handle mouseenter for tooltip.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialTooltip.prototype.handleMouseEnter_ = function (event) {\n    var props = event.target.getBoundingClientRect();\n    var left = props.left + props.width / 2;\n    var top = props.top + props.height / 2;\n    var marginLeft = -1 * (this.element_.offsetWidth / 2);\n    var marginTop = -1 * (this.element_.offsetHeight / 2);\n    if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n        left = props.width / 2;\n        if (top + marginTop < 0) {\n            this.element_.style.top = 0;\n            this.element_.style.marginTop = 0;\n        } else {\n            this.element_.style.top = top + 'px';\n            this.element_.style.marginTop = marginTop + 'px';\n        }\n    } else {\n        if (left + marginLeft < 0) {\n            this.element_.style.left = 0;\n            this.element_.style.marginLeft = 0;\n        } else {\n            this.element_.style.left = left + 'px';\n            this.element_.style.marginLeft = marginLeft + 'px';\n        }\n    }\n    if (this.element_.classList.contains(this.CssClasses_.TOP)) {\n        this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';\n    } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {\n        this.element_.style.left = props.left + props.width + 10 + 'px';\n    } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {\n        this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';\n    } else {\n        this.element_.style.top = props.top + props.height + 10 + 'px';\n    }\n    this.element_.classList.add(this.CssClasses_.IS_ACTIVE);\n};\n/**\n   * Handle mouseleave for tooltip.\n   *\n   * @private\n   */\nMaterialTooltip.prototype.handleMouseLeave_ = function () {\n    this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);\n};\n/**\n   * Initialize element.\n   */\nMaterialTooltip.prototype.init = function () {\n    if (this.element_) {\n        var forElId = this.element_.getAttribute('for');\n        if (forElId) {\n            this.forElement_ = document.getElementById(forElId);\n        }\n        if (this.forElement_) {\n            // It's left here because it prevents accidental text selection on Android\n            if (!this.forElement_.hasAttribute('tabindex')) {\n                this.forElement_.setAttribute('tabindex', '0');\n            }\n            this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);\n            this.boundMouseLeaveHandler = this.handleMouseLeave_.bind(this);\n            this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);\n            this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);\n            this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveHandler, false);\n            window.addEventListener('touchstart', this.boundMouseLeaveHandler);\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialTooltip,\n    classAsString: 'MaterialTooltip',\n    cssClass: 'mdl-tooltip'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Layout MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialLayout = function MaterialLayout(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialLayout'] = MaterialLayout;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialLayout.prototype.Constant_ = {\n    MAX_WIDTH: '(max-width: 1024px)',\n    TAB_SCROLL_PIXELS: 100,\n    RESIZE_TIMEOUT: 100,\n    MENU_ICON: '&#xE5D2;',\n    CHEVRON_LEFT: 'chevron_left',\n    CHEVRON_RIGHT: 'chevron_right'\n};\n/**\n   * Keycodes, for code readability.\n   *\n   * @enum {number}\n   * @private\n   */\nMaterialLayout.prototype.Keycodes_ = {\n    ENTER: 13,\n    ESCAPE: 27,\n    SPACE: 32\n};\n/**\n   * Modes.\n   *\n   * @enum {number}\n   * @private\n   */\nMaterialLayout.prototype.Mode_ = {\n    STANDARD: 0,\n    SEAMED: 1,\n    WATERFALL: 2,\n    SCROLL: 3\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialLayout.prototype.CssClasses_ = {\n    CONTAINER: 'mdl-layout__container',\n    HEADER: 'mdl-layout__header',\n    DRAWER: 'mdl-layout__drawer',\n    CONTENT: 'mdl-layout__content',\n    DRAWER_BTN: 'mdl-layout__drawer-button',\n    ICON: 'material-icons',\n    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',\n    RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',\n    RIPPLE: 'mdl-ripple',\n    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    HEADER_SEAMED: 'mdl-layout__header--seamed',\n    HEADER_WATERFALL: 'mdl-layout__header--waterfall',\n    HEADER_SCROLL: 'mdl-layout__header--scroll',\n    FIXED_HEADER: 'mdl-layout--fixed-header',\n    OBFUSCATOR: 'mdl-layout__obfuscator',\n    TAB_BAR: 'mdl-layout__tab-bar',\n    TAB_CONTAINER: 'mdl-layout__tab-bar-container',\n    TAB: 'mdl-layout__tab',\n    TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',\n    TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',\n    TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',\n    PANEL: 'mdl-layout__tab-panel',\n    HAS_DRAWER: 'has-drawer',\n    HAS_TABS: 'has-tabs',\n    HAS_SCROLLING_HEADER: 'has-scrolling-header',\n    CASTING_SHADOW: 'is-casting-shadow',\n    IS_COMPACT: 'is-compact',\n    IS_SMALL_SCREEN: 'is-small-screen',\n    IS_DRAWER_OPEN: 'is-visible',\n    IS_ACTIVE: 'is-active',\n    IS_UPGRADED: 'is-upgraded',\n    IS_ANIMATING: 'is-animating',\n    ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',\n    ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'\n};\n/**\n   * Handles scrolling on the content.\n   *\n   * @private\n   */\nMaterialLayout.prototype.contentScrollHandler_ = function () {\n    if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {\n        return;\n    }\n    var headerVisible = !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) || this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);\n    if (this.content_.scrollTop > 0 && !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n        this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n        this.header_.classList.add(this.CssClasses_.IS_COMPACT);\n        if (headerVisible) {\n            this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n        }\n    } else if (this.content_.scrollTop <= 0 && this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n        this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n        this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n        if (headerVisible) {\n            this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n        }\n    }\n};\n/**\n   * Handles a keyboard event on the drawer.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialLayout.prototype.keyboardEventHandler_ = function (evt) {\n    // Only react when the drawer is open.\n    if (evt.keyCode === this.Keycodes_.ESCAPE && this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n        this.toggleDrawer();\n    }\n};\n/**\n   * Handles changes in screen size.\n   *\n   * @private\n   */\nMaterialLayout.prototype.screenSizeHandler_ = function () {\n    if (this.screenSizeMediaQuery_.matches) {\n        this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);\n    } else {\n        this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);\n        // Collapse drawer (if any) when moving to a large screen size.\n        if (this.drawer_) {\n            this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n            this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);\n        }\n    }\n};\n/**\n   * Handles events of drawer button.\n   *\n   * @param {Event} evt The event that fired.\n   * @private\n   */\nMaterialLayout.prototype.drawerToggleHandler_ = function (evt) {\n    if (evt && evt.type === 'keydown') {\n        if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {\n            // prevent scrolling in drawer nav\n            evt.preventDefault();\n        } else {\n            // prevent other keys\n            return;\n        }\n    }\n    this.toggleDrawer();\n};\n/**\n   * Handles (un)setting the `is-animating` class\n   *\n   * @private\n   */\nMaterialLayout.prototype.headerTransitionEndHandler_ = function () {\n    this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);\n};\n/**\n   * Handles expanding the header on click\n   *\n   * @private\n   */\nMaterialLayout.prototype.headerClickHandler_ = function () {\n    if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {\n        this.header_.classList.remove(this.CssClasses_.IS_COMPACT);\n        this.header_.classList.add(this.CssClasses_.IS_ANIMATING);\n    }\n};\n/**\n   * Reset tab state, dropping active classes\n   *\n   * @private\n   */\nMaterialLayout.prototype.resetTabState_ = function (tabBar) {\n    for (var k = 0; k < tabBar.length; k++) {\n        tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n   * Reset panel state, droping active classes\n   *\n   * @private\n   */\nMaterialLayout.prototype.resetPanelState_ = function (panels) {\n    for (var j = 0; j < panels.length; j++) {\n        panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);\n    }\n};\n/**\n  * Toggle drawer state\n  *\n  * @public\n  */\nMaterialLayout.prototype.toggleDrawer = function () {\n    var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n    this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n    this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);\n    // Set accessibility properties.\n    if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {\n        this.drawer_.setAttribute('aria-hidden', 'false');\n        drawerButton.setAttribute('aria-expanded', 'true');\n    } else {\n        this.drawer_.setAttribute('aria-hidden', 'true');\n        drawerButton.setAttribute('aria-expanded', 'false');\n    }\n};\nMaterialLayout.prototype['toggleDrawer'] = MaterialLayout.prototype.toggleDrawer;\n/**\n   * Initialize element.\n   */\nMaterialLayout.prototype.init = function () {\n    if (this.element_) {\n        var container = document.createElement('div');\n        container.classList.add(this.CssClasses_.CONTAINER);\n        var focusedElement = this.element_.querySelector(':focus');\n        this.element_.parentElement.insertBefore(container, this.element_);\n        this.element_.parentElement.removeChild(this.element_);\n        container.appendChild(this.element_);\n        if (focusedElement) {\n            focusedElement.focus();\n        }\n        var directChildren = this.element_.childNodes;\n        var numChildren = directChildren.length;\n        for (var c = 0; c < numChildren; c++) {\n            var child = directChildren[c];\n            if (child.classList && child.classList.contains(this.CssClasses_.HEADER)) {\n                this.header_ = child;\n            }\n            if (child.classList && child.classList.contains(this.CssClasses_.DRAWER)) {\n                this.drawer_ = child;\n            }\n            if (child.classList && child.classList.contains(this.CssClasses_.CONTENT)) {\n                this.content_ = child;\n            }\n        }\n        window.addEventListener('pageshow', function (e) {\n            if (e.persisted) {\n                // when page is loaded from back/forward cache\n                // trigger repaint to let layout scroll in safari\n                this.element_.style.overflowY = 'hidden';\n                requestAnimationFrame(function () {\n                    this.element_.style.overflowY = '';\n                }.bind(this));\n            }\n        }.bind(this), false);\n        if (this.header_) {\n            this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);\n        }\n        var mode = this.Mode_.STANDARD;\n        if (this.header_) {\n            if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {\n                mode = this.Mode_.SEAMED;\n            } else if (this.header_.classList.contains(this.CssClasses_.HEADER_WATERFALL)) {\n                mode = this.Mode_.WATERFALL;\n                this.header_.addEventListener('transitionend', this.headerTransitionEndHandler_.bind(this));\n                this.header_.addEventListener('click', this.headerClickHandler_.bind(this));\n            } else if (this.header_.classList.contains(this.CssClasses_.HEADER_SCROLL)) {\n                mode = this.Mode_.SCROLL;\n                container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);\n            }\n            if (mode === this.Mode_.STANDARD) {\n                this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);\n                if (this.tabBar_) {\n                    this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);\n                }\n            } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {\n                this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n                if (this.tabBar_) {\n                    this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);\n                }\n            } else if (mode === this.Mode_.WATERFALL) {\n                // Add and remove shadows depending on scroll position.\n                // Also add/remove auxiliary class for styling of the compact version of\n                // the header.\n                this.content_.addEventListener('scroll', this.contentScrollHandler_.bind(this));\n                this.contentScrollHandler_();\n            }\n        }\n        // Add drawer toggling button to our layout, if we have an openable drawer.\n        if (this.drawer_) {\n            var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);\n            if (!drawerButton) {\n                drawerButton = document.createElement('div');\n                drawerButton.setAttribute('aria-expanded', 'false');\n                drawerButton.setAttribute('role', 'button');\n                drawerButton.setAttribute('tabindex', '0');\n                drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);\n                var drawerButtonIcon = document.createElement('i');\n                drawerButtonIcon.classList.add(this.CssClasses_.ICON);\n                drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;\n                drawerButton.appendChild(drawerButtonIcon);\n            }\n            if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {\n                //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.\n                drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);\n            } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {\n                //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.\n                drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);\n            }\n            drawerButton.addEventListener('click', this.drawerToggleHandler_.bind(this));\n            drawerButton.addEventListener('keydown', this.drawerToggleHandler_.bind(this));\n            // Add a class if the layout has a drawer, for altering the left padding.\n            // Adds the HAS_DRAWER to the elements since this.header_ may or may\n            // not be present.\n            this.element_.classList.add(this.CssClasses_.HAS_DRAWER);\n            // If we have a fixed header, add the button to the header rather than\n            // the layout.\n            if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {\n                this.header_.insertBefore(drawerButton, this.header_.firstChild);\n            } else {\n                this.element_.insertBefore(drawerButton, this.content_);\n            }\n            var obfuscator = document.createElement('div');\n            obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);\n            this.element_.appendChild(obfuscator);\n            obfuscator.addEventListener('click', this.drawerToggleHandler_.bind(this));\n            this.obfuscator_ = obfuscator;\n            this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));\n            this.drawer_.setAttribute('aria-hidden', 'true');\n        }\n        // Keep an eye on screen size, and add/remove auxiliary class for styling\n        // of small screens.\n        this.screenSizeMediaQuery_ = window.matchMedia(this.Constant_.MAX_WIDTH);\n        this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));\n        this.screenSizeHandler_();\n        // Initialize tabs, if any.\n        if (this.header_ && this.tabBar_) {\n            this.element_.classList.add(this.CssClasses_.HAS_TABS);\n            var tabContainer = document.createElement('div');\n            tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);\n            this.header_.insertBefore(tabContainer, this.tabBar_);\n            this.header_.removeChild(this.tabBar_);\n            var leftButton = document.createElement('div');\n            leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n            leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);\n            var leftButtonIcon = document.createElement('i');\n            leftButtonIcon.classList.add(this.CssClasses_.ICON);\n            leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;\n            leftButton.appendChild(leftButtonIcon);\n            leftButton.addEventListener('click', function () {\n                this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;\n            }.bind(this));\n            var rightButton = document.createElement('div');\n            rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);\n            rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);\n            var rightButtonIcon = document.createElement('i');\n            rightButtonIcon.classList.add(this.CssClasses_.ICON);\n            rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;\n            rightButton.appendChild(rightButtonIcon);\n            rightButton.addEventListener('click', function () {\n                this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;\n            }.bind(this));\n            tabContainer.appendChild(leftButton);\n            tabContainer.appendChild(this.tabBar_);\n            tabContainer.appendChild(rightButton);\n            // Add and remove tab buttons depending on scroll position and total\n            // window size.\n            var tabUpdateHandler = function () {\n                if (this.tabBar_.scrollLeft > 0) {\n                    leftButton.classList.add(this.CssClasses_.IS_ACTIVE);\n                } else {\n                    leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n                }\n                if (this.tabBar_.scrollLeft < this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {\n                    rightButton.classList.add(this.CssClasses_.IS_ACTIVE);\n                } else {\n                    rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);\n                }\n            }.bind(this);\n            this.tabBar_.addEventListener('scroll', tabUpdateHandler);\n            tabUpdateHandler();\n            // Update tabs when the window resizes.\n            var windowResizeHandler = function () {\n                // Use timeouts to make sure it doesn't happen too often.\n                if (this.resizeTimeoutId_) {\n                    clearTimeout(this.resizeTimeoutId_);\n                }\n                this.resizeTimeoutId_ = setTimeout(function () {\n                    tabUpdateHandler();\n                    this.resizeTimeoutId_ = null;\n                }.bind(this), this.Constant_.RESIZE_TIMEOUT);\n            }.bind(this);\n            window.addEventListener('resize', windowResizeHandler);\n            if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {\n                this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);\n            }\n            // Select element tabs, document panels\n            var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);\n            var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);\n            // Create new tabs for each tab element\n            for (var i = 0; i < tabs.length; i++) {\n                new MaterialLayoutTab(tabs[i], tabs, panels, this);\n            }\n        }\n        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n    }\n};\n/**\n   * Constructor for an individual tab.\n   *\n   * @constructor\n   * @param {HTMLElement} tab The HTML element for the tab.\n   * @param {!Array<HTMLElement>} tabs Array with HTML elements for all tabs.\n   * @param {!Array<HTMLElement>} panels Array with HTML elements for all panels.\n   * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.\n   */\nfunction MaterialLayoutTab(tab, tabs, panels, layout) {\n    /**\n     * Auxiliary method to programmatically select a tab in the UI.\n     */\n    function selectTab() {\n        var href = tab.href.split('#')[1];\n        var panel = layout.content_.querySelector('#' + href);\n        layout.resetTabState_(tabs);\n        layout.resetPanelState_(panels);\n        tab.classList.add(layout.CssClasses_.IS_ACTIVE);\n        panel.classList.add(layout.CssClasses_.IS_ACTIVE);\n    }\n    if (layout.tabBar_.classList.contains(layout.CssClasses_.JS_RIPPLE_EFFECT)) {\n        var rippleContainer = document.createElement('span');\n        rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);\n        rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);\n        var ripple = document.createElement('span');\n        ripple.classList.add(layout.CssClasses_.RIPPLE);\n        rippleContainer.appendChild(ripple);\n        tab.appendChild(rippleContainer);\n    }\n    tab.addEventListener('click', function (e) {\n        if (tab.getAttribute('href').charAt(0) === '#') {\n            e.preventDefault();\n            selectTab();\n        }\n    });\n    tab.show = selectTab;\n}\nwindow['MaterialLayoutTab'] = MaterialLayoutTab;\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialLayout,\n    classAsString: 'MaterialLayout',\n    cssClass: 'mdl-js-layout'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Data Table Card MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\nvar MaterialDataTable = function MaterialDataTable(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialDataTable'] = MaterialDataTable;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialDataTable.prototype.Constant_ = {};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialDataTable.prototype.CssClasses_ = {\n    DATA_TABLE: 'mdl-data-table',\n    SELECTABLE: 'mdl-data-table--selectable',\n    SELECT_ELEMENT: 'mdl-data-table__select',\n    IS_SELECTED: 'is-selected',\n    IS_UPGRADED: 'is-upgraded'\n};\n/**\n   * Generates and returns a function that toggles the selection state of a\n   * single row (or multiple rows).\n   *\n   * @param {Element} checkbox Checkbox that toggles the selection state.\n   * @param {Element} row Row to toggle when checkbox changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n   * @private\n   */\nMaterialDataTable.prototype.selectRow_ = function (checkbox, row, opt_rows) {\n    if (row) {\n        return function () {\n            if (checkbox.checked) {\n                row.classList.add(this.CssClasses_.IS_SELECTED);\n            } else {\n                row.classList.remove(this.CssClasses_.IS_SELECTED);\n            }\n        }.bind(this);\n    }\n    if (opt_rows) {\n        return function () {\n            var i;\n            var el;\n            if (checkbox.checked) {\n                for (i = 0; i < opt_rows.length; i++) {\n                    el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n                    el['MaterialCheckbox'].check();\n                    opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);\n                }\n            } else {\n                for (i = 0; i < opt_rows.length; i++) {\n                    el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');\n                    el['MaterialCheckbox'].uncheck();\n                    opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);\n                }\n            }\n        }.bind(this);\n    }\n};\n/**\n   * Creates a checkbox for a single or or multiple rows and hooks up the\n   * event handling.\n   *\n   * @param {Element} row Row to toggle when checkbox changes.\n   * @param {(Array<Object>|NodeList)=} opt_rows Rows to toggle when checkbox changes.\n   * @private\n   */\nMaterialDataTable.prototype.createCheckbox_ = function (row, opt_rows) {\n    var label = document.createElement('label');\n    var labelClasses = [\n        'mdl-checkbox',\n        'mdl-js-checkbox',\n        'mdl-js-ripple-effect',\n        this.CssClasses_.SELECT_ELEMENT\n    ];\n    label.className = labelClasses.join(' ');\n    var checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.classList.add('mdl-checkbox__input');\n    if (row) {\n        checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);\n        checkbox.addEventListener('change', this.selectRow_(checkbox, row));\n    } else if (opt_rows) {\n        checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));\n    }\n    label.appendChild(checkbox);\n    componentHandler.upgradeElement(label, 'MaterialCheckbox');\n    return label;\n};\n/**\n   * Initialize element.\n   */\nMaterialDataTable.prototype.init = function () {\n    if (this.element_) {\n        var firstHeader = this.element_.querySelector('th');\n        var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));\n        var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));\n        var rows = bodyRows.concat(footRows);\n        if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {\n            var th = document.createElement('th');\n            var headerCheckbox = this.createCheckbox_(null, rows);\n            th.appendChild(headerCheckbox);\n            firstHeader.parentElement.insertBefore(th, firstHeader);\n            for (var i = 0; i < rows.length; i++) {\n                var firstCell = rows[i].querySelector('td');\n                if (firstCell) {\n                    var td = document.createElement('td');\n                    if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {\n                        var rowCheckbox = this.createCheckbox_(rows[i]);\n                        td.appendChild(rowCheckbox);\n                    }\n                    rows[i].insertBefore(td, firstCell);\n                }\n            }\n            this.element_.classList.add(this.CssClasses_.IS_UPGRADED);\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialDataTable,\n    classAsString: 'MaterialDataTable',\n    cssClass: 'mdl-js-data-table'\n});\n/**\n * @license\n * Copyright 2015 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n   * Class constructor for Ripple MDL component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\nvar MaterialRipple = function MaterialRipple(element) {\n    this.element_ = element;\n    // Initialize instance.\n    this.init();\n};\nwindow['MaterialRipple'] = MaterialRipple;\n/**\n   * Store constants in one place so they can be updated easily.\n   *\n   * @enum {string | number}\n   * @private\n   */\nMaterialRipple.prototype.Constant_ = {\n    INITIAL_SCALE: 'scale(0.0001, 0.0001)',\n    INITIAL_SIZE: '1px',\n    INITIAL_OPACITY: '0.4',\n    FINAL_OPACITY: '0',\n    FINAL_SCALE: ''\n};\n/**\n   * Store strings for class names defined by this component that are used in\n   * JavaScript. This allows us to simply change it in one place should we\n   * decide to modify at a later date.\n   *\n   * @enum {string}\n   * @private\n   */\nMaterialRipple.prototype.CssClasses_ = {\n    RIPPLE_CENTER: 'mdl-ripple--center',\n    RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',\n    RIPPLE: 'mdl-ripple',\n    IS_ANIMATING: 'is-animating',\n    IS_VISIBLE: 'is-visible'\n};\n/**\n   * Handle mouse / finger down on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRipple.prototype.downHandler_ = function (event) {\n    if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {\n        var rect = this.element_.getBoundingClientRect();\n        this.boundHeight = rect.height;\n        this.boundWidth = rect.width;\n        this.rippleSize_ = Math.sqrt(rect.width * rect.width + rect.height * rect.height) * 2 + 2;\n        this.rippleElement_.style.width = this.rippleSize_ + 'px';\n        this.rippleElement_.style.height = this.rippleSize_ + 'px';\n    }\n    this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);\n    if (event.type === 'mousedown' && this.ignoringMouseDown_) {\n        this.ignoringMouseDown_ = false;\n    } else {\n        if (event.type === 'touchstart') {\n            this.ignoringMouseDown_ = true;\n        }\n        var frameCount = this.getFrameCount();\n        if (frameCount > 0) {\n            return;\n        }\n        this.setFrameCount(1);\n        var bound = event.currentTarget.getBoundingClientRect();\n        var x;\n        var y;\n        // Check if we are handling a keyboard click.\n        if (event.clientX === 0 && event.clientY === 0) {\n            x = Math.round(bound.width / 2);\n            y = Math.round(bound.height / 2);\n        } else {\n            var clientX = event.clientX ? event.clientX : event.touches[0].clientX;\n            var clientY = event.clientY ? event.clientY : event.touches[0].clientY;\n            x = Math.round(clientX - bound.left);\n            y = Math.round(clientY - bound.top);\n        }\n        this.setRippleXY(x, y);\n        this.setRippleStyles(true);\n        window.requestAnimationFrame(this.animFrameHandler.bind(this));\n    }\n};\n/**\n   * Handle mouse / finger up on element.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\nMaterialRipple.prototype.upHandler_ = function (event) {\n    // Don't fire for the artificial \"mouseup\" generated by a double-click.\n    if (event && event.detail !== 2) {\n        // Allow a repaint to occur before removing this class, so the animation\n        // shows for tap events, which seem to trigger a mouseup too soon after\n        // mousedown.\n        window.setTimeout(function () {\n            this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);\n        }.bind(this), 0);\n    }\n};\n/**\n   * Initialize element.\n   */\nMaterialRipple.prototype.init = function () {\n    if (this.element_) {\n        var recentering = this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);\n        if (!this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {\n            this.rippleElement_ = this.element_.querySelector('.' + this.CssClasses_.RIPPLE);\n            this.frameCount_ = 0;\n            this.rippleSize_ = 0;\n            this.x_ = 0;\n            this.y_ = 0;\n            // Touch start produces a compat mouse down event, which would cause a\n            // second ripples. To avoid that, we use this property to ignore the first\n            // mouse down after a touch start.\n            this.ignoringMouseDown_ = false;\n            this.boundDownHandler = this.downHandler_.bind(this);\n            this.element_.addEventListener('mousedown', this.boundDownHandler);\n            this.element_.addEventListener('touchstart', this.boundDownHandler);\n            this.boundUpHandler = this.upHandler_.bind(this);\n            this.element_.addEventListener('mouseup', this.boundUpHandler);\n            this.element_.addEventListener('mouseleave', this.boundUpHandler);\n            this.element_.addEventListener('touchend', this.boundUpHandler);\n            this.element_.addEventListener('blur', this.boundUpHandler);\n            /**\n         * Getter for frameCount_.\n         * @return {number} the frame count.\n         */\n            this.getFrameCount = function () {\n                return this.frameCount_;\n            };\n            /**\n         * Setter for frameCount_.\n         * @param {number} fC the frame count.\n         */\n            this.setFrameCount = function (fC) {\n                this.frameCount_ = fC;\n            };\n            /**\n         * Getter for rippleElement_.\n         * @return {Element} the ripple element.\n         */\n            this.getRippleElement = function () {\n                return this.rippleElement_;\n            };\n            /**\n         * Sets the ripple X and Y coordinates.\n         * @param  {number} newX the new X coordinate\n         * @param  {number} newY the new Y coordinate\n         */\n            this.setRippleXY = function (newX, newY) {\n                this.x_ = newX;\n                this.y_ = newY;\n            };\n            /**\n         * Sets the ripple styles.\n         * @param  {boolean} start whether or not this is the start frame.\n         */\n            this.setRippleStyles = function (start) {\n                if (this.rippleElement_ !== null) {\n                    var transformString;\n                    var scale;\n                    var size;\n                    var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';\n                    if (start) {\n                        scale = this.Constant_.INITIAL_SCALE;\n                        size = this.Constant_.INITIAL_SIZE;\n                    } else {\n                        scale = this.Constant_.FINAL_SCALE;\n                        size = this.rippleSize_ + 'px';\n                        if (recentering) {\n                            offset = 'translate(' + this.boundWidth / 2 + 'px, ' + this.boundHeight / 2 + 'px)';\n                        }\n                    }\n                    transformString = 'translate(-50%, -50%) ' + offset + scale;\n                    this.rippleElement_.style.webkitTransform = transformString;\n                    this.rippleElement_.style.msTransform = transformString;\n                    this.rippleElement_.style.transform = transformString;\n                    if (start) {\n                        this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);\n                    } else {\n                        this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);\n                    }\n                }\n            };\n            /**\n         * Handles an animation frame.\n         */\n            this.animFrameHandler = function () {\n                if (this.frameCount_-- > 0) {\n                    window.requestAnimationFrame(this.animFrameHandler.bind(this));\n                } else {\n                    this.setRippleStyles(false);\n                }\n            };\n        }\n    }\n};\n// The component registers itself. It can assume componentHandler is available\n// in the global scope.\ncomponentHandler.register({\n    constructor: MaterialRipple,\n    classAsString: 'MaterialRipple',\n    cssClass: 'mdl-js-ripple-effect',\n    widget: false\n});\n}());\n\n\n\n/** WEBPACK FOOTER **\n ** /source/material.js\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 833\n ** module chunks = 1\n **/"],"sourceRoot":""}