@worktif/runtime 0.3.0-edge.0

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.
Files changed (68) hide show
  1. package/LICENSE +101 -0
  2. package/README.md +495 -0
  3. package/out/dist/bin/index.js +212 -0
  4. package/out/dist/bin/purenow.js +218 -0
  5. package/out/dist/bin/templates/runtime-web/cdk/.gitignore.template +25 -0
  6. package/out/dist/bin/templates/runtime-web/cdk/README.md.template +267 -0
  7. package/out/dist/bin/templates/runtime-web/cdk/bin/app.ts.template +173 -0
  8. package/out/dist/bin/templates/runtime-web/cdk/cdk.json.template +79 -0
  9. package/out/dist/bin/templates/runtime-web/cdk/package.json.template +28 -0
  10. package/out/dist/bin/templates/runtime-web/cdk/tsconfig.json.template +38 -0
  11. package/out/dist/bin/templates/runtime-web/purenow-basic/.env.example +15 -0
  12. package/out/dist/bin/templates/runtime-web/purenow-basic/README.md +118 -0
  13. package/out/dist/bin/templates/runtime-web/purenow-basic/gitignore.template +64 -0
  14. package/out/dist/bin/templates/runtime-web/purenow-basic/package.json +34 -0
  15. package/out/dist/bin/templates/runtime-web/purenow-basic/purenow.config.ts +105 -0
  16. package/out/dist/bin/templates/runtime-web/purenow-basic/src/app.tsx +35 -0
  17. package/out/dist/bin/templates/runtime-web/purenow-basic/src/handlers/users/index.ts +17 -0
  18. package/out/dist/bin/templates/runtime-web/purenow-basic/src/handlers/users/users.handlers.ts +222 -0
  19. package/out/dist/bin/templates/runtime-web/purenow-basic/src/index.tsx +71 -0
  20. package/out/dist/bin/templates/runtime-web/purenow-basic/src/pages/about-page.tsx +65 -0
  21. package/out/dist/bin/templates/runtime-web/purenow-basic/src/pages/home-page.tsx +55 -0
  22. package/out/dist/bin/templates/runtime-web/purenow-basic/src/pages/users-page.tsx +66 -0
  23. package/out/dist/bin/templates/runtime-web/purenow-basic/src/routes.tsx +61 -0
  24. package/out/dist/bin/templates/runtime-web/purenow-basic/src/services/index.ts +17 -0
  25. package/out/dist/bin/templates/runtime-web/purenow-basic/src/services/users.service.ts +133 -0
  26. package/out/dist/bin/templates/runtime-web/purenow-basic/src/ties/index.ts +17 -0
  27. package/out/dist/bin/templates/runtime-web/purenow-basic/src/ties/users.ties.ts +53 -0
  28. package/out/dist/bin/templates/runtime-web/purenow-basic/tsconfig.json +53 -0
  29. package/out/dist/lib/index.d.ts +4 -0
  30. package/out/dist/lib/index.js +4 -0
  31. package/out/dist/lib/lib/index.d.ts +3 -0
  32. package/out/dist/lib/lib/runtime-web/index.d.ts +17 -0
  33. package/out/dist/lib/lib/runtime-web/pipelines/browser-pipeline.d.ts +110 -0
  34. package/out/dist/lib/lib/runtime-web/pipelines/index.d.ts +2 -0
  35. package/out/dist/lib/lib/runtime-web/pureweb.d.ts +65 -0
  36. package/out/dist/lib/lib/runtime-web/types/config.types.d.ts +301 -0
  37. package/out/dist/lib/lib/runtime-web/types/http.types.d.ts +171 -0
  38. package/out/dist/lib/lib/runtime-web/types/index.d.ts +14 -0
  39. package/out/dist/lib/lib/runtime-web/types/infra.types.d.ts +225 -0
  40. package/out/dist/lib/lib/runtime-web/types/lambda.types.d.ts +175 -0
  41. package/out/dist/lib/lib/runtime-web/types/microservice.types.d.ts +70 -0
  42. package/out/dist/lib/lib/runtime-web/types/runtime.types.d.ts +55 -0
  43. package/out/dist/lib/utils/index.d.ts +2 -0
  44. package/out/dist/lib/utils/types/index.d.ts +3 -0
  45. package/out/dist/lib/utils/types/runtime.config.types.d.ts +71 -0
  46. package/out/dist/src/bin/index.d.ts +5 -0
  47. package/out/dist/src/bin/index.unix.d.ts +5 -0
  48. package/out/dist/src/bin/purenow-runtime-cli.d.ts +31 -0
  49. package/out/dist/src/bin/services/index.d.ts +8 -0
  50. package/out/dist/src/bin/services/purenow-runtime-deployment.strategy.d.ts +37 -0
  51. package/out/dist/src/bin/services/purenow-runtime-stacks-deploy.service.d.ts +58 -0
  52. package/out/dist/src/bin/services/purenow-runtime-stacks-deploy.service.types.d.ts +18 -0
  53. package/out/dist/src/bin/services/runtime-web-cli-extensions.d.ts +2 -0
  54. package/out/dist/src/bin/services/template.service.d.ts +53 -0
  55. package/out/dist/src/bin/services/utils/index.d.ts +2 -0
  56. package/out/dist/src/bin/utils/errors.d.ts +68 -0
  57. package/out/dist/src/lib/runtime-web/index.d.ts +17 -0
  58. package/out/dist/src/lib/runtime-web/pipelines/browser-pipeline.d.ts +110 -0
  59. package/out/dist/src/lib/runtime-web/pipelines/index.d.ts +2 -0
  60. package/out/dist/src/lib/runtime-web/pureweb.d.ts +65 -0
  61. package/out/dist/src/lib/runtime-web/types/config.types.d.ts +301 -0
  62. package/out/dist/src/lib/runtime-web/types/http.types.d.ts +171 -0
  63. package/out/dist/src/lib/runtime-web/types/index.d.ts +14 -0
  64. package/out/dist/src/lib/runtime-web/types/infra.types.d.ts +225 -0
  65. package/out/dist/src/lib/runtime-web/types/lambda.types.d.ts +175 -0
  66. package/out/dist/src/lib/runtime-web/types/microservice.types.d.ts +70 -0
  67. package/out/dist/src/lib/runtime-web/types/runtime.types.d.ts +55 -0
  68. package/package.json +133 -0
