@nlabs/metropolisjs 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -8,6 +8,11 @@ export interface UserActionsOptions {
|
|
|
8
8
|
readonly userAdapter?: (input: unknown, options?: UserAdapterOptions) => any;
|
|
9
9
|
readonly userAdapterOptions?: UserAdapterOptions;
|
|
10
10
|
}
|
|
11
|
+
export interface VerificationEmailOptions {
|
|
12
|
+
readonly subject?: string;
|
|
13
|
+
readonly template?: string;
|
|
14
|
+
readonly text?: string;
|
|
15
|
+
}
|
|
11
16
|
export interface UserApiResultsType {
|
|
12
17
|
readonly users: {
|
|
13
18
|
readonly activeCount?: number;
|
|
@@ -16,6 +21,7 @@ export interface UserApiResultsType {
|
|
|
16
21
|
readonly deactivate?: Partial<User>;
|
|
17
22
|
readonly forgotPassword?: boolean;
|
|
18
23
|
readonly itemById?: Partial<User>;
|
|
24
|
+
readonly getUserByAttribute?: Partial<User>;
|
|
19
25
|
readonly getUserBySession?: Partial<User>;
|
|
20
26
|
readonly itemBySession?: Partial<User>;
|
|
21
27
|
readonly itemByToken?: Partial<User>;
|
|
@@ -54,6 +60,7 @@ export interface userActions {
|
|
|
54
60
|
list: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
55
61
|
listByConnection: (userId: string, from?: number, to?: number, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
56
62
|
itemById: (userId: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
63
|
+
getUserByAttribute: (attribute: 'email' | 'username', value: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
57
64
|
deleteBillingCard: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
58
65
|
listByLatest: (username?: string, from?: number, to?: number, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
59
66
|
listByReactions: (username: string, reactionNames: string[], from?: number, to?: number, personaProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
@@ -64,7 +71,7 @@ export interface userActions {
|
|
|
64
71
|
remove: (userId: string, requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
65
72
|
resetPassword: (username: string, password: string, code: string, type: 'email' | 'phone', requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
66
73
|
search: (query: string, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User[]>;
|
|
67
|
-
sendVerificationEmail: (email: string, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
74
|
+
sendVerificationEmail: (email: string, emailOptions?: VerificationEmailOptions, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
68
75
|
session: (userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
69
76
|
saveBillingCard: (card: Record<string, unknown>, userProps?: string[], requestOptions?: ActionRequestOptions) => Promise<User>;
|
|
70
77
|
signIn: (user: Partial<User>, expires?: number, requestOptions?: ActionRequestOptions) => Promise<SessionType>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userActions.d.ts","sourceRoot":"","sources":["../../../src/actions/userActions/userActions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"userActions.d.ts","sourceRoot":"","sources":["../../../src/actions/userActions/userActions.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
4
|
*/ import { validateUserInput } from '../../adapters/userAdapter/userAdapter.js';
|
|
5
5
|
import { USER_CONSTANTS } from '../../stores/userStore.js';
|
|
6
|
-
import { appMutation, appQuery, publicMutation, refreshSession } from '../../utils/api.js';
|
|
6
|
+
import { appMutation, appQuery, publicMutation, publicQuery, refreshSession } from '../../utils/api.js';
|
|
7
7
|
import { createBaseActions } from '../../utils/baseActionFactory.js';
|
|
8
8
|
import { clearPersistedSession, hydrateSessionFromStorage, isLoggedIn as isLoggedInWithStorage, normalizeSession, storeSession } from '../../utils/session.js';
|
|
9
9
|
import { getConfigFromFlux } from '../../utils/configUtils.js';
|
|
@@ -389,6 +389,45 @@ export const createUserActions = (flux, options)=>{
|
|
|
389
389
|
userProps
|
|
390
390
|
}, result, requestOptions);
|
|
391
391
|
};
|
|
392
|
+
const getUserByAttribute = async (attribute, value, userProps = [], requestOptions = {})=>{
|
|
393
|
+
const normalizedAttribute = String(attribute || '').trim();
|
|
394
|
+
const normalizedValue = String(value || '').trim();
|
|
395
|
+
let matchingUser = {};
|
|
396
|
+
const cachedResult = getCachedRequest(flux, `user.getUserByAttribute:${normalizedAttribute}:${normalizedValue}`, {
|
|
397
|
+
attribute: normalizedAttribute,
|
|
398
|
+
userProps,
|
|
399
|
+
value: normalizedValue
|
|
400
|
+
}, requestOptions);
|
|
401
|
+
if (cachedResult !== undefined) {
|
|
402
|
+
return cachedResult;
|
|
403
|
+
}
|
|
404
|
+
const queryVariables = {
|
|
405
|
+
attribute: {
|
|
406
|
+
type: 'String!',
|
|
407
|
+
value: normalizedAttribute
|
|
408
|
+
},
|
|
409
|
+
value: {
|
|
410
|
+
type: 'String!',
|
|
411
|
+
value: normalizedValue
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
const onSuccess = (data = {})=>{
|
|
415
|
+
const user = data?.users?.getUserByAttribute || {};
|
|
416
|
+
matchingUser = user;
|
|
417
|
+
return flux.dispatch({
|
|
418
|
+
type: USER_CONSTANTS.GET_ITEM_SUCCESS,
|
|
419
|
+
user
|
|
420
|
+
});
|
|
421
|
+
};
|
|
422
|
+
await withInvalidFieldRetry((safeUserProps)=>publicQuery(flux, 'getUserByAttribute', DATA_TYPE, queryVariables, safeUserProps, {
|
|
423
|
+
onSuccess
|
|
424
|
+
}), userProps, DEFAULT_USER_QUERY_FIELDS);
|
|
425
|
+
return setCachedRequest(flux, `user.getUserByAttribute:${normalizedAttribute}:${normalizedValue}`, {
|
|
426
|
+
attribute: normalizedAttribute,
|
|
427
|
+
userProps,
|
|
428
|
+
value: normalizedValue
|
|
429
|
+
}, matchingUser, requestOptions);
|
|
430
|
+
};
|
|
392
431
|
const saveBillingCard = async (card, userProps = [], requestOptions = {})=>{
|
|
393
432
|
const queryVariables = {
|
|
394
433
|
card: {
|
|
@@ -747,6 +786,7 @@ export const createUserActions = (flux, options)=>{
|
|
|
747
786
|
};
|
|
748
787
|
const confirmSignUp = async (code, type, requestOptions = {})=>true;
|
|
749
788
|
const forgotPassword = async (username, requestOptions = {})=>{
|
|
789
|
+
let forgotPasswordSucceeded = false;
|
|
750
790
|
const queryVariables = {
|
|
751
791
|
user: {
|
|
752
792
|
type: 'UserInput!',
|
|
@@ -759,26 +799,34 @@ export const createUserActions = (flux, options)=>{
|
|
|
759
799
|
};
|
|
760
800
|
const onSuccess = (data)=>{
|
|
761
801
|
const success = !!data?.users?.forgotPassword;
|
|
802
|
+
forgotPasswordSucceeded = success;
|
|
762
803
|
return flux.dispatch({
|
|
763
804
|
type: success ? USER_CONSTANTS.FORGOT_PASSWORD_SUCCESS : USER_CONSTANTS.FORGOT_PASSWORD_ERROR
|
|
764
805
|
});
|
|
765
806
|
};
|
|
766
|
-
|
|
807
|
+
await publicMutation(flux, 'forgotPassword', DATA_TYPE, queryVariables, [], {
|
|
767
808
|
onSuccess
|
|
768
|
-
}).then((data)=>{
|
|
769
|
-
const success = !!data?.users?.forgotPassword;
|
|
770
|
-
if (!success) {
|
|
771
|
-
throw new Error('forgot_password_failed');
|
|
772
|
-
}
|
|
773
|
-
return true;
|
|
774
809
|
});
|
|
810
|
+
if (!forgotPasswordSucceeded) {
|
|
811
|
+
throw new Error('forgot_password_failed');
|
|
812
|
+
}
|
|
813
|
+
return true;
|
|
775
814
|
};
|
|
776
|
-
const sendVerificationEmail = async (email, requestOptions = {})=>{
|
|
815
|
+
const sendVerificationEmail = async (email, emailOptions = {}, requestOptions = {})=>{
|
|
777
816
|
const queryVariables = {
|
|
778
817
|
user: {
|
|
779
818
|
type: 'UserInput!',
|
|
780
819
|
value: {
|
|
781
|
-
email
|
|
820
|
+
email,
|
|
821
|
+
...emailOptions.subject ? {
|
|
822
|
+
verificationEmailSubject: emailOptions.subject
|
|
823
|
+
} : {},
|
|
824
|
+
...emailOptions.template ? {
|
|
825
|
+
verificationEmailTemplate: emailOptions.template
|
|
826
|
+
} : {},
|
|
827
|
+
...emailOptions.text ? {
|
|
828
|
+
verificationEmailText: emailOptions.text
|
|
829
|
+
} : {}
|
|
782
830
|
}
|
|
783
831
|
}
|
|
784
832
|
};
|
|
@@ -845,6 +893,7 @@ export const createUserActions = (flux, options)=>{
|
|
|
845
893
|
forgotPassword,
|
|
846
894
|
isLoggedIn,
|
|
847
895
|
itemById,
|
|
896
|
+
getUserByAttribute,
|
|
848
897
|
listByConnection,
|
|
849
898
|
listByLatest,
|
|
850
899
|
listByReactions,
|
|
@@ -867,4 +916,4 @@ export const createUserActions = (flux, options)=>{
|
|
|
867
916
|
};
|
|
868
917
|
};
|
|
869
918
|
|
|
870
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHJlZnJlc2hTZXNzaW9ufSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHtjcmVhdGVCYXNlQWN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkuanMnO1xuaW1wb3J0IHtcbiAgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uLFxuICBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlLFxuICBpc0xvZ2dlZEluIGFzIGlzTG9nZ2VkSW5XaXRoU3RvcmFnZSxcbiAgbm9ybWFsaXplU2Vzc2lvbixcbiAgc3RvcmVTZXNzaW9uXG59IGZyb20gJy4uLy4uL3V0aWxzL3Nlc3Npb24uanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi4vLi4vdXRpbHMvY29uZmlnVXRpbHMuanMnO1xuaW1wb3J0IHtjbGVhckNhY2hlZFJlcXVlc3QsIGdldENhY2hlZFJlcXVlc3QsIHNldENhY2hlZFJlcXVlc3R9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5pbXBvcnQge3N5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbn0gZnJvbSAnLi4vcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEFjdGlvbiwgRmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtVc2VyfSBmcm9tICcuLi8uLi9hZGFwdGVycy91c2VyQWRhcHRlci91c2VyQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpUmVzdWx0c1R5cGUsIFNlc3Npb25UeXBlfSBmcm9tICcuLi8uLi91dGlscy9hcGkuanMnO1xuaW1wb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9yRmFjdG9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7QWN0aW9uUmVxdWVzdE9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3JlcXVlc3RDYWNoZS5qcyc7XG5cbmNvbnN0IERBVEFfVFlQRSA9ICd1c2Vycyc7XG5jb25zdCBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTID0gWyd1c2VySWQnLCAndXNlcm5hbWUnXTtcbmNvbnN0IFNFTlNJVElWRV9VU0VSX0ZJRUxEUyA9IG5ldyBTZXQoW1xuICAncGFzc3dvcmQnLFxuICAnc2FsdCcsXG4gICd0b2tlbicsXG4gICdyZWZyZXNoVG9rZW4nLFxuICAndmVyaWZpZWRFbWFpbENvZGUnLFxuICAndmVyaWZpZWRTbXNDb2RlJ1xuXSk7XG5jb25zdCBJTlZBTElEX0ZJRUxEX1JFR0VYID0gL0Nhbm5vdCBxdWVyeSBmaWVsZCBcIihbXlwiXSspXCIvZztcbmNvbnN0IGhhc1Nlc3Npb25JZGVudGl0eSA9ICh1c2VyPzogUGFydGlhbDxVc2VyPiB8IG51bGwpOiBib29sZWFuID0+XG4gICEhKHVzZXIgJiYgKCh1c2VyIGFzIGFueSkuX2lkIHx8ICh1c2VyIGFzIGFueSkudXNlcklkIHx8ICh1c2VyIGFzIGFueSkudXNlcm5hbWUgfHwgKHVzZXIgYXMgYW55KS5lbWFpbCkpO1xuXG5jb25zdCBzYW5pdGl6ZVVwZGF0ZVVzZXJJbnB1dCA9ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4gPSB7fSwgY3VycmVudFNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQYXJ0aWFsPFVzZXI+ID0+IHtcbiAgY29uc3QgbmV4dFVzZXIgPSBPYmplY3QuZW50cmllcyh1c2VySW5wdXQpLnJlZHVjZSgodXNlcjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFtmaWVsZCwgdmFsdWVdKSA9PiB7XG4gICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYoZmllbGQgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCk7XG5cbiAgICAgIGlmKHBhc3N3b3JkKSB7XG4gICAgICAgIHVzZXIucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYoZmllbGQgPT09ICd1c2VySWQnKSB7XG4gICAgICB1c2VyLnVzZXJJZCA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gY3VycmVudFNlc3Npb25bZmllbGRdO1xuXG4gICAgaWYoU3RyaW5nKHZhbHVlKSAhPT0gU3RyaW5nKGN1cnJlbnRWYWx1ZSA/PyAnJykpIHtcbiAgICAgIHVzZXJbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVzZXI7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gbmV4dFVzZXIgYXMgUGFydGlhbDxVc2VyPjtcbn07XG5cbmNvbnN0IHN5bmNTdG9yZWRTZXNzaW9uID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmssIHNlc3Npb25QYXRjaDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgY29uc3QgY3VycmVudFNlc3Npb24gPSAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmV0dXJuIHN0b3JlU2Vzc2lvbihmbHV4LCB7Li4uY3VycmVudFNlc3Npb24sIC4uLnNlc3Npb25QYXRjaH0pO1xufTtcblxuY29uc3QgZ2V0U2Vzc2lvblBheWxvYWQgPSAocGF5bG9hZDogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgaWYocGF5bG9hZCAmJiB0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcgJiYgJ3Nlc3Npb24nIGluIChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIHJldHVybiAoKChwYXlsb2FkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5zZXNzaW9uKSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICByZXR1cm4gKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnID8gcGF5bG9hZCA6IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmNvbnN0IGdldEZpZWxkUm9vdCA9IChmaWVsZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdHJpbW1lZCA9IGZpZWxkLnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC9eW0EtWmEtel9dW0EtWmEtejAtOV9dKi8pO1xuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6ICcnO1xufTtcblxuY29uc3Qgc2FuaXRpemVVc2VyUHJvcHMgPSAocHJvcHM6IHN0cmluZ1tdID0gW10sIGZhbGxiYWNrUHJvcHM6IHN0cmluZ1tdID0gREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBzYW5pdGl6ZWQgPSBwcm9wcy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldEZpZWxkUm9vdChmaWVsZCk7XG5cbiAgICBpZighcm9vdCB8fCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMuaGFzKHJvb3QpIHx8IHNlZW4uaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQoZmllbGQpO1xuICAgIGxpc3QucHVzaChmaWVsZCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcblxuICBpZihzYW5pdGl6ZWQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2tQcm9wcy5yZWR1Y2UoKGxpc3Q6IHN0cmluZ1tdLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldEZpZWxkUm9vdChmaWVsZCk7XG5cbiAgICBpZighcm9vdCB8fCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMuaGFzKHJvb3QpIHx8IHNlZW4uaGFzKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgc2Vlbi5hZGQoZmllbGQpO1xuICAgIGxpc3QucHVzaChmaWVsZCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH0sIFtdKTtcbn07XG5cbmNvbnN0IGdldEludmFsaWRGaWVsZHMgPSAoZXJyb3I6IHVua25vd24pOiBTZXQ8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVycm9ycyA9IChlcnJvciBhcyBhbnkpPy5lcnJvcnMgfHwgKGVycm9yIGFzIGFueSk/LnNvdXJjZT8uZXJyb3JzIHx8IFtdO1xuICBjb25zdCBpbnZhbGlkRmllbGRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZXJyb3JzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgPyBpdGVtIDogaXRlbT8ubWVzc2FnZSB8fCAnJztcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBJTlZBTElEX0ZJRUxEX1JFR0VYLmV4ZWMobWVzc2FnZSk7XG5cbiAgICB3aGlsZShtYXRjaCkge1xuICAgICAgaW52YWxpZEZpZWxkcy5hZGQobWF0Y2hbMV0pO1xuICAgICAgbWF0Y2ggPSBJTlZBTElEX0ZJRUxEX1JFR0VYLmV4ZWMobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgSU5WQUxJRF9GSUVMRF9SRUdFWC5sYXN0SW5kZXggPSAwO1xuICB9KTtcblxuICByZXR1cm4gaW52YWxpZEZpZWxkcztcbn07XG5cbmNvbnN0IHdpdGhJbnZhbGlkRmllbGRSZXRyeSA9IGFzeW5jIDxUPihcbiAgcmVxdWVzdFdpdGhQcm9wczogKHByb3BzOiBzdHJpbmdbXSkgPT4gUHJvbWlzZTxUPixcbiAgcHJvcHM6IHN0cmluZ1tdLFxuICBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBzYWZlUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhwcm9wcywgZmFsbGJhY2tQcm9wcyk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVxdWVzdFdpdGhQcm9wcyhzYWZlUHJvcHMpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IGdldEludmFsaWRGaWVsZHMoZXJyb3IpO1xuXG4gICAgaWYoaW52YWxpZEZpZWxkcy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBjb25zdCByZXRyeVByb3BzID0gc2FmZVByb3BzLmZpbHRlcigoZmllbGQpID0+ICFpbnZhbGlkRmllbGRzLmhhcyhnZXRGaWVsZFJvb3QoZmllbGQpKSk7XG5cbiAgICBpZihyZXRyeVByb3BzLmxlbmd0aCA9PT0gMCB8fCByZXRyeVByb3BzLmxlbmd0aCA9PT0gc2FmZVByb3BzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoUHJvcHMocmV0cnlQcm9wcyk7XG4gIH1cbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJBZGFwdGVyT3B0aW9ucyA9IEJhc2VBZGFwdGVyT3B0aW9ucztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uc09wdGlvbnMge1xuICByZWFkb25seSB1c2VyQWRhcHRlcj86IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gYW55O1xuICByZWFkb25seSB1c2VyQWRhcHRlck9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFwaVJlc3VsdHNUeXBlIHtcbiAgcmVhZG9ubHkgdXNlcnM6IHtcbiAgICByZWFkb25seSBhY3RpdmVDb3VudD86IG51bWJlcjtcbiAgICByZWFkb25seSBhZGRVc2VyPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBjb25maXJtQ29kZT86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgZGVhY3RpdmF0ZT86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZm9yZ290UGFzc3dvcmQ/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGl0ZW1CeUlkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlUb2tlbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VXNlcm5hbWU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJMaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5Q29ubmVjdGlvbj86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlMYXRlc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5UmVhY3Rpb25zPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVRhZ3M/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgc2VhcmNoPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHJlZnJlc2hTZXNzaW9uPzogU2Vzc2lvblR5cGU7XG4gICAgcmVhZG9ubHkgcmVtb3ZlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSByZXNldFBhc3N3b3JkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBzYXZlQmlsbGluZ0NhcmQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNlbmRWZXJpZmljYXRpb25FbWFpbD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnbkluPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBzaWduVXA/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGRlbGV0ZUJpbGxpbmdDYXJkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVVzZXI/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVBhc3N3b3JkPzogUGFydGlhbDxib29sZWFuPjtcbiAgICByZWFkb25seSB1cGRhdGVQbGFuPzogUGFydGlhbDxVc2VyPjtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVzZXJWYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVVc2VySW5wdXQoaW5wdXQpO1xuXG4gIGlmKG9wdGlvbnM/LnN0cmljdCAmJiAhdmFsaWRhdGVkLnVzZXJuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2VybmFtZSBpcyByZXF1aXJlZCBpbiBzdHJpY3QgbW9kZScpO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgdXNlckFjdGlvbnMge1xuICBhZGRVc2VyOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgY29uZmlybUNvZGU6IChjb2RlOiBudW1iZXIsIHt0eXBlLCB2YWx1ZX06IHt0eXBlOiAnZW1haWwnIHwgJ3Bob25lJzsgdmFsdWU6IHN0cmluZ30sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGNvbmZpcm1TaWduVXA6IChjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXI6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBjdXJyZW50VXNlcjogKHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGxpc3Q6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlDb25uZWN0aW9uOiAodXNlcklkOiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBpdGVtQnlJZDogKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgZGVsZXRlQmlsbGluZ0NhcmQ6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgbGlzdEJ5TGF0ZXN0OiAodXNlcm5hbWU/OiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlSZWFjdGlvbnM6IChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgbGlzdEJ5VGFnczogKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgdGFnTmFtZXM6IHN0cmluZ1tdLFxuICAgIGZyb20/OiBudW1iZXIsXG4gICAgdG8/OiBudW1iZXIsXG4gICAgcGVyc29uYVByb3BzPzogc3RyaW5nW10sXG4gICAgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9uc1xuICApID0+IFByb21pc2U8VXNlcltdPjtcbiAgZm9yZ290UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBpc0xvZ2dlZEluOiAoKSA9PiBib29sZWFuO1xuICByZWZyZXNoU2Vzc2lvbjogKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFNlc3Npb25UeXBlPjtcbiAgcmVtb3ZlOiAodXNlcklkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHJlc2V0UGFzc3dvcmQ6ICh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzZWFyY2g6IChxdWVyeTogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBzZW5kVmVyaWZpY2F0aW9uRW1haWw6IChlbWFpbDogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzZXNzaW9uOiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHNhdmVCaWxsaW5nQ2FyZDogKGNhcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgc2lnbkluOiAodXNlcjogUGFydGlhbDxVc2VyPiwgZXhwaXJlcz86IG51bWJlciwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxTZXNzaW9uVHlwZT47XG4gIHNpZ25PdXQ6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzaWduVXA6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVQYXNzd29yZDogKHBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHVwZGF0ZVVzZXI6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVQbGFuOiAocGxhbklkOiBzdHJpbmcsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVVc2VyQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gYW55KSA9PiB2b2lkO1xuICB1cGRhdGVVc2VyQWRhcHRlck9wdGlvbnM6IChvcHRpb25zOiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVc2VyQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFVzZXJBY3Rpb25zT3B0aW9uc1xuKTogdXNlckFjdGlvbnMgPT4ge1xuICBjb25zdCB1c2VyQmFzZSA9IGNyZWF0ZUJhc2VBY3Rpb25zKGZsdXgsIGRlZmF1bHRVc2VyVmFsaWRhdG9yLCB7XG4gICAgYWRhcHRlcjogb3B0aW9ucz8udXNlckFkYXB0ZXIsXG4gICAgYWRhcHRlck9wdGlvbnM6IG9wdGlvbnM/LnVzZXJBZGFwdGVyT3B0aW9uc1xuICB9KTtcbiAgY29uc3QgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyA9IGFzeW5jICh1c2VySWQgPSAnJyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0Jyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0QnlUYWdzJyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLnNlYXJjaCcpO1xuICAgIGlmKHVzZXJJZCkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGB1c2VyLml0ZW1CeUlkOiR7dXNlcklkfWApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhZGRVc2VyID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qge3VzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmR9ID0gdXNlcklucHV0O1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVXNlckFwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gZGF0YT8udXNlcnM/LmFkZFVzZXIgfHwge307XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkFERF9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKHVzZXJQcm9wcywgW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdkb2InLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhdGl0dWRlJyxcbiAgICAgICdsb25naXR1ZGUnLFxuICAgICAgJ21haWxpbmdMaXN0JyxcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3RodW1iVXJsJyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJ1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnYWRkVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaWduVXAgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB7dXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZH0gPSB1c2VySW5wdXQ7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogMTVcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBVc2VyQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBkYXRhPy51c2Vycz8uc2lnblVwIHx8IHt9O1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX1VQX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdzaWduVXAnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fVVBfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVVzZXIgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB1cGRhdGVJbnB1dCA9IHNhbml0aXplVXBkYXRlVXNlcklucHV0KHVzZXJJbnB1dCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpcnRoZGF0ZSxcbiAgICAgIGRvYixcbiAgICAgIGVtYWlsLFxuICAgICAgZmlyc3ROYW1lLFxuICAgICAgZ2VuZGVyLFxuICAgICAgbGFzdE5hbWUsXG4gICAgICBtYWlsaW5nTGlzdCxcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgcGhvbmUsXG4gICAgICB1c2VySWQsXG4gICAgICB1c2VybmFtZVxuICAgIH0gPSB1cGRhdGVJbnB1dDtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGJpcnRoZGF0ZTogYmlydGhkYXRlID8/IGRvYixcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBmaXJzdE5hbWUsXG4gICAgICAgICAgZ2VuZGVyLFxuICAgICAgICAgIGxhc3ROYW1lLFxuICAgICAgICAgIG1haWxpbmdMaXN0LFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHBob25lLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VycyA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM7XG4gICAgICBjb25zdCBsZWdhY3lVc2VyID0gdXNlcnM/LnVwZGF0ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gdXNlcnM/LnVwZGF0ZVVzZXIgfHwge307XG4gICAgICBjb25zdCB1c2VyID0gaGFzU2Vzc2lvbklkZW50aXR5KHVwZGF0ZWRVc2VyKSA/IHVwZGF0ZWRVc2VyIDogbGVnYWN5VXNlcjtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICdmaXJzdE5hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VDb3VudCcsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhc3ROYW1lJyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9uZ2l0dWRlJyxcbiAgICAgICdtYWlsaW5nTGlzdCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3Bob25lJyxcbiAgICAgICdzdGF0ZScsXG4gICAgICAndGh1bWJVcmwnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAndXBkYXRlVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhTdHJpbmcodXNlcklkIHx8ICcnKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1Db2RlID0gYXN5bmMgKFxuICAgIGNvZGU6IG51bWJlcixcbiAgICB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY29kZToge1xuICAgICAgICB0eXBlOiAnSW50IScsXG4gICAgICAgIHZhbHVlOiBjb2RlXG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnY29uZmlybUNvZGUnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSk7XG4gICAgY29uc3QgY29uZmlybWVkID0gISFkYXRhPy51c2Vycz8uY29uZmlybUNvZGU7XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtjb25maXJtZWQsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9TVUNDRVNTfSk7XG5cbiAgICByZXR1cm4gY29uZmlybWVkO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZSA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnJlbW92ZSB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHt0eXBlOiBVU0VSX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTLCB1c2VyfSk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ3JlbW92ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXModXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGFzeW5jICh1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgYXN5bmMgKHNlc3Npb25Qcm9wcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFF1ZXJ5KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZ2V0VXNlckJ5U2Vzc2lvbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAge30sXG4gICAgICAgIHNlc3Npb25Qcm9wc1xuICAgICAgKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj59O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gZGF0YT8udXNlcnM/LmdldFVzZXJCeVNlc3Npb24gfHwge307XG5cbiAgICAgIGlmKCFoYXNTZXNzaW9uSWRlbnRpdHkoc2Vzc2lvbkRhdGEpKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBzZXNzaW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBuZXh0U2Vzc2lvbiwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fU1VDQ0VTU30pO1xuICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygobmV4dFNlc3Npb24gYXMgYW55KT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICByZXR1cm4gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIG5leHRTZXNzaW9uKSB8fCBuZXh0U2Vzc2lvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIGFzIFVzZXI7XG4gICAgfSxcbiAgICB1c2VyUHJvcHMsXG4gICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICApO1xuXG4gIGNvbnN0IGl0ZW1CeUlkID0gYXN5bmMgKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyPihmbHV4LCBgdXNlci5pdGVtQnlJZDoke3VzZXJJZH1gLCB7dXNlcklkLCB1c2VyUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZ2V0VXNlckJ5SWQgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUgJiB7XG4gICAgICAgIHVzZXJzPzoge2dldFVzZXJCeUlkPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUlkKSB8fCB7fTtcblxuICAgICAgaWYodXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0VXNlckJ5SWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcjogZ2V0VXNlckJ5SWR9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdnZXRVc2VyQnlJZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCwge3VzZXJJZCwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXIsIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBzYXZlQmlsbGluZ0NhcmQgPSBhc3luYyAoXG4gICAgY2FyZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY2FyZDoge1xuICAgICAgICB0eXBlOiAnQ3JlZGl0Q2FyZElucHV0IScsXG4gICAgICAgIHZhbHVlOiBjYXJkXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNhdmVCaWxsaW5nQ2FyZCkgfHwge307XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RyaXBlQ2FyZEJyYW5kJyxcbiAgICAgICdzdHJpcGVDYXJkSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRMYXN0NCcsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAuLi51c2VyUHJvcHNcbiAgICBdKTtcbiAgICBjb25zdCBzZXNzaW9uVXNlcklkID0gU3RyaW5nKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSB8fCAnJyk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2F2ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVCaWxsaW5nQ2FyZCA9IGFzeW5jIChcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8uZGVsZXRlQmlsbGluZ0NhcmQpIHx8IHt9O1xuXG4gICAgICBpZigodXNlciBhcyBhbnkpPy51c2VySWQgJiYgKHVzZXIgYXMgYW55KS51c2VySWQgPT09IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSkge1xuICAgICAgICBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCB1c2VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICB7fSxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVQbGFuID0gYXN5bmMgKFxuICAgIHBsYW5JZDogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBuZXh0UGxhbklkID0gU3RyaW5nKHBsYW5JZCB8fCAnJykudHJpbSgpO1xuXG4gICAgaWYoIW5leHRQbGFuSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBzdWJzY3JpcHRpb24gcGxhbklkIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSBhIHVzZXIgcGxhbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgcGxhbklkOiB7XG4gICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICB2YWx1ZTogbmV4dFBsYW5JZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy51cGRhdGVQbGFuKSB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdwbGFuRXhwaXJlcycsXG4gICAgICAncGxhbklkJyxcbiAgICAgICdwbGFuU3RhdHVzJyxcbiAgICAgICdwbGFuU3Vic2NyaXB0aW9uSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVBsYW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoc2Vzc2lvblVzZXJJZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxpc3QgPSBhc3luYyAodXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3QnLCB7dXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5nZXRVc2VyTGlzdCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnZ2V0VXNlckxpc3QnLCBEQVRBX1RZUEUsIHt9LCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdCcsIHt1c2VyUHJvcHN9LCByZXN1bHQgYXMgVXNlcltdLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgbGlzdEJ5TGF0ZXN0ID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcgPSAnJyxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5TGF0ZXN0IHx8IFtdO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2xpc3QsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9MSVNUX1NVQ0NFU1N9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdsaXN0QnlMYXRlc3QnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUNvbm5lY3Rpb24gPSBhc3luYyAoXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PlxuICAgIFtdXG4gIDtcblxuICBjb25zdCBsaXN0QnlSZWFjdGlvbnMgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICBwZXJzb25hUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+XG4gICAgW11cbiAgO1xuXG4gIGNvbnN0IGxpc3RCeVRhZ3MgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICB0YWdOYW1lczogc3RyaW5nW10sXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgcGVyc29uYVByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeVRhZ3MnLCB7dXNlcm5hbWUsIHRhZ05hbWVzLCBmcm9tLCB0bywgcGVyc29uYVByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdHlwZTogJ1tTdHJpbmchXScsXG4gICAgICAgIHZhbHVlOiB0YWdOYW1lc1xuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5VGFncyB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnbGlzdEJ5VGFncycsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHBlcnNvbmFQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0QnlUYWdzJywge3VzZXJuYW1lLCB0YWdOYW1lcywgZnJvbSwgdG8sIHBlcnNvbmFQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBzZWFyY2ggPSBhc3luYyAocXVlcnk6IHN0cmluZywgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiBxdWVyeVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNlYXJjaCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnc2VhcmNoJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSAoKTogYm9vbGVhbiA9PiBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UoZmx1eCk7XG5cbiAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gICAgcmV0dXJuIChzZXNzaW9uIHx8IHt9KSBhcyBVc2VyO1xuICB9O1xuXG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIocmVxdWVzdE9wdGlvbnMpO1xuXG4gIGNvbnN0IHJlZnJlc2hTZXNzaW9uQWN0aW9uID0gYXN5bmMgKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWZyZXNoU2Vzc2lvbihmbHV4LCB0b2tlbiwgZXhwaXJlcyk7XG4gICAgcmV0dXJuIChyZXN1bHQ/LnJlZnJlc2hTZXNzaW9uIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgfTtcblxuICBjb25zdCBzaWduSW4gPSBhc3luYyAoXG4gICAgdXNlcjogUGFydGlhbDxVc2VyPixcbiAgICBleHBpcmVzPzogbnVtYmVyLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCB7ZW1haWwsIHBob25lLCB1c2VybmFtZSwgcGFzc3dvcmR9ID0gdXNlcjtcbiAgICBsZXQgdXNlcklucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbGVnYWN5VmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB7dHlwZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bn0+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHVzZXJJbnB1dCA9IHtcbiAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZihlbWFpbCAmJiBwYXNzd29yZCkge1xuICAgICAgdXNlcklucHV0ID0ge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgcGFzc3dvcmRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmKHBob25lICYmIHBhc3N3b3JkKSB7XG4gICAgICB1c2VySW5wdXQgPSB7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBwaG9uZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VybmFtZSwgZW1haWwsIG9yIHBob25lIG51bWJlciBhbmQgcGFzc3dvcmQgYXJlIHJlcXVpcmVkIHRvIHNpZ24gaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCByZXF1ZXN0ZWRFeHBpcmVzID0gTWF0aC5tYXgoMSwgTnVtYmVyKGV4cGlyZXMgfHwgY29uZmlnLmFwcD8uc2Vzc2lvbj8ubWF4TWludXRlcyB8fCAxNSkpO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0ZWRFeHBpcmVzXG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB1c2VySW5wdXRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXJzID0gKGRhdGEgYXMgYW55KT8udXNlcnM7XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IG5vcm1hbGl6ZVNlc3Npb24odXNlcnM/LnNpZ25JbiB8fCB7fSk7XG4gICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgc2Vzc2lvbkRhdGEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Vzc2lvbjogc3RvcmVkU2Vzc2lvbixcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9TVUNDRVNTXG4gICAgICB9IGFzIEZsdXhBY3Rpb247XG4gICAgfTtcblxuICAgIGNvbnN0IHBlcmZvcm1TaWduSW4gPSBhc3luYyAocXVlcnlWYXJpYWJsZXM6IGFueSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25SZXN1bHQgPSBhd2FpdCBwdWJsaWNNdXRhdGlvbjxTZXNzaW9uVHlwZSAmIFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdzaWduSW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbJ2V4cGlyZXMnLCAnaXNzdWVkJywgJ3Rva2VuJywgJ3VzZXJJZCcsICd1c2VybmFtZSddLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJhc2VTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0U2Vzc2lvblBheWxvYWQoc2Vzc2lvblJlc3VsdCkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBoeWRyYXRlZFNlc3Npb24gPSBhd2FpdCBzZXNzaW9uKFsndXNlcklkJywgJ3BlcnNvbmFJZCcsICd1c2VyQWNjZXNzJywgJ3VzZXJuYW1lJ10sIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygoaHlkcmF0ZWRTZXNzaW9uIGFzIGFueSk/LnBlcnNvbmFJZCB8fCAnJykpO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBjb25zdCBmYWxsYmFja1Nlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBiYXNlU2Vzc2lvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIHNlc3Npb246IGZhbGxiYWNrU2Vzc2lvbixcbiAgICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxsYmFja1Nlc3Npb247XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbmFsU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywgYmFzZVNlc3Npb24pIHx8IGJhc2VTZXNzaW9uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKTtcbiAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICBzZXNzaW9uOiBmaW5hbFNlc3Npb24sXG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fU1VDQ0VTU1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmluYWxTZXNzaW9uO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHBlcmZvcm1TaWduSW4ocXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoU3RyaW5nKCh1c2VyIGFzIGFueSk/LnVzZXJJZCB8fCAnJykpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaWduT3V0ID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgYXdhaXQgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uKGZsdXgpO1xuICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG4gICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1TaWduVXAgPSBhc3luYyAoY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZTtcblxuICBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWw6IHVzZXJuYW1lLFxuICAgICAgICAgIHBob25lOiB1c2VybmFtZSxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhPzogVXNlckFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uZm9yZ290UGFzc3dvcmQ7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5GT1JHT1RfUEFTU1dPUkRfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLkZPUkdPVF9QQVNTV09SRF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KGZsdXgsICdmb3Jnb3RQYXNzd29yZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LmZvcmdvdFBhc3N3b3JkO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3Jnb3RfcGFzc3dvcmRfZmFpbGVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBzZW5kVmVyaWZpY2F0aW9uRW1haWwgPSBhc3luYyAoZW1haWw6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5zZW5kVmVyaWZpY2F0aW9uRW1haWw7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgZmx1eCxcbiAgICAgICdzZW5kVmVyaWZpY2F0aW9uRW1haWwnLFxuICAgICAgREFUQV9UWVBFLFxuICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICBbXSxcbiAgICAgIHtvblN1Y2Nlc3N9XG4gICAgKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZW5kX3ZlcmlmaWNhdGlvbl9lbWFpbF9mYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0UGFzc3dvcmQgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvZGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogY29kZVxuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLih0eXBlID09PSAnZW1haWwnID8ge2VtYWlsOiB1c2VybmFtZX0gOiB7cGhvbmU6IHVzZXJuYW1lfSksXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5SRVNFVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuUkVTRVRfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAncmVzZXRQYXNzd29yZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICBpZighc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc2V0X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBhc3luYyAocGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZVxuICA7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRVc2VyLFxuICAgIGNvbmZpcm1Db2RlLFxuICAgIGNvbmZpcm1TaWduVXAsXG4gICAgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyLFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIGRlbGV0ZUJpbGxpbmdDYXJkLFxuICAgIGxpc3QsXG4gICAgZm9yZ290UGFzc3dvcmQsXG4gICAgaXNMb2dnZWRJbixcbiAgICBpdGVtQnlJZCxcbiAgICBsaXN0QnlDb25uZWN0aW9uLFxuICAgIGxpc3RCeUxhdGVzdCxcbiAgICBsaXN0QnlSZWFjdGlvbnMsXG4gICAgbGlzdEJ5VGFncyxcbiAgICByZWZyZXNoU2Vzc2lvbjogcmVmcmVzaFNlc3Npb25BY3Rpb24sXG4gICAgcmVtb3ZlLFxuICAgIHJlc2V0UGFzc3dvcmQsXG4gICAgc2F2ZUJpbGxpbmdDYXJkLFxuICAgIHNlYXJjaCxcbiAgICBzZW5kVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgc2Vzc2lvbixcbiAgICBzaWduSW4sXG4gICAgc2lnbk91dCxcbiAgICBzaWduVXAsXG4gICAgdXBkYXRlUGFzc3dvcmQsXG4gICAgdXBkYXRlVXNlcixcbiAgICB1cGRhdGVQbGFuLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyOiB1c2VyQmFzZS51cGRhdGVBZGFwdGVyLFxuICAgIHVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9uczogdXNlckJhc2UudXBkYXRlT3B0aW9uc1xuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVVzZXJJbnB1dCIsIlVTRVJfQ09OU1RBTlRTIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsInB1YmxpY011dGF0aW9uIiwicmVmcmVzaFNlc3Npb24iLCJjcmVhdGVCYXNlQWN0aW9ucyIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UiLCJpc0xvZ2dlZEluIiwiaXNMb2dnZWRJbldpdGhTdG9yYWdlIiwibm9ybWFsaXplU2Vzc2lvbiIsInN0b3JlU2Vzc2lvbiIsImdldENvbmZpZ0Zyb21GbHV4IiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24iLCJEQVRBX1RZUEUiLCJERUZBVUxUX1VTRVJfUVVFUllfRklFTERTIiwiU0VOU0lUSVZFX1VTRVJfRklFTERTIiwiU2V0IiwiSU5WQUxJRF9GSUVMRF9SRUdFWCIsImhhc1Nlc3Npb25JZGVudGl0eSIsInVzZXIiLCJfaWQiLCJ1c2VySWQiLCJ1c2VybmFtZSIsImVtYWlsIiwic2FuaXRpemVVcGRhdGVVc2VySW5wdXQiLCJ1c2VySW5wdXQiLCJjdXJyZW50U2Vzc2lvbiIsIm5leHRVc2VyIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsImZpZWxkIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJwYXNzd29yZCIsIlN0cmluZyIsInRyaW0iLCJjdXJyZW50VmFsdWUiLCJzeW5jU3RvcmVkU2Vzc2lvbiIsImZsdXgiLCJzZXNzaW9uUGF0Y2giLCJnZXRTdGF0ZSIsImdldFNlc3Npb25QYXlsb2FkIiwicGF5bG9hZCIsInNlc3Npb24iLCJnZXRGaWVsZFJvb3QiLCJ0cmltbWVkIiwibWF0Y2giLCJzYW5pdGl6ZVVzZXJQcm9wcyIsInByb3BzIiwiZmFsbGJhY2tQcm9wcyIsInNlZW4iLCJzYW5pdGl6ZWQiLCJsaXN0Iiwicm9vdCIsImhhcyIsImFkZCIsInB1c2giLCJsZW5ndGgiLCJnZXRJbnZhbGlkRmllbGRzIiwiZXJyb3IiLCJlcnJvcnMiLCJzb3VyY2UiLCJpbnZhbGlkRmllbGRzIiwiZm9yRWFjaCIsIml0ZW0iLCJtZXNzYWdlIiwiZXhlYyIsImxhc3RJbmRleCIsIndpdGhJbnZhbGlkRmllbGRSZXRyeSIsInJlcXVlc3RXaXRoUHJvcHMiLCJzYWZlUHJvcHMiLCJzaXplIiwicmV0cnlQcm9wcyIsImZpbHRlciIsImRlZmF1bHRVc2VyVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwidmFsaWRhdGVkIiwic3RyaWN0IiwiRXJyb3IiLCJjcmVhdGVVc2VyQWN0aW9ucyIsInVzZXJCYXNlIiwiYWRhcHRlciIsInVzZXJBZGFwdGVyIiwiYWRhcHRlck9wdGlvbnMiLCJ1c2VyQWRhcHRlck9wdGlvbnMiLCJjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzIiwiYWRkVXNlciIsInVzZXJQcm9wcyIsInJlcXVlc3RPcHRpb25zIiwicXVlcnlWYXJpYWJsZXMiLCJ0eXBlIiwib25TdWNjZXNzIiwiZGF0YSIsInVzZXJzIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwicmV0dXJuUHJvcHMiLCJzaWduVXAiLCJleHBpcmVzIiwiU0lHTl9VUF9TVUNDRVNTIiwiU0lHTl9VUF9FUlJPUiIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVJbnB1dCIsImJpcnRoZGF0ZSIsImRvYiIsImZpcnN0TmFtZSIsImdlbmRlciIsImxhc3ROYW1lIiwibWFpbGluZ0xpc3QiLCJwaG9uZSIsImxlZ2FjeVVzZXIiLCJ1cGRhdGUiLCJ1cGRhdGVkVXNlciIsIlVQREFURV9JVEVNX1NVQ0NFU1MiLCJjb25maXJtQ29kZSIsImNvZGUiLCJjb25maXJtZWQiLCJDT05GSVJNX1NJR05fVVBfU1VDQ0VTUyIsInJlbW92ZSIsIlJFTU9WRV9JVEVNX1NVQ0NFU1MiLCJzZXNzaW9uUHJvcHMiLCJzZXNzaW9uRGF0YSIsImdldFVzZXJCeVNlc3Npb24iLCJHRVRfU0VTU0lPTl9FUlJPUiIsIm5leHRTZXNzaW9uIiwiR0VUX1NFU1NJT05fU1VDQ0VTUyIsInBlcnNvbmFJZCIsIml0ZW1CeUlkIiwiY2FjaGVkUmVzdWx0IiwiZ2V0VXNlckJ5SWQiLCJHRVRfSVRFTV9TVUNDRVNTIiwicmVzdWx0Iiwic2FmZVVzZXJQcm9wcyIsInNhdmVCaWxsaW5nQ2FyZCIsImNhcmQiLCJzZXNzaW9uVXNlcklkIiwiZGVsZXRlQmlsbGluZ0NhcmQiLCJ1cGRhdGVQbGFuIiwicGxhbklkIiwibmV4dFBsYW5JZCIsImdldFVzZXJMaXN0IiwiR0VUX0xJU1RfU1VDQ0VTUyIsImxpc3RCeUxhdGVzdCIsImZyb20iLCJ0byIsImxpc3RCeUNvbm5lY3Rpb24iLCJsaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbk5hbWVzIiwicGVyc29uYVByb3BzIiwibGlzdEJ5VGFncyIsInRhZ05hbWVzIiwidGFncyIsInNlYXJjaCIsInF1ZXJ5IiwiY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyIiwiY3VycmVudFVzZXIiLCJyZWZyZXNoU2Vzc2lvbkFjdGlvbiIsInRva2VuIiwic2lnbkluIiwibGVnYWN5VmFyaWFibGVzIiwiY29uZmlnIiwicmVxdWVzdGVkRXhwaXJlcyIsIk1hdGgiLCJtYXgiLCJOdW1iZXIiLCJhcHAiLCJtYXhNaW51dGVzIiwicXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0Iiwic3RvcmVkU2Vzc2lvbiIsIlNJR05fSU5fU1VDQ0VTUyIsInBlcmZvcm1TaWduSW4iLCJzZXNzaW9uUmVzdWx0IiwiYmFzZVNlc3Npb24iLCJoeWRyYXRlZFNlc3Npb24iLCJmYWxsYmFja1Nlc3Npb24iLCJmaW5hbFNlc3Npb24iLCJTSUdOX0lOX0VSUk9SIiwic2lnbk91dCIsIlNJR05fT1VUX1NVQ0NFU1MiLCJjb25maXJtU2lnblVwIiwiZm9yZ290UGFzc3dvcmQiLCJzdWNjZXNzIiwiRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MiLCJGT1JHT1RfUEFTU1dPUkRfRVJST1IiLCJ0aGVuIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiQ09ORklSTV9TSUdOX1VQX0VSUk9SIiwicmVzZXRQYXNzd29yZCIsIlJFU0VUX1BBU1NXT1JEX1NVQ0NFU1MiLCJSRVNFVF9QQVNTV09SRF9FUlJPUiIsInVwZGF0ZVBhc3N3b3JkIiwibmV3UGFzc3dvcmQiLCJ1cGRhdGVVc2VyQWRhcHRlciIsInVwZGF0ZUFkYXB0ZXIiLCJ1cGRhdGVVc2VyQWRhcHRlck9wdGlvbnMiLCJ1cGRhdGVPcHRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxpQkFBaUIsUUFBTyw0Q0FBNEM7QUFDNUUsU0FBUUMsY0FBYyxRQUFPLDRCQUE0QjtBQUN6RCxTQUFRQyxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsY0FBYyxFQUFFQyxjQUFjLFFBQU8scUJBQXFCO0FBQ3pGLFNBQVFDLGlCQUFpQixRQUFPLG1DQUFtQztB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
|
|
919
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy91c2VyQWN0aW9ucy91c2VyQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt2YWxpZGF0ZVVzZXJJbnB1dH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHtVU0VSX0NPTlNUQU5UU30gZnJvbSAnLi4vLi4vc3RvcmVzL3VzZXJTdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeSwgcHVibGljTXV0YXRpb24sIHB1YmxpY1F1ZXJ5LCByZWZyZXNoU2Vzc2lvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y3JlYXRlQmFzZUFjdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmltcG9ydCB7XG4gIGNsZWFyUGVyc2lzdGVkU2Vzc2lvbixcbiAgaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSxcbiAgaXNMb2dnZWRJbiBhcyBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UsXG4gIG5vcm1hbGl6ZVNlc3Npb24sXG4gIHN0b3JlU2Vzc2lvblxufSBmcm9tICcuLi8uLi91dGlscy9zZXNzaW9uLmpzJztcbmltcG9ydCB7Z2V0Q29uZmlnRnJvbUZsdXh9IGZyb20gJy4uLy4uL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuaW1wb3J0IHtzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb259IGZyb20gJy4uL3BlcnNvbmFBY3Rpb25zL3BlcnNvbmFBY3Rpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7VXNlcn0gZnJvbSAnLi4vLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaVJlc3VsdHNUeXBlLCBTZXNzaW9uVHlwZX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB0eXBlIHtCYXNlQWRhcHRlck9wdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuaW1wb3J0IHR5cGUge0FjdGlvblJlcXVlc3RPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5jb25zdCBEQVRBX1RZUEUgPSAndXNlcnMnO1xuY29uc3QgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEUyA9IFsndXNlcklkJywgJ3VzZXJuYW1lJ107XG5jb25zdCBTRU5TSVRJVkVfVVNFUl9GSUVMRFMgPSBuZXcgU2V0KFtcbiAgJ3Bhc3N3b3JkJyxcbiAgJ3NhbHQnLFxuICAndG9rZW4nLFxuICAncmVmcmVzaFRva2VuJyxcbiAgJ3ZlcmlmaWVkRW1haWxDb2RlJyxcbiAgJ3ZlcmlmaWVkU21zQ29kZSdcbl0pO1xuY29uc3QgSU5WQUxJRF9GSUVMRF9SRUdFWCA9IC9DYW5ub3QgcXVlcnkgZmllbGQgXCIoW15cIl0rKVwiL2c7XG5jb25zdCBoYXNTZXNzaW9uSWRlbnRpdHkgPSAodXNlcj86IFBhcnRpYWw8VXNlcj4gfCBudWxsKTogYm9vbGVhbiA9PlxuICAhISh1c2VyICYmICgodXNlciBhcyBhbnkpLl9pZCB8fCAodXNlciBhcyBhbnkpLnVzZXJJZCB8fCAodXNlciBhcyBhbnkpLnVzZXJuYW1lIHx8ICh1c2VyIGFzIGFueSkuZW1haWwpKTtcblxuY29uc3Qgc2FuaXRpemVVcGRhdGVVc2VySW5wdXQgPSAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+ID0ge30sIGN1cnJlbnRTZXNzaW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9KTogUGFydGlhbDxVc2VyPiA9PiB7XG4gIGNvbnN0IG5leHRVc2VyID0gT2JqZWN0LmVudHJpZXModXNlcklucHV0KS5yZWR1Y2UoKHVzZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBbZmllbGQsIHZhbHVlXSkgPT4ge1xuICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAncGFzc3dvcmQnKSB7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuXG4gICAgICBpZihwYXNzd29yZCkge1xuICAgICAgICB1c2VyLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmKGZpZWxkID09PSAndXNlcklkJykge1xuICAgICAgdXNlci51c2VySWQgPSB2YWx1ZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRTZXNzaW9uW2ZpZWxkXTtcblxuICAgIGlmKFN0cmluZyh2YWx1ZSkgIT09IFN0cmluZyhjdXJyZW50VmFsdWUgPz8gJycpKSB7XG4gICAgICB1c2VyW2ZpZWxkXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIG5leHRVc2VyIGFzIFBhcnRpYWw8VXNlcj47XG59O1xuXG5jb25zdCBzeW5jU3RvcmVkU2Vzc2lvbiA9IGFzeW5jIChmbHV4OiBGbHV4RnJhbWV3b3JrLCBzZXNzaW9uUGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJldHVybiBzdG9yZVNlc3Npb24oZmx1eCwgey4uLmN1cnJlbnRTZXNzaW9uLCAuLi5zZXNzaW9uUGF0Y2h9KTtcbn07XG5cbmNvbnN0IGdldFNlc3Npb25QYXlsb2FkID0gKHBheWxvYWQ6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGlmKHBheWxvYWQgJiYgdHlwZW9mIHBheWxvYWQgPT09ICdvYmplY3QnICYmICdzZXNzaW9uJyBpbiAocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICByZXR1cm4gKCgocGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuc2Vzc2lvbikgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIChwYXlsb2FkICYmIHR5cGVvZiBwYXlsb2FkID09PSAnb2JqZWN0JyA/IHBheWxvYWQgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5jb25zdCBnZXRGaWVsZFJvb3QgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBmaWVsZC50cmltKCk7XG4gIGNvbnN0IG1hdGNoID0gdHJpbW1lZC5tYXRjaCgvXltBLVphLXpfXVtBLVphLXowLTlfXSovKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiAnJztcbn07XG5cbmNvbnN0IHNhbml0aXplVXNlclByb3BzID0gKHByb3BzOiBzdHJpbmdbXSA9IFtdLCBmYWxsYmFja1Byb3BzOiBzdHJpbmdbXSA9IERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFMpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2FuaXRpemVkID0gcHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG5cbiAgaWYoc2FuaXRpemVkLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cbiAgcmV0dXJuIGZhbGxiYWNrUHJvcHMucmVkdWNlKChsaXN0OiBzdHJpbmdbXSwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBnZXRGaWVsZFJvb3QoZmllbGQpO1xuXG4gICAgaWYoIXJvb3QgfHwgU0VOU0lUSVZFX1VTRVJfRklFTERTLmhhcyhyb290KSB8fCBzZWVuLmhhcyhmaWVsZCkpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIHNlZW4uYWRkKGZpZWxkKTtcbiAgICBsaXN0LnB1c2goZmllbGQpO1xuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG59O1xuXG5jb25zdCBnZXRJbnZhbGlkRmllbGRzID0gKGVycm9yOiB1bmtub3duKTogU2V0PHN0cmluZz4gPT4ge1xuICBjb25zdCBlcnJvcnMgPSAoZXJyb3IgYXMgYW55KT8uZXJyb3JzIHx8IChlcnJvciBhcyBhbnkpPy5zb3VyY2U/LmVycm9ycyB8fCBbXTtcbiAgY29uc3QgaW52YWxpZEZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGVycm9ycy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IGl0ZW0/Lm1lc3NhZ2UgfHwgJyc7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuXG4gICAgd2hpbGUobWF0Y2gpIHtcbiAgICAgIGludmFsaWRGaWVsZHMuYWRkKG1hdGNoWzFdKTtcbiAgICAgIG1hdGNoID0gSU5WQUxJRF9GSUVMRF9SRUdFWC5leGVjKG1lc3NhZ2UpO1xuICAgIH1cblxuICAgIElOVkFMSURfRklFTERfUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgfSk7XG5cbiAgcmV0dXJuIGludmFsaWRGaWVsZHM7XG59O1xuXG5jb25zdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkgPSBhc3luYyA8VD4oXG4gIHJlcXVlc3RXaXRoUHJvcHM6IChwcm9wczogc3RyaW5nW10pID0+IFByb21pc2U8VD4sXG4gIHByb3BzOiBzdHJpbmdbXSxcbiAgZmFsbGJhY2tQcm9wczogc3RyaW5nW10gPSBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3Qgc2FmZVByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMocHJvcHMsIGZhbGxiYWNrUHJvcHMpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlcXVlc3RXaXRoUHJvcHMoc2FmZVByb3BzKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBnZXRJbnZhbGlkRmllbGRzKGVycm9yKTtcblxuICAgIGlmKGludmFsaWRGaWVsZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlQcm9wcyA9IHNhZmVQcm9wcy5maWx0ZXIoKGZpZWxkKSA9PiAhaW52YWxpZEZpZWxkcy5oYXMoZ2V0RmllbGRSb290KGZpZWxkKSkpO1xuXG4gICAgaWYocmV0cnlQcm9wcy5sZW5ndGggPT09IDAgfHwgcmV0cnlQcm9wcy5sZW5ndGggPT09IHNhZmVQcm9wcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0V2l0aFByb3BzKHJldHJ5UHJvcHMpO1xuICB9XG59O1xuXG5leHBvcnQgdHlwZSBVc2VyQWRhcHRlck9wdGlvbnMgPSBCYXNlQWRhcHRlck9wdGlvbnM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvbnNPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IGFueTtcbiAgcmVhZG9ubHkgdXNlckFkYXB0ZXJPcHRpb25zPzogVXNlckFkYXB0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmaWNhdGlvbkVtYWlsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHN1YmplY3Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlbXBsYXRlPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBcGlSZXN1bHRzVHlwZSB7XG4gIHJlYWRvbmx5IHVzZXJzOiB7XG4gICAgcmVhZG9ubHkgYWN0aXZlQ291bnQ/OiBudW1iZXI7XG4gICAgcmVhZG9ubHkgYWRkVXNlcj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgY29uZmlybUNvZGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGRlYWN0aXZhdGU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGZvcmdvdFBhc3N3b3JkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBpdGVtQnlJZD86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgZ2V0VXNlckJ5QXR0cmlidXRlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBnZXRVc2VyQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlTZXNzaW9uPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBpdGVtQnlUb2tlbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgaXRlbUJ5VXNlcm5hbWU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGdldFVzZXJMaXN0PzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5Q29ubmVjdGlvbj86IFVzZXJbXTtcbiAgICByZWFkb25seSBsaXN0QnlMYXRlc3Q/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgbGlzdEJ5UmVhY3Rpb25zPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IGxpc3RCeVRhZ3M/OiBVc2VyW107XG4gICAgcmVhZG9ubHkgc2VhcmNoPzogVXNlcltdO1xuICAgIHJlYWRvbmx5IHJlZnJlc2hTZXNzaW9uPzogU2Vzc2lvblR5cGU7XG4gICAgcmVhZG9ubHkgcmVtb3ZlPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSByZXNldFBhc3N3b3JkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBzYXZlQmlsbGluZ0NhcmQ/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHNlbmRWZXJpZmljYXRpb25FbWFpbD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgc2Vzc2lvbj86IFBhcnRpYWw8VXNlcj47XG4gICAgcmVhZG9ubHkgc2lnbkluPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSBzaWduVXA/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IGRlbGV0ZUJpbGxpbmdDYXJkPzogUGFydGlhbDxVc2VyPjtcbiAgICByZWFkb25seSB1cGRhdGU/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVVzZXI/OiBQYXJ0aWFsPFVzZXI+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZVBhc3N3b3JkPzogUGFydGlhbDxib29sZWFuPjtcbiAgICByZWFkb25seSB1cGRhdGVQbGFuPzogUGFydGlhbDxVc2VyPjtcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFVzZXJWYWxpZGF0b3IgPSAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IHtcbiAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVVc2VySW5wdXQoaW5wdXQpO1xuXG4gIGlmKG9wdGlvbnM/LnN0cmljdCAmJiAhdmFsaWRhdGVkLnVzZXJuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2VybmFtZSBpcyByZXF1aXJlZCBpbiBzdHJpY3QgbW9kZScpO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgdXNlckFjdGlvbnMge1xuICBhZGRVc2VyOiAodXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgY29uZmlybUNvZGU6IChjb2RlOiBudW1iZXIsIHt0eXBlLCB2YWx1ZX06IHt0eXBlOiAnZW1haWwnIHwgJ3Bob25lJzsgdmFsdWU6IHN0cmluZ30sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGNvbmZpcm1TaWduVXA6IChjb2RlOiBzdHJpbmcsIHR5cGU6ICdlbWFpbCcgfCAncGhvbmUnLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBjdXJyZW50QXV0aGVudGljYXRlZFVzZXI6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBjdXJyZW50VXNlcjogKHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIGxpc3Q6ICh1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlDb25uZWN0aW9uOiAodXNlcklkOiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBpdGVtQnlJZDogKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgZ2V0VXNlckJ5QXR0cmlidXRlOiAoXG4gICAgYXR0cmlidXRlOiAnZW1haWwnIHwgJ3VzZXJuYW1lJyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHVzZXJQcm9wcz86IHN0cmluZ1tdLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPFVzZXI+O1xuICBkZWxldGVCaWxsaW5nQ2FyZDogKHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICBsaXN0QnlMYXRlc3Q6ICh1c2VybmFtZT86IHN0cmluZywgZnJvbT86IG51bWJlciwgdG8/OiBudW1iZXIsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXJbXT47XG4gIGxpc3RCeVJlYWN0aW9uczogKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lczogc3RyaW5nW10sXG4gICAgZnJvbT86IG51bWJlcixcbiAgICB0bz86IG51bWJlcixcbiAgICBwZXJzb25hUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBsaXN0QnlUYWdzOiAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICB0YWdOYW1lczogc3RyaW5nW10sXG4gICAgZnJvbT86IG51bWJlcixcbiAgICB0bz86IG51bWJlcixcbiAgICBwZXJzb25hUHJvcHM/OiBzdHJpbmdbXSxcbiAgICByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zXG4gICkgPT4gUHJvbWlzZTxVc2VyW10+O1xuICBmb3Jnb3RQYXNzd29yZDogKHVzZXJuYW1lOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIGlzTG9nZ2VkSW46ICgpID0+IGJvb2xlYW47XG4gIHJlZnJlc2hTZXNzaW9uOiAodG9rZW4/OiBzdHJpbmcsIGV4cGlyZXM/OiBudW1iZXIsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8U2Vzc2lvblR5cGU+O1xuICByZW1vdmU6ICh1c2VySWQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgcmVzZXRQYXNzd29yZDogKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNvZGU6IHN0cmluZywgdHlwZTogJ2VtYWlsJyB8ICdwaG9uZScsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHNlYXJjaDogKHF1ZXJ5OiBzdHJpbmcsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXJbXT47XG4gIHNlbmRWZXJpZmljYXRpb25FbWFpbDogKFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgZW1haWxPcHRpb25zPzogVmVyaWZpY2F0aW9uRW1haWxPcHRpb25zLFxuICAgIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnNcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzZXNzaW9uOiAodXNlclByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VXNlcj47XG4gIHNhdmVCaWxsaW5nQ2FyZDogKGNhcmQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB1c2VyUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxVc2VyPjtcbiAgc2lnbkluOiAodXNlcjogUGFydGlhbDxVc2VyPiwgZXhwaXJlcz86IG51bWJlciwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxTZXNzaW9uVHlwZT47XG4gIHNpZ25PdXQ6IChyZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBzaWduVXA6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVQYXNzd29yZDogKHBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gIHVwZGF0ZVVzZXI6ICh1c2VySW5wdXQ6IFBhcnRpYWw8VXNlcj4sIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVQbGFuOiAocGxhbklkOiBzdHJpbmcsIHVzZXJQcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFVzZXI+O1xuICB1cGRhdGVVc2VyQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFVzZXJBZGFwdGVyT3B0aW9ucykgPT4gYW55KSA9PiB2b2lkO1xuICB1cGRhdGVVc2VyQWRhcHRlck9wdGlvbnM6IChvcHRpb25zOiBVc2VyQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVc2VyQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFVzZXJBY3Rpb25zT3B0aW9uc1xuKTogdXNlckFjdGlvbnMgPT4ge1xuICBjb25zdCB1c2VyQmFzZSA9IGNyZWF0ZUJhc2VBY3Rpb25zKGZsdXgsIGRlZmF1bHRVc2VyVmFsaWRhdG9yLCB7XG4gICAgYWRhcHRlcjogb3B0aW9ucz8udXNlckFkYXB0ZXIsXG4gICAgYWRhcHRlck9wdGlvbnM6IG9wdGlvbnM/LnVzZXJBZGFwdGVyT3B0aW9uc1xuICB9KTtcbiAgY29uc3QgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyA9IGFzeW5jICh1c2VySWQgPSAnJyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0Jyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLmxpc3RCeUxhdGVzdCcpO1xuICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCAndXNlci5saXN0QnlUYWdzJyk7XG4gICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsICd1c2VyLnNlYXJjaCcpO1xuICAgIGlmKHVzZXJJZCkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGB1c2VyLml0ZW1CeUlkOiR7dXNlcklkfWApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhZGRVc2VyID0gYXN5bmMgKFxuICAgIHVzZXJJbnB1dDogUGFydGlhbDxVc2VyPixcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qge3VzZXJuYW1lLCBlbWFpbCwgcGFzc3dvcmR9ID0gdXNlcklucHV0O1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogVXNlckFwaVJlc3VsdHNUeXBlKTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gZGF0YT8udXNlcnM/LmFkZFVzZXIgfHwge307XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkFERF9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKHVzZXJQcm9wcywgW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdkb2InLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhdGl0dWRlJyxcbiAgICAgICdsb25naXR1ZGUnLFxuICAgICAgJ21haWxpbmdMaXN0JyxcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3RodW1iVXJsJyxcbiAgICAgICd1c2VyQWNjZXNzJyxcbiAgICAgICd1c2VySWQnLFxuICAgICAgJ3VzZXJuYW1lJ1xuICAgIF0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnYWRkVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaWduVXAgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB7dXNlcm5hbWUsIGVtYWlsLCBwYXNzd29yZH0gPSB1c2VySW5wdXQ7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBleHBpcmVzOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogMTVcbiAgICAgIH0sXG4gICAgICB1c2VyOiB7XG4gICAgICAgIHR5cGU6ICdVc2VySW5wdXQhJyxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBVc2VyQXBpUmVzdWx0c1R5cGUpOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBkYXRhPy51c2Vycz8uc2lnblVwIHx8IHt9O1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX1VQX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdhZGRlZCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdzaWduVXAnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fVVBfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVVzZXIgPSBhc3luYyAoXG4gICAgdXNlcklucHV0OiBQYXJ0aWFsPFVzZXI+LFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCB1cGRhdGVJbnB1dCA9IHNhbml0aXplVXBkYXRlVXNlcklucHV0KHVzZXJJbnB1dCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIGNvbnN0IHtcbiAgICAgIGJpcnRoZGF0ZSxcbiAgICAgIGRvYixcbiAgICAgIGVtYWlsLFxuICAgICAgZmlyc3ROYW1lLFxuICAgICAgZ2VuZGVyLFxuICAgICAgbGFzdE5hbWUsXG4gICAgICBtYWlsaW5nTGlzdCxcbiAgICAgIHBhc3N3b3JkLFxuICAgICAgcGhvbmUsXG4gICAgICB1c2VySWQsXG4gICAgICB1c2VybmFtZVxuICAgIH0gPSB1cGRhdGVJbnB1dDtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGJpcnRoZGF0ZTogYmlydGhkYXRlID8/IGRvYixcbiAgICAgICAgICBlbWFpbCxcbiAgICAgICAgICBmaXJzdE5hbWUsXG4gICAgICAgICAgZ2VuZGVyLFxuICAgICAgICAgIGxhc3ROYW1lLFxuICAgICAgICAgIG1haWxpbmdMaXN0LFxuICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgIHBob25lLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VycyA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM7XG4gICAgICBjb25zdCBsZWdhY3lVc2VyID0gdXNlcnM/LnVwZGF0ZSB8fCB7fTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gdXNlcnM/LnVwZGF0ZVVzZXIgfHwge307XG4gICAgICBjb25zdCB1c2VyID0gaGFzU2Vzc2lvbklkZW50aXR5KHVwZGF0ZWRVc2VyKSA/IHVwZGF0ZWRVc2VyIDogbGVnYWN5VXNlcjtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ2FkZGVkJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ2NvdW50cnknLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICdmaXJzdE5hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAnaW1hZ2VDb3VudCcsXG4gICAgICAnaW1hZ2VVcmwnLFxuICAgICAgJ2xhc3ROYW1lJyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9uZ2l0dWRlJyxcbiAgICAgICdtYWlsaW5nTGlzdCcsXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3Bob25lJyxcbiAgICAgICdzdGF0ZScsXG4gICAgICAndGh1bWJVcmwnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAndXBkYXRlVXNlcicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIHJldHVyblByb3BzLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcyhTdHJpbmcodXNlcklkIHx8ICcnKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1Db2RlID0gYXN5bmMgKFxuICAgIGNvZGU6IG51bWJlcixcbiAgICB7dHlwZSwgdmFsdWV9OiB7dHlwZTogJ2VtYWlsJyB8ICdwaG9uZSc7IHZhbHVlOiBzdHJpbmd9LFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY29kZToge1xuICAgICAgICB0eXBlOiAnSW50IScsXG4gICAgICAgIHZhbHVlOiBjb2RlXG4gICAgICB9LFxuICAgICAgdHlwZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiB0eXBlXG4gICAgICB9LFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAnY29uZmlybUNvZGUnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXSk7XG4gICAgY29uc3QgY29uZmlybWVkID0gISFkYXRhPy51c2Vycz8uY29uZmlybUNvZGU7XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtjb25maXJtZWQsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9TVUNDRVNTfSk7XG5cbiAgICByZXR1cm4gY29uZmlybWVkO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZSA9IGFzeW5jICh1c2VySWQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnJlbW92ZSB8fCB7fTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHt0eXBlOiBVU0VSX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTLCB1c2VyfSk7XG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb24oZmx1eCwgJ3JlbW92ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXModXNlcklkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGFzeW5jICh1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgYXN5bmMgKHNlc3Npb25Qcm9wcykgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGFwcFF1ZXJ5KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnZ2V0VXNlckJ5U2Vzc2lvbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAge30sXG4gICAgICAgIHNlc3Npb25Qcm9wc1xuICAgICAgKSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5U2Vzc2lvbj86IFBhcnRpYWw8VXNlcj59O1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHNlc3Npb25EYXRhID0gZGF0YT8udXNlcnM/LmdldFVzZXJCeVNlc3Npb24gfHwge307XG5cbiAgICAgIGlmKCFoYXNTZXNzaW9uSWRlbnRpdHkoc2Vzc2lvbkRhdGEpKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dFNlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBzZXNzaW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBuZXh0U2Vzc2lvbiwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fU1VDQ0VTU30pO1xuICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygobmV4dFNlc3Npb24gYXMgYW55KT8ucGVyc29uYUlkIHx8ICcnKSk7XG4gICAgICByZXR1cm4gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIG5leHRTZXNzaW9uKSB8fCBuZXh0U2Vzc2lvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIGFzIFVzZXI7XG4gICAgfSxcbiAgICB1c2VyUHJvcHMsXG4gICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICApO1xuXG4gIGNvbnN0IGl0ZW1CeUlkID0gYXN5bmMgKHVzZXJJZDogc3RyaW5nLCB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyPihmbHV4LCBgdXNlci5pdGVtQnlJZDoke3VzZXJJZH1gLCB7dXNlcklkLCB1c2VyUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXJJZDoge1xuICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgdmFsdWU6IHVzZXJJZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgZ2V0VXNlckJ5SWQgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUgJiB7XG4gICAgICAgIHVzZXJzPzoge2dldFVzZXJCeUlkPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUlkKSB8fCB7fTtcblxuICAgICAgaWYodXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0VXNlckJ5SWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcjogZ2V0VXNlckJ5SWR9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdnZXRVc2VyQnlJZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oZmx1eCwgYHVzZXIuaXRlbUJ5SWQ6JHt1c2VySWR9YCwge3VzZXJJZCwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXIsIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBnZXRVc2VyQnlBdHRyaWJ1dGUgPSBhc3luYyAoXG4gICAgYXR0cmlidXRlOiAnZW1haWwnIHwgJ3VzZXJuYW1lJyxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkQXR0cmlidXRlID0gU3RyaW5nKGF0dHJpYnV0ZSB8fCAnJykudHJpbSgpIGFzICdlbWFpbCcgfCAndXNlcm5hbWUnO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xuICAgIGxldCBtYXRjaGluZ1VzZXI6IFBhcnRpYWw8VXNlcj4gPSB7fTtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXI+KFxuICAgICAgZmx1eCxcbiAgICAgIGB1c2VyLmdldFVzZXJCeUF0dHJpYnV0ZToke25vcm1hbGl6ZWRBdHRyaWJ1dGV9OiR7bm9ybWFsaXplZFZhbHVlfWAsXG4gICAgICB7YXR0cmlidXRlOiBub3JtYWxpemVkQXR0cmlidXRlLCB1c2VyUHJvcHMsIHZhbHVlOiBub3JtYWxpemVkVmFsdWV9LFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBhdHRyaWJ1dGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogbm9ybWFsaXplZEF0dHJpYnV0ZVxuICAgICAgfSxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSAmIHtcbiAgICAgICAgdXNlcnM/OiB7Z2V0VXNlckJ5QXR0cmlidXRlPzogUGFydGlhbDxVc2VyPn07XG4gICAgICB9KT8udXNlcnM/LmdldFVzZXJCeUF0dHJpYnV0ZSkgfHwge307XG4gICAgICBtYXRjaGluZ1VzZXIgPSB1c2VyO1xuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX0lURU1fU1VDQ0VTUywgdXNlcn0pO1xuICAgIH07XG5cbiAgICBhd2FpdCB3aXRoSW52YWxpZEZpZWxkUmV0cnkoXG4gICAgICAoc2FmZVVzZXJQcm9wcykgPT4gcHVibGljUXVlcnkoZmx1eCwgJ2dldFVzZXJCeUF0dHJpYnV0ZScsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHVzZXJQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcj4oXG4gICAgICBmbHV4LFxuICAgICAgYHVzZXIuZ2V0VXNlckJ5QXR0cmlidXRlOiR7bm9ybWFsaXplZEF0dHJpYnV0ZX06JHtub3JtYWxpemVkVmFsdWV9YCxcbiAgICAgIHthdHRyaWJ1dGU6IG5vcm1hbGl6ZWRBdHRyaWJ1dGUsIHVzZXJQcm9wcywgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZX0sXG4gICAgICBtYXRjaGluZ1VzZXIgYXMgVXNlcixcbiAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBzYXZlQmlsbGluZ0NhcmQgPSBhc3luYyAoXG4gICAgY2FyZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcj4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgY2FyZDoge1xuICAgICAgICB0eXBlOiAnQ3JlZGl0Q2FyZElucHV0IScsXG4gICAgICAgIHZhbHVlOiBjYXJkXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gKChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNhdmVCaWxsaW5nQ2FyZCkgfHwge307XG5cbiAgICAgIGlmKCh1c2VyIGFzIGFueSk/LnVzZXJJZCAmJiAodXNlciBhcyBhbnkpLnVzZXJJZCA9PT0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnVzZXJJZCcpKSB7XG4gICAgICAgIHN5bmNTdG9yZWRTZXNzaW9uKGZsdXgsIHVzZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsXG4gICAgICAgIHVzZXJcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCByZXR1cm5Qcm9wcyA9IHNhbml0aXplVXNlclByb3BzKFtcbiAgICAgICdtb2RpZmllZCcsXG4gICAgICAnc3RyaXBlQ2FyZEJyYW5kJyxcbiAgICAgICdzdHJpcGVDYXJkSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRMYXN0NCcsXG4gICAgICAndXNlcklkJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAuLi51c2VyUHJvcHNcbiAgICBdKTtcbiAgICBjb25zdCBzZXNzaW9uVXNlcklkID0gU3RyaW5nKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSB8fCAnJyk7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAnc2F2ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVCaWxsaW5nQ2FyZCA9IGFzeW5jIChcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSAoKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8uZGVsZXRlQmlsbGluZ0NhcmQpIHx8IHt9O1xuXG4gICAgICBpZigodXNlciBhcyBhbnkpPy51c2VySWQgJiYgKHVzZXIgYXMgYW55KS51c2VySWQgPT09IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi51c2VySWQnKSkge1xuICAgICAgICBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCB1c2VyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfSVRFTV9TVUNDRVNTLFxuICAgICAgICB1c2VyXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmV0dXJuUHJvcHMgPSBzYW5pdGl6ZVVzZXJQcm9wcyhbXG4gICAgICAnbW9kaWZpZWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZUJpbGxpbmdDYXJkJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICB7fSxcbiAgICAgICAgcmV0dXJuUHJvcHMsXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzKHNlc3Npb25Vc2VySWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVQbGFuID0gYXN5bmMgKFxuICAgIHBsYW5JZDogc3RyaW5nLFxuICAgIHVzZXJQcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFVzZXI+ID0+IHtcbiAgICBjb25zdCBuZXh0UGxhbklkID0gU3RyaW5nKHBsYW5JZCB8fCAnJykudHJpbSgpO1xuXG4gICAgaWYoIW5leHRQbGFuSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQSBzdWJzY3JpcHRpb24gcGxhbklkIGlzIHJlcXVpcmVkIHRvIHVwZGF0ZSBhIHVzZXIgcGxhbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgcGxhbklkOiB7XG4gICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICB2YWx1ZTogbmV4dFBsYW5JZFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9ICgoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy51cGRhdGVQbGFuKSB8fCB7fTtcblxuICAgICAgaWYoKHVzZXIgYXMgYW55KT8udXNlcklkICYmICh1c2VyIGFzIGFueSkudXNlcklkID09PSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykpIHtcbiAgICAgICAgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgdXNlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX0lURU1fU1VDQ0VTUyxcbiAgICAgICAgdXNlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJldHVyblByb3BzID0gc2FuaXRpemVVc2VyUHJvcHMoW1xuICAgICAgJ21vZGlmaWVkJyxcbiAgICAgICdwbGFuRXhwaXJlcycsXG4gICAgICAncGxhbklkJyxcbiAgICAgICdwbGFuU3RhdHVzJyxcbiAgICAgICdwbGFuU3Vic2NyaXB0aW9uSWQnLFxuICAgICAgJ3N0cmlwZUNhcmRCcmFuZCcsXG4gICAgICAnc3RyaXBlQ2FyZElkJyxcbiAgICAgICdzdHJpcGVDYXJkTGFzdDQnLFxuICAgICAgJ3VzZXJBY2Nlc3MnLFxuICAgICAgJ3VzZXJJZCcsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgLi4udXNlclByb3BzXG4gICAgXSk7XG4gICAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IFN0cmluZyhmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJykgfHwgJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ3VwZGF0ZVBsYW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICByZXR1cm5Qcm9wcyxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoc2Vzc2lvblVzZXJJZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGxpc3QgPSBhc3luYyAodXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3QnLCB7dXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pID0+IHtcbiAgICAgIGNvbnN0IGxpc3QgPSAoZGF0YSBhcyB1bmtub3duIGFzIFVzZXJBcGlSZXN1bHRzVHlwZSk/LnVzZXJzPy5nZXRVc2VyTGlzdCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnZ2V0VXNlckxpc3QnLCBEQVRBX1RZUEUsIHt9LCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdCcsIHt1c2VyUHJvcHN9LCByZXN1bHQgYXMgVXNlcltdLCByZXF1ZXN0T3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgbGlzdEJ5TGF0ZXN0ID0gYXN5bmMgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcgPSAnJyxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICB1c2VyUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5TGF0ZXN0IHx8IFtdO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2xpc3QsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9MSVNUX1NVQ0NFU1N9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2l0aEludmFsaWRGaWVsZFJldHJ5KFxuICAgICAgKHNhZmVVc2VyUHJvcHMpID0+IGFwcFF1ZXJ5KGZsdXgsICdsaXN0QnlMYXRlc3QnLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBzYWZlVXNlclByb3BzLCB7b25TdWNjZXNzfSksXG4gICAgICB1c2VyUHJvcHMsXG4gICAgICBERUZBVUxUX1VTRVJfUVVFUllfRklFTERTXG4gICAgKTtcblxuICAgIHJldHVybiBzZXRDYWNoZWRSZXF1ZXN0PFVzZXJbXT4oZmx1eCwgJ3VzZXIubGlzdEJ5TGF0ZXN0Jywge3VzZXJuYW1lLCBmcm9tLCB0bywgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGxpc3RCeUNvbm5lY3Rpb24gPSBhc3luYyAoXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PlxuICAgIFtdXG4gIDtcblxuICBjb25zdCBsaXN0QnlSZWFjdGlvbnMgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWVzOiBzdHJpbmdbXSxcbiAgICBmcm9tOiBudW1iZXIgPSAwLFxuICAgIHRvOiBudW1iZXIgPSAxMCxcbiAgICBwZXJzb25hUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxVc2VyW10+ID0+XG4gICAgW11cbiAgO1xuXG4gIGNvbnN0IGxpc3RCeVRhZ3MgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICB0YWdOYW1lczogc3RyaW5nW10sXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMTAsXG4gICAgcGVyc29uYVByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLmxpc3RCeVRhZ3MnLCB7dXNlcm5hbWUsIHRhZ05hbWVzLCBmcm9tLCB0bywgcGVyc29uYVByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogZnJvbVxuICAgICAgfSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgdHlwZTogJ1tTdHJpbmchXScsXG4gICAgICAgIHZhbHVlOiB0YWdOYW1lc1xuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdJbnQnLFxuICAgICAgICB2YWx1ZTogdG9cbiAgICAgIH0sXG4gICAgICB1c2VybmFtZToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IHVzZXJuYW1lXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gKGRhdGEgYXMgdW5rbm93biBhcyBVc2VyQXBpUmVzdWx0c1R5cGUpPy51c2Vycz8ubGlzdEJ5VGFncyB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnbGlzdEJ5VGFncycsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIHNhZmVVc2VyUHJvcHMsIHtvblN1Y2Nlc3N9KSxcbiAgICAgIHBlcnNvbmFQcm9wcyxcbiAgICAgIERFRkFVTFRfVVNFUl9RVUVSWV9GSUVMRFNcbiAgICApO1xuXG4gICAgcmV0dXJuIHNldENhY2hlZFJlcXVlc3Q8VXNlcltdPihmbHV4LCAndXNlci5saXN0QnlUYWdzJywge3VzZXJuYW1lLCB0YWdOYW1lcywgZnJvbSwgdG8sIHBlcnNvbmFQcm9wc30sIHJlc3VsdCBhcyBVc2VyW10sIHJlcXVlc3RPcHRpb25zKTtcbiAgfTtcblxuICBjb25zdCBzZWFyY2ggPSBhc3luYyAocXVlcnk6IHN0cmluZywgdXNlclByb3BzOiBzdHJpbmdbXSA9IFtdLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8VXNlcltdPiA9PiB7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gZ2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiBxdWVyeVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IChkYXRhIGFzIHVua25vd24gYXMgVXNlckFwaVJlc3VsdHNUeXBlKT8udXNlcnM/LnNlYXJjaCB8fCBbXTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtsaXN0LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfTElTVF9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdpdGhJbnZhbGlkRmllbGRSZXRyeShcbiAgICAgIChzYWZlVXNlclByb3BzKSA9PiBhcHBRdWVyeShmbHV4LCAnc2VhcmNoJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgc2FmZVVzZXJQcm9wcywge29uU3VjY2Vzc30pLFxuICAgICAgdXNlclByb3BzLFxuICAgICAgREVGQVVMVF9VU0VSX1FVRVJZX0ZJRUxEU1xuICAgICk7XG5cbiAgICByZXR1cm4gc2V0Q2FjaGVkUmVxdWVzdDxVc2VyW10+KGZsdXgsICd1c2VyLnNlYXJjaCcsIHtxdWVyeSwgdXNlclByb3BzfSwgcmVzdWx0IGFzIFVzZXJbXSwgcmVxdWVzdE9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IGlzTG9nZ2VkSW4gPSAoKTogYm9vbGVhbiA9PiBpc0xvZ2dlZEluV2l0aFN0b3JhZ2UoZmx1eCk7XG5cbiAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gICAgcmV0dXJuIChzZXNzaW9uIHx8IHt9KSBhcyBVc2VyO1xuICB9O1xuXG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxVc2VyPiA9PiBjdXJyZW50QXV0aGVudGljYXRlZFVzZXIocmVxdWVzdE9wdGlvbnMpO1xuXG4gIGNvbnN0IHJlZnJlc2hTZXNzaW9uQWN0aW9uID0gYXN5bmMgKHRva2VuPzogc3RyaW5nLCBleHBpcmVzPzogbnVtYmVyLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZWZyZXNoU2Vzc2lvbihmbHV4LCB0b2tlbiwgZXhwaXJlcyk7XG4gICAgcmV0dXJuIChyZXN1bHQ/LnJlZnJlc2hTZXNzaW9uIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgfTtcblxuICBjb25zdCBzaWduSW4gPSBhc3luYyAoXG4gICAgdXNlcjogUGFydGlhbDxVc2VyPixcbiAgICBleHBpcmVzPzogbnVtYmVyLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICBjb25zdCB7ZW1haWwsIHBob25lLCB1c2VybmFtZSwgcGFzc3dvcmR9ID0gdXNlcjtcbiAgICBsZXQgdXNlcklucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgbGVnYWN5VmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCB7dHlwZTogc3RyaW5nOyB2YWx1ZTogdW5rbm93bn0+IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHVzZXJJbnB1dCA9IHtcbiAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZihlbWFpbCAmJiBwYXNzd29yZCkge1xuICAgICAgdXNlcklucHV0ID0ge1xuICAgICAgICBlbWFpbCxcbiAgICAgICAgcGFzc3dvcmRcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmKHBob25lICYmIHBhc3N3b3JkKSB7XG4gICAgICB1c2VySW5wdXQgPSB7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBwaG9uZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VybmFtZSwgZW1haWwsIG9yIHBob25lIG51bWJlciBhbmQgcGFzc3dvcmQgYXJlIHJlcXVpcmVkIHRvIHNpZ24gaW4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCByZXF1ZXN0ZWRFeHBpcmVzID0gTWF0aC5tYXgoMSwgTnVtYmVyKGV4cGlyZXMgfHwgY29uZmlnLmFwcD8uc2Vzc2lvbj8ubWF4TWludXRlcyB8fCAxNSkpO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0ZWRFeHBpcmVzXG4gICAgICB9LFxuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB1c2VySW5wdXRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gYXN5bmMgKGRhdGE6IEFwaVJlc3VsdHNUeXBlID0ge30pOiBQcm9taXNlPEZsdXhBY3Rpb24+ID0+IHtcbiAgICAgIGNvbnN0IHVzZXJzID0gKGRhdGEgYXMgYW55KT8udXNlcnM7XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IG5vcm1hbGl6ZVNlc3Npb24odXNlcnM/LnNpZ25JbiB8fCB7fSk7XG4gICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgc2Vzc2lvbkRhdGEpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Vzc2lvbjogc3RvcmVkU2Vzc2lvbixcbiAgICAgICAgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9TVUNDRVNTXG4gICAgICB9IGFzIEZsdXhBY3Rpb247XG4gICAgfTtcblxuICAgIGNvbnN0IHBlcmZvcm1TaWduSW4gPSBhc3luYyAocXVlcnlWYXJpYWJsZXM6IGFueSk6IFByb21pc2U8U2Vzc2lvblR5cGU+ID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25SZXN1bHQgPSBhd2FpdCBwdWJsaWNNdXRhdGlvbjxTZXNzaW9uVHlwZSAmIFVzZXJBcGlSZXN1bHRzVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdzaWduSW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbJ2V4cGlyZXMnLCAnaXNzdWVkJywgJ3Rva2VuJywgJ3VzZXJJZCcsICd1c2VybmFtZSddLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJhc2VTZXNzaW9uID0gYXdhaXQgc3luY1N0b3JlZFNlc3Npb24oZmx1eCwgZ2V0U2Vzc2lvblBheWxvYWQoc2Vzc2lvblJlc3VsdCkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBoeWRyYXRlZFNlc3Npb24gPSBhd2FpdCBzZXNzaW9uKFsndXNlcklkJywgJ3BlcnNvbmFJZCcsICd1c2VyQWNjZXNzJywgJ3VzZXJuYW1lJ10sIHJlcXVlc3RPcHRpb25zKTtcbiAgICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZygoaHlkcmF0ZWRTZXNzaW9uIGFzIGFueSk/LnBlcnNvbmFJZCB8fCAnJykpO1xuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBjb25zdCBmYWxsYmFja1Nlc3Npb24gPSBhd2FpdCBzeW5jU3RvcmVkU2Vzc2lvbihmbHV4LCBiYXNlU2Vzc2lvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIHNlc3Npb246IGZhbGxiYWNrU2Vzc2lvbixcbiAgICAgICAgICB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX0lOX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxsYmFja1Nlc3Npb247XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbmFsU2Vzc2lvbiA9IGF3YWl0IHN5bmNTdG9yZWRTZXNzaW9uKFxuICAgICAgICBmbHV4LFxuICAgICAgICAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywgYmFzZVNlc3Npb24pIHx8IGJhc2VTZXNzaW9uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKTtcbiAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe1xuICAgICAgICBzZXNzaW9uOiBmaW5hbFNlc3Npb24sXG4gICAgICAgIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlNJR05fSU5fU1VDQ0VTU1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmluYWxTZXNzaW9uO1xuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHBlcmZvcm1TaWduSW4ocXVlcnlWYXJpYWJsZXNXaXRoVXNlcklucHV0KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuU0lHTl9JTl9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyVXNlclJlcXVlc3RDYWNoZXMoU3RyaW5nKCh1c2VyIGFzIGFueSk/LnVzZXJJZCB8fCAnJykpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaWduT3V0ID0gYXN5bmMgKHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgYXdhaXQgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uKGZsdXgpO1xuICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG4gICAgYXdhaXQgY2xlYXJVc2VyUmVxdWVzdENhY2hlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1TaWduVXAgPSBhc3luYyAoY29kZTogc3RyaW5nLCB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZTtcblxuICBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jICh1c2VybmFtZTogc3RyaW5nLCByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGxldCBmb3Jnb3RQYXNzd29yZFN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgdXNlcjoge1xuICAgICAgICB0eXBlOiAnVXNlcklucHV0IScsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgZW1haWw6IHVzZXJuYW1lLFxuICAgICAgICAgIHBob25lOiB1c2VybmFtZSxcbiAgICAgICAgICB1c2VybmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhPzogVXNlckFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uZm9yZ290UGFzc3dvcmQ7XG4gICAgICBmb3Jnb3RQYXNzd29yZFN1Y2NlZWRlZCA9IHN1Y2Nlc3M7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5GT1JHT1RfUEFTU1dPUkRfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLkZPUkdPVF9QQVNTV09SRF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGF3YWl0IHB1YmxpY011dGF0aW9uPFVzZXJBcGlSZXN1bHRzVHlwZT4oZmx1eCwgJ2ZvcmdvdFBhc3N3b3JkJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgW10sIHtvblN1Y2Nlc3N9KTtcblxuICAgIGlmKCFmb3Jnb3RQYXNzd29yZFN1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmb3Jnb3RfcGFzc3dvcmRfZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3Qgc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gYXN5bmMgKFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgZW1haWxPcHRpb25zOiBWZXJpZmljYXRpb25FbWFpbE9wdGlvbnMgPSB7fSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgIC4uLihlbWFpbE9wdGlvbnMuc3ViamVjdCA/IHt2ZXJpZmljYXRpb25FbWFpbFN1YmplY3Q6IGVtYWlsT3B0aW9ucy5zdWJqZWN0fSA6IHt9KSxcbiAgICAgICAgICAuLi4oZW1haWxPcHRpb25zLnRlbXBsYXRlID8ge3ZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGU6IGVtYWlsT3B0aW9ucy50ZW1wbGF0ZX0gOiB7fSksXG4gICAgICAgICAgLi4uKGVtYWlsT3B0aW9ucy50ZXh0ID8ge3ZlcmlmaWNhdGlvbkVtYWlsVGV4dDogZW1haWxPcHRpb25zLnRleHR9IDoge30pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE/OiBVc2VyQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIWRhdGE/LnVzZXJzPy5zZW5kVmVyaWZpY2F0aW9uRW1haWw7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5DT05GSVJNX1NJR05fVVBfU1VDQ0VTUyA6IFVTRVJfQ09OU1RBTlRTLkNPTkZJUk1fU0lHTl9VUF9FUlJPUlxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwdWJsaWNNdXRhdGlvbjxVc2VyQXBpUmVzdWx0c1R5cGU+KFxuICAgICAgZmx1eCxcbiAgICAgICdzZW5kVmVyaWZpY2F0aW9uRW1haWwnLFxuICAgICAgREFUQV9UWVBFLFxuICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICBbXSxcbiAgICAgIHtvblN1Y2Nlc3N9XG4gICAgKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gISFkYXRhPy51c2Vycz8uc2VuZFZlcmlmaWNhdGlvbkVtYWlsO1xuICAgICAgaWYoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZW5kX3ZlcmlmaWNhdGlvbl9lbWFpbF9mYWlsZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0UGFzc3dvcmQgPSBhc3luYyAoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgICB0eXBlOiAnZW1haWwnIHwgJ3Bob25lJyxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGNvZGU6IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogY29kZVxuICAgICAgfSxcbiAgICAgIHVzZXI6IHtcbiAgICAgICAgdHlwZTogJ1VzZXJJbnB1dCEnLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIC4uLih0eXBlID09PSAnZW1haWwnID8ge2VtYWlsOiB1c2VybmFtZX0gOiB7cGhvbmU6IHVzZXJuYW1lfSksXG4gICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YT86IFVzZXJBcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7XG4gICAgICAgIHR5cGU6IHN1Y2Nlc3MgPyBVU0VSX0NPTlNUQU5UUy5SRVNFVF9QQVNTV09SRF9TVUNDRVNTIDogVVNFUl9DT05TVEFOVFMuUkVTRVRfUEFTU1dPUkRfRVJST1JcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHVibGljTXV0YXRpb248VXNlckFwaVJlc3VsdHNUeXBlPihmbHV4LCAncmVzZXRQYXNzd29yZCcsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtdLCB7b25TdWNjZXNzfSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhZGF0YT8udXNlcnM/LnJlc2V0UGFzc3dvcmQ7XG4gICAgICBpZighc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jlc2V0X3Bhc3N3b3JkX2ZhaWxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBhc3luYyAocGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+ID0+XG4gICAgdHJ1ZVxuICA7XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRVc2VyLFxuICAgIGNvbmZpcm1Db2RlLFxuICAgIGNvbmZpcm1TaWduVXAsXG4gICAgY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyLFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIGRlbGV0ZUJpbGxpbmdDYXJkLFxuICAgIGxpc3QsXG4gICAgZm9yZ290UGFzc3dvcmQsXG4gICAgaXNMb2dnZWRJbixcbiAgICBpdGVtQnlJZCxcbiAgICBnZXRVc2VyQnlBdHRyaWJ1dGUsXG4gICAgbGlzdEJ5Q29ubmVjdGlvbixcbiAgICBsaXN0QnlMYXRlc3QsXG4gICAgbGlzdEJ5UmVhY3Rpb25zLFxuICAgIGxpc3RCeVRhZ3MsXG4gICAgcmVmcmVzaFNlc3Npb246IHJlZnJlc2hTZXNzaW9uQWN0aW9uLFxuICAgIHJlbW92ZSxcbiAgICByZXNldFBhc3N3b3JkLFxuICAgIHNhdmVCaWxsaW5nQ2FyZCxcbiAgICBzZWFyY2gsXG4gICAgc2VuZFZlcmlmaWNhdGlvbkVtYWlsLFxuICAgIHNlc3Npb24sXG4gICAgc2lnbkluLFxuICAgIHNpZ25PdXQsXG4gICAgc2lnblVwLFxuICAgIHVwZGF0ZVBhc3N3b3JkLFxuICAgIHVwZGF0ZVVzZXIsXG4gICAgdXBkYXRlUGxhbixcbiAgICB1cGRhdGVVc2VyQWRhcHRlcjogdXNlckJhc2UudXBkYXRlQWRhcHRlcixcbiAgICB1cGRhdGVVc2VyQWRhcHRlck9wdGlvbnM6IHVzZXJCYXNlLnVwZGF0ZU9wdGlvbnNcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsidmFsaWRhdGVVc2VySW5wdXQiLCJVU0VSX0NPTlNUQU5UUyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJwdWJsaWNNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicmVmcmVzaFNlc3Npb24iLCJjcmVhdGVCYXNlQWN0aW9ucyIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UiLCJpc0xvZ2dlZEluIiwiaXNMb2dnZWRJbldpdGhTdG9yYWdlIiwibm9ybWFsaXplU2Vzc2lvbiIsInN0b3JlU2Vzc2lvbiIsImdldENvbmZpZ0Zyb21GbHV4IiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24iLCJEQVRBX1RZUEUiLCJERUZBVUxUX1VTRVJfUVVFUllfRklFTERTIiwiU0VOU0lUSVZFX1VTRVJfRklFTERTIiwiU2V0IiwiSU5WQUxJRF9GSUVMRF9SRUdFWCIsImhhc1Nlc3Npb25JZGVudGl0eSIsInVzZXIiLCJfaWQiLCJ1c2VySWQiLCJ1c2VybmFtZSIsImVtYWlsIiwic2FuaXRpemVVcGRhdGVVc2VySW5wdXQiLCJ1c2VySW5wdXQiLCJjdXJyZW50U2Vzc2lvbiIsIm5leHRVc2VyIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsImZpZWxkIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJwYXNzd29yZCIsIlN0cmluZyIsInRyaW0iLCJjdXJyZW50VmFsdWUiLCJzeW5jU3RvcmVkU2Vzc2lvbiIsImZsdXgiLCJzZXNzaW9uUGF0Y2giLCJnZXRTdGF0ZSIsImdldFNlc3Npb25QYXlsb2FkIiwicGF5bG9hZCIsInNlc3Npb24iLCJnZXRGaWVsZFJvb3QiLCJ0cmltbWVkIiwibWF0Y2giLCJzYW5pdGl6ZVVzZXJQcm9wcyIsInByb3BzIiwiZmFsbGJhY2tQcm9wcyIsInNlZW4iLCJzYW5pdGl6ZWQiLCJsaXN0Iiwicm9vdCIsImhhcyIsImFkZCIsInB1c2giLCJsZW5ndGgiLCJnZXRJbnZhbGlkRmllbGRzIiwiZXJyb3IiLCJlcnJvcnMiLCJzb3VyY2UiLCJpbnZhbGlkRmllbGRzIiwiZm9yRWFjaCIsIml0ZW0iLCJtZXNzYWdlIiwiZXhlYyIsImxhc3RJbmRleCIsIndpdGhJbnZhbGlkRmllbGRSZXRyeSIsInJlcXVlc3RXaXRoUHJvcHMiLCJzYWZlUHJvcHMiLCJzaXplIiwicmV0cnlQcm9wcyIsImZpbHRlciIsImRlZmF1bHRVc2VyVmFsaWRhdG9yIiwiaW5wdXQiLCJvcHRpb25zIiwidmFsaWRhdGVkIiwic3RyaWN0IiwiRXJyb3IiLCJjcmVhdGVVc2VyQWN0aW9ucyIsInVzZXJCYXNlIiwiYWRhcHRlciIsInVzZXJBZGFwdGVyIiwiYWRhcHRlck9wdGlvbnMiLCJ1c2VyQWRhcHRlck9wdGlvbnMiLCJjbGVhclVzZXJSZXF1ZXN0Q2FjaGVzIiwiYWRkVXNlciIsInVzZXJQcm9wcyIsInJlcXVlc3RPcHRpb25zIiwicXVlcnlWYXJpYWJsZXMiLCJ0eXBlIiwib25TdWNjZXNzIiwiZGF0YSIsInVzZXJzIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwicmV0dXJuUHJvcHMiLCJzaWduVXAiLCJleHBpcmVzIiwiU0lHTl9VUF9TVUNDRVNTIiwiU0lHTl9VUF9FUlJPUiIsInVwZGF0ZVVzZXIiLCJ1cGRhdGVJbnB1dCIsImJpcnRoZGF0ZSIsImRvYiIsImZpcnN0TmFtZSIsImdlbmRlciIsImxhc3ROYW1lIiwibWFpbGluZ0xpc3QiLCJwaG9uZSIsImxlZ2FjeVVzZXIiLCJ1cGRhdGUiLCJ1cGRhdGVkVXNlciIsIlVQREFURV9JVEVNX1NVQ0NFU1MiLCJjb25maXJtQ29kZSIsImNvZGUiLCJjb25maXJtZWQiLCJDT05GSVJNX1NJR05fVVBfU1VDQ0VTUyIsInJlbW92ZSIsIlJFTU9WRV9JVEVNX1NVQ0NFU1MiLCJzZXNzaW9uUHJvcHMiLCJzZXNzaW9uRGF0YSIsImdldFVzZXJCeVNlc3Npb24iLCJHRVRfU0VTU0lPTl9FUlJPUiIsIm5leHRTZXNzaW9uIiwiR0VUX1NFU1NJT05fU1VDQ0VTUyIsInBlcnNvbmFJZCIsIml0ZW1CeUlkIiwiY2FjaGVkUmVzdWx0IiwiZ2V0VXNlckJ5SWQiLCJHRVRfSVRFTV9TVUNDRVNTIiwicmVzdWx0Iiwic2FmZVVzZXJQcm9wcyIsImdldFVzZXJCeUF0dHJpYnV0ZSIsImF0dHJpYnV0ZSIsIm5vcm1hbGl6ZWRBdHRyaWJ1dGUiLCJub3JtYWxpemVkVmFsdWUiLCJtYXRjaGluZ1VzZXIiLCJzYXZlQmlsbGluZ0NhcmQiLCJjYXJkIiwic2Vzc2lvblVzZXJJZCIsImRlbGV0ZUJpbGxpbmdDYXJkIiwidXBkYXRlUGxhbiIsInBsYW5JZCIsIm5leHRQbGFuSWQiLCJnZXRVc2VyTGlzdCIsIkdFVF9MSVNUX1NVQ0NFU1MiLCJsaXN0QnlMYXRlc3QiLCJmcm9tIiwidG8iLCJsaXN0QnlDb25uZWN0aW9uIiwibGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lcyIsInBlcnNvbmFQcm9wcyIsImxpc3RCeVRhZ3MiLCJ0YWdOYW1lcyIsInRhZ3MiLCJzZWFyY2giLCJxdWVyeSIsImN1cnJlbnRBdXRoZW50aWNhdGVkVXNlciIsImN1cnJlbnRVc2VyIiwicmVmcmVzaFNlc3Npb25BY3Rpb24iLCJ0b2tlbiIsInNpZ25JbiIsImxlZ2FjeVZhcmlhYmxlcyIsImNvbmZpZyIsInJlcXVlc3RlZEV4cGlyZXMiLCJNYXRoIiwibWF4IiwiTnVtYmVyIiwiYXBwIiwibWF4TWludXRlcyIsInF1ZXJ5VmFyaWFibGVzV2l0aFVzZXJJbnB1dCIsInN0b3JlZFNlc3Npb24iLCJTSUdOX0lOX1NVQ0NFU1MiLCJwZXJmb3JtU2lnbkluIiwic2Vzc2lvblJlc3VsdCIsImJhc2VTZXNzaW9uIiwiaHlkcmF0ZWRTZXNzaW9uIiwiZmFsbGJhY2tTZXNzaW9uIiwiZmluYWxTZXNzaW9uIiwiU0lHTl9JTl9FUlJPUiIsInNpZ25PdXQiLCJTSUdOX09VVF9TVUNDRVNTIiwiY29uZmlybVNpZ25VcCIsImZvcmdvdFBhc3N3b3JkIiwiZm9yZ290UGFzc3dvcmRTdWNjZWVkZWQiLCJzdWNjZXNzIiwiRk9SR09UX1BBU1NXT1JEX1NVQ0NFU1MiLCJGT1JHT1RfUEFTU1dPUkRfRVJST1IiLCJzZW5kVmVyaWZpY2F0aW9uRW1haWwiLCJlbWFpbE9wdGlvbnMiLCJzdWJqZWN0IiwidmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0IiwidGVtcGxhdGUiLCJ2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIiwidGV4dCIsInZlcmlmaWNhdGlvbkVtYWlsVGV4dCIsIkNPTkZJUk1fU0lHTl9VUF9FUlJPUiIsInRoZW4iLCJyZXNldFBhc3N3b3JkIiwiUkVTRVRfUEFTU1dPUkRfU1VDQ0VTUyIsIlJFU0VUX1BBU1NXT1JEX0VSUk9SIiwidXBkYXRlUGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsInVwZGF0ZVVzZXJBZGFwdGVyIiwidXBkYXRlQWRhcHRlciIsInVwZGF0ZVVzZXJBZGFwdGVyT3B0aW9ucyIsInVwZGF0ZU9wdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGlCQUFpQixRQUFPLDRDQUE0QztBQUM1RSxT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
|