{"version":3,"file":"router.umd.js","sources":["../../../../packages/router/src/version.ts","../../../../packages/router/src/router_module.ts","../../../../packages/router/src/router_preloader.ts","../../../../packages/router/src/route_reuse_strategy.ts","../../../../packages/router/src/directives/router_outlet.ts","../../../../packages/router/src/directives/router_link_active.ts","../../../../packages/router/src/directives/router_link.ts","../../../../packages/router/src/router.ts","../../../../packages/router/src/url_handling_strategy.ts","../../../../packages/router/src/router_outlet_map.ts","../../../../packages/router/src/router_config_loader.ts","../../../../packages/router/src/recognize.ts","../../../../packages/router/src/create_url_tree.ts","../../../../packages/router/src/create_router_state.ts","../../../../packages/router/src/router_state.ts","../../../../packages/router/src/utils/tree.ts","../../../../packages/router/src/apply_redirects.ts","../../../../packages/router/src/url_tree.ts","../../../../packages/router/src/utils/collection.ts","../../../../packages/router/src/config.ts","../../../../packages/router/src/shared.ts","../../../../packages/router/src/events.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n\n\nimport {Version} from '@angular/core';\n/**\n * \\@stable\n */\nexport const VERSION = new Version('4.0.3');\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {APP_BASE_HREF, HashLocationStrategy, LOCATION_INITIALIZED, Location, LocationStrategy, PathLocationStrategy, PlatformLocation} from '@angular/common';\nimport {ANALYZE_FOR_ENTRY_COMPONENTS, APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationRef, Compiler, ComponentRef, Inject, Injectable, InjectionToken, Injector, ModuleWithProviders, NgModule, NgModuleFactoryLoader, NgProbeToken, Optional, Provider, SkipSelf, SystemJsNgModuleLoader} from '@angular/core';\nimport {ɵgetDOM as getDOM} from '@angular/platform-browser';\nimport {Subject} from 'rxjs/Subject';\nimport {of } from 'rxjs/observable/of';\n\nimport {Route, Routes} from './config';\nimport {RouterLink, RouterLinkWithHref} from './directives/router_link';\nimport {RouterLinkActive} from './directives/router_link_active';\nimport {RouterOutlet} from './directives/router_outlet';\nimport {RouteReuseStrategy} from './route_reuse_strategy';\nimport {ErrorHandler, Router} from './router';\nimport {ROUTES} from './router_config_loader';\nimport {RouterOutletMap} from './router_outlet_map';\nimport {NoPreloading, PreloadAllModules, PreloadingStrategy, RouterPreloader} from './router_preloader';\nimport {ActivatedRoute} from './router_state';\nimport {UrlHandlingStrategy} from './url_handling_strategy';\nimport {DefaultUrlSerializer, UrlSerializer} from './url_tree';\nimport {flatten} from './utils/collection';\n/**\n * \\@whatItDoes Contains a list of directives\n * \\@stable\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkWithHref, RouterLinkActive];\n/**\n * \\@whatItDoes Is used in DI to configure the router.\n * \\@stable\n */\nexport const ROUTER_CONFIGURATION = new InjectionToken('ROUTER_CONFIGURATION');\n/**\n * \\@docsNotRequired\n */\nexport const ROUTER_FORROOT_GUARD = new InjectionToken('ROUTER_FORROOT_GUARD');\n\nexport const /** @type {?} */ ROUTER_PROVIDERS: Provider[] = [\n Location,\n {provide: UrlSerializer, useClass: DefaultUrlSerializer},\n {\n provide: Router,\n useFactory: setupRouter,\n deps: [\n ApplicationRef, UrlSerializer, RouterOutletMap, Location, Injector, NgModuleFactoryLoader,\n Compiler, ROUTES, ROUTER_CONFIGURATION, [UrlHandlingStrategy, new Optional()],\n [RouteReuseStrategy, new Optional()]\n ]\n },\n RouterOutletMap,\n {provide: ActivatedRoute, useFactory: rootRoute, deps: [Router]},\n {provide: NgModuleFactoryLoader, useClass: SystemJsNgModuleLoader},\n RouterPreloader,\n NoPreloading,\n PreloadAllModules,\n {provide: ROUTER_CONFIGURATION, useValue: {enableTracing: false}},\n];\n/**\n * @return {?}\n */\nexport function routerNgProbeToken() {\n return new NgProbeToken('Router', Router);\n}\n/**\n * \\@whatItDoes Adds router directives and providers.\n * \n * \\@howToUse \n * \n * RouterModule can be imported multiple times: once per lazily-loaded bundle.\n * Since the router deals with a global shared resource--location, we cannot have\n * more than one router service active.\n * \n * That is why there are two ways to create the module: `RouterModule.forRoot` and\n * `RouterModule.forChild`.\n * \n * * `forRoot` creates a module that contains all the directives, the given routes, and the router\n * service itself.\n * * `forChild` creates a module that contains all the directives and the given routes, but does not\n * include the router service.\n * \n * When registered at the root, the module should be used as follows\n * \n * ```\n * \\@NgModule({ \n * imports: [RouterModule.forRoot(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n * \n * For submodules and lazy loaded submodules the module should be used as follows:\n * \n * ```\n * \\@NgModule({ \n * imports: [RouterModule.forChild(ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n * \n * \\@description \n * \n * Managing state transitions is one of the hardest parts of building applications. This is\n * especially true on the web, where you also need to ensure that the state is reflected in the URL.\n * In addition, we often want to split applications into multiple bundles and load them on demand.\n * Doing this transparently is not trivial.\n * \n * The Angular router solves these problems. Using the router, you can declaratively specify\n * application states, manage state transitions while taking care of the URL, and load bundles on\n * demand.\n * \n * [Read this developer guide](https://angular.io/docs/ts/latest/guide/router.html) to get an\n * overview of how the router should be used.\n * \n * \\@stable\n */\nexport class RouterModule {\n/**\n * @param {?} guard\n * @param {?} router\n */\nconstructor( guard: any, router: Router) {}\n/**\n * Creates a module with all the router providers and directives. It also optionally sets up an\n * application listener to perform an initial navigation.\n * \n * Options:\n * * `enableTracing` makes the router log all its internal events to the console.\n * * `useHash` enables the location strategy that uses the URL fragment instead of the history\n * API.\n * * `initialNavigation` disables the initial navigation.\n * * `errorHandler` provides a custom error handler.\n * @param {?} routes\n * @param {?=} config\n * @return {?}\n */\nstatic forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders {\n return {\n ngModule: RouterModule,\n providers: [\n ROUTER_PROVIDERS,\n provideRoutes(routes),\n {\n provide: ROUTER_FORROOT_GUARD,\n useFactory: provideForRootGuard,\n deps: [[Router, new Optional(), new SkipSelf()]]\n },\n {provide: ROUTER_CONFIGURATION, useValue: config ? config : {}},\n {\n provide: LocationStrategy,\n useFactory: provideLocationStrategy,\n deps: [\n PlatformLocation, [new Inject(APP_BASE_HREF), new Optional()], ROUTER_CONFIGURATION\n ]\n },\n {\n provide: PreloadingStrategy,\n useExisting: config && config.preloadingStrategy ? config.preloadingStrategy :\n NoPreloading\n },\n {provide: NgProbeToken, multi: true, useFactory: routerNgProbeToken},\n provideRouterInitializer(),\n ],\n };\n }\n/**\n * Creates a module with all the router directives and a provider registering routes.\n * @param {?} routes\n * @return {?}\n */\nstatic forChild(routes: Routes): ModuleWithProviders {\n return {ngModule: RouterModule, providers: [provideRoutes(routes)]};\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{declarations: ROUTER_DIRECTIVES, exports: ROUTER_DIRECTIVES}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ROUTER_FORROOT_GUARD, ] }, ]},\n{type: Router, decorators: [{ type: Optional }, ]},\n];\n}\n\nfunction RouterModule_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterModule.ctorParameters;\n}\n\n/**\n * @param {?} platformLocationStrategy\n * @param {?} baseHref\n * @param {?=} options\n * @return {?}\n */\nexport function provideLocationStrategy(\n platformLocationStrategy: PlatformLocation, baseHref: string, options: ExtraOptions = {}) {\n return options.useHash ? new HashLocationStrategy(platformLocationStrategy, baseHref) :\n new PathLocationStrategy(platformLocationStrategy, baseHref);\n}\n/**\n * @param {?} router\n * @return {?}\n */\nexport function provideForRootGuard(router: Router): any {\n if (router) {\n throw new Error(\n `RouterModule.forRoot() called twice. Lazy loaded modules should use RouterModule.forChild() instead.`);\n }\n return 'guarded';\n}\n/**\n * \\@whatItDoes Registers routes.\n * \n * \\@howToUse \n * \n * ```\n * \\@NgModule({ \n * imports: [RouterModule.forChild(ROUTES)],\n * providers: [provideRoutes(EXTRA_ROUTES)]\n * })\n * class MyNgModule {}\n * ```\n * \n * \\@stable\n * @param {?} routes\n * @return {?}\n */\nexport function provideRoutes(routes: Routes): any {\n return [\n {provide: ANALYZE_FOR_ENTRY_COMPONENTS, multi: true, useValue: routes},\n {provide: ROUTES, multi: true, useValue: routes},\n ];\n}\n\n/**\n * @whatItDoes Represents an option to configure when the initial navigation is performed.\n *\n * @description\n * * 'enabled' - the initial navigation starts before the root component is created.\n * The bootstrap is blocked until the initial navigation is complete.\n * * 'disabled' - the initial navigation is not performed. The location listener is set up before\n * the root component gets created.\n * * 'legacy_enabled'- the initial navigation starts after the root component has been created.\n * The bootstrap is not blocked until the initial navigation is complete. @deprecated\n * * 'legacy_disabled'- the initial navigation is not performed. The location listener is set up\n * after @deprecated\n * the root component gets created.\n * * `true` - same as 'legacy_enabled'. @deprecated since v4\n * * `false` - same as 'legacy_disabled'. @deprecated since v4\n *\n * The 'enabled' option should be used for applications unless there is a reason to have\n * more control over when the router starts its initial navigation due to some complex\n * initialization logic. In this case, 'disabled' should be used.\n *\n * The 'legacy_enabled' and 'legacy_disabled' should not be used for new applications.\n *\n * @experimental\n */\nexport type InitialNavigation =\n true | false | 'enabled' | 'disabled' | 'legacy_enabled' | 'legacy_disabled';\n\n/**\n * @whatItDoes Represents options to configure the router.\n *\n * @stable\n */\nexport interface ExtraOptions {\n /**\n * Makes the router log all its internal events to the console.\n */\n enableTracing?: boolean;\n\n /**\n * Enables the location strategy that uses the URL fragment instead of the history API.\n */\n useHash?: boolean;\n\n /**\n * Disables the initial navigation.\n */\n initialNavigation?: InitialNavigation;\n\n /**\n * A custom error handler.\n */\n errorHandler?: ErrorHandler;\n\n /**\n * Configures a preloading strategy. See {@link PreloadAllModules}.\n */\n preloadingStrategy?: any;\n}\n/**\n * @param {?} ref\n * @param {?} urlSerializer\n * @param {?} outletMap\n * @param {?} location\n * @param {?} injector\n * @param {?} loader\n * @param {?} compiler\n * @param {?} config\n * @param {?=} opts\n * @param {?=} urlHandlingStrategy\n * @param {?=} routeReuseStrategy\n * @return {?}\n */\nexport function setupRouter(\n ref: ApplicationRef, urlSerializer: UrlSerializer, outletMap: RouterOutletMap,\n location: Location, injector: Injector, loader: NgModuleFactoryLoader, compiler: Compiler,\n config: Route[][], opts: ExtraOptions = {}, urlHandlingStrategy?: UrlHandlingStrategy,\n routeReuseStrategy?: RouteReuseStrategy) {\n const /** @type {?} */ router = new Router(\n null, urlSerializer, outletMap, location, injector, loader, compiler, flatten(config));\n\n if (urlHandlingStrategy) {\n router.urlHandlingStrategy = urlHandlingStrategy;\n }\n\n if (routeReuseStrategy) {\n router.routeReuseStrategy = routeReuseStrategy;\n }\n\n if (opts.errorHandler) {\n router.errorHandler = opts.errorHandler;\n }\n\n if (opts.enableTracing) {\n const /** @type {?} */ dom = getDOM();\n router.events.subscribe(e => {\n dom.logGroup(`Router Event: ${( /** @type {?} */((e.constructor))).name}`);\n dom.log(e.toString());\n dom.log(e);\n dom.logGroupEnd();\n });\n }\n\n return router;\n}\n/**\n * @param {?} router\n * @return {?}\n */\nexport function rootRoute(router: Router): ActivatedRoute {\n return router.routerState.root;\n}\n/**\n * To initialize the router properly we need to do in two steps:\n * \n * We need to start the navigation in a APP_INITIALIZER to block the bootstrap if\n * a resolver or a guards executes asynchronously. Second, we need to actually run\n * activation in a BOOTSTRAP_LISTENER. We utilize the afterPreactivation\n * hook provided by the router to do that.\n * \n * The router navigation starts, reaches the point when preactivation is done, and then\n * pauses. It waits for the hook to be resolved. We then resolve it only in a bootstrap listener.\n */\nexport class RouterInitializer {\nprivate initNavigation: boolean = false;\nprivate resultOfPreactivationDone = new Subject();\n/**\n * @param {?} injector\n */\nconstructor(private injector: Injector) {}\n/**\n * @return {?}\n */\nappInitializer(): Promise {\n const /** @type {?} */ p: Promise = this.injector.get(LOCATION_INITIALIZED, Promise.resolve(null));\n return p.then(() => {\n let /** @type {?} */ resolve: Function = null;\n const /** @type {?} */ res = new Promise(r => resolve = r);\n const /** @type {?} */ router = this.injector.get(Router);\n const /** @type {?} */ opts = this.injector.get(ROUTER_CONFIGURATION);\n\n if (this.isLegacyDisabled(opts) || this.isLegacyEnabled(opts)) {\n resolve(true);\n\n } else if (opts.initialNavigation === 'disabled') {\n router.setUpLocationChangeListener();\n resolve(true);\n\n } else if (opts.initialNavigation === 'enabled') {\n router.hooks.afterPreactivation = () => {\n // only the initial navigation should be delayed\n if (!this.initNavigation) {\n this.initNavigation = true;\n resolve(true);\n return this.resultOfPreactivationDone;\n\n // subsequent navigations should not be delayed\n } else {\n return of (null);\n }\n };\n router.initialNavigation();\n\n } else {\n throw new Error(`Invalid initialNavigation options: '${opts.initialNavigation}'`);\n }\n\n return res;\n });\n }\n/**\n * @param {?} bootstrappedComponentRef\n * @return {?}\n */\nbootstrapListener(bootstrappedComponentRef: ComponentRef): void {\n const /** @type {?} */ opts = this.injector.get(ROUTER_CONFIGURATION);\n const /** @type {?} */ preloader = this.injector.get(RouterPreloader);\n const /** @type {?} */ router = this.injector.get(Router);\n const /** @type {?} */ ref = this.injector.get(ApplicationRef);\n\n if (bootstrappedComponentRef !== ref.components[0]) {\n return;\n }\n\n if (this.isLegacyEnabled(opts)) {\n router.initialNavigation();\n } else if (this.isLegacyDisabled(opts)) {\n router.setUpLocationChangeListener();\n }\n\n preloader.setUpPreloading();\n router.resetRootComponentType(ref.componentTypes[0]);\n this.resultOfPreactivationDone.next(null);\n this.resultOfPreactivationDone.complete();\n }\n/**\n * @param {?} opts\n * @return {?}\n */\nprivate isLegacyEnabled(opts: ExtraOptions): boolean {\n return opts.initialNavigation === 'legacy_enabled' || opts.initialNavigation === true ||\n opts.initialNavigation === undefined;\n }\n/**\n * @param {?} opts\n * @return {?}\n */\nprivate isLegacyDisabled(opts: ExtraOptions): boolean {\n return opts.initialNavigation === 'legacy_disabled' || opts.initialNavigation === false;\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Injector, },\n];\n}\n\nfunction RouterInitializer_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterInitializer.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterInitializer.ctorParameters;\n/** @type {?} */\nRouterInitializer.prototype.initNavigation;\n/** @type {?} */\nRouterInitializer.prototype.resultOfPreactivationDone;\n/** @type {?} */\nRouterInitializer.prototype.injector;\n}\n\n/**\n * @param {?} r\n * @return {?}\n */\nexport function getAppInitializer(r: RouterInitializer) {\n return r.appInitializer.bind(r);\n}\n/**\n * @param {?} r\n * @return {?}\n */\nexport function getBootstrapListener(r: RouterInitializer) {\n return r.bootstrapListener.bind(r);\n}\n/**\n * A token for the router initializer that will be called after the app is bootstrapped.\n * \n * \\@experimental\n */\nexport const ROUTER_INITIALIZER =\n new InjectionToken<(compRef: ComponentRef) => void>('Router Initializer');\n/**\n * @return {?}\n */\nexport function provideRouterInitializer() {\n return [\n RouterInitializer,\n {\n provide: APP_INITIALIZER,\n multi: true,\n useFactory: getAppInitializer,\n deps: [RouterInitializer]\n },\n {provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener, deps: [RouterInitializer]},\n {provide: APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER},\n ];\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n*@license\n*Copyright Google Inc. All Rights Reserved.\n*\n*Use of this source code is governed by an MIT-style license that can be\n*found in the LICENSE file at https://angular.io/license\n*/\n\n\nimport {Compiler, Injectable, Injector, NgModuleFactoryLoader, NgModuleRef, OnDestroy} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {Subscription} from 'rxjs/Subscription';\nimport {from} from 'rxjs/observable/from';\nimport {of } from 'rxjs/observable/of';\nimport {_catch} from 'rxjs/operator/catch';\nimport {concatMap} from 'rxjs/operator/concatMap';\nimport {filter} from 'rxjs/operator/filter';\nimport {mergeAll} from 'rxjs/operator/mergeAll';\nimport {mergeMap} from 'rxjs/operator/mergeMap';\nimport {LoadedRouterConfig, Route, Routes} from './config';\nimport {Event, NavigationEnd, RouteConfigLoadEnd, RouteConfigLoadStart} from './events';\nimport {Router} from './router';\nimport {RouterConfigLoader} from './router_config_loader';\n/**\n * \\@whatItDoes Provides a preloading strategy.\n * \n * \\@experimental\n * @abstract\n */\nexport abstract class PreloadingStrategy {\n/**\n * @abstract\n * @param {?} route\n * @param {?} fn\n * @return {?}\n */\npreload(route: Route, fn: () => Observable) {}\n}\n/**\n * \\@whatItDoes Provides a preloading strategy that preloads all modules as quickly as possible.\n * \n * \\@howToUse \n * \n * ```\n * RouteModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n * \n * \\@experimental\n */\nexport class PreloadAllModules implements PreloadingStrategy {\n/**\n * @param {?} route\n * @param {?} fn\n * @return {?}\n */\npreload(route: Route, fn: () => Observable): Observable {\n return _catch.call(fn(), () => of (null));\n }\n}\n/**\n * \\@whatItDoes Provides a preloading strategy that does not preload any modules.\n * \n * \\@description \n * \n * This strategy is enabled by default.\n * \n * \\@experimental\n */\nexport class NoPreloading implements PreloadingStrategy {\n/**\n * @param {?} route\n * @param {?} fn\n * @return {?}\n */\npreload(route: Route, fn: () => Observable): Observable { return of (null); }\n}\n/**\n * The preloader optimistically loads all router configurations to\n * make navigations into lazily-loaded sections of the application faster.\n * \n * The preloader runs in the background. When the router bootstraps, the preloader\n * starts listening to all navigation events. After every such event, the preloader\n * will check if any configurations can be loaded lazily.\n * \n * If a route is protected by `canLoad` guards, the preloaded will not load it.\n * \n * \\@stable\n */\nexport class RouterPreloader implements OnDestroy {\nprivate loader: RouterConfigLoader;\nprivate subscription: Subscription;\n/**\n * @param {?} router\n * @param {?} moduleLoader\n * @param {?} compiler\n * @param {?} injector\n * @param {?} preloadingStrategy\n */\nconstructor(\nprivate router: Router, moduleLoader: NgModuleFactoryLoader, compiler: Compiler,\nprivate injector: Injector,\nprivate preloadingStrategy: PreloadingStrategy) {\n const onStartLoad = (r: Route) => router.triggerEvent(new RouteConfigLoadStart(r));\n const onEndLoad = (r: Route) => router.triggerEvent(new RouteConfigLoadEnd(r));\n\n this.loader = new RouterConfigLoader(moduleLoader, compiler, onStartLoad, onEndLoad);\n };\n/**\n * @return {?}\n */\nsetUpPreloading(): void {\n const /** @type {?} */ navigations$ = filter.call(this.router.events, (e: Event) => e instanceof NavigationEnd);\n this.subscription = concatMap.call(navigations$, () => this.preload()).subscribe(() => {});\n }\n/**\n * @return {?}\n */\npreload(): Observable {\n const /** @type {?} */ ngModule = this.injector.get(NgModuleRef);\n return this.processRoutes(ngModule, this.router.config);\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void { this.subscription.unsubscribe(); }\n/**\n * @param {?} ngModule\n * @param {?} routes\n * @return {?}\n */\nprivate processRoutes(ngModule: NgModuleRef, routes: Routes): Observable {\n const /** @type {?} */ res: Observable[] = [];\n for (const /** @type {?} */ route of routes) {\n // we already have the config loaded, just recurse\n if (route.loadChildren && !route.canLoad && route._loadedConfig) {\n const /** @type {?} */ childConfig = route._loadedConfig;\n res.push(this.processRoutes(childConfig.module, childConfig.routes));\n\n // no config loaded, fetch the config\n } else if (route.loadChildren && !route.canLoad) {\n res.push(this.preloadConfig(ngModule, route));\n\n // recurse into children\n } else if (route.children) {\n res.push(this.processRoutes(ngModule, route.children));\n }\n }\n return mergeAll.call(from(res));\n }\n/**\n * @param {?} ngModule\n * @param {?} route\n * @return {?}\n */\nprivate preloadConfig(ngModule: NgModuleRef, route: Route): Observable {\n return this.preloadingStrategy.preload(route, () => {\n const /** @type {?} */ loaded$ = this.loader.load(ngModule.injector, route);\n return mergeMap.call(loaded$, (config: LoadedRouterConfig) => {\n route._loadedConfig = config;\n return this.processRoutes(config.module, config.routes);\n });\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Router, },\n{type: NgModuleFactoryLoader, },\n{type: Compiler, },\n{type: Injector, },\n{type: PreloadingStrategy, },\n];\n}\n\nfunction RouterPreloader_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterPreloader.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterPreloader.ctorParameters;\n/** @type {?} */\nRouterPreloader.prototype.loader;\n/** @type {?} */\nRouterPreloader.prototype.subscription;\n/** @type {?} */\nRouterPreloader.prototype.router;\n/** @type {?} */\nRouterPreloader.prototype.injector;\n/** @type {?} */\nRouterPreloader.prototype.preloadingStrategy;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ComponentRef} from '@angular/core';\n\nimport {ActivatedRoute, ActivatedRouteSnapshot} from './router_state';\nimport {TreeNode} from './utils/tree';\n\n/**\n * @whatItDoes Represents the detached route tree.\n *\n * This is an opaque value the router will give to a custom route reuse strategy\n * to store and retrieve later on.\n *\n * @experimental\n */\nexport type DetachedRouteHandle = {};\n\n/** @internal */\nexport type DetachedRouteHandleInternal = {\n componentRef: ComponentRef,\n route: TreeNode,\n};\n/**\n * \\@whatItDoes Provides a way to customize when activated routes get reused.\n * \n * \\@experimental\n * @abstract\n */\nexport abstract class RouteReuseStrategy {\n/**\n * Determines if this route (and its subtree) should be detached to be reused later\n * @abstract\n * @param {?} route\n * @return {?}\n */\nshouldDetach(route: ActivatedRouteSnapshot) {}\n/**\n * Stores the detached route\n * @abstract\n * @param {?} route\n * @param {?} handle\n * @return {?}\n */\nstore(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle) {}\n/**\n * Determines if this route (and its subtree) should be reattached\n * @abstract\n * @param {?} route\n * @return {?}\n */\nshouldAttach(route: ActivatedRouteSnapshot) {}\n/**\n * Retrieves the previously stored route\n * @abstract\n * @param {?} route\n * @return {?}\n */\nretrieve(route: ActivatedRouteSnapshot) {}\n/**\n * Determines if a route should be reused\n * @abstract\n * @param {?} future\n * @param {?} curr\n * @return {?}\n */\nshouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot) {}\n}","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Attribute, ComponentFactoryResolver, ComponentRef, Directive, EventEmitter, Injector, OnDestroy, Output, ReflectiveInjector, ResolvedReflectiveProvider, ViewContainerRef} from '@angular/core';\nimport {RouterOutletMap} from '../router_outlet_map';\nimport {ActivatedRoute} from '../router_state';\nimport {PRIMARY_OUTLET} from '../shared';\n/**\n * \\@whatItDoes Acts as a placeholder that Angular dynamically fills based on the current router\n * state.\n * \n * \\@howToUse \n * \n * ```\n * \n * \n * \n * ```\n * \n * A router outlet will emit an activate event any time a new component is being instantiated,\n * and a deactivate event when it is being destroyed.\n * \n * ```\n * \n * ```\n * \\@ngModule RouterModule\n * \n * \\@stable\n */\nexport class RouterOutlet implements OnDestroy {\nprivate activated: ComponentRef;\nprivate _activatedRoute: ActivatedRoute;\npublic outletMap: RouterOutletMap;\n\n activateEvents = new EventEmitter();\n deactivateEvents = new EventEmitter();\n/**\n * @param {?} parentOutletMap\n * @param {?} location\n * @param {?} resolver\n * @param {?} name\n */\nconstructor(\nprivate parentOutletMap: RouterOutletMap,\nprivate location: ViewContainerRef,\nprivate resolver: ComponentFactoryResolver,\nprivate name: string) {\n parentOutletMap.registerOutlet(name ? name : PRIMARY_OUTLET, this);\n }\n/**\n * @return {?}\n */\nngOnDestroy(): void { this.parentOutletMap.removeOutlet(this.name ? this.name : PRIMARY_OUTLET); }\n/**\n * @deprecated since v4 *\n * @return {?}\n */\nget locationInjector(): Injector { return this.location.injector; }\n/**\n * @deprecated since v4 *\n * @return {?}\n */\nget locationFactoryResolver(): ComponentFactoryResolver { return this.resolver; }\n/**\n * @return {?}\n */\nget isActivated(): boolean { return !!this.activated; }\n/**\n * @return {?}\n */\nget component(): Object {\n if (!this.activated) throw new Error('Outlet is not activated');\n return this.activated.instance;\n }\n/**\n * @return {?}\n */\nget activatedRoute(): ActivatedRoute {\n if (!this.activated) throw new Error('Outlet is not activated');\n return this._activatedRoute;\n }\n/**\n * @return {?}\n */\ndetach(): ComponentRef {\n if (!this.activated) throw new Error('Outlet is not activated');\n this.location.detach();\n const /** @type {?} */ r = this.activated;\n this.activated = null;\n this._activatedRoute = null;\n return r;\n }\n/**\n * @param {?} ref\n * @param {?} activatedRoute\n * @return {?}\n */\nattach(ref: ComponentRef, activatedRoute: ActivatedRoute) {\n this.activated = ref;\n this._activatedRoute = activatedRoute;\n this.location.insert(ref.hostView);\n }\n/**\n * @return {?}\n */\ndeactivate(): void {\n if (this.activated) {\n const /** @type {?} */ c = this.component;\n this.activated.destroy();\n this.activated = null;\n this._activatedRoute = null;\n this.deactivateEvents.emit(c);\n }\n }\n/**\n * @deprecated since v4, use {\\@link activateWith}\n * @param {?} activatedRoute\n * @param {?} resolver\n * @param {?} injector\n * @param {?} providers\n * @param {?} outletMap\n * @return {?}\n */\nactivate(\n activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver, injector: Injector,\n providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap): void {\n if (this.isActivated) {\n throw new Error('Cannot activate an already activated outlet');\n }\n\n this.outletMap = outletMap;\n this._activatedRoute = activatedRoute;\n\n const /** @type {?} */ snapshot = activatedRoute._futureSnapshot;\n const /** @type {?} */ component: any = /** @type {?} */(( snapshot._routeConfig.component));\n const /** @type {?} */ factory = resolver.resolveComponentFactory(component);\n\n const /** @type {?} */ inj = ReflectiveInjector.fromResolvedProviders(providers, injector);\n\n this.activated = this.location.createComponent(factory, this.location.length, inj, []);\n this.activated.changeDetectorRef.detectChanges();\n\n this.activateEvents.emit(this.activated.instance);\n }\n/**\n * @param {?} activatedRoute\n * @param {?} resolver\n * @param {?} outletMap\n * @return {?}\n */\nactivateWith(\n activatedRoute: ActivatedRoute, resolver: ComponentFactoryResolver|null,\n outletMap: RouterOutletMap) {\n if (this.isActivated) {\n throw new Error('Cannot activate an already activated outlet');\n }\n\n this.outletMap = outletMap;\n this._activatedRoute = activatedRoute;\n\n const /** @type {?} */ snapshot = activatedRoute._futureSnapshot;\n const /** @type {?} */ component = /** @type {?} */(( snapshot._routeConfig.component));\n\n resolver = resolver || this.resolver;\n const /** @type {?} */ factory = resolver.resolveComponentFactory(component);\n\n const /** @type {?} */ injector = new OutletInjector(activatedRoute, outletMap, this.location.injector);\n\n this.activated = this.location.createComponent(factory, this.location.length, injector, []);\n this.activated.changeDetectorRef.detectChanges();\n\n this.activateEvents.emit(this.activated.instance);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: 'router-outlet'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: RouterOutletMap, },\n{type: ViewContainerRef, },\n{type: ComponentFactoryResolver, },\n{type: undefined, decorators: [{ type: Attribute, args: ['name', ] }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'activateEvents': [{ type: Output, args: ['activate', ] },],\n'deactivateEvents': [{ type: Output, args: ['deactivate', ] },],\n};\n}\n\nfunction RouterOutlet_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterOutlet.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterOutlet.ctorParameters;\n/** @type {?} */\nRouterOutlet.propDecorators;\n/** @type {?} */\nRouterOutlet.prototype.activated;\n/** @type {?} */\nRouterOutlet.prototype._activatedRoute;\n/** @type {?} */\nRouterOutlet.prototype.outletMap;\n/** @type {?} */\nRouterOutlet.prototype.activateEvents;\n/** @type {?} */\nRouterOutlet.prototype.deactivateEvents;\n/** @type {?} */\nRouterOutlet.prototype.parentOutletMap;\n/** @type {?} */\nRouterOutlet.prototype.location;\n/** @type {?} */\nRouterOutlet.prototype.resolver;\n/** @type {?} */\nRouterOutlet.prototype.name;\n}\n\nclass OutletInjector implements Injector {\n/**\n * @param {?} route\n * @param {?} map\n * @param {?} parent\n */\nconstructor(\nprivate route: ActivatedRoute,\nprivate map: RouterOutletMap,\nprivate parent: Injector) {}\n/**\n * @param {?} token\n * @param {?=} notFoundValue\n * @return {?}\n */\nget(token: any, notFoundValue?: any): any {\n if (token === ActivatedRoute) {\n return this.route;\n }\n\n if (token === RouterOutletMap) {\n return this.map;\n }\n\n return this.parent.get(token, notFoundValue);\n }\n}\n\nfunction OutletInjector_tsickle_Closure_declarations() {\n/** @type {?} */\nOutletInjector.prototype.route;\n/** @type {?} */\nOutletInjector.prototype.map;\n/** @type {?} */\nOutletInjector.prototype.parent;\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {AfterContentInit, ChangeDetectorRef, ContentChildren, Directive, ElementRef, Input, OnChanges, OnDestroy, QueryList, Renderer, SimpleChanges} from '@angular/core';\nimport {Subscription} from 'rxjs/Subscription';\nimport {NavigationEnd} from '../events';\nimport {Router} from '../router';\nimport {RouterLink, RouterLinkWithHref} from './router_link';\n/**\n * \\@whatItDoes Lets you add a CSS class to an element when the link's route becomes active.\n * \n * \\@howToUse \n * \n * ```\n * Bob\n * ```\n * \n * \\@description \n * \n * The RouterLinkActive directive lets you add a CSS class to an element when the link's route\n * becomes active.\n * \n * Consider the following example:\n * \n * ```\n * Bob\n * ```\n * \n * When the url is either '/user' or '/user/bob', the active-link class will\n * be added to the `a` tag. If the url changes, the class will be removed.\n * \n * You can set more than one class, as follows:\n * \n * ```\n * Bob\n * Bob\n * ```\n * \n * You can configure RouterLinkActive by passing `exact: true`. This will add the classes\n * only when the url matches the link exactly.\n * \n * ```\n * Bob\n * ```\n * \n * You can assign the RouterLinkActive instance to a template variable and directly check\n * the `isActive` status.\n * ```\n * \n * Bob {{ rla.isActive ? '(already open)' : ''}}\n * \n * ```\n * \n * Finally, you can apply the RouterLinkActive directive to an ancestor of a RouterLink.\n * \n * ```\n *
\n * Jim\n * Bob\n *
\n * ```\n * \n * This will set the active-link class on the div tag if the url is either '/user/jim' or\n * '/user/bob'.\n * \n * \\@ngModule RouterModule\n * \n * \\@stable\n */\nexport class RouterLinkActive implements OnChanges,\n OnDestroy, AfterContentInit {\n links: QueryList;\n \n linksWithHrefs: QueryList;\nprivate classes: string[] = [];\nprivate subscription: Subscription;\nprivate active: boolean = false;\n\n routerLinkActiveOptions: {exact: boolean} = {exact: false};\n/**\n * @param {?} router\n * @param {?} element\n * @param {?} renderer\n * @param {?} cdr\n */\nconstructor(\nprivate router: Router,\nprivate element: ElementRef,\nprivate renderer: Renderer,\nprivate cdr: ChangeDetectorRef) {\n this.subscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.update();\n }\n });\n }\n/**\n * @return {?}\n */\nget isActive(): boolean { return this.active; }\n/**\n * @return {?}\n */\nngAfterContentInit(): void {\n this.links.changes.subscribe(_ => this.update());\n this.linksWithHrefs.changes.subscribe(_ => this.update());\n this.update();\n }\n/**\n * @param {?} data\n * @return {?}\n */\nset routerLinkActive(data: string[]|string) {\n const /** @type {?} */ classes = Array.isArray(data) ? data : data.split(' ');\n this.classes = classes.filter(c => !!c);\n }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges): void { this.update(); }\n/**\n * @return {?}\n */\nngOnDestroy(): void { this.subscription.unsubscribe(); }\n/**\n * @return {?}\n */\nprivate update(): void {\n if (!this.links || !this.linksWithHrefs || !this.router.navigated) return;\n const /** @type {?} */ hasActiveLinks = this.hasActiveLinks();\n\n // react only when status has changed to prevent unnecessary dom updates\n if (this.active !== hasActiveLinks) {\n this.classes.forEach(\n c => this.renderer.setElementClass(this.element.nativeElement, c, hasActiveLinks));\n Promise.resolve(hasActiveLinks).then(active => this.active = active);\n }\n }\n/**\n * @param {?} router\n * @return {?}\n */\nprivate isLinkActive(router: Router): (link: (RouterLink|RouterLinkWithHref)) => boolean {\n return (link: RouterLink | RouterLinkWithHref) =>\n router.isActive(link.urlTree, this.routerLinkActiveOptions.exact);\n }\n/**\n * @return {?}\n */\nprivate hasActiveLinks(): boolean {\n return this.links.some(this.isLinkActive(this.router)) ||\n this.linksWithHrefs.some(this.isLinkActive(this.router));\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n selector: '[routerLinkActive]',\n exportAs: 'routerLinkActive',\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Router, },\n{type: ElementRef, },\n{type: Renderer, },\n{type: ChangeDetectorRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'links': [{ type: ContentChildren, args: [RouterLink, {descendants: true}, ] },],\n'linksWithHrefs': [{ type: ContentChildren, args: [RouterLinkWithHref, {descendants: true}, ] },],\n'routerLinkActiveOptions': [{ type: Input },],\n'routerLinkActive': [{ type: Input },],\n};\n}\n\nfunction RouterLinkActive_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterLinkActive.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterLinkActive.ctorParameters;\n/** @type {?} */\nRouterLinkActive.propDecorators;\n/** @type {?} */\nRouterLinkActive.prototype.links;\n/** @type {?} */\nRouterLinkActive.prototype.linksWithHrefs;\n/** @type {?} */\nRouterLinkActive.prototype.classes;\n/** @type {?} */\nRouterLinkActive.prototype.subscription;\n/** @type {?} */\nRouterLinkActive.prototype.active;\n/** @type {?} */\nRouterLinkActive.prototype.routerLinkActiveOptions;\n/** @type {?} */\nRouterLinkActive.prototype.router;\n/** @type {?} */\nRouterLinkActive.prototype.element;\n/** @type {?} */\nRouterLinkActive.prototype.renderer;\n/** @type {?} */\nRouterLinkActive.prototype.cdr;\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {LocationStrategy} from '@angular/common';\nimport {Attribute, Directive, ElementRef, HostBinding, HostListener, Input, OnChanges, OnDestroy, Renderer, isDevMode} from '@angular/core';\nimport {Subscription} from 'rxjs/Subscription';\n\nimport {QueryParamsHandling} from '../config';\nimport {NavigationEnd} from '../events';\nimport {Router} from '../router';\nimport {ActivatedRoute} from '../router_state';\nimport {UrlTree} from '../url_tree';\n/**\n * \\@whatItDoes Lets you link to specific parts of your app.\n * \n * \\@howToUse \n * \n * Consider the following route configuration:\n * `[{ path: 'user/:name', component: UserCmp }]`\n * \n * When linking to this `user/:name` route, you can write:\n * `link to user component`\n * \n * \\@description \n * \n * The RouterLink directives let you link to specific parts of your app.\n * \n * When the link is static, you can use the directive as follows:\n * `link to user component`\n * \n * If you use dynamic values to generate the link, you can pass an array of path\n * segments, followed by the params for each segment.\n * \n * For instance `['/team', teamId, 'user', userName, {details: true}]`\n * means that we want to generate a link to `/team/11/user/bob;details=true`.\n * \n * Multiple static segments can be merged into one\n * (e.g., `['/team/11/user', userName, {details: true}]`).\n * \n * The first segment name can be prepended with `/`, `./`, or `../`:\n * * If the first segment begins with `/`, the router will look up the route from the root of the\n * app.\n * * If the first segment begins with `./`, or doesn't begin with a slash, the router will\n * instead look in the children of the current activated route.\n * * And if the first segment begins with `../`, the router will go up one level.\n * \n * You can set query params and fragment as follows:\n * \n * ```\n * \n * link to user component\n * \n * ```\n * RouterLink will use these to generate this link: `/user/bob#education?debug=true`.\n * \n * (Deprecated in v4.0.0 use `queryParamsHandling` instead) You can also tell the\n * directive to preserve the current query params and fragment:\n * \n * ```\n * \n * link to user component\n * \n * ```\n * \n * You can tell the directive to how to handle queryParams, available options are:\n * - 'merge' merge the queryParams into the current queryParams\n * - 'preserve' prserve the current queryParams\n * - default / '' use the queryParams only\n * same options for {\\@link NavigationExtras.queryParamsHandling}\n * \n * ```\n * \n * link to user component\n * \n * ```\n * \n * The router link directive always treats the provided input as a delta to the current url.\n * \n * For instance, if the current url is `/user/(box//aux:team)`.\n * \n * Then the following link `Jim` will generate the link\n * `/user/(jim//aux:team)`.\n * \n * \\@ngModule RouterModule\n * \n * See {\\@link Router.createUrlTree} for more information.\n * \n * \\@stable\n */\nexport class RouterLink {\n queryParams: {[k: string]: any};\n fragment: string;\n queryParamsHandling: QueryParamsHandling;\n preserveFragment: boolean;\n skipLocationChange: boolean;\n replaceUrl: boolean;\nprivate commands: any[] = [];\nprivate preserve: boolean;\n/**\n * @param {?} router\n * @param {?} route\n * @param {?} tabIndex\n * @param {?} renderer\n * @param {?} el\n */\nconstructor(\nprivate router: Router,\nprivate route: ActivatedRoute,\n tabIndex: string, renderer: Renderer, el: ElementRef) {\n if (tabIndex == null) {\n renderer.setElementAttribute(el.nativeElement, 'tabindex', '0');\n }\n }\n/**\n * @param {?} commands\n * @return {?}\n */\nset routerLink(commands: any[]|string) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n } else {\n this.commands = [];\n }\n }\n/**\n * @deprecated 4.0.0 use `queryParamsHandling` instead.\n * @param {?} value\n * @return {?}\n */\nset preserveQueryParams(value: boolean) {\n if (isDevMode() && /** @type {?} */(( console)) && /** @type {?} */(( console.warn))) {\n console.warn('preserveQueryParams is deprecated!, use queryParamsHandling instead.');\n }\n this.preserve = value;\n }\n/**\n * @return {?}\n */\nonClick(): boolean {\n const /** @type {?} */ extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return true;\n }\n/**\n * @return {?}\n */\nget urlTree(): UrlTree {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: ':not(a)[routerLink]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Router, },\n{type: ActivatedRoute, },\n{type: undefined, decorators: [{ type: Attribute, args: ['tabindex', ] }, ]},\n{type: Renderer, },\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'queryParams': [{ type: Input },],\n'fragment': [{ type: Input },],\n'queryParamsHandling': [{ type: Input },],\n'preserveFragment': [{ type: Input },],\n'skipLocationChange': [{ type: Input },],\n'replaceUrl': [{ type: Input },],\n'routerLink': [{ type: Input },],\n'preserveQueryParams': [{ type: Input },],\n'onClick': [{ type: HostListener, args: ['click', ] },],\n};\n}\n\nfunction RouterLink_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterLink.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterLink.ctorParameters;\n/** @type {?} */\nRouterLink.propDecorators;\n/** @type {?} */\nRouterLink.prototype.queryParams;\n/** @type {?} */\nRouterLink.prototype.fragment;\n/** @type {?} */\nRouterLink.prototype.queryParamsHandling;\n/** @type {?} */\nRouterLink.prototype.preserveFragment;\n/** @type {?} */\nRouterLink.prototype.skipLocationChange;\n/** @type {?} */\nRouterLink.prototype.replaceUrl;\n/** @type {?} */\nRouterLink.prototype.commands;\n/** @type {?} */\nRouterLink.prototype.preserve;\n/** @type {?} */\nRouterLink.prototype.router;\n/** @type {?} */\nRouterLink.prototype.route;\n}\n\n/**\n * \\@whatItDoes Lets you link to specific parts of your app.\n * \n * See {\\@link RouterLink} for more information.\n * \n * \\@ngModule RouterModule\n * \n * \\@stable\n */\nexport class RouterLinkWithHref implements OnChanges, OnDestroy {\n target: string;\n queryParams: {[k: string]: any};\n fragment: string;\n queryParamsHandling: QueryParamsHandling;\n preserveFragment: boolean;\n skipLocationChange: boolean;\n replaceUrl: boolean;\nprivate commands: any[] = [];\nprivate subscription: Subscription;\nprivate preserve: boolean;\n\n // the url displayed on the anchor element.\n href: string;\n/**\n * @param {?} router\n * @param {?} route\n * @param {?} locationStrategy\n */\nconstructor(\nprivate router: Router,\nprivate route: ActivatedRoute,\nprivate locationStrategy: LocationStrategy) {\n this.subscription = router.events.subscribe(s => {\n if (s instanceof NavigationEnd) {\n this.updateTargetUrlAndHref();\n }\n });\n }\n/**\n * @param {?} commands\n * @return {?}\n */\nset routerLink(commands: any[]|string) {\n if (commands != null) {\n this.commands = Array.isArray(commands) ? commands : [commands];\n } else {\n this.commands = [];\n }\n }\n/**\n * @param {?} value\n * @return {?}\n */\nset preserveQueryParams(value: boolean) {\n if (isDevMode() && /** @type {?} */(( console)) && /** @type {?} */(( console.warn))) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n this.preserve = value;\n }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: {}): any { this.updateTargetUrlAndHref(); }\n/**\n * @return {?}\n */\nngOnDestroy(): any { this.subscription.unsubscribe(); }\n/**\n * @param {?} button\n * @param {?} ctrlKey\n * @param {?} metaKey\n * @return {?}\n */\nonClick(button: number, ctrlKey: boolean, metaKey: boolean): boolean {\n if (button !== 0 || ctrlKey || metaKey) {\n return true;\n }\n\n if (typeof this.target === 'string' && this.target != '_self') {\n return true;\n }\n\n const /** @type {?} */ extras = {\n skipLocationChange: attrBoolValue(this.skipLocationChange),\n replaceUrl: attrBoolValue(this.replaceUrl),\n };\n this.router.navigateByUrl(this.urlTree, extras);\n return false;\n }\n/**\n * @return {?}\n */\nprivate updateTargetUrlAndHref(): void {\n this.href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree));\n }\n/**\n * @return {?}\n */\nget urlTree(): UrlTree {\n return this.router.createUrlTree(this.commands, {\n relativeTo: this.route,\n queryParams: this.queryParams,\n fragment: this.fragment,\n preserveQueryParams: attrBoolValue(this.preserve),\n queryParamsHandling: this.queryParamsHandling,\n preserveFragment: attrBoolValue(this.preserveFragment),\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: 'a[routerLink]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Router, },\n{type: ActivatedRoute, },\n{type: LocationStrategy, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'target': [{ type: HostBinding, args: ['attr.target', ] },{ type: Input },],\n'queryParams': [{ type: Input },],\n'fragment': [{ type: Input },],\n'queryParamsHandling': [{ type: Input },],\n'preserveFragment': [{ type: Input },],\n'skipLocationChange': [{ type: Input },],\n'replaceUrl': [{ type: Input },],\n'href': [{ type: HostBinding },],\n'routerLink': [{ type: Input },],\n'preserveQueryParams': [{ type: Input },],\n'onClick': [{ type: HostListener, args: ['click', ['$event.button', '$event.ctrlKey', '$event.metaKey'], ] },],\n};\n}\n\nfunction RouterLinkWithHref_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterLinkWithHref.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nRouterLinkWithHref.ctorParameters;\n/** @type {?} */\nRouterLinkWithHref.propDecorators;\n/** @type {?} */\nRouterLinkWithHref.prototype.target;\n/** @type {?} */\nRouterLinkWithHref.prototype.queryParams;\n/** @type {?} */\nRouterLinkWithHref.prototype.fragment;\n/** @type {?} */\nRouterLinkWithHref.prototype.queryParamsHandling;\n/** @type {?} */\nRouterLinkWithHref.prototype.preserveFragment;\n/** @type {?} */\nRouterLinkWithHref.prototype.skipLocationChange;\n/** @type {?} */\nRouterLinkWithHref.prototype.replaceUrl;\n/** @type {?} */\nRouterLinkWithHref.prototype.commands;\n/** @type {?} */\nRouterLinkWithHref.prototype.subscription;\n/** @type {?} */\nRouterLinkWithHref.prototype.preserve;\n/** @type {?} */\nRouterLinkWithHref.prototype.href;\n/** @type {?} */\nRouterLinkWithHref.prototype.router;\n/** @type {?} */\nRouterLinkWithHref.prototype.route;\n/** @type {?} */\nRouterLinkWithHref.prototype.locationStrategy;\n}\n\n/**\n * @param {?} s\n * @return {?}\n */\nfunction attrBoolValue(s: any): boolean {\n return s === '' || !!s;\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Location} from '@angular/common';\nimport {Compiler, Injector, NgModuleFactoryLoader, NgModuleRef, Type, isDevMode} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs/BehaviorSubject';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\nimport {Subscription} from 'rxjs/Subscription';\nimport {from} from 'rxjs/observable/from';\nimport {of } from 'rxjs/observable/of';\nimport {concatMap} from 'rxjs/operator/concatMap';\nimport {every} from 'rxjs/operator/every';\nimport {first} from 'rxjs/operator/first';\nimport {map} from 'rxjs/operator/map';\nimport {mergeMap} from 'rxjs/operator/mergeMap';\nimport {reduce} from 'rxjs/operator/reduce';\n\nimport {applyRedirects} from './apply_redirects';\nimport {LoadedRouterConfig, QueryParamsHandling, ResolveData, Route, Routes, RunGuardsAndResolvers, validateConfig} from './config';\nimport {createRouterState} from './create_router_state';\nimport {createUrlTree} from './create_url_tree';\nimport {RouterOutlet} from './directives/router_outlet';\nimport {Event, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, RouteConfigLoadEnd, RouteConfigLoadStart, RoutesRecognized} from './events';\nimport {recognize} from './recognize';\nimport {DetachedRouteHandle, DetachedRouteHandleInternal, RouteReuseStrategy} from './route_reuse_strategy';\nimport {RouterConfigLoader} from './router_config_loader';\nimport {RouterOutletMap} from './router_outlet_map';\nimport {ActivatedRoute, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot, advanceActivatedRoute, createEmptyState, equalParamsAndUrlSegments, inheritedParamsDataResolve} from './router_state';\nimport {PRIMARY_OUTLET, Params, isNavigationCancelingError} from './shared';\nimport {DefaultUrlHandlingStrategy, UrlHandlingStrategy} from './url_handling_strategy';\nimport {UrlSerializer, UrlTree, containsTree, createEmptyUrlTree} from './url_tree';\nimport {andObservables, forEach, shallowEqual, waitForMap, wrapIntoObservable} from './utils/collection';\nimport {TreeNode} from './utils/tree';\n\ndeclare let Zone: any;\n\n/**\n * @whatItDoes Represents the extra options used during navigation.\n *\n * @stable\n */\nexport interface NavigationExtras {\n /**\n * Enables relative navigation from the current ActivatedRoute.\n *\n * Configuration:\n *\n * ```\n * [{\n * path: 'parent',\n * component: ParentComponent,\n * children: [{\n * path: 'list',\n * component: ListComponent\n * },{\n * path: 'child',\n * component: ChildComponent\n * }]\n * }]\n * ```\n *\n * Navigate to list route from child route:\n *\n * ```\n * @Component({...})\n * class ChildComponent {\n * constructor(private router: Router, private route: ActivatedRoute) {}\n *\n * go() {\n * this.router.navigate(['../list'], { relativeTo: this.route });\n * }\n * }\n * ```\n */\n relativeTo?: ActivatedRoute;\n\n /**\n * Sets query parameters to the URL.\n *\n * ```\n * // Navigate to /results?page=1\n * this.router.navigate(['/results'], { queryParams: { page: 1 } });\n * ```\n */\n queryParams?: Params;\n\n /**\n * Sets the hash fragment for the URL.\n *\n * ```\n * // Navigate to /results#top\n * this.router.navigate(['/results'], { fragment: 'top' });\n * ```\n */\n fragment?: string;\n\n /**\n * Preserves the query parameters for the next navigation.\n *\n * deprecated, use `queryParamsHandling` instead\n *\n * ```\n * // Preserve query params from /results?page=1 to /view?page=1\n * this.router.navigate(['/view'], { preserveQueryParams: true });\n * ```\n *\n * @deprecated since v4\n */\n preserveQueryParams?: boolean;\n\n /**\n * config strategy to handle the query parameters for the next navigation.\n *\n * ```\n * // from /results?page=1 to /view?page=1&page=2\n * this.router.navigate(['/view'], { queryParams: { page: 2 }, queryParamsHandling: \"merge\" });\n * ```\n */\n queryParamsHandling?: QueryParamsHandling;\n /**\n * Preserves the fragment for the next navigation\n *\n * ```\n * // Preserve fragment from /results#top to /view#top\n * this.router.navigate(['/view'], { preserveFragment: true });\n * ```\n */\n preserveFragment?: boolean;\n /**\n * Navigates without pushing a new state into history.\n *\n * ```\n * // Navigate silently to /view\n * this.router.navigate(['/view'], { skipLocationChange: true });\n * ```\n */\n skipLocationChange?: boolean;\n /**\n * Navigates while replacing the current state in history.\n *\n * ```\n * // Navigate to /view\n * this.router.navigate(['/view'], { replaceUrl: true });\n * ```\n */\n replaceUrl?: boolean;\n}\n\n/**\n * @whatItDoes Error handler that is invoked when a navigation errors.\n *\n * @description\n * If the handler returns a value, the navigation promise will be resolved with this value.\n * If the handler throws an exception, the navigation promise will be rejected with\n * the exception.\n *\n * @stable\n */\nexport type ErrorHandler = (error: any) => any;\n/**\n * @param {?} error\n * @return {?}\n */\nfunction defaultErrorHandler(error: any): any {\n throw error;\n}\n\ntype NavigationSource = 'imperative' | 'popstate' | 'hashchange';\n\ntype NavigationParams = {\n id: number,\n rawUrl: UrlTree,\n extras: NavigationExtras,\n resolve: any,\n reject: any,\n promise: Promise,\n source: NavigationSource,\n};\n\n/**\n * @internal\n */\nexport type RouterHook = (snapshot: RouterStateSnapshot) => Observable;\n/**\n * \\@internal\n * @param {?} snapshot\n * @return {?}\n */\nfunction defaultRouterHook(snapshot: RouterStateSnapshot): Observable {\n return of (null);\n}\n/**\n * Does not detach any subtrees. Reuses routes as long as their route config is the same.\n */\nexport class DefaultRouteReuseStrategy implements RouteReuseStrategy {\n/**\n * @param {?} route\n * @return {?}\n */\nshouldDetach(route: ActivatedRouteSnapshot): boolean { return false; }\n/**\n * @param {?} route\n * @param {?} detachedTree\n * @return {?}\n */\nstore(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {}\n/**\n * @param {?} route\n * @return {?}\n */\nshouldAttach(route: ActivatedRouteSnapshot): boolean { return false; }\n/**\n * @param {?} route\n * @return {?}\n */\nretrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { return null; }\n/**\n * @param {?} future\n * @param {?} curr\n * @return {?}\n */\nshouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n return future.routeConfig === curr.routeConfig;\n }\n}\n/**\n * \\@whatItDoes Provides the navigation and url manipulation capabilities.\n * \n * See {\\@link Routes} for more details and examples.\n * \n * \\@ngModule RouterModule\n * \n * \\@stable\n */\nexport class Router {\nprivate currentUrlTree: UrlTree;\nprivate rawUrlTree: UrlTree;\nprivate navigations = new BehaviorSubject(null);\nprivate routerEvents = new Subject();\nprivate currentRouterState: RouterState;\nprivate locationSubscription: Subscription;\nprivate navigationId: number = 0;\nprivate configLoader: RouterConfigLoader;\nprivate ngModule: NgModuleRef;\n\n /**\n * Error handler that is invoked when a navigation errors.\n *\n * See {@link ErrorHandler} for more information.\n */\n errorHandler: ErrorHandler = defaultErrorHandler;\n\n\n\n /**\n * Indicates if at least one navigation happened.\n */\n navigated: boolean = false;\n/**\n * Used by RouterModule. This allows us to\n * pause the navigation either before preactivation or after it.\n * \\@internal\n */\nhooks: {beforePreactivation: RouterHook, afterPreactivation: RouterHook} = {\n beforePreactivation: defaultRouterHook,\n afterPreactivation: defaultRouterHook\n };\n\n /**\n * Extracts and merges URLs. Used for AngularJS to Angular migrations.\n */\n urlHandlingStrategy: UrlHandlingStrategy = new DefaultUrlHandlingStrategy();\n\n routeReuseStrategy: RouteReuseStrategy = new DefaultRouteReuseStrategy();\n/**\n * @param {?} rootComponentType\n * @param {?} urlSerializer\n * @param {?} outletMap\n * @param {?} location\n * @param {?} injector\n * @param {?} loader\n * @param {?} compiler\n * @param {?} config\n */\nconstructor(\nprivate rootComponentType: Type,\nprivate urlSerializer: UrlSerializer,\nprivate outletMap: RouterOutletMap,\nprivate location: Location, injector: Injector,\n loader: NgModuleFactoryLoader, compiler: Compiler,\npublic config: Routes) {\n const onLoadStart = (r: Route) => this.triggerEvent(new RouteConfigLoadStart(r));\n const onLoadEnd = (r: Route) => this.triggerEvent(new RouteConfigLoadEnd(r));\n\n this.ngModule = injector.get(NgModuleRef);\n\n this.resetConfig(config);\n this.currentUrlTree = createEmptyUrlTree();\n this.rawUrlTree = this.currentUrlTree;\n\n this.configLoader = new RouterConfigLoader(loader, compiler, onLoadStart, onLoadEnd);\n this.currentRouterState = createEmptyState(this.currentUrlTree, this.rootComponentType);\n this.processNavigations();\n }\n/**\n * \\@internal \n * TODO: this should be removed once the constructor of the router made internal\n * @param {?} rootComponentType\n * @return {?}\n */\nresetRootComponentType(rootComponentType: Type): void {\n this.rootComponentType = rootComponentType;\n // TODO: vsavkin router 4.0 should make the root component set to null\n // this will simplify the lifecycle of the router.\n this.currentRouterState.root.component = this.rootComponentType;\n }\n/**\n * Sets up the location change listener and performs the initial navigation.\n * @return {?}\n */\ninitialNavigation(): void {\n this.setUpLocationChangeListener();\n if (this.navigationId === 0) {\n this.navigateByUrl(this.location.path(true), {replaceUrl: true});\n }\n }\n/**\n * Sets up the location change listener.\n * @return {?}\n */\nsetUpLocationChangeListener(): void {\n // Zone.current.wrap is needed because of the issue with RxJS scheduler,\n // which does not work properly with zone.js in IE and Safari\n if (!this.locationSubscription) {\n this.locationSubscription = /** @type {?} */(( this.location.subscribe(Zone.current.wrap((change: any) => {\n const /** @type {?} */ rawUrlTree = this.urlSerializer.parse(change['url']);\n const /** @type {?} */ source: NavigationSource = change['type'] === 'popstate' ? 'popstate' : 'hashchange';\n setTimeout(() => { this.scheduleNavigation(rawUrlTree, source, {replaceUrl: true}); }, 0);\n }))));\n }\n }\n/**\n * The current route state\n * @return {?}\n */\nget routerState(): RouterState { return this.currentRouterState; }\n/**\n * The current url\n * @return {?}\n */\nget url(): string { return this.serializeUrl(this.currentUrlTree); }\n/**\n * An observable of router events\n * @return {?}\n */\nget events(): Observable { return this.routerEvents; }\n/**\n * \\@internal\n * @param {?} e\n * @return {?}\n */\ntriggerEvent(e: Event) { this.routerEvents.next(e); }\n/**\n * Resets the configuration used for navigation and generating links.\n * \n * ### Usage\n * \n * ```\n * router.resetConfig([\n * { path: 'team/:id', component: TeamCmp, children: [\n * { path: 'simple', component: SimpleCmp },\n * { path: 'user/:name', component: UserCmp }\n * ]}\n * ]);\n * ```\n * @param {?} config\n * @return {?}\n */\nresetConfig(config: Routes): void {\n validateConfig(config);\n this.config = config;\n }\n/**\n * \\@docsNotRequired\n * @return {?}\n */\nngOnDestroy() { this.dispose(); }\n/**\n * Disposes of the router\n * @return {?}\n */\ndispose(): void {\n if (this.locationSubscription) {\n this.locationSubscription.unsubscribe();\n this.locationSubscription = null;\n }\n }\n/**\n * Applies an array of commands to the current url tree and creates a new url tree.\n * \n * When given an activate route, applies the given commands starting from the route.\n * When not given a route, applies the given command starting from the root.\n * \n * ### Usage\n * \n * ```\n * // create /team/33/user/11\n * router.createUrlTree(['/team', 33, 'user', 11]);\n * \n * // create /team/33;expand=true/user/11\n * router.createUrlTree(['/team', 33, {expand: true}, 'user', 11]);\n * \n * // you can collapse static segments like this (this works only with the first passed-in value):\n * router.createUrlTree(['/team/33/user', userId]);\n * \n * // If the first segment can contain slashes, and you do not want the router to split it, you\n * // can do the following:\n * \n * router.createUrlTree([{segmentPath: '/one/two'}]);\n * \n * // create /team/33/(user/11//right:chat)\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: 'chat'}}]);\n * \n * // remove the right secondary node\n * router.createUrlTree(['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n * \n * // assuming the current url is `/team/33/user/11` and the route points to `user/11`\n * \n * // navigate to /team/33/user/11/details\n * router.createUrlTree(['details'], {relativeTo: route});\n * \n * // navigate to /team/33/user/22\n * router.createUrlTree(['../22'], {relativeTo: route});\n * \n * // navigate to /team/44/user/22\n * router.createUrlTree(['../../team/44/user/22'], {relativeTo: route});\n * ```\n * @param {?} commands\n * @param {?=} __1\n * @return {?}\n */\ncreateUrlTree(\n commands: any[], {relativeTo, queryParams, fragment, preserveQueryParams, queryParamsHandling,\n preserveFragment}: NavigationExtras = {}): UrlTree {\n if (isDevMode() && preserveQueryParams && /** @type {?} */(( console)) && /** @type {?} */(( console.warn))) {\n console.warn('preserveQueryParams is deprecated, use queryParamsHandling instead.');\n }\n const /** @type {?} */ a = relativeTo || this.routerState.root;\n const /** @type {?} */ f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n let /** @type {?} */ q: Params = null;\n if (queryParamsHandling) {\n switch (queryParamsHandling) {\n case 'merge':\n q = {...this.currentUrlTree.queryParams, ...queryParams};\n break;\n case 'preserve':\n q = this.currentUrlTree.queryParams;\n break;\n default:\n q = queryParams;\n }\n } else {\n q = preserveQueryParams ? this.currentUrlTree.queryParams : queryParams;\n }\n return createUrlTree(a, this.currentUrlTree, commands, q, f);\n }\n/**\n * Navigate based on the provided url. This navigation is always absolute.\n * \n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n * \n * ### Usage\n * \n * ```\n * router.navigateByUrl(\"/team/33/user/11\");\n * \n * // Navigate without updating the URL\n * router.navigateByUrl(\"/team/33/user/11\", { skipLocationChange: true });\n * ```\n * \n * In opposite to `navigate`, `navigateByUrl` takes a whole URL\n * and does not apply any delta to the current one.\n * @param {?} url\n * @param {?=} extras\n * @return {?}\n */\nnavigateByUrl(url: string|UrlTree, extras: NavigationExtras = {skipLocationChange: false}):\n Promise {\n const /** @type {?} */ urlTree = url instanceof UrlTree ? url : this.parseUrl(url);\n const /** @type {?} */ mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n\n return this.scheduleNavigation(mergedTree, 'imperative', extras);\n }\n/**\n * Navigate based on the provided array of commands and a starting point.\n * If no starting route is provided, the navigation is absolute.\n * \n * Returns a promise that:\n * - resolves to 'true' when navigation succeeds,\n * - resolves to 'false' when navigation fails,\n * - is rejected when an error happens.\n * \n * ### Usage\n * \n * ```\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n * \n * // Navigate without updating the URL\n * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n * ```\n * \n * In opposite to `navigateByUrl`, `navigate` always takes a delta that is applied to the current\n * URL.\n * @param {?} commands\n * @param {?=} extras\n * @return {?}\n */\nnavigate(commands: any[], extras: NavigationExtras = {skipLocationChange: false}):\n Promise {\n validateCommands(commands);\n if (typeof extras.queryParams === 'object' && extras.queryParams !== null) {\n extras.queryParams = this.removeEmptyProps(extras.queryParams);\n }\n return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n }\n/**\n * Serializes a {\\@link UrlTree} into a string\n * @param {?} url\n * @return {?}\n */\nserializeUrl(url: UrlTree): string { return this.urlSerializer.serialize(url); }\n/**\n * Parses a string into a {\\@link UrlTree}\n * @param {?} url\n * @return {?}\n */\nparseUrl(url: string): UrlTree { return this.urlSerializer.parse(url); }\n/**\n * Returns whether the url is activated\n * @param {?} url\n * @param {?} exact\n * @return {?}\n */\nisActive(url: string|UrlTree, exact: boolean): boolean {\n if (url instanceof UrlTree) {\n return containsTree(this.currentUrlTree, url, exact);\n } else {\n const /** @type {?} */ urlTree = this.urlSerializer.parse(url);\n return containsTree(this.currentUrlTree, urlTree, exact);\n }\n }\n/**\n * @param {?} params\n * @return {?}\n */\nprivate removeEmptyProps(params: Params): Params {\n return Object.keys(params).reduce((result: Params, key: string) => {\n const /** @type {?} */ value: any = params[key];\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n return result;\n }, {});\n }\n/**\n * @return {?}\n */\nprivate processNavigations(): void {\n concatMap\n .call(\n this.navigations,\n (nav: NavigationParams) => {\n if (nav) {\n this.executeScheduledNavigation(nav);\n // a failed navigation should not stop the router from processing\n // further navigations => the catch\n return nav.promise.catch(() => {});\n } else {\n return /** @type {?} */(( of (null)));\n }\n })\n .subscribe(() => {});\n }\n/**\n * @param {?} rawUrl\n * @param {?} source\n * @param {?} extras\n * @return {?}\n */\nprivate scheduleNavigation(rawUrl: UrlTree, source: NavigationSource, extras: NavigationExtras):\n Promise {\n const /** @type {?} */ lastNavigation = this.navigations.value;\n\n // If the user triggers a navigation imperatively (e.g., by using navigateByUrl),\n // and that navigation results in 'replaceState' that leads to the same URL,\n // we should skip those.\n if (lastNavigation && source !== 'imperative' && lastNavigation.source === 'imperative' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return null; // return value is not used\n }\n\n // Because of a bug in IE and Edge, the location class fires two events (popstate and\n // hashchange) every single time. The second one should be ignored. Otherwise, the URL will\n // flicker.\n if (lastNavigation && source == 'hashchange' && lastNavigation.source === 'popstate' &&\n lastNavigation.rawUrl.toString() === rawUrl.toString()) {\n return null; // return value is not used\n }\n\n let /** @type {?} */ resolve: any = null;\n let /** @type {?} */ reject: any = null;\n\n const /** @type {?} */ promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n const /** @type {?} */ id = ++this.navigationId;\n this.navigations.next({id, source, rawUrl, extras, resolve, reject, promise});\n\n // Make sure that the error is propagated even though `processNavigations` catch\n // handler does not rethrow\n return promise.catch((e: any) => Promise.reject(e));\n }\n/**\n * @param {?} __0\n * @return {?}\n */\nprivate executeScheduledNavigation({id, rawUrl, extras, resolve, reject}: NavigationParams):\n void {\n const /** @type {?} */ url = this.urlHandlingStrategy.extract(rawUrl);\n const /** @type {?} */ urlTransition = !this.navigated || url.toString() !== this.currentUrlTree.toString();\n\n if (urlTransition && this.urlHandlingStrategy.shouldProcessUrl(rawUrl)) {\n this.routerEvents.next(new NavigationStart(id, this.serializeUrl(url)));\n Promise.resolve()\n .then(\n (_) => this.runNavigate(\n url, rawUrl, extras.skipLocationChange, extras.replaceUrl, id, null))\n .then(resolve, reject);\n\n // we cannot process the current URL, but we could process the previous one =>\n // we need to do some cleanup\n } else if (\n urlTransition && this.rawUrlTree &&\n this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)) {\n this.routerEvents.next(new NavigationStart(id, this.serializeUrl(url)));\n Promise.resolve()\n .then(\n (_) => this.runNavigate(\n url, rawUrl, false, false, id,\n createEmptyState(url, this.rootComponentType).snapshot))\n .then(resolve, reject);\n\n } else {\n this.rawUrlTree = rawUrl;\n resolve(null);\n }\n }\n/**\n * @param {?} url\n * @param {?} rawUrl\n * @param {?} shouldPreventPushState\n * @param {?} shouldReplaceUrl\n * @param {?} id\n * @param {?} precreatedState\n * @return {?}\n */\nprivate runNavigate(\n url: UrlTree, rawUrl: UrlTree, shouldPreventPushState: boolean, shouldReplaceUrl: boolean,\n id: number, precreatedState: RouterStateSnapshot): Promise {\n if (id !== this.navigationId) {\n this.location.go(this.urlSerializer.serialize(this.currentUrlTree));\n this.routerEvents.next(new NavigationCancel(\n id, this.serializeUrl(url),\n `Navigation ID ${id} is not equal to the current navigation id ${this.navigationId}`));\n return Promise.resolve(false);\n }\n\n return new Promise((resolvePromise, rejectPromise) => {\n // create an observable of the url and route state snapshot\n // this operation do not result in any side effects\n let /** @type {?} */ urlAndSnapshot$: Observable<{appliedUrl: UrlTree, snapshot: RouterStateSnapshot}>;\n if (!precreatedState) {\n const /** @type {?} */ moduleInjector = this.ngModule.injector;\n const /** @type {?} */ redirectsApplied$ =\n applyRedirects(moduleInjector, this.configLoader, this.urlSerializer, url, this.config);\n\n urlAndSnapshot$ = mergeMap.call(redirectsApplied$, (appliedUrl: UrlTree) => {\n return map.call(\n recognize(\n this.rootComponentType, this.config, appliedUrl, this.serializeUrl(appliedUrl)),\n (snapshot: any) => {\n\n this.routerEvents.next(new RoutesRecognized(\n id, this.serializeUrl(url), this.serializeUrl(appliedUrl), snapshot));\n\n return {appliedUrl, snapshot};\n });\n });\n } else {\n urlAndSnapshot$ = of ({appliedUrl: url, snapshot: precreatedState});\n }\n\n const /** @type {?} */ beforePreactivationDone$ = mergeMap.call(\n urlAndSnapshot$, (p: {appliedUrl: string, snapshot: RouterStateSnapshot}) => {\n return map.call(this.hooks.beforePreactivation(p.snapshot), () => p);\n });\n\n // run preactivation: guards and data resolvers\n let /** @type {?} */ preActivation: PreActivation;\n const /** @type {?} */ preactivationTraverse$ = map.call(\n beforePreactivationDone$,\n ({appliedUrl, snapshot}: {appliedUrl: string, snapshot: RouterStateSnapshot}) => {\n const /** @type {?} */ moduleInjector = this.ngModule.injector;\n preActivation =\n new PreActivation(snapshot, this.currentRouterState.snapshot, moduleInjector);\n preActivation.traverse(this.outletMap);\n return {appliedUrl, snapshot};\n });\n\n const /** @type {?} */ preactivationCheckGuards$ = mergeMap.call(\n preactivationTraverse$,\n ({appliedUrl, snapshot}: {appliedUrl: string, snapshot: RouterStateSnapshot}) => {\n if (this.navigationId !== id) return of (false);\n\n return map.call(preActivation.checkGuards(), (shouldActivate: boolean) => {\n return {appliedUrl: appliedUrl, snapshot: snapshot, shouldActivate: shouldActivate};\n });\n });\n\n const /** @type {?} */ preactivationResolveData$ = mergeMap.call(preactivationCheckGuards$, (p: any) => {\n if (this.navigationId !== id) return of (false);\n\n if (p.shouldActivate) {\n return map.call(preActivation.resolveData(), () => p);\n } else {\n return of (p);\n }\n });\n\n const /** @type {?} */ preactivationDone$ = mergeMap.call(preactivationResolveData$, (p: any) => {\n return map.call(this.hooks.afterPreactivation(p.snapshot), () => p);\n });\n\n\n // create router state\n // this operation has side effects => route state is being affected\n const /** @type {?} */ routerState$ =\n map.call(preactivationDone$, ({appliedUrl, snapshot, shouldActivate}: any) => {\n if (shouldActivate) {\n const /** @type {?} */ state =\n createRouterState(this.routeReuseStrategy, snapshot, this.currentRouterState);\n return {appliedUrl, state, shouldActivate};\n } else {\n return {appliedUrl, state: null, shouldActivate};\n }\n });\n\n\n // applied the new router state\n // this operation has side effects\n let /** @type {?} */ navigationIsSuccessful: boolean;\n const /** @type {?} */ storedState = this.currentRouterState;\n const /** @type {?} */ storedUrl = this.currentUrlTree;\n\n routerState$\n .forEach(({appliedUrl, state, shouldActivate}: any) => {\n if (!shouldActivate || id !== this.navigationId) {\n navigationIsSuccessful = false;\n return;\n }\n\n this.currentUrlTree = appliedUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);\n\n this.currentRouterState = state;\n\n if (!shouldPreventPushState) {\n const /** @type {?} */ path = this.urlSerializer.serialize(this.rawUrlTree);\n if (this.location.isCurrentPathEqualTo(path) || shouldReplaceUrl) {\n this.location.replaceState(path);\n } else {\n this.location.go(path);\n }\n }\n\n new ActivateRoutes(this.routeReuseStrategy, state, storedState)\n .activate(this.outletMap);\n\n navigationIsSuccessful = true;\n })\n .then(\n () => {\n if (navigationIsSuccessful) {\n this.navigated = true;\n this.routerEvents.next(new NavigationEnd(\n id, this.serializeUrl(url), this.serializeUrl(this.currentUrlTree)));\n resolvePromise(true);\n } else {\n this.resetUrlToCurrentUrlTree();\n this.routerEvents.next(new NavigationCancel(id, this.serializeUrl(url), ''));\n resolvePromise(false);\n }\n },\n (e: any) => {\n if (isNavigationCancelingError(e)) {\n this.resetUrlToCurrentUrlTree();\n this.navigated = true;\n this.routerEvents.next(\n new NavigationCancel(id, this.serializeUrl(url), e.message));\n resolvePromise(false);\n } else {\n this.routerEvents.next(new NavigationError(id, this.serializeUrl(url), e));\n try {\n resolvePromise(this.errorHandler(e));\n } catch ( /** @type {?} */ee) {\n rejectPromise(ee);\n }\n }\n\n this.currentRouterState = storedState;\n this.currentUrlTree = storedUrl;\n this.rawUrlTree = this.urlHandlingStrategy.merge(this.currentUrlTree, rawUrl);\n this.location.replaceState(this.serializeUrl(this.rawUrlTree));\n });\n });\n }\n/**\n * @return {?}\n */\nprivate resetUrlToCurrentUrlTree(): void {\n const /** @type {?} */ path = this.urlSerializer.serialize(this.rawUrlTree);\n this.location.replaceState(path);\n }\n}\n\nfunction Router_tsickle_Closure_declarations() {\n/** @type {?} */\nRouter.prototype.currentUrlTree;\n/** @type {?} */\nRouter.prototype.rawUrlTree;\n/** @type {?} */\nRouter.prototype.navigations;\n/** @type {?} */\nRouter.prototype.routerEvents;\n/** @type {?} */\nRouter.prototype.currentRouterState;\n/** @type {?} */\nRouter.prototype.locationSubscription;\n/** @type {?} */\nRouter.prototype.navigationId;\n/** @type {?} */\nRouter.prototype.configLoader;\n/** @type {?} */\nRouter.prototype.ngModule;\n/**\n * Error handler that is invoked when a navigation errors.\n * \n * See {\\@link ErrorHandler} for more information.\n * @type {?}\n */\nRouter.prototype.errorHandler;\n/**\n * Indicates if at least one navigation happened.\n * @type {?}\n */\nRouter.prototype.navigated;\n/**\n * Used by RouterModule. This allows us to\n * pause the navigation either before preactivation or after it.\n * \\@internal\n * @type {?}\n */\nRouter.prototype.hooks;\n/**\n * Extracts and merges URLs. Used for AngularJS to Angular migrations.\n * @type {?}\n */\nRouter.prototype.urlHandlingStrategy;\n/** @type {?} */\nRouter.prototype.routeReuseStrategy;\n/** @type {?} */\nRouter.prototype.rootComponentType;\n/** @type {?} */\nRouter.prototype.urlSerializer;\n/** @type {?} */\nRouter.prototype.outletMap;\n/** @type {?} */\nRouter.prototype.location;\n/** @type {?} */\nRouter.prototype.config;\n}\n\nclass CanActivate {\n/**\n * @param {?} path\n */\nconstructor(public path: ActivatedRouteSnapshot[]) {}\n/**\n * @return {?}\n */\nget route(): ActivatedRouteSnapshot { return this.path[this.path.length - 1]; }\n}\n\nfunction CanActivate_tsickle_Closure_declarations() {\n/** @type {?} */\nCanActivate.prototype.path;\n}\n\nclass CanDeactivate {\n/**\n * @param {?} component\n * @param {?} route\n */\nconstructor(public component: Object,\npublic route: ActivatedRouteSnapshot) {}\n}\n\nfunction CanDeactivate_tsickle_Closure_declarations() {\n/** @type {?} */\nCanDeactivate.prototype.component;\n/** @type {?} */\nCanDeactivate.prototype.route;\n}\n\nexport class PreActivation {\nprivate canActivateChecks: CanActivate[] = [];\nprivate canDeactivateChecks: CanDeactivate[] = [];\n/**\n * @param {?} future\n * @param {?} curr\n * @param {?} moduleInjector\n */\nconstructor(\nprivate future: RouterStateSnapshot,\nprivate curr: RouterStateSnapshot,\nprivate moduleInjector: Injector) {}\n/**\n * @param {?} parentOutletMap\n * @return {?}\n */\ntraverse(parentOutletMap: RouterOutletMap): void {\n const /** @type {?} */ futureRoot = this.future._root;\n const /** @type {?} */ currRoot = this.curr ? this.curr._root : null;\n this.traverseChildRoutes(futureRoot, currRoot, parentOutletMap, [futureRoot.value]);\n }\n/**\n * @return {?}\n */\ncheckGuards(): Observable {\n if (this.canDeactivateChecks.length === 0 && this.canActivateChecks.length === 0) {\n return of (true);\n }\n const /** @type {?} */ canDeactivate$ = this.runCanDeactivateChecks();\n return mergeMap.call(\n canDeactivate$,\n (canDeactivate: boolean) => canDeactivate ? this.runCanActivateChecks() : of (false));\n }\n/**\n * @return {?}\n */\nresolveData(): Observable {\n if (this.canActivateChecks.length === 0) return of (null);\n const /** @type {?} */ checks$ = from(this.canActivateChecks);\n const /** @type {?} */ runningChecks$ =\n concatMap.call(checks$, (check: CanActivate) => this.runResolve(check.route));\n return reduce.call(runningChecks$, (_: any, __: any) => _);\n }\n/**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} outletMap\n * @param {?} futurePath\n * @return {?}\n */\nprivate traverseChildRoutes(\n futureNode: TreeNode, currNode: TreeNode,\n outletMap: RouterOutletMap, futurePath: ActivatedRouteSnapshot[]): void {\n const /** @type {?} */ prevChildren = nodeChildrenAsMap(currNode);\n\n futureNode.children.forEach(c => {\n this.traverseRoutes(c, prevChildren[c.value.outlet], outletMap, futurePath.concat([c.value]));\n delete prevChildren[c.value.outlet];\n });\n forEach(\n prevChildren, (v: TreeNode, k: string) =>\n this.deactiveRouteAndItsChildren(v, outletMap._outlets[k]));\n }\n/**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} parentOutletMap\n * @param {?} futurePath\n * @return {?}\n */\nprivate traverseRoutes(\n futureNode: TreeNode, currNode: TreeNode,\n parentOutletMap: RouterOutletMap, futurePath: ActivatedRouteSnapshot[]): void {\n const /** @type {?} */ future = futureNode.value;\n const /** @type {?} */ curr = currNode ? currNode.value : null;\n const /** @type {?} */ outlet = parentOutletMap ? parentOutletMap._outlets[futureNode.value.outlet] : null;\n\n // reusing the node\n if (curr && future._routeConfig === curr._routeConfig) {\n if (this.shouldRunGuardsAndResolvers(\n curr, future, future._routeConfig.runGuardsAndResolvers)) {\n this.canActivateChecks.push(new CanActivate(futurePath));\n this.canDeactivateChecks.push(new CanDeactivate(outlet.component, curr));\n } else {\n // we need to set the data\n future.data = curr.data;\n future._resolvedData = curr._resolvedData;\n }\n\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.traverseChildRoutes(\n futureNode, currNode, outlet ? outlet.outletMap : null, futurePath);\n\n // if we have a componentless route, we recurse but keep the same outlet map.\n } else {\n this.traverseChildRoutes(futureNode, currNode, parentOutletMap, futurePath);\n }\n } else {\n if (curr) {\n this.deactiveRouteAndItsChildren(currNode, outlet);\n }\n\n this.canActivateChecks.push(new CanActivate(futurePath));\n // If we have a component, we need to go through an outlet.\n if (future.component) {\n this.traverseChildRoutes(futureNode, null, outlet ? outlet.outletMap : null, futurePath);\n\n // if we have a componentless route, we recurse but keep the same outlet map.\n } else {\n this.traverseChildRoutes(futureNode, null, parentOutletMap, futurePath);\n }\n }\n }\n/**\n * @param {?} curr\n * @param {?} future\n * @param {?} mode\n * @return {?}\n */\nprivate shouldRunGuardsAndResolvers(\n curr: ActivatedRouteSnapshot, future: ActivatedRouteSnapshot,\n mode: RunGuardsAndResolvers): boolean {\n switch (mode) {\n case 'always':\n return true;\n\n case 'paramsOrQueryParamsChange':\n return !equalParamsAndUrlSegments(curr, future) ||\n !shallowEqual(curr.queryParams, future.queryParams);\n\n case 'paramsChange':\n default:\n return !equalParamsAndUrlSegments(curr, future);\n }\n }\n/**\n * @param {?} route\n * @param {?} outlet\n * @return {?}\n */\nprivate deactiveRouteAndItsChildren(\n route: TreeNode, outlet: RouterOutlet): void {\n const /** @type {?} */ prevChildren = nodeChildrenAsMap(route);\n const /** @type {?} */ r = route.value;\n\n forEach(prevChildren, (v: TreeNode, k: string) => {\n if (!r.component) {\n this.deactiveRouteAndItsChildren(v, outlet);\n } else if (!!outlet) {\n this.deactiveRouteAndItsChildren(v, outlet.outletMap._outlets[k]);\n } else {\n this.deactiveRouteAndItsChildren(v, null);\n }\n });\n\n if (!r.component) {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n } else if (outlet && outlet.isActivated) {\n this.canDeactivateChecks.push(new CanDeactivate(outlet.component, r));\n } else {\n this.canDeactivateChecks.push(new CanDeactivate(null, r));\n }\n }\n/**\n * @return {?}\n */\nprivate runCanDeactivateChecks(): Observable {\n const /** @type {?} */ checks$ = from(this.canDeactivateChecks);\n const /** @type {?} */ runningChecks$ = mergeMap.call(\n checks$, (check: CanDeactivate) => this.runCanDeactivate(check.component, check.route));\n return every.call(runningChecks$, (result: boolean) => result === true);\n }\n/**\n * @return {?}\n */\nprivate runCanActivateChecks(): Observable {\n const /** @type {?} */ checks$ = from(this.canActivateChecks);\n const /** @type {?} */ runningChecks$ = mergeMap.call(\n checks$, (check: CanActivate) => andObservables(from(\n [this.runCanActivateChild(check.path), this.runCanActivate(check.route)])));\n return every.call(runningChecks$, (result: boolean) => result === true);\n }\n/**\n * @param {?} future\n * @return {?}\n */\nprivate runCanActivate(future: ActivatedRouteSnapshot): Observable {\n const /** @type {?} */ canActivate = future._routeConfig ? future._routeConfig.canActivate : null;\n if (!canActivate || canActivate.length === 0) return of (true);\n const /** @type {?} */ obs = map.call(from(canActivate), (c: any) => {\n const /** @type {?} */ guard = this.getToken(c, future);\n let /** @type {?} */ observable: Observable;\n if (guard.canActivate) {\n observable = wrapIntoObservable(guard.canActivate(future, this.future));\n } else {\n observable = wrapIntoObservable(guard(future, this.future));\n }\n return first.call(observable);\n });\n return andObservables(obs);\n }\n/**\n * @param {?} path\n * @return {?}\n */\nprivate runCanActivateChild(path: ActivatedRouteSnapshot[]): Observable {\n const /** @type {?} */ future = path[path.length - 1];\n\n const /** @type {?} */ canActivateChildGuards = path.slice(0, path.length - 1)\n .reverse()\n .map(p => this.extractCanActivateChild(p))\n .filter(_ => _ !== null);\n\n return andObservables(map.call(from(canActivateChildGuards), (d: any) => {\n const /** @type {?} */ obs = map.call(from(d.guards), (c: any) => {\n const /** @type {?} */ guard = this.getToken(c, d.node);\n let /** @type {?} */ observable: Observable;\n if (guard.canActivateChild) {\n observable = wrapIntoObservable(guard.canActivateChild(future, this.future));\n } else {\n observable = wrapIntoObservable(guard(future, this.future));\n }\n return first.call(observable);\n });\n return andObservables(obs);\n }));\n }\n/**\n * @param {?} p\n * @return {?}\n */\nprivate extractCanActivateChild(p: ActivatedRouteSnapshot):\n {node: ActivatedRouteSnapshot, guards: any[]} {\n const /** @type {?} */ canActivateChild = p._routeConfig ? p._routeConfig.canActivateChild : null;\n if (!canActivateChild || canActivateChild.length === 0) return null;\n return {node: p, guards: canActivateChild};\n }\n/**\n * @param {?} component\n * @param {?} curr\n * @return {?}\n */\nprivate runCanDeactivate(component: Object, curr: ActivatedRouteSnapshot): Observable {\n const /** @type {?} */ canDeactivate = curr && curr._routeConfig ? curr._routeConfig.canDeactivate : null;\n if (!canDeactivate || canDeactivate.length === 0) return of (true);\n const /** @type {?} */ canDeactivate$ = mergeMap.call(from(canDeactivate), (c: any) => {\n const /** @type {?} */ guard = this.getToken(c, curr);\n let /** @type {?} */ observable: Observable;\n if (guard.canDeactivate) {\n observable =\n wrapIntoObservable(guard.canDeactivate(component, curr, this.curr, this.future));\n } else {\n observable = wrapIntoObservable(guard(component, curr, this.curr, this.future));\n }\n return first.call(observable);\n });\n return every.call(canDeactivate$, (result: any) => result === true);\n }\n/**\n * @param {?} future\n * @return {?}\n */\nprivate runResolve(future: ActivatedRouteSnapshot): Observable {\n const /** @type {?} */ resolve = future._resolve;\n return map.call(this.resolveNode(resolve, future), (resolvedData: any): any => {\n future._resolvedData = resolvedData;\n future.data = {...future.data, ...inheritedParamsDataResolve(future).resolve};\n return null;\n });\n }\n/**\n * @param {?} resolve\n * @param {?} future\n * @return {?}\n */\nprivate resolveNode(resolve: ResolveData, future: ActivatedRouteSnapshot): Observable {\n return waitForMap(resolve, (k, v) => {\n const /** @type {?} */ resolver = this.getToken(v, future);\n return resolver.resolve ? wrapIntoObservable(resolver.resolve(future, this.future)) :\n wrapIntoObservable(resolver(future, this.future));\n });\n }\n/**\n * @param {?} token\n * @param {?} snapshot\n * @return {?}\n */\nprivate getToken(token: any, snapshot: ActivatedRouteSnapshot): any {\n const /** @type {?} */ config = closestLoadedConfig(snapshot);\n const /** @type {?} */ injector = config ? config.module.injector : this.moduleInjector;\n return injector.get(token);\n }\n}\n\nfunction PreActivation_tsickle_Closure_declarations() {\n/** @type {?} */\nPreActivation.prototype.canActivateChecks;\n/** @type {?} */\nPreActivation.prototype.canDeactivateChecks;\n/** @type {?} */\nPreActivation.prototype.future;\n/** @type {?} */\nPreActivation.prototype.curr;\n/** @type {?} */\nPreActivation.prototype.moduleInjector;\n}\n\nclass ActivateRoutes {\n/**\n * @param {?} routeReuseStrategy\n * @param {?} futureState\n * @param {?} currState\n */\nconstructor(\nprivate routeReuseStrategy: RouteReuseStrategy,\nprivate futureState: RouterState,\nprivate currState: RouterState) {}\n/**\n * @param {?} parentOutletMap\n * @return {?}\n */\nactivate(parentOutletMap: RouterOutletMap): void {\n const /** @type {?} */ futureRoot = this.futureState._root;\n const /** @type {?} */ currRoot = this.currState ? this.currState._root : null;\n\n this.deactivateChildRoutes(futureRoot, currRoot, parentOutletMap);\n advanceActivatedRoute(this.futureState.root);\n this.activateChildRoutes(futureRoot, currRoot, parentOutletMap);\n }\n/**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} outletMap\n * @return {?}\n */\nprivate deactivateChildRoutes(\n futureNode: TreeNode, currNode: TreeNode,\n outletMap: RouterOutletMap): void {\n const /** @type {?} */ prevChildren: {[key: string]: any} = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(c => {\n this.deactivateRoutes(c, prevChildren[c.value.outlet], outletMap);\n delete prevChildren[c.value.outlet];\n });\n forEach(prevChildren, (v: any, k: string) => this.deactiveRouteAndItsChildren(v, outletMap));\n }\n/**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} outletMap\n * @return {?}\n */\nprivate activateChildRoutes(\n futureNode: TreeNode, currNode: TreeNode,\n outletMap: RouterOutletMap): void {\n const /** @type {?} */ prevChildren: {[key: string]: any} = nodeChildrenAsMap(currNode);\n futureNode.children.forEach(\n c => { this.activateRoutes(c, prevChildren[c.value.outlet], outletMap); });\n }\n/**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} parentOutletMap\n * @return {?}\n */\ndeactivateRoutes(\n futureNode: TreeNode, currNode: TreeNode,\n parentOutletMap: RouterOutletMap): void {\n const /** @type {?} */ future = futureNode.value;\n const /** @type {?} */ curr = currNode ? currNode.value : null;\n\n // reusing the node\n if (future === curr) {\n // If we have a normal route, we need to go through an outlet.\n if (future.component) {\n const /** @type {?} */ outlet = getOutlet(parentOutletMap, future);\n this.deactivateChildRoutes(futureNode, currNode, outlet.outletMap);\n\n // if we have a componentless route, we recurse but keep the same outlet map.\n } else {\n this.deactivateChildRoutes(futureNode, currNode, parentOutletMap);\n }\n } else {\n if (curr) {\n this.deactiveRouteAndItsChildren(currNode, parentOutletMap);\n }\n }\n }\n/**\n * @param {?} futureNode\n * @param {?} currNode\n * @param {?} parentOutletMap\n * @return {?}\n */\nactivateRoutes(\n futureNode: TreeNode, currNode: TreeNode,\n parentOutletMap: RouterOutletMap): void {\n const /** @type {?} */ future = futureNode.value;\n const /** @type {?} */ curr = currNode ? currNode.value : null;\n\n // reusing the node\n if (future === curr) {\n // advance the route to push the parameters\n advanceActivatedRoute(future);\n\n // If we have a normal route, we need to go through an outlet.\n if (future.component) {\n const /** @type {?} */ outlet = getOutlet(parentOutletMap, future);\n this.activateChildRoutes(futureNode, currNode, outlet.outletMap);\n\n // if we have a componentless route, we recurse but keep the same outlet map.\n } else {\n this.activateChildRoutes(futureNode, currNode, parentOutletMap);\n }\n } else {\n // if we have a normal route, we need to advance the route\n // and place the component into the outlet. After that recurse.\n if (future.component) {\n advanceActivatedRoute(future);\n const /** @type {?} */ outlet = getOutlet(parentOutletMap, futureNode.value);\n\n if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n const /** @type {?} */ stored =\n ( /** @type {?} */((this.routeReuseStrategy.retrieve(future.snapshot))));\n this.routeReuseStrategy.store(future.snapshot, null);\n outlet.attach(stored.componentRef, stored.route.value);\n advanceActivatedRouteNodeAndItsChildren(stored.route);\n } else {\n const /** @type {?} */ outletMap = new RouterOutletMap();\n this.placeComponentIntoOutlet(outletMap, future, outlet);\n this.activateChildRoutes(futureNode, null, outletMap);\n }\n\n // if we have a componentless route, we recurse but keep the same outlet map.\n } else {\n advanceActivatedRoute(future);\n this.activateChildRoutes(futureNode, null, parentOutletMap);\n }\n }\n }\n/**\n * @param {?} outletMap\n * @param {?} future\n * @param {?} outlet\n * @return {?}\n */\nprivate placeComponentIntoOutlet(\n outletMap: RouterOutletMap, future: ActivatedRoute, outlet: RouterOutlet): void {\n const /** @type {?} */ config = parentLoadedConfig(future.snapshot);\n const /** @type {?} */ cmpFactoryResolver = config ? config.module.componentFactoryResolver : null;\n\n outlet.activateWith(future, cmpFactoryResolver, outletMap);\n }\n/**\n * @param {?} route\n * @param {?} parentOutletMap\n * @return {?}\n */\nprivate deactiveRouteAndItsChildren(\n route: TreeNode, parentOutletMap: RouterOutletMap): void {\n if (this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n this.detachAndStoreRouteSubtree(route, parentOutletMap);\n } else {\n this.deactiveRouteAndOutlet(route, parentOutletMap);\n }\n }\n/**\n * @param {?} route\n * @param {?} parentOutletMap\n * @return {?}\n */\nprivate detachAndStoreRouteSubtree(\n route: TreeNode, parentOutletMap: RouterOutletMap): void {\n const /** @type {?} */ outlet = getOutlet(parentOutletMap, route.value);\n const /** @type {?} */ componentRef = outlet.detach();\n this.routeReuseStrategy.store(route.value.snapshot, {componentRef, route});\n }\n/**\n * @param {?} route\n * @param {?} parentOutletMap\n * @return {?}\n */\nprivate deactiveRouteAndOutlet(route: TreeNode, parentOutletMap: RouterOutletMap):\n void {\n const /** @type {?} */ prevChildren: {[key: string]: any} = nodeChildrenAsMap(route);\n let /** @type {?} */ outlet: RouterOutlet = null;\n\n // getOutlet throws when cannot find the right outlet,\n // which can happen if an outlet was in an NgIf and was removed\n try {\n outlet = getOutlet(parentOutletMap, route.value);\n } catch ( /** @type {?} */e) {\n return;\n }\n const /** @type {?} */ childOutletMap = outlet.outletMap;\n\n forEach(prevChildren, (v: any, k: string) => {\n if (route.value.component) {\n this.deactiveRouteAndItsChildren(v, childOutletMap);\n } else {\n this.deactiveRouteAndItsChildren(v, parentOutletMap);\n }\n });\n\n if (outlet && outlet.isActivated) {\n outlet.deactivate();\n }\n }\n}\n\nfunction ActivateRoutes_tsickle_Closure_declarations() {\n/** @type {?} */\nActivateRoutes.prototype.routeReuseStrategy;\n/** @type {?} */\nActivateRoutes.prototype.futureState;\n/** @type {?} */\nActivateRoutes.prototype.currState;\n}\n\n/**\n * @param {?} node\n * @return {?}\n */\nfunction advanceActivatedRouteNodeAndItsChildren(node: TreeNode): void {\n advanceActivatedRoute(node.value);\n node.children.forEach(advanceActivatedRouteNodeAndItsChildren);\n}\n/**\n * @param {?} snapshot\n * @return {?}\n */\nfunction parentLoadedConfig(snapshot: ActivatedRouteSnapshot): LoadedRouterConfig {\n for (let /** @type {?} */ s = snapshot.parent; s; s = s.parent) {\n const /** @type {?} */ route = s._routeConfig;\n if (route && route._loadedConfig) return route._loadedConfig;\n if (route && route.component) return null;\n }\n\n return null;\n}\n/**\n * @param {?} snapshot\n * @return {?}\n */\nfunction closestLoadedConfig(snapshot: ActivatedRouteSnapshot): LoadedRouterConfig {\n if (!snapshot) return null;\n\n for (let /** @type {?} */ s = snapshot.parent; s; s = s.parent) {\n const /** @type {?} */ route = s._routeConfig;\n if (route && route._loadedConfig) return route._loadedConfig;\n }\n\n return null;\n}\n/**\n * @template T\n * @param {?} node\n * @return {?}\n */\nfunction nodeChildrenAsMap(node: TreeNode) {\n const /** @type {?} */ map: {[key: string]: TreeNode} = {};\n\n if (node) {\n node.children.forEach(child => map[child.value.outlet] = child);\n }\n\n return map;\n}\n/**\n * @param {?} outletMap\n * @param {?} route\n * @return {?}\n */\nfunction getOutlet(outletMap: RouterOutletMap, route: ActivatedRoute): RouterOutlet {\n const /** @type {?} */ outlet = outletMap._outlets[route.outlet];\n if (!outlet) {\n const /** @type {?} */ componentName = ( /** @type {?} */((route.component))).name;\n if (route.outlet === PRIMARY_OUTLET) {\n throw new Error(`Cannot find primary outlet to load '${componentName}'`);\n } else {\n throw new Error(`Cannot find the outlet ${route.outlet} to load '${componentName}'`);\n }\n }\n return outlet;\n}\n/**\n * @param {?} commands\n * @return {?}\n */\nfunction validateCommands(commands: string[]): void {\n for (let /** @type {?} */ i = 0; i < commands.length; i++) {\n const /** @type {?} */ cmd = commands[i];\n if (cmd == null) {\n throw new Error(`The requested path contains ${cmd} segment at index ${i}`);\n }\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {UrlTree} from './url_tree';\n/**\n * \\@whatItDoes Provides a way to migrate AngularJS applications to Angular.\n * \n * \\@experimental\n * @abstract\n */\nexport abstract class UrlHandlingStrategy {\n/**\n * Tells the router if this URL should be processed.\n * \n * When it returns true, the router will execute the regular navigation.\n * When it returns false, the router will set the router state to an empty state.\n * As a result, all the active components will be destroyed.\n * \n * @abstract\n * @param {?} url\n * @return {?}\n */\nshouldProcessUrl(url: UrlTree) {}\n/**\n * Extracts the part of the URL that should be handled by the router.\n * The rest of the URL will remain untouched.\n * @abstract\n * @param {?} url\n * @return {?}\n */\nextract(url: UrlTree) {}\n/**\n * Merges the URL fragment with the rest of the URL.\n * @abstract\n * @param {?} newUrlPart\n * @param {?} rawUrl\n * @return {?}\n */\nmerge(newUrlPart: UrlTree, rawUrl: UrlTree) {}\n}\n/**\n * \\@experimental\n */\nexport class DefaultUrlHandlingStrategy implements UrlHandlingStrategy {\n/**\n * @param {?} url\n * @return {?}\n */\nshouldProcessUrl(url: UrlTree): boolean { return true; }\n/**\n * @param {?} url\n * @return {?}\n */\nextract(url: UrlTree): UrlTree { return url; }\n/**\n * @param {?} newUrlPart\n * @param {?} wholeUrl\n * @return {?}\n */\nmerge(newUrlPart: UrlTree, wholeUrl: UrlTree): UrlTree { return newUrlPart; }\n}","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {RouterOutlet} from './directives/router_outlet';\n/**\n * \\@whatItDoes Contains all the router outlets created in a component.\n * \n * \\@stable\n */\nexport class RouterOutletMap {\n/**\n * \\@internal\n */\n_outlets: {[name: string]: RouterOutlet} = {};\n/**\n * Adds an outlet to this map.\n * @param {?} name\n * @param {?} outlet\n * @return {?}\n */\nregisterOutlet(name: string, outlet: RouterOutlet): void { this._outlets[name] = outlet; }\n/**\n * Removes an outlet from this map.\n * @param {?} name\n * @return {?}\n */\nremoveOutlet(name: string): void { this._outlets[name] = undefined; }\n}\n\nfunction RouterOutletMap_tsickle_Closure_declarations() {\n/**\n * \\@internal\n * @type {?}\n */\nRouterOutletMap.prototype._outlets;\n}\n\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Compiler, InjectionToken, Injector, NgModuleFactory, NgModuleFactoryLoader, NgModuleRef} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {fromPromise} from 'rxjs/observable/fromPromise';\nimport {of } from 'rxjs/observable/of';\nimport {map} from 'rxjs/operator/map';\nimport {mergeMap} from 'rxjs/operator/mergeMap';\nimport {LoadChildren, LoadedRouterConfig, Route} from './config';\nimport {flatten, wrapIntoObservable} from './utils/collection';\n/**\n * \\@docsNotRequired\n * \\@experimental\n */\nexport const ROUTES = new InjectionToken('ROUTES');\nexport class RouterConfigLoader {\n/**\n * @param {?} loader\n * @param {?} compiler\n * @param {?=} onLoadStartListener\n * @param {?=} onLoadEndListener\n */\nconstructor(\nprivate loader: NgModuleFactoryLoader,\nprivate compiler: Compiler,\nprivate onLoadStartListener?: (r: Route) => void,\nprivate onLoadEndListener?: (r: Route) => void) {}\n/**\n * @param {?} parentInjector\n * @param {?} route\n * @return {?}\n */\nload(parentInjector: Injector, route: Route): Observable {\n if (this.onLoadStartListener) {\n this.onLoadStartListener(route);\n }\n\n const /** @type {?} */ moduleFactory$ = this.loadModuleFactory(route.loadChildren);\n\n return map.call(moduleFactory$, (factory: NgModuleFactory) => {\n if (this.onLoadEndListener) {\n this.onLoadEndListener(route);\n }\n\n const /** @type {?} */ module = factory.create(parentInjector);\n\n return new LoadedRouterConfig(flatten(module.injector.get(ROUTES)), module);\n });\n }\n/**\n * @param {?} loadChildren\n * @return {?}\n */\nprivate loadModuleFactory(loadChildren: LoadChildren): Observable> {\n if (typeof loadChildren === 'string') {\n return fromPromise(this.loader.load(loadChildren));\n } else {\n return mergeMap.call(wrapIntoObservable(loadChildren()), (t: any) => {\n if (t instanceof NgModuleFactory) {\n return of (t);\n } else {\n return fromPromise(this.compiler.compileModuleAsync(t));\n }\n });\n }\n }\n}\n\nfunction RouterConfigLoader_tsickle_Closure_declarations() {\n/** @type {?} */\nRouterConfigLoader.prototype.loader;\n/** @type {?} */\nRouterConfigLoader.prototype.compiler;\n/** @type {?} */\nRouterConfigLoader.prototype.onLoadStartListener;\n/** @type {?} */\nRouterConfigLoader.prototype.onLoadEndListener;\n}\n\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Type} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {Observer} from 'rxjs/Observer';\nimport {of } from 'rxjs/observable/of';\n\nimport {Data, ResolveData, Route, Routes} from './config';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot, inheritedParamsDataResolve} from './router_state';\nimport {PRIMARY_OUTLET, defaultUrlMatcher} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlTree, mapChildrenIntoArray} from './url_tree';\nimport {forEach, last} from './utils/collection';\nimport {TreeNode} from './utils/tree';\nclass NoMatch {}\n/**\n * @param {?} rootComponentType\n * @param {?} config\n * @param {?} urlTree\n * @param {?} url\n * @return {?}\n */\nexport function recognize(\n rootComponentType: Type, config: Routes, urlTree: UrlTree,\n url: string): Observable {\n return new Recognizer(rootComponentType, config, urlTree, url).recognize();\n}\nclass Recognizer {\n/**\n * @param {?} rootComponentType\n * @param {?} config\n * @param {?} urlTree\n * @param {?} url\n */\nconstructor(\nprivate rootComponentType: Type,\nprivate config: Routes,\nprivate urlTree: UrlTree,\nprivate url: string) {}\n/**\n * @return {?}\n */\nrecognize(): Observable {\n try {\n const /** @type {?} */ rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n\n const /** @type {?} */ children = this.processSegmentGroup(this.config, rootSegmentGroup, PRIMARY_OUTLET);\n\n const /** @type {?} */ root = new ActivatedRouteSnapshot(\n [], Object.freeze({}), Object.freeze(this.urlTree.queryParams), this.urlTree.fragment, {},\n PRIMARY_OUTLET, this.rootComponentType, null, this.urlTree.root, -1, {});\n\n const /** @type {?} */ rootNode = new TreeNode(root, children);\n const /** @type {?} */ routeState = new RouterStateSnapshot(this.url, rootNode);\n this.inheriteParamsAndData(routeState._root);\n return of (routeState);\n\n } catch ( /** @type {?} */e) {\n return new Observable(\n (obs: Observer) => obs.error(e));\n }\n }\n/**\n * @param {?} routeNode\n * @return {?}\n */\ninheriteParamsAndData(routeNode: TreeNode): void {\n const /** @type {?} */ route = routeNode.value;\n\n const /** @type {?} */ i = inheritedParamsDataResolve(route);\n route.params = Object.freeze(i.params);\n route.data = Object.freeze(i.data);\n\n routeNode.children.forEach(n => this.inheriteParamsAndData(n));\n }\n/**\n * @param {?} config\n * @param {?} segmentGroup\n * @param {?} outlet\n * @return {?}\n */\nprocessSegmentGroup(config: Route[], segmentGroup: UrlSegmentGroup, outlet: string):\n TreeNode[] {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return this.processChildren(config, segmentGroup);\n }\n\n return this.processSegment(config, segmentGroup, segmentGroup.segments, outlet);\n }\n/**\n * @param {?} config\n * @param {?} segmentGroup\n * @return {?}\n */\nprocessChildren(config: Route[], segmentGroup: UrlSegmentGroup):\n TreeNode[] {\n const /** @type {?} */ children = mapChildrenIntoArray(\n segmentGroup, (child, childOutlet) => this.processSegmentGroup(config, child, childOutlet));\n checkOutletNameUniqueness(children);\n sortActivatedRouteSnapshots(children);\n return children;\n }\n/**\n * @param {?} config\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\nprocessSegment(\n config: Route[], segmentGroup: UrlSegmentGroup, segments: UrlSegment[],\n outlet: string): TreeNode[] {\n for (const /** @type {?} */ r of config) {\n try {\n return this.processSegmentAgainstRoute(r, segmentGroup, segments, outlet);\n } catch ( /** @type {?} */e) {\n if (!(e instanceof NoMatch)) throw e;\n }\n }\n if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return [];\n }\n\n throw new NoMatch();\n }\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\nprivate noLeftoversInUrl(segmentGroup: UrlSegmentGroup, segments: UrlSegment[], outlet: string):\n boolean {\n return segments.length === 0 && !segmentGroup.children[outlet];\n }\n/**\n * @param {?} route\n * @param {?} rawSegment\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\nprocessSegmentAgainstRoute(\n route: Route, rawSegment: UrlSegmentGroup, segments: UrlSegment[],\n outlet: string): TreeNode[] {\n if (route.redirectTo) throw new NoMatch();\n\n if ((route.outlet || PRIMARY_OUTLET) !== outlet) throw new NoMatch();\n\n if (route.path === '**') {\n const /** @type {?} */ params = segments.length > 0 ? last(segments).parameters : {};\n const /** @type {?} */ snapshot = new ActivatedRouteSnapshot(\n segments, params, Object.freeze(this.urlTree.queryParams), this.urlTree.fragment,\n getData(route), outlet, route.component, route, getSourceSegmentGroup(rawSegment),\n getPathIndexShift(rawSegment) + segments.length, getResolve(route));\n return [new TreeNode(snapshot, [])];\n }\n\n const {consumedSegments, parameters, lastChild} = match(rawSegment, route, segments);\n const /** @type {?} */ rawSlicedSegments = segments.slice(lastChild);\n const /** @type {?} */ childConfig = getChildConfig(route);\n\n const {segmentGroup, slicedSegments} =\n split(rawSegment, consumedSegments, rawSlicedSegments, childConfig);\n\n const /** @type {?} */ snapshot = new ActivatedRouteSnapshot(\n consumedSegments, parameters, Object.freeze(this.urlTree.queryParams),\n this.urlTree.fragment, getData(route), outlet, route.component, route,\n getSourceSegmentGroup(rawSegment), getPathIndexShift(rawSegment) + consumedSegments.length,\n getResolve(route));\n\n\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n const /** @type {?} */ children = this.processChildren(childConfig, segmentGroup);\n return [new TreeNode(snapshot, children)];\n }\n\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return [new TreeNode(snapshot, [])];\n }\n\n const /** @type {?} */ children = this.processSegment(childConfig, segmentGroup, slicedSegments, PRIMARY_OUTLET);\n return [new TreeNode(snapshot, children)];\n }\n}\n\nfunction Recognizer_tsickle_Closure_declarations() {\n/** @type {?} */\nRecognizer.prototype.rootComponentType;\n/** @type {?} */\nRecognizer.prototype.config;\n/** @type {?} */\nRecognizer.prototype.urlTree;\n/** @type {?} */\nRecognizer.prototype.url;\n}\n\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction sortActivatedRouteSnapshots(nodes: TreeNode[]): void {\n nodes.sort((a, b) => {\n if (a.value.outlet === PRIMARY_OUTLET) return -1;\n if (b.value.outlet === PRIMARY_OUTLET) return 1;\n return a.value.outlet.localeCompare(b.value.outlet);\n });\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getChildConfig(route: Route): Route[] {\n if (route.children) {\n return route.children;\n }\n\n if (route.loadChildren) {\n return route._loadedConfig.routes;\n }\n\n return [];\n}\n/**\n * @param {?} segmentGroup\n * @param {?} route\n * @param {?} segments\n * @return {?}\n */\nfunction match(segmentGroup: UrlSegmentGroup, route: Route, segments: UrlSegment[]) {\n if (route.path === '') {\n if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n throw new NoMatch();\n }\n\n return {consumedSegments: [], lastChild: 0, parameters: {}};\n }\n\n const /** @type {?} */ matcher = route.matcher || defaultUrlMatcher;\n const /** @type {?} */ res = matcher(segments, segmentGroup, route);\n if (!res) throw new NoMatch();\n\n const /** @type {?} */ posParams: {[n: string]: string} = {};\n forEach(res.posParams, (v: UrlSegment, k: string) => { posParams[k] = v.path; });\n const /** @type {?} */ parameters = {...posParams, ...res.consumed[res.consumed.length - 1].parameters};\n\n return {consumedSegments: res.consumed, lastChild: res.consumed.length, parameters};\n}\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction checkOutletNameUniqueness(nodes: TreeNode[]): void {\n const /** @type {?} */ names: {[k: string]: ActivatedRouteSnapshot} = {};\n nodes.forEach(n => {\n const /** @type {?} */ routeWithSameOutletName = names[n.value.outlet];\n if (routeWithSameOutletName) {\n const /** @type {?} */ p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n const /** @type {?} */ c = n.value.url.map(s => s.toString()).join('/');\n throw new Error(`Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n }\n names[n.value.outlet] = n.value;\n });\n}\n/**\n * @param {?} segmentGroup\n * @return {?}\n */\nfunction getSourceSegmentGroup(segmentGroup: UrlSegmentGroup): UrlSegmentGroup {\n let /** @type {?} */ s = segmentGroup;\n while (s._sourceSegment) {\n s = s._sourceSegment;\n }\n return s;\n}\n/**\n * @param {?} segmentGroup\n * @return {?}\n */\nfunction getPathIndexShift(segmentGroup: UrlSegmentGroup): number {\n let /** @type {?} */ s = segmentGroup;\n let /** @type {?} */ res = (s._segmentIndexShift ? s._segmentIndexShift : 0);\n while (s._sourceSegment) {\n s = s._sourceSegment;\n res += (s._segmentIndexShift ? s._segmentIndexShift : 0);\n }\n return res - 1;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} consumedSegments\n * @param {?} slicedSegments\n * @param {?} config\n * @return {?}\n */\nfunction split(\n segmentGroup: UrlSegmentGroup, consumedSegments: UrlSegment[], slicedSegments: UrlSegment[],\n config: Route[]) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(\n consumedSegments, createChildrenForEmptyPaths(\n segmentGroup, consumedSegments, config,\n new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return {segmentGroup: s, slicedSegments: []};\n }\n\n if (slicedSegments.length === 0 &&\n containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(\n segmentGroup.segments, addEmptyPathsToChildrenIfNeeded(\n segmentGroup, slicedSegments, config, segmentGroup.children));\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return {segmentGroup: s, slicedSegments};\n }\n\n const /** @type {?} */ s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n return {segmentGroup: s, slicedSegments};\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @param {?} children\n * @return {?}\n */\nfunction addEmptyPathsToChildrenIfNeeded(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], routes: Route[],\n children: {[name: string]: UrlSegmentGroup}): {[name: string]: UrlSegmentGroup} {\n const /** @type {?} */ res: {[name: string]: UrlSegmentGroup} = {};\n for (const /** @type {?} */ r of routes) {\n if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n const /** @type {?} */ s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = segmentGroup.segments.length;\n res[getOutlet(r)] = s;\n }\n }\n return {...children, ...res};\n}\n/**\n * @param {?} segmentGroup\n * @param {?} consumedSegments\n * @param {?} routes\n * @param {?} primarySegment\n * @return {?}\n */\nfunction createChildrenForEmptyPaths(\n segmentGroup: UrlSegmentGroup, consumedSegments: UrlSegment[], routes: Route[],\n primarySegment: UrlSegmentGroup): {[name: string]: UrlSegmentGroup} {\n const /** @type {?} */ res: {[name: string]: UrlSegmentGroup} = {};\n res[PRIMARY_OUTLET] = primarySegment;\n primarySegment._sourceSegment = segmentGroup;\n primarySegment._segmentIndexShift = consumedSegments.length;\n\n for (const /** @type {?} */ r of routes) {\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n const /** @type {?} */ s = new UrlSegmentGroup([], {});\n s._sourceSegment = segmentGroup;\n s._segmentIndexShift = consumedSegments.length;\n res[getOutlet(r)] = s;\n }\n }\n return res;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathMatchesWithNamedOutlets(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], routes: Route[]): boolean {\n return routes.some(\n r => emptyPathMatch(segmentGroup, slicedSegments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathMatches(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], routes: Route[]): boolean {\n return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} r\n * @return {?}\n */\nfunction emptyPathMatch(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], r: Route): boolean {\n if ((segmentGroup.hasChildren() || slicedSegments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n\n return r.path === '' && r.redirectTo === undefined;\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getOutlet(route: Route): string {\n return route.outlet || PRIMARY_OUTLET;\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getData(route: Route): Data {\n return route.data || {};\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getResolve(route: Route): ResolveData {\n return route.resolve || {};\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ActivatedRoute} from './router_state';\nimport {PRIMARY_OUTLET, Params} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlTree} from './url_tree';\nimport {forEach, last, shallowEqual} from './utils/collection';\n/**\n * @param {?} route\n * @param {?} urlTree\n * @param {?} commands\n * @param {?} queryParams\n * @param {?} fragment\n * @return {?}\n */\nexport function createUrlTree(\n route: ActivatedRoute, urlTree: UrlTree, commands: any[], queryParams: Params,\n fragment: string): UrlTree {\n if (commands.length === 0) {\n return tree(urlTree.root, urlTree.root, urlTree, queryParams, fragment);\n }\n\n const /** @type {?} */ nav = computeNavigation(commands);\n\n if (nav.toRoot()) {\n return tree(urlTree.root, new UrlSegmentGroup([], {}), urlTree, queryParams, fragment);\n }\n\n const /** @type {?} */ startingPosition = findStartingPosition(nav, urlTree, route);\n\n const /** @type {?} */ segmentGroup = startingPosition.processChildren ?\n updateSegmentGroupChildren(\n startingPosition.segmentGroup, startingPosition.index, nav.commands) :\n updateSegmentGroup(startingPosition.segmentGroup, startingPosition.index, nav.commands);\n return tree(startingPosition.segmentGroup, segmentGroup, urlTree, queryParams, fragment);\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction isMatrixParams(command: any): boolean {\n return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\n/**\n * @param {?} oldSegmentGroup\n * @param {?} newSegmentGroup\n * @param {?} urlTree\n * @param {?} queryParams\n * @param {?} fragment\n * @return {?}\n */\nfunction tree(\n oldSegmentGroup: UrlSegmentGroup, newSegmentGroup: UrlSegmentGroup, urlTree: UrlTree,\n queryParams: Params, fragment: string): UrlTree {\n let /** @type {?} */ qp: any = {};\n if (queryParams) {\n forEach(queryParams, (value: any, name: any) => {\n qp[name] = Array.isArray(value) ? value.map((v: any) => `${v}`) : `${value}`;\n });\n }\n\n if (urlTree.root === oldSegmentGroup) {\n return new UrlTree(newSegmentGroup, qp, fragment);\n }\n\n return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), qp, fragment);\n}\n/**\n * @param {?} current\n * @param {?} oldSegment\n * @param {?} newSegment\n * @return {?}\n */\nfunction replaceSegment(\n current: UrlSegmentGroup, oldSegment: UrlSegmentGroup,\n newSegment: UrlSegmentGroup): UrlSegmentGroup {\n const /** @type {?} */ children: {[key: string]: UrlSegmentGroup} = {};\n forEach(current.children, (c: UrlSegmentGroup, outletName: string) => {\n if (c === oldSegment) {\n children[outletName] = newSegment;\n } else {\n children[outletName] = replaceSegment(c, oldSegment, newSegment);\n }\n });\n return new UrlSegmentGroup(current.segments, children);\n}\nclass Navigation {\n/**\n * @param {?} isAbsolute\n * @param {?} numberOfDoubleDots\n * @param {?} commands\n */\nconstructor(\npublic isAbsolute: boolean,\npublic numberOfDoubleDots: number,\npublic commands: any[]) {\n if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n throw new Error('Root segment cannot have matrix parameters');\n }\n\n const cmdWithOutlet = commands.find(c => typeof c === 'object' && c != null && c.outlets);\n if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n throw new Error('{outlets:{}} has to be the last command');\n }\n }\n/**\n * @return {?}\n */\npublic toRoot(): boolean {\n return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n }\n}\n\nfunction Navigation_tsickle_Closure_declarations() {\n/** @type {?} */\nNavigation.prototype.isAbsolute;\n/** @type {?} */\nNavigation.prototype.numberOfDoubleDots;\n/** @type {?} */\nNavigation.prototype.commands;\n}\n\n/**\n * Transforms commands to a normalized `Navigation`\n * @param {?} commands\n * @return {?}\n */\nfunction computeNavigation(commands: any[]): Navigation {\n if ((typeof commands[0] === 'string') && commands.length === 1 && commands[0] === '/') {\n return new Navigation(true, 0, commands);\n }\n\n let /** @type {?} */ numberOfDoubleDots = 0;\n let /** @type {?} */ isAbsolute = false;\n\n const /** @type {?} */ res: any[] = commands.reduce((res, cmd, cmdIdx) => {\n if (typeof cmd === 'object' && cmd != null) {\n if (cmd.outlets) {\n const /** @type {?} */ outlets: {[k: string]: any} = {};\n forEach(cmd.outlets, (commands: any, name: string) => {\n outlets[name] = typeof commands === 'string' ? commands.split('/') : commands;\n });\n return [...res, {outlets}];\n }\n\n if (cmd.segmentPath) {\n return [...res, cmd.segmentPath];\n }\n }\n\n if (!(typeof cmd === 'string')) {\n return [...res, cmd];\n }\n\n if (cmdIdx === 0) {\n cmd.split('/').forEach((urlPart, partIndex) => {\n if (partIndex == 0 && urlPart === '.') {\n // skip './a'\n } else if (partIndex == 0 && urlPart === '') { // '/a'\n isAbsolute = true;\n } else if (urlPart === '..') { // '../a'\n numberOfDoubleDots++;\n } else if (urlPart != '') {\n res.push(urlPart);\n }\n });\n\n return res;\n }\n\n return [...res, cmd];\n }, []);\n\n return new Navigation(isAbsolute, numberOfDoubleDots, res);\n}\nclass Position {\n/**\n * @param {?} segmentGroup\n * @param {?} processChildren\n * @param {?} index\n */\nconstructor(\npublic segmentGroup: UrlSegmentGroup,\npublic processChildren: boolean,\npublic index: number) {\n }\n}\n\nfunction Position_tsickle_Closure_declarations() {\n/** @type {?} */\nPosition.prototype.segmentGroup;\n/** @type {?} */\nPosition.prototype.processChildren;\n/** @type {?} */\nPosition.prototype.index;\n}\n\n/**\n * @param {?} nav\n * @param {?} tree\n * @param {?} route\n * @return {?}\n */\nfunction findStartingPosition(nav: Navigation, tree: UrlTree, route: ActivatedRoute): Position {\n if (nav.isAbsolute) {\n return new Position(tree.root, true, 0);\n }\n\n if (route.snapshot._lastPathIndex === -1) {\n return new Position(route.snapshot._urlSegment, true, 0);\n }\n\n const /** @type {?} */ modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n const /** @type {?} */ index = route.snapshot._lastPathIndex + modifier;\n return createPositionApplyingDoubleDots(\n route.snapshot._urlSegment, index, nav.numberOfDoubleDots);\n}\n/**\n * @param {?} group\n * @param {?} index\n * @param {?} numberOfDoubleDots\n * @return {?}\n */\nfunction createPositionApplyingDoubleDots(\n group: UrlSegmentGroup, index: number, numberOfDoubleDots: number): Position {\n let /** @type {?} */ g = group;\n let /** @type {?} */ ci = index;\n let /** @type {?} */ dd = numberOfDoubleDots;\n while (dd > ci) {\n dd -= ci;\n g = g.parent;\n if (!g) {\n throw new Error('Invalid number of \\'../\\'');\n }\n ci = g.segments.length;\n }\n return new Position(g, false, ci - dd);\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction getPath(command: any): any {\n if (typeof command === 'object' && command != null && command.outlets) {\n return command.outlets[PRIMARY_OUTLET];\n }\n return `${command}`;\n}\n/**\n * @param {?} commands\n * @return {?}\n */\nfunction getOutlets(commands: any[]): {[k: string]: any[]} {\n if (!(typeof commands[0] === 'object')) return {[PRIMARY_OUTLET]: commands};\n if (commands[0].outlets === undefined) return {[PRIMARY_OUTLET]: commands};\n return commands[0].outlets;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction updateSegmentGroup(\n segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]): UrlSegmentGroup {\n if (!segmentGroup) {\n segmentGroup = new UrlSegmentGroup([], {});\n }\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return updateSegmentGroupChildren(segmentGroup, startIndex, commands);\n }\n\n const /** @type {?} */ m = prefixedWith(segmentGroup, startIndex, commands);\n const /** @type {?} */ slicedCommands = commands.slice(m.commandIndex);\n if (m.match && m.pathIndex < segmentGroup.segments.length) {\n const /** @type {?} */ g = new UrlSegmentGroup(segmentGroup.segments.slice(0, m.pathIndex), {});\n g.children[PRIMARY_OUTLET] =\n new UrlSegmentGroup(segmentGroup.segments.slice(m.pathIndex), segmentGroup.children);\n return updateSegmentGroupChildren(g, 0, slicedCommands);\n } else if (m.match && slicedCommands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n } else if (m.match && !segmentGroup.hasChildren()) {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n } else if (m.match) {\n return updateSegmentGroupChildren(segmentGroup, 0, slicedCommands);\n } else {\n return createNewSegmentGroup(segmentGroup, startIndex, commands);\n }\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction updateSegmentGroupChildren(\n segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]): UrlSegmentGroup {\n if (commands.length === 0) {\n return new UrlSegmentGroup(segmentGroup.segments, {});\n } else {\n const /** @type {?} */ outlets = getOutlets(commands);\n const /** @type {?} */ children: {[key: string]: UrlSegmentGroup} = {};\n\n forEach(outlets, (commands: any, outlet: string) => {\n if (commands !== null) {\n children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n }\n });\n\n forEach(segmentGroup.children, (child: UrlSegmentGroup, childOutlet: string) => {\n if (outlets[childOutlet] === undefined) {\n children[childOutlet] = child;\n }\n });\n return new UrlSegmentGroup(segmentGroup.segments, children);\n }\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction prefixedWith(segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]) {\n let /** @type {?} */ currentCommandIndex = 0;\n let /** @type {?} */ currentPathIndex = startIndex;\n\n const /** @type {?} */ noMatch = {match: false, pathIndex: 0, commandIndex: 0};\n while (currentPathIndex < segmentGroup.segments.length) {\n if (currentCommandIndex >= commands.length) return noMatch;\n const /** @type {?} */ path = segmentGroup.segments[currentPathIndex];\n const /** @type {?} */ curr = getPath(commands[currentCommandIndex]);\n const /** @type {?} */ next =\n currentCommandIndex < commands.length - 1 ? commands[currentCommandIndex + 1] : null;\n\n if (currentPathIndex > 0 && curr === undefined) break;\n\n if (curr && next && (typeof next === 'object') && next.outlets === undefined) {\n if (!compare(curr, next, path)) return noMatch;\n currentCommandIndex += 2;\n } else {\n if (!compare(curr, {}, path)) return noMatch;\n currentCommandIndex++;\n }\n currentPathIndex++;\n }\n\n return {match: true, pathIndex: currentPathIndex, commandIndex: currentCommandIndex};\n}\n/**\n * @param {?} segmentGroup\n * @param {?} startIndex\n * @param {?} commands\n * @return {?}\n */\nfunction createNewSegmentGroup(\n segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]): UrlSegmentGroup {\n const /** @type {?} */ paths = segmentGroup.segments.slice(0, startIndex);\n\n let /** @type {?} */ i = 0;\n while (i < commands.length) {\n if (typeof commands[i] === 'object' && commands[i].outlets !== undefined) {\n const /** @type {?} */ children = createNewSegmentChildren(commands[i].outlets);\n return new UrlSegmentGroup(paths, children);\n }\n\n // if we start with an object literal, we need to reuse the path part from the segment\n if (i === 0 && isMatrixParams(commands[0])) {\n const /** @type {?} */ p = segmentGroup.segments[startIndex];\n paths.push(new UrlSegment(p.path, commands[0]));\n i++;\n continue;\n }\n\n const /** @type {?} */ curr = getPath(commands[i]);\n const /** @type {?} */ next = (i < commands.length - 1) ? commands[i + 1] : null;\n if (curr && next && isMatrixParams(next)) {\n paths.push(new UrlSegment(curr, stringify(next)));\n i += 2;\n } else {\n paths.push(new UrlSegment(curr, {}));\n i++;\n }\n }\n return new UrlSegmentGroup(paths, {});\n}\n/**\n * @param {?} outlets\n * @return {?}\n */\nfunction createNewSegmentChildren(outlets: {[name: string]: any}): any {\n const /** @type {?} */ children: {[key: string]: UrlSegmentGroup} = {};\n forEach(outlets, (commands: any, outlet: string) => {\n if (commands !== null) {\n children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n }\n });\n return children;\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction stringify(params: {[key: string]: any}): {[key: string]: string} {\n const /** @type {?} */ res: {[key: string]: string} = {};\n forEach(params, (v: any, k: string) => res[k] = `${v}`);\n return res;\n}\n/**\n * @param {?} path\n * @param {?} params\n * @param {?} segment\n * @return {?}\n */\nfunction compare(path: string, params: {[key: string]: any}, segment: UrlSegment): boolean {\n return path == segment.path && shallowEqual(params, segment.parameters);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {BehaviorSubject} from 'rxjs/BehaviorSubject';\n\nimport {DetachedRouteHandleInternal, RouteReuseStrategy} from './route_reuse_strategy';\nimport {ActivatedRoute, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot} from './router_state';\nimport {TreeNode} from './utils/tree';\n/**\n * @param {?} routeReuseStrategy\n * @param {?} curr\n * @param {?} prevState\n * @return {?}\n */\nexport function createRouterState(\n routeReuseStrategy: RouteReuseStrategy, curr: RouterStateSnapshot,\n prevState: RouterState): RouterState {\n const /** @type {?} */ root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n return new RouterState(root, curr);\n}\n/**\n * @param {?} routeReuseStrategy\n * @param {?} curr\n * @param {?=} prevState\n * @return {?}\n */\nfunction createNode(\n routeReuseStrategy: RouteReuseStrategy, curr: TreeNode,\n prevState?: TreeNode): TreeNode {\n // reuse an activated route that is currently displayed on the screen\n if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n const /** @type {?} */ value = prevState.value;\n value._futureSnapshot = curr.value;\n const /** @type {?} */ children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n return new TreeNode(value, children);\n\n // retrieve an activated route that is used to be displayed, but is not currently displayed\n } else if (routeReuseStrategy.retrieve(curr.value)) {\n const /** @type {?} */ tree: TreeNode =\n ( /** @type {?} */((routeReuseStrategy.retrieve(curr.value)))).route;\n setFutureSnapshotsOfActivatedRoutes(curr, tree);\n return tree;\n\n } else {\n const /** @type {?} */ value = createActivatedRoute(curr.value);\n const /** @type {?} */ children = curr.children.map(c => createNode(routeReuseStrategy, c));\n return new TreeNode(value, children);\n }\n}\n/**\n * @param {?} curr\n * @param {?} result\n * @return {?}\n */\nfunction setFutureSnapshotsOfActivatedRoutes(\n curr: TreeNode, result: TreeNode): void {\n if (curr.value.routeConfig !== result.value.routeConfig) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot created from a different route');\n }\n if (curr.children.length !== result.children.length) {\n throw new Error('Cannot reattach ActivatedRouteSnapshot with a different number of children');\n }\n result.value._futureSnapshot = curr.value;\n for (let /** @type {?} */ i = 0; i < curr.children.length; ++i) {\n setFutureSnapshotsOfActivatedRoutes(curr.children[i], result.children[i]);\n }\n}\n/**\n * @param {?} routeReuseStrategy\n * @param {?} curr\n * @param {?} prevState\n * @return {?}\n */\nfunction createOrReuseChildren(\n routeReuseStrategy: RouteReuseStrategy, curr: TreeNode,\n prevState: TreeNode) {\n return curr.children.map(child => {\n for (const /** @type {?} */ p of prevState.children) {\n if (routeReuseStrategy.shouldReuseRoute(p.value.snapshot, child.value)) {\n return createNode(routeReuseStrategy, child, p);\n }\n }\n return createNode(routeReuseStrategy, child);\n });\n}\n/**\n * @param {?} c\n * @return {?}\n */\nfunction createActivatedRoute(c: ActivatedRouteSnapshot) {\n return new ActivatedRoute(\n new BehaviorSubject(c.url), new BehaviorSubject(c.params), new BehaviorSubject(c.queryParams),\n new BehaviorSubject(c.fragment), new BehaviorSubject(c.data), c.outlet, c.component, c);\n}","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Type} from '@angular/core';\nimport {BehaviorSubject} from 'rxjs/BehaviorSubject';\nimport {Observable} from 'rxjs/Observable';\nimport {map} from 'rxjs/operator/map';\n\nimport {Data, ResolveData, Route} from './config';\nimport {PRIMARY_OUTLET, ParamMap, Params, convertToParamMap} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlTree, equalSegments} from './url_tree';\nimport {shallowEqual, shallowEqualArrays} from './utils/collection';\nimport {Tree, TreeNode} from './utils/tree';\n/**\n * \\@whatItDoes Represents the state of the router.\n * \n * \\@howToUse \n * \n * ```\n * \\@Component({templateUrl:'template.html'}) \n * class MyComponent {\n * constructor(router: Router) {\n * const state: RouterState = router.routerState;\n * const root: ActivatedRoute = state.root;\n * const child = root.firstChild;\n * const id: Observable = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n * \n * \\@description \n * RouterState is a tree of activated routes. Every node in this tree knows about the \"consumed\" URL\n * segments, the extracted parameters, and the resolved data.\n * \n * See {\\@link ActivatedRoute} for more information.\n * \n * \\@stable\n */\nexport class RouterState extends Tree {\n/**\n * \\@internal\n * @param {?} root\n * @param {?} snapshot\n */\nconstructor(\n root: TreeNode,\npublic snapshot: RouterStateSnapshot) {\n super(root);\n setRouterStateSnapshot(this, root);\n }\n/**\n * @return {?}\n */\ntoString(): string { return this.snapshot.toString(); }\n}\n\nfunction RouterState_tsickle_Closure_declarations() {\n/**\n * The current snapshot of the router state\n * @type {?}\n */\nRouterState.prototype.snapshot;\n}\n\n/**\n * @param {?} urlTree\n * @param {?} rootComponent\n * @return {?}\n */\nexport function createEmptyState(urlTree: UrlTree, rootComponent: Type): RouterState {\n const /** @type {?} */ snapshot = createEmptyStateSnapshot(urlTree, rootComponent);\n const /** @type {?} */ emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n const /** @type {?} */ emptyParams = new BehaviorSubject({});\n const /** @type {?} */ emptyData = new BehaviorSubject({});\n const /** @type {?} */ emptyQueryParams = new BehaviorSubject({});\n const /** @type {?} */ fragment = new BehaviorSubject('');\n const /** @type {?} */ activated = new ActivatedRoute(\n emptyUrl, emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent,\n snapshot.root);\n activated.snapshot = snapshot.root;\n return new RouterState(new TreeNode(activated, []), snapshot);\n}\n/**\n * @param {?} urlTree\n * @param {?} rootComponent\n * @return {?}\n */\nexport function createEmptyStateSnapshot(\n urlTree: UrlTree, rootComponent: Type): RouterStateSnapshot {\n const /** @type {?} */ emptyParams = {};\n const /** @type {?} */ emptyData = {};\n const /** @type {?} */ emptyQueryParams = {};\n const /** @type {?} */ fragment = '';\n const /** @type {?} */ activated = new ActivatedRouteSnapshot(\n [], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null,\n urlTree.root, -1, {});\n return new RouterStateSnapshot('', new TreeNode(activated, []));\n}\n/**\n * \\@whatItDoes Contains the information about a route associated with a component loaded in an\n * outlet.\n * An `ActivatedRoute` can also be used to traverse the router state tree.\n * \n * \\@howToUse \n * \n * ```\n * \\@Component({...}) \n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: Observable = route.params.map(p => p.id);\n * const url: Observable = route.url.map(segments => segments.join(''));\n * // route.data includes both `data` and `resolve`\n * const user = route.data.map(d => d.user);\n * }\n * }\n * ```\n * \n * \\@stable\n */\nexport class ActivatedRoute {\n /** The current snapshot of this route */\n snapshot: ActivatedRouteSnapshot;\n/**\n * \\@internal\n */\n_futureSnapshot: ActivatedRouteSnapshot;\n/**\n * \\@internal\n */\n_routerState: RouterState;\n/**\n * \\@internal\n */\n_paramMap: Observable;\n/**\n * \\@internal\n */\n_queryParamMap: Observable;\n/**\n * \\@internal\n * @param {?} url\n * @param {?} params\n * @param {?} queryParams\n * @param {?} fragment\n * @param {?} data\n * @param {?} outlet\n * @param {?} component\n * @param {?} futureSnapshot\n */\nconstructor(\npublic url: Observable,\npublic params: Observable,\npublic queryParams: Observable,\npublic fragment: Observable,\npublic data: Observable,\npublic outlet: string,\npublic component: Type|string, futureSnapshot: ActivatedRouteSnapshot) {\n this._futureSnapshot = futureSnapshot;\n }\n/**\n * The configuration used to match this route\n * @return {?}\n */\nget routeConfig(): Route { return this._futureSnapshot.routeConfig; }\n/**\n * The root of the router state\n * @return {?}\n */\nget root(): ActivatedRoute { return this._routerState.root; }\n/**\n * The parent of this route in the router state tree\n * @return {?}\n */\nget parent(): ActivatedRoute { return this._routerState.parent(this); }\n/**\n * The first child of this route in the router state tree\n * @return {?}\n */\nget firstChild(): ActivatedRoute { return this._routerState.firstChild(this); }\n/**\n * The children of this route in the router state tree\n * @return {?}\n */\nget children(): ActivatedRoute[] { return this._routerState.children(this); }\n/**\n * The path from the root of the router state tree to this route\n * @return {?}\n */\nget pathFromRoot(): ActivatedRoute[] { return this._routerState.pathFromRoot(this); }\n/**\n * @return {?}\n */\nget paramMap(): Observable {\n if (!this._paramMap) {\n this._paramMap = map.call(this.params, (p: Params): ParamMap => convertToParamMap(p));\n }\n return this._paramMap;\n }\n/**\n * @return {?}\n */\nget queryParamMap(): Observable {\n if (!this._queryParamMap) {\n this._queryParamMap =\n map.call(this.queryParams, (p: Params): ParamMap => convertToParamMap(p));\n }\n return this._queryParamMap;\n }\n/**\n * @return {?}\n */\ntoString(): string {\n return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n }\n}\n\nfunction ActivatedRoute_tsickle_Closure_declarations() {\n/**\n * The current snapshot of this route\n * @type {?}\n */\nActivatedRoute.prototype.snapshot;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRoute.prototype._futureSnapshot;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRoute.prototype._routerState;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRoute.prototype._paramMap;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRoute.prototype._queryParamMap;\n/**\n * An observable of the URL segments matched by this route\n * @type {?}\n */\nActivatedRoute.prototype.url;\n/**\n * An observable of the matrix parameters scoped to this route\n * @type {?}\n */\nActivatedRoute.prototype.params;\n/**\n * An observable of the query parameters shared by all the routes\n * @type {?}\n */\nActivatedRoute.prototype.queryParams;\n/**\n * An observable of the URL fragment shared by all the routes\n * @type {?}\n */\nActivatedRoute.prototype.fragment;\n/**\n * An observable of the static and resolved data of this route.\n * @type {?}\n */\nActivatedRoute.prototype.data;\n/**\n * The outlet name of the route. It's a constant\n * @type {?}\n */\nActivatedRoute.prototype.outlet;\n/** @type {?} */\nActivatedRoute.prototype.component;\n}\n\n\n/** @internal */\nexport type Inherited = {\n params: Params,\n data: Data,\n resolve: Data,\n};\n/**\n * \\@internal\n * @param {?} route\n * @return {?}\n */\nexport function inheritedParamsDataResolve(route: ActivatedRouteSnapshot): Inherited {\n const /** @type {?} */ pathToRoot = route.pathFromRoot;\n\n let /** @type {?} */ inhertingStartingFrom = pathToRoot.length - 1;\n\n while (inhertingStartingFrom >= 1) {\n const /** @type {?} */ current = pathToRoot[inhertingStartingFrom];\n const /** @type {?} */ parent = pathToRoot[inhertingStartingFrom - 1];\n // current route is an empty path => inherits its parent's params and data\n if (current.routeConfig && current.routeConfig.path === '') {\n inhertingStartingFrom--;\n\n // parent is componentless => current route should inherit its params and data\n } else if (!parent.component) {\n inhertingStartingFrom--;\n\n } else {\n break;\n }\n }\n\n return pathToRoot.slice(inhertingStartingFrom).reduce((res, curr) => {\n const /** @type {?} */ params = {...res.params, ...curr.params};\n const /** @type {?} */ data = {...res.data, ...curr.data};\n const /** @type {?} */ resolve = {...res.resolve, ...curr._resolvedData};\n return {params, data, resolve};\n }, /** @type {?} */(( {params: {}, data: {}, resolve: {}})));\n}\n/**\n * \\@whatItDoes Contains the information about a route associated with a component loaded in an\n * outlet\n * at a particular moment in time. ActivatedRouteSnapshot can also be used to traverse the router\n * state tree.\n * \n * \\@howToUse \n * \n * ```\n * \\@Component({templateUrl:'./my-component.html'}) \n * class MyComponent {\n * constructor(route: ActivatedRoute) {\n * const id: string = route.snapshot.params.id;\n * const url: string = route.snapshot.url.join('');\n * const user = route.snapshot.data.user;\n * }\n * }\n * ```\n * \n * \\@stable\n */\nexport class ActivatedRouteSnapshot {\n/**\n * \\@internal *\n */\n_routeConfig: Route;\n/**\n * \\@internal *\n */\n_urlSegment: UrlSegmentGroup;\n/**\n * \\@internal\n */\n_lastPathIndex: number;\n/**\n * \\@internal\n */\n_resolve: ResolveData;\n/**\n * \\@internal\n */\n_resolvedData: Data;\n/**\n * \\@internal\n */\n_routerState: RouterStateSnapshot;\n/**\n * \\@internal\n */\n_paramMap: ParamMap;\n/**\n * \\@internal\n */\n_queryParamMap: ParamMap;\n/**\n * \\@internal\n * @param {?} url\n * @param {?} params\n * @param {?} queryParams\n * @param {?} fragment\n * @param {?} data\n * @param {?} outlet\n * @param {?} component\n * @param {?} routeConfig\n * @param {?} urlSegment\n * @param {?} lastPathIndex\n * @param {?} resolve\n */\nconstructor(\npublic url: UrlSegment[],\npublic params: Params,\npublic queryParams: Params,\npublic fragment: string,\npublic data: Data,\npublic outlet: string,\npublic component: Type|string, routeConfig: Route, urlSegment: UrlSegmentGroup,\n lastPathIndex: number, resolve: ResolveData) {\n this._routeConfig = routeConfig;\n this._urlSegment = urlSegment;\n this._lastPathIndex = lastPathIndex;\n this._resolve = resolve;\n }\n/**\n * The configuration used to match this route\n * @return {?}\n */\nget routeConfig(): Route { return this._routeConfig; }\n/**\n * The root of the router state\n * @return {?}\n */\nget root(): ActivatedRouteSnapshot { return this._routerState.root; }\n/**\n * The parent of this route in the router state tree\n * @return {?}\n */\nget parent(): ActivatedRouteSnapshot { return this._routerState.parent(this); }\n/**\n * The first child of this route in the router state tree\n * @return {?}\n */\nget firstChild(): ActivatedRouteSnapshot { return this._routerState.firstChild(this); }\n/**\n * The children of this route in the router state tree\n * @return {?}\n */\nget children(): ActivatedRouteSnapshot[] { return this._routerState.children(this); }\n/**\n * The path from the root of the router state tree to this route\n * @return {?}\n */\nget pathFromRoot(): ActivatedRouteSnapshot[] { return this._routerState.pathFromRoot(this); }\n/**\n * @return {?}\n */\nget paramMap(): ParamMap {\n if (!this._paramMap) {\n this._paramMap = convertToParamMap(this.params);\n }\n return this._paramMap;\n }\n/**\n * @return {?}\n */\nget queryParamMap(): ParamMap {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n }\n/**\n * @return {?}\n */\ntoString(): string {\n const /** @type {?} */ url = this.url.map(segment => segment.toString()).join('/');\n const /** @type {?} */ matched = this._routeConfig ? this._routeConfig.path : '';\n return `Route(url:'${url}', path:'${matched}')`;\n }\n}\n\nfunction ActivatedRouteSnapshot_tsickle_Closure_declarations() {\n/**\n * \\@internal *\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._routeConfig;\n/**\n * \\@internal *\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._urlSegment;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._lastPathIndex;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._resolve;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._resolvedData;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._routerState;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._paramMap;\n/**\n * \\@internal\n * @type {?}\n */\nActivatedRouteSnapshot.prototype._queryParamMap;\n/**\n * The URL segments matched by this route\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.url;\n/**\n * The matrix parameters scoped to this route\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.params;\n/**\n * The query parameters shared by all the routes\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.queryParams;\n/**\n * The URL fragment shared by all the routes\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.fragment;\n/**\n * The static and resolved data of this route\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.data;\n/**\n * The outlet name of the route\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.outlet;\n/**\n * The component of the route\n * @type {?}\n */\nActivatedRouteSnapshot.prototype.component;\n}\n\n/**\n * \\@whatItDoes Represents the state of the router at a moment in time.\n * \n * \\@howToUse \n * \n * ```\n * \\@Component({templateUrl:'template.html'}) \n * class MyComponent {\n * constructor(router: Router) {\n * const state: RouterState = router.routerState;\n * const snapshot: RouterStateSnapshot = state.snapshot;\n * const root: ActivatedRouteSnapshot = snapshot.root;\n * const child = root.firstChild;\n * const id: Observable = child.params.map(p => p.id);\n * //...\n * }\n * }\n * ```\n * \n * \\@description \n * RouterStateSnapshot is a tree of activated route snapshots. Every node in this tree knows about\n * the \"consumed\" URL segments, the extracted parameters, and the resolved data.\n * \n * \\@stable\n */\nexport class RouterStateSnapshot extends Tree {\n/**\n * \\@internal\n * @param {?} url\n * @param {?} root\n */\nconstructor(\npublic url: string, root: TreeNode) {\n super(root);\n setRouterStateSnapshot(this, root);\n }\n/**\n * @return {?}\n */\ntoString(): string { return serializeNode(this._root); }\n}\n\nfunction RouterStateSnapshot_tsickle_Closure_declarations() {\n/**\n * The url from which this snapshot was created\n * @type {?}\n */\nRouterStateSnapshot.prototype.url;\n}\n\n/**\n * @template U, T\n * @param {?} state\n * @param {?} node\n * @return {?}\n */\nfunction setRouterStateSnapshot(state: U, node: TreeNode): void {\n node.value._routerState = state;\n node.children.forEach(c => setRouterStateSnapshot(state, c));\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction serializeNode(node: TreeNode): string {\n const /** @type {?} */ c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(\", \")} } ` : '';\n return `${node.value}${c}`;\n}\n/**\n * The expectation is that the activate route is created with the right set of parameters.\n * So we push new values into the observables only when they are not the initial values.\n * And we detect that by checking if the snapshot field is set.\n * @param {?} route\n * @return {?}\n */\nexport function advanceActivatedRoute(route: ActivatedRoute): void {\n if (route.snapshot) {\n const /** @type {?} */ currentSnapshot = route.snapshot;\n route.snapshot = route._futureSnapshot;\n if (!shallowEqual(currentSnapshot.queryParams, route._futureSnapshot.queryParams)) {\n ( /** @type {?} */((route.queryParams))).next(route._futureSnapshot.queryParams);\n }\n if (currentSnapshot.fragment !== route._futureSnapshot.fragment) {\n ( /** @type {?} */((route.fragment))).next(route._futureSnapshot.fragment);\n }\n if (!shallowEqual(currentSnapshot.params, route._futureSnapshot.params)) {\n ( /** @type {?} */((route.params))).next(route._futureSnapshot.params);\n }\n if (!shallowEqualArrays(currentSnapshot.url, route._futureSnapshot.url)) {\n ( /** @type {?} */((route.url))).next(route._futureSnapshot.url);\n }\n if (!shallowEqual(currentSnapshot.data, route._futureSnapshot.data)) {\n ( /** @type {?} */((route.data))).next(route._futureSnapshot.data);\n }\n } else {\n route.snapshot = route._futureSnapshot;\n\n // this is for resolved data\n ( /** @type {?} */((route.data))).next(route._futureSnapshot.data);\n }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nexport function equalParamsAndUrlSegments(\n a: ActivatedRouteSnapshot, b: ActivatedRouteSnapshot): boolean {\n const /** @type {?} */ equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n const /** @type {?} */ parentsMismatch = !a.parent !== !b.parent;\n\n return equalUrlParams && !parentsMismatch &&\n (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent));\n}\n","\n/**\n * @license \n * Copyright Google Inc. All Rights Reserved.\n * \n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nexport class Tree {\n/**\n * \\@internal\n */\n_root: TreeNode;\n/**\n * @param {?} root\n */\nconstructor(root: TreeNode) { this._root = root; }\n/**\n * @return {?}\n */\nget root(): T { return this._root.value; }\n/**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\nparent(t: T): T {\n const /** @type {?} */ p = this.pathFromRoot(t);\n return p.length > 1 ? p[p.length - 2] : null;\n }\n/**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\nchildren(t: T): T[] {\n const /** @type {?} */ n = findNode(t, this._root);\n return n ? n.children.map(t => t.value) : [];\n }\n/**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\nfirstChild(t: T): T {\n const /** @type {?} */ n = findNode(t, this._root);\n return n && n.children.length > 0 ? n.children[0].value : null;\n }\n/**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\nsiblings(t: T): T[] {\n const /** @type {?} */ p = findPath(t, this._root, []);\n if (p.length < 2) return [];\n\n const /** @type {?} */ c = p[p.length - 2].children.map(c => c.value);\n return c.filter(cc => cc !== t);\n }\n/**\n * \\@internal\n * @param {?} t\n * @return {?}\n */\npathFromRoot(t: T): T[] { return findPath(t, this._root, []).map(s => s.value); }\n}\n\nfunction Tree_tsickle_Closure_declarations() {\n/**\n * \\@internal\n * @type {?}\n */\nTree.prototype._root;\n}\n\n/**\n * @template T\n * @param {?} expected\n * @param {?} c\n * @return {?}\n */\nfunction findNode(expected: T, c: TreeNode): TreeNode {\n if (expected === c.value) return c;\n for (const /** @type {?} */ cc of c.children) {\n const /** @type {?} */ r = findNode(expected, cc);\n if (r) return r;\n }\n return null;\n}\n/**\n * @template T\n * @param {?} expected\n * @param {?} c\n * @param {?} collected\n * @return {?}\n */\nfunction findPath(expected: T, c: TreeNode, collected: TreeNode[]): TreeNode[] {\n collected.push(c);\n if (expected === c.value) return collected;\n\n for (const /** @type {?} */ cc of c.children) {\n const /** @type {?} */ cloned = collected.slice(0);\n const /** @type {?} */ r = findPath(expected, cc, cloned);\n if (r.length > 0) return r;\n }\n\n return [];\n}\nexport class TreeNode {\n/**\n * @param {?} value\n * @param {?} children\n */\nconstructor(public value: T,\npublic children: TreeNode[]) {}\n/**\n * @return {?}\n */\ntoString(): string { return `TreeNode(${this.value})`; }\n}\n\nfunction TreeNode_tsickle_Closure_declarations() {\n/** @type {?} */\nTreeNode.prototype.value;\n/** @type {?} */\nTreeNode.prototype.children;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Injector, NgModuleRef} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {Observer} from 'rxjs/Observer';\nimport {from} from 'rxjs/observable/from';\nimport {of } from 'rxjs/observable/of';\nimport {_catch} from 'rxjs/operator/catch';\nimport {concatAll} from 'rxjs/operator/concatAll';\nimport {first} from 'rxjs/operator/first';\nimport {map} from 'rxjs/operator/map';\nimport {mergeMap} from 'rxjs/operator/mergeMap';\nimport {EmptyError} from 'rxjs/util/EmptyError';\n\nimport {LoadedRouterConfig, Route, Routes} from './config';\nimport {RouterConfigLoader} from './router_config_loader';\nimport {PRIMARY_OUTLET, Params, defaultUrlMatcher, navigationCancelingError} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\nimport {andObservables, forEach, waitForMap, wrapIntoObservable} from './utils/collection';\nclass NoMatch {\n/**\n * @param {?=} segmentGroup\n */\nconstructor(public segmentGroup: UrlSegmentGroup = null) {}\n}\n\nfunction NoMatch_tsickle_Closure_declarations() {\n/** @type {?} */\nNoMatch.prototype.segmentGroup;\n}\n\nclass AbsoluteRedirect {\n/**\n * @param {?} urlTree\n */\nconstructor(public urlTree: UrlTree) {}\n}\n\nfunction AbsoluteRedirect_tsickle_Closure_declarations() {\n/** @type {?} */\nAbsoluteRedirect.prototype.urlTree;\n}\n\n/**\n * @param {?} segmentGroup\n * @return {?}\n */\nfunction noMatch(segmentGroup: UrlSegmentGroup): Observable {\n return new Observable(\n (obs: Observer) => obs.error(new NoMatch(segmentGroup)));\n}\n/**\n * @param {?} newTree\n * @return {?}\n */\nfunction absoluteRedirect(newTree: UrlTree): Observable {\n return new Observable(\n (obs: Observer) => obs.error(new AbsoluteRedirect(newTree)));\n}\n/**\n * @param {?} redirectTo\n * @return {?}\n */\nfunction namedOutletsRedirect(redirectTo: string): Observable {\n return new Observable(\n (obs: Observer) => obs.error(new Error(\n `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`)));\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction canLoadFails(route: Route): Observable {\n return new Observable(\n (obs: Observer) => obs.error(navigationCancelingError(\n `Cannot load children because the guard of the route \"path: '${route.path}'\" returned false`)));\n}\n/**\n * Returns the `UrlTree` with the redirection applied.\n * \n * Lazy modules are loaded along the way.\n * @param {?} moduleInjector\n * @param {?} configLoader\n * @param {?} urlSerializer\n * @param {?} urlTree\n * @param {?} config\n * @return {?}\n */\nexport function applyRedirects(\n moduleInjector: Injector, configLoader: RouterConfigLoader, urlSerializer: UrlSerializer,\n urlTree: UrlTree, config: Routes): Observable {\n return new ApplyRedirects(moduleInjector, configLoader, urlSerializer, urlTree, config).apply();\n}\nclass ApplyRedirects {\nprivate allowRedirects: boolean = true;\nprivate ngModule: NgModuleRef;\n/**\n * @param {?} moduleInjector\n * @param {?} configLoader\n * @param {?} urlSerializer\n * @param {?} urlTree\n * @param {?} config\n */\nconstructor(\n moduleInjector: Injector,\nprivate configLoader: RouterConfigLoader,\nprivate urlSerializer: UrlSerializer,\nprivate urlTree: UrlTree,\nprivate config: Routes) {\n this.ngModule = moduleInjector.get(NgModuleRef);\n }\n/**\n * @return {?}\n */\napply(): Observable {\n const /** @type {?} */ expanded$ =\n this.expandSegmentGroup(this.ngModule, this.config, this.urlTree.root, PRIMARY_OUTLET);\n const /** @type {?} */ urlTrees$ = map.call(\n expanded$, (rootSegmentGroup: UrlSegmentGroup) => this.createUrlTree(\n rootSegmentGroup, this.urlTree.queryParams, this.urlTree.fragment));\n return _catch.call(urlTrees$, (e: any) => {\n if (e instanceof AbsoluteRedirect) {\n // after an absolute redirect we do not apply any more redirects!\n this.allowRedirects = false;\n // we need to run matching, so we can fetch all lazy-loaded modules\n return this.match(e.urlTree);\n }\n\n if (e instanceof NoMatch) {\n throw this.noMatchError(e);\n }\n\n throw e;\n });\n }\n/**\n * @param {?} tree\n * @return {?}\n */\nprivate match(tree: UrlTree): Observable {\n const /** @type {?} */ expanded$ =\n this.expandSegmentGroup(this.ngModule, this.config, tree.root, PRIMARY_OUTLET);\n const /** @type {?} */ mapped$ = map.call(\n expanded$, (rootSegmentGroup: UrlSegmentGroup) =>\n this.createUrlTree(rootSegmentGroup, tree.queryParams, tree.fragment));\n return _catch.call(mapped$, (e: any): Observable => {\n if (e instanceof NoMatch) {\n throw this.noMatchError(e);\n }\n\n throw e;\n });\n }\n/**\n * @param {?} e\n * @return {?}\n */\nprivate noMatchError(e: NoMatch): any {\n return new Error(`Cannot match any routes. URL Segment: '${e.segmentGroup}'`);\n }\n/**\n * @param {?} rootCandidate\n * @param {?} queryParams\n * @param {?} fragment\n * @return {?}\n */\nprivate createUrlTree(rootCandidate: UrlSegmentGroup, queryParams: Params, fragment: string):\n UrlTree {\n const /** @type {?} */ root = rootCandidate.segments.length > 0 ?\n new UrlSegmentGroup([], {[PRIMARY_OUTLET]: rootCandidate}) :\n rootCandidate;\n return new UrlTree(root, queryParams, fragment);\n }\n/**\n * @param {?} ngModule\n * @param {?} routes\n * @param {?} segmentGroup\n * @param {?} outlet\n * @return {?}\n */\nprivate expandSegmentGroup(\n ngModule: NgModuleRef, routes: Route[], segmentGroup: UrlSegmentGroup,\n outlet: string): Observable {\n if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n return map.call(\n this.expandChildren(ngModule, routes, segmentGroup),\n (children: any) => new UrlSegmentGroup([], children));\n }\n\n return this.expandSegment(ngModule, segmentGroup, routes, segmentGroup.segments, outlet, true);\n }\n/**\n * @param {?} ngModule\n * @param {?} routes\n * @param {?} segmentGroup\n * @return {?}\n */\nprivate expandChildren(\n ngModule: NgModuleRef, routes: Route[],\n segmentGroup: UrlSegmentGroup): Observable<{[name: string]: UrlSegmentGroup}> {\n return waitForMap(\n segmentGroup.children,\n (childOutlet, child) => this.expandSegmentGroup(ngModule, routes, child, childOutlet));\n }\n/**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} segments\n * @param {?} outlet\n * @param {?} allowRedirects\n * @return {?}\n */\nprivate expandSegment(\n ngModule: NgModuleRef, segmentGroup: UrlSegmentGroup, routes: Route[],\n segments: UrlSegment[], outlet: string,\n allowRedirects: boolean): Observable {\n const /** @type {?} */ routes$ = of (...routes);\n const /** @type {?} */ processedRoutes$ = map.call(routes$, (r: any) => {\n const /** @type {?} */ expanded$ = this.expandSegmentAgainstRoute(\n ngModule, segmentGroup, routes, r, segments, outlet, allowRedirects);\n return _catch.call(expanded$, (e: any) => {\n if (e instanceof NoMatch) {\n return of (null);\n }\n\n throw e;\n });\n });\n const /** @type {?} */ concattedProcessedRoutes$ = concatAll.call(processedRoutes$);\n const /** @type {?} */ first$ = first.call(concattedProcessedRoutes$, (s: any) => !!s);\n return _catch.call(first$, (e: any, _: any): Observable => {\n if (e instanceof EmptyError) {\n if (this.noLeftoversInUrl(segmentGroup, segments, outlet)) {\n return of (new UrlSegmentGroup([], {}));\n }\n\n throw new NoMatch(segmentGroup);\n }\n\n throw e;\n });\n }\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\nprivate noLeftoversInUrl(segmentGroup: UrlSegmentGroup, segments: UrlSegment[], outlet: string):\n boolean {\n return segments.length === 0 && !segmentGroup.children[outlet];\n }\n/**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} route\n * @param {?} paths\n * @param {?} outlet\n * @param {?} allowRedirects\n * @return {?}\n */\nprivate expandSegmentAgainstRoute(\n ngModule: NgModuleRef, segmentGroup: UrlSegmentGroup, routes: Route[], route: Route,\n paths: UrlSegment[], outlet: string, allowRedirects: boolean): Observable {\n if (getOutlet(route) !== outlet) {\n return noMatch(segmentGroup);\n }\n\n if (route.redirectTo === undefined) {\n return this.matchSegmentAgainstRoute(ngModule, segmentGroup, route, paths);\n }\n\n if (allowRedirects && this.allowRedirects) {\n return this.expandSegmentAgainstRouteUsingRedirect(\n ngModule, segmentGroup, routes, route, paths, outlet);\n }\n\n return noMatch(segmentGroup);\n }\n/**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} route\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\nprivate expandSegmentAgainstRouteUsingRedirect(\n ngModule: NgModuleRef, segmentGroup: UrlSegmentGroup, routes: Route[], route: Route,\n segments: UrlSegment[], outlet: string): Observable {\n if (route.path === '**') {\n return this.expandWildCardWithParamsAgainstRouteUsingRedirect(\n ngModule, routes, route, outlet);\n }\n\n return this.expandRegularSegmentAgainstRouteUsingRedirect(\n ngModule, segmentGroup, routes, route, segments, outlet);\n }\n/**\n * @param {?} ngModule\n * @param {?} routes\n * @param {?} route\n * @param {?} outlet\n * @return {?}\n */\nprivate expandWildCardWithParamsAgainstRouteUsingRedirect(\n ngModule: NgModuleRef, routes: Route[], route: Route,\n outlet: string): Observable {\n const /** @type {?} */ newTree = this.applyRedirectCommands([], route.redirectTo, {});\n if (route.redirectTo.startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n\n return mergeMap.call(this.lineralizeSegments(route, newTree), (newSegments: UrlSegment[]) => {\n const /** @type {?} */ group = new UrlSegmentGroup(newSegments, {});\n return this.expandSegment(ngModule, group, routes, newSegments, outlet, false);\n });\n }\n/**\n * @param {?} ngModule\n * @param {?} segmentGroup\n * @param {?} routes\n * @param {?} route\n * @param {?} segments\n * @param {?} outlet\n * @return {?}\n */\nprivate expandRegularSegmentAgainstRouteUsingRedirect(\n ngModule: NgModuleRef, segmentGroup: UrlSegmentGroup, routes: Route[], route: Route,\n segments: UrlSegment[], outlet: string): Observable {\n const {matched, consumedSegments, lastChild, positionalParamSegments} =\n match(segmentGroup, route, segments);\n if (!matched) return noMatch(segmentGroup);\n\n const /** @type {?} */ newTree = this.applyRedirectCommands(\n consumedSegments, route.redirectTo, /** @type {?} */(( positionalParamSegments)));\n if (route.redirectTo.startsWith('/')) {\n return absoluteRedirect(newTree);\n }\n\n return mergeMap.call(this.lineralizeSegments(route, newTree), (newSegments: UrlSegment[]) => {\n return this.expandSegment(\n ngModule, segmentGroup, routes, newSegments.concat(segments.slice(lastChild)), outlet,\n false);\n });\n }\n/**\n * @param {?} ngModule\n * @param {?} rawSegmentGroup\n * @param {?} route\n * @param {?} segments\n * @return {?}\n */\nprivate matchSegmentAgainstRoute(\n ngModule: NgModuleRef, rawSegmentGroup: UrlSegmentGroup, route: Route,\n segments: UrlSegment[]): Observable {\n if (route.path === '**') {\n if (route.loadChildren) {\n return map.call(\n this.configLoader.load(ngModule.injector, route), (cfg: LoadedRouterConfig) => {\n route._loadedConfig = cfg;\n return new UrlSegmentGroup(segments, {});\n });\n }\n\n return of (new UrlSegmentGroup(segments, {}));\n }\n\n const {matched, consumedSegments, lastChild} = match(rawSegmentGroup, route, segments);\n if (!matched) return noMatch(rawSegmentGroup);\n\n const /** @type {?} */ rawSlicedSegments = segments.slice(lastChild);\n const /** @type {?} */ childConfig$ = this.getChildConfig(ngModule, route);\n\n return mergeMap.call(childConfig$, (routerConfig: LoadedRouterConfig) => {\n const /** @type {?} */ childModule = routerConfig.module;\n const /** @type {?} */ childConfig = routerConfig.routes;\n\n const {segmentGroup, slicedSegments} =\n split(rawSegmentGroup, consumedSegments, rawSlicedSegments, childConfig);\n\n if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n const /** @type {?} */ expanded$ = this.expandChildren(childModule, childConfig, segmentGroup);\n return map.call(\n expanded$, (children: any) => new UrlSegmentGroup(consumedSegments, children));\n }\n\n if (childConfig.length === 0 && slicedSegments.length === 0) {\n return of (new UrlSegmentGroup(consumedSegments, {}));\n }\n\n const /** @type {?} */ expanded$ = this.expandSegment(\n childModule, segmentGroup, childConfig, slicedSegments, PRIMARY_OUTLET, true);\n return map.call(\n expanded$, (cs: UrlSegmentGroup) =>\n new UrlSegmentGroup(consumedSegments.concat(cs.segments), cs.children));\n });\n }\n/**\n * @param {?} ngModule\n * @param {?} route\n * @return {?}\n */\nprivate getChildConfig(ngModule: NgModuleRef, route: Route): Observable {\n if (route.children) {\n // The children belong to the same module\n return of (new LoadedRouterConfig(route.children, ngModule));\n }\n\n if (route.loadChildren) {\n // lazy children belong to the loaded module\n if (route._loadedConfig !== undefined) {\n return of (route._loadedConfig);\n }\n\n return mergeMap.call(runCanLoadGuard(ngModule.injector, route), (shouldLoad: boolean) => {\n\n if (shouldLoad) {\n return map.call(\n this.configLoader.load(ngModule.injector, route), (cfg: LoadedRouterConfig) => {\n route._loadedConfig = cfg;\n return cfg;\n });\n }\n\n return canLoadFails(route);\n });\n }\n\n return of (new LoadedRouterConfig([], ngModule));\n }\n/**\n * @param {?} route\n * @param {?} urlTree\n * @return {?}\n */\nprivate lineralizeSegments(route: Route, urlTree: UrlTree): Observable {\n let /** @type {?} */ res: UrlSegment[] = [];\n let /** @type {?} */ c = urlTree.root;\n while (true) {\n res = res.concat(c.segments);\n if (c.numberOfChildren === 0) {\n return of (res);\n }\n\n if (c.numberOfChildren > 1 || !c.children[PRIMARY_OUTLET]) {\n return namedOutletsRedirect(route.redirectTo);\n }\n\n c = c.children[PRIMARY_OUTLET];\n }\n }\n/**\n * @param {?} segments\n * @param {?} redirectTo\n * @param {?} posParams\n * @return {?}\n */\nprivate applyRedirectCommands(\n segments: UrlSegment[], redirectTo: string, posParams: {[k: string]: UrlSegment}): UrlTree {\n return this.applyRedirectCreatreUrlTree(\n redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n }\n/**\n * @param {?} redirectTo\n * @param {?} urlTree\n * @param {?} segments\n * @param {?} posParams\n * @return {?}\n */\nprivate applyRedirectCreatreUrlTree(\n redirectTo: string, urlTree: UrlTree, segments: UrlSegment[],\n posParams: {[k: string]: UrlSegment}): UrlTree {\n const /** @type {?} */ newRoot = this.createSegmentGroup(redirectTo, urlTree.root, segments, posParams);\n return new UrlTree(\n newRoot, this.createQueryParams(urlTree.queryParams, this.urlTree.queryParams),\n urlTree.fragment);\n }\n/**\n * @param {?} redirectToParams\n * @param {?} actualParams\n * @return {?}\n */\nprivate createQueryParams(redirectToParams: Params, actualParams: Params): Params {\n const /** @type {?} */ res: Params = {};\n forEach(redirectToParams, (v: any, k: string) => {\n res[k] = v.startsWith(':') ? actualParams[v.substring(1)] : v;\n });\n return res;\n }\n/**\n * @param {?} redirectTo\n * @param {?} group\n * @param {?} segments\n * @param {?} posParams\n * @return {?}\n */\nprivate createSegmentGroup(\n redirectTo: string, group: UrlSegmentGroup, segments: UrlSegment[],\n posParams: {[k: string]: UrlSegment}): UrlSegmentGroup {\n const /** @type {?} */ updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n\n let /** @type {?} */ children: {[n: string]: UrlSegmentGroup} = {};\n forEach(group.children, (child: UrlSegmentGroup, name: string) => {\n children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n });\n\n return new UrlSegmentGroup(updatedSegments, children);\n }\n/**\n * @param {?} redirectTo\n * @param {?} redirectToSegments\n * @param {?} actualSegments\n * @param {?} posParams\n * @return {?}\n */\nprivate createSegments(\n redirectTo: string, redirectToSegments: UrlSegment[], actualSegments: UrlSegment[],\n posParams: {[k: string]: UrlSegment}): UrlSegment[] {\n return redirectToSegments.map(\n s => s.path.startsWith(':') ? this.findPosParam(redirectTo, s, posParams) :\n this.findOrReturn(s, actualSegments));\n }\n/**\n * @param {?} redirectTo\n * @param {?} redirectToUrlSegment\n * @param {?} posParams\n * @return {?}\n */\nprivate findPosParam(\n redirectTo: string, redirectToUrlSegment: UrlSegment,\n posParams: {[k: string]: UrlSegment}): UrlSegment {\n const /** @type {?} */ pos = posParams[redirectToUrlSegment.path.substring(1)];\n if (!pos)\n throw new Error(\n `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n return pos;\n }\n/**\n * @param {?} redirectToUrlSegment\n * @param {?} actualSegments\n * @return {?}\n */\nprivate findOrReturn(redirectToUrlSegment: UrlSegment, actualSegments: UrlSegment[]): UrlSegment {\n let /** @type {?} */ idx = 0;\n for (const /** @type {?} */ s of actualSegments) {\n if (s.path === redirectToUrlSegment.path) {\n actualSegments.splice(idx);\n return s;\n }\n idx++;\n }\n return redirectToUrlSegment;\n }\n}\n\nfunction ApplyRedirects_tsickle_Closure_declarations() {\n/** @type {?} */\nApplyRedirects.prototype.allowRedirects;\n/** @type {?} */\nApplyRedirects.prototype.ngModule;\n/** @type {?} */\nApplyRedirects.prototype.configLoader;\n/** @type {?} */\nApplyRedirects.prototype.urlSerializer;\n/** @type {?} */\nApplyRedirects.prototype.urlTree;\n/** @type {?} */\nApplyRedirects.prototype.config;\n}\n\n/**\n * @param {?} moduleInjector\n * @param {?} route\n * @return {?}\n */\nfunction runCanLoadGuard(moduleInjector: Injector, route: Route): Observable {\n const /** @type {?} */ canLoad = route.canLoad;\n if (!canLoad || canLoad.length === 0) return of (true);\n\n const /** @type {?} */ obs = map.call(from(canLoad), (injectionToken: any) => {\n const /** @type {?} */ guard = moduleInjector.get(injectionToken);\n return wrapIntoObservable(guard.canLoad ? guard.canLoad(route) : guard(route));\n });\n\n return andObservables(obs);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} route\n * @param {?} segments\n * @return {?}\n */\nfunction match(segmentGroup: UrlSegmentGroup, route: Route, segments: UrlSegment[]): {\n matched: boolean,\n consumedSegments: UrlSegment[],\n lastChild: number,\n positionalParamSegments: {[k: string]: UrlSegment}\n} {\n if (route.path === '') {\n if ((route.pathMatch === 'full') && (segmentGroup.hasChildren() || segments.length > 0)) {\n return {matched: false, consumedSegments: [], lastChild: 0, positionalParamSegments: {}};\n }\n\n return {matched: true, consumedSegments: [], lastChild: 0, positionalParamSegments: {}};\n }\n\n const /** @type {?} */ matcher = route.matcher || defaultUrlMatcher;\n const /** @type {?} */ res = matcher(segments, segmentGroup, route);\n\n if (!res) {\n return {\n matched: false, consumedSegments: /** @type {?} */(( [])), lastChild: 0, positionalParamSegments: {},\n }\n }\n\n return {\n matched: true,\n consumedSegments: res.consumed,\n lastChild: res.consumed.length,\n positionalParamSegments: res.posParams,\n };\n}\n/**\n * @param {?} segmentGroup\n * @param {?} consumedSegments\n * @param {?} slicedSegments\n * @param {?} config\n * @return {?}\n */\nfunction split(\n segmentGroup: UrlSegmentGroup, consumedSegments: UrlSegment[], slicedSegments: UrlSegment[],\n config: Route[]) {\n if (slicedSegments.length > 0 &&\n containsEmptyPathRedirectsWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(\n consumedSegments, createChildrenForEmptySegments(\n config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n return {segmentGroup: mergeTrivialChildren(s), slicedSegments: []};\n }\n\n if (slicedSegments.length === 0 &&\n containsEmptyPathRedirects(segmentGroup, slicedSegments, config)) {\n const /** @type {?} */ s = new UrlSegmentGroup(\n segmentGroup.segments, addEmptySegmentsToChildrenIfNeeded(\n segmentGroup, slicedSegments, config, segmentGroup.children));\n return {segmentGroup: mergeTrivialChildren(s), slicedSegments};\n }\n\n return {segmentGroup, slicedSegments};\n}\n/**\n * @param {?} s\n * @return {?}\n */\nfunction mergeTrivialChildren(s: UrlSegmentGroup): UrlSegmentGroup {\n if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n const /** @type {?} */ c = s.children[PRIMARY_OUTLET];\n return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n }\n\n return s;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} slicedSegments\n * @param {?} routes\n * @param {?} children\n * @return {?}\n */\nfunction addEmptySegmentsToChildrenIfNeeded(\n segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], routes: Route[],\n children: {[name: string]: UrlSegmentGroup}): {[name: string]: UrlSegmentGroup} {\n const /** @type {?} */ res: {[name: string]: UrlSegmentGroup} = {};\n for (const /** @type {?} */ r of routes) {\n if (isEmptyPathRedirect(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n return {...children, ...res};\n}\n/**\n * @param {?} routes\n * @param {?} primarySegmentGroup\n * @return {?}\n */\nfunction createChildrenForEmptySegments(\n routes: Route[], primarySegmentGroup: UrlSegmentGroup): {[name: string]: UrlSegmentGroup} {\n const /** @type {?} */ res: {[name: string]: UrlSegmentGroup} = {};\n res[PRIMARY_OUTLET] = primarySegmentGroup;\n for (const /** @type {?} */ r of routes) {\n if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n res[getOutlet(r)] = new UrlSegmentGroup([], {});\n }\n }\n return res;\n}\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathRedirectsWithNamedOutlets(\n segmentGroup: UrlSegmentGroup, segments: UrlSegment[], routes: Route[]): boolean {\n return routes.some(\n r => isEmptyPathRedirect(segmentGroup, segments, r) && getOutlet(r) !== PRIMARY_OUTLET);\n}\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} routes\n * @return {?}\n */\nfunction containsEmptyPathRedirects(\n segmentGroup: UrlSegmentGroup, segments: UrlSegment[], routes: Route[]): boolean {\n return routes.some(r => isEmptyPathRedirect(segmentGroup, segments, r));\n}\n/**\n * @param {?} segmentGroup\n * @param {?} segments\n * @param {?} r\n * @return {?}\n */\nfunction isEmptyPathRedirect(\n segmentGroup: UrlSegmentGroup, segments: UrlSegment[], r: Route): boolean {\n if ((segmentGroup.hasChildren() || segments.length > 0) && r.pathMatch === 'full') {\n return false;\n }\n\n return r.path === '' && r.redirectTo !== undefined;\n}\n/**\n * @param {?} route\n * @return {?}\n */\nfunction getOutlet(route: Route): string {\n return route.outlet || PRIMARY_OUTLET;\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {PRIMARY_OUTLET, ParamMap, convertToParamMap} from './shared';\nimport {forEach, shallowEqual} from './utils/collection';\n/**\n * @return {?}\n */\nexport function createEmptyUrlTree() {\n return new UrlTree(new UrlSegmentGroup([], {}), {}, null);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @param {?} exact\n * @return {?}\n */\nexport function containsTree(container: UrlTree, containee: UrlTree, exact: boolean): boolean {\n if (exact) {\n return equalQueryParams(container.queryParams, containee.queryParams) &&\n equalSegmentGroups(container.root, containee.root);\n }\n\n return containsQueryParams(container.queryParams, containee.queryParams) &&\n containsSegmentGroup(container.root, containee.root);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction equalQueryParams(\n container: {[k: string]: string}, containee: {[k: string]: string}): boolean {\n return shallowEqual(container, containee);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction equalSegmentGroups(container: UrlSegmentGroup, containee: UrlSegmentGroup): boolean {\n if (!equalPath(container.segments, containee.segments)) return false;\n if (container.numberOfChildren !== containee.numberOfChildren) return false;\n for (const /** @type {?} */ c in containee.children) {\n if (!container.children[c]) return false;\n if (!equalSegmentGroups(container.children[c], containee.children[c])) return false;\n }\n return true;\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction containsQueryParams(\n container: {[k: string]: string}, containee: {[k: string]: string}): boolean {\n return Object.keys(containee).length <= Object.keys(container).length &&\n Object.keys(containee).every(key => containee[key] === container[key]);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @return {?}\n */\nfunction containsSegmentGroup(container: UrlSegmentGroup, containee: UrlSegmentGroup): boolean {\n return containsSegmentGroupHelper(container, containee, containee.segments);\n}\n/**\n * @param {?} container\n * @param {?} containee\n * @param {?} containeePaths\n * @return {?}\n */\nfunction containsSegmentGroupHelper(\n container: UrlSegmentGroup, containee: UrlSegmentGroup, containeePaths: UrlSegment[]): boolean {\n if (container.segments.length > containeePaths.length) {\n const /** @type {?} */ current = container.segments.slice(0, containeePaths.length);\n if (!equalPath(current, containeePaths)) return false;\n if (containee.hasChildren()) return false;\n return true;\n\n } else if (container.segments.length === containeePaths.length) {\n if (!equalPath(container.segments, containeePaths)) return false;\n for (const /** @type {?} */ c in containee.children) {\n if (!container.children[c]) return false;\n if (!containsSegmentGroup(container.children[c], containee.children[c])) return false;\n }\n return true;\n\n } else {\n const /** @type {?} */ current = containeePaths.slice(0, container.segments.length);\n const /** @type {?} */ next = containeePaths.slice(container.segments.length);\n if (!equalPath(container.segments, current)) return false;\n if (!container.children[PRIMARY_OUTLET]) return false;\n return containsSegmentGroupHelper(container.children[PRIMARY_OUTLET], containee, next);\n }\n}\n/**\n * \\@whatItDoes Represents the parsed URL.\n * \n * \\@howToUse \n * \n * ```\n * \\@Component({templateUrl:'template.html'}) \n * class MyComponent {\n * constructor(router: Router) {\n * const tree: UrlTree =\n * router.parseUrl('/team/33/(user/victor//support:help)?debug=true#fragment');\n * const f = tree.fragment; // return 'fragment'\n * const q = tree.queryParams; // returns {debug: 'true'}\n * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n * const s: UrlSegment[] = g.segments; // returns 2 segments 'team' and '33'\n * g.children[PRIMARY_OUTLET].segments; // returns 2 segments 'user' and 'victor'\n * g.children['support'].segments; // return 1 segment 'help'\n * }\n * }\n * ```\n * \n * \\@description \n * \n * Since a router state is a tree, and the URL is nothing but a serialized state, the URL is a\n * serialized tree.\n * UrlTree is a data structure that provides a lot of affordances in dealing with URLs\n * \n * \\@stable\n */\nexport class UrlTree {\n/**\n * \\@internal\n */\n_queryParamMap: ParamMap;\n/**\n * \\@internal\n * @param {?} root\n * @param {?} queryParams\n * @param {?} fragment\n */\nconstructor(\npublic root: UrlSegmentGroup,\npublic queryParams: {[key: string]: string},\npublic fragment: string) {}\n/**\n * @return {?}\n */\nget queryParamMap(): ParamMap {\n if (!this._queryParamMap) {\n this._queryParamMap = convertToParamMap(this.queryParams);\n }\n return this._queryParamMap;\n }\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string { return DEFAULT_SERIALIZER.serialize(this); }\n}\n\nfunction UrlTree_tsickle_Closure_declarations() {\n/**\n * \\@internal\n * @type {?}\n */\nUrlTree.prototype._queryParamMap;\n/**\n * The root segment group of the URL tree\n * @type {?}\n */\nUrlTree.prototype.root;\n/**\n * The query params of the URL\n * @type {?}\n */\nUrlTree.prototype.queryParams;\n/**\n * The fragment of the URL\n * @type {?}\n */\nUrlTree.prototype.fragment;\n}\n\n/**\n * \\@whatItDoes Represents the parsed URL segment group.\n * \n * See {\\@link UrlTree} for more information.\n * \n * \\@stable\n */\nexport class UrlSegmentGroup {\n/**\n * \\@internal\n */\n_sourceSegment: UrlSegmentGroup;\n/**\n * \\@internal\n */\n_segmentIndexShift: number;\n /** The parent node in the url tree */\n parent: UrlSegmentGroup = null;\n/**\n * @param {?} segments\n * @param {?} children\n */\nconstructor(\npublic segments: UrlSegment[],\npublic children: {[key: string]: UrlSegmentGroup}) {\n forEach(children, (v: any, k: any) => v.parent = this);\n }\n/**\n * Wether the segment has child segments\n * @return {?}\n */\nhasChildren(): boolean { return this.numberOfChildren > 0; }\n/**\n * Number of child segments\n * @return {?}\n */\nget numberOfChildren(): number { return Object.keys(this.children).length; }\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string { return serializePaths(this); }\n}\n\nfunction UrlSegmentGroup_tsickle_Closure_declarations() {\n/**\n * \\@internal\n * @type {?}\n */\nUrlSegmentGroup.prototype._sourceSegment;\n/**\n * \\@internal\n * @type {?}\n */\nUrlSegmentGroup.prototype._segmentIndexShift;\n/**\n * The parent node in the url tree\n * @type {?}\n */\nUrlSegmentGroup.prototype.parent;\n/**\n * The URL segments of this group. See {\\@link UrlSegment} for more information\n * @type {?}\n */\nUrlSegmentGroup.prototype.segments;\n/**\n * The list of children of this group\n * @type {?}\n */\nUrlSegmentGroup.prototype.children;\n}\n\n/**\n * \\@whatItDoes Represents a single URL segment.\n * \n * \\@howToUse \n * \n * ```\n * \\@Component({templateUrl:'template.html'}) \n * class MyComponent {\n * constructor(router: Router) {\n * const tree: UrlTree = router.parseUrl('/team;id=33');\n * const g: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n * const s: UrlSegment[] = g.segments;\n * s[0].path; // returns 'team'\n * s[0].parameters; // returns {id: 33}\n * }\n * }\n * ```\n * \n * \\@description \n * \n * A UrlSegment is a part of a URL between the two slashes. It contains a path and the matrix\n * parameters associated with the segment.\n * \n * \\@stable\n */\nexport class UrlSegment {\n/**\n * \\@internal\n */\n_parameterMap: ParamMap;\n/**\n * @param {?} path\n * @param {?} parameters\n */\nconstructor(\npublic path: string,\npublic parameters: {[name: string]: string}) {}\n/**\n * @return {?}\n */\nget parameterMap() {\n if (!this._parameterMap) {\n this._parameterMap = convertToParamMap(this.parameters);\n }\n return this._parameterMap;\n }\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string { return serializePath(this); }\n}\n\nfunction UrlSegment_tsickle_Closure_declarations() {\n/**\n * \\@internal\n * @type {?}\n */\nUrlSegment.prototype._parameterMap;\n/**\n * The path part of a URL segment\n * @type {?}\n */\nUrlSegment.prototype.path;\n/**\n * The matrix parameters associated with a segment\n * @type {?}\n */\nUrlSegment.prototype.parameters;\n}\n\n/**\n * @param {?} as\n * @param {?} bs\n * @return {?}\n */\nexport function equalSegments(as: UrlSegment[], bs: UrlSegment[]): boolean {\n return equalPath(as, bs) && as.every((a, i) => shallowEqual(a.parameters, bs[i].parameters));\n}\n/**\n * @param {?} as\n * @param {?} bs\n * @return {?}\n */\nexport function equalPath(as: UrlSegment[], bs: UrlSegment[]): boolean {\n if (as.length !== bs.length) return false;\n return as.every((a, i) => a.path === bs[i].path);\n}\n/**\n * @template T\n * @param {?} segment\n * @param {?} fn\n * @return {?}\n */\nexport function mapChildrenIntoArray(\n segment: UrlSegmentGroup, fn: (v: UrlSegmentGroup, k: string) => T[]): T[] {\n let /** @type {?} */ res: T[] = [];\n forEach(segment.children, (child: UrlSegmentGroup, childOutlet: string) => {\n if (childOutlet === PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n forEach(segment.children, (child: UrlSegmentGroup, childOutlet: string) => {\n if (childOutlet !== PRIMARY_OUTLET) {\n res = res.concat(fn(child, childOutlet));\n }\n });\n return res;\n}\n/**\n * \\@whatItDoes Serializes and deserializes a URL string into a URL tree.\n * \n * \\@description The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n * \n * See {\\@link DefaultUrlSerializer} for an example of a URL serializer.\n * \n * \\@stable\n * @abstract\n */\nexport abstract class UrlSerializer {\n/**\n * Parse a url into a {\\@link UrlTree}\n * @abstract\n * @param {?} url\n * @return {?}\n */\nparse(url: string) {}\n/**\n * Converts a {\\@link UrlTree} into a url\n * @abstract\n * @param {?} tree\n * @return {?}\n */\nserialize(tree: UrlTree) {}\n}\n/**\n * \\@whatItDoes A default implementation of the {\\@link UrlSerializer}.\n * \n * \\@description \n * \n * Example URLs:\n * \n * ```\n * /inbox/33(popup:compose)\n * /inbox/33;open=true/messages/44\n * ```\n * \n * DefaultUrlSerializer uses parentheses to serialize secondary segments (e.g., popup:compose), the\n * colon syntax to specify the outlet, and the ';parameter=value' syntax (e.g., open=true) to\n * specify route specific parameters.\n * \n * \\@stable\n */\nexport class DefaultUrlSerializer implements UrlSerializer {\n/**\n * Parses a url into a {\\@link UrlTree}\n * @param {?} url\n * @return {?}\n */\nparse(url: string): UrlTree {\n const /** @type {?} */ p = new UrlParser(url);\n return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n }\n/**\n * Converts a {\\@link UrlTree} into a url\n * @param {?} tree\n * @return {?}\n */\nserialize(tree: UrlTree): string {\n const /** @type {?} */ segment = `/${serializeSegment(tree.root, true)}`;\n const /** @type {?} */ query = serializeQueryParams(tree.queryParams);\n const /** @type {?} */ fragment = typeof tree.fragment === `string` ? `#${encodeURI(tree.fragment)}` : '';\n\n return `${segment}${query}${fragment}`;\n }\n}\n\nconst /** @type {?} */ DEFAULT_SERIALIZER = new DefaultUrlSerializer();\n/**\n * @param {?} segment\n * @return {?}\n */\nexport function serializePaths(segment: UrlSegmentGroup): string {\n return segment.segments.map(p => serializePath(p)).join('/');\n}\n/**\n * @param {?} segment\n * @param {?} root\n * @return {?}\n */\nfunction serializeSegment(segment: UrlSegmentGroup, root: boolean): string {\n if (!segment.hasChildren()) {\n return serializePaths(segment);\n }\n\n if (root) {\n const /** @type {?} */ primary = segment.children[PRIMARY_OUTLET] ?\n serializeSegment(segment.children[PRIMARY_OUTLET], false) :\n '';\n const /** @type {?} */ children: string[] = [];\n\n forEach(segment.children, (v: UrlSegmentGroup, k: string) => {\n if (k !== PRIMARY_OUTLET) {\n children.push(`${k}:${serializeSegment(v, false)}`);\n }\n });\n\n return children.length > 0 ? `${primary}(${children.join('//')})` : primary;\n\n } else {\n const /** @type {?} */ children = mapChildrenIntoArray(segment, (v: UrlSegmentGroup, k: string) => {\n if (k === PRIMARY_OUTLET) {\n return [serializeSegment(segment.children[PRIMARY_OUTLET], false)];\n }\n\n return [`${k}:${serializeSegment(v, false)}`];\n\n });\n\n return `${serializePaths(segment)}/(${children.join('//')})`;\n }\n}\n/**\n * @param {?} s\n * @return {?}\n */\nexport function encode(s: string): string {\n return encodeURIComponent(s);\n}\n/**\n * @param {?} s\n * @return {?}\n */\nexport function decode(s: string): string {\n return decodeURIComponent(s);\n}\n/**\n * @param {?} path\n * @return {?}\n */\nexport function serializePath(path: UrlSegment): string {\n return `${encode(path.path)}${serializeParams(path.parameters)}`;\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction serializeParams(params: {[key: string]: string}): string {\n return Object.keys(params).map(key => `;${encode(key)}=${encode(params[key])}`).join('');\n}\n/**\n * @param {?} params\n * @return {?}\n */\nfunction serializeQueryParams(params: {[key: string]: any}): string {\n const /** @type {?} */ strParams: string[] = Object.keys(params).map((name) => {\n const /** @type {?} */ value = params[name];\n return Array.isArray(value) ? value.map(v => `${encode(name)}=${encode(v)}`).join('&') :\n `${encode(name)}=${encode(value)}`;\n });\n\n return strParams.length ? `?${strParams.join(\"&\")}` : '';\n}\n\nconst /** @type {?} */ SEGMENT_RE = /^[^\\/()?;=&#]+/;\n/**\n * @param {?} str\n * @return {?}\n */\nfunction matchSegments(str: string): string {\n const /** @type {?} */ match = str.match(SEGMENT_RE);\n return match ? match[0] : '';\n}\n\nconst /** @type {?} */ QUERY_PARAM_RE = /^[^=?&#]+/;\n/**\n * @param {?} str\n * @return {?}\n */\nfunction matchQueryParams(str: string): string {\n const /** @type {?} */ match = str.match(QUERY_PARAM_RE);\n return match ? match[0] : '';\n}\n\nconst /** @type {?} */ QUERY_PARAM_VALUE_RE = /^[^?&#]+/;\n/**\n * @param {?} str\n * @return {?}\n */\nfunction matchUrlQueryParamValue(str: string): string {\n const /** @type {?} */ match = str.match(QUERY_PARAM_VALUE_RE);\n return match ? match[0] : '';\n}\nclass UrlParser {\nprivate remaining: string;\n/**\n * @param {?} url\n */\nconstructor(private url: string) { this.remaining = url; }\n/**\n * @return {?}\n */\nparseRootSegment(): UrlSegmentGroup {\n this.consumeOptional('/');\n\n if (this.remaining === '' || this.peekStartsWith('?') || this.peekStartsWith('#')) {\n return new UrlSegmentGroup([], {});\n }\n\n // The root segment group never has segments\n return new UrlSegmentGroup([], this.parseChildren());\n }\n/**\n * @return {?}\n */\nparseQueryParams(): {[key: string]: any} {\n const /** @type {?} */ params: {[key: string]: any} = {};\n if (this.consumeOptional('?')) {\n do {\n this.parseQueryParam(params);\n } while (this.consumeOptional('&'));\n }\n return params;\n }\n/**\n * @return {?}\n */\nparseFragment(): string { return this.consumeOptional('#') ? decodeURI(this.remaining) : null; }\n/**\n * @return {?}\n */\nprivate parseChildren(): {[outlet: string]: UrlSegmentGroup} {\n if (this.remaining === '') {\n return {};\n }\n\n this.consumeOptional('/');\n\n const /** @type {?} */ segments: UrlSegment[] = [];\n if (!this.peekStartsWith('(')) {\n segments.push(this.parseSegment());\n }\n\n while (this.peekStartsWith('/') && !this.peekStartsWith('//') && !this.peekStartsWith('/(')) {\n this.capture('/');\n segments.push(this.parseSegment());\n }\n\n let /** @type {?} */ children: {[outlet: string]: UrlSegmentGroup} = {};\n if (this.peekStartsWith('/(')) {\n this.capture('/');\n children = this.parseParens(true);\n }\n\n let /** @type {?} */ res: {[outlet: string]: UrlSegmentGroup} = {};\n if (this.peekStartsWith('(')) {\n res = this.parseParens(false);\n }\n\n if (segments.length > 0 || Object.keys(children).length > 0) {\n res[PRIMARY_OUTLET] = new UrlSegmentGroup(segments, children);\n }\n\n return res;\n }\n/**\n * @return {?}\n */\nprivate parseSegment(): UrlSegment {\n const /** @type {?} */ path = matchSegments(this.remaining);\n if (path === '' && this.peekStartsWith(';')) {\n throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);\n }\n\n this.capture(path);\n return new UrlSegment(decode(path), this.parseMatrixParams());\n }\n/**\n * @return {?}\n */\nprivate parseMatrixParams(): {[key: string]: any} {\n const /** @type {?} */ params: {[key: string]: any} = {};\n while (this.consumeOptional(';')) {\n this.parseParam(params);\n }\n return params;\n }\n/**\n * @param {?} params\n * @return {?}\n */\nprivate parseParam(params: {[key: string]: any}): void {\n const /** @type {?} */ key = matchSegments(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let /** @type {?} */ value: any = '';\n if (this.consumeOptional('=')) {\n const /** @type {?} */ valueMatch = matchSegments(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n\n params[decode(key)] = decode(value);\n }\n/**\n * @param {?} params\n * @return {?}\n */\nprivate parseQueryParam(params: {[key: string]: any}): void {\n const /** @type {?} */ key = matchQueryParams(this.remaining);\n if (!key) {\n return;\n }\n this.capture(key);\n let /** @type {?} */ value: any = '';\n if (this.consumeOptional('=')) {\n const /** @type {?} */ valueMatch = matchUrlQueryParamValue(this.remaining);\n if (valueMatch) {\n value = valueMatch;\n this.capture(value);\n }\n }\n\n const /** @type {?} */ decodedKey = decode(key);\n const /** @type {?} */ decodedVal = decode(value);\n\n if (params.hasOwnProperty(decodedKey)) {\n // Append to existing values\n let /** @type {?} */ currentVal = params[decodedKey];\n if (!Array.isArray(currentVal)) {\n currentVal = [currentVal];\n params[decodedKey] = currentVal;\n }\n currentVal.push(decodedVal);\n } else {\n // Create a new value\n params[decodedKey] = decodedVal;\n }\n }\n/**\n * @param {?} allowPrimary\n * @return {?}\n */\nprivate parseParens(allowPrimary: boolean): {[outlet: string]: UrlSegmentGroup} {\n const /** @type {?} */ segments: {[key: string]: UrlSegmentGroup} = {};\n this.capture('(');\n\n while (!this.consumeOptional(')') && this.remaining.length > 0) {\n const /** @type {?} */ path = matchSegments(this.remaining);\n\n const /** @type {?} */ next = this.remaining[path.length];\n\n // if is is not one of these characters, then the segment was unescaped\n // or the group was not closed\n if (next !== '/' && next !== ')' && next !== ';') {\n throw new Error(`Cannot parse url '${this.url}'`);\n }\n\n let /** @type {?} */ outletName: string;\n if (path.indexOf(':') > -1) {\n outletName = path.substr(0, path.indexOf(':'));\n this.capture(outletName);\n this.capture(':');\n } else if (allowPrimary) {\n outletName = PRIMARY_OUTLET;\n }\n\n const /** @type {?} */ children = this.parseChildren();\n segments[outletName] = Object.keys(children).length === 1 ? children[PRIMARY_OUTLET] :\n new UrlSegmentGroup([], children);\n this.consumeOptional('//');\n }\n\n return segments;\n }\n/**\n * @param {?} str\n * @return {?}\n */\nprivate peekStartsWith(str: string): boolean { return this.remaining.startsWith(str); }\n/**\n * @param {?} str\n * @return {?}\n */\nprivate consumeOptional(str: string): boolean {\n if (this.peekStartsWith(str)) {\n this.remaining = this.remaining.substring(str.length);\n return true;\n }\n return false;\n }\n/**\n * @param {?} str\n * @return {?}\n */\nprivate capture(str: string): void {\n if (!this.consumeOptional(str)) {\n throw new Error(`Expected \"${str}\".`);\n }\n }\n}\n\nfunction UrlParser_tsickle_Closure_declarations() {\n/** @type {?} */\nUrlParser.prototype.remaining;\n/** @type {?} */\nUrlParser.prototype.url;\n}\n\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {NgModuleFactory, ɵisObservable as isObservable, ɵisPromise as isPromise} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {fromPromise} from 'rxjs/observable/fromPromise';\nimport {of } from 'rxjs/observable/of';\nimport {concatAll} from 'rxjs/operator/concatAll';\nimport {every} from 'rxjs/operator/every';\nimport * as l from 'rxjs/operator/last';\nimport {map} from 'rxjs/operator/map';\nimport {mergeAll} from 'rxjs/operator/mergeAll';\nimport {PRIMARY_OUTLET} from '../shared';\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nexport function shallowEqualArrays(a: any[], b: any[]): boolean {\n if (a.length !== b.length) return false;\n for (let /** @type {?} */ i = 0; i < a.length; ++i) {\n if (!shallowEqual(a[i], b[i])) return false;\n }\n return true;\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nexport function shallowEqual(a: {[x: string]: any}, b: {[x: string]: any}): boolean {\n const /** @type {?} */ k1 = Object.keys(a);\n const /** @type {?} */ k2 = Object.keys(b);\n if (k1.length != k2.length) {\n return false;\n }\n let /** @type {?} */ key: string;\n for (let /** @type {?} */ i = 0; i < k1.length; i++) {\n key = k1[i];\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\n/**\n * @template T\n * @param {?} arr\n * @return {?}\n */\nexport function flatten(arr: T[][]): T[] {\n return Array.prototype.concat.apply([], arr);\n}\n/**\n * @template T\n * @param {?} a\n * @return {?}\n */\nexport function last(a: T[]): T {\n return a.length > 0 ? a[a.length - 1] : null;\n}\n/**\n * @param {?} bools\n * @return {?}\n */\nexport function and(bools: boolean[]): boolean {\n return !bools.some(v => !v);\n}\n/**\n * @template K, V\n * @param {?} map\n * @param {?} callback\n * @return {?}\n */\nexport function forEach(map: {[key: string]: V}, callback: (v: V, k: string) => void): void {\n for (const /** @type {?} */ prop in map) {\n if (map.hasOwnProperty(prop)) {\n callback(map[prop], prop);\n }\n }\n}\n/**\n * @template A, B\n * @param {?} obj\n * @param {?} fn\n * @return {?}\n */\nexport function waitForMap(\n obj: {[k: string]: A}, fn: (k: string, a: A) => Observable): Observable<{[k: string]: B}> {\n if (Object.keys(obj).length === 0) {\n return of ({})\n }\n\n const /** @type {?} */ waitHead: Observable[] = [];\n const /** @type {?} */ waitTail: Observable[] = [];\n const /** @type {?} */ res: {[k: string]: B} = {};\n\n forEach(obj, (a: A, k: string) => {\n const /** @type {?} */ mapped = map.call(fn(k, a), (r: B) => res[k] = r);\n if (k === PRIMARY_OUTLET) {\n waitHead.push(mapped);\n } else {\n waitTail.push(mapped);\n }\n });\n\n const /** @type {?} */ concat$ = concatAll.call(of (...waitHead, ...waitTail));\n const /** @type {?} */ last$ = l.last.call(concat$);\n return map.call(last$, () => res);\n}\n/**\n * @param {?} observables\n * @return {?}\n */\nexport function andObservables(observables: Observable>): Observable {\n const /** @type {?} */ merged$ = mergeAll.call(observables);\n return every.call(merged$, (result: any) => result === true);\n}\n/**\n * @template T\n * @param {?} value\n * @return {?}\n */\nexport function wrapIntoObservable(value: T | NgModuleFactory| Promise| Observable):\n Observable {\n if (isObservable(value)) {\n return value;\n }\n\n if (isPromise(value)) {\n return fromPromise(value);\n }\n\n return of (value);\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {NgModuleFactory, NgModuleRef, Type} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup} from './url_tree';\n\n/**\n * @whatItDoes Represents router configuration.\n *\n * @description\n * `Routes` is an array of route configurations. Each one has the following properties:\n *\n * - `path` is a string that uses the route matcher DSL.\n * - `pathMatch` is a string that specifies the matching strategy.\n * - `matcher` defines a custom strategy for path matching and supersedes `path` and `pathMatch`.\n * See {@link UrlMatcher} for more info.\n * - `component` is a component type.\n * - `redirectTo` is the url fragment which will replace the current matched segment.\n * - `outlet` is the name of the outlet the component should be placed into.\n * - `canActivate` is an array of DI tokens used to look up CanActivate handlers. See\n * {@link CanActivate} for more info.\n * - `canActivateChild` is an array of DI tokens used to look up CanActivateChild handlers. See\n * {@link CanActivateChild} for more info.\n * - `canDeactivate` is an array of DI tokens used to look up CanDeactivate handlers. See\n * {@link CanDeactivate} for more info.\n * - `canLoad` is an array of DI tokens used to look up CanDeactivate handlers. See\n * {@link CanLoad} for more info.\n * - `data` is additional data provided to the component via `ActivatedRoute`.\n * - `resolve` is a map of DI tokens used to look up data resolvers. See {@link Resolve} for more\n * info.\n * - `runGuardsAndResolvers` defines when guards and resovlers will be run. By default they run only\n * when the matrix parameters of the route change. When set to `paramsOrQueryParamsChange` they\n * will also run when query params change. And when set to `always`, they will run every time.\n * - `children` is an array of child route definitions.\n * - `loadChildren` is a reference to lazy loaded child routes. See {@link LoadChildren} for more\n * info.\n *\n * ### Simple Configuration\n *\n * ```\n * [{\n * path: 'team/:id',\n * component: Team,\n * children: [{\n * path: 'user/:name',\n * component: User\n * }]\n * }]\n * ```\n *\n * When navigating to `/team/11/user/bob`, the router will create the team component with the user\n * component in it.\n *\n * ### Multiple Outlets\n *\n * ```\n * [{\n * path: 'team/:id',\n * component: Team\n * }, {\n * path: 'chat/:user',\n * component: Chat\n * outlet: 'aux'\n * }]\n * ```\n *\n * When navigating to `/team/11(aux:chat/jim)`, the router will create the team component next to\n * the chat component. The chat component will be placed into the aux outlet.\n *\n * ### Wild Cards\n *\n * ```\n * [{\n * path: '**',\n * component: Sink\n * }]\n * ```\n *\n * Regardless of where you navigate to, the router will instantiate the sink component.\n *\n * ### Redirects\n *\n * ```\n * [{\n * path: 'team/:id',\n * component: Team,\n * children: [{\n * path: 'legacy/user/:name',\n * redirectTo: 'user/:name'\n * }, {\n * path: 'user/:name',\n * component: User\n * }]\n * }]\n * ```\n *\n * When navigating to '/team/11/legacy/user/jim', the router will change the url to\n * '/team/11/user/jim', and then will instantiate the team component with the user component\n * in it.\n *\n * If the `redirectTo` value starts with a '/', then it is an absolute redirect. E.g., if in the\n * example above we change the `redirectTo` to `/user/:name`, the result url will be '/user/jim'.\n *\n * ### Empty Path\n *\n * Empty-path route configurations can be used to instantiate components that do not 'consume'\n * any url segments. Let's look at the following configuration:\n *\n * ```\n * [{\n * path: 'team/:id',\n * component: Team,\n * children: [{\n * path: '',\n * component: AllUsers\n * }, {\n * path: 'user/:name',\n * component: User\n * }]\n * }]\n * ```\n *\n * When navigating to `/team/11`, the router will instantiate the AllUsers component.\n *\n * Empty-path routes can have children.\n *\n * ```\n * [{\n * path: 'team/:id',\n * component: Team,\n * children: [{\n * path: '',\n * component: WrapperCmp,\n * children: [{\n * path: 'user/:name',\n * component: User\n * }]\n * }]\n * }]\n * ```\n *\n * When navigating to `/team/11/user/jim`, the router will instantiate the wrapper component with\n * the user component in it.\n *\n * An empty path route inherits its parent's params and data. This is because it cannot have its\n * own params, and, as a result, it often uses its parent's params and data as its own.\n *\n * ### Matching Strategy\n *\n * By default the router will look at what is left in the url, and check if it starts with\n * the specified path (e.g., `/team/11/user` starts with `team/:id`).\n *\n * We can change the matching strategy to make sure that the path covers the whole unconsumed url,\n * which is akin to `unconsumedUrl === path` or `$` regular expressions.\n *\n * This is particularly important when redirecting empty-path routes.\n *\n * ```\n * [{\n * path: '',\n * pathMatch: 'prefix', //default\n * redirectTo: 'main'\n * }, {\n * path: 'main',\n * component: Main\n * }]\n * ```\n *\n * Since an empty path is a prefix of any url, even when navigating to '/main', the router will\n * still apply the redirect.\n *\n * If `pathMatch: full` is provided, the router will apply the redirect if and only if navigating to\n * '/'.\n *\n * ```\n * [{\n * path: '',\n * pathMatch: 'full',\n * redirectTo: 'main'\n * }, {\n * path: 'main',\n * component: Main\n * }]\n * ```\n *\n * ### Componentless Routes\n *\n * It is useful at times to have the ability to share parameters between sibling components.\n *\n * Say we have two components--ChildCmp and AuxCmp--that we want to put next to each other and both\n * of them require some id parameter.\n *\n * One way to do that would be to have a bogus parent component, so both the siblings can get the id\n * parameter from it. This is not ideal. Instead, you can use a componentless route.\n *\n * ```\n * [{\n * path: 'parent/:id',\n * children: [\n * { path: 'a', component: MainChild },\n * { path: 'b', component: AuxChild, outlet: 'aux' }\n * ]\n * }]\n * ```\n *\n * So when navigating to `parent/10/(a//aux:b)`, the route will instantiate the main child and aux\n * child components next to each other. In this example, the application component\n * has to have the primary and aux outlets defined.\n *\n * The router will also merge the `params`, `data`, and `resolve` of the componentless parent into\n * the `params`, `data`, and `resolve` of the children. This is done because there is no component\n * that can inject the activated route of the componentless parent.\n *\n * This is especially useful when child components are defined as follows:\n *\n * ```\n * [{\n * path: 'parent/:id',\n * children: [\n * { path: '', component: MainChild },\n * { path: '', component: AuxChild, outlet: 'aux' }\n * ]\n * }]\n * ```\n *\n * With this configuration in place, navigating to '/parent/10' will create the main child and aux\n * components.\n *\n * ### Lazy Loading\n *\n * Lazy loading speeds up our application load time by splitting it into multiple bundles, and\n * loading them on demand. The router is designed to make lazy loading simple and easy. Instead of\n * providing the children property, you can provide the `loadChildren` property, as follows:\n *\n * ```\n * [{\n * path: 'team/:id',\n * component: Team,\n * loadChildren: 'team'\n * }]\n * ```\n *\n * The router will use registered NgModuleFactoryLoader to fetch an NgModule associated with 'team'.\n * Then it will extract the set of routes defined in that NgModule, and will transparently add\n * those routes to the main configuration.\n *\n * @stable use Routes\n */\nexport type Routes = Route[];\n\n/**\n * @whatItDoes Represents the results of the URL matching.\n *\n * * `consumed` is an array of the consumed URL segments.\n * * `posParams` is a map of positional parameters.\n *\n * @experimental\n */\nexport type UrlMatchResult = {\n consumed: UrlSegment[]; posParams?: {[name: string]: UrlSegment};\n};\n\n/**\n * @whatItDoes A function matching URLs\n *\n * @description\n *\n * A custom URL matcher can be provided when a combination of `path` and `pathMatch` isn't\n * expressive enough.\n *\n * For instance, the following matcher matches html files.\n *\n * ```\n * function htmlFiles(url: UrlSegment[]) {\n * return url.length === 1 && url[0].path.endsWith('.html') ? ({consumed: url}) : null;\n * }\n *\n * const routes = [{ matcher: htmlFiles, component: HtmlCmp }];\n * ```\n *\n * @experimental\n */\nexport type UrlMatcher = (segments: UrlSegment[], group: UrlSegmentGroup, route: Route) =>\n UrlMatchResult;\n\n/**\n * @whatItDoes Represents the static data associated with a particular route.\n * See {@link Routes} for more details.\n * @stable\n */\nexport type Data = {\n [name: string]: any\n};\n\n/**\n * @whatItDoes Represents the resolved data associated with a particular route.\n * See {@link Routes} for more details.\n * @stable\n */\nexport type ResolveData = {\n [name: string]: any\n};\n\n/**\n * @whatItDoes The type of `loadChildren`.\n * See {@link Routes} for more details.\n * @stable\n */\nexport type LoadChildrenCallback = () =>\n Type| NgModuleFactory| Promise>| Observable>;\n\n/**\n * @whatItDoes The type of `loadChildren`.\n * See {@link Routes} for more details.\n * @stable\n */\nexport type LoadChildren = string | LoadChildrenCallback;\n\n/**\n * @whatItDoes The type of `queryParamsHandling`.\n * See {@link RouterLink} for more details.\n * @stable\n */\nexport type QueryParamsHandling = 'merge' | 'preserve' | '';\n\n/**\n * @whatItDoes The type of `runGuardsAndResolvers`.\n * See {@link Routes} for more details.\n * @experimental\n */\nexport type RunGuardsAndResolvers = 'paramsChange' | 'paramsOrQueryParamsChange' | 'always';\n\n/**\n * See {@link Routes} for more details.\n * @stable\n */\nexport interface Route {\n path?: string;\n pathMatch?: string;\n matcher?: UrlMatcher;\n component?: Type;\n redirectTo?: string;\n outlet?: string;\n canActivate?: any[];\n canActivateChild?: any[];\n canDeactivate?: any[];\n canLoad?: any[];\n data?: Data;\n resolve?: ResolveData;\n children?: Routes;\n loadChildren?: LoadChildren;\n runGuardsAndResolvers?: RunGuardsAndResolvers;\n /**\n * Filled for routes with `loadChildren` once the module has been loaded\n * @internal\n */\n _loadedConfig?: LoadedRouterConfig;\n}\nexport class LoadedRouterConfig {\n/**\n * @param {?} routes\n * @param {?} module\n */\nconstructor(public routes: Route[],\npublic module: NgModuleRef) {}\n}\n\nfunction LoadedRouterConfig_tsickle_Closure_declarations() {\n/** @type {?} */\nLoadedRouterConfig.prototype.routes;\n/** @type {?} */\nLoadedRouterConfig.prototype.module;\n}\n\n/**\n * @param {?} config\n * @param {?=} parentPath\n * @return {?}\n */\nexport function validateConfig(config: Routes, parentPath: string = ''): void {\n // forEach doesn't iterate undefined values\n for (let /** @type {?} */ i = 0; i < config.length; i++) {\n const /** @type {?} */ route: Route = config[i];\n const /** @type {?} */ fullPath: string = getFullPath(parentPath, route);\n validateNode(route, fullPath);\n }\n}\n/**\n * @param {?} route\n * @param {?} fullPath\n * @return {?}\n */\nfunction validateNode(route: Route, fullPath: string): void {\n if (!route) {\n throw new Error(`\n Invalid configuration of route '${fullPath}': Encountered undefined route.\n The reason might be an extra comma.\n\n Example:\n const routes: Routes = [\n { path: '', redirectTo: '/dashboard', pathMatch: 'full' },\n { path: 'dashboard', component: DashboardComponent },, << two commas\n { path: 'detail/:id', component: HeroDetailComponent }\n ];\n `);\n }\n if (Array.isArray(route)) {\n throw new Error(`Invalid configuration of route '${fullPath}': Array cannot be specified`);\n }\n if (!route.component && (route.outlet && route.outlet !== PRIMARY_OUTLET)) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': a componentless route cannot have a named outlet set`);\n }\n if (route.redirectTo && route.children) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': redirectTo and children cannot be used together`);\n }\n if (route.redirectTo && route.loadChildren) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': redirectTo and loadChildren cannot be used together`);\n }\n if (route.children && route.loadChildren) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': children and loadChildren cannot be used together`);\n }\n if (route.redirectTo && route.component) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': redirectTo and component cannot be used together`);\n }\n if (route.path && route.matcher) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n }\n if (route.redirectTo === void 0 && !route.component && !route.children && !route.loadChildren) {\n throw new Error(\n `Invalid configuration of route '${fullPath}'. One of the following must be provided: component, redirectTo, children or loadChildren`);\n }\n if (route.path === void 0 && route.matcher === void 0) {\n throw new Error(\n `Invalid configuration of route '${fullPath}': routes must have either a path or a matcher specified`);\n }\n if (typeof route.path === 'string' && route.path.charAt(0) === '/') {\n throw new Error(`Invalid configuration of route '${fullPath}': path cannot start with a slash`);\n }\n if (route.path === '' && route.redirectTo !== void 0 && route.pathMatch === void 0) {\n const /** @type {?} */ exp =\n `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n throw new Error(\n `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n }\n if (route.pathMatch !== void 0 && route.pathMatch !== 'full' && route.pathMatch !== 'prefix') {\n throw new Error(\n `Invalid configuration of route '${fullPath}': pathMatch can only be set to 'prefix' or 'full'`);\n }\n if (route.children) {\n validateConfig(route.children, fullPath);\n }\n}\n/**\n * @param {?} parentPath\n * @param {?} currentRoute\n * @return {?}\n */\nfunction getFullPath(parentPath: string, currentRoute: Route): string {\n if (!currentRoute) {\n return parentPath;\n }\n if (!parentPath && !currentRoute.path) {\n return '';\n } else if (parentPath && !currentRoute.path) {\n return `${parentPath}/`;\n } else if (!parentPath && currentRoute.path) {\n return currentRoute.path;\n } else {\n return `${parentPath}/${currentRoute.path}`;\n }\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\n\nimport {Route, UrlMatchResult} from './config';\nimport {UrlSegment, UrlSegmentGroup} from './url_tree';\n/**\n * \\@whatItDoes Name of the primary outlet.\n * \n * \\@stable\n */\nexport const PRIMARY_OUTLET = 'primary';\n\n/**\n * A collection of parameters.\n *\n * @stable\n */\nexport type Params = {\n [key: string]: any\n};\n\n/**\n * Matrix and Query parameters.\n *\n * `ParamMap` makes it easier to work with parameters as they could have either a single value or\n * multiple value. Because this should be known by the user, calling `get` or `getAll` returns the\n * correct type (either `string` or `string[]`).\n *\n * The API is inspired by the URLSearchParams interface.\n * see https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n *\n * @stable\n */\nexport interface ParamMap {\n has(name: string): boolean;\n /**\n * Return a single value for the given parameter name:\n * - the value when the parameter has a single value,\n * - the first value if the parameter has multiple values,\n * - `null` when there is no such parameter.\n */\n get(name: string): string|null;\n /**\n * Return an array of values for the given parameter name.\n *\n * If there is no such parameter, an empty array is returned.\n */\n getAll(name: string): string[];\n\n /** Name of the parameters */\n readonly keys: string[];\n}\nclass ParamsAsMap implements ParamMap {\nprivate params: Params;\n/**\n * @param {?} params\n */\nconstructor(params: Params) { this.params = params || {}; }\n/**\n * @param {?} name\n * @return {?}\n */\nhas(name: string): boolean { return this.params.hasOwnProperty(name); }\n/**\n * @param {?} name\n * @return {?}\n */\nget(name: string): string|null {\n if (this.has(name)) {\n const /** @type {?} */ v = this.params[name];\n return Array.isArray(v) ? v[0] : v;\n }\n\n return null;\n }\n/**\n * @param {?} name\n * @return {?}\n */\ngetAll(name: string): string[] {\n if (this.has(name)) {\n const /** @type {?} */ v = this.params[name];\n return Array.isArray(v) ? v : [v];\n }\n\n return [];\n }\n/**\n * @return {?}\n */\nget keys(): string[] { return Object.keys(this.params); }\n}\n\nfunction ParamsAsMap_tsickle_Closure_declarations() {\n/** @type {?} */\nParamsAsMap.prototype.params;\n}\n\n/**\n * Convert a {\\@link Params} instance to a {\\@link ParamMap}.\n * \n * \\@stable\n * @param {?} params\n * @return {?}\n */\nexport function convertToParamMap(params: Params): ParamMap {\n return new ParamsAsMap(params);\n}\n\nconst /** @type {?} */ NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\n/**\n * @param {?} message\n * @return {?}\n */\nexport function navigationCancelingError(message: string) {\n const /** @type {?} */ error = Error('NavigationCancelingError: ' + message);\n ( /** @type {?} */((error as any)))[NAVIGATION_CANCELING_ERROR] = true;\n return error;\n}\n/**\n * @param {?} error\n * @return {?}\n */\nexport function isNavigationCancelingError(error: Error) {\n return ( /** @type {?} */((error as any)))[NAVIGATION_CANCELING_ERROR];\n}\n/**\n * @param {?} segments\n * @param {?} segmentGroup\n * @param {?} route\n * @return {?}\n */\nexport function defaultUrlMatcher(\n segments: UrlSegment[], segmentGroup: UrlSegmentGroup, route: Route): UrlMatchResult|null {\n const /** @type {?} */ parts = route.path.split('/');\n\n if (parts.length > segments.length) {\n // The actual URL is shorter than the config, no match\n return null;\n }\n\n if (route.pathMatch === 'full' &&\n (segmentGroup.hasChildren() || parts.length < segments.length)) {\n // The config is longer than the actual URL but we are looking for a full match, return null\n return null;\n }\n\n const /** @type {?} */ posParams: {[key: string]: UrlSegment} = {};\n\n // Check each config part against the actual URL\n for (let /** @type {?} */ index = 0; index < parts.length; index++) {\n const /** @type {?} */ part = parts[index];\n const /** @type {?} */ segment = segments[index];\n const /** @type {?} */ isParameter = part.startsWith(':');\n if (isParameter) {\n posParams[part.substring(1)] = segment;\n } else if (part !== segment.path) {\n // The actual URL part does not match the config, no match\n return null;\n }\n }\n\n return {consumed: segments.slice(0, parts.length), posParams};\n}\n","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Route} from './config';\nimport {RouterStateSnapshot} from './router_state';\n/**\n * \\@whatItDoes Represents an event triggered when a navigation starts.\n * \n * \\@stable\n */\nexport class NavigationStart {\n/**\n * @param {?} id\n * @param {?} url\n */\nconstructor(\npublic id: number,\npublic url: string) {}\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string { return `NavigationStart(id: ${this.id}, url: '${this.url}')`; }\n}\n\nfunction NavigationStart_tsickle_Closure_declarations() {\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationStart.prototype.id;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationStart.prototype.url;\n}\n\n/**\n * \\@whatItDoes Represents an event triggered when a navigation ends successfully.\n * \n * \\@stable\n */\nexport class NavigationEnd {\n/**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n */\nconstructor(\npublic id: number,\npublic url: string,\npublic urlAfterRedirects: string) {}\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string {\n return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`;\n }\n}\n\nfunction NavigationEnd_tsickle_Closure_declarations() {\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationEnd.prototype.id;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationEnd.prototype.url;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationEnd.prototype.urlAfterRedirects;\n}\n\n/**\n * \\@whatItDoes Represents an event triggered when a navigation is canceled.\n * \n * \\@stable\n */\nexport class NavigationCancel {\n/**\n * @param {?} id\n * @param {?} url\n * @param {?} reason\n */\nconstructor(\npublic id: number,\npublic url: string,\npublic reason: string) {}\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string { return `NavigationCancel(id: ${this.id}, url: '${this.url}')`; }\n}\n\nfunction NavigationCancel_tsickle_Closure_declarations() {\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationCancel.prototype.id;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationCancel.prototype.url;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationCancel.prototype.reason;\n}\n\n/**\n * \\@whatItDoes Represents an event triggered when a navigation fails due to an unexpected error.\n * \n * \\@stable\n */\nexport class NavigationError {\n/**\n * @param {?} id\n * @param {?} url\n * @param {?} error\n */\nconstructor(\npublic id: number,\npublic url: string,\npublic error: any) {}\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string {\n return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n }\n}\n\nfunction NavigationError_tsickle_Closure_declarations() {\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationError.prototype.id;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationError.prototype.url;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nNavigationError.prototype.error;\n}\n\n/**\n * \\@whatItDoes Represents an event triggered when routes are recognized.\n * \n * \\@stable\n */\nexport class RoutesRecognized {\n/**\n * @param {?} id\n * @param {?} url\n * @param {?} urlAfterRedirects\n * @param {?} state\n */\nconstructor(\npublic id: number,\npublic url: string,\npublic urlAfterRedirects: string,\npublic state: RouterStateSnapshot) {}\n/**\n * \\@docsNotRequired\n * @return {?}\n */\ntoString(): string {\n return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`;\n }\n}\n\nfunction RoutesRecognized_tsickle_Closure_declarations() {\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nRoutesRecognized.prototype.id;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nRoutesRecognized.prototype.url;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nRoutesRecognized.prototype.urlAfterRedirects;\n/**\n * \\@docsNotRequired\n * @type {?}\n */\nRoutesRecognized.prototype.state;\n}\n\n/**\n * \\@whatItDoes Represents an event triggered before lazy loading a route config.\n * \n * \\@experimental\n */\nexport class RouteConfigLoadStart {\n/**\n * @param {?} route\n */\nconstructor(public route: Route) {}\n/**\n * @return {?}\n */\ntoString(): string { return `RouteConfigLoadStart(path: ${this.route.path})`; }\n}\n\nfunction RouteConfigLoadStart_tsickle_Closure_declarations() {\n/** @type {?} */\nRouteConfigLoadStart.prototype.route;\n}\n\n/**\n * \\@whatItDoes Represents an event triggered when a route has been lazy loaded.\n * \n * \\@experimental\n */\nexport class RouteConfigLoadEnd {\n/**\n * @param {?} route\n */\nconstructor(public route: Route) {}\n/**\n * @return {?}\n */\ntoString(): string { return `RouteConfigLoadEnd(path: ${this.route.path})`; }\n}\n\nfunction RouteConfigLoadEnd_tsickle_Closure_declarations() {\n/** @type {?} */\nRouteConfigLoadEnd.prototype.route;\n}\n\n\n/**\n * @whatItDoes Represents a router event.\n *\n * One of:\n * - {@link NavigationStart},\n * - {@link NavigationEnd},\n * - {@link NavigationCancel},\n * - {@link NavigationError},\n * - {@link RoutesRecognized},\n * - {@link RouteConfigLoadStart},\n * - {@link RouteConfigLoadEnd}\n *\n * @stable\n */\nexport type Event = NavigationStart | NavigationEnd | NavigationCancel | NavigationError |\n RoutesRecognized | RouteConfigLoadStart | RouteConfigLoadEnd;\n"],"names":["APP_BOOTSTRAP_LISTENER","APP_INITIALIZER","InjectionToken","ApplicationRef","of","LOCATION_INITIALIZED","ɵgetDOM","NgProbeToken","PlatformLocation","Inject","APP_BASE_HREF","Optional","LocationStrategy","SkipSelf","NgModuleFactoryLoader","SystemJsNgModuleLoader","Compiler","Location","Injector","mergeMap","Attribute","ComponentFactoryResolver","ViewContainerRef","ReflectiveInjector","Input","ContentChildren","ChangeDetectorRef","Renderer","ElementRef","Directive","HostBinding","isDevMode","map","from","first","NgModuleRef","fromPromise","NgModuleFactory","BehaviorSubject","EmptyError","_catch","concatAll","ɵisPromise","ɵisObservable"],"mappings":"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"}