@aws-amplify/graphql-api-construct 1.17.0 → 1.17.2-ai-next.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.jsii +38 -38
- package/CHANGELOG.md +10 -0
- package/lib/amplify-dynamodb-table-wrapper.js +1 -1
- package/lib/amplify-graphql-api.js +3 -2
- package/lib/amplify-graphql-definition.js +1 -1
- package/lib/sql-model-datasource-strategy.js +1 -1
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.d.ts +2 -1
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.js +13 -14
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_message_history_retriever.js +3 -2
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_response_sender.d.ts +3 -1
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/conversation_turn_response_sender.js +19 -5
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/event-tools-provider/event_tools_provider.js +3 -2
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/event-tools-provider/graphql_tool.d.ts +3 -2
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/event-tools-provider/graphql_tool.js +3 -3
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/graphql_request_executor.d.ts +6 -3
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/graphql_request_executor.js +6 -5
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/user_agent_provider.d.ts +16 -0
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/user_agent_provider.js +48 -0
- package/node_modules/@aws-amplify/ai-constructs/package.json +2 -2
- package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +11 -11
- package/node_modules/@aws-amplify/graphql-conversation-transformer/API.md +3 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/CHANGELOG.md +10 -0
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/conversation-directive-configuration.d.ts +17 -0
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/conversation-directive-configuration.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/conversation-directive-configuration.js +5 -0
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/conversation-directive-configuration.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/grapqhl-conversation-transformer.d.ts +2 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/grapqhl-conversation-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/grapqhl-conversation-transformer.js +2 -2
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/grapqhl-conversation-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/tools/process-tools.d.ts +3 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/tools/process-tools.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/tools/process-tools.js +29 -5
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/tools/process-tools.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-field-handler.d.ts +1 -0
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-field-handler.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-field-handler.js +19 -0
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-field-handler.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.d.ts +3 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.js +3 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/lib/transformer-steps/conversation-resolver-generator.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-conversation-transformer/package.json +10 -9
- package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-directives/CHANGELOG.md +6 -0
- package/node_modules/@aws-amplify/graphql-directives/lib/directives/conversation.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-directives/lib/directives/conversation.js +38 -3
- package/node_modules/@aws-amplify/graphql-directives/lib/directives/conversation.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-directives/package.json +2 -2
- package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-function-transformer/package.json +5 -5
- package/node_modules/@aws-amplify/graphql-generation-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-generation-transformer/package.json +5 -5
- package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-http-transformer/package.json +5 -5
- package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-index-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +9 -9
- package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/package.json +5 -5
- package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
- package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +5 -5
- package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +7 -7
- package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-transformer/API.md +3 -0
- package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +6 -0
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.d.ts +2 -0
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js +1 -1
- package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-transformer/package.json +19 -18
- package/node_modules/@aws-amplify/graphql-transformer/src/graphql-transformer.ts +10 -2
- package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/package.json +3 -3
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +1 -2
- package/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.d.ts +11 -0
- package/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.js +19 -2
- package/node_modules/@aws-amplify/platform-core/package.json +1 -1
- package/node_modules/graphql-transformer-common/package.json +1 -2
- package/package.json +20 -20
- package/src/amplify-graphql-api.ts +2 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/LICENSE +0 -201
- package/node_modules/graphql-transformer-common/LICENSE +0 -201
package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.js
CHANGED
@@ -5,6 +5,7 @@ const client_bedrock_runtime_1 = require("@aws-sdk/client-bedrock-runtime");
|
|
5
5
|
const event_tools_provider_1 = require("./event-tools-provider");
|
6
6
|
const conversation_message_history_retriever_1 = require("./conversation_message_history_retriever");
|
7
7
|
const errors_1 = require("./errors");
|
8
|
+
const user_agent_provider_1 = require("./user_agent_provider");
|
8
9
|
/**
|
9
10
|
* This class is responsible for interacting with Bedrock Converse API
|
10
11
|
* in order to produce final response that can be sent back to caller.
|
@@ -13,7 +14,7 @@ class BedrockConverseAdapter {
|
|
13
14
|
/**
|
14
15
|
* Creates Bedrock Converse Adapter.
|
15
16
|
*/
|
16
|
-
constructor(event, additionalTools, bedrockClient = new client_bedrock_runtime_1.BedrockRuntimeClient({ region: event.modelConfiguration.region }), eventToolsProvider = new event_tools_provider_1.ConversationTurnEventToolsProvider(event), messageHistoryRetriever = new conversation_message_history_retriever_1.ConversationMessageHistoryRetriever(event), logger = console) {
|
17
|
+
constructor(event, additionalTools, bedrockClient = new client_bedrock_runtime_1.BedrockRuntimeClient({ region: event.modelConfiguration.region }), eventToolsProvider = new event_tools_provider_1.ConversationTurnEventToolsProvider(event), messageHistoryRetriever = new conversation_message_history_retriever_1.ConversationMessageHistoryRetriever(event), userAgentProvider = new user_agent_provider_1.UserAgentProvider(event), logger = console) {
|
17
18
|
var _a, _b;
|
18
19
|
this.event = event;
|
19
20
|
this.bedrockClient = bedrockClient;
|
@@ -163,18 +164,16 @@ class BedrockConverseAdapter {
|
|
163
164
|
};
|
164
165
|
}
|
165
166
|
};
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
});
|
177
|
-
}
|
167
|
+
this.bedrockClient.middlewareStack.add((next) => (args) => {
|
168
|
+
// @ts-expect-error Request is typed as unknown.
|
169
|
+
// But this is recommended way to alter headers per https://github.com/aws/aws-sdk-js-v3/blob/main/README.md.
|
170
|
+
args.request.headers['x-amz-user-agent'] =
|
171
|
+
userAgentProvider.getUserAgent();
|
172
|
+
return next(args);
|
173
|
+
}, {
|
174
|
+
step: 'build',
|
175
|
+
name: 'amplify-user-agent-injector',
|
176
|
+
});
|
178
177
|
this.executableTools = [
|
179
178
|
...eventToolsProvider.getEventTools(),
|
180
179
|
...additionalTools,
|
@@ -365,4 +364,4 @@ class BedrockConverseAdapter {
|
|
365
364
|
}
|
366
365
|
}
|
367
366
|
exports.BedrockConverseAdapter = BedrockConverseAdapter;
|
368
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFheUM7QUFPekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUUvRixxQ0FBMkM7QUFFM0M7OztHQUdHO0FBQ0gsTUFBYSxzQkFBc0I7SUFRakM7O09BRUc7SUFDSCxZQUNtQixLQUE0QixFQUM3QyxlQUFzQyxFQUNyQixnQkFBc0MsSUFBSSw2Q0FBb0IsQ0FDN0UsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUM1QyxFQUNELGtCQUFrQixHQUFHLElBQUkseURBQWtDLENBQUMsS0FBSyxDQUFDLEVBQ2pELDBCQUEwQixJQUFJLDRFQUFtQyxDQUNoRixLQUFLLENBQ04sRUFDZ0IsU0FBUyxPQUFPOztRQVRoQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QixrQkFBYSxHQUFiLGFBQWEsQ0FFN0I7UUFFZ0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUV2QztRQUNnQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBakJsQix5QkFBb0IsR0FDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNLLHFCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBK0QzRSxlQUFVLEdBQUcsS0FBSyxJQUE2QixFQUFFOztZQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxHQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBRWhDLE1BQU0sUUFBUSxHQUNaLE1BQU0sSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFFakQsSUFBSSxlQUFzQyxDQUFDO1lBQzNDLEdBQUc7Z0JBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxD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LEVBQUUsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUNPLENBQUM7Z0JBQ3ZDLE1BQU0seUJBQXlCLEdBQXdCLEVBQUUsQ0FBQztnQkFDMUQsS0FBSyxNQUFNLG9CQUFvQixJQUFJLGFBQWEsRUFBRTtvQkFDaEQsTUFBTSxZQUFZLEdBQ2hCLG9CQUFrRCxDQUFDO29CQUNyRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDcEUseUJBQXlCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7aUJBQ3hEO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ1osSUFBSSxFQUFFLE1BQU07b0JBQ1osT0FBTyxFQUFFLHlCQUF5QjtpQkFDbkMsQ0FBQyxDQUFDO2FBQ0o7U0FDRixRQUFRLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFFcEMsTUFBTTtZQUNKLHNCQUFzQixFQUFFLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztZQUNuRCxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO1lBQ3pDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO1lBQ3BELGlCQUFpQixFQUFFLGNBQWM7WUFDakMsVUFBVSxFQUFFLFVBQVU7U0FDdkIsQ0FBQztJQUNKLENBQUM7Q0FzR0Y7QUF2WkQsd0RBdVpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmVkcm9ja1J1bnRpbWVDbGllbnQsXG4gIENvbnRlbnRCbG9jayxcbiAgQ29udmVyc2VDb21tYW5kLFxuICBDb252ZXJzZUNvbW1hbmRJbnB1dCxcbiAgQ29udmVyc2VDb21tYW5kT3V0cHV0LFxuICBDb252ZXJzZVN0cmVhbUNvbW1hbmQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZElucHV0LFxuICBDb252ZXJzZVN0cmVhbUNvbW1hbmRPdXRwdXQsXG4gIE1lc3NhZ2UsXG4gIFRvb2wsXG4gIFRvb2xDb25maWd1cmF0aW9uLFxuICBUb29sSW5wdXRTY2hlbWEsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUnO1xuaW1wb3J0IHtcbiAgQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICBFeGVjdXRhYmxlVG9vbCxcbiAgU3RyZWFtaW5nUmVzcG9uc2VDaHVuayxcbiAgVG9vbERlZmluaXRpb24sXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVHVybkV2ZW50VG9vbHNQcm92aWRlciB9IGZyb20gJy4vZXZlbnQtdG9vbHMtcHJvdmlkZXInO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uTWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIgfSBmcm9tICcuL2NvbnZlcnNhdGlvbl9tZXNzYWdlX2hpc3RvcnlfcmV0cmlldmVyJztcbmltcG9ydCAqIGFzIGJlZHJvY2sgZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBCZWRyb2NrIENvbnZlcnNlIEFQSVxuICogaW4gb3JkZXIgdG8gcHJvZHVjZSBmaW5hbCByZXNwb25zZSB0aGF0IGNhbiBiZSBzZW50IGJhY2sgdG8gY2FsbGVyLlxuICovXG5leHBvcnQgY2xhc3MgQmVkcm9ja0NvbnZlcnNlQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsVG9vbHM6IEFycmF5PFRvb2xEZWZpbml0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRhYmxlVG9vbHM6IEFycmF5PEV4ZWN1dGFibGVUb29sPjtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRUb29sczogQXJyYXk8VG9vbERlZmluaXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGFibGVUb29sQnlOYW1lOiBNYXA8c3RyaW5nLCBFeGVjdXRhYmxlVG9vbD4gPVxuICAgIG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRUb29sQnlOYW1lOiBNYXA8c3RyaW5nLCBUb29sRGVmaW5pdGlvbj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgQmVkcm9jayBDb252ZXJzZSBBZGFwdGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudDogQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICAgIGFkZGl0aW9uYWxUb29sczogQXJyYXk8RXhlY3V0YWJsZVRvb2w+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYmVkcm9ja0NsaWVudDogQmVkcm9ja1J1bnRpbWVDbGllbnQgPSBuZXcgQmVkcm9ja1J1bnRpbWVDbGllbnQoXG4gICAgICB7IHJlZ2lvbjogZXZlbnQubW9kZWxDb25maWd1cmF0aW9uLnJlZ2lvbiB9XG4gICAgKSxcbiAgICBldmVudFRvb2xzUHJvdmlkZXIgPSBuZXcgQ29udmVyc2F0aW9uVHVybkV2ZW50VG9vbHNQcm92aWRlcihldmVudCksXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlSGlzdG9yeVJldHJpZXZlciA9IG5ldyBDb252ZXJzYXRpb25NZXNzYWdlSGlzdG9yeVJldHJpZXZlcihcbiAgICAgIGV2ZW50XG4gICAgKSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgaWYgKGV2ZW50LnJlcXVlc3QuaGVhZGVyc1sneC1hbXotdXNlci1hZ2VudCddKSB7XG4gICAgICB0aGlzLmJlZHJvY2tDbGllbnQubWlkZGxld2FyZVN0YWNrLmFkZChcbiAgICAgICAgKG5leHQpID0+IChhcmdzKSA9PiB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZXF1ZXN0IGlzIHR5cGVkIGFzIHVua25vd24uXG4gICAgICAgICAgLy8gQnV0IHRoaXMgaXMgcmVjb21tZW5kZWQgd2F5IHRvIGFsdGVyIGhlYWRlcnMgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy12My9ibG9iL21haW4vUkVBRE1FLm1kLlxuICAgICAgICAgIGFyZ3MucmVxdWVzdC5oZWFkZXJzWyd4LWFtei11c2VyLWFnZW50J10gPVxuICAgICAgICAgICAgZXZlbnQucmVxdWVzdC5oZWFkZXJzWyd4LWFtei11c2VyLWFnZW50J107XG4gICAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGVwOiAnYnVpbGQnLFxuICAgICAgICAgIG5hbWU6ICdhbXBsaWZ5LXVzZXItYWdlbnQtaW5qZWN0b3InLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmV4ZWN1dGFibGVUb29scyA9IFtcbiAgICAgIC4uLmV2ZW50VG9vbHNQcm92aWRlci5nZXRFdmVudFRvb2xzKCksXG4gICAgICAuLi5hZGRpdGlvbmFsVG9vbHMsXG4gICAgXTtcbiAgICB0aGlzLmNsaWVudFRvb2xzID0gdGhpcy5ldmVudC50b29sc0NvbmZpZ3VyYXRpb24/LmNsaWVudFRvb2xzID8/IFtdO1xuICAgIHRoaXMuYWxsVG9vbHMgPSBbLi4udGhpcy5leGVjdXRhYmxlVG9vbHMsIC4uLnRoaXMuY2xpZW50VG9vbHNdO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVRvb2xzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgdGhpcy5leGVjdXRhYmxlVG9vbHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWN1dGFibGVUb29sQnlOYW1lLnNldCh0Lm5hbWUsIHQpO1xuICAgIH0pO1xuICAgIHRoaXMuY2xpZW50VG9vbHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyh0Lm5hbWUpKSB7XG4gICAgICAgIGR1cGxpY2F0ZVRvb2xzLmFkZCh0Lm5hbWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLnNldCh0Lm5hbWUsIHQpO1xuICAgIH0pO1xuICAgIGlmIChkdXBsaWNhdGVUb29scy5zaXplID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYFRvb2xzIG11c3QgaGF2ZSB1bmlxdWUgbmFtZXMuIER1cGxpY2F0ZSB0b29sczogJHtbXG4gICAgICAgICAgLi4uZHVwbGljYXRlVG9vbHMsXG4gICAgICAgIF0uam9pbignLCAnKX0uYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc2tCZWRyb2NrID0gYXN5bmMgKCk6IFByb21pc2U8Q29udGVudEJsb2NrW10+ID0+IHtcbiAgICBjb25zdCB7IG1vZGVsSWQsIHN5c3RlbVByb21wdCwgaW5mZXJlbmNlQ29uZmlndXJhdGlvbiB9ID1cbiAgICAgIHRoaXMuZXZlbnQubW9kZWxDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzKCk7XG5cbiAgICBsZXQgYmVkcm9ja1Jlc3BvbnNlOiBDb252ZXJzZUNvbW1hbmRPdXRwdXQ7XG4gICAgZG8ge1xuICAgICAgY29uc3QgdG9vbENvbmZpZyA9IHRoaXMuY3JlYXRlVG9vbENvbmZpZ3VyYXRpb24oKTtcbiAgICAgIGNvbnN0IGNvbnZlcnNlQ29tbWFuZElucHV0OiBDb252ZXJzZUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgbW9kZWxJZCxcbiAgICAgICAgbWVzc2FnZXM6IFsuLi5tZXNzYWdlc10sXG4gICAgICAgIHN5c3RlbTogW3sgdGV4dDogc3lzdGVtUHJvbXB0IH1dLFxuICAgICAgICBpbmZlcmVuY2VDb25maWc6IGluZmVyZW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHRvb2xDb25maWcsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU2VuZGluZyBCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3QnKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3Q6JywgY29udmVyc2VDb21tYW5kSW5wdXQpO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2UsIHJlcXVlc3RJZD0ke2JlZHJvY2tSZXNwb25zZS4kbWV0YWRhdGEucmVxdWVzdElkfWAsXG4gICAgICAgIGJlZHJvY2tSZXNwb25zZS51c2FnZVxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlc3BvbnNlOicsIGJlZHJvY2tSZXNwb25zZSk7XG4gICAgICBpZiAoYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlcy5wdXNoKGJlZHJvY2tSZXNwb25zZS5vdXRwdXQ/Lm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKGJlZHJvY2tSZXNwb25zZS5zdG9wUmVhc29uID09PSAndG9vbF91c2UnKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrcyA9XG4gICAgICAgICAgYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZT8uY29udGVudCA/PyBbXTtcbiAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PiAndG9vbFVzZScgaW4gYmxvY2tcbiAgICAgICAgKSBhcyBBcnJheTxDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcj47XG4gICAgICAgIGNvbnN0IGNsaWVudFRvb2xVc2VCbG9ja3MgPSByZXNwb25zZUNvbnRlbnRCbG9ja3MuZmlsdGVyKFxuICAgICAgICAgIChibG9jaykgPT5cbiAgICAgICAgICAgIGJsb2NrLnRvb2xVc2U/Lm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuY2xpZW50VG9vbEJ5TmFtZS5oYXMoYmxvY2sudG9vbFVzZT8ubmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNsaWVudFRvb2xVc2VCbG9ja3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZvciBub3cgaWYgYW55IG9mIGNsaWVudCB0b29scyBpcyB1c2VkIHdlIGlnbm9yZSBleGVjdXRhYmxlIHRvb2xzXG4gICAgICAgICAgLy8gYW5kIHByb3BhZ2F0ZSByZXN1bHQgYmFjayB0byBjbGllbnQuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFRvb2xVc2VCbG9ja3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrczogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrIG9mIHRvb2xVc2VCbG9ja3MpIHtcbiAgICAgICAgICBjb25zdCB0b29sVXNlQmxvY2sgPVxuICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50QmxvY2sgYXMgQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI7XG4gICAgICAgICAgY29uc3QgdG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRvb2wodG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLnB1c2godG9vbFJlc3VsdENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGJlZHJvY2tSZXNwb25zZS5zdG9wUmVhc29uID09PSAndG9vbF91c2UnKTtcblxuICAgIHJldHVybiBiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlPy5jb250ZW50ID8/IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBc2tzIEJlZHJvY2sgZm9yIHJlc3BvbnNlIHVzaW5nIHN0cmVhbWluZyB2ZXJzaW9uIG9mIENvbnZlcnNlIEFQSS5cbiAgICovXG4gIGFzeW5jICphc2tCZWRyb2NrU3RyZWFtaW5nKCk6IEFzeW5jR2VuZXJhdG9yPFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bms+IHtcbiAgICBjb25zdCB7IG1vZGVsSWQsIHN5c3RlbVByb21wdCwgaW5mZXJlbmNlQ29uZmlndXJhdGlvbiB9ID1cbiAgICAgIHRoaXMuZXZlbnQubW9kZWxDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzKCk7XG5cbiAgICBsZXQgYmVkcm9ja1Jlc3BvbnNlOiBDb252ZXJzZVN0cmVhbUNvbW1hbmRPdXRwdXQ7XG4gICAgLy8ga2VlcCBvdXIgb3duIGluZGV4aW5nIGZvciBibG9ja3MgaW5zdGVhZCBvZiB1c2luZyBCZWRyb2NrJ3MgaW5kZXhlc1xuICAgIC8vIHNpbmNlIHdlIHN0cmVhbSBzdWJzZXQgb2YgdGhlc2UgdXBzdHJlYW0uXG4gICAgbGV0IGJsb2NrSW5kZXggPSAwO1xuICAgIGxldCBsYXN0QmxvY2tJbmRleCA9IDA7XG4gICAgbGV0IHN0b3BSZWFzb24gPSAnJztcbiAgICAvLyBBY2N1bXVsYXRlcyBjbGllbnQgZmFjaW5nIGNvbnRlbnQgcGVyIHR1cm4uXG4gICAgLy8gU28gdGhhdCB1cHN0cmVhbSBjYW4gcGVyc2lzdCBmdWxsIG1lc3NhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtaW5nLlxuICAgIGNvbnN0IGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IEFycmF5PGJlZHJvY2suQ29udGVudEJsb2NrPiA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRvb2xDb25maWcgPSB0aGlzLmNyZWF0ZVRvb2xDb25maWd1cmF0aW9uKCk7XG4gICAgICBjb25zdCBjb252ZXJzZUNvbW1hbmRJbnB1dDogQ29udmVyc2VTdHJlYW1Db21tYW5kSW5wdXQgPSB7XG4gICAgICAgIG1vZGVsSWQsXG4gICAgICAgIG1lc3NhZ2VzOiBbLi4ubWVzc2FnZXNdLFxuICAgICAgICBzeXN0ZW06IFt7IHRleHQ6IHN5c3RlbVByb21wdCB9XSxcbiAgICAgICAgaW5mZXJlbmNlQ29uZmlnOiBpbmZlcmVuY2VDb25maWd1cmF0aW9uLFxuICAgICAgICB0b29sQ29uZmlnLFxuICAgICAgfTtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1NlbmRpbmcgQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVxdWVzdCcpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXF1ZXN0OicsXG4gICAgICAgIGNvbnZlcnNlQ29tbWFuZElucHV0XG4gICAgICApO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZVN0cmVhbUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlc3BvbnNlLCByZXF1ZXN0SWQ9JHtiZWRyb2NrUmVzcG9uc2UuJG1ldGFkYXRhLnJlcXVlc3RJZH1gXG4gICAgICApO1xuICAgICAgaWYgKCFiZWRyb2NrUmVzcG9uc2Uuc3RyZWFtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQmVkcm9jayByZXNwb25zZSBpcyBtaXNzaW5nIHN0cmVhbScpO1xuICAgICAgfVxuICAgICAgbGV0IHRvb2xVc2VCbG9jazogQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgY2xpZW50VG9vbHNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgIGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgICAgIGxldCB0b29sVXNlSW5wdXQ6IHN0cmluZyA9ICcnO1xuICAgICAgbGV0IGJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICBsZXQgbGFzdEJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAvLyBBY2N1bXVsYXRlIGN1cnJlbnQgbWVzc2FnZSBmb3IgdGhlIHRvb2wgdXNlIGxvb3AgcHVycG9zZS5cbiAgICAgIGNvbnN0IGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgcm9sZTogdW5kZWZpbmVkLFxuICAgICAgICBjb250ZW50OiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYmVkcm9ja1Jlc3BvbnNlLnN0cmVhbSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVzcG9uc2UgY2h1bms6JywgY2h1bmspO1xuICAgICAgICBpZiAoY2h1bmsubWVzc2FnZVN0YXJ0KSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLnJvbGUgPSBjaHVuay5tZXNzYWdlU3RhcnQucm9sZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tTdGFydCkge1xuICAgICAgICAgIGJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAgICAgbGFzdEJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAgICAgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0LnN0YXJ0Py50b29sVXNlKSB7XG4gICAgICAgICAgICB0b29sVXNlQmxvY2sgPSB7XG4gICAgICAgICAgICAgIHRvb2xVc2U6IHtcbiAgICAgICAgICAgICAgICAuLi5jaHVuay5jb250ZW50QmxvY2tTdGFydC5zdGFydD8udG9vbFVzZSxcbiAgICAgICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEpIHtcbiAgICAgICAgICBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGE/LnRvb2xVc2UpIHtcbiAgICAgICAgICAgIGlmICghY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudG9vbFVzZS5pbnB1dCkge1xuICAgICAgICAgICAgICB0b29sVXNlSW5wdXQgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2xVc2VJbnB1dCArPSBjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YS50b29sVXNlLmlucHV0O1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGE/LnRleHQpIHtcbiAgICAgICAgICAgIHRleHQgKz0gY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudGV4dDtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogWy4uLmFjY3VtdWxhdGVkVHVybkNvbnRlbnQsIHsgdGV4dCB9XSxcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja1RleHQ6IGNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRleHQsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBibG9ja0luZGV4LFxuICAgICAgICAgICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4OiBibG9ja0RlbHRhSW5kZXgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGFzdEJsb2NrRGVsdGFJbmRleCA9IGJsb2NrRGVsdGFJbmRleDtcbiAgICAgICAgICAgIGJsb2NrRGVsdGFJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tTdG9wKSB7XG4gICAgICAgICAgaWYgKHRvb2xVc2VCbG9jaykge1xuICAgICAgICAgICAgdG9vbFVzZUJsb2NrLnRvb2xVc2UuaW5wdXQgPSBKU09OLnBhcnNlKHRvb2xVc2VJbnB1dCk7XG4gICAgICAgICAgICBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UuY29udGVudD8ucHVzaCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lICYmXG4gICAgICAgICAgICAgIHRoaXMuY2xpZW50VG9vbEJ5TmFtZS5oYXModG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjbGllbnRUb29sc1JlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQucHVzaCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogWy4uLmFjY3VtdWxhdGVkVHVybkNvbnRlbnRdLFxuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgY29udGVudEJsb2NrSW5kZXg6IGJsb2NrSW5kZXgsXG4gICAgICAgICAgICAgICAgY29udGVudEJsb2NrVG9vbFVzZTogSlNPTi5zdHJpbmdpZnkodG9vbFVzZUJsb2NrKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbGFzdEJsb2NrSW5kZXggPSBibG9ja0luZGV4O1xuICAgICAgICAgICAgICBibG9ja0luZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sVXNlQmxvY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0b29sVXNlSW5wdXQgPSAnJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQ/LnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50LnB1c2goeyB0ZXh0IH0pO1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogYmxvY2tJbmRleCxcbiAgICAgICAgICAgICAgY29udGVudEJsb2NrRG9uZUF0SW5kZXg6IGxhc3RCbG9ja0RlbHRhSW5kZXgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgICAgbGFzdEJsb2NrSW5kZXggPSBibG9ja0luZGV4O1xuICAgICAgICAgICAgYmxvY2tJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5tZXNzYWdlU3RvcCkge1xuICAgICAgICAgIHN0b3BSZWFzb24gPSBjaHVuay5tZXNzYWdlU3RvcC5zdG9wUmVhc29uID8/ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ0FjY3VtdWxhdGVkIEJlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlc3BvbnNlOicsXG4gICAgICAgIGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZVxuICAgICAgKTtcbiAgICAgIGlmIChjbGllbnRUb29sc1JlcXVlc3RlZCkge1xuICAgICAgICAvLyBGb3Igbm93IGlmIGFueSBvZiBjbGllbnQgdG9vbHMgaXMgdXNlZCB3ZSBpZ25vcmUgZXhlY3V0YWJsZSB0b29sc1xuICAgICAgICAvLyBhbmQgcHJvcGFnYXRlIHJlc3VsdCBiYWNrIHRvIGNsaWVudC5cbiAgICAgICAgeWllbGQge1xuICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IFsuLi5hY2N1bXVsYXRlZFR1cm5Db250ZW50XSxcbiAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBsYXN0QmxvY2tJbmRleCxcbiAgICAgICAgICBzdG9wUmVhc29uOiBzdG9wUmVhc29uLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZXNzYWdlcy5wdXNoKGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZSk7XG4gICAgICBpZiAoc3RvcFJlYXNvbiA9PT0gJ3Rvb2xfdXNlJykge1xuICAgICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRCbG9ja3MgPSBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UuY29udGVudCA/PyBbXTtcbiAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PiAndG9vbFVzZScgaW4gYmxvY2tcbiAgICAgICAgKSBhcyBBcnJheTxDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcj47XG4gICAgICAgIGNvbnN0IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3M6IEFycmF5PENvbnRlbnRCbG9jaz4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZUNvbnRlbnRCbG9jayBvZiB0b29sVXNlQmxvY2tzKSB7XG4gICAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrID1cbiAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudEJsb2NrIGFzIENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyO1xuICAgICAgICAgIGNvbnN0IHRvb2xSZXN1bHRDb250ZW50QmxvY2sgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUb29sKHRvb2xVc2VCbG9jayk7XG4gICAgICAgICAgdG9vbFJlc3BvbnNlQ29udGVudEJsb2Nrcy5wdXNoKHRvb2xSZXN1bHRDb250ZW50QmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgIHJvbGU6ICd1c2VyJyxcbiAgICAgICAgICBjb250ZW50OiB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChzdG9wUmVhc29uID09PSAndG9vbF91c2UnKTtcblxuICAgIHlpZWxkIHtcbiAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IFsuLi5hY2N1bXVsYXRlZFR1cm5Db250ZW50XSxcbiAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBsYXN0QmxvY2tJbmRleCxcbiAgICAgIHN0b3BSZWFzb246IHN0b3BSZWFzb24sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGV2ZW50IG1lc3NhZ2VzIHRvIEJlZHJvY2sgdHlwZXMuXG4gICAqIDEuIE1ha2VzIGEgY29weSBzbyB0aGF0IHdlIGRvbid0IG11dGF0ZSBldmVudC5cbiAgICogMi4gRGVjb2RlcyBCYXNlNjQgZW5jb2RlZCBpbWFnZXMuXG4gICAqL1xuICBwcml2YXRlIGdldEV2ZW50TWVzc2FnZXNBc0JlZHJvY2tNZXNzYWdlcyA9IGFzeW5jICgpOiBQcm9taXNlPFxuICAgIEFycmF5PE1lc3NhZ2U+XG4gID4gPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPiA9IFtdO1xuICAgIGNvbnN0IGV2ZW50TWVzc2FnZXMgPVxuICAgICAgYXdhaXQgdGhpcy5tZXNzYWdlSGlzdG9yeVJldHJpZXZlci5nZXRNZXNzYWdlSGlzdG9yeSgpO1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBldmVudE1lc3NhZ2VzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlQ29udGVudDogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjb250ZW50RWxlbWVudCBvZiBtZXNzYWdlLmNvbnRlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50RWxlbWVudC5pbWFnZT8uc291cmNlPy5ieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudC5wdXNoKHtcbiAgICAgICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICAgIGZvcm1hdDogY29udGVudEVsZW1lbnQuaW1hZ2UuZm9ybWF0LFxuICAgICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBieXRlczogQnVmZmVyLmZyb20oY29udGVudEVsZW1lbnQuaW1hZ2Uuc291cmNlLmJ5dGVzLCAnYmFzZTY0JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSB0eXBlIGNvbmZvcm1zIHRvIEJlZHJvY2sncyB0eXBlIGFuZCBpdCdzIHNhZmUgdG8gY2FzdC5cbiAgICAgICAgICBtZXNzYWdlQ29udGVudC5wdXNoKGNvbnRlbnRFbGVtZW50IGFzIENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICByb2xlOiBtZXNzYWdlLnJvbGUsXG4gICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2VDb250ZW50LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlcztcbiAgfTtcblxuICBwcml2YXRlIGNyZWF0ZVRvb2xDb25maWd1cmF0aW9uID0gKCk6IFRvb2xDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAodGhpcy5hbGxUb29scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvb2xzOiB0aGlzLmFsbFRvb2xzLm1hcCgodCk6IFRvb2wgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvb2xTcGVjOiB7XG4gICAgICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2FzdCB0byBiZWRyb2NrIHR5cGUgYXMgd2UncmUgdXNpbmcgZGlmZmVyZW50IHR5cGVzIHRvIGRlc2NyaWJlIEpTT04gc2NoZW1hIGluIG91ciBBUEkuXG4gICAgICAgICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgcnVudGltZSBjb21wYXRpYmxlLlxuICAgICAgICAgICAgaW5wdXRTY2hlbWE6IHQuaW5wdXRTY2hlbWEgYXMgVG9vbElucHV0U2NoZW1hLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgZXhlY3V0ZVRvb2wgPSBhc3luYyAoXG4gICAgdG9vbFVzZUJsb2NrOiBDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlclxuICApOiBQcm9taXNlPENvbnRlbnRCbG9jaz4gPT4ge1xuICAgIGlmICghdG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0JlZHJvY2sgdG9vbCB1c2UgcmVzcG9uc2UgaXMgbWlzc2luZyBhIHRvb2wgbmFtZScpO1xuICAgIH1cbiAgICBjb25zdCB0b29sID0gdGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5nZXQodG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSk7XG4gICAgaWYgKCF0b29sKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEJlZHJvY2sgdG9vbCB1c2UgcmVzcG9uc2UgY29udGFpbnMgdW5rbm93biB0b29sICcke3Rvb2xVc2VCbG9jay50b29sVXNlLm5hbWV9J2BcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbnZva2luZyB0b29sICR7dG9vbC5uYW1lfWApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1Rvb2wgaW5wdXQ6JywgdG9vbFVzZUJsb2NrLnRvb2xVc2UuaW5wdXQpO1xuICAgICAgY29uc3QgdG9vbFJlc3BvbnNlID0gYXdhaXQgdG9vbC5leGVjdXRlKHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0KTtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oYFJlY2VpdmVkIHJlc3BvbnNlIGZyb20gJHt0b29sLm5hbWV9IHRvb2xgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHRvb2xSZXNwb25zZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgY29udGVudDogW3Rvb2xSZXNwb25zZV0sXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgICB0b29sVXNlSWQ6IHRvb2xVc2VCbG9jay50b29sVXNlLnRvb2xVc2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7IHRleHQ6IGUudG9TdHJpbmcoKSB9XSxcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbFJlc3VsdDoge1xuICAgICAgICAgIHRvb2xVc2VJZDogdG9vbFVzZUJsb2NrLnRvb2xVc2UudG9vbFVzZUlkLFxuICAgICAgICAgIGNvbnRlbnQ6IFt7IHRleHQ6ICd1bmtub3duIGVycm9yIG9jY3VycmVkJyB9XSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFheUM7QUFPekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUUvRixxQ0FBMkM7QUFDM0MsK0RBQTBEO0FBRTFEOzs7R0FHRztBQUNILE1BQWEsc0JBQXNCO0lBUWpDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDN0MsZUFBc0MsRUFDckIsZ0JBQXNDLElBQUksNkNBQW9CLENBQzdFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FDNUMsRUFDRCxrQkFBa0IsR0FBRyxJQUFJLHlEQUFrQyxDQUFDLEtBQUssQ0FBQyxFQUNqRCwwQkFBMEIsSUFBSSw0RUFBbUMsQ0FDaEYsS0FBSyxDQUNOLEVBQ0QsaUJBQWlCLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxLQUFLLENBQUMsRUFDL0IsU0FBUyxPQUFPOztRQVZoQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QixrQkFBYSxHQUFiLGFBQWEsQ0FFN0I7UUFFZ0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUV2QztRQUVnQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBbEJsQix5QkFBb0IsR0FDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNLLHFCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBOEQzRSxlQUFVLEdBQUcsS0FBSyxJQUE2QixFQUFFOztZQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxHQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBRWhDLE1BQU0sUUFBUSxHQUNaLE1BQU0sSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFFakQsSUFBSSxlQUFzQyxDQUFDO1lBQzNDLEdBQUc7Z0JBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2xELE1BQU0sb0JBQW9CLEdBQXlCO29CQUNqRCxPQUFPO29CQUNQLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN2QixNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztvQkFDaEMsZUFBZSxFQUFFLHNCQUFzQjtvQkFDdkMsVUFBVTtpQkFDWCxDQUFDO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxJQUFJLHdDQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FDMUMsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxpREFBaUQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFDdEYsZUFBZSxDQUFDLEtBQUssQ0FDdEIsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDakUsSUFBSSxNQUFBLGVBQWUsQ0FBQyxNQUFNLDBDQUFFLE9BQU8sRUFBRTtvQkFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFBLGVBQWUsQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNoRDtnQkFDRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO29CQUM3QyxNQUFNLHFCQUFxQixHQUN6QixNQUFBLE1BQUEsTUFBQSxlQUFlLENBQUMsTUFBTSwwQ0FBRSxPQUFPLDBDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDO29CQUNqRCxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQ2hELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUNPLENBQUM7b0JBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUN0RCxDQUFDLEtBQUssRUFBRSxFQUFFOzt3QkFDUixPQUFBLENBQUEsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRSxJQUFJOzRCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFDLENBQUE7cUJBQUEsQ0FDakQsQ0FBQztvQkFDRixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2xDLG9FQUFvRTt3QkFDcEUsdUNBQXVDO3dCQUN2QyxPQUFPLG1CQUFtQixDQUFDO3FCQUM1QjtvQkFDRCxNQUFNLHlCQUF5QixHQUF3QixFQUFFLENBQUM7b0JBQzFELEtBQUssTUFBTSxvQkFBb0IsSUFBSSxhQUFhLEVBQUU7d0JBQ2hELE1BQU0sWUFBWSxHQUNoQixvQkFBa0QsQ0FBQzt3QkFDckQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3BFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3FCQUN4RDtvQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFBRSx5QkFBeUI7cUJBQ25DLENBQUMsQ0FBQztpQkFDSjthQUNGLFFBQVEsZUFBZSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7WUFFcEQsT0FBTyxNQUFBLE1BQUEsTUFBQSxlQUFlLENBQUMsTUFBTSwwQ0FBRSxPQUFPLDBDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FBQztRQWlMRjs7OztXQUlHO1FBQ0ssc0NBQWlDLEdBQUcsS0FBSyxJQUUvQyxFQUFFOztZQUNGLE1BQU0sUUFBUSxHQUFtQixFQUFFLENBQUM7WUFDcEMsTUFBTSxhQUFhLEdBQ2pCLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekQsS0FBSyxNQUFNLE9BQU8sSUFBSSxhQUFhLEVBQUU7Z0JBQ25DLE1BQU0sY0FBYyxHQUF3QixFQUFFLENBQUM7Z0JBQy9DLEtBQUssTUFBTSxjQUFjLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtvQkFDNUMsSUFBSSxPQUFPLENBQUEsTUFBQSxNQUFBLGNBQWMsQ0FBQyxLQUFLLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxDQUFBLEtBQUssUUFBUSxFQUFFO3dCQUMzRCxjQUFjLENBQUMsSUFBSSxDQUFDOzRCQUNsQixLQUFLLEVBQUU7Z0NBQ0wsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQ0FDbkMsTUFBTSxFQUFFO29DQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7aUNBQ2hFOzZCQUNGO3lCQUNGLENBQUMsQ0FBQztxQkFDSjt5QkFBTTt3QkFDTCxtRUFBbUU7d0JBQ25FLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBOEIsQ0FBQyxDQUFDO3FCQUNyRDtpQkFDRjtnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLENBQUMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRU0sNEJBQXVCLEdBQUcsR0FBa0MsRUFBRTtZQUNwRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFFRCxPQUFPO2dCQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBUSxFQUFFO29CQUNuQyxPQUFPO3dCQUNMLFFBQVEsRUFBRTs0QkFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7NEJBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXOzRCQUMxQixxR0FBcUc7NEJBQ3JHLHNDQUFzQzs0QkFDdEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUE4Qjt5QkFDOUM7cUJBQ0YsQ0FBQztnQkFDSixDQUFDLENBQUM7YUFDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRU0sZ0JBQVcsR0FBRyxLQUFLLEVBQ3pCLFlBQXdDLEVBQ2pCLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUM5QixNQUFNLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsTUFBTSxLQUFLLENBQ1Qsb0RBQW9ELFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQ2pGLENBQUM7YUFDSDtZQUNELElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLE9BQU87b0JBQ0wsVUFBVSxFQUFFO3dCQUNWLFNBQVMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVM7d0JBQ3pDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQzt3QkFDdkIsTUFBTSxFQUFFLFNBQVM7cUJBQ2xCO2lCQUNGLENBQUM7YUFDSDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRTtvQkFDdEIsT0FBTzt3QkFDTCxVQUFVLEVBQUU7NEJBQ1YsU0FBUyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUzs0QkFDekMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7NEJBQ2pDLE1BQU0sRUFBRSxPQUFPO3lCQUNoQjtxQkFDRixDQUFDO2lCQUNIO2dCQUNELE9BQU87b0JBQ0wsVUFBVSxFQUFFO3dCQUNWLFNBQVMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVM7d0JBQ3pDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLENBQUM7d0JBQzdDLE1BQU0sRUFBRSxPQUFPO3FCQUNoQjtpQkFDRixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUM7UUE3WEEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUNwQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQixnREFBZ0Q7WUFDaEQsNkdBQTZHO1lBQzdHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2dCQUN0QyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixDQUFDLEVBQ0Q7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSw2QkFBNkI7U0FDcEMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixHQUFHLGtCQUFrQixDQUFDLGFBQWEsRUFBRTtZQUNyQyxHQUFHLGVBQWU7U0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLDBDQUFFLFdBQVcsbUNBQUksRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN6QyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksd0JBQWUsQ0FDdkIsa0RBQWtEO2dCQUNoRCxHQUFHLGNBQWM7YUFDbEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDaEIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQWlFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxDQUFDLG1CQUFtQjs7UUFDeEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsR0FDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FDWixNQUFNLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBRWpELElBQUksZUFBNEMsQ0FBQztRQUNqRCxzRUFBc0U7UUFDdEUsNENBQTRDO1FBQzVDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLDhDQUE4QztRQUM5Qyx5RUFBeUU7UUFDekUsTUFBTSxzQkFBc0IsR0FBZ0MsRUFBRSxDQUFDO1FBQy9ELEdBQUc7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNsRCxNQUFNLG9CQUFvQixHQUErQjtnQkFDdkQsT0FBTztnQkFDUCxRQUFRLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLGVBQWUsRUFBRSxzQkFBc0I7Z0JBQ3ZDLFVBQVU7YUFDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQ0FBa0MsRUFDbEMsb0JBQW9CLENBQ3JCLENBQUM7WUFDRixlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsSUFBSSw4Q0FBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsd0RBQXdELGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQzlGLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxZQUFvRCxDQUFDO1lBQ3pELElBQUksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksSUFBSSxHQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLFlBQVksR0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLDREQUE0RDtZQUM1RCxNQUFNLDJCQUEyQixHQUFZO2dCQUMzQyxJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsRUFBRTthQUNaLENBQUM7WUFFRixJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO29CQUN0QiwyQkFBMkIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7aUJBQzVEO3FCQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO29CQUNsQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixtQkFBbUIsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksTUFBQSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSywwQ0FBRSxPQUFPLEVBQUU7d0JBQzFDLFlBQVksR0FBRzs0QkFDYixPQUFPLEVBQUU7Z0NBQ1AsR0FBRyxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLDBDQUFFLE9BQU87Z0NBQ3pDLEtBQUssRUFBRSxTQUFTOzZCQUNqQjt5QkFDRixDQUFDO3FCQUNIO2lCQUNGO3FCQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO29CQUNsQyxJQUFJLE1BQUEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssMENBQUUsT0FBTyxFQUFFO3dCQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFOzRCQUNoRCxZQUFZLEdBQUcsRUFBRSxDQUFDO3lCQUNuQjt3QkFDRCxZQUFZLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO3FCQUM3RDt5QkFBTSxJQUFJLE1BQUEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssMENBQUUsSUFBSSxFQUFFO3dCQUM5QyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQzNDLE1BQU07NEJBQ0osc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQzdELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7NEJBQ3pDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCOzRCQUNwRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUk7NEJBQ3BELGlCQUFpQixFQUFFLFVBQVU7NEJBQzdCLHNCQUFzQixFQUFFLGVBQWU7eUJBQ3hDLENBQUM7d0JBQ0YsbUJBQW1CLEdBQUcsZUFBZSxDQUFDO3dCQUN0QyxlQUFlLEVBQUUsQ0FBQztxQkFDbkI7aUJBQ0Y7cUJBQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2pDLElBQUksWUFBWSxFQUFFO3dCQUNoQixZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUN0RCxNQUFBLDJCQUEyQixDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3dCQUN4RCxJQUNFLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSTs0QkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUNwRDs0QkFDQSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7NEJBQzVCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzs0QkFDMUMsTUFBTTtnQ0FDSixzQkFBc0IsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUM7Z0NBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7Z0NBQ3pDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO2dDQUNwRCxpQkFBaUIsRUFBRSxVQUFVO2dDQUM3QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQzs2QkFDbEQsQ0FBQzs0QkFDRixjQUFjLEdBQUcsVUFBVSxDQUFDOzRCQUM1QixVQUFVLEVBQUUsQ0FBQzt5QkFDZDt3QkFDRCxZQUFZLEdBQUcsU0FBUyxDQUFDO3dCQUN6QixZQUFZLEdBQUcsRUFBRSxDQUFDO3FCQUNuQjt5QkFBTTt3QkFDTCxNQUFBLDJCQUEyQixDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFDOzRCQUN4QyxJQUFJO3lCQUNMLENBQUMsQ0FBQzt3QkFDSCxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUN0QyxNQUFNOzRCQUNKLHNCQUFzQixFQUFFLENBQUMsR0FBRyxzQkFBc0IsQ0FBQzs0QkFDbkQsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYzs0QkFDekMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7NEJBQ3BELGlCQUFpQixFQUFFLFVBQVU7NEJBQzdCLHVCQUF1QixFQUFFLG1CQUFtQjt5QkFDN0MsQ0FBQzt3QkFDRixJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUNWLGNBQWMsR0FBRyxVQUFVLENBQUM7d0JBQzVCLFVBQVUsRUFBRSxDQUFDO3FCQUNkO2lCQUNGO3FCQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRTtvQkFDNUIsVUFBVSxHQUFHLE1BQUEsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FBQztpQkFDakQ7YUFDRjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLCtDQUErQyxFQUMvQywyQkFBMkIsQ0FDNUIsQ0FBQztZQUNGLElBQUksb0JBQW9CLEVBQUU7Z0JBQ3hCLG9FQUFvRTtnQkFDcEUsdUNBQXVDO2dCQUN2QyxNQUFNO29CQUNKLHNCQUFzQixFQUFFLENBQUMsR0FBRyxzQkFBc0IsQ0FBQztvQkFDbkQsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYztvQkFDekMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7b0JBQ3BELGlCQUFpQixFQUFFLGNBQWM7b0JBQ2pDLFVBQVUsRUFBRSxVQUFVO2lCQUN2QixDQUFDO2dCQUNGLE9BQU87YUFDUjtZQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMzQyxJQUFJLFVBQVUsS0FBSyxVQUFVLEVBQUU7Z0JBQzdCLE1BQU0scUJBQXFCLEdBQUcsTUFBQSwyQkFBMkIsQ0FBQyxPQUFPLG1DQUFJLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUNoRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FDTyxDQUFDO2dCQUN2QyxNQUFNLHlCQUF5QixHQUF3QixFQUFFLENBQUM7Z0JBQzFELEtBQUssTUFBTSxvQkFBb0IsSUFBSSxhQUFhLEVBQUU7b0JBQ2hELE1BQU0sWUFBWSxHQUNoQixvQkFBa0QsQ0FBQztvQkFDckQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3BFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxNQUFNO29CQUNaLE9BQU8sRUFBRSx5QkFBeUI7aUJBQ25DLENBQUMsQ0FBQzthQUNKO1NBQ0YsUUFBUSxVQUFVLEtBQUssVUFBVSxFQUFFO1FBRXBDLE1BQU07WUFDSixzQkFBc0IsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUM7WUFDbkQsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYztZQUN6Qyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtZQUNwRCxpQkFBaUIsRUFBRSxjQUFjO1lBQ2pDLFVBQVUsRUFBRSxVQUFVO1NBQ3ZCLENBQUM7SUFDSixDQUFDO0NBc0dGO0FBdFpELHdEQXNaQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlZHJvY2tSdW50aW1lQ2xpZW50LFxuICBDb250ZW50QmxvY2ssXG4gIENvbnZlcnNlQ29tbWFuZCxcbiAgQ29udmVyc2VDb21tYW5kSW5wdXQsXG4gIENvbnZlcnNlQ29tbWFuZE91dHB1dCxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kLFxuICBDb252ZXJzZVN0cmVhbUNvbW1hbmRJbnB1dCxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kT3V0cHV0LFxuICBNZXNzYWdlLFxuICBUb29sLFxuICBUb29sQ29uZmlndXJhdGlvbixcbiAgVG9vbElucHV0U2NoZW1hLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lJztcbmltcG9ydCB7XG4gIENvbnZlcnNhdGlvblR1cm5FdmVudCxcbiAgRXhlY3V0YWJsZVRvb2wsXG4gIFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bmssXG4gIFRvb2xEZWZpbml0aW9uLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IENvbnZlcnNhdGlvblR1cm5FdmVudFRvb2xzUHJvdmlkZXIgfSBmcm9tICcuL2V2ZW50LXRvb2xzLXByb3ZpZGVyJztcbmltcG9ydCB7IENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyIH0gZnJvbSAnLi9jb252ZXJzYXRpb25fbWVzc2FnZV9oaXN0b3J5X3JldHJpZXZlcic7XG5pbXBvcnQgKiBhcyBiZWRyb2NrIGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgVXNlckFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3VzZXJfYWdlbnRfcHJvdmlkZXInO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGludGVyYWN0aW5nIHdpdGggQmVkcm9jayBDb252ZXJzZSBBUElcbiAqIGluIG9yZGVyIHRvIHByb2R1Y2UgZmluYWwgcmVzcG9uc2UgdGhhdCBjYW4gYmUgc2VudCBiYWNrIHRvIGNhbGxlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEJlZHJvY2tDb252ZXJzZUFkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbFRvb2xzOiBBcnJheTxUb29sRGVmaW5pdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0YWJsZVRvb2xzOiBBcnJheTxFeGVjdXRhYmxlVG9vbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50VG9vbHM6IEFycmF5PFRvb2xEZWZpbml0aW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRhYmxlVG9vbEJ5TmFtZTogTWFwPHN0cmluZywgRXhlY3V0YWJsZVRvb2w+ID1cbiAgICBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50VG9vbEJ5TmFtZTogTWFwPHN0cmluZywgVG9vbERlZmluaXRpb24+ID0gbmV3IE1hcCgpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIEJlZHJvY2sgQ29udmVyc2UgQWRhcHRlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnQ6IENvbnZlcnNhdGlvblR1cm5FdmVudCxcbiAgICBhZGRpdGlvbmFsVG9vbHM6IEFycmF5PEV4ZWN1dGFibGVUb29sPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJlZHJvY2tDbGllbnQ6IEJlZHJvY2tSdW50aW1lQ2xpZW50ID0gbmV3IEJlZHJvY2tSdW50aW1lQ2xpZW50KFxuICAgICAgeyByZWdpb246IGV2ZW50Lm1vZGVsQ29uZmlndXJhdGlvbi5yZWdpb24gfVxuICAgICksXG4gICAgZXZlbnRUb29sc1Byb3ZpZGVyID0gbmV3IENvbnZlcnNhdGlvblR1cm5FdmVudFRvb2xzUHJvdmlkZXIoZXZlbnQpLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIgPSBuZXcgQ29udmVyc2F0aW9uTWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIoXG4gICAgICBldmVudFxuICAgICksXG4gICAgdXNlckFnZW50UHJvdmlkZXIgPSBuZXcgVXNlckFnZW50UHJvdmlkZXIoZXZlbnQpLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gY29uc29sZVxuICApIHtcbiAgICB0aGlzLmJlZHJvY2tDbGllbnQubWlkZGxld2FyZVN0YWNrLmFkZChcbiAgICAgIChuZXh0KSA9PiAoYXJncykgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFJlcXVlc3QgaXMgdHlwZWQgYXMgdW5rbm93bi5cbiAgICAgICAgLy8gQnV0IHRoaXMgaXMgcmVjb21tZW5kZWQgd2F5IHRvIGFsdGVyIGhlYWRlcnMgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy12My9ibG9iL21haW4vUkVBRE1FLm1kLlxuICAgICAgICBhcmdzLnJlcXVlc3QuaGVhZGVyc1sneC1hbXotdXNlci1hZ2VudCddID1cbiAgICAgICAgICB1c2VyQWdlbnRQcm92aWRlci5nZXRVc2VyQWdlbnQoKTtcbiAgICAgICAgcmV0dXJuIG5leHQoYXJncyk7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzdGVwOiAnYnVpbGQnLFxuICAgICAgICBuYW1lOiAnYW1wbGlmeS11c2VyLWFnZW50LWluamVjdG9yJyxcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZXhlY3V0YWJsZVRvb2xzID0gW1xuICAgICAgLi4uZXZlbnRUb29sc1Byb3ZpZGVyLmdldEV2ZW50VG9vbHMoKSxcbiAgICAgIC4uLmFkZGl0aW9uYWxUb29scyxcbiAgICBdO1xuICAgIHRoaXMuY2xpZW50VG9vbHMgPSB0aGlzLmV2ZW50LnRvb2xzQ29uZmlndXJhdGlvbj8uY2xpZW50VG9vbHMgPz8gW107XG4gICAgdGhpcy5hbGxUb29scyA9IFsuLi50aGlzLmV4ZWN1dGFibGVUb29scywgLi4udGhpcy5jbGllbnRUb29sc107XG4gICAgY29uc3QgZHVwbGljYXRlVG9vbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICB0aGlzLmV4ZWN1dGFibGVUb29scy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5oYXModC5uYW1lKSkge1xuICAgICAgICBkdXBsaWNhdGVUb29scy5hZGQodC5uYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuc2V0KHQubmFtZSwgdCk7XG4gICAgfSk7XG4gICAgdGhpcy5jbGllbnRUb29scy5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5oYXModC5uYW1lKSkge1xuICAgICAgICBkdXBsaWNhdGVUb29scy5hZGQodC5uYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNsaWVudFRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudFRvb2xCeU5hbWUuc2V0KHQubmFtZSwgdCk7XG4gICAgfSk7XG4gICAgaWYgKGR1cGxpY2F0ZVRvb2xzLnNpemUgPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgVG9vbHMgbXVzdCBoYXZlIHVuaXF1ZSBuYW1lcy4gRHVwbGljYXRlIHRvb2xzOiAke1tcbiAgICAgICAgICAuLi5kdXBsaWNhdGVUb29scyxcbiAgICAgICAgXS5qb2luKCcsICcpfS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFza0JlZHJvY2sgPSBhc3luYyAoKTogUHJvbWlzZTxDb250ZW50QmxvY2tbXT4gPT4ge1xuICAgIGNvbnN0IHsgbW9kZWxJZCwgc3lzdGVtUHJvbXB0LCBpbmZlcmVuY2VDb25maWd1cmF0aW9uIH0gPVxuICAgICAgdGhpcy5ldmVudC5tb2RlbENvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPVxuICAgICAgYXdhaXQgdGhpcy5nZXRFdmVudE1lc3NhZ2VzQXNCZWRyb2NrTWVzc2FnZXMoKTtcblxuICAgIGxldCBiZWRyb2NrUmVzcG9uc2U6IENvbnZlcnNlQ29tbWFuZE91dHB1dDtcbiAgICBkbyB7XG4gICAgICBjb25zdCB0b29sQ29uZmlnID0gdGhpcy5jcmVhdGVUb29sQ29uZmlndXJhdGlvbigpO1xuICAgICAgY29uc3QgY29udmVyc2VDb21tYW5kSW5wdXQ6IENvbnZlcnNlQ29tbWFuZElucHV0ID0ge1xuICAgICAgICBtb2RlbElkLFxuICAgICAgICBtZXNzYWdlczogWy4uLm1lc3NhZ2VzXSxcbiAgICAgICAgc3lzdGVtOiBbeyB0ZXh0OiBzeXN0ZW1Qcm9tcHQgfV0sXG4gICAgICAgIGluZmVyZW5jZUNvbmZpZzogaW5mZXJlbmNlQ29uZmlndXJhdGlvbixcbiAgICAgICAgdG9vbENvbmZpZyxcbiAgICAgIH07XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKCdTZW5kaW5nIEJlZHJvY2sgQ29udmVyc2UgcmVxdWVzdCcpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0JlZHJvY2sgQ29udmVyc2UgcmVxdWVzdDonLCBjb252ZXJzZUNvbW1hbmRJbnB1dCk7XG4gICAgICBiZWRyb2NrUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJlZHJvY2tDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IENvbnZlcnNlQ29tbWFuZChjb252ZXJzZUNvbW1hbmRJbnB1dClcbiAgICAgICk7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICBgUmVjZWl2ZWQgQmVkcm9jayBDb252ZXJzZSByZXNwb25zZSwgcmVxdWVzdElkPSR7YmVkcm9ja1Jlc3BvbnNlLiRtZXRhZGF0YS5yZXF1ZXN0SWR9YCxcbiAgICAgICAgYmVkcm9ja1Jlc3BvbnNlLnVzYWdlXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0JlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2U6JywgYmVkcm9ja1Jlc3BvbnNlKTtcbiAgICAgIGlmIChiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBpZiAoYmVkcm9ja1Jlc3BvbnNlLnN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50QmxvY2tzID1cbiAgICAgICAgICBiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlPy5jb250ZW50ID8/IFtdO1xuICAgICAgICBjb25zdCB0b29sVXNlQmxvY2tzID0gcmVzcG9uc2VDb250ZW50QmxvY2tzLmZpbHRlcihcbiAgICAgICAgICAoYmxvY2spID0+ICd0b29sVXNlJyBpbiBibG9ja1xuICAgICAgICApIGFzIEFycmF5PENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyPjtcbiAgICAgICAgY29uc3QgY2xpZW50VG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PlxuICAgICAgICAgICAgYmxvY2sudG9vbFVzZT8ubmFtZSAmJlxuICAgICAgICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyhibG9jay50b29sVXNlPy5uYW1lKVxuICAgICAgICApO1xuICAgICAgICBpZiAoY2xpZW50VG9vbFVzZUJsb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gRm9yIG5vdyBpZiBhbnkgb2YgY2xpZW50IHRvb2xzIGlzIHVzZWQgd2UgaWdub3JlIGV4ZWN1dGFibGUgdG9vbHNcbiAgICAgICAgICAvLyBhbmQgcHJvcGFnYXRlIHJlc3VsdCBiYWNrIHRvIGNsaWVudC5cbiAgICAgICAgICByZXR1cm4gY2xpZW50VG9vbFVzZUJsb2NrcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzOiBBcnJheTxDb250ZW50QmxvY2s+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2VDb250ZW50QmxvY2sgb2YgdG9vbFVzZUJsb2Nrcykge1xuICAgICAgICAgIGNvbnN0IHRvb2xVc2VCbG9jayA9XG4gICAgICAgICAgICByZXNwb25zZUNvbnRlbnRCbG9jayBhcyBDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcjtcbiAgICAgICAgICBjb25zdCB0b29sUmVzdWx0Q29udGVudEJsb2NrID0gYXdhaXQgdGhpcy5leGVjdXRlVG9vbCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgIHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MucHVzaCh0b29sUmVzdWx0Q29udGVudEJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgICAgY29udGVudDogdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoYmVkcm9ja1Jlc3BvbnNlLnN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpO1xuXG4gICAgcmV0dXJuIGJlZHJvY2tSZXNwb25zZS5vdXRwdXQ/Lm1lc3NhZ2U/LmNvbnRlbnQgPz8gW107XG4gIH07XG5cbiAgLyoqXG4gICAqIEFza3MgQmVkcm9jayBmb3IgcmVzcG9uc2UgdXNpbmcgc3RyZWFtaW5nIHZlcnNpb24gb2YgQ29udmVyc2UgQVBJLlxuICAgKi9cbiAgYXN5bmMgKmFza0JlZHJvY2tTdHJlYW1pbmcoKTogQXN5bmNHZW5lcmF0b3I8U3RyZWFtaW5nUmVzcG9uc2VDaHVuaz4ge1xuICAgIGNvbnN0IHsgbW9kZWxJZCwgc3lzdGVtUHJvbXB0LCBpbmZlcmVuY2VDb25maWd1cmF0aW9uIH0gPVxuICAgICAgdGhpcy5ldmVudC5tb2RlbENvbmZpZ3VyYXRpb247XG5cbiAgICBjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPVxuICAgICAgYXdhaXQgdGhpcy5nZXRFdmVudE1lc3NhZ2VzQXNCZWRyb2NrTWVzc2FnZXMoKTtcblxuICAgIGxldCBiZWRyb2NrUmVzcG9uc2U6IENvbnZlcnNlU3RyZWFtQ29tbWFuZE91dHB1dDtcbiAgICAvLyBrZWVwIG91ciBvd24gaW5kZXhpbmcgZm9yIGJsb2NrcyBpbnN0ZWFkIG9mIHVzaW5nIEJlZHJvY2sncyBpbmRleGVzXG4gICAgLy8gc2luY2Ugd2Ugc3RyZWFtIHN1YnNldCBvZiB0aGVzZSB1cHN0cmVhbS5cbiAgICBsZXQgYmxvY2tJbmRleCA9IDA7XG4gICAgbGV0IGxhc3RCbG9ja0luZGV4ID0gMDtcbiAgICBsZXQgc3RvcFJlYXNvbiA9ICcnO1xuICAgIC8vIEFjY3VtdWxhdGVzIGNsaWVudCBmYWNpbmcgY29udGVudCBwZXIgdHVybi5cbiAgICAvLyBTbyB0aGF0IHVwc3RyZWFtIGNhbiBwZXJzaXN0IGZ1bGwgbWVzc2FnZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW1pbmcuXG4gICAgY29uc3QgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogQXJyYXk8YmVkcm9jay5Db250ZW50QmxvY2s+ID0gW107XG4gICAgZG8ge1xuICAgICAgY29uc3QgdG9vbENvbmZpZyA9IHRoaXMuY3JlYXRlVG9vbENvbmZpZ3VyYXRpb24oKTtcbiAgICAgIGNvbnN0IGNvbnZlcnNlQ29tbWFuZElucHV0OiBDb252ZXJzZVN0cmVhbUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgbW9kZWxJZCxcbiAgICAgICAgbWVzc2FnZXM6IFsuLi5tZXNzYWdlc10sXG4gICAgICAgIHN5c3RlbTogW3sgdGV4dDogc3lzdGVtUHJvbXB0IH1dLFxuICAgICAgICBpbmZlcmVuY2VDb25maWc6IGluZmVyZW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHRvb2xDb25maWcsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU2VuZGluZyBCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXF1ZXN0Jyk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ0JlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlcXVlc3Q6JyxcbiAgICAgICAgY29udmVyc2VDb21tYW5kSW5wdXRcbiAgICAgICk7XG4gICAgICBiZWRyb2NrUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJlZHJvY2tDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IENvbnZlcnNlU3RyZWFtQ29tbWFuZChjb252ZXJzZUNvbW1hbmRJbnB1dClcbiAgICAgICk7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICBgUmVjZWl2ZWQgQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVzcG9uc2UsIHJlcXVlc3RJZD0ke2JlZHJvY2tSZXNwb25zZS4kbWV0YWRhdGEucmVxdWVzdElkfWBcbiAgICAgICk7XG4gICAgICBpZiAoIWJlZHJvY2tSZXNwb25zZS5zdHJlYW0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCZWRyb2NrIHJlc3BvbnNlIGlzIG1pc3Npbmcgc3RyZWFtJyk7XG4gICAgICB9XG4gICAgICBsZXQgdG9vbFVzZUJsb2NrOiBDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBjbGllbnRUb29sc1JlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgbGV0IHRleHQ6IHN0cmluZyA9ICcnO1xuICAgICAgbGV0IHRvb2xVc2VJbnB1dDogc3RyaW5nID0gJyc7XG4gICAgICBsZXQgYmxvY2tEZWx0YUluZGV4ID0gMDtcbiAgICAgIGxldCBsYXN0QmxvY2tEZWx0YUluZGV4ID0gMDtcbiAgICAgIC8vIEFjY3VtdWxhdGUgY3VycmVudCBtZXNzYWdlIGZvciB0aGUgdG9vbCB1c2UgbG9vcCBwdXJwb3NlLlxuICAgICAgY29uc3QgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICByb2xlOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbnRlbnQ6IFtdLFxuICAgICAgfTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBiZWRyb2NrUmVzcG9uc2Uuc3RyZWFtKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXNwb25zZSBjaHVuazonLCBjaHVuayk7XG4gICAgICAgIGlmIChjaHVuay5tZXNzYWdlU3RhcnQpIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2Uucm9sZSA9IGNodW5rLm1lc3NhZ2VTdGFydC5yb2xlO1xuICAgICAgICB9IGVsc2UgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0KSB7XG4gICAgICAgICAgYmxvY2tEZWx0YUluZGV4ID0gMDtcbiAgICAgICAgICBsYXN0QmxvY2tEZWx0YUluZGV4ID0gMDtcbiAgICAgICAgICBpZiAoY2h1bmsuY29udGVudEJsb2NrU3RhcnQuc3RhcnQ/LnRvb2xVc2UpIHtcbiAgICAgICAgICAgIHRvb2xVc2VCbG9jayA9IHtcbiAgICAgICAgICAgICAgdG9vbFVzZToge1xuICAgICAgICAgICAgICAgIC4uLmNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0LnN0YXJ0Py50b29sVXNlLFxuICAgICAgICAgICAgICAgIGlucHV0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YSkge1xuICAgICAgICAgIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YT8udG9vbFVzZSkge1xuICAgICAgICAgICAgaWYgKCFjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YS50b29sVXNlLmlucHV0KSB7XG4gICAgICAgICAgICAgIHRvb2xVc2VJbnB1dCA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbFVzZUlucHV0ICs9IGNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRvb2xVc2UuaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YT8udGV4dCkge1xuICAgICAgICAgICAgdGV4dCArPSBjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YS50ZXh0O1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudCwgeyB0ZXh0IH1dLFxuICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgY29udGVudEJsb2NrVGV4dDogY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudGV4dCxcbiAgICAgICAgICAgICAgY29udGVudEJsb2NrSW5kZXg6IGJsb2NrSW5kZXgsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja0RlbHRhSW5kZXg6IGJsb2NrRGVsdGFJbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsYXN0QmxvY2tEZWx0YUluZGV4ID0gYmxvY2tEZWx0YUluZGV4O1xuICAgICAgICAgICAgYmxvY2tEZWx0YUluZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0b3ApIHtcbiAgICAgICAgICBpZiAodG9vbFVzZUJsb2NrKSB7XG4gICAgICAgICAgICB0b29sVXNlQmxvY2sudG9vbFVzZS5pbnB1dCA9IEpTT04ucGFyc2UodG9vbFVzZUlucHV0KTtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZS5jb250ZW50Py5wdXNoKHRvb2xVc2VCbG9jayk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUgJiZcbiAgICAgICAgICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyh0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNsaWVudFRvb2xzUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudC5wdXNoKHRvb2xVc2VCbG9jayk7XG4gICAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogYmxvY2tJbmRleCxcbiAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tUb29sVXNlOiBKU09OLnN0cmluZ2lmeSh0b29sVXNlQmxvY2spLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBsYXN0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXg7XG4gICAgICAgICAgICAgIGJsb2NrSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRvb2xVc2VCbG9jayA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRvb2xVc2VJbnB1dCA9ICcnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UuY29udGVudD8ucHVzaCh7XG4gICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQucHVzaCh7IHRleHQgfSk7XG4gICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IFsuLi5hY2N1bXVsYXRlZFR1cm5Db250ZW50XSxcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBibG9ja0luZGV4LFxuICAgICAgICAgICAgICBjb250ZW50QmxvY2tEb25lQXRJbmRleDogbGFzdEJsb2NrRGVsdGFJbmRleCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0ZXh0ID0gJyc7XG4gICAgICAgICAgICBsYXN0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXg7XG4gICAgICAgICAgICBibG9ja0luZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNodW5rLm1lc3NhZ2VTdG9wKSB7XG4gICAgICAgICAgc3RvcFJlYXNvbiA9IGNodW5rLm1lc3NhZ2VTdG9wLnN0b3BSZWFzb24gPz8gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAnQWNjdW11bGF0ZWQgQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVzcG9uc2U6JyxcbiAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlXG4gICAgICApO1xuICAgICAgaWYgKGNsaWVudFRvb2xzUmVxdWVzdGVkKSB7XG4gICAgICAgIC8vIEZvciBub3cgaWYgYW55IG9mIGNsaWVudCB0b29scyBpcyB1c2VkIHdlIGlnbm9yZSBleGVjdXRhYmxlIHRvb2xzXG4gICAgICAgIC8vIGFuZCBwcm9wYWdhdGUgcmVzdWx0IGJhY2sgdG8gY2xpZW50LlxuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogWy4uLmFjY3VtdWxhdGVkVHVybkNvbnRlbnRdLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgY29udGVudEJsb2NrSW5kZXg6IGxhc3RCbG9ja0luZGV4LFxuICAgICAgICAgIHN0b3BSZWFzb246IHN0b3BSZWFzb24sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2VzLnB1c2goYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlKTtcbiAgICAgIGlmIChzdG9wUmVhc29uID09PSAndG9vbF91c2UnKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrcyA9IGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZS5jb250ZW50ID8/IFtdO1xuICAgICAgICBjb25zdCB0b29sVXNlQmxvY2tzID0gcmVzcG9uc2VDb250ZW50QmxvY2tzLmZpbHRlcihcbiAgICAgICAgICAoYmxvY2spID0+ICd0b29sVXNlJyBpbiBibG9ja1xuICAgICAgICApIGFzIEFycmF5PENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyPjtcbiAgICAgICAgY29uc3QgdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrczogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrIG9mIHRvb2xVc2VCbG9ja3MpIHtcbiAgICAgICAgICBjb25zdCB0b29sVXNlQmxvY2sgPVxuICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50QmxvY2sgYXMgQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI7XG4gICAgICAgICAgY29uc3QgdG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRvb2wodG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLnB1c2godG9vbFJlc3VsdENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpO1xuXG4gICAgeWllbGQge1xuICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogWy4uLmFjY3VtdWxhdGVkVHVybkNvbnRlbnRdLFxuICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgY29udGVudEJsb2NrSW5kZXg6IGxhc3RCbG9ja0luZGV4LFxuICAgICAgc3RvcFJlYXNvbjogc3RvcFJlYXNvbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgZXZlbnQgbWVzc2FnZXMgdG8gQmVkcm9jayB0eXBlcy5cbiAgICogMS4gTWFrZXMgYSBjb3B5IHNvIHRoYXQgd2UgZG9uJ3QgbXV0YXRlIGV2ZW50LlxuICAgKiAyLiBEZWNvZGVzIEJhc2U2NCBlbmNvZGVkIGltYWdlcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgQXJyYXk8TWVzc2FnZT5cbiAgPiA9PiB7XG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID0gW107XG4gICAgY29uc3QgZXZlbnRNZXNzYWdlcyA9XG4gICAgICBhd2FpdCB0aGlzLm1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyLmdldE1lc3NhZ2VIaXN0b3J5KCk7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGV2ZW50TWVzc2FnZXMpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBcnJheTxDb250ZW50QmxvY2s+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNvbnRlbnRFbGVtZW50IG9mIG1lc3NhZ2UuY29udGVudCkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnRFbGVtZW50LmltYWdlPy5zb3VyY2U/LmJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnB1c2goe1xuICAgICAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICAgICAgZm9ybWF0OiBjb250ZW50RWxlbWVudC5pbWFnZS5mb3JtYXQsXG4gICAgICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgICAgIGJ5dGVzOiBCdWZmZXIuZnJvbShjb250ZW50RWxlbWVudC5pbWFnZS5zb3VyY2UuYnl0ZXMsICdiYXNlNjQnKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHR5cGUgY29uZm9ybXMgdG8gQmVkcm9jaydzIHR5cGUgYW5kIGl0J3Mgc2FmZSB0byBjYXN0LlxuICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnB1c2goY29udGVudEVsZW1lbnQgYXMgQ29udGVudEJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgIHJvbGU6IG1lc3NhZ2Uucm9sZSxcbiAgICAgICAgY29udGVudDogbWVzc2FnZUNvbnRlbnQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xuICB9O1xuXG4gIHByaXZhdGUgY3JlYXRlVG9vbENvbmZpZ3VyYXRpb24gPSAoKTogVG9vbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmICh0aGlzLmFsbFRvb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9vbHM6IHRoaXMuYWxsVG9vbHMubWFwKCh0KTogVG9vbCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9vbFNwZWM6IHtcbiAgICAgICAgICAgIG5hbWU6IHQubmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBjYXN0IHRvIGJlZHJvY2sgdHlwZSBhcyB3ZSdyZSB1c2luZyBkaWZmZXJlbnQgdHlwZXMgdG8gZGVzY3JpYmUgSlNPTiBzY2hlbWEgaW4gb3VyIEFQSS5cbiAgICAgICAgICAgIC8vIFRoZXNlIHR5cGVzIGFyZSBydW50aW1lIGNvbXBhdGlibGUuXG4gICAgICAgICAgICBpbnB1dFNjaGVtYTogdC5pbnB1dFNjaGVtYSBhcyBUb29sSW5wdXRTY2hlbWEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG4gIH07XG5cbiAgcHJpdmF0ZSBleGVjdXRlVG9vbCA9IGFzeW5jIChcbiAgICB0b29sVXNlQmxvY2s6IENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyXG4gICk6IFByb21pc2U8Q29udGVudEJsb2NrPiA9PiB7XG4gICAgaWYgKCF0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lKSB7XG4gICAgICB0aHJvdyBFcnJvcignQmVkcm9jayB0b29sIHVzZSByZXNwb25zZSBpcyBtaXNzaW5nIGEgdG9vbCBuYW1lJyk7XG4gICAgfVxuICAgIGNvbnN0IHRvb2wgPSB0aGlzLmV4ZWN1dGFibGVUb29sQnlOYW1lLmdldCh0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lKTtcbiAgICBpZiAoIXRvb2wpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQmVkcm9jayB0b29sIHVzZSByZXNwb25zZSBjb250YWlucyB1bmtub3duIHRvb2wgJyR7dG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZX0nYFxuICAgICAgKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oYEludm9raW5nIHRvb2wgJHt0b29sLm5hbWV9YCk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnVG9vbCBpbnB1dDonLCB0b29sVXNlQmxvY2sudG9vbFVzZS5pbnB1dCk7XG4gICAgICBjb25zdCB0b29sUmVzcG9uc2UgPSBhd2FpdCB0b29sLmV4ZWN1dGUodG9vbFVzZUJsb2NrLnRvb2xVc2UuaW5wdXQpO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgUmVjZWl2ZWQgcmVzcG9uc2UgZnJvbSAke3Rvb2wubmFtZX0gdG9vbGApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcodG9vbFJlc3BvbnNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2xSZXN1bHQ6IHtcbiAgICAgICAgICB0b29sVXNlSWQ6IHRvb2xVc2VCbG9jay50b29sVXNlLnRvb2xVc2VJZCxcbiAgICAgICAgICBjb250ZW50OiBbdG9vbFJlc3BvbnNlXSxcbiAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvb2xSZXN1bHQ6IHtcbiAgICAgICAgICAgIHRvb2xVc2VJZDogdG9vbFVzZUJsb2NrLnRvb2xVc2UudG9vbFVzZUlkLFxuICAgICAgICAgICAgY29udGVudDogW3sgdGV4dDogZS50b1N0cmluZygpIH1dLFxuICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgY29udGVudDogW3sgdGV4dDogJ3Vua25vd24gZXJyb3Igb2NjdXJyZWQnIH1dLFxuICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9O1xufVxuIl19
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.ConversationMessageHistoryRetriever = void 0;
|
4
4
|
const graphql_request_executor_1 = require("./graphql_request_executor");
|
5
|
+
const user_agent_provider_1 = require("./user_agent_provider");
|
5
6
|
/**
|
6
7
|
* These are all properties we have to pull.
|
7
8
|
* Unfortunately, GQL doesn't support wildcards.
|
@@ -65,7 +66,7 @@ class ConversationMessageHistoryRetriever {
|
|
65
66
|
/**
|
66
67
|
* Creates conversation message history retriever.
|
67
68
|
*/
|
68
|
-
constructor(event, graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(event.graphqlApiEndpoint, event.request.headers.authorization, event
|
69
|
+
constructor(event, graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(event.graphqlApiEndpoint, event.request.headers.authorization, new user_agent_provider_1.UserAgentProvider(event))) {
|
69
70
|
this.event = event;
|
70
71
|
this.graphqlRequestExecutor = graphqlRequestExecutor;
|
71
72
|
this.getMessageHistory = async () => {
|
@@ -259,4 +260,4 @@ class ConversationMessageHistoryRetriever {
|
|
259
260
|
}
|
260
261
|
}
|
261
262
|
exports.ConversationMessageHistoryRetriever = ConversationMessageHistoryRetriever;
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EseUVBQW9FO0FBbUNwRTs7OztHQUlHO0FBQ0gsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBZ0QvQixDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQWEsbUNBQW1DO0lBQzlDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDNUIseUJBQXlCLElBQUksaURBQXNCLENBQ2xFLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUMxQztRQUxnQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUM1QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBSXRDO1FBR0gsc0JBQWlCLEdBQUcsS0FBSyxJQUF5QyxFQUFFO1lBQ2xFLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRTNDLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQ2hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQzVDLENBQUM7WUFFRixtRkFBbUY7WUFDbkYseUVBQXlFO1lBQ3pFLCtCQUErQjtZQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDaEQsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMvQjtZQUVELDBEQUEwRDtZQUMxRCxNQUFNLCtCQUErQixHQUdqQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRTtvQkFDbkUsK0JBQStCLENBQUMsR0FBRyxDQUNqQyxPQUFPLENBQUMsdUJBQXVCLEVBQy9CLE9BQU8sQ0FDUixDQUFDO2lCQUNIO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCx5Q0FBeUM7WUFDekMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtnQkFDdkQsMkZBQTJGO2dCQUMzRixtR0FBbUc7Z0JBQ25HLCtHQUErRztnQkFDL0csd0RBQXdEO2dCQUN4RCw4RUFBOEU7Z0JBQzlFLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7b0JBQ2hDLGlGQUFpRjtvQkFDakYsT0FBTyxHQUFHLENBQUM7aUJBQ1o7Z0JBQ0QsSUFDRSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU07b0JBQ3ZCLENBQUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ2hELE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDMUM7b0JBQ0EsZ0VBQWdFO29CQUNoRSxvR0FBb0c7b0JBQ3BHLHVEQUF1RDtvQkFDdkQsT0FBTyxHQUFHLENBQUM7aUJBQ1o7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsTUFBTSxPQUFPLEdBQUcsU0FBUztvQkFDdkIsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDM0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBRXBCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUUxQyxtREFBbUQ7Z0JBQ25ELE1BQU0sNkJBQTZCLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUN2RSxPQUFPLENBQUMsRUFBRSxDQUNYLENBQUM7Z0JBQ0YsSUFBSSw2QkFBNkIsRUFBRTtvQkFDakMsR0FBRyxDQUFDLElBQUksQ0FBQzt3QkFDUCxJQUFJLEVBQUUsNkJBQTZCLENBQUMsSUFBSTt3QkFDeEMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLE9BQU87cUJBQy9DLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsRUFBRSxFQUFnQyxDQUFDLENBQUM7WUFFckMsK0RBQStEO1lBQy9ELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQztRQUVGOzs7Ozs7OztXQVFHO1FBQ0ssMEJBQXFCLEdBQUcsQ0FBQyxRQUFvQyxFQUFFLEVBQUU7WUFDdkUsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixZQUE2QyxFQUM3QyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUV2RCxzRkFBc0Y7WUFDdEYsTUFBTSw4QkFBOEIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3hFLE9BQU8sQ0FDTCxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUN6RSxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCx5Q0FBeUM7WUFDekMsSUFBSSw4QkFBOEIsSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sUUFBUSxDQUFDO2FBQ2pCO1lBRUQsTUFBTSxnQkFBZ0IsR0FBK0IsRUFBRSxDQUFDO1lBRXhELDBFQUEwRTtZQUMxRSxJQUFJLHNCQUFzQixHQUFvQyxTQUFTLENBQUM7WUFDeEUsOENBQThDO1lBQzlDLDRCQUE0QjtZQUM1QiwrREFBK0Q7WUFDL0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLDhCQUE4QixFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDL0MsTUFBTSw0QkFBNEIsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDaEUsdUJBQXVCLENBQ3hCLENBQUM7Z0JBQ0YsSUFBSSw0QkFBNEIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUM3Qyw4Q0FBOEM7b0JBQzlDLFNBQVM7aUJBQ1Y7Z0JBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFO29CQUMzQiwrQ0FBK0M7b0JBQy9DLHNCQUFzQixHQUFHO3dCQUN2QixJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixPQUFPLEVBQUUsNEJBQTRCO3FCQUN0QyxDQUFDO2lCQUNIO3FCQUFNLElBQUksc0JBQXNCLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO29CQUM3RCxrQ0FBa0M7b0JBQ2xDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUN0RTtxQkFBTTtvQkFDTCw0RUFBNEU7b0JBQzVFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO29CQUM5QyxzQkFBc0IsR0FBRzt3QkFDdkIsSUFBSSxFQUFFLGtCQUFrQjt3QkFDeEIsT0FBTyxFQUFFLDRCQUE0QjtxQkFDdEMsQ0FBQztpQkFDSDthQUNGO1lBQ0QseUJBQXlCO1lBQ3pCLElBQUksc0JBQXNCLEVBQUU7Z0JBQzFCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2FBQy9DO1lBRUQsNkJBQTZCO1lBQzdCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sZ0JBQWdCLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBRU0sc0JBQWlCLEdBQ3ZCLEtBQUssSUFBNkMsRUFBRTtZQUNsRCxNQUFNLEtBQUssR0FBRztnQ0FDWSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQjtjQUN0RSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFlBQVk7Z0JBQ3pDLHVCQUF1Qjs7O0tBR2xDLENBQUM7WUFDQSxNQUFNLFNBQVMsR0FBa0I7Z0JBQy9CLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjthQUNoQyxDQUFDO1lBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUcvRDtnQkFDQSxLQUFLO2dCQUNMLFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUM7UUFFSSxpQkFBWSxHQUFHLEtBQUssSUFFMUIsRUFBRTs7WUFDRixNQUFNLEtBQUssR0FBRztzQ0FDb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxzQkFBc0I7Y0FDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhOztrQkFFeEMsdUJBQXVCOzs7O0tBSXBDLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBbUI7Z0JBQ2hDLE1BQU0sRUFBRTtvQkFDTixjQUFjLEVBQUU7d0JBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYztxQkFDOUI7aUJBQ0Y7Z0JBQ0QsS0FBSyxFQUFFLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLG1DQUFJLElBQUk7YUFDN0QsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FHL0Q7Z0JBQ0EsS0FBSztnQkFDTCxTQUFTO2FBQ1YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxLQUFLLEdBQ1QsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVwRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7O2dCQUNyQixNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFOztvQkFDckMsSUFBSSxRQUFtQyxDQUFDO29CQUN4QyxLQUFLLFFBQVEsSUFBSSxZQUFZLEVBQUU7d0JBQzdCLDBFQUEwRTt3QkFDMUUsK0ZBQStGO3dCQUMvRixxREFBcUQ7d0JBQ3JELDJEQUEyRDt3QkFDM0QsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFOzRCQUNuQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDO3lCQUNwQztxQkFDRjtvQkFFRCxJQUFJLE9BQU8sQ0FBQSxNQUFBLFlBQVksQ0FBQyxPQUFPLDBDQUFFLEtBQUssQ0FBQSxLQUFLLFFBQVEsRUFBRTt3QkFDbkQsOERBQThEO3dCQUM5RCx5QkFBeUI7d0JBQ3pCLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDckU7b0JBQ0QsSUFBSSxNQUFBLFlBQVksQ0FBQyxVQUFVLDBDQUFFLE9BQU8sRUFBRTt3QkFDcEMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBRTs0QkFDakUsSUFBSSxPQUFPLHNCQUFzQixDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0NBQ25ELDBFQUEwRTtnQ0FDMUUseUJBQXlCO2dDQUN6QixzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDdEMsc0JBQXNCLENBQUMsSUFBSSxDQUM1QixDQUFDOzZCQUNIO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQztJQTdPQyxDQUFDO0NBOE9MO0FBelBELGtGQXlQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnZlcnNhdGlvbk1lc3NhZ2UsXG4gIENvbnZlcnNhdGlvbk1lc3NhZ2VDb250ZW50QmxvY2ssXG4gIENvbnZlcnNhdGlvblR1cm5FdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBHcmFwaHFsUmVxdWVzdEV4ZWN1dG9yIH0gZnJvbSAnLi9ncmFwaHFsX3JlcXVlc3RfZXhlY3V0b3InO1xuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0gPSBDb252ZXJzYXRpb25NZXNzYWdlICYge1xuICBpZDogc3RyaW5nO1xuICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZD86IHN0cmluZztcbiAgYWlDb250ZXh0PzogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIEdldFF1ZXJ5SW5wdXQgPSB7XG4gIGlkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBHZXRRdWVyeU91dHB1dCA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgQ29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtPjtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RRdWVyeUlucHV0ID0ge1xuICBmaWx0ZXI6IHtcbiAgICBjb252ZXJzYXRpb25JZDoge1xuICAgICAgZXE6IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBsaW1pdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTGlzdFF1ZXJ5T3V0cHV0ID0ge1xuICBkYXRhOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIGl0ZW1zOiBBcnJheTxDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0+O1xuICAgIH1cbiAgPjtcbn07XG5cbi8qKlxuICogVGhlc2UgYXJlIGFsbCBwcm9wZXJ0aWVzIHdlIGhhdmUgdG8gcHVsbC5cbiAqIFVuZm9ydHVuYXRlbHksIEdRTCBkb2Vzbid0IHN1cHBvcnQgd2lsZGNhcmRzLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZ3JhcGhxbC1zcGVjL2lzc3Vlcy8xMjdcbiAqL1xuY29uc3QgbWVzc2FnZUl0ZW1TZWxlY3Rpb25TZXQgPSBgXG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZFxuICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkXG4gICAgICAgICAgICAgICAgYWlDb250ZXh0XG4gICAgICAgICAgICAgICAgcm9sZVxuICAgICAgICAgICAgICAgIGNvbnRlbnQge1xuICAgICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0XG4gICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgICAgYnl0ZXNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdG9vbFJlc3VsdCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQge1xuICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaW1hZ2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBqc29uXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1xuICAgICAgICAgICAgICAgICAgICB0b29sVXNlSWRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRvb2xVc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFxuICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICAgIHRvb2xVc2VJZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbmA7XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcmV0cmlldmluZyBtZXNzYWdlIGhpc3RvcnkgdGhhdCBiZWxvbmdzIHRvIGNvbnZlcnNhdGlvbiB0dXJuIGV2ZW50LlxuICogSXQgcXVlcmllcyBBcHBTeW5jIHRvIGxpc3QgbWVzc2FnZXMgdGhhdCBiZWxvbmcgdG8gY29udmVyc2F0aW9uLlxuICogQWRkaXRpb25hbGx5LCBpdCBsb29rcyB1cCBhIGN1cnJlbnQgbWVzc2FnZSBpbiBjYXNlIGl0J3MgbWlzc2luZyBpbiB0aGUgbGlzdCBkdWUgdG8gZXZlbnR1YWwgY29uc2lzdGVuY3kuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb252ZXJzYXRpb25NZXNzYWdlSGlzdG9yeVJldHJpZXZlciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGNvbnZlcnNhdGlvbiBtZXNzYWdlIGhpc3RvcnkgcmV0cmlldmVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudDogQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JhcGhxbFJlcXVlc3RFeGVjdXRvciA9IG5ldyBHcmFwaHFsUmVxdWVzdEV4ZWN1dG9yKFxuICAgICAgZXZlbnQuZ3JhcGhxbEFwaUVuZHBvaW50LFxuICAgICAgZXZlbnQucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24sXG4gICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnNbJ3gtYW16LXVzZXItYWdlbnQnXVxuICAgIClcbiAgKSB7fVxuXG4gIGdldE1lc3NhZ2VIaXN0b3J5ID0gYXN5bmMgKCk6IFByb21pc2U8QXJyYXk8Q29udmVyc2F0aW9uTWVzc2FnZT4+ID0+IHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMubGlzdE1lc3NhZ2VzKCk7XG5cbiAgICBsZXQgY3VycmVudE1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uaWQgPT09IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZFxuICAgICk7XG5cbiAgICAvLyBUaGlzIGlzIGEgZmFsbGJhY2sgaW4gY2FzZSBjdXJyZW50IG1lc3NhZ2UgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgbWVzc2FnZSBsaXN0LlxuICAgIC8vIEkuZS4gaW4gYSBzaXR1YXRpb24gd2hlbiBmcmVzaGx5IHdyaXR0ZW4gbWVzc2FnZSBpcyBub3QgeWV0IHZpc2libGUgaW5cbiAgICAvLyBldmVudHVhbGx5IGNvbnNpc3RlbnQgcmVhZHMuXG4gICAgaWYgKCFjdXJyZW50TWVzc2FnZSkge1xuICAgICAgY3VycmVudE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRNZXNzYWdlKCk7XG4gICAgICBtZXNzYWdlcy5wdXNoKGN1cnJlbnRNZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvLyBJbmRleCBhc3Npc3RhbnQgbWVzc2FnZXMgYnkgY29ycmVzcG9uZGluZyB1c2VyIG1lc3NhZ2UuXG4gICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZDogTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgQ29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtXG4gICAgPiA9IG5ldyBNYXAoKTtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiBtZXNzYWdlLmFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkKSB7XG4gICAgICAgIGFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuc2V0KFxuICAgICAgICAgIG1lc3NhZ2UuYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVjb25jaWxlIGhpc3RvcnkgYW5kIGluamVjdCBhaUNvbnRleHRcbiAgICBjb25zdCBvcmRlcmVkTWVzc2FnZXMgPSBtZXNzYWdlcy5yZWR1Y2UoKGFjYywgY3VycmVudCkgPT4ge1xuICAgICAgLy8gQmVkcm9jayBleHBlY3RzIHRoYXQgbWVzc2FnZSBoaXN0b3J5IGlzIHVzZXItPmFzc2lzdGFudC0+dXNlci0+YXNzaXN0YW50LT4uLi4gYW5kIHNvIG9uLlxuICAgICAgLy8gVGhlIGNocm9ub2xvZ2ljYWwgb3JkZXIgZG9lc24ndCBhc3N1cmUgdGhpcyBvcmRlcmluZyBpZiB0aGVyZSB3ZXJlIGFueSBjb25jdXJyZW50IG1lc3NhZ2VzIHNlbnQuXG4gICAgICAvLyBUaGVyZWZvcmUsIGNvbnZlcnNhdGlvbiBpcyBvcmRlcmVkIGJ5IHVzZXIncyBtZXNzYWdlcyBvbmx5IGFuZCBjb3JyZXNwb25kaW5nIGFzc2lzdGFudCBtZXNzYWdlcyBhcmUgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gcmlnaHQgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGVpciBjcmVhdGVkQXQgdmFsdWUuXG4gICAgICAvLyBUaGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgR1FMIHF1ZXJ5IHJldHVybnMgbWVzc2FnZXMgc29ydGVkIGJ5IGNyZWF0ZWRBdC5cbiAgICAgIGlmIChjdXJyZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgIC8vIEluaXRpYWxseSwgc2tpcCBhc3Npc3RhbnQgbWVzc2FnZXMsIHRoZXNlIG1pZ2h0IGJlIG91dCBvZiBjaHJvbm9sb2dpY2FsIG9yZGVyLlxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50LnJvbGUgPT09ICd1c2VyJyAmJlxuICAgICAgICAhYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZC5oYXMoY3VycmVudC5pZCkgJiZcbiAgICAgICAgY3VycmVudC5pZCAhPT0gdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkXG4gICAgICApIHtcbiAgICAgICAgLy8gU2tpcCB1c2VyIG1lc3NhZ2VzIHRoYXQgZGlkbid0IGdldCBhbnN3ZXIgZnJvbSBhc3Npc3RhbnQgeWV0LlxuICAgICAgICAvLyBUaGVzZSBtaWdodCBiZSBzdGlsbCBcImluLWZsaWdodFwiLCBpLmUuIGFzc2lzdGFudCBpcyBzdGlsbCB3b3JraW5nIG9uIHRoZW0gaW4gc2VwYXJhdGUgaW52b2NhdGlvbi5cbiAgICAgICAgLy8gRXhjZXB0IGN1cnJlbnQgbWVzc2FnZSwgd2Ugd2FudCB0byBwcm9jZXNzIHRoYXQgb25lLlxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgY29uc3QgYWlDb250ZXh0ID0gY3VycmVudC5haUNvbnRleHQ7XG4gICAgICBjb25zdCBjb250ZW50ID0gYWlDb250ZXh0XG4gICAgICAgID8gWy4uLmN1cnJlbnQuY29udGVudCwgeyB0ZXh0OiBKU09OLnN0cmluZ2lmeShhaUNvbnRleHQpIH1dXG4gICAgICAgIDogY3VycmVudC5jb250ZW50O1xuXG4gICAgICBhY2MucHVzaCh7IHJvbGU6IGN1cnJlbnQucm9sZSwgY29udGVudCB9KTtcblxuICAgICAgLy8gRmluZCBhbmQgaW5zZXJ0IGNvcnJlc3BvbmRpbmcgYXNzaXN0YW50IG1lc3NhZ2UuXG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZSA9IGFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuZ2V0KFxuICAgICAgICBjdXJyZW50LmlkXG4gICAgICApO1xuICAgICAgaWYgKGNvcnJlc3BvbmRpbmdBc3Npc3RhbnRNZXNzYWdlKSB7XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICByb2xlOiBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZS5yb2xlLFxuICAgICAgICAgIGNvbnRlbnQ6IGNvcnJlc3BvbmRpbmdBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBBcnJheTxDb252ZXJzYXRpb25NZXNzYWdlPik7XG5cbiAgICAvLyBSZW1vdmUgdG9vbCB1c2FnZSBmcm9tIG5vbi1jdXJyZW50IHR1cm4gYW5kIHNxdWFzaCBtZXNzYWdlcy5cbiAgICByZXR1cm4gdGhpcy5zcXVhc2hOb25DdXJyZW50VHVybnMob3JkZXJlZE1lc3NhZ2VzKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRvb2wgdXNhZ2UgZnJvbSBub24tY3VycmVudCB0dXJucy5cbiAgICogVGhlIHRvb2wgdXNhZ2UgYW5kIHJlc3VsdCBibG9ja3MgZG9uJ3QgbWF0dGVyIGFmdGVyIGEgdHVybiBpcyBjb21wbGV0ZWQsXG4gICAqIGJ1dCBkbyBjb3N0IGV4dHJhIHRva2VucyB0byBwcm9jZXNzLlxuICAgKiBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6XG4gICAqIDEuIEZpbmQgd2hlcmUgY3VycmVudCB0dXJuIGJlZ2lucy4gSS5lLiBsYXN0IHVzZXIgbWVzc2FnZSB0aGF0IGlzbid0IHRvb2wgYmxvY2suXG4gICAqIDIuIFJlbW92ZSB0b29sVXNlIGFuZCB0b29sUmVzdWx0IGJsb2NrcyBiZWZvcmUgY3VycmVudCB0dXJuLlxuICAgKiAzLiBTcXVhc2ggY29udGludW91cyBzZXF1ZW5jZXMgb2YgbWVzc2FnZXMgdGhhdCBiZWxvbmcgdG8gc2FtZSAnbWVzc2FnZS5yb2xlJy5cbiAgICovXG4gIHByaXZhdGUgc3F1YXNoTm9uQ3VycmVudFR1cm5zID0gKG1lc3NhZ2VzOiBBcnJheTxDb252ZXJzYXRpb25NZXNzYWdlPikgPT4ge1xuICAgIGNvbnN0IGlzTm9uVG9vbEJsb2NrUHJlZGljYXRlID0gKFxuICAgICAgY29udGVudEJsb2NrOiBDb252ZXJzYXRpb25NZXNzYWdlQ29udGVudEJsb2NrXG4gICAgKSA9PiAhY29udGVudEJsb2NrLnRvb2xVc2UgJiYgIWNvbnRlbnRCbG9jay50b29sUmVzdWx0O1xuXG4gICAgLy8gZmluZCB3aGVyZSBjdXJyZW50IHR1cm4gYmVnaW5zLiBJLmUuIGxhc3QgdXNlciBtZXNzYWdlIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gdG9vbHNcbiAgICBjb25zdCBsYXN0Tm9uVG9vbFVzZVVzZXJNZXNzYWdlSW5kZXggPSBtZXNzYWdlcy5maW5kTGFzdEluZGV4KChtZXNzYWdlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyAmJiBtZXNzYWdlLmNvbnRlbnQuZmluZChpc05vblRvb2xCbG9ja1ByZWRpY2F0ZSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBObyBub24tY3VycmVudCB0dXJucywgZG9uJ3QgdHJhbnNmb3JtLlxuICAgIGlmIChsYXN0Tm9uVG9vbFVzZVVzZXJNZXNzYWdlSW5kZXggPD0gMCkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIGNvbnN0IHNxdWFzaGVkTWVzc2FnZXM6IEFycmF5PENvbnZlcnNhdGlvbk1lc3NhZ2U+ID0gW107XG5cbiAgICAvLyBEZWZpbmUgYSBcImJ1ZmZlclwiLiBJLmUuIGEgbWVzc2FnZSB3ZSBrZWVwIGFyb3VuZCBhbmQgc3F1YXNoIGNvbnRlbnQgb24uXG4gICAgbGV0IGN1cnJlbnRTcXVhc2hlZE1lc3NhZ2U6IENvbnZlcnNhdGlvbk1lc3NhZ2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgLy8gUHJvY2VzcyBtZXNzYWdlcyBiZWZvcmUgY3VycmVudCB0dXJuIGJlZ2luc1xuICAgIC8vIFJlbW92ZSB0b29sIHVzYWdlIGJsb2Nrcy5cbiAgICAvLyBDb21iaW5lIGNvbnRlbnQgZm9yIGNvbnNlY3V0aXZlIG1lc3NhZ2UgdGhhdCBoYXZlIHNhbWUgcm9sZS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhc3ROb25Ub29sVXNlVXNlck1lc3NhZ2VJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50TWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VSb2xlID0gY3VycmVudE1lc3NhZ2Uucm9sZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlTm9uVG9vbENvbnRlbnQgPSBjdXJyZW50TWVzc2FnZS5jb250ZW50LmZpbHRlcihcbiAgICAgICAgaXNOb25Ub29sQmxvY2tQcmVkaWNhdGVcbiAgICAgICk7XG4gICAgICBpZiAoY3VycmVudE1lc3NhZ2VOb25Ub29sQ29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gVG9vbCBvbmx5IG1lc3NhZ2UuIE5vdGhpbmcgdG8gc3F1YXNoLCBza2lwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJyZW50U3F1YXNoZWRNZXNzYWdlKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgc3F1YXNoZWQgeWV0LCBpbml0aWFsaXplIHRoZSBidWZmZXIuXG4gICAgICAgIGN1cnJlbnRTcXVhc2hlZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgcm9sZTogY3VycmVudE1lc3NhZ2VSb2xlLFxuICAgICAgICAgIGNvbnRlbnQ6IGN1cnJlbnRNZXNzYWdlTm9uVG9vbENvbnRlbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTcXVhc2hlZE1lc3NhZ2Uucm9sZSA9PT0gY3VycmVudE1lc3NhZ2VSb2xlKSB7XG4gICAgICAgIC8vIGlmIHJvbGUgaXMgc2FtZSBhcHBlbmQgY29udGVudC5cbiAgICAgICAgY3VycmVudFNxdWFzaGVkTWVzc2FnZS5jb250ZW50LnB1c2goLi4uY3VycmVudE1lc3NhZ2VOb25Ub29sQ29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiByb2xlIGZsaXBzIHB1c2ggY3VycmVudCBzcXVhc2hlZCBtZXNzYWdlIGFuZCByZS1pbml0aWFsaXplIHRoZSBidWZmZXIuXG4gICAgICAgIHNxdWFzaGVkTWVzc2FnZXMucHVzaChjdXJyZW50U3F1YXNoZWRNZXNzYWdlKTtcbiAgICAgICAgY3VycmVudFNxdWFzaGVkTWVzc2FnZSA9IHtcbiAgICAgICAgICByb2xlOiBjdXJyZW50TWVzc2FnZVJvbGUsXG4gICAgICAgICAgY29udGVudDogY3VycmVudE1lc3NhZ2VOb25Ub29sQ29udGVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZmx1c2ggdGhlIGxhc3QgYnVmZmVyLlxuICAgIGlmIChjdXJyZW50U3F1YXNoZWRNZXNzYWdlKSB7XG4gICAgICBzcXVhc2hlZE1lc3NhZ2VzLnB1c2goY3VycmVudFNxdWFzaGVkTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLy8gQXBwZW5kIGN1cnJlbnQgdHVybiBhcyBpcy5cbiAgICBzcXVhc2hlZE1lc3NhZ2VzLnB1c2goLi4ubWVzc2FnZXMuc2xpY2UobGFzdE5vblRvb2xVc2VVc2VyTWVzc2FnZUluZGV4KSk7XG4gICAgcmV0dXJuIHNxdWFzaGVkTWVzc2FnZXM7XG4gIH07XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50TWVzc2FnZSA9XG4gICAgYXN5bmMgKCk6IFByb21pc2U8Q29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtPiA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgICAgcXVlcnkgR2V0TWVzc2FnZSgkaWQ6ICR7dGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5LmdldFF1ZXJ5SW5wdXRUeXBlTmFtZX0hKSB7XG4gICAgICAgICAgICAke3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeU5hbWV9KGlkOiAkaWQpIHtcbiAgICAgICAgICAgICAgJHttZXNzYWdlSXRlbVNlbGVjdGlvblNldH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG4gICAgICBjb25zdCB2YXJpYWJsZXM6IEdldFF1ZXJ5SW5wdXQgPSB7XG4gICAgICAgIGlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3RFeGVjdXRvci5leGVjdXRlR3JhcGhxbDxcbiAgICAgICAgR2V0UXVlcnlJbnB1dCxcbiAgICAgICAgR2V0UXVlcnlPdXRwdXRcbiAgICAgID4oe1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhW3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeU5hbWVdO1xuICAgIH07XG5cbiAgcHJpdmF0ZSBsaXN0TWVzc2FnZXMgPSBhc3luYyAoKTogUHJvbWlzZTxcbiAgICBBcnJheTxDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0+XG4gID4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBxdWVyeSBMaXN0TWVzc2FnZXMoJGZpbHRlcjogJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5SW5wdXRUeXBlTmFtZX0hLCAkbGltaXQ6IEludCkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5TmFtZX0oZmlsdGVyOiAkZmlsdGVyLCBsaW1pdDogJGxpbWl0KSB7XG4gICAgICAgICAgICAgIGl0ZW1zIHtcbiAgICAgICAgICAgICAgICAke21lc3NhZ2VJdGVtU2VsZWN0aW9uU2V0fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBgO1xuICAgIGNvbnN0IHZhcmlhYmxlczogTGlzdFF1ZXJ5SW5wdXQgPSB7XG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHtcbiAgICAgICAgICBlcTogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsaW1pdDogdGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5Lmxpc3RRdWVyeUxpbWl0ID8/IDEwMDAsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdEV4ZWN1dG9yLmV4ZWN1dGVHcmFwaHFsPFxuICAgICAgTGlzdFF1ZXJ5SW5wdXQsXG4gICAgICBMaXN0UXVlcnlPdXRwdXRcbiAgICA+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlbXMgPVxuICAgICAgcmVzcG9uc2UuZGF0YVt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5TmFtZV0uaXRlbXM7XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmNvbnRlbnQ/LmZvckVhY2goKGNvbnRlbnRCbG9jaykgPT4ge1xuICAgICAgICBsZXQgcHJvcGVydHk6IGtleW9mIHR5cGVvZiBjb250ZW50QmxvY2s7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gY29udGVudEJsb2NrKSB7XG4gICAgICAgICAgLy8gRGVzZXJpYWxpemF0aW9uIG9mIEdyYXBoUWwgcXVlcnkgcmVzdWx0IHNldHMgdGhlc2UgcHJvcGVydGllcyB0byAnbnVsbCdcbiAgICAgICAgICAvLyBUaGlzIGNhbiB0cmlnZ2VyIEJlZHJvY2sgU0RLIHZhbGlkYXRpb24gYXMgaXQgZXhwZWN0cyAndW5kZWZpbmVkJyBpZiBwcm9wZXJ0aWVzIGFyZSBub3Qgc2V0LlxuICAgICAgICAgIC8vIFdlIGNhbid0IGZpeCBob3cgR3JhcGhRbCByZXNwb25zZSBpcyBkZXNlcmlhbGl6ZWQuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBhcHBseSB0aGlzIHRyYW5zZm9ybWF0aW9uIHRvIGZpeCB0aGUgZGF0YS5cbiAgICAgICAgICBpZiAoY29udGVudEJsb2NrW3Byb3BlcnR5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGVudEJsb2NrW3Byb3BlcnR5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnRCbG9jay50b29sVXNlPy5pbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyB0b29sVXNlLmlucHV0IG1heSBjb21lIGFzIHNlcmlhbGl6ZWQgSlNPTiBmb3IgQ2xpZW50IFRvb2xzLlxuICAgICAgICAgIC8vIFBhcnNlIGl0IGluIHRoYXQgY2FzZS5cbiAgICAgICAgICBjb250ZW50QmxvY2sudG9vbFVzZS5pbnB1dCA9IEpTT04ucGFyc2UoY29udGVudEJsb2NrLnRvb2xVc2UuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50QmxvY2sudG9vbFJlc3VsdD8uY29udGVudCkge1xuICAgICAgICAgIGNvbnRlbnRCbG9jay50b29sUmVzdWx0LmNvbnRlbnQuZm9yRWFjaCgodG9vbFJlc3VsdENvbnRlbnRCbG9jaykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b29sUmVzdWx0Q29udGVudEJsb2NrLmpzb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIC8vIHRvb2xSZXN1bHQuY29udGVudFtdLmpzb24gbWF5IGNvbWUgYXMgc2VyaWFsaXplZCBKU09OIGZvciBDbGllbnQgVG9vbHMuXG4gICAgICAgICAgICAgIC8vIFBhcnNlIGl0IGluIHRoYXQgY2FzZS5cbiAgICAgICAgICAgICAgdG9vbFJlc3VsdENvbnRlbnRCbG9jay5qc29uID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICB0b29sUmVzdWx0Q29udGVudEJsb2NrLmpzb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH07XG59XG4iXX0=
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EseUVBQW9FO0FBQ3BFLCtEQUEwRDtBQW1DMUQ7Ozs7R0FJRztBQUNILE1BQU0sdUJBQXVCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWdEL0IsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFhLG1DQUFtQztJQUM5Qzs7T0FFRztJQUNILFlBQ21CLEtBQTRCLEVBQzVCLHlCQUF5QixJQUFJLGlEQUFzQixDQUNsRSxLQUFLLENBQUMsa0JBQWtCLEVBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDbkMsSUFBSSx1Q0FBaUIsQ0FBQyxLQUFLLENBQUMsQ0FDN0I7UUFMZ0IsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDNUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUl0QztRQUdILHNCQUFpQixHQUFHLEtBQUssSUFBeUMsRUFBRTtZQUNsRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUUzQyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUNoQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUM1QyxDQUFDO1lBRUYsbUZBQW1GO1lBQ25GLHlFQUF5RTtZQUN6RSwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ2hELFFBQVEsQ0FB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LElBQUksT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dDQUNuRCwwRUFBMEU7Z0NBQzFFLHlCQUF5QjtnQ0FDekIsc0JBQXNCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3RDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsQ0FBQzs2QkFDSDt3QkFDSCxDQUFDLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7SUE3T0MsQ0FBQztDQThPTDtBQXpQRCxrRkF5UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb252ZXJzYXRpb25NZXNzYWdlLFxuICBDb252ZXJzYXRpb25NZXNzYWdlQ29udGVudEJsb2NrLFxuICBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgR3JhcGhxbFJlcXVlc3RFeGVjdXRvciB9IGZyb20gJy4vZ3JhcGhxbF9yZXF1ZXN0X2V4ZWN1dG9yJztcbmltcG9ydCB7IFVzZXJBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi91c2VyX2FnZW50X3Byb3ZpZGVyJztcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtID0gQ29udmVyc2F0aW9uTWVzc2FnZSAmIHtcbiAgaWQ6IHN0cmluZztcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ/OiBzdHJpbmc7XG4gIGFpQ29udGV4dD86IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBHZXRRdWVyeUlucHV0ID0ge1xuICBpZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgR2V0UXVlcnlPdXRwdXQgPSB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIENvbnZlcnNhdGlvbkhpc3RvcnlNZXNzYWdlSXRlbT47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UXVlcnlJbnB1dCA9IHtcbiAgZmlsdGVyOiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHtcbiAgICAgIGVxOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbiAgbGltaXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RRdWVyeU91dHB1dCA9IHtcbiAgZGF0YTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBpdGVtczogQXJyYXk8Q29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtPjtcbiAgICB9XG4gID47XG59O1xuXG4vKipcbiAqIFRoZXNlIGFyZSBhbGwgcHJvcGVydGllcyB3ZSBoYXZlIHRvIHB1bGwuXG4gKiBVbmZvcnR1bmF0ZWx5LCBHUUwgZG9lc24ndCBzdXBwb3J0IHdpbGRjYXJkcy5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsL2dyYXBocWwtc3BlYy9pc3N1ZXMvMTI3XG4gKi9cbmNvbnN0IG1lc3NhZ2VJdGVtU2VsZWN0aW9uU2V0ID0gYFxuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWRcbiAgICAgICAgICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZFxuICAgICAgICAgICAgICAgIGFpQ29udGV4dFxuICAgICAgICAgICAgICAgIHJvbGVcbiAgICAgICAgICAgICAgICBjb250ZW50IHtcbiAgICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBieXRlc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFxuICAgICAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpbWFnZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRvb2xSZXN1bHQge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGltYWdlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAganNvblxuICAgICAgICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgdG9vbFVzZUlkXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0b29sVXNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgICB0b29sVXNlSWRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5gO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHJldHJpZXZpbmcgbWVzc2FnZSBoaXN0b3J5IHRoYXQgYmVsb25ncyB0byBjb252ZXJzYXRpb24gdHVybiBldmVudC5cbiAqIEl0IHF1ZXJpZXMgQXBwU3luYyB0byBsaXN0IG1lc3NhZ2VzIHRoYXQgYmVsb25nIHRvIGNvbnZlcnNhdGlvbi5cbiAqIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgdXAgYSBjdXJyZW50IG1lc3NhZ2UgaW4gY2FzZSBpdCdzIG1pc3NpbmcgaW4gdGhlIGxpc3QgZHVlIHRvIGV2ZW50dWFsIGNvbnNpc3RlbmN5LlxuICovXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uTWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBjb252ZXJzYXRpb24gbWVzc2FnZSBoaXN0b3J5IHJldHJpZXZlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnQ6IENvbnZlcnNhdGlvblR1cm5FdmVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyYXBocWxSZXF1ZXN0RXhlY3V0b3IgPSBuZXcgR3JhcGhxbFJlcXVlc3RFeGVjdXRvcihcbiAgICAgIGV2ZW50LmdyYXBocWxBcGlFbmRwb2ludCxcbiAgICAgIGV2ZW50LnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uLFxuICAgICAgbmV3IFVzZXJBZ2VudFByb3ZpZGVyKGV2ZW50KVxuICAgIClcbiAgKSB7fVxuXG4gIGdldE1lc3NhZ2VIaXN0b3J5ID0gYXN5bmMgKCk6IFByb21pc2U8QXJyYXk8Q29udmVyc2F0aW9uTWVzc2FnZT4+ID0+IHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHRoaXMubGlzdE1lc3NhZ2VzKCk7XG5cbiAgICBsZXQgY3VycmVudE1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKFxuICAgICAgKG0pID0+IG0uaWQgPT09IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZFxuICAgICk7XG5cbiAgICAvLyBUaGlzIGlzIGEgZmFsbGJhY2sgaW4gY2FzZSBjdXJyZW50IG1lc3NhZ2UgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgbWVzc2FnZSBsaXN0LlxuICAgIC8vIEkuZS4gaW4gYSBzaXR1YXRpb24gd2hlbiBmcmVzaGx5IHdyaXR0ZW4gbWVzc2FnZSBpcyBub3QgeWV0IHZpc2libGUgaW5cbiAgICAvLyBldmVudHVhbGx5IGNvbnNpc3RlbnQgcmVhZHMuXG4gICAgaWYgKCFjdXJyZW50TWVzc2FnZSkge1xuICAgICAgY3VycmVudE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRNZXNzYWdlKCk7XG4gICAgICBtZXNzYWdlcy5wdXNoKGN1cnJlbnRNZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvLyBJbmRleCBhc3Npc3RhbnQgbWVzc2FnZXMgYnkgY29ycmVzcG9uZGluZyB1c2VyIG1lc3NhZ2UuXG4gICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZDogTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgQ29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtXG4gICAgPiA9IG5ldyBNYXAoKTtcbiAgICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiBtZXNzYWdlLmFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkKSB7XG4gICAgICAgIGFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuc2V0KFxuICAgICAgICAgIG1lc3NhZ2UuYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gUmVjb25jaWxlIGhpc3RvcnkgYW5kIGluamVjdCBhaUNvbnRleHRcbiAgICBjb25zdCBvcmRlcmVkTWVzc2FnZXMgPSBtZXNzYWdlcy5yZWR1Y2UoKGFjYywgY3VycmVudCkgPT4ge1xuICAgICAgLy8gQmVkcm9jayBleHBlY3RzIHRoYXQgbWVzc2FnZSBoaXN0b3J5IGlzIHVzZXItPmFzc2lzdGFudC0+dXNlci0+YXNzaXN0YW50LT4uLi4gYW5kIHNvIG9uLlxuICAgICAgLy8gVGhlIGNocm9ub2xvZ2ljYWwgb3JkZXIgZG9lc24ndCBhc3N1cmUgdGhpcyBvcmRlcmluZyBpZiB0aGVyZSB3ZXJlIGFueSBjb25jdXJyZW50IG1lc3NhZ2VzIHNlbnQuXG4gICAgICAvLyBUaGVyZWZvcmUsIGNvbnZlcnNhdGlvbiBpcyBvcmRlcmVkIGJ5IHVzZXIncyBtZXNzYWdlcyBvbmx5IGFuZCBjb3JyZXNwb25kaW5nIGFzc2lzdGFudCBtZXNzYWdlcyBhcmUgaW5zZXJ0ZWRcbiAgICAgIC8vIGludG8gcmlnaHQgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGVpciBjcmVhdGVkQXQgdmFsdWUuXG4gICAgICAvLyBUaGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgR1FMIHF1ZXJ5IHJldHVybnMgbWVzc2FnZXMgc29ydGVkIGJ5IGNyZWF0ZWRBdC5cbiAgICAgIGlmIChjdXJyZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgIC8vIEluaXRpYWxseSwgc2tpcCBhc3Npc3RhbnQgbWVzc2FnZXMsIHRoZXNlIG1pZ2h0IGJlIG91dCBvZiBjaHJvbm9sb2dpY2FsIG9yZGVyLlxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBjdXJyZW50LnJvbGUgPT09ICd1c2VyJyAmJlxuICAgICAgICAhYXNzaXN0YW50TWVzc2FnZUJ5VXNlck1lc3NhZ2VJZC5oYXMoY3VycmVudC5pZCkgJiZcbiAgICAgICAgY3VycmVudC5pZCAhPT0gdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkXG4gICAgICApIHtcbiAgICAgICAgLy8gU2tpcCB1c2VyIG1lc3NhZ2VzIHRoYXQgZGlkbid0IGdldCBhbnN3ZXIgZnJvbSBhc3Npc3RhbnQgeWV0LlxuICAgICAgICAvLyBUaGVzZSBtaWdodCBiZSBzdGlsbCBcImluLWZsaWdodFwiLCBpLmUuIGFzc2lzdGFudCBpcyBzdGlsbCB3b3JraW5nIG9uIHRoZW0gaW4gc2VwYXJhdGUgaW52b2NhdGlvbi5cbiAgICAgICAgLy8gRXhjZXB0IGN1cnJlbnQgbWVzc2FnZSwgd2Ugd2FudCB0byBwcm9jZXNzIHRoYXQgb25lLlxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgICAgY29uc3QgYWlDb250ZXh0ID0gY3VycmVudC5haUNvbnRleHQ7XG4gICAgICBjb25zdCBjb250ZW50ID0gYWlDb250ZXh0XG4gICAgICAgID8gWy4uLmN1cnJlbnQuY29udGVudCwgeyB0ZXh0OiBKU09OLnN0cmluZ2lmeShhaUNvbnRleHQpIH1dXG4gICAgICAgIDogY3VycmVudC5jb250ZW50O1xuXG4gICAgICBhY2MucHVzaCh7IHJvbGU6IGN1cnJlbnQucm9sZSwgY29udGVudCB9KTtcblxuICAgICAgLy8gRmluZCBhbmQgaW5zZXJ0IGNvcnJlc3BvbmRpbmcgYXNzaXN0YW50IG1lc3NhZ2UuXG4gICAgICBjb25zdCBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZSA9IGFzc2lzdGFudE1lc3NhZ2VCeVVzZXJNZXNzYWdlSWQuZ2V0KFxuICAgICAgICBjdXJyZW50LmlkXG4gICAgICApO1xuICAgICAgaWYgKGNvcnJlc3BvbmRpbmdBc3Npc3RhbnRNZXNzYWdlKSB7XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICByb2xlOiBjb3JyZXNwb25kaW5nQXNzaXN0YW50TWVzc2FnZS5yb2xlLFxuICAgICAgICAgIGNvbnRlbnQ6IGNvcnJlc3BvbmRpbmdBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSBhcyBBcnJheTxDb252ZXJzYXRpb25NZXNzYWdlPik7XG5cbiAgICAvLyBSZW1vdmUgdG9vbCB1c2FnZSBmcm9tIG5vbi1jdXJyZW50IHR1cm4gYW5kIHNxdWFzaCBtZXNzYWdlcy5cbiAgICByZXR1cm4gdGhpcy5zcXVhc2hOb25DdXJyZW50VHVybnMob3JkZXJlZE1lc3NhZ2VzKTtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRvb2wgdXNhZ2UgZnJvbSBub24tY3VycmVudCB0dXJucy5cbiAgICogVGhlIHRvb2wgdXNhZ2UgYW5kIHJlc3VsdCBibG9ja3MgZG9uJ3QgbWF0dGVyIGFmdGVyIGEgdHVybiBpcyBjb21wbGV0ZWQsXG4gICAqIGJ1dCBkbyBjb3N0IGV4dHJhIHRva2VucyB0byBwcm9jZXNzLlxuICAgKiBUaGUgYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6XG4gICAqIDEuIEZpbmQgd2hlcmUgY3VycmVudCB0dXJuIGJlZ2lucy4gSS5lLiBsYXN0IHVzZXIgbWVzc2FnZSB0aGF0IGlzbid0IHRvb2wgYmxvY2suXG4gICAqIDIuIFJlbW92ZSB0b29sVXNlIGFuZCB0b29sUmVzdWx0IGJsb2NrcyBiZWZvcmUgY3VycmVudCB0dXJuLlxuICAgKiAzLiBTcXVhc2ggY29udGludW91cyBzZXF1ZW5jZXMgb2YgbWVzc2FnZXMgdGhhdCBiZWxvbmcgdG8gc2FtZSAnbWVzc2FnZS5yb2xlJy5cbiAgICovXG4gIHByaXZhdGUgc3F1YXNoTm9uQ3VycmVudFR1cm5zID0gKG1lc3NhZ2VzOiBBcnJheTxDb252ZXJzYXRpb25NZXNzYWdlPikgPT4ge1xuICAgIGNvbnN0IGlzTm9uVG9vbEJsb2NrUHJlZGljYXRlID0gKFxuICAgICAgY29udGVudEJsb2NrOiBDb252ZXJzYXRpb25NZXNzYWdlQ29udGVudEJsb2NrXG4gICAgKSA9PiAhY29udGVudEJsb2NrLnRvb2xVc2UgJiYgIWNvbnRlbnRCbG9jay50b29sUmVzdWx0O1xuXG4gICAgLy8gZmluZCB3aGVyZSBjdXJyZW50IHR1cm4gYmVnaW5zLiBJLmUuIGxhc3QgdXNlciBtZXNzYWdlIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gdG9vbHNcbiAgICBjb25zdCBsYXN0Tm9uVG9vbFVzZVVzZXJNZXNzYWdlSW5kZXggPSBtZXNzYWdlcy5maW5kTGFzdEluZGV4KChtZXNzYWdlKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBtZXNzYWdlLnJvbGUgPT09ICd1c2VyJyAmJiBtZXNzYWdlLmNvbnRlbnQuZmluZChpc05vblRvb2xCbG9ja1ByZWRpY2F0ZSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBObyBub24tY3VycmVudCB0dXJucywgZG9uJ3QgdHJhbnNmb3JtLlxuICAgIGlmIChsYXN0Tm9uVG9vbFVzZVVzZXJNZXNzYWdlSW5kZXggPD0gMCkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIGNvbnN0IHNxdWFzaGVkTWVzc2FnZXM6IEFycmF5PENvbnZlcnNhdGlvbk1lc3NhZ2U+ID0gW107XG5cbiAgICAvLyBEZWZpbmUgYSBcImJ1ZmZlclwiLiBJLmUuIGEgbWVzc2FnZSB3ZSBrZWVwIGFyb3VuZCBhbmQgc3F1YXNoIGNvbnRlbnQgb24uXG4gICAgbGV0IGN1cnJlbnRTcXVhc2hlZE1lc3NhZ2U6IENvbnZlcnNhdGlvbk1lc3NhZ2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgLy8gUHJvY2VzcyBtZXNzYWdlcyBiZWZvcmUgY3VycmVudCB0dXJuIGJlZ2luc1xuICAgIC8vIFJlbW92ZSB0b29sIHVzYWdlIGJsb2Nrcy5cbiAgICAvLyBDb21iaW5lIGNvbnRlbnQgZm9yIGNvbnNlY3V0aXZlIG1lc3NhZ2UgdGhhdCBoYXZlIHNhbWUgcm9sZS5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhc3ROb25Ub29sVXNlVXNlck1lc3NhZ2VJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBjdXJyZW50TWVzc2FnZSA9IG1lc3NhZ2VzW2ldO1xuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VSb2xlID0gY3VycmVudE1lc3NhZ2Uucm9sZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlTm9uVG9vbENvbnRlbnQgPSBjdXJyZW50TWVzc2FnZS5jb250ZW50LmZpbHRlcihcbiAgICAgICAgaXNOb25Ub29sQmxvY2tQcmVkaWNhdGVcbiAgICAgICk7XG4gICAgICBpZiAoY3VycmVudE1lc3NhZ2VOb25Ub29sQ29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gVG9vbCBvbmx5IG1lc3NhZ2UuIE5vdGhpbmcgdG8gc3F1YXNoLCBza2lwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjdXJyZW50U3F1YXNoZWRNZXNzYWdlKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgc3F1YXNoZWQgeWV0LCBpbml0aWFsaXplIHRoZSBidWZmZXIuXG4gICAgICAgIGN1cnJlbnRTcXVhc2hlZE1lc3NhZ2UgPSB7XG4gICAgICAgICAgcm9sZTogY3VycmVudE1lc3NhZ2VSb2xlLFxuICAgICAgICAgIGNvbnRlbnQ6IGN1cnJlbnRNZXNzYWdlTm9uVG9vbENvbnRlbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTcXVhc2hlZE1lc3NhZ2Uucm9sZSA9PT0gY3VycmVudE1lc3NhZ2VSb2xlKSB7XG4gICAgICAgIC8vIGlmIHJvbGUgaXMgc2FtZSBhcHBlbmQgY29udGVudC5cbiAgICAgICAgY3VycmVudFNxdWFzaGVkTWVzc2FnZS5jb250ZW50LnB1c2goLi4uY3VycmVudE1lc3NhZ2VOb25Ub29sQ29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiByb2xlIGZsaXBzIHB1c2ggY3VycmVudCBzcXVhc2hlZCBtZXNzYWdlIGFuZCByZS1pbml0aWFsaXplIHRoZSBidWZmZXIuXG4gICAgICAgIHNxdWFzaGVkTWVzc2FnZXMucHVzaChjdXJyZW50U3F1YXNoZWRNZXNzYWdlKTtcbiAgICAgICAgY3VycmVudFNxdWFzaGVkTWVzc2FnZSA9IHtcbiAgICAgICAgICByb2xlOiBjdXJyZW50TWVzc2FnZVJvbGUsXG4gICAgICAgICAgY29udGVudDogY3VycmVudE1lc3NhZ2VOb25Ub29sQ29udGVudCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZmx1c2ggdGhlIGxhc3QgYnVmZmVyLlxuICAgIGlmIChjdXJyZW50U3F1YXNoZWRNZXNzYWdlKSB7XG4gICAgICBzcXVhc2hlZE1lc3NhZ2VzLnB1c2goY3VycmVudFNxdWFzaGVkTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLy8gQXBwZW5kIGN1cnJlbnQgdHVybiBhcyBpcy5cbiAgICBzcXVhc2hlZE1lc3NhZ2VzLnB1c2goLi4ubWVzc2FnZXMuc2xpY2UobGFzdE5vblRvb2xVc2VVc2VyTWVzc2FnZUluZGV4KSk7XG4gICAgcmV0dXJuIHNxdWFzaGVkTWVzc2FnZXM7XG4gIH07XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50TWVzc2FnZSA9XG4gICAgYXN5bmMgKCk6IFByb21pc2U8Q29udmVyc2F0aW9uSGlzdG9yeU1lc3NhZ2VJdGVtPiA9PiB7XG4gICAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgICAgcXVlcnkgR2V0TWVzc2FnZSgkaWQ6ICR7dGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5LmdldFF1ZXJ5SW5wdXRUeXBlTmFtZX0hKSB7XG4gICAgICAgICAgICAke3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeU5hbWV9KGlkOiAkaWQpIHtcbiAgICAgICAgICAgICAgJHttZXNzYWdlSXRlbVNlbGVjdGlvblNldH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG4gICAgICBjb25zdCB2YXJpYWJsZXM6IEdldFF1ZXJ5SW5wdXQgPSB7XG4gICAgICAgIGlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3RFeGVjdXRvci5leGVjdXRlR3JhcGhxbDxcbiAgICAgICAgR2V0UXVlcnlJbnB1dCxcbiAgICAgICAgR2V0UXVlcnlPdXRwdXRcbiAgICAgID4oe1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgdmFyaWFibGVzLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhW3RoaXMuZXZlbnQubWVzc2FnZUhpc3RvcnlRdWVyeS5nZXRRdWVyeU5hbWVdO1xuICAgIH07XG5cbiAgcHJpdmF0ZSBsaXN0TWVzc2FnZXMgPSBhc3luYyAoKTogUHJvbWlzZTxcbiAgICBBcnJheTxDb252ZXJzYXRpb25IaXN0b3J5TWVzc2FnZUl0ZW0+XG4gID4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBxdWVyeSBMaXN0TWVzc2FnZXMoJGZpbHRlcjogJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5SW5wdXRUeXBlTmFtZX0hLCAkbGltaXQ6IEludCkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5TmFtZX0oZmlsdGVyOiAkZmlsdGVyLCBsaW1pdDogJGxpbWl0KSB7XG4gICAgICAgICAgICAgIGl0ZW1zIHtcbiAgICAgICAgICAgICAgICAke21lc3NhZ2VJdGVtU2VsZWN0aW9uU2V0fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICBgO1xuICAgIGNvbnN0IHZhcmlhYmxlczogTGlzdFF1ZXJ5SW5wdXQgPSB7XG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHtcbiAgICAgICAgICBlcTogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBsaW1pdDogdGhpcy5ldmVudC5tZXNzYWdlSGlzdG9yeVF1ZXJ5Lmxpc3RRdWVyeUxpbWl0ID8/IDEwMDAsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdEV4ZWN1dG9yLmV4ZWN1dGVHcmFwaHFsPFxuICAgICAgTGlzdFF1ZXJ5SW5wdXQsXG4gICAgICBMaXN0UXVlcnlPdXRwdXRcbiAgICA+KHtcbiAgICAgIHF1ZXJ5LFxuICAgICAgdmFyaWFibGVzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXRlbXMgPVxuICAgICAgcmVzcG9uc2UuZGF0YVt0aGlzLmV2ZW50Lm1lc3NhZ2VIaXN0b3J5UXVlcnkubGlzdFF1ZXJ5TmFtZV0uaXRlbXM7XG5cbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmNvbnRlbnQ/LmZvckVhY2goKGNvbnRlbnRCbG9jaykgPT4ge1xuICAgICAgICBsZXQgcHJvcGVydHk6IGtleW9mIHR5cGVvZiBjb250ZW50QmxvY2s7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gY29udGVudEJsb2NrKSB7XG4gICAgICAgICAgLy8gRGVzZXJpYWxpemF0aW9uIG9mIEdyYXBoUWwgcXVlcnkgcmVzdWx0IHNldHMgdGhlc2UgcHJvcGVydGllcyB0byAnbnVsbCdcbiAgICAgICAgICAvLyBUaGlzIGNhbiB0cmlnZ2VyIEJlZHJvY2sgU0RLIHZhbGlkYXRpb24gYXMgaXQgZXhwZWN0cyAndW5kZWZpbmVkJyBpZiBwcm9wZXJ0aWVzIGFyZSBub3Qgc2V0LlxuICAgICAgICAgIC8vIFdlIGNhbid0IGZpeCBob3cgR3JhcGhRbCByZXNwb25zZSBpcyBkZXNlcmlhbGl6ZWQuXG4gICAgICAgICAgLy8gVGhlcmVmb3JlLCB3ZSBhcHBseSB0aGlzIHRyYW5zZm9ybWF0aW9uIHRvIGZpeCB0aGUgZGF0YS5cbiAgICAgICAgICBpZiAoY29udGVudEJsb2NrW3Byb3BlcnR5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGVudEJsb2NrW3Byb3BlcnR5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnRCbG9jay50b29sVXNlPy5pbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAvLyB0b29sVXNlLmlucHV0IG1heSBjb21lIGFzIHNlcmlhbGl6ZWQgSlNPTiBmb3IgQ2xpZW50IFRvb2xzLlxuICAgICAgICAgIC8vIFBhcnNlIGl0IGluIHRoYXQgY2FzZS5cbiAgICAgICAgICBjb250ZW50QmxvY2sudG9vbFVzZS5pbnB1dCA9IEpTT04ucGFyc2UoY29udGVudEJsb2NrLnRvb2xVc2UuaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250ZW50QmxvY2sudG9vbFJlc3VsdD8uY29udGVudCkge1xuICAgICAgICAgIGNvbnRlbnRCbG9jay50b29sUmVzdWx0LmNvbnRlbnQuZm9yRWFjaCgodG9vbFJlc3VsdENvbnRlbnRCbG9jaykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b29sUmVzdWx0Q29udGVudEJsb2NrLmpzb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIC8vIHRvb2xSZXN1bHQuY29udGVudFtdLmpzb24gbWF5IGNvbWUgYXMgc2VyaWFsaXplZCBKU09OIGZvciBDbGllbnQgVG9vbHMuXG4gICAgICAgICAgICAgIC8vIFBhcnNlIGl0IGluIHRoYXQgY2FzZS5cbiAgICAgICAgICAgICAgdG9vbFJlc3VsdENvbnRlbnRCbG9jay5qc29uID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICB0b29sUmVzdWx0Q29udGVudEJsb2NrLmpzb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH07XG59XG4iXX0=
|
@@ -2,6 +2,7 @@
|
|
2
2
|
import { ConversationTurnError, ConversationTurnEvent, StreamingResponseChunk } from './types.js';
|
3
3
|
import type { ContentBlock } from '@aws-sdk/client-bedrock-runtime';
|
4
4
|
import { GraphqlRequestExecutor } from './graphql_request_executor';
|
5
|
+
import { UserAgentProvider } from './user_agent_provider';
|
5
6
|
export type MutationResponseInput = {
|
6
7
|
input: {
|
7
8
|
conversationId: string;
|
@@ -25,12 +26,13 @@ export type MutationErrorsResponseInput = {
|
|
25
26
|
*/
|
26
27
|
export declare class ConversationTurnResponseSender {
|
27
28
|
private readonly event;
|
29
|
+
private readonly userAgentProvider;
|
28
30
|
private readonly graphqlRequestExecutor;
|
29
31
|
private readonly logger;
|
30
32
|
/**
|
31
33
|
* Creates conversation turn response sender.
|
32
34
|
*/
|
33
|
-
constructor(event: ConversationTurnEvent, graphqlRequestExecutor?: GraphqlRequestExecutor, logger?: Console);
|
35
|
+
constructor(event: ConversationTurnEvent, userAgentProvider?: UserAgentProvider, graphqlRequestExecutor?: GraphqlRequestExecutor, logger?: Console);
|
34
36
|
sendResponse: (message: ContentBlock[]) => Promise<void>;
|
35
37
|
sendResponseChunk: (chunk: StreamingResponseChunk) => Promise<void>;
|
36
38
|
sendErrors: (errors: ConversationTurnError[]) => Promise<void>;
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.ConversationTurnResponseSender = void 0;
|
4
4
|
const graphql_request_executor_1 = require("./graphql_request_executor");
|
5
|
+
const user_agent_provider_1 = require("./user_agent_provider");
|
5
6
|
/**
|
6
7
|
* This class is responsible for sending a response produced by Bedrock back to AppSync
|
7
8
|
* in a form of mutation.
|
@@ -10,24 +11,37 @@ class ConversationTurnResponseSender {
|
|
10
11
|
/**
|
11
12
|
* Creates conversation turn response sender.
|
12
13
|
*/
|
13
|
-
constructor(event, graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(event.graphqlApiEndpoint, event.request.headers.authorization,
|
14
|
+
constructor(event, userAgentProvider = new user_agent_provider_1.UserAgentProvider(event), graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(event.graphqlApiEndpoint, event.request.headers.authorization, userAgentProvider), logger = console) {
|
14
15
|
this.event = event;
|
16
|
+
this.userAgentProvider = userAgentProvider;
|
15
17
|
this.graphqlRequestExecutor = graphqlRequestExecutor;
|
16
18
|
this.logger = logger;
|
17
19
|
this.sendResponse = async (message) => {
|
18
20
|
const responseMutationRequest = this.createMutationRequest(message);
|
19
21
|
this.logger.debug('Sending response mutation:', responseMutationRequest);
|
20
|
-
await this.graphqlRequestExecutor.executeGraphql(responseMutationRequest
|
22
|
+
await this.graphqlRequestExecutor.executeGraphql(responseMutationRequest, {
|
23
|
+
userAgent: this.userAgentProvider.getUserAgent({
|
24
|
+
'turn-response-type': 'single',
|
25
|
+
}),
|
26
|
+
});
|
21
27
|
};
|
22
28
|
this.sendResponseChunk = async (chunk) => {
|
23
29
|
const responseMutationRequest = this.createStreamingMutationRequest(chunk);
|
24
30
|
this.logger.debug('Sending response mutation:', responseMutationRequest);
|
25
|
-
await this.graphqlRequestExecutor.executeGraphql(responseMutationRequest
|
31
|
+
await this.graphqlRequestExecutor.executeGraphql(responseMutationRequest, {
|
32
|
+
userAgent: this.userAgentProvider.getUserAgent({
|
33
|
+
'turn-response-type': 'streaming',
|
34
|
+
}),
|
35
|
+
});
|
26
36
|
};
|
27
37
|
this.sendErrors = async (errors) => {
|
28
38
|
const responseMutationRequest = this.createMutationErrorsRequest(errors);
|
29
39
|
this.logger.debug('Sending errors response mutation:', responseMutationRequest);
|
30
|
-
await this.graphqlRequestExecutor.executeGraphql(responseMutationRequest
|
40
|
+
await this.graphqlRequestExecutor.executeGraphql(responseMutationRequest, {
|
41
|
+
userAgent: this.userAgentProvider.getUserAgent({
|
42
|
+
'turn-response-type': 'error',
|
43
|
+
}),
|
44
|
+
});
|
31
45
|
};
|
32
46
|
this.createMutationErrorsRequest = (errors) => {
|
33
47
|
const query = `
|
@@ -96,4 +110,4 @@ class ConversationTurnResponseSender {
|
|
96
110
|
}
|
97
111
|
}
|
98
112
|
exports.ConversationTurnResponseSender = ConversationTurnResponseSender;
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX3R1cm5fcmVzcG9uc2Vfc2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2NvbnZlcnNhdGlvbl90dXJuX3Jlc3BvbnNlX3NlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSx5RUFBb0U7QUFzQnBFOzs7R0FHRztBQUNILE1BQWEsOEJBQThCO0lBQ3pDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDNUIseUJBQXlCLElBQUksaURBQXNCLENBQ2xFLEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUNuQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUMxQyxFQUNnQixTQUFTLE9BQU87UUFOaEIsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDNUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUl0QztRQUNnQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBR25DLGlCQUFZLEdBQUcsS0FBSyxFQUFFLE9BQXVCLEVBQUUsRUFBRTtZQUMvQyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FHOUMsdUJBQXVCLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUM7UUFFRixzQkFBaUIsR0FBRyxLQUFLLEVBQUUsS0FBNkIsRUFBRSxFQUFFO1lBQzFELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLHVC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TUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7aUJBQ2pEO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFwR0MsQ0FBQztDQXFHTDtBQWpIRCx3RUFpSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb252ZXJzYXRpb25UdXJuRXJyb3IsXG4gIENvbnZlcnNhdGlvblR1cm5FdmVudCxcbiAgU3RyZWFtaW5nUmVzcG9uc2VDaHVuayxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRlbnRCbG9jayB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1iZWRyb2NrLXJ1bnRpbWUnO1xuaW1wb3J0IHsgR3JhcGhxbFJlcXVlc3RFeGVjdXRvciB9IGZyb20gJy4vZ3JhcGhxbF9yZXF1ZXN0X2V4ZWN1dG9yJztcblxuZXhwb3J0IHR5cGUgTXV0YXRpb25SZXNwb25zZUlucHV0ID0ge1xuICBpbnB1dDoge1xuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gICAgY29udGVudDogQ29udGVudEJsb2NrW107XG4gICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHN0cmluZztcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uU3RyZWFtaW5nUmVzcG9uc2VJbnB1dCA9IHtcbiAgaW5wdXQ6IFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bms7XG59O1xuXG5leHBvcnQgdHlwZSBNdXRhdGlvbkVycm9yc1Jlc3BvbnNlSW5wdXQgPSB7XG4gIGlucHV0OiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBlcnJvcnM6IENvbnZlcnNhdGlvblR1cm5FcnJvcltdO1xuICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiBzdHJpbmc7XG4gIH07XG59O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHNlbmRpbmcgYSByZXNwb25zZSBwcm9kdWNlZCBieSBCZWRyb2NrIGJhY2sgdG8gQXBwU3luY1xuICogaW4gYSBmb3JtIG9mIG11dGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uVHVyblJlc3BvbnNlU2VuZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgY29udmVyc2F0aW9uIHR1cm4gcmVzcG9uc2Ugc2VuZGVyLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBldmVudDogQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ3JhcGhxbFJlcXVlc3RFeGVjdXRvciA9IG5ldyBHcmFwaHFsUmVxdWVzdEV4ZWN1dG9yKFxuICAgICAgZXZlbnQuZ3JhcGhxbEFwaUVuZHBvaW50LFxuICAgICAgZXZlbnQucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24sXG4gICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnNbJ3gtYW16LXVzZXItYWdlbnQnXVxuICAgICksXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBjb25zb2xlXG4gICkge31cblxuICBzZW5kUmVzcG9uc2UgPSBhc3luYyAobWVzc2FnZTogQ29udGVudEJsb2NrW10pID0+IHtcbiAgICBjb25zdCByZXNwb25zZU11dGF0aW9uUmVxdWVzdCA9IHRoaXMuY3JlYXRlTXV0YXRpb25SZXF1ZXN0KG1lc3NhZ2UpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTZW5kaW5nIHJlc3BvbnNlIG11dGF0aW9uOicsIHJlc3BvbnNlTXV0YXRpb25SZXF1ZXN0KTtcbiAgICBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0RXhlY3V0b3IuZXhlY3V0ZUdyYXBocWw8XG4gICAgICBNdXRhdGlvblJlc3BvbnNlSW5wdXQsXG4gICAgICB2b2lkXG4gICAgPihyZXNwb25zZU11dGF0aW9uUmVxdWVzdCk7XG4gIH07XG5cbiAgc2VuZFJlc3BvbnNlQ2h1bmsgPSBhc3luYyAoY2h1bms6IFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bmspID0+IHtcbiAgICBjb25zdCByZXNwb25zZU11dGF0aW9uUmVxdWVzdCA9IHRoaXMuY3JlYXRlU3RyZWFtaW5nTXV0YXRpb25SZXF1ZXN0KGNodW5rKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2VuZGluZyByZXNwb25zZSBtdXRhdGlvbjonLCByZXNwb25zZU11dGF0aW9uUmVxdWVzdCk7XG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdEV4ZWN1dG9yLmV4ZWN1dGVHcmFwaHFsPFxuICAgICAgTXV0YXRpb25TdHJlYW1pbmdSZXNwb25zZUlucHV0LFxuICAgICAgdm9pZFxuICAgID4ocmVzcG9uc2VNdXRhdGlvblJlcXVlc3QpO1xuICB9O1xuXG4gIHNlbmRFcnJvcnMgPSBhc3luYyAoZXJyb3JzOiBDb252ZXJzYXRpb25UdXJuRXJyb3JbXSkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlTXV0YXRpb25SZXF1ZXN0ID0gdGhpcy5jcmVhdGVNdXRhdGlvbkVycm9yc1JlcXVlc3QoZXJyb3JzKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICdTZW5kaW5nIGVycm9ycyByZXNwb25zZSBtdXRhdGlvbjonLFxuICAgICAgcmVzcG9uc2VNdXRhdGlvblJlcXVlc3RcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3RFeGVjdXRvci5leGVjdXRlR3JhcGhxbDxcbiAgICAgIE11dGF0aW9uRXJyb3JzUmVzcG9uc2VJbnB1dCxcbiAgICAgIHZvaWRcbiAgICA+KHJlc3BvbnNlTXV0YXRpb25SZXF1ZXN0KTtcbiAgfTtcblxuICBwcml2YXRlIGNyZWF0ZU11dGF0aW9uRXJyb3JzUmVxdWVzdCA9IChlcnJvcnM6IENvbnZlcnNhdGlvblR1cm5FcnJvcltdKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICAgIG11dGF0aW9uIFB1Ymxpc2hNb2RlbFJlc3BvbnNlKCRpbnB1dDogJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24uaW5wdXRUeXBlTmFtZX0hKSB7XG4gICAgICAgICAgICAke3RoaXMuZXZlbnQucmVzcG9uc2VNdXRhdGlvbi5uYW1lfShpbnB1dDogJGlucHV0KSB7XG4gICAgICAgICAgICAgICAgJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24uc2VsZWN0aW9uU2V0fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgYDtcbiAgICBjb25zdCB2YXJpYWJsZXM6IE11dGF0aW9uRXJyb3JzUmVzcG9uc2VJbnB1dCA9IHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICBlcnJvcnMsXG4gICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHsgcXVlcnksIHZhcmlhYmxlcyB9O1xuICB9O1xuXG4gIHByaXZhdGUgY3JlYXRlTXV0YXRpb25SZXF1ZXN0ID0gKGNvbnRlbnQ6IENvbnRlbnRCbG9ja1tdKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICAgIG11dGF0aW9uIFB1Ymxpc2hNb2RlbFJlc3BvbnNlKCRpbnB1dDogJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24uaW5wdXRUeXBlTmFtZX0hKSB7XG4gICAgICAgICAgICAke3RoaXMuZXZlbnQucmVzcG9uc2VNdXRhdGlvbi5uYW1lfShpbnB1dDogJGlucHV0KSB7XG4gICAgICAgICAgICAgICAgJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24uc2VsZWN0aW9uU2V0fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgYDtcbiAgICBjb250ZW50ID0gdGhpcy5zZXJpYWxpemVDb250ZW50KGNvbnRlbnQpO1xuICAgIGNvbnN0IHZhcmlhYmxlczogTXV0YXRpb25SZXNwb25zZUlucHV0ID0ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHsgcXVlcnksIHZhcmlhYmxlcyB9O1xuICB9O1xuXG4gIHByaXZhdGUgY3JlYXRlU3RyZWFtaW5nTXV0YXRpb25SZXF1ZXN0ID0gKGNodW5rOiBTdHJlYW1pbmdSZXNwb25zZUNodW5rKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBgXG4gICAgICAgIG11dGF0aW9uIFB1Ymxpc2hNb2RlbFJlc3BvbnNlKCRpbnB1dDogJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24uaW5wdXRUeXBlTmFtZX0hKSB7XG4gICAgICAgICAgICAke3RoaXMuZXZlbnQucmVzcG9uc2VNdXRhdGlvbi5uYW1lfShpbnB1dDogJGlucHV0KSB7XG4gICAgICAgICAgICAgICAgJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24uc2VsZWN0aW9uU2V0fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgYDtcbiAgICBjaHVuayA9IHtcbiAgICAgIC4uLmNodW5rLFxuICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogdGhpcy5zZXJpYWxpemVDb250ZW50KFxuICAgICAgICBjaHVuay5hY2N1bXVsYXRlZFR1cm5Db250ZW50XG4gICAgICApLFxuICAgIH07XG4gICAgY29uc3QgdmFyaWFibGVzOiBNdXRhdGlvblN0cmVhbWluZ1Jlc3BvbnNlSW5wdXQgPSB7XG4gICAgICBpbnB1dDogY2h1bmssXG4gICAgfTtcbiAgICByZXR1cm4geyBxdWVyeSwgdmFyaWFibGVzIH07XG4gIH07XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemVDb250ZW50ID0gKGNvbnRlbnQ6IENvbnRlbnRCbG9ja1tdKSA9PiB7XG4gICAgcmV0dXJuIGNvbnRlbnQubWFwKChibG9jaykgPT4ge1xuICAgICAgaWYgKGJsb2NrLnRvb2xVc2UpIHtcbiAgICAgICAgLy8gVGhlIGBpbnB1dGAgZmllbGQgaXMgdHlwZWQgYXMgYEFXUyBKU09OYCBpbiB0aGUgR3JhcGhRTCBBUEkgYmVjYXVzZSBpdCBjYW4gcmVwcmVzZW50XG4gICAgICAgIC8vIGFyYml0cmFyeSBKU09OIHZhbHVlcy5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBzdHJpbmdpZnkgaXQgYmVmb3JlIHNlbmRpbmcgaXQgdG8gQXBwU3luYyB0byBwcmV2ZW50IHR5cGUgZXJyb3JzLlxuICAgICAgICBjb25zdCBpbnB1dCA9IEpTT04uc3RyaW5naWZ5KGJsb2NrLnRvb2xVc2UuaW5wdXQpO1xuICAgICAgICByZXR1cm4geyB0b29sVXNlOiB7IC4uLmJsb2NrLnRvb2xVc2UsIGlucHV0IH0gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBibG9jaztcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX3R1cm5fcmVzcG9uc2Vfc2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2NvbnZlcnNhdGlvbl90dXJuX3Jlc3BvbnNlX3NlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSx5RUFBb0U7QUFDcEUsK0RBQTBEO0FBc0IxRDs7O0dBR0c7QUFDSCxNQUFhLDhCQUE4QjtJQUN6Qzs7T0FFRztJQUNILFlBQ21CLEtBQTRCLEVBQzVCLG9CQUFvQixJQUFJLHVDQUFpQixDQUFDLEtBQUssQ0FBQyxFQUNoRCx5QkFBeUIsSUFBSSxpREFBc0IsQ0FDbEUsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ25DLGlCQUFpQixDQUNsQixFQUNnQixTQUFTLE9BQU87UUFQaEIsVUFBSyxHQUFMLEtBQUssQ0FBdUI7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUErQjtRQUNoRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBSXRDO1FBQ2dCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFHbkMsaUJBQVksR0FBRyxLQUFLLEVBQUUsT0FBdUIsRUFBRSxFQUFFO1lBQy9DLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDekUsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUc5Qyx1QkFBdUIsRUFBRTtnQkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7b0JBQzdDLG9CQUFvQixFQUFFLFFBQVE7aUJBQy9CLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixzQkFB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SSxDQUFDLGdCQUFnQixDQUMzQyxLQUFLLENBQUMsc0JBQXNCLENBQzdCO2FBQ0YsQ0FBQztZQUNGLE1BQU0sU0FBUyxHQUFtQztnQkFDaEQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDO1lBQ0YsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFTSxxQkFBZ0IsR0FBRyxDQUFDLE9BQXVCLEVBQUUsRUFBRTtZQUNyRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO29CQUNqQix1RkFBdUY7b0JBQ3ZGLHlCQUF5QjtvQkFDekIsK0VBQStFO29CQUMvRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztpQkFDakQ7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQWhIQyxDQUFDO0NBaUhMO0FBOUhELHdFQThIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnZlcnNhdGlvblR1cm5FcnJvcixcbiAgQ29udmVyc2F0aW9uVHVybkV2ZW50LFxuICBTdHJlYW1pbmdSZXNwb25zZUNodW5rLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29udGVudEJsb2NrIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQgeyBHcmFwaHFsUmVxdWVzdEV4ZWN1dG9yIH0gZnJvbSAnLi9ncmFwaHFsX3JlcXVlc3RfZXhlY3V0b3InO1xuaW1wb3J0IHsgVXNlckFnZW50UHJvdmlkZXIgfSBmcm9tICcuL3VzZXJfYWdlbnRfcHJvdmlkZXInO1xuXG5leHBvcnQgdHlwZSBNdXRhdGlvblJlc3BvbnNlSW5wdXQgPSB7XG4gIGlucHV0OiB7XG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgICBjb250ZW50OiBDb250ZW50QmxvY2tbXTtcbiAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogc3RyaW5nO1xuICB9O1xufTtcblxuZXhwb3J0IHR5cGUgTXV0YXRpb25TdHJlYW1pbmdSZXNwb25zZUlucHV0ID0ge1xuICBpbnB1dDogU3RyZWFtaW5nUmVzcG9uc2VDaHVuaztcbn07XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uRXJyb3JzUmVzcG9uc2VJbnB1dCA9IHtcbiAgaW5wdXQ6IHtcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICAgIGVycm9yczogQ29udmVyc2F0aW9uVHVybkVycm9yW107XG4gICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHN0cmluZztcbiAgfTtcbn07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyBhIHJlc3BvbnNlIHByb2R1Y2VkIGJ5IEJlZHJvY2sgYmFjayB0byBBcHBTeW5jXG4gKiBpbiBhIGZvcm0gb2YgbXV0YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDb252ZXJzYXRpb25UdXJuUmVzcG9uc2VTZW5kZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBjb252ZXJzYXRpb24gdHVybiByZXNwb25zZSBzZW5kZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyQWdlbnRQcm92aWRlciA9IG5ldyBVc2VyQWdlbnRQcm92aWRlcihldmVudCksXG4gICAgcHJpdmF0ZSByZWFkb25seSBncmFwaHFsUmVxdWVzdEV4ZWN1dG9yID0gbmV3IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IoXG4gICAgICBldmVudC5ncmFwaHFsQXBpRW5kcG9pbnQsXG4gICAgICBldmVudC5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbixcbiAgICAgIHVzZXJBZ2VudFByb3ZpZGVyXG4gICAgKSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7fVxuXG4gIHNlbmRSZXNwb25zZSA9IGFzeW5jIChtZXNzYWdlOiBDb250ZW50QmxvY2tbXSkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlTXV0YXRpb25SZXF1ZXN0ID0gdGhpcy5jcmVhdGVNdXRhdGlvblJlcXVlc3QobWVzc2FnZSk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ1NlbmRpbmcgcmVzcG9uc2UgbXV0YXRpb246JywgcmVzcG9uc2VNdXRhdGlvblJlcXVlc3QpO1xuICAgIGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3RFeGVjdXRvci5leGVjdXRlR3JhcGhxbDxcbiAgICAgIE11dGF0aW9uUmVzcG9uc2VJbnB1dCxcbiAgICAgIHZvaWRcbiAgICA+KHJlc3BvbnNlTXV0YXRpb25SZXF1ZXN0LCB7XG4gICAgICB1c2VyQWdlbnQ6IHRoaXMudXNlckFnZW50UHJvdmlkZXIuZ2V0VXNlckFnZW50KHtcbiAgICAgICAgJ3R1cm4tcmVzcG9uc2UtdHlwZSc6ICdzaW5nbGUnLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH07XG5cbiAgc2VuZFJlc3BvbnNlQ2h1bmsgPSBhc3luYyAoY2h1bms6IFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bmspID0+IHtcbiAgICBjb25zdCByZXNwb25zZU11dGF0aW9uUmVxdWVzdCA9IHRoaXMuY3JlYXRlU3RyZWFtaW5nTXV0YXRpb25SZXF1ZXN0KGNodW5rKTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2VuZGluZyByZXNwb25zZSBtdXRhdGlvbjonLCByZXNwb25zZU11dGF0aW9uUmVxdWVzdCk7XG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdEV4ZWN1dG9yLmV4ZWN1dGVHcmFwaHFsPFxuICAgICAgTXV0YXRpb25TdHJlYW1pbmdSZXNwb25zZUlucHV0LFxuICAgICAgdm9pZFxuICAgID4ocmVzcG9uc2VNdXRhdGlvblJlcXVlc3QsIHtcbiAgICAgIHVzZXJBZ2VudDogdGhpcy51c2VyQWdlbnRQcm92aWRlci5nZXRVc2VyQWdlbnQoe1xuICAgICAgICAndHVybi1yZXNwb25zZS10eXBlJzogJ3N0cmVhbWluZycsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfTtcblxuICBzZW5kRXJyb3JzID0gYXN5bmMgKGVycm9yczogQ29udmVyc2F0aW9uVHVybkVycm9yW10pID0+IHtcbiAgICBjb25zdCByZXNwb25zZU11dGF0aW9uUmVxdWVzdCA9IHRoaXMuY3JlYXRlTXV0YXRpb25FcnJvcnNSZXF1ZXN0KGVycm9ycyk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAnU2VuZGluZyBlcnJvcnMgcmVzcG9uc2UgbXV0YXRpb246JyxcbiAgICAgIHJlc3BvbnNlTXV0YXRpb25SZXF1ZXN0XG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0RXhlY3V0b3IuZXhlY3V0ZUdyYXBocWw8XG4gICAgICBNdXRhdGlvbkVycm9yc1Jlc3BvbnNlSW5wdXQsXG4gICAgICB2b2lkXG4gICAgPihyZXNwb25zZU11dGF0aW9uUmVxdWVzdCwge1xuICAgICAgdXNlckFnZW50OiB0aGlzLnVzZXJBZ2VudFByb3ZpZGVyLmdldFVzZXJBZ2VudCh7XG4gICAgICAgICd0dXJuLXJlc3BvbnNlLXR5cGUnOiAnZXJyb3InLFxuICAgICAgfSksXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVNdXRhdGlvbkVycm9yc1JlcXVlc3QgPSAoZXJyb3JzOiBDb252ZXJzYXRpb25UdXJuRXJyb3JbXSkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBtdXRhdGlvbiBQdWJsaXNoTW9kZWxSZXNwb25zZSgkaW5wdXQ6ICR7dGhpcy5ldmVudC5yZXNwb25zZU11dGF0aW9uLmlucHV0VHlwZU5hbWV9ISkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24ubmFtZX0oaW5wdXQ6ICRpbnB1dCkge1xuICAgICAgICAgICAgICAgICR7dGhpcy5ldmVudC5yZXNwb25zZU11dGF0aW9uLnNlbGVjdGlvblNldH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG4gICAgY29uc3QgdmFyaWFibGVzOiBNdXRhdGlvbkVycm9yc1Jlc3BvbnNlSW5wdXQgPSB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiB7IHF1ZXJ5LCB2YXJpYWJsZXMgfTtcbiAgfTtcblxuICBwcml2YXRlIGNyZWF0ZU11dGF0aW9uUmVxdWVzdCA9IChjb250ZW50OiBDb250ZW50QmxvY2tbXSkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBtdXRhdGlvbiBQdWJsaXNoTW9kZWxSZXNwb25zZSgkaW5wdXQ6ICR7dGhpcy5ldmVudC5yZXNwb25zZU11dGF0aW9uLmlucHV0VHlwZU5hbWV9ISkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24ubmFtZX0oaW5wdXQ6ICRpbnB1dCkge1xuICAgICAgICAgICAgICAgICR7dGhpcy5ldmVudC5yZXNwb25zZU11dGF0aW9uLnNlbGVjdGlvblNldH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG4gICAgY29udGVudCA9IHRoaXMuc2VyaWFsaXplQ29udGVudChjb250ZW50KTtcbiAgICBjb25zdCB2YXJpYWJsZXM6IE11dGF0aW9uUmVzcG9uc2VJbnB1dCA9IHtcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICBjb250ZW50LFxuICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHJldHVybiB7IHF1ZXJ5LCB2YXJpYWJsZXMgfTtcbiAgfTtcblxuICBwcml2YXRlIGNyZWF0ZVN0cmVhbWluZ011dGF0aW9uUmVxdWVzdCA9IChjaHVuazogU3RyZWFtaW5nUmVzcG9uc2VDaHVuaykgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gYFxuICAgICAgICBtdXRhdGlvbiBQdWJsaXNoTW9kZWxSZXNwb25zZSgkaW5wdXQ6ICR7dGhpcy5ldmVudC5yZXNwb25zZU11dGF0aW9uLmlucHV0VHlwZU5hbWV9ISkge1xuICAgICAgICAgICAgJHt0aGlzLmV2ZW50LnJlc3BvbnNlTXV0YXRpb24ubmFtZX0oaW5wdXQ6ICRpbnB1dCkge1xuICAgICAgICAgICAgICAgICR7dGhpcy5ldmVudC5yZXNwb25zZU11dGF0aW9uLnNlbGVjdGlvblNldH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIGA7XG4gICAgY2h1bmsgPSB7XG4gICAgICAuLi5jaHVuayxcbiAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IHRoaXMuc2VyaWFsaXplQ29udGVudChcbiAgICAgICAgY2h1bmsuYWNjdW11bGF0ZWRUdXJuQ29udGVudFxuICAgICAgKSxcbiAgICB9O1xuICAgIGNvbnN0IHZhcmlhYmxlczogTXV0YXRpb25TdHJlYW1pbmdSZXNwb25zZUlucHV0ID0ge1xuICAgICAgaW5wdXQ6IGNodW5rLFxuICAgIH07XG4gICAgcmV0dXJuIHsgcXVlcnksIHZhcmlhYmxlcyB9O1xuICB9O1xuXG4gIHByaXZhdGUgc2VyaWFsaXplQ29udGVudCA9IChjb250ZW50OiBDb250ZW50QmxvY2tbXSkgPT4ge1xuICAgIHJldHVybiBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgIGlmIChibG9jay50b29sVXNlKSB7XG4gICAgICAgIC8vIFRoZSBgaW5wdXRgIGZpZWxkIGlzIHR5cGVkIGFzIGBBV1MgSlNPTmAgaW4gdGhlIEdyYXBoUUwgQVBJIGJlY2F1c2UgaXQgY2FuIHJlcHJlc2VudFxuICAgICAgICAvLyBhcmJpdHJhcnkgSlNPTiB2YWx1ZXMuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gc3RyaW5naWZ5IGl0IGJlZm9yZSBzZW5kaW5nIGl0IHRvIEFwcFN5bmMgdG8gcHJldmVudCB0eXBlIGVycm9ycy5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBKU09OLnN0cmluZ2lmeShibG9jay50b29sVXNlLmlucHV0KTtcbiAgICAgICAgcmV0dXJuIHsgdG9vbFVzZTogeyAuLi5ibG9jay50b29sVXNlLCBpbnB1dCB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gYmxvY2s7XG4gICAgfSk7XG4gIH07XG59XG4iXX0=
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConversationTurnEventToolsProvider = void 0;
|
4
4
|
const graphql_tool_1 = require("./graphql_tool");
|
5
5
|
const graphql_query_factory_1 = require("./graphql_query_factory");
|
6
|
+
const user_agent_provider_1 = require("../user_agent_provider");
|
6
7
|
/**
|
7
8
|
* Creates executable tools from definitions in conversation turn event.
|
8
9
|
*/
|
@@ -22,11 +23,11 @@ class ConversationTurnEventToolsProvider {
|
|
22
23
|
const tools = (_a = toolsConfiguration.dataTools) === null || _a === void 0 ? void 0 : _a.map((tool) => {
|
23
24
|
const { name, description, inputSchema } = tool;
|
24
25
|
const query = this.graphQlQueryFactory.createQuery(tool);
|
25
|
-
return new graphql_tool_1.GraphQlTool(name, description, inputSchema, graphqlApiEndpoint, query, this.event.request.headers.authorization, this.event
|
26
|
+
return new graphql_tool_1.GraphQlTool(name, description, inputSchema, graphqlApiEndpoint, query, this.event.request.headers.authorization, new user_agent_provider_1.UserAgentProvider(this.event));
|
26
27
|
});
|
27
28
|
return tools !== null && tools !== void 0 ? tools : [];
|
28
29
|
};
|
29
30
|
}
|
30
31
|
}
|
31
32
|
exports.ConversationTurnEventToolsProvider = ConversationTurnEventToolsProvider;
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRfdG9vbHNfcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvZXZlbnQtdG9vbHMtcHJvdmlkZXIvZXZlbnRfdG9vbHNfcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQTZDO0FBQzdDLG1FQUE4RDtBQUM5RCxnRUFBMkQ7QUFFM0Q7O0dBRUc7QUFDSCxNQUFhLGtDQUFrQztJQUM3Qzs7T0FFRztJQUNILFlBQ21CLEtBQTRCLEVBQzVCLHNCQUEyQyxJQUFJLDJDQUFtQixFQUFFO1FBRHBFLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBaUQ7UUFHdkYsa0JBQWEsR0FBRyxHQUEwQixFQUFFOztZQUMxQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzlELElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRTtnQkFDeEQsT0FBTyxFQUFFLENBQUM7YUFDWDtZQUNELE1BQU0sS0FBSyxHQUFHLE1BQUEsa0JBQWtCLENBQUMsU0FBUywwQ0FBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNoRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLElBQUksMEJBQVcsQ0FDcEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUN4QyxJQUFJLHVDQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDbEMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxLQUFLLGFBQUwsS0FBSyxjQUFMLEtBQUssR0FBSSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDO0lBckJDLENBQUM7Q0FzQkw7QUE3QkQsZ0ZBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udmVyc2F0aW9uVHVybkV2ZW50LCBFeGVjdXRhYmxlVG9vbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IEdyYXBoUWxUb29sIH0gZnJvbSAnLi9ncmFwaHFsX3Rvb2wnO1xuaW1wb3J0IHsgR3JhcGhRbFF1ZXJ5RmFjdG9yeSB9IGZyb20gJy4vZ3JhcGhxbF9xdWVyeV9mYWN0b3J5JztcbmltcG9ydCB7IFVzZXJBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi4vdXNlcl9hZ2VudF9wcm92aWRlcic7XG5cbi8qKlxuICogQ3JlYXRlcyBleGVjdXRhYmxlIHRvb2xzIGZyb20gZGVmaW5pdGlvbnMgaW4gY29udmVyc2F0aW9uIHR1cm4gZXZlbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgY29udmVyc2F0aW9uIHR1cm4gZXZlbnQgdG9vbHMgcHJvdmlkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncmFwaFFsUXVlcnlGYWN0b3J5OiBHcmFwaFFsUXVlcnlGYWN0b3J5ID0gbmV3IEdyYXBoUWxRdWVyeUZhY3RvcnkoKVxuICApIHt9XG5cbiAgZ2V0RXZlbnRUb29scyA9ICgpOiBBcnJheTxFeGVjdXRhYmxlVG9vbD4gPT4ge1xuICAgIGNvbnN0IHsgdG9vbHNDb25maWd1cmF0aW9uLCBncmFwaHFsQXBpRW5kcG9pbnQgfSA9IHRoaXMuZXZlbnQ7XG4gICAgaWYgKCF0b29sc0NvbmZpZ3VyYXRpb24gfHwgIXRvb2xzQ29uZmlndXJhdGlvbi5kYXRhVG9vbHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdG9vbHMgPSB0b29sc0NvbmZpZ3VyYXRpb24uZGF0YVRvb2xzPy5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgZGVzY3JpcHRpb24sIGlucHV0U2NoZW1hIH0gPSB0b29sO1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdyYXBoUWxRdWVyeUZhY3RvcnkuY3JlYXRlUXVlcnkodG9vbCk7XG4gICAgICByZXR1cm4gbmV3IEdyYXBoUWxUb29sKFxuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgaW5wdXRTY2hlbWEsXG4gICAgICAgIGdyYXBocWxBcGlFbmRwb2ludCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHRoaXMuZXZlbnQucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24sXG4gICAgICAgIG5ldyBVc2VyQWdlbnRQcm92aWRlcih0aGlzLmV2ZW50KVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbHMgPz8gW107XG4gIH07XG59XG4iXX0=
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { ExecutableTool, JSONSchema, ToolInputSchema } from '../types';
|
2
2
|
import type { ToolResultContentBlock } from '@aws-sdk/client-bedrock-runtime';
|
3
3
|
import { GraphqlRequestExecutor } from '../graphql_request_executor';
|
4
|
+
import { UserAgentProvider } from '../user_agent_provider';
|
4
5
|
/**
|
5
6
|
* A tool that use GraphQl queries.
|
6
7
|
*/
|
@@ -11,12 +12,12 @@ export declare class GraphQlTool implements ExecutableTool<JSONSchema, unknown>
|
|
11
12
|
readonly graphQlEndpoint: string;
|
12
13
|
private readonly query;
|
13
14
|
readonly accessToken: string;
|
14
|
-
readonly
|
15
|
+
readonly userAgentProvider: UserAgentProvider;
|
15
16
|
private readonly graphqlRequestExecutor;
|
16
17
|
/**
|
17
18
|
* Creates GraphQl Tool
|
18
19
|
*/
|
19
|
-
constructor(name: string, description: string, inputSchema: ToolInputSchema<JSONSchema>, graphQlEndpoint: string, query: string, accessToken: string,
|
20
|
+
constructor(name: string, description: string, inputSchema: ToolInputSchema<JSONSchema>, graphQlEndpoint: string, query: string, accessToken: string, userAgentProvider: UserAgentProvider, graphqlRequestExecutor?: GraphqlRequestExecutor);
|
20
21
|
execute: (input: unknown | undefined) => Promise<ToolResultContentBlock>;
|
21
22
|
}
|
22
23
|
//# sourceMappingURL=graphql_tool.d.ts.map
|
@@ -9,14 +9,14 @@ class GraphQlTool {
|
|
9
9
|
/**
|
10
10
|
* Creates GraphQl Tool
|
11
11
|
*/
|
12
|
-
constructor(name, description, inputSchema, graphQlEndpoint, query, accessToken,
|
12
|
+
constructor(name, description, inputSchema, graphQlEndpoint, query, accessToken, userAgentProvider, graphqlRequestExecutor = new graphql_request_executor_1.GraphqlRequestExecutor(graphQlEndpoint, accessToken, userAgentProvider)) {
|
13
13
|
this.name = name;
|
14
14
|
this.description = description;
|
15
15
|
this.inputSchema = inputSchema;
|
16
16
|
this.graphQlEndpoint = graphQlEndpoint;
|
17
17
|
this.query = query;
|
18
18
|
this.accessToken = accessToken;
|
19
|
-
this.
|
19
|
+
this.userAgentProvider = userAgentProvider;
|
20
20
|
this.graphqlRequestExecutor = graphqlRequestExecutor;
|
21
21
|
this.execute = async (input) => {
|
22
22
|
if (!input) {
|
@@ -31,4 +31,4 @@ class GraphQlTool {
|
|
31
31
|
}
|
32
32
|
}
|
33
33
|
exports.GraphQlTool = GraphQlTool;
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbF90b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2V2ZW50LXRvb2xzLXByb3ZpZGVyL2dyYXBocWxfdG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSwwRUFBcUU7QUFHckU7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDdEI7O09BRUc7SUFDSCxZQUNTLElBQVksRUFDWixXQUFtQixFQUNuQixXQUF3QyxFQUN0QyxlQUF1QixFQUNmLEtBQWEsRUFDckIsV0FBbUIsRUFDbkIsaUJBQW9DLEVBQzVCLHlCQUF5QixJQUFJLGlEQUFzQixDQUNsRSxlQUFlLEVBQ2YsV0FBVyxFQUNYLGlCQUFpQixDQUNsQjtRQVhNLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBNkI7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ3JCLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQ25CLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDNUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUl0QztRQUdILFlBQU8sR0FBRyxLQUFLLEVBQ2IsS0FBMEIsRUFDTyxFQUFFO1lBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsTUFBTSxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLDhCQUE4QixDQUFDLENBQUM7YUFDdkU7WUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBRy9EO2dCQUNBLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDakIsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUM7SUFqQkMsQ0FBQztDQWtCTDtBQW5DRCxrQ0FtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeGVjdXRhYmxlVG9vbCwgSlNPTlNjaGVtYSwgVG9vbElucHV0U2NoZW1hIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBUb29sUmVzdWx0Q29udGVudEJsb2NrIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQgeyBEb2N1bWVudFR5cGUgfSBmcm9tICdAc21pdGh5L3R5cGVzJztcbmltcG9ydCB7IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IgfSBmcm9tICcuLi9ncmFwaHFsX3JlcXVlc3RfZXhlY3V0b3InO1xuaW1wb3J0IHsgVXNlckFnZW50UHJvdmlkZXIgfSBmcm9tICcuLi91c2VyX2FnZW50X3Byb3ZpZGVyJztcblxuLyoqXG4gKiBBIHRvb2wgdGhhdCB1c2UgR3JhcGhRbCBxdWVyaWVzLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRbFRvb2wgaW1wbGVtZW50cyBFeGVjdXRhYmxlVG9vbDxKU09OU2NoZW1hLCB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIEdyYXBoUWwgVG9vbFxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBwdWJsaWMgaW5wdXRTY2hlbWE6IFRvb2xJbnB1dFNjaGVtYTxKU09OU2NoZW1hPixcbiAgICByZWFkb25seSBncmFwaFFsRW5kcG9pbnQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5OiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgYWNjZXNzVG9rZW46IHN0cmluZyxcbiAgICByZWFkb25seSB1c2VyQWdlbnRQcm92aWRlcjogVXNlckFnZW50UHJvdmlkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBncmFwaHFsUmVxdWVzdEV4ZWN1dG9yID0gbmV3IEdyYXBocWxSZXF1ZXN0RXhlY3V0b3IoXG4gICAgICBncmFwaFFsRW5kcG9pbnQsXG4gICAgICBhY2Nlc3NUb2tlbixcbiAgICAgIHVzZXJBZ2VudFByb3ZpZGVyXG4gICAgKVxuICApIHt9XG5cbiAgZXhlY3V0ZSA9IGFzeW5jIChcbiAgICBpbnB1dDogdW5rbm93biB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFRvb2xSZXN1bHRDb250ZW50QmxvY2s+ID0+IHtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICB0aHJvdyBFcnJvcihgR3JhcGhRbCB0b29sICcke3RoaXMubmFtZX0nIHJlcXVpcmVzIGlucHV0IHRvIGV4ZWN1dGUuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0RXhlY3V0b3IuZXhlY3V0ZUdyYXBocWw8XG4gICAgICB1bmtub3duLFxuICAgICAgRG9jdW1lbnRUeXBlXG4gICAgPih7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyeSxcbiAgICAgIHZhcmlhYmxlczogaW5wdXQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHsganNvbjogcmVzcG9uc2UgfTtcbiAgfTtcbn1cbiJdfQ==
|
@@ -1,4 +1,5 @@
|
|
1
1
|
/// <reference types="node" />
|
2
|
+
import { UserAgentProvider } from './user_agent_provider';
|
2
3
|
export type GraphqlRequest<TVariables> = {
|
3
4
|
query: string;
|
4
5
|
variables: TVariables;
|
@@ -11,12 +12,14 @@ export type GraphqlRequest<TVariables> = {
|
|
11
12
|
export declare class GraphqlRequestExecutor {
|
12
13
|
private readonly graphQlEndpoint;
|
13
14
|
private readonly accessToken;
|
14
|
-
private readonly
|
15
|
+
private readonly userAgentProvider;
|
15
16
|
private readonly _fetch;
|
16
17
|
/**
|
17
18
|
* Creates GraphQL request executor.
|
18
19
|
*/
|
19
|
-
constructor(graphQlEndpoint: string, accessToken: string,
|
20
|
-
executeGraphql: <TVariables, TReturn>(request: GraphqlRequest<TVariables
|
20
|
+
constructor(graphQlEndpoint: string, accessToken: string, userAgentProvider: UserAgentProvider, _fetch?: typeof fetch);
|
21
|
+
executeGraphql: <TVariables, TReturn>(request: GraphqlRequest<TVariables>, options?: {
|
22
|
+
userAgent?: string;
|
23
|
+
}) => Promise<TReturn>;
|
21
24
|
}
|
22
25
|
//# sourceMappingURL=graphql_request_executor.d.ts.map
|