cdk-serverless 3.3.1 → 3.3.2
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/docs/constructs/interfaces/McpAuthOptions.html +1 -1
- package/docs/constructs/interfaces/McpAuthProps.html +1 -1
- package/docs/constructs/interfaces/McpCognitoAuthProps.html +1 -1
- package/lib/constructs/mcp-auth.d.ts +1 -1
- package/lib/constructs/mcp-auth.js +2 -2
- package/lib/constructs/mcp-cognito-auth.d.ts +1 -1
- package/lib/constructs/mcp-cognito-auth.js +1 -1
- package/lib/constructs/rest-api.d.ts +1 -1
- package/lib/constructs/rest-api.js +1 -1
- package/lib/mcp-auth/mcp/server.d.ts +12 -0
- package/lib/mcp-auth/mcp/server.js +34 -3
- package/package.json +1 -1
|
@@ -18,7 +18,7 @@ Creates a user pool client and derives endpoints automatically.</p>
|
|
|
18
18
|
Requires explicit endpoint URLs and client ID.</p>
|
|
19
19
|
</div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="lambdaoptions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>lambda<wbr/>Options</span><a href="#lambdaoptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">lambdaOptions</span><span class="tsd-signature-symbol">?:</span> <a href="../types/LambdaOptions.html" class="tsd-signature-type tsd-kind-type-alias">LambdaOptions</a></div><div class="tsd-comment tsd-typography"><p>Lambda function options for MCP auth handlers.</p>
|
|
20
20
|
</div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="protocolversions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>protocol<wbr/>Versions</span><a href="#protocolversions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">protocolVersions</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div><div class="tsd-comment tsd-typography"><p>Supported MCP protocol versions (newest first).</p>
|
|
21
|
-
</div><div class="tsd-comment tsd-typography"><div class="tsd-tag-default"><h4 class="tsd-anchor-link" id="default-1">Default<a href="#default-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">[</span><span class="hl-2">'2025-11-25'</span><span class="hl-1">, </span><span class="hl-2">'2025-03-26'</span><span class="hl-1">, </span><span class="hl-2">'2024-11-05'</span><span class="hl-1">]</span>
|
|
21
|
+
</div><div class="tsd-comment tsd-typography"><div class="tsd-tag-default"><h4 class="tsd-anchor-link" id="default-1">Default<a href="#default-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">[</span><span class="hl-2">'2025-11-25'</span><span class="hl-1">, </span><span class="hl-2">'2025-06-18'</span><span class="hl-1">, </span><span class="hl-2">'2025-03-26'</span><span class="hl-1">, </span><span class="hl-2">'2024-11-05'</span><span class="hl-1">]</span>
|
|
22
22
|
</code><button type="button">Copy</button></pre>
|
|
23
23
|
|
|
24
24
|
</div></div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="scopes"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>scopes</span><a href="#scopes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">scopes</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div><div class="tsd-comment tsd-typography"><p>OAuth scopes to advertise in discovery metadata.</p>
|
|
@@ -24,7 +24,7 @@ Example: '<a href="https://auth.example.com/oauth2/authorize">https://auth.examp
|
|
|
24
24
|
</div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="clientid"><code class="tsd-tag">Readonly</code><span>client<wbr/>Id</span><a href="#clientid" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">clientId</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span></div><div class="tsd-comment tsd-typography"><p>The pre-provisioned OAuth client ID returned by the register endpoint.</p>
|
|
25
25
|
</div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="lambdaoptions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>lambda<wbr/>Options</span><a href="#lambdaoptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">lambdaOptions</span><span class="tsd-signature-symbol">?:</span> <a href="../types/LambdaOptions.html" class="tsd-signature-type tsd-kind-type-alias">LambdaOptions</a></div><div class="tsd-comment tsd-typography"><p>Lambda function options for MCP auth handlers.</p>
|
|
26
26
|
</div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="protocolversions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>protocol<wbr/>Versions</span><a href="#protocolversions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">protocolVersions</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div><div class="tsd-comment tsd-typography"><p>Supported MCP protocol versions (newest first).</p>
|
|
27
|
-
</div><div class="tsd-comment tsd-typography"><div class="tsd-tag-default"><h4 class="tsd-anchor-link" id="default">Default<a href="#default" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">[</span><span class="hl-2">'2025-11-25'</span><span class="hl-1">, </span><span class="hl-2">'2025-03-26'</span><span class="hl-1">, </span><span class="hl-2">'2024-11-05'</span><span class="hl-1">]</span>
|
|
27
|
+
</div><div class="tsd-comment tsd-typography"><div class="tsd-tag-default"><h4 class="tsd-anchor-link" id="default">Default<a href="#default" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">[</span><span class="hl-2">'2025-11-25'</span><span class="hl-1">, </span><span class="hl-2">'2025-06-18'</span><span class="hl-1">, </span><span class="hl-2">'2025-03-26'</span><span class="hl-1">, </span><span class="hl-2">'2024-11-05'</span><span class="hl-1">]</span>
|
|
28
28
|
</code><button type="button">Copy</button></pre>
|
|
29
29
|
|
|
30
30
|
</div></div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="scopes"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>scopes</span><a href="#scopes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">scopes</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div><div class="tsd-comment tsd-typography"><p>OAuth scopes to advertise in discovery metadata.</p>
|
|
@@ -34,7 +34,7 @@ Example: '<a href="http://auth.example.com">auth.example.com</a>' or '<a href="h
|
|
|
34
34
|
|
|
35
35
|
</div></div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="lambdaoptions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>lambda<wbr/>Options</span><a href="#lambdaoptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">lambdaOptions</span><span class="tsd-signature-symbol">?:</span> <a href="../types/LambdaOptions.html" class="tsd-signature-type tsd-kind-type-alias">LambdaOptions</a></div><div class="tsd-comment tsd-typography"><p>Lambda function options for MCP auth handlers.</p>
|
|
36
36
|
</div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="protocolversions"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>protocol<wbr/>Versions</span><a href="#protocolversions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">protocolVersions</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div><div class="tsd-comment tsd-typography"><p>Supported MCP protocol versions (newest first).</p>
|
|
37
|
-
</div><div class="tsd-comment tsd-typography"><div class="tsd-tag-default"><h4 class="tsd-anchor-link" id="default-2">Default<a href="#default-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">[</span><span class="hl-2">'2025-11-25'</span><span class="hl-1">, </span><span class="hl-2">'2025-03-26'</span><span class="hl-1">, </span><span class="hl-2">'2024-11-05'</span><span class="hl-1">]</span>
|
|
37
|
+
</div><div class="tsd-comment tsd-typography"><div class="tsd-tag-default"><h4 class="tsd-anchor-link" id="default-2">Default<a href="#default-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">[</span><span class="hl-2">'2025-11-25'</span><span class="hl-1">, </span><span class="hl-2">'2025-06-18'</span><span class="hl-1">, </span><span class="hl-2">'2025-03-26'</span><span class="hl-1">, </span><span class="hl-2">'2024-11-05'</span><span class="hl-1">]</span>
|
|
38
38
|
</code><button type="button">Copy</button></pre>
|
|
39
39
|
|
|
40
40
|
</div></div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="scopes"><code class="tsd-tag">Optional</code> <code class="tsd-tag">Readonly</code><span>scopes</span><a href="#scopes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><div class="tsd-signature"><span class="tsd-kind-property">scopes</span><span class="tsd-signature-symbol">?:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">[]</span></div><div class="tsd-comment tsd-typography"><p>OAuth scopes to advertise in discovery metadata.
|
|
@@ -41,7 +41,7 @@ export interface McpAuthProps {
|
|
|
41
41
|
};
|
|
42
42
|
/**
|
|
43
43
|
* Supported MCP protocol versions (newest first).
|
|
44
|
-
* @default ['2025-11-25', '2025-03-26', '2024-11-05']
|
|
44
|
+
* @default ['2025-11-25', '2025-06-18', '2025-03-26', '2024-11-05']
|
|
45
45
|
*/
|
|
46
46
|
readonly protocolVersions?: string[];
|
|
47
47
|
/**
|
|
@@ -67,7 +67,7 @@ class McpAuth extends constructs_1.Construct {
|
|
|
67
67
|
MCP_CLIENT_ID: props.clientId,
|
|
68
68
|
MCP_SERVER_NAME: props.serverInfo.name,
|
|
69
69
|
MCP_SERVER_VERSION: props.serverInfo.version,
|
|
70
|
-
MCP_PROTOCOL_VERSIONS: (props.protocolVersions ?? ['2025-11-25', '2025-03-26', '2024-11-05']).join(','),
|
|
70
|
+
MCP_PROTOCOL_VERSIONS: (props.protocolVersions ?? ['2025-11-25', '2025-06-18', '2025-03-26', '2024-11-05']).join(','),
|
|
71
71
|
MCP_SCOPES: (props.scopes ?? ['openid', 'email', 'profile']).join(','),
|
|
72
72
|
MCP_ALLOWED_REDIRECT_URIS: props.allowedRedirectUris.join(','),
|
|
73
73
|
MCP_STRIP_PARAMETERS: (props.stripParameters ?? ['resource']).join(','),
|
|
@@ -124,4 +124,4 @@ class McpAuth extends constructs_1.Construct {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
exports.McpAuth = McpAuth;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9tY3AtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsNkNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2QyxpQ0FBdUQ7QUFnR3ZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQWFwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW1CO1FBQzNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxHQUFHLEdBQTJCO1lBQ2xDLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMvQixzQkFBc0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQy9DLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ3ZDLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUM3QixlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1lBQ3RDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTztZQUM1QyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3ZHLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN0RSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUM5RCxvQkFBb0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdkUsR0FBRyxLQUFLLENBQUMsYUFBYTtTQUN2QixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7UUFFdEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlFLE1BQU0saUJBQWlCLEdBQWtCO1lBQ3ZDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsR0FBRyxLQUFLLENBQUMsYUFBYTtTQUN2QixDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3hFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsK0JBQStCLENBQUM7WUFDOUQsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsZ0NBQWdDO1lBQ2hFLGFBQWEsRUFBRSxHQUFHO1lBQ2xCLGFBQWEsRUFBRSxpQkFBaUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzVFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsaUNBQWlDLENBQUM7WUFDaEUsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsa0NBQWtDO1lBQ2xFLGFBQWEsRUFBRSxHQUFHO1lBQ2xCLGFBQWEsRUFBRSxpQkFBaUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDeEQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQztZQUNyRCxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyw2QkFBNkI7WUFDN0QsYUFBYSxFQUFFLEdBQUc7WUFDbEIsYUFBYSxFQUFFLGlCQUFpQjtTQUNqQyxDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUNoRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDO1lBQ2pELFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxTQUFTLHlCQUF5QjtZQUN6RCxhQUFhLEVBQUUsR0FBRztZQUNsQixhQUFhLEVBQUUsaUJBQWlCO1NBQ2pDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3RELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUscUJBQXFCLENBQUM7WUFDcEQsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsc0JBQXNCO1lBQ3RELGFBQWEsRUFBRSxHQUFHO1lBQ2xCLGFBQWEsRUFBRSxpQkFBaUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIsU0FBUztZQUNULEtBQUs7WUFDTCxRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZGRCwwQkF1RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24sIExhbWJkYU9wdGlvbnMgfSBmcm9tICcuL2Z1bmMnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBNQ1AgQXV0aCBDREsgY29uc3RydWN0LlxuICogU2VydmljZS1hZ25vc3RpYzogd29ya3Mgd2l0aCBhbnkgT0F1dGgyL09JREMgcHJvdmlkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWNwQXV0aFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgZG9tYWluIHRoYXQgYWN0cyBhcyB0aGUgTUNQIE9BdXRoIGlzc3Vlci5cbiAgICogQWxsIE9BdXRoIGRpc2NvdmVyeSBlbmRwb2ludHMgd2lsbCByZWZlcmVuY2UgdGhpcyBkb21haW4uXG4gICAqIEV4YW1wbGU6ICdhcGkuZXhhbXBsZS5jb20nXG4gICAqL1xuICByZWFkb25seSBhcGlEb21haW46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIE9BdXRoIGF1dGhvcml6ZSBlbmRwb2ludCBVUkwuXG4gICAqIFRoZSBhdXRob3JpemUgTGFtYmRhIHByb3hpZXMgKDMwMiByZWRpcmVjdHMpIHRvIHRoaXMgVVJMLlxuICAgKiBFeGFtcGxlOiAnaHR0cHM6Ly9hdXRoLmV4YW1wbGUuY29tL29hdXRoMi9hdXRob3JpemUnXG4gICAqL1xuICByZWFkb25seSBhdXRob3JpemVFbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdXBzdHJlYW0gT0F1dGggdG9rZW4gZW5kcG9pbnQgVVJMLlxuICAgKiBUaGUgdG9rZW4gTGFtYmRhIHByb3hpZXMgUE9TVCByZXF1ZXN0cyB0byB0aGlzIFVSTC5cbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXV0aC5leGFtcGxlLmNvbS9vYXV0aDIvdG9rZW4nXG4gICAqL1xuICByZWFkb25seSB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93ZWQgcmVkaXJlY3QgVVJJcyBmb3IgZHluYW1pYyBjbGllbnQgcmVnaXN0cmF0aW9uLlxuICAgKiBDbGllbnRzIHJlZ2lzdGVyaW5nIHdpdGggVVJJcyBub3QgaW4gdGhpcyBsaXN0IGFyZSByZWplY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRSZWRpcmVjdFVyaXM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJlLXByb3Zpc2lvbmVkIE9BdXRoIGNsaWVudCBJRCByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXIgZW5kcG9pbnQuXG4gICAqL1xuICByZWFkb25seSBjbGllbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNQ1Agc2VydmVyIGluZm8gcmV0dXJuZWQgaW4gdGhlICdpbml0aWFsaXplJyByZXNwb25zZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlckluZm86IHsgcmVhZG9ubHkgbmFtZTogc3RyaW5nOyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU3VwcG9ydGVkIE1DUCBwcm90b2NvbCB2ZXJzaW9ucyAobmV3ZXN0IGZpcnN0KS5cbiAgICogQGRlZmF1bHQgWycyMDI1LTExLTI1JywgJzIwMjUtMDMtMjYnLCAnMjAyNC0xMS0wNSddXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbFZlcnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9BdXRoIHNjb3BlcyB0byBhZHZlcnRpc2UgaW4gZGlzY292ZXJ5IG1ldGFkYXRhLlxuICAgKiBAZGVmYXVsdCBbJ29wZW5pZCcsICdlbWFpbCcsICdwcm9maWxlJ11cbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIHRvIHN0cmlwIGZyb20gYXV0aG9yaXplL3Rva2VuIHByb3h5IHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCBbJ3Jlc291cmNlJ11cbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwUGFyYW1ldGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBpbmplY3QgaW50byBhbGwgTUNQIGF1dGggTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gb3B0aW9ucyBmb3IgTUNQIGF1dGggaGFuZGxlcnMuXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFPcHRpb25zPzogTGFtYmRhT3B0aW9ucztcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSBmb3IgZnVuY3Rpb24gbmFtaW5nIGFuZCB0YWdnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIExhbWJkYSBmdW5jdGlvbiByZWZlcmVuY2VzIGZvciBNQ1AgT0F1dGggZW5kcG9pbnRzLlxuICogVGhlc2UgY2FuIGJlIHdpcmVkIGludG8gQVBJIEdhdGV3YXkgKHZpYSBSZXN0QXBpIGludGVncmF0aW9uKVxuICogb3IgdXNlZCBzdGFuZGFsb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhGdW5jdGlvbnMge1xuICAvKiogR0VUIC8ud2VsbC1rbm93bi9vYXV0aC1wcm90ZWN0ZWQtcmVzb3VyY2UgKi9cbiAgcmVhZG9ubHkgcHJvdGVjdGVkUmVzb3VyY2U6IExhbWJkYUZ1bmN0aW9uO1xuICAvKiogR0VUIC8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlciAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uU2VydmVyOiBMYW1iZGFGdW5jdGlvbjtcbiAgLyoqIEdFVCAvb2F1dGgvYXV0aG9yaXplICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZTogTGFtYmRhRnVuY3Rpb247XG4gIC8qKiBQT1NUIC9vYXV0aC90b2tlbiAqL1xuICByZWFkb25seSB0b2tlbjogTGFtYmRhRnVuY3Rpb247XG4gIC8qKiBQT1NUIC9vYXV0aC9yZWdpc3RlciAqL1xuICByZWFkb25seSByZWdpc3RlcjogTGFtYmRhRnVuY3Rpb247XG59XG5cbi8qKlxuICogQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgdGhlIE1DUCBPQXV0aCBmYcOnYWRlLlxuICogU2VydmljZS1hZ25vc3RpYyDigJQgcHJveGllcyBhdXRob3JpemUvdG9rZW4gcmVxdWVzdHMgdG8gYW55IHVwc3RyZWFtXG4gKiBPQXV0aDIvT0lEQyBwcm92aWRlci5cbiAqXG4gKiBVc2Ugd2l0aCBgUmVzdEFwaWAgYnkgcGFzc2luZyBgbWNwQXV0aGAgcHJvcCwgd2hpY2ggYXV0by1pbmplY3RzIHRoZVxuICogcmVxdWlyZWQgcGF0aHMgaW50byB0aGUgT3BlbkFQSSBzcGVjIGFuZCB3aXJlcyBMYW1iZGEgaW50ZWdyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtY3BBdXRoID0gbmV3IE1jcEF1dGgodGhpcywgJ01jcEF1dGgnLCB7XG4gKiAgIGFwaURvbWFpbjogJ2FwaS5leGFtcGxlLmNvbScsXG4gKiAgIGF1dGhvcml6ZUVuZHBvaW50OiAnaHR0cHM6Ly9hdXRoLmV4YW1wbGUuY29tL29hdXRoMi9hdXRob3JpemUnLFxuICogICB0b2tlbkVuZHBvaW50OiAnaHR0cHM6Ly9hdXRoLmV4YW1wbGUuY29tL29hdXRoMi90b2tlbicsXG4gKiAgIGFsbG93ZWRSZWRpcmVjdFVyaXM6IFsnaHR0cHM6Ly9jbGF1ZGUuYWkvb2F1dGgvY2FsbGJhY2snXSxcbiAqICAgY2xpZW50SWQ6ICdteS1jbGllbnQtaWQnLFxuICogICBzZXJ2ZXJJbmZvOiB7IG5hbWU6ICdteS1tY3Atc2VydmVyJywgdmVyc2lvbjogJzEuMC4wJyB9LFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBNY3BBdXRoIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbnMgY3JlYXRlZCBmb3IgdGhlIE9BdXRoIGVuZHBvaW50cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbnM6IE1jcEF1dGhGdW5jdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWFwIHRoYXQgc2hvdWxkIGJlIGluamVjdGVkIGludG8gdGhlIE1DUCBSUENcbiAgICogaGFuZGxlciBMYW1iZGEgKGlmIHlvdSBoYXZlIG9uZSkgc28gaXQgY2FuIHJlYWQgTUNQIGNvbmZpZyBhdCBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1jcEVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1jcEF1dGhQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBNQ1BfQVBJX0RPTUFJTjogcHJvcHMuYXBpRG9tYWluLFxuICAgICAgTUNQX0FVVEhPUklaRV9FTkRQT0lOVDogcHJvcHMuYXV0aG9yaXplRW5kcG9pbnQsXG4gICAgICBNQ1BfVE9LRU5fRU5EUE9JTlQ6IHByb3BzLnRva2VuRW5kcG9pbnQsXG4gICAgICBNQ1BfQ0xJRU5UX0lEOiBwcm9wcy5jbGllbnRJZCxcbiAgICAgIE1DUF9TRVJWRVJfTkFNRTogcHJvcHMuc2VydmVySW5mby5uYW1lLFxuICAgICAgTUNQX1NFUlZFUl9WRVJTSU9OOiBwcm9wcy5zZXJ2ZXJJbmZvLnZlcnNpb24sXG4gICAgICBNQ1BfUFJPVE9DT0xfVkVSU0lPTlM6IChwcm9wcy5wcm90b2NvbFZlcnNpb25zID8/IFsnMjAyNS0xMS0yNScsICcyMDI1LTAzLTI2JywgJzIwMjQtMTEtMDUnXSkuam9pbignLCcpLFxuICAgICAgTUNQX1NDT1BFUzogKHByb3BzLnNjb3BlcyA/PyBbJ29wZW5pZCcsICdlbWFpbCcsICdwcm9maWxlJ10pLmpvaW4oJywnKSxcbiAgICAgIE1DUF9BTExPV0VEX1JFRElSRUNUX1VSSVM6IHByb3BzLmFsbG93ZWRSZWRpcmVjdFVyaXMuam9pbignLCcpLFxuICAgICAgTUNQX1NUUklQX1BBUkFNRVRFUlM6IChwcm9wcy5zdHJpcFBhcmFtZXRlcnMgPz8gWydyZXNvdXJjZSddKS5qb2luKCcsJyksXG4gICAgICAuLi5wcm9wcy5hZGRpdGlvbmFsRW52LFxuICAgIH07XG5cbiAgICB0aGlzLm1jcEVudlZhcnMgPSBlbnY7XG5cbiAgICBjb25zdCBoYW5kbGVyc0RpciA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdtY3AtYXV0aCcsICdsYW1iZGEtaGFuZGxlcnMnKTtcblxuICAgIGNvbnN0IGJhc2VMYW1iZGFPcHRpb25zOiBMYW1iZGFPcHRpb25zID0ge1xuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxNSksXG4gICAgICAuLi5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCBwcm90ZWN0ZWRSZXNvdXJjZSA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnUHJvdGVjdGVkUmVzb3VyY2VGbicsIHtcbiAgICAgIHN0YWdlTmFtZTogcHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgZW50cnk6IHBhdGguam9pbihoYW5kbGVyc0RpciwgJ3Byb3RlY3RlZC1yZXNvdXJjZS5oYW5kbGVyLmpzJyksXG4gICAgICBkZXNjcmlwdGlvbjogYFske3Byb3BzLnN0YWdlTmFtZX1dIE1DUCBPQXV0aCBQcm90ZWN0ZWQgUmVzb3VyY2VgLFxuICAgICAgYWRkaXRpb25hbEVudjogZW52LFxuICAgICAgbGFtYmRhT3B0aW9uczogYmFzZUxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhdXRob3JpemF0aW9uU2VydmVyID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdBdXRob3JpemF0aW9uU2VydmVyRm4nLCB7XG4gICAgICBzdGFnZU5hbWU6IHByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oaGFuZGxlcnNEaXIsICdhdXRob3JpemF0aW9uLXNlcnZlci5oYW5kbGVyLmpzJyksXG4gICAgICBkZXNjcmlwdGlvbjogYFske3Byb3BzLnN0YWdlTmFtZX1dIE1DUCBPQXV0aCBBdXRob3JpemF0aW9uIFNlcnZlcmAsXG4gICAgICBhZGRpdGlvbmFsRW52OiBlbnYsXG4gICAgICBsYW1iZGFPcHRpb25zOiBiYXNlTGFtYmRhT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhvcml6ZSA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnQXV0aG9yaXplRm4nLCB7XG4gICAgICBzdGFnZU5hbWU6IHByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oaGFuZGxlcnNEaXIsICdhdXRob3JpemUuaGFuZGxlci5qcycpLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHtwcm9wcy5zdGFnZU5hbWV9XSBNQ1AgT0F1dGggQXV0aG9yaXplIFByb3h5YCxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IGVudixcbiAgICAgIGxhbWJkYU9wdGlvbnM6IGJhc2VMYW1iZGFPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgJ1Rva2VuRm4nLCB7XG4gICAgICBzdGFnZU5hbWU6IHByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oaGFuZGxlcnNEaXIsICd0b2tlbi5oYW5kbGVyLmpzJyksXG4gICAgICBkZXNjcmlwdGlvbjogYFske3Byb3BzLnN0YWdlTmFtZX1dIE1DUCBPQXV0aCBUb2tlbiBQcm94eWAsXG4gICAgICBhZGRpdGlvbmFsRW52OiBlbnYsXG4gICAgICBsYW1iZGFPcHRpb25zOiBiYXNlTGFtYmRhT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlZ2lzdGVyID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdSZWdpc3RlckZuJywge1xuICAgICAgc3RhZ2VOYW1lOiBwcm9wcy5zdGFnZU5hbWUsXG4gICAgICBlbnRyeTogcGF0aC5qb2luKGhhbmRsZXJzRGlyLCAncmVnaXN0ZXIuaGFuZGxlci5qcycpLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHtwcm9wcy5zdGFnZU5hbWV9XSBNQ1AgT0F1dGggUmVnaXN0ZXJgLFxuICAgICAgYWRkaXRpb25hbEVudjogZW52LFxuICAgICAgbGFtYmRhT3B0aW9uczogYmFzZUxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZ1bmN0aW9ucyA9IHtcbiAgICAgIHByb3RlY3RlZFJlc291cmNlLFxuICAgICAgYXV0aG9yaXphdGlvblNlcnZlcixcbiAgICAgIGF1dGhvcml6ZSxcbiAgICAgIHRva2VuLFxuICAgICAgcmVnaXN0ZXIsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9tY3AtYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnREFBa0M7QUFDbEMsNkNBQXVDO0FBQ3ZDLDJDQUF1QztBQUN2QyxpQ0FBdUQ7QUFnR3ZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQWFwQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW1CO1FBQzNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxHQUFHLEdBQTJCO1lBQ2xDLGNBQWMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMvQixzQkFBc0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQy9DLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ3ZDLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUM3QixlQUFlLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJO1lBQ3RDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTztZQUM1QyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNySCxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdEUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDOUQsb0JBQW9CLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3ZFLEdBQUcsS0FBSyxDQUFDLGFBQWE7U0FDdkIsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBRXRCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUU5RSxNQUFNLGlCQUFpQixHQUFrQjtZQUN2QyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLEdBQUcsS0FBSyxDQUFDLGFBQWE7U0FDdkIsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUN4RSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLCtCQUErQixDQUFDO1lBQzlELFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxTQUFTLGdDQUFnQztZQUNoRSxhQUFhLEVBQUUsR0FBRztZQUNsQixhQUFhLEVBQUUsaUJBQWlCO1NBQ2pDLENBQUMsQ0FBQztRQUVILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRTtZQUM1RSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGlDQUFpQyxDQUFDO1lBQ2hFLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxTQUFTLGtDQUFrQztZQUNsRSxhQUFhLEVBQUUsR0FBRztZQUNsQixhQUFhLEVBQUUsaUJBQWlCO1NBQ2pDLENBQUMsQ0FBQztRQUVILE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3hELFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLENBQUM7WUFDckQsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsNkJBQTZCO1lBQzdELGFBQWEsRUFBRSxHQUFHO1lBQ2xCLGFBQWEsRUFBRSxpQkFBaUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDaEQsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQztZQUNqRCxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyx5QkFBeUI7WUFDekQsYUFBYSxFQUFFLEdBQUc7WUFDbEIsYUFBYSxFQUFFLGlCQUFpQjtTQUNqQyxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFjLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUN0RCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO1lBQ3BELFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxTQUFTLHNCQUFzQjtZQUN0RCxhQUFhLEVBQUUsR0FBRztZQUNsQixhQUFhLEVBQUUsaUJBQWlCO1NBQ2pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLFNBQVM7WUFDVCxLQUFLO1lBQ0wsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2RkQsMEJBdUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uLCBMYW1iZGFPcHRpb25zIH0gZnJvbSAnLi9mdW5jJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgTUNQIEF1dGggQ0RLIGNvbnN0cnVjdC5cbiAqIFNlcnZpY2UtYWdub3N0aWM6IHdvcmtzIHdpdGggYW55IE9BdXRoMi9PSURDIHByb3ZpZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQVBJIGRvbWFpbiB0aGF0IGFjdHMgYXMgdGhlIE1DUCBPQXV0aCBpc3N1ZXIuXG4gICAqIEFsbCBPQXV0aCBkaXNjb3ZlcnkgZW5kcG9pbnRzIHdpbGwgcmVmZXJlbmNlIHRoaXMgZG9tYWluLlxuICAgKiBFeGFtcGxlOiAnYXBpLmV4YW1wbGUuY29tJ1xuICAgKi9cbiAgcmVhZG9ubHkgYXBpRG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1cHN0cmVhbSBPQXV0aCBhdXRob3JpemUgZW5kcG9pbnQgVVJMLlxuICAgKiBUaGUgYXV0aG9yaXplIExhbWJkYSBwcm94aWVzICgzMDIgcmVkaXJlY3RzKSB0byB0aGlzIFVSTC5cbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXV0aC5leGFtcGxlLmNvbS9vYXV0aDIvYXV0aG9yaXplJ1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIE9BdXRoIHRva2VuIGVuZHBvaW50IFVSTC5cbiAgICogVGhlIHRva2VuIExhbWJkYSBwcm94aWVzIFBPU1QgcmVxdWVzdHMgdG8gdGhpcyBVUkwuXG4gICAqIEV4YW1wbGU6ICdodHRwczovL2F1dGguZXhhbXBsZS5jb20vb2F1dGgyL3Rva2VuJ1xuICAgKi9cbiAgcmVhZG9ubHkgdG9rZW5FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvd2VkIHJlZGlyZWN0IFVSSXMgZm9yIGR5bmFtaWMgY2xpZW50IHJlZ2lzdHJhdGlvbi5cbiAgICogQ2xpZW50cyByZWdpc3RlcmluZyB3aXRoIFVSSXMgbm90IGluIHRoaXMgbGlzdCBhcmUgcmVqZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkUmVkaXJlY3RVcmlzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHByZS1wcm92aXNpb25lZCBPQXV0aCBjbGllbnQgSUQgcmV0dXJuZWQgYnkgdGhlIHJlZ2lzdGVyIGVuZHBvaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTUNQIHNlcnZlciBpbmZvIHJldHVybmVkIGluIHRoZSAnaW5pdGlhbGl6ZScgcmVzcG9uc2UuXG4gICAqL1xuICByZWFkb25seSBzZXJ2ZXJJbmZvOiB7IHJlYWRvbmx5IG5hbWU6IHN0cmluZzsgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRlZCBNQ1AgcHJvdG9jb2wgdmVyc2lvbnMgKG5ld2VzdCBmaXJzdCkuXG4gICAqIEBkZWZhdWx0IFsnMjAyNS0xMS0yNScsICcyMDI1LTA2LTE4JywgJzIwMjUtMDMtMjYnLCAnMjAyNC0xMS0wNSddXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbFZlcnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9BdXRoIHNjb3BlcyB0byBhZHZlcnRpc2UgaW4gZGlzY292ZXJ5IG1ldGFkYXRhLlxuICAgKiBAZGVmYXVsdCBbJ29wZW5pZCcsICdlbWFpbCcsICdwcm9maWxlJ11cbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIHRvIHN0cmlwIGZyb20gYXV0aG9yaXplL3Rva2VuIHByb3h5IHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCBbJ3Jlc291cmNlJ11cbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwUGFyYW1ldGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBpbmplY3QgaW50byBhbGwgTUNQIGF1dGggTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gb3B0aW9ucyBmb3IgTUNQIGF1dGggaGFuZGxlcnMuXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFPcHRpb25zPzogTGFtYmRhT3B0aW9ucztcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSBmb3IgZnVuY3Rpb24gbmFtaW5nIGFuZCB0YWdnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgdGhlIExhbWJkYSBmdW5jdGlvbiByZWZlcmVuY2VzIGZvciBNQ1AgT0F1dGggZW5kcG9pbnRzLlxuICogVGhlc2UgY2FuIGJlIHdpcmVkIGludG8gQVBJIEdhdGV3YXkgKHZpYSBSZXN0QXBpIGludGVncmF0aW9uKVxuICogb3IgdXNlZCBzdGFuZGFsb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhGdW5jdGlvbnMge1xuICAvKiogR0VUIC8ud2VsbC1rbm93bi9vYXV0aC1wcm90ZWN0ZWQtcmVzb3VyY2UgKi9cbiAgcmVhZG9ubHkgcHJvdGVjdGVkUmVzb3VyY2U6IExhbWJkYUZ1bmN0aW9uO1xuICAvKiogR0VUIC8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlciAqL1xuICByZWFkb25seSBhdXRob3JpemF0aW9uU2VydmVyOiBMYW1iZGFGdW5jdGlvbjtcbiAgLyoqIEdFVCAvb2F1dGgvYXV0aG9yaXplICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZTogTGFtYmRhRnVuY3Rpb247XG4gIC8qKiBQT1NUIC9vYXV0aC90b2tlbiAqL1xuICByZWFkb25seSB0b2tlbjogTGFtYmRhRnVuY3Rpb247XG4gIC8qKiBQT1NUIC9vYXV0aC9yZWdpc3RlciAqL1xuICByZWFkb25seSByZWdpc3RlcjogTGFtYmRhRnVuY3Rpb247XG59XG5cbi8qKlxuICogQ0RLIGNvbnN0cnVjdCB0aGF0IGNyZWF0ZXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgdGhlIE1DUCBPQXV0aCBmYcOnYWRlLlxuICogU2VydmljZS1hZ25vc3RpYyDigJQgcHJveGllcyBhdXRob3JpemUvdG9rZW4gcmVxdWVzdHMgdG8gYW55IHVwc3RyZWFtXG4gKiBPQXV0aDIvT0lEQyBwcm92aWRlci5cbiAqXG4gKiBVc2Ugd2l0aCBgUmVzdEFwaWAgYnkgcGFzc2luZyBgbWNwQXV0aGAgcHJvcCwgd2hpY2ggYXV0by1pbmplY3RzIHRoZVxuICogcmVxdWlyZWQgcGF0aHMgaW50byB0aGUgT3BlbkFQSSBzcGVjIGFuZCB3aXJlcyBMYW1iZGEgaW50ZWdyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBtY3BBdXRoID0gbmV3IE1jcEF1dGgodGhpcywgJ01jcEF1dGgnLCB7XG4gKiAgIGFwaURvbWFpbjogJ2FwaS5leGFtcGxlLmNvbScsXG4gKiAgIGF1dGhvcml6ZUVuZHBvaW50OiAnaHR0cHM6Ly9hdXRoLmV4YW1wbGUuY29tL29hdXRoMi9hdXRob3JpemUnLFxuICogICB0b2tlbkVuZHBvaW50OiAnaHR0cHM6Ly9hdXRoLmV4YW1wbGUuY29tL29hdXRoMi90b2tlbicsXG4gKiAgIGFsbG93ZWRSZWRpcmVjdFVyaXM6IFsnaHR0cHM6Ly9jbGF1ZGUuYWkvb2F1dGgvY2FsbGJhY2snXSxcbiAqICAgY2xpZW50SWQ6ICdteS1jbGllbnQtaWQnLFxuICogICBzZXJ2ZXJJbmZvOiB7IG5hbWU6ICdteS1tY3Atc2VydmVyJywgdmVyc2lvbjogJzEuMC4wJyB9LFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBNY3BBdXRoIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbnMgY3JlYXRlZCBmb3IgdGhlIE9BdXRoIGVuZHBvaW50cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbnM6IE1jcEF1dGhGdW5jdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWFwIHRoYXQgc2hvdWxkIGJlIGluamVjdGVkIGludG8gdGhlIE1DUCBSUENcbiAgICogaGFuZGxlciBMYW1iZGEgKGlmIHlvdSBoYXZlIG9uZSkgc28gaXQgY2FuIHJlYWQgTUNQIGNvbmZpZyBhdCBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1jcEVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1jcEF1dGhQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBNQ1BfQVBJX0RPTUFJTjogcHJvcHMuYXBpRG9tYWluLFxuICAgICAgTUNQX0FVVEhPUklaRV9FTkRQT0lOVDogcHJvcHMuYXV0aG9yaXplRW5kcG9pbnQsXG4gICAgICBNQ1BfVE9LRU5fRU5EUE9JTlQ6IHByb3BzLnRva2VuRW5kcG9pbnQsXG4gICAgICBNQ1BfQ0xJRU5UX0lEOiBwcm9wcy5jbGllbnRJZCxcbiAgICAgIE1DUF9TRVJWRVJfTkFNRTogcHJvcHMuc2VydmVySW5mby5uYW1lLFxuICAgICAgTUNQX1NFUlZFUl9WRVJTSU9OOiBwcm9wcy5zZXJ2ZXJJbmZvLnZlcnNpb24sXG4gICAgICBNQ1BfUFJPVE9DT0xfVkVSU0lPTlM6IChwcm9wcy5wcm90b2NvbFZlcnNpb25zID8/IFsnMjAyNS0xMS0yNScsICcyMDI1LTA2LTE4JywgJzIwMjUtMDMtMjYnLCAnMjAyNC0xMS0wNSddKS5qb2luKCcsJyksXG4gICAgICBNQ1BfU0NPUEVTOiAocHJvcHMuc2NvcGVzID8/IFsnb3BlbmlkJywgJ2VtYWlsJywgJ3Byb2ZpbGUnXSkuam9pbignLCcpLFxuICAgICAgTUNQX0FMTE9XRURfUkVESVJFQ1RfVVJJUzogcHJvcHMuYWxsb3dlZFJlZGlyZWN0VXJpcy5qb2luKCcsJyksXG4gICAgICBNQ1BfU1RSSVBfUEFSQU1FVEVSUzogKHByb3BzLnN0cmlwUGFyYW1ldGVycyA/PyBbJ3Jlc291cmNlJ10pLmpvaW4oJywnKSxcbiAgICAgIC4uLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgfTtcblxuICAgIHRoaXMubWNwRW52VmFycyA9IGVudjtcblxuICAgIGNvbnN0IGhhbmRsZXJzRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ21jcC1hdXRoJywgJ2xhbWJkYS1oYW5kbGVycycpO1xuXG4gICAgY29uc3QgYmFzZUxhbWJkYU9wdGlvbnM6IExhbWJkYU9wdGlvbnMgPSB7XG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDE1KSxcbiAgICAgIC4uLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IHByb3RlY3RlZFJlc291cmNlID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdQcm90ZWN0ZWRSZXNvdXJjZUZuJywge1xuICAgICAgc3RhZ2VOYW1lOiBwcm9wcy5zdGFnZU5hbWUsXG4gICAgICBlbnRyeTogcGF0aC5qb2luKGhhbmRsZXJzRGlyLCAncHJvdGVjdGVkLXJlc291cmNlLmhhbmRsZXIuanMnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7cHJvcHMuc3RhZ2VOYW1lfV0gTUNQIE9BdXRoIFByb3RlY3RlZCBSZXNvdXJjZWAsXG4gICAgICBhZGRpdGlvbmFsRW52OiBlbnYsXG4gICAgICBsYW1iZGFPcHRpb25zOiBiYXNlTGFtYmRhT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb25TZXJ2ZXIgPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgJ0F1dGhvcml6YXRpb25TZXJ2ZXJGbicsIHtcbiAgICAgIHN0YWdlTmFtZTogcHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgZW50cnk6IHBhdGguam9pbihoYW5kbGVyc0RpciwgJ2F1dGhvcml6YXRpb24tc2VydmVyLmhhbmRsZXIuanMnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7cHJvcHMuc3RhZ2VOYW1lfV0gTUNQIE9BdXRoIEF1dGhvcml6YXRpb24gU2VydmVyYCxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IGVudixcbiAgICAgIGxhbWJkYU9wdGlvbnM6IGJhc2VMYW1iZGFPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXV0aG9yaXplID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdBdXRob3JpemVGbicsIHtcbiAgICAgIHN0YWdlTmFtZTogcHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgZW50cnk6IHBhdGguam9pbihoYW5kbGVyc0RpciwgJ2F1dGhvcml6ZS5oYW5kbGVyLmpzJyksXG4gICAgICBkZXNjcmlwdGlvbjogYFske3Byb3BzLnN0YWdlTmFtZX1dIE1DUCBPQXV0aCBBdXRob3JpemUgUHJveHlgLFxuICAgICAgYWRkaXRpb25hbEVudjogZW52LFxuICAgICAgbGFtYmRhT3B0aW9uczogYmFzZUxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCAnVG9rZW5GbicsIHtcbiAgICAgIHN0YWdlTmFtZTogcHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgZW50cnk6IHBhdGguam9pbihoYW5kbGVyc0RpciwgJ3Rva2VuLmhhbmRsZXIuanMnKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7cHJvcHMuc3RhZ2VOYW1lfV0gTUNQIE9BdXRoIFRva2VuIFByb3h5YCxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IGVudixcbiAgICAgIGxhbWJkYU9wdGlvbnM6IGJhc2VMYW1iZGFPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVnaXN0ZXIgPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgJ1JlZ2lzdGVyRm4nLCB7XG4gICAgICBzdGFnZU5hbWU6IHByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oaGFuZGxlcnNEaXIsICdyZWdpc3Rlci5oYW5kbGVyLmpzJyksXG4gICAgICBkZXNjcmlwdGlvbjogYFske3Byb3BzLnN0YWdlTmFtZX1dIE1DUCBPQXV0aCBSZWdpc3RlcmAsXG4gICAgICBhZGRpdGlvbmFsRW52OiBlbnYsXG4gICAgICBsYW1iZGFPcHRpb25zOiBiYXNlTGFtYmRhT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuZnVuY3Rpb25zID0ge1xuICAgICAgcHJvdGVjdGVkUmVzb3VyY2UsXG4gICAgICBhdXRob3JpemF0aW9uU2VydmVyLFxuICAgICAgYXV0aG9yaXplLFxuICAgICAgdG9rZW4sXG4gICAgICByZWdpc3RlcixcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -39,7 +39,7 @@ export interface McpCognitoAuthProps {
|
|
|
39
39
|
};
|
|
40
40
|
/**
|
|
41
41
|
* Supported MCP protocol versions (newest first).
|
|
42
|
-
* @default ['2025-11-25', '2025-03-26', '2024-11-05']
|
|
42
|
+
* @default ['2025-11-25', '2025-06-18', '2025-03-26', '2024-11-05']
|
|
43
43
|
*/
|
|
44
44
|
readonly protocolVersions?: string[];
|
|
45
45
|
/**
|
|
@@ -73,4 +73,4 @@ class McpCognitoAuth extends constructs_1.Construct {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
exports.McpCognitoAuth = McpCognitoAuth;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLWNvZ25pdG8tYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL21jcC1jb2duaXRvLWF1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQTBDO0FBQzFDLDJDQUF1QztBQUd2Qyx5Q0FBcUM7QUFrRnJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQWEzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLGNBQWMsQ0FBQztRQUUzRCxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsSUFBSTtZQUN2RCxrQ0FBa0M7WUFDbEMseUNBQXlDO1lBQ3pDLG9DQUFvQztTQUNyQyxDQUFDO1FBRUYsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7WUFDM0QsY0FBYyxFQUFFLEtBQUs7WUFDckIsS0FBSyxFQUFFO2dCQUNMLEtBQUssRUFBRTtvQkFDTCxzQkFBc0IsRUFBRSxJQUFJO2lCQUM3QjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04seUJBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTTtvQkFDN0IseUJBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSztvQkFDNUIseUJBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTztpQkFDL0I7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLEdBQUcsbUJBQW1CO29CQUN0QixHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztpQkFDeEM7YUFDRjtZQUNELFNBQVMsRUFBRTtnQkFDVCxPQUFPLEVBQUUsSUFBSTthQUNkO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxrQkFBTyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDMUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGlCQUFpQixFQUFFLFdBQVcsS0FBSyxDQUFDLFVBQVUsbUJBQW1CO1lBQ2pFLGFBQWEsRUFBRSxXQUFXLEtBQUssQ0FBQyxVQUFVLGVBQWU7WUFDekQsbUJBQW1CO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQjtZQUM5QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBN0RELHdDQTZEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19jb2duaXRvIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBDb2duaXRvQXV0aGVudGljYXRpb24gfSBmcm9tICcuL2F1dGhlbnRpY2F0aW9uJztcbmltcG9ydCB7IExhbWJkYU9wdGlvbnMgfSBmcm9tICcuL2Z1bmMnO1xuaW1wb3J0IHsgTWNwQXV0aCB9IGZyb20gJy4vbWNwLWF1dGgnO1xuXG4vKipcbiAqIFByb3BzIGZvciBjcmVhdGluZyBhbiBNY3BBdXRoIGJhY2tlZCBieSBhIENvZ25pdG8gVXNlciBQb29sLlxuICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIg4oCUIHVzZSBNY3BBdXRoIGRpcmVjdGx5IGZvciBub24tQ29nbml0byBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWNwQ29nbml0b0F1dGhQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQ29nbml0b0F1dGhlbnRpY2F0aW9uIGNvbnN0cnVjdCB0aGF0IG1hbmFnZXMgdGhlIHVzZXIgcG9vbC5cbiAgICogQSBkZWRpY2F0ZWQgdXNlciBwb29sIGNsaWVudCB3aWxsIGJlIGNyZWF0ZWQgZm9yIE1DUCBjb25uZWN0b3JzLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aDogQ29nbml0b0F1dGhlbnRpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIGRvbWFpbiB0aGF0IGFjdHMgYXMgdGhlIE1DUCBPQXV0aCBpc3N1ZXIuXG4gICAqIEFsbCBkaXNjb3ZlcnkgZW5kcG9pbnRzIHdpbGwgcmVmZXJlbmNlIHRoaXMgZG9tYWluLlxuICAgKiBFeGFtcGxlOiAnYXBpLmV4YW1wbGUuY29tJ1xuICAgKi9cbiAgcmVhZG9ubHkgYXBpRG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIGF1dGggZG9tYWluIChjdXN0b20gZG9tYWluIG9yIENvZ25pdG8taG9zdGVkIGRvbWFpbikuXG4gICAqIEF1dGhvcml6ZSBhbmQgdG9rZW4gcmVxdWVzdHMgYXJlIHByb3hpZWQgaGVyZS5cbiAgICogRXhhbXBsZTogJ2F1dGguZXhhbXBsZS5jb20nIG9yICdteWFwcC5hdXRoLmV1LWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSdcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhEb21haW46IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dlZCByZWRpcmVjdCBVUklzIGZvciBkeW5hbWljIGNsaWVudCByZWdpc3RyYXRpb24uXG4gICAqIEBkZWZhdWx0IFsnaHR0cHM6Ly9jbGF1ZGUuYWkvb2F1dGgvY2FsbGJhY2snLCAnaHR0cHM6Ly9jbGF1ZGUuYWkvYXBpL21jcC9hdXRoX2NhbGxiYWNrJywgJ2h0dHBzOi8vY2hhdGdwdC5jb20vb2F1dGgvY2FsbGJhY2snXVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFJlZGlyZWN0VXJpcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNQ1Agc2VydmVyIGluZm8gcmV0dXJuZWQgaW4gdGhlICdpbml0aWFsaXplJyByZXNwb25zZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlckluZm86IHsgcmVhZG9ubHkgbmFtZTogc3RyaW5nOyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU3VwcG9ydGVkIE1DUCBwcm90b2NvbCB2ZXJzaW9ucyAobmV3ZXN0IGZpcnN0KS5cbiAgICogQGRlZmF1bHQgWycyMDI1LTExLTI1JywgJzIwMjUtMDYtMTgnLCAnMjAyNS0wMy0yNicsICcyMDI0LTExLTA1J11cbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sVmVyc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogT0F1dGggc2NvcGVzIHRvIGFkdmVydGlzZSBpbiBkaXNjb3ZlcnkgbWV0YWRhdGEuXG4gICAqIE5vdGU6IERvIE5PVCBpbmNsdWRlIGN1c3RvbSByZXNvdXJjZSBzZXJ2ZXIgc2NvcGVzIGhlcmUg4oCUXG4gICAqIENvZ25pdG8gTWFuYWdlZCBMb2dpbiB2MiByZXF1aXJlcyBSRkMgODcwNyByZXNvdXJjZSBwYXJhbWV0ZXJcbiAgICogZm9yIGN1c3RvbSBzY29wZXMgd2hpY2ggTUNQIGNsaWVudHMgY2Fubm90IHN1cHBseS5cbiAgICogQGRlZmF1bHQgWydvcGVuaWQnLCAnZW1haWwnLCAncHJvZmlsZSddXG4gICAqL1xuICByZWFkb25seSBzY29wZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIE1DUCBhdXRoIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIG9wdGlvbnMgZm9yIE1DUCBhdXRoIGhhbmRsZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhT3B0aW9ucz86IExhbWJkYU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFN0YWdlIG5hbWUgZm9yIGZ1bmN0aW9uIG5hbWluZyBhbmQgdGFnZ2luZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgSUQgZm9yIHRoZSB1c2VyIHBvb2wgY2xpZW50IChhZmZlY3RzIENsb3VkRm9ybWF0aW9uIGxvZ2ljYWwgSUQpLlxuICAgKiBAZGVmYXVsdCAnbWNwQ29ubmVjdG9yJ1xuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q29uc3RydWN0SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgT0F1dGggY2FsbGJhY2sgVVJMcyB0byBjb25maWd1cmUgb24gdGhlIENvZ25pdG8gY2xpZW50XG4gICAqIGJleW9uZCB0aGUgYWxsb3dlZFJlZGlyZWN0VXJpcy4gVXNlZnVsIGlmIHRoZSBDb2duaXRvIGNsaWVudCBuZWVkc1xuICAgKiBVUkxzIHRoYXQgYXJlbid0IGluIHRoZSBNQ1AgcmVnaXN0cmF0aW9uIGFsbG93bGlzdC5cbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxDYWxsYmFja1VybHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZW5pZW5jZSBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuIE1jcEF1dGggYmFja2VkIGJ5IEFtYXpvbiBDb2duaXRvLlxuICpcbiAqIEl0IGNyZWF0ZXMgYSBkZWRpY2F0ZWQgQ29nbml0byB1c2VyIHBvb2wgY2xpZW50IGNvbmZpZ3VyZWQgZm9yIHRoZVxuICogYXV0aG9yaXphdGlvbiBjb2RlICsgUEtDRSBmbG93IGFuZCB3aXJlcyBpdCBpbnRvIHRoZSBnZW5lcmljIE1jcEF1dGhcbiAqIGNvbnN0cnVjdC4gVXNlIHRoaXMgd2hlbiB5b3VyIGF1dGhlbnRpY2F0aW9uIGlzIG1hbmFnZWQgYnkgQ29nbml0bztcbiAqIHVzZSBNY3BBdXRoIGRpcmVjdGx5IGZvciBvdGhlciBPQXV0aDIvT0lEQyBwcm92aWRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IG1jcEF1dGggPSBuZXcgTWNwQ29nbml0b0F1dGgodGhpcywgJ01jcEF1dGgnLCB7XG4gKiAgIGF1dGg6IGNvZ25pdG9BdXRoZW50aWNhdGlvbixcbiAqICAgYXBpRG9tYWluOiAnYXBpLmV4YW1wbGUuY29tJyxcbiAqICAgYXV0aERvbWFpbjogJ2F1dGguZXhhbXBsZS5jb20nLFxuICogICBzZXJ2ZXJJbmZvOiB7IG5hbWU6ICdteS1tY3Atc2VydmVyJywgdmVyc2lvbjogJzEuMC4wJyB9LFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogfSk7XG4gKlxuICogY29uc3QgYXBpID0gbmV3IE15QXBpUmVzdEFwaSh0aGlzLCAnQXBpJywge1xuICogICBtY3BBdXRoOiBtY3BBdXRoLm1jcEF1dGgsXG4gKiAgIC8vIC4uLlxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBNY3BDb2duaXRvQXV0aCBleHRlbmRzIENvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmRlcmx5aW5nIHNlcnZpY2UtYWdub3N0aWMgTWNwQXV0aCBjb25zdHJ1Y3QuXG4gICAqIFBhc3MgdGhpcyB0byBSZXN0QXBpJ3MgYG1jcEF1dGhgIHByb3AuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWNwQXV0aDogTWNwQXV0aDtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gdXNlciBwb29sIGNsaWVudCBjcmVhdGVkIGZvciBNQ1AgY29ubmVjdG9ycy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VyUG9vbENsaWVudDogYXdzX2NvZ25pdG8uVXNlclBvb2xDbGllbnQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1jcENvZ25pdG9BdXRoUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY2xpZW50SWQgPSBwcm9wcy5jbGllbnRDb25zdHJ1Y3RJZCA/PyAnbWNwQ29ubmVjdG9yJztcblxuICAgIGNvbnN0IGFsbG93ZWRSZWRpcmVjdFVyaXMgPSBwcm9wcy5hbGxvd2VkUmVkaXJlY3RVcmlzID8/IFtcbiAgICAgICdodHRwczovL2NsYXVkZS5haS9vYXV0aC9jYWxsYmFjaycsXG4gICAgICAnaHR0cHM6Ly9jbGF1ZGUuYWkvYXBpL21jcC9hdXRoX2NhbGxiYWNrJyxcbiAgICAgICdodHRwczovL2NoYXRncHQuY29tL29hdXRoL2NhbGxiYWNrJyxcbiAgICBdO1xuXG4gICAgLy8gQ3JlYXRlIGEgQ29nbml0byB1c2VyIHBvb2wgY2xpZW50IHdpdGggYXV0aCBjb2RlIGdyYW50ICsgUEtDRVxuICAgIHRoaXMudXNlclBvb2xDbGllbnQgPSBwcm9wcy5hdXRoLmFkZFVzZXJQb29sQ2xpZW50KGNsaWVudElkLCB7XG4gICAgICBnZW5lcmF0ZVNlY3JldDogZmFsc2UsXG4gICAgICBvQXV0aDoge1xuICAgICAgICBmbG93czoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb25Db2RlR3JhbnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNjb3BlczogW1xuICAgICAgICAgIGF3c19jb2duaXRvLk9BdXRoU2NvcGUuT1BFTklELFxuICAgICAgICAgIGF3c19jb2duaXRvLk9BdXRoU2NvcGUuRU1BSUwsXG4gICAgICAgICAgYXdzX2NvZ25pdG8uT0F1dGhTY29wZS5QUk9GSUxFLFxuICAgICAgICBdLFxuICAgICAgICBjYWxsYmFja1VybHM6IFtcbiAgICAgICAgICAuLi5hbGxvd2VkUmVkaXJlY3RVcmlzLFxuICAgICAgICAgIC4uLihwcm9wcy5hZGRpdGlvbmFsQ2FsbGJhY2tVcmxzID8/IFtdKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBhdXRoRmxvd3M6IHtcbiAgICAgICAgdXNlclNycDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGdlbmVyaWMgTWNwQXV0aCwgZGVyaXZpbmcgZW5kcG9pbnRzIGZyb20gYXV0aERvbWFpblxuICAgIHRoaXMubWNwQXV0aCA9IG5ldyBNY3BBdXRoKHRoaXMsICdNY3BBdXRoJywge1xuICAgICAgYXBpRG9tYWluOiBwcm9wcy5hcGlEb21haW4sXG4gICAgICBhdXRob3JpemVFbmRwb2ludDogYGh0dHBzOi8vJHtwcm9wcy5hdXRoRG9tYWlufS9vYXV0aDIvYXV0aG9yaXplYCxcbiAgICAgIHRva2VuRW5kcG9pbnQ6IGBodHRwczovLyR7cHJvcHMuYXV0aERvbWFpbn0vb2F1dGgyL3Rva2VuYCxcbiAgICAgIGFsbG93ZWRSZWRpcmVjdFVyaXMsXG4gICAgICBjbGllbnRJZDogdGhpcy51c2VyUG9vbENsaWVudC51c2VyUG9vbENsaWVudElkLFxuICAgICAgc2VydmVySW5mbzogcHJvcHMuc2VydmVySW5mbyxcbiAgICAgIHByb3RvY29sVmVyc2lvbnM6IHByb3BzLnByb3RvY29sVmVyc2lvbnMsXG4gICAgICBzY29wZXM6IHByb3BzLnNjb3BlcyxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IHByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBsYW1iZGFPcHRpb25zOiBwcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgc3RhZ2VOYW1lOiBwcm9wcy5zdGFnZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -80,7 +80,7 @@ export interface McpAuthOptions {
|
|
|
80
80
|
readonly allowedRedirectUris?: string[];
|
|
81
81
|
/**
|
|
82
82
|
* Supported MCP protocol versions (newest first).
|
|
83
|
-
* @default ['2025-11-25', '2025-03-26', '2024-11-05']
|
|
83
|
+
* @default ['2025-11-25', '2025-06-18', '2025-03-26', '2024-11-05']
|
|
84
84
|
*/
|
|
85
85
|
readonly protocolVersions?: string[];
|
|
86
86
|
/**
|
|
@@ -785,4 +785,4 @@ class RestApi extends base_api_1.BaseApi {
|
|
|
785
785
|
}
|
|
786
786
|
}
|
|
787
787
|
exports.RestApi = RestApi;
|
|
788
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBOEI7QUFDOUIsNkNBTXFCO0FBQ3JCLGlEQUFtQztBQUVuQyw4Q0FBZ0M7QUFHaEMseUNBQW1EO0FBQ25ELGlDQUF1RDtBQUN2RCx5Q0FBcUM7QUFDckMseURBQW9EO0FBQ3BELCtDQUF3RztBQTROeEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSxPQUFvQixTQUFRLGtCQUFPO0lBK0M5Qzs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFVLEtBQXdCO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRHdCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBMUMxRTs7O1dBR0c7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQUVsRCxlQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQWUzRjs7O1dBR0c7UUFDSyx5QkFBb0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV0RDs7Ozs7V0FLRztRQUNLLCtCQUEwQixHQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBWWpFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFhLENBQUM7UUFFM0YsSUFBSSxnQkFBOEQsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixnQkFBZ0IsR0FBRztnQkFD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LENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG9CQUFvQixDQUMxQixjQUFxQixFQUNyQixXQUErQixFQUMvQixrQkFBd0Q7UUFFeEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyw4REFBOEQ7UUFDOUQsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBcUMsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sT0FBTyxHQUE2QixFQUFFLENBQUM7WUFDN0MsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUM3QixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUY7QUFuekJELDBCQW16QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsXG4gIGF3c19pYW0sXG4gIGF3c19yb3V0ZTUzLFxuICBhd3Nfcm91dGU1M190YXJnZXRzLFxuICBhd3NfYXBpZ2F0ZXdheSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IE9wZW5BUEkzLCBPcGVyYXRpb25PYmplY3QsIFBhdGhJdGVtT2JqZWN0IH0gZnJvbSAnb3BlbmFwaS10eXBlc2NyaXB0JztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiwgSUNvZ25pdG9BdXRoZW50aWNhdGlvbiwgSUp3dEF1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uLCBMYW1iZGFPcHRpb25zIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IE1jcEF1dGggfSBmcm9tICcuL21jcC1hdXRoJztcbmltcG9ydCB7IE1jcENvZ25pdG9BdXRoIH0gZnJvbSAnLi9tY3AtY29nbml0by1hdXRoJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfRE9NQUlOTkFNRSwgQ0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9VUkwgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbi8qKlxuICogQ29nbml0by1zcGVjaWZpYyBNQ1AgYXV0aCBjb25maWd1cmF0aW9uLlxuICogQ3JlYXRlcyBhIGRlZGljYXRlZCB1c2VyIHBvb2wgY2xpZW50IGZvciBNQ1AgY29ubmVjdG9ycyBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhDb2duaXRvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQ29nbml0b0F1dGhlbnRpY2F0aW9uIGNvbnN0cnVjdCBtYW5hZ2luZyB0aGUgdXNlciBwb29sLlxuICAgKiBBIGRlZGljYXRlZCBjbGllbnQgd2l0aCBhdXRoIGNvZGUgKyBQS0NFIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGg6IENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gYXV0aCBkb21haW4gKGN1c3RvbSBvciBDb2duaXRvLWhvc3RlZCkuXG4gICAqIFJlcXVpcmVkIOKAlCBuZXZlciBpbmZlcnJlZCBmcm9tIGFwaURvbWFpbi5cbiAgICogRXhhbXBsZTogJ2F1dGguZXhhbXBsZS5jb20nXG4gICAqL1xuICByZWFkb25seSBhdXRoRG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBJRCBmb3IgdGhlIHVzZXIgcG9vbCBjbGllbnQgKGFmZmVjdHMgQ2xvdWRGb3JtYXRpb24gbG9naWNhbCBJRCkuXG4gICAqIEBkZWZhdWx0ICdtY3BDb25uZWN0b3InXG4gICAqL1xuICByZWFkb25seSBjbGllbnRDb25zdHJ1Y3RJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBPQXV0aCBjYWxsYmFjayBVUkxzIGZvciB0aGUgQ29nbml0byBjbGllbnQgYmV5b25kIHRoZSBhbGxvd2VkUmVkaXJlY3RVcmlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbENhbGxiYWNrVXJscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgKG5vbi1Db2duaXRvKSBNQ1AgYXV0aCBjb25maWd1cmF0aW9uLlxuICogUmVxdWlyZXMgZXhwbGljaXQgYXV0aG9yaXplIGFuZCB0b2tlbiBlbmRwb2ludCBVUkxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhHZW5lcmljT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdXBzdHJlYW0gT0F1dGggYXV0aG9yaXplIGVuZHBvaW50IFVSTC5cbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXV0aC5leGFtcGxlLmNvbS9vYXV0aDIvYXV0aG9yaXplJ1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIE9BdXRoIHRva2VuIGVuZHBvaW50IFVSTC5cbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXV0aC5leGFtcGxlLmNvbS9vYXV0aDIvdG9rZW4nXG4gICAqL1xuICByZWFkb25seSB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmUtcHJvdmlzaW9uZWQgT0F1dGggY2xpZW50IElEIHJldHVybmVkIGJ5IHRoZSByZWdpc3RlciBlbmRwb2ludC5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTUNQIGF1dGggY29uZmlndXJhdGlvbiBmb3IgdGhlIFJlc3RBcGkuXG4gKiBQcm92aWRlIGVpdGhlciBgY29nbml0b2AgKGZvciBDb2duaXRvLWJhY2tlZCBhdXRoKSBvciBgZ2VuZXJpY2AgKGZvciBhbnkgT0F1dGgyIHByb3ZpZGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNY3BBdXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb2duaXRvLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBnZW5lcmljYC5cbiAgICogQ3JlYXRlcyBhIHVzZXIgcG9vbCBjbGllbnQgYW5kIGRlcml2ZXMgZW5kcG9pbnRzIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSBjb2duaXRvPzogTWNwQXV0aENvZ25pdG9PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBHZW5lcmljIE9BdXRoMiBwcm92aWRlciBjb25maWd1cmF0aW9uLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgY29nbml0b2AuXG4gICAqIFJlcXVpcmVzIGV4cGxpY2l0IGVuZHBvaW50IFVSTHMgYW5kIGNsaWVudCBJRC5cbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyaWM/OiBNY3BBdXRoR2VuZXJpY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIE1DUCBzZXJ2ZXIgaW5mbyByZXR1cm5lZCBpbiB0aGUgJ2luaXRpYWxpemUnIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVySW5mbzogeyByZWFkb25seSBuYW1lOiBzdHJpbmc7IHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbGxvd2VkIHJlZGlyZWN0IFVSSXMgZm9yIGR5bmFtaWMgY2xpZW50IHJlZ2lzdHJhdGlvbi5cbiAgICogQGRlZmF1bHQgWydodHRwczovL2NsYXVkZS5haS9vYXV0aC9jYWxsYmFjaycsICdodHRwczovL2NsYXVkZS5haS9hcGkvbWNwL2F1dGhfY2FsbGJhY2snLCAnaHR0cHM6Ly9jaGF0Z3B0LmNvbS9vYXV0aC9jYWxsYmFjayddXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkUmVkaXJlY3RVcmlzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRlZCBNQ1AgcHJvdG9jb2wgdmVyc2lvbnMgKG5ld2VzdCBmaXJzdCkuXG4gICAqIEBkZWZhdWx0IFsnMjAyNS0xMS0yNScsICcyMDI1LTAzLTI2JywgJzIwMjQtMTEtMDUnXVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2xWZXJzaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPQXV0aCBzY29wZXMgdG8gYWR2ZXJ0aXNlIGluIGRpc2NvdmVyeSBtZXRhZGF0YS5cbiAgICogQGRlZmF1bHQgWydvcGVuaWQnLCAnZW1haWwnLCAncHJvZmlsZSddXG4gICAqL1xuICByZWFkb25seSBzY29wZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGFyYW1ldGVycyB0byBzdHJpcCBmcm9tIGF1dGhvcml6ZS90b2tlbiBwcm94eSByZXF1ZXN0cy5cbiAgICogQGRlZmF1bHQgWydyZXNvdXJjZSddXG4gICAqL1xuICByZWFkb25seSBzdHJpcFBhcmFtZXRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGFtYmRhIGZ1bmN0aW9uIG9wdGlvbnMgZm9yIE1DUCBhdXRoIGhhbmRsZXJzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFtYmRhT3B0aW9ucz86IExhbWJkYU9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEFwaVByb3BzPE9QUz4gZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSByb3V0ZXMgZm9yIGFsbCBlbmRwb2ludHMgY29uZmlndXJlZCBpbiB0aGUgb3BlbmFwaS55YW1sIGZpbGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0dlbmVyYXRlUm91dGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogY3VzdG9tIG9wdGlvbnMgZm9yIHRoZSBjcmVhdGVkIEh0dHBBcGlcbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgcmVzdEFwaVByb3BzPzogYXdzX2FwaWdhdGV3YXkuUmVzdEFwaUJhc2VQcm9wcztcblxuICAvKipcbiAgICogYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgdW5kZXJseWluZyBMYW1iZGEgZnVuY3Rpb24gY29uc3RydWN0IHBlciBvcGVyYXRpb25JZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICBsYW1iZGFPcHRpb25zQnlPcGVyYXRpb24/OiB7IFtvcGVyYXRpb25JZCBpbiBrZXlvZiBPUFNdPzogTGFtYmRhT3B0aW9ucyB9O1xuXG4gIGRlZmluaXRpb25GaWxlTmFtZTogc3RyaW5nO1xuXG4gIGNvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBvcGVyYXRpb24gSURzIHRoYXQgc2hvdWxkIHNraXAgdGhlIGF1dGhvcml6ZXIgZW50aXJlbHkuXG4gICAqIFRoZXNlIG9wZXJhdGlvbnMgd2lsbCBoYXZlIGBzZWN1cml0eTogW11gIGluIHRoZSBPcGVuQVBJIHNwZWMsIG1lYW5pbmdcbiAgICogdGhleSBhcmUgcHVibGljbHkgYWNjZXNzaWJsZSB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFub255bW91cyBvcGVyYXRpb25zXG4gICAqL1xuICBhbm9ueW1vdXNPcGVyYXRpb25zPzogKGtleW9mIE9QUylbXTtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0aGUgSldUIExhbWJkYSBhdXRob3JpemVyIHVzZXMgdGhlIFRPS0VOIG9yIFJFUVVFU1QgdHlwZS5cbiAgICpcbiAgICogKip0b2tlbiAoZGVmYXVsdCk6KiogVGhlIEFQSSBHYXRld2F5IHZhbGlkYXRlcyB0aGF0IHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcmVzZW50XG4gICAqIGJlZm9yZSBpbnZva2luZyB0aGUgTGFtYmRhIGF1dGhvcml6ZXIuIElmIHRoZSBoZWFkZXIgaXMgbWlzc2luZywgQVBJIEdhdGV3YXkgaW1tZWRpYXRlbHlcbiAgICogcmV0dXJucyA0MDEgd2l0aG91dCBpbnZva2luZyB0aGUgTGFtYmRhLiBUaGlzIGlzIGNoZWFwZXIgZm9yIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0c1xuICAgKiBiZWNhdXNlIG5vIExhbWJkYSBpbnZvY2F0aW9uIG9jY3VycywgYnV0IGl0IGRvZXMgbm90IHN1cHBvcnQgb3B0aW9uYWwgYXV0aGVudGljYXRpb25cbiAgICogKGV2ZXJ5IHJlcXVlc3QgbXVzdCBjYXJyeSBhIHRva2VuIG9yIGJlIHJlamVjdGVkKS5cbiAgICpcbiAgICogKipyZXF1ZXN0OioqIFRoZSBBUEkgR2F0ZXdheSBhbHdheXMgaW52b2tlcyB0aGUgTGFtYmRhIGF1dGhvcml6ZXIgcmVnYXJkbGVzcyBvZiB3aGV0aGVyXG4gICAqIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcmVzZW50LiBUaGlzIGVuYWJsZXMgb3B0aW9uYWwgYXV0aGVudGljYXRpb246IHRoZSBMYW1iZGFcbiAgICogY2FuIGluc3BlY3QgdGhlIHJlcXVlc3QsIHJldHVybiBBbGxvdyB3aXRoIGFuIGFub255bW91cyBwcmluY2lwYWwgd2hlbiBubyB0b2tlbiBpc1xuICAgKiBwcm92aWRlZCwgYW5kIHJldHVybiBBbGxvdyB3aXRoIHVzZXIgY2xhaW1zIHdoZW4gYSB2YWxpZCB0b2tlbiBpcyBwcmVzZW50LiBUaGUgdHJhZGUtb2ZmXG4gICAqIGlzIHRoYXQgeW91IHBheSBmb3IgYSBMYW1iZGEgaW52b2NhdGlvbiBvbiBldmVyeSByZXF1ZXN0LCBpbmNsdWRpbmcgdW5hdXRoZW50aWNhdGVkIG9uZXMuXG4gICAqXG4gICAqIFVzZSAncmVxdWVzdCcgd2hlbiB5b3UgbmVlZCBlbmRwb2ludHMgdGhhdCBiZWhhdmUgZGlmZmVyZW50bHkgZm9yIGF1dGhlbnRpY2F0ZWQgdnNcbiAgICogYW5vbnltb3VzIHVzZXJzIChlLmcuLCBwZXJzb25hbGl6ZWQgcmVzcG9uc2VzIGZvciBsb2dnZWQtaW4gdXNlcnMsIGdlbmVyaWMgcmVzcG9uc2VzXG4gICAqIGZvciBndWVzdHMpIHdpdGhvdXQgc3BsaXR0aW5nIHRoZW0gaW50byBzZXBhcmF0ZSBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAndG9rZW4nXG4gICAqL1xuICBqd3RBdXRob3JpemVyVHlwZT86ICd0b2tlbicgfCAncmVxdWVzdCc7XG5cbiAgLyoqXG4gICAqIE1DUCBBdXRoIGNvbmZpZ3VyYXRpb24gdG8gd2lyZSBpbnRvIHRoaXMgQVBJLlxuICAgKiBXaGVuIHByb3ZpZGVkLCB0aGUgZm9sbG93aW5nIHBhdGhzIGFyZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBPcGVuQVBJIHNwZWNcbiAgICogd2l0aCBMYW1iZGEgcHJveHkgaW50ZWdyYXRpb25zOlxuICAgKlxuICAgKiAtIEdFVCAgLy53ZWxsLWtub3duL29hdXRoLXByb3RlY3RlZC1yZXNvdXJjZVxuICAgKiAtIEdFVCAgLy53ZWxsLWtub3duL29hdXRoLWF1dGhvcml6YXRpb24tc2VydmVyXG4gICAqIC0gR0VUICAvb2F1dGgvYXV0aG9yaXplXG4gICAqIC0gUE9TVCAvb2F1dGgvdG9rZW5cbiAgICogLSBQT1NUIC9vYXV0aC9yZWdpc3RlclxuICAgKlxuICAgKiBBbGwgTUNQIGF1dGggZW5kcG9pbnRzIGFyZSBhbm9ueW1vdXMgKG5vIGF1dGhvcml6ZXIpLlxuICAgKiBUaGUgQVBJIGRvbWFpbiBpcyBkZXJpdmVkIGZyb20gdGhlIFJlc3RBcGkncyBvd24gZG9tYWluIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFByb3ZpZGUgZWl0aGVyIGBjb2duaXRvYCAoY3JlYXRlcyBhIENvZ25pdG8gY2xpZW50IGF1dG9tYXRpY2FsbHkpIG9yXG4gICAqIGBnZW5lcmljYCAoZm9yIGFueSBPQXV0aDIgcHJvdmlkZXIgd2l0aCBleHBsaWNpdCBlbmRwb2ludCBVUkxzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBNQ1AgYXV0aFxuICAgKi9cbiAgbWNwQXV0aD86IE1jcEF1dGhPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBHbG9iYWwgT0F1dGgyIHNjb3BlcyByZXF1aXJlZCBieSB0aGUgQ29nbml0byBhdXRob3JpemVyLlxuICAgKlxuICAgKiBXaGVuIHNjb3BlcyBhcmUgcHJlc2VudCwgQVBJIEdhdGV3YXkgdmFsaWRhdGVzIHRoZSAqKmFjY2VzcyB0b2tlbioqIGFuZCBjaGVja3NcbiAgICogdGhhdCBpdCBjb250YWlucyBhdCBsZWFzdCBvbmUgb2YgdGhlIHNwZWNpZmllZCBzY29wZXMuIEFuIGVtcHR5IGFycmF5IG1lYW5zIG5vXG4gICAqIHNjb3BlcyBhcmUgcmVxdWlyZWQ7IEFQSSBHYXRld2F5IHRoZW4gdmFsaWRhdGVzIHRoZSAqKklEIHRva2VuKiogaW5zdGVhZCxcbiAgICogcmVqZWN0aW5nIGFjY2VzcyB0b2tlbnMgd2l0aCBhIDQwMS5cbiAgICpcbiAgICogVXNlIHBlci1vcGVyYXRpb24gb3ZlcnJpZGVzIHZpYSBgYXV0aG9yaXphdGlvblNjb3Blc0J5T3BlcmF0aW9uYCB0byBzZXRcbiAgICogZGlmZmVyZW50IHNjb3BlcyBvbiBpbmRpdmlkdWFsIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnb3BlbmlkJ11cbiAgICovXG4gIGF1dGhvcml6YXRpb25TY29wZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGVyLW9wZXJhdGlvbiBPQXV0aDIgc2NvcGUgb3ZlcnJpZGVzIGZvciB0aGUgQ29nbml0byBhdXRob3JpemVyLlxuICAgKlxuICAgKiBPcGVyYXRpb25zIGxpc3RlZCBoZXJlIHVzZSB0aGUgc3BlY2lmaWVkIHNjb3BlcyBpbnN0ZWFkIG9mIHRoZSBnbG9iYWxcbiAgICogYGF1dGhvcml6YXRpb25TY29wZXNgIGRlZmF1bHQuIE9wZXJhdGlvbnMgbm90IGxpc3RlZCBmYWxsIGJhY2sgdG8gdGhlXG4gICAqIGdsb2JhbCBkZWZhdWx0LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBhdXRob3JpemF0aW9uU2NvcGVzQnlPcGVyYXRpb246IHtcbiAgICogICBjcmVhdGVJdGVtOiBbJ29wZW5pZCcsICdpdGVtczp3cml0ZSddLFxuICAgKiAgIGRlbGV0ZUl0ZW06IFsnb3BlbmlkJywgJ2l0ZW1zOmRlbGV0ZSddLFxuICAgKiB9XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcGVyLW9wZXJhdGlvbiBvdmVycmlkZXM7IGFsbCBvcGVyYXRpb25zIHVzZSBhdXRob3JpemF0aW9uU2NvcGVzXG4gICAqL1xuICBhdXRob3JpemF0aW9uU2NvcGVzQnlPcGVyYXRpb24/OiB7IFtvcGVyYXRpb25JZCBpbiBrZXlvZiBPUFNdPzogc3RyaW5nW10gfTtcbn1cblxuLyoqXG4gKiBUaGUgUmVzdEFwaSBjb25zdHJ1Y3Qgc2V0cyB1cCBhbiBBV1MgQVBJIEdhdGV3YXkgUkVTVCBBUEkgdXNpbmcgT3BlbkFQSSBzcGVjaWZpY2F0aW9uLlxuICogVGhpcyBjb25zdHJ1Y3QgZmFjaWxpdGF0ZXMgdGhlIGNyZWF0aW9uIG9mIGEgUkVTVCBBUEkgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgY3VzdG9tIGRvbWFpbiwgQ09SUyBzdXBwb3J0LCBhbmQgaW50ZWdyYXRpb24gd2l0aCBMYW1iZGEgZnVuY3Rpb25zLlxuICogSXQgYWxsb3dzIGF1dG8tZ2VuZXJhdGluZyByb3V0ZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE9wZW5BUEkgZGVmaW5pdGlvbiBhbmQgcHJvdmlkZXMgbWV0aG9kcyB0byBkeW5hbWljYWxseSBhZGQgY3VzdG9tIHJvdXRlcyBhbmQgbWFuYWdlIExhbWJkYSBmdW5jdGlvbiBpbnRlZ3JhdGlvbnMuXG4gKlxuICogQHRlbXBsYXRlIFBBVEhTIC0gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIEFQSSBwYXRocy5cbiAqIEB0ZW1wbGF0ZSBPUFMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgQVBJIG9wZXJhdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwaSA9IG5ldyBSZXN0QXBpKHRoaXMsICdNeVJlc3RBcGknLCB7XG4gKiAgIGFwaU5hbWU6ICdNeUFQSScsXG4gKiAgIHN0YWdlTmFtZTogJ2RldicsXG4gKiAgIGRlZmluaXRpb25GaWxlTmFtZTogJ29wZW5hcGkueWFtbCcsXG4gKiAgIGF1dGhlbnRpY2F0aW9uOiBteUNvZ25pdG9BdXRoLFxuICogICBzaW5nbGVUYWJsZURhdGFzdG9yZTogbXlEeW5hbW9EQlRhYmxlLFxuICogICBhdXRvR2VuZXJhdGVSb3V0ZXM6IHRydWUsXG4gKiB9KTtcbiAqXG4gKiAvLyBBZGQgYSBjdXN0b20gUkVTVCByZXNvdXJjZVxuICogYXBpLmFkZFJlc3RSZXNvdXJjZSgnL2l0ZW1zJywgJ2dldCcpO1xuICpcbiAqIC8vIEdldCB0aGUgTGFtYmRhIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIG9wZXJhdGlvblxuICogY29uc3QgbGFtYmRhRnVuY3Rpb24gPSBhcGkuZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24oJ2dldEl0ZW1zJyk7XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN0QXBpPFBBVEhTLCBPUFM+IGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQVBJIEdhdGV3YXkgUkVTVCBBUEkgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhd3NfYXBpZ2F0ZXdheS5TcGVjUmVzdEFwaTtcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIFJFU1QgQVBJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaVNwZWM6IE9wZW5BUEkzO1xuXG4gIC8qKlxuICAgKiBBIGNvbGxlY3Rpb24gb2YgTGFtYmRhIGZ1bmN0aW9ucyB1c2VkIGFzIGludGVncmF0aW9ucyBmb3IgdGhlIEFQSSBvcGVyYXRpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZnVuY3Rpb25zOiB7IFtvcGVyYXRpb25JZDogc3RyaW5nXTogTGFtYmRhRnVuY3Rpb24gfSA9IHt9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpTWV0aG9kcyA9IFsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdvcHRpb25zJywgJ2hlYWQnXTtcblxuICAvKipcbiAgICogVGhlIEpXVCBhdXRob3JpemVyIExhbWJkYSBmdW5jdGlvbiwgaWYgSldUIGF1dGhlbnRpY2F0aW9uIGlzIGNvbmZpZ3VyZWQuXG4gICAqIFN0b3JlZCBzbyB0aGUgaW52b2tlIHBlcm1pc3Npb24gY2FuIGJlIGdyYW50ZWQgYWZ0ZXIgdGhlIFNwZWNSZXN0QXBpIGlzIGNyZWF0ZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9hdXRob3JpemVyRm4/OiBMYW1iZGFGdW5jdGlvbjtcblxuICAvKipcbiAgICogVGhlIE1DUCBhdXRoIGNvbnN0cnVjdCwgaWYgbWNwQXV0aCBvcHRpb25zIHdlcmUgcHJvdmlkZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9tY3BBdXRoPzogTWNwQXV0aDtcblxuICAvKipcbiAgICogU2V0IG9mIG9wZXJhdGlvbklkcyB0aGF0IHNob3VsZCBoYXZlIHNlY3VyaXR5IGRpc2FibGVkIChzZWN1cml0eTogW10pLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfYW5vbnltb3VzT3BlcmF0aW9uczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB0aGUgb3JpZ2luYWwgcGVyLW9wZXJhdGlvbiBzZWN1cml0eSBhcnJheXMgYXMgYXNzaWduZWQgYnkgcGF0Y2hTZWN1cml0eSxcbiAgICoga2V5ZWQgYnkgb3BlcmF0aW9uSWQuIFVzZWQgYnkgc2V0QW5vbnltb3VzT3BlcmF0aW9ucyB0byByZXN0b3JlIHNlY3VyaXR5IG9uXG4gICAqIG9wZXJhdGlvbnMgcmVtb3ZlZCBmcm9tIHRoZSBhbm9ueW1vdXMgc2V0LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfb3JpZ2luYWxPcGVyYXRpb25TZWN1cml0eTogTWFwPHN0cmluZywgYW55W10+ID0gbmV3IE1hcCgpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJlc3RBcGkuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0aGlzIGNvbnN0cnVjdCBpcyBkZWZpbmVkLlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIFJlc3RBcGkgY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJpdmF0ZSBwcm9wczogUmVzdEFwaVByb3BzPE9QUz4pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuYXBpU3BlYyA9IHlhbWwubG9hZChmcy5yZWFkRmlsZVN5bmMocHJvcHMuZGVmaW5pdGlvbkZpbGVOYW1lKS50b1N0cmluZygpKSBhcyBPcGVuQVBJMztcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lOiBhd3NfYXBpZ2F0ZXdheS5Eb21haW5OYW1lT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5hcGlGUUROKSB7XG4gICAgICBjdXN0b21Eb21haW5OYW1lID0ge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgIGNlcnRpZmljYXRlOiBuZXcgYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZSh0aGlzLCAnQ2VydCcsIHtcbiAgICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgICAgdmFsaWRhdGlvbjogYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnUmVzdEFwaURvbWFpbk5hbWUnLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5hcGlOYW1lfSR7Q0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9ET01BSU5OQU1FfWAsXG4gICAgICAgIHZhbHVlOiB0aGlzLmFwaUZRRE4sXG4gICAgICB9KTtcbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdSZXN0QXBpVXJsT3V0cHV0Jywge1xuICAgICAgICBrZXk6IGAke3RoaXMucHJvcHMuYXBpTmFtZX0ke0NGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfVVJMfWAsXG4gICAgICAgIHZhbHVlOiAnaHR0cHM6Ly8nICsgdGhpcy5hcGlGUUROLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY1NlcnZlckVycm9yKHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNDbGllbnRFcnJvcih7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG5cbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ0F2ZXJhZ2UnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDkwJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5OScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLmF1dG9HZW5lcmF0ZVJvdXRlcyA/PyB0cnVlKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggaW4gdGhpcy5hcGlTcGVjLnBhdGhzKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hcGlTcGVjLnBhdGhzLCBwYXRoKSkge1xuICAgICAgICAgIGNvbnN0IHBhdGhJdGVtID0gdGhpcy5hcGlTcGVjLnBhdGhzW3BhdGhdO1xuICAgICAgICAgIGZvciAoY29uc3QgbWV0aG9kIGluIHBhdGhJdGVtKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhdGhJdGVtLCBtZXRob2QpICYmXG4gICAgICAgICAgICAgIFsnZ2V0JywgJ3Bvc3QnLCAncHV0JywgJ2RlbGV0ZScsICdwYXRjaCcsICdvcHRpb25zJywgJ2hlYWQnXS5pbmRleE9mKG1ldGhvZCkgPj0gMCkge1xuICAgICAgICAgICAgICAvLyBBZGQgYWxsIG9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgdGhpcy5hZGRSZXN0UmVzb3VyY2UocGF0aCBhcyBhbnksIG1ldGhvZCBhcyBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBfc3BlYyBFbmRwb2ludFxuICAgIHRoaXMuYXBpU3BlYy5wYXRocyFbJy9vcGVuYXBpLmpzb24nXSA9IHtcbiAgICAgIGdldDoge1xuICAgICAgICAnc3VtbWFyeSc6ICdSZXR1cm5zIHRoZSByYXcgT3BlbkFQSSBzcGVjIG9mIHRoaXMgQVBJJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ1JldHVybnMgdGhlIHJhdyBPcGVuQVBJIHNwZWMgb2YgdGhpcyBBUEknLFxuICAgICAgICAnb3BlcmF0aW9uSWQnOiAnX3NwZWMnLFxuICAgICAgICAncmVzcG9uc2VzJzoge1xuICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPcGVuQVBJIHNwZWMgb2YgdGhpcyBBUEknLFxuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vb3BlbmFwaStqc29uJzoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgQ3VzdG9tIHByb3BlcnR5IGZvciBBV1NcbiAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nOiB7XG4gICAgICAgICAgdHlwZTogJ21vY2snLFxuICAgICAgICAgIGh0dHBNZXRob2Q6ICdHRVQnLFxuICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICByZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6ICd7XFwnc3RhdHVzQ29kZVxcJzogMjAwfScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29wZW5hcGkranNvbic6IEpTT04uc3RyaW5naWZ5KHRoaXMuY2xlYW51cFNwZWMoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSgodGhpcy5hcGlTcGVjKSkpKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAocHJvcHMuY29ycykge1xuICAgICAgdGhpcy5hcGlTcGVjLnBhdGhzIVsnL3twcm94eSt9J10gPSB7XG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAnc3VtbWFyeSc6ICdDT1JTIHN1cHBvcnQnLFxuICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdFbmFibGUgQ09SUyBieSByZXR1cm5pbmcgY29ycmVjdCBoZWFkZXJzJyxcbiAgICAgICAgICAndGFncyc6IFsnQ09SUyddLFxuICAgICAgICAgICdzZWN1cml0eSc6IFtdLFxuICAgICAgICAgICdyZXNwb25zZXMnOiB7XG4gICAgICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdEZWZhdWx0IHJlc3BvbnNlIGZvciBDT1JTIG1ldGhvZCcsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29udGVudDoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nOiB7XG4gICAgICAgICAgICB0eXBlOiAnbW9jaycsXG4gICAgICAgICAgICByZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJyNzZXQoJGNvbnRleHQucmVxdWVzdE92ZXJyaWRlLmhlYWRlci5vcmlnaW4gPSAkbWV0aG9kLnJlcXVlc3QuaGVhZGVyLm9yaWdpbilcXG57XFxuICBcInN0YXR1c0NvZGVcIiA6IDIwMFxcbn1cXG4nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogJzIwMCcsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogXCInQ29udGVudC1UeXBlLFgtQW16LURhdGUsQXV0aG9yaXphdGlvbixYLUFwaS1LZXknXCIsXG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscyc6IFwiJ3RydWUnXCIsXG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJzogXCInUFVULEdFVCxQT1NULERFTEVURSxQQVRDSCxIRUFELE9QVElPTlMnXCIsXG4gICAgICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5BY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnY29udGV4dC5yZXF1ZXN0T3ZlcnJpZGUuaGVhZGVyLm9yaWdpbicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAne30nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMucGF0Y2hTZWN1cml0eVNjaGVtZXModGhpcy5hcGlTcGVjKTtcblxuICAgIC8vIEluaXRpYWxpemUgYW5vbnltb3VzIG9wZXJhdGlvbnMgZnJvbSBwcm9wcyBiZWZvcmUgcGF0Y2hTZWN1cml0eSBkaXN0cmlidXRlcyBzZWN1cml0eVxuICAgIGlmIChwcm9wcy5hbm9ueW1vdXNPcGVyYXRpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wSWQgb2YgcHJvcHMuYW5vbnltb3VzT3BlcmF0aW9ucykge1xuICAgICAgICB0aGlzLl9hbm9ueW1vdXNPcGVyYXRpb25zLmFkZChvcElkIGFzIHN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5qZWN0IE1DUCBhdXRoIHBhdGhzIGludG8gdGhlIE9wZW5BUEkgc3BlYy5cbiAgICAvLyBJTVBPUlRBTlQ6IFRoaXMgTVVTVCBoYXBwZW4gYmVmb3JlIHBhdGNoU2VjdXJpdHkoKSBzbyB0aGF0IHRoZSBNQ1AgYXV0aFxuICAgIC8vIG9wZXJhdGlvbiBJRHMgYXJlIGFscmVhZHkgaW4gX2Fub255bW91c09wZXJhdGlvbnMgd2hlbiBzZWN1cml0eSBpcyBkaXN0cmlidXRlZC5cbiAgICBpZiAocHJvcHMubWNwQXV0aCkge1xuICAgICAgdGhpcy5fbWNwQXV0aCA9IHRoaXMuY3JlYXRlTWNwQXV0aChwcm9wcy5tY3BBdXRoKTtcbiAgICAgIHRoaXMuaW5qZWN0TWNwQXV0aFBhdGhzKHRoaXMuX21jcEF1dGgpO1xuICAgIH1cblxuICAgIHRoaXMucGF0Y2hTZWN1cml0eSh0aGlzLmFwaVNwZWMpO1xuXG4gICAgLy8gVE9ETyBwYXRjaCBzcGVjIGZvciBDb2duaXRvIHVzZXIgcG9vbFxuXG4gICAgdGhpcy5hcGkgPSBuZXcgYXdzX2FwaWdhdGV3YXkuU3BlY1Jlc3RBcGkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgcmVzdEFwaU5hbWU6IGAke3Byb3BzLmFwaU5hbWV9IFske3Byb3BzLnN0YWdlTmFtZX1dYCxcbiAgICAgIGRvbWFpbk5hbWU6IGN1c3RvbURvbWFpbk5hbWUsXG4gICAgICBhcGlEZWZpbml0aW9uOiBhd3NfYXBpZ2F0ZXdheS5BcGlEZWZpbml0aW9uLmZyb21JbmxpbmUodGhpcy5hcGlTcGVjKSxcbiAgICAgIC4uLnByb3BzLnJlc3RBcGlQcm9wcyxcbiAgICB9KTtcblxuICAgIC8vIGFkZCBpbnZva2UgcGVybWlzc2lvbnMgdG8gTGFtYmRhIGZ1bmN0aW9uc1xuICAgIGZvciAoY29uc3QgZm4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9mdW5jdGlvbnMpKSB7XG4gICAgICBmbi5hZGRQZXJtaXNzaW9uKCdSZXN0QXBpSW52b2tlJywge1xuICAgICAgICBwcmluY2lwYWw6IG5ldyBhd3NfaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBhY3Rpb246ICdsYW1iZGE6SW52b2tlRnVuY3Rpb24nLFxuICAgICAgICBzb3VyY2VBcm46IHRoaXMuYXBpLmFybkZvckV4ZWN1dGVBcGkoKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEdyYW50IEFQSSBHYXRld2F5IHBlcm1pc3Npb24gdG8gaW52b2tlIHRoZSBKV1QgYXV0aG9yaXplciBMYW1iZGFcbiAgICBpZiAodGhpcy5fYXV0aG9yaXplckZuKSB7XG4gICAgICB0aGlzLl9hdXRob3JpemVyRm4uYWRkUGVybWlzc2lvbignQXBpR2F0ZXdheUF1dGhvcml6ZXJJbnZva2UnLCB7XG4gICAgICAgIHByaW5jaXBhbDogbmV3IGF3c19pYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIHNvdXJjZUFybjogdGhpcy5hcGkuYXJuRm9yRXhlY3V0ZUFwaSgpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR3JhbnQgQVBJIEdhdGV3YXkgcGVybWlzc2lvbiB0byBpbnZva2UgTUNQIGF1dGggTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICAvLyBUaGVzZSBuZWVkIGV4cGxpY2l0IGFkZFBlcm1pc3Npb24gYmVjYXVzZSB0aGV5IGFyZSBpbmplY3RlZCBkaXJlY3RseSBpbnRvXG4gICAgLy8gdGhlIE9wZW5BUEkgc3BlYyAodmlhIGluamVjdE1jcEF1dGhQYXRocyksIG5vdCB0aHJvdWdoIGFkZFJlc3RSZXNvdXJjZSB3aGljaFxuICAgIC8vIHdvdWxkIHJlZ2lzdGVyIHRoZW0gaW4gdGhpcy5fZnVuY3Rpb25zIGZvciB0aGUgYnVsayBncmFudCBhYm92ZS5cbiAgICBpZiAodGhpcy5fbWNwQXV0aCkge1xuICAgICAgY29uc3QgbWNwRnVuY3Rpb25zID0gdGhpcy5fbWNwQXV0aC5mdW5jdGlvbnM7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBmbl0gb2YgT2JqZWN0LmVudHJpZXMobWNwRnVuY3Rpb25zKSkge1xuICAgICAgICBmbi5hZGRQZXJtaXNzaW9uKGBNY3BBdXRoJHtuYW1lfUludm9rZWAsIHtcbiAgICAgICAgICBwcmluY2lwYWw6IG5ldyBhd3NfaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgICAgc291cmNlQXJuOiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXN0b21Eb21haW5OYW1lICYmIHRoaXMuYXBpLmRvbWFpbk5hbWUpIHtcbiAgICAgIG5ldyBhd3Nfcm91dGU1My5BUmVjb3JkKHRoaXMsICdEbnNSZWNvcmQnLCB7XG4gICAgICAgIHpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgIHJlY29yZE5hbWU6IGN1c3RvbURvbWFpbk5hbWUuZG9tYWluTmFtZSxcbiAgICAgICAgdGFyZ2V0OiBhd3Nfcm91dGU1My5SZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICAgIG5ldyBhd3Nfcm91dGU1M190YXJnZXRzLkFwaUdhdGV3YXlEb21haW4odGhpcy5hcGkuZG9tYWluTmFtZSksXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbnVwU3BlYyhzcGVjOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgT2JqZWN0LmVudHJpZXMoc3BlYykuZm9yRWFjaCgoW3Byb3AsIHZhbHVlXTogW3N0cmluZywgYW55XSkgPT4ge1xuICAgICAgaWYgKHByb3Auc3RhcnRzV2l0aCgneC0nKSkge1xuICAgICAgICBkZWxldGUgc3BlY1twcm9wXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aGlzLmNsZWFudXBTcGVjKHNwZWNbcHJvcF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNwZWM7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIHRoZSBnZW5lcmF0ZWQgTGFtYmRhIGZ1bmN0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEFQSSBvcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbkZvck9wZXJhdGlvbihvcGVyYXRpb25JZDoga2V5b2YgT1BTKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbb3BlcmF0aW9uSWQgYXMgc3RyaW5nXTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gYSBsaXN0IG9mIGFsbCBnZW5lcmF0ZWQgTGFtYmRhIGZ1bmN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9ucygpOiBMYW1iZGFGdW5jdGlvbltdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9mdW5jdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpc2l0b3IgbWV0aG9kIHRvIG1vZGlmeSB0aGUgZ2l2ZW4gZnVuY3Rpb25zXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb25JZHMgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHZpc2l0XG4gICAqIEBwYXJhbSBvcCB0aGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZXZlcnkgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBtb2RpZnlPcGVyYXRpb25GdW5jdGlvbnMob3BlcmF0aW9uSWRzOiAoa2V5b2YgT1BTKVtdLCBvcDogKGZuOiBMYW1iZGFGdW5jdGlvbikgPT4gdm9pZCkge1xuICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uSWQgb2Ygb3BlcmF0aW9uSWRzKSB7XG4gICAgICBvcCh0aGlzLmdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uKG9wZXJhdGlvbklkKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGZ1bGwgc2V0IG9mIGFub255bW91cyBvcGVyYXRpb25zLlxuICAgKiBBbm9ueW1vdXMgb3BlcmF0aW9ucyB3aWxsIGhhdmUgYHNlY3VyaXR5OiBbXWAgYXBwbGllZCBpbiB0aGUgT3BlbkFQSSBzcGVjLFxuICAgKiBtYWtpbmcgdGhlbSBwdWJsaWNseSBhY2Nlc3NpYmxlIHdpdGhvdXQgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIFNpbmNlIENESyBzZXJpYWxpemVzIHRoZSBPcGVuQVBJIHNwZWMgYXQgc3ludGggdGltZSAoZnJvbUlubGluZSBzdG9yZXMgdGhlXG4gICAqIG9iamVjdCByZWZlcmVuY2UpLCBtdXRhdGlvbnMgYWZ0ZXIgU3BlY1Jlc3RBcGkgY29uc3RydWN0aW9uIHN0aWxsIHRha2UgZWZmZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uSWRzIC0gVGhlIG9wZXJhdGlvbiBJRHMgdG8gbWFyayBhcyBhbm9ueW1vdXMuIFJlcGxhY2VzIGFueSBwcmV2aW91c2x5IHNldCBhbm9ueW1vdXMgb3BlcmF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBzZXRBbm9ueW1vdXNPcGVyYXRpb25zKG9wZXJhdGlvbklkczogKGtleW9mIE9QUylbXSkge1xuICAgIHRoaXMuX2Fub255bW91c09wZXJhdGlvbnMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IG9wSWQgb2Ygb3BlcmF0aW9uSWRzKSB7XG4gICAgICB0aGlzLl9hbm9ueW1vdXNPcGVyYXRpb25zLmFkZChvcElkIGFzIHN0cmluZyk7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlBbm9ueW1vdXNTZWN1cml0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgdG8gdGhlIHNldCBvZiBhbm9ueW1vdXMgb3BlcmF0aW9ucy5cbiAgICogTmV3bHkgYWRkZWQgb3BlcmF0aW9ucyB3aWxsIGhhdmUgYHNlY3VyaXR5OiBbXWAgYXBwbGllZCBpbiB0aGUgT3BlbkFQSSBzcGVjLlxuICAgKlxuICAgKiBTaW5jZSBDREsgc2VyaWFsaXplcyB0aGUgT3BlbkFQSSBzcGVjIGF0IHN5bnRoIHRpbWUgKGZyb21JbmxpbmUgc3RvcmVzIHRoZVxuICAgKiBvYmplY3QgcmVmZXJlbmNlKSwgbXV0YXRpb25zIGFmdGVyIFNwZWNSZXN0QXBpIGNvbnN0cnVjdGlvbiBzdGlsbCB0YWtlIGVmZmVjdC5cbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbklkcyAtIFRoZSBvcGVyYXRpb24gSURzIHRvIGFkZCB0byB0aGUgYW5vbnltb3VzIHNldC5cbiAgICovXG4gIHB1YmxpYyBhZGRBbm9ueW1vdXNPcGVyYXRpb25zKG9wZXJhdGlvbklkczogKGtleW9mIE9QUylbXSkge1xuICAgIGZvciAoY29uc3Qgb3BJZCBvZiBvcGVyYXRpb25JZHMpIHtcbiAgICAgIHRoaXMuX2Fub255bW91c09wZXJhdGlvbnMuYWRkKG9wSWQgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseUFub255bW91c1NlY3VyaXR5Rm9yT3BzKG9wZXJhdGlvbklkcy5tYXAob3AgPT4gb3AgYXMgc3RyaW5nKSk7XG4gIH1cblxuICAvKipcbiAgICogUmUtYXBwbGllcyBzZWN1cml0eSBzZXR0aW5ncyB0byBhbGwgb3BlcmF0aW9ucyBiYXNlZCBvbiB0aGUgY3VycmVudCBhbm9ueW1vdXMgc2V0LlxuICAgKiBPcGVyYXRpb25zIGluIHRoZSBhbm9ueW1vdXMgc2V0IGdldCBgc2VjdXJpdHk6IFtdYDsgb3BlcmF0aW9ucyByZW1vdmVkIGZyb20gdGhlIHNldFxuICAgKiBoYXZlIHRoZWlyIG9yaWdpbmFsIHNlY3VyaXR5IHJlc3RvcmVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUFub255bW91c1NlY3VyaXR5KCkge1xuICAgIGZvciAoY29uc3Qgc3BlY1BhdGggb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmFwaVNwZWMucGF0aHMgfHwgW10pKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjUGF0aCkge1xuICAgICAgICBpZiAoIXRoaXMuYXBpTWV0aG9kcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BlY01ldGhvZCA9IChzcGVjUGF0aCBhcyBQYXRoSXRlbU9iamVjdClba2V5IGFzIGtleW9mIFBhdGhJdGVtT2JqZWN0XSEgYXMgT3BlcmF0aW9uT2JqZWN0O1xuICAgICAgICBpZiAoc3BlY01ldGhvZC5vcGVyYXRpb25JZCAmJiB0aGlzLl9hbm9ueW1vdXNPcGVyYXRpb25zLmhhcyhzcGVjTWV0aG9kLm9wZXJhdGlvbklkKSkge1xuICAgICAgICAgIHNwZWNNZXRob2Quc2VjdXJpdHkgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGVjTWV0aG9kLm9wZXJhdGlvbklkICYmIHRoaXMuX29yaWdpbmFsT3BlcmF0aW9uU2VjdXJpdHkuaGFzKHNwZWNNZXRob2Qub3BlcmF0aW9uSWQpKSB7XG4gICAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBzZWN1cml0eSBmb3Igb3BlcmF0aW9ucyByZW1vdmVkIGZyb20gdGhlIGFub255bW91cyBzZXRcbiAgICAgICAgICBzcGVjTWV0aG9kLnNlY3VyaXR5ID0gdGhpcy5fb3JpZ2luYWxPcGVyYXRpb25TZWN1cml0eS5nZXQoc3BlY01ldGhvZC5vcGVyYXRpb25JZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBgc2VjdXJpdHk6IFtdYCBvbmx5IHRvIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9ucy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYXBwbHlBbm9ueW1vdXNTZWN1cml0eUZvck9wcyhvcGVyYXRpb25JZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3Qgb3BzU2V0ID0gbmV3IFNldChvcGVyYXRpb25JZHMpO1xuICAgIGZvciAoY29uc3Qgc3BlY1BhdGggb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmFwaVNwZWMucGF0aHMgfHwgW10pKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjUGF0aCkge1xuICAgICAgICBpZiAoIXRoaXMuYXBpTWV0aG9kcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3BlY01ldGhvZCA9IChzcGVjUGF0aCBhcyBQYXRoSXRlbU9iamVjdClba2V5IGFzIGtleW9mIFBhdGhJdGVtT2JqZWN0XSEgYXMgT3BlcmF0aW9uT2JqZWN0O1xuICAgICAgICBpZiAoc3BlY01ldGhvZC5vcGVyYXRpb25JZCAmJiBvcHNTZXQuaGFzKHNwZWNNZXRob2Qub3BlcmF0aW9uSWQpKSB7XG4gICAgICAgICAgc3BlY01ldGhvZC5zZWN1cml0eSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZFJlc3RSZXNvdXJjZTxQIGV4dGVuZHMga2V5b2YgUEFUSFM+KHBhdGg6IFAsIG1ldGhvZDoga2V5b2YgUEFUSFNbUF0pIHtcbiAgICBjb25zdCBvYVBhdGggPSB0aGlzLmFwaVNwZWMucGF0aHMhW3BhdGggYXMgc3RyaW5nXSBhcyBQYXRoSXRlbU9iamVjdDtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBvYVBhdGhbbWV0aG9kIGFzIGtleW9mIFBhdGhJdGVtT2JqZWN0XSBhcyBPcGVyYXRpb25PYmplY3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBvcGVyYXRpb24ub3BlcmF0aW9uSWQhO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYCR7bWV0aG9kIGFzIHN0cmluZ30gJHtwYXRoIGFzIHN0cmluZ30gLSAke29wZXJhdGlvbi5zdW1tYXJ5fWA7XG5cbiAgICBjb25zdCBjdXN0b21MYW1iZGFPcHRpb25zID0gdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zQnlPcGVyYXRpb24gPyB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbltvcGVyYXRpb25JZCBhcyBrZXlvZiBPUFNdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmFkZEN1c3RvbVJlc3RSZXNvdXJjZShvcGVyYXRpb24sIG1ldGhvZCBhcyBzdHJpbmcsIGRlc2NyaXB0aW9uLCBjdXN0b21MYW1iZGFPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDdXN0b21SZXN0UmVzb3VyY2Uob3BlcmF0aW9uOiBPcGVyYXRpb25PYmplY3QsIG1ldGhvZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBhZGRpdGlvbmFsTGFtYmRhT3B0aW9uczogTGFtYmRhT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKCd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJyBpbiBvcGVyYXRpb24pIHtcbiAgICAgIHJldHVybjsgLy8gU2tpcCBpZiBvcGVyYXRpb24gd2FzIGRlY2xhcmVkIGluIHNwZWMgZmlsZSBhbHJlYWR5IVxuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGAuL3NyYy9sYW1iZGEvcmVzdC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS4ke29wZXJhdGlvbi5vcGVyYXRpb25JZH0udHNgO1xuXG4gICAgY29uc3QgbGFtYmRhT3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMucHJvcHMubGFtYmRhT3B0aW9ucyAmJiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMubGFtYmRhT3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICAuLi5hZGRpdGlvbmFsTGFtYmRhT3B0aW9ucyxcbiAgICB9O1xuXG4gICAgY29uc3QgYXV0aGVudGljYXRpb24gPSB0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uICYmICh0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uLmhhc093blByb3BlcnR5KCd1c2VycG9vbCcpXG4gICAgICA/IHsgdXNlclBvb2w6ICh0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIElDb2duaXRvQXV0aGVudGljYXRpb24pLnVzZXJwb29sIH1cbiAgICAgIDogeyBqd3Q6IHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgSUp3dEF1dGhlbnRpY2F0aW9uIH0pO1xuXG4gICAgY29uc3QgZm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgYEZuJHtvcGVyYXRpb24ub3BlcmF0aW9uSWR9YCwge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLnByb3BzLnN0YWdlTmFtZSxcbiAgICAgIGFkZGl0aW9uYWxFbnY6IHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5kb21haW5OYW1lICYmIHtcbiAgICAgICAgICBET01BSU5fTkFNRTogdGhpcy5wcm9wcy5kb21haW5OYW1lLFxuICAgICAgICB9LFxuICAgICAgICAuLi50aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICB9LFxuICAgICAgZW50cnk6IGVudHJ5RmlsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAuLi5hdXRoZW50aWNhdGlvbixcbiAgICAgIC4uLnRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUgJiYge1xuICAgICAgICB0YWJsZTogdGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZS50YWJsZSxcbiAgICAgICAgdGFibGVXcml0ZXM6IHRoaXMudGFibGVXcml0ZUFjY2Vzc0Zvck1ldGhvZChtZXRob2QpLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXNzZXRDZG4gJiYge1xuICAgICAgICBhc3NldERvbWFpbk5hbWU6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXREb21haW5OYW1lLFxuICAgICAgICBhc3NldEJ1Y2tldDogdGhpcy5wcm9wcy5hc3NldENkbi5hc3NldEJ1Y2tldCxcbiAgICAgIH0sXG4gICAgICBsYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb24ub3BlcmF0aW9uSWQhXSA9IGZuO1xuICAgIGNkay5UYWdzLm9mKGZuKS5hZGQoJ09wZW5BUEknLCBkZXNjcmlwdGlvbi5yZXBsYWNlKC9bXlxcd1xcc1xcZF8uOi89K1xcLUBdL2csICcnKSk7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgaGFzVmVyc2lvbkNvbmZpZyA9IGxhbWJkYU9wdGlvbnMuY3VycmVudFZlcnNpb25PcHRpb25zICE9IHVuZGVmaW5lZDtcblxuICAgIG9wZXJhdGlvblsneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbiddID0ge1xuICAgICAgdHlwZTogJ2F3c19wcm94eScsXG4gICAgICBodHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmk6IGNkay5TdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICByZXNvdXJjZTogJ3BhdGgnLFxuICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgIGFjY291bnQ6ICdsYW1iZGEnLFxuICAgICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgMjAxNS0wMy0zMS9mdW5jdGlvbnMvJHsoaGFzVmVyc2lvbkNvbmZpZyA/IGZuLmN1cnJlbnRWZXJzaW9uIDogZm4pLmZ1bmN0aW9uQXJufS9pbnZvY2F0aW9uc2AsXG4gICAgICAgIC8vICAgICAgICAgICAgIF5eXl5eXl5eXl4gLSBUSElTIE5FRURTIFRPIEJFIFRISVMgREFURS4gRVhBQ1RMWSFcbiAgICAgIH0pLFxuICAgICAgcGFzc3Rocm91Z2hCZWhhdmlvcjogJ3doZW5fbm9fdGVtcGxhdGVzJyxcbiAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiAnMS4wJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWJsZVdyaXRlQWNjZXNzRm9yTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChtZXRob2QudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgIGNhc2UgJ3Bvc3QnOlxuICAgICAgY2FzZSAncHV0JzpcbiAgICAgIGNhc2UgJ3BhdGNoJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgIGNhc2UgJ2dldCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0cyB0aGUgYXV0aG9yaXplciBzZWN1cml0eSBzY2hlbWUgaW50byB0aGUgT3BlbkFQSSBzcGVjIGJhc2VkIG9uIHRoZVxuICAgKiBhdXRoZW50aWNhdGlvbiB0eXBlLCBwbGFjaW5nIGl0IHdoZXJlIEFQSSBHYXRld2F5IGV4cGVjdHMgaXQgZm9yIHRoZSBzcGVjXG4gICAqIHZlcnNpb246IGBjb21wb25lbnRzLnNlY3VyaXR5U2NoZW1lc2AgZm9yIE9wZW5BUEkgMy54LCBvciB0aGUgcm9vdFxuICAgKiBgc2VjdXJpdHlEZWZpbml0aW9uc2AgZm9yIFN3YWdnZXIgMi4wLiBBbiBhdXRob3JpemVyIHdyaXR0ZW4gdG8gdGhlIHdyb25nXG4gICAqIGxvY2F0aW9uIGlzIHNpbGVudGx5IGlnbm9yZWQgb24gaW1wb3J0LCBkZXBsb3lpbmcgYW4gdW5hdXRoZW50aWNhdGVkIEFQSS5cbiAgICpcbiAgICogRm9yIENvZ25pdG86IGFkZHMgYSBjb2duaXRvX3VzZXJfcG9vbHMgYXV0aG9yaXplciByZWZlcmVuY2luZyB0aGUgdXNlciBwb29sIEFSTi5cbiAgICogRm9yIEpXVDogY3JlYXRlcyBhIExhbWJkYSBhdXRob3JpemVyIGZ1bmN0aW9uIGFuZCBhZGRzIGEgdG9rZW4gYXV0aG9yaXplciByZWZlcmVuY2luZyBpdHMgQVJOLlxuICAgKi9cbiAgcHJvdGVjdGVkIHBhdGNoU2VjdXJpdHlTY2hlbWVzKHNwZWM6IE9wZW5BUEkzKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1lcyA9IHRoaXMuc2VjdXJpdHlTY2hlbWVDb250YWluZXIoc3BlYyk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbi5oYXNPd25Qcm9wZXJ0eSgndXNlcnBvb2wnKSkge1xuICAgICAgLy8gQ29nbml0byBVc2VyIFBvb2wgYXV0aG9yaXplclxuICAgICAgY29uc3QgY29nbml0b0F1dGggPSB0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIElDb2duaXRvQXV0aGVudGljYXRpb247XG4gICAgICBjb25zdCBhdXRob3JpemVyTmFtZSA9ICdDb2duaXRvQXV0aG9yaXplcic7XG5cbiAgICAgIHNjaGVtZXNbYXV0aG9yaXplck5hbWVdID0ge1xuICAgICAgICAndHlwZSc6ICdhcGlLZXknLFxuICAgICAgICAnbmFtZSc6ICdBdXRob3JpemF0aW9uJyxcbiAgICAgICAgJ2luJzogJ2hlYWRlcicsXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWF1dGh0eXBlJzogJ2NvZ25pdG9fdXNlcl9wb29scycsXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWF1dGhvcml6ZXInOiB7XG4gICAgICAgICAgdHlwZTogJ2NvZ25pdG9fdXNlcl9wb29scycsXG4gICAgICAgICAgcHJvdmlkZXJBUk5zOiBbY29nbml0b0F1dGgudXNlcnBvb2wudXNlclBvb2xBcm5dLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gUmVzb2x2ZSBnbG9iYWwgYXV0aG9yaXphdGlvbiBzY29wZXMgZm9yIHRoZSBDb2duaXRvIGF1dGhvcml6ZXIuXG4gICAgICAvLyBXaGVuIHNjb3BlcyBhcmUgcHJlc2VudCwgQVBJIEdhdGV3YXkgdmFsaWRhdGVzIHRoZSBhY2Nlc3MgdG9rZW4gYW5kIGNoZWNrc1xuICAgICAgLy8gdGhlIHRva2VuIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBvZiB0aGUgbGlzdGVkIHNjb3Blcy4gQW4gZW1wdHkgYXJyYXkgbWVhbnNcbiAgICAgIC8vIG5vIHNjb3BlcyBhcmUgcmVxdWlyZWQgYW5kIEFQSSBHYXRld2F5IHZhbGlkYXRlcyB0aGUgSUQgdG9rZW4gaW5zdGVhZC5cbiAgICAgIGNvbnN0IGdsb2JhbFNjb3BlcyA9IHRoaXMucHJvcHMuYXV0aG9yaXphdGlvblNjb3BlcyA/PyBbJ29wZW5pZCddO1xuXG4gICAgICAvLyBFbnN1cmUgZ2xvYmFsIHNlY3VyaXR5IHJlZmVyZW5jZXMgdGhlIGF1dGhvcml6ZXIgc28gcGF0Y2hTZWN1cml0eSBkaXN0cmlidXRlcyBpdFxuICAgICAgaWYgKCFzcGVjLnNlY3VyaXR5KSB7XG4gICAgICAgIHNwZWMuc2VjdXJpdHkgPSBbeyBbYXV0aG9yaXplck5hbWVdOiBnbG9iYWxTY29wZXMgfV07XG4gICAgICB9IGVsc2UgaWYgKGdsb2JhbFNjb3Blcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFRoZSBzcGVjIGFscmVhZHkgaGFzIGdsb2JhbCBzZWN1cml0eSBkZWZpbmVkIOKAlCBwYXRjaCB0aGUgYXV0aG9yaXplcidzIHNjb3Blc1xuICAgICAgICAvLyBzbyB0aGF0IHRoZSBjb25maWd1cmVkIHNjb3BlcyBhcmUgZGlzdHJpYnV0ZWQgdG8gYWxsIG9wZXJhdGlvbnMuXG4gICAgICAgIGZvciAoY29uc3QgcmVxdWlyZW1lbnQgb2Ygc3BlYy5zZWN1cml0eSBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+KSB7XG4gICAgICAgICAgaWYgKGF1dGhvcml6ZXJOYW1lIGluIHJlcXVpcmVtZW50KSB7XG4gICAgICAgICAgICByZXF1aXJlbWVudFthdXRob3JpemVyTmFtZV0gPSBnbG9iYWxTY29wZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEpXVCAoTGFtYmRhKSBhdXRob3JpemVyXG4gICAgICBjb25zdCBqd3RBdXRoID0gdGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBJSnd0QXV0aGVudGljYXRpb247XG4gICAgICBjb25zdCBhdXRob3JpemVyTmFtZSA9ICdKd3RBdXRob3JpemVyJztcblxuICAgICAgY29uc3QgYXV0aG9yaXplckZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsICdKd3RBdXRob3JpemVyRm4nLCB7XG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICAgIGVudHJ5OiAnc3JjL2xhbWJkYS9yZXN0LWFwaS5qd3QtYXV0aG9yaXplci50cycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgWyR7dGhpcy5wcm9wcy5zdGFnZU5hbWV9XSBKV1QgQXV0aG9yaXplciBmb3IgJHt0aGlzLnByb3BzLmFwaU5hbWV9YCxcbiAgICAgICAgand0OiBqd3RBdXRoLFxuICAgICAgICBsYW1iZGFPcHRpb25zOiB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgICAgIGxhbWJkYVRyYWNpbmc6IHRoaXMucHJvcHMubGFtYmRhVHJhY2luZyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhdXRob3JpemVyVXJpID0gY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHJlc291cmNlOiAncGF0aCcsXG4gICAgICAgIHNlcnZpY2U6ICdhcGlnYXRld2F5JyxcbiAgICAgICAgYWNjb3VudDogJ2xhbWJkYScsXG4gICAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAyMDE1LTAzLTMxL2Z1bmN0aW9ucy8ke2F1dGhvcml6ZXJGbi5mdW5jdGlvbkFybn0vaW52b2NhdGlvbnNgLFxuICAgICAgfSk7XG5cbiAgICAgIHNjaGVtZXNbYXV0aG9yaXplck5hbWVdID0ge1xuICAgICAgICAndHlwZSc6ICdhcGlLZXknLFxuICAgICAgICAnbmFtZSc6ICdBdXRob3JpemF0aW9uJyxcbiAgICAgICAgJ2luJzogJ2hlYWRlcicsXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWF1dGh0eXBlJzogJ2N1c3RvbScsXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWF1dGhvcml6ZXInOiB7XG4gICAgICAgICAgdHlwZTogdGhpcy5wcm9wcy5qd3RBdXRob3JpemVyVHlwZSA9PT0gJ3JlcXVlc3QnID8gJ3JlcXVlc3QnIDogJ3Rva2VuJyxcbiAgICAgICAgICBhdXRob3JpemVyVXJpOiBhdXRob3JpemVyVXJpLFxuICAgICAgICAgIGF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHM6IHRoaXMucHJvcHMuand0QXV0aG9yaXplclR5cGUgPT09ICdyZXF1ZXN0JyA/IDAgOiAzMDAsXG4gICAgICAgICAgLi4uKHRoaXMucHJvcHMuand0QXV0aG9yaXplclR5cGUgIT09ICdyZXF1ZXN0JyAmJiB7XG4gICAgICAgICAgICBpZGVudGl0eVNvdXJjZTogJ21ldGhvZC5yZXF1ZXN0LmhlYWRlci5BdXRob3JpemF0aW9uJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBhdXRob3JpemVyIGZ1bmN0aW9uIHNvIHdlIGNhbiBncmFudCBwZXJtaXNzaW9uIGFmdGVyIHRoZSBTcGVjUmVzdEFwaSBpcyBjcmVhdGVkXG4gICAgICB0aGlzLl9hdXRob3JpemVyRm4gPSBhdXRob3JpemVyRm47XG5cbiAgICAgIC8vIEVuc3VyZSBnbG9iYWwgc2VjdXJpdHkgcmVmZXJlbmNlcyB0aGUgYXV0aG9yaXplciBzbyBwYXRjaFNlY3VyaXR5IGRpc3RyaWJ1dGVzIGl0XG4gICAgICBpZiAoIXNwZWMuc2VjdXJpdHkpIHtcbiAgICAgICAgc3BlYy5zZWN1cml0eSA9IFt7IFthdXRob3JpemVyTmFtZV06IFtdIH1dO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBNQ1AgYXV0aCBjb25zdHJ1Y3QgaWYgbWNwQXV0aCB3YXMgY29uZmlndXJlZC5cbiAgICogVXNlZnVsIGZvciBhY2Nlc3NpbmcgdGhlIGNyZWF0ZWQgTGFtYmRhIGZ1bmN0aW9ucyBvciBlbnYgdmFycy5cbiAgICovXG4gIHB1YmxpYyBnZXRNY3BBdXRoKCk6IE1jcEF1dGggfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tY3BBdXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIE1jcEF1dGggY29uc3RydWN0IGZyb20gdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAqIERlcml2ZXMgYXBpRG9tYWluIGZyb20gdGhlIFJlc3RBcGkncyBvd24gZG9tYWluIGNvbmZpZy5cbiAgICogRm9yIENvZ25pdG8sIGNyZWF0ZXMgYSB1c2VyIHBvb2wgY2xpZW50IGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU1jcEF1dGgob3B0aW9uczogTWNwQXV0aE9wdGlvbnMpOiBNY3BBdXRoIHtcbiAgICBjb25zdCBhcGlEb21haW4gPSB0aGlzLmFwaUZRRE47XG4gICAgaWYgKCFhcGlEb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWNwQXV0aCByZXF1aXJlcyBhIGRvbWFpbiBuYW1lIHRvIGJlIGNvbmZpZ3VyZWQgb24gdGhlIFJlc3RBcGkgKGRvbWFpbk5hbWUgb3IgaG9zdGVkWm9uZSArIGFwaUhvc3RuYW1lKScpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNvZ25pdG8gJiYgb3B0aW9ucy5nZW5lcmljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21jcEF1dGg6IHByb3ZpZGUgZWl0aGVyIGNvZ25pdG8gb3IgZ2VuZXJpYywgbm90IGJvdGgnKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmNvZ25pdG8gJiYgIW9wdGlvbnMuZ2VuZXJpYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtY3BBdXRoOiBwcm92aWRlIGVpdGhlciBjb2duaXRvIG9yIGdlbmVyaWMgY29uZmlndXJhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93ZWRSZWRpcmVjdFVyaXMgPSBvcHRpb25zLmFsbG93ZWRSZWRpcmVjdFVyaXMgPz8gW1xuICAgICAgJ2h0dHBzOi8vY2xhdWRlLmFpL29hdXRoL2NhbGxiYWNrJyxcbiAgICAgICdodHRwczovL2NsYXVkZS5haS9hcGkvbWNwL2F1dGhfY2FsbGJhY2snLFxuICAgICAgJ2h0dHBzOi8vY2hhdGdwdC5jb20vb2F1dGgvY2FsbGJhY2snLFxuICAgIF07XG5cbiAgICBpZiAob3B0aW9ucy5jb2duaXRvKSB7XG4gICAgICBjb25zdCBjb2duaXRvT3B0cyA9IG9wdGlvbnMuY29nbml0bztcblxuICAgICAgLy8gRGVsZWdhdGUgdG8gTWNwQ29nbml0b0F1dGggd2hpY2ggaGFuZGxlcyB1c2VyIHBvb2wgY2xpZW50IGNyZWF0aW9uXG4gICAgICBjb25zdCBtY3BDb2duaXRvID0gbmV3IE1jcENvZ25pdG9BdXRoKHRoaXMsICdNY3BDb2duaXRvQXV0aCcsIHtcbiAgICAgICAgYXV0aDogY29nbml0b09wdHMuYXV0aCxcbiAgICAgICAgYXBpRG9tYWluLFxuICAgICAgICBhdXRoRG9tYWluOiBjb2duaXRvT3B0cy5hdXRoRG9tYWluLFxuICAgICAgICBhbGxvd2VkUmVkaXJlY3RVcmlzLFxuICAgICAgICBzZXJ2ZXJJbmZvOiBvcHRpb25zLnNlcnZlckluZm8sXG4gICAgICAgIHByb3RvY29sVmVyc2lvbnM6IG9wdGlvbnMucHJvdG9jb2xWZXJzaW9ucyxcbiAgICAgICAgc2NvcGVzOiBvcHRpb25zLnNjb3BlcyxcbiAgICAgICAgbGFtYmRhT3B0aW9uczogb3B0aW9ucy5sYW1iZGFPcHRpb25zLFxuICAgICAgICBzdGFnZU5hbWU6IHRoaXMucHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgICBjbGllbnRDb25zdHJ1Y3RJZDogY29nbml0b09wdHMuY2xpZW50Q29uc3RydWN0SWQsXG4gICAgICAgIGFkZGl0aW9uYWxDYWxsYmFja1VybHM6IGNvZ25pdG9PcHRzLmFkZGl0aW9uYWxDYWxsYmFja1VybHMsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG1jcENvZ25pdG8ubWNwQXV0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ2VuZXJpY09wdHMgPSBvcHRpb25zLmdlbmVyaWMhO1xuXG4gICAgICByZXR1cm4gbmV3IE1jcEF1dGgodGhpcywgJ01jcEF1dGgnLCB7XG4gICAgICAgIGFwaURvbWFpbixcbiAgICAgICAgYXV0aG9yaXplRW5kcG9pbnQ6IGdlbmVyaWNPcHRzLmF1dGhvcml6ZUVuZHBvaW50LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBnZW5lcmljT3B0cy50b2tlbkVuZHBvaW50LFxuICAgICAgICBhbGxvd2VkUmVkaXJlY3RVcmlzLFxuICAgICAgICBjbGllbnRJZDogZ2VuZXJpY09wdHMuY2xpZW50SWQsXG4gICAgICAgIHNlcnZlckluZm86IG9wdGlvbnMuc2VydmVySW5mbyxcbiAgICAgICAgcHJvdG9jb2xWZXJzaW9uczogb3B0aW9ucy5wcm90b2NvbFZlcnNpb25zLFxuICAgICAgICBzY29wZXM6IG9wdGlvbnMuc2NvcGVzLFxuICAgICAgICBzdHJpcFBhcmFtZXRlcnM6IG9wdGlvbnMuc3RyaXBQYXJhbWV0ZXJzLFxuICAgICAgICBsYW1iZGFPcHRpb25zOiBvcHRpb25zLmxhbWJkYU9wdGlvbnMsXG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0cyBNQ1AgT0F1dGggcGF0aHMgaW50byB0aGUgT3BlbkFQSSBzcGVjIHdpdGggTGFtYmRhIHByb3h5IGludGVncmF0aW9uc1xuICAgKiBwb2ludGluZyB0byB0aGUgTUNQIGF1dGggY29uc3RydWN0J3MgZnVuY3Rpb25zLiBBbGwgcGF0aHMgYXJlIGFub255bW91cyAoc2VjdXJpdHk6IFtdKS5cbiAgICovXG4gIHByaXZhdGUgaW5qZWN0TWNwQXV0aFBhdGhzKG1jcEF1dGg6IE1jcEF1dGgpIHtcbiAgICBjb25zdCBmbnMgPSBtY3BBdXRoLmZ1bmN0aW9ucztcblxuICAgIGNvbnN0IG1jcFBhdGhzOiBSZWNvcmQ8c3RyaW5nLCB7IGZuOiBMYW1iZGFGdW5jdGlvbjsgbWV0aG9kOiBzdHJpbmc7IG9wZXJhdGlvbklkOiBzdHJpbmc7IHN1bW1hcnk6IHN0cmluZyB9PiA9IHtcbiAgICAgICcvLndlbGwta25vd24vb2F1dGgtcHJvdGVjdGVkLXJlc291cmNlJzoge1xuICAgICAgICBmbjogZm5zLnByb3RlY3RlZFJlc291cmNlLFxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICBvcGVyYXRpb25JZDogJ21jcE9BdXRoUHJvdGVjdGVkUmVzb3VyY2UnLFxuICAgICAgICBzdW1tYXJ5OiAnT0F1dGggUHJvdGVjdGVkIFJlc291cmNlIE1ldGFkYXRhIChSRkMgOTcyOCknLFxuICAgICAgfSxcbiAgICAgICcvLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXInOiB7XG4gICAgICAgIGZuOiBmbnMuYXV0aG9yaXphdGlvblNlcnZlcixcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgb3BlcmF0aW9uSWQ6ICdtY3BPQXV0aEF1dGhvcml6YXRpb25TZXJ2ZXInLFxuICAgICAgICBzdW1tYXJ5OiAnT0F1dGggQXV0aG9yaXphdGlvbiBTZXJ2ZXIgTWV0YWRhdGEgKFJGQyA4NDE0KScsXG4gICAgICB9LFxuICAgICAgJy9vYXV0aC9hdXRob3JpemUnOiB7XG4gICAgICAgIGZuOiBmbnMuYXV0aG9yaXplLFxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICBvcGVyYXRpb25JZDogJ21jcE9BdXRoQXV0aG9yaXplJyxcbiAgICAgICAgc3VtbWFyeTogJ09BdXRoIEF1dGhvcml6ZSBQcm94eScsXG4gICAgICB9LFxuICAgICAgJy9vYXV0aC90b2tlbic6IHtcbiAgICAgICAgZm46IGZucy50b2tlbixcbiAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgIG9wZXJhdGlvbklkOiAnbWNwT0F1dGhUb2tlbicsXG4gICAgICAgIHN1bW1hcnk6ICdPQXV0aCBUb2tlbiBQcm94eScsXG4gICAgICB9LFxuICAgICAgJy9vYXV0aC9yZWdpc3Rlcic6IHtcbiAgICAgICAgZm46IGZucy5yZWdpc3RlcixcbiAgICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICAgIG9wZXJhdGlvbklkOiAnbWNwT0F1dGhSZWdpc3RlcicsXG4gICAgICAgIHN1bW1hcnk6ICdPQXV0aCBEeW5hbWljIENsaWVudCBSZWdpc3RyYXRpb24gKFJGQyA3NTkxKScsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IFtwYXRoLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKG1jcFBhdGhzKSkge1xuICAgICAgaWYgKCF0aGlzLmFwaVNwZWMucGF0aHMpIHtcbiAgICAgICAgdGhpcy5hcGlTcGVjLnBhdGhzID0ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wZXJhdGlvbjogYW55ID0ge1xuICAgICAgICAnc3VtbWFyeSc6IGNvbmZpZy5zdW1tYXJ5LFxuICAgICAgICAnb3BlcmF0aW9uSWQnOiBjb25maWcub3BlcmF0aW9uSWQsXG4gICAgICAgICdzZWN1cml0eSc6IFtdLCAvLyBBbm9ueW1vdXMg4oCUIG5vIGF1dGhvcml6ZXJcbiAgICAgICAgJ3Jlc3BvbnNlcyc6IHtcbiAgICAgICAgICAyMDA6IHsgZGVzY3JpcHRpb246ICdTdWNjZXNzJyB9LFxuICAgICAgICAgIDMwMjogeyBkZXNjcmlwdGlvbjogJ1JlZGlyZWN0JyB9LFxuICAgICAgICB9LFxuICAgICAgICAneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbic6IHtcbiAgICAgICAgICB0eXBlOiAnYXdzX3Byb3h5JyxcbiAgICAgICAgICBodHRwTWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgdXJpOiBjZGsuU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgICAgIHJlc291cmNlOiAncGF0aCcsXG4gICAgICAgICAgICBzZXJ2aWNlOiAnYXBpZ2F0ZXdheScsXG4gICAgICAgICAgICBhY2NvdW50OiAnbGFtYmRhJyxcbiAgICAgICAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBgMjAxNS0wMy0zMS9mdW5jdGlvbnMvJHtjb25maWcuZm4uZnVuY3Rpb25Bcm59L2ludm9jYXRpb25zYCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiAnd2hlbl9ub190ZW1wbGF0ZXMnLFxuICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5hcGlTcGVjLnBhdGhzW3BhdGhdKSB7XG4gICAgICAgIHRoaXMuYXBpU3BlYy5wYXRoc1twYXRoXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICAodGhpcy5hcGlTcGVjLnBhdGhzW3BhdGhdIGFzIGFueSlbY29uZmlnLm1ldGhvZF0gPSBvcGVyYXRpb247XG5cbiAgICAgIC8vIE1hcmsgYXMgYW5vbnltb3VzIHNvIHBhdGNoU2VjdXJpdHkgZG9lc24ndCBvdmVycmlkZSBpdFxuICAgICAgdGhpcy5fYW5vbnltb3VzT3BlcmF0aW9ucy5hZGQoY29uZmlnLm9wZXJhdGlvbklkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2VjdXJpdHktc2NoZW1lIGNvbnRhaW5lciBmb3IgdGhlIHNwZWMsIGNyZWF0aW5nIGl0IGlmIG5lZWRlZC5cbiAgICogT3BlbkFQSSAzLnggc3RvcmVzIHNjaGVtZXMgdW5kZXIgYGNvbXBvbmVudHMuc2VjdXJpdHlTY2hlbWVzYDsgU3dhZ2dlciAyLjBcbiAgICogdXNlcyB0aGUgcm9vdCBgc2VjdXJpdHlEZWZpbml0aW9uc2AuIEFQSSBHYXRld2F5IHJlYWRzIG9ubHkgdGhlIGxvY2F0aW9uIHRoYXRcbiAgICogbWF0Y2hlcyB0aGUgZG9jdW1lbnQncyBkZWNsYXJlZCB2ZXJzaW9uLCBzbyB0aGUgYXV0aG9yaXplciBtdXN0IGdvIHRoZXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBzZWN1cml0eVNjaGVtZUNvbnRhaW5lcihzcGVjOiBPcGVuQVBJMyk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBzcGVjQW55ID0gc3BlYyBhcyBhbnk7XG4gICAgY29uc3QgaXNPcGVuQXBpVjMgPSB0eXBlb2Ygc3BlY0FueS5vcGVuYXBpID09PSAnc3RyaW5nJyAmJiBzcGVjQW55Lm9wZW5hcGkuc3RhcnRzV2l0aCgnMycpO1xuICAgIGlmIChpc09wZW5BcGlWMykge1xuICAgICAgc3BlY0FueS5jb21wb25lbnRzID0gc3BlY0FueS5jb21wb25lbnRzID8/IHt9O1xuICAgICAgc3BlY0FueS5jb21wb25lbnRzLnNlY3VyaXR5U2NoZW1lcyA9IHNwZWNBbnkuY29tcG9uZW50cy5zZWN1cml0eVNjaGVtZXMgPz8ge307XG4gICAgICByZXR1cm4gc3BlY0FueS5jb21wb25lbnRzLnNlY3VyaXR5U2NoZW1lcztcbiAgICB9XG4gICAgc3BlY0FueS5zZWN1cml0eURlZmluaXRpb25zID0gc3BlY0FueS5zZWN1cml0eURlZmluaXRpb25zID8/IHt9O1xuICAgIHJldHVybiBzcGVjQW55LnNlY3VyaXR5RGVmaW5pdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQVdTIGRvZXMgbm90IHByb3Blcmx5IGFwcGx5IHRoZSAnc2VjdXJpdHknIG9wdGlvbiB0byBldmVyeSBzaW5nbGUgcGF0aC1tZXRob2QuXG4gICAqIEFjY29yZGluZyB0byBkb2N1bWVudGF0aW9uLCBnbG9iYWwgc2VjdXJpdHkgZ2V0cyBhcHBsaWVkLCBpZiB0aGVyZSBpcyBubyBzZWN1cml0eVxuICAgKiBzZXQgZm9yIHRoZSBwYXJ0aWN1bGFyIHBhdGgtbWV0aG9kLiBJZiB0aGVyZSBpcyBhbnksIGV2ZW4gZW1wdHksIGl0IHdpbGwgZ2V0IHByZWNlZGVuY2UuXG4gICAqIFRISVMgRE9FUyBOT1QgSEFQUEVOIE9OIEFXUy4gSVQgSlVTVCBBTFdBWVMgVVNFUyBUSEUgR0xPQkFMIFNFVFRJTkchXG4gICAqXG4gICAqICdzZWN1cml0eSBhcHBsaWVzIFsuLi5dIHNjaGVtZXMgZ2xvYmFsbHkgdG8gYWxsIEFQSSBvcGVyYXRpb25zLCB1bmxlc3Mgb3ZlcnJpZGRlbiBvbiB0aGUgb3BlcmF0aW9uIGxldmVsJ1xuICAgKiBAc2VlIGh0dHBzOi8vc3dhZ2dlci5pby9kb2NzL3NwZWNpZmljYXRpb24vYXV0aGVudGljYXRpb24vXG4gICAqL1xuICBwcm90ZWN0ZWQgcGF0Y2hTZWN1cml0eShzcGVjOiBPcGVuQVBJMykge1xuICAgIGlmICgnc2VjdXJpdHknIGluIHNwZWMpIHtcbiAgICAgIC8vIFJlc29sdmUgcGVyLW9wZXJhdGlvbiBzY29wZSBvdmVycmlkZXMgZnJvbSB0aGUgZGVkaWNhdGVkIHByb3AuXG4gICAgICBjb25zdCBwZXJPcGVyYXRpb25TY29wZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRoaXMucHJvcHMuYXV0aG9yaXphdGlvblNjb3Blc0J5T3BlcmF0aW9uXG4gICAgICAgICAgPyB0aGlzLnByb3BzLmF1dGhvcml6YXRpb25TY29wZXNCeU9wZXJhdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT5cbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgZm9yIChjb25zdCBzcGVjUGF0aCBvZiBPYmplY3QudmFsdWVzKHNwZWMucGF0aHMgfHwgW10pKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWNQYXRoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFwaU1ldGhvZHMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgY29udGludWU7IC8vIFNraXAgaWYgbm90IGh0dHAgbWV0aG9kIGRlZmluaXRpb25cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzcGVjTWV0aG9kID0gKHNwZWNQYXRoIGFzIFBhdGhJdGVtT2JqZWN0KVtrZXkgYXMga2V5b2YgUGF0aEl0ZW1PYmplY3RdITtcbiAgICAgICAgICBpZiAoISgnc2VjdXJpdHknIGluIHNwZWNNZXRob2QpKSB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRpb25JZCA9IChzcGVjTWV0aG9kIGFzIE9wZXJhdGlvbk9iamVjdCkub3BlcmF0aW9uSWQ7XG4gICAgICAgICAgICBpZiAob3BlcmF0aW9uSWQgJiYgdGhpcy5fYW5vbnltb3VzT3BlcmF0aW9ucy5oYXMob3BlcmF0aW9uSWQpKSB7XG4gICAgICAgICAgICAgIC8vIFN0b3JlIHdoYXQgc2VjdXJpdHkgd291bGQgaGF2ZSBiZWVuIGFwcGxpZWQgc28gd2UgY2FuIHJlc3RvcmUgbGF0ZXJcbiAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxPcGVyYXRpb25TZWN1cml0eS5zZXQob3BlcmF0aW9uSWQsIHNwZWMuc2VjdXJpdHkgYXMgYW55W10pO1xuICAgICAgICAgICAgICBzcGVjTWV0aG9kLnNlY3VyaXR5ID0gW107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBcHBseSBwZXItb3BlcmF0aW9uIHNjb3BlIG92ZXJyaWRlIGlmIGNvbmZpZ3VyZWRcbiAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uU2VjdXJpdHkgPSB0aGlzLmFwcGx5T3BlcmF0aW9uU2NvcGVzKFxuICAgICAgICAgICAgICAgIHNwZWMuc2VjdXJpdHkgYXMgYW55W10sXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uSWQsXG4gICAgICAgICAgICAgICAgcGVyT3BlcmF0aW9uU2NvcGVzLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBzcGVjTWV0aG9kLnNlY3VyaXR5ID0gb3BlcmF0aW9uU2VjdXJpdHk7XG4gICAgICAgICAgICAgIGlmIChvcGVyYXRpb25JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsT3BlcmF0aW9uU2VjdXJpdHkuc2V0KG9wZXJhdGlvbklkLCBvcGVyYXRpb25TZWN1cml0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3BlcmF0aW9uIGFscmVhZHkgaGFzIGV4cGxpY2l0IHNlY3VyaXR5IGRlZmluZWQgaW4gdGhlIHNwZWNcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbklkID0gKHNwZWNNZXRob2QgYXMgT3BlcmF0aW9uT2JqZWN0KS5vcGVyYXRpb25JZDtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb25JZCkge1xuICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE9wZXJhdGlvblNlY3VyaXR5LnNldChvcGVyYXRpb25JZCwgc3BlY01ldGhvZC5zZWN1cml0eSBhcyBhbnlbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgc3BlYy5zZWN1cml0eTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBwZXItb3BlcmF0aW9uIHNjb3BlIG92ZXJyaWRlcyB0byBhIHNlY3VyaXR5IHJlcXVpcmVtZW50IGFycmF5LlxuICAgKiBJZiB0aGUgb3BlcmF0aW9uIGhhcyBhIHNwZWNpZmljIHNjb3BlIG92ZXJyaWRlIGluIHRoZSBtYXAsIHRoZSBhdXRob3JpemVyJ3NcbiAgICogc2NvcGUgbGlzdCBpcyByZXBsYWNlZCB3aXRoIHRoZSBvdmVycmlkZS4gT3RoZXJ3aXNlIHRoZSBnbG9iYWwgc2VjdXJpdHkgaXMgdXNlZCBhcy1pcy5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlPcGVyYXRpb25TY29wZXMoXG4gICAgZ2xvYmFsU2VjdXJpdHk6IGFueVtdLFxuICAgIG9wZXJhdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGVyT3BlcmF0aW9uU2NvcGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gfCB1bmRlZmluZWQsXG4gICk6IGFueVtdIHtcbiAgICBpZiAoIW9wZXJhdGlvbklkIHx8ICFwZXJPcGVyYXRpb25TY29wZXMgfHwgIShvcGVyYXRpb25JZCBpbiBwZXJPcGVyYXRpb25TY29wZXMpKSB7XG4gICAgICByZXR1cm4gZ2xvYmFsU2VjdXJpdHk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGVzID0gcGVyT3BlcmF0aW9uU2NvcGVzW29wZXJhdGlvbklkXTtcbiAgICAvLyBDbG9uZSB0aGUgZ2xvYmFsIHNlY3VyaXR5IGFuZCByZXBsYWNlIHRoZSBhdXRob3JpemVyIHNjb3Blc1xuICAgIHJldHVybiBnbG9iYWxTZWN1cml0eS5tYXAoKHJlcXVpcmVtZW50OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4pID0+IHtcbiAgICAgIGNvbnN0IHBhdGNoZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgICAgZm9yIChjb25zdCBbYXV0aE5hbWUsIF9hdXRoU2NvcGVzXSBvZiBPYmplY3QuZW50cmllcyhyZXF1aXJlbWVudCkpIHtcbiAgICAgICAgcGF0Y2hlZFthdXRoTmFtZV0gPSBzY29wZXM7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0Y2hlZDtcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
|
|
788
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBOEI7QUFDOUIsNkNBTXFCO0FBQ3JCLGlEQUFtQztBQUVuQyw4Q0FBZ0M7QUFHaEMseUNBQW1EO0FBQ25ELGlDQUF1RDtBQUN2RCx5Q0FBcUM7QUFDckMseURBQW9EO0FBQ3BELCtDQUF3RztBQTROeEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBYSxPQUFvQixTQUFRLGtCQUFPO0lBK0M5Qzs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFVLEtBQXdCO1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRHdCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBMUMxRTs7O1dBR0c7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQUVsRCxlQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQWUzRjs7O1dBR0c7UUFDSyx5QkFBb0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV0RDs7Ozs7V0FLRztRQUNLLCtCQUEwQixHQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBWWpFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFhLENBQUM7UUFFM0YsSUFBSSxnQkFBOEQsQ0FBQztRQUNuRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixnQkFBZ0IsR0FBRztnQkFD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LENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG9CQUFvQixDQUMxQixjQUFxQixFQUNyQixXQUErQixFQUMvQixrQkFBd0Q7UUFFeEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLENBQUMsQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ2hGLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyw4REFBOEQ7UUFDOUQsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBcUMsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sT0FBTyxHQUE2QixFQUFFLENBQUM7WUFDN0MsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUM3QixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUY7QUFuekJELDBCQW16QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsXG4gIGF3c19pYW0sXG4gIGF3c19yb3V0ZTUzLFxuICBhd3Nfcm91dGU1M190YXJnZXRzLFxuICBhd3NfYXBpZ2F0ZXdheSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IE9wZW5BUEkzLCBPcGVyYXRpb25PYmplY3QsIFBhdGhJdGVtT2JqZWN0IH0gZnJvbSAnb3BlbmFwaS10eXBlc2NyaXB0JztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiwgSUNvZ25pdG9BdXRoZW50aWNhdGlvbiwgSUp3dEF1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uLCBMYW1iZGFPcHRpb25zIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IE1jcEF1dGggfSBmcm9tICcuL21jcC1hdXRoJztcbmltcG9ydCB7IE1jcENvZ25pdG9BdXRoIH0gZnJvbSAnLi9tY3AtY29nbml0by1hdXRoJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfRE9NQUlOTkFNRSwgQ0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9VUkwgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbi8qKlxuICogQ29nbml0by1zcGVjaWZpYyBNQ1AgYXV0aCBjb25maWd1cmF0aW9uLlxuICogQ3JlYXRlcyBhIGRlZGljYXRlZCB1c2VyIHBvb2wgY2xpZW50IGZvciBNQ1AgY29ubmVjdG9ycyBhdXRvbWF0aWNhbGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhDb2duaXRvT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQ29nbml0b0F1dGhlbnRpY2F0aW9uIGNvbnN0cnVjdCBtYW5hZ2luZyB0aGUgdXNlciBwb29sLlxuICAgKiBBIGRlZGljYXRlZCBjbGllbnQgd2l0aCBhdXRoIGNvZGUgKyBQS0NFIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGg6IENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gYXV0aCBkb21haW4gKGN1c3RvbSBvciBDb2duaXRvLWhvc3RlZCkuXG4gICAqIFJlcXVpcmVkIOKAlCBuZXZlciBpbmZlcnJlZCBmcm9tIGFwaURvbWFpbi5cbiAgICogRXhhbXBsZTogJ2F1dGguZXhhbXBsZS5jb20nXG4gICAqL1xuICByZWFkb25seSBhdXRoRG9tYWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBJRCBmb3IgdGhlIHVzZXIgcG9vbCBjbGllbnQgKGFmZmVjdHMgQ2xvdWRGb3JtYXRpb24gbG9naWNhbCBJRCkuXG4gICAqIEBkZWZhdWx0ICdtY3BDb25uZWN0b3InXG4gICAqL1xuICByZWFkb25seSBjbGllbnRDb25zdHJ1Y3RJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBPQXV0aCBjYWxsYmFjayBVUkxzIGZvciB0aGUgQ29nbml0byBjbGllbnQgYmV5b25kIHRoZSBhbGxvd2VkUmVkaXJlY3RVcmlzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbENhbGxiYWNrVXJscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEdlbmVyaWMgKG5vbi1Db2duaXRvKSBNQ1AgYXV0aCBjb25maWd1cmF0aW9uLlxuICogUmVxdWlyZXMgZXhwbGljaXQgYXV0aG9yaXplIGFuZCB0b2tlbiBlbmRwb2ludCBVUkxzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1jcEF1dGhHZW5lcmljT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdXBzdHJlYW0gT0F1dGggYXV0aG9yaXplIGVuZHBvaW50IFVSTC5cbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXV0aC5leGFtcGxlLmNvbS9vYXV0aDIvYXV0aG9yaXplJ1xuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yaXplRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIE9BdXRoIHRva2VuIGVuZHBvaW50IFVSTC5cbiAgICogRXhhbXBsZTogJ2h0dHBzOi8vYXV0aC5leGFtcGxlLmNvbS9vYXV0aDIvdG9rZW4nXG4gICAqL1xuICByZWFkb25seSB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmUtcHJvdmlzaW9uZWQgT0F1dGggY2xpZW50IElEIHJldHVybmVkIGJ5IHRoZSByZWdpc3RlciBlbmRwb2ludC5cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTUNQIGF1dGggY29uZmlndXJhdGlvbiBmb3IgdGhlIFJlc3RBcGkuXG4gKiBQcm92aWRlIGVpdGhlciBgY29nbml0b2AgKGZvciBDb2duaXRvLWJhY2tlZCBhdXRoKSBvciBgZ2VuZXJpY2AgKGZvciBhbnkgT0F1dGgyIHByb3ZpZGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNY3BBdXRoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb2duaXRvLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24uIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBnZW5lcmljYC5cbiAgICogQ3JlYXRlcyBhIHVzZXIgcG9vbCBjbGllbnQgYW5kIGRlcml2ZXMgZW5kcG9pbnRzIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSBjb2duaXRvPzogTWNwQXV0aENvZ25pdG9PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBHZW5lcmljIE9BdXRoMiBwcm92aWRlciBjb25maWd1cmF0aW9uLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgY29nbml0b2AuXG4gICAqIFJlcXVpcmVzIGV4cGxpY2l0IGVuZHBvaW50IFVSTHMgYW5kIGNsaWVudCBJRC5cbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyaWM/OiBNY3BBdXRoR2VuZXJpY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIE1DUCBzZXJ2ZXIgaW5mbyByZXR1cm5lZCBpbiB0aGUgJ2luaXRpYWxpemUnIHJlc3BvbnNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVySW5mbzogeyByZWFkb25seSBuYW1lOiBzdHJpbmc7IHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBbGxvd2VkIHJlZGlyZWN0IFVSSXMgZm9yIGR5bmFtaWMgY2xpZW50IHJlZ2lzdHJhdGlvbi5cbiAgICogQGRlZmF1bHQgWydodHRwczovL2NsYXVkZS5haS9vYXV0aC9jYWxsYmFjaycsICdodHRwczovL2NsYXVkZS5haS9hcGkvbWNwL2F1dGhfY2FsbGJhY2snLCAnaHR0cHM6Ly9jaGF0Z3B0LmNvbS9vYXV0aC9jYWxsYmFjayddXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkUmVkaXJlY3RVcmlzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRlZCBNQ1AgcHJvdG9jb2wgdmVyc2lvbnMgKG5ld2VzdCBmaXJzdCkuXG4gICAqIEBkZWZhdWx0IFsnMjAyNS0xMS0yNScsICcyMDI1LTA2LTE4JywgJzIwMjUtMDMtMjYnLCAnMjAyNC0xMS0wNSddXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbFZlcnNpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE9BdXRoIHNjb3BlcyB0byBhZHZlcnRpc2UgaW4gZGlzY292ZXJ5IG1ldGFkYXRhLlxuICAgKiBAZGVmYXVsdCBbJ29wZW5pZCcsICdlbWFpbCcsICdwcm9maWxlJ11cbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXJzIHRvIHN0cmlwIGZyb20gYXV0aG9yaXplL3Rva2VuIHByb3h5IHJlcXVlc3RzLlxuICAgKiBAZGVmYXVsdCBbJ3Jlc291cmNlJ11cbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwUGFyYW1ldGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZnVuY3Rpb24gb3B0aW9ucyBmb3IgTUNQIGF1dGggaGFuZGxlcnMuXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFPcHRpb25zPzogTGFtYmRhT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0QXBpUHJvcHM8T1BTPiBleHRlbmRzIEJhc2VBcGlQcm9wcyB7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHJvdXRlcyBmb3IgYWxsIGVuZHBvaW50cyBjb25maWd1cmVkIGluIHRoZSBvcGVuYXBpLnlhbWwgZmlsZVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvR2VuZXJhdGVSb3V0ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBjdXN0b20gb3B0aW9ucyBmb3IgdGhlIGNyZWF0ZWQgSHR0cEFwaVxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZXN0QXBpUHJvcHM/OiBhd3NfYXBpZ2F0ZXdheS5SZXN0QXBpQmFzZVByb3BzO1xuXG4gIC8qKlxuICAgKiBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3QgcGVyIG9wZXJhdGlvbklkXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIGxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbj86IHsgW29wZXJhdGlvbklkIGluIGtleW9mIE9QU10/OiBMYW1iZGFPcHRpb25zIH07XG5cbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgY29yczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIG9wZXJhdGlvbiBJRHMgdGhhdCBzaG91bGQgc2tpcCB0aGUgYXV0aG9yaXplciBlbnRpcmVseS5cbiAgICogVGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGhhdmUgYHNlY3VyaXR5OiBbXWAgaW4gdGhlIE9wZW5BUEkgc3BlYywgbWVhbmluZ1xuICAgKiB0aGV5IGFyZSBwdWJsaWNseSBhY2Nlc3NpYmxlIHdpdGhvdXQgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYW5vbnltb3VzIG9wZXJhdGlvbnNcbiAgICovXG4gIGFub255bW91c09wZXJhdGlvbnM/OiAoa2V5b2YgT1BTKVtdO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBKV1QgTGFtYmRhIGF1dGhvcml6ZXIgdXNlcyB0aGUgVE9LRU4gb3IgUkVRVUVTVCB0eXBlLlxuICAgKlxuICAgKiAqKnRva2VuIChkZWZhdWx0KToqKiBUaGUgQVBJIEdhdGV3YXkgdmFsaWRhdGVzIHRoYXQgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByZXNlbnRcbiAgICogYmVmb3JlIGludm9raW5nIHRoZSBMYW1iZGEgYXV0aG9yaXplci4gSWYgdGhlIGhlYWRlciBpcyBtaXNzaW5nLCBBUEkgR2F0ZXdheSBpbW1lZGlhdGVseVxuICAgKiByZXR1cm5zIDQwMSB3aXRob3V0IGludm9raW5nIHRoZSBMYW1iZGEuIFRoaXMgaXMgY2hlYXBlciBmb3IgdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RzXG4gICAqIGJlY2F1c2Ugbm8gTGFtYmRhIGludm9jYXRpb24gb2NjdXJzLCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBvcHRpb25hbCBhdXRoZW50aWNhdGlvblxuICAgKiAoZXZlcnkgcmVxdWVzdCBtdXN0IGNhcnJ5IGEgdG9rZW4gb3IgYmUgcmVqZWN0ZWQpLlxuICAgKlxuICAgKiAqKnJlcXVlc3Q6KiogVGhlIEFQSSBHYXRld2F5IGFsd2F5cyBpbnZva2VzIHRoZSBMYW1iZGEgYXV0aG9yaXplciByZWdhcmRsZXNzIG9mIHdoZXRoZXJcbiAgICogdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByZXNlbnQuIFRoaXMgZW5hYmxlcyBvcHRpb25hbCBhdXRoZW50aWNhdGlvbjogdGhlIExhbWJkYVxuICAgKiBjYW4gaW5zcGVjdCB0aGUgcmVxdWVzdCwgcmV0dXJuIEFsbG93IHdpdGggYW4gYW5vbnltb3VzIHByaW5jaXBhbCB3aGVuIG5vIHRva2VuIGlzXG4gICAqIHByb3ZpZGVkLCBhbmQgcmV0dXJuIEFsbG93IHdpdGggdXNlciBjbGFpbXMgd2hlbiBhIHZhbGlkIHRva2VuIGlzIHByZXNlbnQuIFRoZSB0cmFkZS1vZmZcbiAgICogaXMgdGhhdCB5b3UgcGF5IGZvciBhIExhbWJkYSBpbnZvY2F0aW9uIG9uIGV2ZXJ5IHJlcXVlc3QsIGluY2x1ZGluZyB1bmF1dGhlbnRpY2F0ZWQgb25lcy5cbiAgICpcbiAgICogVXNlICdyZXF1ZXN0JyB3aGVuIHlvdSBuZWVkIGVuZHBvaW50cyB0aGF0IGJlaGF2ZSBkaWZmZXJlbnRseSBmb3IgYXV0aGVudGljYXRlZCB2c1xuICAgKiBhbm9ueW1vdXMgdXNlcnMgKGUuZy4sIHBlcnNvbmFsaXplZCByZXNwb25zZXMgZm9yIGxvZ2dlZC1pbiB1c2VycywgZ2VuZXJpYyByZXNwb25zZXNcbiAgICogZm9yIGd1ZXN0cykgd2l0aG91dCBzcGxpdHRpbmcgdGhlbSBpbnRvIHNlcGFyYXRlIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0ICd0b2tlbidcbiAgICovXG4gIGp3dEF1dGhvcml6ZXJUeXBlPzogJ3Rva2VuJyB8ICdyZXF1ZXN0JztcblxuICAvKipcbiAgICogTUNQIEF1dGggY29uZmlndXJhdGlvbiB0byB3aXJlIGludG8gdGhpcyBBUEkuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIE9wZW5BUEkgc3BlY1xuICAgKiB3aXRoIExhbWJkYSBwcm94eSBpbnRlZ3JhdGlvbnM6XG4gICAqXG4gICAqIC0gR0VUICAvLndlbGwta25vd24vb2F1dGgtcHJvdGVjdGVkLXJlc291cmNlXG4gICAqIC0gR0VUICAvLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXJcbiAgICogLSBHRVQgIC9vYXV0aC9hdXRob3JpemVcbiAgICogLSBQT1NUIC9vYXV0aC90b2tlblxuICAgKiAtIFBPU1QgL29hdXRoL3JlZ2lzdGVyXG4gICAqXG4gICAqIEFsbCBNQ1AgYXV0aCBlbmRwb2ludHMgYXJlIGFub255bW91cyAobm8gYXV0aG9yaXplcikuXG4gICAqIFRoZSBBUEkgZG9tYWluIGlzIGRlcml2ZWQgZnJvbSB0aGUgUmVzdEFwaSdzIG93biBkb21haW4gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogUHJvdmlkZSBlaXRoZXIgYGNvZ25pdG9gIChjcmVhdGVzIGEgQ29nbml0byBjbGllbnQgYXV0b21hdGljYWxseSkgb3JcbiAgICogYGdlbmVyaWNgIChmb3IgYW55IE9BdXRoMiBwcm92aWRlciB3aXRoIGV4cGxpY2l0IGVuZHBvaW50IFVSTHMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE1DUCBhdXRoXG4gICAqL1xuICBtY3BBdXRoPzogTWNwQXV0aE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBPQXV0aDIgc2NvcGVzIHJlcXVpcmVkIGJ5IHRoZSBDb2duaXRvIGF1dGhvcml6ZXIuXG4gICAqXG4gICAqIFdoZW4gc2NvcGVzIGFyZSBwcmVzZW50LCBBUEkgR2F0ZXdheSB2YWxpZGF0ZXMgdGhlICoqYWNjZXNzIHRva2VuKiogYW5kIGNoZWNrc1xuICAgKiB0aGF0IGl0IGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3BlY2lmaWVkIHNjb3Blcy4gQW4gZW1wdHkgYXJyYXkgbWVhbnMgbm9cbiAgICogc2NvcGVzIGFyZSByZXF1aXJlZDsgQVBJIEdhdGV3YXkgdGhlbiB2YWxpZGF0ZXMgdGhlICoqSUQgdG9rZW4qKiBpbnN0ZWFkLFxuICAgKiByZWplY3RpbmcgYWNjZXNzIHRva2VucyB3aXRoIGEgNDAxLlxuICAgKlxuICAgKiBVc2UgcGVyLW9wZXJhdGlvbiBvdmVycmlkZXMgdmlhIGBhdXRob3JpemF0aW9uU2NvcGVzQnlPcGVyYXRpb25gIHRvIHNldFxuICAgKiBkaWZmZXJlbnQgc2NvcGVzIG9uIGluZGl2aWR1YWwgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgWydvcGVuaWQnXVxuICAgKi9cbiAgYXV0aG9yaXphdGlvblNjb3Blcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQZXItb3BlcmF0aW9uIE9BdXRoMiBzY29wZSBvdmVycmlkZXMgZm9yIHRoZSBDb2duaXRvIGF1dGhvcml6ZXIuXG4gICAqXG4gICAqIE9wZXJhdGlvbnMgbGlzdGVkIGhlcmUgdXNlIHRoZSBzcGVjaWZpZWQgc2NvcGVzIGluc3RlYWQgb2YgdGhlIGdsb2JhbFxuICAgKiBgYXV0aG9yaXphdGlvblNjb3Blc2AgZGVmYXVsdC4gT3BlcmF0aW9ucyBub3QgbGlzdGVkIGZhbGwgYmFjayB0byB0aGVcbiAgICogZ2xvYmFsIGRlZmF1bHQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF1dGhvcml6YXRpb25TY29wZXNCeU9wZXJhdGlvbjoge1xuICAgKiAgIGNyZWF0ZUl0ZW06IFsnb3BlbmlkJywgJ2l0ZW1zOndyaXRlJ10sXG4gICAqICAgZGVsZXRlSXRlbTogWydvcGVuaWQnLCAnaXRlbXM6ZGVsZXRlJ10sXG4gICAqIH1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwZXItb3BlcmF0aW9uIG92ZXJyaWRlczsgYWxsIG9wZXJhdGlvbnMgdXNlIGF1dGhvcml6YXRpb25TY29wZXNcbiAgICovXG4gIGF1dGhvcml6YXRpb25TY29wZXNCeU9wZXJhdGlvbj86IHsgW29wZXJhdGlvbklkIGluIGtleW9mIE9QU10/OiBzdHJpbmdbXSB9O1xufVxuXG4vKipcbiAqIFRoZSBSZXN0QXBpIGNvbnN0cnVjdCBzZXRzIHVwIGFuIEFXUyBBUEkgR2F0ZXdheSBSRVNUIEFQSSB1c2luZyBPcGVuQVBJIHNwZWNpZmljYXRpb24uXG4gKiBUaGlzIGNvbnN0cnVjdCBmYWNpbGl0YXRlcyB0aGUgY3JlYXRpb24gb2YgYSBSRVNUIEFQSSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBjdXN0b20gZG9tYWluLCBDT1JTIHN1cHBvcnQsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIExhbWJkYSBmdW5jdGlvbnMuXG4gKiBJdCBhbGxvd3MgYXV0by1nZW5lcmF0aW5nIHJvdXRlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgT3BlbkFQSSBkZWZpbml0aW9uIGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIGR5bmFtaWNhbGx5IGFkZCBjdXN0b20gcm91dGVzIGFuZCBtYW5hZ2UgTGFtYmRhIGZ1bmN0aW9uIGludGVncmF0aW9ucy5cbiAqXG4gKiBAdGVtcGxhdGUgUEFUSFMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgQVBJIHBhdGhzLlxuICogQHRlbXBsYXRlIE9QUyAtIFRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBBUEkgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYXBpID0gbmV3IFJlc3RBcGkodGhpcywgJ015UmVzdEFwaScsIHtcbiAqICAgYXBpTmFtZTogJ015QVBJJyxcbiAqICAgc3RhZ2VOYW1lOiAnZGV2JyxcbiAqICAgZGVmaW5pdGlvbkZpbGVOYW1lOiAnb3BlbmFwaS55YW1sJyxcbiAqICAgYXV0aGVudGljYXRpb246IG15Q29nbml0b0F1dGgsXG4gKiAgIHNpbmdsZVRhYmxlRGF0YXN0b3JlOiBteUR5bmFtb0RCVGFibGUsXG4gKiAgIGF1dG9HZW5lcmF0ZVJvdXRlczogdHJ1ZSxcbiAqIH0pO1xuICpcbiAqIC8vIEFkZCBhIGN1c3RvbSBSRVNUIHJlc291cmNlXG4gKiBhcGkuYWRkUmVzdFJlc291cmNlKCcvaXRlbXMnLCAnZ2V0Jyk7XG4gKlxuICogLy8gR2V0IHRoZSBMYW1iZGEgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uXG4gKiBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IGFwaS5nZXRGdW5jdGlvbkZvck9wZXJhdGlvbignZ2V0SXRlbXMnKTtcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc3RBcGk8UEFUSFMsIE9QUz4gZXh0ZW5kcyBCYXNlQXBpIHtcblxuICAvKipcbiAgICogVGhlIEFXUyBBUEkgR2F0ZXdheSBSRVNUIEFQSSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGF3c19hcGlnYXRld2F5LlNwZWNSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgT3BlbkFQSSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgUkVTVCBBUEkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpU3BlYzogT3BlbkFQSTM7XG5cbiAgLyoqXG4gICAqIEEgY29sbGVjdGlvbiBvZiBMYW1iZGEgZnVuY3Rpb25zIHVzZWQgYXMgaW50ZWdyYXRpb25zIGZvciB0aGUgQVBJIG9wZXJhdGlvbnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9mdW5jdGlvbnM6IHsgW29wZXJhdGlvbklkOiBzdHJpbmddOiBMYW1iZGFGdW5jdGlvbiB9ID0ge307XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcGlNZXRob2RzID0gWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ29wdGlvbnMnLCAnaGVhZCddO1xuXG4gIC8qKlxuICAgKiBUaGUgSldUIGF1dGhvcml6ZXIgTGFtYmRhIGZ1bmN0aW9uLCBpZiBKV1QgYXV0aGVudGljYXRpb24gaXMgY29uZmlndXJlZC5cbiAgICogU3RvcmVkIHNvIHRoZSBpbnZva2UgcGVybWlzc2lvbiBjYW4gYmUgZ3JhbnRlZCBhZnRlciB0aGUgU3BlY1Jlc3RBcGkgaXMgY3JlYXRlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2F1dGhvcml6ZXJGbj86IExhbWJkYUZ1bmN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgTUNQIGF1dGggY29uc3RydWN0LCBpZiBtY3BBdXRoIG9wdGlvbnMgd2VyZSBwcm92aWRlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX21jcEF1dGg/OiBNY3BBdXRoO1xuXG4gIC8qKlxuICAgKiBTZXQgb2Ygb3BlcmF0aW9uSWRzIHRoYXQgc2hvdWxkIGhhdmUgc2VjdXJpdHkgZGlzYWJsZWQgKHNlY3VyaXR5OiBbXSkuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9hbm9ueW1vdXNPcGVyYXRpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAvKipcbiAgICogU3RvcmVzIHRoZSBvcmlnaW5hbCBwZXItb3BlcmF0aW9uIHNlY3VyaXR5IGFycmF5cyBhcyBhc3NpZ25lZCBieSBwYXRjaFNlY3VyaXR5LFxuICAgKiBrZXllZCBieSBvcGVyYXRpb25JZC4gVXNlZCBieSBzZXRBbm9ueW1vdXNPcGVyYXRpb25zIHRvIHJlc3RvcmUgc2VjdXJpdHkgb25cbiAgICogb3BlcmF0aW9ucyByZW1vdmVkIGZyb20gdGhlIGFub255bW91cyBzZXQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9vcmlnaW5hbE9wZXJhdGlvblNlY3VyaXR5OiBNYXA8c3RyaW5nLCBhbnlbXT4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVzdEFwaS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgUmVzdEFwaSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHByb3BzOiBSZXN0QXBpUHJvcHM8T1BTPikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5hcGlTcGVjID0geWFtbC5sb2FkKGZzLnJlYWRGaWxlU3luYyhwcm9wcy5kZWZpbml0aW9uRmlsZU5hbWUpLnRvU3RyaW5nKCkpIGFzIE9wZW5BUEkzO1xuXG4gICAgbGV0IGN1c3RvbURvbWFpbk5hbWU6IGF3c19hcGlnYXRld2F5LkRvbWFpbk5hbWVPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFwaUZRRE4pIHtcbiAgICAgIGN1c3RvbURvbWFpbk5hbWUgPSB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgY2VydGlmaWNhdGU6IG5ldyBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgICB2YWxpZGF0aW9uOiBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKHRoaXMuaG9zdGVkWm9uZSksXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdSZXN0QXBpRG9tYWluTmFtZScsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9SRVNUQVBJX0RPTUFJTk5BTUV9YCxcbiAgICAgICAgdmFsdWU6IHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1Jlc3RBcGlVcmxPdXRwdXQnLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5hcGlOYW1lfSR7Q0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9VUkx9YCxcbiAgICAgICAgdmFsdWU6ICdodHRwczovLycgKyB0aGlzLmFwaUZRRE4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiAoKHByb3BzLm1vbml0b3JpbmcgPz8gdHJ1ZSkgJiYgdGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljU2VydmVyRXJyb3Ioe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0NsaWVudEVycm9yKHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcblxuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTAnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5NScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk5JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyB9XG5cbiAgICBpZiAocHJvcHMuYXV0b0dlbmVyYXRlUm91dGVzID8/IHRydWUpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBpbiB0aGlzLmFwaVNwZWMucGF0aHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmFwaVNwZWMucGF0aHMsIHBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgcGF0aEl0ZW0gPSB0aGlzLmFwaVNwZWMucGF0aHNbcGF0aF07XG4gICAgICAgICAgZm9yIChjb25zdCBtZXRob2QgaW4gcGF0aEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGF0aEl0ZW0sIG1ldGhvZCkgJiZcbiAgICAgICAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ29wdGlvbnMnLCAnaGVhZCddLmluZGV4T2YobWV0aG9kKSA+PSAwKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBhbGwgb3BlcmF0aW9uc1xuICAgICAgICAgICAgICB0aGlzLmFkZFJlc3RSZXNvdXJjZShwYXRoIGFzIGFueSwgbWV0aG9kIGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIF9zcGVjIEVuZHBvaW50XG4gICAgdGhpcy5hcGlTcGVjLnBhdGhzIVsnL29wZW5hcGkuanNvbiddID0ge1xuICAgICAgZ2V0OiB7XG4gICAgICAgICdzdW1tYXJ5JzogJ1JldHVybnMgdGhlIHJhdyBPcGVuQVBJIHNwZWMgb2YgdGhpcyBBUEknLFxuICAgICAgICAnZGVzY3JpcHRpb24nOiAnUmV0dXJucyB0aGUgcmF3IE9wZW5BUEkgc3BlYyBvZiB0aGlzIEFQSScsXG4gICAgICAgICdvcGVyYXRpb25JZCc6ICdfc3BlYycsXG4gICAgICAgICdyZXNwb25zZXMnOiB7XG4gICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ09wZW5BUEkgc3BlYyBvZiB0aGlzIEFQSScsXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vcGVuYXBpK2pzb24nOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBDdXN0b20gcHJvcGVydHkgZm9yIEFXU1xuICAgICAgICAneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbic6IHtcbiAgICAgICAgICB0eXBlOiAnbW9jaycsXG4gICAgICAgICAgaHR0cE1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJ3tcXCdzdGF0dXNDb2RlXFwnOiAyMDB9JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vb3BlbmFwaStqc29uJzogSlNPTi5zdHJpbmdpZnkodGhpcy5jbGVhbnVwU3BlYyhKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCh0aGlzLmFwaVNwZWMpKSkpKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChwcm9wcy5jb3JzKSB7XG4gICAgICB0aGlzLmFwaVNwZWMucGF0aHMhWycve3Byb3h5K30nXSA9IHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICdzdW1tYXJ5JzogJ0NPUlMgc3VwcG9ydCcsXG4gICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0VuYWJsZSBDT1JTIGJ5IHJldHVybmluZyBjb3JyZWN0IGhlYWRlcnMnLFxuICAgICAgICAgICd0YWdzJzogWydDT1JTJ10sXG4gICAgICAgICAgJ3NlY3VyaXR5JzogW10sXG4gICAgICAgICAgJ3Jlc3BvbnNlcyc6IHtcbiAgICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgcmVzcG9uc2UgZm9yIENPUlMgbWV0aG9kJyxcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb250ZW50OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbic6IHtcbiAgICAgICAgICAgIHR5cGU6ICdtb2NrJyxcbiAgICAgICAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAnI3NldCgkY29udGV4dC5yZXF1ZXN0T3ZlcnJpZGUuaGVhZGVyLm9yaWdpbiA9ICRtZXRob2QucmVxdWVzdC5oZWFkZXIub3JpZ2luKVxcbntcXG4gIFwic3RhdHVzQ29kZVwiIDogMjAwXFxufVxcbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnMjAwJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiBcIidDb250ZW50LVR5cGUsWC1BbXotRGF0ZSxBdXRob3JpemF0aW9uLFgtQXBpLUtleSdcIixcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogXCIndHJ1ZSdcIixcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiBcIidQVVQsR0VULFBPU1QsREVMRVRFLFBBVENILEhFQUQsT1BUSU9OUydcIixcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICdjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5oZWFkZXIub3JpZ2luJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6ICd7fScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5wYXRjaFNlY3VyaXR5U2NoZW1lcyh0aGlzLmFwaVNwZWMpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhbm9ueW1vdXMgb3BlcmF0aW9ucyBmcm9tIHByb3BzIGJlZm9yZSBwYXRjaFNlY3VyaXR5IGRpc3RyaWJ1dGVzIHNlY3VyaXR5XG4gICAgaWYgKHByb3BzLmFub255bW91c09wZXJhdGlvbnMpIHtcbiAgICAgIGZvciAoY29uc3Qgb3BJZCBvZiBwcm9wcy5hbm9ueW1vdXNPcGVyYXRpb25zKSB7XG4gICAgICAgIHRoaXMuX2Fub255bW91c09wZXJhdGlvbnMuYWRkKG9wSWQgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmplY3QgTUNQIGF1dGggcGF0aHMgaW50byB0aGUgT3BlbkFQSSBzcGVjLlxuICAgIC8vIElNUE9SVEFOVDogVGhpcyBNVVNUIGhhcHBlbiBiZWZvcmUgcGF0Y2hTZWN1cml0eSgpIHNvIHRoYXQgdGhlIE1DUCBhdXRoXG4gICAgLy8gb3BlcmF0aW9uIElEcyBhcmUgYWxyZWFkeSBpbiBfYW5vbnltb3VzT3BlcmF0aW9ucyB3aGVuIHNlY3VyaXR5IGlzIGRpc3RyaWJ1dGVkLlxuICAgIGlmIChwcm9wcy5tY3BBdXRoKSB7XG4gICAgICB0aGlzLl9tY3BBdXRoID0gdGhpcy5jcmVhdGVNY3BBdXRoKHByb3BzLm1jcEF1dGgpO1xuICAgICAgdGhpcy5pbmplY3RNY3BBdXRoUGF0aHModGhpcy5fbWNwQXV0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5wYXRjaFNlY3VyaXR5KHRoaXMuYXBpU3BlYyk7XG5cbiAgICAvLyBUT0RPIHBhdGNoIHNwZWMgZm9yIENvZ25pdG8gdXNlciBwb29sXG5cbiAgICB0aGlzLmFwaSA9IG5ldyBhd3NfYXBpZ2F0ZXdheS5TcGVjUmVzdEFwaSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICByZXN0QXBpTmFtZTogYCR7cHJvcHMuYXBpTmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgZG9tYWluTmFtZTogY3VzdG9tRG9tYWluTmFtZSxcbiAgICAgIGFwaURlZmluaXRpb246IGF3c19hcGlnYXRld2F5LkFwaURlZmluaXRpb24uZnJvbUlubGluZSh0aGlzLmFwaVNwZWMpLFxuICAgICAgLi4ucHJvcHMucmVzdEFwaVByb3BzLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIGludm9rZSBwZXJtaXNzaW9ucyB0byBMYW1iZGEgZnVuY3Rpb25zXG4gICAgZm9yIChjb25zdCBmbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuX2Z1bmN0aW9ucykpIHtcbiAgICAgIGZuLmFkZFBlcm1pc3Npb24oJ1Jlc3RBcGlJbnZva2UnLCB7XG4gICAgICAgIHByaW5jaXBhbDogbmV3IGF3c19pYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIHNvdXJjZUFybjogdGhpcy5hcGkuYXJuRm9yRXhlY3V0ZUFwaSgpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR3JhbnQgQVBJIEdhdGV3YXkgcGVybWlzc2lvbiB0byBpbnZva2UgdGhlIEpXVCBhdXRob3JpemVyIExhbWJkYVxuICAgIGlmICh0aGlzLl9hdXRob3JpemVyRm4pIHtcbiAgICAgIHRoaXMuX2F1dGhvcml6ZXJGbi5hZGRQZXJtaXNzaW9uKCdBcGlHYXRld2F5QXV0aG9yaXplckludm9rZScsIHtcbiAgICAgICAgcHJpbmNpcGFsOiBuZXcgYXdzX2lhbS5TZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgYWN0aW9uOiAnbGFtYmRhOkludm9rZUZ1bmN0aW9uJyxcbiAgICAgICAgc291cmNlQXJuOiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBHcmFudCBBUEkgR2F0ZXdheSBwZXJtaXNzaW9uIHRvIGludm9rZSBNQ1AgYXV0aCBMYW1iZGEgZnVuY3Rpb25zLlxuICAgIC8vIFRoZXNlIG5lZWQgZXhwbGljaXQgYWRkUGVybWlzc2lvbiBiZWNhdXNlIHRoZXkgYXJlIGluamVjdGVkIGRpcmVjdGx5IGludG9cbiAgICAvLyB0aGUgT3BlbkFQSSBzcGVjICh2aWEgaW5qZWN0TWNwQXV0aFBhdGhzKSwgbm90IHRocm91Z2ggYWRkUmVzdFJlc291cmNlIHdoaWNoXG4gICAgLy8gd291bGQgcmVnaXN0ZXIgdGhlbSBpbiB0aGlzLl9mdW5jdGlvbnMgZm9yIHRoZSBidWxrIGdyYW50IGFib3ZlLlxuICAgIGlmICh0aGlzLl9tY3BBdXRoKSB7XG4gICAgICBjb25zdCBtY3BGdW5jdGlvbnMgPSB0aGlzLl9tY3BBdXRoLmZ1bmN0aW9ucztcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGZuXSBvZiBPYmplY3QuZW50cmllcyhtY3BGdW5jdGlvbnMpKSB7XG4gICAgICAgIGZuLmFkZFBlcm1pc3Npb24oYE1jcEF1dGgke25hbWV9SW52b2tlYCwge1xuICAgICAgICAgIHByaW5jaXBhbDogbmV3IGF3c19pYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgICAgYWN0aW9uOiAnbGFtYmRhOkludm9rZUZ1bmN0aW9uJyxcbiAgICAgICAgICBzb3VyY2VBcm46IHRoaXMuYXBpLmFybkZvckV4ZWN1dGVBcGkoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbURvbWFpbk5hbWUgJiYgdGhpcy5hcGkuZG9tYWluTmFtZSkge1xuICAgICAgbmV3IGF3c19yb3V0ZTUzLkFSZWNvcmQodGhpcywgJ0Ruc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lISxcbiAgICAgICAgcmVjb3JkTmFtZTogY3VzdG9tRG9tYWluTmFtZS5kb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IGF3c19yb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IGF3c19yb3V0ZTUzX3RhcmdldHMuQXBpR2F0ZXdheURvbWFpbih0aGlzLmFwaS5kb21haW5OYW1lKSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFudXBTcGVjKHNwZWM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBPYmplY3QuZW50cmllcyhzcGVjKS5mb3JFYWNoKChbcHJvcCwgdmFsdWVdOiBbc3RyaW5nLCBhbnldKSA9PiB7XG4gICAgICBpZiAocHJvcC5zdGFydHNXaXRoKCd4LScpKSB7XG4gICAgICAgIGRlbGV0ZSBzcGVjW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMuY2xlYW51cFNwZWMoc3BlY1twcm9wXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3BlYztcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIGdlbmVyYXRlZCBMYW1iZGEgZnVuY3Rpb24gZm9yIHRoZSBzcGVjaWZpZWQgQVBJIG9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uKG9wZXJhdGlvbklkOiBrZXlvZiBPUFMpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZCBhcyBzdHJpbmddO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBhIGxpc3Qgb2YgYWxsIGdlbmVyYXRlZCBMYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25zKCk6IExhbWJkYUZ1bmN0aW9uW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2Z1bmN0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRvciBtZXRob2QgdG8gbW9kaWZ5IHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbklkcyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gdmlzaXRcbiAgICogQHBhcmFtIG9wIHRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBldmVyeSBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIG1vZGlmeU9wZXJhdGlvbkZ1bmN0aW9ucyhvcGVyYXRpb25JZHM6IChrZXlvZiBPUFMpW10sIG9wOiAoZm46IExhbWJkYUZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb25JZCBvZiBvcGVyYXRpb25JZHMpIHtcbiAgICAgIG9wKHRoaXMuZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24ob3BlcmF0aW9uSWQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgZnVsbCBzZXQgb2YgYW5vbnltb3VzIG9wZXJhdGlvbnMuXG4gICAqIEFub255bW91cyBvcGVyYXRpb25zIHdpbGwgaGF2ZSBgc2VjdXJpdHk6IFtdYCBhcHBsaWVkIGluIHRoZSBPcGVuQVBJIHNwZWMsXG4gICAqIG1ha2luZyB0aGVtIHB1YmxpY2x5IGFjY2Vzc2libGUgd2l0aG91dCBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogU2luY2UgQ0RLIHNlcmlhbGl6ZXMgdGhlIE9wZW5BUEkgc3BlYyBhdCBzeW50aCB0aW1lIChmcm9tSW5saW5lIHN0b3JlcyB0aGVcbiAgICogb2JqZWN0IHJlZmVyZW5jZSksIG11dGF0aW9ucyBhZnRlciBTcGVjUmVzdEFwaSBjb25zdHJ1Y3Rpb24gc3RpbGwgdGFrZSBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSBvcGVyYXRpb25JZHMgLSBUaGUgb3BlcmF0aW9uIElEcyB0byBtYXJrIGFzIGFub255bW91cy4gUmVwbGFjZXMgYW55IHByZXZpb3VzbHkgc2V0IGFub255bW91cyBvcGVyYXRpb25zLlxuICAgKi9cbiAgcHVibGljIHNldEFub255bW91c09wZXJhdGlvbnMob3BlcmF0aW9uSWRzOiAoa2V5b2YgT1BTKVtdKSB7XG4gICAgdGhpcy5fYW5vbnltb3VzT3BlcmF0aW9ucy5jbGVhcigpO1xuICAgIGZvciAoY29uc3Qgb3BJZCBvZiBvcGVyYXRpb25JZHMpIHtcbiAgICAgIHRoaXMuX2Fub255bW91c09wZXJhdGlvbnMuYWRkKG9wSWQgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseUFub255bW91c1NlY3VyaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0byB0aGUgc2V0IG9mIGFub255bW91cyBvcGVyYXRpb25zLlxuICAgKiBOZXdseSBhZGRlZCBvcGVyYXRpb25zIHdpbGwgaGF2ZSBgc2VjdXJpdHk6IFtdYCBhcHBsaWVkIGluIHRoZSBPcGVuQVBJIHNwZWMuXG4gICAqXG4gICAqIFNpbmNlIENESyBzZXJpYWxpemVzIHRoZSBPcGVuQVBJIHNwZWMgYXQgc3ludGggdGltZSAoZnJvbUlubGluZSBzdG9yZXMgdGhlXG4gICAqIG9iamVjdCByZWZlcmVuY2UpLCBtdXRhdGlvbnMgYWZ0ZXIgU3BlY1Jlc3RBcGkgY29uc3RydWN0aW9uIHN0aWxsIHRha2UgZWZmZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uSWRzIC0gVGhlIG9wZXJhdGlvbiBJRHMgdG8gYWRkIHRvIHRoZSBhbm9ueW1vdXMgc2V0LlxuICAgKi9cbiAgcHVibGljIGFkZEFub255bW91c09wZXJhdGlvbnMob3BlcmF0aW9uSWRzOiAoa2V5b2YgT1BTKVtdKSB7XG4gICAgZm9yIChjb25zdCBvcElkIG9mIG9wZXJhdGlvbklkcykge1xuICAgICAgdGhpcy5fYW5vbnltb3VzT3BlcmF0aW9ucy5hZGQob3BJZCBhcyBzdHJpbmcpO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5QW5vbnltb3VzU2VjdXJpdHlGb3JPcHMob3BlcmF0aW9uSWRzLm1hcChvcCA9PiBvcCBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1hcHBsaWVzIHNlY3VyaXR5IHNldHRpbmdzIHRvIGFsbCBvcGVyYXRpb25zIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFub255bW91cyBzZXQuXG4gICAqIE9wZXJhdGlvbnMgaW4gdGhlIGFub255bW91cyBzZXQgZ2V0IGBzZWN1cml0eTogW11gOyBvcGVyYXRpb25zIHJlbW92ZWQgZnJvbSB0aGUgc2V0XG4gICAqIGhhdmUgdGhlaXIgb3JpZ2luYWwgc2VjdXJpdHkgcmVzdG9yZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFwcGx5QW5vbnltb3VzU2VjdXJpdHkoKSB7XG4gICAgZm9yIChjb25zdCBzcGVjUGF0aCBvZiBPYmplY3QudmFsdWVzKHRoaXMuYXBpU3BlYy5wYXRocyB8fCBbXSkpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWNQYXRoKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlNZXRob2RzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGVjTWV0aG9kID0gKHNwZWNQYXRoIGFzIFBhdGhJdGVtT2JqZWN0KVtrZXkgYXMga2V5b2YgUGF0aEl0ZW1PYmplY3RdISBhcyBPcGVyYXRpb25PYmplY3Q7XG4gICAgICAgIGlmIChzcGVjTWV0aG9kLm9wZXJhdGlvbklkICYmIHRoaXMuX2Fub255bW91c09wZXJhdGlvbnMuaGFzKHNwZWNNZXRob2Qub3BlcmF0aW9uSWQpKSB7XG4gICAgICAgICAgc3BlY01ldGhvZC5zZWN1cml0eSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHNwZWNNZXRob2Qub3BlcmF0aW9uSWQgJiYgdGhpcy5fb3JpZ2luYWxPcGVyYXRpb25TZWN1cml0eS5oYXMoc3BlY01ldGhvZC5vcGVyYXRpb25JZCkpIHtcbiAgICAgICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHNlY3VyaXR5IGZvciBvcGVyYXRpb25zIHJlbW92ZWQgZnJvbSB0aGUgYW5vbnltb3VzIHNldFxuICAgICAgICAgIHNwZWNNZXRob2Quc2VjdXJpdHkgPSB0aGlzLl9vcmlnaW5hbE9wZXJhdGlvblNlY3VyaXR5LmdldChzcGVjTWV0aG9kLm9wZXJhdGlvbklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGBzZWN1cml0eTogW11gIG9ubHkgdG8gdGhlIHNwZWNpZmllZCBvcGVyYXRpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUFub255bW91c1NlY3VyaXR5Rm9yT3BzKG9wZXJhdGlvbklkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBvcHNTZXQgPSBuZXcgU2V0KG9wZXJhdGlvbklkcyk7XG4gICAgZm9yIChjb25zdCBzcGVjUGF0aCBvZiBPYmplY3QudmFsdWVzKHRoaXMuYXBpU3BlYy5wYXRocyB8fCBbXSkpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWNQYXRoKSB7XG4gICAgICAgIGlmICghdGhpcy5hcGlNZXRob2RzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzcGVjTWV0aG9kID0gKHNwZWNQYXRoIGFzIFBhdGhJdGVtT2JqZWN0KVtrZXkgYXMga2V5b2YgUGF0aEl0ZW1PYmplY3RdISBhcyBPcGVyYXRpb25PYmplY3Q7XG4gICAgICAgIGlmIChzcGVjTWV0aG9kLm9wZXJhdGlvbklkICYmIG9wc1NldC5oYXMoc3BlY01ldGhvZC5vcGVyYXRpb25JZCkpIHtcbiAgICAgICAgICBzcGVjTWV0aG9kLnNlY3VyaXR5ID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkUmVzdFJlc291cmNlPFAgZXh0ZW5kcyBrZXlvZiBQQVRIUz4ocGF0aDogUCwgbWV0aG9kOiBrZXlvZiBQQVRIU1tQXSkge1xuICAgIGNvbnN0IG9hUGF0aCA9IHRoaXMuYXBpU3BlYy5wYXRocyFbcGF0aCBhcyBzdHJpbmddIGFzIFBhdGhJdGVtT2JqZWN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IG9hUGF0aFttZXRob2QgYXMga2V5b2YgUGF0aEl0ZW1PYmplY3RdIGFzIE9wZXJhdGlvbk9iamVjdDtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IG9wZXJhdGlvbi5vcGVyYXRpb25JZCE7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgJHttZXRob2QgYXMgc3RyaW5nfSAke3BhdGggYXMgc3RyaW5nfSAtICR7b3BlcmF0aW9uLnN1bW1hcnl9YDtcblxuICAgIGNvbnN0IGN1c3RvbUxhbWJkYU9wdGlvbnMgPSB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbiA/IHRoaXMucHJvcHMubGFtYmRhT3B0aW9uc0J5T3BlcmF0aW9uW29wZXJhdGlvbklkIGFzIGtleW9mIE9QU10gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ3VzdG9tUmVzdFJlc291cmNlKG9wZXJhdGlvbiwgbWV0aG9kIGFzIHN0cmluZywgZGVzY3JpcHRpb24sIGN1c3RvbUxhbWJkYU9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEN1c3RvbVJlc3RSZXNvdXJjZShvcGVyYXRpb246IE9wZXJhdGlvbk9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGFkZGl0aW9uYWxMYW1iZGFPcHRpb25zOiBMYW1iZGFPcHRpb25zID0ge30pIHtcbiAgICBpZiAoJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nIGluIG9wZXJhdGlvbikge1xuICAgICAgcmV0dXJuOyAvLyBTa2lwIGlmIG9wZXJhdGlvbiB3YXMgZGVjbGFyZWQgaW4gc3BlYyBmaWxlIGFscmVhZHkhXG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlGaWxlID0gYC4vc3JjL2xhbWJkYS9yZXN0LiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LiR7b3BlcmF0aW9uLm9wZXJhdGlvbklkfS50c2A7XG5cbiAgICBjb25zdCBsYW1iZGFPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zICYmIHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgfSxcbiAgICAgIC4uLmFkZGl0aW9uYWxMYW1iZGFPcHRpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGlvbiA9IHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYgKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24uaGFzT3duUHJvcGVydHkoJ3VzZXJwb29sJylcbiAgICAgID8geyB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgSUNvZ25pdG9BdXRoZW50aWNhdGlvbikudXNlcnBvb2wgfVxuICAgICAgOiB7IGp3dDogdGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBJSnd0QXV0aGVudGljYXRpb24gfSk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCBgRm4ke29wZXJhdGlvbi5vcGVyYXRpb25JZH1gLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMucHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgYWRkaXRpb25hbEVudjoge1xuICAgICAgICAuLi50aGlzLnByb3BzLmRvbWFpbk5hbWUgJiYge1xuICAgICAgICAgIERPTUFJTl9OQU1FOiB0aGlzLnByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnRoaXMucHJvcHMuYWRkaXRpb25hbEVudixcbiAgICAgIH0sXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uLFxuICAgICAgLi4udGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSAmJiB7XG4gICAgICAgIHRhYmxlOiB0aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlLnRhYmxlLFxuICAgICAgICB0YWJsZVdyaXRlczogdGhpcy50YWJsZVdyaXRlQWNjZXNzRm9yTWV0aG9kKG1ldGhvZCksXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5wcm9wcy5hc3NldENkbiAmJiB7XG4gICAgICAgIGFzc2V0RG9tYWluTmFtZTogdGhpcy5wcm9wcy5hc3NldENkbi5hc3NldERvbWFpbk5hbWUsXG4gICAgICAgIGFzc2V0QnVja2V0OiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0QnVja2V0LFxuICAgICAgfSxcbiAgICAgIGxhbWJkYU9wdGlvbnMsXG4gICAgICBsYW1iZGFUcmFjaW5nOiB0aGlzLnByb3BzLmxhbWJkYVRyYWNpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbi5vcGVyYXRpb25JZCFdID0gZm47XG4gICAgY2RrLlRhZ3Mub2YoZm4pLmFkZCgnT3BlbkFQSScsIGRlc2NyaXB0aW9uLnJlcGxhY2UoL1teXFx3XFxzXFxkXy46Lz0rXFwtQF0vZywgJycpKTtcblxuICAgIC8vIGlmICh0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFEdXJhdGlvbnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNEdXJhdGlvbigpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFJbnZva2VzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljSW52b2NhdGlvbnMoKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRXJyb3JzKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY1Rocm90dGxlcygpKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBoYXNWZXJzaW9uQ29uZmlnID0gbGFtYmRhT3B0aW9ucy5jdXJyZW50VmVyc2lvbk9wdGlvbnMgIT0gdW5kZWZpbmVkO1xuXG4gICAgb3BlcmF0aW9uWyd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJ10gPSB7XG4gICAgICB0eXBlOiAnYXdzX3Byb3h5JyxcbiAgICAgIGh0dHBNZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVyaTogY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHJlc291cmNlOiAncGF0aCcsXG4gICAgICAgIHNlcnZpY2U6ICdhcGlnYXRld2F5JyxcbiAgICAgICAgYWNjb3VudDogJ2xhbWJkYScsXG4gICAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAyMDE1LTAzLTMxL2Z1bmN0aW9ucy8keyhoYXNWZXJzaW9uQ29uZmlnID8gZm4uY3VycmVudFZlcnNpb24gOiBmbikuZnVuY3Rpb25Bcm59L2ludm9jYXRpb25zYCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXl5eXl5eXl5eXiAtIFRISVMgTkVFRFMgVE8gQkUgVEhJUyBEQVRFLiBFWEFDVExZIVxuICAgICAgfSksXG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiAnd2hlbl9ub190ZW1wbGF0ZXMnLFxuICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246ICcxLjAnLFxuICAgIH07XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBwcml2YXRlIHRhYmxlV3JpdGVBY2Nlc3NGb3JNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgY2FzZSAncG9zdCc6XG4gICAgICBjYXNlICdwdXQnOlxuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgY2FzZSAnZ2V0JzpcbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3RzIHRoZSBhdXRob3JpemVyIHNlY3VyaXR5IHNjaGVtZSBpbnRvIHRoZSBPcGVuQVBJIHNwZWMgYmFzZWQgb24gdGhlXG4gICAqIGF1dGhlbnRpY2F0aW9uIHR5cGUsIHBsYWNpbmcgaXQgd2hlcmUgQVBJIEdhdGV3YXkgZXhwZWN0cyBpdCBmb3IgdGhlIHNwZWNcbiAgICogdmVyc2lvbjogYGNvbXBvbmVudHMuc2VjdXJpdHlTY2hlbWVzYCBmb3IgT3BlbkFQSSAzLngsIG9yIHRoZSByb290XG4gICAqIGBzZWN1cml0eURlZmluaXRpb25zYCBmb3IgU3dhZ2dlciAyLjAuIEFuIGF1dGhvcml6ZXIgd3JpdHRlbiB0byB0aGUgd3JvbmdcbiAgICogbG9jYXRpb24gaXMgc2lsZW50bHkgaWdub3JlZCBvbiBpbXBvcnQsIGRlcGxveWluZyBhbiB1bmF1dGhlbnRpY2F0ZWQgQVBJLlxuICAgKlxuICAgKiBGb3IgQ29nbml0bzogYWRkcyBhIGNvZ25pdG9fdXNlcl9wb29scyBhdXRob3JpemVyIHJlZmVyZW5jaW5nIHRoZSB1c2VyIHBvb2wgQVJOLlxuICAgKiBGb3IgSldUOiBjcmVhdGVzIGEgTGFtYmRhIGF1dGhvcml6ZXIgZnVuY3Rpb24gYW5kIGFkZHMgYSB0b2tlbiBhdXRob3JpemVyIHJlZmVyZW5jaW5nIGl0cyBBUk4uXG4gICAqL1xuICBwcm90ZWN0ZWQgcGF0Y2hTZWN1cml0eVNjaGVtZXMoc3BlYzogT3BlbkFQSTMpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuYXV0aGVudGljYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWVzID0gdGhpcy5zZWN1cml0eVNjaGVtZUNvbnRhaW5lcihzcGVjKTtcblxuICAgIGlmICh0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uLmhhc093blByb3BlcnR5KCd1c2VycG9vbCcpKSB7XG4gICAgICAvLyBDb2duaXRvIFVzZXIgUG9vbCBhdXRob3JpemVyXG4gICAgICBjb25zdCBjb2duaXRvQXV0aCA9IHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgSUNvZ25pdG9BdXRoZW50aWNhdGlvbjtcbiAgICAgIGNvbnN0IGF1dGhvcml6ZXJOYW1lID0gJ0NvZ25pdG9BdXRob3JpemVyJztcblxuICAgICAgc2NoZW1lc1thdXRob3JpemVyTmFtZV0gPSB7XG4gICAgICAgICd0eXBlJzogJ2FwaUtleScsXG4gICAgICAgICduYW1lJzogJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAnaW4nOiAnaGVhZGVyJyxcbiAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktYXV0aHR5cGUnOiAnY29nbml0b191c2VyX3Bvb2xzJyxcbiAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktYXV0aG9yaXplcic6IHtcbiAgICAgICAgICB0eXBlOiAnY29nbml0b191c2VyX3Bvb2xzJyxcbiAgICAgICAgICBwcm92aWRlckFSTnM6IFtjb2duaXRvQXV0aC51c2VycG9vbC51c2VyUG9vbEFybl0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBSZXNvbHZlIGdsb2JhbCBhdXRob3JpemF0aW9uIHNjb3BlcyBmb3IgdGhlIENvZ25pdG8gYXV0aG9yaXplci5cbiAgICAgIC8vIFdoZW4gc2NvcGVzIGFyZSBwcmVzZW50LCBBUEkgR2F0ZXdheSB2YWxpZGF0ZXMgdGhlIGFjY2VzcyB0b2tlbiBhbmQgY2hlY2tzXG4gICAgICAvLyB0aGUgdG9rZW4gY29udGFpbnMgYXQgbGVhc3Qgb25lIG9mIHRoZSBsaXN0ZWQgc2NvcGVzLiBBbiBlbXB0eSBhcnJheSBtZWFuc1xuICAgICAgLy8gbm8gc2NvcGVzIGFyZSByZXF1aXJlZCBhbmQgQVBJIEdhdGV3YXkgdmFsaWRhdGVzIHRoZSBJRCB0b2tlbiBpbnN0ZWFkLlxuICAgICAgY29uc3QgZ2xvYmFsU2NvcGVzID0gdGhpcy5wcm9wcy5hdXRob3JpemF0aW9uU2NvcGVzID8/IFsnb3BlbmlkJ107XG5cbiAgICAgIC8vIEVuc3VyZSBnbG9iYWwgc2VjdXJpdHkgcmVmZXJlbmNlcyB0aGUgYXV0aG9yaXplciBzbyBwYXRjaFNlY3VyaXR5IGRpc3RyaWJ1dGVzIGl0XG4gICAgICBpZiAoIXNwZWMuc2VjdXJpdHkpIHtcbiAgICAgICAgc3BlYy5zZWN1cml0eSA9IFt7IFthdXRob3JpemVyTmFtZV06IGdsb2JhbFNjb3BlcyB9XTtcbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsU2NvcGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gVGhlIHNwZWMgYWxyZWFkeSBoYXMgZ2xvYmFsIHNlY3VyaXR5IGRlZmluZWQg4oCUIHBhdGNoIHRoZSBhdXRob3JpemVyJ3Mgc2NvcGVzXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGNvbmZpZ3VyZWQgc2NvcGVzIGFyZSBkaXN0cmlidXRlZCB0byBhbGwgb3BlcmF0aW9ucy5cbiAgICAgICAgZm9yIChjb25zdCByZXF1aXJlbWVudCBvZiBzcGVjLnNlY3VyaXR5IGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj4pIHtcbiAgICAgICAgICBpZiAoYXV0aG9yaXplck5hbWUgaW4gcmVxdWlyZW1lbnQpIHtcbiAgICAgICAgICAgIHJlcXVpcmVtZW50W2F1dGhvcml6ZXJOYW1lXSA9IGdsb2JhbFNjb3BlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSldUIChMYW1iZGEpIGF1dGhvcml6ZXJcbiAgICAgIGNvbnN0IGp3dEF1dGggPSB0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIElKd3RBdXRoZW50aWNhdGlvbjtcbiAgICAgIGNvbnN0IGF1dGhvcml6ZXJOYW1lID0gJ0p3dEF1dGhvcml6ZXInO1xuXG4gICAgICBjb25zdCBhdXRob3JpemVyRm4gPSBuZXcgTGFtYmRhRnVuY3Rpb24odGhpcywgJ0p3dEF1dGhvcml6ZXJGbicsIHtcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLnByb3BzLnN0YWdlTmFtZSxcbiAgICAgICAgZW50cnk6ICdzcmMvbGFtYmRhL3Jlc3QtYXBpLmp3dC1hdXRob3JpemVyLnRzJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dIEpXVCBBdXRob3JpemVyIGZvciAke3RoaXMucHJvcHMuYXBpTmFtZX1gLFxuICAgICAgICBqd3Q6IGp3dEF1dGgsXG4gICAgICAgIGxhbWJkYU9wdGlvbnM6IHRoaXMucHJvcHMubGFtYmRhT3B0aW9ucyxcbiAgICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGF1dGhvcml6ZXJVcmkgPSBjZGsuU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgcmVzb3VyY2U6ICdwYXRoJyxcbiAgICAgICAgc2VydmljZTogJ2FwaWdhdGV3YXknLFxuICAgICAgICBhY2NvdW50OiAnbGFtYmRhJyxcbiAgICAgICAgYXJuRm9ybWF0OiBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogYDIwMTUtMDMtMzEvZnVuY3Rpb25zLyR7YXV0aG9yaXplckZuLmZ1bmN0aW9uQXJufS9pbnZvY2F0aW9uc2AsXG4gICAgICB9KTtcblxuICAgICAgc2NoZW1lc1thdXRob3JpemVyTmFtZV0gPSB7XG4gICAgICAgICd0eXBlJzogJ2FwaUtleScsXG4gICAgICAgICduYW1lJzogJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAnaW4nOiAnaGVhZGVyJyxcbiAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktYXV0aHR5cGUnOiAnY3VzdG9tJyxcbiAgICAgICAgJ3gtYW1hem9uLWFwaWdhdGV3YXktYXV0aG9yaXplcic6IHtcbiAgICAgICAgICB0eXBlOiB0aGlzLnByb3BzLmp3dEF1dGhvcml6ZXJUeXBlID09PSAncmVxdWVzdCcgPyAncmVxdWVzdCcgOiAndG9rZW4nLFxuICAgICAgICAgIGF1dGhvcml6ZXJVcmk6IGF1dGhvcml6ZXJVcmksXG4gICAgICAgICAgYXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kczogdGhpcy5wcm9wcy5qd3RBdXRob3JpemVyVHlwZSA9PT0gJ3JlcXVlc3QnID8gMCA6IDMwMCxcbiAgICAgICAgICAuLi4odGhpcy5wcm9wcy5qd3RBdXRob3JpemVyVHlwZSAhPT0gJ3JlcXVlc3QnICYmIHtcbiAgICAgICAgICAgIGlkZW50aXR5U291cmNlOiAnbWV0aG9kLnJlcXVlc3QuaGVhZGVyLkF1dGhvcml6YXRpb24nLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGF1dGhvcml6ZXIgZnVuY3Rpb24gc28gd2UgY2FuIGdyYW50IHBlcm1pc3Npb24gYWZ0ZXIgdGhlIFNwZWNSZXN0QXBpIGlzIGNyZWF0ZWRcbiAgICAgIHRoaXMuX2F1dGhvcml6ZXJGbiA9IGF1dGhvcml6ZXJGbjtcblxuICAgICAgLy8gRW5zdXJlIGdsb2JhbCBzZWN1cml0eSByZWZlcmVuY2VzIHRoZSBhdXRob3JpemVyIHNvIHBhdGNoU2VjdXJpdHkgZGlzdHJpYnV0ZXMgaXRcbiAgICAgIGlmICghc3BlYy5zZWN1cml0eSkge1xuICAgICAgICBzcGVjLnNlY3VyaXR5ID0gW3sgW2F1dGhvcml6ZXJOYW1lXTogW10gfV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIE1DUCBhdXRoIGNvbnN0cnVjdCBpZiBtY3BBdXRoIHdhcyBjb25maWd1cmVkLlxuICAgKiBVc2VmdWwgZm9yIGFjY2Vzc2luZyB0aGUgY3JlYXRlZCBMYW1iZGEgZnVuY3Rpb25zIG9yIGVudiB2YXJzLlxuICAgKi9cbiAgcHVibGljIGdldE1jcEF1dGgoKTogTWNwQXV0aCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX21jcEF1dGg7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgTWNwQXV0aCBjb25zdHJ1Y3QgZnJvbSB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICogRGVyaXZlcyBhcGlEb21haW4gZnJvbSB0aGUgUmVzdEFwaSdzIG93biBkb21haW4gY29uZmlnLlxuICAgKiBGb3IgQ29nbml0bywgY3JlYXRlcyBhIHVzZXIgcG9vbCBjbGllbnQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlTWNwQXV0aChvcHRpb25zOiBNY3BBdXRoT3B0aW9ucyk6IE1jcEF1dGgge1xuICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuYXBpRlFETjtcbiAgICBpZiAoIWFwaURvbWFpbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtY3BBdXRoIHJlcXVpcmVzIGEgZG9tYWluIG5hbWUgdG8gYmUgY29uZmlndXJlZCBvbiB0aGUgUmVzdEFwaSAoZG9tYWluTmFtZSBvciBob3N0ZWRab25lICsgYXBpSG9zdG5hbWUpJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY29nbml0byAmJiBvcHRpb25zLmdlbmVyaWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWNwQXV0aDogcHJvdmlkZSBlaXRoZXIgY29nbml0byBvciBnZW5lcmljLCBub3QgYm90aCcpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuY29nbml0byAmJiAhb3B0aW9ucy5nZW5lcmljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21jcEF1dGg6IHByb3ZpZGUgZWl0aGVyIGNvZ25pdG8gb3IgZ2VuZXJpYyBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWxsb3dlZFJlZGlyZWN0VXJpcyA9IG9wdGlvbnMuYWxsb3dlZFJlZGlyZWN0VXJpcyA/PyBbXG4gICAgICAnaHR0cHM6Ly9jbGF1ZGUuYWkvb2F1dGgvY2FsbGJhY2snLFxuICAgICAgJ2h0dHBzOi8vY2xhdWRlLmFpL2FwaS9tY3AvYXV0aF9jYWxsYmFjaycsXG4gICAgICAnaHR0cHM6Ly9jaGF0Z3B0LmNvbS9vYXV0aC9jYWxsYmFjaycsXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zLmNvZ25pdG8pIHtcbiAgICAgIGNvbnN0IGNvZ25pdG9PcHRzID0gb3B0aW9ucy5jb2duaXRvO1xuXG4gICAgICAvLyBEZWxlZ2F0ZSB0byBNY3BDb2duaXRvQXV0aCB3aGljaCBoYW5kbGVzIHVzZXIgcG9vbCBjbGllbnQgY3JlYXRpb25cbiAgICAgIGNvbnN0IG1jcENvZ25pdG8gPSBuZXcgTWNwQ29nbml0b0F1dGgodGhpcywgJ01jcENvZ25pdG9BdXRoJywge1xuICAgICAgICBhdXRoOiBjb2duaXRvT3B0cy5hdXRoLFxuICAgICAgICBhcGlEb21haW4sXG4gICAgICAgIGF1dGhEb21haW46IGNvZ25pdG9PcHRzLmF1dGhEb21haW4sXG4gICAgICAgIGFsbG93ZWRSZWRpcmVjdFVyaXMsXG4gICAgICAgIHNlcnZlckluZm86IG9wdGlvbnMuc2VydmVySW5mbyxcbiAgICAgICAgcHJvdG9jb2xWZXJzaW9uczogb3B0aW9ucy5wcm90b2NvbFZlcnNpb25zLFxuICAgICAgICBzY29wZXM6IG9wdGlvbnMuc2NvcGVzLFxuICAgICAgICBsYW1iZGFPcHRpb25zOiBvcHRpb25zLmxhbWJkYU9wdGlvbnMsXG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICAgIGNsaWVudENvbnN0cnVjdElkOiBjb2duaXRvT3B0cy5jbGllbnRDb25zdHJ1Y3RJZCxcbiAgICAgICAgYWRkaXRpb25hbENhbGxiYWNrVXJsczogY29nbml0b09wdHMuYWRkaXRpb25hbENhbGxiYWNrVXJscyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbWNwQ29nbml0by5tY3BBdXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBnZW5lcmljT3B0cyA9IG9wdGlvbnMuZ2VuZXJpYyE7XG5cbiAgICAgIHJldHVybiBuZXcgTWNwQXV0aCh0aGlzLCAnTWNwQXV0aCcsIHtcbiAgICAgICAgYXBpRG9tYWluLFxuICAgICAgICBhdXRob3JpemVFbmRwb2ludDogZ2VuZXJpY09wdHMuYXV0aG9yaXplRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IGdlbmVyaWNPcHRzLnRva2VuRW5kcG9pbnQsXG4gICAgICAgIGFsbG93ZWRSZWRpcmVjdFVyaXMsXG4gICAgICAgIGNsaWVudElkOiBnZW5lcmljT3B0cy5jbGllbnRJZCxcbiAgICAgICAgc2VydmVySW5mbzogb3B0aW9ucy5zZXJ2ZXJJbmZvLFxuICAgICAgICBwcm90b2NvbFZlcnNpb25zOiBvcHRpb25zLnByb3RvY29sVmVyc2lvbnMsXG4gICAgICAgIHNjb3Blczogb3B0aW9ucy5zY29wZXMsXG4gICAgICAgIHN0cmlwUGFyYW1ldGVyczogb3B0aW9ucy5zdHJpcFBhcmFtZXRlcnMsXG4gICAgICAgIGxhbWJkYU9wdGlvbnM6IG9wdGlvbnMubGFtYmRhT3B0aW9ucyxcbiAgICAgICAgc3RhZ2VOYW1lOiB0aGlzLnByb3BzLnN0YWdlTmFtZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3RzIE1DUCBPQXV0aCBwYXRocyBpbnRvIHRoZSBPcGVuQVBJIHNwZWMgd2l0aCBMYW1iZGEgcHJveHkgaW50ZWdyYXRpb25zXG4gICAqIHBvaW50aW5nIHRvIHRoZSBNQ1AgYXV0aCBjb25zdHJ1Y3QncyBmdW5jdGlvbnMuIEFsbCBwYXRocyBhcmUgYW5vbnltb3VzIChzZWN1cml0eTogW10pLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmplY3RNY3BBdXRoUGF0aHMobWNwQXV0aDogTWNwQXV0aCkge1xuICAgIGNvbnN0IGZucyA9IG1jcEF1dGguZnVuY3Rpb25zO1xuXG4gICAgY29uc3QgbWNwUGF0aHM6IFJlY29yZDxzdHJpbmcsIHsgZm46IExhbWJkYUZ1bmN0aW9uOyBtZXRob2Q6IHN0cmluZzsgb3BlcmF0aW9uSWQ6IHN0cmluZzsgc3VtbWFyeTogc3RyaW5nIH0+ID0ge1xuICAgICAgJy8ud2VsbC1rbm93bi9vYXV0aC1wcm90ZWN0ZWQtcmVzb3VyY2UnOiB7XG4gICAgICAgIGZuOiBmbnMucHJvdGVjdGVkUmVzb3VyY2UsXG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgIG9wZXJhdGlvbklkOiAnbWNwT0F1dGhQcm90ZWN0ZWRSZXNvdXJjZScsXG4gICAgICAgIHN1bW1hcnk6ICdPQXV0aCBQcm90ZWN0ZWQgUmVzb3VyY2UgTWV0YWRhdGEgKFJGQyA5NzI4KScsXG4gICAgICB9LFxuICAgICAgJy8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlcic6IHtcbiAgICAgICAgZm46IGZucy5hdXRob3JpemF0aW9uU2VydmVyLFxuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICBvcGVyYXRpb25JZDogJ21jcE9BdXRoQXV0aG9yaXphdGlvblNlcnZlcicsXG4gICAgICAgIHN1bW1hcnk6ICdPQXV0aCBBdXRob3JpemF0aW9uIFNlcnZlciBNZXRhZGF0YSAoUkZDIDg0MTQpJyxcbiAgICAgIH0sXG4gICAgICAnL29hdXRoL2F1dGhvcml6ZSc6IHtcbiAgICAgICAgZm46IGZucy5hdXRob3JpemUsXG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgIG9wZXJhdGlvbklkOiAnbWNwT0F1dGhBdXRob3JpemUnLFxuICAgICAgICBzdW1tYXJ5OiAnT0F1dGggQXV0aG9yaXplIFByb3h5JyxcbiAgICAgIH0sXG4gICAgICAnL29hdXRoL3Rva2VuJzoge1xuICAgICAgICBmbjogZm5zLnRva2VuLFxuICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgb3BlcmF0aW9uSWQ6ICdtY3BPQXV0aFRva2VuJyxcbiAgICAgICAgc3VtbWFyeTogJ09BdXRoIFRva2VuIFByb3h5JyxcbiAgICAgIH0sXG4gICAgICAnL29hdXRoL3JlZ2lzdGVyJzoge1xuICAgICAgICBmbjogZm5zLnJlZ2lzdGVyLFxuICAgICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgICAgb3BlcmF0aW9uSWQ6ICdtY3BPQXV0aFJlZ2lzdGVyJyxcbiAgICAgICAgc3VtbWFyeTogJ09BdXRoIER5bmFtaWMgQ2xpZW50IFJlZ2lzdHJhdGlvbiAoUkZDIDc1OTEpJyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgW3BhdGgsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMobWNwUGF0aHMpKSB7XG4gICAgICBpZiAoIXRoaXMuYXBpU3BlYy5wYXRocykge1xuICAgICAgICB0aGlzLmFwaVNwZWMucGF0aHMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3BlcmF0aW9uOiBhbnkgPSB7XG4gICAgICAgICdzdW1tYXJ5JzogY29uZmlnLnN1bW1hcnksXG4gICAgICAgICdvcGVyYXRpb25JZCc6IGNvbmZpZy5vcGVyYXRpb25JZCxcbiAgICAgICAgJ3NlY3VyaXR5JzogW10sIC8vIEFub255bW91cyDigJQgbm8gYXV0aG9yaXplclxuICAgICAgICAncmVzcG9uc2VzJzoge1xuICAgICAgICAgIDIwMDogeyBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3MnIH0sXG4gICAgICAgICAgMzAyOiB7IGRlc2NyaXB0aW9uOiAnUmVkaXJlY3QnIH0sXG4gICAgICAgIH0sXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJzoge1xuICAgICAgICAgIHR5cGU6ICdhd3NfcHJveHknLFxuICAgICAgICAgIGh0dHBNZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICB1cmk6IGNkay5TdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgcmVzb3VyY2U6ICdwYXRoJyxcbiAgICAgICAgICAgIHNlcnZpY2U6ICdhcGlnYXRld2F5JyxcbiAgICAgICAgICAgIGFjY291bnQ6ICdsYW1iZGEnLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IGAyMDE1LTAzLTMxL2Z1bmN0aW9ucy8ke2NvbmZpZy5mbi5mdW5jdGlvbkFybn0vaW52b2NhdGlvbnNgLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHBhc3N0aHJvdWdoQmVoYXZpb3I6ICd3aGVuX25vX3RlbXBsYXRlcycsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246ICcxLjAnLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLmFwaVNwZWMucGF0aHNbcGF0aF0pIHtcbiAgICAgICAgdGhpcy5hcGlTcGVjLnBhdGhzW3BhdGhdID0ge307XG4gICAgICB9XG5cbiAgICAgICh0aGlzLmFwaVNwZWMucGF0aHNbcGF0aF0gYXMgYW55KVtjb25maWcubWV0aG9kXSA9IG9wZXJhdGlvbjtcblxuICAgICAgLy8gTWFyayBhcyBhbm9ueW1vdXMgc28gcGF0Y2hTZWN1cml0eSBkb2Vzbid0IG92ZXJyaWRlIGl0XG4gICAgICB0aGlzLl9hbm9ueW1vdXNPcGVyYXRpb25zLmFkZChjb25maWcub3BlcmF0aW9uSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZWN1cml0eS1zY2hlbWUgY29udGFpbmVyIGZvciB0aGUgc3BlYywgY3JlYXRpbmcgaXQgaWYgbmVlZGVkLlxuICAgKiBPcGVuQVBJIDMueCBzdG9yZXMgc2NoZW1lcyB1bmRlciBgY29tcG9uZW50cy5zZWN1cml0eVNjaGVtZXNgOyBTd2FnZ2VyIDIuMFxuICAgKiB1c2VzIHRoZSByb290IGBzZWN1cml0eURlZmluaXRpb25zYC4gQVBJIEdhdGV3YXkgcmVhZHMgb25seSB0aGUgbG9jYXRpb24gdGhhdFxuICAgKiBtYXRjaGVzIHRoZSBkb2N1bWVudCdzIGRlY2xhcmVkIHZlcnNpb24sIHNvIHRoZSBhdXRob3JpemVyIG11c3QgZ28gdGhlcmUuXG4gICAqL1xuICBwcml2YXRlIHNlY3VyaXR5U2NoZW1lQ29udGFpbmVyKHNwZWM6IE9wZW5BUEkzKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IHNwZWNBbnkgPSBzcGVjIGFzIGFueTtcbiAgICBjb25zdCBpc09wZW5BcGlWMyA9IHR5cGVvZiBzcGVjQW55Lm9wZW5hcGkgPT09ICdzdHJpbmcnICYmIHNwZWNBbnkub3BlbmFwaS5zdGFydHNXaXRoKCczJyk7XG4gICAgaWYgKGlzT3BlbkFwaVYzKSB7XG4gICAgICBzcGVjQW55LmNvbXBvbmVudHMgPSBzcGVjQW55LmNvbXBvbmVudHMgPz8ge307XG4gICAgICBzcGVjQW55LmNvbXBvbmVudHMuc2VjdXJpdHlTY2hlbWVzID0gc3BlY0FueS5jb21wb25lbnRzLnNlY3VyaXR5U2NoZW1lcyA/PyB7fTtcbiAgICAgIHJldHVybiBzcGVjQW55LmNvbXBvbmVudHMuc2VjdXJpdHlTY2hlbWVzO1xuICAgIH1cbiAgICBzcGVjQW55LnNlY3VyaXR5RGVmaW5pdGlvbnMgPSBzcGVjQW55LnNlY3VyaXR5RGVmaW5pdGlvbnMgPz8ge307XG4gICAgcmV0dXJuIHNwZWNBbnkuc2VjdXJpdHlEZWZpbml0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBV1MgZG9lcyBub3QgcHJvcGVybHkgYXBwbHkgdGhlICdzZWN1cml0eScgb3B0aW9uIHRvIGV2ZXJ5IHNpbmdsZSBwYXRoLW1ldGhvZC5cbiAgICogQWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24sIGdsb2JhbCBzZWN1cml0eSBnZXRzIGFwcGxpZWQsIGlmIHRoZXJlIGlzIG5vIHNlY3VyaXR5XG4gICAqIHNldCBmb3IgdGhlIHBhcnRpY3VsYXIgcGF0aC1tZXRob2QuIElmIHRoZXJlIGlzIGFueSwgZXZlbiBlbXB0eSwgaXQgd2lsbCBnZXQgcHJlY2VkZW5jZS5cbiAgICogVEhJUyBET0VTIE5PVCBIQVBQRU4gT04gQVdTLiBJVCBKVVNUIEFMV0FZUyBVU0VTIFRIRSBHTE9CQUwgU0VUVElORyFcbiAgICpcbiAgICogJ3NlY3VyaXR5IGFwcGxpZXMgWy4uLl0gc2NoZW1lcyBnbG9iYWxseSB0byBhbGwgQVBJIG9wZXJhdGlvbnMsIHVubGVzcyBvdmVycmlkZGVuIG9uIHRoZSBvcGVyYXRpb24gbGV2ZWwnXG4gICAqIEBzZWUgaHR0cHM6Ly9zd2FnZ2VyLmlvL2RvY3Mvc3BlY2lmaWNhdGlvbi9hdXRoZW50aWNhdGlvbi9cbiAgICovXG4gIHByb3RlY3RlZCBwYXRjaFNlY3VyaXR5KHNwZWM6IE9wZW5BUEkzKSB7XG4gICAgaWYgKCdzZWN1cml0eScgaW4gc3BlYykge1xuICAgICAgLy8gUmVzb2x2ZSBwZXItb3BlcmF0aW9uIHNjb3BlIG92ZXJyaWRlcyBmcm9tIHRoZSBkZWRpY2F0ZWQgcHJvcC5cbiAgICAgIGNvbnN0IHBlck9wZXJhdGlvblNjb3BlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgdGhpcy5wcm9wcy5hdXRob3JpemF0aW9uU2NvcGVzQnlPcGVyYXRpb25cbiAgICAgICAgICA/IHRoaXMucHJvcHMuYXV0aG9yaXphdGlvblNjb3Blc0J5T3BlcmF0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBmb3IgKGNvbnN0IHNwZWNQYXRoIG9mIE9iamVjdC52YWx1ZXMoc3BlYy5wYXRocyB8fCBbXSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlY1BhdGgpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuYXBpTWV0aG9kcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBpZiBub3QgaHR0cCBtZXRob2QgZGVmaW5pdGlvblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNwZWNNZXRob2QgPSAoc3BlY1BhdGggYXMgUGF0aEl0ZW1PYmplY3QpW2tleSBhcyBrZXlvZiBQYXRoSXRlbU9iamVjdF0hO1xuICAgICAgICAgIGlmICghKCdzZWN1cml0eScgaW4gc3BlY01ldGhvZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbklkID0gKHNwZWNNZXRob2QgYXMgT3BlcmF0aW9uT2JqZWN0KS5vcGVyYXRpb25JZDtcbiAgICAgICAgICAgIGlmIChvcGVyYXRpb25JZCAmJiB0aGlzLl9hbm9ueW1vdXNPcGVyYXRpb25zLmhhcyhvcGVyYXRpb25JZCkpIHtcbiAgICAgICAgICAgICAgLy8gU3RvcmUgd2hhdCBzZWN1cml0eSB3b3VsZCBoYXZlIGJlZW4gYXBwbGllZCBzbyB3ZSBjYW4gcmVzdG9yZSBsYXRlclxuICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE9wZXJhdGlvblNlY3VyaXR5LnNldChvcGVyYXRpb25JZCwgc3BlYy5zZWN1cml0eSBhcyBhbnlbXSk7XG4gICAgICAgICAgICAgIHNwZWNNZXRob2Quc2VjdXJpdHkgPSBbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFwcGx5IHBlci1vcGVyYXRpb24gc2NvcGUgb3ZlcnJpZGUgaWYgY29uZmlndXJlZFxuICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb25TZWN1cml0eSA9IHRoaXMuYXBwbHlPcGVyYXRpb25TY29wZXMoXG4gICAgICAgICAgICAgICAgc3BlYy5zZWN1cml0eSBhcyBhbnlbXSxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25JZCxcbiAgICAgICAgICAgICAgICBwZXJPcGVyYXRpb25TY29wZXMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHNwZWNNZXRob2Quc2VjdXJpdHkgPSBvcGVyYXRpb25TZWN1cml0eTtcbiAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxPcGVyYXRpb25TZWN1cml0eS5zZXQob3BlcmF0aW9uSWQsIG9wZXJhdGlvblNlY3VyaXR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBPcGVyYXRpb24gYWxyZWFkeSBoYXMgZXhwbGljaXQgc2VjdXJpdHkgZGVmaW5lZCBpbiB0aGUgc3BlY1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uSWQgPSAoc3BlY01ldGhvZCBhcyBPcGVyYXRpb25PYmplY3QpLm9wZXJhdGlvbklkO1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbklkKSB7XG4gICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsT3BlcmF0aW9uU2VjdXJpdHkuc2V0KG9wZXJhdGlvbklkLCBzcGVjTWV0aG9kLnNlY3VyaXR5IGFzIGFueVtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBzcGVjLnNlY3VyaXR5O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHBlci1vcGVyYXRpb24gc2NvcGUgb3ZlcnJpZGVzIHRvIGEgc2VjdXJpdHkgcmVxdWlyZW1lbnQgYXJyYXkuXG4gICAqIElmIHRoZSBvcGVyYXRpb24gaGFzIGEgc3BlY2lmaWMgc2NvcGUgb3ZlcnJpZGUgaW4gdGhlIG1hcCwgdGhlIGF1dGhvcml6ZXInc1xuICAgKiBzY29wZSBsaXN0IGlzIHJlcGxhY2VkIHdpdGggdGhlIG92ZXJyaWRlLiBPdGhlcndpc2UgdGhlIGdsb2JhbCBzZWN1cml0eSBpcyB1c2VkIGFzLWlzLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdGlvblNjb3BlcyhcbiAgICBnbG9iYWxTZWN1cml0eTogYW55W10sXG4gICAgb3BlcmF0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwZXJPcGVyYXRpb25TY29wZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB8IHVuZGVmaW5lZCxcbiAgKTogYW55W10ge1xuICAgIGlmICghb3BlcmF0aW9uSWQgfHwgIXBlck9wZXJhdGlvblNjb3BlcyB8fCAhKG9wZXJhdGlvbklkIGluIHBlck9wZXJhdGlvblNjb3BlcykpIHtcbiAgICAgIHJldHVybiBnbG9iYWxTZWN1cml0eTtcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZXMgPSBwZXJPcGVyYXRpb25TY29wZXNbb3BlcmF0aW9uSWRdO1xuICAgIC8vIENsb25lIHRoZSBnbG9iYWwgc2VjdXJpdHkgYW5kIHJlcGxhY2UgdGhlIGF1dGhvcml6ZXIgc2NvcGVzXG4gICAgcmV0dXJuIGdsb2JhbFNlY3VyaXR5Lm1hcCgocmVxdWlyZW1lbnQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPikgPT4ge1xuICAgICAgY29uc3QgcGF0Y2hlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFthdXRoTmFtZSwgX2F1dGhTY29wZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJlcXVpcmVtZW50KSkge1xuICAgICAgICBwYXRjaGVkW2F1dGhOYW1lXSA9IHNjb3BlcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRjaGVkO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -7,3 +7,15 @@ export interface McpServerHandle {
|
|
|
7
7
|
* advertises tools, and dispatches tool invocations.
|
|
8
8
|
*/
|
|
9
9
|
export declare function createMcpServer<TPrincipal>(options: McpServerOptions<TPrincipal>): McpServerHandle;
|
|
10
|
+
/**
|
|
11
|
+
* Selects the protocol version to use for the handshake.
|
|
12
|
+
*
|
|
13
|
+
* Returns the requested version when supported. Otherwise returns the highest
|
|
14
|
+
* supported version that is not newer than the requested one (downward
|
|
15
|
+
* negotiation). Returns undefined when every supported version is newer than
|
|
16
|
+
* the requested one, i.e. no safe downgrade exists.
|
|
17
|
+
*
|
|
18
|
+
* MCP protocol versions are ISO-like `YYYY-MM-DD` strings, so lexicographic
|
|
19
|
+
* comparison matches chronological order.
|
|
20
|
+
*/
|
|
21
|
+
export declare function negotiateProtocolVersion(requested: string, supported: string[]): string | undefined;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMcpServer = createMcpServer;
|
|
4
|
+
exports.negotiateProtocolVersion = negotiateProtocolVersion;
|
|
4
5
|
const errors_1 = require("./errors");
|
|
5
6
|
const jsonrpc_1 = require("./jsonrpc");
|
|
6
7
|
/**
|
|
@@ -55,11 +56,21 @@ function createMcpServer(options) {
|
|
|
55
56
|
}
|
|
56
57
|
function handleInitialize(id, params) {
|
|
57
58
|
const clientVersion = params?.protocolVersion;
|
|
58
|
-
if (!clientVersion
|
|
59
|
+
if (!clientVersion) {
|
|
60
|
+
return jsonResponse(200, (0, jsonrpc_1.jsonRpcError)(id, jsonrpc_1.INVALID_PARAMS, `Unsupported protocol version. Supported: ${options.protocolVersions.join(', ')}`));
|
|
61
|
+
}
|
|
62
|
+
// Per the MCP lifecycle spec: echo the requested version when we support it,
|
|
63
|
+
// otherwise negotiate to a version we do support. We negotiate *downwards* —
|
|
64
|
+
// the highest supported version that is not newer than the one requested —
|
|
65
|
+
// because clients (e.g. @modelcontextprotocol/sdk <= 1.16.0) reject any
|
|
66
|
+
// negotiated version outside their own accepted set. Answering with a newer
|
|
67
|
+
// version than the client asked for would fail the handshake.
|
|
68
|
+
const negotiatedVersion = negotiateProtocolVersion(clientVersion, options.protocolVersions);
|
|
69
|
+
if (!negotiatedVersion) {
|
|
59
70
|
return jsonResponse(200, (0, jsonrpc_1.jsonRpcError)(id, jsonrpc_1.INVALID_PARAMS, `Unsupported protocol version. Supported: ${options.protocolVersions.join(', ')}`));
|
|
60
71
|
}
|
|
61
72
|
return jsonResponse(200, (0, jsonrpc_1.jsonRpcSuccess)(id, {
|
|
62
|
-
protocolVersion:
|
|
73
|
+
protocolVersion: negotiatedVersion,
|
|
63
74
|
capabilities: { tools: {} },
|
|
64
75
|
serverInfo: options.serverInfo,
|
|
65
76
|
}));
|
|
@@ -104,4 +115,24 @@ function createMcpServer(options) {
|
|
|
104
115
|
};
|
|
105
116
|
}
|
|
106
117
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC1hdXRoL21jcC9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSwwQ0E2R0M7QUF6SEQscUNBQWdEO0FBQ2hELHVDQUFnSTtBQU9oSTs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQWEsT0FBcUM7SUFDL0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBRWxCLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYSxFQUFFLE9BQTJDO1FBQzlFLHlCQUF5QjtRQUN6QixJQUFJLFNBQXFCLENBQUM7UUFDMUIsSUFBSSxDQUFDO1lBQ0gsU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLEdBQUcsWUFBWSw2QkFBb0IsRUFBRSxDQUFDO2dCQUN4QyxPQUFPO29CQUNMLFVBQVUsRUFBRSxHQUFHO29CQUNmLE9BQU8sRUFBRTt3QkFDUCxjQUFjLEVBQUUsa0JBQWtCO3dCQUNsQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsU0FBUztxQkFDbEM7b0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUM3QyxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksQ0FBQztZQUNILE9BQU8sR0FBRyxJQUFBLDZCQUFtQixFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxHQUFJLEdBQXlCLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3ZELE1B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L0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzNCLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1jcFVuYXV0aG9yaXplZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsganNvblJwY0Vycm9yLCBqc29uUnBjU3VjY2VzcywgSU5URVJOQUxfRVJST1IsIElOVkFMSURfUEFSQU1TLCBNRVRIT0RfTk9UX0ZPVU5ELCBwYXJzZUpzb25ScGNSZXF1ZXN0IH0gZnJvbSAnLi9qc29ucnBjJztcbmltcG9ydCB0eXBlIHsgTWNwUmVzcG9uc2UsIE1jcFNlcnZlck9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBNY3BTZXJ2ZXJIYW5kbGUge1xuICBoYW5kbGUoYm9keTogdW5rbm93biwgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPik6IFByb21pc2U8TWNwUmVzcG9uc2U+O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gTUNQIEpTT04tUlBDIHNlcnZlciB0aGF0IGF1dGhlbnRpY2F0ZXMgY2FsbGVycyxcbiAqIGFkdmVydGlzZXMgdG9vbHMsIGFuZCBkaXNwYXRjaGVzIHRvb2wgaW52b2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNY3BTZXJ2ZXI8VFByaW5jaXBhbD4ob3B0aW9uczogTWNwU2VydmVyT3B0aW9uczxUUHJpbmNpcGFsPik6IE1jcFNlcnZlckhhbmRsZSB7XG4gIHJldHVybiB7IGhhbmRsZSB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZShib2R5OiB1bmtub3duLCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KTogUHJvbWlzZTxNY3BSZXNwb25zZT4ge1xuICAgIC8vIDEuIFJlc29sdmUgY3JlZGVudGlhbHNcbiAgICBsZXQgcHJpbmNpcGFsOiBUUHJpbmNpcGFsO1xuICAgIHRyeSB7XG4gICAgICBwcmluY2lwYWwgPSBhd2FpdCBvcHRpb25zLnJlc29sdmVyLnJlc29sdmUoaGVhZGVycyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTWNwVW5hdXRob3JpemVkRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXNDb2RlOiA0MDEsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdXV1ctQXV0aGVudGljYXRlJzogZXJyLmNoYWxsZW5nZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIDIuIFBhcnNlIEpTT04tUlBDIHJlcXVlc3RcbiAgICBsZXQgcmVxdWVzdDtcbiAgICB0cnkge1xuICAgICAgcmVxdWVzdCA9IHBhcnNlSnNvblJwY1JlcXVlc3QoYm9keSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVyciBhcyB7IGNvZGU/OiBudW1iZXIgfSkuY29kZSA/PyAtMzI2MDA7XG4gICAgICBjb25zdCBtZXNzYWdlID0gKGVyciBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfSkubWVzc2FnZSA/PyAnSW52YWxpZCByZXF1ZXN0JztcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2UoMjAwLCBqc29uUnBjRXJyb3IobnVsbCwgY29kZSwgbWVzc2FnZSkpO1xuICAgIH1cblxuICAgIC8vIDMuIERpc3BhdGNoIG9uIG1ldGhvZFxuICAgIGNvbnN0IHsgaWQsIG1ldGhvZCwgcGFyYW1zIH0gPSByZXF1ZXN0O1xuXG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ2luaXRpYWxpemUnOlxuICAgICAgICByZXR1cm4gaGFuZGxlSW5pdGlhbGl6ZShpZCwgcGFyYW1zKTtcbiAgICAgIGNhc2UgJ25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQnOlxuICAgICAgICByZXR1cm4geyBzdGF0dXNDb2RlOiAyMDIsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiAnJyB9O1xuICAgICAgY2FzZSAndG9vbHMvbGlzdCc6XG4gICAgICAgIHJldHVybiBoYW5kbGVUb29sc0xpc3QoaWQsIHByaW5jaXBhbCk7XG4gICAgICBjYXNlICd0b29scy9jYWxsJzpcbiAgICAgICAgcmV0dXJuIGhhbmRsZVRvb2xzQ2FsbChpZCwgcHJpbmNpcGFsLCBwYXJhbXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGpzb25SZXNwb25zZSgyMDAsIGpzb25ScGNFcnJvcihpZCwgTUVUSE9EX05PVF9GT1VORCwgYE1ldGhvZCBub3QgZm91bmQ6ICR7bWV0aG9kfWApKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbml0aWFsaXplKGlkOiB1bmtub3duLCBwYXJhbXM6IHVua25vd24pOiBNY3BSZXNwb25zZSB7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpPy5wcm90b2NvbFZlcnNpb24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFjbGllbnRWZXJzaW9uIHx8ICFvcHRpb25zLnByb3RvY29sVmVyc2lvbnMuaW5jbHVkZXMoY2xpZW50VmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2UoMjAwLCBqc29uUnBjRXJyb3IoaWQsIElOVkFMSURfUEFSQU1TLCBgVW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbi4gU3VwcG9ydGVkOiAke29wdGlvbnMucHJvdG9jb2xWZXJzaW9ucy5qb2luKCcsICcpfWApKTtcbiAgICB9XG5cbiAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY1N1Y2Nlc3MoaWQsIHtcbiAgICAgIHByb3RvY29sVmVyc2lvbjogY2xpZW50VmVyc2lvbixcbiAgICAgIGNhcGFiaWxpdGllczogeyB0b29sczoge30gfSxcbiAgICAgIHNlcnZlckluZm86IG9wdGlvbnMuc2VydmVySW5mbyxcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVUb29sc0xpc3QoaWQ6IHVua25vd24sIHByaW5jaXBhbDogVFByaW5jaXBhbCk6IFByb21pc2U8TWNwUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0b29scyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgb3B0aW9ucy50b29scy5tYXAoYXN5bmMgKHRvb2wpID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0eXBlb2YgdG9vbC5kZXNjcmlwdGlvbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gYXdhaXQgdG9vbC5kZXNjcmlwdGlvbihwcmluY2lwYWwpXG4gICAgICAgICAgOiB0b29sLmRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogdG9vbC5pbnB1dFNjaGVtYSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY1N1Y2Nlc3MoaWQsIHsgdG9vbHMgfSkpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9vbHNDYWxsKGlkOiB1bmtub3duLCBwcmluY2lwYWw6IFRQcmluY2lwYWwsIHBhcmFtczogdW5rbm93bik6IFByb21pc2U8TWNwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBwID0gcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRvb2xOYW1lID0gcD8ubmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRvb2xOYW1lKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlZBTElEX1BBUkFNUywgJ01pc3NpbmcgcGFyYW1zLm5hbWUnKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbCA9IG9wdGlvbnMudG9vbHMuZmluZCgodCkgPT4gdC5uYW1lID09PSB0b29sTmFtZSk7XG4gICAgaWYgKCF0b29sKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlZBTElEX1BBUkFNUywgYFVua25vd24gdG9vbDogJHt0b29sTmFtZX1gKSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRvb2wuaW52b2tlKHByaW5jaXBhbCwgcD8uYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2UoMjAwLCBqc29uUnBjU3VjY2VzcyhpZCwgcmVzdWx0KSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdJbnRlcm5hbCBlcnJvcic7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlRFUk5BTF9FUlJPUiwgbWVzc2FnZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGpzb25SZXNwb25zZShzdGF0dXNDb2RlOiBudW1iZXIsIGJvZHk6IG9iamVjdCk6IE1jcFJlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
118
|
+
/**
|
|
119
|
+
* Selects the protocol version to use for the handshake.
|
|
120
|
+
*
|
|
121
|
+
* Returns the requested version when supported. Otherwise returns the highest
|
|
122
|
+
* supported version that is not newer than the requested one (downward
|
|
123
|
+
* negotiation). Returns undefined when every supported version is newer than
|
|
124
|
+
* the requested one, i.e. no safe downgrade exists.
|
|
125
|
+
*
|
|
126
|
+
* MCP protocol versions are ISO-like `YYYY-MM-DD` strings, so lexicographic
|
|
127
|
+
* comparison matches chronological order.
|
|
128
|
+
*/
|
|
129
|
+
function negotiateProtocolVersion(requested, supported) {
|
|
130
|
+
if (supported.includes(requested)) {
|
|
131
|
+
return requested;
|
|
132
|
+
}
|
|
133
|
+
const candidates = supported
|
|
134
|
+
.filter((v) => v <= requested)
|
|
135
|
+
.sort();
|
|
136
|
+
return candidates.length > 0 ? candidates[candidates.length - 1] : undefined;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC1hdXRoL21jcC9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSwwQ0F5SEM7QUFhRCw0REFVQztBQTVKRCxxQ0FBZ0Q7QUFDaEQsdUNBQWdJO0FBT2hJOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBYSxPQUFxQztJQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFFbEIsS0FBSyxVQUFVLE1BQU0sQ0FBQyxJQUFhLEVBQUUsT0FBMkM7UUFDOUUseUJBQXlCO1FBQ3pCLElBQUksU0FBcUIsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxTQUFTLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksR0FBRyxZQUFZLDZCQUFvQixFQUFFLENBQUM7Z0JBQ3hDLE9BQU87b0JBQ0wsVUFBVSxFQUFFLEdBQUc7b0JBQ2YsT0FBTyxFQUFFO3dCQUNQLGNBQWMsRUFBRSxrQkFBa0I7d0JBQ2xDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxTQUFTO3FCQUNsQztvQkFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQzdDLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLElBQUEsNkJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEdBQUksR0FBeUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDdkQsTUFBTSxPQUFPLEdBQUksR0FBNEIsQ0FBQyxPQUFPLElBQUksaUJBQWlCLENBQUM7WUFDM0UsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUEsc0JBQVksRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFdkMsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssWUFBWTtnQkFDZixPQUFPLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN0QyxLQUFLLDJCQUEyQjtnQkFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hGLEtBQUssWUFBWTtnQkFDZixPQUFPLGVBQWUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDeEMsS0FBSyxZQUFZO2dCQUNmLE9BQU8sZUFBZSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDaEQ7Z0JBQ0UsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUEsc0JBQVksRUFBQyxFQUFFLEVBQUUsMEJBQWdCLEVBQUUscUJBQXFCLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsZ0JBQWdCLENBQUMsRUFBVyxFQUFFLE1BQWU7UUFDcEQsTUFBTSxhQUFhLEdBQUksTUFBOEMsRUFBRSxlQUFxQyxDQUFDO1FBRTdHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBQSxzQkFBWSxFQUFDLEVBQUUsRUFBRSx3QkFBYyxFQUFFLDRDQUE0QyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hKLENBQUM7UUFFRCw2RUFBNkU7UUFDN0UsNkVBQTZFO1FBQzdFLDJFQUEyRTtRQUMzRSx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLDhEQUE4RDtRQUM5RCxNQUFNLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU1RixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBQSxzQkFBWSxFQUFDLEVBQUUsRUFBRSx3QkFBYyxFQUFFLDRDQUE0QyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hKLENBQUM7UUFFRCxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBQSx3QkFBYyxFQUFDLEVBQUUsRUFBRTtZQUMxQyxlQUFlLEVBQUUsaUJBQWlCO1lBQ2xDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDM0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELEtBQUssVUFBVSxlQUFlLENBQUMsRUFBVyxFQUFFLFNBQXFCO1FBQy9ELE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDN0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQy9CLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxVQUFVO2dCQUN4RCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDckIsT0FBTztnQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsV0FBVztnQkFDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDOUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBQSx3QkFBYyxFQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxFQUFXLEVBQUUsU0FBcUIsRUFBRSxNQUFlO1FBQ2hGLE1BQU0sQ0FBQyxHQUFHLE1BQTZDLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQTBCLENBQUM7UUFFL0MsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUEsc0JBQVksRUFBQyxFQUFFLEVBQUUsd0JBQWMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFBLHNCQUFZLEVBQUMsRUFBRSxFQUFFLHdCQUFjLEVBQUUsaUJBQWlCLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUQsT0FBTyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUEsd0JBQWMsRUFBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQUMsT0FBTyxHQUFZLEVBQUUsQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBRyxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN0RSxPQUFPLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBQSxzQkFBWSxFQUFDLEVBQUUsRUFBRSx3QkFBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLFlBQVksQ0FBQyxVQUFrQixFQUFFLElBQVk7UUFDcEQsT0FBTztZQUNMLFVBQVU7WUFDVixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzNCLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxTQUFpQixFQUFFLFNBQW1CO0lBQzdFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxTQUFTO1NBQ3pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztTQUM3QixJQUFJLEVBQUUsQ0FBQztJQUVWLE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDL0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1jcFVuYXV0aG9yaXplZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsganNvblJwY0Vycm9yLCBqc29uUnBjU3VjY2VzcywgSU5URVJOQUxfRVJST1IsIElOVkFMSURfUEFSQU1TLCBNRVRIT0RfTk9UX0ZPVU5ELCBwYXJzZUpzb25ScGNSZXF1ZXN0IH0gZnJvbSAnLi9qc29ucnBjJztcbmltcG9ydCB0eXBlIHsgTWNwUmVzcG9uc2UsIE1jcFNlcnZlck9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBNY3BTZXJ2ZXJIYW5kbGUge1xuICBoYW5kbGUoYm9keTogdW5rbm93biwgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPik6IFByb21pc2U8TWNwUmVzcG9uc2U+O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gTUNQIEpTT04tUlBDIHNlcnZlciB0aGF0IGF1dGhlbnRpY2F0ZXMgY2FsbGVycyxcbiAqIGFkdmVydGlzZXMgdG9vbHMsIGFuZCBkaXNwYXRjaGVzIHRvb2wgaW52b2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNY3BTZXJ2ZXI8VFByaW5jaXBhbD4ob3B0aW9uczogTWNwU2VydmVyT3B0aW9uczxUUHJpbmNpcGFsPik6IE1jcFNlcnZlckhhbmRsZSB7XG4gIHJldHVybiB7IGhhbmRsZSB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZShib2R5OiB1bmtub3duLCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KTogUHJvbWlzZTxNY3BSZXNwb25zZT4ge1xuICAgIC8vIDEuIFJlc29sdmUgY3JlZGVudGlhbHNcbiAgICBsZXQgcHJpbmNpcGFsOiBUUHJpbmNpcGFsO1xuICAgIHRyeSB7XG4gICAgICBwcmluY2lwYWwgPSBhd2FpdCBvcHRpb25zLnJlc29sdmVyLnJlc29sdmUoaGVhZGVycyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTWNwVW5hdXRob3JpemVkRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGF0dXNDb2RlOiA0MDEsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdXV1ctQXV0aGVudGljYXRlJzogZXJyLmNoYWxsZW5nZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IGVyci5tZXNzYWdlIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIDIuIFBhcnNlIEpTT04tUlBDIHJlcXVlc3RcbiAgICBsZXQgcmVxdWVzdDtcbiAgICB0cnkge1xuICAgICAgcmVxdWVzdCA9IHBhcnNlSnNvblJwY1JlcXVlc3QoYm9keSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBjb2RlID0gKGVyciBhcyB7IGNvZGU/OiBudW1iZXIgfSkuY29kZSA/PyAtMzI2MDA7XG4gICAgICBjb25zdCBtZXNzYWdlID0gKGVyciBhcyB7IG1lc3NhZ2U/OiBzdHJpbmcgfSkubWVzc2FnZSA/PyAnSW52YWxpZCByZXF1ZXN0JztcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2UoMjAwLCBqc29uUnBjRXJyb3IobnVsbCwgY29kZSwgbWVzc2FnZSkpO1xuICAgIH1cblxuICAgIC8vIDMuIERpc3BhdGNoIG9uIG1ldGhvZFxuICAgIGNvbnN0IHsgaWQsIG1ldGhvZCwgcGFyYW1zIH0gPSByZXF1ZXN0O1xuXG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ2luaXRpYWxpemUnOlxuICAgICAgICByZXR1cm4gaGFuZGxlSW5pdGlhbGl6ZShpZCwgcGFyYW1zKTtcbiAgICAgIGNhc2UgJ25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQnOlxuICAgICAgICByZXR1cm4geyBzdGF0dXNDb2RlOiAyMDIsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiAnJyB9O1xuICAgICAgY2FzZSAndG9vbHMvbGlzdCc6XG4gICAgICAgIHJldHVybiBoYW5kbGVUb29sc0xpc3QoaWQsIHByaW5jaXBhbCk7XG4gICAgICBjYXNlICd0b29scy9jYWxsJzpcbiAgICAgICAgcmV0dXJuIGhhbmRsZVRvb2xzQ2FsbChpZCwgcHJpbmNpcGFsLCBwYXJhbXMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGpzb25SZXNwb25zZSgyMDAsIGpzb25ScGNFcnJvcihpZCwgTUVUSE9EX05PVF9GT1VORCwgYE1ldGhvZCBub3QgZm91bmQ6ICR7bWV0aG9kfWApKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbml0aWFsaXplKGlkOiB1bmtub3duLCBwYXJhbXM6IHVua25vd24pOiBNY3BSZXNwb25zZSB7XG4gICAgY29uc3QgY2xpZW50VmVyc2lvbiA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpPy5wcm90b2NvbFZlcnNpb24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFjbGllbnRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlZBTElEX1BBUkFNUywgYFVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb24uIFN1cHBvcnRlZDogJHtvcHRpb25zLnByb3RvY29sVmVyc2lvbnMuam9pbignLCAnKX1gKSk7XG4gICAgfVxuXG4gICAgLy8gUGVyIHRoZSBNQ1AgbGlmZWN5Y2xlIHNwZWM6IGVjaG8gdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIHdoZW4gd2Ugc3VwcG9ydCBpdCxcbiAgICAvLyBvdGhlcndpc2UgbmVnb3RpYXRlIHRvIGEgdmVyc2lvbiB3ZSBkbyBzdXBwb3J0LiBXZSBuZWdvdGlhdGUgKmRvd253YXJkcyog4oCUXG4gICAgLy8gdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIHZlcnNpb24gdGhhdCBpcyBub3QgbmV3ZXIgdGhhbiB0aGUgb25lIHJlcXVlc3RlZCDigJRcbiAgICAvLyBiZWNhdXNlIGNsaWVudHMgKGUuZy4gQG1vZGVsY29udGV4dHByb3RvY29sL3NkayA8PSAxLjE2LjApIHJlamVjdCBhbnlcbiAgICAvLyBuZWdvdGlhdGVkIHZlcnNpb24gb3V0c2lkZSB0aGVpciBvd24gYWNjZXB0ZWQgc2V0LiBBbnN3ZXJpbmcgd2l0aCBhIG5ld2VyXG4gICAgLy8gdmVyc2lvbiB0aGFuIHRoZSBjbGllbnQgYXNrZWQgZm9yIHdvdWxkIGZhaWwgdGhlIGhhbmRzaGFrZS5cbiAgICBjb25zdCBuZWdvdGlhdGVkVmVyc2lvbiA9IG5lZ290aWF0ZVByb3RvY29sVmVyc2lvbihjbGllbnRWZXJzaW9uLCBvcHRpb25zLnByb3RvY29sVmVyc2lvbnMpO1xuXG4gICAgaWYgKCFuZWdvdGlhdGVkVmVyc2lvbikge1xuICAgICAgcmV0dXJuIGpzb25SZXNwb25zZSgyMDAsIGpzb25ScGNFcnJvcihpZCwgSU5WQUxJRF9QQVJBTVMsIGBVbnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uLiBTdXBwb3J0ZWQ6ICR7b3B0aW9ucy5wcm90b2NvbFZlcnNpb25zLmpvaW4oJywgJyl9YCkpO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uUmVzcG9uc2UoMjAwLCBqc29uUnBjU3VjY2VzcyhpZCwge1xuICAgICAgcHJvdG9jb2xWZXJzaW9uOiBuZWdvdGlhdGVkVmVyc2lvbixcbiAgICAgIGNhcGFiaWxpdGllczogeyB0b29sczoge30gfSxcbiAgICAgIHNlcnZlckluZm86IG9wdGlvbnMuc2VydmVySW5mbyxcbiAgICB9KSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBoYW5kbGVUb29sc0xpc3QoaWQ6IHVua25vd24sIHByaW5jaXBhbDogVFByaW5jaXBhbCk6IFByb21pc2U8TWNwUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0b29scyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgb3B0aW9ucy50b29scy5tYXAoYXN5bmMgKHRvb2wpID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0eXBlb2YgdG9vbC5kZXNjcmlwdGlvbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gYXdhaXQgdG9vbC5kZXNjcmlwdGlvbihwcmluY2lwYWwpXG4gICAgICAgICAgOiB0b29sLmRlc2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHRvb2wubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICBpbnB1dFNjaGVtYTogdG9vbC5pbnB1dFNjaGVtYSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY1N1Y2Nlc3MoaWQsIHsgdG9vbHMgfSkpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9vbHNDYWxsKGlkOiB1bmtub3duLCBwcmluY2lwYWw6IFRQcmluY2lwYWwsIHBhcmFtczogdW5rbm93bik6IFByb21pc2U8TWNwUmVzcG9uc2U+IHtcbiAgICBjb25zdCBwID0gcGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRvb2xOYW1lID0gcD8ubmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRvb2xOYW1lKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlZBTElEX1BBUkFNUywgJ01pc3NpbmcgcGFyYW1zLm5hbWUnKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9vbCA9IG9wdGlvbnMudG9vbHMuZmluZCgodCkgPT4gdC5uYW1lID09PSB0b29sTmFtZSk7XG4gICAgaWYgKCF0b29sKSB7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlZBTElEX1BBUkFNUywgYFVua25vd24gdG9vbDogJHt0b29sTmFtZX1gKSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRvb2wuaW52b2tlKHByaW5jaXBhbCwgcD8uYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBqc29uUmVzcG9uc2UoMjAwLCBqc29uUnBjU3VjY2VzcyhpZCwgcmVzdWx0KSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdJbnRlcm5hbCBlcnJvcic7XG4gICAgICByZXR1cm4ganNvblJlc3BvbnNlKDIwMCwganNvblJwY0Vycm9yKGlkLCBJTlRFUk5BTF9FUlJPUiwgbWVzc2FnZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGpzb25SZXNwb25zZShzdGF0dXNDb2RlOiBudW1iZXIsIGJvZHk6IG9iamVjdCk6IE1jcFJlc3BvbnNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNlbGVjdHMgdGhlIHByb3RvY29sIHZlcnNpb24gdG8gdXNlIGZvciB0aGUgaGFuZHNoYWtlLlxuICpcbiAqIFJldHVybnMgdGhlIHJlcXVlc3RlZCB2ZXJzaW9uIHdoZW4gc3VwcG9ydGVkLiBPdGhlcndpc2UgcmV0dXJucyB0aGUgaGlnaGVzdFxuICogc3VwcG9ydGVkIHZlcnNpb24gdGhhdCBpcyBub3QgbmV3ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIG9uZSAoZG93bndhcmRcbiAqIG5lZ290aWF0aW9uKS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiBldmVyeSBzdXBwb3J0ZWQgdmVyc2lvbiBpcyBuZXdlciB0aGFuXG4gKiB0aGUgcmVxdWVzdGVkIG9uZSwgaS5lLiBubyBzYWZlIGRvd25ncmFkZSBleGlzdHMuXG4gKlxuICogTUNQIHByb3RvY29sIHZlcnNpb25zIGFyZSBJU08tbGlrZSBgWVlZWS1NTS1ERGAgc3RyaW5ncywgc28gbGV4aWNvZ3JhcGhpY1xuICogY29tcGFyaXNvbiBtYXRjaGVzIGNocm9ub2xvZ2ljYWwgb3JkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZWdvdGlhdGVQcm90b2NvbFZlcnNpb24ocmVxdWVzdGVkOiBzdHJpbmcsIHN1cHBvcnRlZDogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoc3VwcG9ydGVkLmluY2x1ZGVzKHJlcXVlc3RlZCkpIHtcbiAgICByZXR1cm4gcmVxdWVzdGVkO1xuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IHN1cHBvcnRlZFxuICAgIC5maWx0ZXIoKHYpID0+IHYgPD0gcmVxdWVzdGVkKVxuICAgIC5zb3J0KCk7XG5cbiAgcmV0dXJuIGNhbmRpZGF0ZXMubGVuZ3RoID4gMCA/IGNhbmRpZGF0ZXNbY2FuZGlkYXRlcy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|