{"version":3,"file":"router.mjs","sources":["../../../../../../packages/router/src/shared.ts","../../../../../../packages/router/src/utils/collection.ts","../../../../../../packages/router/src/url_tree.ts","../../../../../../packages/router/src/create_url_tree.ts","../../../../../../packages/router/src/events.ts","../../../../../../packages/router/src/router_outlet_context.ts","../../../../../../packages/router/src/utils/tree.ts","../../../../../../packages/router/src/router_state.ts","../../../../../../packages/router/src/directives/router_outlet.ts","../../../../../../packages/router/src/create_router_state.ts","../../../../../../packages/router/src/navigation_canceling_error.ts","../../../../../../packages/router/src/components/empty_outlet.ts","../../../../../../packages/router/src/utils/config.ts","../../../../../../packages/router/src/operators/activate_routes.ts","../../../../../../packages/router/src/utils/preactivation.ts","../../../../../../packages/router/src/utils/type_guards.ts","../../../../../../packages/router/src/operators/prioritized_guard_value.ts","../../../../../../packages/router/src/operators/check_guards.ts","../../../../../../packages/router/src/apply_redirects.ts","../../../../../../packages/router/src/utils/config_matching.ts","../../../../../../packages/router/src/recognize.ts","../../../../../../packages/router/src/operators/recognize.ts","../../../../../../packages/router/src/operators/resolve_data.ts","../../../../../../packages/router/src/operators/switch_tap.ts","../../../../../../packages/router/src/page_title_strategy.ts","../../../../../../packages/router/src/router_config.ts","../../../../../../packages/router/src/router_config_loader.ts","../../../../../../packages/router/src/url_handling_strategy.ts","../../../../../../packages/router/src/utils/view_transition.ts","../../../../../../packages/router/src/navigation_transition.ts","../../../../../../packages/router/src/route_reuse_strategy.ts","../../../../../../packages/router/src/statemanager/state_manager.ts","../../../../../../packages/router/src/utils/navigations.ts","../../../../../../packages/router/src/router.ts","../../../../../../packages/router/src/directives/router_link.ts","../../../../../../packages/router/src/directives/router_link_active.ts","../../../../../../packages/router/src/router_preloader.ts","../../../../../../packages/router/src/router_scroller.ts","../../../../../../packages/router/src/provide_router.ts","../../../../../../packages/router/src/router_module.ts","../../../../../../packages/router/src/utils/functional_guards.ts","../../../../../../packages/router/src/version.ts","../../../../../../packages/router/public_api.ts","../../../../../../packages/router/index.ts","../../../../../../packages/router/router.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC 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\nimport {Route, UrlMatchResult} from './models';\nimport {UrlSegment, UrlSegmentGroup} from './url_tree';\n\n\n/**\n * The primary routing outlet.\n *\n * @publicApi\n */\nexport const PRIMARY_OUTLET = 'primary';\n\n/**\n * A private symbol used to store the value of `Route.title` inside the `Route.data` if it is a\n * static string or `Route.resolve` if anything else. This allows us to reuse the existing route\n * data/resolvers to support the title feature without new instrumentation in the `Router` pipeline.\n */\nexport const RouteTitleKey = /* @__PURE__ */ Symbol('RouteTitle');\n\n/**\n * A collection of matrix and query URL parameters.\n * @see {@link convertToParamMap}\n * @see {@link ParamMap}\n *\n * @publicApi\n */\nexport type Params = {\n  [key: string]: any;\n};\n\n/**\n * A map that provides access to the required and optional parameters\n * specific to a route.\n * The map supports retrieving a single value with `get()`\n * or multiple values with `getAll()`.\n *\n * @see [URLSearchParams](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)\n *\n * @publicApi\n */\nexport interface ParamMap {\n  /**\n   * Reports whether the map contains a given parameter.\n   * @param name The parameter name.\n   * @returns True if the map contains the given parameter, false otherwise.\n   */\n  has(name: string): boolean;\n  /**\n   * Retrieves a single value for a parameter.\n   * @param name The parameter name.\n   * @return The parameter's single value,\n   * or the first value if the parameter has multiple values,\n   * or `null` when there is no such parameter.\n   */\n  get(name: string): string|null;\n  /**\n   * Retrieves multiple values for a parameter.\n   * @param name The parameter name.\n   * @return An array containing one or more values,\n   * or an empty array if there is no such parameter.\n   *\n   */\n  getAll(name: string): string[];\n\n  /** Names of the parameters in the map. */\n  readonly keys: string[];\n}\n\nclass ParamsAsMap implements ParamMap {\n  private params: Params;\n\n  constructor(params: Params) {\n    this.params = params || {};\n  }\n\n  has(name: string): boolean {\n    return Object.prototype.hasOwnProperty.call(this.params, name);\n  }\n\n  get(name: string): string|null {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v[0] : v;\n    }\n\n    return null;\n  }\n\n  getAll(name: string): string[] {\n    if (this.has(name)) {\n      const v = this.params[name];\n      return Array.isArray(v) ? v : [v];\n    }\n\n    return [];\n  }\n\n  get keys(): string[] {\n    return Object.keys(this.params);\n  }\n}\n\n/**\n * Converts a `Params` instance to a `ParamMap`.\n * @param params The instance to convert.\n * @returns The new map instance.\n *\n * @publicApi\n */\nexport function convertToParamMap(params: Params): ParamMap {\n  return new ParamsAsMap(params);\n}\n\n/**\n * Matches the route configuration (`route`) against the actual URL (`segments`).\n *\n * When no matcher is defined on a `Route`, this is the matcher used by the Router by default.\n *\n * @param segments The remaining unmatched segments in the current navigation\n * @param segmentGroup The current segment group being matched\n * @param route The `Route` to match against.\n *\n * @see {@link UrlMatchResult}\n * @see {@link Route}\n *\n * @returns The resulting match information or `null` if the `route` should not match.\n * @publicApi\n */\nexport function defaultUrlMatcher(\n    segments: UrlSegment[], segmentGroup: UrlSegmentGroup, route: Route): UrlMatchResult|null {\n  const 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 posParams: {[key: string]: UrlSegment} = {};\n\n  // Check each config part against the actual URL\n  for (let index = 0; index < parts.length; index++) {\n    const part = parts[index];\n    const segment = segments[index];\n    const 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 LLC 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\nimport {ɵisPromise as isPromise} from '@angular/core';\nimport {from, isObservable, Observable, of} from 'rxjs';\n\nexport function shallowEqualArrays(a: any[], b: any[]): boolean {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; ++i) {\n    if (!shallowEqual(a[i], b[i])) return false;\n  }\n  return true;\n}\n\nexport function shallowEqual(\n    a: {[key: string|symbol]: any}, b: {[key: string|symbol]: any}): boolean {\n  // While `undefined` should never be possible, it would sometimes be the case in IE 11\n  // and pre-chromium Edge. The check below accounts for this edge case.\n  const k1 = a ? getDataKeys(a) : undefined;\n  const k2 = b ? getDataKeys(b) : undefined;\n  if (!k1 || !k2 || k1.length != k2.length) {\n    return false;\n  }\n  let key: string|symbol;\n  for (let i = 0; i < k1.length; i++) {\n    key = k1[i];\n    if (!equalArraysOrString(a[key], b[key])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Gets the keys of an object, including `symbol` keys.\n */\nexport function getDataKeys(obj: Object): Array<string|symbol> {\n  return [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)];\n}\n\n/**\n * Test equality for arrays of strings or a string.\n */\nexport function equalArraysOrString(a: string|string[], b: string|string[]) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    const aSorted = [...a].sort();\n    const bSorted = [...b].sort();\n    return aSorted.every((val, index) => bSorted[index] === val);\n  } else {\n    return a === b;\n  }\n}\n\n/**\n * Return the last element of an array.\n */\nexport function last<T>(a: T[]): T|null {\n  return a.length > 0 ? a[a.length - 1] : null;\n}\n\nexport function wrapIntoObservable<T>(value: T|Promise<T>|Observable<T>): Observable<T> {\n  if (isObservable(value)) {\n    return value;\n  }\n\n  if (isPromise(value)) {\n    // Use `Promise.resolve()` to wrap promise-like instances.\n    // Required ie when a Resolver returns a AngularJS `$q` promise to correctly trigger the\n    // change detection.\n    return from(Promise.resolve(value));\n  }\n\n  return of(value);\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Injectable, ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {convertToParamMap, ParamMap, Params, PRIMARY_OUTLET} from './shared';\nimport {equalArraysOrString, shallowEqual} from './utils/collection';\n\n\n/**\n * A set of options which specify how to determine if a `UrlTree` is active, given the `UrlTree`\n * for the current router state.\n *\n * @publicApi\n * @see {@link Router#isActive}\n */\nexport interface IsActiveMatchOptions {\n  /**\n   * Defines the strategy for comparing the matrix parameters of two `UrlTree`s.\n   *\n   * The matrix parameter matching is dependent on the strategy for matching the\n   * segments. That is, if the `paths` option is set to `'subset'`, only\n   * the matrix parameters of the matching segments will be compared.\n   *\n   * - `'exact'`: Requires that matching segments also have exact matrix parameter\n   * matches.\n   * - `'subset'`: The matching segments in the router's active `UrlTree` may contain\n   * extra matrix parameters, but those that exist in the `UrlTree` in question must match.\n   * - `'ignored'`: When comparing `UrlTree`s, matrix params will be ignored.\n   */\n  matrixParams: 'exact'|'subset'|'ignored';\n  /**\n   * Defines the strategy for comparing the query parameters of two `UrlTree`s.\n   *\n   * - `'exact'`: the query parameters must match exactly.\n   * - `'subset'`: the active `UrlTree` may contain extra parameters,\n   * but must match the key and value of any that exist in the `UrlTree` in question.\n   * - `'ignored'`: When comparing `UrlTree`s, query params will be ignored.\n   */\n  queryParams: 'exact'|'subset'|'ignored';\n  /**\n   * Defines the strategy for comparing the `UrlSegment`s of the `UrlTree`s.\n   *\n   * - `'exact'`: all segments in each `UrlTree` must match.\n   * - `'subset'`: a `UrlTree` will be determined to be active if it\n   * is a subtree of the active route. That is, the active route may contain extra\n   * segments, but must at least have all the segments of the `UrlTree` in question.\n   */\n  paths: 'exact'|'subset';\n  /**\n   * - `'exact'`: indicates that the `UrlTree` fragments must be equal.\n   * - `'ignored'`: the fragments will not be compared when determining if a\n   * `UrlTree` is active.\n   */\n  fragment: 'exact'|'ignored';\n}\n\ntype ParamMatchOptions = 'exact'|'subset'|'ignored';\n\ntype PathCompareFn =\n    (container: UrlSegmentGroup, containee: UrlSegmentGroup, matrixParams: ParamMatchOptions) =>\n        boolean;\ntype ParamCompareFn = (container: Params, containee: Params) => boolean;\n\nconst pathCompareMap: Record<IsActiveMatchOptions['paths'], PathCompareFn> = {\n  'exact': equalSegmentGroups,\n  'subset': containsSegmentGroup,\n};\nconst paramCompareMap: Record<ParamMatchOptions, ParamCompareFn> = {\n  'exact': equalParams,\n  'subset': containsParams,\n  'ignored': () => true,\n};\n\nexport function containsTree(\n    container: UrlTree, containee: UrlTree, options: IsActiveMatchOptions): boolean {\n  return pathCompareMap[options.paths](container.root, containee.root, options.matrixParams) &&\n      paramCompareMap[options.queryParams](container.queryParams, containee.queryParams) &&\n      !(options.fragment === 'exact' && container.fragment !== containee.fragment);\n}\n\nfunction equalParams(container: Params, containee: Params): boolean {\n  // TODO: This does not handle array params correctly.\n  return shallowEqual(container, containee);\n}\n\nfunction equalSegmentGroups(\n    container: UrlSegmentGroup, containee: UrlSegmentGroup,\n    matrixParams: ParamMatchOptions): boolean {\n  if (!equalPath(container.segments, containee.segments)) return false;\n  if (!matrixParamsMatch(container.segments, containee.segments, matrixParams)) {\n    return false;\n  }\n  if (container.numberOfChildren !== containee.numberOfChildren) return false;\n  for (const c in containee.children) {\n    if (!container.children[c]) return false;\n    if (!equalSegmentGroups(container.children[c], containee.children[c], matrixParams))\n      return false;\n  }\n  return true;\n}\n\nfunction containsParams(container: Params, containee: Params): boolean {\n  return Object.keys(containee).length <= Object.keys(container).length &&\n      Object.keys(containee).every(key => equalArraysOrString(container[key], containee[key]));\n}\n\nfunction containsSegmentGroup(\n    container: UrlSegmentGroup, containee: UrlSegmentGroup,\n    matrixParams: ParamMatchOptions): boolean {\n  return containsSegmentGroupHelper(container, containee, containee.segments, matrixParams);\n}\n\nfunction containsSegmentGroupHelper(\n    container: UrlSegmentGroup, containee: UrlSegmentGroup, containeePaths: UrlSegment[],\n    matrixParams: ParamMatchOptions): boolean {\n  if (container.segments.length > containeePaths.length) {\n    const current = container.segments.slice(0, containeePaths.length);\n    if (!equalPath(current, containeePaths)) return false;\n    if (containee.hasChildren()) return false;\n    if (!matrixParamsMatch(current, containeePaths, matrixParams)) return false;\n    return true;\n\n  } else if (container.segments.length === containeePaths.length) {\n    if (!equalPath(container.segments, containeePaths)) return false;\n    if (!matrixParamsMatch(container.segments, containeePaths, matrixParams)) return false;\n    for (const c in containee.children) {\n      if (!container.children[c]) return false;\n      if (!containsSegmentGroup(container.children[c], containee.children[c], matrixParams)) {\n        return false;\n      }\n    }\n    return true;\n\n  } else {\n    const current = containeePaths.slice(0, container.segments.length);\n    const next = containeePaths.slice(container.segments.length);\n    if (!equalPath(container.segments, current)) return false;\n    if (!matrixParamsMatch(container.segments, current, matrixParams)) return false;\n    if (!container.children[PRIMARY_OUTLET]) return false;\n    return containsSegmentGroupHelper(\n        container.children[PRIMARY_OUTLET], containee, next, matrixParams);\n  }\n}\n\nfunction matrixParamsMatch(\n    containerPaths: UrlSegment[], containeePaths: UrlSegment[], options: ParamMatchOptions) {\n  return containeePaths.every((containeeSegment, i) => {\n    return paramCompareMap[options](containerPaths[i].parameters, containeeSegment.parameters);\n  });\n}\n\n/**\n * @description\n *\n * Represents the parsed URL.\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 * @usageNotes\n * ### Example\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 * @publicApi\n */\nexport class UrlTree {\n  /** @internal */\n  _queryParamMap?: ParamMap;\n\n  constructor(\n      /** The root segment group of the URL tree */\n      public root: UrlSegmentGroup = new UrlSegmentGroup([], {}),\n      /** The query params of the URL */\n      public queryParams: Params = {},\n      /** The fragment of the URL */\n      public fragment: string|null = null) {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (root.segments.length > 0) {\n        throw new RuntimeError(\n            RuntimeErrorCode.INVALID_ROOT_URL_SEGMENT,\n            'The root `UrlSegmentGroup` should not contain `segments`. ' +\n                'Instead, these segments belong in the `children` so they can be associated with a named outlet.');\n      }\n    }\n  }\n\n  get queryParamMap(): ParamMap {\n    if (!this._queryParamMap) {\n      this._queryParamMap = convertToParamMap(this.queryParams);\n    }\n    return this._queryParamMap;\n  }\n\n  /** @docsNotRequired */\n  toString(): string {\n    return DEFAULT_SERIALIZER.serialize(this);\n  }\n}\n\n/**\n * @description\n *\n * Represents the parsed URL segment group.\n *\n * See `UrlTree` for more information.\n *\n * @publicApi\n */\nexport class UrlSegmentGroup {\n  /** The parent node in the url tree */\n  parent: UrlSegmentGroup|null = null;\n\n  constructor(\n      /** The URL segments of this group. See `UrlSegment` for more information */\n      public segments: UrlSegment[],\n      /** The list of children of this group */\n      public children: {[key: string]: UrlSegmentGroup}) {\n    Object.values(children).forEach((v) => (v.parent = this));\n  }\n\n  /** Whether the segment has child segments */\n  hasChildren(): boolean {\n    return this.numberOfChildren > 0;\n  }\n\n  /** Number of child segments */\n  get numberOfChildren(): number {\n    return Object.keys(this.children).length;\n  }\n\n  /** @docsNotRequired */\n  toString(): string {\n    return serializePaths(this);\n  }\n}\n\n\n/**\n * @description\n *\n * Represents a single URL segment.\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 * @usageNotes\n * ### Example\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 * @publicApi\n */\nexport class UrlSegment {\n  /** @internal */\n  _parameterMap?: ParamMap;\n\n  constructor(\n      /** The path part of a URL segment */\n      public path: string,\n\n      /** The matrix parameters associated with a segment */\n      public parameters: {[name: string]: string}) {}\n\n  get parameterMap(): ParamMap {\n    if (!this._parameterMap) {\n      this._parameterMap = convertToParamMap(this.parameters);\n    }\n    return this._parameterMap;\n  }\n\n  /** @docsNotRequired */\n  toString(): string {\n    return serializePath(this);\n  }\n}\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\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\nexport function mapChildrenIntoArray<T>(\n    segment: UrlSegmentGroup, fn: (v: UrlSegmentGroup, k: string) => T[]): T[] {\n  let res: T[] = [];\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet === PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  Object.entries(segment.children).forEach(([childOutlet, child]) => {\n    if (childOutlet !== PRIMARY_OUTLET) {\n      res = res.concat(fn(child, childOutlet));\n    }\n  });\n  return res;\n}\n\n\n/**\n * @description\n *\n * Serializes and deserializes a URL string into a URL tree.\n *\n * The url serialization strategy is customizable. You can\n * make all URLs case insensitive by providing a custom UrlSerializer.\n *\n * See `DefaultUrlSerializer` for an example of a URL serializer.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useFactory: () => new DefaultUrlSerializer()})\nexport abstract class UrlSerializer {\n  /** Parse a url into a `UrlTree` */\n  abstract parse(url: string): UrlTree;\n\n  /** Converts a `UrlTree` into a url */\n  abstract serialize(tree: UrlTree): string;\n}\n\n/**\n * @description\n *\n * A default implementation of the `UrlSerializer`.\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 * @publicApi\n */\nexport class DefaultUrlSerializer implements UrlSerializer {\n  /** Parses a url into a `UrlTree` */\n  parse(url: string): UrlTree {\n    const p = new UrlParser(url);\n    return new UrlTree(p.parseRootSegment(), p.parseQueryParams(), p.parseFragment());\n  }\n\n  /** Converts a `UrlTree` into a url */\n  serialize(tree: UrlTree): string {\n    const segment = `/${serializeSegment(tree.root, true)}`;\n    const query = serializeQueryParams(tree.queryParams);\n    const fragment =\n        typeof tree.fragment === `string` ? `#${encodeUriFragment(tree.fragment)}` : '';\n\n    return `${segment}${query}${fragment}`;\n  }\n}\n\nconst DEFAULT_SERIALIZER = new DefaultUrlSerializer();\n\nexport function serializePaths(segment: UrlSegmentGroup): string {\n  return segment.segments.map(p => serializePath(p)).join('/');\n}\n\nfunction serializeSegment(segment: UrlSegmentGroup, root: boolean): string {\n  if (!segment.hasChildren()) {\n    return serializePaths(segment);\n  }\n\n  if (root) {\n    const primary = segment.children[PRIMARY_OUTLET] ?\n        serializeSegment(segment.children[PRIMARY_OUTLET], false) :\n        '';\n    const children: string[] = [];\n\n    Object.entries(segment.children).forEach(([k, v]) => {\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 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    // use no parenthesis if the only child is a primary outlet route\n    if (Object.keys(segment.children).length === 1 && segment.children[PRIMARY_OUTLET] != null) {\n      return `${serializePaths(segment)}/${children[0]}`;\n    }\n\n    return `${serializePaths(segment)}/(${children.join('//')})`;\n  }\n}\n\n/**\n * Encodes a URI string with the default encoding. This function will only ever be called from\n * `encodeUriQuery` or `encodeUriSegment` as it's the base set of encodings to be used. We need\n * a custom encoding because encodeURIComponent is too aggressive and encodes stuff that doesn't\n * have to be encoded per https://url.spec.whatwg.org.\n */\nfunction encodeUriString(s: string): string {\n  return encodeURIComponent(s)\n      .replace(/%40/g, '@')\n      .replace(/%3A/gi, ':')\n      .replace(/%24/g, '$')\n      .replace(/%2C/gi, ',');\n}\n\n/**\n * This function should be used to encode both keys and values in a query string key/value. In\n * the following URL, you need to call encodeUriQuery on \"k\" and \"v\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriQuery(s: string): string {\n  return encodeUriString(s).replace(/%3B/gi, ';');\n}\n\n/**\n * This function should be used to encode a URL fragment. In the following URL, you need to call\n * encodeUriFragment on \"f\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriFragment(s: string): string {\n  return encodeURI(s);\n}\n\n/**\n * This function should be run on any URI segment as well as the key and value in a key/value\n * pair for matrix params. In the following URL, you need to call encodeUriSegment on \"html\",\n * \"mk\", and \"mv\":\n *\n * http://www.site.org/html;mk=mv?k=v#f\n */\nexport function encodeUriSegment(s: string): string {\n  return encodeUriString(s).replace(/\\(/g, '%28').replace(/\\)/g, '%29').replace(/%26/gi, '&');\n}\n\nexport function decode(s: string): string {\n  return decodeURIComponent(s);\n}\n\n// Query keys/values should have the \"+\" replaced first, as \"+\" in a query string is \" \".\n// decodeURIComponent function will not decode \"+\" as a space.\nexport function decodeQuery(s: string): string {\n  return decode(s.replace(/\\+/g, '%20'));\n}\n\nexport function serializePath(path: UrlSegment): string {\n  return `${encodeUriSegment(path.path)}${serializeMatrixParams(path.parameters)}`;\n}\n\nfunction serializeMatrixParams(params: {[key: string]: string}): string {\n  return Object.keys(params)\n      .map(key => `;${encodeUriSegment(key)}=${encodeUriSegment(params[key])}`)\n      .join('');\n}\n\nfunction serializeQueryParams(params: {[key: string]: any}): string {\n  const strParams: string[] =\n      Object.keys(params)\n          .map((name) => {\n            const value = params[name];\n            return Array.isArray(value) ?\n                value.map(v => `${encodeUriQuery(name)}=${encodeUriQuery(v)}`).join('&') :\n                `${encodeUriQuery(name)}=${encodeUriQuery(value)}`;\n          })\n          .filter(s => !!s);\n\n  return strParams.length ? `?${strParams.join('&')}` : '';\n}\n\nconst SEGMENT_RE = /^[^\\/()?;#]+/;\nfunction matchSegments(str: string): string {\n  const match = str.match(SEGMENT_RE);\n  return match ? match[0] : '';\n}\n\nconst MATRIX_PARAM_SEGMENT_RE = /^[^\\/()?;=#]+/;\nfunction matchMatrixKeySegments(str: string): string {\n  const match = str.match(MATRIX_PARAM_SEGMENT_RE);\n  return match ? match[0] : '';\n}\n\nconst QUERY_PARAM_RE = /^[^=?&#]+/;\n// Return the name of the query param at the start of the string or an empty string\nfunction matchQueryParams(str: string): string {\n  const match = str.match(QUERY_PARAM_RE);\n  return match ? match[0] : '';\n}\n\nconst QUERY_PARAM_VALUE_RE = /^[^&#]+/;\n// Return the value of the query param at the start of the string or an empty string\nfunction matchUrlQueryParamValue(str: string): string {\n  const match = str.match(QUERY_PARAM_VALUE_RE);\n  return match ? match[0] : '';\n}\n\nclass UrlParser {\n  private remaining: string;\n\n  constructor(private url: string) {\n    this.remaining = url;\n  }\n\n  parseRootSegment(): 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  parseQueryParams(): Params {\n    const params: Params = {};\n    if (this.consumeOptional('?')) {\n      do {\n        this.parseQueryParam(params);\n      } while (this.consumeOptional('&'));\n    }\n    return params;\n  }\n\n  parseFragment(): string|null {\n    return this.consumeOptional('#') ? decodeURIComponent(this.remaining) : null;\n  }\n\n  private parseChildren(): {[outlet: string]: UrlSegmentGroup} {\n    if (this.remaining === '') {\n      return {};\n    }\n\n    this.consumeOptional('/');\n\n    const 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 children: {[outlet: string]: UrlSegmentGroup} = {};\n    if (this.peekStartsWith('/(')) {\n      this.capture('/');\n      children = this.parseParens(true);\n    }\n\n    let 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  // parse a segment with its matrix parameters\n  // ie `name;k1=v1;k2`\n  private parseSegment(): UrlSegment {\n    const path = matchSegments(this.remaining);\n    if (path === '' && this.peekStartsWith(';')) {\n      throw new RuntimeError(\n          RuntimeErrorCode.EMPTY_PATH_WITH_PARAMS,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              `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  private parseMatrixParams(): {[key: string]: string} {\n    const params: {[key: string]: string} = {};\n    while (this.consumeOptional(';')) {\n      this.parseParam(params);\n    }\n    return params;\n  }\n\n  private parseParam(params: {[key: string]: string}): void {\n    const key = matchMatrixKeySegments(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value: any = '';\n    if (this.consumeOptional('=')) {\n      const 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  // Parse a single query parameter `name[=value]`\n  private parseQueryParam(params: Params): void {\n    const key = matchQueryParams(this.remaining);\n    if (!key) {\n      return;\n    }\n    this.capture(key);\n    let value: any = '';\n    if (this.consumeOptional('=')) {\n      const valueMatch = matchUrlQueryParamValue(this.remaining);\n      if (valueMatch) {\n        value = valueMatch;\n        this.capture(value);\n      }\n    }\n\n    const decodedKey = decodeQuery(key);\n    const decodedVal = decodeQuery(value);\n\n    if (params.hasOwnProperty(decodedKey)) {\n      // Append to existing values\n      let 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  // parse `(a/b//outlet_name:c/d)`\n  private parseParens(allowPrimary: boolean): {[outlet: string]: UrlSegmentGroup} {\n    const segments: {[key: string]: UrlSegmentGroup} = {};\n    this.capture('(');\n\n    while (!this.consumeOptional(')') && this.remaining.length > 0) {\n      const path = matchSegments(this.remaining);\n\n      const 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 RuntimeError(\n            RuntimeErrorCode.UNPARSABLE_URL,\n            (typeof ngDevMode === 'undefined' || ngDevMode) && `Cannot parse url '${this.url}'`);\n      }\n\n      let outletName: string = undefined!;\n      if (path.indexOf(':') > -1) {\n        outletName = path.slice(0, path.indexOf(':'));\n        this.capture(outletName);\n        this.capture(':');\n      } else if (allowPrimary) {\n        outletName = PRIMARY_OUTLET;\n      }\n\n      const 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  private peekStartsWith(str: string): boolean {\n    return this.remaining.startsWith(str);\n  }\n\n  // Consumes the prefix when it is present and returns whether it has been consumed\n  private 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  private capture(str: string): void {\n    if (!this.consumeOptional(str)) {\n      throw new RuntimeError(\n          RuntimeErrorCode.UNEXPECTED_VALUE_IN_URL,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && `Expected \"${str}\".`);\n    }\n  }\n}\n\nexport function createRoot(rootCandidate: UrlSegmentGroup) {\n  return rootCandidate.segments.length > 0 ?\n      new UrlSegmentGroup([], {[PRIMARY_OUTLET]: rootCandidate}) :\n      rootCandidate;\n}\n\n/**\n * Recursively\n * - merges primary segment children into their parents\n * - drops empty children (those which have no segments and no children themselves). This latter\n * prevents serializing a group into something like `/a(aux:)`, where `aux` is an empty child\n * segment.\n * - merges named outlets without a primary segment sibling into the children. This prevents\n * serializing a URL like `//(a:a)(b:b) instead of `/(a:a//b:b)` when the aux b route lives on the\n * root but the `a` route lives under an empty path primary route.\n */\nexport function squashSegmentGroup(segmentGroup: UrlSegmentGroup): UrlSegmentGroup {\n  const newChildren: Record<string, UrlSegmentGroup> = {};\n  for (const childOutlet of Object.keys(segmentGroup.children)) {\n    const child = segmentGroup.children[childOutlet];\n    const childCandidate = squashSegmentGroup(child);\n    // moves named children in an empty path primary child into this group\n    if (childOutlet === PRIMARY_OUTLET && childCandidate.segments.length === 0 &&\n        childCandidate.hasChildren()) {\n      for (const [grandChildOutlet, grandChild] of Object.entries(childCandidate.children)) {\n        newChildren[grandChildOutlet] = grandChild;\n      }\n    }  // don't add empty children\n    else if (childCandidate.segments.length > 0 || childCandidate.hasChildren()) {\n      newChildren[childOutlet] = childCandidate;\n    }\n  }\n  const s = new UrlSegmentGroup(segmentGroup.segments, newChildren);\n  return mergeTrivialChildren(s);\n}\n\n/**\n * When possible, merges the primary outlet child into the parent `UrlSegmentGroup`.\n *\n * When a segment group has only one child which is a primary outlet, merges that child into the\n * parent. That is, the child segment group's segments are merged into the `s` and the child's\n * children become the children of `s`. Think of this like a 'squash', merging the child segment\n * group into the parent.\n */\nfunction mergeTrivialChildren(s: UrlSegmentGroup): UrlSegmentGroup {\n  if (s.numberOfChildren === 1 && s.children[PRIMARY_OUTLET]) {\n    const c = s.children[PRIMARY_OUTLET];\n    return new UrlSegmentGroup(s.segments.concat(c.segments), c.children);\n  }\n\n  return s;\n}\n\nexport function isUrlTree(v: any): v is UrlTree {\n  return v instanceof UrlTree;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {RuntimeErrorCode} from './errors';\nimport {ActivatedRouteSnapshot} from './router_state';\nimport {Params, PRIMARY_OUTLET} from './shared';\nimport {createRoot, squashSegmentGroup, UrlSegment, UrlSegmentGroup, UrlTree} from './url_tree';\nimport {last, shallowEqual} from './utils/collection';\n\n\n/**\n * Creates a `UrlTree` relative to an `ActivatedRouteSnapshot`.\n *\n * @publicApi\n *\n *\n * @param relativeTo The `ActivatedRouteSnapshot` to apply the commands to\n * @param commands An array of URL fragments with which to construct the new URL tree.\n * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n * segments, followed by the parameters for each segment.\n * The fragments are applied to the one provided in the `relativeTo` parameter.\n * @param queryParams The query parameters for the `UrlTree`. `null` if the `UrlTree` does not have\n *     any query parameters.\n * @param fragment The fragment for the `UrlTree`. `null` if the `UrlTree` does not have a fragment.\n *\n * @usageNotes\n *\n * ```\n * // create /team/33/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, 'user', 11]);\n *\n * // create /team/33;expand=true/user/11\n * createUrlTreeFromSnapshot(snapshot, ['/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 * createUrlTreeFromSnapshot(snapshot, ['/team/33/user', userId]);\n *\n * // If the first segment can contain slashes, and you do not want the router to split it,\n * // you can do the following:\n * createUrlTreeFromSnapshot(snapshot, [{segmentPath: '/one/two'}]);\n *\n * // create /team/33/(user/11//right:chat)\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right:\n * 'chat'}}], null, null);\n *\n * // remove the right secondary node\n * createUrlTreeFromSnapshot(snapshot, ['/team', 33, {outlets: {primary: 'user/11', right: null}}]);\n *\n * // For the examples below, assume the current URL is for the `/team/33/user/11` and the\n * `ActivatedRouteSnapshot` points to `user/11`:\n *\n * // navigate to /team/33/user/11/details\n * createUrlTreeFromSnapshot(snapshot, ['details']);\n *\n * // navigate to /team/33/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../22']);\n *\n * // navigate to /team/44/user/22\n * createUrlTreeFromSnapshot(snapshot, ['../../team/44/user/22']);\n * ```\n */\nexport function createUrlTreeFromSnapshot(\n    relativeTo: ActivatedRouteSnapshot, commands: any[], queryParams: Params|null = null,\n    fragment: string|null = null): UrlTree {\n  const relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeTo);\n  return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, queryParams, fragment);\n}\n\nexport function createSegmentGroupFromRoute(route: ActivatedRouteSnapshot): UrlSegmentGroup {\n  let targetGroup: UrlSegmentGroup|undefined;\n\n  function createSegmentGroupFromRouteRecursive(currentRoute: ActivatedRouteSnapshot):\n      UrlSegmentGroup {\n    const childOutlets: {[outlet: string]: UrlSegmentGroup} = {};\n    for (const childSnapshot of currentRoute.children) {\n      const root = createSegmentGroupFromRouteRecursive(childSnapshot);\n      childOutlets[childSnapshot.outlet] = root;\n    }\n    const segmentGroup = new UrlSegmentGroup(currentRoute.url, childOutlets);\n    if (currentRoute === route) {\n      targetGroup = segmentGroup;\n    }\n    return segmentGroup;\n  }\n  const rootCandidate = createSegmentGroupFromRouteRecursive(route.root);\n  const rootSegmentGroup = createRoot(rootCandidate);\n\n  return targetGroup ?? rootSegmentGroup;\n}\n\nexport function createUrlTreeFromSegmentGroup(\n    relativeTo: UrlSegmentGroup, commands: any[], queryParams: Params|null,\n    fragment: string|null): UrlTree {\n  let root = relativeTo;\n  while (root.parent) {\n    root = root.parent;\n  }\n  // There are no commands so the `UrlTree` goes to the same path as the one created from the\n  // `UrlSegmentGroup`. All we need to do is update the `queryParams` and `fragment` without\n  // applying any other logic.\n  if (commands.length === 0) {\n    return tree(root, root, root, queryParams, fragment);\n  }\n\n  const nav = computeNavigation(commands);\n\n  if (nav.toRoot()) {\n    return tree(root, root, new UrlSegmentGroup([], {}), queryParams, fragment);\n  }\n\n  const position = findStartingPositionForTargetGroup(nav, root, relativeTo);\n  const newSegmentGroup = position.processChildren ?\n      updateSegmentGroupChildren(position.segmentGroup, position.index, nav.commands) :\n      updateSegmentGroup(position.segmentGroup, position.index, nav.commands);\n  return tree(root, position.segmentGroup, newSegmentGroup, queryParams, fragment);\n}\n\nfunction isMatrixParams(command: any): boolean {\n  return typeof command === 'object' && command != null && !command.outlets && !command.segmentPath;\n}\n\n/**\n * Determines if a given command has an `outlets` map. When we encounter a command\n * with an outlets k/v map, we need to apply each outlet individually to the existing segment.\n */\nfunction isCommandWithOutlets(command: any): command is {outlets: {[key: string]: any}} {\n  return typeof command === 'object' && command != null && command.outlets;\n}\n\nfunction tree(\n    oldRoot: UrlSegmentGroup, oldSegmentGroup: UrlSegmentGroup, newSegmentGroup: UrlSegmentGroup,\n    queryParams: Params|null, fragment: string|null): UrlTree {\n  let qp: any = {};\n  if (queryParams) {\n    Object.entries(queryParams).forEach(([name, value]) => {\n      qp[name] = Array.isArray(value) ? value.map((v: any) => `${v}`) : `${value}`;\n    });\n  }\n\n  let rootCandidate: UrlSegmentGroup;\n  if (oldRoot === oldSegmentGroup) {\n    rootCandidate = newSegmentGroup;\n  } else {\n    rootCandidate = replaceSegment(oldRoot, oldSegmentGroup, newSegmentGroup);\n  }\n\n  const newRoot = createRoot(squashSegmentGroup(rootCandidate));\n  return new UrlTree(newRoot, qp, fragment);\n}\n\n/**\n * Replaces the `oldSegment` which is located in some child of the `current` with the `newSegment`.\n * This also has the effect of creating new `UrlSegmentGroup` copies to update references. This\n * shouldn't be necessary but the fallback logic for an invalid ActivatedRoute in the creation uses\n * the Router's current url tree. If we don't create new segment groups, we end up modifying that\n * value.\n */\nfunction replaceSegment(\n    current: UrlSegmentGroup, oldSegment: UrlSegmentGroup,\n    newSegment: UrlSegmentGroup): UrlSegmentGroup {\n  const children: {[key: string]: UrlSegmentGroup} = {};\n  Object.entries(current.children).forEach(([outletName, c]) => {\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}\n\nclass Navigation {\n  constructor(\n      public isAbsolute: boolean, public numberOfDoubleDots: number, public commands: any[]) {\n    if (isAbsolute && commands.length > 0 && isMatrixParams(commands[0])) {\n      throw new RuntimeError(\n          RuntimeErrorCode.ROOT_SEGMENT_MATRIX_PARAMS,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              'Root segment cannot have matrix parameters');\n    }\n\n    const cmdWithOutlet = commands.find(isCommandWithOutlets);\n    if (cmdWithOutlet && cmdWithOutlet !== last(commands)) {\n      throw new RuntimeError(\n          RuntimeErrorCode.MISPLACED_OUTLETS_COMMAND,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              '{outlets:{}} has to be the last command');\n    }\n  }\n\n  public toRoot(): boolean {\n    return this.isAbsolute && this.commands.length === 1 && this.commands[0] == '/';\n  }\n}\n\n/** Transforms commands to a normalized `Navigation` */\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 numberOfDoubleDots = 0;\n  let isAbsolute = false;\n\n  const res: any[] = commands.reduce((res, cmd, cmdIdx) => {\n    if (typeof cmd === 'object' && cmd != null) {\n      if (cmd.outlets) {\n        const outlets: {[k: string]: any} = {};\n        Object.entries(cmd.outlets).forEach(([name, commands]) => {\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}\n\nclass Position {\n  constructor(\n      public segmentGroup: UrlSegmentGroup, public processChildren: boolean, public index: number) {\n  }\n}\n\nfunction findStartingPositionForTargetGroup(\n    nav: Navigation, root: UrlSegmentGroup, target: UrlSegmentGroup): Position {\n  if (nav.isAbsolute) {\n    return new Position(root, true, 0);\n  }\n\n  if (!target) {\n    // `NaN` is used only to maintain backwards compatibility with incorrectly mocked\n    // `ActivatedRouteSnapshot` in tests. In prior versions of this code, the position here was\n    // determined based on an internal property that was rarely mocked, resulting in `NaN`. In\n    // reality, this code path should _never_ be touched since `target` is not allowed to be falsey.\n    return new Position(root, false, NaN);\n  }\n  if (target.parent === null) {\n    return new Position(target, true, 0);\n  }\n\n  const modifier = isMatrixParams(nav.commands[0]) ? 0 : 1;\n  const index = target.segments.length - 1 + modifier;\n  return createPositionApplyingDoubleDots(target, index, nav.numberOfDoubleDots);\n}\n\nfunction createPositionApplyingDoubleDots(\n    group: UrlSegmentGroup, index: number, numberOfDoubleDots: number): Position {\n  let g = group;\n  let ci = index;\n  let dd = numberOfDoubleDots;\n  while (dd > ci) {\n    dd -= ci;\n    g = g.parent!;\n    if (!g) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_DOUBLE_DOTS,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && 'Invalid number of \\'../\\'');\n    }\n    ci = g.segments.length;\n  }\n  return new Position(g, false, ci - dd);\n}\n\nfunction getOutlets(commands: unknown[]): {[k: string]: unknown[]|string} {\n  if (isCommandWithOutlets(commands[0])) {\n    return commands[0].outlets;\n  }\n\n  return {[PRIMARY_OUTLET]: commands};\n}\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 m = prefixedWith(segmentGroup, startIndex, commands);\n  const slicedCommands = commands.slice(m.commandIndex);\n  if (m.match && m.pathIndex < segmentGroup.segments.length) {\n    const 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\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 outlets = getOutlets(commands);\n    const children: {[key: string]: UrlSegmentGroup} = {};\n    // If the set of commands applies to anything other than the primary outlet and the child\n    // segment is an empty path primary segment on its own, we want to apply the commands to the\n    // empty child path rather than here. The outcome is that the empty primary child is effectively\n    // removed from the final output UrlTree. Imagine the following config:\n    //\n    // {path: '', children: [{path: '**', outlet: 'popup'}]}.\n    //\n    // Navigation to /(popup:a) will activate the child outlet correctly Given a follow-up\n    // navigation with commands\n    // ['/', {outlets: {'popup': 'b'}}], we _would not_ want to apply the outlet commands to the\n    // root segment because that would result in\n    // //(popup:a)(popup:b) since the outlet command got applied one level above where it appears in\n    // the `ActivatedRoute` rather than updating the existing one.\n    //\n    // Because empty paths do not appear in the URL segments and the fact that the segments used in\n    // the output `UrlTree` are squashed to eliminate these empty paths where possible\n    // https://github.com/angular/angular/blob/13f10de40e25c6900ca55bd83b36bd533dacfa9e/packages/router/src/url_tree.ts#L755\n    // it can be hard to determine what is the right thing to do when applying commands to a\n    // `UrlSegmentGroup` that is created from an \"unsquashed\"/expanded `ActivatedRoute` tree.\n    // This code effectively \"squashes\" empty path primary routes when they have no siblings on\n    // the same level of the tree.\n    if (Object.keys(outlets).some(o => o !== PRIMARY_OUTLET) &&\n        segmentGroup.children[PRIMARY_OUTLET] && segmentGroup.numberOfChildren === 1 &&\n        segmentGroup.children[PRIMARY_OUTLET].segments.length === 0) {\n      const childrenOfEmptyChild =\n          updateSegmentGroupChildren(segmentGroup.children[PRIMARY_OUTLET], startIndex, commands);\n      return new UrlSegmentGroup(segmentGroup.segments, childrenOfEmptyChild.children);\n    }\n\n    Object.entries(outlets).forEach(([outlet, commands]) => {\n      if (typeof commands === 'string') {\n        commands = [commands];\n      }\n      if (commands !== null) {\n        children[outlet] = updateSegmentGroup(segmentGroup.children[outlet], startIndex, commands);\n      }\n    });\n\n    Object.entries(segmentGroup.children).forEach(([childOutlet, child]) => {\n      if (outlets[childOutlet] === undefined) {\n        children[childOutlet] = child;\n      }\n    });\n    return new UrlSegmentGroup(segmentGroup.segments, children);\n  }\n}\n\nfunction prefixedWith(segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]) {\n  let currentCommandIndex = 0;\n  let currentPathIndex = startIndex;\n\n  const noMatch = {match: false, pathIndex: 0, commandIndex: 0};\n  while (currentPathIndex < segmentGroup.segments.length) {\n    if (currentCommandIndex >= commands.length) return noMatch;\n    const path = segmentGroup.segments[currentPathIndex];\n    const command = commands[currentCommandIndex];\n    // Do not try to consume command as part of the prefixing if it has outlets because it can\n    // contain outlets other than the one being processed. Consuming the outlets command would\n    // result in other outlets being ignored.\n    if (isCommandWithOutlets(command)) {\n      break;\n    }\n    const curr = `${command}`;\n    const 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\nfunction createNewSegmentGroup(\n    segmentGroup: UrlSegmentGroup, startIndex: number, commands: any[]): UrlSegmentGroup {\n  const paths = segmentGroup.segments.slice(0, startIndex);\n\n  let i = 0;\n  while (i < commands.length) {\n    const command = commands[i];\n    if (isCommandWithOutlets(command)) {\n      const children = createNewSegmentChildren(command.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 p = segmentGroup.segments[startIndex];\n      paths.push(new UrlSegment(p.path, stringify(commands[0])));\n      i++;\n      continue;\n    }\n\n    const curr = isCommandWithOutlets(command) ? command.outlets[PRIMARY_OUTLET] : `${command}`;\n    const 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\nfunction createNewSegmentChildren(outlets: {[name: string]: unknown[]|string}):\n    {[outlet: string]: UrlSegmentGroup} {\n  const children: {[outlet: string]: UrlSegmentGroup} = {};\n  Object.entries(outlets).forEach(([outlet, commands]) => {\n    if (typeof commands === 'string') {\n      commands = [commands];\n    }\n    if (commands !== null) {\n      children[outlet] = createNewSegmentGroup(new UrlSegmentGroup([], {}), 0, commands);\n    }\n  });\n  return children;\n}\n\nfunction stringify(params: {[key: string]: any}): {[key: string]: string} {\n  const res: {[key: string]: string} = {};\n  Object.entries(params).forEach(([k, v]) => res[k] = `${v}`);\n  return res;\n}\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 LLC 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\nimport {Route} from './models';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';\nimport {UrlTree} from './url_tree';\n\n/**\n * Identifies the call or event that triggered a navigation.\n *\n * * 'imperative': Triggered by `router.navigateByUrl()` or `router.navigate()`.\n * * 'popstate' : Triggered by a `popstate` event.\n * * 'hashchange'-: Triggered by a `hashchange` event.\n *\n * @publicApi\n */\nexport type NavigationTrigger = 'imperative'|'popstate'|'hashchange';\nexport const IMPERATIVE_NAVIGATION = 'imperative';\n\n/**\n * Identifies the type of a router event.\n *\n * @publicApi\n */\nexport const enum EventType {\n  NavigationStart,\n  NavigationEnd,\n  NavigationCancel,\n  NavigationError,\n  RoutesRecognized,\n  ResolveStart,\n  ResolveEnd,\n  GuardsCheckStart,\n  GuardsCheckEnd,\n  RouteConfigLoadStart,\n  RouteConfigLoadEnd,\n  ChildActivationStart,\n  ChildActivationEnd,\n  ActivationStart,\n  ActivationEnd,\n  Scroll,\n  NavigationSkipped,\n}\n\n/**\n * Base for events the router goes through, as opposed to events tied to a specific\n * route. Fired one time for any given navigation.\n *\n * The following code shows how a class subscribes to router events.\n *\n * ```ts\n * import {Event, RouterEvent, Router} from '@angular/router';\n *\n * class MyService {\n *   constructor(public router: Router) {\n *     router.events.pipe(\n *        filter((e: Event | RouterEvent): e is RouterEvent => e instanceof RouterEvent)\n *     ).subscribe((e: RouterEvent) => {\n *       // Do something\n *     });\n *   }\n * }\n * ```\n *\n * @see {@link Event}\n * @see [Router events summary](guide/router-reference#router-events)\n * @publicApi\n */\nexport class RouterEvent {\n  constructor(\n      /** A unique ID that the router assigns to every router navigation. */\n      public id: number,\n      /** The URL that is the destination for this navigation. */\n      public url: string) {}\n}\n\n/**\n * An event triggered when a navigation starts.\n *\n * @publicApi\n */\nexport class NavigationStart extends RouterEvent {\n  readonly type = EventType.NavigationStart;\n\n  /**\n   * Identifies the call or event that triggered the navigation.\n   * An `imperative` trigger is a call to `router.navigateByUrl()` or `router.navigate()`.\n   *\n   * @see {@link NavigationEnd}\n   * @see {@link NavigationCancel}\n   * @see {@link NavigationError}\n   */\n  navigationTrigger?: NavigationTrigger;\n\n  /**\n   * The navigation state that was previously supplied to the `pushState` call,\n   * when the navigation is triggered by a `popstate` event. Otherwise null.\n   *\n   * The state object is defined by `NavigationExtras`, and contains any\n   * developer-defined state value, as well as a unique ID that\n   * the router assigns to every router transition/navigation.\n   *\n   * From the perspective of the router, the router never \"goes back\".\n   * When the user clicks on the back button in the browser,\n   * a new navigation ID is created.\n   *\n   * Use the ID in this previous-state object to differentiate between a newly created\n   * state and one returned to by a `popstate` event, so that you can restore some\n   * remembered state, such as scroll position.\n   *\n   */\n  restoredState?: {[k: string]: any, navigationId: number}|null;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      navigationTrigger: NavigationTrigger = 'imperative',\n      /** @docsNotRequired */\n      restoredState: {[k: string]: any, navigationId: number}|null = null) {\n    super(id, url);\n    this.navigationTrigger = navigationTrigger;\n    this.restoredState = restoredState;\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationStart(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n\n/**\n * An event triggered when a navigation ends successfully.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationCancel}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nexport class NavigationEnd extends RouterEvent {\n  readonly type = EventType.NavigationEnd;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public urlAfterRedirects: string) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n        this.urlAfterRedirects}')`;\n  }\n}\n\n/**\n * A code for the `NavigationCancel` event of the `Router` to indicate the\n * reason a navigation failed.\n *\n * @publicApi\n */\nexport const enum NavigationCancellationCode {\n  /**\n   * A navigation failed because a guard returned a `UrlTree` to redirect.\n   */\n  Redirect,\n  /**\n   * A navigation failed because a more recent navigation started.\n   */\n  SupersededByNewNavigation,\n  /**\n   * A navigation failed because one of the resolvers completed without emitting a value.\n   */\n  NoDataFromResolver,\n  /**\n   * A navigation failed because a guard returned `false`.\n   */\n  GuardRejected,\n}\n\n/**\n * A code for the `NavigationSkipped` event of the `Router` to indicate the\n * reason a navigation was skipped.\n *\n * @publicApi\n */\nexport const enum NavigationSkippedCode {\n  /**\n   * A navigation was skipped because the navigation URL was the same as the current Router URL.\n   */\n  IgnoredSameUrlNavigation,\n  /**\n   * A navigation was skipped because the configured `UrlHandlingStrategy` return `false` for both\n   * the current Router URL and the target of the navigation.\n   *\n   * @see {@link UrlHandlingStrategy}\n   */\n  IgnoredByUrlHandlingStrategy,\n}\n\n/**\n * An event triggered when a navigation is canceled, directly or indirectly.\n * This can happen for several reasons including when a route guard\n * returns `false` or initiates a redirect by returning a `UrlTree`.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationError}\n *\n * @publicApi\n */\nexport class NavigationCancel extends RouterEvent {\n  readonly type = EventType.NavigationCancel;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /**\n       * A description of why the navigation was cancelled. For debug purposes only. Use `code`\n       * instead for a stable cancellation reason that can be used in production.\n       */\n      public reason: string,\n      /**\n       * A code to indicate why the navigation was canceled. This cancellation code is stable for\n       * the reason and can be relied on whereas the `reason` string could change and should not be\n       * used in production.\n       */\n      readonly code?: NavigationCancellationCode) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationCancel(id: ${this.id}, url: '${this.url}')`;\n  }\n}\n\n/**\n * An event triggered when a navigation is skipped.\n * This can happen for a couple reasons including onSameUrlHandling\n * is set to `ignore` and the navigation URL is not different than the\n * current state.\n *\n * @publicApi\n */\nexport class NavigationSkipped extends RouterEvent {\n  readonly type = EventType.NavigationSkipped;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /**\n       * A description of why the navigation was skipped. For debug purposes only. Use `code`\n       * instead for a stable skipped reason that can be used in production.\n       */\n      public reason: string,\n      /**\n       * A code to indicate why the navigation was skipped. This code is stable for\n       * the reason and can be relied on whereas the `reason` string could change and should not be\n       * used in production.\n       */\n      readonly code?: NavigationSkippedCode) {\n    super(id, url);\n  }\n}\n\n/**\n * An event triggered when a navigation fails due to an unexpected error.\n *\n * @see {@link NavigationStart}\n * @see {@link NavigationEnd}\n * @see {@link NavigationCancel}\n *\n * @publicApi\n */\nexport class NavigationError extends RouterEvent {\n  readonly type = EventType.NavigationError;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public error: any,\n      /**\n       * The target of the navigation when the error occurred.\n       *\n       * Note that this can be `undefined` because an error could have occurred before the\n       * `RouterStateSnapshot` was created for the navigation.\n       */\n      readonly target?: RouterStateSnapshot) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`;\n  }\n}\n\n/**\n * An event triggered when routes are recognized.\n *\n * @publicApi\n */\nexport class RoutesRecognized extends RouterEvent {\n  readonly type = EventType.RoutesRecognized;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public urlAfterRedirects: string,\n      /** @docsNotRequired */\n      public state: RouterStateSnapshot) {\n    super(id, url);\n  }\n\n  /** @docsNotRequired */\n  override toString(): string {\n    return `RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n        this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered at the start of the Guard phase of routing.\n *\n * @see {@link GuardsCheckEnd}\n *\n * @publicApi\n */\nexport class GuardsCheckStart extends RouterEvent {\n  readonly type = EventType.GuardsCheckStart;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public urlAfterRedirects: string,\n      /** @docsNotRequired */\n      public state: RouterStateSnapshot) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n        this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered at the end of the Guard phase of routing.\n *\n * @see {@link GuardsCheckStart}\n *\n * @publicApi\n */\nexport class GuardsCheckEnd extends RouterEvent {\n  readonly type = EventType.GuardsCheckEnd;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public urlAfterRedirects: string,\n      /** @docsNotRequired */\n      public state: RouterStateSnapshot,\n      /** @docsNotRequired */\n      public shouldActivate: boolean) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n        this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`;\n  }\n}\n\n/**\n * An event triggered at the start of the Resolve phase of routing.\n *\n * Runs in the \"resolve\" phase whether or not there is anything to resolve.\n * In future, may change to only run when there are things to be resolved.\n *\n * @see {@link ResolveEnd}\n *\n * @publicApi\n */\nexport class ResolveStart extends RouterEvent {\n  readonly type = EventType.ResolveStart;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public urlAfterRedirects: string,\n      /** @docsNotRequired */\n      public state: RouterStateSnapshot) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n        this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered at the end of the Resolve phase of routing.\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ResolveEnd extends RouterEvent {\n  readonly type = EventType.ResolveEnd;\n\n  constructor(\n      /** @docsNotRequired */\n      id: number,\n      /** @docsNotRequired */\n      url: string,\n      /** @docsNotRequired */\n      public urlAfterRedirects: string,\n      /** @docsNotRequired */\n      public state: RouterStateSnapshot) {\n    super(id, url);\n  }\n\n  override toString(): string {\n    return `ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${\n        this.urlAfterRedirects}', state: ${this.state})`;\n  }\n}\n\n/**\n * An event triggered before lazy loading a route configuration.\n *\n * @see {@link RouteConfigLoadEnd}\n *\n * @publicApi\n */\nexport class RouteConfigLoadStart {\n  readonly type = EventType.RouteConfigLoadStart;\n\n  constructor(\n      /** @docsNotRequired */\n      public route: Route) {}\n  toString(): string {\n    return `RouteConfigLoadStart(path: ${this.route.path})`;\n  }\n}\n\n/**\n * An event triggered when a route has been lazy loaded.\n *\n * @see {@link RouteConfigLoadStart}\n *\n * @publicApi\n */\nexport class RouteConfigLoadEnd {\n  readonly type = EventType.RouteConfigLoadEnd;\n\n  constructor(\n      /** @docsNotRequired */\n      public route: Route) {}\n  toString(): string {\n    return `RouteConfigLoadEnd(path: ${this.route.path})`;\n  }\n}\n\n/**\n * An event triggered at the start of the child-activation\n * part of the Resolve phase of routing.\n * @see {@link ChildActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ChildActivationStart {\n  readonly type = EventType.ChildActivationStart;\n\n  constructor(\n      /** @docsNotRequired */\n      public snapshot: ActivatedRouteSnapshot) {}\n  toString(): string {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ChildActivationStart(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered at the end of the child-activation part\n * of the Resolve phase of routing.\n * @see {@link ChildActivationStart}\n * @see {@link ResolveStart}\n * @publicApi\n */\nexport class ChildActivationEnd {\n  readonly type = EventType.ChildActivationEnd;\n\n  constructor(\n      /** @docsNotRequired */\n      public snapshot: ActivatedRouteSnapshot) {}\n  toString(): string {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ChildActivationEnd(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered at the start of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationEnd}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ActivationStart {\n  readonly type = EventType.ActivationStart;\n\n  constructor(\n      /** @docsNotRequired */\n      public snapshot: ActivatedRouteSnapshot) {}\n  toString(): string {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ActivationStart(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered at the end of the activation part\n * of the Resolve phase of routing.\n * @see {@link ActivationStart}\n * @see {@link ResolveStart}\n *\n * @publicApi\n */\nexport class ActivationEnd {\n  readonly type = EventType.ActivationEnd;\n\n  constructor(\n      /** @docsNotRequired */\n      public snapshot: ActivatedRouteSnapshot) {}\n  toString(): string {\n    const path = this.snapshot.routeConfig && this.snapshot.routeConfig.path || '';\n    return `ActivationEnd(path: '${path}')`;\n  }\n}\n\n/**\n * An event triggered by scrolling.\n *\n * @publicApi\n */\nexport class Scroll {\n  readonly type = EventType.Scroll;\n\n  constructor(\n      /** @docsNotRequired */\n      readonly routerEvent: NavigationEnd|NavigationSkipped,\n\n      /** @docsNotRequired */\n      readonly position: [number, number]|null,\n\n      /** @docsNotRequired */\n      readonly anchor: string|null) {}\n\n  toString(): string {\n    const pos = this.position ? `${this.position[0]}, ${this.position[1]}` : null;\n    return `Scroll(anchor: '${this.anchor}', position: '${pos}')`;\n  }\n}\n\nexport class BeforeActivateRoutes {}\nexport class RedirectRequest {\n  constructor(readonly url: UrlTree) {}\n}\nexport type PrivateRouterEvents = BeforeActivateRoutes|RedirectRequest;\n\n/**\n * Router events that allow you to track the lifecycle of the router.\n *\n * The events occur in the following sequence:\n *\n * * [NavigationStart](api/router/NavigationStart): Navigation starts.\n * * [RouteConfigLoadStart](api/router/RouteConfigLoadStart): Before\n * the router [lazy loads](/guide/router#lazy-loading) a route configuration.\n * * [RouteConfigLoadEnd](api/router/RouteConfigLoadEnd): After a route has been lazy loaded.\n * * [RoutesRecognized](api/router/RoutesRecognized): When the router parses the URL\n * and the routes are recognized.\n * * [GuardsCheckStart](api/router/GuardsCheckStart): When the router begins the *guards*\n * phase of routing.\n * * [ChildActivationStart](api/router/ChildActivationStart): When the router\n * begins activating a route's children.\n * * [ActivationStart](api/router/ActivationStart): When the router begins activating a route.\n * * [GuardsCheckEnd](api/router/GuardsCheckEnd): When the router finishes the *guards*\n * phase of routing successfully.\n * * [ResolveStart](api/router/ResolveStart): When the router begins the *resolve*\n * phase of routing.\n * * [ResolveEnd](api/router/ResolveEnd): When the router finishes the *resolve*\n * phase of routing successfully.\n * * [ChildActivationEnd](api/router/ChildActivationEnd): When the router finishes\n * activating a route's children.\n * * [ActivationEnd](api/router/ActivationEnd): When the router finishes activating a route.\n * * [NavigationEnd](api/router/NavigationEnd): When navigation ends successfully.\n * * [NavigationCancel](api/router/NavigationCancel): When navigation is canceled.\n * * [NavigationError](api/router/NavigationError): When navigation fails\n * due to an unexpected error.\n * * [Scroll](api/router/Scroll): When the user scrolls.\n *\n * @publicApi\n */\nexport type Event = NavigationStart|NavigationEnd|NavigationCancel|NavigationError|RoutesRecognized|\n    GuardsCheckStart|GuardsCheckEnd|RouteConfigLoadStart|RouteConfigLoadEnd|ChildActivationStart|\n    ChildActivationEnd|ActivationStart|ActivationEnd|Scroll|ResolveStart|ResolveEnd|\n    NavigationSkipped;\n\nexport function stringifyEvent(routerEvent: Event): string {\n  switch (routerEvent.type) {\n    case EventType.ActivationEnd:\n      return `ActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ActivationStart:\n      return `ActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationEnd:\n      return `ChildActivationEnd(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.ChildActivationStart:\n      return `ChildActivationStart(path: '${routerEvent.snapshot.routeConfig?.path || ''}')`;\n    case EventType.GuardsCheckEnd:\n      return `GuardsCheckEnd(id: ${routerEvent.id}, url: '${\n          routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${\n          routerEvent.state}, shouldActivate: ${routerEvent.shouldActivate})`;\n    case EventType.GuardsCheckStart:\n      return `GuardsCheckStart(id: ${routerEvent.id}, url: '${\n          routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${\n          routerEvent.state})`;\n    case EventType.NavigationCancel:\n      return `NavigationCancel(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationSkipped:\n      return `NavigationSkipped(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.NavigationEnd:\n      return `NavigationEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${\n          routerEvent.urlAfterRedirects}')`;\n    case EventType.NavigationError:\n      return `NavigationError(id: ${routerEvent.id}, url: '${routerEvent.url}', error: ${\n          routerEvent.error})`;\n    case EventType.NavigationStart:\n      return `NavigationStart(id: ${routerEvent.id}, url: '${routerEvent.url}')`;\n    case EventType.ResolveEnd:\n      return `ResolveEnd(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${\n          routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.ResolveStart:\n      return `ResolveStart(id: ${routerEvent.id}, url: '${routerEvent.url}', urlAfterRedirects: '${\n          routerEvent.urlAfterRedirects}', state: ${routerEvent.state})`;\n    case EventType.RouteConfigLoadEnd:\n      return `RouteConfigLoadEnd(path: ${routerEvent.route.path})`;\n    case EventType.RouteConfigLoadStart:\n      return `RouteConfigLoadStart(path: ${routerEvent.route.path})`;\n    case EventType.RoutesRecognized:\n      return `RoutesRecognized(id: ${routerEvent.id}, url: '${\n          routerEvent.url}', urlAfterRedirects: '${routerEvent.urlAfterRedirects}', state: ${\n          routerEvent.state})`;\n    case EventType.Scroll:\n      const pos =\n          routerEvent.position ? `${routerEvent.position[0]}, ${routerEvent.position[1]}` : null;\n      return `Scroll(anchor: '${routerEvent.anchor}', position: '${pos}')`;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {ComponentRef, EnvironmentInjector, Injectable} from '@angular/core';\n\nimport {RouterOutletContract} from './directives/router_outlet';\nimport {ActivatedRoute} from './router_state';\n\n\n/**\n * Store contextual information about a `RouterOutlet`\n *\n * @publicApi\n */\nexport class OutletContext {\n  outlet: RouterOutletContract|null = null;\n  route: ActivatedRoute|null = null;\n  injector: EnvironmentInjector|null = null;\n  children = new ChildrenOutletContexts();\n  attachRef: ComponentRef<any>|null = null;\n}\n\n/**\n * Store contextual information about the children (= nested) `RouterOutlet`\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class ChildrenOutletContexts {\n  // contexts for child outlets, by name.\n  private contexts = new Map<string, OutletContext>();\n\n  /** Called when a `RouterOutlet` directive is instantiated */\n  onChildOutletCreated(childName: string, outlet: RouterOutletContract): void {\n    const context = this.getOrCreateContext(childName);\n    context.outlet = outlet;\n    this.contexts.set(childName, context);\n  }\n\n  /**\n   * Called when a `RouterOutlet` directive is destroyed.\n   * We need to keep the context as the outlet could be destroyed inside a NgIf and might be\n   * re-created later.\n   */\n  onChildOutletDestroyed(childName: string): void {\n    const context = this.getContext(childName);\n    if (context) {\n      context.outlet = null;\n      context.attachRef = null;\n    }\n  }\n\n  /**\n   * Called when the corresponding route is deactivated during navigation.\n   * Because the component get destroyed, all children outlet are destroyed.\n   */\n  onOutletDeactivated(): Map<string, OutletContext> {\n    const contexts = this.contexts;\n    this.contexts = new Map();\n    return contexts;\n  }\n\n  onOutletReAttached(contexts: Map<string, OutletContext>) {\n    this.contexts = contexts;\n  }\n\n  getOrCreateContext(childName: string): OutletContext {\n    let context = this.getContext(childName);\n\n    if (!context) {\n      context = new OutletContext();\n      this.contexts.set(childName, context);\n    }\n\n    return context;\n  }\n\n  getContext(childName: string): OutletContext|null {\n    return this.contexts.get(childName) || null;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nexport class Tree<T> {\n  /** @internal */\n  _root: TreeNode<T>;\n\n  constructor(root: TreeNode<T>) {\n    this._root = root;\n  }\n\n  get root(): T {\n    return this._root.value;\n  }\n\n  /**\n   * @internal\n   */\n  parent(t: T): T|null {\n    const p = this.pathFromRoot(t);\n    return p.length > 1 ? p[p.length - 2] : null;\n  }\n\n  /**\n   * @internal\n   */\n  children(t: T): T[] {\n    const n = findNode(t, this._root);\n    return n ? n.children.map(t => t.value) : [];\n  }\n\n  /**\n   * @internal\n   */\n  firstChild(t: T): T|null {\n    const n = findNode(t, this._root);\n    return n && n.children.length > 0 ? n.children[0].value : null;\n  }\n\n  /**\n   * @internal\n   */\n  siblings(t: T): T[] {\n    const p = findPath(t, this._root);\n    if (p.length < 2) return [];\n\n    const c = p[p.length - 2].children.map(c => c.value);\n    return c.filter(cc => cc !== t);\n  }\n\n  /**\n   * @internal\n   */\n  pathFromRoot(t: T): T[] {\n    return findPath(t, this._root).map(s => s.value);\n  }\n}\n\n\n// DFS for the node matching the value\nfunction findNode<T>(value: T, node: TreeNode<T>): TreeNode<T>|null {\n  if (value === node.value) return node;\n\n  for (const child of node.children) {\n    const node = findNode(value, child);\n    if (node) return node;\n  }\n\n  return null;\n}\n\n// Return the path to the node with the given value using DFS\nfunction findPath<T>(value: T, node: TreeNode<T>): TreeNode<T>[] {\n  if (value === node.value) return [node];\n\n  for (const child of node.children) {\n    const path = findPath(value, child);\n    if (path.length) {\n      path.unshift(node);\n      return path;\n    }\n  }\n\n  return [];\n}\n\nexport class TreeNode<T> {\n  constructor(public value: T, public children: TreeNode<T>[]) {}\n\n  toString(): string {\n    return `TreeNode(${this.value})`;\n  }\n}\n\n// Return the list of T indexed by outlet name\nexport function nodeChildrenAsMap<T extends {outlet: string}>(node: TreeNode<T>|null) {\n  const map: {[outlet: string]: TreeNode<T>} = {};\n\n  if (node) {\n    node.children.forEach(child => map[child.value.outlet] = child);\n  }\n\n  return map;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Type} from '@angular/core';\nimport {BehaviorSubject, Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {Data, ResolveData, Route} from './models';\nimport {convertToParamMap, ParamMap, Params, PRIMARY_OUTLET, RouteTitleKey} from './shared';\nimport {equalSegments, UrlSegment, UrlTree} from './url_tree';\nimport {shallowEqual, shallowEqualArrays} from './utils/collection';\nimport {Tree, TreeNode} from './utils/tree';\n\n/**\n * Represents the state of the router as a tree of activated routes.\n *\n * @usageNotes\n *\n * Every node in the route tree is an `ActivatedRoute` instance\n * that knows about the \"consumed\" URL segments, the extracted parameters,\n * and the resolved data.\n * Use the `ActivatedRoute` properties to traverse the tree from any node.\n *\n * The following fragment shows how a component gets the root node\n * of the current state to establish its own route tree:\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<string> = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @see {@link ActivatedRoute}\n * @see [Getting route information](guide/router#getting-route-information)\n *\n * @publicApi\n */\nexport class RouterState extends Tree<ActivatedRoute> {\n  /** @internal */\n  constructor(\n      root: TreeNode<ActivatedRoute>,\n      /** The current snapshot of the router state */\n      public snapshot: RouterStateSnapshot) {\n    super(root);\n    setRouterState(<RouterState>this, root);\n  }\n\n  override toString(): string {\n    return this.snapshot.toString();\n  }\n}\n\nexport function createEmptyState(urlTree: UrlTree, rootComponent: Type<any>|null): RouterState {\n  const snapshot = createEmptyStateSnapshot(urlTree, rootComponent);\n  const emptyUrl = new BehaviorSubject([new UrlSegment('', {})]);\n  const emptyParams = new BehaviorSubject({});\n  const emptyData = new BehaviorSubject({});\n  const emptyQueryParams = new BehaviorSubject({});\n  const fragment = new BehaviorSubject<string|null>('');\n  const 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<ActivatedRoute>(activated, []), snapshot);\n}\n\nexport function createEmptyStateSnapshot(\n    urlTree: UrlTree, rootComponent: Type<any>|null): RouterStateSnapshot {\n  const emptyParams = {};\n  const emptyData = {};\n  const emptyQueryParams = {};\n  const fragment = '';\n  const activated = new ActivatedRouteSnapshot(\n      [], emptyParams, emptyQueryParams, fragment, emptyData, PRIMARY_OUTLET, rootComponent, null,\n      {});\n  return new RouterStateSnapshot('', new TreeNode<ActivatedRouteSnapshot>(activated, []));\n}\n\n/**\n * Provides access to information about a route associated with a component\n * that is loaded in an outlet.\n * Use to traverse the `RouterState` tree and extract information from nodes.\n *\n * The following example shows how to construct a component using information from a\n * currently activated route.\n *\n * Note: the observables in this class only emit when the current and previous values differ based\n * on shallow equality. For example, changing deeply nested properties in resolved `data` will not\n * cause the `ActivatedRoute.data` `Observable` to emit a new value.\n *\n * {@example router/activated-route/module.ts region=\"activated-route\"\n *     header=\"activated-route.component.ts\"}\n *\n * @see [Getting route information](guide/router#getting-route-information)\n *\n * @publicApi\n */\nexport class ActivatedRoute {\n  /** The current snapshot of this route */\n  snapshot!: ActivatedRouteSnapshot;\n  /** @internal */\n  _futureSnapshot: ActivatedRouteSnapshot;\n  /** @internal */\n  _routerState!: RouterState;\n  /** @internal */\n  _paramMap?: Observable<ParamMap>;\n  /** @internal */\n  _queryParamMap?: Observable<ParamMap>;\n\n  /** An Observable of the resolved route title */\n  readonly title: Observable<string|undefined>;\n\n  /** An observable of the URL segments matched by this route. */\n  public url: Observable<UrlSegment[]>;\n  /** An observable of the matrix parameters scoped to this route. */\n  public params: Observable<Params>;\n  /** An observable of the query parameters shared by all the routes. */\n  public queryParams: Observable<Params>;\n  /** An observable of the URL fragment shared by all the routes. */\n  public fragment: Observable<string|null>;\n  /** An observable of the static and resolved data of this route. */\n  public data: Observable<Data>;\n\n  /** @internal */\n  constructor(\n      /** @internal */\n      public urlSubject: BehaviorSubject<UrlSegment[]>,\n      /** @internal */\n      public paramsSubject: BehaviorSubject<Params>,\n      /** @internal */\n      public queryParamsSubject: BehaviorSubject<Params>,\n      /** @internal */\n      public fragmentSubject: BehaviorSubject<string|null>,\n      /** @internal */\n      public dataSubject: BehaviorSubject<Data>,\n      /** The outlet name of the route, a constant. */\n      public outlet: string,\n      /** The component of the route, a constant. */\n      public component: Type<any>|null, futureSnapshot: ActivatedRouteSnapshot) {\n    this._futureSnapshot = futureSnapshot;\n    this.title = this.dataSubject?.pipe(map((d: Data) => d[RouteTitleKey])) ?? of(undefined);\n    // TODO(atscott): Verify that these can be changed to `.asObservable()` with TGP.\n    this.url = urlSubject;\n    this.params = paramsSubject;\n    this.queryParams = queryParamsSubject;\n    this.fragment = fragmentSubject;\n    this.data = dataSubject;\n  }\n\n  /** The configuration used to match this route. */\n  get routeConfig(): Route|null {\n    return this._futureSnapshot.routeConfig;\n  }\n\n  /** The root of the router state. */\n  get root(): ActivatedRoute {\n    return this._routerState.root;\n  }\n\n  /** The parent of this route in the router state tree. */\n  get parent(): ActivatedRoute|null {\n    return this._routerState.parent(this);\n  }\n\n  /** The first child of this route in the router state tree. */\n  get firstChild(): ActivatedRoute|null {\n    return this._routerState.firstChild(this);\n  }\n\n  /** The children of this route in the router state tree. */\n  get children(): ActivatedRoute[] {\n    return this._routerState.children(this);\n  }\n\n  /** The path from the root of the router state tree to this route. */\n  get pathFromRoot(): ActivatedRoute[] {\n    return this._routerState.pathFromRoot(this);\n  }\n\n  /**\n   * An Observable that contains a map of the required and optional parameters\n   * specific to the route.\n   * The map supports retrieving single and multiple values from the same parameter.\n   */\n  get paramMap(): Observable<ParamMap> {\n    if (!this._paramMap) {\n      this._paramMap = this.params.pipe(map((p: Params): ParamMap => convertToParamMap(p)));\n    }\n    return this._paramMap;\n  }\n\n  /**\n   * An Observable that contains a map of the query parameters available to all routes.\n   * The map supports retrieving single and multiple values from the query parameter.\n   */\n  get queryParamMap(): Observable<ParamMap> {\n    if (!this._queryParamMap) {\n      this._queryParamMap =\n          this.queryParams.pipe(map((p: Params): ParamMap => convertToParamMap(p)));\n    }\n    return this._queryParamMap;\n  }\n\n  toString(): string {\n    return this.snapshot ? this.snapshot.toString() : `Future(${this._futureSnapshot})`;\n  }\n}\n\nexport type ParamsInheritanceStrategy = 'emptyOnly'|'always';\n\n/** @internal */\nexport type Inherited = {\n  params: Params,\n  data: Data,\n  resolve: Data,\n};\n\n/**\n * Returns the inherited params, data, and resolve for a given route.\n *\n * By default, we do not inherit parent data unless the current route is path-less or the parent\n * route is component-less.\n */\nexport function getInherited(\n    route: ActivatedRouteSnapshot, parent: ActivatedRouteSnapshot|null,\n    paramsInheritanceStrategy: ParamsInheritanceStrategy = 'emptyOnly'): Inherited {\n  let inherited: Inherited;\n  const {routeConfig} = route;\n  if (parent !== null &&\n      (paramsInheritanceStrategy === 'always' ||\n       // inherit parent data if route is empty path\n       routeConfig?.path === '' ||\n       // inherit parent data if parent was componentless\n       (!parent.component && !parent.routeConfig?.loadComponent))) {\n    inherited = {\n      params: {...parent.params, ...route.params},\n      data: {...parent.data, ...route.data},\n      resolve: {\n        // Snapshots are created with data inherited from parent and guards (i.e. canActivate) can\n        // change data because it's not frozen...\n        // This first line could be deleted chose to break/disallow mutating the `data` object in\n        // guards.\n        // Note that data from parents still override this mutated data so anyone relying on this\n        // might be surprised that it doesn't work if parent data is inherited but otherwise does.\n        ...route.data,\n        // Ensure inherited resolved data overrides inherited static data\n        ...parent.data,\n        // static data from the current route overrides any inherited data\n        ...routeConfig?.data,\n        // resolved data from current route overrides everything\n        ...route._resolvedData,\n      }\n    };\n  } else {\n    inherited = {\n      params: {...route.params},\n      data: {...route.data},\n      resolve: {...route.data, ...(route._resolvedData ?? {})}\n    };\n  }\n\n  if (routeConfig && hasStaticTitle(routeConfig)) {\n    inherited.resolve[RouteTitleKey] = routeConfig.title;\n  }\n  return inherited;\n}\n\n/**\n * @description\n *\n * Contains the information about a route associated with a component loaded in an\n * outlet at a particular moment in time. ActivatedRouteSnapshot can also be used to\n * traverse the router state tree.\n *\n * The following example initializes a component with route information extracted\n * from the snapshot of the root node at the time of creation.\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 * @publicApi\n */\nexport class ActivatedRouteSnapshot {\n  /** The configuration used to match this route **/\n  public readonly routeConfig: Route|null;\n  /** @internal */\n  _resolve: ResolveData;\n  /** @internal */\n  _resolvedData?: Data;\n  /** @internal */\n  _routerState!: RouterStateSnapshot;\n  /** @internal */\n  _paramMap?: ParamMap;\n  /** @internal */\n  _queryParamMap?: ParamMap;\n\n  /** The resolved route title */\n  get title(): string|undefined {\n    // Note: This _must_ be a getter because the data is mutated in the resolvers. Title will not be\n    // available at the time of class instantiation.\n    return this.data?.[RouteTitleKey];\n  }\n\n  /** @internal */\n  constructor(\n      /** The URL segments matched by this route */\n      public url: UrlSegment[],\n      /**\n       *  The matrix parameters scoped to this route.\n       *\n       *  You can compute all params (or data) in the router state or to get params outside\n       *  of an activated component by traversing the `RouterState` tree as in the following\n       *  example:\n       *  ```\n       *  collectRouteParams(router: Router) {\n       *    let params = {};\n       *    let stack: ActivatedRouteSnapshot[] = [router.routerState.snapshot.root];\n       *    while (stack.length > 0) {\n       *      const route = stack.pop()!;\n       *      params = {...params, ...route.params};\n       *      stack.push(...route.children);\n       *    }\n       *    return params;\n       *  }\n       *  ```\n       */\n      public params: Params,\n      /** The query parameters shared by all the routes */\n      public queryParams: Params,\n      /** The URL fragment shared by all the routes */\n      public fragment: string|null,\n      /** The static and resolved data of this route */\n      public data: Data,\n      /** The outlet name of the route */\n      public outlet: string,\n      /** The component of the route */\n      public component: Type<any>|null, routeConfig: Route|null, resolve: ResolveData) {\n    this.routeConfig = routeConfig;\n    this._resolve = resolve;\n  }\n\n  /** The root of the router state */\n  get root(): ActivatedRouteSnapshot {\n    return this._routerState.root;\n  }\n\n  /** The parent of this route in the router state tree */\n  get parent(): ActivatedRouteSnapshot|null {\n    return this._routerState.parent(this);\n  }\n\n  /** The first child of this route in the router state tree */\n  get firstChild(): ActivatedRouteSnapshot|null {\n    return this._routerState.firstChild(this);\n  }\n\n  /** The children of this route in the router state tree */\n  get children(): ActivatedRouteSnapshot[] {\n    return this._routerState.children(this);\n  }\n\n  /** The path from the root of the router state tree to this route */\n  get pathFromRoot(): ActivatedRouteSnapshot[] {\n    return this._routerState.pathFromRoot(this);\n  }\n\n  get paramMap(): ParamMap {\n    if (!this._paramMap) {\n      this._paramMap = convertToParamMap(this.params);\n    }\n    return this._paramMap;\n  }\n\n  get queryParamMap(): ParamMap {\n    if (!this._queryParamMap) {\n      this._queryParamMap = convertToParamMap(this.queryParams);\n    }\n    return this._queryParamMap;\n  }\n\n  toString(): string {\n    const url = this.url.map(segment => segment.toString()).join('/');\n    const matched = this.routeConfig ? this.routeConfig.path : '';\n    return `Route(url:'${url}', path:'${matched}')`;\n  }\n}\n\n/**\n * @description\n *\n * Represents the state of the router at a moment in time.\n *\n * This 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 * The following example shows how a component is initialized with information\n * from the snapshot of the root node's state at the time of creation.\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<string> = child.params.map(p => p.id);\n *     //...\n *   }\n * }\n * ```\n *\n * @publicApi\n */\nexport class RouterStateSnapshot extends Tree<ActivatedRouteSnapshot> {\n  /** @internal */\n  constructor(\n      /** The url from which this snapshot was created */\n      public url: string, root: TreeNode<ActivatedRouteSnapshot>) {\n    super(root);\n    setRouterState(<RouterStateSnapshot>this, root);\n  }\n\n  override toString(): string {\n    return serializeNode(this._root);\n  }\n}\n\nfunction setRouterState<U, T extends {_routerState: U}>(state: U, node: TreeNode<T>): void {\n  node.value._routerState = state;\n  node.children.forEach(c => setRouterState(state, c));\n}\n\nfunction serializeNode(node: TreeNode<ActivatedRouteSnapshot>): string {\n  const c = node.children.length > 0 ? ` { ${node.children.map(serializeNode).join(', ')} } ` : '';\n  return `${node.value}${c}`;\n}\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 */\nexport function advanceActivatedRoute(route: ActivatedRoute): void {\n  if (route.snapshot) {\n    const currentSnapshot = route.snapshot;\n    const nextSnapshot = route._futureSnapshot;\n    route.snapshot = nextSnapshot;\n    if (!shallowEqual(currentSnapshot.queryParams, nextSnapshot.queryParams)) {\n      route.queryParamsSubject.next(nextSnapshot.queryParams);\n    }\n    if (currentSnapshot.fragment !== nextSnapshot.fragment) {\n      route.fragmentSubject.next(nextSnapshot.fragment);\n    }\n    if (!shallowEqual(currentSnapshot.params, nextSnapshot.params)) {\n      route.paramsSubject.next(nextSnapshot.params);\n    }\n    if (!shallowEqualArrays(currentSnapshot.url, nextSnapshot.url)) {\n      route.urlSubject.next(nextSnapshot.url);\n    }\n    if (!shallowEqual(currentSnapshot.data, nextSnapshot.data)) {\n      route.dataSubject.next(nextSnapshot.data);\n    }\n  } else {\n    route.snapshot = route._futureSnapshot;\n\n    // this is for resolved data\n    route.dataSubject.next(route._futureSnapshot.data);\n  }\n}\n\n\nexport function equalParamsAndUrlSegments(\n    a: ActivatedRouteSnapshot, b: ActivatedRouteSnapshot): boolean {\n  const equalUrlParams = shallowEqual(a.params, b.params) && equalSegments(a.url, b.url);\n  const parentsMismatch = !a.parent !== !b.parent;\n\n  return equalUrlParams && !parentsMismatch &&\n      (!a.parent || equalParamsAndUrlSegments(a.parent, b.parent!));\n}\n\nexport function hasStaticTitle(config: Route) {\n  return typeof config.title === 'string' || config.title === null;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {ChangeDetectorRef, ComponentRef, Directive, EnvironmentInjector, EventEmitter, inject, Injectable, InjectionToken, Injector, Input, OnDestroy, OnInit, Output, reflectComponentType, SimpleChanges, ViewContainerRef, ɵRuntimeError as RuntimeError,} from '@angular/core';\nimport {combineLatest, of, Subscription} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\n\nimport {RuntimeErrorCode} from '../errors';\nimport {Data} from '../models';\nimport {ChildrenOutletContexts} from '../router_outlet_context';\nimport {ActivatedRoute} from '../router_state';\nimport {PRIMARY_OUTLET} from '../shared';\n\n\n/**\n * An interface that defines the contract for developing a component outlet for the `Router`.\n *\n * An outlet acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * A router outlet should register itself with the `Router` via\n * `ChildrenOutletContexts#onChildOutletCreated` and unregister with\n * `ChildrenOutletContexts#onChildOutletDestroyed`. When the `Router` identifies a matched `Route`,\n * it looks for a registered outlet in the `ChildrenOutletContexts` and activates it.\n *\n * @see {@link ChildrenOutletContexts}\n * @publicApi\n */\nexport interface RouterOutletContract {\n  /**\n   * Whether the given outlet is activated.\n   *\n   * An outlet is considered \"activated\" if it has an active component.\n   */\n  isActivated: boolean;\n\n  /** The instance of the activated component or `null` if the outlet is not activated. */\n  component: Object|null;\n\n  /**\n   * The `Data` of the `ActivatedRoute` snapshot.\n   */\n  activatedRouteData: Data;\n\n  /**\n   * The `ActivatedRoute` for the outlet or `null` if the outlet is not activated.\n   */\n  activatedRoute: ActivatedRoute|null;\n\n  /**\n   * Called by the `Router` when the outlet should activate (create a component).\n   */\n  activateWith(activatedRoute: ActivatedRoute, environmentInjector: EnvironmentInjector|null): void;\n\n  /**\n   * A request to destroy the currently activated component.\n   *\n   * When a `RouteReuseStrategy` indicates that an `ActivatedRoute` should be removed but stored for\n   * later re-use rather than destroyed, the `Router` will call `detach` instead.\n   */\n  deactivate(): void;\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree.\n   *\n   * This is similar to `deactivate`, but the activated component should _not_ be destroyed.\n   * Instead, it is returned so that it can be reattached later via the `attach` method.\n   */\n  detach(): ComponentRef<unknown>;\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree.\n   */\n  attach(ref: ComponentRef<unknown>, activatedRoute: ActivatedRoute): void;\n\n  /**\n   * Emits an activate event when a new component is instantiated\n   **/\n  activateEvents?: EventEmitter<unknown>;\n\n  /**\n   * Emits a deactivate event when a component is destroyed.\n   */\n  deactivateEvents?: EventEmitter<unknown>;\n\n  /**\n   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n   * previously detached subtree.\n   **/\n  attachEvents?: EventEmitter<unknown>;\n\n  /**\n   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n   * subtree.\n   */\n  detachEvents?: EventEmitter<unknown>;\n\n  /**\n   * Used to indicate that the outlet is able to bind data from the `Router` to the outlet\n   * component's inputs.\n   *\n   * When this is `undefined` or `false` and the developer has opted in to the\n   * feature using `withComponentInputBinding`, a warning will be logged in dev mode if this outlet\n   * is used in the application.\n   */\n  readonly supportsBindingToComponentInputs?: true;\n}\n\n/**\n * @description\n *\n * Acts as a placeholder that Angular dynamically fills based on the current router state.\n *\n * Each outlet can have a unique name, determined by the optional `name` attribute.\n * The name cannot be set or changed dynamically. If not set, default value is \"primary\".\n *\n * ```\n * <router-outlet></router-outlet>\n * <router-outlet name='left'></router-outlet>\n * <router-outlet name='right'></router-outlet>\n * ```\n *\n * Named outlets can be the targets of secondary routes.\n * The `Route` object for a secondary route has an `outlet` property to identify the target outlet:\n *\n * `{path: <base-path>, component: <component>, outlet: <target_outlet_name>}`\n *\n * Using named outlets and secondary routes, you can target multiple outlets in\n * the same `RouterLink` directive.\n *\n * The router keeps track of separate branches in a navigation tree for each named outlet and\n * generates a representation of that tree in the URL.\n * The URL for a secondary route uses the following syntax to specify both the primary and secondary\n * routes at the same time:\n *\n * `http://base-path/primary-route-path(outlet-name:route-path)`\n *\n * A router outlet emits an activate event when a new component is instantiated,\n * deactivate event when a component is destroyed.\n * An attached event emits when the `RouteReuseStrategy` instructs the outlet to reattach the\n * subtree, and the detached event emits when the `RouteReuseStrategy` instructs the outlet to\n * detach the subtree.\n *\n * ```\n * <router-outlet\n *   (activate)='onActivate($event)'\n *   (deactivate)='onDeactivate($event)'\n *   (attach)='onAttach($event)'\n *   (detach)='onDetach($event)'></router-outlet>\n * ```\n *\n * @see [Routing tutorial](guide/router-tutorial-toh#named-outlets \"Example of a named\n * outlet and secondary route configuration\").\n * @see {@link RouterLink}\n * @see {@link Route}\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n  selector: 'router-outlet',\n  exportAs: 'outlet',\n  standalone: true,\n})\nexport class RouterOutlet implements OnDestroy, OnInit, RouterOutletContract {\n  private activated: ComponentRef<any>|null = null;\n  /** @internal */\n  get activatedComponentRef(): ComponentRef<any>|null {\n    return this.activated;\n  }\n  private _activatedRoute: ActivatedRoute|null = null;\n  /**\n   * The name of the outlet\n   *\n   * @see [named outlets](guide/router-tutorial-toh#displaying-multiple-routes-in-named-outlets)\n   */\n  @Input() name = PRIMARY_OUTLET;\n\n  @Output('activate') activateEvents = new EventEmitter<any>();\n  @Output('deactivate') deactivateEvents = new EventEmitter<any>();\n  /**\n   * Emits an attached component instance when the `RouteReuseStrategy` instructs to re-attach a\n   * previously detached subtree.\n   **/\n  @Output('attach') attachEvents = new EventEmitter<unknown>();\n  /**\n   * Emits a detached component instance when the `RouteReuseStrategy` instructs to detach the\n   * subtree.\n   */\n  @Output('detach') detachEvents = new EventEmitter<unknown>();\n\n  private parentContexts = inject(ChildrenOutletContexts);\n  private location = inject(ViewContainerRef);\n  private changeDetector = inject(ChangeDetectorRef);\n  private environmentInjector = inject(EnvironmentInjector);\n  private inputBinder = inject(INPUT_BINDER, {optional: true});\n  /** @nodoc */\n  readonly supportsBindingToComponentInputs = true;\n\n  /** @nodoc */\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['name']) {\n      const {firstChange, previousValue} = changes['name'];\n      if (firstChange) {\n        // The first change is handled by ngOnInit. Because ngOnChanges doesn't get called when no\n        // input is set at all, we need to centrally handle the first change there.\n        return;\n      }\n\n      // unregister with the old name\n      if (this.isTrackedInParentContexts(previousValue)) {\n        this.deactivate();\n        this.parentContexts.onChildOutletDestroyed(previousValue);\n      }\n      // register the new name\n      this.initializeOutletWithName();\n    }\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): void {\n    // Ensure that the registered outlet is this one before removing it on the context.\n    if (this.isTrackedInParentContexts(this.name)) {\n      this.parentContexts.onChildOutletDestroyed(this.name);\n    }\n    this.inputBinder?.unsubscribeFromRouteData(this);\n  }\n\n  private isTrackedInParentContexts(outletName: string) {\n    return this.parentContexts.getContext(outletName)?.outlet === this;\n  }\n\n  /** @nodoc */\n  ngOnInit(): void {\n    this.initializeOutletWithName();\n  }\n\n  private initializeOutletWithName() {\n    this.parentContexts.onChildOutletCreated(this.name, this);\n    if (this.activated) {\n      return;\n    }\n\n    // If the outlet was not instantiated at the time the route got activated we need to populate\n    // the outlet when it is initialized (ie inside a NgIf)\n    const context = this.parentContexts.getContext(this.name);\n    if (context?.route) {\n      if (context.attachRef) {\n        // `attachRef` is populated when there is an existing component to mount\n        this.attach(context.attachRef, context.route);\n      } else {\n        // otherwise the component defined in the configuration is created\n        this.activateWith(context.route, context.injector);\n      }\n    }\n  }\n\n  get isActivated(): boolean {\n    return !!this.activated;\n  }\n\n  /**\n   * @returns The currently activated component instance.\n   * @throws An error if the outlet is not activated.\n   */\n  get component(): Object {\n    if (!this.activated)\n      throw new RuntimeError(\n          RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    return this.activated.instance;\n  }\n\n  get activatedRoute(): ActivatedRoute {\n    if (!this.activated)\n      throw new RuntimeError(\n          RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    return this._activatedRoute as ActivatedRoute;\n  }\n\n  get activatedRouteData(): Data {\n    if (this._activatedRoute) {\n      return this._activatedRoute.snapshot.data;\n    }\n    return {};\n  }\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to detach the subtree\n   */\n  detach(): ComponentRef<any> {\n    if (!this.activated)\n      throw new RuntimeError(\n          RuntimeErrorCode.OUTLET_NOT_ACTIVATED,\n          (typeof ngDevMode === 'undefined' || ngDevMode) && 'Outlet is not activated');\n    this.location.detach();\n    const cmp = this.activated;\n    this.activated = null;\n    this._activatedRoute = null;\n    this.detachEvents.emit(cmp.instance);\n    return cmp;\n  }\n\n  /**\n   * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree\n   */\n  attach(ref: ComponentRef<any>, activatedRoute: ActivatedRoute) {\n    this.activated = ref;\n    this._activatedRoute = activatedRoute;\n    this.location.insert(ref.hostView);\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.attachEvents.emit(ref.instance);\n  }\n\n  deactivate(): void {\n    if (this.activated) {\n      const c = this.component;\n      this.activated.destroy();\n      this.activated = null;\n      this._activatedRoute = null;\n      this.deactivateEvents.emit(c);\n    }\n  }\n\n  activateWith(activatedRoute: ActivatedRoute, environmentInjector?: EnvironmentInjector|null) {\n    if (this.isActivated) {\n      throw new RuntimeError(\n          RuntimeErrorCode.OUTLET_ALREADY_ACTIVATED,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              'Cannot activate an already activated outlet');\n    }\n    this._activatedRoute = activatedRoute;\n    const location = this.location;\n    const snapshot = activatedRoute.snapshot;\n    const component = snapshot.component!;\n    const childContexts = this.parentContexts.getOrCreateContext(this.name).children;\n    const injector = new OutletInjector(activatedRoute, childContexts, location.injector);\n\n    this.activated = location.createComponent(component, {\n      index: location.length,\n      injector,\n      environmentInjector: environmentInjector ?? this.environmentInjector\n    });\n    // Calling `markForCheck` to make sure we will run the change detection when the\n    // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.\n    this.changeDetector.markForCheck();\n    this.inputBinder?.bindActivatedRouteToOutletComponent(this);\n    this.activateEvents.emit(this.activated.instance);\n  }\n}\n\nclass OutletInjector implements Injector {\n  constructor(\n      private route: ActivatedRoute, private childContexts: ChildrenOutletContexts,\n      private parent: Injector) {}\n\n  get(token: any, notFoundValue?: any): any {\n    if (token === ActivatedRoute) {\n      return this.route;\n    }\n\n    if (token === ChildrenOutletContexts) {\n      return this.childContexts;\n    }\n\n    return this.parent.get(token, notFoundValue);\n  }\n}\n\nexport const INPUT_BINDER = new InjectionToken<RoutedComponentInputBinder>('');\n\n/**\n * Injectable used as a tree-shakable provider for opting in to binding router data to component\n * inputs.\n *\n * The RouterOutlet registers itself with this service when an `ActivatedRoute` is attached or\n * activated. When this happens, the service subscribes to the `ActivatedRoute` observables (params,\n * queryParams, data) and sets the inputs of the component using `ComponentRef.setInput`.\n * Importantly, when an input does not have an item in the route data with a matching key, this\n * input is set to `undefined`. If it were not done this way, the previous information would be\n * retained if the data got removed from the route (i.e. if a query parameter is removed).\n *\n * The `RouterOutlet` should unregister itself when destroyed via `unsubscribeFromRouteData` so that\n * the subscriptions are cleaned up.\n */\n@Injectable()\nexport class RoutedComponentInputBinder {\n  private outletDataSubscriptions = new Map<RouterOutlet, Subscription>;\n\n  bindActivatedRouteToOutletComponent(outlet: RouterOutlet) {\n    this.unsubscribeFromRouteData(outlet);\n    this.subscribeToRouteData(outlet);\n  }\n\n  unsubscribeFromRouteData(outlet: RouterOutlet) {\n    this.outletDataSubscriptions.get(outlet)?.unsubscribe();\n    this.outletDataSubscriptions.delete(outlet);\n  }\n\n  private subscribeToRouteData(outlet: RouterOutlet) {\n    const {activatedRoute} = outlet;\n    const dataSubscription =\n        combineLatest([\n          activatedRoute.queryParams,\n          activatedRoute.params,\n          activatedRoute.data,\n        ])\n            .pipe(switchMap(([queryParams, params, data], index) => {\n              data = {...queryParams, ...params, ...data};\n              // Get the first result from the data subscription synchronously so it's available to\n              // the component as soon as possible (and doesn't require a second change detection).\n              if (index === 0) {\n                return of(data);\n              }\n              // Promise.resolve is used to avoid synchronously writing the wrong data when\n              // two of the Observables in the `combineLatest` stream emit one after\n              // another.\n              return Promise.resolve(data);\n            }))\n            .subscribe(data => {\n              // Outlet may have been deactivated or changed names to be associated with a different\n              // route\n              if (!outlet.isActivated || !outlet.activatedComponentRef ||\n                  outlet.activatedRoute !== activatedRoute || activatedRoute.component === null) {\n                this.unsubscribeFromRouteData(outlet);\n                return;\n              }\n\n              const mirror = reflectComponentType(activatedRoute.component);\n              if (!mirror) {\n                this.unsubscribeFromRouteData(outlet);\n                return;\n              }\n\n              for (const {templateName} of mirror.inputs) {\n                outlet.activatedComponentRef.setInput(templateName, data[templateName]);\n              }\n            });\n\n    this.outletDataSubscriptions.set(outlet, dataSubscription);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {BehaviorSubject} from 'rxjs';\n\nimport {DetachedRouteHandleInternal, RouteReuseStrategy} from './route_reuse_strategy';\nimport {ActivatedRoute, ActivatedRouteSnapshot, RouterState, RouterStateSnapshot} from './router_state';\nimport {TreeNode} from './utils/tree';\n\nexport function createRouterState(\n    routeReuseStrategy: RouteReuseStrategy, curr: RouterStateSnapshot,\n    prevState: RouterState): RouterState {\n  const root = createNode(routeReuseStrategy, curr._root, prevState ? prevState._root : undefined);\n  return new RouterState(root, curr);\n}\n\nfunction createNode(\n    routeReuseStrategy: RouteReuseStrategy, curr: TreeNode<ActivatedRouteSnapshot>,\n    prevState?: TreeNode<ActivatedRoute>): TreeNode<ActivatedRoute> {\n  // reuse an activated route that is currently displayed on the screen\n  if (prevState && routeReuseStrategy.shouldReuseRoute(curr.value, prevState.value.snapshot)) {\n    const value = prevState.value;\n    value._futureSnapshot = curr.value;\n    const children = createOrReuseChildren(routeReuseStrategy, curr, prevState);\n    return new TreeNode<ActivatedRoute>(value, children);\n  } else {\n    if (routeReuseStrategy.shouldAttach(curr.value)) {\n      // retrieve an activated route that is used to be displayed, but is not currently displayed\n      const detachedRouteHandle = routeReuseStrategy.retrieve(curr.value);\n      if (detachedRouteHandle !== null) {\n        const tree = (detachedRouteHandle as DetachedRouteHandleInternal).route;\n        tree.value._futureSnapshot = curr.value;\n        tree.children = curr.children.map(c => createNode(routeReuseStrategy, c));\n        return tree;\n      }\n    }\n\n    const value = createActivatedRoute(curr.value);\n    const children = curr.children.map(c => createNode(routeReuseStrategy, c));\n    return new TreeNode<ActivatedRoute>(value, children);\n  }\n}\n\nfunction createOrReuseChildren(\n    routeReuseStrategy: RouteReuseStrategy, curr: TreeNode<ActivatedRouteSnapshot>,\n    prevState: TreeNode<ActivatedRoute>) {\n  return curr.children.map(child => {\n    for (const p of prevState.children) {\n      if (routeReuseStrategy.shouldReuseRoute(child.value, p.value.snapshot)) {\n        return createNode(routeReuseStrategy, child, p);\n      }\n    }\n    return createNode(routeReuseStrategy, child);\n  });\n}\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","/**\n * @license\n * Copyright Google LLC 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\nimport {NavigationCancellationCode} from './events';\nimport {NavigationBehaviorOptions} from './models';\nimport {isUrlTree, UrlSerializer, UrlTree} from './url_tree';\n\nexport const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';\n\nexport type NavigationCancelingError =\n    Error&{[NAVIGATION_CANCELING_ERROR]: true, cancellationCode: NavigationCancellationCode};\nexport type RedirectingNavigationCancelingError = NavigationCancelingError&{\n  url: UrlTree;\n  navigationBehaviorOptions?: NavigationBehaviorOptions;\n  cancellationCode: NavigationCancellationCode.Redirect;\n};\n\nexport function redirectingNavigationError(\n    urlSerializer: UrlSerializer, redirect: UrlTree): RedirectingNavigationCancelingError {\n  const {redirectTo, navigationBehaviorOptions} =\n      isUrlTree(redirect) ? {redirectTo: redirect, navigationBehaviorOptions: undefined} : redirect;\n  const error =\n      navigationCancelingError(\n          ngDevMode && `Redirecting to \"${urlSerializer.serialize(redirectTo)}\"`,\n          NavigationCancellationCode.Redirect, redirect) as RedirectingNavigationCancelingError;\n  error.url = redirectTo;\n  error.navigationBehaviorOptions = navigationBehaviorOptions;\n  return error;\n}\n\nexport function navigationCancelingError(\n    message: string|null|false, code: NavigationCancellationCode, redirectUrl?: UrlTree) {\n  const error =\n      new Error('NavigationCancelingError: ' + (message || '')) as NavigationCancelingError;\n  error[NAVIGATION_CANCELING_ERROR] = true;\n  error.cancellationCode = code;\n  if (redirectUrl) {\n    (error as RedirectingNavigationCancelingError).url = redirectUrl;\n  }\n  return error;\n}\n\nexport function isRedirectingNavigationCancelingError(\n    error: unknown|\n    RedirectingNavigationCancelingError): error is RedirectingNavigationCancelingError {\n  return isNavigationCancelingError(error) && isUrlTree((error as any).url);\n}\nexport function isNavigationCancelingError(error: unknown): error is NavigationCancelingError {\n  return error && (error as any)[NAVIGATION_CANCELING_ERROR];\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Component} from '@angular/core';\n\nimport {RouterOutlet} from '../directives/router_outlet';\n\n/**\n * This component is used internally within the router to be a placeholder when an empty\n * router-outlet is needed. For example, with a config such as:\n *\n * `{path: 'parent', outlet: 'nav', children: [...]}`\n *\n * In order to render, there needs to be a component on this config, which will default\n * to this `EmptyOutletComponent`.\n */\n@Component({\n  template: `<router-outlet></router-outlet>`,\n  imports: [RouterOutlet],\n  standalone: true,\n})\nexport class ɵEmptyOutletComponent {\n}\n\nexport {ɵEmptyOutletComponent as EmptyOutletComponent};\n","/**\n * @license\n * Copyright Google LLC 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\nimport {createEnvironmentInjector, EnvironmentInjector, isStandalone, Type, ɵisNgModule as isNgModule, ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {EmptyOutletComponent} from '../components/empty_outlet';\nimport {RuntimeErrorCode} from '../errors';\nimport {Route, Routes} from '../models';\nimport {ActivatedRouteSnapshot} from '../router_state';\nimport {PRIMARY_OUTLET} from '../shared';\n\n/**\n * Creates an `EnvironmentInjector` if the `Route` has providers and one does not already exist\n * and returns the injector. Otherwise, if the `Route` does not have `providers`, returns the\n * `currentInjector`.\n *\n * @param route The route that might have providers\n * @param currentInjector The parent injector of the `Route`\n */\nexport function getOrCreateRouteInjectorIfNeeded(\n    route: Route, currentInjector: EnvironmentInjector) {\n  if (route.providers && !route._injector) {\n    route._injector =\n        createEnvironmentInjector(route.providers, currentInjector, `Route: ${route.path}`);\n  }\n  return route._injector ?? currentInjector;\n}\n\nexport function getLoadedRoutes(route: Route): Route[]|undefined {\n  return route._loadedRoutes;\n}\n\nexport function getLoadedInjector(route: Route): EnvironmentInjector|undefined {\n  return route._loadedInjector;\n}\nexport function getLoadedComponent(route: Route): Type<unknown>|undefined {\n  return route._loadedComponent;\n}\n\nexport function getProvidersInjector(route: Route): EnvironmentInjector|undefined {\n  return route._injector;\n}\n\nexport function validateConfig(\n    config: Routes, parentPath: string = '', requireStandaloneComponents = false): void {\n  // forEach doesn't iterate undefined values\n  for (let i = 0; i < config.length; i++) {\n    const route: Route = config[i];\n    const fullPath: string = getFullPath(parentPath, route);\n    validateNode(route, fullPath, requireStandaloneComponents);\n  }\n}\n\nexport function assertStandalone(fullPath: string, component: Type<unknown>|undefined) {\n  if (component && isNgModule(component)) {\n    throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${\n            fullPath}'. You are using 'loadComponent' with a module, ` +\n            `but it must be used with standalone components. Use 'loadChildren' instead.`);\n  } else if (component && !isStandalone(component)) {\n    throw new RuntimeError(\n        RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n        `Invalid configuration of route '${fullPath}'. The component must be standalone.`);\n  }\n}\n\nfunction validateNode(route: Route, fullPath: string, requireStandaloneComponents: boolean): void {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    if (!route) {\n      throw new RuntimeError(RuntimeErrorCode.INVALID_ROUTE_CONFIG, `\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 RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${fullPath}': Array cannot be specified`);\n    }\n    if (!route.redirectTo && !route.component && !route.loadComponent && !route.children &&\n        !route.loadChildren && (route.outlet && route.outlet !== PRIMARY_OUTLET)) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': a componentless route without children or loadChildren cannot have a named outlet set`);\n    }\n    if (route.redirectTo && route.children) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': redirectTo and children cannot be used together`);\n    }\n    if (route.redirectTo && route.loadChildren) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': redirectTo and loadChildren cannot be used together`);\n    }\n    if (route.children && route.loadChildren) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': children and loadChildren cannot be used together`);\n    }\n    if (route.redirectTo && (route.component || route.loadComponent)) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': redirectTo and component/loadComponent cannot be used together`);\n    }\n    if (route.component && route.loadComponent) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': component and loadComponent cannot be used together`);\n    }\n    if (route.redirectTo && route.canActivate) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}': redirectTo and canActivate cannot be used together. Redirects happen before activation ` +\n              `so canActivate will never be executed.`);\n    }\n    if (route.path && route.matcher) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${fullPath}': path and matcher cannot be used together`);\n    }\n    if (route.redirectTo === void 0 && !route.component && !route.loadComponent &&\n        !route.children && !route.loadChildren) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              fullPath}'. One of the following must be provided: component, loadComponent, redirectTo, children or loadChildren`);\n    }\n    if (route.path === void 0 && route.matcher === void 0) {\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '${\n              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 RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `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 exp =\n          `The default value of 'pathMatch' is 'prefix', but often the intent is to use 'full'.`;\n      throw new RuntimeError(\n          RuntimeErrorCode.INVALID_ROUTE_CONFIG,\n          `Invalid configuration of route '{path: \"${fullPath}\", redirectTo: \"${\n              route.redirectTo}\"}': please provide 'pathMatch'. ${exp}`);\n    }\n    if (requireStandaloneComponents) {\n      assertStandalone(fullPath, route.component);\n    }\n  }\n  if (route.children) {\n    validateConfig(route.children, fullPath, requireStandaloneComponents);\n  }\n}\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/**\n * Makes a copy of the config and adds any default required properties.\n */\nexport function standardizeConfig(r: Route): Route {\n  const children = r.children && r.children.map(standardizeConfig);\n  const c = children ? {...r, children} : {...r};\n  if ((!c.component && !c.loadComponent) && (children || c.loadChildren) &&\n      (c.outlet && c.outlet !== PRIMARY_OUTLET)) {\n    c.component = EmptyOutletComponent;\n  }\n  return c;\n}\n\n/** Returns the `route.outlet` or PRIMARY_OUTLET if none exists. */\nexport function getOutlet(route: Route): string {\n  return route.outlet || PRIMARY_OUTLET;\n}\n\n/**\n * Sorts the `routes` such that the ones with an outlet matching `outletName` come first.\n * The order of the configs is otherwise preserved.\n */\nexport function sortByMatchingOutlets(routes: Routes, outletName: string): Routes {\n  const sortedConfig = routes.filter(r => getOutlet(r) === outletName);\n  sortedConfig.push(...routes.filter(r => getOutlet(r) !== outletName));\n  return sortedConfig;\n}\n\n/**\n * Gets the first injector in the snapshot's parent tree.\n *\n * If the `Route` has a static list of providers, the returned injector will be the one created from\n * those. If it does not exist, the returned injector may come from the parents, which may be from a\n * loaded config or their static providers.\n *\n * Returns `null` if there is neither this nor any parents have a stored injector.\n *\n * Generally used for retrieving the injector to use for getting tokens for guards/resolvers and\n * also used for getting the correct injector to use for creating components.\n */\nexport function getClosestRouteInjector(snapshot: ActivatedRouteSnapshot): EnvironmentInjector|\n    null {\n  if (!snapshot) return null;\n\n  // If the current route has its own injector, which is created from the static providers on the\n  // route itself, we should use that. Otherwise, we start at the parent since we do not want to\n  // include the lazy loaded injector from this route.\n  if (snapshot.routeConfig?._injector) {\n    return snapshot.routeConfig._injector;\n  }\n\n  for (let s = snapshot.parent; s; s = s.parent) {\n    const route = s.routeConfig;\n    // Note that the order here is important. `_loadedInjector` stored on the route with\n    // `loadChildren: () => NgModule` so it applies to child routes with priority. The `_injector`\n    // is created from the static providers on that parent route, so it applies to the children as\n    // well, but only if there is no lazy loaded NgModuleRef injector.\n    if (route?._loadedInjector) return route._loadedInjector;\n    if (route?._injector) return route._injector;\n  }\n\n  return null;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {MonoTypeOperatorFunction} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {ActivationEnd, ChildActivationEnd, Event} from '../events';\nimport {NavigationTransition} from '../navigation_transition';\nimport {DetachedRouteHandleInternal, RouteReuseStrategy} from '../route_reuse_strategy';\nimport {ChildrenOutletContexts} from '../router_outlet_context';\nimport {ActivatedRoute, advanceActivatedRoute, RouterState} from '../router_state';\nimport {getClosestRouteInjector} from '../utils/config';\nimport {nodeChildrenAsMap, TreeNode} from '../utils/tree';\n\nlet warnedAboutUnsupportedInputBinding = false;\n\nexport const activateRoutes =\n    (rootContexts: ChildrenOutletContexts, routeReuseStrategy: RouteReuseStrategy,\n     forwardEvent: (evt: Event) => void,\n     inputBindingEnabled: boolean): MonoTypeOperatorFunction<NavigationTransition> => map(t => {\n      new ActivateRoutes(\n          routeReuseStrategy, t.targetRouterState!, t.currentRouterState, forwardEvent,\n          inputBindingEnabled)\n          .activate(rootContexts);\n      return t;\n    });\n\nexport class ActivateRoutes {\n  constructor(\n      private routeReuseStrategy: RouteReuseStrategy, private futureState: RouterState,\n      private currState: RouterState, private forwardEvent: (evt: Event) => void,\n      private inputBindingEnabled: boolean) {}\n\n  activate(parentContexts: ChildrenOutletContexts): void {\n    const futureRoot = this.futureState._root;\n    const currRoot = this.currState ? this.currState._root : null;\n\n    this.deactivateChildRoutes(futureRoot, currRoot, parentContexts);\n    advanceActivatedRoute(this.futureState.root);\n    this.activateChildRoutes(futureRoot, currRoot, parentContexts);\n  }\n\n  // De-activate the child route that are not re-used for the future state\n  private deactivateChildRoutes(\n      futureNode: TreeNode<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>|null,\n      contexts: ChildrenOutletContexts): void {\n    const children: {[outletName: string]: TreeNode<ActivatedRoute>} = nodeChildrenAsMap(currNode);\n\n    // Recurse on the routes active in the future state to de-activate deeper children\n    futureNode.children.forEach(futureChild => {\n      const childOutletName = futureChild.value.outlet;\n      this.deactivateRoutes(futureChild, children[childOutletName], contexts);\n      delete children[childOutletName];\n    });\n\n    // De-activate the routes that will not be re-used\n    Object.values(children).forEach((v: TreeNode<ActivatedRoute>) => {\n      this.deactivateRouteAndItsChildren(v, contexts);\n    });\n  }\n\n  private deactivateRoutes(\n      futureNode: TreeNode<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>,\n      parentContext: ChildrenOutletContexts): void {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n\n    if (future === curr) {\n      // Reusing the node, check to see if the children need to be de-activated\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContext.getContext(future.outlet);\n        if (context) {\n          this.deactivateChildRoutes(futureNode, currNode, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.deactivateChildRoutes(futureNode, currNode, parentContext);\n      }\n    } else {\n      if (curr) {\n        // Deactivate the current route which will not be re-used\n        this.deactivateRouteAndItsChildren(currNode, parentContext);\n      }\n    }\n  }\n\n  private deactivateRouteAndItsChildren(\n      route: TreeNode<ActivatedRoute>, parentContexts: ChildrenOutletContexts): void {\n    // If there is no component, the Route is never attached to an outlet (because there is no\n    // component to attach).\n    if (route.value.component && this.routeReuseStrategy.shouldDetach(route.value.snapshot)) {\n      this.detachAndStoreRouteSubtree(route, parentContexts);\n    } else {\n      this.deactivateRouteAndOutlet(route, parentContexts);\n    }\n  }\n\n  private detachAndStoreRouteSubtree(\n      route: TreeNode<ActivatedRoute>, parentContexts: ChildrenOutletContexts): void {\n    const context = parentContexts.getContext(route.value.outlet);\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children: {[outletName: string]: TreeNode<ActivatedRoute>} = nodeChildrenAsMap(route);\n\n    for (const childOutlet of Object.keys(children)) {\n      this.deactivateRouteAndItsChildren(children[childOutlet], contexts);\n    }\n\n    if (context && context.outlet) {\n      const componentRef = context.outlet.detach();\n      const contexts = context.children.onOutletDeactivated();\n      this.routeReuseStrategy.store(route.value.snapshot, {componentRef, route, contexts});\n    }\n  }\n\n  private deactivateRouteAndOutlet(\n      route: TreeNode<ActivatedRoute>, parentContexts: ChildrenOutletContexts): void {\n    const context = parentContexts.getContext(route.value.outlet);\n    // The context could be `null` if we are on a componentless route but there may still be\n    // children that need deactivating.\n    const contexts = context && route.value.component ? context.children : parentContexts;\n    const children: {[outletName: string]: TreeNode<ActivatedRoute>} = nodeChildrenAsMap(route);\n\n    for (const childOutlet of Object.keys(children)) {\n      this.deactivateRouteAndItsChildren(children[childOutlet], contexts);\n    }\n\n    if (context) {\n      if (context.outlet) {\n        // Destroy the component\n        context.outlet.deactivate();\n        // Destroy the contexts for all the outlets that were in the component\n        context.children.onOutletDeactivated();\n      }\n      // Clear the information about the attached component on the context but keep the reference to\n      // the outlet. Clear even if outlet was not yet activated to avoid activating later with old\n      // info\n      context.attachRef = null;\n      context.route = null;\n    }\n  }\n\n  private activateChildRoutes(\n      futureNode: TreeNode<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>|null,\n      contexts: ChildrenOutletContexts): void {\n    const children: {[outlet: string]: TreeNode<ActivatedRoute>} = nodeChildrenAsMap(currNode);\n    futureNode.children.forEach(c => {\n      this.activateRoutes(c, children[c.value.outlet], contexts);\n      this.forwardEvent(new ActivationEnd(c.value.snapshot));\n    });\n    if (futureNode.children.length) {\n      this.forwardEvent(new ChildActivationEnd(futureNode.value.snapshot));\n    }\n  }\n\n  private activateRoutes(\n      futureNode: TreeNode<ActivatedRoute>, currNode: TreeNode<ActivatedRoute>,\n      parentContexts: ChildrenOutletContexts): void {\n    const future = futureNode.value;\n    const curr = currNode ? currNode.value : null;\n\n    advanceActivatedRoute(future);\n\n    // reusing the node\n    if (future === curr) {\n      if (future.component) {\n        // If we have a normal route, we need to go through an outlet.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n        this.activateChildRoutes(futureNode, currNode, context.children);\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, currNode, parentContexts);\n      }\n    } else {\n      if (future.component) {\n        // if we have a normal route, we need to place the component into the outlet and recurse.\n        const context = parentContexts.getOrCreateContext(future.outlet);\n\n        if (this.routeReuseStrategy.shouldAttach(future.snapshot)) {\n          const stored =\n              (<DetachedRouteHandleInternal>this.routeReuseStrategy.retrieve(future.snapshot));\n          this.routeReuseStrategy.store(future.snapshot, null);\n          context.children.onOutletReAttached(stored.contexts);\n          context.attachRef = stored.componentRef;\n          context.route = stored.route.value;\n          if (context.outlet) {\n            // Attach right away when the outlet has already been instantiated\n            // Otherwise attach from `RouterOutlet.ngOnInit` when it is instantiated\n            context.outlet.attach(stored.componentRef, stored.route.value);\n          }\n\n          advanceActivatedRoute(stored.route.value);\n          this.activateChildRoutes(futureNode, null, context.children);\n        } else {\n          const injector = getClosestRouteInjector(future.snapshot);\n          context.attachRef = null;\n          context.route = future;\n          context.injector = injector;\n          if (context.outlet) {\n            // Activate the outlet when it has already been instantiated\n            // Otherwise it will get activated from its `ngOnInit` when instantiated\n            context.outlet.activateWith(future, context.injector);\n          }\n\n          this.activateChildRoutes(futureNode, null, context.children);\n        }\n      } else {\n        // if we have a componentless route, we recurse but keep the same outlet map.\n        this.activateChildRoutes(futureNode, null, parentContexts);\n      }\n    }\n    if ((typeof ngDevMode === 'undefined' || ngDevMode)) {\n      const context = parentContexts.getOrCreateContext(future.outlet);\n      const outlet = context.outlet;\n      if (outlet && this.inputBindingEnabled && !outlet.supportsBindingToComponentInputs &&\n          !warnedAboutUnsupportedInputBinding) {\n        console.warn(\n            `'withComponentInputBinding' feature is enabled but ` +\n            `this application is using an outlet that may not support binding to component inputs.`);\n        warnedAboutUnsupportedInputBinding = true;\n      }\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Injector, ProviderToken, ɵisInjectable as isInjectable} from '@angular/core';\n\nimport {RunGuardsAndResolvers} from '../models';\nimport {ChildrenOutletContexts, OutletContext} from '../router_outlet_context';\nimport {ActivatedRouteSnapshot, equalParamsAndUrlSegments, RouterStateSnapshot} from '../router_state';\nimport {equalPath} from '../url_tree';\nimport {shallowEqual} from '../utils/collection';\nimport {nodeChildrenAsMap, TreeNode} from '../utils/tree';\n\nexport class CanActivate {\n  readonly route: ActivatedRouteSnapshot;\n  constructor(public path: ActivatedRouteSnapshot[]) {\n    this.route = this.path[this.path.length - 1];\n  }\n}\n\nexport class CanDeactivate {\n  constructor(public component: Object|null, public route: ActivatedRouteSnapshot) {}\n}\n\nexport declare type Checks = {\n  canDeactivateChecks: CanDeactivate[],\n  canActivateChecks: CanActivate[],\n};\n\nexport function getAllRouteGuards(\n    future: RouterStateSnapshot, curr: RouterStateSnapshot,\n    parentContexts: ChildrenOutletContexts) {\n  const futureRoot = future._root;\n  const currRoot = curr ? curr._root : null;\n\n  return getChildRouteGuards(futureRoot, currRoot, parentContexts, [futureRoot.value]);\n}\n\nexport function getCanActivateChild(p: ActivatedRouteSnapshot):\n    {node: ActivatedRouteSnapshot, guards: any[]}|null {\n  const canActivateChild = p.routeConfig ? p.routeConfig.canActivateChild : null;\n  if (!canActivateChild || canActivateChild.length === 0) return null;\n  return {node: p, guards: canActivateChild};\n}\n\nexport function getTokenOrFunctionIdentity<T>(\n    tokenOrFunction: Function|ProviderToken<T>, injector: Injector): Function|T {\n  const NOT_FOUND = Symbol();\n  const result = injector.get<T|Symbol>(tokenOrFunction, NOT_FOUND);\n  if (result === NOT_FOUND) {\n    if (typeof tokenOrFunction === 'function' && !isInjectable(tokenOrFunction)) {\n      // We think the token is just a function so return it as-is\n      return tokenOrFunction;\n    } else {\n      // This will throw the not found error\n      return injector.get<T>(tokenOrFunction);\n    }\n  }\n  return result as T;\n}\n\nfunction getChildRouteGuards(\n    futureNode: TreeNode<ActivatedRouteSnapshot>, currNode: TreeNode<ActivatedRouteSnapshot>|null,\n    contexts: ChildrenOutletContexts|null, futurePath: ActivatedRouteSnapshot[], checks: Checks = {\n      canDeactivateChecks: [],\n      canActivateChecks: []\n    }): Checks {\n  const prevChildren = nodeChildrenAsMap(currNode);\n\n  // Process the children of the future route\n  futureNode.children.forEach(c => {\n    getRouteGuards(c, prevChildren[c.value.outlet], contexts, futurePath.concat([c.value]), checks);\n    delete prevChildren[c.value.outlet];\n  });\n\n  // Process any children left from the current route (not active for the future route)\n  Object.entries(prevChildren)\n      .forEach(\n          ([k, v]: [string, TreeNode<ActivatedRouteSnapshot>]) =>\n              deactivateRouteAndItsChildren(v, contexts!.getContext(k), checks));\n\n  return checks;\n}\n\nfunction getRouteGuards(\n    futureNode: TreeNode<ActivatedRouteSnapshot>, currNode: TreeNode<ActivatedRouteSnapshot>,\n    parentContexts: ChildrenOutletContexts|null, futurePath: ActivatedRouteSnapshot[],\n    checks: Checks = {\n      canDeactivateChecks: [],\n      canActivateChecks: []\n    }): Checks {\n  const future = futureNode.value;\n  const curr = currNode ? currNode.value : null;\n  const context = parentContexts ? parentContexts.getContext(futureNode.value.outlet) : null;\n\n  // reusing the node\n  if (curr && future.routeConfig === curr.routeConfig) {\n    const shouldRun =\n        shouldRunGuardsAndResolvers(curr, future, future.routeConfig!.runGuardsAndResolvers);\n    if (shouldRun) {\n      checks.canActivateChecks.push(new CanActivate(futurePath));\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      getChildRouteGuards(\n          futureNode, currNode, context ? context.children : null, futurePath, checks);\n\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, currNode, parentContexts, futurePath, checks);\n    }\n\n    if (shouldRun && context && context.outlet && context.outlet.isActivated) {\n      checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, curr));\n    }\n  } else {\n    if (curr) {\n      deactivateRouteAndItsChildren(currNode, context, checks);\n    }\n\n    checks.canActivateChecks.push(new CanActivate(futurePath));\n    // If we have a component, we need to go through an outlet.\n    if (future.component) {\n      getChildRouteGuards(futureNode, null, context ? context.children : null, futurePath, checks);\n\n      // if we have a componentless route, we recurse but keep the same outlet map.\n    } else {\n      getChildRouteGuards(futureNode, null, parentContexts, futurePath, checks);\n    }\n  }\n\n  return checks;\n}\n\nfunction shouldRunGuardsAndResolvers(\n    curr: ActivatedRouteSnapshot, future: ActivatedRouteSnapshot,\n    mode: RunGuardsAndResolvers|undefined): boolean {\n  if (typeof mode === 'function') {\n    return mode(curr, future);\n  }\n  switch (mode) {\n    case 'pathParamsChange':\n      return !equalPath(curr.url, future.url);\n\n    case 'pathParamsOrQueryParamsChange':\n      return !equalPath(curr.url, future.url) ||\n          !shallowEqual(curr.queryParams, future.queryParams);\n\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\nfunction deactivateRouteAndItsChildren(\n    route: TreeNode<ActivatedRouteSnapshot>, context: OutletContext|null, checks: Checks): void {\n  const children = nodeChildrenAsMap(route);\n  const r = route.value;\n\n  Object.entries(children).forEach(([childName, node]) => {\n    if (!r.component) {\n      deactivateRouteAndItsChildren(node, context, checks);\n    } else if (context) {\n      deactivateRouteAndItsChildren(node, context.children.getContext(childName), checks);\n    } else {\n      deactivateRouteAndItsChildren(node, null, checks);\n    }\n  });\n\n  if (!r.component) {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  } else if (context && context.outlet && context.outlet.isActivated) {\n    checks.canDeactivateChecks.push(new CanDeactivate(context.outlet.component, r));\n  } else {\n    checks.canDeactivateChecks.push(new CanDeactivate(null, r));\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {EmptyError} from 'rxjs';\n\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanLoadFn, CanMatchFn} from '../models';\nimport {NAVIGATION_CANCELING_ERROR, NavigationCancelingError, RedirectingNavigationCancelingError} from '../navigation_canceling_error';\nimport {isUrlTree} from '../url_tree';\n\n/**\n * Simple function check, but generic so type inference will flow. Example:\n *\n * function product(a: number, b: number) {\n *   return a * b;\n * }\n *\n * if (isFunction<product>(fn)) {\n *   return fn(1, 2);\n * } else {\n *   throw \"Must provide the `product` function\";\n * }\n */\nexport function isFunction<T>(v: any): v is T {\n  return typeof v === 'function';\n}\n\nexport function isBoolean(v: any): v is boolean {\n  return typeof v === 'boolean';\n}\n\nexport function isCanLoad(guard: any): guard is {canLoad: CanLoadFn} {\n  return guard && isFunction<CanLoadFn>(guard.canLoad);\n}\n\nexport function isCanActivate(guard: any): guard is {canActivate: CanActivateFn} {\n  return guard && isFunction<CanActivateFn>(guard.canActivate);\n}\n\nexport function isCanActivateChild(guard: any): guard is {canActivateChild: CanActivateChildFn} {\n  return guard && isFunction<CanActivateChildFn>(guard.canActivateChild);\n}\n\nexport function isCanDeactivate<T>(guard: any): guard is {canDeactivate: CanDeactivateFn<T>} {\n  return guard && isFunction<CanDeactivateFn<T>>(guard.canDeactivate);\n}\nexport function isCanMatch(guard: any): guard is {canMatch: CanMatchFn} {\n  return guard && isFunction<CanMatchFn>(guard.canMatch);\n}\n\nexport function isRedirectingNavigationCancelingError(\n    error: unknown|\n    RedirectingNavigationCancelingError): error is RedirectingNavigationCancelingError {\n  return isNavigationCancelingError(error) && isUrlTree((error as any).url);\n}\n\nexport function isNavigationCancelingError(error: unknown): error is NavigationCancelingError {\n  return error && (error as any)[NAVIGATION_CANCELING_ERROR];\n}\n\nexport function isEmptyError(e: Error): e is EmptyError {\n  return e instanceof EmptyError || e?.name === 'EmptyError';\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {combineLatest, Observable, OperatorFunction} from 'rxjs';\nimport {filter, map, startWith, switchMap, take} from 'rxjs/operators';\n\nimport {UrlTree} from '../url_tree';\n\nconst INITIAL_VALUE = /* @__PURE__ */ Symbol('INITIAL_VALUE');\ndeclare type INTERIM_VALUES = typeof INITIAL_VALUE | boolean | UrlTree;\n\nexport function prioritizedGuardValue():\n    OperatorFunction<Observable<boolean|UrlTree>[], boolean|UrlTree> {\n  return switchMap(obs => {\n    return combineLatest(obs.map(o => o.pipe(take(1), startWith(INITIAL_VALUE as INTERIM_VALUES))))\n        .pipe(\n            map((results: INTERIM_VALUES[]) => {\n              for (const result of results) {\n                if (result === true) {\n                  // If result is true, check the next one\n                  continue;\n                } else if (result === INITIAL_VALUE) {\n                  // If guard has not finished, we need to stop processing.\n                  return INITIAL_VALUE;\n                } else if (result === false || result instanceof UrlTree) {\n                  // Result finished and was not true. Return the result.\n                  // Note that we only allow false/UrlTree. Other values are considered invalid and\n                  // ignored.\n                  return result;\n                }\n              }\n              // Everything resolved to true. Return true.\n              return true;\n            }),\n            filter((item): item is boolean|UrlTree => item !== INITIAL_VALUE),\n            take(1),\n        );\n  });\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {EnvironmentInjector, ProviderToken, runInInjectionContext} from '@angular/core';\nimport {concat, defer, from, MonoTypeOperatorFunction, Observable, of, OperatorFunction, pipe} from 'rxjs';\nimport {concatMap, first, map, mergeMap, tap} from 'rxjs/operators';\n\nimport {ActivationStart, ChildActivationStart, Event} from '../events';\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanLoadFn, CanMatchFn, Route} from '../models';\nimport {redirectingNavigationError} from '../navigation_canceling_error';\nimport {NavigationTransition} from '../navigation_transition';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from '../router_state';\nimport {isUrlTree, UrlSegment, UrlSerializer, UrlTree} from '../url_tree';\nimport {wrapIntoObservable} from '../utils/collection';\nimport {getClosestRouteInjector} from '../utils/config';\nimport {CanActivate, CanDeactivate, getCanActivateChild, getTokenOrFunctionIdentity} from '../utils/preactivation';\nimport {isBoolean, isCanActivate, isCanActivateChild, isCanDeactivate, isCanLoad, isCanMatch} from '../utils/type_guards';\n\nimport {prioritizedGuardValue} from './prioritized_guard_value';\n\nexport function checkGuards(injector: EnvironmentInjector, forwardEvent?: (evt: Event) => void):\n    MonoTypeOperatorFunction<NavigationTransition> {\n  return mergeMap(t => {\n    const {targetSnapshot, currentSnapshot, guards: {canActivateChecks, canDeactivateChecks}} = t;\n    if (canDeactivateChecks.length === 0 && canActivateChecks.length === 0) {\n      return of({...t, guardsResult: true});\n    }\n\n    return runCanDeactivateChecks(canDeactivateChecks, targetSnapshot!, currentSnapshot, injector)\n        .pipe(\n            mergeMap(canDeactivate => {\n              return canDeactivate && isBoolean(canDeactivate) ?\n                  runCanActivateChecks(targetSnapshot!, canActivateChecks, injector, forwardEvent) :\n                  of(canDeactivate);\n            }),\n            map(guardsResult => ({...t, guardsResult})));\n  });\n}\n\nfunction runCanDeactivateChecks(\n    checks: CanDeactivate[], futureRSS: RouterStateSnapshot, currRSS: RouterStateSnapshot,\n    injector: EnvironmentInjector) {\n  return from(checks).pipe(\n      mergeMap(\n          check => runCanDeactivate(check.component, check.route, currRSS, futureRSS, injector)),\n      first(result => {\n        return result !== true;\n      }, true as boolean | UrlTree));\n}\n\nfunction runCanActivateChecks(\n    futureSnapshot: RouterStateSnapshot, checks: CanActivate[], injector: EnvironmentInjector,\n    forwardEvent?: (evt: Event) => void) {\n  return from(checks).pipe(\n      concatMap((check: CanActivate) => {\n        return concat(\n            fireChildActivationStart(check.route.parent, forwardEvent),\n            fireActivationStart(check.route, forwardEvent),\n            runCanActivateChild(futureSnapshot, check.path, injector),\n            runCanActivate(futureSnapshot, check.route, injector));\n      }),\n      first(result => {\n        return result !== true;\n      }, true as boolean | UrlTree));\n}\n\n/**\n * This should fire off `ActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireActivationStart(\n    snapshot: ActivatedRouteSnapshot|null,\n    forwardEvent?: (evt: Event) => void): Observable<boolean> {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ActivationStart(snapshot));\n  }\n  return of(true);\n}\n\n/**\n * This should fire off `ChildActivationStart` events for each route being activated at this\n * level.\n * In other words, if you're activating `a` and `b` below, `path` will contain the\n * `ActivatedRouteSnapshot`s for both and we will fire `ChildActivationStart` for both. Always\n * return\n * `true` so checks continue to run.\n */\nfunction fireChildActivationStart(\n    snapshot: ActivatedRouteSnapshot|null,\n    forwardEvent?: (evt: Event) => void): Observable<boolean> {\n  if (snapshot !== null && forwardEvent) {\n    forwardEvent(new ChildActivationStart(snapshot));\n  }\n  return of(true);\n}\n\nfunction runCanActivate(\n    futureRSS: RouterStateSnapshot, futureARS: ActivatedRouteSnapshot,\n    injector: EnvironmentInjector): Observable<boolean|UrlTree> {\n  const canActivate = futureARS.routeConfig ? futureARS.routeConfig.canActivate : null;\n  if (!canActivate || canActivate.length === 0) return of(true);\n\n  const canActivateObservables =\n      canActivate.map((canActivate: CanActivateFn|ProviderToken<unknown>) => {\n        return defer(() => {\n          const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n          const guard = getTokenOrFunctionIdentity<CanActivate>(canActivate, closestInjector);\n          const guardVal = isCanActivate(guard) ?\n              guard.canActivate(futureARS, futureRSS) :\n              runInInjectionContext(\n                  closestInjector, () => (guard as CanActivateFn)(futureARS, futureRSS));\n          return wrapIntoObservable(guardVal).pipe(first());\n        });\n      });\n  return of(canActivateObservables).pipe(prioritizedGuardValue());\n}\n\nfunction runCanActivateChild(\n    futureRSS: RouterStateSnapshot, path: ActivatedRouteSnapshot[],\n    injector: EnvironmentInjector): Observable<boolean|UrlTree> {\n  const futureARS = path[path.length - 1];\n\n  const canActivateChildGuards = path.slice(0, path.length - 1)\n                                     .reverse()\n                                     .map(p => getCanActivateChild(p))\n                                     .filter(_ => _ !== null);\n\n  const canActivateChildGuardsMapped = canActivateChildGuards.map((d: any) => {\n    return defer(() => {\n      const guardsMapped =\n          d.guards.map((canActivateChild: CanActivateChildFn|ProviderToken<unknown>) => {\n            const closestInjector = getClosestRouteInjector(d.node) ?? injector;\n            const guard = getTokenOrFunctionIdentity<{canActivateChild: CanActivateChildFn}>(\n                canActivateChild, closestInjector);\n            const guardVal = isCanActivateChild(guard) ?\n                guard.canActivateChild(futureARS, futureRSS) :\n                runInInjectionContext(\n                    closestInjector, () => (guard as CanActivateChildFn)(futureARS, futureRSS));\n            return wrapIntoObservable(guardVal).pipe(first());\n          });\n      return of(guardsMapped).pipe(prioritizedGuardValue());\n    });\n  });\n  return of(canActivateChildGuardsMapped).pipe(prioritizedGuardValue());\n}\n\nfunction runCanDeactivate(\n    component: Object|null, currARS: ActivatedRouteSnapshot, currRSS: RouterStateSnapshot,\n    futureRSS: RouterStateSnapshot, injector: EnvironmentInjector): Observable<boolean|UrlTree> {\n  const canDeactivate = currARS && currARS.routeConfig ? currARS.routeConfig.canDeactivate : null;\n  if (!canDeactivate || canDeactivate.length === 0) return of(true);\n  const canDeactivateObservables = canDeactivate.map((c: any) => {\n    const closestInjector = getClosestRouteInjector(currARS) ?? injector;\n    const guard = getTokenOrFunctionIdentity<any>(c, closestInjector);\n    const guardVal = isCanDeactivate(guard) ?\n        guard.canDeactivate(component, currARS, currRSS, futureRSS) :\n        runInInjectionContext(\n            closestInjector,\n            () => (guard as CanDeactivateFn<any>)(component, currARS, currRSS, futureRSS));\n    return wrapIntoObservable(guardVal).pipe(first());\n  });\n  return of(canDeactivateObservables).pipe(prioritizedGuardValue());\n}\n\nexport function runCanLoadGuards(\n    injector: EnvironmentInjector, route: Route, segments: UrlSegment[],\n    urlSerializer: UrlSerializer): Observable<boolean> {\n  const canLoad = route.canLoad;\n  if (canLoad === undefined || canLoad.length === 0) {\n    return of(true);\n  }\n\n  const canLoadObservables = canLoad.map((injectionToken: any) => {\n    const guard = getTokenOrFunctionIdentity<any>(injectionToken, injector);\n    const guardVal = isCanLoad(guard) ?\n        guard.canLoad(route, segments) :\n        runInInjectionContext(injector, () => (guard as CanLoadFn)(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n\n  return of(canLoadObservables)\n      .pipe(\n          prioritizedGuardValue(),\n          redirectIfUrlTree(urlSerializer),\n      );\n}\n\nfunction redirectIfUrlTree(urlSerializer: UrlSerializer):\n    OperatorFunction<UrlTree|boolean, boolean> {\n  return pipe(\n      tap((result: UrlTree|boolean) => {\n        if (!isUrlTree(result)) return;\n\n        throw redirectingNavigationError(urlSerializer, result);\n      }),\n      map(result => result === true),\n  );\n}\n\nexport function runCanMatchGuards(\n    injector: EnvironmentInjector, route: Route, segments: UrlSegment[],\n    urlSerializer: UrlSerializer): Observable<boolean> {\n  const canMatch = route.canMatch;\n  if (!canMatch || canMatch.length === 0) return of(true);\n\n  const canMatchObservables = canMatch.map(injectionToken => {\n    const guard = getTokenOrFunctionIdentity(injectionToken, injector);\n    const guardVal = isCanMatch(guard) ?\n        guard.canMatch(route, segments) :\n        runInInjectionContext(injector, () => (guard as CanMatchFn)(route, segments));\n    return wrapIntoObservable(guardVal);\n  });\n\n  return of(canMatchObservables)\n      .pipe(\n          prioritizedGuardValue(),\n          redirectIfUrlTree(urlSerializer),\n      );\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {Observable, of, throwError} from 'rxjs';\n\nimport {RuntimeErrorCode} from './errors';\nimport {NavigationCancellationCode} from './events';\nimport {LoadedRouterConfig, Route} from './models';\nimport {navigationCancelingError} from './navigation_canceling_error';\nimport {Params, PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\n\n\nexport class NoMatch {\n  public segmentGroup: UrlSegmentGroup|null;\n\n  constructor(segmentGroup?: UrlSegmentGroup) {\n    this.segmentGroup = segmentGroup || null;\n  }\n}\n\nexport class AbsoluteRedirect extends Error {\n  constructor(public urlTree: UrlTree) {\n    super();\n  }\n}\n\nexport function noMatch(segmentGroup: UrlSegmentGroup): Observable<any> {\n  return throwError(new NoMatch(segmentGroup));\n}\n\nexport function absoluteRedirect(newTree: UrlTree): Observable<any> {\n  return throwError(new AbsoluteRedirect(newTree));\n}\n\nexport function namedOutletsRedirect(redirectTo: string): Observable<any> {\n  return throwError(new RuntimeError(\n      RuntimeErrorCode.NAMED_OUTLET_REDIRECT,\n      (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `Only absolute redirects can have named outlets. redirectTo: '${redirectTo}'`));\n}\n\nexport function canLoadFails(route: Route): Observable<LoadedRouterConfig> {\n  return throwError(navigationCancelingError(\n      (typeof ngDevMode === 'undefined' || ngDevMode) &&\n          `Cannot load children because the guard of the route \"path: '${\n              route.path}'\" returned false`,\n      NavigationCancellationCode.GuardRejected));\n}\n\n\nexport class ApplyRedirects {\n  constructor(private urlSerializer: UrlSerializer, private urlTree: UrlTree) {}\n\n  lineralizeSegments(route: Route, urlTree: UrlTree): Observable<UrlSegment[]> {\n    let res: UrlSegment[] = [];\n    let 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  applyRedirectCommands(\n      segments: UrlSegment[], redirectTo: string, posParams: {[k: string]: UrlSegment}): UrlTree {\n    const newTree = this.applyRedirectCreateUrlTree(\n        redirectTo, this.urlSerializer.parse(redirectTo), segments, posParams);\n    if (redirectTo.startsWith('/')) {\n      throw new AbsoluteRedirect(newTree);\n    }\n    return newTree;\n  }\n\n  applyRedirectCreateUrlTree(\n      redirectTo: string, urlTree: UrlTree, segments: UrlSegment[],\n      posParams: {[k: string]: UrlSegment}): UrlTree {\n    const 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  createQueryParams(redirectToParams: Params, actualParams: Params): Params {\n    const res: Params = {};\n    Object.entries(redirectToParams).forEach(([k, v]) => {\n      const copySourceValue = typeof v === 'string' && v.startsWith(':');\n      if (copySourceValue) {\n        const sourceName = v.substring(1);\n        res[k] = actualParams[sourceName];\n      } else {\n        res[k] = v;\n      }\n    });\n    return res;\n  }\n\n  createSegmentGroup(\n      redirectTo: string, group: UrlSegmentGroup, segments: UrlSegment[],\n      posParams: {[k: string]: UrlSegment}): UrlSegmentGroup {\n    const updatedSegments = this.createSegments(redirectTo, group.segments, segments, posParams);\n\n    let children: {[n: string]: UrlSegmentGroup} = {};\n    Object.entries(group.children).forEach(([name, child]) => {\n      children[name] = this.createSegmentGroup(redirectTo, child, segments, posParams);\n    });\n\n    return new UrlSegmentGroup(updatedSegments, children);\n  }\n\n  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  findPosParam(\n      redirectTo: string, redirectToUrlSegment: UrlSegment,\n      posParams: {[k: string]: UrlSegment}): UrlSegment {\n    const pos = posParams[redirectToUrlSegment.path.substring(1)];\n    if (!pos)\n      throw new RuntimeError(\n          RuntimeErrorCode.MISSING_REDIRECT,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              `Cannot redirect to '${redirectTo}'. Cannot find '${redirectToUrlSegment.path}'.`);\n    return pos;\n  }\n\n  findOrReturn(redirectToUrlSegment: UrlSegment, actualSegments: UrlSegment[]): UrlSegment {\n    let idx = 0;\n    for (const 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","/**\n * @license\n * Copyright Google LLC 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\nimport {EnvironmentInjector} from '@angular/core';\nimport {Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\nimport {Route} from '../models';\nimport {runCanMatchGuards} from '../operators/check_guards';\nimport {defaultUrlMatcher, PRIMARY_OUTLET} from '../shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer} from '../url_tree';\n\nimport {last} from './collection';\nimport {getOrCreateRouteInjectorIfNeeded, getOutlet} from './config';\n\nexport interface MatchResult {\n  matched: boolean;\n  consumedSegments: UrlSegment[];\n  remainingSegments: UrlSegment[];\n  parameters: {[k: string]: string};\n  positionalParamSegments: {[k: string]: UrlSegment};\n}\n\nconst noMatch: MatchResult = {\n  matched: false,\n  consumedSegments: [],\n  remainingSegments: [],\n  parameters: {},\n  positionalParamSegments: {}\n};\n\nexport function matchWithChecks(\n    segmentGroup: UrlSegmentGroup, route: Route, segments: UrlSegment[],\n    injector: EnvironmentInjector, urlSerializer: UrlSerializer): Observable<MatchResult> {\n  const result = match(segmentGroup, route, segments);\n  if (!result.matched) {\n    return of(result);\n  }\n\n  // Only create the Route's `EnvironmentInjector` if it matches the attempted\n  // navigation\n  injector = getOrCreateRouteInjectorIfNeeded(route, injector);\n  return runCanMatchGuards(injector, route, segments, urlSerializer)\n      .pipe(\n          map((v) => v === true ? result : {...noMatch}),\n      );\n}\n\nexport function match(\n    segmentGroup: UrlSegmentGroup, route: Route, segments: UrlSegment[]): MatchResult {\n  if (route.path === '**') {\n    return createWildcardMatchResult(segments);\n  }\n\n  if (route.path === '') {\n    if (route.pathMatch === 'full' && (segmentGroup.hasChildren() || segments.length > 0)) {\n      return {...noMatch};\n    }\n\n    return {\n      matched: true,\n      consumedSegments: [],\n      remainingSegments: segments,\n      parameters: {},\n      positionalParamSegments: {}\n    };\n  }\n\n  const matcher = route.matcher || defaultUrlMatcher;\n  const res = matcher(segments, segmentGroup, route);\n  if (!res) return {...noMatch};\n\n  const posParams: {[n: string]: string} = {};\n  Object.entries(res.posParams ?? {}).forEach(([k, v]) => {\n    posParams[k] = v.path;\n  });\n  const parameters = res.consumed.length > 0 ?\n      {...posParams, ...res.consumed[res.consumed.length - 1].parameters} :\n      posParams;\n\n  return {\n    matched: true,\n    consumedSegments: res.consumed,\n    remainingSegments: segments.slice(res.consumed.length),\n    // TODO(atscott): investigate combining parameters and positionalParamSegments\n    parameters,\n    positionalParamSegments: res.posParams ?? {}\n  };\n}\n\nfunction createWildcardMatchResult(segments: UrlSegment[]): MatchResult {\n  return {\n    matched: true,\n    parameters: segments.length > 0 ? last(segments)!.parameters : {},\n    consumedSegments: segments,\n    remainingSegments: [],\n    positionalParamSegments: {},\n  };\n}\n\nexport function split(\n    segmentGroup: UrlSegmentGroup, consumedSegments: UrlSegment[], slicedSegments: UrlSegment[],\n    config: Route[]) {\n  if (slicedSegments.length > 0 &&\n      containsEmptyPathMatchesWithNamedOutlets(segmentGroup, slicedSegments, config)) {\n    const s = new UrlSegmentGroup(\n        consumedSegments,\n        createChildrenForEmptyPaths(\n            config, new UrlSegmentGroup(slicedSegments, segmentGroup.children)));\n    return {segmentGroup: s, slicedSegments: []};\n  }\n\n  if (slicedSegments.length === 0 &&\n      containsEmptyPathMatches(segmentGroup, slicedSegments, config)) {\n    const s = new UrlSegmentGroup(\n        segmentGroup.segments,\n        addEmptyPathsToChildrenIfNeeded(\n            segmentGroup, consumedSegments, slicedSegments, config, segmentGroup.children));\n    return {segmentGroup: s, slicedSegments};\n  }\n\n  const s = new UrlSegmentGroup(segmentGroup.segments, segmentGroup.children);\n  return {segmentGroup: s, slicedSegments};\n}\n\nfunction addEmptyPathsToChildrenIfNeeded(\n    segmentGroup: UrlSegmentGroup, consumedSegments: UrlSegment[], slicedSegments: UrlSegment[],\n    routes: Route[],\n    children: {[name: string]: UrlSegmentGroup}): {[name: string]: UrlSegmentGroup} {\n  const res: {[name: string]: UrlSegmentGroup} = {};\n  for (const r of routes) {\n    if (emptyPathMatch(segmentGroup, slicedSegments, r) && !children[getOutlet(r)]) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return {...children, ...res};\n}\n\nfunction createChildrenForEmptyPaths(\n    routes: Route[], primarySegment: UrlSegmentGroup): {[name: string]: UrlSegmentGroup} {\n  const res: {[name: string]: UrlSegmentGroup} = {};\n  res[PRIMARY_OUTLET] = primarySegment;\n\n  for (const r of routes) {\n    if (r.path === '' && getOutlet(r) !== PRIMARY_OUTLET) {\n      const s = new UrlSegmentGroup([], {});\n      res[getOutlet(r)] = s;\n    }\n  }\n  return res;\n}\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\nfunction containsEmptyPathMatches(\n    segmentGroup: UrlSegmentGroup, slicedSegments: UrlSegment[], routes: Route[]): boolean {\n  return routes.some(r => emptyPathMatch(segmentGroup, slicedSegments, r));\n}\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 === '';\n}\n\n/**\n * Determines if `route` is a path match for the `rawSegment`, `segments`, and `outlet` without\n * verifying that its children are a full match for the remainder of the `rawSegment` children as\n * well.\n */\nexport function isImmediateMatch(\n    route: Route, rawSegment: UrlSegmentGroup, segments: UrlSegment[], outlet: string): boolean {\n  // We allow matches to empty paths when the outlets differ so we can match a url like `/(b:b)` to\n  // a config like\n  // * `{path: '', children: [{path: 'b', outlet: 'b'}]}`\n  // or even\n  // * `{path: '', outlet: 'a', children: [{path: 'b', outlet: 'b'}]`\n  //\n  // The exception here is when the segment outlet is for the primary outlet. This would\n  // result in a match inside the named outlet because all children there are written as primary\n  // outlets. So we need to prevent child named outlet matches in a url like `/b` in a config like\n  // * `{path: '', outlet: 'x' children: [{path: 'b'}]}`\n  // This should only match if the url is `/(x:b)`.\n  if (getOutlet(route) !== outlet &&\n      (outlet === PRIMARY_OUTLET || !emptyPathMatch(rawSegment, segments, route))) {\n    return false;\n  }\n  return match(rawSegment, route, segments).matched;\n}\n\nexport function noLeftoversInUrl(\n    segmentGroup: UrlSegmentGroup, segments: UrlSegment[], outlet: string): boolean {\n  return segments.length === 0 && !segmentGroup.children[outlet];\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {EnvironmentInjector, Type, ɵRuntimeError as RuntimeError} from '@angular/core';\nimport {from, Observable, of} from 'rxjs';\nimport {catchError, concatMap, defaultIfEmpty, first, last, map, mergeMap, scan, switchMap, tap} from 'rxjs/operators';\n\nimport {AbsoluteRedirect, ApplyRedirects, canLoadFails, noMatch, NoMatch} from './apply_redirects';\nimport {createUrlTreeFromSnapshot} from './create_url_tree';\nimport {RuntimeErrorCode} from './errors';\nimport {Data, LoadedRouterConfig, ResolveData, Route, Routes} from './models';\nimport {runCanLoadGuards} from './operators/check_guards';\nimport {RouterConfigLoader} from './router_config_loader';\nimport {ActivatedRouteSnapshot, getInherited, ParamsInheritanceStrategy, RouterStateSnapshot} from './router_state';\nimport {PRIMARY_OUTLET} from './shared';\nimport {UrlSegment, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\nimport {getOutlet, sortByMatchingOutlets} from './utils/config';\nimport {isImmediateMatch, match, matchWithChecks, noLeftoversInUrl, split} from './utils/config_matching';\nimport {TreeNode} from './utils/tree';\nimport {isEmptyError} from './utils/type_guards';\n\n/**\n * Class used to indicate there were no additional route config matches but that all segments of\n * the URL were consumed during matching so the route was URL matched. When this happens, we still\n * try to match child configs in case there are empty path children.\n */\nclass NoLeftoversInUrl {}\n\nexport function recognize(\n    injector: EnvironmentInjector, configLoader: RouterConfigLoader,\n    rootComponentType: Type<any>|null, config: Routes, urlTree: UrlTree,\n    urlSerializer: UrlSerializer,\n    paramsInheritanceStrategy: ParamsInheritanceStrategy =\n        'emptyOnly'): Observable<{state: RouterStateSnapshot, tree: UrlTree}> {\n  return new Recognizer(\n             injector, configLoader, rootComponentType, config, urlTree, paramsInheritanceStrategy,\n             urlSerializer)\n      .recognize();\n}\n\nconst MAX_ALLOWED_REDIRECTS = 31;\n\nexport class Recognizer {\n  private applyRedirects = new ApplyRedirects(this.urlSerializer, this.urlTree);\n  private absoluteRedirectCount = 0;\n  allowRedirects = true;\n\n  constructor(\n      private injector: EnvironmentInjector, private configLoader: RouterConfigLoader,\n      private rootComponentType: Type<any>|null, private config: Routes, private urlTree: UrlTree,\n      private paramsInheritanceStrategy: ParamsInheritanceStrategy,\n      private readonly urlSerializer: UrlSerializer) {}\n\n  private noMatchError(e: NoMatch): RuntimeError<RuntimeErrorCode.NO_MATCH> {\n    return new RuntimeError(\n        RuntimeErrorCode.NO_MATCH,\n        (typeof ngDevMode === 'undefined' || ngDevMode) ?\n            `Cannot match any routes. URL Segment: '${e.segmentGroup}'` :\n            `'${e.segmentGroup}'`);\n  }\n\n  recognize(): Observable<{state: RouterStateSnapshot, tree: UrlTree}> {\n    const rootSegmentGroup = split(this.urlTree.root, [], [], this.config).segmentGroup;\n\n    return this.match(rootSegmentGroup).pipe(map(children => {\n      // Use Object.freeze to prevent readers of the Router state from modifying it outside\n      // of a navigation, resulting in the router being out of sync with the browser.\n      const root = new ActivatedRouteSnapshot(\n          [], Object.freeze({}), Object.freeze({...this.urlTree.queryParams}),\n          this.urlTree.fragment, {}, PRIMARY_OUTLET, this.rootComponentType, null, {});\n\n      const rootNode = new TreeNode(root, children);\n      const routeState = new RouterStateSnapshot('', rootNode);\n      const tree =\n          createUrlTreeFromSnapshot(root, [], this.urlTree.queryParams, this.urlTree.fragment);\n      // https://github.com/angular/angular/issues/47307\n      // Creating the tree stringifies the query params\n      // We don't want to do this here so reassign them to the original.\n      tree.queryParams = this.urlTree.queryParams;\n      routeState.url = this.urlSerializer.serialize(tree);\n      this.inheritParamsAndData(routeState._root, null);\n      return {state: routeState, tree};\n    }));\n  }\n\n\n  private match(rootSegmentGroup: UrlSegmentGroup): Observable<TreeNode<ActivatedRouteSnapshot>[]> {\n    const expanded$ =\n        this.processSegmentGroup(this.injector, this.config, rootSegmentGroup, PRIMARY_OUTLET);\n    return expanded$.pipe(catchError((e: any) => {\n      if (e instanceof AbsoluteRedirect) {\n        this.urlTree = e.urlTree;\n        return this.match(e.urlTree.root);\n      }\n      if (e instanceof NoMatch) {\n        throw this.noMatchError(e);\n      }\n\n      throw e;\n    }));\n  }\n\n  inheritParamsAndData(\n      routeNode: TreeNode<ActivatedRouteSnapshot>, parent: ActivatedRouteSnapshot|null): void {\n    const route = routeNode.value;\n    const i = getInherited(route, parent, this.paramsInheritanceStrategy);\n\n    route.params = Object.freeze(i.params);\n    route.data = Object.freeze(i.data);\n\n    routeNode.children.forEach(n => this.inheritParamsAndData(n, route));\n  }\n\n  processSegmentGroup(\n      injector: EnvironmentInjector, config: Route[], segmentGroup: UrlSegmentGroup,\n      outlet: string): Observable<TreeNode<ActivatedRouteSnapshot>[]> {\n    if (segmentGroup.segments.length === 0 && segmentGroup.hasChildren()) {\n      return this.processChildren(injector, config, segmentGroup);\n    }\n\n    return this.processSegment(injector, config, segmentGroup, segmentGroup.segments, outlet, true)\n        .pipe(map(child => child instanceof TreeNode ? [child] : []));\n  }\n\n  /**\n   * Matches every child outlet in the `segmentGroup` to a `Route` in the config. Returns `null` if\n   * we cannot find a match for _any_ of the children.\n   *\n   * @param config - The `Routes` to match against\n   * @param segmentGroup - The `UrlSegmentGroup` whose children need to be matched against the\n   *     config.\n   */\n  processChildren(injector: EnvironmentInjector, config: Route[], segmentGroup: UrlSegmentGroup):\n      Observable<TreeNode<ActivatedRouteSnapshot>[]> {\n    // Expand outlets one at a time, starting with the primary outlet. We need to do it this way\n    // because an absolute redirect from the primary outlet takes precedence.\n    const childOutlets: string[] = [];\n    for (const child of Object.keys(segmentGroup.children)) {\n      if (child === 'primary') {\n        childOutlets.unshift(child);\n      } else {\n        childOutlets.push(child);\n      }\n    }\n    return from(childOutlets)\n        .pipe(\n            concatMap(childOutlet => {\n              const child = segmentGroup.children[childOutlet];\n              // Sort the config so that routes with outlets that match the one being activated\n              // appear first, followed by routes for other outlets, which might match if they have\n              // an empty path.\n              const sortedConfig = sortByMatchingOutlets(config, childOutlet);\n              return this.processSegmentGroup(injector, sortedConfig, child, childOutlet);\n            }),\n            scan((children, outletChildren) => {\n              children.push(...outletChildren);\n              return children;\n            }),\n            defaultIfEmpty(null as TreeNode<ActivatedRouteSnapshot>[] | null),\n            last(),\n            mergeMap(children => {\n              if (children === null) return noMatch(segmentGroup);\n              // Because we may have matched two outlets to the same empty path segment, we can have\n              // multiple activated results for the same outlet. We should merge the children of\n              // these results so the final return value is only one `TreeNode` per outlet.\n              const mergedChildren = mergeEmptyPathMatches(children);\n              if (typeof ngDevMode === 'undefined' || ngDevMode) {\n                // This should really never happen - we are only taking the first match for each\n                // outlet and merge the empty path matches.\n                checkOutletNameUniqueness(mergedChildren);\n              }\n              sortActivatedRouteSnapshots(mergedChildren);\n              return of(mergedChildren);\n            }),\n        );\n  }\n\n  processSegment(\n      injector: EnvironmentInjector, routes: Route[], segmentGroup: UrlSegmentGroup,\n      segments: UrlSegment[], outlet: string,\n      allowRedirects: boolean): Observable<TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl> {\n    return from(routes).pipe(\n        concatMap(r => {\n          return this\n              .processSegmentAgainstRoute(\n                  r._injector ?? injector, routes, r, segmentGroup, segments, outlet,\n                  allowRedirects)\n              .pipe(catchError((e: any) => {\n                if (e instanceof NoMatch) {\n                  return of(null);\n                }\n                throw e;\n              }));\n        }),\n        first((x): x is TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl => !!x), catchError(e => {\n          if (isEmptyError(e)) {\n            if (noLeftoversInUrl(segmentGroup, segments, outlet)) {\n              return of(new NoLeftoversInUrl());\n            }\n            return noMatch(segmentGroup);\n          }\n          throw e;\n        }));\n  }\n\n  processSegmentAgainstRoute(\n      injector: EnvironmentInjector, routes: Route[], route: Route, rawSegment: UrlSegmentGroup,\n      segments: UrlSegment[], outlet: string,\n      allowRedirects: boolean): Observable<TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl> {\n    if (!isImmediateMatch(route, rawSegment, segments, outlet)) return noMatch(rawSegment);\n\n    if (route.redirectTo === undefined) {\n      return this.matchSegmentAgainstRoute(injector, rawSegment, route, segments, outlet);\n    }\n\n    if (this.allowRedirects && allowRedirects) {\n      return this.expandSegmentAgainstRouteUsingRedirect(\n          injector, rawSegment, routes, route, segments, outlet);\n    }\n\n    return noMatch(rawSegment);\n  }\n\n  private expandSegmentAgainstRouteUsingRedirect(\n      injector: EnvironmentInjector, segmentGroup: UrlSegmentGroup, routes: Route[], route: Route,\n      segments: UrlSegment[],\n      outlet: string): Observable<TreeNode<ActivatedRouteSnapshot>|NoLeftoversInUrl> {\n    const {\n      matched,\n      consumedSegments,\n      positionalParamSegments,\n      remainingSegments,\n    } = match(segmentGroup, route, segments);\n    if (!matched) return noMatch(segmentGroup);\n\n    // TODO(atscott): Move all of this under an if(ngDevMode) as a breaking change and allow stack\n    // size exceeded in production\n    if (route.redirectTo!.startsWith('/')) {\n      this.absoluteRedirectCount++;\n      if (this.absoluteRedirectCount > MAX_ALLOWED_REDIRECTS) {\n        if (ngDevMode) {\n          throw new RuntimeError(\n              RuntimeErrorCode.INFINITE_REDIRECT,\n              `Detected possible infinite redirect when redirecting from '${this.urlTree}' to '${\n                  route.redirectTo}'.\\n` +\n                  `This is currently a dev mode only error but will become a` +\n                  ` call stack size exceeded error in production in a future major version.`);\n        }\n        this.allowRedirects = false;\n      }\n    }\n    const newTree = this.applyRedirects.applyRedirectCommands(\n        consumedSegments, route.redirectTo!, positionalParamSegments);\n\n    return this.applyRedirects.lineralizeSegments(route, newTree)\n        .pipe(mergeMap((newSegments: UrlSegment[]) => {\n          return this.processSegment(\n              injector, routes, segmentGroup, newSegments.concat(remainingSegments), outlet, false);\n        }));\n  }\n\n  matchSegmentAgainstRoute(\n      injector: EnvironmentInjector, rawSegment: UrlSegmentGroup, route: Route,\n      segments: UrlSegment[], outlet: string): Observable<TreeNode<ActivatedRouteSnapshot>> {\n    const matchResult = matchWithChecks(rawSegment, route, segments, injector, this.urlSerializer);\n    if (route.path === '**') {\n      // Prior versions of the route matching algorithm would stop matching at the wildcard route.\n      // We should investigate a better strategy for any existing children. Otherwise, these\n      // child segments are silently dropped from the navigation.\n      // https://github.com/angular/angular/issues/40089\n      rawSegment.children = {};\n    }\n\n    return matchResult.pipe(switchMap((result) => {\n      if (!result.matched) {\n        return noMatch(rawSegment);\n      }\n\n      // If the route has an injector created from providers, we should start using that.\n      injector = route._injector ?? injector;\n      return this.getChildConfig(injector, route, segments)\n          .pipe(switchMap(({routes: childConfig}) => {\n            const childInjector = route._loadedInjector ?? injector;\n\n            const {consumedSegments, remainingSegments, parameters} = result;\n            const snapshot = new ActivatedRouteSnapshot(\n                consumedSegments, parameters, Object.freeze({...this.urlTree.queryParams}),\n                this.urlTree.fragment, getData(route), getOutlet(route),\n                route.component ?? route._loadedComponent ?? null, route, getResolve(route));\n\n            const {segmentGroup, slicedSegments} =\n                split(rawSegment, consumedSegments, remainingSegments, childConfig);\n\n            if (slicedSegments.length === 0 && segmentGroup.hasChildren()) {\n              return this.processChildren(childInjector, childConfig, segmentGroup)\n                  .pipe(map(children => {\n                    if (children === null) {\n                      return null;\n                    }\n                    return new TreeNode(snapshot, children);\n                  }));\n            }\n\n            if (childConfig.length === 0 && slicedSegments.length === 0) {\n              return of(new TreeNode(snapshot, []));\n            }\n\n            const matchedOnOutlet = getOutlet(route) === outlet;\n            // If we matched a config due to empty path match on a different outlet, we need to\n            // continue passing the current outlet for the segment rather than switch to PRIMARY.\n            // Note that we switch to primary when we have a match because outlet configs look like\n            // this: {path: 'a', outlet: 'a', children: [\n            //  {path: 'b', component: B},\n            //  {path: 'c', component: C},\n            // ]}\n            // Notice that the children of the named outlet are configured with the primary outlet\n            return this\n                .processSegment(\n                    childInjector, childConfig, segmentGroup, slicedSegments,\n                    matchedOnOutlet ? PRIMARY_OUTLET : outlet, true)\n                .pipe(map(child => {\n                  return new TreeNode(snapshot, child instanceof TreeNode ? [child] : []);\n                }));\n          }));\n    }));\n  }\n  private getChildConfig(injector: EnvironmentInjector, route: Route, segments: UrlSegment[]):\n      Observable<LoadedRouterConfig> {\n    if (route.children) {\n      // The children belong to the same module\n      return of({routes: route.children, injector});\n    }\n\n    if (route.loadChildren) {\n      // lazy children belong to the loaded module\n      if (route._loadedRoutes !== undefined) {\n        return of({routes: route._loadedRoutes, injector: route._loadedInjector});\n      }\n\n      return runCanLoadGuards(injector, route, segments, this.urlSerializer)\n          .pipe(mergeMap((shouldLoadResult: boolean) => {\n            if (shouldLoadResult) {\n              return this.configLoader.loadChildren(injector, route)\n                  .pipe(tap((cfg: LoadedRouterConfig) => {\n                    route._loadedRoutes = cfg.routes;\n                    route._loadedInjector = cfg.injector;\n                  }));\n            }\n            return canLoadFails(route);\n          }));\n    }\n\n    return of({routes: [], injector});\n  }\n}\n\nfunction sortActivatedRouteSnapshots(nodes: TreeNode<ActivatedRouteSnapshot>[]): 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\nfunction hasEmptyPathConfig(node: TreeNode<ActivatedRouteSnapshot>) {\n  const config = node.value.routeConfig;\n  return config && config.path === '';\n}\n\n/**\n * Finds `TreeNode`s with matching empty path route configs and merges them into `TreeNode` with\n * the children from each duplicate. This is necessary because different outlets can match a\n * single empty path route config and the results need to then be merged.\n */\nfunction mergeEmptyPathMatches(nodes: Array<TreeNode<ActivatedRouteSnapshot>>):\n    Array<TreeNode<ActivatedRouteSnapshot>> {\n  const result: Array<TreeNode<ActivatedRouteSnapshot>> = [];\n  // The set of nodes which contain children that were merged from two duplicate empty path nodes.\n  const mergedNodes: Set<TreeNode<ActivatedRouteSnapshot>> = new Set();\n\n  for (const node of nodes) {\n    if (!hasEmptyPathConfig(node)) {\n      result.push(node);\n      continue;\n    }\n\n    const duplicateEmptyPathNode =\n        result.find(resultNode => node.value.routeConfig === resultNode.value.routeConfig);\n    if (duplicateEmptyPathNode !== undefined) {\n      duplicateEmptyPathNode.children.push(...node.children);\n      mergedNodes.add(duplicateEmptyPathNode);\n    } else {\n      result.push(node);\n    }\n  }\n  // For each node which has children from multiple sources, we need to recompute a new `TreeNode`\n  // by also merging those children. This is necessary when there are multiple empty path configs\n  // in a row. Put another way: whenever we combine children of two nodes, we need to also check\n  // if any of those children can be combined into a single node as well.\n  for (const mergedNode of mergedNodes) {\n    const mergedChildren = mergeEmptyPathMatches(mergedNode.children);\n    result.push(new TreeNode(mergedNode.value, mergedChildren));\n  }\n  return result.filter(n => !mergedNodes.has(n));\n}\n\nfunction checkOutletNameUniqueness(nodes: TreeNode<ActivatedRouteSnapshot>[]): void {\n  const names: {[k: string]: ActivatedRouteSnapshot} = {};\n  nodes.forEach(n => {\n    const routeWithSameOutletName = names[n.value.outlet];\n    if (routeWithSameOutletName) {\n      const p = routeWithSameOutletName.url.map(s => s.toString()).join('/');\n      const c = n.value.url.map(s => s.toString()).join('/');\n      throw new RuntimeError(\n          RuntimeErrorCode.TWO_SEGMENTS_WITH_SAME_OUTLET,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              `Two segments cannot have the same outlet name: '${p}' and '${c}'.`);\n    }\n    names[n.value.outlet] = n.value;\n  });\n}\n\nfunction getData(route: Route): Data {\n  return route.data || {};\n}\n\nfunction getResolve(route: Route): ResolveData {\n  return route.resolve || {};\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {EnvironmentInjector, Type} from '@angular/core';\nimport {MonoTypeOperatorFunction} from 'rxjs';\nimport {map, mergeMap} from 'rxjs/operators';\n\nimport {Route} from '../models';\nimport {NavigationTransition} from '../navigation_transition';\nimport {recognize as recognizeFn} from '../recognize';\nimport {RouterConfigLoader} from '../router_config_loader';\nimport {UrlSerializer} from '../url_tree';\n\nexport function recognize(\n    injector: EnvironmentInjector, configLoader: RouterConfigLoader,\n    rootComponentType: Type<any>|null, config: Route[], serializer: UrlSerializer,\n    paramsInheritanceStrategy: 'emptyOnly'|\n    'always'): MonoTypeOperatorFunction<NavigationTransition> {\n  return mergeMap(\n      t => recognizeFn(\n               injector, configLoader, rootComponentType, config, t.extractedUrl, serializer,\n               paramsInheritanceStrategy)\n               .pipe(map(({state: targetSnapshot, tree: urlAfterRedirects}) => {\n                 return {...t, targetSnapshot, urlAfterRedirects};\n               })));\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {EnvironmentInjector, ProviderToken, runInInjectionContext} from '@angular/core';\nimport {EMPTY, from, MonoTypeOperatorFunction, Observable, of, throwError} from 'rxjs';\nimport {catchError, concatMap, first, map, mapTo, mergeMap, takeLast, tap} from 'rxjs/operators';\n\nimport {ResolveData} from '../models';\nimport {NavigationTransition} from '../navigation_transition';\nimport {ActivatedRouteSnapshot, getInherited, hasStaticTitle, RouterStateSnapshot} from '../router_state';\nimport {RouteTitleKey} from '../shared';\nimport {getDataKeys, wrapIntoObservable} from '../utils/collection';\nimport {getClosestRouteInjector} from '../utils/config';\nimport {getTokenOrFunctionIdentity} from '../utils/preactivation';\nimport {isEmptyError} from '../utils/type_guards';\n\nexport function resolveData(\n    paramsInheritanceStrategy: 'emptyOnly'|'always',\n    injector: EnvironmentInjector): MonoTypeOperatorFunction<NavigationTransition> {\n  return mergeMap(t => {\n    const {targetSnapshot, guards: {canActivateChecks}} = t;\n\n    if (!canActivateChecks.length) {\n      return of(t);\n    }\n    // Iterating a Set in javascript  happens in insertion order so it is safe to use a `Set` to\n    // preserve the correct order that the resolvers should run in.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#description\n    const routesWithResolversToRun = new Set(canActivateChecks.map(check => check.route));\n    const routesNeedingDataUpdates = new Set<ActivatedRouteSnapshot>();\n    for (const route of routesWithResolversToRun) {\n      if (routesNeedingDataUpdates.has(route)) {\n        continue;\n      }\n      // All children under the route with a resolver to run need to recompute inherited data.\n      for (const newRoute of flattenRouteTree(route)) {\n        routesNeedingDataUpdates.add(newRoute);\n      }\n    }\n    let routesProcessed = 0;\n    return from(routesNeedingDataUpdates)\n        .pipe(\n            concatMap(route => {\n              if (routesWithResolversToRun.has(route)) {\n                return runResolve(route, targetSnapshot!, paramsInheritanceStrategy, injector);\n              } else {\n                route.data = getInherited(route, route.parent, paramsInheritanceStrategy).resolve;\n                return of(void 0);\n              }\n            }),\n            tap(() => routesProcessed++),\n            takeLast(1),\n            mergeMap(_ => routesProcessed === routesNeedingDataUpdates.size ? of(t) : EMPTY),\n        );\n  });\n}\n\n/**\n *  Returns the `ActivatedRouteSnapshot` tree as an array, using DFS to traverse the route tree.\n */\nfunction flattenRouteTree(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot[] {\n  const descendants = route.children.map(child => flattenRouteTree(child)).flat();\n  return [route, ...descendants];\n}\n\nfunction runResolve(\n    futureARS: ActivatedRouteSnapshot, futureRSS: RouterStateSnapshot,\n    paramsInheritanceStrategy: 'emptyOnly'|'always', injector: EnvironmentInjector) {\n  const config = futureARS.routeConfig;\n  const resolve = futureARS._resolve;\n  if (config?.title !== undefined && !hasStaticTitle(config)) {\n    resolve[RouteTitleKey] = config.title;\n  }\n  return resolveNode(resolve, futureARS, futureRSS, injector).pipe(map((resolvedData: any) => {\n    futureARS._resolvedData = resolvedData;\n    futureARS.data = getInherited(futureARS, futureARS.parent, paramsInheritanceStrategy).resolve;\n    return null;\n  }));\n}\n\nfunction resolveNode(\n    resolve: ResolveData, futureARS: ActivatedRouteSnapshot, futureRSS: RouterStateSnapshot,\n    injector: EnvironmentInjector): Observable<any> {\n  const keys = getDataKeys(resolve);\n  if (keys.length === 0) {\n    return of({});\n  }\n  const data: {[k: string|symbol]: any} = {};\n  return from(keys).pipe(\n      mergeMap(\n          key => getResolver(resolve[key], futureARS, futureRSS, injector)\n                     .pipe(first(), tap((value: any) => {\n                             data[key] = value;\n                           }))),\n      takeLast(1),\n      mapTo(data),\n      catchError((e: unknown) => isEmptyError(e as Error) ? EMPTY : throwError(e)),\n  );\n}\n\nfunction getResolver(\n    injectionToken: ProviderToken<any>|Function, futureARS: ActivatedRouteSnapshot,\n    futureRSS: RouterStateSnapshot, injector: EnvironmentInjector): Observable<any> {\n  const closestInjector = getClosestRouteInjector(futureARS) ?? injector;\n  const resolver = getTokenOrFunctionIdentity(injectionToken, closestInjector);\n  const resolverValue = resolver.resolve ?\n      resolver.resolve(futureARS, futureRSS) :\n      runInInjectionContext(closestInjector, () => resolver(futureARS, futureRSS));\n  return wrapIntoObservable(resolverValue);\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {from, MonoTypeOperatorFunction, ObservableInput, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\n\n/**\n * Perform a side effect through a switchMap for every emission on the source Observable,\n * but return an Observable that is identical to the source. It's essentially the same as\n * the `tap` operator, but if the side effectful `next` function returns an ObservableInput,\n * it will wait before continuing with the original value.\n */\nexport function switchTap<T>(next: (x: T) => void|ObservableInput<any>):\n    MonoTypeOperatorFunction<T> {\n  return switchMap(v => {\n    const nextResult = next(v);\n    if (nextResult) {\n      return from(nextResult).pipe(map(() => v));\n    }\n    return of(v);\n  });\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {inject, Injectable} from '@angular/core';\nimport {Title} from '@angular/platform-browser';\n\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from './router_state';\nimport {PRIMARY_OUTLET, RouteTitleKey} from './shared';\n\n/**\n * Provides a strategy for setting the page title after a router navigation.\n *\n * The built-in implementation traverses the router state snapshot and finds the deepest primary\n * outlet with `title` property. Given the `Routes` below, navigating to\n * `/base/child(popup:aux)` would result in the document title being set to \"child\".\n * ```\n * [\n *   {path: 'base', title: 'base', children: [\n *     {path: 'child', title: 'child'},\n *   ],\n *   {path: 'aux', outlet: 'popup', title: 'popupTitle'}\n * ]\n * ```\n *\n * This class can be used as a base class for custom title strategies. That is, you can create your\n * own class that extends the `TitleStrategy`. Note that in the above example, the `title`\n * from the named outlet is never used. However, a custom strategy might be implemented to\n * incorporate titles in named outlets.\n *\n * @publicApi\n * @see [Page title guide](guide/router#setting-the-page-title)\n */\n@Injectable({providedIn: 'root', useFactory: () => inject(DefaultTitleStrategy)})\nexport abstract class TitleStrategy {\n  /** Performs the application title update. */\n  abstract updateTitle(snapshot: RouterStateSnapshot): void;\n\n  /**\n   * @returns The `title` of the deepest primary route.\n   */\n  buildTitle(snapshot: RouterStateSnapshot): string|undefined {\n    let pageTitle: string|undefined;\n    let route: ActivatedRouteSnapshot|undefined = snapshot.root;\n    while (route !== undefined) {\n      pageTitle = this.getResolvedTitleForRoute(route) ?? pageTitle;\n      route = route.children.find(child => child.outlet === PRIMARY_OUTLET);\n    }\n    return pageTitle;\n  }\n\n  /**\n   * Given an `ActivatedRouteSnapshot`, returns the final value of the\n   * `Route.title` property, which can either be a static string or a resolved value.\n   */\n  getResolvedTitleForRoute(snapshot: ActivatedRouteSnapshot) {\n    return snapshot.data[RouteTitleKey];\n  }\n}\n\n/**\n * The default `TitleStrategy` used by the router that updates the title using the `Title` service.\n */\n@Injectable({providedIn: 'root'})\nexport class DefaultTitleStrategy extends TitleStrategy {\n  constructor(readonly title: Title) {\n    super();\n  }\n\n  /**\n   * Sets the title of the browser to the given value.\n   *\n   * @param title The `pageTitle` from the deepest primary route.\n   */\n  override updateTitle(snapshot: RouterStateSnapshot): void {\n    const title = this.buildTitle(snapshot);\n    if (title !== undefined) {\n      this.title.setTitle(title);\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {InjectionToken} from '@angular/core';\n\nimport {OnSameUrlNavigation} from './models';\nimport {UrlSerializer, UrlTree} from './url_tree';\n\n\n/**\n * Error handler that is invoked when a navigation error occurs.\n *\n * If the handler returns a value, the navigation Promise is resolved with this value.\n * If the handler throws an exception, the navigation Promise is rejected with\n * the exception.\n *\n * @publicApi\n * @deprecated Subscribe to the `Router` events and watch for `NavigationError` instead.\n */\nexport type ErrorHandler = (error: any) => any;\n\n/**\n * Allowed values in an `ExtraOptions` object that configure\n * when the router performs the initial navigation operation.\n *\n * * 'enabledNonBlocking' - (default) The initial navigation starts after the\n * root component has been created. The bootstrap is not blocked on the completion of the initial\n * navigation.\n * * 'enabledBlocking' - The initial navigation starts before the root component is created.\n * The bootstrap is blocked until the initial navigation is complete. This value is required\n * for [server-side rendering](guide/ssr) to work.\n * * 'disabled' - The initial navigation is not performed. The location listener is set up before\n * the root component gets created. Use if there is a reason to have\n * more control over when the router starts its initial navigation due to some complex\n * initialization logic.\n *\n * @see {@link forRoot()}\n *\n * @publicApi\n */\nexport type InitialNavigation = 'disabled'|'enabledBlocking'|'enabledNonBlocking';\n\n/**\n * Extra configuration options that can be used with the `withRouterConfig` function.\n *\n * @publicApi\n */\nexport interface RouterConfigOptions {\n  /**\n   * Configures how the Router attempts to restore state when a navigation is cancelled.\n   *\n   * 'replace' - Always uses `location.replaceState` to set the browser state to the state of the\n   * router before the navigation started. This means that if the URL of the browser is updated\n   * _before_ the navigation is canceled, the Router will simply replace the item in history rather\n   * than trying to restore to the previous location in the session history. This happens most\n   * frequently with `urlUpdateStrategy: 'eager'` and navigations with the browser back/forward\n   * buttons.\n   *\n   * 'computed' - Will attempt to return to the same index in the session history that corresponds\n   * to the Angular route when the navigation gets cancelled. For example, if the browser back\n   * button is clicked and the navigation is cancelled, the Router will trigger a forward navigation\n   * and vice versa.\n   *\n   * Note: the 'computed' option is incompatible with any `UrlHandlingStrategy` which only\n   * handles a portion of the URL because the history restoration navigates to the previous place in\n   * the browser history rather than simply resetting a portion of the URL.\n   *\n   * The default value is `replace` when not set.\n   */\n  canceledNavigationResolution?: 'replace'|'computed';\n\n  /**\n   * Configures the default for handling a navigation request to the current URL.\n   *\n   * If unset, the `Router` will use `'ignore'`.\n   *\n   * @see {@link OnSameUrlNavigation}\n   */\n  onSameUrlNavigation?: OnSameUrlNavigation;\n\n  /**\n   * Defines how the router merges parameters, data, and resolved data from parent to child\n   * routes.\n   *\n   * By default ('emptyOnly'), a route inherits the parent route's parameters when the route itself\n   * has an empty path (meaning its configured with path: '') or when the parent route doesn't have\n   * any component set.\n   *\n   * Set to 'always' to enable unconditional inheritance of parent parameters.\n   *\n   * Note that when dealing with matrix parameters, \"parent\" refers to the parent `Route`\n   * config which does not necessarily mean the \"URL segment to the left\". When the `Route` `path`\n   * contains multiple segments, the matrix parameters must appear on the last segment. For example,\n   * matrix parameters for `{path: 'a/b', component: MyComp}` should appear as `a/b;foo=bar` and not\n   * `a;foo=bar/b`.\n   *\n   */\n  paramsInheritanceStrategy?: 'emptyOnly'|'always';\n\n  /**\n   * Defines when the router updates the browser URL. By default ('deferred'),\n   * update after successful navigation.\n   * Set to 'eager' if prefer to update the URL at the beginning of navigation.\n   * Updating the URL early allows you to handle a failure of navigation by\n   * showing an error message with the URL that failed.\n   */\n  urlUpdateStrategy?: 'deferred'|'eager';\n}\n\n/**\n * Configuration options for the scrolling feature which can be used with `withInMemoryScrolling`\n * function.\n *\n * @publicApi\n */\nexport interface InMemoryScrollingOptions {\n  /**\n   * When set to 'enabled', scrolls to the anchor element when the URL has a fragment.\n   * Anchor scrolling is disabled by default.\n   *\n   * Anchor scrolling does not happen on 'popstate'. Instead, we restore the position\n   * that we stored or scroll to the top.\n   */\n  anchorScrolling?: 'disabled'|'enabled';\n\n  /**\n   * Configures if the scroll position needs to be restored when navigating back.\n   *\n   * * 'disabled'- (Default) Does nothing. Scroll position is maintained on navigation.\n   * * 'top'- Sets the scroll position to x = 0, y = 0 on all navigation.\n   * * 'enabled'- Restores the previous scroll position on backward navigation, else sets the\n   * position to the anchor if one is provided, or sets the scroll position to [0, 0] (forward\n   * navigation). This option will be the default in the future.\n   *\n   * You can implement custom scroll restoration behavior by adapting the enabled behavior as\n   * in the following example.\n   *\n   * ```typescript\n   * class AppComponent {\n   *   movieData: any;\n   *\n   *   constructor(private router: Router, private viewportScroller: ViewportScroller,\n   * changeDetectorRef: ChangeDetectorRef) {\n   *   router.events.pipe(filter((event: Event): event is Scroll => event instanceof Scroll)\n   *     ).subscribe(e => {\n   *       fetch('http://example.com/movies.json').then(response => {\n   *         this.movieData = response.json();\n   *         // update the template with the data before restoring scroll\n   *         changeDetectorRef.detectChanges();\n   *\n   *         if (e.position) {\n   *           viewportScroller.scrollToPosition(e.position);\n   *         }\n   *       });\n   *     });\n   *   }\n   * }\n   * ```\n   */\n  scrollPositionRestoration?: 'disabled'|'enabled'|'top';\n}\n\n/**\n * A set of configuration options for a router module, provided in the\n * `forRoot()` method.\n *\n * @see {@link forRoot()}\n *\n *\n * @publicApi\n */\nexport interface ExtraOptions extends InMemoryScrollingOptions, RouterConfigOptions {\n  /**\n   * When true, log all internal navigation events to the console.\n   * Use for debugging.\n   */\n  enableTracing?: boolean;\n\n  /**\n   * When true, enable the location strategy that uses the URL fragment\n   * instead of the history API.\n   */\n  useHash?: boolean;\n\n  /**\n   * One of `enabled`, `enabledBlocking`, `enabledNonBlocking` or `disabled`.\n   * When set to `enabled` or `enabledBlocking`, the initial navigation starts before the root\n   * component is created. The bootstrap is blocked until the initial navigation is complete. This\n   * value is required for [server-side rendering](guide/ssr) to work. When set to\n   * `enabledNonBlocking`, the initial navigation starts after the root component has been created.\n   * The bootstrap is not blocked on the completion of the initial navigation. When set to\n   * `disabled`, the initial navigation is not performed. The location listener is set up before the\n   * root component gets created. Use if there is a reason to have more control over when the router\n   * starts its initial navigation due to some complex initialization logic.\n   */\n  initialNavigation?: InitialNavigation;\n\n  /**\n   * When true, enables binding information from the `Router` state directly to the inputs of the\n   * component in `Route` configurations.\n   */\n  bindToComponentInputs?: boolean;\n\n  /**\n   * When true, enables view transitions in the Router by running the route activation and\n   * deactivation inside of `document.startViewTransition`.\n   *\n   * @see https://developer.chrome.com/docs/web-platform/view-transitions/\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n   * @experimental\n   */\n  enableViewTransitions?: boolean;\n\n  /**\n   * A custom error handler for failed navigations.\n   * If the handler returns a value, the navigation Promise is resolved with this value.\n   * If the handler throws an exception, the navigation Promise is rejected with the exception.\n   *\n   * @deprecated Subscribe to the `Router` events and watch for `NavigationError` instead.\n   */\n  errorHandler?: (error: any) => any;\n\n  /**\n   * Configures a preloading strategy.\n   * One of `PreloadAllModules` or `NoPreloading` (the default).\n   */\n  preloadingStrategy?: any;\n\n  /**\n   * Configures the scroll offset the router will use when scrolling to an element.\n   *\n   * When given a tuple with x and y position value,\n   * the router uses that offset each time it scrolls.\n   * When given a function, the router invokes the function every time\n   * it restores scroll position.\n   */\n  scrollOffset?: [number, number]|(() => [number, number]);\n}\n\n/**\n * A [DI token](guide/glossary/#di-token) for the router service.\n *\n * @publicApi\n */\nexport const ROUTER_CONFIGURATION = new InjectionToken<ExtraOptions>(\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? 'router config' : '', {\n      providedIn: 'root',\n      factory: () => ({}),\n    });\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Compiler, EnvironmentInjector, inject, Injectable, InjectFlags, InjectionToken, Injector, NgModuleFactory, Type} from '@angular/core';\nimport {ConnectableObservable, from, Observable, of, Subject} from 'rxjs';\nimport {finalize, map, mergeMap, refCount, tap} from 'rxjs/operators';\n\nimport {DefaultExport, LoadChildren, LoadChildrenCallback, LoadedRouterConfig, Route, Routes} from './models';\nimport {wrapIntoObservable} from './utils/collection';\nimport {assertStandalone, standardizeConfig, validateConfig} from './utils/config';\n\n\n\n/**\n * The [DI token](guide/glossary/#di-token) for a router configuration.\n *\n * `ROUTES` is a low level API for router configuration via dependency injection.\n *\n * We recommend that in almost all cases to use higher level APIs such as `RouterModule.forRoot()`,\n * `provideRouter`, or `Router.resetConfig()`.\n *\n * @publicApi\n */\nexport const ROUTES = new InjectionToken<Route[][]>('ROUTES');\n\ntype ComponentLoader = Observable<Type<unknown>>;\n\n@Injectable({providedIn: 'root'})\nexport class RouterConfigLoader {\n  private componentLoaders = new WeakMap<Route, ComponentLoader>();\n  private childrenLoaders = new WeakMap<Route, Observable<LoadedRouterConfig>>();\n  onLoadStartListener?: (r: Route) => void;\n  onLoadEndListener?: (r: Route) => void;\n  private readonly compiler = inject(Compiler);\n\n  loadComponent(route: Route): Observable<Type<unknown>> {\n    if (this.componentLoaders.get(route)) {\n      return this.componentLoaders.get(route)!;\n    } else if (route._loadedComponent) {\n      return of(route._loadedComponent);\n    }\n\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const loadRunner = wrapIntoObservable(route.loadComponent!())\n                           .pipe(\n                               map(maybeUnwrapDefaultExport),\n                               tap(component => {\n                                 if (this.onLoadEndListener) {\n                                   this.onLoadEndListener(route);\n                                 }\n                                 (typeof ngDevMode === 'undefined' || ngDevMode) &&\n                                     assertStandalone(route.path ?? '', component);\n                                 route._loadedComponent = component;\n                               }),\n                               finalize(() => {\n                                 this.componentLoaders.delete(route);\n                               }),\n                           );\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader =\n        new ConnectableObservable(loadRunner, () => new Subject<Type<unknown>>()).pipe(refCount());\n    this.componentLoaders.set(route, loader);\n    return loader;\n  }\n\n  loadChildren(parentInjector: Injector, route: Route): Observable<LoadedRouterConfig> {\n    if (this.childrenLoaders.get(route)) {\n      return this.childrenLoaders.get(route)!;\n    } else if (route._loadedRoutes) {\n      return of({routes: route._loadedRoutes, injector: route._loadedInjector});\n    }\n\n    if (this.onLoadStartListener) {\n      this.onLoadStartListener(route);\n    }\n    const moduleFactoryOrRoutes$ =\n        loadChildren(route, this.compiler, parentInjector, this.onLoadEndListener);\n    const loadRunner = moduleFactoryOrRoutes$.pipe(\n        finalize(() => {\n          this.childrenLoaders.delete(route);\n        }),\n    );\n    // Use custom ConnectableObservable as share in runners pipe increasing the bundle size too much\n    const loader = new ConnectableObservable(loadRunner, () => new Subject<LoadedRouterConfig>())\n                       .pipe(refCount());\n    this.childrenLoaders.set(route, loader);\n    return loader;\n  }\n}\n\n/**\n * Executes a `route.loadChildren` callback and converts the result to an array of child routes and\n * an injector if that callback returned a module.\n *\n * This function is used for the route discovery during prerendering\n * in @angular-devkit/build-angular. If there are any updates to the contract here, it will require\n * an update to the extractor.\n */\nexport function loadChildren(\n    route: Route, compiler: Compiler, parentInjector: Injector,\n    onLoadEndListener?: (r: Route) => void): Observable<LoadedRouterConfig> {\n  return wrapIntoObservable(route.loadChildren!())\n      .pipe(\n          map(maybeUnwrapDefaultExport),\n          mergeMap((t) => {\n            if (t instanceof NgModuleFactory || Array.isArray(t)) {\n              return of(t);\n            } else {\n              return from(compiler.compileModuleAsync(t));\n            }\n          }),\n          map((factoryOrRoutes: NgModuleFactory<any>|Routes) => {\n            if (onLoadEndListener) {\n              onLoadEndListener(route);\n            }\n            // This injector comes from the `NgModuleRef` when lazy loading an `NgModule`. There is\n            // no injector associated with lazy loading a `Route` array.\n            let injector: EnvironmentInjector|undefined;\n            let rawRoutes: Route[];\n            let requireStandaloneComponents = false;\n            if (Array.isArray(factoryOrRoutes)) {\n              rawRoutes = factoryOrRoutes;\n              requireStandaloneComponents = true;\n            } else {\n              injector = factoryOrRoutes.create(parentInjector).injector;\n              // When loading a module that doesn't provide `RouterModule.forChild()` preloader\n              // will get stuck in an infinite loop. The child module's Injector will look to\n              // its parent `Injector` when it doesn't find any ROUTES so it will return routes\n              // for it's parent module instead.\n              rawRoutes = injector.get(ROUTES, [], {optional: true, self: true}).flat();\n            }\n            const routes = rawRoutes.map(standardizeConfig);\n            (typeof ngDevMode === 'undefined' || ngDevMode) &&\n                validateConfig(routes, route.path, requireStandaloneComponents);\n            return {routes, injector};\n          }),\n      );\n}\n\nfunction isWrappedDefaultExport<T>(value: T|DefaultExport<T>): value is DefaultExport<T> {\n  // We use `in` here with a string key `'default'`, because we expect `DefaultExport` objects to be\n  // dynamically imported ES modules with a spec-mandated `default` key. Thus we don't expect that\n  // `default` will be a renamed property.\n  return value && typeof value === 'object' && 'default' in value;\n}\n\nfunction maybeUnwrapDefaultExport<T>(input: T|DefaultExport<T>): T {\n  // As per `isWrappedDefaultExport`, the `default` key here is generated by the browser and not\n  // subject to property renaming, so we reference it with bracket access.\n  return isWrappedDefaultExport(input) ? input['default'] : input;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {inject, Injectable} from '@angular/core';\n\nimport {UrlTree} from './url_tree';\n\n/**\n * @description\n *\n * Provides a way to migrate AngularJS applications to Angular.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useFactory: () => inject(DefaultUrlHandlingStrategy)})\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   */\n  abstract shouldProcessUrl(url: UrlTree): boolean;\n\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   */\n  abstract extract(url: UrlTree): UrlTree;\n\n  /**\n   * Merges the URL fragment with the rest of the URL.\n   */\n  abstract merge(newUrlPart: UrlTree, rawUrl: UrlTree): UrlTree;\n}\n\n/**\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class DefaultUrlHandlingStrategy implements UrlHandlingStrategy {\n  shouldProcessUrl(url: UrlTree): boolean {\n    return true;\n  }\n  extract(url: UrlTree): UrlTree {\n    return url;\n  }\n  merge(newUrlPart: UrlTree, wholeUrl: UrlTree): UrlTree {\n    return newUrlPart;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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/// <reference types=\"@types/dom-view-transitions\" />\n\nimport {DOCUMENT} from '@angular/common';\nimport {afterNextRender, InjectionToken, Injector, NgZone, runInInjectionContext} from '@angular/core';\n\nimport {ActivatedRouteSnapshot} from '../router_state';\n\nexport const CREATE_VIEW_TRANSITION =\n    new InjectionToken<typeof createViewTransition>(ngDevMode ? 'view transition helper' : '');\nexport const VIEW_TRANSITION_OPTIONS =\n    new InjectionToken<ViewTransitionsFeatureOptions&{skipNextTransition: boolean}>(\n        ngDevMode ? 'view transition options' : '');\n\n/**\n * Options to configure the View Transitions integration in the Router.\n *\n * @experimental\n * @publicApi\n * @see withViewTransitions\n */\nexport interface ViewTransitionsFeatureOptions {\n  /**\n   * Skips the very first call to `startViewTransition`. This can be useful for disabling the\n   * animation during the application's initial loading phase.\n   */\n  skipInitialTransition?: boolean;\n\n  /**\n   * A function to run after the `ViewTransition` is created.\n   *\n   * This function is run in an injection context and can use `inject`.\n   */\n  onViewTransitionCreated?: (transitionInfo: ViewTransitionInfo) => void;\n}\n\n/**\n * The information passed to the `onViewTransitionCreated` function provided in the\n * `withViewTransitions` feature options.\n *\n * @publicApi\n * @experimental\n */\nexport interface ViewTransitionInfo {\n  // TODO(atscott): This type can/should be the built-in `ViewTransition` type\n  // from @types/dom-view-transitions but exporting that type from the public API is currently not\n  // supported by tooling.\n  /**\n   * The `ViewTransition` returned by the call to `startViewTransition`.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition\n   */\n  transition: {\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/finished\n     */\n    finished: Promise<void>,\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/ready\n     */\n    ready: Promise<void>,\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/updateCallbackDone\n     */\n    updateCallbackDone: Promise<void>,\n    /**\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition/skipTransition\n     */\n    skipTransition(): void,\n  };\n  /**\n   * The `ActivatedRouteSnapshot` that the navigation is transitioning from.\n   */\n  from: ActivatedRouteSnapshot;\n  /**\n   * The `ActivatedRouteSnapshot` that the navigation is transitioning to.\n   */\n  to: ActivatedRouteSnapshot;\n}\n\n/**\n * A helper function for using browser view transitions. This function skips the call to\n * `startViewTransition` if the browser does not support it.\n *\n * @returns A Promise that resolves when the view transition callback begins.\n */\nexport function createViewTransition(\n    injector: Injector, from: ActivatedRouteSnapshot, to: ActivatedRouteSnapshot): Promise<void> {\n  const transitionOptions = injector.get(VIEW_TRANSITION_OPTIONS);\n  const document = injector.get(DOCUMENT);\n  // Create promises outside the Angular zone to avoid causing extra change detections\n  return injector.get(NgZone).runOutsideAngular(() => {\n    if (!document.startViewTransition || transitionOptions.skipNextTransition) {\n      transitionOptions.skipNextTransition = false;\n      return Promise.resolve();\n    }\n\n    let resolveViewTransitionStarted: () => void;\n    const viewTransitionStarted = new Promise<void>((resolve) => {\n      resolveViewTransitionStarted = resolve;\n    });\n    const transition = document.startViewTransition(() => {\n      resolveViewTransitionStarted();\n      // We don't actually update dom within the transition callback. The resolving of the above\n      // promise unblocks the Router navigation, which synchronously activates and deactivates\n      // routes (the DOM update). This view transition waits for the next change detection to\n      // complete (below), which includes the update phase of the routed components.\n      return createRenderPromise(injector);\n    });\n    const {onViewTransitionCreated} = transitionOptions;\n    if (onViewTransitionCreated) {\n      runInInjectionContext(injector, () => onViewTransitionCreated({transition, from, to}));\n    }\n    return viewTransitionStarted;\n  });\n}\n\n/**\n * Creates a promise that resolves after next render.\n */\nfunction createRenderPromise(injector: Injector) {\n  return new Promise<void>(resolve => {\n    afterNextRender(resolve, {injector});\n  });\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Location} from '@angular/common';\nimport {EnvironmentInjector, inject, Injectable, Type} from '@angular/core';\nimport {BehaviorSubject, combineLatest, EMPTY, from, Observable, of, Subject} from 'rxjs';\nimport {catchError, defaultIfEmpty, filter, finalize, map, switchMap, take, takeUntil, tap} from 'rxjs/operators';\n\nimport {createRouterState} from './create_router_state';\nimport {INPUT_BINDER} from './directives/router_outlet';\nimport {BeforeActivateRoutes, Event, GuardsCheckEnd, GuardsCheckStart, IMPERATIVE_NAVIGATION, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationSkippedCode, NavigationStart, NavigationTrigger, RedirectRequest, ResolveEnd, ResolveStart, RouteConfigLoadEnd, RouteConfigLoadStart, RoutesRecognized} from './events';\nimport {NavigationBehaviorOptions, QueryParamsHandling, Route, Routes} from './models';\nimport {isNavigationCancelingError, isRedirectingNavigationCancelingError, redirectingNavigationError} from './navigation_canceling_error';\nimport {activateRoutes} from './operators/activate_routes';\nimport {checkGuards} from './operators/check_guards';\nimport {recognize} from './operators/recognize';\nimport {resolveData} from './operators/resolve_data';\nimport {switchTap} from './operators/switch_tap';\nimport {TitleStrategy} from './page_title_strategy';\nimport {RouteReuseStrategy} from './route_reuse_strategy';\nimport {ROUTER_CONFIGURATION} from './router_config';\nimport {RouterConfigLoader} from './router_config_loader';\nimport {ChildrenOutletContexts} from './router_outlet_context';\nimport {ActivatedRoute, ActivatedRouteSnapshot, createEmptyState, RouterState, RouterStateSnapshot} from './router_state';\nimport {Params} from './shared';\nimport {UrlHandlingStrategy} from './url_handling_strategy';\nimport {isUrlTree, UrlSerializer, UrlTree} from './url_tree';\nimport {Checks, getAllRouteGuards} from './utils/preactivation';\nimport {CREATE_VIEW_TRANSITION} from './utils/view_transition';\n\n\n\n/**\n * @description\n *\n * Options that modify the `Router` URL.\n * Supply an object containing any of these properties to a `Router` navigation function to\n * control how the target URL should be constructed.\n *\n * @see {@link Router#navigate}\n * @see {@link Router#createUrlTree}\n * @see [Routing and Navigation guide](guide/router)\n *\n * @publicApi\n */\nexport interface UrlCreationOptions {\n  /**\n   * Specifies a root URI to use for relative navigation.\n   *\n   * For example, consider the following route configuration where the parent route\n   * has two children.\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   * The following `go()` function navigates to the `list` route by\n   * interpreting the destination URI as relative to the activated `child`  route\n   *\n   * ```\n   *  @Component({...})\n   *  class ChildComponent {\n   *    constructor(private router: Router, private route: ActivatedRoute) {}\n   *\n   *    go() {\n   *      router.navigate(['../list'], { relativeTo: this.route });\n   *    }\n   *  }\n   * ```\n   *\n   * A value of `null` or `undefined` indicates that the navigation commands should be applied\n   * relative to the root.\n   */\n  relativeTo?: ActivatedRoute|null;\n\n  /**\n   * Sets query parameters to the URL.\n   *\n   * ```\n   * // Navigate to /results?page=1\n   * router.navigate(['/results'], { queryParams: { page: 1 } });\n   * ```\n   */\n  queryParams?: Params|null;\n\n  /**\n   * Sets the hash fragment for the URL.\n   *\n   * ```\n   * // Navigate to /results#top\n   * router.navigate(['/results'], { fragment: 'top' });\n   * ```\n   */\n  fragment?: string;\n\n  /**\n   * How to handle query parameters in the router link for the next navigation.\n   * One of:\n   * * `preserve` : Preserve current parameters.\n   * * `merge` : Merge new with current parameters.\n   *\n   * The \"preserve\" option discards any new query params:\n   * ```\n   * // from /view1?page=1 to/view2?page=1\n   * router.navigate(['/view2'], { queryParams: { page: 2 },  queryParamsHandling: \"preserve\"\n   * });\n   * ```\n   * The \"merge\" option appends new query params to the params from the current URL:\n   * ```\n   * // from /view1?page=1 to/view2?page=1&otherKey=2\n   * router.navigate(['/view2'], { queryParams: { otherKey: 2 },  queryParamsHandling: \"merge\"\n   * });\n   * ```\n   * In case of a key collision between current parameters and those in the `queryParams` object,\n   * the new value is used.\n   *\n   */\n  queryParamsHandling?: QueryParamsHandling|null;\n\n  /**\n   * When true, preserves the URL fragment for the next navigation\n   *\n   * ```\n   * // Preserve fragment from /results#top to /view#top\n   * router.navigate(['/view'], { preserveFragment: true });\n   * ```\n   */\n  preserveFragment?: boolean;\n}\n\n/**\n * @description\n *\n * Options that modify the `Router` navigation strategy.\n * Supply an object containing any of these properties to a `Router` navigation function to\n * control how the target URL should be constructed or interpreted.\n *\n * @see {@link Router#navigate}\n * @see {@link Router#navigateByUrl}\n * @see {@link Router#createurltree}\n * @see [Routing and Navigation guide](guide/router)\n * @see {@link UrlCreationOptions}\n * @see {@link NavigationBehaviorOptions}\n *\n * @publicApi\n */\nexport interface NavigationExtras extends UrlCreationOptions, NavigationBehaviorOptions {}\n\nexport type RestoredState = {\n  [k: string]: any,\n  // TODO(#27607): Remove `navigationId` and `ɵrouterPageId` and move to `ng` or `ɵ` namespace.\n  navigationId: number,\n  // The `ɵ` prefix is there to reduce the chance of colliding with any existing user properties on\n  // the history state.\n  ɵrouterPageId?: number,\n};\n\n/**\n * Information about a navigation operation.\n * Retrieve the most recent navigation object with the\n * [Router.getCurrentNavigation() method](api/router/Router#getcurrentnavigation) .\n *\n * * *id* : The unique identifier of the current navigation.\n * * *initialUrl* : The target URL passed into the `Router#navigateByUrl()` call before navigation.\n * This is the value before the router has parsed or applied redirects to it.\n * * *extractedUrl* : The initial target URL after being parsed with `UrlSerializer.extract()`.\n * * *finalUrl* : The extracted URL after redirects have been applied.\n * This URL may not be available immediately, therefore this property can be `undefined`.\n * It is guaranteed to be set after the `RoutesRecognized` event fires.\n * * *trigger* : Identifies how this navigation was triggered.\n * -- 'imperative'--Triggered by `router.navigateByUrl` or `router.navigate`.\n * -- 'popstate'--Triggered by a popstate event.\n * -- 'hashchange'--Triggered by a hashchange event.\n * * *extras* : A `NavigationExtras` options object that controlled the strategy used for this\n * navigation.\n * * *previousNavigation* : The previously successful `Navigation` object. Only one previous\n * navigation is available, therefore this previous `Navigation` object has a `null` value for its\n * own `previousNavigation`.\n *\n * @publicApi\n */\nexport interface Navigation {\n  /**\n   * The unique identifier of the current navigation.\n   */\n  id: number;\n  /**\n   * The target URL passed into the `Router#navigateByUrl()` call before navigation. This is\n   * the value before the router has parsed or applied redirects to it.\n   */\n  initialUrl: UrlTree;\n  /**\n   * The initial target URL after being parsed with `UrlHandlingStrategy.extract()`.\n   */\n  extractedUrl: UrlTree;\n  /**\n   * The extracted URL after redirects have been applied.\n   * This URL may not be available immediately, therefore this property can be `undefined`.\n   * It is guaranteed to be set after the `RoutesRecognized` event fires.\n   */\n  finalUrl?: UrlTree;\n  /**\n   * TODO(atscott): If we want to make StateManager public, they will need access to this. Note that\n   * it's already eventually exposed through router.routerState.\n   * @internal\n   */\n  targetRouterState?: RouterState;\n  /**\n   * Identifies how this navigation was triggered.\n   *\n   * * 'imperative'--Triggered by `router.navigateByUrl` or `router.navigate`.\n   * * 'popstate'--Triggered by a popstate event.\n   * * 'hashchange'--Triggered by a hashchange event.\n   */\n  trigger: 'imperative'|'popstate'|'hashchange';\n  /**\n   * Options that controlled the strategy used for this navigation.\n   * See `NavigationExtras`.\n   */\n  extras: NavigationExtras;\n  /**\n   * The previously successful `Navigation` object. Only one previous navigation\n   * is available, therefore this previous `Navigation` object has a `null` value\n   * for its own `previousNavigation`.\n   */\n  previousNavigation: Navigation|null;\n}\n\nexport interface NavigationTransition {\n  id: number;\n  currentUrlTree: UrlTree;\n  extractedUrl: UrlTree;\n  currentRawUrl: UrlTree;\n  urlAfterRedirects?: UrlTree;\n  rawUrl: UrlTree;\n  extras: NavigationExtras;\n  resolve: any;\n  reject: any;\n  promise: Promise<boolean>;\n  source: NavigationTrigger;\n  restoredState: RestoredState|null;\n  currentSnapshot: RouterStateSnapshot;\n  targetSnapshot: RouterStateSnapshot|null;\n  currentRouterState: RouterState;\n  targetRouterState: RouterState|null;\n  guards: Checks;\n  guardsResult: boolean|UrlTree|null;\n}\n\n/**\n * The interface from the Router needed by the transitions. Used to avoid a circular dependency on\n * Router. This interface should be whittled down with future refactors. For example, we do not need\n * to get `UrlSerializer` from the Router. We can instead inject it in `NavigationTransitions`\n * directly.\n */\ninterface InternalRouterInterface {\n  config: Routes;\n  // All of these are public API of router interface and can change during runtime because they are\n  // writeable. Ideally, these would be removed and the values retrieved instead from the values\n  // available in DI.\n  errorHandler: (error: any) => any;\n  navigated: boolean;\n  routeReuseStrategy: RouteReuseStrategy;\n  onSameUrlNavigation: 'reload'|'ignore';\n}\n\n@Injectable({providedIn: 'root'})\nexport class NavigationTransitions {\n  currentNavigation: Navigation|null = null;\n  currentTransition: NavigationTransition|null = null;\n  lastSuccessfulNavigation: Navigation|null = null;\n  /**\n   * These events are used to communicate back to the Router about the state of the transition. The\n   * Router wants to respond to these events in various ways. Because the `NavigationTransition`\n   * class is not public, this event subject is not publicly exposed.\n   */\n  readonly events = new Subject<Event|BeforeActivateRoutes|RedirectRequest>();\n  /**\n   * Used to abort the current transition with an error.\n   */\n  readonly transitionAbortSubject = new Subject<Error>();\n  private readonly configLoader = inject(RouterConfigLoader);\n  private readonly environmentInjector = inject(EnvironmentInjector);\n  private readonly urlSerializer = inject(UrlSerializer);\n  private readonly rootContexts = inject(ChildrenOutletContexts);\n  private readonly location = inject(Location);\n  private readonly inputBindingEnabled = inject(INPUT_BINDER, {optional: true}) !== null;\n  private readonly titleStrategy?: TitleStrategy = inject(TitleStrategy);\n  private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}) || {};\n  private readonly paramsInheritanceStrategy =\n      this.options.paramsInheritanceStrategy || 'emptyOnly';\n  private readonly urlHandlingStrategy = inject(UrlHandlingStrategy);\n  private readonly createViewTransition = inject(CREATE_VIEW_TRANSITION, {optional: true});\n\n  navigationId = 0;\n  get hasRequestedNavigation() {\n    return this.navigationId !== 0;\n  }\n  private transitions?: BehaviorSubject<NavigationTransition>;\n  /**\n   * Hook that enables you to pause navigation after the preactivation phase.\n   * Used by `RouterModule`.\n   *\n   * @internal\n   */\n  afterPreactivation: () => Observable<void> = () => of(void 0);\n  /** @internal */\n  rootComponentType: Type<any>|null = null;\n\n  constructor() {\n    const onLoadStart = (r: Route) => this.events.next(new RouteConfigLoadStart(r));\n    const onLoadEnd = (r: Route) => this.events.next(new RouteConfigLoadEnd(r));\n    this.configLoader.onLoadEndListener = onLoadEnd;\n    this.configLoader.onLoadStartListener = onLoadStart;\n  }\n\n  complete() {\n    this.transitions?.complete();\n  }\n\n  handleNavigationRequest(\n      request: Pick<\n          NavigationTransition,\n          'source'|'restoredState'|'currentUrlTree'|'currentRawUrl'|'rawUrl'|'extras'|'resolve'|\n          'reject'|'promise'|'currentSnapshot'|'currentRouterState'>) {\n    const id = ++this.navigationId;\n    this.transitions?.next({...this.transitions.value, ...request, id});\n  }\n\n  setupNavigations(\n      router: InternalRouterInterface, initialUrlTree: UrlTree,\n      initialRouterState: RouterState): Observable<NavigationTransition> {\n    this.transitions = new BehaviorSubject<NavigationTransition>({\n      id: 0,\n      currentUrlTree: initialUrlTree,\n      currentRawUrl: initialUrlTree,\n      extractedUrl: this.urlHandlingStrategy.extract(initialUrlTree),\n      urlAfterRedirects: this.urlHandlingStrategy.extract(initialUrlTree),\n      rawUrl: initialUrlTree,\n      extras: {},\n      resolve: null,\n      reject: null,\n      promise: Promise.resolve(true),\n      source: IMPERATIVE_NAVIGATION,\n      restoredState: null,\n      currentSnapshot: initialRouterState.snapshot,\n      targetSnapshot: null,\n      currentRouterState: initialRouterState,\n      targetRouterState: null,\n      guards: {canActivateChecks: [], canDeactivateChecks: []},\n      guardsResult: null,\n    });\n    return this.transitions.pipe(\n               filter(t => t.id !== 0),\n\n               // Extract URL\n               map(t =>\n                       ({...t, extractedUrl: this.urlHandlingStrategy.extract(t.rawUrl)} as\n                        NavigationTransition)),\n\n               // Using switchMap so we cancel executing navigations when a new one comes in\n               switchMap(overallTransitionState => {\n                 this.currentTransition = overallTransitionState;\n                 let completed = false;\n                 let errored = false;\n                 return of(overallTransitionState)\n                     .pipe(\n                         // Store the Navigation object\n                         tap(t => {\n                           this.currentNavigation = {\n                             id: t.id,\n                             initialUrl: t.rawUrl,\n                             extractedUrl: t.extractedUrl,\n                             trigger: t.source,\n                             extras: t.extras,\n                             previousNavigation: !this.lastSuccessfulNavigation ? null : {\n                               ...this.lastSuccessfulNavigation,\n                               previousNavigation: null,\n                             },\n                           };\n                         }),\n                         switchMap(t => {\n                           const urlTransition = !router.navigated ||\n                               this.isUpdatingInternalState() || this.isUpdatedBrowserUrl();\n\n                           const onSameUrlNavigation =\n                               t.extras.onSameUrlNavigation ?? router.onSameUrlNavigation;\n                           if (!urlTransition && onSameUrlNavigation !== 'reload') {\n                             const reason = (typeof ngDevMode === 'undefined' || ngDevMode) ?\n                                 `Navigation to ${\n                                     t.rawUrl} was ignored because it is the same as the current Router URL.` :\n                                 '';\n                             this.events.next(new NavigationSkipped(\n                                 t.id, this.urlSerializer.serialize(t.rawUrl), reason,\n                                 NavigationSkippedCode.IgnoredSameUrlNavigation));\n                             t.resolve(null);\n                             return EMPTY;\n                           }\n\n                           if (this.urlHandlingStrategy.shouldProcessUrl(t.rawUrl)) {\n                             return of(t).pipe(\n                                 // Fire NavigationStart event\n                                 switchMap(t => {\n                                   const transition = this.transitions?.getValue();\n                                   this.events.next(new NavigationStart(\n                                       t.id, this.urlSerializer.serialize(t.extractedUrl), t.source,\n                                       t.restoredState));\n                                   if (transition !== this.transitions?.getValue()) {\n                                     return EMPTY;\n                                   }\n\n                                   // This delay is required to match old behavior that forced\n                                   // navigation to always be async\n                                   return Promise.resolve(t);\n                                 }),\n\n                                 // Recognize\n                                 recognize(\n                                     this.environmentInjector, this.configLoader,\n                                     this.rootComponentType, router.config, this.urlSerializer,\n                                     this.paramsInheritanceStrategy),\n\n                                 // Update URL if in `eager` update mode\n                                 tap(t => {\n                                   overallTransitionState.targetSnapshot = t.targetSnapshot;\n                                   overallTransitionState.urlAfterRedirects = t.urlAfterRedirects;\n                                   this.currentNavigation = {\n                                     ...this.currentNavigation!,\n                                     finalUrl: t.urlAfterRedirects\n                                   };\n\n                                   // Fire RoutesRecognized\n                                   const routesRecognized = new RoutesRecognized(\n                                       t.id, this.urlSerializer.serialize(t.extractedUrl),\n                                       this.urlSerializer.serialize(t.urlAfterRedirects!),\n                                       t.targetSnapshot!);\n                                   this.events.next(routesRecognized);\n                                 }));\n                           } else if (\n                               urlTransition &&\n                               this.urlHandlingStrategy.shouldProcessUrl(t.currentRawUrl)) {\n                             /* When the current URL shouldn't be processed, but the previous one\n                              * was, we handle this \"error condition\" by navigating to the\n                              * previously successful URL, but leaving the URL intact.*/\n                             const {id, extractedUrl, source, restoredState, extras} = t;\n                             const navStart = new NavigationStart(\n                                 id, this.urlSerializer.serialize(extractedUrl), source,\n                                 restoredState);\n                             this.events.next(navStart);\n                             const targetSnapshot =\n                                 createEmptyState(extractedUrl, this.rootComponentType).snapshot;\n\n                             this.currentTransition = overallTransitionState = {\n                               ...t,\n                               targetSnapshot,\n                               urlAfterRedirects: extractedUrl,\n                               extras: {...extras, skipLocationChange: false, replaceUrl: false},\n                             };\n                             this.currentNavigation!.finalUrl = extractedUrl;\n                             return of(overallTransitionState);\n                           } else {\n                             /* When neither the current or previous URL can be processed, do\n                              * nothing other than update router's internal reference to the\n                              * current \"settled\" URL. This way the next navigation will be coming\n                              * from the current URL in the browser.\n                              */\n                             const reason = (typeof ngDevMode === 'undefined' || ngDevMode) ?\n                                 `Navigation was ignored because the UrlHandlingStrategy` +\n                                     ` indicated neither the current URL ${\n                                         t.currentRawUrl} nor target URL ${\n                                         t.rawUrl} should be processed.` :\n                                 '';\n                             this.events.next(new NavigationSkipped(\n                                 t.id, this.urlSerializer.serialize(t.extractedUrl), reason,\n                                 NavigationSkippedCode.IgnoredByUrlHandlingStrategy));\n                             t.resolve(null);\n                             return EMPTY;\n                           }\n                         }),\n\n                         // --- GUARDS ---\n                         tap(t => {\n                           const guardsStart = new GuardsCheckStart(\n                               t.id, this.urlSerializer.serialize(t.extractedUrl),\n                               this.urlSerializer.serialize(t.urlAfterRedirects!),\n                               t.targetSnapshot!);\n                           this.events.next(guardsStart);\n                         }),\n\n                         map(t => {\n                           this.currentTransition = overallTransitionState = {\n                             ...t,\n                             guards: getAllRouteGuards(\n                                 t.targetSnapshot!, t.currentSnapshot, this.rootContexts)\n                           };\n                           return overallTransitionState;\n                         }),\n\n                         checkGuards(\n                             this.environmentInjector, (evt: Event) => this.events.next(evt)),\n                         tap(t => {\n                           overallTransitionState.guardsResult = t.guardsResult;\n                           if (isUrlTree(t.guardsResult)) {\n                             throw redirectingNavigationError(this.urlSerializer, t.guardsResult);\n                           }\n\n                           const guardsEnd = new GuardsCheckEnd(\n                               t.id, this.urlSerializer.serialize(t.extractedUrl),\n                               this.urlSerializer.serialize(t.urlAfterRedirects!),\n                               t.targetSnapshot!, !!t.guardsResult);\n                           this.events.next(guardsEnd);\n                         }),\n\n                         filter(t => {\n                           if (!t.guardsResult) {\n                             this.cancelNavigationTransition(\n                                 t, '', NavigationCancellationCode.GuardRejected);\n                             return false;\n                           }\n                           return true;\n                         }),\n\n                         // --- RESOLVE ---\n                         switchTap(t => {\n                           if (t.guards.canActivateChecks.length) {\n                             return of(t).pipe(\n                                 tap(t => {\n                                   const resolveStart = new ResolveStart(\n                                       t.id, this.urlSerializer.serialize(t.extractedUrl),\n                                       this.urlSerializer.serialize(t.urlAfterRedirects!),\n                                       t.targetSnapshot!);\n                                   this.events.next(resolveStart);\n                                 }),\n                                 switchMap(t => {\n                                   let dataResolved = false;\n                                   return of(t).pipe(\n                                       resolveData(\n                                           this.paramsInheritanceStrategy,\n                                           this.environmentInjector),\n                                       tap({\n                                         next: () => dataResolved = true,\n                                         complete: () => {\n                                           if (!dataResolved) {\n                                             this.cancelNavigationTransition(\n                                                 t,\n                                                 (typeof ngDevMode === 'undefined' || ngDevMode) ?\n                                                     `At least one route resolver didn't emit any value.` :\n                                                     '',\n                                                 NavigationCancellationCode.NoDataFromResolver);\n                                           }\n                                         }\n                                       }),\n                                   );\n                                 }),\n                                 tap(t => {\n                                   const resolveEnd = new ResolveEnd(\n                                       t.id, this.urlSerializer.serialize(t.extractedUrl),\n                                       this.urlSerializer.serialize(t.urlAfterRedirects!),\n                                       t.targetSnapshot!);\n                                   this.events.next(resolveEnd);\n                                 }));\n                           }\n                           return undefined;\n                         }),\n\n                         // --- LOAD COMPONENTS ---\n                         switchTap((t: NavigationTransition) => {\n                           const loadComponents =\n                               (route: ActivatedRouteSnapshot): Array<Observable<void>> => {\n                                 const loaders: Array<Observable<void>> = [];\n                                 if (route.routeConfig?.loadComponent &&\n                                     !route.routeConfig._loadedComponent) {\n                                   loaders.push(this.configLoader.loadComponent(route.routeConfig)\n                                                    .pipe(\n                                                        tap(loadedComponent => {\n                                                          route.component = loadedComponent;\n                                                        }),\n                                                        map(() => void 0),\n                                                        ));\n                                 }\n                                 for (const child of route.children) {\n                                   loaders.push(...loadComponents(child));\n                                 }\n                                 return loaders;\n                               };\n                           return combineLatest(loadComponents(t.targetSnapshot!.root))\n                               .pipe(defaultIfEmpty(null), take(1));\n                         }),\n\n                         switchTap(() => this.afterPreactivation()),\n\n                         switchMap(() => {\n                           const {currentSnapshot, targetSnapshot} = overallTransitionState;\n                           const viewTransitionStarted = this.createViewTransition?.(\n                               this.environmentInjector, currentSnapshot.root,\n                               targetSnapshot!.root);\n\n                           // If view transitions are enabled, block the navigation until the view\n                           // transition callback starts. Otherwise, continue immediately.\n                           return viewTransitionStarted ?\n                               from(viewTransitionStarted).pipe(map(() => overallTransitionState)) :\n                               of(overallTransitionState);\n                         }),\n\n                         map((t: NavigationTransition) => {\n                           const targetRouterState = createRouterState(\n                               router.routeReuseStrategy, t.targetSnapshot!, t.currentRouterState);\n                           this.currentTransition =\n                               overallTransitionState = {...t, targetRouterState};\n                           this.currentNavigation!.targetRouterState = targetRouterState;\n                           return overallTransitionState;\n                         }),\n\n                         tap(() => {\n                           this.events.next(new BeforeActivateRoutes());\n                         }),\n\n                         activateRoutes(\n                             this.rootContexts, router.routeReuseStrategy,\n                             (evt: Event) => this.events.next(evt), this.inputBindingEnabled),\n\n                         // Ensure that if some observable used to drive the transition doesn't\n                         // complete, the navigation still finalizes This should never happen, but\n                         // this is done as a safety measure to avoid surfacing this error (#49567).\n                         take(1),\n\n                         tap({\n                           next: (t: NavigationTransition) => {\n                             completed = true;\n                             this.lastSuccessfulNavigation = this.currentNavigation;\n                             this.events.next(new NavigationEnd(\n                                 t.id, this.urlSerializer.serialize(t.extractedUrl),\n                                 this.urlSerializer.serialize(t.urlAfterRedirects!)));\n                             this.titleStrategy?.updateTitle(t.targetRouterState!.snapshot);\n                             t.resolve(true);\n                           },\n                           complete: () => {\n                             completed = true;\n                           }\n                         }),\n\n                         // There used to be a lot more logic happening directly within the\n                         // transition Observable. Some of this logic has been refactored out to\n                         // other places but there may still be errors that happen there. This gives\n                         // us a way to cancel the transition from the outside. This may also be\n                         // required in the future to support something like the abort signal of the\n                         // Navigation API where the navigation gets aborted from outside the\n                         // transition.\n                         takeUntil(this.transitionAbortSubject.pipe(tap(err => {\n                           throw err;\n                         }))),\n\n                         finalize(() => {\n                           /* When the navigation stream finishes either through error or success,\n                            * we set the `completed` or `errored` flag. However, there are some\n                            * situations where we could get here without either of those being set.\n                            * For instance, a redirect during NavigationStart. Therefore, this is a\n                            * catch-all to make sure the NavigationCancel event is fired when a\n                            * navigation gets cancelled but not caught by other means. */\n                           if (!completed && !errored) {\n                             const cancelationReason =\n                                 (typeof ngDevMode === 'undefined' || ngDevMode) ?\n                                 `Navigation ID ${\n                                     overallTransitionState\n                                         .id} is not equal to the current navigation id ${\n                                     this.navigationId}` :\n                                 '';\n                             this.cancelNavigationTransition(\n                                 overallTransitionState, cancelationReason,\n                                 NavigationCancellationCode.SupersededByNewNavigation);\n                           }\n                           // Only clear current navigation if it is still set to the one that\n                           // finalized.\n                           if (this.currentNavigation?.id === overallTransitionState.id) {\n                             this.currentNavigation = null;\n                           }\n                         }),\n                         catchError((e) => {\n                           errored = true;\n                           /* This error type is issued during Redirect, and is handled as a\n                            * cancellation rather than an error. */\n                           if (isNavigationCancelingError(e)) {\n                             this.events.next(new NavigationCancel(\n                                 overallTransitionState.id,\n                                 this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n                                 e.message, e.cancellationCode));\n\n                             // When redirecting, we need to delay resolving the navigation\n                             // promise and push it to the redirect navigation\n                             if (!isRedirectingNavigationCancelingError(e)) {\n                               overallTransitionState.resolve(false);\n                             } else {\n                               this.events.next(new RedirectRequest(e.url));\n                             }\n\n                             /* All other errors should reset to the router's internal URL reference\n                              * to the pre-error state. */\n                           } else {\n                             this.events.next(new NavigationError(\n                                 overallTransitionState.id,\n                                 this.urlSerializer.serialize(overallTransitionState.extractedUrl),\n                                 e, overallTransitionState.targetSnapshot ?? undefined));\n                             try {\n                               overallTransitionState.resolve(router.errorHandler(e));\n                             } catch (ee) {\n                               overallTransitionState.reject(ee);\n                             }\n                           }\n                           return EMPTY;\n                         }));\n                 // casting because `pipe` returns observable({}) when called with 8+ arguments\n               })) as Observable<NavigationTransition>;\n  }\n\n  private cancelNavigationTransition(\n      t: NavigationTransition, reason: string, code: NavigationCancellationCode) {\n    const navCancel =\n        new NavigationCancel(t.id, this.urlSerializer.serialize(t.extractedUrl), reason, code);\n    this.events.next(navCancel);\n    t.resolve(false);\n  }\n\n  /**\n   * @returns Whether we're navigating to somewhere that is not what the Router is\n   * currently set to.\n   */\n  private isUpdatingInternalState() {\n    // TODO(atscott): The serializer should likely be used instead of\n    // `UrlTree.toString()`. Custom serializers are often written to handle\n    // things better than the default one (objects, for example will be\n    // [Object object] with the custom serializer and be \"the same\" when they\n    // aren't).\n    // (Same for isUpdatedBrowserUrl)\n    return this.currentTransition?.extractedUrl.toString() !==\n        this.currentTransition?.currentUrlTree.toString();\n  }\n\n  /**\n   * @returns Whether we're updating the browser URL to something new (navigation is going\n   * to somewhere not displayed in the URL bar and we will update the URL\n   * bar if navigation succeeds).\n   */\n  private isUpdatedBrowserUrl() {\n    // The extracted URL is the part of the URL that this application cares about. `extract` may\n    // return only part of the browser URL and that part may have not changed even if some other\n    // portion of the URL did.\n    const extractedBrowserUrl =\n        this.urlHandlingStrategy.extract(this.urlSerializer.parse(this.location.path(true)));\n    return extractedBrowserUrl.toString() !== this.currentTransition?.extractedUrl.toString() &&\n        !this.currentTransition?.extras.skipLocationChange;\n  }\n}\n\nexport function isBrowserTriggeredNavigation(source: NavigationTrigger) {\n  return source !== IMPERATIVE_NAVIGATION;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {ComponentRef, inject, Injectable} from '@angular/core';\n\nimport {OutletContext} from './router_outlet_context';\nimport {ActivatedRoute, ActivatedRouteSnapshot} from './router_state';\nimport {TreeNode} from './utils/tree';\n\n/**\n * @description\n *\n * 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 * @publicApi\n */\nexport type DetachedRouteHandle = {};\n\n/** @internal */\nexport type DetachedRouteHandleInternal = {\n  contexts: Map<string, OutletContext>,\n  componentRef: ComponentRef<any>,\n  route: TreeNode<ActivatedRoute>,\n};\n\n/**\n * @description\n *\n * Provides a way to customize when activated routes get reused.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root', useFactory: () => inject(DefaultRouteReuseStrategy)})\nexport abstract class RouteReuseStrategy {\n  /** Determines if this route (and its subtree) should be detached to be reused later */\n  abstract shouldDetach(route: ActivatedRouteSnapshot): boolean;\n\n  /**\n   * Stores the detached route.\n   *\n   * Storing a `null` value should erase the previously stored value.\n   */\n  abstract store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle|null): void;\n\n  /** Determines if this route (and its subtree) should be reattached */\n  abstract shouldAttach(route: ActivatedRouteSnapshot): boolean;\n\n  /** Retrieves the previously stored route */\n  abstract retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle|null;\n\n  /** Determines if a route should be reused */\n  abstract shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean;\n}\n\n/**\n * @description\n *\n * This base route reuse strategy only reuses routes when the matched router configs are\n * identical. This prevents components from being destroyed and recreated\n * when just the route parameters, query parameters or fragment change\n * (that is, the existing component is _reused_).\n *\n * This strategy does not store any routes for later reuse.\n *\n * Angular uses this strategy by default.\n *\n *\n * It can be used as a base class for custom route reuse strategies, i.e. you can create your own\n * class that extends the `BaseRouteReuseStrategy` one.\n * @publicApi\n */\nexport abstract class BaseRouteReuseStrategy implements RouteReuseStrategy {\n  /**\n   * Whether the given route should detach for later reuse.\n   * Always returns false for `BaseRouteReuseStrategy`.\n   * */\n  shouldDetach(route: ActivatedRouteSnapshot): boolean {\n    return false;\n  }\n\n  /**\n   * A no-op; the route is never stored since this strategy never detaches routes for later re-use.\n   */\n  store(route: ActivatedRouteSnapshot, detachedTree: DetachedRouteHandle): void {}\n\n  /** Returns `false`, meaning the route (and its subtree) is never reattached */\n  shouldAttach(route: ActivatedRouteSnapshot): boolean {\n    return false;\n  }\n\n  /** Returns `null` because this strategy does not store routes for later re-use. */\n  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle|null {\n    return null;\n  }\n\n  /**\n   * Determines if a route should be reused.\n   * This strategy returns `true` when the future route config and current route config are\n   * identical.\n   */\n  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n    return future.routeConfig === curr.routeConfig;\n  }\n}\n\n@Injectable({providedIn: 'root'})\nexport class DefaultRouteReuseStrategy extends BaseRouteReuseStrategy {\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Location} from '@angular/common';\nimport {inject, Injectable} from '@angular/core';\nimport {SubscriptionLike} from 'rxjs';\n\nimport {BeforeActivateRoutes, Event, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped, NavigationStart, PrivateRouterEvents, RoutesRecognized,} from '../events';\nimport {Navigation, RestoredState} from '../navigation_transition';\nimport {ROUTER_CONFIGURATION} from '../router_config';\nimport {createEmptyState, RouterState} from '../router_state';\nimport {UrlHandlingStrategy} from '../url_handling_strategy';\nimport {UrlSerializer, UrlTree} from '../url_tree';\n\n@Injectable({providedIn: 'root', useFactory: () => inject(HistoryStateManager)})\nexport abstract class StateManager {\n  /**\n   * Returns the currently activated `UrlTree`.\n   *\n   * This `UrlTree` shows only URLs that the `Router` is configured to handle (through\n   * `UrlHandlingStrategy`).\n   *\n   * The value is set after finding the route config tree to activate but before activating the\n   * route.\n   */\n  abstract getCurrentUrlTree(): UrlTree;\n\n  /**\n   * Returns a `UrlTree` that is represents what the browser is actually showing.\n   *\n   * In the life of a navigation transition:\n   * 1. When a navigation begins, the raw `UrlTree` is updated to the full URL that's being\n   * navigated to.\n   * 2. During a navigation, redirects are applied, which might only apply to _part_ of the URL (due\n   * to `UrlHandlingStrategy`).\n   * 3. Just before activation, the raw `UrlTree` is updated to include the redirects on top of the\n   * original raw URL.\n   *\n   * Note that this is _only_ here to support `UrlHandlingStrategy.extract` and\n   * `UrlHandlingStrategy.shouldProcessUrl`. Without those APIs, the current `UrlTree` would not\n   * deviated from the raw `UrlTree`.\n   *\n   * For `extract`, a raw `UrlTree` is needed because `extract` may only return part\n   * of the navigation URL. Thus, the current `UrlTree` may only represent _part_ of the browser\n   * URL. When a navigation gets cancelled and the router needs to reset the URL or a new navigation\n   * occurs, it needs to know the _whole_ browser URL, not just the part handled by\n   * `UrlHandlingStrategy`.\n   * For `shouldProcessUrl`, when the return is `false`, the router ignores the navigation but\n   * still updates the raw `UrlTree` with the assumption that the navigation was caused by the\n   * location change listener due to a URL update by the AngularJS router. In this case, the router\n   * still need to know what the browser's URL is for future navigations.\n   */\n  abstract getRawUrlTree(): UrlTree;\n\n  /** Returns the current state stored by the browser for the current history entry. */\n  abstract restoredState(): RestoredState|null|undefined;\n\n  /** Returns the current RouterState. */\n  abstract getRouterState(): RouterState;\n\n  /**\n   * Registers a listener that is called whenever the current history entry changes by some API\n   * outside the Router. This includes user-activated changes like back buttons and link clicks, but\n   * also includes programmatic APIs called by non-Router JavaScript.\n   */\n  abstract registerNonRouterCurrentEntryChangeListener(\n      listener: (url: string, state: RestoredState|null|undefined) => void): SubscriptionLike;\n\n  /**\n   * Handles a navigation event sent from the Router. These are typically events that indicate a\n   * navigation has started, progressed, been cancelled, or finished.\n   */\n  abstract handleRouterEvent(e: Event|PrivateRouterEvents, currentTransition: Navigation): void;\n}\n\n@Injectable({providedIn: 'root'})\nexport class HistoryStateManager extends StateManager {\n  private readonly location = inject(Location);\n  private readonly urlSerializer = inject(UrlSerializer);\n  private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}) || {};\n  private readonly canceledNavigationResolution =\n      this.options.canceledNavigationResolution || 'replace';\n\n  private urlHandlingStrategy = inject(UrlHandlingStrategy);\n  private urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n\n  private currentUrlTree = new UrlTree();\n\n  override getCurrentUrlTree() {\n    return this.currentUrlTree;\n  }\n\n  private rawUrlTree = this.currentUrlTree;\n\n  override getRawUrlTree() {\n    return this.rawUrlTree;\n  }\n\n  /**\n   * The id of the currently active page in the router.\n   * Updated to the transition's target id on a successful navigation.\n   *\n   * This is used to track what page the router last activated. When an attempted navigation fails,\n   * the router can then use this to compute how to restore the state back to the previously active\n   * page.\n   */\n  private currentPageId: number = 0;\n  private lastSuccessfulId: number = -1;\n\n  override restoredState(): RestoredState|null|undefined {\n    return this.location.getState() as RestoredState | null | undefined;\n  }\n\n  /**\n   * The ɵrouterPageId of whatever page is currently active in the browser history. This is\n   * important for computing the target page id for new navigations because we need to ensure each\n   * page id in the browser history is 1 more than the previous entry.\n   */\n  private get browserPageId(): number {\n    if (this.canceledNavigationResolution !== 'computed') {\n      return this.currentPageId;\n    }\n    return this.restoredState()?.ɵrouterPageId ?? this.currentPageId;\n  }\n\n  private routerState = createEmptyState(this.currentUrlTree, null);\n\n  override getRouterState() {\n    return this.routerState;\n  }\n\n  private stateMemento = this.createStateMemento();\n\n  private createStateMemento() {\n    return {\n      rawUrlTree: this.rawUrlTree,\n      currentUrlTree: this.currentUrlTree,\n      routerState: this.routerState,\n    };\n  }\n\n  override registerNonRouterCurrentEntryChangeListener(\n      listener: (url: string, state: RestoredState|null|undefined) => void): SubscriptionLike {\n    return this.location.subscribe(event => {\n      if (event['type'] === 'popstate') {\n        listener(event['url']!, event.state as RestoredState | null | undefined);\n      }\n    });\n  }\n\n  override handleRouterEvent(e: Event|PrivateRouterEvents, currentTransition: Navigation) {\n    if (e instanceof NavigationStart) {\n      this.stateMemento = this.createStateMemento();\n    } else if (e instanceof NavigationSkipped) {\n      this.rawUrlTree = currentTransition.initialUrl;\n    } else if (e instanceof RoutesRecognized) {\n      if (this.urlUpdateStrategy === 'eager') {\n        if (!currentTransition.extras.skipLocationChange) {\n          const rawUrl = this.urlHandlingStrategy.merge(\n              currentTransition.finalUrl!, currentTransition.initialUrl);\n          this.setBrowserUrl(rawUrl, currentTransition);\n        }\n      }\n    } else if (e instanceof BeforeActivateRoutes) {\n      this.currentUrlTree = currentTransition.finalUrl!;\n      this.rawUrlTree =\n          this.urlHandlingStrategy.merge(currentTransition.finalUrl!, currentTransition.initialUrl);\n      this.routerState = currentTransition.targetRouterState!;\n      if (this.urlUpdateStrategy === 'deferred') {\n        if (!currentTransition.extras.skipLocationChange) {\n          this.setBrowserUrl(this.rawUrlTree, currentTransition);\n        }\n      }\n    } else if (\n        e instanceof NavigationCancel &&\n        (e.code === NavigationCancellationCode.GuardRejected ||\n         e.code === NavigationCancellationCode.NoDataFromResolver)) {\n      this.restoreHistory(currentTransition);\n    } else if (e instanceof NavigationError) {\n      this.restoreHistory(currentTransition, true);\n    } else if (e instanceof NavigationEnd) {\n      this.lastSuccessfulId = e.id;\n      this.currentPageId = this.browserPageId;\n    }\n  }\n\n  private setBrowserUrl(url: UrlTree, transition: Navigation) {\n    const path = this.urlSerializer.serialize(url);\n    if (this.location.isCurrentPathEqualTo(path) || !!transition.extras.replaceUrl) {\n      // replacements do not update the target page\n      const currentBrowserPageId = this.browserPageId;\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, currentBrowserPageId)\n      };\n      this.location.replaceState(path, '', state);\n    } else {\n      const state = {\n        ...transition.extras.state,\n        ...this.generateNgRouterState(transition.id, this.browserPageId + 1)\n      };\n      this.location.go(path, '', state);\n    }\n  }\n\n  /**\n   * Performs the necessary rollback action to restore the browser URL to the\n   * state before the transition.\n   */\n  private restoreHistory(navigation: Navigation, restoringFromCaughtError = false) {\n    if (this.canceledNavigationResolution === 'computed') {\n      const currentBrowserPageId = this.browserPageId;\n      const targetPagePosition = this.currentPageId - currentBrowserPageId;\n      if (targetPagePosition !== 0) {\n        this.location.historyGo(targetPagePosition);\n      } else if (this.currentUrlTree === navigation.finalUrl && targetPagePosition === 0) {\n        // We got to the activation stage (where currentUrlTree is set to the navigation's\n        // finalUrl), but we weren't moving anywhere in history (skipLocationChange or replaceUrl).\n        // We still need to reset the router state back to what it was when the navigation started.\n        this.resetState(navigation);\n        this.resetUrlToCurrentUrlTree();\n      } else {\n        // The browser URL and router state was not updated before the navigation cancelled so\n        // there's no restoration needed.\n      }\n    } else if (this.canceledNavigationResolution === 'replace') {\n      // TODO(atscott): It seems like we should _always_ reset the state here. It would be a no-op\n      // for `deferred` navigations that haven't change the internal state yet because guards\n      // reject. For 'eager' navigations, it seems like we also really should reset the state\n      // because the navigation was cancelled. Investigate if this can be done by running TGP.\n      if (restoringFromCaughtError) {\n        this.resetState(navigation);\n      }\n      this.resetUrlToCurrentUrlTree();\n    }\n  }\n\n  private resetState(navigation: Navigation): void {\n    this.routerState = this.stateMemento.routerState;\n    this.currentUrlTree = this.stateMemento.currentUrlTree;\n    // Note here that we use the urlHandlingStrategy to get the reset `rawUrlTree` because it may be\n    // configured to handle only part of the navigation URL. This means we would only want to reset\n    // the part of the navigation handled by the Angular router rather than the whole URL. In\n    // addition, the URLHandlingStrategy may be configured to specifically preserve parts of the URL\n    // when merging, such as the query params so they are not lost on a refresh.\n    this.rawUrlTree =\n        this.urlHandlingStrategy.merge(this.currentUrlTree, navigation.finalUrl ?? this.rawUrlTree);\n  }\n\n  private resetUrlToCurrentUrlTree(): void {\n    this.location.replaceState(\n        this.urlSerializer.serialize(this.rawUrlTree), '',\n        this.generateNgRouterState(this.lastSuccessfulId, this.currentPageId));\n  }\n\n  private generateNgRouterState(navigationId: number, routerPageId: number) {\n    if (this.canceledNavigationResolution === 'computed') {\n      return {navigationId, ɵrouterPageId: routerPageId};\n    }\n    return {navigationId};\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Observable} from 'rxjs';\nimport {filter, map, take} from 'rxjs/operators';\n\nimport {Event, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationError, NavigationSkipped} from '../events';\n\nenum NavigationResult {\n  COMPLETE,\n  FAILED,\n  REDIRECTING,\n}\n\n/**\n * Performs the given action once the router finishes its next/current navigation.\n *\n * The navigation is considered complete under the following conditions:\n * - `NavigationCancel` event emits and the code is not `NavigationCancellationCode.Redirect` or\n * `NavigationCancellationCode.SupersededByNewNavigation`. In these cases, the\n * redirecting/superseding navigation must finish.\n * - `NavigationError`, `NavigationEnd`, or `NavigationSkipped` event emits\n */\nexport function afterNextNavigation(router: {events: Observable<Event>}, action: () => void) {\n  router.events\n      .pipe(\n          filter(\n              (e): e is NavigationEnd|NavigationCancel|NavigationError|NavigationSkipped =>\n                  e instanceof NavigationEnd || e instanceof NavigationCancel ||\n                  e instanceof NavigationError || e instanceof NavigationSkipped),\n          map(e => {\n            if (e instanceof NavigationEnd || e instanceof NavigationSkipped) {\n              return NavigationResult.COMPLETE;\n            }\n            const redirecting = e instanceof NavigationCancel ?\n                (e.code === NavigationCancellationCode.Redirect ||\n                 e.code === NavigationCancellationCode.SupersededByNewNavigation) :\n                false;\n            return redirecting ? NavigationResult.REDIRECTING : NavigationResult.FAILED;\n          }),\n          filter(\n              (result): result is NavigationResult.COMPLETE|NavigationResult.FAILED =>\n                  result !== NavigationResult.REDIRECTING),\n          take(1),\n          )\n      .subscribe(() => {\n        action();\n      });\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Location} from '@angular/common';\nimport {inject, Injectable, NgZone, Type, ɵConsole as Console, ɵPendingTasks as PendingTasks, ɵRuntimeError as RuntimeError, ɵWritable as Writable} from '@angular/core';\nimport {Observable, Subject, Subscription, SubscriptionLike} from 'rxjs';\n\nimport {createSegmentGroupFromRoute, createUrlTreeFromSegmentGroup} from './create_url_tree';\nimport {INPUT_BINDER} from './directives/router_outlet';\nimport {RuntimeErrorCode} from './errors';\nimport {BeforeActivateRoutes, Event, IMPERATIVE_NAVIGATION, NavigationCancel, NavigationCancellationCode, NavigationEnd, NavigationTrigger, PrivateRouterEvents, RedirectRequest} from './events';\nimport {NavigationBehaviorOptions, OnSameUrlNavigation, Routes} from './models';\nimport {isBrowserTriggeredNavigation, Navigation, NavigationExtras, NavigationTransitions, RestoredState, UrlCreationOptions} from './navigation_transition';\nimport {RouteReuseStrategy} from './route_reuse_strategy';\nimport {ROUTER_CONFIGURATION} from './router_config';\nimport {ROUTES} from './router_config_loader';\nimport {Params} from './shared';\nimport {StateManager} from './statemanager/state_manager';\nimport {UrlHandlingStrategy} from './url_handling_strategy';\nimport {containsTree, IsActiveMatchOptions, isUrlTree, UrlSegmentGroup, UrlSerializer, UrlTree} from './url_tree';\nimport {standardizeConfig, validateConfig} from './utils/config';\nimport {afterNextNavigation} from './utils/navigations';\n\n\n\nfunction defaultErrorHandler(error: any): never {\n  throw error;\n}\n\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `true`\n * (exact = true).\n */\nexport const exactMatchOptions: IsActiveMatchOptions = {\n  paths: 'exact',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'exact'\n};\n\n/**\n * The equivalent `IsActiveMatchOptions` options for `Router.isActive` is called with `false`\n * (exact = false).\n */\nexport const subsetMatchOptions: IsActiveMatchOptions = {\n  paths: 'subset',\n  fragment: 'ignored',\n  matrixParams: 'ignored',\n  queryParams: 'subset'\n};\n\n/**\n * @description\n *\n * A service that provides navigation among views and URL manipulation capabilities.\n *\n * @see {@link Route}\n * @see [Routing and Navigation Guide](guide/router).\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class Router {\n  private get currentUrlTree() {\n    return this.stateManager.getCurrentUrlTree();\n  }\n  private get rawUrlTree() {\n    return this.stateManager.getRawUrlTree();\n  }\n  private disposed = false;\n  private nonRouterCurrentEntryChangeSubscription?: SubscriptionLike;\n  private isNgZoneEnabled = false;\n\n  private readonly console = inject(Console);\n  private readonly stateManager = inject(StateManager);\n  private readonly options = inject(ROUTER_CONFIGURATION, {optional: true}) || {};\n  private readonly pendingTasks = inject(PendingTasks);\n  private readonly urlUpdateStrategy = this.options.urlUpdateStrategy || 'deferred';\n  private readonly navigationTransitions = inject(NavigationTransitions);\n  private readonly urlSerializer = inject(UrlSerializer);\n  private readonly location = inject(Location);\n  private readonly urlHandlingStrategy = inject(UrlHandlingStrategy);\n\n  /**\n   * The private `Subject` type for the public events exposed in the getter. This is used internally\n   * to push events to. The separate field allows us to expose separate types in the public API\n   * (i.e., an Observable rather than the Subject).\n   */\n  private _events = new Subject<Event>();\n  /**\n   * An event stream for routing events.\n   */\n  public get events(): Observable<Event> {\n    // TODO(atscott): This _should_ be events.asObservable(). However, this change requires internal\n    // cleanup: tests are doing `(route.events as Subject<Event>).next(...)`. This isn't\n    // allowed/supported but we still have to fix these or file bugs against the teams before making\n    // the change.\n    return this._events;\n  }\n  /**\n   * The current state of routing in this NgModule.\n   */\n  get routerState() {\n    return this.stateManager.getRouterState();\n  }\n\n  /**\n   * A handler for navigation errors in this NgModule.\n   *\n   * @deprecated Subscribe to the `Router` events and watch for `NavigationError` instead.\n   *   `provideRouter` has the `withNavigationErrorHandler` feature to make this easier.\n   * @see {@link withNavigationErrorHandler}\n   */\n  errorHandler: (error: any) => any = this.options.errorHandler || defaultErrorHandler;\n\n  /**\n   * True if at least one navigation event has occurred,\n   * false otherwise.\n   */\n  navigated: boolean = false;\n\n  /**\n   * A strategy for re-using routes.\n   *\n   * @deprecated Configure using `providers` instead:\n   *   `{provide: RouteReuseStrategy, useClass: MyStrategy}`.\n   */\n  routeReuseStrategy: RouteReuseStrategy = inject(RouteReuseStrategy);\n\n  /**\n   * How to handle a navigation request to the current URL.\n   *\n   *\n   * @deprecated Configure this through `provideRouter` or `RouterModule.forRoot` instead.\n   * @see {@link withRouterConfig}\n   * @see {@link provideRouter}\n   * @see {@link RouterModule}\n   */\n  onSameUrlNavigation: OnSameUrlNavigation = this.options.onSameUrlNavigation || 'ignore';\n\n  config: Routes = inject(ROUTES, {optional: true})?.flat() ?? [];\n\n  /**\n   * Indicates whether the application has opted in to binding Router data to component inputs.\n   *\n   * This option is enabled by the `withComponentInputBinding` feature of `provideRouter` or\n   * `bindToComponentInputs` in the `ExtraOptions` of `RouterModule.forRoot`.\n   */\n  readonly componentInputBindingEnabled: boolean = !!inject(INPUT_BINDER, {optional: true});\n\n  constructor() {\n    this.isNgZoneEnabled = inject(NgZone) instanceof NgZone && NgZone.isInAngularZone();\n\n    this.resetConfig(this.config);\n\n    this.navigationTransitions.setupNavigations(this, this.currentUrlTree, this.routerState)\n        .subscribe({\n          error: (e) => {\n            this.console.warn(ngDevMode ? `Unhandled Navigation Error: ${e}` : e);\n          }\n        });\n    this.subscribeToNavigationEvents();\n  }\n\n\n  private eventsSubscription = new Subscription();\n  private subscribeToNavigationEvents() {\n    const subscription = this.navigationTransitions.events.subscribe(e => {\n      try {\n        const currentTransition = this.navigationTransitions.currentTransition;\n        const currentNavigation = this.navigationTransitions.currentNavigation;\n        if (currentTransition !== null && currentNavigation !== null) {\n          this.stateManager.handleRouterEvent(e, currentNavigation);\n          if (e instanceof NavigationCancel && e.code !== NavigationCancellationCode.Redirect &&\n              e.code !== NavigationCancellationCode.SupersededByNewNavigation) {\n            // It seems weird that `navigated` is set to `true` when the navigation is rejected,\n            // however it's how things were written initially. Investigation would need to be done\n            // to determine if this can be removed.\n            this.navigated = true;\n          } else if (e instanceof NavigationEnd) {\n            this.navigated = true;\n          } else if (e instanceof RedirectRequest) {\n            const mergedTree =\n                this.urlHandlingStrategy.merge(e.url, currentTransition.currentRawUrl);\n            const extras = {\n              skipLocationChange: currentTransition.extras.skipLocationChange,\n              // The URL is already updated at this point if we have 'eager' URL\n              // updates or if the navigation was triggered by the browser (back\n              // button, URL bar, etc). We want to replace that item in history\n              // if the navigation is rejected.\n              replaceUrl: this.urlUpdateStrategy === 'eager' ||\n                  isBrowserTriggeredNavigation(currentTransition.source)\n            };\n\n            this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras, {\n              resolve: currentTransition.resolve,\n              reject: currentTransition.reject,\n              promise: currentTransition.promise\n            });\n          }\n        }\n        // Note that it's important to have the Router process the events _before_ the event is\n        // pushed through the public observable. This ensures the correct router state is in place\n        // before applications observe the events.\n        if (isPublicRouterEvent(e)) {\n          this._events.next(e);\n        }\n      } catch (e: unknown) {\n        this.navigationTransitions.transitionAbortSubject.next(e as Error);\n      }\n    });\n    this.eventsSubscription.add(subscription);\n  }\n\n  /** @internal */\n  resetRootComponentType(rootComponentType: Type<any>): void {\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.routerState.root.component = rootComponentType;\n    this.navigationTransitions.rootComponentType = rootComponentType;\n  }\n\n  /**\n   * Sets up the location change listener and performs the initial navigation.\n   */\n  initialNavigation(): void {\n    this.setUpLocationChangeListener();\n    if (!this.navigationTransitions.hasRequestedNavigation) {\n      this.navigateToSyncWithBrowser(\n          this.location.path(true), IMPERATIVE_NAVIGATION, this.stateManager.restoredState());\n    }\n  }\n\n  /**\n   * Sets up the location change listener. This listener detects navigations triggered from outside\n   * the Router (the browser back/forward buttons, for example) and schedules a corresponding Router\n   * navigation so that the correct events, guards, etc. are triggered.\n   */\n  setUpLocationChangeListener(): void {\n    // Don't need to use Zone.wrap any more, because zone.js\n    // already patch onPopState, so location change callback will\n    // run into ngZone\n    if (!this.nonRouterCurrentEntryChangeSubscription) {\n      this.nonRouterCurrentEntryChangeSubscription =\n          this.stateManager.registerNonRouterCurrentEntryChangeListener((url, state) => {\n            // The `setTimeout` was added in #12160 and is likely to support Angular/AngularJS\n            // hybrid apps.\n            setTimeout(() => {\n              this.navigateToSyncWithBrowser(url, 'popstate', state);\n            }, 0);\n          });\n    }\n  }\n\n  /**\n   * Schedules a router navigation to synchronize Router state with the browser state.\n   *\n   * This is done as a response to a popstate event and the initial navigation. These\n   * two scenarios represent times when the browser URL/state has been updated and\n   * the Router needs to respond to ensure its internal state matches.\n   */\n  private navigateToSyncWithBrowser(\n      url: string, source: NavigationTrigger, state: RestoredState|null|undefined) {\n    const extras: NavigationExtras = {replaceUrl: true};\n\n    // TODO: restoredState should always include the entire state, regardless\n    // of navigationId. This requires a breaking change to update the type on\n    // NavigationStart’s restoredState, which currently requires navigationId\n    // to always be present. The Router used to only restore history state if\n    // a navigationId was present.\n\n    // The stored navigationId is used by the RouterScroller to retrieve the scroll\n    // position for the page.\n    const restoredState = state?.navigationId ? state : null;\n\n    // Separate to NavigationStart.restoredState, we must also restore the state to\n    // history.state and generate a new navigationId, since it will be overwritten\n    if (state) {\n      const stateCopy = {...state} as Partial<RestoredState>;\n      delete stateCopy.navigationId;\n      delete stateCopy.ɵrouterPageId;\n      if (Object.keys(stateCopy).length !== 0) {\n        extras.state = stateCopy;\n      }\n    }\n\n    const urlTree = this.parseUrl(url);\n    this.scheduleNavigation(urlTree, source, restoredState, extras);\n  }\n\n  /** The current URL. */\n  get url(): string {\n    return this.serializeUrl(this.currentUrlTree);\n  }\n\n  /**\n   * Returns the current `Navigation` object when the router is navigating,\n   * and `null` when idle.\n   */\n  getCurrentNavigation(): Navigation|null {\n    return this.navigationTransitions.currentNavigation;\n  }\n\n  /**\n   * The `Navigation` object of the most recent navigation to succeed and `null` if there\n   *     has not been a successful navigation yet.\n   */\n  get lastSuccessfulNavigation(): Navigation|null {\n    return this.navigationTransitions.lastSuccessfulNavigation;\n  }\n\n  /**\n   * Resets the route configuration used for navigation and generating links.\n   *\n   * @param config The route array for the new configuration.\n   *\n   * @usageNotes\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   */\n  resetConfig(config: Routes): void {\n    (typeof ngDevMode === 'undefined' || ngDevMode) && validateConfig(config);\n    this.config = config.map(standardizeConfig);\n    this.navigated = false;\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): void {\n    this.dispose();\n  }\n\n  /** Disposes of the router. */\n  dispose(): void {\n    this.navigationTransitions.complete();\n    if (this.nonRouterCurrentEntryChangeSubscription) {\n      this.nonRouterCurrentEntryChangeSubscription.unsubscribe();\n      this.nonRouterCurrentEntryChangeSubscription = undefined;\n    }\n    this.disposed = true;\n    this.eventsSubscription.unsubscribe();\n  }\n\n  /**\n   * Appends URL segments to the current URL tree to create a new URL tree.\n   *\n   * @param commands An array of URL fragments with which to construct the new URL tree.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL tree or the one provided  in the `relativeTo`\n   * property of the options object, if supplied.\n   * @param navigationExtras Options that control the navigation strategy.\n   * @returns The new URL tree.\n   *\n   * @usageNotes\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,\n   * // you can do the following:\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   * Note that a value of `null` or `undefined` for `relativeTo` indicates that the\n   * tree should be created relative to the root.\n   * ```\n   */\n  createUrlTree(commands: any[], navigationExtras: UrlCreationOptions = {}): UrlTree {\n    const {relativeTo, queryParams, fragment, queryParamsHandling, preserveFragment} =\n        navigationExtras;\n    const f = preserveFragment ? this.currentUrlTree.fragment : fragment;\n    let q: Params|null = null;\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 || null;\n    }\n    if (q !== null) {\n      q = this.removeEmptyProps(q);\n    }\n\n    let relativeToUrlSegmentGroup: UrlSegmentGroup|undefined;\n    try {\n      const relativeToSnapshot = relativeTo ? relativeTo.snapshot : this.routerState.snapshot.root;\n      relativeToUrlSegmentGroup = createSegmentGroupFromRoute(relativeToSnapshot);\n    } catch (e: unknown) {\n      // This is strictly for backwards compatibility with tests that create\n      // invalid `ActivatedRoute` mocks.\n      // Note: the difference between having this fallback for invalid `ActivatedRoute` setups and\n      // just throwing is ~500 test failures. Fixing all of those tests by hand is not feasible at\n      // the moment.\n      if (typeof commands[0] !== 'string' || !commands[0].startsWith('/')) {\n        // Navigations that were absolute in the old way of creating UrlTrees\n        // would still work because they wouldn't attempt to match the\n        // segments in the `ActivatedRoute` to the `currentUrlTree` but\n        // instead just replace the root segment with the navigation result.\n        // Non-absolute navigations would fail to apply the commands because\n        // the logic could not find the segment to replace (so they'd act like there were no\n        // commands).\n        commands = [];\n      }\n      relativeToUrlSegmentGroup = this.currentUrlTree.root;\n    }\n    return createUrlTreeFromSegmentGroup(relativeToUrlSegmentGroup, commands, q, f ?? null);\n  }\n\n  /**\n   * Navigates to a view using an absolute route path.\n   *\n   * @param url An absolute path for a defined route. The function does not apply any delta to the\n   *     current URL.\n   * @param extras An object containing properties that modify the navigation strategy.\n   *\n   * @returns A Promise that resolves to 'true' when navigation succeeds,\n   * to 'false' when navigation fails, or is rejected on error.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to an absolute path.\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   * @see [Routing and Navigation guide](guide/router)\n   *\n   */\n  navigateByUrl(url: string|UrlTree, extras: NavigationBehaviorOptions = {\n    skipLocationChange: false\n  }): Promise<boolean> {\n    if (typeof ngDevMode === 'undefined' || ngDevMode) {\n      if (this.isNgZoneEnabled && !NgZone.isInAngularZone()) {\n        this.console.warn(\n            `Navigation triggered outside Angular zone, did you forget to call 'ngZone.run()'?`);\n      }\n    }\n\n    const urlTree = isUrlTree(url) ? url : this.parseUrl(url);\n    const mergedTree = this.urlHandlingStrategy.merge(urlTree, this.rawUrlTree);\n\n    return this.scheduleNavigation(mergedTree, IMPERATIVE_NAVIGATION, null, extras);\n  }\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   * @param commands An array of URL fragments with which to construct the target URL.\n   * If the path is static, can be the literal URL string. For a dynamic path, pass an array of path\n   * segments, followed by the parameters for each segment.\n   * The fragments are applied to the current URL or the one provided  in the `relativeTo` property\n   * of the options object, if supplied.\n   * @param extras An options object that determines how the URL should be constructed or\n   *     interpreted.\n   *\n   * @returns A Promise that resolves to `true` when navigation succeeds, to `false` when navigation\n   *     fails,\n   * or is rejected on error.\n   *\n   * @usageNotes\n   *\n   * The following calls request navigation to a dynamic route path relative to the current URL.\n   *\n   * ```\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route});\n   *\n   * // Navigate without updating the URL, overriding the default behavior\n   * router.navigate(['team', 33, 'user', 11], {relativeTo: route, skipLocationChange: true});\n   * ```\n   *\n   * @see [Routing and Navigation guide](guide/router)\n   *\n   */\n  navigate(commands: any[], extras: NavigationExtras = {skipLocationChange: false}):\n      Promise<boolean> {\n    validateCommands(commands);\n    return this.navigateByUrl(this.createUrlTree(commands, extras), extras);\n  }\n\n  /** Serializes a `UrlTree` into a string */\n  serializeUrl(url: UrlTree): string {\n    return this.urlSerializer.serialize(url);\n  }\n\n  /** Parses a string into a `UrlTree` */\n  parseUrl(url: string): UrlTree {\n    try {\n      return this.urlSerializer.parse(url);\n    } catch {\n      return this.urlSerializer.parse('/');\n    }\n  }\n\n  /**\n   * Returns whether the url is activated.\n   *\n   * @deprecated\n   * Use `IsActiveMatchOptions` instead.\n   *\n   * - The equivalent `IsActiveMatchOptions` for `true` is\n   * `{paths: 'exact', queryParams: 'exact', fragment: 'ignored', matrixParams: 'ignored'}`.\n   * - The equivalent for `false` is\n   * `{paths: 'subset', queryParams: 'subset', fragment: 'ignored', matrixParams: 'ignored'}`.\n   */\n  isActive(url: string|UrlTree, exact: boolean): boolean;\n  /**\n   * Returns whether the url is activated.\n   */\n  isActive(url: string|UrlTree, matchOptions: IsActiveMatchOptions): boolean;\n  /** @internal */\n  isActive(url: string|UrlTree, matchOptions: boolean|IsActiveMatchOptions): boolean;\n  isActive(url: string|UrlTree, matchOptions: boolean|IsActiveMatchOptions): boolean {\n    let options: IsActiveMatchOptions;\n    if (matchOptions === true) {\n      options = {...exactMatchOptions};\n    } else if (matchOptions === false) {\n      options = {...subsetMatchOptions};\n    } else {\n      options = matchOptions;\n    }\n    if (isUrlTree(url)) {\n      return containsTree(this.currentUrlTree, url, options);\n    }\n\n    const urlTree = this.parseUrl(url);\n    return containsTree(this.currentUrlTree, urlTree, options);\n  }\n\n  private removeEmptyProps(params: Params): Params {\n    return Object.keys(params).reduce((result: Params, key: string) => {\n      const value: any = params[key];\n      if (value !== null && value !== undefined) {\n        result[key] = value;\n      }\n      return result;\n    }, {});\n  }\n\n  private scheduleNavigation(\n      rawUrl: UrlTree, source: NavigationTrigger, restoredState: RestoredState|null,\n      extras: NavigationExtras,\n      priorPromise?: {resolve: any, reject: any, promise: Promise<boolean>}): Promise<boolean> {\n    if (this.disposed) {\n      return Promise.resolve(false);\n    }\n\n    let resolve: any;\n    let reject: any;\n    let promise: Promise<boolean>;\n    if (priorPromise) {\n      resolve = priorPromise.resolve;\n      reject = priorPromise.reject;\n      promise = priorPromise.promise;\n    } else {\n      promise = new Promise<boolean>((res, rej) => {\n        resolve = res;\n        reject = rej;\n      });\n    }\n\n    // Indicate that the navigation is happening.\n    const taskId = this.pendingTasks.add();\n    afterNextNavigation(this, () => {\n      // Remove pending task in a microtask to allow for cancelled\n      // initial navigations and redirects within the same task.\n      queueMicrotask(() => this.pendingTasks.remove(taskId));\n    });\n\n    this.navigationTransitions.handleNavigationRequest({\n      source,\n      restoredState,\n      currentUrlTree: this.currentUrlTree,\n      currentRawUrl: this.currentUrlTree,\n      rawUrl,\n      extras,\n      resolve,\n      reject,\n      promise,\n      currentSnapshot: this.routerState.snapshot,\n      currentRouterState: this.routerState\n    });\n\n    // Make sure that the error is propagated even though `processNavigations` catch\n    // handler does not rethrow\n    return promise.catch((e: any) => {\n      return Promise.reject(e);\n    });\n  }\n}\n\nfunction validateCommands(commands: string[]): void {\n  for (let i = 0; i < commands.length; i++) {\n    const cmd = commands[i];\n    if (cmd == null) {\n      throw new RuntimeError(\n          RuntimeErrorCode.NULLISH_COMMAND,\n          (typeof ngDevMode === 'undefined' || ngDevMode) &&\n              `The requested path contains ${cmd} segment at index ${i}`);\n    }\n  }\n}\n\nfunction isPublicRouterEvent(e: Event|PrivateRouterEvents): e is Event {\n  return (!(e instanceof BeforeActivateRoutes) && !(e instanceof RedirectRequest));\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {LocationStrategy} from '@angular/common';\nimport {Attribute, booleanAttribute, Directive, ElementRef, HostBinding, HostListener, Input, OnChanges, OnDestroy, Renderer2, SimpleChanges, ɵɵsanitizeUrlOrResourceUrl} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\n\nimport {Event, NavigationEnd} from '../events';\nimport {QueryParamsHandling} from '../models';\nimport {Router} from '../router';\nimport {ActivatedRoute} from '../router_state';\nimport {Params} from '../shared';\nimport {UrlTree} from '../url_tree';\n\n\n/**\n * @description\n *\n * When applied to an element in a template, makes that element a link\n * that initiates navigation to a route. Navigation opens one or more routed components\n * in one or more `<router-outlet>` locations on the page.\n *\n * Given a route configuration `[{ path: 'user/:name', component: UserCmp }]`,\n * the following creates a static link to the route:\n * `<a routerLink=\"/user/bob\">link to user component</a>`\n *\n * You can use dynamic values to generate the link.\n * For a dynamic link, pass an array of path segments,\n * followed by the params for each segment.\n * For example, `['/team', teamId, 'user', userName, {details: true}]`\n * generates a link to `/team/11/user/bob;details=true`.\n *\n * Multiple static segments can be merged into one term and combined with dynamic segments.\n * For example, `['/team/11/user', userName, {details: true}]`\n *\n * The input that you provide to the link is treated as a delta to the current URL.\n * For instance, suppose the current URL is `/user/(box//aux:team)`.\n * The link `<a [routerLink]=\"['/user/jim']\">Jim</a>` creates the URL\n * `/user/(jim//aux:team)`.\n * See {@link Router#createUrlTree} for more information.\n *\n * @usageNotes\n *\n * You can use absolute or relative paths in a link, set query parameters,\n * control how parameters are handled, and keep a history of navigation states.\n *\n * ### Relative link paths\n *\n * The first segment name can be prepended with `/`, `./`, or `../`.\n * * If the first segment begins with `/`, the router looks 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\n *   looks in the children of the current activated route.\n * * If the first segment begins with `../`, the router goes up one level in the route tree.\n *\n * ### Setting and handling query params and fragments\n *\n * The following link adds a query parameter and a fragment to the generated URL:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" fragment=\"education\">\n *   link to user component\n * </a>\n * ```\n * By default, the directive constructs the new URL using the given query parameters.\n * The example generates the link: `/user/bob?debug=true#education`.\n *\n * You can instruct the directive to handle query parameters differently\n * by specifying the `queryParamsHandling` option in the link.\n * Allowed values are:\n *\n *  - `'merge'`: Merge the given `queryParams` into the current query params.\n *  - `'preserve'`: Preserve the current query params.\n *\n * For example:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [queryParams]=\"{debug: true}\" queryParamsHandling=\"merge\">\n *   link to user component\n * </a>\n * ```\n *\n * See {@link UrlCreationOptions#queryParamsHandling}.\n *\n * ### Preserving navigation history\n *\n * You can provide a `state` value to be persisted to the browser's\n * [`History.state` property](https://developer.mozilla.org/en-US/docs/Web/API/History#Properties).\n * For example:\n *\n * ```\n * <a [routerLink]=\"['/user/bob']\" [state]=\"{tracingId: 123}\">\n *   link to user component\n * </a>\n * ```\n *\n * Use {@link Router#getCurrentNavigation} to retrieve a saved\n * navigation-state value. For example, to capture the `tracingId` during the `NavigationStart`\n * event:\n *\n * ```\n * // Get NavigationStart events\n * router.events.pipe(filter(e => e instanceof NavigationStart)).subscribe(e => {\n *   const navigation = router.getCurrentNavigation();\n *   tracingService.trace({id: navigation.extras.state.tracingId});\n * });\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n  selector: '[routerLink]',\n  standalone: true,\n})\nexport class RouterLink implements OnChanges, OnDestroy {\n  /**\n   * Represents an `href` attribute value applied to a host element,\n   * when a host element is `<a>`. For other tags, the value is `null`.\n   */\n  href: string|null = null;\n\n  /**\n   * Represents the `target` attribute on a host element.\n   * This is only used when the host element is an `<a>` tag.\n   */\n  @HostBinding('attr.target') @Input() target?: string;\n\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParams}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() queryParams?: Params|null;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#fragment}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() fragment?: string;\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#queryParamsHandling}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() queryParamsHandling?: QueryParamsHandling|null;\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#state}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input() state?: {[k: string]: any};\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * Specify a value here when you do not want to use the default value\n   * for `routerLink`, which is the current activated route.\n   * Note that a value of `undefined` here will use the `routerLink` default.\n   * @see {@link UrlCreationOptions#relativeTo}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input() relativeTo?: ActivatedRoute|null;\n\n  private commands: any[]|null = null;\n\n  /** Whether a host element is an `<a>` tag. */\n  private isAnchorElement: boolean;\n\n  private subscription?: Subscription;\n\n  /** @internal */\n  onChanges = new Subject<RouterLink>();\n\n  constructor(\n      private router: Router, private route: ActivatedRoute,\n      @Attribute('tabindex') private readonly tabIndexAttribute: string|null|undefined,\n      private readonly renderer: Renderer2, private readonly el: ElementRef,\n      private locationStrategy?: LocationStrategy) {\n    const tagName = el.nativeElement.tagName?.toLowerCase();\n    this.isAnchorElement = tagName === 'a' || tagName === 'area';\n\n    if (this.isAnchorElement) {\n      this.subscription = router.events.subscribe((s: Event) => {\n        if (s instanceof NavigationEnd) {\n          this.updateHref();\n        }\n      });\n    } else {\n      this.setTabIndexIfNotOnNativeEl('0');\n    }\n  }\n\n  /**\n   * Passed to {@link Router#createUrlTree} as part of the\n   * `UrlCreationOptions`.\n   * @see {@link UrlCreationOptions#preserveFragment}\n   * @see {@link Router#createUrlTree}\n   */\n  @Input({transform: booleanAttribute}) preserveFragment: boolean = false;\n\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#skipLocationChange}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input({transform: booleanAttribute}) skipLocationChange: boolean = false;\n\n  /**\n   * Passed to {@link Router#navigateByUrl} as part of the\n   * `NavigationBehaviorOptions`.\n   * @see {@link NavigationBehaviorOptions#replaceUrl}\n   * @see {@link Router#navigateByUrl}\n   */\n  @Input({transform: booleanAttribute}) replaceUrl: boolean = false;\n\n  /**\n   * Modifies the tab index if there was not a tabindex attribute on the element during\n   * instantiation.\n   */\n  private setTabIndexIfNotOnNativeEl(newTabIndex: string|null) {\n    if (this.tabIndexAttribute != null /* both `null` and `undefined` */ || this.isAnchorElement) {\n      return;\n    }\n    this.applyAttributeValue('tabindex', newTabIndex);\n  }\n\n  /** @nodoc */\n  ngOnChanges(changes: SimpleChanges) {\n    if (this.isAnchorElement) {\n      this.updateHref();\n    }\n    // This is subscribed to by `RouterLinkActive` so that it knows to update when there are changes\n    // to the RouterLinks it's tracking.\n    this.onChanges.next(this);\n  }\n\n  /**\n   * Commands to pass to {@link Router#createUrlTree}.\n   *   - **array**: commands to pass to {@link Router#createUrlTree}.\n   *   - **string**: shorthand for array of commands with just the string, i.e. `['/route']`\n   *   - **null|undefined**: effectively disables the `routerLink`\n   * @see {@link Router#createUrlTree}\n   */\n  @Input()\n  set routerLink(commands: any[]|string|null|undefined) {\n    if (commands != null) {\n      this.commands = Array.isArray(commands) ? commands : [commands];\n      this.setTabIndexIfNotOnNativeEl('0');\n    } else {\n      this.commands = null;\n      this.setTabIndexIfNotOnNativeEl(null);\n    }\n  }\n\n  /** @nodoc */\n  @HostListener(\n      'click',\n      ['$event.button', '$event.ctrlKey', '$event.shiftKey', '$event.altKey', '$event.metaKey'])\n  onClick(button: number, ctrlKey: boolean, shiftKey: boolean, altKey: boolean, metaKey: boolean):\n      boolean {\n    if (this.urlTree === null) {\n      return true;\n    }\n\n    if (this.isAnchorElement) {\n      if (button !== 0 || ctrlKey || shiftKey || altKey || metaKey) {\n        return true;\n      }\n\n      if (typeof this.target === 'string' && this.target != '_self') {\n        return true;\n      }\n    }\n\n    const extras = {\n      skipLocationChange: this.skipLocationChange,\n      replaceUrl: this.replaceUrl,\n      state: this.state,\n    };\n    this.router.navigateByUrl(this.urlTree, extras);\n\n    // Return `false` for `<a>` elements to prevent default action\n    // and cancel the native behavior, since the navigation is handled\n    // by the Router.\n    return !this.isAnchorElement;\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): any {\n    this.subscription?.unsubscribe();\n  }\n\n  private updateHref(): void {\n    this.href = this.urlTree !== null && this.locationStrategy ?\n        this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)) :\n        null;\n\n    const sanitizedValue = this.href === null ?\n        null :\n        // This class represents a directive that can be added to both `<a>` elements,\n        // as well as other elements. As a result, we can't define security context at\n        // compile time. So the security context is deferred to runtime.\n        // The `ɵɵsanitizeUrlOrResourceUrl` selects the necessary sanitizer function\n        // based on the tag and property names. The logic mimics the one from\n        // `packages/compiler/src/schema/dom_security_schema.ts`, which is used at compile time.\n        //\n        // Note: we should investigate whether we can switch to using `@HostBinding('attr.href')`\n        // instead of applying a value via a renderer, after a final merge of the\n        // `RouterLinkWithHref` directive.\n        ɵɵsanitizeUrlOrResourceUrl(this.href, this.el.nativeElement.tagName.toLowerCase(), 'href');\n    this.applyAttributeValue('href', sanitizedValue);\n  }\n\n  private applyAttributeValue(attrName: string, attrValue: string|null) {\n    const renderer = this.renderer;\n    const nativeElement = this.el.nativeElement;\n    if (attrValue !== null) {\n      renderer.setAttribute(nativeElement, attrName, attrValue);\n    } else {\n      renderer.removeAttribute(nativeElement, attrName);\n    }\n  }\n\n  get urlTree(): UrlTree|null {\n    if (this.commands === null) {\n      return null;\n    }\n    return this.router.createUrlTree(this.commands, {\n      // If the `relativeTo` input is not defined, we want to use `this.route` by default.\n      // Otherwise, we should use the value provided by the user in the input.\n      relativeTo: this.relativeTo !== undefined ? this.relativeTo : this.route,\n      queryParams: this.queryParams,\n      fragment: this.fragment,\n      queryParamsHandling: this.queryParamsHandling,\n      preserveFragment: this.preserveFragment,\n    });\n  }\n}\n\n/**\n * @description\n * An alias for the `RouterLink` directive.\n * Deprecated since v15, use `RouterLink` directive instead.\n *\n * @deprecated use `RouterLink` directive instead.\n * @publicApi\n */\nexport {RouterLink as RouterLinkWithHref};\n","/**\n * @license\n * Copyright Google LLC 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\nimport {AfterContentInit, ChangeDetectorRef, ContentChildren, Directive, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Optional, Output, QueryList, Renderer2, SimpleChanges} from '@angular/core';\nimport {from, of, Subscription} from 'rxjs';\nimport {mergeAll} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from '../events';\nimport {Router} from '../router';\nimport {IsActiveMatchOptions} from '../url_tree';\n\nimport {RouterLink} from './router_link';\n\n\n/**\n *\n * @description\n *\n * Tracks whether the linked route of an element is currently active, and allows you\n * to specify one or more CSS classes to add to the element when the linked route\n * is active.\n *\n * Use this directive to create a visual distinction for elements associated with an active route.\n * For example, the following code highlights the word \"Bob\" when the router\n * activates the associated route:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\">Bob</a>\n * ```\n *\n * Whenever the URL is either '/user' or '/user/bob', the \"active-link\" class is\n * added to the anchor tag. If the URL changes, the class is removed.\n *\n * You can set more than one class using a space-separated string or an array.\n * For example:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"class1 class2\">Bob</a>\n * <a routerLink=\"/user/bob\" [routerLinkActive]=\"['class1', 'class2']\">Bob</a>\n * ```\n *\n * To add the classes only when the URL matches the link exactly, add the option `exact: true`:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact:\n * true}\">Bob</a>\n * ```\n *\n * To directly check the `isActive` status of the link, assign the `RouterLinkActive`\n * instance to a template variable.\n * For example, the following checks the status without assigning any CSS classes:\n *\n * ```\n * <a routerLink=\"/user/bob\" routerLinkActive #rla=\"routerLinkActive\">\n *   Bob {{ rla.isActive ? '(already open)' : ''}}\n * </a>\n * ```\n *\n * You can apply the `RouterLinkActive` directive to an ancestor of linked elements.\n * For example, the following sets the active-link class on the `<div>`  parent tag\n * when the URL is either '/user/jim' or '/user/bob'.\n *\n * ```\n * <div routerLinkActive=\"active-link\" [routerLinkActiveOptions]=\"{exact: true}\">\n *   <a routerLink=\"/user/jim\">Jim</a>\n *   <a routerLink=\"/user/bob\">Bob</a>\n * </div>\n * ```\n *\n * The `RouterLinkActive` directive can also be used to set the aria-current attribute\n * to provide an alternative distinction for active elements to visually impaired users.\n *\n * For example, the following code adds the 'active' class to the Home Page link when it is\n * indeed active and in such case also sets its aria-current attribute to 'page':\n *\n * ```\n * <a routerLink=\"/\" routerLinkActive=\"active\" ariaCurrentWhenActive=\"page\">Home Page</a>\n * ```\n *\n * @ngModule RouterModule\n *\n * @publicApi\n */\n@Directive({\n  selector: '[routerLinkActive]',\n  exportAs: 'routerLinkActive',\n  standalone: true,\n})\nexport class RouterLinkActive implements OnChanges, OnDestroy, AfterContentInit {\n  @ContentChildren(RouterLink, {descendants: true}) links!: QueryList<RouterLink>;\n\n  private classes: string[] = [];\n  private routerEventsSubscription: Subscription;\n  private linkInputChangesSubscription?: Subscription;\n  private _isActive = false;\n\n  get isActive() {\n    return this._isActive;\n  }\n\n  /**\n   * Options to configure how to determine if the router link is active.\n   *\n   * These options are passed to the `Router.isActive()` function.\n   *\n   * @see {@link Router#isActive}\n   */\n  @Input() routerLinkActiveOptions: {exact: boolean}|IsActiveMatchOptions = {exact: false};\n\n\n  /**\n   * Aria-current attribute to apply when the router link is active.\n   *\n   * Possible values: `'page'` | `'step'` | `'location'` | `'date'` | `'time'` | `true` | `false`.\n   *\n   * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-current}\n   */\n  @Input() ariaCurrentWhenActive?: 'page'|'step'|'location'|'date'|'time'|true|false;\n\n  /**\n   *\n   * You can use the output `isActiveChange` to get notified each time the link becomes\n   * active or inactive.\n   *\n   * Emits:\n   * true  -> Route is active\n   * false -> Route is inactive\n   *\n   * ```\n   * <a\n   *  routerLink=\"/user/bob\"\n   *  routerLinkActive=\"active-link\"\n   *  (isActiveChange)=\"this.onRouterLinkActive($event)\">Bob</a>\n   * ```\n   */\n  @Output() readonly isActiveChange: EventEmitter<boolean> = new EventEmitter();\n\n  constructor(\n      private router: Router, private element: ElementRef, private renderer: Renderer2,\n      private readonly cdr: ChangeDetectorRef, @Optional() private link?: RouterLink) {\n    this.routerEventsSubscription = router.events.subscribe((s: Event) => {\n      if (s instanceof NavigationEnd) {\n        this.update();\n      }\n    });\n  }\n\n  /** @nodoc */\n  ngAfterContentInit(): void {\n    // `of(null)` is used to force subscribe body to execute once immediately (like `startWith`).\n    of(this.links.changes, of(null)).pipe(mergeAll()).subscribe(_ => {\n      this.update();\n      this.subscribeToEachLinkOnChanges();\n    });\n  }\n\n  private subscribeToEachLinkOnChanges() {\n    this.linkInputChangesSubscription?.unsubscribe();\n    const allLinkChanges = [...this.links.toArray(), this.link]\n                               .filter((link): link is RouterLink => !!link)\n                               .map(link => link.onChanges);\n    this.linkInputChangesSubscription = from(allLinkChanges).pipe(mergeAll()).subscribe(link => {\n      if (this._isActive !== this.isLinkActive(this.router)(link)) {\n        this.update();\n      }\n    });\n  }\n\n  @Input()\n  set routerLinkActive(data: string[]|string) {\n    const classes = Array.isArray(data) ? data : data.split(' ');\n    this.classes = classes.filter(c => !!c);\n  }\n\n  /** @nodoc */\n  ngOnChanges(changes: SimpleChanges): void {\n    this.update();\n  }\n  /** @nodoc */\n  ngOnDestroy(): void {\n    this.routerEventsSubscription.unsubscribe();\n    this.linkInputChangesSubscription?.unsubscribe();\n  }\n\n  private update(): void {\n    if (!this.links || !this.router.navigated) return;\n    queueMicrotask(() => {\n      const hasActiveLinks = this.hasActiveLinks();\n      if (this._isActive !== hasActiveLinks) {\n        this._isActive = hasActiveLinks;\n        this.cdr.markForCheck();\n        this.classes.forEach((c) => {\n          if (hasActiveLinks) {\n            this.renderer.addClass(this.element.nativeElement, c);\n          } else {\n            this.renderer.removeClass(this.element.nativeElement, c);\n          }\n        });\n        if (hasActiveLinks && this.ariaCurrentWhenActive !== undefined) {\n          this.renderer.setAttribute(\n              this.element.nativeElement, 'aria-current', this.ariaCurrentWhenActive.toString());\n        } else {\n          this.renderer.removeAttribute(this.element.nativeElement, 'aria-current');\n        }\n\n        // Emit on isActiveChange after classes are updated\n        this.isActiveChange.emit(hasActiveLinks);\n      }\n    });\n  }\n\n  private isLinkActive(router: Router): (link: RouterLink) => boolean {\n    const options: boolean|IsActiveMatchOptions =\n        isActiveMatchOptions(this.routerLinkActiveOptions) ?\n        this.routerLinkActiveOptions :\n        // While the types should disallow `undefined` here, it's possible without strict inputs\n        (this.routerLinkActiveOptions.exact || false);\n    return (link: RouterLink) => link.urlTree ? router.isActive(link.urlTree, options) : false;\n  }\n\n  private hasActiveLinks(): boolean {\n    const isActiveCheckFn = this.isLinkActive(this.router);\n    return this.link && isActiveCheckFn(this.link) || this.links.some(isActiveCheckFn);\n  }\n}\n\n/**\n * Use instead of `'paths' in options` to be compatible with property renaming\n */\nfunction isActiveMatchOptions(options: {exact: boolean}|\n                              IsActiveMatchOptions): options is IsActiveMatchOptions {\n  return !!(options as IsActiveMatchOptions).paths;\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {Compiler, createEnvironmentInjector, EnvironmentInjector, Injectable, OnDestroy} from '@angular/core';\nimport {from, Observable, of, Subscription} from 'rxjs';\nimport {catchError, concatMap, filter, mergeAll, mergeMap} from 'rxjs/operators';\n\nimport {Event, NavigationEnd} from './events';\nimport {LoadedRouterConfig, Route, Routes} from './models';\nimport {Router} from './router';\nimport {RouterConfigLoader} from './router_config_loader';\n\n\n/**\n * @description\n *\n * Provides a preloading strategy.\n *\n * @publicApi\n */\nexport abstract class PreloadingStrategy {\n  abstract preload(route: Route, fn: () => Observable<any>): Observable<any>;\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy that preloads all modules as quickly as possible.\n *\n * ```\n * RouterModule.forRoot(ROUTES, {preloadingStrategy: PreloadAllModules})\n * ```\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class PreloadAllModules implements PreloadingStrategy {\n  preload(route: Route, fn: () => Observable<any>): Observable<any> {\n    return fn().pipe(catchError(() => of(null)));\n  }\n}\n\n/**\n * @description\n *\n * Provides a preloading strategy that does not preload any modules.\n *\n * This strategy is enabled by default.\n *\n * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class NoPreloading implements PreloadingStrategy {\n  preload(route: Route, fn: () => Observable<any>): Observable<any> {\n    return of(null);\n  }\n}\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 * @publicApi\n */\n@Injectable({providedIn: 'root'})\nexport class RouterPreloader implements OnDestroy {\n  private subscription?: Subscription;\n\n  constructor(\n      private router: Router, compiler: Compiler, private injector: EnvironmentInjector,\n      private preloadingStrategy: PreloadingStrategy, private loader: RouterConfigLoader) {}\n\n  setUpPreloading(): void {\n    this.subscription =\n        this.router.events\n            .pipe(filter((e: Event) => e instanceof NavigationEnd), concatMap(() => this.preload()))\n            .subscribe(() => {});\n  }\n\n  preload(): Observable<any> {\n    return this.processRoutes(this.injector, this.router.config);\n  }\n\n  /** @nodoc */\n  ngOnDestroy(): void {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  private processRoutes(injector: EnvironmentInjector, routes: Routes): Observable<void> {\n    const res: Observable<any>[] = [];\n    for (const route of routes) {\n      if (route.providers && !route._injector) {\n        route._injector =\n            createEnvironmentInjector(route.providers, injector, `Route: ${route.path}`);\n      }\n\n      const injectorForCurrentRoute = route._injector ?? injector;\n      const injectorForChildren = route._loadedInjector ?? injectorForCurrentRoute;\n\n      // Note that `canLoad` is only checked as a condition that prevents `loadChildren` and not\n      // `loadComponent`. `canLoad` guards only block loading of child routes by design. This\n      // happens as a consequence of needing to descend into children for route matching immediately\n      // while component loading is deferred until route activation. Because `canLoad` guards can\n      // have side effects, we cannot execute them here so we instead skip preloading altogether\n      // when present. Lastly, it remains to be decided whether `canLoad` should behave this way\n      // at all. Code splitting and lazy loading is separate from client-side authorization checks\n      // and should not be used as a security measure to prevent loading of code.\n      if ((route.loadChildren && !route._loadedRoutes && route.canLoad === undefined) ||\n          (route.loadComponent && !route._loadedComponent)) {\n        res.push(this.preloadConfig(injectorForCurrentRoute, route));\n      }\n      if (route.children || route._loadedRoutes) {\n        res.push(this.processRoutes(injectorForChildren, (route.children ?? route._loadedRoutes)!));\n      }\n    }\n    return from(res).pipe(mergeAll());\n  }\n\n  private preloadConfig(injector: EnvironmentInjector, route: Route): Observable<void> {\n    return this.preloadingStrategy.preload(route, () => {\n      let loadedChildren$: Observable<LoadedRouterConfig|null>;\n      if (route.loadChildren && route.canLoad === undefined) {\n        loadedChildren$ = this.loader.loadChildren(injector, route);\n      } else {\n        loadedChildren$ = of(null);\n      }\n\n      const recursiveLoadChildren$ =\n          loadedChildren$.pipe(mergeMap((config: LoadedRouterConfig|null) => {\n            if (config === null) {\n              return of(void 0);\n            }\n            route._loadedRoutes = config.routes;\n            route._loadedInjector = config.injector;\n            // If the loaded config was a module, use that as the module/module injector going\n            // forward. Otherwise, continue using the current module/module injector.\n            return this.processRoutes(config.injector ?? injector, config.routes);\n          }));\n      if (route.loadComponent && !route._loadedComponent) {\n        const loadComponent$ = this.loader.loadComponent(route);\n        return from([recursiveLoadChildren$, loadComponent$]).pipe(mergeAll());\n      } else {\n        return recursiveLoadChildren$;\n      }\n    });\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {ViewportScroller} from '@angular/common';\nimport {Injectable, InjectionToken, NgZone, OnDestroy} from '@angular/core';\nimport {Unsubscribable} from 'rxjs';\n\nimport {NavigationEnd, NavigationSkipped, NavigationSkippedCode, NavigationStart, Scroll} from './events';\nimport {NavigationTransitions} from './navigation_transition';\nimport {UrlSerializer} from './url_tree';\n\nexport const ROUTER_SCROLLER = new InjectionToken<RouterScroller>('');\n\n@Injectable()\nexport class RouterScroller implements OnDestroy {\n  private routerEventsSubscription?: Unsubscribable;\n  private scrollEventsSubscription?: Unsubscribable;\n\n  private lastId = 0;\n  private lastSource: 'imperative'|'popstate'|'hashchange'|undefined = 'imperative';\n  private restoredId = 0;\n  private store: {[key: string]: [number, number]} = {};\n\n  /** @nodoc */\n  constructor(\n      readonly urlSerializer: UrlSerializer, private transitions: NavigationTransitions,\n      public readonly viewportScroller: ViewportScroller, private readonly zone: NgZone,\n      private options: {\n        scrollPositionRestoration?: 'disabled'|'enabled'|'top',\n        anchorScrolling?: 'disabled'|'enabled'\n      } = {}) {\n    // Default both options to 'disabled'\n    options.scrollPositionRestoration = options.scrollPositionRestoration || 'disabled';\n    options.anchorScrolling = options.anchorScrolling || 'disabled';\n  }\n\n  init(): void {\n    // we want to disable the automatic scrolling because having two places\n    // responsible for scrolling results race conditions, especially given\n    // that browser don't implement this behavior consistently\n    if (this.options.scrollPositionRestoration !== 'disabled') {\n      this.viewportScroller.setHistoryScrollRestoration('manual');\n    }\n    this.routerEventsSubscription = this.createScrollEvents();\n    this.scrollEventsSubscription = this.consumeScrollEvents();\n  }\n\n  private createScrollEvents() {\n    return this.transitions.events.subscribe(e => {\n      if (e instanceof NavigationStart) {\n        // store the scroll position of the current stable navigations.\n        this.store[this.lastId] = this.viewportScroller.getScrollPosition();\n        this.lastSource = e.navigationTrigger;\n        this.restoredId = e.restoredState ? e.restoredState.navigationId : 0;\n      } else if (e instanceof NavigationEnd) {\n        this.lastId = e.id;\n        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.urlAfterRedirects).fragment);\n      } else if (\n          e instanceof NavigationSkipped &&\n          e.code === NavigationSkippedCode.IgnoredSameUrlNavigation) {\n        this.lastSource = undefined;\n        this.restoredId = 0;\n        this.scheduleScrollEvent(e, this.urlSerializer.parse(e.url).fragment);\n      }\n    });\n  }\n\n  private consumeScrollEvents() {\n    return this.transitions.events.subscribe(e => {\n      if (!(e instanceof Scroll)) return;\n      // a popstate event. The pop state event will always ignore anchor scrolling.\n      if (e.position) {\n        if (this.options.scrollPositionRestoration === 'top') {\n          this.viewportScroller.scrollToPosition([0, 0]);\n        } else if (this.options.scrollPositionRestoration === 'enabled') {\n          this.viewportScroller.scrollToPosition(e.position);\n        }\n        // imperative navigation \"forward\"\n      } else {\n        if (e.anchor && this.options.anchorScrolling === 'enabled') {\n          this.viewportScroller.scrollToAnchor(e.anchor);\n        } else if (this.options.scrollPositionRestoration !== 'disabled') {\n          this.viewportScroller.scrollToPosition([0, 0]);\n        }\n      }\n    });\n  }\n\n  private scheduleScrollEvent(routerEvent: NavigationEnd|NavigationSkipped, anchor: string|null):\n      void {\n    this.zone.runOutsideAngular(() => {\n      // The scroll event needs to be delayed until after change detection. Otherwise, we may\n      // attempt to restore the scroll position before the router outlet has fully rendered the\n      // component by executing its update block of the template function.\n      setTimeout(() => {\n        this.zone.run(() => {\n          this.transitions.events.next(new Scroll(\n              routerEvent, this.lastSource === 'popstate' ? this.store[this.restoredId] : null,\n              anchor));\n        });\n      }, 0);\n    });\n  }\n\n  /** @nodoc */\n  ngOnDestroy() {\n    this.routerEventsSubscription?.unsubscribe();\n    this.scrollEventsSubscription?.unsubscribe();\n  }\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {HashLocationStrategy, LOCATION_INITIALIZED, LocationStrategy, ViewportScroller} from '@angular/common';\nimport {APP_BOOTSTRAP_LISTENER, APP_INITIALIZER, ApplicationRef, Component, ComponentRef, ENVIRONMENT_INITIALIZER, EnvironmentInjector, EnvironmentProviders, inject, InjectFlags, InjectionToken, Injector, makeEnvironmentProviders, NgZone, Provider, runInInjectionContext, Type} from '@angular/core';\nimport {of, Subject} from 'rxjs';\n\nimport {INPUT_BINDER, RoutedComponentInputBinder} from './directives/router_outlet';\nimport {Event, NavigationError, stringifyEvent} from './events';\nimport {Routes} from './models';\nimport {NavigationTransitions} from './navigation_transition';\nimport {Router} from './router';\nimport {InMemoryScrollingOptions, ROUTER_CONFIGURATION, RouterConfigOptions} from './router_config';\nimport {ROUTES} from './router_config_loader';\nimport {PreloadingStrategy, RouterPreloader} from './router_preloader';\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {UrlSerializer} from './url_tree';\nimport {afterNextNavigation} from './utils/navigations';\nimport {CREATE_VIEW_TRANSITION, createViewTransition, VIEW_TRANSITION_OPTIONS, ViewTransitionsFeatureOptions} from './utils/view_transition';\n\n\n/**\n * Sets up providers necessary to enable `Router` functionality for the application.\n * Allows to configure a set of routes as well as extra features that should be enabled.\n *\n * @usageNotes\n *\n * Basic example of how you can add a Router to your application:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent, {\n *   providers: [provideRouter(appRoutes)]\n * });\n * ```\n *\n * You can also enable optional features in the Router by adding functions from the `RouterFeatures`\n * type:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes,\n *         withDebugTracing(),\n *         withRouterConfig({paramsInheritanceStrategy: 'always'}))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link RouterFeatures}\n *\n * @publicApi\n * @param routes A set of `Route`s to use for the application routing table.\n * @param features Optional features to configure additional router behaviors.\n * @returns A set of providers to setup a Router.\n */\nexport function provideRouter(routes: Routes, ...features: RouterFeatures[]): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    {provide: ROUTES, multi: true, useValue: routes},\n    (typeof ngDevMode === 'undefined' || ngDevMode) ?\n        {provide: ROUTER_IS_PROVIDED, useValue: true} :\n        [],\n    {provide: ActivatedRoute, useFactory: rootRoute, deps: [Router]},\n    {provide: APP_BOOTSTRAP_LISTENER, multi: true, useFactory: getBootstrapListener},\n    features.map(feature => feature.ɵproviders),\n  ]);\n}\n\nexport function rootRoute(router: Router): ActivatedRoute {\n  return router.routerState.root;\n}\n\n/**\n * Helper type to represent a Router feature.\n *\n * @publicApi\n */\nexport interface RouterFeature<FeatureKind extends RouterFeatureKind> {\n  ɵkind: FeatureKind;\n  ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Router feature.\n */\nfunction routerFeature<FeatureKind extends RouterFeatureKind>(\n    kind: FeatureKind, providers: Provider[]): RouterFeature<FeatureKind> {\n  return {ɵkind: kind, ɵproviders: providers};\n}\n\n\n/**\n * An Injection token used to indicate whether `provideRouter` or `RouterModule.forRoot` was ever\n * called.\n */\nexport const ROUTER_IS_PROVIDED =\n    new InjectionToken<boolean>('', {providedIn: 'root', factory: () => false});\n\nconst routerIsProvidedDevModeCheck = {\n  provide: ENVIRONMENT_INITIALIZER,\n  multi: true,\n  useFactory() {\n    return () => {\n      if (!inject(ROUTER_IS_PROVIDED)) {\n        console.warn(\n            '`provideRoutes` was called without `provideRouter` or `RouterModule.forRoot`. ' +\n            'This is likely a mistake.');\n      }\n    };\n  }\n};\n\n/**\n * Registers a [DI provider](guide/glossary#provider) for a set of routes.\n * @param routes The route configuration to provide.\n *\n * @usageNotes\n *\n * ```\n * @NgModule({\n *   providers: [provideRoutes(ROUTES)]\n * })\n * class LazyLoadedChildModule {}\n * ```\n *\n * @deprecated If necessary, provide routes using the `ROUTES` `InjectionToken`.\n * @see {@link ROUTES}\n * @publicApi\n */\nexport function provideRoutes(routes: Routes): Provider[] {\n  return [\n    {provide: ROUTES, multi: true, useValue: routes},\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? routerIsProvidedDevModeCheck : [],\n  ];\n}\n\n/**\n * A type alias for providers returned by `withInMemoryScrolling` for use with `provideRouter`.\n *\n * @see {@link withInMemoryScrolling}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type InMemoryScrollingFeature = RouterFeature<RouterFeatureKind.InMemoryScrollingFeature>;\n\n/**\n * Enables customizable scrolling behavior for router navigations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable scrolling feature:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withInMemoryScrolling())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link ViewportScroller}\n *\n * @publicApi\n * @param options Set of configuration parameters to customize scrolling behavior, see\n *     `InMemoryScrollingOptions` for additional information.\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withInMemoryScrolling(options: InMemoryScrollingOptions = {}):\n    InMemoryScrollingFeature {\n  const providers = [{\n    provide: ROUTER_SCROLLER,\n    useFactory: () => {\n      const viewportScroller = inject(ViewportScroller);\n      const zone = inject(NgZone);\n      const transitions = inject(NavigationTransitions);\n      const urlSerializer = inject(UrlSerializer);\n      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, options);\n    },\n  }];\n  return routerFeature(RouterFeatureKind.InMemoryScrollingFeature, providers);\n}\n\nexport function getBootstrapListener() {\n  const injector = inject(Injector);\n  return (bootstrappedComponentRef: ComponentRef<unknown>) => {\n    const ref = injector.get(ApplicationRef);\n\n    if (bootstrappedComponentRef !== ref.components[0]) {\n      return;\n    }\n\n    const router = injector.get(Router);\n    const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n\n    if (injector.get(INITIAL_NAVIGATION) === InitialNavigation.EnabledNonBlocking) {\n      router.initialNavigation();\n    }\n\n    injector.get(ROUTER_PRELOADER, null, InjectFlags.Optional)?.setUpPreloading();\n    injector.get(ROUTER_SCROLLER, null, InjectFlags.Optional)?.init();\n    router.resetRootComponentType(ref.componentTypes[0]);\n    if (!bootstrapDone.closed) {\n      bootstrapDone.next();\n      bootstrapDone.complete();\n      bootstrapDone.unsubscribe();\n    }\n  };\n}\n\n/**\n * A subject used to indicate that the bootstrapping phase is done. When initial navigation is\n * `enabledBlocking`, the first navigation waits until bootstrapping is finished before continuing\n * to the activation phase.\n */\nconst BOOTSTRAP_DONE = new InjectionToken<Subject<void>>(\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? 'bootstrap done indicator' : '', {\n      factory: () => {\n        return new Subject<void>();\n      }\n    });\n\n/**\n * This and the INITIAL_NAVIGATION token are used internally only. The public API side of this is\n * configured through the `ExtraOptions`.\n *\n * When set to `EnabledBlocking`, the initial navigation starts before the root\n * component is created. The bootstrap is blocked until the initial navigation is complete. This\n * value is required for [server-side rendering](guide/ssr) to work.\n *\n * When set to `EnabledNonBlocking`, the initial navigation starts after the root component has been\n * created. The bootstrap is not blocked on the completion of the initial navigation.\n *\n * When set to `Disabled`, the initial navigation is not performed. The location listener is set up\n * before the root component gets created. Use if there is a reason to have more control over when\n * the router starts its initial navigation due to some complex initialization logic.\n *\n * @see {@link ExtraOptions}\n */\nconst enum InitialNavigation {\n  EnabledBlocking,\n  EnabledNonBlocking,\n  Disabled,\n}\n\nconst INITIAL_NAVIGATION = new InjectionToken<InitialNavigation>(\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? 'initial navigation' : '',\n    {providedIn: 'root', factory: () => InitialNavigation.EnabledNonBlocking});\n\n/**\n * A type alias for providers returned by `withEnabledBlockingInitialNavigation` for use with\n * `provideRouter`.\n *\n * @see {@link withEnabledBlockingInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type EnabledBlockingInitialNavigationFeature =\n    RouterFeature<RouterFeatureKind.EnabledBlockingInitialNavigationFeature>;\n\n/**\n * A type alias for providers returned by `withEnabledBlockingInitialNavigation` or\n * `withDisabledInitialNavigation` functions for use with `provideRouter`.\n *\n * @see {@link withEnabledBlockingInitialNavigation}\n * @see {@link withDisabledInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type InitialNavigationFeature =\n    EnabledBlockingInitialNavigationFeature|DisabledInitialNavigationFeature;\n\n/**\n * Configures initial navigation to start before the root component is created.\n *\n * The bootstrap is blocked until the initial navigation is complete. This value is required for\n * [server-side rendering](guide/ssr) to work.\n *\n * @usageNotes\n *\n * Basic example of how you can enable this navigation behavior:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withEnabledBlockingInitialNavigation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withEnabledBlockingInitialNavigation(): EnabledBlockingInitialNavigationFeature {\n  const providers = [\n    {provide: INITIAL_NAVIGATION, useValue: InitialNavigation.EnabledBlocking},\n    {\n      provide: APP_INITIALIZER,\n      multi: true,\n      deps: [Injector],\n      useFactory: (injector: Injector) => {\n        const locationInitialized: Promise<any> =\n            injector.get(LOCATION_INITIALIZED, Promise.resolve());\n\n        return () => {\n          return locationInitialized.then(() => {\n            return new Promise(resolve => {\n              const router = injector.get(Router);\n              const bootstrapDone = injector.get(BOOTSTRAP_DONE);\n              afterNextNavigation(router, () => {\n                // Unblock APP_INITIALIZER in case the initial navigation was canceled or errored\n                // without a redirect.\n                resolve(true);\n              });\n\n              injector.get(NavigationTransitions).afterPreactivation = () => {\n                // Unblock APP_INITIALIZER once we get to `afterPreactivation`. At this point, we\n                // assume activation will complete successfully (even though this is not\n                // guaranteed).\n                resolve(true);\n                return bootstrapDone.closed ? of(void 0) : bootstrapDone;\n              };\n              router.initialNavigation();\n            });\n          });\n        };\n      }\n    },\n  ];\n  return routerFeature(RouterFeatureKind.EnabledBlockingInitialNavigationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withDisabledInitialNavigation` for use with\n * `provideRouter`.\n *\n * @see {@link withDisabledInitialNavigation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type DisabledInitialNavigationFeature =\n    RouterFeature<RouterFeatureKind.DisabledInitialNavigationFeature>;\n\n/**\n * Disables initial navigation.\n *\n * Use if there is a reason to have more control over when the router starts its initial navigation\n * due to some complex initialization logic.\n *\n * @usageNotes\n *\n * Basic example of how you can disable initial navigation:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withDisabledInitialNavigation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withDisabledInitialNavigation(): DisabledInitialNavigationFeature {\n  const providers = [\n    {\n      provide: APP_INITIALIZER,\n      multi: true,\n      useFactory: () => {\n        const router = inject(Router);\n        return () => {\n          router.setUpLocationChangeListener();\n        };\n      }\n    },\n    {provide: INITIAL_NAVIGATION, useValue: InitialNavigation.Disabled}\n  ];\n  return routerFeature(RouterFeatureKind.DisabledInitialNavigationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withDebugTracing` for use with `provideRouter`.\n *\n * @see {@link withDebugTracing}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type DebugTracingFeature = RouterFeature<RouterFeatureKind.DebugTracingFeature>;\n\n/**\n * Enables logging of all internal navigation events to the console.\n * Extra logging might be useful for debugging purposes to inspect Router event sequence.\n *\n * @usageNotes\n *\n * Basic example of how you can enable debug tracing:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withDebugTracing())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withDebugTracing(): DebugTracingFeature {\n  let providers: Provider[] = [];\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    providers = [{\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useFactory: () => {\n        const router = inject(Router);\n        return () => router.events.subscribe((e: Event) => {\n          // tslint:disable:no-console\n          console.group?.(`Router Event: ${(<any>e.constructor).name}`);\n          console.log(stringifyEvent(e));\n          console.log(e);\n          console.groupEnd?.();\n          // tslint:enable:no-console\n        });\n      }\n    }];\n  } else {\n    providers = [];\n  }\n  return routerFeature(RouterFeatureKind.DebugTracingFeature, providers);\n}\n\nconst ROUTER_PRELOADER = new InjectionToken<RouterPreloader>(\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? 'router preloader' : '');\n\n/**\n * A type alias that represents a feature which enables preloading in Router.\n * The type is used to describe the return value of the `withPreloading` function.\n *\n * @see {@link withPreloading}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type PreloadingFeature = RouterFeature<RouterFeatureKind.PreloadingFeature>;\n\n/**\n * Allows to configure a preloading strategy to use. The strategy is configured by providing a\n * reference to a class that implements a `PreloadingStrategy`.\n *\n * @usageNotes\n *\n * Basic example of how you can configure preloading:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withPreloading(PreloadAllModules))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param preloadingStrategy A reference to a class that implements a `PreloadingStrategy` that\n *     should be used.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withPreloading(preloadingStrategy: Type<PreloadingStrategy>): PreloadingFeature {\n  const providers = [\n    {provide: ROUTER_PRELOADER, useExisting: RouterPreloader},\n    {provide: PreloadingStrategy, useExisting: preloadingStrategy},\n  ];\n  return routerFeature(RouterFeatureKind.PreloadingFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withRouterConfig` for use with `provideRouter`.\n *\n * @see {@link withRouterConfig}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterConfigurationFeature =\n    RouterFeature<RouterFeatureKind.RouterConfigurationFeature>;\n\n/**\n * Allows to provide extra parameters to configure Router.\n *\n * @usageNotes\n *\n * Basic example of how you can provide extra configuration options:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withRouterConfig({\n *          onSameUrlNavigation: 'reload'\n *       }))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n *\n * @param options A set of parameters to configure Router, see `RouterConfigOptions` for\n *     additional information.\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withRouterConfig(options: RouterConfigOptions): RouterConfigurationFeature {\n  const providers = [\n    {provide: ROUTER_CONFIGURATION, useValue: options},\n  ];\n  return routerFeature(RouterFeatureKind.RouterConfigurationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withHashLocation` for use with `provideRouter`.\n *\n * @see {@link withHashLocation}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterHashLocationFeature = RouterFeature<RouterFeatureKind.RouterHashLocationFeature>;\n\n/**\n * Provides the location strategy that uses the URL fragment instead of the history API.\n *\n * @usageNotes\n *\n * Basic example of how you can use the hash location option:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withHashLocation())\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link provideRouter}\n * @see {@link HashLocationStrategy}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withHashLocation(): RouterHashLocationFeature {\n  const providers = [\n    {provide: LocationStrategy, useClass: HashLocationStrategy},\n  ];\n  return routerFeature(RouterFeatureKind.RouterHashLocationFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withNavigationErrorHandler` for use with `provideRouter`.\n *\n * @see {@link withNavigationErrorHandler}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type NavigationErrorHandlerFeature =\n    RouterFeature<RouterFeatureKind.NavigationErrorHandlerFeature>;\n\n/**\n * Subscribes to the Router's navigation events and calls the given function when a\n * `NavigationError` happens.\n *\n * This function is run inside application's [injection context](guide/dependency-injection-context)\n * so you can use the [`inject`](api/core/inject) function.\n *\n * @usageNotes\n *\n * Basic example of how you can use the error handler option:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withNavigationErrorHandler((e: NavigationError) =>\n * inject(MyErrorTracker).trackError(e)))\n *     ]\n *   }\n * );\n * ```\n *\n * @see {@link NavigationError}\n * @see {@link core/inject}\n * @see {@link runInInjectionContext}\n *\n * @returns A set of providers for use with `provideRouter`.\n *\n * @publicApi\n */\nexport function withNavigationErrorHandler(fn: (error: NavigationError) => void):\n    NavigationErrorHandlerFeature {\n  const providers = [{\n    provide: ENVIRONMENT_INITIALIZER,\n    multi: true,\n    useValue: () => {\n      const injector = inject(EnvironmentInjector);\n      inject(Router).events.subscribe((e) => {\n        if (e instanceof NavigationError) {\n          runInInjectionContext(injector, () => fn(e));\n        }\n      });\n    }\n  }];\n  return routerFeature(RouterFeatureKind.NavigationErrorHandlerFeature, providers);\n}\n\n/**\n * A type alias for providers returned by `withComponentInputBinding` for use with `provideRouter`.\n *\n * @see {@link withComponentInputBinding}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type ComponentInputBindingFeature =\n    RouterFeature<RouterFeatureKind.ComponentInputBindingFeature>;\n\n/**\n * A type alias for providers returned by `withViewTransitions` for use with `provideRouter`.\n *\n * @see {@link withViewTransitions}\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type ViewTransitionsFeature = RouterFeature<RouterFeatureKind.ViewTransitionsFeature>;\n\n/**\n * Enables binding information from the `Router` state directly to the inputs of the component in\n * `Route` configurations.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withComponentInputBinding())\n *     ]\n *   }\n * );\n * ```\n *\n * @returns A set of providers for use with `provideRouter`.\n */\nexport function withComponentInputBinding(): ComponentInputBindingFeature {\n  const providers = [\n    RoutedComponentInputBinder,\n    {provide: INPUT_BINDER, useExisting: RoutedComponentInputBinder},\n  ];\n\n  return routerFeature(RouterFeatureKind.ComponentInputBindingFeature, providers);\n}\n\n/**\n * Enables view transitions in the Router by running the route activation and deactivation inside of\n * `document.startViewTransition`.\n *\n * Note: The View Transitions API is not available in all browsers. If the browser does not support\n * view transitions, the Router will not attempt to start a view transition and continue processing\n * the navigation as usual.\n *\n * @usageNotes\n *\n * Basic example of how you can enable the feature:\n * ```\n * const appRoutes: Routes = [];\n * bootstrapApplication(AppComponent,\n *   {\n *     providers: [\n *       provideRouter(appRoutes, withViewTransitions())\n *     ]\n *   }\n * );\n * ```\n *\n * @returns A set of providers for use with `provideRouter`.\n * @see https://developer.chrome.com/docs/web-platform/view-transitions/\n * @see https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n * @experimental\n */\nexport function withViewTransitions(options?: ViewTransitionsFeatureOptions):\n    ViewTransitionsFeature {\n  const providers = [\n    {provide: CREATE_VIEW_TRANSITION, useValue: createViewTransition},\n    {\n      provide: VIEW_TRANSITION_OPTIONS,\n      useValue: {skipNextTransition: !!options?.skipInitialTransition, ...options}\n    },\n  ];\n  return routerFeature(RouterFeatureKind.ViewTransitionsFeature, providers);\n}\n\n/**\n * A type alias that represents all Router features available for use with `provideRouter`.\n * Features can be enabled by adding special functions to the `provideRouter` call.\n * See documentation for each symbol to find corresponding function name. See also `provideRouter`\n * documentation on how to use those functions.\n *\n * @see {@link provideRouter}\n *\n * @publicApi\n */\nexport type RouterFeatures = PreloadingFeature|DebugTracingFeature|InitialNavigationFeature|\n    InMemoryScrollingFeature|RouterConfigurationFeature|NavigationErrorHandlerFeature|\n    ComponentInputBindingFeature|ViewTransitionsFeature|RouterHashLocationFeature;\n\n/**\n * The list of features as an enum to uniquely type each feature.\n */\nexport const enum RouterFeatureKind {\n  PreloadingFeature,\n  DebugTracingFeature,\n  EnabledBlockingInitialNavigationFeature,\n  DisabledInitialNavigationFeature,\n  InMemoryScrollingFeature,\n  RouterConfigurationFeature,\n  RouterHashLocationFeature,\n  NavigationErrorHandlerFeature,\n  ComponentInputBindingFeature,\n  ViewTransitionsFeature,\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {HashLocationStrategy, Location, LocationStrategy, PathLocationStrategy, ViewportScroller} from '@angular/common';\nimport {APP_BOOTSTRAP_LISTENER, ComponentRef, inject, Inject, InjectionToken, ModuleWithProviders, NgModule, NgZone, Optional, Provider, SkipSelf, ɵRuntimeError as RuntimeError} from '@angular/core';\n\nimport {EmptyOutletComponent} from './components/empty_outlet';\nimport {RouterLink} from './directives/router_link';\nimport {RouterLinkActive} from './directives/router_link_active';\nimport {RouterOutlet} from './directives/router_outlet';\nimport {RuntimeErrorCode} from './errors';\nimport {Routes} from './models';\nimport {NavigationTransitions} from './navigation_transition';\nimport {getBootstrapListener, rootRoute, ROUTER_IS_PROVIDED, withComponentInputBinding, withDebugTracing, withDisabledInitialNavigation, withEnabledBlockingInitialNavigation, withPreloading, withViewTransitions} from './provide_router';\nimport {Router} from './router';\nimport {ExtraOptions, ROUTER_CONFIGURATION} from './router_config';\nimport {RouterConfigLoader, ROUTES} from './router_config_loader';\nimport {ChildrenOutletContexts} from './router_outlet_context';\nimport {ROUTER_SCROLLER, RouterScroller} from './router_scroller';\nimport {ActivatedRoute} from './router_state';\nimport {DefaultUrlSerializer, UrlSerializer} from './url_tree';\n\n\n/**\n * The directives defined in the `RouterModule`.\n */\nconst ROUTER_DIRECTIVES = [RouterOutlet, RouterLink, RouterLinkActive, EmptyOutletComponent];\n\n/**\n * @docsNotRequired\n */\nexport const ROUTER_FORROOT_GUARD = new InjectionToken<void>(\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? 'router duplicate forRoot guard' :\n                                                      'ROUTER_FORROOT_GUARD');\n\n// TODO(atscott): All of these except `ActivatedRoute` are `providedIn: 'root'`. They are only kept\n// here to avoid a breaking change whereby the provider order matters based on where the\n// `RouterModule`/`RouterTestingModule` is imported. These can/should be removed as a \"breaking\"\n// change in a major version.\nexport const ROUTER_PROVIDERS: Provider[] = [\n  Location,\n  {provide: UrlSerializer, useClass: DefaultUrlSerializer},\n  Router,\n  ChildrenOutletContexts,\n  {provide: ActivatedRoute, useFactory: rootRoute, deps: [Router]},\n  RouterConfigLoader,\n  // Only used to warn when `provideRoutes` is used without `RouterModule` or `provideRouter`. Can\n  // be removed when `provideRoutes` is removed.\n  (typeof ngDevMode === 'undefined' || ngDevMode) ? {provide: ROUTER_IS_PROVIDED, useValue: true} :\n                                                    [],\n];\n\n/**\n * @description\n *\n * Adds directives and providers for in-app navigation among views defined in an application.\n * Use the Angular `Router` service to declaratively specify application states and manage state\n * transitions.\n *\n * You can import this NgModule multiple times, once for each lazy-loaded bundle.\n * However, only one `Router` service can be active.\n * To ensure this, there are two ways to register routes when importing this module:\n *\n * * The `forRoot()` method creates an `NgModule` that contains all the directives, the given\n * routes, and the `Router` service itself.\n * * The `forChild()` method creates an `NgModule` that contains all the directives and the given\n * routes, but does not include the `Router` service.\n *\n * @see [Routing and Navigation guide](guide/router) for an\n * overview of how the `Router` service should be used.\n *\n * @publicApi\n */\n@NgModule({\n  imports: ROUTER_DIRECTIVES,\n  exports: ROUTER_DIRECTIVES,\n})\nexport class RouterModule {\n  constructor(@Optional() @Inject(ROUTER_FORROOT_GUARD) guard: any) {}\n\n  /**\n   * Creates and configures a module with all the router providers and directives.\n   * Optionally sets up an application listener to perform an initial navigation.\n   *\n   * When registering the NgModule at the root, import as follows:\n   *\n   * ```\n   * @NgModule({\n   *   imports: [RouterModule.forRoot(ROUTES)]\n   * })\n   * class MyNgModule {}\n   * ```\n   *\n   * @param routes An array of `Route` objects that define the navigation paths for the application.\n   * @param config An `ExtraOptions` configuration object that controls how navigation is performed.\n   * @return The new `NgModule`.\n   *\n   */\n  static forRoot(routes: Routes, config?: ExtraOptions): ModuleWithProviders<RouterModule> {\n    return {\n      ngModule: RouterModule,\n      providers: [\n        ROUTER_PROVIDERS,\n        (typeof ngDevMode === 'undefined' || ngDevMode) ?\n            (config?.enableTracing ? withDebugTracing().ɵproviders : []) :\n            [],\n        {provide: ROUTES, multi: true, useValue: 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        config?.useHash ? provideHashLocationStrategy() : providePathLocationStrategy(),\n        provideRouterScroller(),\n        config?.preloadingStrategy ? withPreloading(config.preloadingStrategy).ɵproviders : [],\n        config?.initialNavigation ? provideInitialNavigation(config) : [],\n        config?.bindToComponentInputs ? withComponentInputBinding().ɵproviders : [],\n        config?.enableViewTransitions ? withViewTransitions().ɵproviders : [],\n        provideRouterInitializer(),\n      ],\n    };\n  }\n\n  /**\n   * Creates a module with all the router directives and a provider registering routes,\n   * without creating a new Router service.\n   * When registering for submodules and lazy-loaded submodules, create the NgModule as follows:\n   *\n   * ```\n   * @NgModule({\n   *   imports: [RouterModule.forChild(ROUTES)]\n   * })\n   * class MyNgModule {}\n   * ```\n   *\n   * @param routes An array of `Route` objects that define the navigation paths for the submodule.\n   * @return The new NgModule.\n   *\n   */\n  static forChild(routes: Routes): ModuleWithProviders<RouterModule> {\n    return {\n      ngModule: RouterModule,\n      providers: [{provide: ROUTES, multi: true, useValue: routes}],\n    };\n  }\n}\n\n/**\n * For internal use by `RouterModule` only. Note that this differs from `withInMemoryRouterScroller`\n * because it reads from the `ExtraOptions` which should not be used in the standalone world.\n */\nexport function provideRouterScroller(): Provider {\n  return {\n    provide: ROUTER_SCROLLER,\n    useFactory: () => {\n      const viewportScroller = inject(ViewportScroller);\n      const zone = inject(NgZone);\n      const config: ExtraOptions = inject(ROUTER_CONFIGURATION);\n      const transitions = inject(NavigationTransitions);\n      const urlSerializer = inject(UrlSerializer);\n      if (config.scrollOffset) {\n        viewportScroller.setOffset(config.scrollOffset);\n      }\n      return new RouterScroller(urlSerializer, transitions, viewportScroller, zone, config);\n    },\n  };\n}\n\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` should\n// provide hash location directly via `{provide: LocationStrategy, useClass: HashLocationStrategy}`.\nfunction provideHashLocationStrategy(): Provider {\n  return {provide: LocationStrategy, useClass: HashLocationStrategy};\n}\n\n// Note: For internal use only with `RouterModule`. Standalone setup via `provideRouter` does not\n// need this at all because `PathLocationStrategy` is the default factory for `LocationStrategy`.\nfunction providePathLocationStrategy(): Provider {\n  return {provide: LocationStrategy, useClass: PathLocationStrategy};\n}\n\nexport function provideForRootGuard(router: Router): any {\n  if ((typeof ngDevMode === 'undefined' || ngDevMode) && router) {\n    throw new RuntimeError(\n        RuntimeErrorCode.FOR_ROOT_CALLED_TWICE,\n        `The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector.` +\n            ` Lazy loaded modules should use RouterModule.forChild() instead.`);\n  }\n  return 'guarded';\n}\n\n// Note: For internal use only with `RouterModule`. Standalone router setup with `provideRouter`\n// users call `withXInitialNavigation` directly.\nfunction provideInitialNavigation(config: Pick<ExtraOptions, 'initialNavigation'>): Provider[] {\n  return [\n    config.initialNavigation === 'disabled' ? withDisabledInitialNavigation().ɵproviders : [],\n    config.initialNavigation === 'enabledBlocking' ?\n        withEnabledBlockingInitialNavigation().ɵproviders :\n        [],\n  ];\n}\n\n// TODO(atscott): This should not be in the public API\n/**\n * A [DI token](guide/glossary/#di-token) for the router initializer that\n * is called after the app is bootstrapped.\n *\n * @publicApi\n */\nexport const ROUTER_INITIALIZER = new InjectionToken<(compRef: ComponentRef<any>) => void>(\n    (typeof ngDevMode === 'undefined' || ngDevMode) ? 'Router Initializer' : '');\n\nfunction provideRouterInitializer(): Provider[] {\n  return [\n    // ROUTER_INITIALIZER token should be removed. It's public API but shouldn't be. We can just\n    // have `getBootstrapListener` directly attached to APP_BOOTSTRAP_LISTENER.\n    {provide: ROUTER_INITIALIZER, useFactory: getBootstrapListener},\n    {provide: APP_BOOTSTRAP_LISTENER, multi: true, useExisting: ROUTER_INITIALIZER},\n  ];\n}\n","/**\n * @license\n * Copyright Google LLC 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\nimport {inject, Type} from '@angular/core';\n\nimport {CanActivateChildFn, CanActivateFn, CanDeactivateFn, CanMatchFn, ResolveFn} from '../models';\n\n/**\n * Maps an array of injectable classes with canMatch functions to an array of equivalent\n * `CanMatchFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanMatch(providers: Array<Type<{canMatch: CanMatchFn}>>): CanMatchFn[] {\n  return providers.map(provider => (...params) => inject(provider).canMatch(...params));\n}\n\n/**\n * Maps an array of injectable classes with canActivate functions to an array of equivalent\n * `CanActivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanActivate(providers: Array<Type<{canActivate: CanActivateFn}>>):\n    CanActivateFn[] {\n  return providers.map(provider => (...params) => inject(provider).canActivate(...params));\n}\n/**\n * Maps an array of injectable classes with canActivateChild functions to an array of equivalent\n * `CanActivateChildFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanActivateChild(\n    providers: Array<Type<{canActivateChild: CanActivateChildFn}>>): CanActivateChildFn[] {\n  return providers.map(provider => (...params) => inject(provider).canActivateChild(...params));\n}\n/**\n * Maps an array of injectable classes with canDeactivate functions to an array of equivalent\n * `CanDeactivateFn` for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='CanActivate'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToCanDeactivate<T = unknown>(\n    providers: Array<Type<{canDeactivate: CanDeactivateFn<T>}>>): CanDeactivateFn<T>[] {\n  return providers.map(provider => (...params) => inject(provider).canDeactivate(...params));\n}\n/**\n * Maps an injectable class with a resolve function to an equivalent `ResolveFn`\n * for use in a `Route` definition.\n *\n * Usage {@example router/utils/functional_guards.ts region='Resolve'}\n *\n * @publicApi\n * @see {@link Route}\n */\nexport function mapToResolve<T>(provider: Type<{resolve: ResolveFn<T>}>): ResolveFn<T> {\n  return (...params) => inject(provider).resolve(...params);\n}\n","/**\n * @license\n * Copyright Google LLC 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 router package.\n */\n\nimport {Version} from '@angular/core';\n\n/**\n * @publicApi\n */\nexport const VERSION = new Version('17.0.8');\n","/**\n * @license\n * Copyright Google LLC 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 this package.\n */\nexport * from './src/index';\n\n// This file only reexports content of the `src` folder. Keep it that way.\n","/**\n * @license\n * Copyright Google LLC 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// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isPromise","RuntimeError","isRedirectingNavigationCancelingError","isNavigationCancelingError","isNgModule","EmptyOutletComponent","isInjectable","noMatch","recognize","last","recognizeFn","Console","PendingTasks","i1.Router","i2.RouterLink","i2.RouterConfigLoader"],"mappings":"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"}