@plumile/router 0.1.43 → 0.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -10
- package/lib/esm/builder.d.ts +2 -2
- package/lib/esm/builder.d.ts.map +1 -1
- package/lib/esm/builder.js +1 -1
- package/lib/esm/routing/RouteComponentWrapper.d.ts.map +1 -1
- package/lib/esm/routing/RouteComponentWrapper.js +3 -1
- package/lib/esm/routing/createRouter.d.ts +6 -4
- package/lib/esm/routing/createRouter.d.ts.map +1 -1
- package/lib/esm/routing/createRouter.js +24 -4
- package/lib/esm/tools.d.ts +3 -3
- package/lib/esm/tools.d.ts.map +1 -1
- package/lib/esm/tools.js +3 -2
- package/lib/esm/types.d.ts +24 -19
- package/lib/esm/types.d.ts.map +1 -1
- package/lib/esm/types.js +1 -1
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/builder.d.ts +2 -2
- package/lib/types/builder.d.ts.map +1 -1
- package/lib/types/routing/RouteComponentWrapper.d.ts.map +1 -1
- package/lib/types/routing/createRouter.d.ts +6 -4
- package/lib/types/routing/createRouter.d.ts.map +1 -1
- package/lib/types/tools.d.ts +3 -3
- package/lib/types/tools.d.ts.map +1 -1
- package/lib/types/types.d.ts +24 -19
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ This package is ESM-only. If your tooling expects CommonJS, enable ESM support (
|
|
|
51
51
|
```typescript
|
|
52
52
|
import { Route, getResourcePage } from '@plumile/router';
|
|
53
53
|
|
|
54
|
-
const routes: Route<any, any>[] = [
|
|
54
|
+
const routes: Route<any, any, any>[] = [
|
|
55
55
|
{
|
|
56
56
|
path: '/',
|
|
57
57
|
resourcePage: getResourcePage('Home', () => import('./pages/Home')),
|
|
@@ -147,13 +147,17 @@ function Navigation() {
|
|
|
147
147
|
|
|
148
148
|
### Core Components
|
|
149
149
|
|
|
150
|
-
#### `createRouter(routes: Route[])`
|
|
150
|
+
#### `createRouter<TContext>(routes: Route<TContext, any, any>[], options?)`
|
|
151
151
|
|
|
152
152
|
Creates a router instance with the given route configuration.
|
|
153
153
|
|
|
154
154
|
**Parameters:**
|
|
155
155
|
|
|
156
156
|
- `routes`: Array of route definitions
|
|
157
|
+
- `options?`: Optional configuration
|
|
158
|
+
- `context?`: Static context value or lazy initializer
|
|
159
|
+
- `getContext?`: Resolve a fresh context value per navigation
|
|
160
|
+
- `instrumentations?`: Instrumentations invoked on router events
|
|
157
161
|
|
|
158
162
|
**Returns:**
|
|
159
163
|
|
|
@@ -194,7 +198,7 @@ React context that provides router functionality to components.
|
|
|
194
198
|
|
|
195
199
|
### Route Configuration
|
|
196
200
|
|
|
197
|
-
#### `Route<TPrepared, TVariables>`
|
|
201
|
+
#### `Route<TContext, TPrepared, TVariables>`
|
|
198
202
|
|
|
199
203
|
Route definition interface.
|
|
200
204
|
|
|
@@ -203,8 +207,8 @@ Route definition interface.
|
|
|
203
207
|
- `path?`: string - URL path pattern
|
|
204
208
|
- `children?`: Route[] | Redirect[] - Nested routes
|
|
205
209
|
- `resourcePage?`: ResourcePage - Lazy-loaded component
|
|
206
|
-
- `prepare?`: Function to preload data
|
|
207
|
-
- `render?`: Custom render function
|
|
210
|
+
- `prepare?`: Function to preload data (receives `context`)
|
|
211
|
+
- `render?`: Custom render function (receives `context`)
|
|
208
212
|
|
|
209
213
|
#### `Redirect`
|
|
210
214
|
|
|
@@ -259,11 +263,11 @@ Browser history implementation.
|
|
|
259
263
|
|
|
260
264
|
Finds the matching route for a given location.
|
|
261
265
|
|
|
262
|
-
#### `prepareMatch(match)`
|
|
266
|
+
#### `prepareMatch(match, query?, instrumentation?, context?)`
|
|
263
267
|
|
|
264
268
|
Prepares route data and components for rendering.
|
|
265
269
|
|
|
266
|
-
#### `r<TPrepared, TVariables>(route)`
|
|
270
|
+
#### `r<TContext, TPrepared, TVariables>(route)`
|
|
267
271
|
|
|
268
272
|
Type helper for strongly-typed route definitions.
|
|
269
273
|
|
|
@@ -559,7 +563,7 @@ Options:
|
|
|
559
563
|
### Data Preloading
|
|
560
564
|
|
|
561
565
|
```typescript
|
|
562
|
-
const route: Route<{ user: User }, { id: string }> = {
|
|
566
|
+
const route: Route<any, { user: User }, { id: string }> = {
|
|
563
567
|
path: '/users/:id',
|
|
564
568
|
prepare: async ({ variables }) => {
|
|
565
569
|
const user = await fetchUser(variables.id);
|
|
@@ -575,7 +579,7 @@ const route: Route<{ user: User }, { id: string }> = {
|
|
|
575
579
|
### Custom Route Rendering
|
|
576
580
|
|
|
577
581
|
```typescript
|
|
578
|
-
const route: Route<any, any> = {
|
|
582
|
+
const route: Route<any, any, any> = {
|
|
579
583
|
path: '/protected',
|
|
580
584
|
render: ({ children, prepared }) => {
|
|
581
585
|
if (!userIsAuthenticated()) {
|
|
@@ -644,7 +648,7 @@ interface UserPageParams {
|
|
|
644
648
|
id: string;
|
|
645
649
|
}
|
|
646
650
|
|
|
647
|
-
const userRoute = r<UserPageData, UserPageParams>({
|
|
651
|
+
const userRoute = r<any, UserPageData, UserPageParams>({
|
|
648
652
|
path: '/users/:id',
|
|
649
653
|
prepare: ({ variables }) => {
|
|
650
654
|
// variables.id is typed as string
|
package/lib/esm/builder.d.ts
CHANGED
|
@@ -8,6 +8,6 @@ export declare class FlatRoute<TParams extends ParamData> {
|
|
|
8
8
|
constructor(input: FlatRouteInput<TParams>);
|
|
9
9
|
}
|
|
10
10
|
export declare function isRedirect(route: AnyRoute | Redirect): route is Redirect;
|
|
11
|
-
export declare function buildRoute(routeConfig: (AnyRoute | Redirect)[], parentRoutes?: AnyRoute[], prefix?: string): FlatRoute<ParamData>[];
|
|
12
|
-
export declare function buildRoutes(routeConfig: AnyRoute[]): FlatRoute<ParamData>[];
|
|
11
|
+
export declare function buildRoute<TContext>(routeConfig: (AnyRoute<TContext> | Redirect)[], parentRoutes?: AnyRoute<TContext>[], prefix?: string): FlatRoute<ParamData>[];
|
|
12
|
+
export declare function buildRoutes<TContext>(routeConfig: AnyRoute<TContext>[]): FlatRoute<ParamData>[];
|
|
13
13
|
//# sourceMappingURL=builder.d.ts.map
|
package/lib/esm/builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAS,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ5E,qBAAa,SAAS,CAAC,OAAO,SAAS,SAAS;IAEvC,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,QAAQ,EAAE,CAAC;IAGnB,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAGtC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAOR,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;CAOlD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAGxE;AASD,wBAAgB,UAAU,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAS,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ5E,qBAAa,SAAS,CAAC,OAAO,SAAS,SAAS;IAEvC,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,QAAQ,EAAE,CAAC;IAGnB,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAGtC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAOR,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;CAOlD;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAGxE;AASD,wBAAgB,UAAU,CAAC,QAAQ,EACjC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,EAC9C,YAAY,GAAE,QAAQ,CAAC,QAAQ,CAAC,EAAO,EACvC,MAAM,SAAK,GACV,SAAS,CAAC,SAAS,CAAC,EAAE,CA8DxB;AAOD,wBAAgB,WAAW,CAAC,QAAQ,EAClC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAChC,SAAS,CAAC,SAAS,CAAC,EAAE,CAExB"}
|
package/lib/esm/builder.js
CHANGED
|
@@ -68,4 +68,4 @@ export function buildRoute(routeConfig, parentRoutes = [], prefix = '') {
|
|
|
68
68
|
export function buildRoutes(routeConfig) {
|
|
69
69
|
return buildRoute(routeConfig);
|
|
70
70
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQXNDLE1BQU0sZ0JBQWdCLENBQUM7QUFVM0UsTUFBTSxPQUFPLFNBQVM7SUFFYixJQUFJLENBQVM7SUFHYixNQUFNLENBQWE7SUFHbkIsYUFBYSxDQUF5QjtJQUd0QyxVQUFVLENBQVU7SUFPM0IsWUFBbUIsS0FBOEI7UUFDL0MsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFHRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQTBCO0lBRW5ELE9BQVEsS0FBa0IsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ3hDLENBQUM7QUFTRCxNQUFNLFVBQVUsVUFBVSxDQUN4QixXQUE4QyxFQUM5QyxlQUFxQyxFQUFFLEVBQ3ZDLE1BQU0sR0FBRyxFQUFFO0lBRVgsTUFBTSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUU5QyxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQXVDLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUUzQixTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLE9BQU8sRUFBRSxFQUFFO1lBQ3pDLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxVQUFVLENBQUMsSUFBSSxDQUNiLElBQUksU0FBUyxDQUFDO2dCQUNaLElBQUk7Z0JBQ0osVUFBVTtnQkFDVixhQUFhO2dCQUNiLE1BQU0sRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFlO2FBQ3hDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLENBQUMsSUFBSSxDQUNiLElBQUksU0FBUyxDQUFDO2dCQUNaLElBQUk7Z0JBQ0osYUFBYTtnQkFDYixNQUFNLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxLQUFLLENBQWU7YUFDL0MsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFPRCxNQUFNLFVBQVUsV0FBVyxDQUN6QixXQUFpQztJQUVqQyxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWF0Y2gsIHR5cGUgTWF0Y2hGdW5jdGlvbiwgdHlwZSBQYXJhbURhdGEgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5cbmltcG9ydCB0eXBlIHsgRmxhdFJvdXRlSW5wdXQsIFJlZGlyZWN0LCBSb3V0ZSwgQW55Um91dGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmxhdHRlbmVkIHJvdXRlIHdpdGggYSBjb21waWxlZCBtYXRjaCBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdXNlZCBieSB0aGUgcm91dGVyIHRvIGVmZmljaWVudGx5IG1hdGNoIFVSTHMuXG4gKlxuICogQHRlbXBsYXRlIFRQYXJhbXMgLSBSb3V0ZSBwYXJhbWV0ZXIgdHlwZXMgZXh0cmFjdGVkIGZyb20gdGhlIFVSTCBwYXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBGbGF0Um91dGU8VFBhcmFtcyBleHRlbmRzIFBhcmFtRGF0YT4ge1xuICAvKiogVGhlIFVSTCBwYXRoIHBhdHRlcm4gZm9yIHRoaXMgcm91dGUgKi9cbiAgcHVibGljIHBhdGg6IHN0cmluZztcblxuICAvKiogTmVzdGVkIHJvdXRlcyB0aGF0IHNob3VsZCBiZSByZW5kZXJlZCB3aXRoaW4gdGhpcyByb3V0ZSAqL1xuICBwdWJsaWMgcm91dGVzOiBBbnlSb3V0ZVtdO1xuXG4gIC8qKiBDb21waWxlZCBmdW5jdGlvbiB0byBtYXRjaCBVUkwgcGF0aHMgYWdhaW5zdCB0aGlzIHJvdXRlIHBhdHRlcm4gKi9cbiAgcHVibGljIG1hdGNoRnVuY3Rpb246IE1hdGNoRnVuY3Rpb248VFBhcmFtcz47XG5cbiAgLyoqIE9wdGlvbmFsIHJlZGlyZWN0IGRlc3RpbmF0aW9uIGlmIHRoaXMgcm91dGUgc2hvdWxkIHJlZGlyZWN0ICovXG4gIHB1YmxpYyByZWRpcmVjdFRvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEZsYXRSb3V0ZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0IC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGZsYXQgcm91dGVcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihpbnB1dDogRmxhdFJvdXRlSW5wdXQ8VFBhcmFtcz4pIHtcbiAgICBjb25zdCB7IG1hdGNoRnVuY3Rpb24sIHBhdGgsIHJlZGlyZWN0VG8sIHJvdXRlcyB9ID0gaW5wdXQ7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgIHRoaXMucm91dGVzID0gcm91dGVzO1xuICAgIHRoaXMubWF0Y2hGdW5jdGlvbiA9IG1hdGNoRnVuY3Rpb247XG4gIH1cbn1cblxuLyoqIE5hcnJvdyBhIHJvdXRlIGNvbmZpZ3VyYXRpb24gdG8gYSByZWRpcmVjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZGlyZWN0KHJvdXRlOiBBbnlSb3V0ZSB8IFJlZGlyZWN0KTogcm91dGUgaXMgUmVkaXJlY3Qge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICByZXR1cm4gKHJvdXRlIGFzIFJlZGlyZWN0KS50byAhPSBudWxsO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIG5lc3RlZCByb3V0ZSBkZWZpbml0aW9ucyBpbnRvIGBGbGF0Um91dGVgIGVudHJpZXMuXG4gKlxuICogQHBhcmFtIHJvdXRlQ29uZmlnIC0gUm91dGUgb3IgcmVkaXJlY3QgZGVmaW5pdGlvbnMgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSBwYXJlbnRSb3V0ZXMgLSBBY2N1bXVsYXRlZCBwYXJlbnQgcm91dGVzIGZvciBuZXN0aW5nIGNvbnRleHQuXG4gKiBAcGFyYW0gcHJlZml4IC0gQ3VycmVudCBwYXRoIHByZWZpeCBwcm9wYWdhdGVkIGZyb20gcGFyZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUm91dGU8VENvbnRleHQ+KFxuICByb3V0ZUNvbmZpZzogKEFueVJvdXRlPFRDb250ZXh0PiB8IFJlZGlyZWN0KVtdLFxuICBwYXJlbnRSb3V0ZXM6IEFueVJvdXRlPFRDb250ZXh0PltdID0gW10sXG4gIHByZWZpeCA9ICcnLFxuKTogRmxhdFJvdXRlPFBhcmFtRGF0YT5bXSB7XG4gIGNvbnN0IGZsYXRSb3V0ZXM6IEZsYXRSb3V0ZTxQYXJhbURhdGE+W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlQ29uZmlnKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBpZiAocHJlZml4ICE9PSAnJykge1xuICAgICAgcGFydHMucHVzaChwcmVmaXgpO1xuICAgIH1cbiAgICBpZiAocm91dGUucGF0aCAhPSBudWxsICYmIHJvdXRlLnBhdGggIT09ICcnICYmIHJvdXRlLnBhdGggIT09ICcvJykge1xuICAgICAgbGV0IG5vcm1hbGl6ZWQgPSByb3V0ZS5wYXRoO1xuICAgICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaChub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXRoID0gcGFydHMuam9pbignLycpO1xuXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gcm91dGUgYXMgUm91dGU8YW55LCBhbnksIGFueSwgYW55LCBhbnk+O1xuXG4gICAgaWYgKCFpc1JlZGlyZWN0KHJvdXRlKSAmJiBjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICBjb25zdCByb3V0ZXMgPSBidWlsZFJvdXRlKGNoaWxkcmVuLCBbLi4ucGFyZW50Um91dGVzLCByb3V0ZV0sIG5ld1BhdGgpO1xuICAgICAgZmxhdFJvdXRlcy5wdXNoKC4uLnJvdXRlcyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoRnVuY3Rpb24gPSBtYXRjaChgLyR7bmV3UGF0aH1gLCB7XG4gICAgICB0cmFpbGluZzogZmFsc2UsXG4gICAgfSk7XG5cbiAgICBsZXQgcGF0aCA9IG5ld1BhdGg7XG4gICAgaWYgKCFuZXdQYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgcGF0aCA9IGAvJHtuZXdQYXRofWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVkaXJlY3Qocm91dGUpKSB7XG4gICAgICBsZXQgcmVkaXJlY3RUbyA9IHJvdXRlLnRvO1xuXG4gICAgICBpZiAoIXJlZGlyZWN0VG8uc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHJlZGlyZWN0VG8gPSBgJHtwYXRofS8ke3JlZGlyZWN0VG99YDtcbiAgICAgIH1cbiAgICAgIGZsYXRSb3V0ZXMucHVzaChcbiAgICAgICAgbmV3IEZsYXRSb3V0ZSh7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICByZWRpcmVjdFRvLFxuICAgICAgICAgIG1hdGNoRnVuY3Rpb24sXG4gICAgICAgICAgcm91dGVzOiBbLi4ucGFyZW50Um91dGVzXSBhcyBBbnlSb3V0ZVtdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXRSb3V0ZXMucHVzaChcbiAgICAgICAgbmV3IEZsYXRSb3V0ZSh7XG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBtYXRjaEZ1bmN0aW9uLFxuICAgICAgICAgIHJvdXRlczogWy4uLnBhcmVudFJvdXRlcywgcm91dGVdIGFzIEFueVJvdXRlW10sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmxhdFJvdXRlcztcbn1cblxuLyoqXG4gKiBUb3AtbGV2ZWwgY29udmVuaWVuY2UgdG8gZmxhdHRlbiBhIHJvdXRlIGNvbmZpZ3VyYXRpb24gaW50byBgRmxhdFJvdXRlYHMuXG4gKlxuICogQHBhcmFtIHJvdXRlQ29uZmlnIC0gUm91dGUgZGVmaW5pdGlvbnMgdG8gZmxhdHRlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUm91dGVzPFRDb250ZXh0PihcbiAgcm91dGVDb25maWc6IEFueVJvdXRlPFRDb250ZXh0PltdLFxuKTogRmxhdFJvdXRlPFBhcmFtRGF0YT5bXSB7XG4gIHJldHVybiBidWlsZFJvdXRlKHJvdXRlQ29uZmlnKTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteComponentWrapper.d.ts","sourceRoot":"","sources":["../../../src/routing/RouteComponentWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAiChD,KAAK,KAAK,CAAC,KAAK,SAAS,SAAS,GAAG,SAAS,IAAI;IAChD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAaF,QAAA,MAAM,qBAAqB,GAAI,KAAK,SAAS,SAAS,GAAG,SAAS,EAChE,OAAO,KAAK,CAAC,KAAK,CAAC,KAClB,GAAG,CAAC,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"RouteComponentWrapper.d.ts","sourceRoot":"","sources":["../../../src/routing/RouteComponentWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAiChD,KAAK,KAAK,CAAC,KAAK,SAAS,SAAS,GAAG,SAAS,IAAI;IAChD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAaF,QAAA,MAAM,qBAAqB,GAAI,KAAK,SAAS,SAAS,GAAG,SAAS,EAChE,OAAO,KAAK,CAAC,KAAK,CAAC,KAClB,GAAG,CAAC,OAAO,GAAG,IA+GhB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -13,6 +13,7 @@ const RouteComponentWrapper = (props) => {
|
|
|
13
13
|
const router = useContext(RoutingContext);
|
|
14
14
|
const currentEntry = router?.get();
|
|
15
15
|
const rawQuery = currentEntry?.query ?? {};
|
|
16
|
+
const routeContext = currentEntry?.context;
|
|
16
17
|
const typedQuery = rawQuery;
|
|
17
18
|
const route = useMemo(() => {
|
|
18
19
|
if (match == null) {
|
|
@@ -36,6 +37,7 @@ const RouteComponentWrapper = (props) => {
|
|
|
36
37
|
preparedRoute,
|
|
37
38
|
route,
|
|
38
39
|
prepared,
|
|
40
|
+
context: routeContext,
|
|
39
41
|
rawQuery,
|
|
40
42
|
query: typedQuery,
|
|
41
43
|
});
|
|
@@ -85,4 +87,4 @@ const RouteComponentWrapper = (props) => {
|
|
|
85
87
|
return _jsx(RouteComponent, { redirectToPathname: pathname, content: content2 });
|
|
86
88
|
};
|
|
87
89
|
export default RouteComponentWrapper;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVDb21wb25lbnRXcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvUm91dGVDb21wb25lbnRXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQTRCLE1BQU0sT0FBTyxDQUFDO0FBSXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQVVqRCxTQUFTLHNCQUFzQixDQUFDLEtBQTZCO0lBQzNELE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLE9BQU8sQ0FDTCw4QkFDRSwyQ0FDNEIsV0FBVyxpQkFDekIsTUFBTSxFQUNsQixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQzFCLEVBQ0QsUUFBUSxFQUNULHlDQUMwQixXQUFXLGlCQUN2QixNQUFNLEVBQ2xCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FDMUIsSUFDRCxDQUNKLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsS0FBbUIsRUFDQyxFQUFFO0lBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNqRCxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUMvRCxhQUFhLENBQUM7SUFDaEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxZQUFZLEVB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QU0sYUFBYSxHQUFHLENBRXBCLEtBQUMsU0FBUyxJQUNSLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsS0FBSyxFQUFFLEtBQUssRUFDWixRQUFRLEVBQUUsUUFBUSxFQUNsQixLQUFLLEVBQUUsVUFBVSxZQUVoQixRQUFRLEdBQ0MsQ0FDYixDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEQsT0FBTyxLQUFDLGNBQWMsSUFBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBSSxDQUFDO0FBQzdFLENBQUMsQ0FBQztBQUVGLGVBQWUscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB0eXBlIEpTWCwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgUHJlcGFyZWRNYXRjaFJvdXRlLCBSb3V0ZXJNYXRjaGVkUm91dGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCB7IEh0dHBSZWRpcmVjdCB9IGZyb20gJy4uL2Vycm9ycy9pbmRleC5qcyc7XG5cbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCBSb3V0ZUNvbXBvbmVudCBmcm9tICcuL1JvdXRlQ29tcG9uZW50LmpzJztcblxudHlwZSBIaWdobGlnaHRCb3VuZGFyeVByb3BzID0ge1xuICBoaWdobGlnaHRJZDogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufTtcblxuLyoqXG4gKiBXcmFwcyB0aGUgcmVuZGVyZWQgcm91dGUgb3V0cHV0IHdpdGggaW52aXNpYmxlIG1hcmtlcnMgc28gRGV2VG9vbHMgY2FuIG1hcCBpdCBiYWNrLlxuICovXG5mdW5jdGlvbiBSb3V0ZUhpZ2hsaWdodEJvdW5kYXJ5KHByb3BzOiBIaWdobGlnaHRCb3VuZGFyeVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGhpZ2hsaWdodElkLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtcGx1bWlsZS1yb3V0ZS1zdGFydD17aGlnaGxpZ2h0SWR9XG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtcGx1bWlsZS1yb3V0ZS1lbmQ9e2hpZ2hsaWdodElkfVxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbnR5cGUgUHJvcHM8VFZhcnMgZXh0ZW5kcyBQYXJhbURhdGEgPSBQYXJhbURhdGE+ID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgbWF0Y2g6IFJvdXRlck1hdGNoZWRSb3V0ZTxUVmFycz4gfCBudWxsO1xuICBwcmVwYXJlZFJvdXRlOiBQcmVwYXJlZE1hdGNoUm91dGU7XG59O1xuXG4vKipcbiAqIFRoZSBgcmVzb3VyY2VQYWdlYCBwcm9wZXJ0eSBmcm9tIHRoZSByb3V0ZSBlbnRyeSBpcyBhIFJlc291cmNlLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSByZWFkeS5cbiAqIFdlIHVzZSBhIGhlbHBlciBjaGlsZCBjb21wb25lbnQgdG8gdW53cmFwIHRoZSByZXNvdXJjZSB3aXRoIGNvbXBvbmVudC5yZWFkKCksIGFuZCB0aGVuXG4gKiByZW5kZXIgaXQgaWYgaXRzIHJlYWR5LlxuICpcbiAqIE5PVEU6IGNhbGxpbmcgcm91dGVFbnRyeS5yb3V0ZS5jb21wb25lbnQucmVhZCgpIGRpcmVjdGx5IGluIFJvdXRlUmVuZGVyZXIgd29sZG4ndCB3b3JrIHRoZVxuICogd2F5IHdlJ2QgZXhwZWN0LiBCZWNhdXNlIHRoYXQgbWV0aG9kIGNvdWxkIHRocm93IC0gZWl0aGVyIHN1c3BlbmRpbmcgb3Igb24gZXJyb3IgLSB0aGUgZXJyb3JcbiAqIHdvdWxkIGJ1YmJsZSB1cCB0byB0aGUgKmNhbGxlciogb2YgUm91dGVSZW5kZXJlci4gV2Ugd2FudCB0aGUgc3VzcGVuZC9lcnJvciB0byBidWJibGUgdXAgdG9cbiAqIG91ciBFcnJvckJvdW5kYXJ5L1N1c3BlbnNlIGNvbXBvbmVudHMsIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHN1c3BlbmQvZXJyb3IgaGFwcGVuc1xuICogaW4gYSBjaGlsZCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFJvdXRlQ29tcG9uZW50V3JhcHBlciA9IDxUVmFycyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YT4oXG4gIHByb3BzOiBQcm9wczxUVmFycz4sXG4pOiBKU1guRWxlbWVudCB8IG51bGwgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBtYXRjaCwgcHJlcGFyZWRSb3V0ZSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgcmVzb3VyY2VQYWdlLCBwcmVwYXJlZCwgcmVuZGVyLCByZWRpcmVjdFRvLCBoaWdobGlnaHRJZCB9ID1cbiAgICBwcmVwYXJlZFJvdXRlOyAvLyByb3V0ZURhdGFcbiAgY29uc3Qgcm91dGVyID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGNvbnN0IGN1cnJlbnRFbnRyeSA9IHJvdXRlcj8uZ2V0KCk7XG4gIGNvbnN0IHJhd1F1ZXJ5ID0gY3VycmVudEVudHJ5Py5xdWVyeSA/PyB7fTtcbiAgY29uc3QgdHlwZWRRdWVyeSA9IHJhd1F1ZXJ5OyAvLyBsZWdhY3kgdHlwZWRRdWVyeSByZW1vdmVkXG5cbiAgY29uc3Qgcm91dGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobWF0Y2ggPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoLnJvdXRlO1xuICB9LCBbbWF0Y2hdKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmNcbiAgY29uc3QgQ29tcG9uZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlUGFnZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgcmV0dXJuIHJlc291cmNlUGFnZS5yZWFkKCk7XG4gIH0sIFtyZXNvdXJjZVBhZ2VdKTtcblxuICBsZXQgY29udGVudDogSlNYLkVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxKU1guRWxlbWVudCB8IG51bGw+ID1cbiAgICBudWxsO1xuICBsZXQgcmVkaXJlY3RUb1BhdGhuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGVudCA9IHJlbmRlcih7XG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBPSyBjYW4gYmUgYSBzdXNwZW5kXG4gICAgICAgIENvbXBvbmVudCxcbiAgICAgICAgcHJlcGFyZWRSb3V0ZSxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIHByZXBhcmVkLFxuICAgICAgICByYXdRdWVyeSxcbiAgICAgICAgcXVlcnk6IHR5cGVkUXVlcnksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cFJlZGlyZWN0ICYmIHJvdXRlciAhPSBudWxsKSB7XG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICByZWRpcmVjdFRvUGF0aG5hbWUgPSBlcnJvci5yZWRpcmVjdFRvO1xuICAgICAgICAvLyBJZiBpdCdzIHN1c3BlbmRlZFxuICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgY29udGVudCA9IGVycm9yO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlZGlyZWN0VG9QYXRobmFtZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUjogJywgZXJyb3IpO1xuICAgICAgICBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgcmVkaXJlY3RUb1BhdGhuYW1lID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXRobmFtZTogc3RyaW5nIHwgbnVsbCA9IHJlZGlyZWN0VG8gPz8gcmVkaXJlY3RUb1BhdGhuYW1lID8/IG51bGw7XG5cbiAgY29uc3Qgd3JhcFdpdGhIaWdobGlnaHQgPSAobm9kZTogUmVhY3ROb2RlKTogSlNYLkVsZW1lbnQgPT4ge1xuICAgIGlmICh0eXBlb2YgaGlnaGxpZ2h0SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gPD57bm9kZX08Lz47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8Um91dGVIaWdobGlnaHRCb3VuZGFyeSBoaWdobGlnaHRJZD17aGlnaGxpZ2h0SWR9PlxuICAgICAgICB7bm9kZX1cbiAgICAgIDwvUm91dGVIaWdobGlnaHRCb3VuZGFyeT5cbiAgICApO1xuICB9O1xuXG4gIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9vbmx5LXRocm93LWVycm9yXG4gICAgICB0aHJvdyBjb250ZW50O1xuICAgIH1cblxuICAgIGlmIChwYXRobmFtZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gPFJvdXRlQ29tcG9uZW50IHJlZGlyZWN0VG9QYXRobmFtZT17cGF0aG5hbWV9IC8+O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29udGVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB3cmFwV2l0aEhpZ2hsaWdodChjb250ZW50ID8/IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29tcG9uZW50Tm9kZSA9IChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBPSyAtIGNvbXBvbmVudCB0eXBlIGluZmVyZW5jZSBmcm9tIHJlc291cmNlIGxvYWRlciBpcyBkeW5hbWljXG4gICAgPENvbXBvbmVudFxuICAgICAgbWF0Y2g9e21hdGNofVxuICAgICAgcHJlcGFyZWRSb3V0ZT17cHJlcGFyZWRSb3V0ZX1cbiAgICAgIHJvdXRlPXtyb3V0ZX1cbiAgICAgIHByZXBhcmVkPXtwcmVwYXJlZH1cbiAgICAgIHF1ZXJ5PXt0eXBlZFF1ZXJ5fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbiAgY29uc3QgY29udGVudDIgPSB3cmFwV2l0aEhpZ2hsaWdodChjb21wb25lbnROb2RlKTtcblxuICByZXR1cm4gPFJvdXRlQ29tcG9uZW50IHJlZGlyZWN0VG9QYXRobmFtZT17cGF0aG5hbWV9IGNvbnRlbnQ9e2NvbnRlbnQyfSAvPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlQ29tcG9uZW50V3JhcHBlcjtcbiJdfQ==
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVDb21wb25lbnRXcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvUm91dGVDb21wb25lbnRXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQTRCLE1BQU0sT0FBTyxDQUFDO0FBSXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQVVqRCxTQUFTLHNCQUFzQixDQUFDLEtBQTZCO0lBQzNELE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLE9BQU8sQ0FDTCw4QkFDRSwyQ0FDNEIsV0FBVyxpQkFDekIsTUFBTSxFQUNsQixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQzFCLEVBQ0QsUUFBUSxFQUNULHlDQUMwQixXQUFXLGlCQUN2QixNQUFNLEVBQ2xCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FDMUIsSUFDRCxDQUNKLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsS0FBbUIsRUFDQyxFQUFFO0lBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNqRCxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUMvRCxhQUFhLENBQUM7SUFDaEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxZQUFZLEVB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U0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLENBRXBCLEtBQUMsU0FBUyxJQUNSLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsS0FBSyxFQUFFLEtBQUssRUFDWixRQUFRLEVBQUUsUUFBUSxFQUNsQixLQUFLLEVBQUUsVUFBVSxZQUVoQixRQUFRLEdBQ0MsQ0FDYixDQUFDO0lBQ0YsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFbEQsT0FBTyxLQUFDLGNBQWMsSUFBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBSSxDQUFDO0FBQzdFLENBQUMsQ0FBQztBQUVGLGVBQWUscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB0eXBlIEpTWCwgdHlwZSBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgUHJlcGFyZWRNYXRjaFJvdXRlLCBSb3V0ZXJNYXRjaGVkUm91dGUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCB7IEh0dHBSZWRpcmVjdCB9IGZyb20gJy4uL2Vycm9ycy9pbmRleC5qcyc7XG5cbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCBSb3V0ZUNvbXBvbmVudCBmcm9tICcuL1JvdXRlQ29tcG9uZW50LmpzJztcblxudHlwZSBIaWdobGlnaHRCb3VuZGFyeVByb3BzID0ge1xuICBoaWdobGlnaHRJZDogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufTtcblxuLyoqXG4gKiBXcmFwcyB0aGUgcmVuZGVyZWQgcm91dGUgb3V0cHV0IHdpdGggaW52aXNpYmxlIG1hcmtlcnMgc28gRGV2VG9vbHMgY2FuIG1hcCBpdCBiYWNrLlxuICovXG5mdW5jdGlvbiBSb3V0ZUhpZ2hsaWdodEJvdW5kYXJ5KHByb3BzOiBIaWdobGlnaHRCb3VuZGFyeVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGhpZ2hsaWdodElkLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtcGx1bWlsZS1yb3V0ZS1zdGFydD17aGlnaGxpZ2h0SWR9XG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtcGx1bWlsZS1yb3V0ZS1lbmQ9e2hpZ2hsaWdodElkfVxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbnR5cGUgUHJvcHM8VFZhcnMgZXh0ZW5kcyBQYXJhbURhdGEgPSBQYXJhbURhdGE+ID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgbWF0Y2g6IFJvdXRlck1hdGNoZWRSb3V0ZTxUVmFycz4gfCBudWxsO1xuICBwcmVwYXJlZFJvdXRlOiBQcmVwYXJlZE1hdGNoUm91dGU7XG59O1xuXG4vKipcbiAqIFRoZSBgcmVzb3VyY2VQYWdlYCBwcm9wZXJ0eSBmcm9tIHRoZSByb3V0ZSBlbnRyeSBpcyBhIFJlc291cmNlLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSByZWFkeS5cbiAqIFdlIHVzZSBhIGhlbHBlciBjaGlsZCBjb21wb25lbnQgdG8gdW53cmFwIHRoZSByZXNvdXJjZSB3aXRoIGNvbXBvbmVudC5yZWFkKCksIGFuZCB0aGVuXG4gKiByZW5kZXIgaXQgaWYgaXRzIHJlYWR5LlxuICpcbiAqIE5PVEU6IGNhbGxpbmcgcm91dGVFbnRyeS5yb3V0ZS5jb21wb25lbnQucmVhZCgpIGRpcmVjdGx5IGluIFJvdXRlUmVuZGVyZXIgd29sZG4ndCB3b3JrIHRoZVxuICogd2F5IHdlJ2QgZXhwZWN0LiBCZWNhdXNlIHRoYXQgbWV0aG9kIGNvdWxkIHRocm93IC0gZWl0aGVyIHN1c3BlbmRpbmcgb3Igb24gZXJyb3IgLSB0aGUgZXJyb3JcbiAqIHdvdWxkIGJ1YmJsZSB1cCB0byB0aGUgKmNhbGxlciogb2YgUm91dGVSZW5kZXJlci4gV2Ugd2FudCB0aGUgc3VzcGVuZC9lcnJvciB0byBidWJibGUgdXAgdG9cbiAqIG91ciBFcnJvckJvdW5kYXJ5L1N1c3BlbnNlIGNvbXBvbmVudHMsIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHN1c3BlbmQvZXJyb3IgaGFwcGVuc1xuICogaW4gYSBjaGlsZCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFJvdXRlQ29tcG9uZW50V3JhcHBlciA9IDxUVmFycyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YT4oXG4gIHByb3BzOiBQcm9wczxUVmFycz4sXG4pOiBKU1guRWxlbWVudCB8IG51bGwgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBtYXRjaCwgcHJlcGFyZWRSb3V0ZSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgcmVzb3VyY2VQYWdlLCBwcmVwYXJlZCwgcmVuZGVyLCByZWRpcmVjdFRvLCBoaWdobGlnaHRJZCB9ID1cbiAgICBwcmVwYXJlZFJvdXRlOyAvLyByb3V0ZURhdGFcbiAgY29uc3Qgcm91dGVyID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGNvbnN0IGN1cnJlbnRFbnRyeSA9IHJvdXRlcj8uZ2V0KCk7XG4gIGNvbnN0IHJhd1F1ZXJ5ID0gY3VycmVudEVudHJ5Py5xdWVyeSA/PyB7fTtcbiAgY29uc3Qgcm91dGVDb250ZXh0ID0gY3VycmVudEVudHJ5Py5jb250ZXh0O1xuICBjb25zdCB0eXBlZFF1ZXJ5ID0gcmF3UXVlcnk7IC8vIGxlZ2FjeSB0eXBlZFF1ZXJ5IHJlbW92ZWRcblxuICBjb25zdCByb3V0ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChtYXRjaCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2gucm91dGU7XG4gIH0sIFttYXRjaF0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJvbWlzZS1mdW5jdGlvbi1hc3luY1xuICBjb25zdCBDb21wb25lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICByZXR1cm4gcmVzb3VyY2VQYWdlLnJlYWQoKTtcbiAgfSwgW3Jlc291cmNlUGFnZV0pO1xuXG4gIGxldCBjb250ZW50OiBKU1guRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQgfCBQcm9taXNlPEpTWC5FbGVtZW50IHwgbnVsbD4gPVxuICAgIG51bGw7XG4gIGxldCByZWRpcmVjdFRvUGF0aG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBjb250ZW50ID0gcmVuZGVyKHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IE9LIGNhbiBiZSBhIHN1c3BlbmRcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBwcmVwYXJlZFJvdXRlLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcHJlcGFyZWQsXG4gICAgICAgIGNvbnRleHQ6IHJvdXRlQ29udGV4dCxcbiAgICAgICAgcmF3UXVlcnksXG4gICAgICAgIHF1ZXJ5OiB0eXBlZFF1ZXJ5LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBSZWRpcmVjdCAmJiByb3V0ZXIgIT0gbnVsbCkge1xuICAgICAgICBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgcmVkaXJlY3RUb1BhdGhuYW1lID0gZXJyb3IucmVkaXJlY3RUbztcbiAgICAgICAgLy8gSWYgaXQncyBzdXNwZW5kZWRcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIGNvbnRlbnQgPSBlcnJvcjtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICByZWRpcmVjdFRvUGF0aG5hbWUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcignRVJST1I6ICcsIGVycm9yKTtcbiAgICAgICAgY29udGVudCA9IG51bGw7XG4gICAgICAgIHJlZGlyZWN0VG9QYXRobmFtZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGF0aG5hbWU6IHN0cmluZyB8IG51bGwgPSByZWRpcmVjdFRvID8/IHJlZGlyZWN0VG9QYXRobmFtZSA/PyBudWxsO1xuXG4gIGNvbnN0IHdyYXBXaXRoSGlnaGxpZ2h0ID0gKG5vZGU6IFJlYWN0Tm9kZSk6IEpTWC5FbGVtZW50ID0+IHtcbiAgICBpZiAodHlwZW9mIGhpZ2hsaWdodElkICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIDw+e25vZGV9PC8+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPFJvdXRlSGlnaGxpZ2h0Qm91bmRhcnkgaGlnaGxpZ2h0SWQ9e2hpZ2hsaWdodElkfT5cbiAgICAgICAge25vZGV9XG4gICAgICA8L1JvdXRlSGlnaGxpZ2h0Qm91bmRhcnk+XG4gICAgKTtcbiAgfTtcblxuICBpZiAocmVuZGVyICE9IG51bGwpIHtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvb25seS10aHJvdy1lcnJvclxuICAgICAgdGhyb3cgY29udGVudDtcbiAgICB9XG5cbiAgICBpZiAocGF0aG5hbWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDxSb3V0ZUNvbXBvbmVudCByZWRpcmVjdFRvUGF0aG5hbWU9e3BhdGhuYW1lfSAvPjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gd3JhcFdpdGhIaWdobGlnaHQoY29udGVudCA/PyBudWxsKTtcbiAgICB9XG4gIH1cblxuICBpZiAoQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNvbXBvbmVudE5vZGUgPSAoXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogT0sgLSBjb21wb25lbnQgdHlwZSBpbmZlcmVuY2UgZnJvbSByZXNvdXJjZSBsb2FkZXIgaXMgZHluYW1pY1xuICAgIDxDb21wb25lbnRcbiAgICAgIG1hdGNoPXttYXRjaH1cbiAgICAgIHByZXBhcmVkUm91dGU9e3ByZXBhcmVkUm91dGV9XG4gICAgICByb3V0ZT17cm91dGV9XG4gICAgICBwcmVwYXJlZD17cHJlcGFyZWR9XG4gICAgICBxdWVyeT17dHlwZWRRdWVyeX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG4gIGNvbnN0IGNvbnRlbnQyID0gd3JhcFdpdGhIaWdobGlnaHQoY29tcG9uZW50Tm9kZSk7XG5cbiAgcmV0dXJuIDxSb3V0ZUNvbXBvbmVudCByZWRpcmVjdFRvUGF0aG5hbWU9e3BhdGhuYW1lfSBjb250ZW50PXtjb250ZW50Mn0gLz47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZUNvbXBvbmVudFdyYXBwZXI7XG4iXX0=
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type RoutingContextType, type AnyRoute, type PreparedAccess } from '../types.js';
|
|
2
2
|
import { type InstrumentationAPI } from '../instrumentation/Instrumentation.js';
|
|
3
|
-
export type CreateRouterReturn<R extends AnyRoute[]> = {
|
|
3
|
+
export type CreateRouterReturn<TContext, R extends AnyRoute<TContext>[]> = {
|
|
4
4
|
cleanup: () => void;
|
|
5
|
-
context: RoutingContextType<any> & PreparedAccess<R>;
|
|
5
|
+
context: RoutingContextType<any, any, any, TContext> & PreparedAccess<R>;
|
|
6
6
|
};
|
|
7
|
-
export type CreateRouterOptions = {
|
|
7
|
+
export type CreateRouterOptions<TContext> = {
|
|
8
8
|
instrumentations?: InstrumentationAPI[];
|
|
9
|
+
context?: TContext | (() => TContext);
|
|
10
|
+
getContext?: () => TContext;
|
|
9
11
|
};
|
|
10
|
-
export default function createRouter<R extends AnyRoute[]>(routes: [...R] | AnyRoute[], options?: CreateRouterOptions): CreateRouterReturn<R extends AnyRoute[] ? R : AnyRoute[]>;
|
|
12
|
+
export default function createRouter<TContext = unknown, R extends AnyRoute<TContext>[] = AnyRoute<TContext>[]>(routes: [...R] | AnyRoute<TContext>[], options?: CreateRouterOptions<TContext>): CreateRouterReturn<TContext, R extends AnyRoute<TContext>[] ? R : AnyRoute<TContext>[]>;
|
|
11
13
|
//# sourceMappingURL=createRouter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,QAAQ,EACb,KAAK,cAAc,EAGpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAM/C,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,QAAQ,EACb,KAAK,cAAc,EAGpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAM/C,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI;IAEzE,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CAC1E,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAErD,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,EACrC,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CACnB,QAAQ,EACR,CAAC,SAAS,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAC1D,CAkwBA"}
|
|
@@ -8,6 +8,21 @@ import { createInstrumentationRegistry, } from '../instrumentation/Instrumentati
|
|
|
8
8
|
export default function createRouter(routes, options = {}) {
|
|
9
9
|
const history = new BrowserHistory();
|
|
10
10
|
const registry = createInstrumentationRegistry(options.instrumentations ?? []);
|
|
11
|
+
let staticContext;
|
|
12
|
+
if (options.getContext == null) {
|
|
13
|
+
if (typeof options.context === 'function') {
|
|
14
|
+
staticContext = options.context();
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
staticContext = options.context;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function resolveContext() {
|
|
21
|
+
if (options.getContext != null) {
|
|
22
|
+
return options.getContext();
|
|
23
|
+
}
|
|
24
|
+
return staticContext;
|
|
25
|
+
}
|
|
11
26
|
let pendingNavigationOrigin;
|
|
12
27
|
let lastNavigationOrigin = 'external';
|
|
13
28
|
let lastPreloadSignature = null;
|
|
@@ -194,12 +209,14 @@ export default function createRouter(routes, options = {}) {
|
|
|
194
209
|
location: initialLocationSnapshot,
|
|
195
210
|
};
|
|
196
211
|
}
|
|
197
|
-
const
|
|
212
|
+
const initialContext = resolveContext();
|
|
213
|
+
const preparedMatch = prepareMatch(route, initialFilters, initialInstrumentation, initialContext);
|
|
198
214
|
let currentEntry = {
|
|
199
215
|
forceRerender: false,
|
|
200
216
|
location: history.location,
|
|
201
217
|
route,
|
|
202
218
|
preparedMatch,
|
|
219
|
+
context: initialContext,
|
|
203
220
|
rawSearch: history.location.search,
|
|
204
221
|
query: initialRawQuery,
|
|
205
222
|
filters: initialFilters,
|
|
@@ -300,6 +317,7 @@ export default function createRouter(routes, options = {}) {
|
|
|
300
317
|
if (!forceRerender && samePathname && sameSearch) {
|
|
301
318
|
return;
|
|
302
319
|
}
|
|
320
|
+
const nextContext = resolveContext();
|
|
303
321
|
let nextPreparedMatch = currentEntry.preparedMatch;
|
|
304
322
|
let nextRoute = currentEntry.route;
|
|
305
323
|
if (!samePathname) {
|
|
@@ -351,13 +369,14 @@ export default function createRouter(routes, options = {}) {
|
|
|
351
369
|
location: locationPayload,
|
|
352
370
|
};
|
|
353
371
|
}
|
|
354
|
-
nextPreparedMatch = prepareMatch(nextRoute, undefined, updateInstrumentation);
|
|
372
|
+
nextPreparedMatch = prepareMatch(nextRoute, undefined, updateInstrumentation, nextContext);
|
|
355
373
|
}
|
|
356
374
|
const nextEntry = {
|
|
357
375
|
forceRerender: forceRerender || (samePathname && !sameSearch),
|
|
358
376
|
location,
|
|
359
377
|
route: nextRoute,
|
|
360
378
|
preparedMatch: nextPreparedMatch,
|
|
379
|
+
context: nextContext,
|
|
361
380
|
rawSearch: location.search,
|
|
362
381
|
query,
|
|
363
382
|
filters,
|
|
@@ -470,7 +489,8 @@ export default function createRouter(routes, options = {}) {
|
|
|
470
489
|
location: locationSnapshot,
|
|
471
490
|
};
|
|
472
491
|
}
|
|
473
|
-
|
|
492
|
+
const preloadContext = resolveContext();
|
|
493
|
+
prepareMatch(matches, undefined, instrumentation, preloadContext);
|
|
474
494
|
},
|
|
475
495
|
subscribe(callback) {
|
|
476
496
|
nextId += 1;
|
|
@@ -571,4 +591,4 @@ export default function createRouter(routes, options = {}) {
|
|
|
571
591
|
}
|
|
572
592
|
return { context, cleanup };
|
|
573
593
|
}
|
|
574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFVOUQsT0FBTyxFQUNMLDZCQUE2QixHQU05QixNQUFNLHVDQUF1QyxDQUFDO0FBK0QvQyxNQUFNLENBQUMsT0FBTyxVQUFVLFlBQVksQ0FDbEMsTUFBMkIsRUFDM0IsVUFBK0IsRUFBRTtJQUdqQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBRXJDLE1BQU0sUUFBUSxHQUFHLDZCQUE2QixDQUM1QyxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUMvQixDQUFDO0lBRUYsSUFBSSx1QkFBMkQsQ0FBQztJQUNoRSxJQUFJLG9CQUFvQixHQUEyQixVQUFVLENBQUM7SUFDOUQsSUFBSSxvQkFBb0IsR0FHYixJQUFJLENBQUM7SUFLaEIsU0FBUyxpQkFBaUIsQ0FBQyxRQUkxQjtRQUNDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLE9BQU8sUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU87WUFDTCxRQUFRLEVBQUUsYUFBYTtZQUN2QixNQUFNLEVBQUUsV0FBVztZQUNuQixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsU0FBUyxDQUFDLEtBQWtCO1FBQ25DLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUtELFNBQVMsU0FBUyxDQUFDLEdBQVk7UUFDN0IsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLFlBQVksQ0FBQztZQUNsQixLQUFLLFlBQVksQ0FBQztZQUNsQixLQUFLLGNBQWMsQ0FBQztZQUNwQixLQUFLLGVBQWUsQ0FBQztZQUNyQixLQUFLLGtCQUFrQixDQUFDO1lBQ3hCLEtBQUssa0JBQWtCLENBQUM7WUFDeEIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxlQUFlO2dCQUNsQixPQUFPLEdBQUcsQ0FBQztZQUNiO2dCQUNFLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUMvQixJQUFJO1FBQ0osS0FBSztRQUNMLElBQUk7UUFDSixLQUFLO1FBQ0wsSUFBSTtRQUNKLEtBQUs7UUFDTCxVQUFVO1FBQ1YsSUFBSTtRQUNKLElBQUk7UUFDSixTQUFTO1FBQ1QsSUFBSTtRQUNKLEtBQUs7S0FDTixDQUFDLENBQUM7SUFHSCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7UUFDdEMsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkUsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQztRQUNoRCxLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUNFLFVBQVUsSUFBSSxJQUFJO2dCQUNsQixPQUFPLFVBQVUsS0FBSyxRQUFRO2dCQUM5QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQzFCLENBQUM7Z0JBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQXFDLENBQUMsRUFBRSxDQUFDO29CQUNyRSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM5QixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU1ELFNBQVMsdUJBQXVCLENBQzlCLE9BQW9DO1FBRXBDLE1BQU0sY0FBYyxHQUFHLHVCQUF1QixDQUFDO1FBQy9DLElBQUksTUFBMEMsQ0FBQztRQUUvQyxNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ3RDLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sS0FBSyxjQUFjLENBQUM7UUFDMUIsTUFBTSxLQUFLLFVBQVUsQ0FBQztRQUN0Qix1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQU1ELFNBQVMsb0JBQW9CLENBQzNCLEtBQWtDO1FBRWxDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sZUFBZSxHQUFHLFNBQW9DLENBQUM7Z0JBQzdELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xDLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBR0QsU0FBUyxrQkFBa0IsQ0FBQyxLQUFzQjtRQUNoRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDM0MsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUN0QyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsV0FBVyxDQUFDLEtBQXNCO1FBQ3pDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFHRCxTQUFTLGVBQWUsQ0FBQyxJQUFxQixFQUFFLFFBQWdCO1FBQzlELE9BQU8sR0FBRyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUdELFNBQVMsZ0JBQWdCLENBQ3ZCLElBQXFCLEVBQ3JCLFFBQWdCLEVBQ2hCLE1BQThCO1FBRTlCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sZ0JBQWdCLEdBQ3BCLG9CQUFvQixLQUFLLElBQUk7WUFDN0Isb0JBQW9CLENBQUMsR0FBRyxLQUFLLEdBQUc7WUFDaEMsR0FBRyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsU0FBUyxDQUFDO2dCQUNSLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU07Z0JBQ04sU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsUUFBUSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQzdDLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELG9CQUFvQixHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBR0QsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBd0MsRUFDeEMsTUFBOEIsRUFDOUIsUUFBOEQsRUFDOUQsT0FBaUM7UUFFakMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLFNBQVMsQ0FBQztZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTTtZQUNOLE1BQU07WUFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1lBQ3JDLE9BQU87U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBR3ZDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRS9ELElBQUksb0JBQXlCLENBQUM7SUFDOUIsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUU3QixDQUFDO1FBQ1QsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksY0FBbUQsQ0FBQztJQUN4RCxJQUFJLHdCQUEyQyxDQUFDO0lBQ2hELElBQUksb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDM0UsY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUE2QyxDQUFDO1FBQ3RFLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxXQUF3QixDQUFDO0lBQzdELENBQUM7SUFDRCxNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRSxJQUFJLHNCQU1TLENBQUM7SUFDZCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsR0FBRztZQUN2QixJQUFJLEVBQUUsQ0FBQyxLQUFrQixFQUFFLEVBQUU7Z0JBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsTUFBTSxFQUFFLG9CQUFvQjtZQUM1QixRQUFRLEVBQUUsdUJBQXVCO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUNoQyxLQUFLLEVBQ0wsY0FBYyxFQUNkLHNCQUFzQixDQUN2QixDQUFDO0lBRUYsSUFBSSxZQUFZLEdBQW9CO1FBQ2xDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixLQUFLO1FBQ0wsYUFBYTtRQUNiLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDbEMsS0FBSyxFQUFFLGVBQWU7UUFFdEIsT0FBTyxFQUFFLGNBQWM7UUFDdkIsaUJBQWlCLEVBQUUsd0JBQXdCO1FBQzNDLGlCQUFpQixFQUFFLG9CQUFvQjtLQUN4QyxDQUFDO0lBR0YsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BRWxCLENBQUM7SUFDZCxJQUFJLGVBQW1DLENBQUM7SUFDeEMsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFBRSxlQUFlLEdBQUcsT0FBTyxDQUFDO2FBQ3RELElBQ0gsT0FBTyxJQUFJLElBQUk7WUFDZixPQUFPLE9BQU8sS0FBSyxRQUFRO1lBQzNCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdkIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDbkQsT0FBUSxPQUFtQyxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQzNELENBQUM7WUFDRCxlQUFlLEdBQUksT0FBbUMsQ0FBQyxFQUFZLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFDRCxJQUNFLE9BQU8sZUFBZSxLQUFLLFFBQVE7UUFDbkMsZUFBZSxHQUFHLENBQUM7UUFDbkIsb0JBQW9CLElBQUksSUFBSTtRQUM1QixTQUFTLElBQUksSUFBSSxFQUNqQixDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQTZCLENBQUM7UUFDMUUsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQztZQUMzQyxPQUFPLEVBQUUsSUFBSTtZQUNiLEtBQUssRUFBRSxlQUEwQztZQUNqRCxXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDLENBQUMsQ0FBQztRQUNILElBQUksZ0JBQWdCLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxnQkFBZ0IsQ0FDZCxXQUFXLEVBQ1gsV0FBVyxFQUNYO2dCQUNFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ25DLE1BQU0sRUFBRSxnQkFBZ0I7Z0JBQ3hCLElBQUksRUFBRSxFQUFFO2FBQ1QsRUFDRCxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxDQUNqQyxDQUFDO1lBQ0YsTUFBTSxxQkFBcUIsR0FBd0I7Z0JBQ2pELE1BQU0sRUFBRSxXQUFXO2dCQUNuQixPQUFPLEVBQUUsV0FBVzthQUNyQixDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDVixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRO2dCQUNuQyxNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixJQUFJLEVBQUUsRUFBRTtnQkFDUixZQUFZLEVBQUUscUJBQXFCO2FBQ3BDLENBQUMsQ0FBQztZQUVILFlBQVksR0FBRztnQkFDYixHQUFHLFlBQVk7Z0JBQ2YsUUFBUSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRTtnQkFDaEUsU0FBUyxFQUFFLGdCQUFnQjthQUM1QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUIsU0FBUyxDQUFDO1FBQ1IsSUFBSSxFQUFFLFVBQVU7UUFDaEIsTUFBTSxFQUFFLG9CQUFvQjtRQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNyQixRQUFRLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUNsRCxTQUFTLEVBQUUsb0JBQW9CLENBQUMsWUFBWSxDQUFDO0tBQzlDLENBQUMsQ0FBQztJQUdILElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO0lBSzlELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQ3RDLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsRUFBRTtRQUN4QyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxvQkFBb0IsR0FBRyxNQUFNLENBQUM7UUFDOUIsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLEVBQUUsTUFBTSxDQUFDO1FBQ2hELElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckMsSUFBSSxjQUFvRCxDQUFDO1lBQ3pELElBQUksT0FBTyxZQUFZLEVBQUUsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxjQUFjLEdBQUcsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9ELENBQUM7WUFFRCxJQUNFLGtCQUFrQixLQUFLLGVBQWU7Z0JBQ3RDLGtCQUFrQixLQUFLLGtCQUFrQjtnQkFDekMsa0JBQWtCLEtBQUssa0JBQWtCO2dCQUN6QyxrQkFBa0IsS0FBSyxVQUFVLEVBQ2pDLENBQUM7Z0JBQ0QsSUFBSSxTQUFTLEdBQW1DLFNBQVMsQ0FBQztnQkFDMUQsSUFBSSxrQkFBa0IsS0FBSyxlQUFlLEVBQUUsQ0FBQztvQkFDM0MsU0FBUyxHQUFHLE1BQU0sQ0FBQztnQkFDckIsQ0FBQztxQkFBTSxJQUFJLGtCQUFrQixLQUFLLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JELFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQ3hCLENBQUM7Z0JBQ0QsU0FBUyxDQUFDO29CQUNSLElBQUksRUFBRSxVQUFVO29CQUNoQixNQUFNLEVBQUUsTUFBTTtvQkFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDckIsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFNBQVM7b0JBQ1QsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFFOUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxZQUFZLElBQUksVUFBVSxFQUFFLENBQUM7WUFFakQsT0FBTztRQUNULENBQUM7UUFJRCxJQUFJLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDbkQsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsU0FBUyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUdELE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsSUFBSSxXQUFnQixDQUFDO1FBQ3JCLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FFakMsQ0FBQztZQUNULElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksT0FBNEMsQ0FBQztRQUNqRCxJQUFJLGlCQUFvQyxDQUFDO1FBQ3pDLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBNkMsQ0FBQztZQUNoRSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsV0FBd0IsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksRUFBVyxDQUFDO1FBQ2hCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxHQUE0QixPQUFPLENBQUM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyQixJQUNFLEtBQUssSUFBSSxJQUFJO2dCQUNiLE9BQU8sS0FBSyxLQUFLLFFBQVE7Z0JBQ3pCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQ2pELENBQUM7Z0JBQ0QsRUFBRSxHQUFJLEtBQWlDLENBQUMsRUFBRSxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFJLE9BQStCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkUsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQixVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7UUFHRCxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsSUFBSSxxQkFNUyxDQUFDO1lBQ2QsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLHFCQUFxQixHQUFHO29CQUN0QixJQUFJLEVBQUUsQ0FBQyxLQUFrQixFQUFFLEVBQUU7d0JBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkIsQ0FBQztvQkFDRCxNQUFNLEVBQUUsTUFBTTtvQkFDZCxRQUFRLEVBQUUsZUFBZTtpQkFDMUIsQ0FBQztZQUNKLENBQUM7WUFDRCxpQkFBaUIsR0FBRyxZQUFZLENBQzlCLFNBQVMsRUFDVCxTQUFTLEVBQ1QscUJBQXFCLENBQ3RCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQW9CO1lBQ2pDLGFBQWEsRUFBRSxhQUFhLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDN0QsUUFBUTtZQUNSLEtBQUssRUFBRSxTQUFTO1lBQ2hCLGFBQWEsRUFBRSxpQkFBaUI7WUFDaEMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQzFCLEtBQUs7WUFDTCxPQUFPO1lBQ1AsaUJBQWlCO1lBQ2pCLGlCQUFpQixFQUFFLFdBQVc7U0FDL0IsQ0FBQztRQUdGLElBQUksVUFBVSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO2dCQUMzQyxPQUFPO2dCQUNQLEtBQUssRUFBRSxLQUFnQztnQkFDdkMsV0FBVzthQUNaLENBQUMsQ0FBQztZQUNILElBQUksZ0JBQWdCLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QyxJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDL0QsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsZ0JBQWdCLENBQ2QsV0FBVyxFQUNYLFdBQVcsRUFDWDtvQkFDRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLE1BQU0sRUFBRSxhQUFhO29CQUNyQixJQUFJLEVBQUUsRUFBRTtpQkFDVCxFQUNELEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQ2pDLENBQUM7Z0JBQ0YsTUFBTSx1QkFBdUIsR0FBd0I7b0JBQ25ELE1BQU0sRUFBRSxXQUFXO29CQUNuQixPQUFPLEVBQUUsV0FBVztpQkFDckIsQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNWLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLElBQUksRUFBRSxFQUFFO29CQUNSLFlBQVksRUFBRSx1QkFBdUI7aUJBQ3RDLENBQUMsQ0FBQztnQkFDSCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFHRCxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMvQixRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsU0FBUyxDQUFDO1lBQ1IsSUFBSSxFQUFFLFVBQVU7WUFDaEIsTUFBTSxFQUFFLE1BQU07WUFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLEVBQUUsZUFBZTtZQUN6QixTQUFTLEVBQUUsb0JBQW9CLENBQUMsU0FBUyxDQUFDO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FDRixDQUFDO0lBR0YsU0FBUyxzQkFBc0IsQ0FBQyxNQUFxQjtRQUtuRCxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ25ELElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUEyQixjQUFjLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixnQkFBZ0IsR0FBRyxZQUFZLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsTUFBTSxFQUFFLGdCQUFnQjtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUdELE1BQU0sT0FBTyxHQUdQO1FBQ0osT0FBTztRQUNQLEdBQUc7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN0QixDQUFDO1FBQ0QsV0FBVyxDQUFDLE1BQU07WUFDaEIsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLEdBQUcsT0FBTyxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTthQUM5QixDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNO1lBQ1osTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLEdBQUcsT0FBTyxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTthQUM5QixDQUFDLENBQUM7WUFDSCxNQUFNLGdCQUFnQixHQUEyQjtnQkFDL0MsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07Z0JBQ3pCLElBQUksRUFBRSxFQUFFO2FBQ1QsQ0FBQztZQUNGLElBQUksZUFNUyxDQUFDO1lBQ2QsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLGVBQWUsR0FBRztvQkFDaEIsSUFBSSxFQUFFLENBQUMsS0FBa0IsRUFBRSxFQUFFO3dCQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUM7b0JBQ0QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO29CQUN6QixRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQixDQUFDO1lBQ0osQ0FBQztZQUNELFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxTQUFTLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ1osTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBRWxCLFNBQVMsZUFBZTtnQkFDdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUNELFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQU87WUFDN0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO1lBQzdCLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQztZQUM5QixJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzdDLENBQUM7WUFFRCxJQUFJLFVBQWUsQ0FBQztZQUNwQixNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQ25ELEdBQUcsT0FBTyxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxjQUFjO2FBQ3pCLENBQUMsQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUt6QyxDQUFDO1lBQ2QsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQ3JDLENBQUM7WUFDRCxVQUFVLEtBQUssT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBRXpDLE1BQU0sZUFBZSxHQUFHLFVBQWlELENBQUM7WUFDMUUsTUFBTSxTQUFTLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQztZQUNyQyxNQUFNLGlCQUFpQixHQUNyQixlQUFlLElBQUksSUFBSTtnQkFDdkIsU0FBUztnQkFDVCxLQUFLLElBQUksSUFBSTtnQkFDYixnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixJQUFJLFlBQVksR0FBRyxlQUFlLENBQUM7WUFDbkMsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztvQkFDdEIsWUFBWSxHQUFHLEtBQWdDLENBQUM7Z0JBQ2xELENBQUM7cUJBQU0sQ0FBQztvQkFDTixZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDakMsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLGFBQWtELENBQUM7WUFDdkQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQWdDLENBQUM7WUFDM0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsR0FBRyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUUxQixDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQztnQkFDakMsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLEtBQUssRUFBRSxhQUFhO2dCQUNwQixXQUFXLEVBQUUsVUFBVTthQUN4QixDQUFDLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBMkIsY0FBYyxDQUFDO1lBQ3RELE1BQU0sWUFBWSxHQUF3QjtnQkFDeEMsTUFBTTtnQkFDTixPQUFPLEVBQUUsY0FBYzthQUN4QixDQUFDO1lBRUYsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO29CQUMvQyxPQUFPLEVBQUUsY0FBYztpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ1YsR0FBRyxXQUFXO29CQUNkLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO29CQUM1QyxPQUFPLEVBQUUsY0FBYztpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsR0FBRyxXQUFXO29CQUNkLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxXQUFXLENBQUMsSUFBSTtZQUNkLElBQUksQ0FBQztnQkFDSCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUM7Z0JBQzNCLEtBQUssTUFBTSxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkQsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNoQyxPQUFPLGFBQWEsQ0FBQyxRQUFlLENBQUM7b0JBQ3ZDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDO0tBQ0YsQ0FBQztJQUdGLFNBQVMsT0FBTztRQUNkLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUdELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkUm91dGVzIH0gZnJvbSAnLi4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCcm93c2VySGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFJvdXRlLCBwcmVwYXJlTWF0Y2ggfSBmcm9tICcuLi90b29scy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJhd1F1ZXJ5IH0gZnJvbSAnLi4vdG9vbHMvcXVlcnkuanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZUZpbHRlcnMgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuaW1wb3J0IHtcbiAgdHlwZSBSb3V0ZUVudHJ5LFxuICB0eXBlIFJvdXRpbmdDb250ZXh0VHlwZSxcbiAgdHlwZSBTdWJzY3JpYmVDYWxsYmFjayxcbiAgdHlwZSBBbnlSb3V0ZSxcbiAgdHlwZSBQcmVwYXJlZEFjY2VzcyxcbiAgdHlwZSBOYXZpZ2F0ZU92ZXJsb2FkcyxcbiAgdHlwZSBQcmVsb2FkVGFyZ2V0LFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVJbnN0cnVtZW50YXRpb25SZWdpc3RyeSxcbiAgdHlwZSBJbnN0cnVtZW50YXRpb25BUEksXG4gIHR5cGUgUm91dGVyRW50cnlTbmFwc2hvdCxcbiAgdHlwZSBSb3V0ZXJMb2NhdGlvblNuYXBzaG90LFxuICB0eXBlIFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gIHR5cGUgUm91dGVyRXZlbnQsXG59IGZyb20gJy4uL2luc3RydW1lbnRhdGlvbi9JbnN0cnVtZW50YXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBIaXN0b3J5RGVidWdDb250ZXh0IH0gZnJvbSAnLi4vaGlzdG9yeS90eXBlcy5qcyc7XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSBjcmVhdGVSb3V0ZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlclJldHVybjxSIGV4dGVuZHMgQW55Um91dGVbXT4gPSB7XG4gIC8qKiBGdW5jdGlvbiB0byBjbGVhbiB1cCByb3V0ZXIgbGlzdGVuZXJzIGFuZCByZXNvdXJjZXMgKi9cbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgLyoqIFJvdXRlciBjb250ZXh0IG9iamVjdCBmb3IgdGhlIFJlYWN0IENvbnRleHQgUHJvdmlkZXIgKi9cbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT4gJiBQcmVwYXJlZEFjY2VzczxSPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIHJvdXRlciBzeXN0ZW0gZnJvbSByb3V0ZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIHJvdXRlciBpcyBidWlsdCBmcm9tIHRoZSBzYW1lIHByaW1pdGl2ZXMgYXMgcmVhY3Qtcm91dGVyIGJ1dCB3aXRoIGFkZGl0aW9uYWxcbiAqIGZlYXR1cmVzIGZvciBkYXRhIHByZWxvYWRpbmcgYW5kIGNvZGUgc3BsaXR0aW5nLiBFYWNoIHJvdXRlIGNhbiBjb250YWluIGJvdGggYVxuICogQ29tcG9uZW50IGFuZCBhIHByZXBhcmUoKSBmdW5jdGlvbiB0aGF0IGNhbiBwcmVsb2FkIGRhdGEgZm9yIHRoZSBjb21wb25lbnQuXG4gKlxuICogVGhlIHJvdXRlciB3YXRjaGVzIGZvciBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIHZpYSB0aGUgSFRNTDUgSGlzdG9yeSBBUEksXG4gKiBtYXBzIHRoZSBsb2NhdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyByb3V0ZSBlbnRyeSwgYW5kIHRoZW4gcHJlbG9hZHMgdGhlIGNvZGVcbiAqIGFuZCBkYXRhIGZvciB0aGUgcm91dGUgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gQXJyYXkgb2Ygcm91dGUgY29uZmlndXJhdGlvbnNcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHRoZSByb3V0ZXIgY29udGV4dCBhbmQgY2xlYW51cCBmdW5jdGlvblxuICpcbiAgcHJlcGFyZWRNYXRjaDogcHJlcGFyZU1hdGNoKHJvdXRlLCBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSksXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnL3VzZXJzLzppZCcsXG4gKiAgICAgcmVzb3VyY2VQYWdlOiBnZXRSZXNvdXJjZVBhZ2UoJ1VzZXJQcm9maWxlJywgKCkgPT4gaW1wb3J0KCcuL1VzZXJQcm9maWxlJykpLFxuICogICAgIHByZXBhcmU6ICh7IHZhcmlhYmxlcyB9KSA9PiAoeyB1c2VySWQ6IHZhcmlhYmxlcy5pZCB9KVxuICogICB9XG4gKiBdO1xuICpcbiAqIGNvbnN0IHsgY29udGV4dCwgY2xlYW51cCB9ID0gY3JlYXRlUm91dGVyKHJvdXRlcyk7XG4gKlxuICogLy8gVXNlIGluIFJlYWN0IGFwcFxuICogPFJvdXRpbmdDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAqICAgPFJvdXRlclJlbmRlcmVyIC8+XG4gKiA8L1JvdXRpbmdDb250ZXh0LlByb3ZpZGVyPlxuICogYGBgXG4gKi9cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyICh0eXBlZCBvdmVybG9hZCkuIFdoZW4gY2FsbGVkIHdpdGggYSBjb25zdCB0dXBsZSBvZiByb3V0ZXMsIGdlbmVyaWNzIGFyZSBwcmVzZXJ2ZWQuXG4gKi9cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgYGNyZWF0ZVJvdXRlcmAuXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlck9wdGlvbnMgPSB7XG4gIC8qKiBJbnN0cnVtZW50YXRpb25zIHRvIGF0dGFjaCB0byB0aGUgcm91dGVyIChEZXZUb29scyBicmlkZ2UsIGxvZ2dlciwgLi4uKS4gKi9cbiAgaW5zdHJ1bWVudGF0aW9ucz86IEluc3RydW1lbnRhdGlvbkFQSVtdO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcm91dGVyIGluc3RhbmNlIGZyb20gYSByb3V0ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBSb3V0ZSBkZWZpbml0aW9ucyB0byByZWdpc3Rlci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgaW5zdHJ1bWVudGF0aW9uIHNldHRpbmdzIHVzZWQgZm9yIGV4cG9zaW5nIGRldmVsb3BtZW50IHRvb2xpbmcuXG4gKiBAcGFyYW0gb3B0aW9ucy5pbnN0cnVtZW50YXRpb25zIC0gSW5zdHJ1bWVudGF0aW9ucyBpbnZva2VkIG9uIHJvdXRlciBldmVudHMgKGRldmVsb3BtZW50IG9ubHkpLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXI8UiBleHRlbmRzIEFueVJvdXRlW10+KFxuICByb3V0ZXM6IFsuLi5SXSB8IEFueVJvdXRlW10sXG4gIG9wdGlvbnM6IENyZWF0ZVJvdXRlck9wdGlvbnMgPSB7fSxcbik6IENyZWF0ZVJvdXRlclJldHVybjxSIGV4dGVuZHMgQW55Um91dGVbXSA/IFIgOiBBbnlSb3V0ZVtdPiB7XG4gIC8vIEluaXRpYWxpemUgYnJvd3NlciBoaXN0b3J5IG1hbmFnZXJcbiAgY29uc3QgaGlzdG9yeSA9IG5ldyBCcm93c2VySGlzdG9yeSgpO1xuXG4gIGNvbnN0IHJlZ2lzdHJ5ID0gY3JlYXRlSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnkoXG4gICAgb3B0aW9ucy5pbnN0cnVtZW50YXRpb25zID8/IFtdLFxuICApO1xuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3ROYXZpZ2F0aW9uT3JpZ2luOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ2V4dGVybmFsJztcbiAgbGV0IGxhc3RQcmVsb2FkU2lnbmF0dXJlOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdGltZXN0YW1wOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ29udmVydHMgYSBwYXJ0aWFsIGxvY2F0aW9uIG9iamVjdCBpbnRvIGEgZnVsbCBsb2NhdGlvbiBzdHJ1Y3R1cmUgd2l0aCBzdHJpbmcgZmllbGRzLlxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb246IHtcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBoYXNoPzogc3RyaW5nO1xuICB9KTogeyBwYXRobmFtZTogc3RyaW5nOyBzZWFyY2g6IHN0cmluZzsgaGFzaDogc3RyaW5nIH0ge1xuICAgIGxldCBwYXRobmFtZVZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5wYXRobmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhdGhuYW1lVmFsdWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgbGV0IHNlYXJjaFZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5zZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZWFyY2hWYWx1ZSA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgICB9XG4gICAgbGV0IGhhc2hWYWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24uaGFzaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhc2hWYWx1ZSA9IGxvY2F0aW9uLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRobmFtZTogcGF0aG5hbWVWYWx1ZSxcbiAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWUsXG4gICAgICBoYXNoOiBoYXNoVmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIHJvdXRlciBldmVudCB0byBldmVyeSByZWdpc3RlcmVkIGluc3RydW1lbnRhdGlvbi4gKi9cbiAgZnVuY3Rpb24gZW1pdEV2ZW50KGV2ZW50OiBSb3V0ZXJFdmVudCk6IHZvaWQge1xuICAgIHJlZ2lzdHJ5LmVtaXRFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gY29lcmNlIGFuIGFyYml0cmFyeSBzdHJpbmcgaW50byBhIGtub3duIG5hdmlnYXRpb24gc291cmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwT3JpZ2luKHJhdz86IHN0cmluZyk6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIGlmIChyYXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoIChyYXcpIHtcbiAgICAgIGNhc2UgJ2xpbmstY2xpY2snOlxuICAgICAgY2FzZSAnbGluay1ob3Zlcic6XG4gICAgICBjYXNlICdwcm9ncmFtbWF0aWMnOlxuICAgICAgY2FzZSAncG9wc3RhdGUtYmFjayc6XG4gICAgICBjYXNlICdwb3BzdGF0ZS1mb3J3YXJkJzpcbiAgICAgIGNhc2UgJ3BvcHN0YXRlLXVua25vd24nOlxuICAgICAgY2FzZSAnZXh0ZXJuYWwnOlxuICAgICAgY2FzZSAnbm9ybWFsaXplJzpcbiAgICAgIGNhc2UgJ3ByZWxvYWQtaG92ZXInOlxuICAgICAgICByZXR1cm4gcmF3O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBGSUxURVJfT1BFUkFUT1JTID0gbmV3IFNldChbXG4gICAgJ2d0JyxcbiAgICAnZ3RlJyxcbiAgICAnbHQnLFxuICAgICdsdGUnLFxuICAgICdlcScsXG4gICAgJ25lcScsXG4gICAgJ2NvbnRhaW5zJyxcbiAgICAnc3cnLFxuICAgICdldycsXG4gICAgJ2JldHdlZW4nLFxuICAgICdpbicsXG4gICAgJ25pbicsXG4gIF0pO1xuXG4gIC8qKiBIZXVyaXN0aWM6IGRldGVjdCBmaWx0ZXItbGlrZSBvYmplY3RzIHRvIHByZXNlcnZlIGxlZ2FjeSBuYXZpZ2F0ZShxdWVyeSkgYmVoYXZpb3IuICovXG4gIGZ1bmN0aW9uIGxvb2tzTGlrZUZpbHRlcnModmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZCA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBPYmplY3QudmFsdWVzKHJlY29yZCkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGRWYWx1ZSAhPSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBmaWVsZFZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShmaWVsZFZhbHVlKVxuICAgICAgKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICAgICAgaWYgKEZJTFRFUl9PUEVSQVRPUlMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBvcmlnaW4gZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gZXZlbnQuXG4gICAqL1xuICAvKiogUmVzb2x2ZXMgdGhlIG5hdmlnYXRpb24gc291cmNlIGNvbWJpbmluZyBoaXN0b3J5IGNvbnRleHQgYW5kIHBlbmRpbmcgaW50ZW50LiAqL1xuICBmdW5jdGlvbiByZXNvbHZlTmF2aWdhdGlvbk9yaWdpbihcbiAgICBjb250ZXh0PzogSGlzdG9yeURlYnVnQ29udGV4dCB8IG51bGwsXG4gICk6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2Uge1xuICAgIGNvbnN0IGZhbGxiYWNrT3JpZ2luID0gcGVuZGluZ05hdmlnYXRpb25PcmlnaW47XG4gICAgbGV0IG9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbnRleHRPcmlnaW4gPSBjb250ZXh0Py5vcmlnaW47XG4gICAgaWYgKGNvbnRleHRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3JpZ2luID0gbWFwT3JpZ2luKGNvbnRleHRPcmlnaW4pO1xuICAgIH1cblxuICAgIG9yaWdpbiA/Pz0gZmFsbGJhY2tPcmlnaW47XG4gICAgb3JpZ2luID8/PSAnZXh0ZXJuYWwnO1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBvcmlnaW47XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGlubmVyLW1vc3QgbWF0Y2hlZCByb3V0ZSBwYXRoIGZyb20gYSByb3V0ZSBlbnRyeSB3aGVuIGF2YWlsYWJsZS5cbiAgICovXG4gIC8qKiBSZXR1cm5zIHRoZSBkZWVwZXN0IG1hdGNoZWQgcm91dGUgcGF0aCBmcm9tIGEgcm91dGUgZW50cnkgaWYgYXZhaWxhYmxlLiAqL1xuICBmdW5jdGlvbiByZWFkTWF0Y2hlZFJvdXRlUGF0aChcbiAgICBlbnRyeTogUm91dGVFbnRyeTxhbnk+IHwgdW5kZWZpbmVkLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChlbnRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVkUm91dGUgPSBlbnRyeS5yb3V0ZTtcbiAgICBpZiAobWF0Y2hlZFJvdXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IG1hdGNoZWRSb3V0ZS5yb3V0ZS5yb3V0ZXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRSb3V0ZXMpKSB7XG4gICAgICBjb25zdCBsYXN0Q2hpbGQgPSBjaGlsZFJvdXRlcy5hdCgtMSk7XG4gICAgICBpZiAobGFzdENoaWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkUmVjb3JkID0gbGFzdENoaWxkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBsYXN0Q2hpbGRSZWNvcmQucGF0aDtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZFBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkUGF0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByb290UGF0aCA9IG1hdGNoZWRSb3V0ZS5yb3V0ZS5wYXRoO1xuICAgIGlmICh0eXBlb2Ygcm9vdFBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcm9vdFBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQnVpbGRzIGEgc25hcHNob3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgcm91dGVyIGVudHJ5LiAqL1xuICBmdW5jdGlvbiBidWlsZEVudHJ5U25hcHNob3QoZW50cnk6IFJvdXRlRW50cnk8YW55Pik6IFJvdXRlckVudHJ5U25hcHNob3Qge1xuICAgIHJldHVybiB7XG4gICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oZW50cnkubG9jYXRpb24pLFxuICAgICAgcm91dGVQYXRoOiByZWFkTWF0Y2hlZFJvdXRlUGF0aChlbnRyeSksXG4gICAgICBwcmVwYXJlZE1hdGNoOiBlbnRyeS5wcmVwYXJlZE1hdGNoLFxuICAgICAgZmlsdGVyczogZW50cnkuZmlsdGVycyxcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzOiBlbnRyeS5maWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBlbnRyeS5hY3RpdmVRdWVyeVNjaGVtYSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIE5vdGlmaWVzIGluc3RydW1lbnRhdGlvbnMgb2YgYSBuZXcgYWN0aXZlIGVudHJ5LiAqL1xuICBmdW5jdGlvbiBub3RpZnlFbnRyeShlbnRyeTogUm91dGVFbnRyeTxhbnk+KTogdm9pZCB7XG4gICAgcmVnaXN0cnkubm90aWZ5RW50cnlDaGFuZ2UoYnVpbGRFbnRyeVNuYXBzaG90KGVudHJ5KSk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhIGRlZHVwbGljYXRpb24ga2V5IGZvciBwcmVsb2FkIGV2ZW50cy4gKi9cbiAgZnVuY3Rpb24gYnVpbGRQcmVsb2FkS2V5KG1vZGU6ICdjb2RlJyB8ICdmdWxsJywgcGF0aG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke21vZGV9OiR7cGF0aG5hbWV9YDtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIHByZWxvYWQgb3IgcHJlbG9hZC1jb2RlIGluc3RydW1lbnRhdGlvbiBldmVudC4gKi9cbiAgZnVuY3Rpb24gZW1pdFByZWxvYWRFdmVudChcbiAgICBtb2RlOiAnY29kZScgfCAnZnVsbCcsXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRQcmVsb2FkS2V5KG1vZGUsIHBhdGhuYW1lKTtcbiAgICBjb25zdCByZWNlbnRseVJlY29yZGVkID1cbiAgICAgIGxhc3RQcmVsb2FkU2lnbmF0dXJlICE9PSBudWxsICYmXG4gICAgICBsYXN0UHJlbG9hZFNpZ25hdHVyZS5rZXkgPT09IGtleSAmJlxuICAgICAgbm93IC0gbGFzdFByZWxvYWRTaWduYXR1cmUudGltZXN0YW1wIDwgNTA7XG5cbiAgICBpZiAoIXJlY2VudGx5UmVjb3JkZWQpIHtcbiAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdwcmVsb2FkJyxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB0aW1lc3RhbXA6IG5vdyxcbiAgICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24pLFxuICAgICAgICB0YXJnZXRQYXRobmFtZTogcGF0aG5hbWUsXG4gICAgICAgIG1vZGUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsYXN0UHJlbG9hZFNpZ25hdHVyZSA9IHsga2V5LCB0aW1lc3RhbXA6IG5vdyB9O1xuICB9XG5cbiAgLyoqIEVtaXRzIGEgaGlzdG9yeSBtdXRhdGlvbiBldmVudCAocHVzaC9yZXBsYWNlL25vcm1hbGl6ZSkuICovXG4gIGZ1bmN0aW9uIGVtaXRIaXN0b3J5RXZlbnQoXG4gICAgYWN0aW9uOiAncHVzaCcgfCAncmVwbGFjZScgfCAnbm9ybWFsaXplJyxcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICAgbG9jYXRpb246IHsgcGF0aG5hbWU6IHN0cmluZzsgc2VhcmNoPzogc3RyaW5nOyBoYXNoPzogc3RyaW5nIH0sXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbiA9IHNvdXJjZTtcbiAgICBlbWl0RXZlbnQoe1xuICAgICAga2luZDogJ2hpc3RvcnknLFxuICAgICAgc291cmNlLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uKSxcbiAgICAgIGRldGFpbHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyBCdWlsZCBhIGZsYXQgbGlzdCBvZiByb3V0ZXMgZm9yIGVmZmljaWVudCBtYXRjaGluZ1xuICBjb25zdCBmbGF0Um91dGVzID0gYnVpbGRSb3V0ZXMocm91dGVzKTtcblxuICAvLyBGaW5kIHRoZSBpbml0aWFsIHJvdXRlIG1hdGNoIGFuZCBwcmVwYXJlIGl0IGZvciByZW5kZXJpbmdcbiAgY29uc3Qgcm91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgaGlzdG9yeS5sb2NhdGlvbik7XG4gIGNvbnN0IGluaXRpYWxSYXdRdWVyeSA9IHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpO1xuICAvLyBEaXJlY3Qgc2NoZW1hOiBvbmx5IHRoZSBtYXRjaGVkIHJvdXRlJ3Mgb3duIHF1ZXJ5U2NoZW1hIChubyBoaWVyYXJjaGljYWwgZGlzY292ZXJ5KVxuICBsZXQgaW5pdGlhbFVuaWZpZWRTY2hlbWE6IGFueTtcbiAgaWYgKHJvdXRlICE9IG51bGwpIHtcbiAgICBjb25zdCBsYXN0ID0gcm91dGUucm91dGUucm91dGVzLmF0KC0xKSBhcyB1bmtub3duIGFzIHtcbiAgICAgIHF1ZXJ5U2NoZW1hPzogdW5rbm93bjtcbiAgICB9IHwgbnVsbDtcbiAgICBpZiAobGFzdCAhPSBudWxsKSB7XG4gICAgICBpbml0aWFsVW5pZmllZFNjaGVtYSA9IGxhc3QucXVlcnlTY2hlbWE7XG4gICAgfVxuICB9XG4gIGxldCBpbml0aWFsRmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGxldCBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3M6IGFueVtdIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5pdGlhbFVuaWZpZWRTY2hlbWEgIT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRmlsdGVycyhoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCwgaW5pdGlhbFVuaWZpZWRTY2hlbWEpO1xuICAgIGluaXRpYWxGaWx0ZXJzID0gcGFyc2VkLmZpbHRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3MgPSBwYXJzZWQuZGlhZ25vc3RpY3MgYXMgdW5rbm93bltdO1xuICB9XG4gIGNvbnN0IGluaXRpYWxMb2NhdGlvblNuYXBzaG90ID0gbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbik7XG4gIGxldCBpbml0aWFsSW5zdHJ1bWVudGF0aW9uOlxuICAgIHwge1xuICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGluaXRpYWxJbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgIGVtaXRFdmVudChldmVudCk7XG4gICAgICB9LFxuICAgICAgc291cmNlOiBsYXN0TmF2aWdhdGlvbk9yaWdpbixcbiAgICAgIGxvY2F0aW9uOiBpbml0aWFsTG9jYXRpb25TbmFwc2hvdCxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgcm91dGUsXG4gICAgaW5pdGlhbEZpbHRlcnMsXG4gICAgaW5pdGlhbEluc3RydW1lbnRhdGlvbixcbiAgKTtcbiAgLy8gSGVscGVyIHRvIGJ1aWxkIHRoZSByYXcgcXVlcnkgb2JqZWN0IGZyb20gYSBzZWFyY2ggc3RyaW5nXG4gIGxldCBjdXJyZW50RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICBmb3JjZVJlcmVuZGVyOiBmYWxzZSxcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvbixcbiAgICByb3V0ZSxcbiAgICBwcmVwYXJlZE1hdGNoLFxuICAgIHJhd1NlYXJjaDogaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsXG4gICAgcXVlcnk6IGluaXRpYWxSYXdRdWVyeSxcbiAgICAvLyB0eXBlZFF1ZXJ5IHJlbW92ZWQgKHVuaWZpZWQgaW50byBmaWx0ZXJzL3F1ZXJ5KVxuICAgIGZpbHRlcnM6IGluaXRpYWxGaWx0ZXJzLFxuICAgIGZpbHRlckRpYWdub3N0aWNzOiBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgYWN0aXZlUXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICB9O1xuXG4gIC8vIEluaXRpYWwgbm9ybWFsaXphdGlvbiBwYXNzIChlLmcuLCBjbGFtcCBwYWdlKVxuICBjb25zdCBpbml0VHlwZWQgPSBjdXJyZW50RW50cnkuZmlsdGVycyBhcyB1bmtub3duIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdFBhZ2VOdW1lcmljOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGlmIChpbml0VHlwZWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHJhd1BhZ2UgPSBpbml0VHlwZWQucGFnZTtcbiAgICBpZiAodHlwZW9mIHJhd1BhZ2UgPT09ICdudW1iZXInKSBpbml0UGFnZU51bWVyaWMgPSByYXdQYWdlO1xuICAgIGVsc2UgaWYgKFxuICAgICAgcmF3UGFnZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgcmF3UGFnZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHJhd1BhZ2UpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3UGFnZSwgJ2VxJykgJiZcbiAgICAgIHR5cGVvZiAocmF3UGFnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXEgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpbml0UGFnZU51bWVyaWMgPSAocmF3UGFnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXEgYXMgbnVtYmVyO1xuICAgIH1cbiAgfVxuICBpZiAoXG4gICAgdHlwZW9mIGluaXRQYWdlTnVtZXJpYyA9PT0gJ251bWJlcicgJiZcbiAgICBpbml0UGFnZU51bWVyaWMgPCAxICYmXG4gICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgIT0gbnVsbCAmJlxuICAgIGluaXRUeXBlZCAhPSBudWxsXG4gICkge1xuICAgIGNvbnN0IG5vcm0gPSB7IC4uLmluaXRUeXBlZCwgcGFnZTogeyBlcTogMSB9IH0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY3VycmVudEVudHJ5LmZpbHRlcnMgPSBub3JtOyAvLyBpbW1lZGlhdGUgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgIGZpbHRlcnM6IG5vcm0sXG4gICAgICBxdWVyeTogaW5pdGlhbFJhd1F1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgZW1pdEhpc3RvcnlFdmVudChcbiAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB7IHJlYXNvbjogJ2luaXRpYWwtcGFnZS1jbGFtcCcgfSxcbiAgICAgICk7XG4gICAgICBjb25zdCBub3JtYWxpemVEZWJ1Z0NvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgIG9yaWdpbjogJ25vcm1hbGl6ZScsXG4gICAgICAgIHRyaWdnZXI6ICdub3JtYWxpemUnLFxuICAgICAgfTtcbiAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGRlYnVnQ29udGV4dDogbm9ybWFsaXplRGVidWdDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICAvLyBVcGRhdGUgY3VycmVudEVudHJ5LmxvY2F0aW9uIHRvIHJlZmxlY3QgbmV3IHNlYXJjaCBkaXJlY3RseSAoaGlzdG9yeS5zZXQgdHJpZ2dlcnMgYXN5bmMgc3Vic2NyaWJlcilcbiAgICAgIGN1cnJlbnRFbnRyeSA9IHtcbiAgICAgICAgLi4uY3VycmVudEVudHJ5LFxuICAgICAgICBsb2NhdGlvbjogeyAuLi5jdXJyZW50RW50cnkubG9jYXRpb24sIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCB9LFxuICAgICAgICByYXdTZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeUVudHJ5KGN1cnJlbnRFbnRyeSk7XG4gIGVtaXRFdmVudCh7XG4gICAga2luZDogJ3NuYXBzaG90JyxcbiAgICBzb3VyY2U6IGxhc3ROYXZpZ2F0aW9uT3JpZ2luLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oY3VycmVudEVudHJ5LmxvY2F0aW9uKSxcbiAgICByb3V0ZVBhdGg6IHJlYWRNYXRjaGVkUm91dGVQYXRoKGN1cnJlbnRFbnRyeSksXG4gIH0pO1xuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxudW1iZXIsIFN1YnNjcmliZUNhbGxiYWNrPGFueT4+KCk7XG5cbiAgLy8gTGlzdGVuIGZvciBsb2NhdGlvbiBjaGFuZ2VzLCBtYXRjaCB0byB0aGUgcm91dGUgZW50cnksIHByZXBhcmUgdGhlIGVudHJ5LFxuICAvLyBhbmQgbm90aWZ5IHN1YnNjcmliZXJzLiBUaGlzIHBhdHRlcm4gZW5zdXJlcyB0aGF0IGRhdGEtbG9hZGluZ1xuICAvLyBvY2N1cnMgKm91dHNpZGUqIG9mIC0gYW5kICpiZWZvcmUqIC0gcmVuZGVyaW5nLlxuICBjb25zdCBkaXNwb3NlSGlzdG9yeSA9IGhpc3Rvcnkuc3Vic2NyaWJlKFxuICAgIChsb2NhdGlvbiwgZm9yY2VSZXJlbmRlciwgZGVidWdDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW4gPSByZXNvbHZlTmF2aWdhdGlvbk9yaWdpbihkZWJ1Z0NvbnRleHQpO1xuICAgICAgbGFzdE5hdmlnYXRpb25PcmlnaW4gPSBvcmlnaW47XG4gICAgICBjb25zdCBsb2NhdGlvblBheWxvYWQgPSBub3JtYWxpemVMb2NhdGlvbihsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGRlYnVnQ29udGV4dE9yaWdpbiA9IGRlYnVnQ29udGV4dD8ub3JpZ2luO1xuICAgICAgaWYgKGRlYnVnQ29udGV4dE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBoaXN0b3J5RGV0YWlsczogeyBoaXN0b3J5SW5kZXg6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodHlwZW9mIGRlYnVnQ29udGV4dD8uaGlzdG9yeUluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGhpc3RvcnlEZXRhaWxzID0geyBoaXN0b3J5SW5kZXg6IGRlYnVnQ29udGV4dC5oaXN0b3J5SW5kZXggfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1iYWNrJyB8fFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWZvcndhcmQnIHx8XG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtdW5rbm93bicgfHxcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdleHRlcm5hbCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGRpcmVjdGlvbjogJ2JhY2snIHwgJ2ZvcndhcmQnIHwgJ3Vua25vd24nID0gJ3Vua25vd24nO1xuICAgICAgICAgIGlmIChkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1iYWNrJykge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2JhY2snO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtZm9yd2FyZCcpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdmb3J3YXJkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgZW1pdEV2ZW50KHtcbiAgICAgICAgICAgIGtpbmQ6ICdwb3BzdGF0ZScsXG4gICAgICAgICAgICBzb3VyY2U6IG9yaWdpbixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblBheWxvYWQsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICBkZXRhaWxzOiBoaXN0b3J5RGV0YWlscyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzYW1lUGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSA9PT0gY3VycmVudEVudHJ5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgY29uc3Qgc2FtZVNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCA9PT0gY3VycmVudEVudHJ5LnJhd1NlYXJjaDtcblxuICAgICAgaWYgKCFmb3JjZVJlcmVuZGVyICYmIHNhbWVQYXRobmFtZSAmJiBzYW1lU2VhcmNoKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgY2hhbmdlZCB0aGF0IHdlIGNhcmUgYWJvdXRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCB3ZSBzdGlsbCB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlLlxuICAgICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgICAgbGV0IG5leHRSb3V0ZSA9IGN1cnJlbnRFbnRyeS5yb3V0ZTtcblxuICAgICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGxvY2F0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgcmF3IHF1ZXJ5IG9iamVjdCAoYmFzaWMgYWdncmVnYXRpb24pIGZyb20gbG9jYXRpb24uc2VhcmNoXG4gICAgICBjb25zdCBxdWVyeSA9IHBhcnNlUmF3UXVlcnkobG9jYXRpb24uc2VhcmNoKTtcbiAgICAgIC8vIERldGVybWluZSBzY2hlbWEgZnJvbSBkZWVwZXN0IG1hdGNoZWQgcm91dGVcbiAgICAgIGxldCBxdWVyeVNjaGVtYTogYW55O1xuICAgICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBuZXh0Um91dGUucm91dGUucm91dGVzLmF0KC0xKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgICAgIH0gfCBudWxsO1xuICAgICAgICBpZiAobGFzdCAhPSBudWxsKSB7XG4gICAgICAgICAgcXVlcnlTY2hlbWEgPSBsYXN0LnF1ZXJ5U2NoZW1hO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBQYXJzZSB1bmlmaWVkIGZpbHRlcnNcbiAgICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBmaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAocXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJzZWRGID0gcGFyc2VGaWx0ZXJzKGxvY2F0aW9uLnNlYXJjaCwgcXVlcnlTY2hlbWEpO1xuICAgICAgICBmaWx0ZXJzID0gcGFyc2VkRi5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkRi5kaWFnbm9zdGljcyBhcyB1bmtub3duW107XG4gICAgICB9XG4gICAgICAvLyBOb3JtYWxpemF0aW9uOiBjbGFtcCBwYWdlID49IDEgaWYgbnVtZXJpYyBwYWdlIHByZXNlbnRcbiAgICAgIGxldCBub3JtYWxpemVkID0gZmFsc2U7XG4gICAgICBsZXQgcGc6IHVua25vd247XG4gICAgICBpZiAoZmlsdGVycyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gZmlsdGVycztcbiAgICAgICAgY29uc3QgbWF5YmUgPSBmLnBhZ2U7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtYXliZSAhPSBudWxsICYmXG4gICAgICAgICAgdHlwZW9mIG1heWJlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KG1heWJlKSAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtYXliZSwgJ2VxJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgcGcgPSAobWF5YmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBnID0gbWF5YmU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcGcgPT09ICdudW1iZXInICYmIHBnIDwgMSkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IHsgLi4uKGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PiksIHBhZ2U6IHsgZXE6IDEgfSB9O1xuICAgICAgICBmaWx0ZXJzID0gY2xvbmU7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCAoc2FtZSBwYXRobmFtZSkgd2Ugc3RpbGwgbmVlZCB0byByZS1ydW4gcHJlcGFyZVxuICAgICAgaWYgKCFzYW1lUGF0aG5hbWUgfHwgIXNhbWVTZWFyY2gpIHtcbiAgICAgICAgbGV0IHVwZGF0ZUluc3RydW1lbnRhdGlvbjpcbiAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgICAgICAgICAgICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSW5zdHJ1bWVudGF0aW9uID0ge1xuICAgICAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvdXJjZTogb3JpZ2luLFxuICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uUGF5bG9hZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG5leHRQcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKFxuICAgICAgICAgIG5leHRSb3V0ZSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgdXBkYXRlSW5zdHJ1bWVudGF0aW9uLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICAgICAgZm9yY2VSZXJlbmRlcjogZm9yY2VSZXJlbmRlciB8fCAoc2FtZVBhdGhuYW1lICYmICFzYW1lU2VhcmNoKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJvdXRlOiBuZXh0Um91dGUsXG4gICAgICAgIHByZXBhcmVkTWF0Y2g6IG5leHRQcmVwYXJlZE1hdGNoLFxuICAgICAgICByYXdTZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGZpbHRlckRpYWdub3N0aWNzLFxuICAgICAgICBhY3RpdmVRdWVyeVNjaGVtYTogcXVlcnlTY2hlbWEsXG4gICAgICB9O1xuXG4gICAgICAvLyBJZiBub3JtYWxpemF0aW9uIGNoYW5nZWQgdGhlIHR5cGVkIHF1ZXJ5IHdlIHRyaWdnZXIgYSByZXBsYWNlIHdpdGggbm9ybWFsaXplZCBzZWFyY2hcbiAgICAgIGlmIChub3JtYWxpemVkICYmIHF1ZXJ5U2NoZW1hICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgIHF1ZXJ5U2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICAgIGxldCBuZXh0U2VhcmNoU3RyID0gbm9ybWFsaXplZFNlYXJjaDtcbiAgICAgICAgICBpZiAoIW5leHRTZWFyY2hTdHIuc3RhcnRzV2l0aCgnPycpICYmIG5leHRTZWFyY2hTdHIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbmV4dFNlYXJjaFN0ciA9IGA/JHtuZXh0U2VhcmNoU3RyfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVtaXRIaXN0b3J5RXZlbnQoXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICAgIHNlYXJjaDogbmV4dFNlYXJjaFN0cixcbiAgICAgICAgICAgICAgaGFzaDogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyByZWFzb246ICdydW50aW1lLXBhZ2UtY2xhbXAnIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBydW50aW1lTm9ybWFsaXplQ29udGV4dDogSGlzdG9yeURlYnVnQ29udGV4dCA9IHtcbiAgICAgICAgICAgIG9yaWdpbjogJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICB0cmlnZ2VyOiAnbm9ybWFsaXplJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIHNlYXJjaDogbmV4dFNlYXJjaFN0cixcbiAgICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICAgICAgZGVidWdDb250ZXh0OiBydW50aW1lTm9ybWFsaXplQ29udGV4dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47IC8vIGVhcmx5OiBzdWJzZXF1ZW50IHNldCB3aWxsIHRyaWdnZXIgcmVydW5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY3VycmVudCBlbnRyeSBhbmQgbm90aWZ5IGFsbCBzdWJzY3JpYmVyc1xuICAgICAgY3VycmVudEVudHJ5ID0gbmV4dEVudHJ5O1xuICAgICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgY2FsbGJhY2sobmV4dEVudHJ5KTtcbiAgICAgIH0pO1xuICAgICAgbm90aWZ5RW50cnkobmV4dEVudHJ5KTtcbiAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdzbmFwc2hvdCcsXG4gICAgICAgIHNvdXJjZTogb3JpZ2luLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblBheWxvYWQsXG4gICAgICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgobmV4dEVudHJ5KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICk7XG5cbiAgLyoqIE5vcm1hbGl6ZXMgdXNlci1wcm92aWRlZCBwcmVsb2FkIHRhcmdldHMgaW50byBjb25zaXN0ZW50IHN0cnVjdHVyZXMuICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0OiBQcmVsb2FkVGFyZ2V0KToge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICB9IHtcbiAgICBsZXQgbm9ybWFsaXplZFBhdGhuYW1lID0gaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBpZiAodHlwZW9mIHRhcmdldC5wYXRobmFtZSA9PT0gJ3N0cmluZycgJiYgdGFyZ2V0LnBhdGhuYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRobmFtZSA9IHRhcmdldC5wYXRobmFtZTtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZFNlYXJjaCA9ICcnO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0LnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5vcm1hbGl6ZWRTZWFyY2ggPSB0YXJnZXQuc2VhcmNoO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkU291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ3Byb2dyYW1tYXRpYyc7XG4gICAgY29uc3QgbWFwcGVkU291cmNlID0gbWFwT3JpZ2luKHRhcmdldC5zb3VyY2UpO1xuICAgIGlmIChtYXBwZWRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybWFsaXplZFNvdXJjZSA9IG1hcHBlZFNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkUGF0aG5hbWUsXG4gICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICBzb3VyY2U6IG5vcm1hbGl6ZWRTb3VyY2UsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+ICZcbiAgICBQcmVwYXJlZEFjY2VzczxBbnlSb3V0ZVtdPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxBbnlSb3V0ZVtdPjtcbiAgICB9ID0ge1xuICAgIGhpc3RvcnksXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICB9LFxuICAgIHByZWxvYWRDb2RlKHRhcmdldCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0KTtcbiAgICAgIGVtaXRQcmVsb2FkRXZlbnQoJ2NvZGUnLCBub3JtYWxpemVkLnBhdGhuYW1lLCBub3JtYWxpemVkLnNvdXJjZSk7XG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4uaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IG5vcm1hbGl6ZWQucGF0aG5hbWUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoZXMucm91dGUucm91dGVzLmZvckVhY2goKHsgcmVzb3VyY2VQYWdlIH0pID0+IHtcbiAgICAgICAgaWYgKHJlc291cmNlUGFnZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgcmVzb3VyY2VQYWdlLmxvYWQoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcHJlbG9hZCh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQcmVsb2FkVGFyZ2V0KHRhcmdldCk7XG4gICAgICBlbWl0UHJlbG9hZEV2ZW50KCdmdWxsJywgbm9ybWFsaXplZC5wYXRobmFtZSwgbm9ybWFsaXplZC5zb3VyY2UpO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2NhdGlvblNuYXBzaG90OiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90ID0ge1xuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkLnNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICB9O1xuICAgICAgbGV0IGluc3RydW1lbnRhdGlvbjpcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICAgICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgICAgICAgICAgbG9jYXRpb246IFJvdXRlckxvY2F0aW9uU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpIHtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uID0ge1xuICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGVtaXRFdmVudChldmVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3VyY2U6IG5vcm1hbGl6ZWQuc291cmNlLFxuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblNuYXBzaG90LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcHJlcGFyZU1hdGNoKG1hdGNoZXMsIHVuZGVmaW5lZCwgaW5zdHJ1bWVudGF0aW9uKTtcbiAgICB9LFxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbmV4dElkICs9IDE7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZDtcbiAgICAgIC8qKiBSZW1vdmVzIHRoZSBzdWJzY3JpYmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB2aWEgc3Vic2NyaWJlLiAqL1xuICAgICAgZnVuY3Rpb24gZGlzcG9zZUNhbGxiYWNrKCkge1xuICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgc3Vic2NyaWJlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZGlzcG9zZUNhbGxiYWNrO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoeyBwYXRobmFtZSwgcXVlcnksIGZpbHRlcnM6IG5hdkZpbHRlcnMsIHJlcGxhY2UgfTogYW55KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY3VycmVudEVudHJ5O1xuICAgICAgbGV0IHRhcmdldFBhdGhuYW1lID0gcGF0aG5hbWU7XG4gICAgICBpZiAodGFyZ2V0UGF0aG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0YXJnZXRQYXRobmFtZSA9IGN1cnJlbnQubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBkZXN0U2NoZW1hOiBhbnk7XG4gICAgICBjb25zdCBkZXN0aW5hdGlvblJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4uaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsYXN0Um91dGUgPSBkZXN0aW5hdGlvblJvdXRlPy5yb3V0ZS5yb3V0ZXMuYXQoLTEpIGFzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgcXVlcnlTY2hlbWE/OiB1bmtub3duO1xuICAgICAgICAgIH1cbiAgICAgICAgfCBudWxsXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGxhc3RSb3V0ZSAhPSBudWxsKSB7XG4gICAgICAgIGRlc3RTY2hlbWEgPSBsYXN0Um91dGUucXVlcnlTY2hlbWE7XG4gICAgICB9XG4gICAgICBkZXN0U2NoZW1hID8/PSBjdXJyZW50LmFjdGl2ZVF1ZXJ5U2NoZW1hO1xuXG4gICAgICBjb25zdCB0eXBlZE5hdkZpbHRlcnMgPSBuYXZGaWx0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzU2NoZW1hID0gZGVzdFNjaGVtYSAhPSBudWxsO1xuICAgICAgY29uc3QgdXNlUXVlcnlBc0ZpbHRlcnMgPVxuICAgICAgICB0eXBlZE5hdkZpbHRlcnMgPT0gbnVsbCAmJlxuICAgICAgICBoYXNTY2hlbWEgJiZcbiAgICAgICAgcXVlcnkgIT0gbnVsbCAmJlxuICAgICAgICBsb29rc0xpa2VGaWx0ZXJzKHF1ZXJ5KTtcbiAgICAgIGxldCBmaWx0ZXJzSW5wdXQgPSB0eXBlZE5hdkZpbHRlcnM7XG4gICAgICBpZiAoZmlsdGVyc0lucHV0ID09IG51bGwpIHtcbiAgICAgICAgaWYgKHVzZVF1ZXJ5QXNGaWx0ZXJzKSB7XG4gICAgICAgICAgZmlsdGVyc0lucHV0ID0gcXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsdGVyc0lucHV0ID0gY3VycmVudC5maWx0ZXJzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgcmF3UXVlcnlJbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodXNlUXVlcnlBc0ZpbHRlcnMpIHtcbiAgICAgICAgcmF3UXVlcnlJbnB1dCA9IGN1cnJlbnQucXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYXdRdWVyeUlucHV0ID0gKHF1ZXJ5ID8/IGN1cnJlbnQucXVlcnkpIGFzXG4gICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnk6IHJhd1F1ZXJ5SW5wdXQsXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBkZXN0U2NoZW1hLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2NhdGlvbk9iaiA9IHsgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLCBzZWFyY2gsIGhhc2g6ICcnIH07XG4gICAgICBjb25zdCBvcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgPSAncHJvZ3JhbW1hdGljJztcbiAgICAgIGNvbnN0IGRlYnVnQ29udGV4dDogSGlzdG9yeURlYnVnQ29udGV4dCA9IHtcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZXBsYWNlID09PSB0cnVlKSB7XG4gICAgICAgIGVtaXRIaXN0b3J5RXZlbnQoJ3JlcGxhY2UnLCBvcmlnaW4sIGxvY2F0aW9uT2JqLCB7XG4gICAgICAgICAgdHJpZ2dlcjogJ3Byb2dyYW1tYXRpYycsXG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgLi4ubG9jYXRpb25PYmosXG4gICAgICAgICAgZGVidWdDb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXRIaXN0b3J5RXZlbnQoJ3B1c2gnLCBvcmlnaW4sIGxvY2F0aW9uT2JqLCB7XG4gICAgICAgICAgdHJpZ2dlcjogJ3Byb2dyYW1tYXRpYycsXG4gICAgICAgIH0pO1xuICAgICAgICBoaXN0b3J5LnB1c2goe1xuICAgICAgICAgIC4uLmxvY2F0aW9uT2JqLFxuICAgICAgICAgIGRlYnVnQ29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRQcmVwYXJlZChwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgZm9yIChjb25zdCBwcmVwYXJlZFJvdXRlIG9mIGVudHJ5LnByZXBhcmVkTWF0Y2gucm91dGVzKSB7XG4gICAgICAgICAgaWYgKHByZXBhcmVkUm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXBhcmVkUm91dGUucHJlcGFyZWQgYXMgYW55O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICAvKiogUmVsZWFzZXMgcm91dGVyIHJlc291cmNlcyBhbmQgZGV0YWNoZXMgYWxsIGluc3RydW1lbnRhdGlvbnMuICovXG4gIGZ1bmN0aW9uIGNsZWFudXAoKTogdm9pZCB7XG4gICAgZGlzcG9zZUhpc3RvcnkoKTtcbiAgICBzdWJzY3JpYmVycy5jbGVhcigpO1xuICAgIHJlZ2lzdHJ5LmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIHJldHVybiB7IGNvbnRleHQsIGNsZWFudXAgfTtcbn1cbiJdfQ==
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxLQUFLLElBQUksWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFVOUQsT0FBTyxFQUNMLDZCQUE2QixHQU05QixNQUFNLHVDQUF1QyxDQUFDO0FBbUUvQyxNQUFNLENBQUMsT0FBTyxVQUFVLFlBQVksQ0FJbEMsTUFBcUMsRUFDckMsVUFBeUMsRUFBRTtJQU0zQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBRXJDLE1BQU0sUUFBUSxHQUFHLDZCQUE2QixDQUM1QyxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUMvQixDQUFDO0lBRUYsSUFBSSxhQUFtQyxDQUFDO0lBQ3hDLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxhQUFhLEdBQUksT0FBTyxDQUFDLE9BQTBCLEVBQUUsQ0FBQztRQUN4RCxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBR0QsU0FBUyxjQUFjO1FBQ3JCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJ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Q0gsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxHQUFHLFdBQVc7b0JBQ2QsWUFBWTtpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELFdBQVcsQ0FBQyxJQUFJO1lBQ2QsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQztnQkFDM0IsS0FBSyxNQUFNLGFBQWEsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN2RCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7d0JBQ2hDLE9BQU8sYUFBYSxDQUFDLFFBQWUsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7S0FDRixDQUFDO0lBR0YsU0FBUyxPQUFPO1FBQ2QsY0FBYyxFQUFFLENBQUM7UUFDakIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBR0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRSb3V0ZXMgfSBmcm9tICcuLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCB7IHBhcnNlUmF3UXVlcnkgfSBmcm9tICcuLi90b29scy9xdWVyeS5qcyc7XG5pbXBvcnQgYnVpbGRDb21iaW5lZFNlYXJjaCBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQge1xuICB0eXBlIFJvdXRlRW50cnksXG4gIHR5cGUgUm91dGluZ0NvbnRleHRUeXBlLFxuICB0eXBlIFN1YnNjcmliZUNhbGxiYWNrLFxuICB0eXBlIEFueVJvdXRlLFxuICB0eXBlIFByZXBhcmVkQWNjZXNzLFxuICB0eXBlIE5hdmlnYXRlT3ZlcmxvYWRzLFxuICB0eXBlIFByZWxvYWRUYXJnZXQsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LFxuICB0eXBlIEluc3RydW1lbnRhdGlvbkFQSSxcbiAgdHlwZSBSb3V0ZXJFbnRyeVNuYXBzaG90LFxuICB0eXBlIFJvdXRlckxvY2F0aW9uU25hcHNob3QsXG4gIHR5cGUgUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgdHlwZSBSb3V0ZXJFdmVudCxcbn0gZnJvbSAnLi4vaW5zdHJ1bWVudGF0aW9uL0luc3RydW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEhpc3RvcnlEZWJ1Z0NvbnRleHQgfSBmcm9tICcuLi9oaXN0b3J5L3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFRDb250ZXh0LCBSIGV4dGVuZHMgQW55Um91dGU8VENvbnRleHQ+W10+ID0ge1xuICAvKiogRnVuY3Rpb24gdG8gY2xlYW4gdXAgcm91dGVyIGxpc3RlbmVycyBhbmQgcmVzb3VyY2VzICovXG4gIGNsZWFudXA6ICgpID0+IHZvaWQ7XG4gIC8qKiBSb3V0ZXIgY29udGV4dCBvYmplY3QgZm9yIHRoZSBSZWFjdCBDb250ZXh0IFByb3ZpZGVyICovXG4gIGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnksIGFueSwgYW55LCBUQ29udGV4dD4gJiBQcmVwYXJlZEFjY2VzczxSPjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbXBsZXRlIHJvdXRlciBzeXN0ZW0gZnJvbSByb3V0ZSBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBUaGlzIHJvdXRlciBpcyBidWlsdCBmcm9tIHRoZSBzYW1lIHByaW1pdGl2ZXMgYXMgcmVhY3Qtcm91dGVyIGJ1dCB3aXRoIGFkZGl0aW9uYWxcbiAqIGZlYXR1cmVzIGZvciBkYXRhIHByZWxvYWRpbmcgYW5kIGNvZGUgc3BsaXR0aW5nLiBFYWNoIHJvdXRlIGNhbiBjb250YWluIGJvdGggYVxuICogQ29tcG9uZW50IGFuZCBhIHByZXBhcmUoKSBmdW5jdGlvbiB0aGF0IGNhbiBwcmVsb2FkIGRhdGEgZm9yIHRoZSBjb21wb25lbnQuXG4gKlxuICogVGhlIHJvdXRlciB3YXRjaGVzIGZvciBjaGFuZ2VzIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uIHZpYSB0aGUgSFRNTDUgSGlzdG9yeSBBUEksXG4gKiBtYXBzIHRoZSBsb2NhdGlvbiB0byB0aGUgY29ycmVzcG9uZGluZyByb3V0ZSBlbnRyeSwgYW5kIHRoZW4gcHJlbG9hZHMgdGhlIGNvZGVcbiAqIGFuZCBkYXRhIGZvciB0aGUgcm91dGUgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gQXJyYXkgb2Ygcm91dGUgY29uZmlndXJhdGlvbnNcbiAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIHRoZSByb3V0ZXIgY29udGV4dCBhbmQgY2xlYW51cCBmdW5jdGlvblxuICpcbiAgcHJlcGFyZWRNYXRjaDogcHJlcGFyZU1hdGNoKHJvdXRlLCBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSksXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnL3VzZXJzLzppZCcsXG4gKiAgICAgcmVzb3VyY2VQYWdlOiBnZXRSZXNvdXJjZVBhZ2UoJ1VzZXJQcm9maWxlJywgKCkgPT4gaW1wb3J0KCcuL1VzZXJQcm9maWxlJykpLFxuICogICAgIHByZXBhcmU6ICh7IHZhcmlhYmxlcyB9KSA9PiAoeyB1c2VySWQ6IHZhcmlhYmxlcy5pZCB9KVxuICogICB9XG4gKiBdO1xuICpcbiAqIGNvbnN0IHsgY29udGV4dCwgY2xlYW51cCB9ID0gY3JlYXRlUm91dGVyKHJvdXRlcyk7XG4gKlxuICogLy8gVXNlIGluIFJlYWN0IGFwcFxuICogPFJvdXRpbmdDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0fT5cbiAqICAgPFJvdXRlclJlbmRlcmVyIC8+XG4gKiA8L1JvdXRpbmdDb250ZXh0LlByb3ZpZGVyPlxuICogYGBgXG4gKi9cbi8qKlxuICogQ3JlYXRlIGEgcm91dGVyICh0eXBlZCBvdmVybG9hZCkuIFdoZW4gY2FsbGVkIHdpdGggYSBjb25zdCB0dXBsZSBvZiByb3V0ZXMsIGdlbmVyaWNzIGFyZSBwcmVzZXJ2ZWQuXG4gKi9cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgYGNyZWF0ZVJvdXRlcmAuXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlck9wdGlvbnM8VENvbnRleHQ+ID0ge1xuICAvKiogSW5zdHJ1bWVudGF0aW9ucyB0byBhdHRhY2ggdG8gdGhlIHJvdXRlciAoRGV2VG9vbHMgYnJpZGdlLCBsb2dnZXIsIC4uLikuICovXG4gIGluc3RydW1lbnRhdGlvbnM/OiBJbnN0cnVtZW50YXRpb25BUElbXTtcbiAgLyoqIFN0YXRpYyBjb250ZXh0IHZhbHVlIG9yIGxhenkgaW5pdGlhbGl6ZXIgZm9yIHRoZSByb3V0ZXIuICovXG4gIGNvbnRleHQ/OiBUQ29udGV4dCB8ICgoKSA9PiBUQ29udGV4dCk7XG4gIC8qKiBSZXNvbHZlIGEgZnJlc2ggY29udGV4dCB2YWx1ZSBwZXIgbmF2aWdhdGlvbi4gKi9cbiAgZ2V0Q29udGV4dD86ICgpID0+IFRDb250ZXh0O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcm91dGVyIGluc3RhbmNlIGZyb20gYSByb3V0ZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBSb3V0ZSBkZWZpbml0aW9ucyB0byByZWdpc3Rlci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgaW5zdHJ1bWVudGF0aW9uIHNldHRpbmdzIHVzZWQgZm9yIGV4cG9zaW5nIGRldmVsb3BtZW50IHRvb2xpbmcuXG4gKiBAcGFyYW0gb3B0aW9ucy5pbnN0cnVtZW50YXRpb25zIC0gSW5zdHJ1bWVudGF0aW9ucyBpbnZva2VkIG9uIHJvdXRlciBldmVudHMgKGRldmVsb3BtZW50IG9ubHkpLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXI8XG4gIFRDb250ZXh0ID0gdW5rbm93bixcbiAgUiBleHRlbmRzIEFueVJvdXRlPFRDb250ZXh0PltdID0gQW55Um91dGU8VENvbnRleHQ+W10sXG4+KFxuICByb3V0ZXM6IFsuLi5SXSB8IEFueVJvdXRlPFRDb250ZXh0PltdLFxuICBvcHRpb25zOiBDcmVhdGVSb3V0ZXJPcHRpb25zPFRDb250ZXh0PiA9IHt9LFxuKTogQ3JlYXRlUm91dGVyUmV0dXJuPFxuICBUQ29udGV4dCxcbiAgUiBleHRlbmRzIEFueVJvdXRlPFRDb250ZXh0PltdID8gUiA6IEFueVJvdXRlPFRDb250ZXh0PltdXG4+IHtcbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGVJbnN0cnVtZW50YXRpb25SZWdpc3RyeShcbiAgICBvcHRpb25zLmluc3RydW1lbnRhdGlvbnMgPz8gW10sXG4gICk7XG5cbiAgbGV0IHN0YXRpY0NvbnRleHQ6IFRDb250ZXh0IHwgdW5kZWZpbmVkO1xuICBpZiAob3B0aW9ucy5nZXRDb250ZXh0ID09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc3RhdGljQ29udGV4dCA9IChvcHRpb25zLmNvbnRleHQgYXMgKCkgPT4gVENvbnRleHQpKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpY0NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc29sdmUgdGhlIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24uICovXG4gIGZ1bmN0aW9uIHJlc29sdmVDb250ZXh0KCk6IFRDb250ZXh0IHtcbiAgICBpZiAob3B0aW9ucy5nZXRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmdldENvbnRleHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRpY0NvbnRleHQgYXMgVENvbnRleHQ7XG4gIH1cblxuICBsZXQgcGVuZGluZ05hdmlnYXRpb25PcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XG4gIGxldCBsYXN0TmF2aWdhdGlvbk9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdleHRlcm5hbCc7XG4gIGxldCBsYXN0UHJlbG9hZFNpZ25hdHVyZToge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgcGFydGlhbCBsb2NhdGlvbiBvYmplY3QgaW50byBhIGZ1bGwgbG9jYXRpb24gc3RydWN0dXJlIHdpdGggc3RyaW5nIGZpZWxkcy5cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uOiB7XG4gICAgcGF0aG5hbWU6IHN0cmluZztcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgaGFzaD86IHN0cmluZztcbiAgfSk6IHsgcGF0aG5hbWU6IHN0cmluZzsgc2VhcmNoOiBzdHJpbmc7IGhhc2g6IHN0cmluZyB9IHtcbiAgICBsZXQgcGF0aG5hbWVWYWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24ucGF0aG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwYXRobmFtZVZhbHVlID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgfVxuICAgIGxldCBzZWFyY2hWYWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24uc2VhcmNoID09PSAnc3RyaW5nJykge1xuICAgICAgc2VhcmNoVmFsdWUgPSBsb2NhdGlvbi5zZWFyY2g7XG4gICAgfVxuICAgIGxldCBoYXNoVmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uLmhhc2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICBoYXNoVmFsdWUgPSBsb2NhdGlvbi5oYXNoO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lVmFsdWUsXG4gICAgICBzZWFyY2g6IHNlYXJjaFZhbHVlLFxuICAgICAgaGFzaDogaGFzaFZhbHVlLFxuICAgIH07XG4gIH1cblxuICAvKiogRW1pdHMgYSByb3V0ZXIgZXZlbnQgdG8gZXZlcnkgcmVnaXN0ZXJlZCBpbnN0cnVtZW50YXRpb24uICovXG4gIGZ1bmN0aW9uIGVtaXRFdmVudChldmVudDogUm91dGVyRXZlbnQpOiB2b2lkIHtcbiAgICByZWdpc3RyeS5lbWl0RXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGNvZXJjZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGludG8gYSBrbm93biBuYXZpZ2F0aW9uIHNvdXJjZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcE9yaWdpbihyYXc/OiBzdHJpbmcpOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN3aXRjaCAocmF3KSB7XG4gICAgICBjYXNlICdsaW5rLWNsaWNrJzpcbiAgICAgIGNhc2UgJ2xpbmstaG92ZXInOlxuICAgICAgY2FzZSAncHJvZ3JhbW1hdGljJzpcbiAgICAgIGNhc2UgJ3BvcHN0YXRlLWJhY2snOlxuICAgICAgY2FzZSAncG9wc3RhdGUtZm9yd2FyZCc6XG4gICAgICBjYXNlICdwb3BzdGF0ZS11bmtub3duJzpcbiAgICAgIGNhc2UgJ2V4dGVybmFsJzpcbiAgICAgIGNhc2UgJ25vcm1hbGl6ZSc6XG4gICAgICBjYXNlICdwcmVsb2FkLWhvdmVyJzpcbiAgICAgICAgcmV0dXJuIHJhdztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgRklMVEVSX09QRVJBVE9SUyA9IG5ldyBTZXQoW1xuICAgICdndCcsXG4gICAgJ2d0ZScsXG4gICAgJ2x0JyxcbiAgICAnbHRlJyxcbiAgICAnZXEnLFxuICAgICduZXEnLFxuICAgICdjb250YWlucycsXG4gICAgJ3N3JyxcbiAgICAnZXcnLFxuICAgICdiZXR3ZWVuJyxcbiAgICAnaW4nLFxuICAgICduaW4nLFxuICBdKTtcblxuICAvKiogSGV1cmlzdGljOiBkZXRlY3QgZmlsdGVyLWxpa2Ugb2JqZWN0cyB0byBwcmVzZXJ2ZSBsZWdhY3kgbmF2aWdhdGUocXVlcnkpIGJlaGF2aW9yLiAqL1xuICBmdW5jdGlvbiBsb29rc0xpa2VGaWx0ZXJzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmQgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgT2JqZWN0LnZhbHVlcyhyZWNvcmQpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkVmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZSlcbiAgICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgICAgICAgIGlmIChGSUxURVJfT1BFUkFUT1JTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgb3JpZ2luIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGV2ZW50LlxuICAgKi9cbiAgLyoqIFJlc29sdmVzIHRoZSBuYXZpZ2F0aW9uIHNvdXJjZSBjb21iaW5pbmcgaGlzdG9yeSBjb250ZXh0IGFuZCBwZW5kaW5nIGludGVudC4gKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZU5hdmlnYXRpb25PcmlnaW4oXG4gICAgY29udGV4dD86IEhpc3RvcnlEZWJ1Z0NvbnRleHQgfCBudWxsLFxuICApOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlIHtcbiAgICBjb25zdCBmYWxsYmFja09yaWdpbiA9IHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luO1xuICAgIGxldCBvcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjb250ZXh0T3JpZ2luID0gY29udGV4dD8ub3JpZ2luO1xuICAgIGlmIChjb250ZXh0T3JpZ2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9yaWdpbiA9IG1hcE9yaWdpbihjb250ZXh0T3JpZ2luKTtcbiAgICB9XG5cbiAgICBvcmlnaW4gPz89IGZhbGxiYWNrT3JpZ2luO1xuICAgIG9yaWdpbiA/Pz0gJ2V4dGVybmFsJztcbiAgICBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbiA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gb3JpZ2luO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBpbm5lci1tb3N0IG1hdGNoZWQgcm91dGUgcGF0aCBmcm9tIGEgcm91dGUgZW50cnkgd2hlbiBhdmFpbGFibGUuXG4gICAqL1xuICAvKiogUmV0dXJucyB0aGUgZGVlcGVzdCBtYXRjaGVkIHJvdXRlIHBhdGggZnJvbSBhIHJvdXRlIGVudHJ5IGlmIGF2YWlsYWJsZS4gKi9cbiAgZnVuY3Rpb24gcmVhZE1hdGNoZWRSb3V0ZVBhdGgoXG4gICAgZW50cnk6IFJvdXRlRW50cnk8YW55PiB8IHVuZGVmaW5lZCxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFJvdXRlID0gZW50cnkucm91dGU7XG4gICAgaWYgKG1hdGNoZWRSb3V0ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBtYXRjaGVkUm91dGUucm91dGUucm91dGVzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkUm91dGVzKSkge1xuICAgICAgY29uc3QgbGFzdENoaWxkID0gY2hpbGRSb3V0ZXMuYXQoLTEpO1xuICAgICAgaWYgKGxhc3RDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZFJlY29yZCA9IGxhc3RDaGlsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gbGFzdENoaWxkUmVjb3JkLnBhdGg7XG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGRQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBjaGlsZFBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgcm9vdFBhdGggPSBtYXRjaGVkUm91dGUucm91dGUucGF0aDtcbiAgICBpZiAodHlwZW9mIHJvb3RQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJvb3RQYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEJ1aWxkcyBhIHNuYXBzaG90IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHJvdXRlciBlbnRyeS4gKi9cbiAgZnVuY3Rpb24gYnVpbGRFbnRyeVNuYXBzaG90KGVudHJ5OiBSb3V0ZUVudHJ5PGFueT4pOiBSb3V0ZXJFbnRyeVNuYXBzaG90IHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGVudHJ5LmxvY2F0aW9uKSxcbiAgICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgoZW50cnkpLFxuICAgICAgcHJlcGFyZWRNYXRjaDogZW50cnkucHJlcGFyZWRNYXRjaCxcbiAgICAgIGZpbHRlcnM6IGVudHJ5LmZpbHRlcnMsXG4gICAgICBmaWx0ZXJEaWFnbm9zdGljczogZW50cnkuZmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgICBhY3RpdmVRdWVyeVNjaGVtYTogZW50cnkuYWN0aXZlUXVlcnlTY2hlbWEsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBOb3RpZmllcyBpbnN0cnVtZW50YXRpb25zIG9mIGEgbmV3IGFjdGl2ZSBlbnRyeS4gKi9cbiAgZnVuY3Rpb24gbm90aWZ5RW50cnkoZW50cnk6IFJvdXRlRW50cnk8YW55Pik6IHZvaWQge1xuICAgIHJlZ2lzdHJ5Lm5vdGlmeUVudHJ5Q2hhbmdlKGJ1aWxkRW50cnlTbmFwc2hvdChlbnRyeSkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBkZWR1cGxpY2F0aW9uIGtleSBmb3IgcHJlbG9hZCBldmVudHMuICovXG4gIGZ1bmN0aW9uIGJ1aWxkUHJlbG9hZEtleShtb2RlOiAnY29kZScgfCAnZnVsbCcsIHBhdGhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHttb2RlfToke3BhdGhuYW1lfWA7XG4gIH1cblxuICAvKiogRW1pdHMgYSBwcmVsb2FkIG9yIHByZWxvYWQtY29kZSBpbnN0cnVtZW50YXRpb24gZXZlbnQuICovXG4gIGZ1bmN0aW9uIGVtaXRQcmVsb2FkRXZlbnQoXG4gICAgbW9kZTogJ2NvZGUnIHwgJ2Z1bGwnLFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkUHJlbG9hZEtleShtb2RlLCBwYXRobmFtZSk7XG4gICAgY29uc3QgcmVjZW50bHlSZWNvcmRlZCA9XG4gICAgICBsYXN0UHJlbG9hZFNpZ25hdHVyZSAhPT0gbnVsbCAmJlxuICAgICAgbGFzdFByZWxvYWRTaWduYXR1cmUua2V5ID09PSBrZXkgJiZcbiAgICAgIG5vdyAtIGxhc3RQcmVsb2FkU2lnbmF0dXJlLnRpbWVzdGFtcCA8IDUwO1xuXG4gICAgaWYgKCFyZWNlbnRseVJlY29yZGVkKSB7XG4gICAgICBlbWl0RXZlbnQoe1xuICAgICAgICBraW5kOiAncHJlbG9hZCcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wOiBub3csXG4gICAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uKSxcbiAgICAgICAgdGFyZ2V0UGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBtb2RlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGFzdFByZWxvYWRTaWduYXR1cmUgPSB7IGtleSwgdGltZXN0YW1wOiBub3cgfTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIGhpc3RvcnkgbXV0YXRpb24gZXZlbnQgKHB1c2gvcmVwbGFjZS9ub3JtYWxpemUpLiAqL1xuICBmdW5jdGlvbiBlbWl0SGlzdG9yeUV2ZW50KFxuICAgIGFjdGlvbjogJ3B1c2gnIHwgJ3JlcGxhY2UnIHwgJ25vcm1hbGl6ZScsXG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICAgIGxvY2F0aW9uOiB7IHBhdGhuYW1lOiBzdHJpbmc7IHNlYXJjaD86IHN0cmluZzsgaGFzaD86IHN0cmluZyB9LFxuICAgIGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogdm9pZCB7XG4gICAgcGVuZGluZ05hdmlnYXRpb25PcmlnaW4gPSBzb3VyY2U7XG4gICAgZW1pdEV2ZW50KHtcbiAgICAgIGtpbmQ6ICdoaXN0b3J5JyxcbiAgICAgIHNvdXJjZSxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihsb2NhdGlvbiksXG4gICAgICBkZXRhaWxzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGlyZWN0IHNjaGVtYTogb25seSB0aGUgbWF0Y2hlZCByb3V0ZSdzIG93biBxdWVyeVNjaGVtYSAobm8gaGllcmFyY2hpY2FsIGRpc2NvdmVyeSlcbiAgbGV0IGluaXRpYWxVbmlmaWVkU2NoZW1hOiBhbnk7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgY29uc3QgbGFzdCA9IHJvdXRlLnJvdXRlLnJvdXRlcy5hdCgtMSkgYXMgdW5rbm93biBhcyB7XG4gICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgfSB8IG51bGw7XG4gICAgaWYgKGxhc3QgIT0gbnVsbCkge1xuICAgICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgPSBsYXN0LnF1ZXJ5U2NoZW1hO1xuICAgIH1cbiAgfVxuICBsZXQgaW5pdGlhbEZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgaWYgKGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZpbHRlcnMoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsIGluaXRpYWxVbmlmaWVkU2NoZW1hKTtcbiAgICBpbml0aWFsRmlsdGVycyA9IHBhcnNlZC5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgfVxuICBjb25zdCBpbml0aWFsTG9jYXRpb25TbmFwc2hvdCA9IG5vcm1hbGl6ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24pO1xuICBsZXQgaW5pdGlhbEluc3RydW1lbnRhdGlvbjpcbiAgICB8IHtcbiAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgICAgICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgICAgICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKHJvdXRlICE9IG51bGwpIHtcbiAgICBpbml0aWFsSW5zdHJ1bWVudGF0aW9uID0ge1xuICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4ge1xuICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIHNvdXJjZTogbGFzdE5hdmlnYXRpb25PcmlnaW4sXG4gICAgICBsb2NhdGlvbjogaW5pdGlhbExvY2F0aW9uU25hcHNob3QsXG4gICAgfTtcbiAgfVxuICBjb25zdCBpbml0aWFsQ29udGV4dCA9IHJlc29sdmVDb250ZXh0KCk7XG4gIGNvbnN0IHByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgcm91dGUsXG4gICAgaW5pdGlhbEZpbHRlcnMsXG4gICAgaW5pdGlhbEluc3RydW1lbnRhdGlvbixcbiAgICBpbml0aWFsQ29udGV4dCxcbiAgKTtcbiAgLy8gSGVscGVyIHRvIGJ1aWxkIHRoZSByYXcgcXVlcnkgb2JqZWN0IGZyb20gYSBzZWFyY2ggc3RyaW5nXG4gIGxldCBjdXJyZW50RW50cnk6IFJvdXRlRW50cnk8YW55LCBhbnksIFRDb250ZXh0PiA9IHtcbiAgICBmb3JjZVJlcmVuZGVyOiBmYWxzZSxcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvbixcbiAgICByb3V0ZSxcbiAgICBwcmVwYXJlZE1hdGNoLFxuICAgIGNvbnRleHQ6IGluaXRpYWxDb250ZXh0LFxuICAgIHJhd1NlYXJjaDogaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsXG4gICAgcXVlcnk6IGluaXRpYWxSYXdRdWVyeSxcbiAgICAvLyB0eXBlZFF1ZXJ5IHJlbW92ZWQgKHVuaWZpZWQgaW50byBmaWx0ZXJzL3F1ZXJ5KVxuICAgIGZpbHRlcnM6IGluaXRpYWxGaWx0ZXJzLFxuICAgIGZpbHRlckRpYWdub3N0aWNzOiBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgYWN0aXZlUXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICB9O1xuXG4gIC8vIEluaXRpYWwgbm9ybWFsaXphdGlvbiBwYXNzIChlLmcuLCBjbGFtcCBwYWdlKVxuICBjb25zdCBpbml0VHlwZWQgPSBjdXJyZW50RW50cnkuZmlsdGVycyBhcyB1bmtub3duIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdFBhZ2VOdW1lcmljOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGlmIChpbml0VHlwZWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHJhd1BhZ2UgPSBpbml0VHlwZWQucGFnZTtcbiAgICBpZiAodHlwZW9mIHJhd1BhZ2UgPT09ICdudW1iZXInKSBpbml0UGFnZU51bWVyaWMgPSByYXdQYWdlO1xuICAgIGVsc2UgaWYgKFxuICAgICAgcmF3UGFnZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgcmF3UGFnZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHJhd1BhZ2UpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmF3UGFnZSwgJ2VxJykgJiZcbiAgICAgIHR5cGVvZiAocmF3UGFnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXEgPT09ICdudW1iZXInXG4gICAgKSB7XG4gICAgICBpbml0UGFnZU51bWVyaWMgPSAocmF3UGFnZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXEgYXMgbnVtYmVyO1xuICAgIH1cbiAgfVxuICBpZiAoXG4gICAgdHlwZW9mIGluaXRQYWdlTnVtZXJpYyA9PT0gJ251bWJlcicgJiZcbiAgICBpbml0UGFnZU51bWVyaWMgPCAxICYmXG4gICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEgIT0gbnVsbCAmJlxuICAgIGluaXRUeXBlZCAhPSBudWxsXG4gICkge1xuICAgIGNvbnN0IG5vcm0gPSB7IC4uLmluaXRUeXBlZCwgcGFnZTogeyBlcTogMSB9IH0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY3VycmVudEVudHJ5LmZpbHRlcnMgPSBub3JtOyAvLyBpbW1lZGlhdGUgdmlzaWJpbGl0eVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgIGZpbHRlcnM6IG5vcm0sXG4gICAgICBxdWVyeTogaW5pdGlhbFJhd1F1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgZW1pdEhpc3RvcnlFdmVudChcbiAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB7IHJlYXNvbjogJ2luaXRpYWwtcGFnZS1jbGFtcCcgfSxcbiAgICAgICk7XG4gICAgICBjb25zdCBub3JtYWxpemVEZWJ1Z0NvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgIG9yaWdpbjogJ25vcm1hbGl6ZScsXG4gICAgICAgIHRyaWdnZXI6ICdub3JtYWxpemUnLFxuICAgICAgfTtcbiAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGRlYnVnQ29udGV4dDogbm9ybWFsaXplRGVidWdDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICAvLyBVcGRhdGUgY3VycmVudEVudHJ5LmxvY2F0aW9uIHRvIHJlZmxlY3QgbmV3IHNlYXJjaCBkaXJlY3RseSAoaGlzdG9yeS5zZXQgdHJpZ2dlcnMgYXN5bmMgc3Vic2NyaWJlcilcbiAgICAgIGN1cnJlbnRFbnRyeSA9IHtcbiAgICAgICAgLi4uY3VycmVudEVudHJ5LFxuICAgICAgICBsb2NhdGlvbjogeyAuLi5jdXJyZW50RW50cnkubG9jYXRpb24sIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCB9LFxuICAgICAgICByYXdTZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeUVudHJ5KGN1cnJlbnRFbnRyeSk7XG4gIGVtaXRFdmVudCh7XG4gICAga2luZDogJ3NuYXBzaG90JyxcbiAgICBzb3VyY2U6IGxhc3ROYXZpZ2F0aW9uT3JpZ2luLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oY3VycmVudEVudHJ5LmxvY2F0aW9uKSxcbiAgICByb3V0ZVBhdGg6IHJlYWRNYXRjaGVkUm91dGVQYXRoKGN1cnJlbnRFbnRyeSksXG4gIH0pO1xuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxudW1iZXIsIFN1YnNjcmliZUNhbGxiYWNrPGFueSwgYW55LCBUQ29udGV4dD4+KCk7XG5cbiAgLy8gTGlzdGVuIGZvciBsb2NhdGlvbiBjaGFuZ2VzLCBtYXRjaCB0byB0aGUgcm91dGUgZW50cnksIHByZXBhcmUgdGhlIGVudHJ5LFxuICAvLyBhbmQgbm90aWZ5IHN1YnNjcmliZXJzLiBUaGlzIHBhdHRlcm4gZW5zdXJlcyB0aGF0IGRhdGEtbG9hZGluZ1xuICAvLyBvY2N1cnMgKm91dHNpZGUqIG9mIC0gYW5kICpiZWZvcmUqIC0gcmVuZGVyaW5nLlxuICBjb25zdCBkaXNwb3NlSGlzdG9yeSA9IGhpc3Rvcnkuc3Vic2NyaWJlKFxuICAgIChsb2NhdGlvbiwgZm9yY2VSZXJlbmRlciwgZGVidWdDb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW4gPSByZXNvbHZlTmF2aWdhdGlvbk9yaWdpbihkZWJ1Z0NvbnRleHQpO1xuICAgICAgbGFzdE5hdmlnYXRpb25PcmlnaW4gPSBvcmlnaW47XG4gICAgICBjb25zdCBsb2NhdGlvblBheWxvYWQgPSBub3JtYWxpemVMb2NhdGlvbihsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGRlYnVnQ29udGV4dE9yaWdpbiA9IGRlYnVnQ29udGV4dD8ub3JpZ2luO1xuICAgICAgaWYgKGRlYnVnQ29udGV4dE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBoaXN0b3J5RGV0YWlsczogeyBoaXN0b3J5SW5kZXg6IG51bWJlciB9IHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodHlwZW9mIGRlYnVnQ29udGV4dD8uaGlzdG9yeUluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGhpc3RvcnlEZXRhaWxzID0geyBoaXN0b3J5SW5kZXg6IGRlYnVnQ29udGV4dC5oaXN0b3J5SW5kZXggfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1iYWNrJyB8fFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWZvcndhcmQnIHx8XG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtdW5rbm93bicgfHxcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdleHRlcm5hbCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IGRpcmVjdGlvbjogJ2JhY2snIHwgJ2ZvcndhcmQnIHwgJ3Vua25vd24nID0gJ3Vua25vd24nO1xuICAgICAgICAgIGlmIChkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1iYWNrJykge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gJ2JhY2snO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtZm9yd2FyZCcpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdmb3J3YXJkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgZW1pdEV2ZW50KHtcbiAgICAgICAgICAgIGtpbmQ6ICdwb3BzdGF0ZScsXG4gICAgICAgICAgICBzb3VyY2U6IG9yaWdpbixcbiAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblBheWxvYWQsXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICBkZXRhaWxzOiBoaXN0b3J5RGV0YWlscyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzYW1lUGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSA9PT0gY3VycmVudEVudHJ5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgY29uc3Qgc2FtZVNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCA9PT0gY3VycmVudEVudHJ5LnJhd1NlYXJjaDtcblxuICAgICAgaWYgKCFmb3JjZVJlcmVuZGVyICYmIHNhbWVQYXRobmFtZSAmJiBzYW1lU2VhcmNoKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgY2hhbmdlZCB0aGF0IHdlIGNhcmUgYWJvdXRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0Q29udGV4dCA9IHJlc29sdmVDb250ZXh0KCk7XG5cbiAgICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIHdlIHN0aWxsIHdhbnQgdG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2UuXG4gICAgICAvLyBLZWVwIHRoZSBleGlzdGluZyBwcmVwYXJlZE1hdGNoIHdoZW4gcGF0aG5hbWUgaXMgaWRlbnRpY2FsIHRvIGF2b2lkIHJlZHVuZGFudCB3b3JrLlxuICAgICAgbGV0IG5leHRQcmVwYXJlZE1hdGNoID0gY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2g7XG4gICAgICBsZXQgbmV4dFJvdXRlID0gY3VycmVudEVudHJ5LnJvdXRlO1xuXG4gICAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgICBuZXh0Um91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgbG9jYXRpb24pO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCByYXcgcXVlcnkgb2JqZWN0IChiYXNpYyBhZ2dyZWdhdGlvbikgZnJvbSBsb2NhdGlvbi5zZWFyY2hcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcGFyc2VSYXdRdWVyeShsb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBmcm9tIGRlZXBlc3QgbWF0Y2hlZCByb3V0ZVxuICAgICAgbGV0IHF1ZXJ5U2NoZW1hOiBhbnk7XG4gICAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IG5leHRSb3V0ZS5yb3V0ZS5yb3V0ZXMuYXQoLTEpIGFzIHVua25vd24gYXMge1xuICAgICAgICAgIHF1ZXJ5U2NoZW1hPzogdW5rbm93bjtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICAgIGlmIChsYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICBxdWVyeVNjaGVtYSA9IGxhc3QucXVlcnlTY2hlbWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFBhcnNlIHVuaWZpZWQgZmlsdGVyc1xuICAgICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChxdWVyeVNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBxdWVyeVNjaGVtYSk7XG4gICAgICAgIGZpbHRlcnMgPSBwYXJzZWRGLmZpbHRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgZmlsdGVyRGlhZ25vc3RpY3MgPSBwYXJzZWRGLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgICAgIH1cbiAgICAgIC8vIE5vcm1hbGl6YXRpb246IGNsYW1wIHBhZ2UgPj0gMSBpZiBudW1lcmljIHBhZ2UgcHJlc2VudFxuICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICAgIGxldCBwZzogdW5rbm93bjtcbiAgICAgIGlmIChmaWx0ZXJzICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBmaWx0ZXJzO1xuICAgICAgICBjb25zdCBtYXliZSA9IGYucGFnZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1heWJlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgbWF5YmUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkobWF5YmUpICYmXG4gICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1heWJlLCAnZXEnKVxuICAgICAgICApIHtcbiAgICAgICAgICBwZyA9IChtYXliZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuZXE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGcgPSBtYXliZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBwZyA9PT0gJ251bWJlcicgJiYgcGcgPCAxKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0geyAuLi4oZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSwgcGFnZTogeyBlcTogMSB9IH07XG4gICAgICAgIGZpbHRlcnMgPSBjbG9uZTtcbiAgICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIChzYW1lIHBhdGhuYW1lKSB3ZSBzdGlsbCBuZWVkIHRvIHJlLXJ1biBwcmVwYXJlXG4gICAgICBpZiAoIXNhbWVQYXRobmFtZSB8fCAhc2FtZVNlYXJjaCkge1xuICAgICAgICBsZXQgdXBkYXRlSW5zdHJ1bWVudGF0aW9uOlxuICAgICAgICAgIHwge1xuICAgICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICAgICAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2U7XG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgICB1cGRhdGVJbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGVtaXRFdmVudChldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25QYXlsb2FkLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgICAgICAgbmV4dFJvdXRlLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB1cGRhdGVJbnN0cnVtZW50YXRpb24sXG4gICAgICAgICAgbmV4dENvbnRleHQsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVFbnRyeTxhbnksIGFueSwgVENvbnRleHQ+ID0ge1xuICAgICAgICBmb3JjZVJlcmVuZGVyOiBmb3JjZVJlcmVuZGVyIHx8IChzYW1lUGF0aG5hbWUgJiYgIXNhbWVTZWFyY2gpLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgICAgcHJlcGFyZWRNYXRjaDogbmV4dFByZXBhcmVkTWF0Y2gsXG4gICAgICAgIGNvbnRleHQ6IG5leHRDb250ZXh0LFxuICAgICAgICByYXdTZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGZpbHRlckRpYWdub3N0aWNzLFxuICAgICAgICBhY3RpdmVRdWVyeVNjaGVtYTogcXVlcnlTY2hlbWEsXG4gICAgICB9O1xuXG4gICAgICAvLyBJZiBub3JtYWxpemF0aW9uIGNoYW5nZWQgdGhlIHR5cGVkIHF1ZXJ5IHdlIHRyaWdnZXIgYSByZXBsYWNlIHdpdGggbm9ybWFsaXplZCBzZWFyY2hcbiAgICAgIGlmIChub3JtYWxpemVkICYmIHF1ZXJ5U2NoZW1hICE9IG51bGwpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgcXVlcnk6IHF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgIHF1ZXJ5U2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICAgIGxldCBuZXh0U2VhcmNoU3RyID0gbm9ybWFsaXplZFNlYXJjaDtcbiAgICAgICAgICBpZiAoIW5leHRTZWFyY2hTdHIuc3RhcnRzV2l0aCgnPycpICYmIG5leHRTZWFyY2hTdHIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbmV4dFNlYXJjaFN0ciA9IGA/JHtuZXh0U2VhcmNoU3RyfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVtaXRIaXN0b3J5RXZlbnQoXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICAgIHNlYXJjaDogbmV4dFNlYXJjaFN0cixcbiAgICAgICAgICAgICAgaGFzaDogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyByZWFzb246ICdydW50aW1lLXBhZ2UtY2xhbXAnIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBydW50aW1lTm9ybWFsaXplQ29udGV4dDogSGlzdG9yeURlYnVnQ29udGV4dCA9IHtcbiAgICAgICAgICAgIG9yaWdpbjogJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICB0cmlnZ2VyOiAnbm9ybWFsaXplJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgIHNlYXJjaDogbmV4dFNlYXJjaFN0cixcbiAgICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICAgICAgZGVidWdDb250ZXh0OiBydW50aW1lTm9ybWFsaXplQ29udGV4dCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47IC8vIGVhcmx5OiBzdWJzZXF1ZW50IHNldCB3aWxsIHRyaWdnZXIgcmVydW5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY3VycmVudCBlbnRyeSBhbmQgbm90aWZ5IGFsbCBzdWJzY3JpYmVyc1xuICAgICAgY3VycmVudEVudHJ5ID0gbmV4dEVudHJ5O1xuICAgICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgY2FsbGJhY2sobmV4dEVudHJ5KTtcbiAgICAgIH0pO1xuICAgICAgbm90aWZ5RW50cnkobmV4dEVudHJ5KTtcbiAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdzbmFwc2hvdCcsXG4gICAgICAgIHNvdXJjZTogb3JpZ2luLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblBheWxvYWQsXG4gICAgICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgobmV4dEVudHJ5KSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICk7XG5cbiAgLyoqIE5vcm1hbGl6ZXMgdXNlci1wcm92aWRlZCBwcmVsb2FkIHRhcmdldHMgaW50byBjb25zaXN0ZW50IHN0cnVjdHVyZXMuICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0OiBQcmVsb2FkVGFyZ2V0KToge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICB9IHtcbiAgICBsZXQgbm9ybWFsaXplZFBhdGhuYW1lID0gaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBpZiAodHlwZW9mIHRhcmdldC5wYXRobmFtZSA9PT0gJ3N0cmluZycgJiYgdGFyZ2V0LnBhdGhuYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRobmFtZSA9IHRhcmdldC5wYXRobmFtZTtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZFNlYXJjaCA9ICcnO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0LnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5vcm1hbGl6ZWRTZWFyY2ggPSB0YXJnZXQuc2VhcmNoO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkU291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ3Byb2dyYW1tYXRpYyc7XG4gICAgY29uc3QgbWFwcGVkU291cmNlID0gbWFwT3JpZ2luKHRhcmdldC5zb3VyY2UpO1xuICAgIGlmIChtYXBwZWRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybWFsaXplZFNvdXJjZSA9IG1hcHBlZFNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkUGF0aG5hbWUsXG4gICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICBzb3VyY2U6IG5vcm1hbGl6ZWRTb3VyY2UsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnksIGFueSwgYW55LCBUQ29udGV4dD4gJlxuICAgIFByZXBhcmVkQWNjZXNzPEFueVJvdXRlPFRDb250ZXh0PltdPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxBbnlSb3V0ZTxUQ29udGV4dD5bXT47XG4gICAgfSA9IHtcbiAgICBoaXN0b3J5LFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50cnk7XG4gICAgfSxcbiAgICBwcmVsb2FkQ29kZSh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQcmVsb2FkVGFyZ2V0KHRhcmdldCk7XG4gICAgICBlbWl0UHJlbG9hZEV2ZW50KCdjb2RlJywgbm9ybWFsaXplZC5wYXRobmFtZSwgbm9ybWFsaXplZC5zb3VyY2UpO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJlbG9hZFRhcmdldCh0YXJnZXQpO1xuICAgICAgZW1pdFByZWxvYWRFdmVudCgnZnVsbCcsIG5vcm1hbGl6ZWQucGF0aG5hbWUsIG5vcm1hbGl6ZWQuc291cmNlKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25TbmFwc2hvdDogUm91dGVyTG9jYXRpb25TbmFwc2hvdCA9IHtcbiAgICAgICAgcGF0aG5hbWU6IG5vcm1hbGl6ZWQucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgfTtcbiAgICAgIGxldCBpbnN0cnVtZW50YXRpb246XG4gICAgICAgIHwge1xuICAgICAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgICAgICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKSB7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbiA9IHtcbiAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc291cmNlOiBub3JtYWxpemVkLnNvdXJjZSxcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25TbmFwc2hvdCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZWxvYWRDb250ZXh0ID0gcmVzb2x2ZUNvbnRleHQoKTtcbiAgICAgIHByZXBhcmVNYXRjaChtYXRjaGVzLCB1bmRlZmluZWQsIGluc3RydW1lbnRhdGlvbiwgcHJlbG9hZENvbnRleHQpO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBuZXh0SWQgKz0gMTtcbiAgICAgIGNvbnN0IGlkID0gbmV4dElkO1xuICAgICAgLyoqIFJlbW92ZXMgdGhlIHN1YnNjcmliZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHZpYSBzdWJzY3JpYmUuICovXG4gICAgICBmdW5jdGlvbiBkaXNwb3NlQ2FsbGJhY2soKSB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgICBzdWJzY3JpYmVycy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBkaXNwb3NlQ2FsbGJhY2s7XG4gICAgfSxcbiAgICBuYXZpZ2F0ZSh7IHBhdGhuYW1lLCBxdWVyeSwgZmlsdGVyczogbmF2RmlsdGVycywgcmVwbGFjZSB9OiBhbnkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBjdXJyZW50RW50cnk7XG4gICAgICBsZXQgdGFyZ2V0UGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgIGlmICh0YXJnZXRQYXRobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRhcmdldFBhdGhuYW1lID0gY3VycmVudC5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlc3RTY2hlbWE6IGFueTtcbiAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUm91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxhc3RSb3V0ZSA9IGRlc3RpbmF0aW9uUm91dGU/LnJvdXRlLnJvdXRlcy5hdCgtMSkgYXNcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBxdWVyeVNjaGVtYT86IHVua25vd247XG4gICAgICAgICAgfVxuICAgICAgICB8IG51bGxcbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobGFzdFJvdXRlICE9IG51bGwpIHtcbiAgICAgICAgZGVzdFNjaGVtYSA9IGxhc3RSb3V0ZS5xdWVyeVNjaGVtYTtcbiAgICAgIH1cbiAgICAgIGRlc3RTY2hlbWEgPz89IGN1cnJlbnQuYWN0aXZlUXVlcnlTY2hlbWE7XG5cbiAgICAgIGNvbnN0IHR5cGVkTmF2RmlsdGVycyA9IG5hdkZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBoYXNTY2hlbWEgPSBkZXN0U2NoZW1hICE9IG51bGw7XG4gICAgICBjb25zdCB1c2VRdWVyeUFzRmlsdGVycyA9XG4gICAgICAgIHR5cGVkTmF2RmlsdGVycyA9PSBudWxsICYmXG4gICAgICAgIGhhc1NjaGVtYSAmJlxuICAgICAgICBxdWVyeSAhPSBudWxsICYmXG4gICAgICAgIGxvb2tzTGlrZUZpbHRlcnMocXVlcnkpO1xuICAgICAgbGV0IGZpbHRlcnNJbnB1dCA9IHR5cGVkTmF2RmlsdGVycztcbiAgICAgIGlmIChmaWx0ZXJzSW5wdXQgPT0gbnVsbCkge1xuICAgICAgICBpZiAodXNlUXVlcnlBc0ZpbHRlcnMpIHtcbiAgICAgICAgICBmaWx0ZXJzSW5wdXQgPSBxdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWx0ZXJzSW5wdXQgPSBjdXJyZW50LmZpbHRlcnM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCByYXdRdWVyeUlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh1c2VRdWVyeUFzRmlsdGVycykge1xuICAgICAgICByYXdRdWVyeUlucHV0ID0gY3VycmVudC5xdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhd1F1ZXJ5SW5wdXQgPSAocXVlcnkgPz8gY3VycmVudC5xdWVyeSkgYXNcbiAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgZmlsdGVyczogZmlsdGVyc0lucHV0LFxuICAgICAgICBxdWVyeTogcmF3UXVlcnlJbnB1dCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IGRlc3RTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0geyBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsIHNlYXJjaCwgaGFzaDogJycgfTtcbiAgICAgIGNvbnN0IG9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdwcm9ncmFtbWF0aWMnO1xuICAgICAgY29uc3QgZGVidWdDb250ZXh0OiBIaXN0b3J5RGVidWdDb250ZXh0ID0ge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHRyaWdnZXI6ICdwcm9ncmFtbWF0aWMnLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlcGxhY2UgPT09IHRydWUpIHtcbiAgICAgICAgZW1pdEhpc3RvcnlFdmVudCgncmVwbGFjZScsIG9yaWdpbiwgbG9jYXRpb25PYmosIHtcbiAgICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICAuLi5sb2NhdGlvbk9iaixcbiAgICAgICAgICBkZWJ1Z0NvbnRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdEhpc3RvcnlFdmVudCgncHVzaCcsIG9yaWdpbiwgbG9jYXRpb25PYmosIHtcbiAgICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3RvcnkucHVzaCh7XG4gICAgICAgICAgLi4ubG9jYXRpb25PYmosXG4gICAgICAgICAgZGVidWdDb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFByZXBhcmVkKHBhdGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gY3VycmVudEVudHJ5O1xuICAgICAgICBmb3IgKGNvbnN0IHByZXBhcmVkUm91dGUgb2YgZW50cnkucHJlcGFyZWRNYXRjaC5yb3V0ZXMpIHtcbiAgICAgICAgICBpZiAocHJlcGFyZWRSb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZWRSb3V0ZS5wcmVwYXJlZCBhcyBhbnk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIC8qKiBSZWxlYXNlcyByb3V0ZXIgcmVzb3VyY2VzIGFuZCBkZXRhY2hlcyBhbGwgaW5zdHJ1bWVudGF0aW9ucy4gKi9cbiAgZnVuY3Rpb24gY2xlYW51cCgpOiB2b2lkIHtcbiAgICBkaXNwb3NlSGlzdG9yeSgpO1xuICAgIHN1YnNjcmliZXJzLmNsZWFyKCk7XG4gICAgcmVnaXN0cnkuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUmV0dXJuIGJvdGggdGhlIGNvbnRleHQgb2JqZWN0IGFuZCBhIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuIHsgY29udGV4dCwgY2xlYW51cCB9O1xufVxuIl19
|
package/lib/esm/tools.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import { type PrepareResult, type PreparedMatch, type Route, type RouterMatchedR
|
|
|
3
3
|
import type { RouterPrepareEvent, RouterNavigationSource, RouterLocationSnapshot } from './instrumentation/Instrumentation.js';
|
|
4
4
|
import type { FlatRoute } from './builder.js';
|
|
5
5
|
export declare function getMatchedRoute<TParams extends ParamData>(routes: FlatRoute<TParams>[], location: Location): RouterMatchedRoute<TParams> | null;
|
|
6
|
-
export declare function prepareMatch<TParams extends ParamData>(match: RouterMatchedRoute<TParams> | null, query?: Record<string, unknown>, instrumentation?: {
|
|
6
|
+
export declare function prepareMatch<TParams extends ParamData, TContext = unknown>(match: RouterMatchedRoute<TParams> | null, query?: Record<string, unknown>, instrumentation?: {
|
|
7
7
|
emit: (event: RouterPrepareEvent) => void;
|
|
8
8
|
source: RouterNavigationSource;
|
|
9
9
|
location: RouterLocationSnapshot;
|
|
10
|
-
}): PreparedMatch<TParams>;
|
|
11
|
-
export declare function r<TPrepared extends PrepareResult = PrepareResult, TVariables extends ParamData = ParamData, TQuery extends Record<string, unknown> = Record<string, unknown>>(route: Route<TPrepared, TVariables, TQuery>): Route<TPrepared, TVariables, TQuery>;
|
|
10
|
+
}, context?: TContext): PreparedMatch<TParams>;
|
|
11
|
+
export declare function r<TContext = unknown, TPrepared extends PrepareResult = PrepareResult, TVariables extends ParamData = ParamData, TQuery extends Record<string, unknown> = Record<string, unknown>>(route: Route<TContext, TPrepared, TVariables, TQuery>): Route<TContext, TPrepared, TVariables, TQuery>;
|
|
12
12
|
//# sourceMappingURL=tools.d.ts.map
|