@@ -0,0 +1,65 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * Re-licensing notice:
11
+ * This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
12
+ * As of 2025-09-22, it is re-licensed under Elastic License 2.0.
13
+ *
14
+ * SPDX-License-Identifier: Elastic-2.0
15
+ */
16
+
17
+ import * as React from 'react';
18
+ import { Link } from 'react-router';
19
+
20
+ /**
21
+ * About page component demonstrating client-side navigation
22
+ */
23
+ const AboutPage: React.FC = () => {
24
+ return (
25
+ <div style={{ padding: '2rem', fontFamily: 'system-ui, sans-serif' }}>
26
+ <h1>About This Project</h1>
27
+
28
+ <div style={{ marginTop: '2rem' }}>
29
+ <h2>What is Purenow?</h2>
30
+ <p>
31
+ Purenow is a serverless framework for building React applications with
32
+ server-side rendering (SSR) on AWS Lambda. It provides a seamless developer
33
+ experience for creating high-performance web applications that scale automatically.
34
+ </p>
35
+ </div>
36
+
37
+ <div style={{ marginTop: '2rem' }}>
38
+ <h2>Architecture</h2>
39
+ <ul>
40
+ <li><strong>AWS Lambda:</strong> Handles SSR requests with minimal cold start times</li>
41
+ <li><strong>CloudFront:</strong> Global CDN for fast content delivery</li>
42
+ <li><strong>S3:</strong> Static asset hosting with intelligent caching</li>
43
+ <li><strong>API Gateway:</strong> Routes requests to Lambda handlers</li>
44
+ <li><strong>DynamoDB:</strong> Optional SEO metadata storage</li>
45
+ </ul>
46
+ </div>
47
+
48
+ <div style={{ marginTop: '2rem' }}>
49
+ <h2>Getting Started</h2>
50
+ <p>
51
+ To learn more about Purenow and how to build your own serverless React applications,
52
+ visit the documentation or explore the source code.
53
+ </p>
54
+ </div>
55
+
56
+ <div style={{ marginTop: '2rem' }}>
57
+ <Link to="/" style={{ color: '#0066cc', textDecoration: 'none' }}>
58
+ ← Back to Home
59
+ </Link>
60
+ </div>
61
+ </div>
62
+ );
63
+ };
64
+
65
+ export default AboutPage;
@@ -0,0 +1,55 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * Re-licensing notice:
11
+ * This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
12
+ * As of 2025-09-22, it is re-licensed under Elastic License 2.0.
13
+ *
14
+ * SPDX-License-Identifier: Elastic-2.0
15
+ */
16
+
17
+ import * as React from 'react';
18
+ import { Link } from 'react-router';
19
+
20
+ /**
21
+ * Home page component demonstrating Purenow SSR capabilities
22
+ */
23
+ const HomePage: React.FC = () => {
24
+ return (
25
+ <div style={{ padding: '2rem', fontFamily: 'system-ui, sans-serif' }}>
26
+ <h1>Welcome to Purenow</h1>
27
+ <p>
28
+ This is a serverless React SSR application powered by AWS Lambda and CloudFront.
29
+ </p>
30
+
31
+ <div style={{ marginTop: '2rem' }}>
32
+ <h2>Features</h2>
33
+ <ul>
34
+ <li>Server-Side Rendering (SSR) on AWS Lambda</li>
35
+ <li>React Router v7 integration</li>
36
+ <li>CloudFront CDN distribution</li>
37
+ <li>S3 caching with ETag support</li>
38
+ <li>TypeScript support</li>
39
+ </ul>
40
+ </div>
41
+
42
+ <div style={{ marginTop: '2rem' }}>
43
+ <Link to="/about" style={{ color: '#0066cc', textDecoration: 'none' }}>
44
+ Learn more about this project →
45
+ </Link>
46
+ </div>
47
+
48
+ <footer style={{ marginTop: '4rem', color: '#666', fontSize: '0.875rem' }}>
49
+ <p>Built with Purenow &copy; 2025</p>
50
+ </footer>
51
+ </div>
52
+ );
53
+ };
54
+
55
+ export default HomePage;
@@ -0,0 +1,66 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * Re-licensing notice:
11
+ * This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
12
+ * As of 2025-09-22, it is re-licensed under Elastic License 2.0.
13
+ *
14
+ * SPDX-License-Identifier: Elastic-2.0
15
+ */
16
+
17
+ import * as React from 'react';
18
+ import { Link } from 'react-router';
19
+
20
+ /**
21
+ * About page component demonstrating client-side navigation
22
+ */
23
+ const UsersPage: React.FC = () => {
24
+ return (
25
+ <div style={{ padding: '2rem', fontFamily: 'system-ui, sans-serif' }}>
26
+ <h1>Users Page – Example</h1>
27
+
28
+ <div style={{ marginTop: '2rem' }}>
29
+ <h2>What is Purenow?</h2>
30
+ <p>
31
+ Purenow is a serverless framework for building React applications with
32
+ server-side rendering (SSR) on AWS Lambda. It provides a seamless developer
33
+ experience for creating high-performance web applications that scale automatically.
34
+ </p>
35
+ </div>
36
+
37
+ <div style={{ marginTop: '2rem' }}>
38
+ <p>Manage user accounts and profiles.</p>
39
+ <h2>Available Endpoints</h2>
40
+ <ul>
41
+ <li><strong>POST /api/users</strong> - Create a user</li>
42
+ <li><strong>GET /api/users/:id</strong> - Get a user</li>
43
+ <li><strong>PUT /api/users/:id</strong> - Update a user</li>
44
+ <li><strong>DELETE /api/users/:id</strong> - Delete a user</li>
45
+ </ul>
46
+ </div>
47
+
48
+
49
+ <div style={{ marginTop: '2rem' }}>
50
+ <h2>Getting Started</h2>
51
+ <p>
52
+ To learn more about Purenow and how to build your own serverless React applications,
53
+ visit the documentation or explore the source code.
54
+ </p>
55
+ </div>
56
+
57
+ <div style={{ marginTop: '2rem' }}>
58
+ <Link to="/" style={{ color: '#0066cc', textDecoration: 'none' }}>
59
+ ← Back to Home
60
+ </Link>
61
+ </div>
62
+ </div>
63
+ );
64
+ };
65
+
66
+ export default UsersPage;
@@ -0,0 +1,61 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * Re-licensing notice:
11
+ * This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
12
+ * As of 2025-09-22, it is re-licensed under Elastic License 2.0.
13
+ *
14
+ * SPDX-License-Identifier: Elastic-2.0
15
+ */
16
+
17
+ import * as React from 'react';
18
+ import { Outlet } from 'react-router';
19
+ import { PurenowHeadManager } from '@worktif/purenow';
20
+
21
+ import HomePage from './pages/HomePage';
22
+ import AboutPage from './pages/AboutPage';
23
+ import UsersPage from './pages/UsersPage';
24
+
25
+ /**
26
+ * Purenow routes definition for React Router v7.
27
+ *
28
+ * The root route provides a shared layout that mounts the PurenowHeadManager
29
+ * above the Outlet so SEO metadata are managed centrally for all child routes.
30
+ * Paths are constructed via Purenow's routePath helper to keep URLs consistent
31
+ * across different deployment stages (dev, staging, prod).
32
+ */
33
+ export const routes = [
34
+ {
35
+ path: '/',
36
+ id: 'root',
37
+ Component: () => (
38
+ <>
39
+ <PurenowHeadManager/>
40
+ <Outlet/>
41
+ </>
42
+ ),
43
+ children: [
44
+ {
45
+ path: '/',
46
+ id: 'home',
47
+ Component: HomePage,
48
+ },
49
+ {
50
+ path: '/about',
51
+ id: 'about',
52
+ Component: AboutPage,
53
+ },
54
+ {
55
+ id: '3',
56
+ path: '/users',
57
+ element: <UsersPage/>
58
+ },
59
+ ],
60
+ },
61
+ ];
@@ -0,0 +1,17 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: React Serverless <react-serverless>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * Re-licensing notice:
11
+ * This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
12
+ * As of 2025-09-15, it is re-licensed under Elastic License 2.0.
13
+ *
14
+ * SPDX-License-Identifier: Elastic-2.0
15
+ */
16
+
17
+ export * from './users.service';
@@ -0,0 +1,133 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * SPDX-License-Identifier: Elastic-2.0
11
+ */
12
+
13
+ /**
14
+ * User data structure
15
+ */
16
+ export interface User {
17
+ id: string;
18
+ email: string;
19
+ name: string;
20
+ createdAt: string;
21
+ updatedAt: string;
22
+ }
23
+
24
+ /**
25
+ * User creation input
26
+ */
27
+ export interface CreateUserInput {
28
+ email: string;
29
+ name: string;
30
+ password: string;
31
+ }
32
+
33
+ export interface PurenowServiceInterface {
34
+ }
35
+
36
+ /**
37
+ * Users Service
38
+ *
39
+ * Handles user management, profile operations, and user data.
40
+ * This service is registered as a singleton in the DI container.
41
+ */
42
+ export class UsersService implements PurenowServiceInterface {
43
+ /**
44
+ * Create a new user
45
+ *
46
+ * @param input - User creation data
47
+ * @returns Created user
48
+ */
49
+ async createUser(input: CreateUserInput): Promise<User> {
50
+ if (!input.email) {
51
+ throw new Error('Email is required');
52
+ }
53
+ if (!input.name) {
54
+ throw new Error('Name is required');
55
+ }
56
+ if (!input.password || input.password.length < 8) {
57
+ throw new Error('Password must be at least 8 characters');
58
+ }
59
+
60
+ const userId = `user_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
61
+ const now = new Date().toISOString();
62
+
63
+ return {
64
+ id: userId,
65
+ email: input.email,
66
+ name: input.name,
67
+ createdAt: now,
68
+ updatedAt: now,
69
+ };
70
+ }
71
+
72
+ /**
73
+ * Get user by ID
74
+ *
75
+ * @param userId - User identifier
76
+ * @returns User data or null if not found
77
+ */
78
+ async getUser(userId: string): Promise<User | null> {
79
+ if (!userId) {
80
+ throw new Error('User ID is required');
81
+ }
82
+
83
+ // Simulate user lookup (would query database in real implementation)
84
+ return {
85
+ id: userId,
86
+ email: 'user@example.com',
87
+ name: 'Example User',
88
+ createdAt: new Date().toISOString(),
89
+ updatedAt: new Date().toISOString(),
90
+ };
91
+ }
92
+
93
+ /**
94
+ * Update user profile
95
+ *
96
+ * @param userId - User identifier
97
+ * @param updates - Fields to update
98
+ * @returns Updated user
99
+ */
100
+ async updateUser(userId: string, updates: Partial<Pick<User, 'name' | 'email'>>): Promise<User> {
101
+ if (!userId) {
102
+ throw new Error('User ID is required');
103
+ }
104
+
105
+ const existingUser = await this.getUser(userId);
106
+ if (!existingUser) {
107
+ throw new Error('User not found');
108
+ }
109
+
110
+ return {
111
+ ...existingUser,
112
+ ...updates,
113
+ updatedAt: new Date().toISOString(),
114
+ };
115
+ }
116
+
117
+ /**
118
+ * Delete user
119
+ *
120
+ * @param userId - User identifier
121
+ * @returns Deletion result
122
+ */
123
+ async deleteUser(userId: string): Promise<{ success: boolean; userId: string }> {
124
+ if (!userId) {
125
+ throw new Error('User ID is required');
126
+ }
127
+
128
+ return {
129
+ success: true,
130
+ userId,
131
+ };
132
+ }
133
+ }
@@ -0,0 +1,17 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: React Serverless <react-serverless>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * Re-licensing notice:
11
+ * This file was previously distributed under the Business Source License 1.1 (BUSL-1.1).
12
+ * As of 2025-09-15, it is re-licensed under Elastic License 2.0.
13
+ *
14
+ * SPDX-License-Identifier: Elastic-2.0
15
+ */
16
+
17
+ export * from './users.ties';
@@ -0,0 +1,53 @@
1
+ /*
2
+ * Elastic License 2.0
3
+ * Copyright (C) 2025–present Raman Marozau, Work Target Insight Function. All rights reserved.
4
+ * Contact: raman@worktif.com
5
+ *
6
+ * This file is part of the Licensed Work: worktif.purenow.cdk <worktif_purenow_cdk>.
7
+ * Use of this software is governed by the Elastic License 2.0; see the LICENSE file
8
+ * or https://www.elastic.co/licensing/elastic-license for details.
9
+ *
10
+ * SPDX-License-Identifier: Elastic-2.0
11
+ */
12
+
13
+ import type { PureContainer } from '@worktif/utils';
14
+
15
+ import { UsersService } from '@bin/templates/runtime-web/purenow-basic/src/services/users.service';
16
+
17
+ /**
18
+ * Users configuration
19
+ */
20
+ export interface UsersConfig {
21
+ sessionTimeout: number;
22
+ maxLoginAttempts: number;
23
+ }
24
+
25
+ /**
26
+ * Users Ties Class
27
+ *
28
+ * Registers all user-related services and configuration in the DI container.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const definition: MicroserviceDefinition = {
33
+ * ties: [UsersTies],
34
+ * lambdas: [createUserHandler, getUserHandler]
35
+ * };
36
+ * ```
37
+ */
38
+ export class UsersTies {
39
+ /**
40
+ * Register services and constants in the container
41
+ *
42
+ * @param container - PureContainer instance
43
+ */
44
+ register(container: PureContainer<string>): void {
45
+ // Register singleton services
46
+ container.tie({
47
+ ['usersService']: {
48
+ instance: UsersService,
49
+ dependencies: [],
50
+ },
51
+ });
52
+ }
53
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "commonjs",
5
+ "lib": [
6
+ "ES2020",
7
+ "dom",
8
+ "dom.iterable"
9
+ ],
10
+ "jsx": "react",
11
+ "sourceMap": true,
12
+ "declaration": true,
13
+ "outDir": "./out/dist",
14
+ "rootDir": "./",
15
+ "baseUrl": "./",
16
+ "strict": true,
17
+ "esModuleInterop": true,
18
+ "skipLibCheck": true,
19
+ "forceConsistentCasingInFileNames": true,
20
+ "resolveJsonModule": true,
21
+ "moduleResolution": "node16",
22
+ "allowSyntheticDefaultImports": true,
23
+ "experimentalDecorators": true,
24
+ "emitDecoratorMetadata": true,
25
+ "isolatedModules": false,
26
+ "downlevelIteration": true,
27
+ "allowJs": true,
28
+ "types": [
29
+ "node"
30
+ ],
31
+ "paths": {
32
+ "@core/*": [
33
+ "src/core/*"
34
+ ],
35
+ "@lib/*": [
36
+ "src/lib/*"
37
+ ],
38
+ "@utils/*": [
39
+ "src/utils/*"
40
+ ]
41
+ }
42
+ },
43
+ "include": [
44
+ "src/**/*.ts",
45
+ "src/**/*.tsx"
46
+ ],
47
+ "exclude": [
48
+ "node_modules",
49
+ "out",
50
+ "dist",
51
+ "build"
52
+ ]
53
+ }
@@ -0,0 +1,4 @@
1
+ export * from '@worktif/purenow';
2
+ export * from './lib/runtime-web';
3
+ export * from './utils';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,4 @@
1
+ "use strict";var w=Object.create;var a=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var b=(t,r)=>{for(var e in r)a(t,e,{get:r[e],enumerable:!0})},m=(t,r,e,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of R(r))!h.call(t,n)&&n!==e&&a(t,n,{get:()=>r[n],enumerable:!(o=y(r,n))||o.enumerable});return t};var E=(t,r,e)=>(e=t!=null?w(v(t)):{},m(r||!t||!t.__esModule?a(e,"default",{value:t,enumerable:!0}):e,t)),C=t=>m(a({},"__esModule",{value:!0}),t);var S={};b(S,{BrowserPipeline:()=>s,ConfigValidationError:()=>d,EnvironmentDetectionError:()=>p,isValidServiceName:()=>g,pureweb:()=>N});module.exports=C(S);var c=E(require("react")),l=require("react-dom/client"),u=require("react-router"),s=class{async execute(r,e){try{console.info("Starting browser pipeline execution",{serviceName:r.serviceName,stage:r.stage,url:e.metadata.url,userAgent:e.metadata.userAgent,viewport:e.metadata.viewport});let o=this.createBrowserRouter(r),n=this.createAppElement(r),f=c.createElement(u.RouterProvider,{router:o},n);this.hydrateApplication(f),this.setupHttpClient(r),console.info("Browser pipeline execution completed successfully",{serviceName:r.serviceName,stage:r.stage})}catch(o){throw console.error("Browser pipeline execution failed",{serviceName:r.serviceName,stage:r.stage,error:o instanceof Error?o.message:String(o),stack:o instanceof Error?o.stack:void 0}),o}}createBrowserRouter(r){console.debug("Creating browser router",{routeCount:r.router.getRoutes().length});let e=r.router.getRoutes(),o=(0,u.createBrowserRouter)(e);return console.debug("Browser router created successfully",{routeCount:e.length}),o}createAppElement(r){console.debug("Creating app element from factory");try{let e=r.app({router:r.router});if(!c.isValidElement(e))throw new Error("App factory must return a valid React element");return console.debug("App element created successfully"),e}catch(e){throw console.error("Failed to create app element",{error:e instanceof Error?e.message:String(e)}),new Error(`Failed to create app element: ${e instanceof Error?e.message:String(e)}`)}}hydrateApplication(r){console.debug("Starting React hydration");try{let e=document.getElementById("root");if(!e)throw new Error('Root container element not found. Expected element with id="root"');(0,l.hydrateRoot)(e,r),console.info("React hydration completed successfully")}catch(e){throw console.error("React hydration failed",{error:e instanceof Error?e.message:String(e)}),new Error(`React hydration failed: ${e instanceof Error?e.message:String(e)}`)}}setupHttpClient(r){console.debug("Setting up HTTP client for Lambda endpoints");try{let e=this.getApiBaseUrl(r.stage);typeof window<"u"&&(window.__PURENOW_CONFIG__={serviceName:r.serviceName,stage:r.stage,apiBaseUrl:e}),console.info("HTTP client configured successfully",{baseUrl:e,stage:r.stage})}catch(e){throw console.error("Failed to setup HTTP client",{error:e instanceof Error?e.message:String(e)}),new Error(`Failed to setup HTTP client: ${e instanceof Error?e.message:String(e)}`)}}getApiBaseUrl(r){return`${typeof window<"u"?window.location.origin:""}/api`}};function g(t){return/^[a-zA-Z][a-zA-Z0-9-]{0,127}$/.test(t)}var i=require("@worktif/purenow"),d=class extends Error{constructor(r){super(`Configuration validation failed:
2
+ ${r.map(e=>` - ${e}`).join(`
3
+ `)}`),this.name="ConfigValidationError",this.errors=r,Error.captureStackTrace(this,this.constructor)}},p=class extends Error{constructor(r){super(r),this.name="EnvironmentDetectionError",Error.captureStackTrace(this,this.constructor)}};function T(){return typeof window<"u"?"browser":typeof process<"u"&&process.env?.AWS_LAMBDA_FUNCTION_NAME?"lambda":(typeof process<"u"&&(process.env?.PURENOW_MODE==="cdk"||process.env?.CDK_DEFAULT_ACCOUNT||process.env?.CDK_DEFAULT_REGION||process.argv?.some(t=>t.includes("cdk")||t.includes("synth"))),"cdk")}function x(t,r){let e=[];return(!t.serviceName||!/^[a-zA-Z][a-zA-Z0-9-]{0,127}$/.test(t.serviceName))&&e.push("serviceName must start with a letter, contain only alphanumeric characters and hyphens, and be max 128 characters"),["dev","staging","prod"].includes(t.stage)||e.push("stage must be one of: dev, staging, prod"),r&&!t.infra&&e.push("infra configuration is required in CDK context"),{valid:e.length===0,errors:e}}function N(t){let r=T(),o=x(t,r==="cdk");if(!o.valid)throw new d(o.errors);switch(r){case"browser":{(0,i.purenow)({app:({router:n})=>t.app({router:n}),router:(0,i.purenowRouter)({router:t.router.getRoutes(),defaults:t.router.defaults}),config:{serviceName:t.serviceName,stage:t.stage}});break}case"lambda":case"cdk":{console.log("[Runtime Target] Server-side pipeline detected (%s)",r),(0,i.purenow)({app:({router:n})=>t.app({router:n}),router:(0,i.purenowRouter)({router:t.router.getRoutes(),defaults:t.router.defaults}),config:{serviceName:t.serviceName,stage:t.stage}});break}default:console.log("[Runtime Target] Unknown environment type: %s",r);break}}0&&(module.exports={BrowserPipeline,ConfigValidationError,EnvironmentDetectionError,isValidServiceName,pureweb});
4
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2xpYi9ydW50aW1lLXdlYi9pbmRleC50cyIsICIuLi8uLi8uLi9zcmMvbGliL3J1bnRpbWUtd2ViL3BpcGVsaW5lcy9icm93c2VyLXBpcGVsaW5lLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS13ZWIvdHlwZXMvY29uZmlnLnR5cGVzLnRzIiwgIi4uLy4uLy4uL3NyYy9saWIvcnVudGltZS13ZWIvcHVyZXdlYi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zaW5nIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuLyoqXG4gKiBSdW50aW1lIFdlYiBDb3JlIC0gTGlicmFyeSAoSXNvbW9ycGhpYy9Ccm93c2VyKVxuICpcbiAqICoqQVJDSElURUNUVVJFIE5PVEUqKjogVGhpcyBtb2R1bGUgY29udGFpbnMgYnJvd3Nlci1zYWZlIGNvZGUgdGhhdDpcbiAqIC0gUnVucyBpbiBicm93c2VyIGVudmlyb25tZW50IChjbGllbnQtc2lkZSlcbiAqIC0gVXNlcyBicm93c2VyIEFQSXMgKHdpbmRvdywgZG9jdW1lbnQsIGh5ZHJhdGVSb290KVxuICogLSBNdXN0IGJlIGlzb21vcnBoaWMtc2FmZSAobm8gTm9kZS5qcyBBUElzKVxuICogLSBORVZFUiBydW5zIGluIExhbWJkYVxuICogLSBCdW5kbGVkIGludG8gYnJvd3NlciBidWlsZHNcbiAqXG4gKiAqKkV4cG9ydHMqKjpcbiAqIC0gQnJvd3NlclBpcGVsaW5lOiBDbGllbnQtc2lkZSBSZWFjdCBoeWRyYXRpb24gYW5kIHJvdXRpbmdcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vcHVyZXdlYic7XG4iLCAiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zaW5nIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaHlkcmF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuaW1wb3J0IHR5cGUgeyBCcm93c2VyTWV0YWRhdGEsIFJ1bnRpbWVXZWJDb25maWcgfSBmcm9tICdAbGliL3J1bnRpbWUtd2ViL3R5cGVzJztcblxuLy8gaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnQHdvcmt0aWYvdXRpbHMnO1xuXG4vKipcbiAqIEJyb3dzZXIgZXhlY3V0aW9uIHBpcGVsaW5lIGZvciBSdW50aW1lIFRhcmdldCBDb3JlLlxuICpcbiAqIEB0b2RvOiBvcmRpbmF0ZSB0aGlzIGNsYXNzIHRvIGluZnJhIG9yIGNvcmUgY2F1c2Ugd2UgaGF2ZSBOb2RlLmpzIHJlc3BvbnNpYmlsaXR5XG4gKiAgICAgIC0tLS0gT1IgXHUyMDEzPiBSRU1PVkUgTE9HR0VSXG4gKlxuICogKipBUkNISVRFQ1RVUkUgTk9URSoqOiBUaGlzIGZpbGUgaXMgaW4gYHNyYy9saWIvYCBiZWNhdXNlIGl0OlxuICogLSBVc2VzIGJyb3dzZXItb25seSBBUElzICh3aW5kb3csIGRvY3VtZW50LCBoeWRyYXRlUm9vdClcbiAqIC0gUnVucyBPTkxZIGluIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqIC0gTXVzdCBiZSBpc29tb3JwaGljLXNhZmUgKG5vIE5vZGUuanMgQVBJcylcbiAqIC0gTkVWRVIgcnVucyBpbiBMYW1iZGFcbiAqXG4gKiBIYW5kbGVzIGNsaWVudC1zaWRlIGh5ZHJhdGlvbiBvZiBSZWFjdCBhcHBsaWNhdGlvbnMgd2l0aCBwcmUtbG9hZGVkIGRhdGFcbiAqIGZyb20gc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBTZXRzIHVwIGNsaWVudC1zaWRlIHJvdXRpbmcgYW5kIEhUVFAgY2xpZW50XG4gKiBmb3IgcG9zdC1oeWRyYXRpb24gQVBJIGNhbGxzIHRvIExhbWJkYSBlbmRwb2ludHMuXG4gKlxuICogKipFeGVjdXRpb24gRmxvdyoqOlxuICogMS4gSHlkcmF0ZSBSZWFjdCBhcHAgd2l0aCBleGlzdGluZyBQdXJlbm93Um91dGVyXG4gKiAyLiBDYWxsIGNvbmZpZy5hcHAoeyByb3V0ZXIgfSkgdG8gZ2V0IFJlYWN0IGVsZW1lbnRcbiAqIDMuIEluaXRpYWxpemUgY2xpZW50LXNpZGUgbmF2aWdhdGlvblxuICogNC4gU2V0IHVwIEhUVFAgY2xpZW50IGZvciBMYW1iZGEgZW5kcG9pbnQgY2FsbHNcbiAqXG4gKiAqKlJlcXVpcmVtZW50cyoqOiBSRVEtMDYsIFJFUS0xMlxuICovXG5leHBvcnQgY2xhc3MgQnJvd3NlclBpcGVsaW5lIHtcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBsb2dnZXIoe1xuICAvLyAgIHNlcnZpY2VOYW1lOiAnQGxpYi9ydW50aW1lLXdlYi9waXBlbGluZXMvYnJvd3Nlci1waXBlbGluZScsXG4gIC8vIH0pO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGJyb3dzZXIgcGlwZWxpbmUgZm9yIGNsaWVudC1zaWRlIGh5ZHJhdGlvbi5cbiAgICpcbiAgICogSHlkcmF0ZXMgdGhlIFJlYWN0IGFwcGxpY2F0aW9uIHdpdGggcHJlLWxvYWRlZCBkYXRhIGZyb20gU1NSIGFuZCBzZXRzIHVwXG4gICAqIGNsaWVudC1zaWRlIHJvdXRpbmcuIFVzZXMgUmVhY3QgaHlkcmF0aW9uIChub3QgcmVuZGVyKSB0byBtYXRjaCB0aGVcbiAgICogc2VydmVyLXJlbmRlcmVkIEhUTUwgZXhhY3RseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZyAtIFB1cmVub3cgY29uZmlndXJhdGlvbiB3aXRoIGFwcCBmYWN0b3J5IGFuZCByb3V0ZXJcbiAgICogQHBhcmFtIGNvbnRleHQgLSBCcm93c2VyIGVudmlyb25tZW50IGNvbnRleHQgd2l0aCBtZXRhZGF0YVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBpcGVsaW5lID0gbmV3IEJyb3dzZXJQaXBlbGluZSgpO1xuICAgKiBhd2FpdCBwaXBlbGluZS5leGVjdXRlKGNvbmZpZywge1xuICAgKiAgIHR5cGU6ICdicm93c2VyJyxcbiAgICogICBtZXRhZGF0YToge1xuICAgKiAgICAgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgKiAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICogICAgIHZpZXdwb3J0OiB7IHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCwgaGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgfVxuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZShjb25maWc6IFJ1bnRpbWVXZWJDb25maWcsIGNvbnRleHQ6IHsgdHlwZTogJ2Jyb3dzZXInOyBtZXRhZGF0YTogQnJvd3Nlck1ldGFkYXRhIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKCdTdGFydGluZyBicm93c2VyIHBpcGVsaW5lIGV4ZWN1dGlvbicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgICAgdXJsOiBjb250ZXh0Lm1ldGFkYXRhLnVybCxcbiAgICAgICAgdXNlckFnZW50OiBjb250ZXh0Lm1ldGFkYXRhLnVzZXJBZ2VudCxcbiAgICAgICAgdmlld3BvcnQ6IGNvbnRleHQubWV0YWRhdGEudmlld3BvcnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gMS4gQ3JlYXRlIGJyb3dzZXIgcm91dGVyIGZyb20gUHVyZW5vd1JvdXRlclxuICAgICAgY29uc3QgYnJvd3NlclJvdXRlciA9IHRoaXMuY3JlYXRlQnJvd3NlclJvdXRlcihjb25maWcpO1xuXG4gICAgICAvLyAyLiBHZXQgUmVhY3QgZWxlbWVudCBmcm9tIGFwcCBmYWN0b3J5XG4gICAgICBjb25zdCBhcHBFbGVtZW50ID0gdGhpcy5jcmVhdGVBcHBFbGVtZW50KGNvbmZpZyk7XG5cbiAgICAgIC8vIDMuIENyZWF0ZSByb3V0ZXIgcHJvdmlkZXIgd2l0aCB0aGUgYXBwXG4gICAgICBjb25zdCByb3V0ZXJQcm92aWRlciA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyUHJvdmlkZXIsIHtcbiAgICAgICAgcm91dGVyOiBicm93c2VyUm91dGVyLFxuICAgICAgfSwgYXBwRWxlbWVudCk7XG5cbiAgICAgIC8vIDQuIEh5ZHJhdGUgdGhlIGFwcGxpY2F0aW9uICh1c2UgaHlkcmF0aW9uLCBub3QgcmVuZGVyKVxuICAgICAgdGhpcy5oeWRyYXRlQXBwbGljYXRpb24ocm91dGVyUHJvdmlkZXIpO1xuXG4gICAgICAvLyA1LiBTZXQgdXAgSFRUUCBjbGllbnQgZm9yIHBvc3QtaHlkcmF0aW9uIEFQSSBjYWxsc1xuICAgICAgdGhpcy5zZXR1cEh0dHBDbGllbnQoY29uZmlnKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdCcm93c2VyIHBpcGVsaW5lIGV4ZWN1dGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignQnJvd3NlciBwaXBlbGluZSBleGVjdXRpb24gZmFpbGVkJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJyb3dzZXIgcm91dGVyIGZyb20gUHVyZW5vd1JvdXRlciBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2VzIHRoZSBleGlzdGluZyBQdXJlbm93Um91dGVyIHRvIGdldCByb3V0ZXMgYW5kIGNyZWF0ZXMgYSBSZWFjdCBSb3V0ZXJcbiAgICogYnJvd3NlciByb3V0ZXIgZm9yIGNsaWVudC1zaWRlIG5hdmlnYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgQnJvd3NlciByb3V0ZXIgaW5zdGFuY2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQnJvd3NlclJvdXRlcihjb25maWc6IFJ1bnRpbWVXZWJDb25maWcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdDcmVhdGluZyBicm93c2VyIHJvdXRlcicsIHtcbiAgICAgIHJvdXRlQ291bnQ6IGNvbmZpZy5yb3V0ZXIuZ2V0Um91dGVzKCkubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgLy8gR2V0IHJvdXRlcyBmcm9tIFB1cmVub3dSb3V0ZXJcbiAgICBjb25zdCByb3V0ZXMgPSBjb25maWcucm91dGVyLmdldFJvdXRlcygpO1xuXG4gICAgLy8gQ3JlYXRlIGJyb3dzZXIgcm91dGVyIHdpdGggcm91dGVzIChjYXN0IHRvIFJvdXRlT2JqZWN0W10gZm9yIGNvbXBhdGliaWxpdHkpXG4gICAgY29uc3QgYnJvd3NlclJvdXRlciA9IGNyZWF0ZUJyb3dzZXJSb3V0ZXIocm91dGVzIGFzIGFueSk7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdCcm93c2VyIHJvdXRlciBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgIHJvdXRlQ291bnQ6IHJvdXRlcy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYnJvd3NlclJvdXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgUmVhY3QgZWxlbWVudCBmcm9tIGFwcCBmYWN0b3J5IGZ1bmN0aW9uLlxuICAgKlxuICAgKiBDYWxscyB0aGUgdXNlcidzIGFwcCBmYWN0b3J5IGZ1bmN0aW9uIHdpdGggdGhlIHJvdXRlciBkZXBlbmRlbmN5XG4gICAqIHRvIGdldCB0aGUgcm9vdCBSZWFjdCBlbGVtZW50IGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybnMgUm9vdCBSZWFjdCBlbGVtZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUFwcEVsZW1lbnQoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnKTogUmVhY3QuUmVhY3RFbGVtZW50IHtcbiAgICBjb25zb2xlLmRlYnVnKCdDcmVhdGluZyBhcHAgZWxlbWVudCBmcm9tIGZhY3RvcnknKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDYWxsIGFwcCBmYWN0b3J5IHdpdGggcm91dGVyIGRlcGVuZGVuY3lcbiAgICAgIGNvbnN0IGFwcEVsZW1lbnQgPSBjb25maWcuYXBwKHsgcm91dGVyOiBjb25maWcucm91dGVyIH0pO1xuXG4gICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGFwcEVsZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXBwIGZhY3RvcnkgbXVzdCByZXR1cm4gYSB2YWxpZCBSZWFjdCBlbGVtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUuZGVidWcoJ0FwcCBlbGVtZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICByZXR1cm4gYXBwRWxlbWVudDtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGFwcCBlbGVtZW50Jywge1xuICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgYXBwIGVsZW1lbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIeWRyYXRlIHRoZSBSZWFjdCBhcHBsaWNhdGlvbiBpbiB0aGUgYnJvd3Nlci5cbiAgICpcbiAgICogVXNlcyBSZWFjdCdzIGh5ZHJhdGVSb290IHRvIGh5ZHJhdGUgdGhlIHNlcnZlci1yZW5kZXJlZCBIVE1MIHdpdGhcbiAgICogdGhlIGNsaWVudC1zaWRlIFJlYWN0IGFwcGxpY2F0aW9uLiBUaGlzIGVuc3VyZXMgdGhlIGNsaWVudCBtYXRjaGVzXG4gICAqIHRoZSBzZXJ2ZXIgZXhhY3RseSB0byBhdm9pZCBoeWRyYXRpb24gbWlzbWF0Y2hlcy5cbiAgICpcbiAgICogQHBhcmFtIHJvdXRlclByb3ZpZGVyIC0gUm91dGVyIHByb3ZpZGVyIGVsZW1lbnQgdG8gaHlkcmF0ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBoeWRyYXRlQXBwbGljYXRpb24ocm91dGVyUHJvdmlkZXI6IFJlYWN0LlJlYWN0RWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1N0YXJ0aW5nIFJlYWN0IGh5ZHJhdGlvbicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCB0aGUgcm9vdCBjb250YWluZXIgZWxlbWVudFxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTtcbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBjb250YWluZXIgZWxlbWVudCBub3QgZm91bmQuIEV4cGVjdGVkIGVsZW1lbnQgd2l0aCBpZD1cInJvb3RcIicpO1xuICAgICAgfVxuXG4gICAgICAvLyBIeWRyYXRlIHRoZSBhcHBsaWNhdGlvbiAobm90IHJlbmRlciAtIG11c3QgbWF0Y2ggc2VydmVyIEhUTUwpXG4gICAgICBoeWRyYXRlUm9vdChjb250YWluZXIsIHJvdXRlclByb3ZpZGVyKTtcblxuICAgICAgY29uc29sZS5pbmZvKCdSZWFjdCBoeWRyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlYWN0IGh5ZHJhdGlvbiBmYWlsZWQnLCB7XG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVhY3QgaHlkcmF0aW9uIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBIVFRQIGNsaWVudCBmb3IgTGFtYmRhIGVuZHBvaW50IGNhbGxzLlxuICAgKlxuICAgKiBDb25maWd1cmVzIHRoZSBIVFRQIGNsaWVudCBmb3IgbWFraW5nIEFQSSBjYWxscyB0byBMYW1iZGEgZW5kcG9pbnRzXG4gICAqIGFmdGVyIGh5ZHJhdGlvbi4gVGhpcyBpcyB1c2VkIGZvciBwb3N0LWh5ZHJhdGlvbiBpbnRlcmFjdGlvbnMgdGhhdFxuICAgKiByZXF1aXJlIHNlcnZlci1zaWRlIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgLSBQdXJlbm93IGNvbmZpZ3VyYXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBIdHRwQ2xpZW50KGNvbmZpZzogUnVudGltZVdlYkNvbmZpZyk6IHZvaWQge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NldHRpbmcgdXAgSFRUUCBjbGllbnQgZm9yIExhbWJkYSBlbmRwb2ludHMnKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTZXQgdXAgYmFzZSBVUkwgZm9yIEFQSSBjYWxscyBiYXNlZCBvbiBzdGFnZVxuICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMuZ2V0QXBpQmFzZVVybChjb25maWcuc3RhZ2UpO1xuXG4gICAgICAvLyBTdG9yZSBjb25maWd1cmF0aW9uIGdsb2JhbGx5IGZvciB1c2UgYnkgZGF0YSBsb2FkZXJzXG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgKHdpbmRvdyBhcyBhbnkpLl9fUFVSRU5PV19DT05GSUdfXyA9IHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZTogY29uZmlnLnNlcnZpY2VOYW1lLFxuICAgICAgICAgIHN0YWdlOiBjb25maWcuc3RhZ2UsXG4gICAgICAgICAgYXBpQmFzZVVybDogYmFzZVVybCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5pbmZvKCdIVFRQIGNsaWVudCBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgIH0pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzZXR1cCBIVFRQIGNsaWVudCcsIHtcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0dXAgSFRUUCBjbGllbnQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVBJIGJhc2UgVVJMIGJhc2VkIG9uIGRlcGxveW1lbnQgc3RhZ2UuXG4gICAqXG4gICAqIERldGVybWluZXMgdGhlIGFwcHJvcHJpYXRlIEFQSSBiYXNlIFVSTCBmb3IgbWFraW5nIEhUVFAgcmVxdWVzdHNcbiAgICogdG8gTGFtYmRhIGVuZHBvaW50cyBiYXNlZCBvbiB0aGUgZGVwbG95bWVudCBzdGFnZS5cbiAgICpcbiAgICogQHBhcmFtIHN0YWdlIC0gRGVwbG95bWVudCBzdGFnZVxuICAgKiBAcmV0dXJucyBBUEkgYmFzZSBVUkxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0QXBpQmFzZVVybChzdGFnZTogJ2RldicgfCAnc3RhZ2luZycgfCAncHJvZCcpOiBzdHJpbmcge1xuICAgIC8vIEluIGJyb3dzZXIgY29udGV4dCwgQVBJIGNhbGxzIGdvIHRocm91Z2ggdGhlIHNhbWUgb3JpZ2luXG4gICAgLy8gVGhlIGFjdHVhbCBBUEkgR2F0ZXdheSBVUkwgaXMgaGFuZGxlZCBieSBDbG91ZEZyb250IHJvdXRpbmdcbiAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gOiAnJztcblxuICAgIC8vIEFQSSBlbmRwb2ludHMgYXJlIHR5cGljYWxseSB1bmRlciAvYXBpIHBhdGhcbiAgICByZXR1cm4gYCR7b3JpZ2lufS9hcGlgO1xuICB9XG59XG4iLCAiLypcbiAqIEVsYXN0aWMgTGljZW5zZSAyLjBcbiAqIENvcHlyaWdodCAoQykgMjAyNVx1MjAxM3ByZXNlbnQgUmFtYW4gTWFyb3phdSwgV29yayBUYXJnZXQgSW5zaWdodCBGdW5jdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIENvbnRhY3Q6IHJhbWFuQHdvcmt0aWYuY29tXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcms6IHdvcmt0aWYucHVyZW5vdy5jZGsgPHdvcmt0aWZfcHVyZW5vd19jZGs+LlxuICogVXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIEVsYXN0aWMgTGljZW5zZSAyLjA7IHNlZSB0aGUgTElDRU5TRSBmaWxlXG4gKiBvciBodHRwczovL3d3dy5lbGFzdGljLmNvL2xpY2Vuc2luZy9lbGFzdGljLWxpY2Vuc2UgZm9yIGRldGFpbHMuXG4gKlxuICogUmUtbGljZW5zaW5nIG5vdGljZTpcbiAqICAgVGhpcyBmaWxlIHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCdXNpbmVzcyBTb3VyY2UgTGljZW5zZSAxLjEgKEJVU0wtMS4xKS5cbiAqICAgQXMgb2YgMjAyNS0wOS0yMiwgaXQgaXMgcmUtbGljZW5zZWQgdW5kZXIgRWxhc3RpYyBMaWNlbnNlIDIuMC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRWxhc3RpYy0yLjBcbiAqL1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdHlwZSB7IEluZnJhT3B0aW9ucyB9IGZyb20gJy4vaW5mcmEudHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNaWNyb3NlcnZpY2VEZWZpbml0aW9uIH0gZnJvbSAnLi9taWNyb3NlcnZpY2UudHlwZXMnO1xuXG4vKipcbiAqIFB1cmVub3dSb3V0ZXIgaW50ZXJmYWNlIGZvciBydW50aW1lLXdlYiBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBEZWZpbmVzIHRoZSBlc3NlbnRpYWwgbWV0aG9kcyBuZWVkZWQgYnkgdGhlIHJ1bnRpbWUtd2ViIHBpcGVsaW5lcy5cbiAqIFRoaXMgaW50ZXJmYWNlIG1hdGNoZXMgdGhlIGFjdHVhbCBQdXJlbm93Um91dGVyIGNsYXNzIGZyb20gQGxpYi9yZWFjdC9wdXJlbm93LnJvdXRlci5cbiAqL1xuaW50ZXJmYWNlIFB1cmVub3dSb3V0ZXIge1xuICAvKipcbiAgICogR2V0IGFsbCByb3V0ZSBvYmplY3RzIGFzIGFuIGFycmF5LlxuICAgKiBVc2VkIGZvciBjcmVhdGluZyBicm93c2VyIHJvdXRlcnMgYW5kIFNTUiBzdGF0aWMgaGFuZGxlcnMuXG4gICAqL1xuICBnZXRSb3V0ZXMoKTogQXJyYXk8e1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgZWxlbWVudD86IHVua25vd247XG4gICAgbG9hZGVyPzogdW5rbm93bjtcbiAgICBjaGlsZHJlbj86IHVua25vd247XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgfT47XG5cbiAgLyoqXG4gICAqIEZpbmQgYSByb3V0ZSBieSBpdHMgSUQuXG4gICAqL1xuICBnZXRSb3V0ZUJ5SWQ/KGlkOiBzdHJpbmcpOiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBGaW5kIGEgcm91dGUgYnkgaXRzIHBhdGguXG4gICAqL1xuICBnZXRSb3V0ZUJ5UGF0aD8ocGF0aDogc3RyaW5nKTogdW5rbm93bjtcblxuICAvKipcbiAgICogR2V0IHRoZSByb3V0ZXMgYXJyYXkgKGdldHRlcikuXG4gICAqL1xuICByb3V0ZXM/OiBBcnJheTx1bmtub3duPjtcblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBkZWZhdWx0cz86IHVua25vd247XG59XG5cbi8qKlxuICogU3RhZ2UgZW52aXJvbm1lbnQgZm9yIGRlcGxveW1lbnQuXG4gKlxuICogLSBgZGV2YDogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRcbiAqIC0gYHN0YWdpbmdgOiBTdGFnaW5nL3ByZS1wcm9kdWN0aW9uIGVudmlyb25tZW50XG4gKiAtIGBwcm9kYDogUHJvZHVjdGlvbiBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgdHlwZSBTdGFnZSA9ICdkZXYnIHwgJ3N0YWdpbmcnIHwgJ3Byb2QnO1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBleHRyYWN0IHNlcnZpY2UgbmFtZXMgZnJvbSByZWdpc3RlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIFRoaXMgZW5hYmxlcyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbiBvZiBzZXJ2aWNlIG5hbWVzIGFuZCBwcm92aWRlc1xuICogdHlwZS1zYWZlIGFjY2VzcyB0byBzZXJ2aWNlIGlkZW50aWZpZXJzIHRocm91Z2hvdXQgdGhlIGZyYW1ld29yay5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIFNlcnZpY2VOYW1lczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4+ID0ga2V5b2YgVDtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gZ2VuZXJhdGUgTGFtYmRhIElEcyBmcm9tIHNlcnZpY2UgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBDb21iaW5lcyBzZXJ2aWNlIG5hbWVzIHdpdGggTGFtYmRhIElEcyB0byBjcmVhdGUgZnVsbHkgcXVhbGlmaWVkXG4gKiBMYW1iZGEgaWRlbnRpZmllcnMgZm9yIHR5cGUtc2FmZSBMYW1iZGEgcmVzb2x1dGlvbi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIG9iamVjdCB0eXBlXG4gKi9cbmV4cG9ydCB0eXBlIExhbWJkYUlkczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4+ID0ge1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXVsnbGFtYmRhcyddW251bWJlcl0gZXh0ZW5kcyB7IGlkOiBpbmZlciBJIH1cbiAgICA/IEkgZXh0ZW5kcyBzdHJpbmdcbiAgICAgID8gYCR7SyAmIHN0cmluZ30uJHtJfWBcbiAgICAgIDogbmV2ZXJcbiAgICA6IG5ldmVyO1xufVtrZXlvZiBUXTtcblxuLyoqXG4gKiBUeXBlIGNvbnN0cmFpbnQgZm9yIHZhbGlkIHNlcnZpY2UgbmFtZXMuXG4gKlxuICogRW5zdXJlcyBzZXJ2aWNlIG5hbWVzIGZvbGxvdyB0aGUgdmFsaWRhdGlvbiBwYXR0ZXJuOlxuICogLSBNdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgKGEteiwgQS1aKVxuICogLSBDYW4gY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1xuICogLSBNYXhpbXVtIGxlbmd0aDogMTI4IGNoYXJhY3RlcnNcbiAqXG4gKiBUaGlzIGlzIGEgYnJhbmRlZCB0eXBlIHRoYXQgcHJvdmlkZXMgY29tcGlsZS10aW1lIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbGlkU2VydmljZU5hbWUgPSBzdHJpbmcgJiB7IHJlYWRvbmx5IF9fYnJhbmQ6ICdWYWxpZFNlcnZpY2VOYW1lJyB9O1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gdmFsaWRhdGUgc2VydmljZSBuYW1lIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gc2VydmljZU5hbWUgLSBUaGUgc2VydmljZSBuYW1lIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyBUeXBlIHByZWRpY2F0ZSBpbmRpY2F0aW5nIGlmIHRoZSBzZXJ2aWNlIG5hbWUgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRTZXJ2aWNlTmFtZShzZXJ2aWNlTmFtZTogc3RyaW5nKTogc2VydmljZU5hbWUgaXMgVmFsaWRTZXJ2aWNlTmFtZSB7XG4gIHJldHVybiAvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvLnRlc3Qoc2VydmljZU5hbWUpO1xufVxuXG4vKipcbiAqIE1haW4gY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIFJ1bnRpbWUgVGFyZ2V0IENvcmUuXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSB1bmlmaWVkIGNvbmZpZ3VyYXRpb24gdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGV4ZWN1dGlvbiBjb250ZXh0czpcbiAqIC0gQnJvd3NlcjogSHlkcmF0ZXMgUmVhY3QgYXBwbGljYXRpb24gd2l0aCBjbGllbnQtc2lkZSByb3V0aW5nXG4gKiAtIExhbWJkYTogRXhlY3V0ZXMgc2VydmVyLXNpZGUgcmVuZGVyaW5nIGFuZCBidXNpbmVzcyBsb2dpY1xuICogLSBDREs6IFN5bnRoZXNpemVzIENsb3VkRm9ybWF0aW9uIGluZnJhc3RydWN0dXJlXG4gKlxuICogQHRlbXBsYXRlIFRSZWdpc3RlciAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIHR5cGUgZm9yIHR5cGUtc2FmZSBzZXJ2aWNlIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHB1cmVub3cgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L3J1bnRpbWUtd2ViJztcbiAqIGltcG9ydCB7IFB1cmVub3dSb3V0ZXIgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcbiAqXG4gKiBjb25zdCBjb25maWcgPSB7XG4gKiAgIGFwcDogKHsgcm91dGVyIH0pID0+IDxBcHAgcm91dGVyPXtyb3V0ZXJ9IC8+LFxuICogICByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHsgcm91dGVyOiByb3V0ZXMsIGRlZmF1bHRzOiB7fSB9KSxcbiAqICAgc2VydmljZU5hbWU6ICdteS1hcHAnLFxuICogICBzdGFnZTogJ2RldicsXG4gKiAgIHJlZ2lzdGVyOiB7XG4gKiAgICAgcGF5bWVudHM6IHtcbiAqICAgICAgIHRpZXM6IFtQYXltZW50c1RpZXNdLFxuICogICAgICAgbGFtYmRhczogW2NoYXJnZUhhbmRsZXIsIHJlZnVuZEhhbmRsZXJdXG4gKiAgICAgfSxcbiAqICAgICB1c2Vyczoge1xuICogICAgICAgdGllczogW1VzZXJzVGllc10sXG4gKiAgICAgICBsYW1iZGFzOiBbY3JlYXRlVXNlckhhbmRsZXIsIGdldFVzZXJIYW5kbGVyXVxuICogICAgIH1cbiAqICAgfSBhcyBjb25zdCwgIC8vIFVzZSAnYXMgY29uc3QnIGZvciBiZXR0ZXIgdHlwZSBpbmZlcmVuY2VcbiAqICAgaW5mcmE6IHtcbiAqICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAqICAgICBzdGFnZTogJ2RldicsXG4gKiAgICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gKiAgICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknXG4gKiAgIH1cbiAqIH0gc2F0aXNmaWVzIFB1cmVub3dDb25maWc7XG4gKlxuICogcHVyZW5vdyhjb25maWcpO1xuICogYGBgXG4gKlxuICogQHRvZG86IGFmdGVyIFJ1bnRpbWVXZWIgcmVwbyB3aWxsIGJlIHJlc29sdmVkLCBSdW50aW1lV2ViQ29uZmlnIE1VU1QgZXh0ZW5kIFB1cmVub3dDb25maWcgQ29yZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVXZWJDb25maWc8VFJlZ2lzdGVyIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgTWljcm9zZXJ2aWNlRGVmaW5pdGlvbj4gPSBSZWNvcmQ8c3RyaW5nLCBNaWNyb3NlcnZpY2VEZWZpbml0aW9uPj4ge1xuICAvKipcbiAgICogUmVhY3QgYXBwbGljYXRpb24gY29tcG9uZW50IGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqXG4gICAqIFJlY2VpdmVzIHRoZSByb3V0ZXIgaW5zdGFuY2UgYXMgYSBkZXBlbmRlbmN5IGFuZCByZXR1cm5zIHRoZSByb290IFJlYWN0IGVsZW1lbnQuXG4gICAqIFRoaXMgcGF0dGVybiBlbmFibGVzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9mIHRoZSByb3V0ZXIgaW50byB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyAtIERlcGVuZGVuY2llcyBvYmplY3QgY29udGFpbmluZyB0aGUgcm91dGVyXG4gICAqIEBwYXJhbSBkZXBzLnJvdXRlciAtIFB1cmVub3dSb3V0ZXIgaW5zdGFuY2UgZm9yIG5hdmlnYXRpb24gYW5kIHJvdXRpbmdcbiAgICogQHJldHVybnMgUm9vdCBSZWFjdCBlbGVtZW50IChSZWFjdC5SZWFjdEVsZW1lbnQpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXBwOiAoeyByb3V0ZXIgfSkgPT4gPEFwcCByb3V0ZXI9e3JvdXRlcn0gLz5cbiAgICogYGBgXG4gICAqL1xuICBhcHA6IChkZXBzOiB7IHJvdXRlcjogUHVyZW5vd1JvdXRlciB9KSA9PiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFB1cmVub3dSb3V0ZXIgaW5zdGFuY2UgZm9yIGFwcGxpY2F0aW9uIHJvdXRpbmcuXG4gICAqXG4gICAqIERlZmluZXMgYWxsIHJvdXRlcywgbG9hZGVycywgYW5kIG5hdmlnYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogVGhlIHJvdXRlciBpcyB1c2VkIGluIGJvdGggc2VydmVyLXNpZGUgcmVuZGVyaW5nIChMYW1iZGEpIGFuZCBjbGllbnQtc2lkZSBoeWRyYXRpb24gKGJyb3dzZXIpLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBQdXJlbm93Um91dGVyfSBmb3Igcm91dGVyIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiByb3V0ZXI6IG5ldyBQdXJlbm93Um91dGVyKHtcbiAgICogICByb3V0ZXI6IFtcbiAgICogICAgIHsgcGF0aDogJy8nLCBlbGVtZW50OiA8SG9tZSAvPiB9LFxuICAgKiAgICAgeyBwYXRoOiAnL2Fib3V0JywgZWxlbWVudDogPEFib3V0IC8+IH1cbiAgICogICBdLFxuICAgKiAgIGRlZmF1bHRzOiB7fVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHJvdXRlcjogUHVyZW5vd1JvdXRlcjtcblxuICAvKipcbiAgICogU2VydmljZSBuYW1lIGlkZW50aWZpZXIgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogVXNlZCBhcyBhIHByZWZpeCBmb3IgYWxsIEFXUyByZXNvdXJjZXMgKExhbWJkYSBmdW5jdGlvbnMsIEFQSSBHYXRld2F5LCBTMyBidWNrZXRzLCBldGMuKS5cbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHlvdXIgQVdTIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICpcbiAgICogKipWYWxpZGF0aW9uIFJ1bGVzKio6XG4gICAqIC0gTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIChhLXosIEEtWilcbiAgICogLSBDYW4gY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBhbmQgaHlwaGVuc1xuICAgKiAtIE1heGltdW0gbGVuZ3RoOiAxMjggY2hhcmFjdGVyc1xuICAgKiAtIFBhdHRlcm46IGAvXlthLXpBLVpdW2EtekEtWjAtOS1dezAsMTI3fSQvYFxuICAgKlxuICAgKiAqKkV4YW1wbGVzKio6XG4gICAqIC0gVmFsaWQ6IGBteS1hcHBgLCBgTXlBcHBgLCBgYXBwMTIzYCwgYG15LWFwcC12MmBcbiAgICogLSBJbnZhbGlkOiBgMTIzYXBwYCAoc3RhcnRzIHdpdGggbnVtYmVyKSwgYG15X2FwcGAgKHVuZGVyc2NvcmUpLCBgbXkgYXBwYCAoc3BhY2UpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc2VydmljZU5hbWU6ICdteS1hcHBsaWNhdGlvbidcbiAgICogYGBgXG4gICAqL1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IHN0YWdlL2Vudmlyb25tZW50LlxuICAgKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBlbnZpcm9ubWVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCByZXNvdXJjZSBuYW1pbmcuXG4gICAqIFVzZWQgdG8gY3JlYXRlIHNlcGFyYXRlIGluZnJhc3RydWN0dXJlIHN0YWNrcyBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50cy5cbiAgICpcbiAgICogKipWYWx1ZXMqKjpcbiAgICogLSBgZGV2YDogRGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgKGxvY2FsIHRlc3RpbmcsIHJhcGlkIGl0ZXJhdGlvbilcbiAgICogLSBgc3RhZ2luZ2A6IFN0YWdpbmcvcHJlLXByb2R1Y3Rpb24gZW52aXJvbm1lbnQgKFFBLCBpbnRlZ3JhdGlvbiB0ZXN0aW5nKVxuICAgKiAtIGBwcm9kYDogUHJvZHVjdGlvbiBlbnZpcm9ubWVudCAobGl2ZSB1c2VycylcbiAgICpcbiAgICogKipJbXBhY3QqKjpcbiAgICogLSBSZXNvdXJjZSBuYW1pbmc6IGB7c2VydmljZU5hbWV9LXtyZXNvdXJjZX0te3N0YWdlfWBcbiAgICogLSBFbnZpcm9ubWVudCB2YXJpYWJsZXM6IERpZmZlcmVudCBjb25maWdzIHBlciBzdGFnZVxuICAgKiAtIENhY2hlIFRUTDogU2hvcnRlciBpbiBkZXYsIGxvbmdlciBpbiBwcm9kXG4gICAqIC0gTG9nZ2luZzogTW9yZSB2ZXJib3NlIGluIGRldiwgc3RydWN0dXJlZCBpbiBwcm9kXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogc3RhZ2U6ICdkZXYnXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhZ2U6IFN0YWdlO1xuXG4gIC8qKlxuICAgKiBNaWNyb3NlcnZpY2UgcmVnaXN0cnkgKHJ1bnRpbWUtbGV2ZWwgY29uZmlndXJhdGlvbikuXG4gICAqXG4gICAqICoqUmVxdWlyZWQqKjogRGVmaW5lcyBhbGwgbWljcm9zZXJ2aWNlcywgdGhlaXIgREkgY29udGFpbmVycywgYW5kIExhbWJkYSBlbmRwb2ludHMuXG4gICAqICoqVXNlZCBpbiBhbGwgY29udGV4dHMqKjogQnJvd3NlciAoZm9yIHR5cGUgZ2VuZXJhdGlvbiksIExhbWJkYSAoZm9yIERJKSwgQ0RLIChmb3IgaW5mcmFzdHJ1Y3R1cmUpLlxuICAgKiAqKkFyY2hpdGVjdHVyZSoqOiBUaGlzIGlzIHJ1bnRpbWUgY29uZmlndXJhdGlvbiwgc2VwYXJhdGUgZnJvbSBpbmZyYXN0cnVjdHVyZSBjb25jZXJucy5cbiAgICpcbiAgICogRWFjaCBtaWNyb3NlcnZpY2UgZ2V0cyBpdHMgb3duIFB1cmVDb250YWluZXIgaW5zdGFuY2UgYnVpbHQgZnJvbSB0aGUgVGllcyBjbGFzc2VzLlxuICAgKiBMYW1iZGEgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYW5kIHdpcmVkIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24uXG4gICAqXG4gICAqICoqVHlwZSBTYWZldHkqKjogU2VydmljZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9tIG9iamVjdCBrZXlzLCBlbnN1cmluZyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbi5cbiAgICogKipObyBNYWdpYyBTdHJpbmdzKio6IEFsbCBzZXJ2aWNlIGlkZW50aWZpZXJzIGFyZSB0eXBlLXNhZmUgYW5kIGF1dG8tZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBNaWNyb3NlcnZpY2VEZWZpbml0aW9ufSBmb3IgbWljcm9zZXJ2aWNlIHN0cnVjdHVyZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHJlZ2lzdGVyOiB7XG4gICAqICAgcGF5bWVudHM6IHtcbiAgICogICAgIHRpZXM6IFtQYXltZW50c1RpZXMsIEJpbGxpbmdUaWVzXSxcbiAgICogICAgIGxhbWJkYXM6IFtjaGFyZ2VIYW5kbGVyLCByZWZ1bmRIYW5kbGVyLCB3ZWJob29rSGFuZGxlcl1cbiAgICogICB9LFxuICAgKiAgIHVzZXJzOiB7XG4gICAqICAgICB0aWVzOiBbVXNlcnNUaWVzLCBBdXRoVGllc10sXG4gICAqICAgICBsYW1iZGFzOiBbY3JlYXRlVXNlckhhbmRsZXIsIGdldFVzZXJIYW5kbGVyLCBsb2dpbkhhbmRsZXJdXG4gICAqICAgfVxuICAgKiB9IGFzIGNvbnN0ICAvLyBVc2UgJ2FzIGNvbnN0JyBmb3IgYmV0dGVyIHR5cGUgaW5mZXJlbmNlXG4gICAqIGBgYFxuICAgKi9cbiAgcmVnaXN0ZXI6IFRSZWdpc3RlcjtcblxuICAvKipcbiAgICogSW5mcmFzdHJ1Y3R1cmUgY29uZmlndXJhdGlvbiBmb3IgQ0RLIGRlcGxveW1lbnQuXG4gICAqXG4gICAqICoqT3B0aW9uYWwqKjogT25seSByZXF1aXJlZCB3aGVuIHJ1bm5pbmcgaW4gQ0RLIGNvbnRleHQgKHN5bnRoZXNpemluZyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMpLlxuICAgKiAqKk5vdCB1c2VkKio6IEluIGJyb3dzZXIgYW5kIExhbWJkYSBjb250ZXh0cyAocnVudGltZSBjb25maWd1cmF0aW9uIGlzIGluIHJlZ2lzdGVyKS5cbiAgICogKipQdXJlIGluZnJhc3RydWN0dXJlKio6IENvbnRhaW5zIG9ubHkgQVdTIHJlc291cmNlIGNvbmZpZ3VyYXRpb24sIG5vIGJ1c2luZXNzIGxvZ2ljLlxuICAgKlxuICAgKiBEZWZpbmVzOlxuICAgKiAtIEFXUyBhY2NvdW50IGFuZCByZWdpb25cbiAgICogLSBMYW1iZGEgY29uZmlndXJhdGlvbiAobWVtb3J5LCB0aW1lb3V0LCBWUEMpXG4gICAqIC0gQVBJIEdhdGV3YXkgb3IgTGFtYmRhIFVSTCBtb2RlXG4gICAqIC0gQ3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uXG4gICAqIC0gUmVhY3QgZW50cnkgcG9pbnQgZm9yIFNTUiBMYW1iZGFcbiAgICpcbiAgICogQHNlZSB7QGxpbmsgSW5mcmFPcHRpb25zfSBmb3IgZGV0YWlsZWQgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW5mcmE6IHtcbiAgICogICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICogICBzdGFnZTogJ2RldicsXG4gICAqICAgcmVhY3RFbnRyeTogJy4vc3JjL2luZGV4LnRzeCcsXG4gICAqICAgYXBpTW9kZTogJ2FwaUdhdGV3YXknLFxuICAgKiAgIGxhbWJkYU1lbW9yeVNpemU6IDEwMjQsXG4gICAqICAgbGFtYmRhVGltZW91dDogMzAsXG4gICAqICAgZG9tYWluOiB7XG4gICAqICAgICByb290RG9tYWluOiAnbXlhcHAuY29tJyxcbiAgICogICAgIHN1YmRvbWFpbjogJ2FwaSdcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBpbmZyYT86IEluZnJhT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUeXBlLXNhZmUgUHVyZW5vdyBjb25maWd1cmF0aW9uIHdpdGggaW5mZXJyZWQgc2VydmljZSBuYW1lcy5cbiAqXG4gKiBUaGlzIHR5cGUgcHJvdmlkZXMgUnVudGltZSBDb3JlIHR5cGUgc2FmZXR5IGJ5IGluZmVycmluZyBzZXJ2aWNlIG5hbWVzIGZyb20gdGhlIHJlZ2lzdGVyXG4gKiBjb25maWd1cmF0aW9uLCBlbmFibGluZyBjb21waWxlLXRpbWUgdmFsaWRhdGlvbiBvZiBzZXJ2aWNlIHJlZmVyZW5jZXMuXG4gKlxuICogQHRlbXBsYXRlIFRSZWdpc3RlciAtIFRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIHR5cGVcbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVNhZmVQdXJlbm93Q29uZmlnPFRSZWdpc3RlciBleHRlbmRzIFJlY29yZDxzdHJpbmcsIE1pY3Jvc2VydmljZURlZmluaXRpb24+PiA9XG4gIFJ1bnRpbWVXZWJDb25maWc8VFJlZ2lzdGVyPiAmIHtcbiAgLyoqXG4gICAqIFR5cGUtc2FmZSBzZXJ2aWNlIG5hbWVzIGRlcml2ZWQgZnJvbSByZWdpc3RlciBrZXlzLlxuICAgKiBBdmFpbGFibGUgYXQgY29tcGlsZS10aW1lIGZvciB0eXBlIGNoZWNraW5nIGFuZCBJREUgYXV0b2NvbXBsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzPzogU2VydmljZU5hbWVzPFRSZWdpc3Rlcj47XG5cbiAgLyoqXG4gICAqIFR5cGUtc2FmZSBMYW1iZGEgSURzIGRlcml2ZWQgZnJvbSByZWdpc3RlciBjb25maWd1cmF0aW9uLlxuICAgKiBBdmFpbGFibGUgYXQgY29tcGlsZS10aW1lIGZvciB0eXBlIGNoZWNraW5nIGFuZCBJREUgYXV0b2NvbXBsZXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhSWRzPzogTGFtYmRhSWRzPFRSZWdpc3Rlcj47XG59O1xuIiwgIi8qXG4gKiBFbGFzdGljIExpY2Vuc2UgMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiB3b3JrdGlmLnB1cmVub3cuY2RrIDx3b3JrdGlmX3B1cmVub3dfY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBFbGFzdGljIExpY2Vuc2UgMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuZWxhc3RpYy5jby9saWNlbnNpbmcvZWxhc3RpYy1saWNlbnNlIGZvciBkZXRhaWxzLlxuICpcbiAqIFJlLWxpY2Vuc2luZyBub3RpY2U6XG4gKiAgIFRoaXMgZmlsZSB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQnVzaW5lc3MgU291cmNlIExpY2Vuc2UgMS4xIChCVVNMLTEuMSkuXG4gKiAgIEFzIG9mIDIwMjUtMDktMjIsIGl0IGlzIHJlLWxpY2Vuc2VkIHVuZGVyIEVsYXN0aWMgTGljZW5zZSAyLjAuXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVsYXN0aWMtMi4wXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdW50aW1lV2ViQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBwdXJlbm93LCBQdXJlbm93Um91dGUsIHB1cmVub3dSb3V0ZXIsIFB1cmVub3dSb3V0ZXJEZWZhdWx0cyB9IGZyb20gJ0B3b3JrdGlmL3B1cmVub3cnO1xuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBmYWlscy5cbiAqIEZvbGxvd3MgcHVyZW5vdyBlcnJvciBwYXR0ZXJucyB3aXRob3V0IGVtb2ppLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogQXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvciBtZXNzYWdlcyAqL1xuICByZWFkb25seSBlcnJvcnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGVycm9yczogc3RyaW5nW10pIHtcbiAgICBzdXBlcihgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDpcXG4ke2Vycm9ycy5tYXAoZSA9PiBgICAtICR7ZX1gKS5qb2luKCdcXG4nKX1gKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29uZmlnVmFsaWRhdGlvbkVycm9yJztcbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGVudmlyb25tZW50IGRldGVjdGlvbiBmYWlscy5cbiAqIEZvbGxvd3MgcHVyZW5vdyBlcnJvciBwYXR0ZXJucyB3aXRob3V0IGVtb2ppLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0Vudmlyb25tZW50RGV0ZWN0aW9uRXJyb3InO1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IHRoZSBjdXJyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKiBUaGlzIGlzIGEgbGlnaHR3ZWlnaHQgZGV0ZWN0aW9uIHRoYXQgd29ya3MgaW4gYWxsIGVudmlyb25tZW50cy5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0RW52aXJvbm1lbnQoKTogJ2Jyb3dzZXInIHwgJ2xhbWJkYScgfCAnY2RrJyB7XG4gIC8vIEJyb3dzZXIgZGV0ZWN0aW9uXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAnYnJvd3Nlcic7XG4gIH1cblxuICAvLyBMYW1iZGEgZGV0ZWN0aW9uXG4gIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnY/LkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSkge1xuICAgIHJldHVybiAnbGFtYmRhJztcbiAgfVxuXG4gIC8vIENESyBkZXRlY3Rpb25cbiAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChwcm9jZXNzLmVudj8uUFVSRU5PV19NT0RFID09PSAnY2RrJykge1xuICAgICAgcmV0dXJuICdjZGsnO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnY/LkNES19ERUZBVUxUX0FDQ09VTlQgfHwgcHJvY2Vzcy5lbnY/LkNES19ERUZBVUxUX1JFR0lPTikge1xuICAgICAgcmV0dXJuICdjZGsnO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5hcmd2Py5zb21lKGFyZyA9PiBhcmcuaW5jbHVkZXMoJ2NkaycpIHx8IGFyZy5pbmNsdWRlcygnc3ludGgnKSkpIHtcbiAgICAgIHJldHVybiAnY2RrJztcbiAgICB9XG4gIH1cblxuICAvLyBEZWZhdWx0IHRvIENESyBmb3IgTm9kZS5qcyBlbnZpcm9ubWVudHMgKGJ1aWxkIHRpbWUpXG4gIHJldHVybiAnY2RrJztcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQuXG4gKiBMaWdodHdlaWdodCB2YWxpZGF0aW9uIHRoYXQgd29ya3MgaW4gYWxsIGVudmlyb25tZW50cy5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb25maWcoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnLCBpc0NES0NvbnRleHQ6IGJvb2xlYW4pOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcnM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gU2VydmljZSBuYW1lIHZhbGlkYXRpb25cbiAgaWYgKCFjb25maWcuc2VydmljZU5hbWUgfHwgIS9eW2EtekEtWl1bYS16QS1aMC05LV17MCwxMjd9JC8udGVzdChjb25maWcuc2VydmljZU5hbWUpKSB7XG4gICAgZXJyb3JzLnB1c2goJ3NlcnZpY2VOYW1lIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciwgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zLCBhbmQgYmUgbWF4IDEyOCBjaGFyYWN0ZXJzJyk7XG4gIH1cblxuICAvLyBTdGFnZSB2YWxpZGF0aW9uXG4gIGlmICghWydkZXYnLCAnc3RhZ2luZycsICdwcm9kJ10uaW5jbHVkZXMoY29uZmlnLnN0YWdlKSkge1xuICAgIGVycm9ycy5wdXNoKCdzdGFnZSBtdXN0IGJlIG9uZSBvZjogZGV2LCBzdGFnaW5nLCBwcm9kJyk7XG4gIH1cblxuICAvLyBJbmZyYSB2YWxpZGF0aW9uIGZvciBDREsgY29udGV4dFxuICBpZiAoaXNDREtDb250ZXh0ICYmICFjb25maWcuaW5mcmEpIHtcbiAgICBlcnJvcnMucHVzaCgnaW5mcmEgY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCBpbiBDREsgY29udGV4dCcpO1xuICB9XG5cbiAgcmV0dXJuIHsgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsIGVycm9ycyB9O1xufVxuXG4vKipcbiAqIFVuaWZpZWQgZW50cnkgcG9pbnQgZm9yIFJ1bnRpbWUgVGFyZ2V0IENvcmUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHNpbmdsZSBBUEkgdGhhdCB3b3JrcyBhY3Jvc3MgYWxsIGV4ZWN1dGlvbiBjb250ZXh0czpcbiAqIC0gKipCcm93c2VyKio6IEh5ZHJhdGVzIFJlYWN0IGFwcGxpY2F0aW9uIHdpdGggY2xpZW50LXNpZGUgcm91dGluZ1xuICogLSAqKkxhbWJkYSoqOiBFeGVjdXRlcyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgYW5kIGJ1c2luZXNzIGxvZ2ljIHdpdGggRElcbiAqIC0gKipDREsqKjogU3ludGhlc2l6ZXMgQ2xvdWRGb3JtYXRpb24gaW5mcmFzdHJ1Y3R1cmUgdGVtcGxhdGVzXG4gKlxuICogVGhlIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBhbmQgcm91dGVzXG4gKiBleGVjdXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIHBpcGVsaW5lIHdpdGhvdXQgdXNlciBpbnRlcnZlbnRpb24uXG4gKlxuICogKipOb3RlKio6IEZvciBMYW1iZGEgYW5kIENESyBjb250ZXh0cywgdXNlIHRoZSBzZXJ2ZXItc2lkZSBlbnRyeSBwb2ludFxuICogZnJvbSBgQGNvcmUvcnVudGltZS13ZWJgIGluc3RlYWQuIFRoaXMgYnJvd3Nlci1jb21wYXRpYmxlIHZlcnNpb25cbiAqIG9ubHkgc3VwcG9ydHMgYnJvd3NlciBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIGNvbmZpZyAtIFVuaWZpZWQgY29uZmlndXJhdGlvbiBmb3IgYWxsIGNvbnRleHRzXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBleGVjdXRpb24gY29tcGxldGVzXG4gKiBAdGhyb3dzIENvbmZpZ1ZhbGlkYXRpb25FcnJvciBpZiBjb25maWd1cmF0aW9uIGlzIGludmFsaWRcbiAqIEB0aHJvd3MgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvciBpZiBlbnZpcm9ubWVudCBjYW5ub3QgYmUgZGV0ZWN0ZWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgZXhlY3V0aW9uIGZhaWxzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHB1cmVub3cgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93L3J1bnRpbWUtd2ViJztcbiAqIGltcG9ydCB7IFB1cmVub3dSb3V0ZXIgfSBmcm9tICdAd29ya3RpZi9wdXJlbm93JztcbiAqXG4gKiBwdXJlbm93KHtcbiAqICAgYXBwOiAoeyByb3V0ZXIgfSkgPT4gPEFwcCByb3V0ZXI9e3JvdXRlcn0gLz4sXG4gKiAgIHJvdXRlcjogbmV3IFB1cmVub3dSb3V0ZXIoeyByb3V0ZXMsIGRlZmF1bHRzOiB7fSB9KSxcbiAqICAgc2VydmljZU5hbWU6ICdteS1hcHAnLFxuICogICBzdGFnZTogJ2RldicsXG4gKiAgIHJlZ2lzdGVyOiB7XG4gKiAgICAgcGF5bWVudHM6IHtcbiAqICAgICAgIHRpZXM6IFtQYXltZW50c1RpZXNdLFxuICogICAgICAgbGFtYmRhczogW2NoYXJnZUhhbmRsZXIsIHJlZnVuZEhhbmRsZXJdXG4gKiAgICAgfVxuICogICB9LFxuICogICBpbmZyYToge1xuICogICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICogICAgIHN0YWdlOiAnZGV2JyxcbiAqICAgICByZWFjdEVudHJ5OiAnLi9zcmMvaW5kZXgudHN4JyxcbiAqICAgICBhcGlNb2RlOiAnYXBpR2F0ZXdheSdcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1cmV3ZWIoY29uZmlnOiBSdW50aW1lV2ViQ29uZmlnKTogdm9pZCB7XG4gIC8vIDEuIERldGVjdCBydW50aW1lIGVudmlyb25tZW50IHVzaW5nIGxpZ2h0d2VpZ2h0IGRldGVjdGlvblxuICBjb25zdCBlbnZUeXBlID0gZGV0ZWN0RW52aXJvbm1lbnQoKTtcbiAgY29uc3QgaXNDREtDb250ZXh0ID0gZW52VHlwZSA9PT0gJ2Nkayc7XG5cbiAgLy8gMi4gVmFsaWRhdGUgY29uZmlndXJhdGlvblxuICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVDb25maWcoY29uZmlnLCBpc0NES0NvbnRleHQpO1xuXG4gIGlmICghdmFsaWRhdGlvblJlc3VsdC52YWxpZCkge1xuICAgIHRocm93IG5ldyBDb25maWdWYWxpZGF0aW9uRXJyb3IodmFsaWRhdGlvblJlc3VsdC5lcnJvcnMpO1xuICB9XG5cbiAgLy8gMy4gUm91dGUgdG8gYXBwcm9wcmlhdGUgcGlwZWxpbmUgYmFzZWQgb24gZW52aXJvbm1lbnRcbiAgc3dpdGNoIChlbnZUeXBlKSB7XG4gICAgY2FzZSAnYnJvd3Nlcic6IHtcbiAgICAgIC8vIEJyb3dzZXIgcGlwZWxpbmUgLSBoeWRyYXRlIFJlYWN0IGFwcFxuICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBwYXRoIHRoYXQgcnVucyBpbiB0aGUgYnJvd3NlclxuICAgICAgcHVyZW5vdyh7XG4gICAgICAgIGFwcDogKHsgcm91dGVyIH0pID0+IGNvbmZpZy5hcHAoeyByb3V0ZXIgfSksXG4gICAgICAgIHJvdXRlcjogcHVyZW5vd1JvdXRlcih7XG4gICAgICAgICAgcm91dGVyOiBjb25maWcucm91dGVyLmdldFJvdXRlcygpIGFzIFB1cmVub3dSb3V0ZVtdLFxuICAgICAgICAgIGRlZmF1bHRzOiBjb25maWcucm91dGVyLmRlZmF1bHRzIGFzIFB1cmVub3dSb3V0ZXJEZWZhdWx0cyxcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIHNlcnZpY2VOYW1lOiBjb25maWcuc2VydmljZU5hbWUsXG4gICAgICAgICAgc3RhZ2U6IGNvbmZpZy5zdGFnZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2FzZSAnbGFtYmRhJzpcbiAgICBjYXNlICdjZGsnOiB7XG4gICAgICAvLyBMYW1iZGEgYW5kIENESyBwaXBlbGluZXMgcmVxdWlyZSBzZXJ2ZXItc2lkZSBjb2RlXG4gICAgICAvLyBUaGVzZSBzaG91bGQgdXNlIHRoZSBzZXJ2ZXItc2lkZSBlbnRyeSBwb2ludCBmcm9tIEBjb3JlL3J1bnRpbWUtd2ViXG4gICAgICBjb25zb2xlLmxvZygnW1J1bnRpbWUgVGFyZ2V0XSBTZXJ2ZXItc2lkZSBwaXBlbGluZSBkZXRlY3RlZCAoJXMpJywgZW52VHlwZSk7XG4gICAgICBwdXJlbm93KHtcbiAgICAgICAgYXBwOiAoeyByb3V0ZXIgfSkgPT4gY29uZmlnLmFwcCh7IHJvdXRlciB9KSxcbiAgICAgICAgcm91dGVyOiBwdXJlbm93Um91dGVyKHtcbiAgICAgICAgICByb3V0ZXI6IGNvbmZpZy5yb3V0ZXIuZ2V0Um91dGVzKCkgYXMgUHVyZW5vd1JvdXRlW10sXG4gICAgICAgICAgZGVmYXVsdHM6IGNvbmZpZy5yb3V0ZXIuZGVmYXVsdHMgYXMgUHVyZW5vd1JvdXRlckRlZmF1bHRzLFxuICAgICAgICB9KSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICBzdGFnZTogY29uZmlnLnN0YWdlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdbUHVyZW5vd10gTGFtYmRhIHJ1bnRpbWUgZGV0ZWN0ZWQsIHNraXBwaW5nIGJyb3dzZXIgcmVuZGVyaW5nIHBpcGVsaW5lJyk7XG4gICAgICAvLyB0aHJvdyBuZXcgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvcihcbiAgICAgIC8vICAgYFNlcnZlci1zaWRlIGVudmlyb25tZW50IGRldGVjdGVkICgke2VudlR5cGV9KS4gYCArXG4gICAgICAvLyAgIGBVc2UgdGhlIHNlcnZlci1zaWRlIGVudHJ5IHBvaW50IGZyb20gJ0Bjb3JlL3J1bnRpbWUtd2ViJyBmb3IgTGFtYmRhIGFuZCBDREsgY29udGV4dHMuYCxcbiAgICAgIC8vICk7XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUubG9nKCdbUnVudGltZSBUYXJnZXRdIFVua25vd24gZW52aXJvbm1lbnQgdHlwZTogJXMnLCBlbnZUeXBlKTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIHRocm93IG5ldyBFbnZpcm9ubWVudERldGVjdGlvbkVycm9yKFxuICAgIC8vICAgYFVua25vd24gZW52aXJvbm1lbnQgdHlwZTogJHtlbnZUeXBlfWAsXG4gICAgLy8gKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4ZWN1dGUgdGhlIGJyb3dzZXIgcGlwZWxpbmUgZm9yIFJlYWN0IGh5ZHJhdGlvbi5cbiAqIFRoaXMgaXMgYnJvd3Nlci1zYWZlIGNvZGUgdGhhdCBkb2Vzbid0IGltcG9ydCBmcm9tIEBjb3JlLy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJyb3dzZXJQaXBlbGluZShjb25maWc6IFJ1bnRpbWVXZWJDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRW5zdXJlIHdlJ3JlIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudFxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRW52aXJvbm1lbnREZXRlY3Rpb25FcnJvcignQnJvd3NlciBlbnZpcm9ubWVudCByZXF1aXJlZCBmb3IgYnJvd3NlciBwaXBlbGluZScpO1xuICB9XG5cbiAgLy8gSW1wb3J0IFJlYWN0IERPTSBmb3IgaHlkcmF0aW9uXG4gIGNvbnN0IHsgaHlkcmF0ZVJvb3QsIGNyZWF0ZVJvb3QgfSA9IGF3YWl0IGltcG9ydCgncmVhY3QtZG9tL2NsaWVudCcpO1xuICBjb25zdCB7IGNyZWF0ZUJyb3dzZXJSb3V0ZXIgfSA9IGF3YWl0IGltcG9ydCgncmVhY3Qtcm91dGVyJyk7XG4gIGNvbnN0IFJlYWN0ID0gYXdhaXQgaW1wb3J0KCdyZWFjdCcpO1xuXG4gIC8vIEdldCBET00gZWxlbWVudHNcbiAgY29uc3Qgcm9vdFB1cmVub3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdC1wdXJlbm93Jyk7XG4gIGNvbnN0IHJvb3RJbnRlcm5hbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290LWludGVybmFsJyk7XG5cbiAgLy8gRGV0ZXJtaW5lIHdoaWNoIHJvb3QgZWxlbWVudCB0byB1c2VcbiAgY29uc3Qgcm9vdEVsZW1lbnQgPSByb290UHVyZW5vdyB8fCByb290SW50ZXJuYWw7XG5cbiAgaWYgKCFyb290RWxlbWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdbUnVudGltZSBUYXJnZXRdIFJvb3QgZWxlbWVudCBub3QgZm91bmQuICcgK1xuICAgICAgJ0Vuc3VyZSB5b3VyIEhUTUwgaW5jbHVkZXMgPGRpdiBpZD1cInJvb3QtcHVyZW5vd1wiPjwvZGl2PiBvciA8ZGl2IGlkPVwicm9vdC1pbnRlcm5hbFwiPjwvZGl2PicsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEdldCByb3V0ZXMgZnJvbSB0aGUgcm91dGVyIC0gdXNlIHJvdXRlcyBwcm9wZXJ0eSBvciBnZXRSb3V0ZXMgbWV0aG9kXG4gIGNvbnN0IHJvdXRlcyA9IGNvbmZpZy5yb3V0ZXIucm91dGVzIHx8IChjb25maWcucm91dGVyIGFzIGFueSkuZ2V0Um91dGVzPy4oKSB8fCBbXTtcblxuICAvLyBDcmVhdGUgYnJvd3NlciByb3V0ZXIgLSBjYXN0IHJvdXRlcyB0byBhbnkgdG8gYXZvaWQgdHlwZSBpc3N1ZXMgd2l0aCBkaWZmZXJlbnQgcmVhY3Qtcm91dGVyIHZlcnNpb25zXG4gIGNvbnN0IGJyb3dzZXJSb3V0ZXIgPSBjcmVhdGVCcm93c2VyUm91dGVyKHJvdXRlcyBhcyBhbnkpO1xuXG4gIC8vIENyZWF0ZSB0aGUgYXBwIGVsZW1lbnQgLSBwYXNzIHRoZSBicm93c2VyIHJvdXRlclxuICBjb25zdCBBcHBFbGVtZW50ID0gY29uZmlnLmFwcCh7IHJvdXRlcjogYnJvd3NlclJvdXRlciBhcyBhbnkgfSk7XG5cbiAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGh5ZHJhdGUgKFNTUiBIVE1MIGV4aXN0cykgb3IgcmVuZGVyIGZyZXNoXG4gIGlmIChyb290UHVyZW5vdz8uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgLy8gSHlkcmF0ZSBTU1IgSFRNTFxuICAgIGNvbnNvbGUubG9nKCdbUnVudGltZSBUYXJnZXRdIEh5ZHJhdGluZyBTU1IgSFRNTC4uLicpO1xuICAgIGh5ZHJhdGVSb290KHJvb3RFbGVtZW50LCBSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LlN0cmljdE1vZGUsIG51bGwsIEFwcEVsZW1lbnQpKTtcbiAgICBjb25zb2xlLmxvZygnW1J1bnRpbWUgVGFyZ2V0XSBIeWRyYXRpb24gY29tcGxldGUnKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGcmVzaCByZW5kZXJcbiAgICBjb25zb2xlLmxvZygnW1J1bnRpbWUgVGFyZ2V0XSBDcmVhdGluZyBmcmVzaCBSZWFjdCByb290Li4uJyk7XG4gICAgY29uc3Qgcm9vdCA9IGNyZWF0ZVJvb3Qocm9vdEVsZW1lbnQpO1xuICAgIHJvb3QucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuU3RyaWN0TW9kZSwgbnVsbCwgQXBwRWxlbWVudCkpO1xuICAgIGNvbnNvbGUubG9nKCdbUnVudGltZSBUYXJnZXRdIFJlbmRlciBjb21wbGV0ZScpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiMGpCQUFBLElBQUFBLEVBQUEsR0FBQUMsRUFBQUQsRUFBQSxxQkFBQUUsRUFBQSwwQkFBQUMsRUFBQSw4QkFBQUMsRUFBQSx1QkFBQUMsRUFBQSxZQUFBQyxJQUFBLGVBQUFDLEVBQUFQLEdDZ0JBLElBQUFRLEVBQXVCLG9CQUN2QkMsRUFBNEIsNEJBQzVCQyxFQUFvRCx3QkE4QnZDQyxFQUFOLEtBQXNCLENBNEIzQixNQUFNLFFBQVFDLEVBQTBCQyxFQUF3RSxDQUM5RyxHQUFJLENBQ0YsUUFBUSxLQUFLLHNDQUF1QyxDQUNsRCxZQUFhRCxFQUFPLFlBQ3BCLE1BQU9BLEVBQU8sTUFDZCxJQUFLQyxFQUFRLFNBQVMsSUFDdEIsVUFBV0EsRUFBUSxTQUFTLFVBQzVCLFNBQVVBLEVBQVEsU0FBUyxRQUM3QixDQUFDLEVBR0QsSUFBTUMsRUFBZ0IsS0FB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T0FBQUEsQ0FBTyxDQUM5QyxDQWdETyxTQUFTUSxFQUFRRixFQUFnQyxDQUV0RCxJQUFNRyxFQUFVTixFQUFrQixFQUk1Qk8sRUFBbUJMLEVBQWVDLEVBSG5CRyxJQUFZLEtBRzJCLEVBRTVELEdBQUksQ0FBQ0MsRUFBaUIsTUFDcEIsTUFBTSxJQUFJWCxFQUFzQlcsRUFBaUIsTUFBTSxFQUl6RCxPQUFRRCxFQUFTLENBQ2YsSUFBSyxVQUFXLElBR2QsV0FBUSxDQUNOLElBQUssQ0FBQyxDQUFFLE9BQUFFLENBQU8sSUFBTUwsRUFBTyxJQUFJLENBQUUsT0FBQUssQ0FBTyxDQUFDLEVBQzFDLFVBQVEsaUJBQWMsQ0FDcEIsT0FBUUwsRUFBTyxPQUFPLFVBQVUsRUFDaEMsU0FBVUEsRUFBTyxPQUFPLFFBQzFCLENBQUMsRUFDRCxPQUFRLENBQ04sWUFBYUEsRUFBTyxZQUNwQixNQUFPQSxFQUFPLEtBQ2hCLENBQ0YsQ0FBQyxFQUNELEtBQ0YsQ0FFQSxJQUFLLFNBQ0wsSUFBSyxNQUFPLENBR1YsUUFBUSxJQUFJLHNEQUF1REcsQ0FBTyxLQUMxRSxXQUFRLENBQ04sSUFBSyxDQUFDLENBQUUsT0FBQUUsQ0FBTyxJQUFNTCxFQUFPLElBQUksQ0FBRSxPQUFBSyxDQUFPLENBQUMsRUFDMUMsVUFBUSxpQkFBYyxDQUNwQixPQUFRTCxFQUFPLE9BQU8sVUFBVSxFQUNoQyxTQUFVQSxFQUFPLE9BQU8sUUFDMUIsQ0FBQyxFQUNELE9BQVEsQ0FDTixZQUFhQSxFQUFPLFlBQ3BCLE1BQU9BLEVBQU8sS0FDaEIsQ0FDRixDQUFDLEVBQ0QsS0FNRixDQUVBLFFBQ0UsUUFBUSxJQUFJLGdEQUFpREcsQ0FBTyxFQUNwRSxLQUlKLENBQ0YiLAogICJuYW1lcyI6IFsiaW5kZXhfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJCcm93c2VyUGlwZWxpbmUiLCAiQ29uZmlnVmFsaWRhdGlvbkVycm9yIiwgIkVudmlyb25tZW50RGV0ZWN0aW9uRXJyb3IiLCAiaXNWYWxpZFNlcnZpY2VOYW1lIiwgInB1cmV3ZWIiLCAiX190b0NvbW1vbkpTIiwgIlJlYWN0IiwgImltcG9ydF9jbGllbnQiLCAiaW1wb3J0X3JlYWN0X3JvdXRlciIsICJCcm93c2VyUGlwZWxpbmUiLCAiY29uZmlnIiwgImNvbnRleHQiLCAiYnJvd3NlclJvdXRlciIsICJhcHBFbGVtZW50IiwgInJvdXRlclByb3ZpZGVyIiwgImVycm9yIiwgInJvdXRlcyIsICJjb250YWluZXIiLCAiYmFzZVVybCIsICJzdGFnZSIsICJpc1ZhbGlkU2VydmljZU5hbWUiLCAic2VydmljZU5hbWUiLCAiaW1wb3J0X3B1cmVub3ciLCAiQ29uZmlnVmFsaWRhdGlvbkVycm9yIiwgImVycm9ycyIsICJFbnZpcm9ubWVudERldGVjdGlvbkVycm9yIiwgIm1lc3NhZ2UiLCAiZGV0ZWN0RW52aXJvbm1lbnQiLCAiYXJnIiwgInZhbGlkYXRlQ29uZmlnIiwgImNvbmZpZyIsICJpc0NES0NvbnRleHQiLCAicHVyZXdlYiIsICJlbnZUeXBlIiwgInZhbGlkYXRpb25SZXN1bHQiLCAicm91dGVyIl0KfQo=
@@ -0,0 +1,3 @@
1
+ export * from '@worktif/purenow';
2
+ export * from './runtime-web';
3
+ //# sourceMappingURL=index.d.ts.map